Name: series-workflow6vsp2 Phase: Succeeded StartedAt: 2026-09-04 06:49:53 +0000 UTC FinishedAt: 2026-09-04 08:04:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsp2[0] Phase: Succeeded StartedAt: 2026-09-04 06:49:53 +0000 UTC FinishedAt: 2026-09-04 06:53:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsp2[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 06:49:53 +0000 UTC FinishedAt: 2026-09-04 06:53:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD" ], "series_id": "2d200572-88c8-4b7e-8932-2e9b9ccffe60" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "avic_vcpu_free", "svm_vcpu_create", "svm_vcpu_free" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXZpY192Y3B1X2ZyZWUmIzM0OywKICAgICYjMzQ7c3ZtX3ZjcHVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3N2bV92Y3B1X2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBhdmljX3ZjcHVfZnJlZSgpYCB0byBjbGVhciAoYFdSSVRFX09OQ0UoLi4uLCAwKWApIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIGBrdm1fc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGVgIHdoZW4gYSB2Q1BVIGlzIGZyZWVkIG9yIHdoZW4gdkNQVSBjcmVhdGlvbiBmYWlscyBhZnRlciBBVklDIGluaXRpYWxpemF0aW9uLiBUaGlzIHByZXZlbnRzIHN0YWxlL2RhbmdsaW5nIHJlZmVyZW5jZXMgdG8gZnJlZWQgYmFja2luZyBwYWdlcyBpbiB0aGUgcGh5c2ljYWwgSUQgdGFibGUuXG5cblRoZSBjaGFuZ2VzIG9ubHkgd3JpdGUgYSB6ZXJvIHZhbHVlIHRvIGFuIGV4aXN0aW5nIHRhYmxlIGFuZCBkbyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIHJlYWQgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsdGVyIGJvdW5kcyBjaGVja3MgZm9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgb3IgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBNZW1vcnkgbGlmZWN5Y2xlL2RhbmdsaW5nIHBvaW50ZXIgaXNzdWVzIGluIHRoaXMgY29udGV4dCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9tZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RvcnMgcmF0aGVyIHRoYW4gS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYXZpY192Y3B1X2ZyZWUoKSB0byBjbGVhciB0aGUgcGh5c2ljYWwgQVBJQyBJRCB0YWJsZSBlbnRyeSBvbiBTVk0gdkNQVSBjcmVhdGlvbiBmYWlsdXJlIGFuZCB2Q1BVIHRlYXJkb3duLiBUaGlzIG1vZGlmaWVzIGV4ZWN1dGFibGUgbGlmZWN5Y2xlIGNvZGUgaW4gS1ZNIEFNRCAoU1ZNKSwgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZSBvbiBhbWQ2NCB2aWEgS1ZNIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY3ZDE5YmQ0ZDM0YTEzYjM2MmNkZjY4NzZlNDI2NDk5NzcxZTNiZjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDA2OjUyOjM4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jIGIvYXJjaC94ODYva3ZtL3N2bS9hdmljLmNcbmluZGV4IDNiMDM3ZTM4NTUyMzQuLmJjMmM2OTkzODBiMzQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9hdmljLmNcbkBAIC04ODUsNiAmIzQzOzg4NSwxNiBAQCBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7dm9pZCBhdmljX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHR1MzIgbWF4X2lkID0geDJhdmljX2VuYWJsZWQgPyB4MmF2aWNfbWF4X3BoeXNpY2FsX2lkIDogQVZJQ19NQVhfUEhZU0lDQUxfSUQ7XG4mIzQzO1x0c3RydWN0IGt2bV9zdm0gKmt2bV9zdm0gPSB0b19rdm1fc3ZtKHZjcHUtXHUwMDNla3ZtKTtcbiYjNDM7XHR1MzIgaWQgPSB2Y3B1LVx1MDAzZXZjcHVfaWQ7XG4mIzQzO1xuJiM0MztcdGlmIChrdm1fc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGUgXHUwMDI2XHUwMDI2IGlkIFx1MDAzYz0gbWF4X2lkKVxuJiM0MztcdFx0V1JJVEVfT05DRShrdm1fc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGVbaWRdLCAwKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRhdmljX2hhbmRsZV9kZnJfdXBkYXRlKHZjcHUpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5pbmRleCBlYTY0NzkzOGEyYTY1Li5jMmEyYWU3ZDhlYzM0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuQEAgLTEzMzcsNyAmIzQzOzEzMzcsNyBAQCBzdGF0aWMgaW50IHN2bV92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdm0tXHUwMDNlbXNycG0gPSBzdm1fdmNwdV9hbGxvY19tc3JwbSgpO1xuIFx0aWYgKCFzdm0tXHUwMDNlbXNycG0pIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbi1cdFx0Z290byBlcnJvcl9mcmVlX3NldjtcbiYjNDM7XHRcdGdvdG8gZXJyb3JfZnJlZV9hdmljO1xuIFx0fVxuIFxuIFx0c3ZtLVx1MDAzZXgyYXZpY19tc3JzX2ludGVyY2VwdGVkID0gdHJ1ZTtcbkBAIC0xMzUxLDYgJiM0MzsxMzUxLDggQEAgc3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0cmV0dXJuIDA7XG4gXG4mIzQzO2Vycm9yX2ZyZWVfYXZpYzpcbiYjNDM7XHRhdmljX3ZjcHVfZnJlZSh2Y3B1KTtcbiBlcnJvcl9mcmVlX3NldjpcbiBcdHNldl9mcmVlX3ZjcHUodmNwdSk7XG4gZXJyb3JfZnJlZV92bWNiX3BhZ2U6XG5AQCAtMTM2NSw2ICYjNDM7MTM2Nyw4IEBAIHN0YXRpYyB2b2lkIHN2bV92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0KSk7XG4gXG4mIzQzO1x0YXZpY192Y3B1X2ZyZWUodmNwdSk7XG4mIzQzO1xuIFx0c3ZtX2xlYXZlX25lc3RlZCh2Y3B1KTtcbiBcdHN2bV9mcmVlX25lc3RlZChzdm0pO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5pbmRleCBlOTU4OTQzYjgxNjI3Li43OTBiZDk2YTk3OTEwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuQEAgLTk1NCw2ICYjNDM7OTU0LDcgQEAgdm9pZCBhdmljX2luaXRfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IHZtY2IgKnZtY2IpO1xuIGludCBhdmljX2luY29tcGxldGVfaXBpX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCBhdmljX3VuYWNjZWxlcmF0ZWRfYWNjZXNzX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCBhdmljX2luaXRfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XG4mIzQzO3ZvaWQgYXZpY192Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIGF2aWNfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSk7XG4gdm9pZCBhdmljX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBhdmljX2FwaWN2X3Bvc3Rfc3RhdGVfcmVzdG9yZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXZpY192Y3B1X2ZyZWUmIzM0OywKICAgICYjMzQ7c3ZtX3ZjcHVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3N2bV92Y3B1X2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhdmljX3ZjcHVfZnJlZSgpIHRvIGNsZWFyIHRoZSBwaHlzaWNhbCBBUElDIElEIHRhYmxlIGVudHJ5IG9uIFNWTSB2Q1BVIGNyZWF0aW9uIGZhaWx1cmUgYW5kIHZDUFUgdGVhcmRvd24uIFRoaXMgbW9kaWZpZXMgZXhlY3V0YWJsZSBsaWZlY3ljbGUgY29kZSBpbiBLVk0gQU1EIChTVk0pLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIGZ1enphYmxlIG9uIGFtZDY0IHZpYSBLVk0gaW9jdGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjdkMTliZDRkMzRhMTNiMzYyY2RmNjg3NmU0MjY0OTk3NzFlM2JmMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDY6NTI6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYyBiL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jCmluZGV4IDNiMDM3ZTM4NTUyMzQuLmJjMmM2OTkzODBiMzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jCkBAIC04ODUsNiAmIzQzOzg4NSwxNiBAQCBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3ZvaWQgYXZpY192Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJdTMyIG1heF9pZCA9IHgyYXZpY19lbmFibGVkID8geDJhdmljX21heF9waHlzaWNhbF9pZCA6IEFWSUNfTUFYX1BIWVNJQ0FMX0lEOwomIzQzOwlzdHJ1Y3Qga3ZtX3N2bSAqa3ZtX3N2bSA9IHRvX2t2bV9zdm0odmNwdS0mZ3Q7a3ZtKTsKJiM0MzsJdTMyIGlkID0gdmNwdS0mZ3Q7dmNwdV9pZDsKJiM0MzsKJiM0MzsJaWYgKGt2bV9zdm0tJmd0O2F2aWNfcGh5c2ljYWxfaWRfdGFibGUgJmFtcDsmYW1wOyBpZCAmbHQ7PSBtYXhfaWQpCiYjNDM7CQlXUklURV9PTkNFKGt2bV9zdm0tJmd0O2F2aWNfcGh5c2ljYWxfaWRfdGFibGVbaWRdLCAwKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlhdmljX2hhbmRsZV9kZnJfdXBkYXRlKHZjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKaW5kZXggZWE2NDc5MzhhMmE2NS4uYzJhMmFlN2Q4ZWMzNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCkBAIC0xMzM3LDcgJiM0MzsxMzM3LDcgQEAgc3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXN2bS0mZ3Q7bXNycG0gPSBzdm1fdmNwdV9hbGxvY19tc3JwbSgpOwogCWlmICghc3ZtLSZndDttc3JwbSkgewogCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX2ZyZWVfc2V2OwomIzQzOwkJZ290byBlcnJvcl9mcmVlX2F2aWM7CiAJfQogCiAJc3ZtLSZndDt4MmF2aWNfbXNyc19pbnRlcmNlcHRlZCA9IHRydWU7CkBAIC0xMzUxLDYgJiM0MzsxMzUxLDggQEAgc3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJcmV0dXJuIDA7CiAKJiM0MztlcnJvcl9mcmVlX2F2aWM6CiYjNDM7CWF2aWNfdmNwdV9mcmVlKHZjcHUpOwogZXJyb3JfZnJlZV9zZXY6CiAJc2V2X2ZyZWVfdmNwdSh2Y3B1KTsKIGVycm9yX2ZyZWVfdm1jYl9wYWdlOgpAQCAtMTM2NSw2ICYjNDM7MTM2Nyw4IEBAIHN0YXRpYyB2b2lkIHN2bV92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZhbXA7c3ZtLSZndDtpcl9saXN0KSk7CiAKJiM0MzsJYXZpY192Y3B1X2ZyZWUodmNwdSk7CiYjNDM7CiAJc3ZtX2xlYXZlX25lc3RlZCh2Y3B1KTsKIAlzdm1fZnJlZV9uZXN0ZWQoc3ZtKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaCBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgKaW5kZXggZTk1ODk0M2I4MTYyNy4uNzkwYmQ5NmE5NzkxMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oCkBAIC05NTQsNiAmIzQzOzk1NCw3IEBAIHZvaWQgYXZpY19pbml0X3ZtY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCB2bWNiICp2bWNiKTsKIGludCBhdmljX2luY29tcGxldGVfaXBpX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IGF2aWNfdW5hY2NlbGVyYXRlZF9hY2Nlc3NfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pOwomIzQzO3ZvaWQgYXZpY192Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQgYXZpY192Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKIHZvaWQgYXZpY192Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBhdmljX2FwaWN2X3Bvc3Rfc3RhdGVfcmVzdG9yZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzMxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgS1ZNL1NWTSBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgY2hhbmdlIEkmIzM5O20gbG9va2luZyBhdCBzZWVtcyB0byBiZSB0b3VjaGluZyB0aGUgQU1ENjQgYXJjaGl0ZWN0dXJlIEtWTS9TVk0gY29kZS4gVGhlIGtleSBmaWxlcyBhcmUgaW4gYGFyY2gveDg2L2t2bS9zdm0vYXZpYy5jYCwgYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmNgLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgaGVhZGVyLCBgYXJjaC94ODYva3ZtL3N2bS9zdm0uaGAuIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgZGV0YWlscyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9mIHRoaXMuCgpGaXJzdCwgSSYjMzk7bSBnb2luZyB0byBydW4gYSBgZ2l0IGdyZXBgIG9yIG1heWJlIGp1c3QgcmVhZCB0aGUgZmlsZSBkaXJlY3RseSBvbiBgYXJjaC94ODYva3ZtL3N2bS9hdmljLmNgIGFuZCBgYXJjaC94ODYva3ZtL3N2bS9zdm0uY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBxdWljayBvdmVydmlldyBvZiB3aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQgYW5kIHdoZXJlIHRoZSBjaGFuZ2VzIGFyZSBsb2NhdGVkIHdpdGhpbiB0aGUgbGFyZ2VyIGNvZGViYXNlLiBJIGV4cGVjdCB0aGlzIGluaXRpYWwgc3dlZXAgd2lsbCByZXZlYWwgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBhZmZlY3RlZCBieSB0aGUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODcwOlx0XHRpbnQgcmV0O1xuIDg3MTpcdFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gXHUwMDI2c3ZtLVx1MDAzZXZjcHU7XG4gODcyOlx0XG4gODczOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCk7XG4gODc0Olx0XHRyYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3RfbG9jayk7XG4gODc1Olx0XG4gODc2Olx0XHRpZiAoIWVuYWJsZV9hcGljdiB8fCAhaXJxY2hpcF9pbl9rZXJuZWwodmNwdS1cdTAwM2Vrdm0pKVxuIDg3NzpcdFx0XHRyZXR1cm4gMDtcbiA4Nzg6XHRcbiA4Nzk6XHRcdHJldCA9IGF2aWNfaW5pdF9iYWNraW5nX3BhZ2UodmNwdSk7XG4gODgwOlx0XHRpZiAocmV0KVxuIDg4MTpcdFx0XHRyZXR1cm4gcmV0O1xuIDg4MjpcdFxuIDg4MzpcdFx0c3ZtLVx1MDAzZWRmcl9yZWcgPSBBUElDX0RGUl9GTEFUO1xuIDg4NDpcdFxuIDg4NTpcdFx0cmV0dXJuIHJldDtcbiA4ODY6XHR9XG4gODg3Olx0XG4gODg4Olx0dm9pZCBhdmljX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gODg5Olx0e1xuIDg5MDpcdFx0dTMyIG1heF9pZCA9IHgyYXZpY19lbmFibGVkID8geDJhdmljX21heF9waHlzaWNhbF9pZCA6IEFWSUNfTUFYX1BIWVNJQ0FMX0lEO1xuIDg5MTpcdFx0c3RydWN0IGt2bV9zdm0gKmt2bV9zdm0gPSB0b19rdm1fc3ZtKHZjcHUtXHUwMDNla3ZtKTtcbiA4OTI6XHRcdHUzMiBpZCA9IHZjcHUtXHUwMDNldmNwdV9pZDtcbiA4OTM6XHRcbiA4OTQ6XHRcdGlmIChrdm1fc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGUgXHUwMDI2XHUwMDI2IGlkIFx1MDAzYz0gbWF4X2lkKVxuIDg5NTpcdFx0XHRXUklURV9PTkNFKGt2bV9zdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZVtpZF0sIDApO1xuIDg5NjpcdH1cbiA4OTc6XHRcbiA4OTg6XHR2b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiA4OTk6XHR7XG4gOTAwOlx0XHRhdmljX2hhbmRsZV9kZnJfdXBkYXRlKHZjcHUpO1xuIDkwMTpcdFx0YXZpY19oYW5kbGVfbGRyX3VwZGF0ZSh2Y3B1KTtcbiA5MDI6XHR9XG4gOTAzOlx0XG4gOTA0Olx0c3RhdGljIHZvaWQgc3ZtX2lyX2xpc3RfZGVsKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZClcbiA5MDU6XHR7XG4gOTA2Olx0XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBpcnFmZC1cdTAwM2VpcnFfYnlwYXNzX3ZjcHU7XG4gOTA3Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDkwODpcdFxuIDkwOTpcdFx0aWYgKCF2Y3B1KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NTMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIFNWTSBWQ1BVIExpZmVjeWNsZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIEFNRCBTZWN1cmUgVmlydHVhbCBNYWNoaW5lIChTVk0pIGltcGxlbWVudGF0aW9uIHdpdGhpbiBLVk0uIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbGlmZWN5Y2xlIG9mIGEgdmlydHVhbCBDUFUgKHZDUFUpIGluIHRoZSBTVk0gY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHZDUFVzIGFyZSBjcmVhdGVkIGFuZCBkZXN0cm95ZWQuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBvdmVyYWxsIHZpcnR1YWxpemF0aW9uIGZsb3cuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IHRoZSBgYXJjaC94ODYva3ZtL3N2bS9zdm0uY2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIHRoZSBgc3ZtX3ZjcHVfY3JlYXRlYCBhbmQgYHN2bV92Y3B1X2ZyZWVgIGZ1bmN0aW9ucy4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBhbmQgY2xlYW51cCBvZiBhbiBTVk0gdkNQVSB3aWxsIGJlIGhhbmRsZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmaW5lciBkZXRhaWxzIG9mIHRoZSBndWVzdCYjMzk7cyBleGVjdXRpb24uIEkmIzM5O2xsIHByb2JhYmx5IGJlIGxvb2tpbmcgZm9yIGRhdGEgc3RydWN0dXJlcyBhbmQgaW5pdGlhbGl6YXRpb24gY2FsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzIwOlx0XG4xMzIxOlx0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHZjcHVfc3ZtLCB2Y3B1KSAhPSAwKTtcbjEzMjI6XHRcdHN2bSA9IHRvX3N2bSh2Y3B1KTtcbjEzMjM6XHRcbjEzMjQ6XHRcdGVyciA9IC1FTk9NRU07XG4xMzI1Olx0XHR2bWNiMDFfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTtcbjEzMjY6XHRcdGlmICghdm1jYjAxX3BhZ2UpXG4xMzI3Olx0XHRcdGdvdG8gb3V0O1xuMTMyODpcdFxuMTMyOTpcdFx0ZXJyID0gc2V2X3ZjcHVfY3JlYXRlKHZjcHUpO1xuMTMzMDpcdFx0aWYgKGVycilcbjEzMzE6XHRcdFx0Z290byBlcnJvcl9mcmVlX3ZtY2JfcGFnZTtcbjEzMzI6XHRcbjEzMzM6XHRcdGVyciA9IGF2aWNfaW5pdF92Y3B1KHN2bSk7XG4xMzM0Olx0XHRpZiAoZXJyKVxuMTMzNTpcdFx0XHRnb3RvIGVycm9yX2ZyZWVfc2V2O1xuMTMzNjpcdFxuMTMzNzpcdFx0c3ZtLVx1MDAzZW1zcnBtID0gc3ZtX3ZjcHVfYWxsb2NfbXNycG0oKTtcbjEzMzg6XHRcdGlmICghc3ZtLVx1MDAzZW1zcnBtKSB7XG4xMzM5Olx0XHRcdGVyciA9IC1FTk9NRU07XG4xMzQwOlx0XHRcdGdvdG8gZXJyb3JfZnJlZV9hdmljO1xuMTM0MTpcdFx0fVxuMTM0MjpcdFxuMTM0MzpcdFx0c3ZtLVx1MDAzZXgyYXZpY19tc3JzX2ludGVyY2VwdGVkID0gdHJ1ZTtcbjEzNDQ6XHRcdHN2bS1cdTAwM2VsYnJfbXNyc19pbnRlcmNlcHRlZCA9IHRydWU7XG4xMzQ1Olx0XG4xMzQ2Olx0XHRzdm0tXHUwMDNldm1jYjAxLnB0ciA9IHBhZ2VfYWRkcmVzcyh2bWNiMDFfcGFnZSk7XG4xMzQ3Olx0XHRzdm0tXHUwMDNldm1jYjAxLnBhID0gX19zbWVfc2V0KHBhZ2VfdG9fcGZuKHZtY2IwMV9wYWdlKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4xMzQ4Olx0XHRzdm1fc3dpdGNoX3ZtY2Ioc3ZtLCBcdTAwMjZzdm0tXHUwMDNldm1jYjAxKTtcbjEzNDk6XHRcbjEzNTA6XHRcdHN2bS1cdTAwM2VndWVzdF9zdGF0ZV9sb2FkZWQgPSBmYWxzZTtcbjEzNTE6XHRcbjEzNTI6XHRcdHJldHVybiAwO1xuMTM1MzpcdFxuMTM1NDpcdGVycm9yX2ZyZWVfYXZpYzpcbjEzNTU6XHRcdGF2aWNfdmNwdV9mcmVlKHZjcHUpO1xuMTM1NjpcdGVycm9yX2ZyZWVfc2V2OlxuMTM1NzpcdFx0c2V2X2ZyZWVfdmNwdSh2Y3B1KTtcbjEzNTg6XHRlcnJvcl9mcmVlX3ZtY2JfcGFnZTpcbjEzNTk6XHRcdF9fZnJlZV9wYWdlKHZtY2IwMV9wYWdlKTtcbjEzNjA6XHRvdXQ6XG4xMzYxOlx0XHRyZXR1cm4gZXJyO1xuMTM2MjpcdH1cbjEzNjM6XHRcbjEzNjQ6XHRzdGF0aWMgdm9pZCBzdm1fdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbjEzNjU6XHR7XG4xMzY2Olx0XHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbjEzNjc6XHRcbjEzNjg6XHRcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCkpO1xuMTM2OTpcdFxuMTM3MDpcdFx0YXZpY192Y3B1X2ZyZWUodmNwdSk7XG4xMzcxOlx0XG4xMzcyOlx0XHRzdm1fbGVhdmVfbmVzdGVkKHZjcHUpO1xuMTM3MzpcdFx0c3ZtX2ZyZWVfbmVzdGVkKHN2bSk7XG4xMzc0Olx0XG4xMzc1Olx0XHRzZXZfZnJlZV92Y3B1KHZjcHUpO1xuMTM3NjpcdFxuMTM3NzpcdFx0X19mcmVlX3BhZ2UoX19zbWVfcGFfdG9fcGFnZShzdm0tXHUwMDNldm1jYjAxLnBhKSk7XG4xMzc4Olx0XHRzdm1fdmNwdV9mcmVlX21zcnBtKHN2bS1cdTAwM2Vtc3JwbSk7XG4xMzc5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MjEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS1ZNIFNWTSBhbmQgRnV6emluZyAtIEEgUXVpY2sgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGRlbHZlcyBpbnRvIHRoZSBLVk0gQU1EIFNWTSBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgYXJjaC94ODYva3ZtL3N2bS9gIGRpcmVjdG9yeS4gVGhhdCBpbW1lZGlhdGVseSBzY3JlYW1zIHZpcnR1YWxpemF0aW9uLCBhbmQgZm9yIHg4NiBMaW51eCwgS1ZNIGlzIHRoZSBnby10byBjb3JlIHN1YnN5c3RlbS4gSSBrbm93IGl0JiMzOTtzICpldmVyeXdoZXJlKiBvbiBBTUQgaGFyZHdhcmUsIGFuZCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc2NlbmFyaW9zIG9yIHJ1bm5pbmcgUUVNVSB3aXRoIEtWTS9TVk0gYXJlIGluY3JlZGlibHkgY29tbW9uLiBBbmQgb2YgY291cnNlLCB0aGF0IG1lYW5zIGl0JiMzOTtzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLCBhbmQgYSB3ZWxsLXVuZGVyc3Rvb2QgdGFyZ2V0IGF0IHRoYXQuIFN5emthbGxlciYjMzk7cyBLVk0gaW9jdGwgc3VwcG9ydCDigJMgYEtWTV9DUkVBVEVfVk1gLCBgS1ZNX0NSRUFURV9WQ1BVYCwgdGhlIHdob2xlIHN1aXRlIOKAkyBpcyBleGNlbGxlbnQuCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgY2FuIHdlIGFjdHVhbGx5IGZ1enogS1ZNIFNWTSBlZmZlY3RpdmVseSB0aHJvdWdoIFFFTVUgYW5kIHN5emthbGxlcj8gVGhlIGFuc3dlciwgdGhhbmtmdWxseSwgaXMgKnllcyouIEkmIzM5O20gY29uZmlkZW50IHN5emthbGxlciBoYXMgS1ZNIHdlbGwtY292ZXJlZCwgZnV6emluZyBleHRlbnNpdmVseSB0aHJvdWdoIGAvZGV2L2t2bWAuIFRoYXQmIzM5O3MgdGhlIGtleS4gTm93LCBiZWZvcmUgSSBnbyBkZWVwZXIgSSB3aWxsIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBLY29uZmlnIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIEtWTSBTVk0uIFRoYXQmIzM5O2xsIGdpdmUgbWUgYSBiYXNlbGluZSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBzcGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0FNRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NTUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byBLVk0gQ29uZmlndXJhdGlvbiBmb3IgQU1EKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgS1ZNIEFNRCBzdXBwb3J0IGlzIHN0cnVjdHVyZWQsIHNvIGxldCYjMzk7cyBqdW1wIHN0cmFpZ2h0IGludG8gYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJvdW5kIGBjb25maWcgS1ZNX0FNRGAuIFRoaXMgaXMgdGhlIHVzdWFsIHN0YXJ0aW5nIHBvaW50LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIG9wdGlvbiB0aWVzIGludG8gdGhlIHJlc3Qgb2YgdGhlIEtWTSBpbmZyYXN0cnVjdHVyZSBvbiB4ODYsIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5LCBhbmQgd2hhdCBzcGVjaWZpYyBmZWF0dXJlcyBhcmUgY29uZGl0aW9uYWxseSBlbmFibGVkIGJhc2VkIG9uIHdoZXRoZXIgYEtWTV9BTURgIGlzIGRlZmluZWQuIEFyZSB0aGVyZSBkaWZmZXJlbnQgZmVhdHVyZSBzZXRzIGJhc2VkIG9uIHRoZSBBTUQgcHJvY2Vzc29yPyBBcmUgdGhlcmUgYW55IHJlbGF0ZWQgZGVidWdnaW5nIG9wdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEkmIzM5O20gYW50aWNpcGF0aW5nIGZpbmRpbmcgdGhlIEFNRC1zcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBleHBvc2VkIHRvIHRoZSBoeXBlcnZpc29yLCBhbnkgcXVpcmtzLCBhbmQgaG93IHRob3NlIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUgS2NvbmZpZyBzeXN0ZW0uIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGxheSBvZiB0aGUgbGFuZCBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHRcdGhlbHBcbiAxNDE6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgbGF1bmNoaW5nIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpXG4gMTQyOlx0XHQgIGNvbmZpZGVudGlhbCBWTXMgb24gSW50ZWwgcHJvY2Vzc29ycy5cbiAxNDM6XHRcbiAxNDQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxNDU6XHRcbiAxNDY6XHRjb25maWcgS1ZNX0FNRFxuIDE0NzpcdFx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4gMTQ4Olx0XHRkZXBlbmRzIG9uIEtWTSBcdTAwMjZcdTAwMjYgKENQVV9TVVBfQU1EIHx8IENQVV9TVVBfSFlHT04pXG4gMTQ5Olx0XHRoZWxwXG4gMTUwOlx0XHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBBTUQgcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIHRoZSBBTUQtVlxuIDE1MTpcdFx0ICAoU1ZNKSBleHRlbnNpb25zLlxuIDE1MjpcdFxuIDE1MzpcdFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAxNTQ6XHRcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWFtZC5cbiAxNTU6XHRcbiAxNTY6XHRjb25maWcgS1ZNX0FNRF9TRVZcbiAxNTc6XHRcdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuIDE1ODpcdFx0ZGVmYXVsdCB5XG4gMTU5Olx0XHRkZXBlbmRzIG9uIEtWTV9BTUQgXHUwMDI2XHUwMDI2IFg4Nl82NFxuIDE2MDpcdFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX1NQX1BTUCBcdTAwMjZcdTAwMjYgIShLVk1fQU1EPXkgXHUwMDI2XHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pXG4gMTYxOlx0XHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cbiAxNjI6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuIDE2MzpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9DT05WRVJUXG4gMTY0Olx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1JFQ0xBSU1cbiAxNjU6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuIDE2NjpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuIDE2NzpcdFx0aGVscFxuIDE2ODpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgZW5jcnlwdGVkIFZNcyB3aGljaCB1c2UgU2VjdXJlXG4gMTY5Olx0XHQgIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSwgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMjgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNLUFNRCBEZXBlbmRlbmNpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHBvaW50cyB0byBgS1ZNX0FNRGAgaGF2aW5nIGRlcGVuZGVuY2llcy4gU3BlY2lmaWNhbGx5LCBpdCBuZWVkcyBgS1ZNYCwgYW5kIGl0IHJlcXVpcmVzIGVpdGhlciBgQ1BVX1NVUF9BTURgIG9yIGBDUFVfU1VQX0hZR09OYCB0byBiZSBwcmVzZW50LiBUaGF0IG1ha2VzIHNlbnNlLCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhcmNoaXRlY3R1cmUuIE5vdywgdG8gY29uZmlybSB0aGlzLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IE1ha2VmaWxlLiBMZXQmIzM5O3MgbmF2aWdhdGUgdG8gYGFyY2gveDg2L2t2bS9zdm0vTWFrZWZpbGVgIGFuZCBzZWUgd2hhdCB0aGUgYnVpbGQgc3lzdGVtIGhhcyB0byBzYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+dGhlIGZpbGUgZG9lcyBub3QgZXhpc3Q8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7dGhlIGZpbGUgZG9lcyBub3QgZXhpc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NTYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIEtWTSB4ODYgTWFrZWZpbGUqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGEgY3J1Y2lhbCBmaWxlOiBgYXJjaC94ODYva3ZtL01ha2VmaWxlYC4gSSYjMzk7bSBndWVzc2luZyB0aGF0IHdoYXRldmVyIEkmIzM5O20gdHJvdWJsZXNob290aW5nLCBvciB3aGF0ZXZlciBlbmhhbmNlbWVudCBJJiMzOTttIHdvcmtpbmcgb24sIGxpa2VseSBoYXMgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBjb3JlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZSBLVk0geDg2IG1vZHVsZS4gVGhpcyBNYWtlZmlsZSBpcyB3aGVyZSBhIGxvdCBvZiB0aGUgbWFnaWMgaGFwcGVucyDigJMgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkLCBjb21waWxhdGlvbiB0YXJnZXRzIGFyZSBzZXQgdXAsIGFuZCB1bHRpbWF0ZWx5LCB0aGUgS1ZNIGtlcm5lbCBtb2R1bGUgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGdldHMgYnVpbHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZmlsZSYjMzk7cyBsb2dpYyB0byBzZWUgd2hlcmUgbXkgY2hhbmdlcyBmaXQgaW4gb3Igd2hlcmUgdGhlIHByb2JsZW0gbGllcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N2bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjIyMCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuYXJjaC94ODYva3ZtL01ha2VmaWxlPTIyPWt2bS1pbnRlbC0kKENPTkZJR19LVk1fSU5URUxfVERYKVx0JiM0Mzs9IHZteC90ZHgub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlLTIzLVxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjI0Omt2bS1hbWQteVx0XHQmIzQzOz0gc3ZtL3N2bS5vIHN2bS92bWVudGVyLm8gc3ZtL3BtdS5vIHN2bS9uZXN0ZWQubyBzdm0vYXZpYy5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMjUtXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MjY6a3ZtLWFtZC0kKENPTkZJR19LVk1fQU1EX1NFVilcdCYjNDM7PSBzdm0vc2V2Lm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZToyNzprdm0tYW1kLSQoQ09ORklHX0tWTV9IWVBFUlYpXHQmIzQzOz0gc3ZtL2h5cGVydi5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMjgtXG4tLVxuYXJjaC94ODYva3ZtL01ha2VmaWxlPTMxPWt2bS1pbnRlbC15XHRcdCYjNDM7PSB2bXgvdm14X29uaHlwZXJ2Lm8gdm14L2h5cGVydl9ldm1jcy5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MzI6a3ZtLWFtZC15XHRcdCYjNDM7PSBzdm0vc3ZtX29uaHlwZXJ2Lm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0zMy1lbmRpZlxuLS1cbmFyY2gveDg2L2t2bS9NYWtlZmlsZT0zNz1vYmotJChDT05GSUdfS1ZNX0FNRClcdCYjNDM7PSBrdm0tYW1kLm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0zOC1cbmFyY2gveDg2L2t2bS9NYWtlZmlsZTozOTpBRkxBR1Nfc3ZtL3ZtZW50ZXIubyAgICA6PSAtaXF1b3RlICQob2JqKVxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjQwOiQob2JqKS9zdm0vdm1lbnRlci5vOiAkKG9iaikva3ZtLWFzbS1vZmZzZXRzLmhcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS00MS1cbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTM4NjM9c3RhdGljIGludCBjaGVja19kcl93cml0ZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM4ODktXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjM4OTA6c3RhdGljIGludCBjaGVja19zdm1lKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zODkxLXtcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM5MDEtXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjM5MDI6c3RhdGljIGludCBjaGVja19zdm1lX3BhKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zOTAzLXtcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM5MDgtXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjM5MDk6XHRyZXR1cm4gY2hlY2tfc3ZtZShjdHh0KTtcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzkxMC19XG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz00MDE0PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3Bjb2RlIGdyb3VwN19ybTNbXSA9IHtcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NDAxNTpcdERJUChTcmNOb25lIHwgUHJvdCB8IFByaXYsXHRcdHZtcnVuLFx0XHRjaGVja19zdm1lX3BhKSxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNDAxNi1cdElJKFNyY05vbmUgIHwgUHJvdCB8IEVtdWxhdGVPblVELFx0ZW1faHlwZXJjYWxsLFx0dm1tY2FsbCksXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjQwMTc6XHRESVAoU3JjTm9uZSB8IFByb3QgfCBQcml2LFx0XHR2bWxvYWQsXHRcdGNoZWNrX3N2bWVfcGEpLFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo0MDE4Olx0RElQKFNyY05vbmUgfCBQcm90IHwgUHJpdixcdFx0dm1zYXZlLFx0XHRjaGVja19zdm1lX3BhKSxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NDAxOTpcdERJUChTcmNOb25lIHwgUHJvdCB8IFByaXYsXHRcdHN0Z2ksXHRcdGNoZWNrX3N2bWUpLFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo0MDIwOlx0RElQKFNyY05vbmUgfCBQcm90IHwgUHJpdixcdFx0Y2xnaSxcdFx0Y2hlY2tfc3ZtZSksXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjQwMjE6XHRESVAoU3JjTm9uZSB8IFByb3QgfCBQcml2LFx0XHRza2luaXQsXHRcdGNoZWNrX3N2bWUpLFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo0MDIyOlx0RElQKFNyY05vbmUgfCBQcm90IHwgUHJpdixcdFx0aW52bHBnYSxcdGNoZWNrX3N2bWUpLFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00MDIzLX07XG4tLVxuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jLTEwLSNpbmNsdWRlIFwmIzM0O3ZteC92bXguaFwmIzM0O1xuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jOjExOiNpbmNsdWRlIFwmIzM0O3N2bS9zdm0uaFwmIzM0O1xuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jLTEyLVxuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jPTEzPXN0YXRpYyB2b2lkIF9fdXNlZCBjb21tb24odm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0va3ZtLWFzbS1vZmZzZXRzLmMtMTYtXHRcdEJMQU5LKCk7XG5hcmNoL3g4Ni9rdm0va3ZtLWFzbS1vZmZzZXRzLmM6MTc6XHRcdE9GRlNFVChTVk1fdmNwdV9hcmNoX3JlZ3MsIHZjcHVfc3ZtLCB2Y3B1LmFyY2gucmVncyk7XG5hcmNoL3g4Ni9rdm0va3ZtLWFzbS1vZmZzZXRzLmM6MTg6XHRcdE9GRlNFVChTVk1fY3VycmVudF92bWNiLCB2Y3B1X3N2bSwgY3VycmVudF92bWNiKTtcbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYzoxOTpcdFx0T0ZGU0VUKFNWTV9zcGVjX2N0cmwsIHZjcHVfc3ZtLCBzcGVjX2N0cmwpO1xuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jOjIwOlx0XHRPRkZTRVQoU1ZNX3ZtY2IwMSwgdmNwdV9zdm0sIHZtY2IwMSk7XG5hcmNoL3g4Ni9rdm0va3ZtLWFzbS1vZmZzZXRzLmMtMjEtXHRcdE9GRlNFVChLVk1fVk1DQl9wYSwga3ZtX3ZtY2JfaW5mbywgcGEpO1xuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jOjIyOlx0XHRPRkZTRVQoU0Rfc2F2ZV9hcmVhX3BhLCBzdm1fY3B1X2RhdGEsIHNhdmVfYXJlYV9wYSk7XG5hcmNoL3g4Ni9rdm0va3ZtLWFzbS1vZmZzZXRzLmMtMjMtXHR9XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OC0jaW5jbHVkZSBcdTAwM2Nhc20vc3BlYy1jdHJsLmhcdTAwM2VcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTk6I2luY2x1ZGUgXHUwMDNjYXNtL3N2bS5oXHUwMDNlXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYwLSNpbmNsdWRlIFx1MDAzY2FzbS92bXguaFx1MDAzZVxuLS1cbmFyY2gveDg2L2t2bS9yZWdzLmg9MzEzPXN0YXRpYyBpbmxpbmUgdTY0IGt2bV9wZHB0cl9yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGluZGV4KVxuYXJjaC94ODYva3ZtL3JlZ3MuaC0zMTQte1xuYXJjaC94ODYva3ZtL3JlZ3MuaDozMTU6XHRtaWdodF9zbGVlcCgpOyAgLyogb24gc3ZtICovXG5hcmNoL3g4Ni9rdm0vcmVncy5oLTMxNi1cbi0tXG5hcmNoL3g4Ni9rdm0vc21tLmM9MTg9c3RhdGljIHZvaWQgY2hlY2tfc21yYW1fb2Zmc2V0cyh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS9zbW0uYy04Mi1cdENIRUNLX1NNUkFNNjRfT0ZGU0VUKGVmZXIsXHRcdFx0MHhGRUQwKTtcbmFyY2gveDg2L2t2bS9zbW0uYzo4MzpcdENIRUNLX1NNUkFNNjRfT0ZGU0VUKHN2bV9ndWVzdF9mbGFnLFx0XHQweEZFRDgpO1xuYXJjaC94ODYva3ZtL3NtbS5jOjg0Olx0Q0hFQ0tfU01SQU02NF9PRkZTRVQoc3ZtX2d1ZXN0X3ZtY2JfZ3BhLFx0MHhGRUUwKTtcbmFyY2gveDg2L2t2bS9zbW0uYzo4NTpcdENIRUNLX1NNUkFNNjRfT0ZGU0VUKHN2bV9ndWVzdF92aXJ0dWFsX2ludCxcdDB4RkVFOCk7XG5hcmNoL3g4Ni9rdm0vc21tLmMtODYtXHRDSEVDS19TTVJBTTY0X09GRlNFVChyZXNlcnZlZDMsXHRcdFx0MHhGRUYwKTtcbi0tXG5hcmNoL3g4Ni9rdm0vc21tLmMtOTAtXHRDSEVDS19TTVJBTTY0X09GRlNFVChzc3AsXHRcdFx0MHhGRjE4KTtcbmFyY2gveDg2L2t2bS9zbW0uYzo5MTpcdENIRUNLX1NNUkFNNjRfT0ZGU0VUKHN2bV9ndWVzdF9wYXQsXHRcdDB4RkYyMCk7XG5hcmNoL3g4Ni9rdm0vc21tLmM6OTI6XHRDSEVDS19TTVJBTTY0X09GRlNFVChzdm1faG9zdF9lZmVyLFx0XHQweEZGMjgpO1xuYXJjaC94ODYva3ZtL3NtbS5jOjkzOlx0Q0hFQ0tfU01SQU02NF9PRkZTRVQoc3ZtX2hvc3RfY3I0LFx0XHQweEZGMzApO1xuYXJjaC94ODYva3ZtL3NtbS5jOjk0Olx0Q0hFQ0tfU01SQU02NF9PRkZTRVQoc3ZtX2hvc3RfY3IzLFx0XHQweEZGMzgpO1xuYXJjaC94ODYva3ZtL3NtbS5jOjk1Olx0Q0hFQ0tfU01SQU02NF9PRkZTRVQoc3ZtX2hvc3RfY3IwLFx0XHQweEZGNDApO1xuYXJjaC94ODYva3ZtL3NtbS5jLTk2LVx0Q0hFQ0tfU01SQU02NF9PRkZTRVQoY3I0LFx0XHRcdDB4RkY0OCk7XG4tLVxuYXJjaC94ODYva3ZtL3NtbS5oPTc4PXN0cnVjdCBrdm1fc21yYW1fc3RhdGVfNjQge1xuLS1cbmFyY2gveDg2L2t2bS9zbW0uaC0xMDktXHQgKi9cbmFyY2gveDg2L2t2bS9zbW0uaDoxMTA6XHR1NjQgc3ZtX2d1ZXN0X2ZsYWc7XG5hcmNoL3g4Ni9rdm0vc21tLmg6MTExOlx0dTY0IHN2bV9ndWVzdF92bWNiX2dwYTtcbmFyY2gveDg2L2t2bS9zbW0uaDoxMTI6XHR1NjQgc3ZtX2d1ZXN0X3ZpcnR1YWxfaW50OyAvKiB1bmtub3duIHB1cnBvc2UsIG5vdCBpbXBsZW1lbnRlZCAqL1xuYXJjaC94ODYva3ZtL3NtbS5oLTExMy1cbi0tXG5hcmNoL3g4Ni9rdm0vc21tLmgtMTE5LVx0dTY0IHNzcDtcbmFyY2gveDg2L2t2bS9zbW0uaDoxMjA6XHQvKiBzdm1fKiBmaWVsZHMgYmVsb3cgYXJlIG5vdCBpbXBsZW1lbnRlZCBieSBLVk0gKi9cbmFyY2gveDg2L2t2bS9zbW0uaDoxMjE6XHR1NjQgc3ZtX2d1ZXN0X3BhdDtcbmFyY2gveDg2L2t2bS9zbW0uaDoxMjI6XHR1NjQgc3ZtX2hvc3RfZWZlcjtcbmFyY2gveDg2L2t2bS9zbW0uaDoxMjM6XHR1NjQgc3ZtX2hvc3RfY3I0O1xuYXJjaC94ODYva3ZtL3NtbS5oOjEyNDpcdHU2NCBzdm1faG9zdF9jcjM7XG5hcmNoL3g4Ni9rdm0vc21tLmg6MTI1Olx0dTY0IHN2bV9ob3N0X2NyMDtcbmFyY2gveDg2L2t2bS9zbW0uaC0xMjYtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzAtI2luY2x1ZGUgXCYjMzQ7aXJxLmhcJiMzNDtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjMxOiNpbmNsdWRlIFwmIzM0O3N2bS5oXCYjMzQ7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zMi1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0xMDc9bW9kdWxlX3BhcmFtX3Vuc2FmZShmb3JjZV9hdmljLCBib29sLCAwNDQ0KTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDktLyogTm90ZTpcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjExMDogKiBUaGlzIGhhc2ggdGFibGUgaXMgdXNlZCB0byBtYXAgVk1fSUQgdG8gYSBzdHJ1Y3Qga3ZtX3N2bSxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTExMS0gKiB3aGVuIGhhbmRsaW5nIEFNRCBJT01NVSBHQUxPRyBub3RpZmljYXRpb24gdG8gc2NoZWR1bGUgaW5cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMTQtI2RlZmluZSBTVk1fVk1fREFUQV9IQVNIX0JJVFNcdDhcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjExNTpzdGF0aWMgREVGSU5FX0hBU0hUQUJMRShzdm1fdm1fZGF0YV9oYXNoLCBTVk1fVk1fREFUQV9IQVNIX0JJVFMpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTE2LXN0YXRpYyB1MzIgbmV4dF92bV9pZCA9IDA7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0xMTc9c3RhdGljIGJvb2wgbmV4dF92bV9pZF93cmFwcGVkID0gMDtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjExODpzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHN2bV92bV9kYXRhX2hhc2hfbG9jayk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMTktc3RhdGljIGJvb2wgeDJhdmljX2VuYWJsZWQ7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0xMjA9c3RhdGljIHUzMiB4MmF2aWNfbWF4X3BoeXNpY2FsX2lkO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTIxLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTIyOnN0YXRpYyB2b2lkIGF2aWNfc2V0X3gyYXBpY19tc3JfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTIzLVx0XHRcdFx0XHQgICAgIGJvb2wgaW50ZXJjZXB0KVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTI0LXtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEyNTpcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IFx1MDAyNnN2bS1cdTAwM2V2Y3B1O1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTI2LVx0dTY0IHJkX3JlZ3M7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTI4LVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTI5Olx0aWYgKGludGVyY2VwdCA9PSBzdm0tXHUwMDNleDJhdmljX21zcnNfaW50ZXJjZXB0ZWQpXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMzAtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMzctXHRmb3JfZWFjaF9zZXRfYml0KGksICh1bnNpZ25lZCBsb25nICopXHUwMDI2cmRfcmVncywgQklUU19QRVJfVFlQRShyZF9yZWdzKSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEzODpcdFx0c3ZtX3NldF9pbnRlcmNlcHRfZm9yX21zcih2Y3B1LCBBUElDX0JBU0VfTVNSICYjNDM7IGksXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMzktXHRcdFx0XHRcdCAgTVNSX1RZUEVfUiwgaW50ZXJjZXB0KTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTE0MC1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjE0MTpcdHN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgWDJBUElDX01TUihBUElDX1RBU0tQUkkpLCBNU1JfVFlQRV9XLCBpbnRlcmNlcHQpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTQyOlx0c3ZtX3NldF9pbnRlcmNlcHRfZm9yX21zcih2Y3B1LCBYMkFQSUNfTVNSKEFQSUNfRU9JKSwgTVNSX1RZUEVfVywgaW50ZXJjZXB0KTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjE0MzpcdHN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgWDJBUElDX01TUihBUElDX1NFTEZfSVBJKSwgTVNSX1RZUEVfVywgaW50ZXJjZXB0KTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjE0NDpcdHN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgWDJBUElDX01TUihBUElDX0lDUiksIE1TUl9UWVBFX1csIGludGVyY2VwdCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xNDUtXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxNDY6XHRzdm0tXHUwMDNleDJhdmljX21zcnNfaW50ZXJjZXB0ZWQgPSBpbnRlcmNlcHQ7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xNDctfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTE2OT1zdGF0aWMgdTMyIGF2aWNfZ2V0X21heF9waHlzaWNhbF9pZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTczLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTc0OnN0YXRpYyB2b2lkIGF2aWNfYWN0aXZhdGVfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTE3NS17XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxNzY6XHRzdHJ1Y3Qgdm1jYiAqdm1jYiA9IHN2bS1cdTAwM2V2bWNiMDEucHRyO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTc3Olx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gXHUwMDI2c3ZtLVx1MDAzZXZjcHU7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xNzgtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTgzLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTg0Olx0c3ZtX2Nscl9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfQ1I4X1dSSVRFKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTE4NS1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yMTItXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjIxMzpcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0hfQ1VSUkVOVCwgXHUwMDI2c3ZtLVx1MDAzZXZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjE0LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTIyMS1cdCAqL1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MjIyOlx0aWYgKHgyYXZpY19lbmFibGVkIFx1MDAyNlx1MDAyNiBhcGljX3gyYXBpY19tb2RlKHN2bS1cdTAwM2V2Y3B1LmFyY2guYXBpYykpIHtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTIyMy1cdFx0dm1jYi1cdTAwM2Vjb250cm9sLmludF9jdGwgfD0gWDJBUElDX01PREVfTUFTSztcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yMjUtXHRcdC8qIERpc2FibGluZyBNU1IgaW50ZXJjZXB0IGZvciB4MkFQSUMgcmVnaXN0ZXJzICovXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyMjY6XHRcdGF2aWNfc2V0X3gyYXBpY19tc3JfaW50ZXJjZXB0aW9uKHN2bSwgZmFsc2UpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjI3LVx0fSBlbHNlIHtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTIyOC1cdFx0LyogRW5hYmxpbmcgTVNSIGludGVyY2VwdCBmb3IgeDJBUElDIHJlZ2lzdGVycyAqL1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MjI5Olx0XHRhdmljX3NldF94MmFwaWNfbXNyX2ludGVyY2VwdGlvbihzdm0sIHRydWUpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjMwLVx0fVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTIzMi1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjIzMzpzdGF0aWMgdm9pZCBhdmljX2RlYWN0aXZhdGVfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTIzNC17XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyMzU6XHRzdHJ1Y3Qgdm1jYiAqdm1jYiA9IHN2bS1cdTAwM2V2bWNiMDEucHRyO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjM2LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTIzOS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjI0MDpcdGlmICghaXNfc2V2X2VzX2d1ZXN0KFx1MDAyNnN2bS1cdTAwM2V2Y3B1KSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjI0MTpcdFx0c3ZtX3NldF9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfQ1I4X1dSSVRFKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI0Mi1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI0My1cdC8qIEVuYWJsaW5nIE1TUiBpbnRlcmNlcHQgZm9yIHgyQVBJQyByZWdpc3RlcnMgKi9cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjI0NDpcdGF2aWNfc2V0X3gyYXBpY19tc3JfaW50ZXJjZXB0aW9uKHN2bSwgdHJ1ZSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yNDUtfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTI1MT1zdGF0aWMgaW50IGF2aWNfZ2FfbG9nX25vdGlmaWVyKHUzMiBnYV90YWcpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjUzLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjI1NDpcdHN0cnVjdCBrdm1fc3ZtICprdm1fc3ZtO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjU1LVx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gTlVMTDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yNjEtXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyNjI6XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzdm1fdm1fZGF0YV9oYXNoX2xvY2ssIGZsYWdzKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjI2MzpcdGhhc2hfZm9yX2VhY2hfcG9zc2libGUoc3ZtX3ZtX2RhdGFfaGFzaCwga3ZtX3N2bSwgaG5vZGUsIHZtX2lkKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyNjQ6XHRcdGlmIChrdm1fc3ZtLVx1MDAzZWF2aWNfdm1faWQgIT0gdm1faWQpXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yNjUtXHRcdFx0Y29udGludWU7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyNjY6XHRcdHZjcHUgPSBrdm1fZ2V0X3ZjcHUoXHUwMDI2a3ZtX3N2bS1cdTAwM2Vrdm0sIHZjcHVfaWR4KTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI2Ny1cdFx0YnJlYWs7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yNjgtXHR9XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyNjk6XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnN2bV92bV9kYXRhX2hhc2hfbG9jaywgZmxhZ3MpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjcwLVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTI4OD1zdGF0aWMgaW50IGF2aWNfYWxsb2NfcGh5c2ljYWxfaWRfdGFibGUoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjg5LXtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjI5MDpcdHN0cnVjdCBrdm1fc3ZtICprdm1fc3ZtID0gdG9fa3ZtX3N2bShrdm0pO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjkxLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MjkyOlx0aWYgKGt2bV9zdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI5My1cdFx0cmV0dXJuIDA7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yOTQtXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyOTU6XHRrdm1fc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGUgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI5Ni1cdFx0XHRcdFx0XHRcdFx0ICAgYXZpY19nZXRfcGh5c2ljYWxfaWRfdGFibGVfb3JkZXIoa3ZtKSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyOTc6XHRpZiAoIWt2bV9zdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI5OC1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9MzAzPXN0YXRpYyBpbnQgYXZpY19hbGxvY19sb2dpY2FsX2lkX3RhYmxlKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTMwNC17XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozMDU6XHRzdHJ1Y3Qga3ZtX3N2bSAqa3ZtX3N2bSA9IHRvX2t2bV9zdm0oa3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTMwNi1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjMwNzpcdGlmIChrdm1fc3ZtLVx1MDAzZWF2aWNfbG9naWNhbF9pZF90YWJsZSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTMwOC1cdFx0cmV0dXJuIDA7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zMDktXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozMTA6XHRrdm1fc3ZtLVx1MDAzZWF2aWNfbG9naWNhbF9pZF90YWJsZSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozMTE6XHRpZiAoIWt2bV9zdm0tXHUwMDNlYXZpY19sb2dpY2FsX2lkX3RhYmxlKVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzEyLVx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0zMTc9c3RhdGljIHZvaWQgYXZpY19hZGRfdm1fdG9fZ2FfbG9nX2xpc3Qoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzE4LXtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjMxOTpcdHN0cnVjdCBrdm1fc3ZtICprdm1fc3ZtID0gdG9fa3ZtX3N2bShrdm0pO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MzIwOlx0c3RydWN0IGt2bV9zdm0gKmsyO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzIxLVx0dTMyIHZtX2lkO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTMyNC1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjMyNTpcdGlmIChrdm1fc3ZtLVx1MDAzZWF2aWNfdm1faWQpXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zMjYtXHRcdHJldHVybjtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTMyNy1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjMyODpcdGd1YXJkKHNwaW5sb2NrX2lycXNhdmUpKFx1MDAyNnN2bV92bV9kYXRhX2hhc2hfbG9jayk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zMjktIGFnYWluOlxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTMzNi1cdGlmIChuZXh0X3ZtX2lkX3dyYXBwZWQpIHtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjMzNzpcdFx0aGFzaF9mb3JfZWFjaF9wb3NzaWJsZShzdm1fdm1fZGF0YV9oYXNoLCBrMiwgaG5vZGUsIHZtX2lkKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zMzgtXHRcdFx0aWYgKGsyLVx1MDAzZWF2aWNfdm1faWQgPT0gdm1faWQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzQxLVx0fVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MzQyOlx0a3ZtX3N2bS1cdTAwM2VhdmljX3ZtX2lkID0gdm1faWQ7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozNDM6XHRoYXNoX2FkZChzdm1fdm1fZGF0YV9oYXNoLCBcdTAwMjZrdm1fc3ZtLVx1MDAzZWhub2RlLCBrdm1fc3ZtLVx1MDAzZWF2aWNfdm1faWQpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzQ0LX1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0zNjk9dm9pZCBhdmljX3ZtX3ByZV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM3MC17XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozNzE6XHRzdHJ1Y3Qga3ZtX3N2bSAqa3ZtX3N2bSA9IHRvX2t2bV9zdm0oa3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM3Mi1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjM3MzpcdGlmIChXQVJOX09OX09OQ0UoIWVuYWJsZV9hcGljdikgfHwgIWt2bV9zdm0tXHUwMDNlYXZpY192bV9pZClcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM3NC1cdFx0cmV0dXJuO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzc1LVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6Mzc2Olx0Z3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSkoXHUwMDI2c3ZtX3ZtX2RhdGFfaGFzaF9sb2NrKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM3Ny1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjM3ODpcdGhhc2hfZGVsKFx1MDAyNmt2bV9zdm0tXHUwMDNlaG5vZGUpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzc5LX1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0zODE9dm9pZCBhdmljX3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzgyLXtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjM4MzpcdHN0cnVjdCBrdm1fc3ZtICprdm1fc3ZtID0gdG9fa3ZtX3N2bShrdm0pO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzg0LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM4Ny1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjM4ODpcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylrdm1fc3ZtLVx1MDAzZWF2aWNfbG9naWNhbF9pZF90YWJsZSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozODk6XHRmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWt2bV9zdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZSxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM5MC1cdFx0ICAgYXZpY19nZXRfcGh5c2ljYWxfaWRfdGFibGVfb3JkZXIoa3ZtKSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzkyLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MzkzOnN0YXRpYyBwaHlzX2FkZHJfdCBhdmljX2dldF9iYWNraW5nX3BhZ2VfYWRkcmVzcyhzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM5NC17XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozOTU6XHRyZXR1cm4gX19zbWVfc2V0KF9fcGEoc3ZtLVx1MDAzZXZjcHUuYXJjaC5hcGljLVx1MDAzZXJlZ3MpKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM5Ni19XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zOTctXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozOTg6dm9pZCBhdmljX2luaXRfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IHZtY2IgKnZtY2IpXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zOTkte1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NDAwOlx0c3RydWN0IGt2bV9zdm0gKmt2bV9zdm0gPSB0b19rdm1fc3ZtKHN2bS1cdTAwM2V2Y3B1Lmt2bSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy00MDEtXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo0MDI6XHR2bWNiLVx1MDAzZWNvbnRyb2wuYXZpY19iYWNraW5nX3BhZ2UgPSBhdmljX2dldF9iYWNraW5nX3BhZ2VfYWRkcmVzcyhzdm0pO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NDAzOlx0dm1jYi1cdTAwM2Vjb250cm9sLmF2aWNfbG9naWNhbF9pZCA9IF9fc21lX3NldChfX3BhKGt2bV9zdm0tXHUwMDNlYXZpY19sb2dpY2FsX2lkX3RhYmxlKSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo0MDQ6XHR2bWNiLVx1MDAzZWNvbnRyb2wuYXZpY19waHlzaWNhbF9pZCA9IF9fc21lX3NldChfX3BhKGt2bV9zdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZSkpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDA1LVx0dm1jYi1cdTAwM2Vjb250cm9sLmF2aWNfdmFwaWNfYmFyID0gQVBJQ19ERUZBVUxUX1BIWVNfQkFTRTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTQwNi1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjQwNzpcdGlmIChrdm1fdmNwdV9hcGljdl9hY3RpdmUoXHUwMDI2c3ZtLVx1MDAzZXZjcHUpKVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NDA4Olx0XHRhdmljX2FjdGl2YXRlX3ZtY2Ioc3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTQwOS1cdGVsc2VcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjQxMDpcdFx0YXZpY19kZWFjdGl2YXRlX3ZtY2Ioc3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTQxMS19XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9NDEzPXN0YXRpYyBpbnQgYXZpY19pbml0X2JhY2tpbmdfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDE1LVx0dTMyIG1heF9pZCA9IHgyYXZpY19lbmFibGVkID8geDJhdmljX21heF9waHlzaWNhbF9pZCA6IEFWSUNfTUFYX1BIWVNJQ0FMX0lEO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NDE2Olx0c3RydWN0IGt2bV9zdm0gKmt2bV9zdm0gPSB0b19rdm1fc3ZtKHZjcHUtXHUwMDNla3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjQxNzpcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDE4LVx0dTMyIGlkID0gdmNwdS1cdTAwM2V2Y3B1X2lkO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTQ1OC1cdC8qIFNldHRpbmcgQVZJQyBiYWNraW5nIHBhZ2UgYWRkcmVzcyBpbiB0aGUgcGh5IEFQSUMgSUQgdGFibGUgKi9cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjQ1OTpcdG5ld19lbnRyeSA9IGF2aWNfZ2V0X2JhY2tpbmdfcGFnZV9hZGRyZXNzKHN2bSkgfFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDYwLVx0XHQgICAgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9WQUxJRF9NQVNLO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NDYxOlx0c3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfZW50cnkgPSBuZXdfZW50cnk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy00NjItXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDY3LVx0ICovXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo0Njg6XHRXUklURV9PTkNFKGt2bV9zdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZVtpZF0sIG5ld19lbnRyeSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy00NjktXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9NDkyPXN0YXRpYyB2b2lkIGF2aWNfa2lja192Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGljcmwpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDk0LVx0dmNwdS1cdTAwM2VhcmNoLmFwaWMtXHUwMDNlaXJyX3BlbmRpbmcgPSB0cnVlO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NDk1Olx0c3ZtX2NvbXBsZXRlX2ludGVycnVwdF9kZWxpdmVyeSh2Y3B1LFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDk2LVx0XHRcdFx0XHRpY3JsIFx1MDAyNiBBUElDX01PREVfTUFTSyxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz01NDk9c3RhdGljIGludCBhdmljX2tpY2tfdGFyZ2V0X3ZjcHVzX2Zhc3Qoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2xhcGljICpzb3VyY2UsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNTUzLVx0aW50IHNob3J0aGFuZCA9IGljcmwgXHUwMDI2IEFQSUNfU0hPUlRfTUFTSztcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjU1NDpcdHN0cnVjdCBrdm1fc3ZtICprdm1fc3ZtID0gdG9fa3ZtX3N2bShrdm0pO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNTU1LVx0dTMyIGRlc3Q7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNjAxLVx0XHRlbHNlXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo2MDI6XHRcdFx0YXZpY19sb2dpY2FsX2lkX3RhYmxlID0ga3ZtX3N2bS1cdTAwM2VhdmljX2xvZ2ljYWxfaWRfdGFibGU7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy02MDMtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9NjQyPWludCBhdmljX2luY29tcGxldGVfaXBpX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy02NDMte1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NjQ0Olx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo2NDU6XHR1MzIgaWNyaCA9IHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXhpdF9pbmZvXzEgXHUwMDNlXHUwMDNlIDMyO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NjQ2Olx0dTMyIGljcmwgPSBzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV4aXRfaW5mb18xO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NjQ3Olx0dTMyIGlkID0gc3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5leGl0X2luZm9fMiBcdTAwM2VcdTAwM2UgMzI7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo2NDg6XHR1MzIgaW5kZXggPSBzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV4aXRfaW5mb18yIFx1MDAyNiBBVklDX1BIWVNJQ0FMX01BWF9JTkRFWF9NQVNLO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNjQ5LVx0c3RydWN0IGt2bV9sYXBpYyAqYXBpYyA9IHZjcHUtXHUwMDNlYXJjaC5hcGljO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTcwMT1zdGF0aWMgdTMyICphdmljX2dldF9sb2dpY2FsX2lkX2VudHJ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGxkciwgYm9vbCBmbGF0KVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzAyLXtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjcwMzpcdHN0cnVjdCBrdm1fc3ZtICprdm1fc3ZtID0gdG9fa3ZtX3N2bSh2Y3B1LVx1MDAzZWt2bSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy03MDQtXHR1MzIgY2x1c3RlciwgaW5kZXg7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzIzLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NzI0Olx0cmV0dXJuIFx1MDAyNmt2bV9zdm0tXHUwMDNlYXZpY19sb2dpY2FsX2lkX3RhYmxlW2luZGV4XTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTcyNS19XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9NzQ0PXN0YXRpYyB2b2lkIGF2aWNfaW52YWxpZGF0ZV9sb2dpY2FsX2lkX2VudHJ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTc0NS17XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo3NDY6XHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjc0NzpcdGJvb2wgZmxhdCA9IHN2bS1cdTAwM2VkZnJfcmVnID09IEFQSUNfREZSX0ZMQVQ7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy03NDgtXHR1MzIgKmVudHJ5O1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTc1My1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjc1NDpcdGVudHJ5ID0gYXZpY19nZXRfbG9naWNhbF9pZF9lbnRyeSh2Y3B1LCBzdm0tXHUwMDNlbGRyX3JlZywgZmxhdCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy03NTUtXHRpZiAoZW50cnkpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9NzU5PXN0YXRpYyB2b2lkIGF2aWNfaGFuZGxlX2xkcl91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzYwLXtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjc2MTpcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzYyLVx0dTMyIGxkciA9IGt2bV9sYXBpY19nZXRfcmVnKHZjcHUtXHUwMDNlYXJjaC5hcGljLCBBUElDX0xEUik7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzY4LVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NzY5Olx0aWYgKGxkciA9PSBzdm0tXHUwMDNlbGRyX3JlZylcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTc3MC1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTc3My1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjc3NDpcdHN2bS1cdTAwM2VsZHJfcmVnID0gbGRyO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzc1LVx0YXZpY19sZHJfd3JpdGUodmNwdSwgaWQsIGxkcik7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9Nzc4PXN0YXRpYyB2b2lkIGF2aWNfaGFuZGxlX2Rmcl91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzc5LXtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjc4MDpcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzgxLVx0dTMyIGRmciA9IGt2bV9sYXBpY19nZXRfcmVnKHZjcHUtXHUwMDNlYXJjaC5hcGljLCBBUElDX0RGUik7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy03ODItXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo3ODM6XHRpZiAoc3ZtLVx1MDAzZWRmcl9yZWcgPT0gZGZyKVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzg0LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzg2LVx0YXZpY19pbnZhbGlkYXRlX2xvZ2ljYWxfaWRfZW50cnkodmNwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo3ODc6XHRzdm0tXHUwMDNlZGZyX3JlZyA9IGRmcjtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTc4OC19XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9NzkwPXN0YXRpYyBpbnQgYXZpY191bmFjY2VsX3RyYXBfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzkxLXtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjc5MjpcdHUzMiBvZmZzZXQgPSB0b19zdm0odmNwdSktXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV4aXRfaW5mb18xIFx1MDAyNlxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzkzLVx0XHRcdFx0QVZJQ19VTkFDQ0VMX0FDQ0VTU19PRkZTRVRfTUFTSztcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz04NDI9aW50IGF2aWNfdW5hY2NlbGVyYXRlZF9hY2Nlc3NfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg0My17XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo4NDQ6XHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg0NS1cdGludCByZXQgPSAwO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6ODQ2Olx0dTMyIG9mZnNldCA9IHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXhpdF9pbmZvXzEgXHUwMDI2XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04NDctXHRcdCAgICAgQVZJQ19VTkFDQ0VMX0FDQ0VTU19PRkZTRVRfTUFTSztcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjg0ODpcdHUzMiB2ZWN0b3IgPSBzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV4aXRfaW5mb18yIFx1MDAyNlxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtODQ5LVx0XHQgICAgIEFWSUNfVU5BQ0NFTF9BQ0NFU1NfVkVDVE9SX01BU0s7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo4NTA6XHRib29sIHdyaXRlID0gKHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXhpdF9pbmZvXzEgXHUwMDNlXHUwMDNlIDMyKSBcdTAwMjZcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg1MS1cdFx0ICAgICBBVklDX1VOQUNDRUxfQUNDRVNTX1dSSVRFX01BU0s7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtODU3LVx0XHQvKiBIYW5kbGluZyBUcmFwICovXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo4NTg6XHRcdFdBUk5fT05DRSghd3JpdGUsIFwmIzM0O3N2bTogSGFuZGxpbmcgdHJhcCByZWFkLlxcblwmIzM0Oyk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04NTktXHRcdHJldCA9IGF2aWNfdW5hY2NlbF90cmFwX3dyaXRlKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg2Ny1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjg2ODppbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04Njkte1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtODcwLVx0aW50IHJldDtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjg3MTpcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IFx1MDAyNnN2bS1cdTAwM2V2Y3B1O1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtODcyLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6ODczOlx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3QpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6ODc0Olx0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0X2xvY2spO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtODc1LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg4Mi1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjg4MzpcdHN2bS1cdTAwM2VkZnJfcmVnID0gQVBJQ19ERlJfRkxBVDtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg4NC1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz04ODg9dm9pZCBhdmljX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtODkwLVx0dTMyIG1heF9pZCA9IHgyYXZpY19lbmFibGVkID8geDJhdmljX21heF9waHlzaWNhbF9pZCA6IEFWSUNfTUFYX1BIWVNJQ0FMX0lEO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6ODkxOlx0c3RydWN0IGt2bV9zdm0gKmt2bV9zdm0gPSB0b19rdm1fc3ZtKHZjcHUtXHUwMDNla3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg5Mi1cdHUzMiBpZCA9IHZjcHUtXHUwMDNldmNwdV9pZDtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg5My1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjg5NDpcdGlmIChrdm1fc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGUgXHUwMDI2XHUwMDI2IGlkIFx1MDAzYz0gbWF4X2lkKVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6ODk1Olx0XHRXUklURV9PTkNFKGt2bV9zdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZVtpZF0sIDApO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtODk2LX1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz04OTg9dm9pZCBhdmljX2FwaWN2X3Bvc3Rfc3RhdGVfcmVzdG9yZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTAzLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6OTA0OnN0YXRpYyB2b2lkIHN2bV9pcl9saXN0X2RlbChzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQpXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MDUte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTkxMS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjkxMjpcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0b19zdm0odmNwdSktXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MTMtXHRsaXN0X2RlbChcdTAwMjZpcnFmZC1cdTAwM2V2Y3B1X2xpc3QpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6OTE0Olx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dG9fc3ZtKHZjcHUpLVx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTE1LX1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz05MTc9aW50IGF2aWNfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTI0LVx0ICovXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5MjU6XHRzdm1faXJfbGlzdF9kZWwoaXJxZmQpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTI2LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTkzNC1cdFx0c3RydWN0IGFtZF9pb21tdV9waV9kYXRhIHBpX2RhdGEgPSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5MzU6XHRcdFx0LmdhX3RhZyA9IEFWSUNfR0FUQUcodG9fa3ZtX3N2bShrdm0pLVx1MDAzZWF2aWNfdm1faWQsXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MzYtXHRcdFx0XHRcdCAgICAgdmNwdS1cdTAwM2V2Y3B1X2lkeCksXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MzctXHRcdFx0LmlzX2d1ZXN0X21vZGUgPSBrdm1fdmNwdV9hcGljdl9hY3RpdmUodmNwdSksXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5Mzg6XHRcdFx0LnZhcGljX2FkZHIgPSBhdmljX2dldF9iYWNraW5nX3BhZ2VfYWRkcmVzcyh0b19zdm0odmNwdSkpLFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTM5LVx0XHRcdC52ZWN0b3IgPSB2ZWN0b3IsXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05NDAtXHRcdH07XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5NDE6XHRcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTQyLVx0XHR1NjQgZW50cnk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTUwLVx0XHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjk1MTpcdFx0Z3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUpKFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0X2xvY2spO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTUyLVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTk1OC1cdFx0ICovXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5NTk6XHRcdGVudHJ5ID0gc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfZW50cnk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05NjAtXHRcdGlmIChlbnRyeSBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9JU19SVU5OSU5HX01BU0spIHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05ODEtXHRcdGlycWZkLVx1MDAzZWlycV9ieXBhc3NfZGF0YSA9IHBpX2RhdGEuaXJfZGF0YTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjk4MjpcdFx0bGlzdF9hZGQoXHUwMDI2aXJxZmQtXHUwMDNldmNwdV9saXN0LCBcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05ODMtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTEwMTY9c3RhdGljIHZvaWQgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTAxOS1cdGJvb2wgZ2FfbG9nX2ludHIgPSAoYWN0aW9uIFx1MDAyNiBBVklDX1NUQVJUX0JMT0NLSU5HKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEwMjA6XHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwMjEtXHRzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQ7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDIyLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTAyMzpcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3RfbG9jayk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDI0LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwMjgtXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEwMjk6XHRpZiAobGlzdF9lbXB0eShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCkpXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDMwLVx0XHRyZXR1cm47XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDMxLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTAzMjpcdGxpc3RfZm9yX2VhY2hfZW50cnkoaXJxZmQsIFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0LCB2Y3B1X2xpc3QpIHtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwMzMtXHRcdHZvaWQgKmRhdGEgPSBpcnFmZC1cdTAwM2VpcnFfYnlwYXNzX2RhdGE7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9MTA0ND1zdGF0aWMgdm9pZCBfX2F2aWNfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDQ2LXtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEwNDc6XHRzdHJ1Y3Qga3ZtX3N2bSAqa3ZtX3N2bSA9IHRvX2t2bV9zdm0odmNwdS1cdTAwM2Vrdm0pO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTA0OC1cdGludCBoX3BoeXNpY2FsX2lkID0gY3B1X3BoeXNpY2FsX2lkKGNwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMDQ5Olx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDUwLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDY0LVx0ICogX2N1cnJlbnRseV8gaGF2ZSBhc3NpZ25lZCBkZXZpY2VzLCBhcyB0aGF0IGNhbiBjaGFuZ2UuICBIb2xkaW5nXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMDY1Olx0ICogaXJfbGlzdF9sb2NrIGVuc3VyZXMgdGhhdCBlaXRoZXIgc3ZtX2lyX2xpc3RfYWRkKCkgd2lsbCBjb25zdW1lXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDY2LVx0ICogdXAtdG8tZGF0ZSBlbnRyeSBpbmZvcm1hdGlvbiwgb3IgdGhhdCB0aGlzIHRhc2sgd2lsbCB3YWl0IHVudGlsXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMDY3Olx0ICogc3ZtX2lyX2xpc3RfYWRkKCkgY29tcGxldGVzIHRvIHNldCB0aGUgbmV3IHRhcmdldCBwQ1BVLlxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTA2OC1cdCAqL1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTA2OTpcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDcwLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTA3MTpcdGVudHJ5ID0gc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfZW50cnk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDcyLVx0V0FSTl9PTl9PTkNFKGVudHJ5IFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0lTX1JVTk5JTkdfTUFTSyk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTA3OC1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEwNzk6XHRzdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF9lbnRyeSA9IGVudHJ5O1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTA4MC1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDg5LVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTA5MDpcdFdSSVRFX09OQ0Uoa3ZtX3N2bS1cdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlW3ZjcHUtXHUwMDNldmNwdV9pZF0sIGVudHJ5KTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwOTEtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTA5My1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEwOTQ6XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MTUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA3MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXcgS1ZNIFBhdGNoOiBBVklDIENsZWFudXAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIHRoZSBBTUQgU1ZNIEFkdmFuY2VkIFZpcnR1YWwgSW50ZXJydXB0IENvbnRyb2xsZXIgKEFWSUMpIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEtWTSBzdWJzeXN0ZW0uIEkmIzM5O20gc2VlaW5nIGEgbmV3IGZ1bmN0aW9uLCBgYXZpY192Y3B1X2ZyZWVgLCBhZGRlZCBpbiBgYXJjaC94ODYva3ZtL3N2bS9hdmljLmNgLiBUaGUgZnVuY3Rpb24gaXRzZWxmIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IGl0JiMzOTtzIGRlc2lnbmVkIHRvIGNsZWFyIGFuIGVudHJ5IGluIHRoZSBgYXZpY19waHlzaWNhbF9pZF90YWJsZWAgZm9yIGEgZ2l2ZW4gdkNQVSAoYHZjcHVgKS4gVGhlIGBtYXhfaWRgIGNhbGN1bGF0aW9uIHNlZW1zIHRvIGFjY291bnQgZm9yIHBvdGVudGlhbCBYMkFWSUMgc3VwcG9ydC4KCkxvb2tpbmcgYXQgdGhlIGNoYW5nZXMgaW4gYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmNgLCBpdCBzZWVtcyB0aGlzIGBhdmljX3ZjcHVfZnJlZWAgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGluIGJvdGggYHN2bV92Y3B1X2NyZWF0ZWAgYW5kIGBzdm1fdmNwdV9mcmVlYC4gSW4gYHN2bV92Y3B1X2NyZWF0ZWAsIGl0JiMzOTtzIGNhbGxlZCBkdXJpbmcgZXJyb3IgaGFuZGxpbmcgaWYgbWVtb3J5IGFsbG9jYXRpb24gZm9yIGBtc3JwbWAgZmFpbHMuIFRoaXMgaW5kaWNhdGVzIHRoYXQgcHJldmlvdXNseSwgaWYgdGhlIHZDUFUgY3JlYXRpb24gZmFpbGVkICphZnRlciogdGhlIEFWSUMgaW5pdGlhbGl6YXRpb24sIHRoZSB0YWJsZSBlbnRyeSBtaWdodCBoYXZlIGJlZW4gbGVmdCB1bmNsZWFyZWQuIE5vdywgd2UgaGF2ZSBhbiBleHBsaWNpdCBjbGVhbnVwIHBhdGggaW4gY2FzZSBvZiBhbGxvY2F0aW9uIGVycm9yLiBTaW1pbGFybHksIGluIGBzdm1fdmNwdV9mcmVlYCwgaXQmIzM5O3MgY2FsbGVkIGR1cmluZyB2Q1BVIGRlc3RydWN0aW9uLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlcmUmIzM5O3MgYWxzbyBhIGBXQVJOX09OX09OQ0VgIGFib3V0IGFuIGVtcHR5IGBpcl9saXN0YCwgd2hpY2ggaXMgYSBnb29kIHNhbml0eSBjaGVjay4KCk5vdywgbGV0JiMzOTtzIHJld2luZCBhbmQgc2VlIHdoYXQgaGFwcGVuZWQgYmVmb3JlLiBUaGUgaW5pdGlhbCBBVklDIHNldHVwIGR1cmluZyB2Q1BVIGNyZWF0aW9uIChgc3ZtX3ZjcHVfY3JlYXRlYCkgaW52b2x2ZXMgYGF2aWNfaW5pdF92Y3B1YCwgd2hpY2ggdGhlbiBjYWxscyBgYXZpY19pbml0X2JhY2tpbmdfcGFnZWAuIFRoaXMgZnVuY3Rpb24sIGF0IHNvbWUgcG9pbnQsIHdyaXRlcyB0byB0aGUgYGF2aWNfcGh5c2ljYWxfaWRfdGFibGVgIHVzaW5nIGBXUklURV9PTkNFYC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoYXQgKmJlZm9yZSogdGhpcyBwYXRjaCwgaWYgdkNQVSBjcmVhdGlvbiBmYWlsZWQgKmFmdGVyKiBgYXZpY19pbml0X2JhY2tpbmdfcGFnZWAsIG9yIGlmIHRoZSB2Q1BVIHdhcyBkZXN0cm95ZWQsIHRoYXQgdGFibGUgZW50cnkgKndhc24mIzM5O3QqIGJlaW5nIGNsZWFyZWQuIE5vdywgd2l0aCB0aGUgYWRkaXRpb24gb2YgYGF2aWNfdmNwdV9mcmVlYCwgd2UgaGF2ZSB0aGUgY2xlYW51cCBwYXRoLgoKU28sIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyByZWFjaGFibGUgdmlhIGZ1enppbmc/IENvbnNpZGVyaW5nIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCB3ZSBhcmUgdGFsa2luZyBhYm91dCBLVk0mIzM5O3MgQU1EIFNWTSAoQVZJQykuIFN5emthbGxlciBmcmVxdWVudGx5IHRhcmdldHMgYmFzaWMgS1ZNIHN5c2NhbGxzIGZvciBmdXp6aW5nLCBsaWtlIGBLVk1fQ1JFQVRFX1ZDUFVgLCBjbG9zaW5nIHZjcHUgZmRzLCBhbmQgZGVzdHJveWluZyBWTXMuIFdoZW4gcnVubmluZyBzeXprYWxsZXIgb24gQU1EIGhvc3RzIChvciBuZXN0ZWQgQU1EIFNWTSBpbiBRRU1VKSwgdGhpcyBjb2RlIHdpbGwgYmUgZXhlcmNpc2VkLiBUaGlzIG1lYW5zIHRoZSBwYXRocyB3aGVyZSBhIHZDUFUgY3JlYXRpb24gKm1pZ2h0KiBmYWlsLCBvciB3aGVyZSB3ZSYjMzk7cmUgZXhwbGljaXRseSBmcmVlaW5nIHZDUFVzLCBhcmUgYWJzb2x1dGVseSBiZWluZyBoaXQuIFRoZSBmYWN0IHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGV4ZWN1dGFibGUga2VybmVsIEMgY29kZSBpcywgaW4gaXRzZWxmLCBhIGdvb2QgcmVhc29uIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuCgpUaGVyZWZvcmUsIHllcywgdGhpcyBsb29rcyBsaWtlIGEgd29ydGh3aGlsZSBmdXp6aW5nIHRhcmdldC4gV2UganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBhcHByb3ByaWF0ZSBjb25maWd1cmF0aW9ucyBlbmFibGVkOiBzcGVjaWZpY2FsbHksIGBLVk1gIGFuZCBgS1ZNX0FNRGAuIFdlIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYW55IGRlcGVuZGVuY2llcyB0aG9zZSBvcHRpb25zIGhhdmUgdG8gZ2l2ZSB1cyBmdXJ0aGVyIGluc2lnaHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXHRib29sIFwmIzM0O0NvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFwmIzM0O0NoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzM6Y29uZmlnIEtWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3NC1cdGJvb2wgXCYjMzQ7SS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODM6Y29uZmlnIEtWTV9TTU1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4NC1cdGJvb2wgXCYjMzQ7U3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTQ6Y29uZmlnIEtWTV9IWVBFUlZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjA3LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA4OmNvbmZpZyBLVk1fWEVOXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDktXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE3OmNvbmZpZyBLVk1fUFJPVkVfTU1VXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTgtXHRib29sIFwmIzM0O1Byb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzA6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVx0Ym9vbFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMzOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzQtXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDA0NAoJCQkJCQkJb3V0cHV0OiAxMjkKCQkJCQkJCXRob3VnaHRzOiAyOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgS1ZNL0FNRCBEZXBlbmRlbmNpZXMgYW5kIEZvY3VzIFN5bWJvbHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEtWTV9BTURgLiBUaGUgbG9naWMgaXMgY2xlYXI6IGl0IGRlcGVuZHMgb24gYEtWTWAgYW5kIGVpdGhlciBgQ1BVX1NVUF9BTURgIG9yIGBDUFVfU1VQX0hZR09OYC4gYENQVV9TVVBfQU1EYCBpcywgYnkgZGVmYXVsdCwgZW5hYmxlZCBvbiB4ODYsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLiBTbywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGUgY29yZSBjb25maWd1cmF0aW9ucyByZXF1aXJlZCBhcmUgYEtWTWAgYW5kIGBLVk1fQU1EYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuCgpOb3csIHRvIGdldCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLCBJIGhhdmUgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IHN5bWJvbHMuIFdoaWNoIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgaW52b2x2ZWQsIG9yIGFyZSBpbXBsZW1lbnRpbmcgdGhlIHNwZWNpZmljIGNoYW5nZXM/IEkmIzM5O3ZlIGlkZW50aWZpZWQgZm91ciBrZXkgZnVuY3Rpb25zOiBgYXZpY192Y3B1X2ZyZWVgLCBgc3ZtX3ZjcHVfY3JlYXRlYCwgYHN2bV92Y3B1X2ZyZWVgLCBhbmQgYGF2aWNfaW5pdF92Y3B1YC4gVGhlIGZvdXJ0aCBzZWVtcyByZWxhdGVkIHRvIHRoZSBBVklDIHNldHVwLgoKVGhlIG5leHQgY3JpdGljYWwgc3RlcCBpcyB0byBhc3Nlc3MgdGhlIHNjb3BlIG9mIHRob3NlIGZ1bmN0aW9ucy4gQXJlIHRoZXkgdWJpcXVpdG91cyBrZXJuZWwgYWxsb2NhdG9ycywgb3IgYXJlIHRoZXkgc3BlY2lmaWMgdG8gS1ZNL1NWTSBpbXBsZW1lbnRhdGlvbnM/IEdvb2QsIHRoZXkgYXJlIEtWTS1TVk0gc3BlY2lmaWMuIFRoaXMgaXMgd2hhdCBJIHdhcyBob3BpbmcgdG8gc2VlLiBJdCBtZWFucyB0aGVzZSBmdW5jdGlvbnMgYXJlIGxpa2VseSB0byBiZSBzdHJvbmcgaW5kaWNhdG9ycyBvZiB0aGUgdGFyZ2V0ZWQgZnVuY3Rpb25hbGl0eS4KCkkmIzM5O20gbm93IGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0byBiZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciBzeW1ib2xzIG9yIGNvbmZpZ3MgdGhhdCBhcmUgbmVlZGVkLgoKSSYjMzk7bSBub3cgY29uZmlkZW50IHRoYXQgbXkgbGlzdHMgYXJlIGNvcnJlY3Q6IGBFbmFibGVDb25maWdzYCBpcyBgWyYjMzQ7S1ZNJiMzNDssICYjMzQ7S1ZNX0FNRCYjMzQ7XWAgYW5kIGBGb2N1c1N5bWJvbHNgIGlzIGBbJiMzNDthdmljX3ZjcHVfZnJlZSYjMzQ7LCAmIzM0O3N2bV92Y3B1X2NyZWF0ZSYjMzQ7LCAmIzM0O3N2bV92Y3B1X2ZyZWUmIzM0O11gLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgZmluYWwgcmV2aWV3IG9mIGV2ZXJ5dGhpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBhbmQgbXkgcmVhc29uaW5nIGFyZSBhY2N1cmF0ZSBhbmQgd2VsbC1mb3JtYXR0ZWQuIEkmIzM5O20gcmVhZHkgdG8gY2FsbCB0aGUgYHNldC1yZXN1bHRzYCBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthdmljX3ZjcHVfZnJlZSYjMzQ7LAogICAgJiMzNDtzdm1fdmNwdV9jcmVhdGUmIzM0OywKICAgICYjMzQ7c3ZtX3ZjcHVfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGF2aWNfdmNwdV9mcmVlKCkgdG8gY2xlYXIgdGhlIHBoeXNpY2FsIEFQSUMgSUQgdGFibGUgZW50cnkgb24gU1ZNIHZDUFUgY3JlYXRpb24gZmFpbHVyZSBhbmQgdkNQVSB0ZWFyZG93bi4gVGhpcyBtb2RpZmllcyBleGVjdXRhYmxlIGxpZmVjeWNsZSBjb2RlIGluIEtWTSBBTUQgKFNWTSksIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUgb24gYW1kNjQgdmlhIEtWTSBpb2N0bHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXZpY192Y3B1X2ZyZWUmIzM0OywKICAgICYjMzQ7c3ZtX3ZjcHVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3N2bV92Y3B1X2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhdmljX3ZjcHVfZnJlZSgpIHRvIGNsZWFyIHRoZSBwaHlzaWNhbCBBUElDIElEIHRhYmxlIGVudHJ5IG9uIFNWTSB2Q1BVIGNyZWF0aW9uIGZhaWx1cmUgYW5kIHZDUFUgdGVhcmRvd24uIFRoaXMgbW9kaWZpZXMgZXhlY3V0YWJsZSBsaWZlY3ljbGUgY29kZSBpbiBLVk0gQU1EIChTVk0pLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIGZ1enphYmxlIG9uIGFtZDY0IHZpYSBLVk0gaW9jdGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgYXZpY192Y3B1X2ZyZWUoKWAgdG8gY2xlYXIgKGBXUklURV9PTkNFKC4uLiwgMClgKSB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBpbiBga3ZtX3N2bS1cdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlYCB3aGVuIGEgdkNQVSBpcyBmcmVlZCBvciB3aGVuIHZDUFUgY3JlYXRpb24gZmFpbHMgYWZ0ZXIgQVZJQyBpbml0aWFsaXphdGlvbi4gVGhpcyBwcmV2ZW50cyBzdGFsZS9kYW5nbGluZyByZWZlcmVuY2VzIHRvIGZyZWVkIGJhY2tpbmcgcGFnZXMgaW4gdGhlIHBoeXNpY2FsIElEIHRhYmxlLlxuXG5UaGUgY2hhbmdlcyBvbmx5IHdyaXRlIGEgemVybyB2YWx1ZSB0byBhbiBleGlzdGluZyB0YWJsZSBhbmQgZG8gbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCByZWFkIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbHRlciBib3VuZHMgY2hlY2tzIGZvciB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZS4gTWVtb3J5IGxpZmVjeWNsZS9kYW5nbGluZyBwb2ludGVyIGlzc3VlcyBpbiB0aGlzIGNvbnRleHQgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0b3JzIHJhdGhlciB0aGFuIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjdkMTliZDRkMzRhMTNiMzYyY2RmNjg3NmU0MjY0OTk3NzFlM2JmMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDY6NTI6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYyBiL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jCmluZGV4IDNiMDM3ZTM4NTUyMzQuLmJjMmM2OTkzODBiMzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jCkBAIC04ODUsNiAmIzQzOzg4NSwxNiBAQCBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3ZvaWQgYXZpY192Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJdTMyIG1heF9pZCA9IHgyYXZpY19lbmFibGVkID8geDJhdmljX21heF9waHlzaWNhbF9pZCA6IEFWSUNfTUFYX1BIWVNJQ0FMX0lEOwomIzQzOwlzdHJ1Y3Qga3ZtX3N2bSAqa3ZtX3N2bSA9IHRvX2t2bV9zdm0odmNwdS0mZ3Q7a3ZtKTsKJiM0MzsJdTMyIGlkID0gdmNwdS0mZ3Q7dmNwdV9pZDsKJiM0MzsKJiM0MzsJaWYgKGt2bV9zdm0tJmd0O2F2aWNfcGh5c2ljYWxfaWRfdGFibGUgJmFtcDsmYW1wOyBpZCAmbHQ7PSBtYXhfaWQpCiYjNDM7CQlXUklURV9PTkNFKGt2bV9zdm0tJmd0O2F2aWNfcGh5c2ljYWxfaWRfdGFibGVbaWRdLCAwKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlhdmljX2hhbmRsZV9kZnJfdXBkYXRlKHZjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKaW5kZXggZWE2NDc5MzhhMmE2NS4uYzJhMmFlN2Q4ZWMzNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCkBAIC0xMzM3LDcgJiM0MzsxMzM3LDcgQEAgc3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXN2bS0mZ3Q7bXNycG0gPSBzdm1fdmNwdV9hbGxvY19tc3JwbSgpOwogCWlmICghc3ZtLSZndDttc3JwbSkgewogCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX2ZyZWVfc2V2OwomIzQzOwkJZ290byBlcnJvcl9mcmVlX2F2aWM7CiAJfQogCiAJc3ZtLSZndDt4MmF2aWNfbXNyc19pbnRlcmNlcHRlZCA9IHRydWU7CkBAIC0xMzUxLDYgJiM0MzsxMzUxLDggQEAgc3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJcmV0dXJuIDA7CiAKJiM0MztlcnJvcl9mcmVlX2F2aWM6CiYjNDM7CWF2aWNfdmNwdV9mcmVlKHZjcHUpOwogZXJyb3JfZnJlZV9zZXY6CiAJc2V2X2ZyZWVfdmNwdSh2Y3B1KTsKIGVycm9yX2ZyZWVfdm1jYl9wYWdlOgpAQCAtMTM2NSw2ICYjNDM7MTM2Nyw4IEBAIHN0YXRpYyB2b2lkIHN2bV92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZhbXA7c3ZtLSZndDtpcl9saXN0KSk7CiAKJiM0MzsJYXZpY192Y3B1X2ZyZWUodmNwdSk7CiYjNDM7CiAJc3ZtX2xlYXZlX25lc3RlZCh2Y3B1KTsKIAlzdm1fZnJlZV9uZXN0ZWQoc3ZtKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaCBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgKaW5kZXggZTk1ODk0M2I4MTYyNy4uNzkwYmQ5NmE5NzkxMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oCkBAIC05NTQsNiAmIzQzOzk1NCw3IEBAIHZvaWQgYXZpY19pbml0X3ZtY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCB2bWNiICp2bWNiKTsKIGludCBhdmljX2luY29tcGxldGVfaXBpX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IGF2aWNfdW5hY2NlbGVyYXRlZF9hY2Nlc3NfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pOwomIzQzO3ZvaWQgYXZpY192Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQgYXZpY192Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKIHZvaWQgYXZpY192Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBhdmljX2FwaWN2X3Bvc3Rfc3RhdGVfcmVzdG9yZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDMyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFWSUMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiwgYGF2aWNfdmNwdV9mcmVlYCwgd2l0aGluIGBhcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuIFJlYWRpbmcgdGhyb3VnaCBpdCwgSSBzZWUgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIGNsZWFyaW5nIGFuIGVudHJ5IGluIHRoZSBgYXZpY19waHlzaWNhbF9pZF90YWJsZWAgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgdkNQVS4gVGhlIGxvZ2ljIGFwcGVhcnMgdG8gY29uZGl0aW9uYWxseSBjbGVhciB0aGUgZW50cnkgYmFzZWQgb24gdGhlIGB4MmF2aWNfZW5hYmxlZGAgZmxhZyBhbmQgdGhlIGB2Y3B1LSZndDt2Y3B1X2lkYC4gU3BlY2lmaWNhbGx5LCBpZiBgeDJhdmljX2VuYWJsZWRgIGlzIHNldCwgaXQgdXNlcyBgeDJhdmljX21heF9waHlzaWNhbF9pZGAgYXMgdGhlIHVwcGVyIGJvdW5kIGZvciB2YWxpZCBJRHMsIG90aGVyd2lzZSBpdCB1c2VzIHRoZSBzdGFuZGFyZCBgQVZJQ19NQVhfUEhZU0lDQUxfSURgLiBJdCB0aGVuIGFjY2Vzc2VzIHRoZSB0YWJsZSB1c2luZyB0aGUgdkNQVSYjMzk7cyBJRCBhbmQgc2V0cyB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSB0byB6ZXJvIHVzaW5nIGBXUklURV9PTkNFYC4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0LiBUaGUgcGF0Y2ggYWxzbyBpbnRlZ3JhdGVzIHRoaXMgYGF2aWNfdmNwdV9mcmVlYCBmdW5jdGlvbiBpbnRvIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jYC4gSXQmIzM5O3MgYmVpbmcgY2FsbGVkIGluIHR3byBzcGVjaWZpYyBwbGFjZXM6IHRoZSBlcnJvciBwYXRoIHdpdGhpbiBgc3ZtX3ZjcHVfY3JlYXRlYCBhbmQgd2l0aGluIHRoZSBgc3ZtX3ZjcHVfZnJlZWAgZnVuY3Rpb24gaXRzZWxmLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZSBwdXJwb3NlIG9mIGBhdmljX3ZjcHVfZnJlZWAgaXMgdG8gY2xlYW4gdXAgcmVzb3VyY2VzIGFsbG9jYXRlZCB0byB0aGUgQVZJQyBmb3IgYSB2Q1BVLCBib3RoIGR1cmluZyB2Q1BVIGNyZWF0aW9uIHdoZW4gc29tZXRoaW5nIGZhaWxzIGFuZCBkdXJpbmcgc3RhbmRhcmQgdkNQVSBkZXN0cnVjdGlvbi4gVGhpcyBtYWtlcyBzZW5zZTsgd2Ugd2FudCB0byBlbnN1cmUgYW55IHBoeXNpY2FsIElEIG1hcHBpbmdzIGFyZSBwcm9wZXJseSByZWxlYXNlZC4KClRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBgYXZpY19pbml0X3ZjcHVgIG1vcmUgY2xvc2VseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIHRoYXQgYGF2aWNfcGh5c2ljYWxfaWRfdGFibGVgLiBJJiMzOTtsbCB1c2UgYSBmaWxlIHJlYWRlciB0byBqdW1wIHRvIHRoYXQgYXJlYS4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCBhcnJheSBpcyBhbGxvY2F0ZWQsIHBvcHVsYXRlZCwgYW5kIHVzZWQgdG8gY29tcGxldGUgdGhpcyBwaWN0dXJlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSB0YWJsZSBpcyBhbGxvY2F0ZWQgYW5kIGhvdyBpdHMgZW50cmllcyBhcmUgc2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NTA6XHRcdGJvb2wgd3JpdGUgPSAoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5leGl0X2luZm9fMSBcdTAwM2VcdTAwM2UgMzIpIFx1MDAyNlxuIDg1MTpcdFx0XHQgICAgIEFWSUNfVU5BQ0NFTF9BQ0NFU1NfV1JJVEVfTUFTSztcbiA4NTI6XHRcdGJvb2wgdHJhcCA9IGlzX2F2aWNfdW5hY2NlbGVyYXRlZF9hY2Nlc3NfdHJhcChvZmZzZXQpO1xuIDg1MzpcdFxuIDg1NDpcdFx0dHJhY2Vfa3ZtX2F2aWNfdW5hY2NlbGVyYXRlZF9hY2Nlc3ModmNwdS1cdTAwM2V2Y3B1X2lkLCBvZmZzZXQsXG4gODU1Olx0XHRcdFx0XHRcdCAgICB0cmFwLCB3cml0ZSwgdmVjdG9yKTtcbiA4NTY6XHRcdGlmICh0cmFwKSB7XG4gODU3Olx0XHRcdC8qIEhhbmRsaW5nIFRyYXAgKi9cbiA4NTg6XHRcdFx0V0FSTl9PTkNFKCF3cml0ZSwgXCYjMzQ7c3ZtOiBIYW5kbGluZyB0cmFwIHJlYWQuXFxuXCYjMzQ7KTtcbiA4NTk6XHRcdFx0cmV0ID0gYXZpY191bmFjY2VsX3RyYXBfd3JpdGUodmNwdSk7XG4gODYwOlx0XHR9IGVsc2Uge1xuIDg2MTpcdFx0XHQvKiBIYW5kbGluZyBGYXVsdCAqL1xuIDg2MjpcdFx0XHRyZXQgPSBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwKTtcbiA4NjM6XHRcdH1cbiA4NjQ6XHRcbiA4NjU6XHRcdHJldHVybiByZXQ7XG4gODY2Olx0fVxuIDg2NzpcdFxuIDg2ODpcdGludCBhdmljX2luaXRfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiA4Njk6XHR7XG4gODcwOlx0XHRpbnQgcmV0O1xuIDg3MTpcdFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gXHUwMDI2c3ZtLVx1MDAzZXZjcHU7XG4gODcyOlx0XG4gODczOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCk7XG4gODc0Olx0XHRyYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3RfbG9jayk7XG4gODc1Olx0XG4gODc2Olx0XHRpZiAoIWVuYWJsZV9hcGljdiB8fCAhaXJxY2hpcF9pbl9rZXJuZWwodmNwdS1cdTAwM2Vrdm0pKVxuIDg3NzpcdFx0XHRyZXR1cm4gMDtcbiA4Nzg6XHRcbiA4Nzk6XHRcdHJldCA9IGF2aWNfaW5pdF9iYWNraW5nX3BhZ2UodmNwdSk7XG4gODgwOlx0XHRpZiAocmV0KVxuIDg4MTpcdFx0XHRyZXR1cm4gcmV0O1xuIDg4MjpcdFxuIDg4MzpcdFx0c3ZtLVx1MDAzZWRmcl9yZWcgPSBBUElDX0RGUl9GTEFUO1xuIDg4NDpcdFxuIDg4NTpcdFx0cmV0dXJuIHJldDtcbiA4ODY6XHR9XG4gODg3Olx0XG4gODg4Olx0dm9pZCBhdmljX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gODg5Olx0e1xuIDg5MDpcdFx0dTMyIG1heF9pZCA9IHgyYXZpY19lbmFibGVkID8geDJhdmljX21heF9waHlzaWNhbF9pZCA6IEFWSUNfTUFYX1BIWVNJQ0FMX0lEO1xuIDg5MTpcdFx0c3RydWN0IGt2bV9zdm0gKmt2bV9zdm0gPSB0b19rdm1fc3ZtKHZjcHUtXHUwMDNla3ZtKTtcbiA4OTI6XHRcdHUzMiBpZCA9IHZjcHUtXHUwMDNldmNwdV9pZDtcbiA4OTM6XHRcbiA4OTQ6XHRcdGlmIChrdm1fc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGUgXHUwMDI2XHUwMDI2IGlkIFx1MDAzYz0gbWF4X2lkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDUyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYGF2aWNfaW5pdF9iYWNraW5nX3BhZ2VgIGFuZCBgYXZpY19waHlzaWNhbF9pZF90YWJsZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O3doZXJlIHRoZSBoZWNrIGlzIGBhdmljX2luaXRfYmFja2luZ19wYWdlYCBkZWZpbmVkPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgdGhlIGNvbnRleHQgb2YgaXRzIGV4ZWN1dGlvbi4gS25vd2luZyB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBwaWN0dXJlIG9mIHdoYXQgaXQmIzM5O3MgdHJ5aW5nIHRvIGFjaGlldmUuIElzIGl0IGEgZnVuY3Rpb24sIGEgbWFjcm8sIHBhcnQgb2YgYSBsYXJnZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uPyBBbmQgd2hhdCBoZWFkZXIgZmlsZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBwcm9jZXNzPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgcXVpY2sgc2VhcmNoIG9mIHRoZSBjb2RlYmFzZS4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyByb3V0aW5lIGlzICpkb2luZyouIFRoZSBjcnVjaWFsIHBhcnQgaXMgZmlndXJpbmcgb3V0IHdoYXQgaXQmIzM5O3Mgd3JpdGluZyB0byBgYXZpY19waHlzaWNhbF9pZF90YWJsZWAuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3Igd3JpdGVzLCByZWFkcywgb3IgYW55IGludGVyYWN0aW9ucyB3aXRoIHRoZSB0YWJsZSB3aXRoaW4gdGhlIGZ1bmN0aW9uLiBJcyBpdCBwb3B1bGF0aW5nIGl0IGZyb20gc2NyYXRjaCwgdXBkYXRpbmcgZXhpc3RpbmcgZW50cmllcywgb3IgaW5pdGlhbGl6aW5nIGl0IHRvIHNvbWUgZGVmYXVsdCBzdGF0ZT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gV2hhdCBkYXRhIHR5cGVzIGFyZSBzdG9yZWQgaW4gYGF2aWNfcGh5c2ljYWxfaWRfdGFibGVgIGFuZCB3aGF0IGlzIHRoZWlyIHNpZ25pZmljYW5jZT8gV2hhdCBpcyB0aGUgZnVuY3Rpb24mIzM5O3MgcmVsYXRpb25zaGlwIHRvIHRoZSBvdmVyYWxsIGludGVycnVwdCBjb250cm9sbGVyIHNldHVwPyBJIG5lZWQgdG8gbWFwIGl0IG91dC4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGxvZ2ljIGFuZCBub3RlIGFueSBwb3RlbnRpYWxseSBjcnVjaWFsIHN0ZXBzLiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIGRldGVybWluZSB0aGUgcHVycG9zZSBhbmQgaW1wbGljYXRpb25zIG9mIHRoZSB3cml0ZXMgdG8gdGhpcyB0YWJsZS4gVGhpcyBpcyBsaWtlbHkgYSBjcml0aWNhbCBpbml0aWFsaXphdGlvbiBzdGVwIGZvciB0aGUgQWR2YW5jZWQgVmlydHVhbCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoQVZJQykgZnVuY3Rpb25hbGl0eSwgYW5kIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBwaHlzaWNhbCBJRHMgYXJlIG1hcHBlZCBpcyBwYXJhbW91bnQuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGV0YWlscyB3aWxsIGJlIGtleSBmb3IgZGVidWdnaW5nIGFuZCBvcHRpbWl6YXRpb24gZWZmb3J0cywgaWYgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdmljX2luaXRfYmFja2luZ19wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9hdmljLmM9Mzk4PXZvaWQgYXZpY19pbml0X3ZtY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCB2bWNiICp2bWNiKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTQxMi1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjQxMzpzdGF0aWMgaW50IGF2aWNfaW5pdF9iYWNraW5nX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDE0LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz04Njg9aW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg3OC1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjg3OTpcdHJldCA9IGF2aWNfaW5pdF9iYWNraW5nX3BhZ2UodmNwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04ODAtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTMxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IG1lbnRhbCB3YWxrdGhyb3VnaCBvZiB0aGF0IGNvZGUgc2VjdGlvbiwgZm9jdXNpbmcgb24gd2hhdCYjMzk7cyByZWxldmFudCB0byBteSBleHBlcnRpc2U6CgoqKkRpc3NlY3RpbmcgQVZJQyBJbml0aWFsaXphdGlvbiBpbiBga3ZtL3N2bS9hdmljLmNgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYGFyY2gveDg2L2t2bS9zdm0vYXZpYy5jYCBhbmQgc3BlY2lmaWNhbGx5IGxpbmVzIDQxMyB0byA0NjAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgQVZJQyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSB3aXRoaW4gdGhlIEFNRCBTVk0gY29udGV4dC4gSSBrbm93IHRoaXMgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2Ugd2l0aCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gYW5kIHdvcmtsb2FkcyB0aGF0IGFyZSBBVlgtaGVhdnksIGFuZCBpcyBhIGtleSBhcmVhIGZvciBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBvciBkZWJ1Z2dpbmcgaWYgd2Ugc2VlIHVudXN1YWwgYmVoYXZpb3IuCgpJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIHNldHVwIG9mIHRoZSBzdHJ1Y3R1cmVzIGludm9sdmVkIHdpdGggdGhlIEFkdmFuY2VkIFZpcnR1YWwgSW50ZXJydXB0IENvbnRyb2xsZXIuIFJpZ2h0LCB0aGlzIHNlY3Rpb24gbGlrZWx5IGhhbmRsZXMgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBvZiB0aGUgdmlydHVhbCBpbnRlcnJ1cHQgcmVtYXBwaW5nIHRhYmxlcyBvciBvdGhlciBkYXRhIHN0cnVjdHVyZXMgZm9yIHRoZSBndWVzdCBhbmQgdGhlIGFsbG9jYXRpb24gb2YgcmVzb3VyY2VzLiBJ4oCZbGwgYmUgbG9va2luZyBmb3Igd2hlcmUgdGhlIGNvZGUgaXMgc2V0dGluZyB1cCB0aGUgQVZJQyByZWdpc3RlcnMgaW4gdGhlIHN5c3RlbS4gSSBhbHNvIG5lZWQgdG8gdHJhY2sgdGhlIGludGVycGxheSB3aXRoIHRoZSBob3N0IGFuZCBndWVzdCYjMzk7cyBwYWdlIHRhYmxlczsgdGhhdCBpcyBvZnRlbiB3aGVyZSBidWdzIGFuZCBpc3N1ZXMgYXJpc2UgZHVyaW5nIGluaXRpYWxpemF0aW9uLgoKSSYjMzk7bSBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIGVhY2ggbGluZS4gVGhpcyBpcyBwcm9iYWJseSB3aGVyZSB0aGUgY29kZSBkZWZpbmVzIGFuZCBhbGxvY2F0ZXMgbWVtb3J5IGZvciB0aGUgQVZJQy4gSSYjMzk7bSBmb2N1c2luZyBvbiBob3cgdGhlIGludGVycnVwdC1yZWxhdGVkIG1lbW9yeSBpcyBtYXBwZWQgYW5kIHRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLCBhcyB0aGVzZSBhcmUgY3JpdGljYWwgZm9yIGVuc3VyaW5nIGVmZmljaWVudCBvcGVyYXRpb24uIEFsc28sIHdoZXRoZXIgaXQgaXMgdXNpbmcgdGhlIHN0YW5kYXJkIG1ldGhvZHMsIG9yIGhhcyBhbnkgYmVzcG9rZSBtb2RpZmljYXRpb25zLCBmb3Igc2V0dGluZyB1cCB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIuIEkgYW0gYWxzbyBjaGVja2luZyB0aGF0IHRoZXJlIGlzIG5vdCBhbnl0aGluZyByZWR1bmRhbnQuIElzIGl0IGRvaW5nIGEgZG91YmxlIGFsbG9jYXRpb24/CgpJIGFudGljaXBhdGUgZW5jb3VudGVyaW5nIHRoZSBlbmFibGluZyBvZiB0aGUgZmVhdHVyZXMsIGFuZCB3aGF0IGNoZWNrcyBhcmUgcGVyZm9ybWVkIHRvIGRldGVybWluZSBpZiB0aGUgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSBvbiB0aGUgcGh5c2ljYWwgaGFyZHdhcmUuIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBjb2RlIGhhbmRsZXMgZGlmZmVyZW50IENQVSBtb2RlbHMgb3Igc3RlcHBpbmcgcmV2aXNpb25zLiBDaGVja2luZyB0aGUgQ1BVSUQgb3V0cHV0IHJlbGF0ZWQgdG8gQVZJQyBzdXBwb3J0LCBhbmQgaWYgdGhlcmUgYXJlIGFueSBmYWxsYmFja3MgaWYgQVZJQyBpcyB1bmF2YWlsYWJsZS4KCkkgYWxzbyB3YW50IHRvIHBheSBjYXJlZnVsIGF0dGVudGlvbiB0byBhbnkgbG9ja3Mgb3Igc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCBkdXJpbmcgdGhpcyBpbml0aWFsaXphdGlvbiBwaGFzZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gcmFjZSBjb25kaXRpb25zIGR1cmluZyB0aGUgc2V0dXAgb2YgdGhlIGludGVycnVwdCByZW1hcHBpbmcgdGFibGUuIEkgbmVlZCB0byBhbHNvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGluIHRoZXNlIGxvY2sgb3BlcmF0aW9ucy4gSSB3aWxsIGFsc28gbWFrZSBzdXJlIHRvIGNoZWNrIGlmIHRoZSBjb2RlIGlzIHVzaW5nIHNwaW5sb2Nrcywgb3IgaWYgaXQgaGFzIGFueSBzb3BoaXN0aWNhdGVkIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zLgoKRmluYWxseSwgSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBkZWJ1Z2dpbmcgb3V0cHV0LCBlcnJvciBoYW5kbGluZywgb3IgYXNzZXJ0aW9ucyB3aXRoaW4gdGhpcyBzZWN0aW9uLiBHb29kIGxvZ2dpbmcgb3IgZXJyb3IgcmVwb3J0aW5nIGlzIGVzc2VudGlhbCBmb3IgdHJvdWJsZXNob290aW5nIGlzc3VlcyByZWxhdGVkIHRvIHRoZSBBVklDLCBhbmQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGluIGdlbmVyYWwuIEl0IHdpbGwgYmUgaGVscGZ1bCB0byBrbm93IGhvdyB0aGUgc3lzdGVtIHJlYWN0cyBpZiB0aGUgaGFyZHdhcmUgaXNuJiMzOTt0IHF1aXRlIHJpZ2h0LiBUaGF0IHdpbGwgYmUgZXNwZWNpYWxseSBpbXBvcnRhbnQgd2hlbiBJIGFtIHRoaW5raW5nIG9mIHRoZSBpbnRlcmFjdGlvbiBvZiBtdWx0aXBsZSBWTXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9hdmljLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQxMzpcdHN0YXRpYyBpbnQgYXZpY19pbml0X2JhY2tpbmdfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gNDE0Olx0e1xuIDQxNTpcdFx0dTMyIG1heF9pZCA9IHgyYXZpY19lbmFibGVkID8geDJhdmljX21heF9waHlzaWNhbF9pZCA6IEFWSUNfTUFYX1BIWVNJQ0FMX0lEO1xuIDQxNjpcdFx0c3RydWN0IGt2bV9zdm0gKmt2bV9zdm0gPSB0b19rdm1fc3ZtKHZjcHUtXHUwMDNla3ZtKTtcbiA0MTc6XHRcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuIDQxODpcdFx0dTMyIGlkID0gdmNwdS1cdTAwM2V2Y3B1X2lkO1xuIDQxOTpcdFx0dTY0IG5ld19lbnRyeTtcbiA0MjA6XHRcbiA0MjE6XHRcdC8qXG4gNDIyOlx0XHQgKiBJbmhpYml0IEFWSUMgaWYgdGhlIHZDUFUgSUQgaXMgYmlnZ2VyIHRoYW4gd2hhdCBpcyBzdXBwb3J0ZWQgYnkgQVZJQ1xuIDQyMzpcdFx0ICogaGFyZHdhcmUuICBJbW1lZGlhdGVseSBjbGVhciBhcGljdl9hY3RpdmUsIGkuZS4gZG9uJiMzOTt0IHdhaXQgdW50aWwgdGhlXG4gNDI0Olx0XHQgKiBLVk1fUkVRX0FQSUNWX1VQREFURSByZXF1ZXN0IGlzIHByb2Nlc3NlZCBvbiB0aGUgZmlyc3QgS1ZNX1JVTiwgYXNcbiA0MjU6XHRcdCAqIGF2aWNfdmNwdV9sb2FkKCkgZXhwZWN0cyB0byBiZSBjYWxsZWQgaWYgYW5kIG9ubHkgaWYgdGhlIHZDUFUgaGFzXG4gNDI2Olx0XHQgKiBmdWxseSBpbml0aWFsaXplZCBBVklDLlxuIDQyNzpcdFx0ICovXG4gNDI4Olx0XHRpZiAoaWQgXHUwMDNlIG1heF9pZCkge1xuIDQyOTpcdFx0XHRrdm1fc2V0X2FwaWN2X2luaGliaXQodmNwdS1cdTAwM2Vrdm0sIEFQSUNWX0lOSElCSVRfUkVBU09OX1BIWVNJQ0FMX0lEX1RPT19CSUcpO1xuIDQzMDpcdFx0XHR2Y3B1LVx1MDAzZWFyY2guYXBpYy1cdTAwM2VhcGljdl9hY3RpdmUgPSBmYWxzZTtcbiA0MzE6XHRcdFx0cmV0dXJuIDA7XG4gNDMyOlx0XHR9XG4gNDMzOlx0XG4gNDM0Olx0XHRCVUlMRF9CVUdfT04oKEFWSUNfTUFYX1BIWVNJQ0FMX0lEICYjNDM7IDEpICogc2l6ZW9mKG5ld19lbnRyeSkgXHUwMDNlIFBBR0VfU0laRSB8fFxuIDQzNTpcdFx0XHQgICAgIChYMkFWSUNfTUFYX1BIWVNJQ0FMX0lEICYjNDM7IDEpICogc2l6ZW9mKG5ld19lbnRyeSkgXHUwMDNlIFBBR0VfU0laRSk7XG4gNDM2Olx0XG4gNDM3Olx0XHRpZiAoV0FSTl9PTl9PTkNFKCF2Y3B1LVx1MDAzZWFyY2guYXBpYy1cdTAwM2VyZWdzKSlcbiA0Mzg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDM5Olx0XG4gNDQwOlx0XHRpZiAoa3ZtX2FwaWN2X2FjdGl2YXRlZCh2Y3B1LVx1MDAzZWt2bSkpIHtcbiA0NDE6XHRcdFx0aW50IHJldDtcbiA0NDI6XHRcbiA0NDM6XHRcdFx0LypcbiA0NDQ6XHRcdFx0ICogTm90ZSwgQVZJQyBoYXJkd2FyZSB3YWxrcyB0aGUgbmVzdGVkIHBhZ2UgdGFibGUgdG8gY2hlY2tcbiA0NDU6XHRcdFx0ICogcGVybWlzc2lvbnMsIGJ1dCBkb2VzIG5vdCB1c2UgdGhlIFNQQSBhZGRyZXNzIHNwZWNpZmllZCBpblxuIDQ0NjpcdFx0XHQgKiB0aGUgbGVhZiBTUFRFIHNpbmNlIGl0IHVzZXMgYWRkcmVzcyBpbiB0aGUgQVZJQ19CQUNLSU5HX1BBR0VcbiA0NDc6XHRcdFx0ICogcG9pbnRlciBmaWVsZCBvZiB0aGUgVk1DQi5cbiA0NDg6XHRcdFx0ICovXG4gNDQ5Olx0XHRcdHJldCA9IGt2bV9hbGxvY19hcGljX2FjY2Vzc19wYWdlKHZjcHUtXHUwMDNla3ZtKTtcbiA0NTA6XHRcdFx0aWYgKHJldClcbiA0NTE6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDQ1MjpcdFx0fVxuIDQ1MzpcdFxuIDQ1NDpcdFx0LyogTm90ZSwgZmxzNjQoKSByZXR1cm5zIHRoZSBiaXQgcG9zaXRpb24sICYjNDM7MS4gKi9cbiA0NTU6XHRcdEJVSUxEX0JVR19PTihfX1BIWVNJQ0FMX01BU0tfU0hJRlQgXHUwMDNlXG4gNDU2Olx0XHRcdCAgICAgZmxzNjQoQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9CQUNLSU5HX1BBR0VfTUFTSykpO1xuIDQ1NzpcdFxuIDQ1ODpcdFx0LyogU2V0dGluZyBBVklDIGJhY2tpbmcgcGFnZSBhZGRyZXNzIGluIHRoZSBwaHkgQVBJQyBJRCB0YWJsZSAqL1xuIDQ1OTpcdFx0bmV3X2VudHJ5ID0gYXZpY19nZXRfYmFja2luZ19wYWdlX2FkZHJlc3Moc3ZtKSB8XG4gNDYwOlx0XHRcdCAgICBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX1ZBTElEX01BU0s7XG4gNDYxOlx0XHRzdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF9lbnRyeSA9IG5ld19lbnRyeTtcbiA0NjI6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY5NQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIERlZXBlciBpbnRvIGBhdmljX2luaXRfYmFja2luZ19wYWdlYCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGUgcmVtYWluaW5nIGNvZGUgZm9yIGBhdmljX2luaXRfYmFja2luZ19wYWdlYC4gSSYjMzk7bSBjdXJpb3VzIHRvIHNlZSBob3cgdGhlIGJhY2tpbmcgcGFnZSBpcyBhY3R1YWxseSBpbml0aWFsaXplZC4gV2UmIzM5O3ZlIGxpa2VseSBlc3RhYmxpc2hlZCB0aGUgYmFzaWMgc3RydWN0dXJlIGFuZCBhbGxvY2F0aW9uIGFscmVhZHksIG5vdyB3ZSYjMzk7cmUgZ2V0dGluZyBkb3duIHRvIHRoZSBuaXR0eS1ncml0dHkgb2YgZGF0YSBwb3B1bGF0aW9uIG9yIHNldHVwLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgb3BlcmF0aW9ucyByZWxhdGVkIHRvIHNldHRpbmcgdXAgcGFnZSB0YWJsZXMsIHBvdGVudGlhbGx5IGRlYWxpbmcgd2l0aCB2aXJ0dWFsIGFkZHJlc3NlcyBpZiB0aGlzIGlzIGEgaHlwZXJ2aXNvciBjb250ZXh0LCBvciBtYXliZSBpbml0aWFsIG1lbW9yeSBjbGVhciBvciBpbml0aWFsaXphdGlvbiBvZiBzcGVjaWZpYyBoYXJkd2FyZS1yZWxhdGVkIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIGJhY2tpbmcgcGFnZS4gVGhlcmUgaXMgbGlrZWx5IHRvIGJlIGEgbmVlZCB0byB2YWxpZGF0ZSB0aGF0IHRoZSBiYWNraW5nIHBhZ2UgZXhpc3RzLCB0aGF0IHRoZSBtZW1vcnkgcmVnaW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIGJhY2tpbmcgcGFnZSBhcmUgdmFsaWQsIGFuZCB0byBkZXRlcm1pbmUgdGhlIHBhZ2Ugc2l6ZS4gSSYjMzk7bGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBhbnkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHVuaXQgYW5kIGhvdyBpdCBoYW5kbGVzIHRoZSB2aXJ0dWFsLXRvLXBoeXNpY2FsIGFkZHJlc3MgdHJhbnNsYXRpb24uIFRoZSBpbnRlcmFjdGlvbiB3aXRoIGFueSBoYXJkd2FyZSBzdHJ1Y3R1cmVzIG9yIG90aGVyIHJlbGF0ZWQga2VybmVsIGRhdGEgd291bGQgYWxzbyBiZSBzb21ldGhpbmcgdG8gd2F0Y2guIEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgbGV2ZWwgb2YgbG9ja2luZyBvciBzeW5jaHJvbml6YXRpb24gdG8gZW5zdXJlIHRocmVhZC1zYWZldHksIHNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIGluIHRoZSBrZXJuZWwuIEZpbmFsbHksIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgZXJyb3IgY2hlY2tpbmcgb3IgYXNzZXJ0aW9ucyB0byB2YWxpZGF0ZSB0aGUgcmVzdWx0IG9mIHRoZXNlIHNldHVwIG9wZXJhdGlvbnMuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDYwOlx0XHRcdCAgICBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX1ZBTElEX01BU0s7XG4gNDYxOlx0XHRzdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF9lbnRyeSA9IG5ld19lbnRyeTtcbiA0NjI6XHRcbiA0NjM6XHRcdC8qXG4gNDY0Olx0XHQgKiBJbml0aWFsaXplIHRoZSByZWFsIHRhYmxlLCBhcyB2Q1BVcyBtdXN0IGhhdmUgYSB2YWxpZCBlbnRyeSBpbiBvcmRlclxuIDQ2NTpcdFx0ICogZm9yIGJyb2FkY2FzdCBJUElzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseSAoYnJvYWRjYXN0IElQSXMgaWdub3JlXG4gNDY2Olx0XHQgKiBpbnZhbGlkIGVudHJpZXMsIGkuZS4gYXJlbiYjMzk7dCBndWFyYW50ZWVkIHRvIGdlbmVyYXRlIGEgVk0tRXhpdCkuXG4gNDY3Olx0XHQgKi9cbiA0Njg6XHRcdFdSSVRFX09OQ0Uoa3ZtX3N2bS1cdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlW2lkXSwgbmV3X2VudHJ5KTtcbiA0Njk6XHRcbiA0NzA6XHRcdHJldHVybiAwO1xuIDQ3MTpcdH1cbiA0NzI6XHRcbiA0NzM6XHR2b2lkIGF2aWNfcmluZ19kb29yYmVsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gNDc0Olx0e1xuIDQ3NTpcdFx0LypcbiA0NzY6XHRcdCAqIE5vdGUsIHRoZSB2Q1BVIGNvdWxkIGdldCBtaWdyYXRlZCB0byBhIGRpZmZlcmVudCBwQ1BVIGF0IGFueSBwb2ludCxcbiA0Nzc6XHRcdCAqIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBzaWduYWxsaW5nIHRoZSB3cm9uZy9wcmV2aW91cyBwQ1BVLiAgQnV0IGlmXG4gNDc4Olx0XHQgKiB0aGF0IGhhcHBlbnMgdGhlIHZDUFUgaXMgZ3VhcmFudGVlZCB0byBkbyBhIFZNUlVOIChhZnRlciBiZWluZ1xuIDQ3OTpcdFx0ICogbWlncmF0ZWQpIGFuZCB0aHVzIHdpbGwgcHJvY2VzcyBwZW5kaW5nIGludGVycnVwdHMsIGkuZS4gYSBkb29yYmVsbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDAwCgkJCQkJCQlvdXRwdXQ6IDE3MAoJCQkJCQkJdGhvdWdodHM6IDQ2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQXZpYyBQaHlzaWNhbCBJRCBUYWJsZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHJldmlld2luZyB0aGlzIHBhdGNoIHRoYXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkgd2l0aGluIHRoZSBBTUQgU1ZNIEFWSUMgaW1wbGVtZW50YXRpb24uIFRoZSBpc3N1ZSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBzdGVtcyBmcm9tIHRoZSBgYXZpY19pbml0X2JhY2tpbmdfcGFnZWAgZnVuY3Rpb24gc2V0dGluZyBhbiBlbnRyeSBpbiB0aGUgYGt2bV9zdm0tJmd0O2F2aWNfcGh5c2ljYWxfaWRfdGFibGVgIHRvIHBvaW50IHRvIGEgYmFja2luZyBwYWdlLiBDcml0aWNhbGx5LCBwcmlvciB0byB0aGlzIHBhdGNoLCB0aGVzZSBlbnRyaWVzIHdlcmVuJiMzOTt0IGJlaW5nIGNsZWFuZWQgdXAgd2hlbiBhIHZDUFUgd2FzIGVpdGhlciBkZXN0cm95ZWQgb3IgZmFpbGVkIGR1cmluZyBjcmVhdGlvbi4gVGhpcyBsZWZ0IGEgZGFuZ2xpbmcgcG9pbnRlciwgYSBzdGFsZSBlbnRyeSBpbiB0aGUgYGF2aWNfcGh5c2ljYWxfaWRfdGFibGVgLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG1lbW9yeSBjb3JydXB0aW9uIGlmIGFjY2Vzc2VkIGxhdGVyLgoKVGhlIHBhdGNoJiMzOTtzIHNvbHV0aW9uIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogSXQgaW50cm9kdWNlcyBgYXZpY192Y3B1X2ZyZWVgIHRvIHplcm8gb3V0IHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHRoZSBgYXZpY19waHlzaWNhbF9pZF90YWJsZWAgdXNpbmcgYFdSSVRFX09OQ0VgLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZW4gY2FsbGVkIGJvdGggb24gZXJyb3IgcGF0aHMgd2l0aGluIGBzdm1fdmNwdV9jcmVhdGVgICphbmQqIGR1cmluZyBgc3ZtX3ZjcHVfZnJlZWAuIEVzc2VudGlhbGx5LCB0aGV5JiMzOTtyZSBlbnN1cmluZyB0aGF0IHRoZSB0YWJsZSBpcyBhbHdheXMgY2xlYW5lZCB1cCBwcm9wZXJseSwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHZDUFUgY3JlYXRpb24gc3VjY2VlZHMgb3IgZmFpbHMuCgpOb3csIHRoZSBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGNoYW5nZSByZXF1aXJlIEtNU0FOIGFuYWx5c2lzPyBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4gRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gSXQgKnplcm9lcyogb3V0IGFuIGV4aXN0aW5nIHRhYmxlIGVudHJ5LiBEb2VzIGl0IGludm9sdmUgYW55IG5ldyBhbGxvY2F0aW9ucyBvciBwYWRkaW5nPyBOby4gVGhlIGNvcmUgb2YgdGhlIGJ1ZyBpcyBhYm91dCAqbGlmZWN5Y2xlIG1hbmFnZW1lbnQqIGFuZCBwcmV2ZW50aW5nIGEgc3RhbGUgcG9pbnRlciwgd2hpY2ggaXMgZmlybWx5IHdpdGhpbiB0aGUgS0FTQU4gZG9tYWluLgoKR2l2ZW4gdGhhdCB0aGUgcm9vdCBjYXVzZSBpcyBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCB3aGljaCBpcyBhIGNsYXNzaWMgbWVtb3J5IGNvcnJ1cHRpb24gYnVnLCBLQVNBTiBpcyB0aGUgYXBwcm9wcmlhdGUgdG9vbC4gV2UgaGF2ZSBhIHJ1bGUgdGhhdCBzdGF0ZXM6ICYjMzQ7VEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwgTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4mIzM0OyBLTVNBTiBpcyBtb3JlIHJlc291cmNlLWludGVuc2l2ZSwgYW5kIHdlIHNob3VsZCBvbmx5IHV0aWxpemUgaXQgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCAqdW5pbml0aWFsaXplZCBtZW1vcnkqIHJpc2tzIHRoYXQgS0FTQU4gd291bGRuJiMzOTt0IGNhdGNoLiBUaGlzIGlzbiYjMzk7dCB0aGUgY2FzZSBoZXJlLgoKU28sIEkmIzM5O20gY29uZmlkZW50IGluIGNhbGxpbmcgYHNldC1yZXN1bHRzYC4gVGhpcyBpcyBhIEtBU0FOLXJlbGV2YW50IGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgYXZpY192Y3B1X2ZyZWUoKWAgdG8gY2xlYXIgKGBXUklURV9PTkNFKC4uLiwgMClgKSB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBpbiBga3ZtX3N2bS1cdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlYCB3aGVuIGEgdkNQVSBpcyBmcmVlZCBvciB3aGVuIHZDUFUgY3JlYXRpb24gZmFpbHMgYWZ0ZXIgQVZJQyBpbml0aWFsaXphdGlvbi4gVGhpcyBwcmV2ZW50cyBzdGFsZS9kYW5nbGluZyByZWZlcmVuY2VzIHRvIGZyZWVkIGJhY2tpbmcgcGFnZXMgaW4gdGhlIHBoeXNpY2FsIElEIHRhYmxlLlxuXG5UaGUgY2hhbmdlcyBvbmx5IHdyaXRlIGEgemVybyB2YWx1ZSB0byBhbiBleGlzdGluZyB0YWJsZSBhbmQgZG8gbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCByZWFkIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbHRlciBib3VuZHMgY2hlY2tzIGZvciB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZS4gTWVtb3J5IGxpZmVjeWNsZS9kYW5nbGluZyBwb2ludGVyIGlzc3VlcyBpbiB0aGlzIGNvbnRleHQgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0b3JzIHJhdGhlciB0aGFuIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgYXZpY192Y3B1X2ZyZWUoKWAgdG8gY2xlYXIgKGBXUklURV9PTkNFKC4uLiwgMClgKSB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBpbiBga3ZtX3N2bS1cdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlYCB3aGVuIGEgdkNQVSBpcyBmcmVlZCBvciB3aGVuIHZDUFUgY3JlYXRpb24gZmFpbHMgYWZ0ZXIgQVZJQyBpbml0aWFsaXphdGlvbi4gVGhpcyBwcmV2ZW50cyBzdGFsZS9kYW5nbGluZyByZWZlcmVuY2VzIHRvIGZyZWVkIGJhY2tpbmcgcGFnZXMgaW4gdGhlIHBoeXNpY2FsIElEIHRhYmxlLlxuXG5UaGUgY2hhbmdlcyBvbmx5IHdyaXRlIGEgemVybyB2YWx1ZSB0byBhbiBleGlzdGluZyB0YWJsZSBhbmQgZG8gbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCByZWFkIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbHRlciBib3VuZHMgY2hlY2tzIGZvciB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZS4gTWVtb3J5IGxpZmVjeWNsZS9kYW5nbGluZyBwb2ludGVyIGlzc3VlcyBpbiB0aGlzIGNvbnRleHQgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0b3JzIHJhdGhlciB0aGFuIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1Mjo0MC4zMTM2ODkzMzNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjI1NzI3ODExOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhdmljX3ZjcHVfZnJlZVwiLFxuICAgIFwic3ZtX3ZjcHVfY3JlYXRlXCIsXG4gICAgXCJzdm1fdmNwdV9mcmVlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBhdmljX3ZjcHVfZnJlZSgpYCB0byBjbGVhciAoYFdSSVRFX09OQ0UoLi4uLCAwKWApIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIGBrdm1fc3ZtLVxcdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlYCB3aGVuIGEgdkNQVSBpcyBmcmVlZCBvciB3aGVuIHZDUFUgY3JlYXRpb24gZmFpbHMgYWZ0ZXIgQVZJQyBpbml0aWFsaXphdGlvbi4gVGhpcyBwcmV2ZW50cyBzdGFsZS9kYW5nbGluZyByZWZlcmVuY2VzIHRvIGZyZWVkIGJhY2tpbmcgcGFnZXMgaW4gdGhlIHBoeXNpY2FsIElEIHRhYmxlLlxcblxcblRoZSBjaGFuZ2VzIG9ubHkgd3JpdGUgYSB6ZXJvIHZhbHVlIHRvIGFuIGV4aXN0aW5nIHRhYmxlIGFuZCBkbyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIHJlYWQgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsdGVyIGJvdW5kcyBjaGVja3MgZm9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgb3IgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBNZW1vcnkgbGlmZWN5Y2xlL2RhbmdsaW5nIHBvaW50ZXIgaXNzdWVzIGluIHRoaXMgY29udGV4dCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9tZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RvcnMgcmF0aGVyIHRoYW4gS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhdmljX3ZjcHVfZnJlZSgpIHRvIGNsZWFyIHRoZSBwaHlzaWNhbCBBUElDIElEIHRhYmxlIGVudHJ5IG9uIFNWTSB2Q1BVIGNyZWF0aW9uIGZhaWx1cmUgYW5kIHZDUFUgdGVhcmRvd24uIFRoaXMgbW9kaWZpZXMgZXhlY3V0YWJsZSBsaWZlY3ljbGUgY29kZSBpbiBLVk0gQU1EIChTVk0pLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIGZ1enphYmxlIG9uIGFtZDY0IHZpYSBLVk0gaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1Mjo0MC4zMTM2OTQwMDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTQ0OTgwNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmN2QxOWJkNGQzNGExM2IzNjJjZGY2ODc2ZTQyNjQ5OTc3MWUzYmYyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMDY6NTI6MzggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9hdmljLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1xcbmluZGV4IDNiMDM3ZTM4NTUyMzQuLmJjMmM2OTkzODBiMzQgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9hdmljLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1xcbkBAIC04ODUsNiArODg1LDE2IEBAIGludCBhdmljX2luaXRfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rdm9pZCBhdmljX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0dTMyIG1heF9pZCA9IHgyYXZpY19lbmFibGVkID8geDJhdmljX21heF9waHlzaWNhbF9pZCA6IEFWSUNfTUFYX1BIWVNJQ0FMX0lEO1xcbitcXHRzdHJ1Y3Qga3ZtX3N2bSAqa3ZtX3N2bSA9IHRvX2t2bV9zdm0odmNwdS1cXHUwMDNla3ZtKTtcXG4rXFx0dTMyIGlkID0gdmNwdS1cXHUwMDNldmNwdV9pZDtcXG4rXFxuK1xcdGlmIChrdm1fc3ZtLVxcdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlIFxcdTAwMjZcXHUwMDI2IGlkIFxcdTAwM2M9IG1heF9pZClcXG4rXFx0XFx0V1JJVEVfT05DRShrdm1fc3ZtLVxcdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlW2lkXSwgMCk7XFxuK31cXG4rXFxuIHZvaWQgYXZpY19hcGljdl9wb3N0X3N0YXRlX3Jlc3RvcmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdGF2aWNfaGFuZGxlX2Rmcl91cGRhdGUodmNwdSk7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuaW5kZXggZWE2NDc5MzhhMmE2NS4uYzJhMmFlN2Q4ZWMzNCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xcbkBAIC0xMzM3LDcgKzEzMzcsNyBAQCBzdGF0aWMgaW50IHN2bV92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHN2bS1cXHUwMDNlbXNycG0gPSBzdm1fdmNwdV9hbGxvY19tc3JwbSgpO1xcbiBcXHRpZiAoIXN2bS1cXHUwMDNlbXNycG0pIHtcXG4gXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4tXFx0XFx0Z290byBlcnJvcl9mcmVlX3NldjtcXG4rXFx0XFx0Z290byBlcnJvcl9mcmVlX2F2aWM7XFxuIFxcdH1cXG4gXFxuIFxcdHN2bS1cXHUwMDNleDJhdmljX21zcnNfaW50ZXJjZXB0ZWQgPSB0cnVlO1xcbkBAIC0xMzUxLDYgKzEzNTEsOCBAQCBzdGF0aWMgaW50IHN2bV92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuK2Vycm9yX2ZyZWVfYXZpYzpcXG4rXFx0YXZpY192Y3B1X2ZyZWUodmNwdSk7XFxuIGVycm9yX2ZyZWVfc2V2OlxcbiBcXHRzZXZfZnJlZV92Y3B1KHZjcHUpO1xcbiBlcnJvcl9mcmVlX3ZtY2JfcGFnZTpcXG5AQCAtMTM2NSw2ICsxMzY3LDggQEAgc3RhdGljIHZvaWQgc3ZtX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBcXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdCkpO1xcbiBcXG4rXFx0YXZpY192Y3B1X2ZyZWUodmNwdSk7XFxuK1xcbiBcXHRzdm1fbGVhdmVfbmVzdGVkKHZjcHUpO1xcbiBcXHRzdm1fZnJlZV9uZXN0ZWQoc3ZtKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXFxuaW5kZXggZTk1ODk0M2I4MTYyNy4uNzkwYmQ5NmE5NzkxMCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxcbkBAIC05NTQsNiArOTU0LDcgQEAgdm9pZCBhdmljX2luaXRfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IHZtY2IgKnZtY2IpO1xcbiBpbnQgYXZpY19pbmNvbXBsZXRlX2lwaV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gaW50IGF2aWNfdW5hY2NlbGVyYXRlZF9hY2Nlc3NfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIGludCBhdmljX2luaXRfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XFxuK3ZvaWQgYXZpY192Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gdm9pZCBhdmljX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xcbiB2b2lkIGF2aWNfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gdm9pZCBhdmljX2FwaWN2X3Bvc3Rfc3RhdGVfcmVzdG9yZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1Mjo0MS45Mjk2NzYxNTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMwMTk4OTM2NzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImF2aWNfdmNwdV9mcmVlXCIsXG4gICAgXCJzdm1fdmNwdV9jcmVhdGVcIixcbiAgICBcInN2bV92Y3B1X2ZyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGF2aWNfdmNwdV9mcmVlKCkgdG8gY2xlYXIgdGhlIHBoeXNpY2FsIEFQSUMgSUQgdGFibGUgZW50cnkgb24gU1ZNIHZDUFUgY3JlYXRpb24gZmFpbHVyZSBhbmQgdkNQVSB0ZWFyZG93bi4gVGhpcyBtb2RpZmllcyBleGVjdXRhYmxlIGxpZmVjeWNsZSBjb2RlIGluIEtWTSBBTUQgKFNWTSksIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUgb24gYW1kNjQgdmlhIEtWTSBpb2N0bHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjdkMTliZDRkMzRhMTNiMzYyY2RmNjg3NmU0MjY0OTk3NzFlM2JmMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDY6NTI6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYyBiL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jXG5pbmRleCAzYjAzN2UzODU1MjM0Li5iYzJjNjk5MzgwYjM0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9hdmljLmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jXG5AQCAtODg1LDYgKzg4NSwxNiBAQCBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbit2b2lkIGF2aWNfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHR1MzIgbWF4X2lkID0geDJhdmljX2VuYWJsZWQgPyB4MmF2aWNfbWF4X3BoeXNpY2FsX2lkIDogQVZJQ19NQVhfUEhZU0lDQUxfSUQ7XG4rXHRzdHJ1Y3Qga3ZtX3N2bSAqa3ZtX3N2bSA9IHRvX2t2bV9zdm0odmNwdS1cdTAwM2Vrdm0pO1xuK1x0dTMyIGlkID0gdmNwdS1cdTAwM2V2Y3B1X2lkO1xuK1xuK1x0aWYgKGt2bV9zdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZSBcdTAwMjZcdTAwMjYgaWQgXHUwMDNjPSBtYXhfaWQpXG4rXHRcdFdSSVRFX09OQ0Uoa3ZtX3N2bS1cdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlW2lkXSwgMCk7XG4rfVxuK1xuIHZvaWQgYXZpY19hcGljdl9wb3N0X3N0YXRlX3Jlc3RvcmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdGF2aWNfaGFuZGxlX2Rmcl91cGRhdGUodmNwdSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbmluZGV4IGVhNjQ3OTM4YTJhNjUuLmMyYTJhZTdkOGVjMzQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5AQCAtMTMzNyw3ICsxMzM3LDcgQEAgc3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c3ZtLVx1MDAzZW1zcnBtID0gc3ZtX3ZjcHVfYWxsb2NfbXNycG0oKTtcbiBcdGlmICghc3ZtLVx1MDAzZW1zcnBtKSB7XG4gXHRcdGVyciA9IC1FTk9NRU07XG4tXHRcdGdvdG8gZXJyb3JfZnJlZV9zZXY7XG4rXHRcdGdvdG8gZXJyb3JfZnJlZV9hdmljO1xuIFx0fVxuIFxuIFx0c3ZtLVx1MDAzZXgyYXZpY19tc3JzX2ludGVyY2VwdGVkID0gdHJ1ZTtcbkBAIC0xMzUxLDYgKzEzNTEsOCBAQCBzdGF0aWMgaW50IHN2bV92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRyZXR1cm4gMDtcbiBcbitlcnJvcl9mcmVlX2F2aWM6XG4rXHRhdmljX3ZjcHVfZnJlZSh2Y3B1KTtcbiBlcnJvcl9mcmVlX3NldjpcbiBcdHNldl9mcmVlX3ZjcHUodmNwdSk7XG4gZXJyb3JfZnJlZV92bWNiX3BhZ2U6XG5AQCAtMTM2NSw2ICsxMzY3LDggQEAgc3RhdGljIHZvaWQgc3ZtX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3QpKTtcbiBcbitcdGF2aWNfdmNwdV9mcmVlKHZjcHUpO1xuK1xuIFx0c3ZtX2xlYXZlX25lc3RlZCh2Y3B1KTtcbiBcdHN2bV9mcmVlX25lc3RlZChzdm0pO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5pbmRleCBlOTU4OTQzYjgxNjI3Li43OTBiZDk2YTk3OTEwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuQEAgLTk1NCw2ICs5NTQsNyBAQCB2b2lkIGF2aWNfaW5pdF92bWNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qgdm1jYiAqdm1jYik7XG4gaW50IGF2aWNfaW5jb21wbGV0ZV9pcGlfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gaW50IGF2aWNfdW5hY2NlbGVyYXRlZF9hY2Nlc3NfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gaW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcbit2b2lkIGF2aWNfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBhdmljX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xuIHZvaWQgYXZpY192Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgYXZpY19hcGljdl9wb3N0X3N0YXRlX3Jlc3RvcmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjUyOjQxLjkyOTY3ODAyM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0Mjk2OTU3OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBLVk0vU1ZNIFBhdGNoKipcblxuT2theSwgc28gdGhlIGNoYW5nZSBJJ20gbG9va2luZyBhdCBzZWVtcyB0byBiZSB0b3VjaGluZyB0aGUgQU1ENjQgYXJjaGl0ZWN0dXJlIEtWTS9TVk0gY29kZS4gVGhlIGtleSBmaWxlcyBhcmUgaW4gYGFyY2gveDg2L2t2bS9zdm0vYXZpYy5jYCwgYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmNgLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgaGVhZGVyLCBgYXJjaC94ODYva3ZtL3N2bS9zdm0uaGAuIEdpdmVuIG15IGV4cGVydGlzZSwgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBhY3Qgb2YgdGhpcy5cblxuRmlyc3QsIEknbSBnb2luZyB0byBydW4gYSBgZ2l0IGdyZXBgIG9yIG1heWJlIGp1c3QgcmVhZCB0aGUgZmlsZSBkaXJlY3RseSBvbiBgYXJjaC94ODYva3ZtL3N2bS9hdmljLmNgIGFuZCBgYXJjaC94ODYva3ZtL3N2bS9zdm0uY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBxdWljayBvdmVydmlldyBvZiB3aGF0J3MgYmVlbiBtb2RpZmllZCBhbmQgd2hlcmUgdGhlIGNoYW5nZXMgYXJlIGxvY2F0ZWQgd2l0aGluIHRoZSBsYXJnZXIgY29kZWJhc2UuIEkgZXhwZWN0IHRoaXMgaW5pdGlhbCBzd2VlcCB3aWxsIHJldmVhbCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IGFmZmVjdGVkIGJ5IHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzczMSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjUyOjQ4LjM1OTM3NjI1NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzOTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9zdm0vYXZpYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg3MDpcXHRcXHRpbnQgcmV0O1xcbiA4NzE6XFx0XFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gXFx1MDAyNnN2bS1cXHUwMDNldmNwdTtcXG4gODcyOlxcdFxcbiA4NzM6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdCk7XFxuIDg3NDpcXHRcXHRyYXdfc3Bpbl9sb2NrX2luaXQoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdF9sb2NrKTtcXG4gODc1OlxcdFxcbiA4NzY6XFx0XFx0aWYgKCFlbmFibGVfYXBpY3YgfHwgIWlycWNoaXBfaW5fa2VybmVsKHZjcHUtXFx1MDAzZWt2bSkpXFxuIDg3NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gODc4OlxcdFxcbiA4Nzk6XFx0XFx0cmV0ID0gYXZpY19pbml0X2JhY2tpbmdfcGFnZSh2Y3B1KTtcXG4gODgwOlxcdFxcdGlmIChyZXQpXFxuIDg4MTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA4ODI6XFx0XFxuIDg4MzpcXHRcXHRzdm0tXFx1MDAzZWRmcl9yZWcgPSBBUElDX0RGUl9GTEFUO1xcbiA4ODQ6XFx0XFxuIDg4NTpcXHRcXHRyZXR1cm4gcmV0O1xcbiA4ODY6XFx0fVxcbiA4ODc6XFx0XFxuIDg4ODpcXHR2b2lkIGF2aWNfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gODg5OlxcdHtcXG4gODkwOlxcdFxcdHUzMiBtYXhfaWQgPSB4MmF2aWNfZW5hYmxlZCA/IHgyYXZpY19tYXhfcGh5c2ljYWxfaWQgOiBBVklDX01BWF9QSFlTSUNBTF9JRDtcXG4gODkxOlxcdFxcdHN0cnVjdCBrdm1fc3ZtICprdm1fc3ZtID0gdG9fa3ZtX3N2bSh2Y3B1LVxcdTAwM2Vrdm0pO1xcbiA4OTI6XFx0XFx0dTMyIGlkID0gdmNwdS1cXHUwMDNldmNwdV9pZDtcXG4gODkzOlxcdFxcbiA4OTQ6XFx0XFx0aWYgKGt2bV9zdm0tXFx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGUgXFx1MDAyNlxcdTAwMjYgaWQgXFx1MDAzYz0gbWF4X2lkKVxcbiA4OTU6XFx0XFx0XFx0V1JJVEVfT05DRShrdm1fc3ZtLVxcdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlW2lkXSwgMCk7XFxuIDg5NjpcXHR9XFxuIDg5NzpcXHRcXG4gODk4OlxcdHZvaWQgYXZpY19hcGljdl9wb3N0X3N0YXRlX3Jlc3RvcmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiA4OTk6XFx0e1xcbiA5MDA6XFx0XFx0YXZpY19oYW5kbGVfZGZyX3VwZGF0ZSh2Y3B1KTtcXG4gOTAxOlxcdFxcdGF2aWNfaGFuZGxlX2xkcl91cGRhdGUodmNwdSk7XFxuIDkwMjpcXHR9XFxuIDkwMzpcXHRcXG4gOTA0OlxcdHN0YXRpYyB2b2lkIHN2bV9pcl9saXN0X2RlbChzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQpXFxuIDkwNTpcXHR7XFxuIDkwNjpcXHRcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBpcnFmZC1cXHUwMDNlaXJxX2J5cGFzc192Y3B1O1xcbiA5MDc6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gOTA4OlxcdFxcbiA5MDk6XFx0XFx0aWYgKCF2Y3B1KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1Mjo0OC4zNTk0NzE3ODVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDcwNzQyMDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGlnZ2luZyBpbnRvIFNWTSBWQ1BVIExpZmVjeWNsZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgQU1EIFNlY3VyZSBWaXJ0dWFsIE1hY2hpbmUgKFNWTSkgaW1wbGVtZW50YXRpb24gd2l0aGluIEtWTS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxpZmVjeWNsZSBvZiBhIHZpcnR1YWwgQ1BVICh2Q1BVKSBpbiB0aGUgU1ZNIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB2Q1BVcyBhcmUgY3JlYXRlZCBhbmQgZGVzdHJveWVkLiBUaGF0J3MgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBvdmVyYWxsIHZpcnR1YWxpemF0aW9uIGZsb3cuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jYCBmaWxlLiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIGFyb3VuZCB0aGUgYHN2bV92Y3B1X2NyZWF0ZWAgYW5kIGBzdm1fdmNwdV9mcmVlYCBmdW5jdGlvbnMuIFRoYXQncyB3aGVyZSB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBhbmQgY2xlYW51cCBvZiBhbiBTVk0gdkNQVSB3aWxsIGJlIGhhbmRsZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmaW5lciBkZXRhaWxzIG9mIHRoZSBndWVzdCdzIGV4ZWN1dGlvbi4gSSdsbCBwcm9iYWJseSBiZSBsb29raW5nIGZvciBkYXRhIHN0cnVjdHVyZXMgYW5kIGluaXRpYWxpemF0aW9uIGNhbGxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzUzLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1Mjo1MC44MzAyMTYyOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzMjA6XFx0XFxuMTMyMTpcXHRcXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHZjcHVfc3ZtLCB2Y3B1KSAhPSAwKTtcXG4xMzIyOlxcdFxcdHN2bSA9IHRvX3N2bSh2Y3B1KTtcXG4xMzIzOlxcdFxcbjEzMjQ6XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4xMzI1OlxcdFxcdHZtY2IwMV9wYWdlID0gc25wX3NhZmVfYWxsb2NfcGFnZSgpO1xcbjEzMjY6XFx0XFx0aWYgKCF2bWNiMDFfcGFnZSlcXG4xMzI3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjEzMjg6XFx0XFxuMTMyOTpcXHRcXHRlcnIgPSBzZXZfdmNwdV9jcmVhdGUodmNwdSk7XFxuMTMzMDpcXHRcXHRpZiAoZXJyKVxcbjEzMzE6XFx0XFx0XFx0Z290byBlcnJvcl9mcmVlX3ZtY2JfcGFnZTtcXG4xMzMyOlxcdFxcbjEzMzM6XFx0XFx0ZXJyID0gYXZpY19pbml0X3ZjcHUoc3ZtKTtcXG4xMzM0OlxcdFxcdGlmIChlcnIpXFxuMTMzNTpcXHRcXHRcXHRnb3RvIGVycm9yX2ZyZWVfc2V2O1xcbjEzMzY6XFx0XFxuMTMzNzpcXHRcXHRzdm0tXFx1MDAzZW1zcnBtID0gc3ZtX3ZjcHVfYWxsb2NfbXNycG0oKTtcXG4xMzM4OlxcdFxcdGlmICghc3ZtLVxcdTAwM2Vtc3JwbSkge1xcbjEzMzk6XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4xMzQwOlxcdFxcdFxcdGdvdG8gZXJyb3JfZnJlZV9hdmljO1xcbjEzNDE6XFx0XFx0fVxcbjEzNDI6XFx0XFxuMTM0MzpcXHRcXHRzdm0tXFx1MDAzZXgyYXZpY19tc3JzX2ludGVyY2VwdGVkID0gdHJ1ZTtcXG4xMzQ0OlxcdFxcdHN2bS1cXHUwMDNlbGJyX21zcnNfaW50ZXJjZXB0ZWQgPSB0cnVlO1xcbjEzNDU6XFx0XFxuMTM0NjpcXHRcXHRzdm0tXFx1MDAzZXZtY2IwMS5wdHIgPSBwYWdlX2FkZHJlc3Modm1jYjAxX3BhZ2UpO1xcbjEzNDc6XFx0XFx0c3ZtLVxcdTAwM2V2bWNiMDEucGEgPSBfX3NtZV9zZXQocGFnZV90b19wZm4odm1jYjAxX3BhZ2UpIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpO1xcbjEzNDg6XFx0XFx0c3ZtX3N3aXRjaF92bWNiKHN2bSwgXFx1MDAyNnN2bS1cXHUwMDNldm1jYjAxKTtcXG4xMzQ5OlxcdFxcbjEzNTA6XFx0XFx0c3ZtLVxcdTAwM2VndWVzdF9zdGF0ZV9sb2FkZWQgPSBmYWxzZTtcXG4xMzUxOlxcdFxcbjEzNTI6XFx0XFx0cmV0dXJuIDA7XFxuMTM1MzpcXHRcXG4xMzU0OlxcdGVycm9yX2ZyZWVfYXZpYzpcXG4xMzU1OlxcdFxcdGF2aWNfdmNwdV9mcmVlKHZjcHUpO1xcbjEzNTY6XFx0ZXJyb3JfZnJlZV9zZXY6XFxuMTM1NzpcXHRcXHRzZXZfZnJlZV92Y3B1KHZjcHUpO1xcbjEzNTg6XFx0ZXJyb3JfZnJlZV92bWNiX3BhZ2U6XFxuMTM1OTpcXHRcXHRfX2ZyZWVfcGFnZSh2bWNiMDFfcGFnZSk7XFxuMTM2MDpcXHRvdXQ6XFxuMTM2MTpcXHRcXHRyZXR1cm4gZXJyO1xcbjEzNjI6XFx0fVxcbjEzNjM6XFx0XFxuMTM2NDpcXHRzdGF0aWMgdm9pZCBzdm1fdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4xMzY1OlxcdHtcXG4xMzY2OlxcdFxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbjEzNjc6XFx0XFxuMTM2ODpcXHRcXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdCkpO1xcbjEzNjk6XFx0XFxuMTM3MDpcXHRcXHRhdmljX3ZjcHVfZnJlZSh2Y3B1KTtcXG4xMzcxOlxcdFxcbjEzNzI6XFx0XFx0c3ZtX2xlYXZlX25lc3RlZCh2Y3B1KTtcXG4xMzczOlxcdFxcdHN2bV9mcmVlX25lc3RlZChzdm0pO1xcbjEzNzQ6XFx0XFxuMTM3NTpcXHRcXHRzZXZfZnJlZV92Y3B1KHZjcHUpO1xcbjEzNzY6XFx0XFxuMTM3NzpcXHRcXHRfX2ZyZWVfcGFnZShfX3NtZV9wYV90b19wYWdlKHN2bS1cXHUwMDNldm1jYjAxLnBhKSk7XFxuMTM3ODpcXHRcXHRzdm1fdmNwdV9mcmVlX21zcnBtKHN2bS1cXHUwMDNlbXNycG0pO1xcbjEzNzk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1Mjo1MC44MzA0MjM3NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5ODg2NDUxMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS1ZNIFNWTSBhbmQgRnV6emluZyAtIEEgUXVpY2sgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBkZWx2ZXMgaW50byB0aGUgS1ZNIEFNRCBTVk0gY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGFyY2gveDg2L2t2bS9zdm0vYCBkaXJlY3RvcnkuIFRoYXQgaW1tZWRpYXRlbHkgc2NyZWFtcyB2aXJ0dWFsaXphdGlvbiwgYW5kIGZvciB4ODYgTGludXgsIEtWTSBpcyB0aGUgZ28tdG8gY29yZSBzdWJzeXN0ZW0uIEkga25vdyBpdCdzICpldmVyeXdoZXJlKiBvbiBBTUQgaGFyZHdhcmUsIGFuZCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc2NlbmFyaW9zIG9yIHJ1bm5pbmcgUUVNVSB3aXRoIEtWTS9TVk0gYXJlIGluY3JlZGlibHkgY29tbW9uLiBBbmQgb2YgY291cnNlLCB0aGF0IG1lYW5zIGl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcsIGFuZCBhIHdlbGwtdW5kZXJzdG9vZCB0YXJnZXQgYXQgdGhhdC4gU3l6a2FsbGVyJ3MgS1ZNIGlvY3RsIHN1cHBvcnQg4oCTIGBLVk1fQ1JFQVRFX1ZNYCwgYEtWTV9DUkVBVEVfVkNQVWAsIHRoZSB3aG9sZSBzdWl0ZSDigJMgaXMgZXhjZWxsZW50LlxuXG5UaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgY2FuIHdlIGFjdHVhbGx5IGZ1enogS1ZNIFNWTSBlZmZlY3RpdmVseSB0aHJvdWdoIFFFTVUgYW5kIHN5emthbGxlcj8gVGhlIGFuc3dlciwgdGhhbmtmdWxseSwgaXMgKnllcyouIEknbSBjb25maWRlbnQgc3l6a2FsbGVyIGhhcyBLVk0gd2VsbC1jb3ZlcmVkLCBmdXp6aW5nIGV4dGVuc2l2ZWx5IHRocm91Z2ggYC9kZXYva3ZtYC4gVGhhdCdzIHRoZSBrZXkuIE5vdywgYmVmb3JlIEkgZ28gZGVlcGVyIEkgd2lsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgS2NvbmZpZyBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCBLVk0gU1ZNLiBUaGF0J2xsIGdpdmUgbWUgYSBiYXNlbGluZSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBzcGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkyMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjUyOjUzLjgxOTA3MDkzNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzczOTg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0FNRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTM0PWNvbmZpZyBLVk1fSU5URUxfVERYXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1Mjo1My44NjY4MTQ4ODVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTk1NzkyODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgY29kZTpcblxuKipEaXZpbmcgaW50byBLVk0gQ29uZmlndXJhdGlvbiBmb3IgQU1EKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUga2VybmVsIGNvbmZpZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBLVk0gQU1EIHN1cHBvcnQgaXMgc3RydWN0dXJlZCwgc28gbGV0J3MganVtcCBzdHJhaWdodCBpbnRvIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIFNwZWNpZmljYWxseSwgSSdtIGZvY3VzaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJvdW5kIGBjb25maWcgS1ZNX0FNRGAuIFRoaXMgaXMgdGhlIHVzdWFsIHN0YXJ0aW5nIHBvaW50LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIG9wdGlvbiB0aWVzIGludG8gdGhlIHJlc3Qgb2YgdGhlIEtWTSBpbmZyYXN0cnVjdHVyZSBvbiB4ODYsIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5LCBhbmQgd2hhdCBzcGVjaWZpYyBmZWF0dXJlcyBhcmUgY29uZGl0aW9uYWxseSBlbmFibGVkIGJhc2VkIG9uIHdoZXRoZXIgYEtWTV9BTURgIGlzIGRlZmluZWQuIEFyZSB0aGVyZSBkaWZmZXJlbnQgZmVhdHVyZSBzZXRzIGJhc2VkIG9uIHRoZSBBTUQgcHJvY2Vzc29yPyBBcmUgdGhlcmUgYW55IHJlbGF0ZWQgZGVidWdnaW5nIG9wdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEknbSBhbnRpY2lwYXRpbmcgZmluZGluZyB0aGUgQU1ELXNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzIGV4cG9zZWQgdG8gdGhlIGh5cGVydmlzb3IsIGFueSBxdWlya3MsIGFuZCBob3cgdGhvc2UgYXJlIG1hbmFnZWQgd2l0aGluIHRoZSBLY29uZmlnIHN5c3RlbS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgbGF5IG9mIHRoZSBsYW5kIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NTUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1Mjo1Ni4wNjI2MDk2OTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdFxcdGhlbHBcXG4gMTQxOlxcdFxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgbGF1bmNoaW5nIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpXFxuIDE0MjpcXHRcXHQgIGNvbmZpZGVudGlhbCBWTXMgb24gSW50ZWwgcHJvY2Vzc29ycy5cXG4gMTQzOlxcdFxcbiAxNDQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxNDU6XFx0XFxuIDE0NjpcXHRjb25maWcgS1ZNX0FNRFxcbiAxNDc6XFx0XFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4gMTQ4OlxcdFxcdGRlcGVuZHMgb24gS1ZNIFxcdTAwMjZcXHUwMDI2IChDUFVfU1VQX0FNRCB8fCBDUFVfU1VQX0hZR09OKVxcbiAxNDk6XFx0XFx0aGVscFxcbiAxNTA6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gQU1EIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCB0aGUgQU1ELVZcXG4gMTUxOlxcdFxcdCAgKFNWTSkgZXh0ZW5zaW9ucy5cXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTU0OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWFtZC5cXG4gMTU1OlxcdFxcbiAxNTY6XFx0Y29uZmlnIEtWTV9BTURfU0VWXFxuIDE1NzpcXHRcXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbiAxNTg6XFx0XFx0ZGVmYXVsdCB5XFxuIDE1OTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9BTUQgXFx1MDAyNlxcdTAwMjYgWDg2XzY0XFxuIDE2MDpcXHRcXHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfUFNQIFxcdTAwMjZcXHUwMDI2ICEoS1ZNX0FNRD15IFxcdTAwMjZcXHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pXFxuIDE2MTpcXHRcXHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cXG4gMTYyOlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAxNjM6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9DT05WRVJUXFxuIDE2NDpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1JFQ0xBSU1cXG4gMTY1OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbiAxNjY6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxcbiAxNjc6XFx0XFx0aGVscFxcbiAxNjg6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgZW5jcnlwdGVkIFZNcyB3aGljaCB1c2UgU2VjdXJlXFxuIDE2OTpcXHRcXHQgIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSwgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjUyOjU2LjA2MjY3OTI3NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzkzMzY1MjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0tQU1EIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHBvaW50cyB0byBgS1ZNX0FNRGAgaGF2aW5nIGRlcGVuZGVuY2llcy4gU3BlY2lmaWNhbGx5LCBpdCBuZWVkcyBgS1ZNYCwgYW5kIGl0IHJlcXVpcmVzIGVpdGhlciBgQ1BVX1NVUF9BTURgIG9yIGBDUFVfU1VQX0hZR09OYCB0byBiZSBwcmVzZW50LiBUaGF0IG1ha2VzIHNlbnNlLCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhcmNoaXRlY3R1cmUuIE5vdywgdG8gY29uZmlybSB0aGlzLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IE1ha2VmaWxlLiBMZXQncyBuYXZpZ2F0ZSB0byBgYXJjaC94ODYva3ZtL3N2bS9NYWtlZmlsZWAgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gaGFzIHRvIHNheS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMyOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTI6NTcuODU2MDQ2NjgxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MjMwLCJFcnJvciI6InRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3N2bS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJ0aGUgZmlsZSBkb2VzIG5vdCBleGlzdFwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1Mjo1Ny44NTYxMTY4MjFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA3ODg4NDI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0geDg2IE1ha2VmaWxlKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYSBjcnVjaWFsIGZpbGU6IGBhcmNoL3g4Ni9rdm0vTWFrZWZpbGVgLiBJJ20gZ3Vlc3NpbmcgdGhhdCB3aGF0ZXZlciBJJ20gdHJvdWJsZXNob290aW5nLCBvciB3aGF0ZXZlciBlbmhhbmNlbWVudCBJJ20gd29ya2luZyBvbiwgbGlrZWx5IGhhcyBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIGNvcmUgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIEtWTSB4ODYgbW9kdWxlLiBUaGlzIE1ha2VmaWxlIGlzIHdoZXJlIGEgbG90IG9mIHRoZSBtYWdpYyBoYXBwZW5zIOKAkyBkZXBlbmRlbmNpZXMgYXJlIGRlZmluZWQsIGNvbXBpbGF0aW9uIHRhcmdldHMgYXJlIHNldCB1cCwgYW5kIHVsdGltYXRlbHksIHRoZSBLVk0ga2VybmVsIG1vZHVsZSBmb3IgdGhlIHg4NiBhcmNoaXRlY3R1cmUgZ2V0cyBidWlsdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmaWxlJ3MgbG9naWMgdG8gc2VlIHdoZXJlIG15IGNoYW5nZXMgZml0IGluIG9yIHdoZXJlIHRoZSBwcm9ibGVtIGxpZXMuIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NTYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjUyOjU5LjkzNTAwMzQ1M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxODE0ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3ZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDYyMjAgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZT0yMj1rdm0taW50ZWwtJChDT05GSUdfS1ZNX0lOVEVMX1REWClcXHQrPSB2bXgvdGR4Lm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMjMtXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjI0Omt2bS1hbWQteVxcdFxcdCs9IHN2bS9zdm0ubyBzdm0vdm1lbnRlci5vIHN2bS9wbXUubyBzdm0vbmVzdGVkLm8gc3ZtL2F2aWMub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0yNS1cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MjY6a3ZtLWFtZC0kKENPTkZJR19LVk1fQU1EX1NFVilcXHQrPSBzdm0vc2V2Lm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6Mjc6a3ZtLWFtZC0kKENPTkZJR19LVk1fSFlQRVJWKVxcdCs9IHN2bS9oeXBlcnYub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0yOC1cXG4tLVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZT0zMT1rdm0taW50ZWwteVxcdFxcdCs9IHZteC92bXhfb25oeXBlcnYubyB2bXgvaHlwZXJ2X2V2bWNzLm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MzI6a3ZtLWFtZC15XFx0XFx0Kz0gc3ZtL3N2bV9vbmh5cGVydi5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTMzLWVuZGlmXFxuLS1cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU9Mzc9b2JqLSQoQ09ORklHX0tWTV9BTUQpXFx0Kz0ga3ZtLWFtZC5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTM4LVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZTozOTpBRkxBR1Nfc3ZtL3ZtZW50ZXIubyAgICA6PSAtaXF1b3RlICQob2JqKVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZTo0MDokKG9iaikvc3ZtL3ZtZW50ZXIubzogJChvYmopL2t2bS1hc20tb2Zmc2V0cy5oXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTQxLVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0zODYzPXN0YXRpYyBpbnQgY2hlY2tfZHJfd3JpdGUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM4ODktXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzozODkwOnN0YXRpYyBpbnQgY2hlY2tfc3ZtZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM4OTEte1xcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zOTAxLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MzkwMjpzdGF0aWMgaW50IGNoZWNrX3N2bWVfcGEoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zOTAzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzkwOC1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjM5MDk6XFx0cmV0dXJuIGNoZWNrX3N2bWUoY3R4dCk7XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zOTEwLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9NDAxND1zdGF0aWMgY29uc3Qgc3RydWN0IG9wY29kZSBncm91cDdfcm0zW10gPSB7XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo0MDE1OlxcdERJUChTcmNOb25lIHwgUHJvdCB8IFByaXYsXFx0XFx0dm1ydW4sXFx0XFx0Y2hlY2tfc3ZtZV9wYSksXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00MDE2LVxcdElJKFNyY05vbmUgIHwgUHJvdCB8IEVtdWxhdGVPblVELFxcdGVtX2h5cGVyY2FsbCxcXHR2bW1jYWxsKSxcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjQwMTc6XFx0RElQKFNyY05vbmUgfCBQcm90IHwgUHJpdixcXHRcXHR2bWxvYWQsXFx0XFx0Y2hlY2tfc3ZtZV9wYSksXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo0MDE4OlxcdERJUChTcmNOb25lIHwgUHJvdCB8IFByaXYsXFx0XFx0dm1zYXZlLFxcdFxcdGNoZWNrX3N2bWVfcGEpLFxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NDAxOTpcXHRESVAoU3JjTm9uZSB8IFByb3QgfCBQcml2LFxcdFxcdHN0Z2ksXFx0XFx0Y2hlY2tfc3ZtZSksXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo0MDIwOlxcdERJUChTcmNOb25lIHwgUHJvdCB8IFByaXYsXFx0XFx0Y2xnaSxcXHRcXHRjaGVja19zdm1lKSxcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjQwMjE6XFx0RElQKFNyY05vbmUgfCBQcm90IHwgUHJpdixcXHRcXHRza2luaXQsXFx0XFx0Y2hlY2tfc3ZtZSksXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo0MDIyOlxcdERJUChTcmNOb25lIHwgUHJvdCB8IFByaXYsXFx0XFx0aW52bHBnYSxcXHRjaGVja19zdm1lKSxcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTQwMjMtfTtcXG4tLVxcbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYy0xMC0jaW5jbHVkZSBcXFwidm14L3ZteC5oXFxcIlxcbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYzoxMTojaW5jbHVkZSBcXFwic3ZtL3N2bS5oXFxcIlxcbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYy0xMi1cXG5hcmNoL3g4Ni9rdm0va3ZtLWFzbS1vZmZzZXRzLmM9MTM9c3RhdGljIHZvaWQgX191c2VkIGNvbW1vbih2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jLTE2LVxcdFxcdEJMQU5LKCk7XFxuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jOjE3OlxcdFxcdE9GRlNFVChTVk1fdmNwdV9hcmNoX3JlZ3MsIHZjcHVfc3ZtLCB2Y3B1LmFyY2gucmVncyk7XFxuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jOjE4OlxcdFxcdE9GRlNFVChTVk1fY3VycmVudF92bWNiLCB2Y3B1X3N2bSwgY3VycmVudF92bWNiKTtcXG5hcmNoL3g4Ni9rdm0va3ZtLWFzbS1vZmZzZXRzLmM6MTk6XFx0XFx0T0ZGU0VUKFNWTV9zcGVjX2N0cmwsIHZjcHVfc3ZtLCBzcGVjX2N0cmwpO1xcbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYzoyMDpcXHRcXHRPRkZTRVQoU1ZNX3ZtY2IwMSwgdmNwdV9zdm0sIHZtY2IwMSk7XFxuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jLTIxLVxcdFxcdE9GRlNFVChLVk1fVk1DQl9wYSwga3ZtX3ZtY2JfaW5mbywgcGEpO1xcbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYzoyMjpcXHRcXHRPRkZTRVQoU0Rfc2F2ZV9hcmVhX3BhLCBzdm1fY3B1X2RhdGEsIHNhdmVfYXJlYV9wYSk7XFxuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jLTIzLVxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTgtI2luY2x1ZGUgXFx1MDAzY2FzbS9zcGVjLWN0cmwuaFxcdTAwM2VcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5OiNpbmNsdWRlIFxcdTAwM2Nhc20vc3ZtLmhcXHUwMDNlXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MC0jaW5jbHVkZSBcXHUwMDNjYXNtL3ZteC5oXFx1MDAzZVxcbi0tXFxuYXJjaC94ODYva3ZtL3JlZ3MuaD0zMTM9c3RhdGljIGlubGluZSB1NjQga3ZtX3BkcHRyX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgaW5kZXgpXFxuYXJjaC94ODYva3ZtL3JlZ3MuaC0zMTQte1xcbmFyY2gveDg2L2t2bS9yZWdzLmg6MzE1OlxcdG1pZ2h0X3NsZWVwKCk7ICAvKiBvbiBzdm0gKi9cXG5hcmNoL3g4Ni9rdm0vcmVncy5oLTMxNi1cXG4tLVxcbmFyY2gveDg2L2t2bS9zbW0uYz0xOD1zdGF0aWMgdm9pZCBjaGVja19zbXJhbV9vZmZzZXRzKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc21tLmMtODItXFx0Q0hFQ0tfU01SQU02NF9PRkZTRVQoZWZlcixcXHRcXHRcXHQweEZFRDApO1xcbmFyY2gveDg2L2t2bS9zbW0uYzo4MzpcXHRDSEVDS19TTVJBTTY0X09GRlNFVChzdm1fZ3Vlc3RfZmxhZyxcXHRcXHQweEZFRDgpO1xcbmFyY2gveDg2L2t2bS9zbW0uYzo4NDpcXHRDSEVDS19TTVJBTTY0X09GRlNFVChzdm1fZ3Vlc3Rfdm1jYl9ncGEsXFx0MHhGRUUwKTtcXG5hcmNoL3g4Ni9rdm0vc21tLmM6ODU6XFx0Q0hFQ0tfU01SQU02NF9PRkZTRVQoc3ZtX2d1ZXN0X3ZpcnR1YWxfaW50LFxcdDB4RkVFOCk7XFxuYXJjaC94ODYva3ZtL3NtbS5jLTg2LVxcdENIRUNLX1NNUkFNNjRfT0ZGU0VUKHJlc2VydmVkMyxcXHRcXHRcXHQweEZFRjApO1xcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5jLTkwLVxcdENIRUNLX1NNUkFNNjRfT0ZGU0VUKHNzcCxcXHRcXHRcXHQweEZGMTgpO1xcbmFyY2gveDg2L2t2bS9zbW0uYzo5MTpcXHRDSEVDS19TTVJBTTY0X09GRlNFVChzdm1fZ3Vlc3RfcGF0LFxcdFxcdDB4RkYyMCk7XFxuYXJjaC94ODYva3ZtL3NtbS5jOjkyOlxcdENIRUNLX1NNUkFNNjRfT0ZGU0VUKHN2bV9ob3N0X2VmZXIsXFx0XFx0MHhGRjI4KTtcXG5hcmNoL3g4Ni9rdm0vc21tLmM6OTM6XFx0Q0hFQ0tfU01SQU02NF9PRkZTRVQoc3ZtX2hvc3RfY3I0LFxcdFxcdDB4RkYzMCk7XFxuYXJjaC94ODYva3ZtL3NtbS5jOjk0OlxcdENIRUNLX1NNUkFNNjRfT0ZGU0VUKHN2bV9ob3N0X2NyMyxcXHRcXHQweEZGMzgpO1xcbmFyY2gveDg2L2t2bS9zbW0uYzo5NTpcXHRDSEVDS19TTVJBTTY0X09GRlNFVChzdm1faG9zdF9jcjAsXFx0XFx0MHhGRjQwKTtcXG5hcmNoL3g4Ni9rdm0vc21tLmMtOTYtXFx0Q0hFQ0tfU01SQU02NF9PRkZTRVQoY3I0LFxcdFxcdFxcdDB4RkY0OCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc21tLmg9Nzg9c3RydWN0IGt2bV9zbXJhbV9zdGF0ZV82NCB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc21tLmgtMTA5LVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zbW0uaDoxMTA6XFx0dTY0IHN2bV9ndWVzdF9mbGFnO1xcbmFyY2gveDg2L2t2bS9zbW0uaDoxMTE6XFx0dTY0IHN2bV9ndWVzdF92bWNiX2dwYTtcXG5hcmNoL3g4Ni9rdm0vc21tLmg6MTEyOlxcdHU2NCBzdm1fZ3Vlc3RfdmlydHVhbF9pbnQ7IC8qIHVua25vd24gcHVycG9zZSwgbm90IGltcGxlbWVudGVkICovXFxuYXJjaC94ODYva3ZtL3NtbS5oLTExMy1cXG4tLVxcbmFyY2gveDg2L2t2bS9zbW0uaC0xMTktXFx0dTY0IHNzcDtcXG5hcmNoL3g4Ni9rdm0vc21tLmg6MTIwOlxcdC8qIHN2bV8qIGZpZWxkcyBiZWxvdyBhcmUgbm90IGltcGxlbWVudGVkIGJ5IEtWTSAqL1xcbmFyY2gveDg2L2t2bS9zbW0uaDoxMjE6XFx0dTY0IHN2bV9ndWVzdF9wYXQ7XFxuYXJjaC94ODYva3ZtL3NtbS5oOjEyMjpcXHR1NjQgc3ZtX2hvc3RfZWZlcjtcXG5hcmNoL3g4Ni9rdm0vc21tLmg6MTIzOlxcdHU2NCBzdm1faG9zdF9jcjQ7XFxuYXJjaC94ODYva3ZtL3NtbS5oOjEyNDpcXHR1NjQgc3ZtX2hvc3RfY3IzO1xcbmFyY2gveDg2L2t2bS9zbW0uaDoxMjU6XFx0dTY0IHN2bV9ob3N0X2NyMDtcXG5hcmNoL3g4Ni9rdm0vc21tLmgtMTI2LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzAtI2luY2x1ZGUgXFxcImlycS5oXFxcIlxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjMxOiNpbmNsdWRlIFxcXCJzdm0uaFxcXCJcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zMi1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTEwNz1tb2R1bGVfcGFyYW1fdW5zYWZlKGZvcmNlX2F2aWMsIGJvb2wsIDA0NDQpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTA5LS8qIE5vdGU6XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTEwOiAqIFRoaXMgaGFzaCB0YWJsZSBpcyB1c2VkIHRvIG1hcCBWTV9JRCB0byBhIHN0cnVjdCBrdm1fc3ZtLFxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTExMS0gKiB3aGVuIGhhbmRsaW5nIEFNRCBJT01NVSBHQUxPRyBub3RpZmljYXRpb24gdG8gc2NoZWR1bGUgaW5cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTExNC0jZGVmaW5lIFNWTV9WTV9EQVRBX0hBU0hfQklUU1xcdDhcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMTU6c3RhdGljIERFRklORV9IQVNIVEFCTEUoc3ZtX3ZtX2RhdGFfaGFzaCwgU1ZNX1ZNX0RBVEFfSEFTSF9CSVRTKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMTYtc3RhdGljIHUzMiBuZXh0X3ZtX2lkID0gMDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0xMTc9c3RhdGljIGJvb2wgbmV4dF92bV9pZF93cmFwcGVkID0gMDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMTg6c3RhdGljIERFRklORV9TUElOTE9DSyhzdm1fdm1fZGF0YV9oYXNoX2xvY2spO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTExOS1zdGF0aWMgYm9vbCB4MmF2aWNfZW5hYmxlZDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0xMjA9c3RhdGljIHUzMiB4MmF2aWNfbWF4X3BoeXNpY2FsX2lkO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEyMS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMjI6c3RhdGljIHZvaWQgYXZpY19zZXRfeDJhcGljX21zcl9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTIzLVxcdFxcdFxcdFxcdFxcdCAgICAgYm9vbCBpbnRlcmNlcHQpXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTI0LXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMjU6XFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gXFx1MDAyNnN2bS1cXHUwMDNldmNwdTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMjYtXFx0dTY0IHJkX3JlZ3M7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMjgtXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTI5OlxcdGlmIChpbnRlcmNlcHQgPT0gc3ZtLVxcdTAwM2V4MmF2aWNfbXNyc19pbnRlcmNlcHRlZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMzAtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTM3LVxcdGZvcl9lYWNoX3NldF9iaXQoaSwgKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2cmRfcmVncywgQklUU19QRVJfVFlQRShyZF9yZWdzKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMzg6XFx0XFx0c3ZtX3NldF9pbnRlcmNlcHRfZm9yX21zcih2Y3B1LCBBUElDX0JBU0VfTVNSICsgaSxcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMzktXFx0XFx0XFx0XFx0XFx0ICBNU1JfVFlQRV9SLCBpbnRlcmNlcHQpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTE0MC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxNDE6XFx0c3ZtX3NldF9pbnRlcmNlcHRfZm9yX21zcih2Y3B1LCBYMkFQSUNfTVNSKEFQSUNfVEFTS1BSSSksIE1TUl9UWVBFX1csIGludGVyY2VwdCk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTQyOlxcdHN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgWDJBUElDX01TUihBUElDX0VPSSksIE1TUl9UWVBFX1csIGludGVyY2VwdCk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTQzOlxcdHN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgWDJBUElDX01TUihBUElDX1NFTEZfSVBJKSwgTVNSX1RZUEVfVywgaW50ZXJjZXB0KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxNDQ6XFx0c3ZtX3NldF9pbnRlcmNlcHRfZm9yX21zcih2Y3B1LCBYMkFQSUNfTVNSKEFQSUNfSUNSKSwgTVNSX1RZUEVfVywgaW50ZXJjZXB0KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xNDUtXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTQ2OlxcdHN2bS1cXHUwMDNleDJhdmljX21zcnNfaW50ZXJjZXB0ZWQgPSBpbnRlcmNlcHQ7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTQ3LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTE2OT1zdGF0aWMgdTMyIGF2aWNfZ2V0X21heF9waHlzaWNhbF9pZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xNzMtXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTc0OnN0YXRpYyB2b2lkIGF2aWNfYWN0aXZhdGVfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xNzUte1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjE3NjpcXHRzdHJ1Y3Qgdm1jYiAqdm1jYiA9IHN2bS1cXHUwMDNldm1jYjAxLnB0cjtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxNzc6XFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gXFx1MDAyNnN2bS1cXHUwMDNldmNwdTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xNzgtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xODMtXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTg0OlxcdHN2bV9jbHJfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX0NSOF9XUklURSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTg1LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjEyLVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjIxMzpcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNIX0NVUlJFTlQsIFxcdTAwMjZzdm0tXFx1MDAzZXZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTIxNC1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTIyMS1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyMjI6XFx0aWYgKHgyYXZpY19lbmFibGVkIFxcdTAwMjZcXHUwMDI2IGFwaWNfeDJhcGljX21vZGUoc3ZtLVxcdTAwM2V2Y3B1LmFyY2guYXBpYykpIHtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yMjMtXFx0XFx0dm1jYi1cXHUwMDNlY29udHJvbC5pbnRfY3RsIHw9IFgyQVBJQ19NT0RFX01BU0s7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yMjUtXFx0XFx0LyogRGlzYWJsaW5nIE1TUiBpbnRlcmNlcHQgZm9yIHgyQVBJQyByZWdpc3RlcnMgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyMjY6XFx0XFx0YXZpY19zZXRfeDJhcGljX21zcl9pbnRlcmNlcHRpb24oc3ZtLCBmYWxzZSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjI3LVxcdH0gZWxzZSB7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjI4LVxcdFxcdC8qIEVuYWJsaW5nIE1TUiBpbnRlcmNlcHQgZm9yIHgyQVBJQyByZWdpc3RlcnMgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyMjk6XFx0XFx0YXZpY19zZXRfeDJhcGljX21zcl9pbnRlcmNlcHRpb24oc3ZtLCB0cnVlKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yMzAtXFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjMyLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjIzMzpzdGF0aWMgdm9pZCBhdmljX2RlYWN0aXZhdGVfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yMzQte1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjIzNTpcXHRzdHJ1Y3Qgdm1jYiAqdm1jYiA9IHN2bS1cXHUwMDNldm1jYjAxLnB0cjtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yMzYtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yMzktXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MjQwOlxcdGlmICghaXNfc2V2X2VzX2d1ZXN0KFxcdTAwMjZzdm0tXFx1MDAzZXZjcHUpKVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjI0MTpcXHRcXHRzdm1fc2V0X2ludGVyY2VwdChzdm0sIElOVEVSQ0VQVF9DUjhfV1JJVEUpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI0Mi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yNDMtXFx0LyogRW5hYmxpbmcgTVNSIGludGVyY2VwdCBmb3IgeDJBUElDIHJlZ2lzdGVycyAqL1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjI0NDpcXHRhdmljX3NldF94MmFwaWNfbXNyX2ludGVyY2VwdGlvbihzdm0sIHRydWUpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI0NS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0yNTE9c3RhdGljIGludCBhdmljX2dhX2xvZ19ub3RpZmllcih1MzIgZ2FfdGFnKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjUzLVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MjU0OlxcdHN0cnVjdCBrdm1fc3ZtICprdm1fc3ZtO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI1NS1cXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBOVUxMO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjYxLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjI2MjpcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c3ZtX3ZtX2RhdGFfaGFzaF9sb2NrLCBmbGFncyk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MjYzOlxcdGhhc2hfZm9yX2VhY2hfcG9zc2libGUoc3ZtX3ZtX2RhdGFfaGFzaCwga3ZtX3N2bSwgaG5vZGUsIHZtX2lkKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MjY0OlxcdFxcdGlmIChrdm1fc3ZtLVxcdTAwM2VhdmljX3ZtX2lkICE9IHZtX2lkKVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI2NS1cXHRcXHRcXHRjb250aW51ZTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyNjY6XFx0XFx0dmNwdSA9IGt2bV9nZXRfdmNwdShcXHUwMDI2a3ZtX3N2bS1cXHUwMDNla3ZtLCB2Y3B1X2lkeCk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjY3LVxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI2OC1cXHR9XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MjY5OlxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnN2bV92bV9kYXRhX2hhc2hfbG9jaywgZmxhZ3MpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI3MC1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTI4OD1zdGF0aWMgaW50IGF2aWNfYWxsb2NfcGh5c2ljYWxfaWRfdGFibGUoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI4OS17XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MjkwOlxcdHN0cnVjdCBrdm1fc3ZtICprdm1fc3ZtID0gdG9fa3ZtX3N2bShrdm0pO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI5MS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyOTI6XFx0aWYgKGt2bV9zdm0tXFx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGUpXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjkzLVxcdFxcdHJldHVybiAwO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI5NC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyOTU6XFx0a3ZtX3N2bS1cXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZSA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPLFxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI5Ni1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBhdmljX2dldF9waHlzaWNhbF9pZF90YWJsZV9vcmRlcihrdm0pKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyOTc6XFx0aWYgKCFrdm1fc3ZtLVxcdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlKVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI5OC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTMwMz1zdGF0aWMgaW50IGF2aWNfYWxsb2NfbG9naWNhbF9pZF90YWJsZShzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzA0LXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozMDU6XFx0c3RydWN0IGt2bV9zdm0gKmt2bV9zdm0gPSB0b19rdm1fc3ZtKGt2bSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzA2LVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjMwNzpcXHRpZiAoa3ZtX3N2bS1cXHUwMDNlYXZpY19sb2dpY2FsX2lkX3RhYmxlKVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTMwOC1cXHRcXHRyZXR1cm4gMDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zMDktXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MzEwOlxcdGt2bV9zdm0tXFx1MDAzZWF2aWNfbG9naWNhbF9pZF90YWJsZSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MzExOlxcdGlmICgha3ZtX3N2bS1cXHUwMDNlYXZpY19sb2dpY2FsX2lkX3RhYmxlKVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTMxMi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTMxNz1zdGF0aWMgdm9pZCBhdmljX2FkZF92bV90b19nYV9sb2dfbGlzdChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzE4LXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozMTk6XFx0c3RydWN0IGt2bV9zdm0gKmt2bV9zdm0gPSB0b19rdm1fc3ZtKGt2bSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MzIwOlxcdHN0cnVjdCBrdm1fc3ZtICprMjtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zMjEtXFx0dTMyIHZtX2lkO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzI0LVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjMyNTpcXHRpZiAoa3ZtX3N2bS1cXHUwMDNlYXZpY192bV9pZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zMjYtXFx0XFx0cmV0dXJuO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTMyNy1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozMjg6XFx0Z3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSkoXFx1MDAyNnN2bV92bV9kYXRhX2hhc2hfbG9jayk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzI5LSBhZ2FpbjpcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTMzNi1cXHRpZiAobmV4dF92bV9pZF93cmFwcGVkKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MzM3OlxcdFxcdGhhc2hfZm9yX2VhY2hfcG9zc2libGUoc3ZtX3ZtX2RhdGFfaGFzaCwgazIsIGhub2RlLCB2bV9pZCkge1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTMzOC1cXHRcXHRcXHRpZiAoazItXFx1MDAzZWF2aWNfdm1faWQgPT0gdm1faWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zNDEtXFx0fVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjM0MjpcXHRrdm1fc3ZtLVxcdTAwM2VhdmljX3ZtX2lkID0gdm1faWQ7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MzQzOlxcdGhhc2hfYWRkKHN2bV92bV9kYXRhX2hhc2gsIFxcdTAwMjZrdm1fc3ZtLVxcdTAwM2Vobm9kZSwga3ZtX3N2bS1cXHUwMDNlYXZpY192bV9pZCk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzQ0LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTM2OT12b2lkIGF2aWNfdm1fcHJlX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM3MC17XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MzcxOlxcdHN0cnVjdCBrdm1fc3ZtICprdm1fc3ZtID0gdG9fa3ZtX3N2bShrdm0pO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM3Mi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozNzM6XFx0aWYgKFdBUk5fT05fT05DRSghZW5hYmxlX2FwaWN2KSB8fCAha3ZtX3N2bS1cXHUwMDNlYXZpY192bV9pZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zNzQtXFx0XFx0cmV0dXJuO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM3NS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozNzY6XFx0Z3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSkoXFx1MDAyNnN2bV92bV9kYXRhX2hhc2hfbG9jayk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzc3LVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjM3ODpcXHRoYXNoX2RlbChcXHUwMDI2a3ZtX3N2bS1cXHUwMDNlaG5vZGUpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM3OS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0zODE9dm9pZCBhdmljX3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM4Mi17XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MzgzOlxcdHN0cnVjdCBrdm1fc3ZtICprdm1fc3ZtID0gdG9fa3ZtX3N2bShrdm0pO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM4NC1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM4Ny1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozODg6XFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWt2bV9zdm0tXFx1MDAzZWF2aWNfbG9naWNhbF9pZF90YWJsZSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6Mzg5OlxcdGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpa3ZtX3N2bS1cXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZSxcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zOTAtXFx0XFx0ICAgYXZpY19nZXRfcGh5c2ljYWxfaWRfdGFibGVfb3JkZXIoa3ZtKSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zOTItXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MzkzOnN0YXRpYyBwaHlzX2FkZHJfdCBhdmljX2dldF9iYWNraW5nX3BhZ2VfYWRkcmVzcyhzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zOTQte1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjM5NTpcXHRyZXR1cm4gX19zbWVfc2V0KF9fcGEoc3ZtLVxcdTAwM2V2Y3B1LmFyY2guYXBpYy1cXHUwMDNlcmVncykpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM5Ni19XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzk3LVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjM5ODp2b2lkIGF2aWNfaW5pdF92bWNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qgdm1jYiAqdm1jYilcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zOTkte1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjQwMDpcXHRzdHJ1Y3Qga3ZtX3N2bSAqa3ZtX3N2bSA9IHRvX2t2bV9zdm0oc3ZtLVxcdTAwM2V2Y3B1Lmt2bSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDAxLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjQwMjpcXHR2bWNiLVxcdTAwM2Vjb250cm9sLmF2aWNfYmFja2luZ19wYWdlID0gYXZpY19nZXRfYmFja2luZ19wYWdlX2FkZHJlc3Moc3ZtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo0MDM6XFx0dm1jYi1cXHUwMDNlY29udHJvbC5hdmljX2xvZ2ljYWxfaWQgPSBfX3NtZV9zZXQoX19wYShrdm1fc3ZtLVxcdTAwM2VhdmljX2xvZ2ljYWxfaWRfdGFibGUpKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo0MDQ6XFx0dm1jYi1cXHUwMDNlY29udHJvbC5hdmljX3BoeXNpY2FsX2lkID0gX19zbWVfc2V0KF9fcGEoa3ZtX3N2bS1cXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZSkpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTQwNS1cXHR2bWNiLVxcdTAwM2Vjb250cm9sLmF2aWNfdmFwaWNfYmFyID0gQVBJQ19ERUZBVUxUX1BIWVNfQkFTRTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy00MDYtXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NDA3OlxcdGlmIChrdm1fdmNwdV9hcGljdl9hY3RpdmUoXFx1MDAyNnN2bS1cXHUwMDNldmNwdSkpXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NDA4OlxcdFxcdGF2aWNfYWN0aXZhdGVfdm1jYihzdm0pO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTQwOS1cXHRlbHNlXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NDEwOlxcdFxcdGF2aWNfZGVhY3RpdmF0ZV92bWNiKHN2bSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDExLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTQxMz1zdGF0aWMgaW50IGF2aWNfaW5pdF9iYWNraW5nX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDE1LVxcdHUzMiBtYXhfaWQgPSB4MmF2aWNfZW5hYmxlZCA/IHgyYXZpY19tYXhfcGh5c2ljYWxfaWQgOiBBVklDX01BWF9QSFlTSUNBTF9JRDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo0MTY6XFx0c3RydWN0IGt2bV9zdm0gKmt2bV9zdm0gPSB0b19rdm1fc3ZtKHZjcHUtXFx1MDAzZWt2bSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NDE3OlxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTQxOC1cXHR1MzIgaWQgPSB2Y3B1LVxcdTAwM2V2Y3B1X2lkO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDU4LVxcdC8qIFNldHRpbmcgQVZJQyBiYWNraW5nIHBhZ2UgYWRkcmVzcyBpbiB0aGUgcGh5IEFQSUMgSUQgdGFibGUgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo0NTk6XFx0bmV3X2VudHJ5ID0gYXZpY19nZXRfYmFja2luZ19wYWdlX2FkZHJlc3Moc3ZtKSB8XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDYwLVxcdFxcdCAgICBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX1ZBTElEX01BU0s7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NDYxOlxcdHN2bS1cXHUwMDNlYXZpY19waHlzaWNhbF9pZF9lbnRyeSA9IG5ld19lbnRyeTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy00NjItXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy00NjctXFx0ICovXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NDY4OlxcdFdSSVRFX09OQ0Uoa3ZtX3N2bS1cXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZVtpZF0sIG5ld19lbnRyeSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDY5LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9NDkyPXN0YXRpYyB2b2lkIGF2aWNfa2lja192Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGljcmwpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy00OTQtXFx0dmNwdS1cXHUwMDNlYXJjaC5hcGljLVxcdTAwM2VpcnJfcGVuZGluZyA9IHRydWU7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NDk1OlxcdHN2bV9jb21wbGV0ZV9pbnRlcnJ1cHRfZGVsaXZlcnkodmNwdSxcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy00OTYtXFx0XFx0XFx0XFx0XFx0aWNybCBcXHUwMDI2IEFQSUNfTU9ERV9NQVNLLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9NTQ5PXN0YXRpYyBpbnQgYXZpY19raWNrX3RhcmdldF92Y3B1c19mYXN0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9sYXBpYyAqc291cmNlLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNTUzLVxcdGludCBzaG9ydGhhbmQgPSBpY3JsIFxcdTAwMjYgQVBJQ19TSE9SVF9NQVNLO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjU1NDpcXHRzdHJ1Y3Qga3ZtX3N2bSAqa3ZtX3N2bSA9IHRvX2t2bV9zdm0oa3ZtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy01NTUtXFx0dTMyIGRlc3Q7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy02MDEtXFx0XFx0ZWxzZVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjYwMjpcXHRcXHRcXHRhdmljX2xvZ2ljYWxfaWRfdGFibGUgPSBrdm1fc3ZtLVxcdTAwM2VhdmljX2xvZ2ljYWxfaWRfdGFibGU7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNjAzLVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9NjQyPWludCBhdmljX2luY29tcGxldGVfaXBpX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNjQzLXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo2NDQ6XFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NjQ1OlxcdHUzMiBpY3JoID0gc3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmV4aXRfaW5mb18xIFxcdTAwM2VcXHUwMDNlIDMyO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjY0NjpcXHR1MzIgaWNybCA9IHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbC5leGl0X2luZm9fMTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo2NDc6XFx0dTMyIGlkID0gc3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmV4aXRfaW5mb18yIFxcdTAwM2VcXHUwMDNlIDMyO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjY0ODpcXHR1MzIgaW5kZXggPSBzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXhpdF9pbmZvXzIgXFx1MDAyNiBBVklDX1BIWVNJQ0FMX01BWF9JTkRFWF9NQVNLO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTY0OS1cXHRzdHJ1Y3Qga3ZtX2xhcGljICphcGljID0gdmNwdS1cXHUwMDNlYXJjaC5hcGljO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9NzAxPXN0YXRpYyB1MzIgKmF2aWNfZ2V0X2xvZ2ljYWxfaWRfZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbGRyLCBib29sIGZsYXQpXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzAyLXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo3MDM6XFx0c3RydWN0IGt2bV9zdm0gKmt2bV9zdm0gPSB0b19rdm1fc3ZtKHZjcHUtXFx1MDAzZWt2bSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzA0LVxcdHUzMiBjbHVzdGVyLCBpbmRleDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTcyMy1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo3MjQ6XFx0cmV0dXJuIFxcdTAwMjZrdm1fc3ZtLVxcdTAwM2VhdmljX2xvZ2ljYWxfaWRfdGFibGVbaW5kZXhdO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTcyNS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz03NDQ9c3RhdGljIHZvaWQgYXZpY19pbnZhbGlkYXRlX2xvZ2ljYWxfaWRfZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTc0NS17XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NzQ2OlxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjc0NzpcXHRib29sIGZsYXQgPSBzdm0tXFx1MDAzZWRmcl9yZWcgPT0gQVBJQ19ERlJfRkxBVDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy03NDgtXFx0dTMyICplbnRyeTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTc1My1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo3NTQ6XFx0ZW50cnkgPSBhdmljX2dldF9sb2dpY2FsX2lkX2VudHJ5KHZjcHUsIHN2bS1cXHUwMDNlbGRyX3JlZywgZmxhdCk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzU1LVxcdGlmIChlbnRyeSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTc1OT1zdGF0aWMgdm9pZCBhdmljX2hhbmRsZV9sZHJfdXBkYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy03NjAte1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjc2MTpcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy03NjItXFx0dTMyIGxkciA9IGt2bV9sYXBpY19nZXRfcmVnKHZjcHUtXFx1MDAzZWFyY2guYXBpYywgQVBJQ19MRFIpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzY4LVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjc2OTpcXHRpZiAobGRyID09IHN2bS1cXHUwMDNlbGRyX3JlZylcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy03NzAtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzczLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjc3NDpcXHRzdm0tXFx1MDAzZWxkcl9yZWcgPSBsZHI7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzc1LVxcdGF2aWNfbGRyX3dyaXRlKHZjcHUsIGlkLCBsZHIpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9Nzc4PXN0YXRpYyB2b2lkIGF2aWNfaGFuZGxlX2Rmcl91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTc3OS17XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NzgwOlxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTc4MS1cXHR1MzIgZGZyID0ga3ZtX2xhcGljX2dldF9yZWcodmNwdS1cXHUwMDNlYXJjaC5hcGljLCBBUElDX0RGUik7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzgyLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjc4MzpcXHRpZiAoc3ZtLVxcdTAwM2VkZnJfcmVnID09IGRmcilcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy03ODQtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzg2LVxcdGF2aWNfaW52YWxpZGF0ZV9sb2dpY2FsX2lkX2VudHJ5KHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjc4NzpcXHRzdm0tXFx1MDAzZWRmcl9yZWcgPSBkZnI7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzg4LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTc5MD1zdGF0aWMgaW50IGF2aWNfdW5hY2NlbF90cmFwX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy03OTEte1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjc5MjpcXHR1MzIgb2Zmc2V0ID0gdG9fc3ZtKHZjcHUpLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmV4aXRfaW5mb18xIFxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy03OTMtXFx0XFx0XFx0XFx0QVZJQ19VTkFDQ0VMX0FDQ0VTU19PRkZTRVRfTUFTSztcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTg0Mj1pbnQgYXZpY191bmFjY2VsZXJhdGVkX2FjY2Vzc19pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg0My17XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6ODQ0OlxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg0NS1cXHRpbnQgcmV0ID0gMDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo4NDY6XFx0dTMyIG9mZnNldCA9IHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbC5leGl0X2luZm9fMSBcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtODQ3LVxcdFxcdCAgICAgQVZJQ19VTkFDQ0VMX0FDQ0VTU19PRkZTRVRfTUFTSztcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo4NDg6XFx0dTMyIHZlY3RvciA9IHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbC5leGl0X2luZm9fMiBcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtODQ5LVxcdFxcdCAgICAgQVZJQ19VTkFDQ0VMX0FDQ0VTU19WRUNUT1JfTUFTSztcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo4NTA6XFx0Ym9vbCB3cml0ZSA9IChzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXhpdF9pbmZvXzEgXFx1MDAzZVxcdTAwM2UgMzIpIFxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04NTEtXFx0XFx0ICAgICBBVklDX1VOQUNDRUxfQUNDRVNTX1dSSVRFX01BU0s7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04NTctXFx0XFx0LyogSGFuZGxpbmcgVHJhcCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjg1ODpcXHRcXHRXQVJOX09OQ0UoIXdyaXRlLCBcXFwic3ZtOiBIYW5kbGluZyB0cmFwIHJlYWQuXFxcXG5cXFwiKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04NTktXFx0XFx0cmV0ID0gYXZpY191bmFjY2VsX3RyYXBfd3JpdGUodmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04NjctXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6ODY4OmludCBhdmljX2luaXRfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04Njkte1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg3MC1cXHRpbnQgcmV0O1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjg3MTpcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBcXHUwMDI2c3ZtLVxcdTAwM2V2Y3B1O1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg3Mi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo4NzM6XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdCk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6ODc0OlxcdHJhd19zcGluX2xvY2tfaW5pdChcXHUwMDI2c3ZtLVxcdTAwM2Vpcl9saXN0X2xvY2spO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg3NS1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg4Mi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo4ODM6XFx0c3ZtLVxcdTAwM2VkZnJfcmVnID0gQVBJQ19ERlJfRkxBVDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04ODQtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz04ODg9dm9pZCBhdmljX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04OTAtXFx0dTMyIG1heF9pZCA9IHgyYXZpY19lbmFibGVkID8geDJhdmljX21heF9waHlzaWNhbF9pZCA6IEFWSUNfTUFYX1BIWVNJQ0FMX0lEO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjg5MTpcXHRzdHJ1Y3Qga3ZtX3N2bSAqa3ZtX3N2bSA9IHRvX2t2bV9zdm0odmNwdS1cXHUwMDNla3ZtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04OTItXFx0dTMyIGlkID0gdmNwdS1cXHUwMDNldmNwdV9pZDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04OTMtXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6ODk0OlxcdGlmIChrdm1fc3ZtLVxcdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlIFxcdTAwMjZcXHUwMDI2IGlkIFxcdTAwM2M9IG1heF9pZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo4OTU6XFx0XFx0V1JJVEVfT05DRShrdm1fc3ZtLVxcdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlW2lkXSwgMCk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtODk2LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTg5OD12b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTkwMy1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5MDQ6c3RhdGljIHZvaWQgc3ZtX2lyX2xpc3RfZGVsKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MDUte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTExLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjkxMjpcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnRvX3N2bSh2Y3B1KS1cXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTEzLVxcdGxpc3RfZGVsKFxcdTAwMjZpcnFmZC1cXHUwMDNldmNwdV9saXN0KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5MTQ6XFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnRvX3N2bSh2Y3B1KS1cXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTE1LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTkxNz1pbnQgYXZpY19waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTkyNC1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5MjU6XFx0c3ZtX2lyX2xpc3RfZGVsKGlycWZkKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MjYtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MzQtXFx0XFx0c3RydWN0IGFtZF9pb21tdV9waV9kYXRhIHBpX2RhdGEgPSB7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6OTM1OlxcdFxcdFxcdC5nYV90YWcgPSBBVklDX0dBVEFHKHRvX2t2bV9zdm0oa3ZtKS1cXHUwMDNlYXZpY192bV9pZCxcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MzYtXFx0XFx0XFx0XFx0XFx0ICAgICB2Y3B1LVxcdTAwM2V2Y3B1X2lkeCksXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTM3LVxcdFxcdFxcdC5pc19ndWVzdF9tb2RlID0ga3ZtX3ZjcHVfYXBpY3ZfYWN0aXZlKHZjcHUpLFxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjkzODpcXHRcXHRcXHQudmFwaWNfYWRkciA9IGF2aWNfZ2V0X2JhY2tpbmdfcGFnZV9hZGRyZXNzKHRvX3N2bSh2Y3B1KSksXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTM5LVxcdFxcdFxcdC52ZWN0b3IgPSB2ZWN0b3IsXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTQwLVxcdFxcdH07XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6OTQxOlxcdFxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTk0Mi1cXHRcXHR1NjQgZW50cnk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05NTAtXFx0XFx0ICovXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6OTUxOlxcdFxcdGd1YXJkKHJhd19zcGlubG9ja19pcnFzYXZlKShcXHUwMDI2c3ZtLVxcdTAwM2Vpcl9saXN0X2xvY2spO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTk1Mi1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTk1OC1cXHRcXHQgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5NTk6XFx0XFx0ZW50cnkgPSBzdm0tXFx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfZW50cnk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTYwLVxcdFxcdGlmIChlbnRyeSBcXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfSVNfUlVOTklOR19NQVNLKSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05ODEtXFx0XFx0aXJxZmQtXFx1MDAzZWlycV9ieXBhc3NfZGF0YSA9IHBpX2RhdGEuaXJfZGF0YTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5ODI6XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmlycWZkLVxcdTAwM2V2Y3B1X2xpc3QsIFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3QpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTk4My1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTEwMTY9c3RhdGljIHZvaWQgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDE5LVxcdGJvb2wgZ2FfbG9nX2ludHIgPSAoYWN0aW9uIFxcdTAwMjYgQVZJQ19TVEFSVF9CTE9DS0lORyk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTAyMDpcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDIxLVxcdHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDIyLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEwMjM6XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2c3ZtLVxcdTAwM2Vpcl9saXN0X2xvY2spO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwMjQtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDI4LVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEwMjk6XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdCkpXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTAzMC1cXHRcXHRyZXR1cm47XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTAzMS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMDMyOlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoaXJxZmQsIFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3QsIHZjcHVfbGlzdCkge1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwMzMtXFx0XFx0dm9pZCAqZGF0YSA9IGlycWZkLVxcdTAwM2VpcnFfYnlwYXNzX2RhdGE7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0xMDQ0PXN0YXRpYyB2b2lkIF9fYXZpY192Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTA0Ni17XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTA0NzpcXHRzdHJ1Y3Qga3ZtX3N2bSAqa3ZtX3N2bSA9IHRvX2t2bV9zdm0odmNwdS1cXHUwMDNla3ZtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDQ4LVxcdGludCBoX3BoeXNpY2FsX2lkID0gY3B1X3BoeXNpY2FsX2lkKGNwdSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTA0OTpcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDUwLVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDY0LVxcdCAqIF9jdXJyZW50bHlfIGhhdmUgYXNzaWduZWQgZGV2aWNlcywgYXMgdGhhdCBjYW4gY2hhbmdlLiAgSG9sZGluZ1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEwNjU6XFx0ICogaXJfbGlzdF9sb2NrIGVuc3VyZXMgdGhhdCBlaXRoZXIgc3ZtX2lyX2xpc3RfYWRkKCkgd2lsbCBjb25zdW1lXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTA2Ni1cXHQgKiB1cC10by1kYXRlIGVudHJ5IGluZm9ybWF0aW9uLCBvciB0aGF0IHRoaXMgdGFzayB3aWxsIHdhaXQgdW50aWxcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMDY3OlxcdCAqIHN2bV9pcl9saXN0X2FkZCgpIGNvbXBsZXRlcyB0byBzZXQgdGhlIG5ldyB0YXJnZXQgcENQVS5cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDY4LVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEwNjk6XFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwNzAtXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTA3MTpcXHRlbnRyeSA9IHN2bS1cXHUwMDNlYXZpY19waHlzaWNhbF9pZF9lbnRyeTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDcyLVxcdFdBUk5fT05fT05DRShlbnRyeSBcXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfSVNfUlVOTklOR19NQVNLKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwNzgtXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTA3OTpcXHRzdm0tXFx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfZW50cnkgPSBlbnRyeTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDgwLVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTA4OS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMDkwOlxcdFdSSVRFX09OQ0Uoa3ZtX3N2bS1cXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZVt2Y3B1LVxcdTAwM2V2Y3B1X2lkXSwgZW50cnkpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwOTEtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDkzLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEwOTQ6XFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjUyOjU5Ljk4NTE4ODI0MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTcwMzQ2NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV3IEtWTSBQYXRjaDogQVZJQyBDbGVhbnVwKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gdGhlIEFNRCBTVk0gQWR2YW5jZWQgVmlydHVhbCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoQVZJQykgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgS1ZNIHN1YnN5c3RlbS4gSSdtIHNlZWluZyBhIG5ldyBmdW5jdGlvbiwgYGF2aWNfdmNwdV9mcmVlYCwgYWRkZWQgaW4gYGFyY2gveDg2L2t2bS9zdm0vYXZpYy5jYC4gVGhlIGZ1bmN0aW9uIGl0c2VsZiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyBpdCdzIGRlc2lnbmVkIHRvIGNsZWFyIGFuIGVudHJ5IGluIHRoZSBgYXZpY19waHlzaWNhbF9pZF90YWJsZWAgZm9yIGEgZ2l2ZW4gdkNQVSAoYHZjcHVgKS4gVGhlIGBtYXhfaWRgIGNhbGN1bGF0aW9uIHNlZW1zIHRvIGFjY291bnQgZm9yIHBvdGVudGlhbCBYMkFWSUMgc3VwcG9ydC5cblxuTG9va2luZyBhdCB0aGUgY2hhbmdlcyBpbiBgYXJjaC94ODYva3ZtL3N2bS9zdm0uY2AsIGl0IHNlZW1zIHRoaXMgYGF2aWNfdmNwdV9mcmVlYCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgaW4gYm90aCBgc3ZtX3ZjcHVfY3JlYXRlYCBhbmQgYHN2bV92Y3B1X2ZyZWVgLiBJbiBgc3ZtX3ZjcHVfY3JlYXRlYCwgaXQncyBjYWxsZWQgZHVyaW5nIGVycm9yIGhhbmRsaW5nIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBgbXNycG1gIGZhaWxzLiBUaGlzIGluZGljYXRlcyB0aGF0IHByZXZpb3VzbHksIGlmIHRoZSB2Q1BVIGNyZWF0aW9uIGZhaWxlZCAqYWZ0ZXIqIHRoZSBBVklDIGluaXRpYWxpemF0aW9uLCB0aGUgdGFibGUgZW50cnkgbWlnaHQgaGF2ZSBiZWVuIGxlZnQgdW5jbGVhcmVkLiBOb3csIHdlIGhhdmUgYW4gZXhwbGljaXQgY2xlYW51cCBwYXRoIGluIGNhc2Ugb2YgYWxsb2NhdGlvbiBlcnJvci4gU2ltaWxhcmx5LCBpbiBgc3ZtX3ZjcHVfZnJlZWAsIGl0J3MgY2FsbGVkIGR1cmluZyB2Q1BVIGRlc3RydWN0aW9uLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlcmUncyBhbHNvIGEgYFdBUk5fT05fT05DRWAgYWJvdXQgYW4gZW1wdHkgYGlyX2xpc3RgLCB3aGljaCBpcyBhIGdvb2Qgc2FuaXR5IGNoZWNrLlxuXG5Ob3csIGxldCdzIHJld2luZCBhbmQgc2VlIHdoYXQgaGFwcGVuZWQgYmVmb3JlLiBUaGUgaW5pdGlhbCBBVklDIHNldHVwIGR1cmluZyB2Q1BVIGNyZWF0aW9uIChgc3ZtX3ZjcHVfY3JlYXRlYCkgaW52b2x2ZXMgYGF2aWNfaW5pdF92Y3B1YCwgd2hpY2ggdGhlbiBjYWxscyBgYXZpY19pbml0X2JhY2tpbmdfcGFnZWAuIFRoaXMgZnVuY3Rpb24sIGF0IHNvbWUgcG9pbnQsIHdyaXRlcyB0byB0aGUgYGF2aWNfcGh5c2ljYWxfaWRfdGFibGVgIHVzaW5nIGBXUklURV9PTkNFYC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoYXQgKmJlZm9yZSogdGhpcyBwYXRjaCwgaWYgdkNQVSBjcmVhdGlvbiBmYWlsZWQgKmFmdGVyKiBgYXZpY19pbml0X2JhY2tpbmdfcGFnZWAsIG9yIGlmIHRoZSB2Q1BVIHdhcyBkZXN0cm95ZWQsIHRoYXQgdGFibGUgZW50cnkgKndhc24ndCogYmVpbmcgY2xlYXJlZC4gTm93LCB3aXRoIHRoZSBhZGRpdGlvbiBvZiBgYXZpY192Y3B1X2ZyZWVgLCB3ZSBoYXZlIHRoZSBjbGVhbnVwIHBhdGguXG5cblNvLCB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgcmVhY2hhYmxlIHZpYSBmdXp6aW5nPyBDb25zaWRlcmluZyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgd2UgYXJlIHRhbGtpbmcgYWJvdXQgS1ZNJ3MgQU1EIFNWTSAoQVZJQykuIFN5emthbGxlciBmcmVxdWVudGx5IHRhcmdldHMgYmFzaWMgS1ZNIHN5c2NhbGxzIGZvciBmdXp6aW5nLCBsaWtlIGBLVk1fQ1JFQVRFX1ZDUFVgLCBjbG9zaW5nIHZjcHUgZmRzLCBhbmQgZGVzdHJveWluZyBWTXMuIFdoZW4gcnVubmluZyBzeXprYWxsZXIgb24gQU1EIGhvc3RzIChvciBuZXN0ZWQgQU1EIFNWTSBpbiBRRU1VKSwgdGhpcyBjb2RlIHdpbGwgYmUgZXhlcmNpc2VkLiBUaGlzIG1lYW5zIHRoZSBwYXRocyB3aGVyZSBhIHZDUFUgY3JlYXRpb24gKm1pZ2h0KiBmYWlsLCBvciB3aGVyZSB3ZSdyZSBleHBsaWNpdGx5IGZyZWVpbmcgdkNQVXMsIGFyZSBhYnNvbHV0ZWx5IGJlaW5nIGhpdC4gVGhlIGZhY3QgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgZXhlY3V0YWJsZSBrZXJuZWwgQyBjb2RlIGlzLCBpbiBpdHNlbGYsIGEgZ29vZCByZWFzb24gdG8gaW52ZXN0aWdhdGUgZnVydGhlci5cblxuVGhlcmVmb3JlLCB5ZXMsIHRoaXMgbG9va3MgbGlrZSBhIHdvcnRod2hpbGUgZnV6emluZyB0YXJnZXQuIFdlIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbnMgZW5hYmxlZDogc3BlY2lmaWNhbGx5LCBgS1ZNYCBhbmQgYEtWTV9BTURgLiBXZSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIEtjb25maWcgZm9yIGFueSBkZXBlbmRlbmNpZXMgdGhvc2Ugb3B0aW9ucyBoYXZlIHRvIGdpdmUgdXMgZnVydGhlciBpbnNpZ2h0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0MTUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTM6MDYuMTU1NTM3NjExWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTgzNDgwOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzM6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzQtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgzOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTg0LVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5NDpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDctXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA4OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNzpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxOC1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMDpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMzOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjM0LVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTM6MDYuNDEzODg5NjQ2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2Mzg0MTg2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgS1ZNL0FNRCBEZXBlbmRlbmNpZXMgYW5kIEZvY3VzIFN5bWJvbHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBLVk1fQU1EYC4gVGhlIGxvZ2ljIGlzIGNsZWFyOiBpdCBkZXBlbmRzIG9uIGBLVk1gIGFuZCBlaXRoZXIgYENQVV9TVVBfQU1EYCBvciBgQ1BVX1NVUF9IWUdPTmAuIGBDUFVfU1VQX0FNRGAgaXMsIGJ5IGRlZmF1bHQsIGVuYWJsZWQgb24geDg2LCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy4gU28sIEknbSBjb25maWRlbnQgdGhhdCB0aGUgY29yZSBjb25maWd1cmF0aW9ucyByZXF1aXJlZCBhcmUgYEtWTWAgYW5kIGBLVk1fQU1EYC4gVGhhdCdzIHRoZSBiYXNlbGluZS5cblxuTm93LCB0byBnZXQgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciwgSSBoYXZlIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBzeW1ib2xzLiBXaGljaCBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IGludm9sdmVkLCBvciBhcmUgaW1wbGVtZW50aW5nIHRoZSBzcGVjaWZpYyBjaGFuZ2VzPyBJJ3ZlIGlkZW50aWZpZWQgZm91ciBrZXkgZnVuY3Rpb25zOiBgYXZpY192Y3B1X2ZyZWVgLCBgc3ZtX3ZjcHVfY3JlYXRlYCwgYHN2bV92Y3B1X2ZyZWVgLCBhbmQgYGF2aWNfaW5pdF92Y3B1YC4gVGhlIGZvdXJ0aCBzZWVtcyByZWxhdGVkIHRvIHRoZSBBVklDIHNldHVwLlxuXG5UaGUgbmV4dCBjcml0aWNhbCBzdGVwIGlzIHRvIGFzc2VzcyB0aGUgc2NvcGUgb2YgdGhvc2UgZnVuY3Rpb25zLiBBcmUgdGhleSB1YmlxdWl0b3VzIGtlcm5lbCBhbGxvY2F0b3JzLCBvciBhcmUgdGhleSBzcGVjaWZpYyB0byBLVk0vU1ZNIGltcGxlbWVudGF0aW9ucz8gR29vZCwgdGhleSBhcmUgS1ZNLVNWTSBzcGVjaWZpYy4gVGhpcyBpcyB3aGF0IEkgd2FzIGhvcGluZyB0byBzZWUuIEl0IG1lYW5zIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IHRvIGJlIHN0cm9uZyBpbmRpY2F0b3JzIG9mIHRoZSB0YXJnZXRlZCBmdW5jdGlvbmFsaXR5LlxuXG5JJ20gbm93IGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0byBiZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG90aGVyIHN5bWJvbHMgb3IgY29uZmlncyB0aGF0IGFyZSBuZWVkZWQuXG5cbkknbSBub3cgY29uZmlkZW50IHRoYXQgbXkgbGlzdHMgYXJlIGNvcnJlY3Q6IGBFbmFibGVDb25maWdzYCBpcyBgW1wiS1ZNXCIsIFwiS1ZNX0FNRFwiXWAgYW5kIGBGb2N1c1N5bWJvbHNgIGlzIGBbXCJhdmljX3ZjcHVfZnJlZVwiLCBcInN2bV92Y3B1X2NyZWF0ZVwiLCBcInN2bV92Y3B1X2ZyZWVcIl1gLlxuXG5MZXQncyBkbyBhIHF1aWNrIGZpbmFsIHJldmlldyBvZiBldmVyeXRoaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgYW5kIG15IHJlYXNvbmluZyBhcmUgYWNjdXJhdGUgYW5kIHdlbGwtZm9ybWF0dGVkLiBJJ20gcmVhZHkgdG8gY2FsbCB0aGUgYHNldC1yZXN1bHRzYCBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDA0NCwiT3V0cHV0VG9rZW5zIjoxMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTM6MTIuMDUyMzEwNjAxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYyOTkwOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImF2aWNfdmNwdV9mcmVlXCIsXG4gICAgXCJzdm1fdmNwdV9jcmVhdGVcIixcbiAgICBcInN2bV92Y3B1X2ZyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGF2aWNfdmNwdV9mcmVlKCkgdG8gY2xlYXIgdGhlIHBoeXNpY2FsIEFQSUMgSUQgdGFibGUgZW50cnkgb24gU1ZNIHZDUFUgY3JlYXRpb24gZmFpbHVyZSBhbmQgdkNQVSB0ZWFyZG93bi4gVGhpcyBtb2RpZmllcyBleGVjdXRhYmxlIGxpZmVjeWNsZSBjb2RlIGluIEtWTSBBTUQgKFNWTSksIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUgb24gYW1kNjQgdmlhIEtWTSBpb2N0bHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fQU1EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXZpY192Y3B1X2ZyZWVcIixcbiAgICBcInN2bV92Y3B1X2NyZWF0ZVwiLFxuICAgIFwic3ZtX3ZjcHVfZnJlZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYXZpY192Y3B1X2ZyZWUoKSB0byBjbGVhciB0aGUgcGh5c2ljYWwgQVBJQyBJRCB0YWJsZSBlbnRyeSBvbiBTVk0gdkNQVSBjcmVhdGlvbiBmYWlsdXJlIGFuZCB2Q1BVIHRlYXJkb3duLiBUaGlzIG1vZGlmaWVzIGV4ZWN1dGFibGUgbGlmZWN5Y2xlIGNvZGUgaW4gS1ZNIEFNRCAoU1ZNKSwgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZSBvbiBhbWQ2NCB2aWEgS1ZNIGlvY3Rscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTM6MTIuMTI4NjE3MDZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDQyMzQyNTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTM6MTIuMTI5MDQ3OTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNDQ0MTkwODM3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgYXZpY192Y3B1X2ZyZWUoKWAgdG8gY2xlYXIgKGBXUklURV9PTkNFKC4uLiwgMClgKSB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBpbiBga3ZtX3N2bS1cXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZWAgd2hlbiBhIHZDUFUgaXMgZnJlZWQgb3Igd2hlbiB2Q1BVIGNyZWF0aW9uIGZhaWxzIGFmdGVyIEFWSUMgaW5pdGlhbGl6YXRpb24uIFRoaXMgcHJldmVudHMgc3RhbGUvZGFuZ2xpbmcgcmVmZXJlbmNlcyB0byBmcmVlZCBiYWNraW5nIHBhZ2VzIGluIHRoZSBwaHlzaWNhbCBJRCB0YWJsZS5cXG5cXG5UaGUgY2hhbmdlcyBvbmx5IHdyaXRlIGEgemVybyB2YWx1ZSB0byBhbiBleGlzdGluZyB0YWJsZSBhbmQgZG8gbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCByZWFkIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbHRlciBib3VuZHMgY2hlY2tzIGZvciB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZS4gTWVtb3J5IGxpZmVjeWNsZS9kYW5nbGluZyBwb2ludGVyIGlzc3VlcyBpbiB0aGlzIGNvbnRleHQgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0b3JzIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY3ZDE5YmQ0ZDM0YTEzYjM2MmNkZjY4NzZlNDI2NDk5NzcxZTNiZjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDA2OjUyOjM4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9hdmljLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1xuaW5kZXggM2IwMzdlMzg1NTIzNC4uYmMyYzY5OTM4MGIzNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1xuQEAgLTg4NSw2ICs4ODUsMTYgQEAgaW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rdm9pZCBhdmljX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0dTMyIG1heF9pZCA9IHgyYXZpY19lbmFibGVkID8geDJhdmljX21heF9waHlzaWNhbF9pZCA6IEFWSUNfTUFYX1BIWVNJQ0FMX0lEO1xuK1x0c3RydWN0IGt2bV9zdm0gKmt2bV9zdm0gPSB0b19rdm1fc3ZtKHZjcHUtXHUwMDNla3ZtKTtcbitcdHUzMiBpZCA9IHZjcHUtXHUwMDNldmNwdV9pZDtcbitcbitcdGlmIChrdm1fc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGUgXHUwMDI2XHUwMDI2IGlkIFx1MDAzYz0gbWF4X2lkKVxuK1x0XHRXUklURV9PTkNFKGt2bV9zdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZVtpZF0sIDApO1xuK31cbitcbiB2b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRhdmljX2hhbmRsZV9kZnJfdXBkYXRlKHZjcHUpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5pbmRleCBlYTY0NzkzOGEyYTY1Li5jMmEyYWU3ZDhlYzM0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuQEAgLTEzMzcsNyArMTMzNyw3IEBAIHN0YXRpYyBpbnQgc3ZtX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHN2bS1cdTAwM2Vtc3JwbSA9IHN2bV92Y3B1X2FsbG9jX21zcnBtKCk7XG4gXHRpZiAoIXN2bS1cdTAwM2Vtc3JwbSkge1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuLVx0XHRnb3RvIGVycm9yX2ZyZWVfc2V2O1xuK1x0XHRnb3RvIGVycm9yX2ZyZWVfYXZpYztcbiBcdH1cbiBcbiBcdHN2bS1cdTAwM2V4MmF2aWNfbXNyc19pbnRlcmNlcHRlZCA9IHRydWU7XG5AQCAtMTM1MSw2ICsxMzUxLDggQEAgc3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0cmV0dXJuIDA7XG4gXG4rZXJyb3JfZnJlZV9hdmljOlxuK1x0YXZpY192Y3B1X2ZyZWUodmNwdSk7XG4gZXJyb3JfZnJlZV9zZXY6XG4gXHRzZXZfZnJlZV92Y3B1KHZjcHUpO1xuIGVycm9yX2ZyZWVfdm1jYl9wYWdlOlxuQEAgLTEzNjUsNiArMTM2Nyw4IEBAIHN0YXRpYyB2b2lkIHN2bV92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0KSk7XG4gXG4rXHRhdmljX3ZjcHVfZnJlZSh2Y3B1KTtcbitcbiBcdHN2bV9sZWF2ZV9uZXN0ZWQodmNwdSk7XG4gXHRzdm1fZnJlZV9uZXN0ZWQoc3ZtKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuaW5kZXggZTk1ODk0M2I4MTYyNy4uNzkwYmQ5NmE5NzkxMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbkBAIC05NTQsNiArOTU0LDcgQEAgdm9pZCBhdmljX2luaXRfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IHZtY2IgKnZtY2IpO1xuIGludCBhdmljX2luY29tcGxldGVfaXBpX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCBhdmljX3VuYWNjZWxlcmF0ZWRfYWNjZXNzX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCBhdmljX2luaXRfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XG4rdm9pZCBhdmljX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgYXZpY192Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTtcbiB2b2lkIGF2aWNfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1MzoxMi4xMjkwNDg4NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MTcyMjk3NDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQVZJQyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiwgYGF2aWNfdmNwdV9mcmVlYCwgd2l0aGluIGBhcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuIFJlYWRpbmcgdGhyb3VnaCBpdCwgSSBzZWUgaXQncyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgYW4gZW50cnkgaW4gdGhlIGBhdmljX3BoeXNpY2FsX2lkX3RhYmxlYCBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyB2Q1BVLiBUaGUgbG9naWMgYXBwZWFycyB0byBjb25kaXRpb25hbGx5IGNsZWFyIHRoZSBlbnRyeSBiYXNlZCBvbiB0aGUgYHgyYXZpY19lbmFibGVkYCBmbGFnIGFuZCB0aGUgYHZjcHUtXHUwMDNldmNwdV9pZGAuIFNwZWNpZmljYWxseSwgaWYgYHgyYXZpY19lbmFibGVkYCBpcyBzZXQsIGl0IHVzZXMgYHgyYXZpY19tYXhfcGh5c2ljYWxfaWRgIGFzIHRoZSB1cHBlciBib3VuZCBmb3IgdmFsaWQgSURzLCBvdGhlcndpc2UgaXQgdXNlcyB0aGUgc3RhbmRhcmQgYEFWSUNfTUFYX1BIWVNJQ0FMX0lEYC4gSXQgdGhlbiBhY2Nlc3NlcyB0aGUgdGFibGUgdXNpbmcgdGhlIHZDUFUncyBJRCBhbmQgc2V0cyB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSB0byB6ZXJvIHVzaW5nIGBXUklURV9PTkNFYC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQuIFRoZSBwYXRjaCBhbHNvIGludGVncmF0ZXMgdGhpcyBgYXZpY192Y3B1X2ZyZWVgIGZ1bmN0aW9uIGludG8gYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmNgLiBJdCdzIGJlaW5nIGNhbGxlZCBpbiB0d28gc3BlY2lmaWMgcGxhY2VzOiB0aGUgZXJyb3IgcGF0aCB3aXRoaW4gYHN2bV92Y3B1X2NyZWF0ZWAgYW5kIHdpdGhpbiB0aGUgYHN2bV92Y3B1X2ZyZWVgIGZ1bmN0aW9uIGl0c2VsZi4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGUgcHVycG9zZSBvZiBgYXZpY192Y3B1X2ZyZWVgIGlzIHRvIGNsZWFuIHVwIHJlc291cmNlcyBhbGxvY2F0ZWQgdG8gdGhlIEFWSUMgZm9yIGEgdkNQVSwgYm90aCBkdXJpbmcgdkNQVSBjcmVhdGlvbiB3aGVuIHNvbWV0aGluZyBmYWlscyBhbmQgZHVyaW5nIHN0YW5kYXJkIHZDUFUgZGVzdHJ1Y3Rpb24uIFRoaXMgbWFrZXMgc2Vuc2U7IHdlIHdhbnQgdG8gZW5zdXJlIGFueSBwaHlzaWNhbCBJRCBtYXBwaW5ncyBhcmUgcHJvcGVybHkgcmVsZWFzZWQuXG5cblRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBgYXZpY19pbml0X3ZjcHVgIG1vcmUgY2xvc2VseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIHRoYXQgYGF2aWNfcGh5c2ljYWxfaWRfdGFibGVgLiBJJ2xsIHVzZSBhIGZpbGUgcmVhZGVyIHRvIGp1bXAgdG8gdGhhdCBhcmVhLiBMZXQncyBzZWUgaG93IHRoYXQgYXJyYXkgaXMgYWxsb2NhdGVkLCBwb3B1bGF0ZWQsIGFuZCB1c2VkIHRvIGNvbXBsZXRlIHRoaXMgcGljdHVyZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSB0YWJsZSBpcyBhbGxvY2F0ZWQgYW5kIGhvdyBpdHMgZW50cmllcyBhcmUgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTM6MjEuMzAxMzQ4NTMyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NTAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NTA6XFx0XFx0Ym9vbCB3cml0ZSA9IChzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXhpdF9pbmZvXzEgXFx1MDAzZVxcdTAwM2UgMzIpIFxcdTAwMjZcXG4gODUxOlxcdFxcdFxcdCAgICAgQVZJQ19VTkFDQ0VMX0FDQ0VTU19XUklURV9NQVNLO1xcbiA4NTI6XFx0XFx0Ym9vbCB0cmFwID0gaXNfYXZpY191bmFjY2VsZXJhdGVkX2FjY2Vzc190cmFwKG9mZnNldCk7XFxuIDg1MzpcXHRcXG4gODU0OlxcdFxcdHRyYWNlX2t2bV9hdmljX3VuYWNjZWxlcmF0ZWRfYWNjZXNzKHZjcHUtXFx1MDAzZXZjcHVfaWQsIG9mZnNldCxcXG4gODU1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICB0cmFwLCB3cml0ZSwgdmVjdG9yKTtcXG4gODU2OlxcdFxcdGlmICh0cmFwKSB7XFxuIDg1NzpcXHRcXHRcXHQvKiBIYW5kbGluZyBUcmFwICovXFxuIDg1ODpcXHRcXHRcXHRXQVJOX09OQ0UoIXdyaXRlLCBcXFwic3ZtOiBIYW5kbGluZyB0cmFwIHJlYWQuXFxcXG5cXFwiKTtcXG4gODU5OlxcdFxcdFxcdHJldCA9IGF2aWNfdW5hY2NlbF90cmFwX3dyaXRlKHZjcHUpO1xcbiA4NjA6XFx0XFx0fSBlbHNlIHtcXG4gODYxOlxcdFxcdFxcdC8qIEhhbmRsaW5nIEZhdWx0ICovXFxuIDg2MjpcXHRcXHRcXHRyZXQgPSBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwKTtcXG4gODYzOlxcdFxcdH1cXG4gODY0OlxcdFxcbiA4NjU6XFx0XFx0cmV0dXJuIHJldDtcXG4gODY2OlxcdH1cXG4gODY3OlxcdFxcbiA4Njg6XFx0aW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbiA4Njk6XFx0e1xcbiA4NzA6XFx0XFx0aW50IHJldDtcXG4gODcxOlxcdFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IFxcdTAwMjZzdm0tXFx1MDAzZXZjcHU7XFxuIDg3MjpcXHRcXG4gODczOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3QpO1xcbiA4NzQ6XFx0XFx0cmF3X3NwaW5fbG9ja19pbml0KFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3RfbG9jayk7XFxuIDg3NTpcXHRcXG4gODc2OlxcdFxcdGlmICghZW5hYmxlX2FwaWN2IHx8ICFpcnFjaGlwX2luX2tlcm5lbCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbiA4Nzc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDg3ODpcXHRcXG4gODc5OlxcdFxcdHJldCA9IGF2aWNfaW5pdF9iYWNraW5nX3BhZ2UodmNwdSk7XFxuIDg4MDpcXHRcXHRpZiAocmV0KVxcbiA4ODE6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gODgyOlxcdFxcbiA4ODM6XFx0XFx0c3ZtLVxcdTAwM2VkZnJfcmVnID0gQVBJQ19ERlJfRkxBVDtcXG4gODg0OlxcdFxcbiA4ODU6XFx0XFx0cmV0dXJuIHJldDtcXG4gODg2OlxcdH1cXG4gODg3OlxcdFxcbiA4ODg6XFx0dm9pZCBhdmljX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIDg4OTpcXHR7XFxuIDg5MDpcXHRcXHR1MzIgbWF4X2lkID0geDJhdmljX2VuYWJsZWQgPyB4MmF2aWNfbWF4X3BoeXNpY2FsX2lkIDogQVZJQ19NQVhfUEhZU0lDQUxfSUQ7XFxuIDg5MTpcXHRcXHRzdHJ1Y3Qga3ZtX3N2bSAqa3ZtX3N2bSA9IHRvX2t2bV9zdm0odmNwdS1cXHUwMDNla3ZtKTtcXG4gODkyOlxcdFxcdHUzMiBpZCA9IHZjcHUtXFx1MDAzZXZjcHVfaWQ7XFxuIDg5MzpcXHRcXG4gODk0OlxcdFxcdGlmIChrdm1fc3ZtLVxcdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlIFxcdTAwMjZcXHUwMDI2IGlkIFxcdTAwM2M9IG1heF9pZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTM6MjEuMzAxNDg5NDIyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1NjQzODEwNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYGF2aWNfaW5pdF9iYWNraW5nX3BhZ2VgIGFuZCBgYXZpY19waHlzaWNhbF9pZF90YWJsZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJ3aGVyZSB0aGUgaGVjayBpcyBgYXZpY19pbml0X2JhY2tpbmdfcGFnZWAgZGVmaW5lZD9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIHRoZSBjb250ZXh0IG9mIGl0cyBleGVjdXRpb24uIEtub3dpbmcgdGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgcGljdHVyZSBvZiB3aGF0IGl0J3MgdHJ5aW5nIHRvIGFjaGlldmUuIElzIGl0IGEgZnVuY3Rpb24sIGEgbWFjcm8sIHBhcnQgb2YgYSBsYXJnZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uPyBBbmQgd2hhdCBoZWFkZXIgZmlsZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBwcm9jZXNzPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBxdWljayBzZWFyY2ggb2YgdGhlIGNvZGViYXNlLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcm91dGluZSBpcyAqZG9pbmcqLiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIGZpZ3VyaW5nIG91dCB3aGF0IGl0J3Mgd3JpdGluZyB0byBgYXZpY19waHlzaWNhbF9pZF90YWJsZWAuIEknbSBnb2luZyB0byBsb29rIGZvciB3cml0ZXMsIHJlYWRzLCBvciBhbnkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHRhYmxlIHdpdGhpbiB0aGUgZnVuY3Rpb24uIElzIGl0IHBvcHVsYXRpbmcgaXQgZnJvbSBzY3JhdGNoLCB1cGRhdGluZyBleGlzdGluZyBlbnRyaWVzLCBvciBpbml0aWFsaXppbmcgaXQgdG8gc29tZSBkZWZhdWx0IHN0YXRlPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBXaGF0IGRhdGEgdHlwZXMgYXJlIHN0b3JlZCBpbiBgYXZpY19waHlzaWNhbF9pZF90YWJsZWAgYW5kIHdoYXQgaXMgdGhlaXIgc2lnbmlmaWNhbmNlPyBXaGF0IGlzIHRoZSBmdW5jdGlvbidzIHJlbGF0aW9uc2hpcCB0byB0aGUgb3ZlcmFsbCBpbnRlcnJ1cHQgY29udHJvbGxlciBzZXR1cD8gSSBuZWVkIHRvIG1hcCBpdCBvdXQuIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGxvZ2ljIGFuZCBub3RlIGFueSBwb3RlbnRpYWxseSBjcnVjaWFsIHN0ZXBzLiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIGRldGVybWluZSB0aGUgcHVycG9zZSBhbmQgaW1wbGljYXRpb25zIG9mIHRoZSB3cml0ZXMgdG8gdGhpcyB0YWJsZS4gVGhpcyBpcyBsaWtlbHkgYSBjcml0aWNhbCBpbml0aWFsaXphdGlvbiBzdGVwIGZvciB0aGUgQWR2YW5jZWQgVmlydHVhbCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoQVZJQykgZnVuY3Rpb25hbGl0eSwgYW5kIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBwaHlzaWNhbCBJRHMgYXJlIG1hcHBlZCBpcyBwYXJhbW91bnQuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGV0YWlscyB3aWxsIGJlIGtleSBmb3IgZGVidWdnaW5nIGFuZCBvcHRpbWl6YXRpb24gZWZmb3J0cywgaWYgbmVlZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDUyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1MzoyNC44NjU4NzI3ODZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0Nzk2NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF2aWNfaW5pdF9iYWNraW5nX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9Mzk4PXZvaWQgYXZpY19pbml0X3ZtY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCB2bWNiICp2bWNiKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDEyLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjQxMzpzdGF0aWMgaW50IGF2aWNfaW5pdF9iYWNraW5nX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTQxNC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz04Njg9aW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtODc4LVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjg3OTpcXHRyZXQgPSBhdmljX2luaXRfYmFja2luZ19wYWdlKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg4MC1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1MzoyNC45MjA2NzY4NjVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY3MTc2ODU5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBtZW50YWwgd2Fsa3Rocm91Z2ggb2YgdGhhdCBjb2RlIHNlY3Rpb24sIGZvY3VzaW5nIG9uIHdoYXQncyByZWxldmFudCB0byBteSBleHBlcnRpc2U6XG5cbioqRGlzc2VjdGluZyBBVklDIEluaXRpYWxpemF0aW9uIGluIGBrdm0vc3ZtL2F2aWMuY2AqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gYGFyY2gveDg2L2t2bS9zdm0vYXZpYy5jYCBhbmQgc3BlY2lmaWNhbGx5IGxpbmVzIDQxMyB0byA0NjAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgQVZJQyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSB3aXRoaW4gdGhlIEFNRCBTVk0gY29udGV4dC4gSSBrbm93IHRoaXMgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2Ugd2l0aCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gYW5kIHdvcmtsb2FkcyB0aGF0IGFyZSBBVlgtaGVhdnksIGFuZCBpcyBhIGtleSBhcmVhIGZvciBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBvciBkZWJ1Z2dpbmcgaWYgd2Ugc2VlIHVudXN1YWwgYmVoYXZpb3IuXG5cbkknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBzZXR1cCBvZiB0aGUgc3RydWN0dXJlcyBpbnZvbHZlZCB3aXRoIHRoZSBBZHZhbmNlZCBWaXJ0dWFsIEludGVycnVwdCBDb250cm9sbGVyLiBSaWdodCwgdGhpcyBzZWN0aW9uIGxpa2VseSBoYW5kbGVzIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHZpcnR1YWwgaW50ZXJydXB0IHJlbWFwcGluZyB0YWJsZXMgb3Igb3RoZXIgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGUgZ3Vlc3QgYW5kIHRoZSBhbGxvY2F0aW9uIG9mIHJlc291cmNlcy4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHRoZSBjb2RlIGlzIHNldHRpbmcgdXAgdGhlIEFWSUMgcmVnaXN0ZXJzIGluIHRoZSBzeXN0ZW0uIEkgYWxzbyBuZWVkIHRvIHRyYWNrIHRoZSBpbnRlcnBsYXkgd2l0aCB0aGUgaG9zdCBhbmQgZ3Vlc3QncyBwYWdlIHRhYmxlczsgdGhhdCBpcyBvZnRlbiB3aGVyZSBidWdzIGFuZCBpc3N1ZXMgYXJpc2UgZHVyaW5nIGluaXRpYWxpemF0aW9uLlxuXG5JJ20gbWVudGFsbHkgc3RlcHBpbmcgdGhyb3VnaCBlYWNoIGxpbmUuIFRoaXMgaXMgcHJvYmFibHkgd2hlcmUgdGhlIGNvZGUgZGVmaW5lcyBhbmQgYWxsb2NhdGVzIG1lbW9yeSBmb3IgdGhlIEFWSUMuIEknbSBmb2N1c2luZyBvbiBob3cgdGhlIGludGVycnVwdC1yZWxhdGVkIG1lbW9yeSBpcyBtYXBwZWQgYW5kIHRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLCBhcyB0aGVzZSBhcmUgY3JpdGljYWwgZm9yIGVuc3VyaW5nIGVmZmljaWVudCBvcGVyYXRpb24uIEFsc28sIHdoZXRoZXIgaXQgaXMgdXNpbmcgdGhlIHN0YW5kYXJkIG1ldGhvZHMsIG9yIGhhcyBhbnkgYmVzcG9rZSBtb2RpZmljYXRpb25zLCBmb3Igc2V0dGluZyB1cCB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIuIEkgYW0gYWxzbyBjaGVja2luZyB0aGF0IHRoZXJlIGlzIG5vdCBhbnl0aGluZyByZWR1bmRhbnQuIElzIGl0IGRvaW5nIGEgZG91YmxlIGFsbG9jYXRpb24/XG5cbkkgYW50aWNpcGF0ZSBlbmNvdW50ZXJpbmcgdGhlIGVuYWJsaW5nIG9mIHRoZSBmZWF0dXJlcywgYW5kIHdoYXQgY2hlY2tzIGFyZSBwZXJmb3JtZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlIG9uIHRoZSBwaHlzaWNhbCBoYXJkd2FyZS4gVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGNvZGUgaGFuZGxlcyBkaWZmZXJlbnQgQ1BVIG1vZGVscyBvciBzdGVwcGluZyByZXZpc2lvbnMuIENoZWNraW5nIHRoZSBDUFVJRCBvdXRwdXQgcmVsYXRlZCB0byBBVklDIHN1cHBvcnQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IGZhbGxiYWNrcyBpZiBBVklDIGlzIHVuYXZhaWxhYmxlLlxuXG5JIGFsc28gd2FudCB0byBwYXkgY2FyZWZ1bCBhdHRlbnRpb24gdG8gYW55IGxvY2tzIG9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQgZHVyaW5nIHRoaXMgaW5pdGlhbGl6YXRpb24gcGhhc2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGhlIHNldHVwIG9mIHRoZSBpbnRlcnJ1cHQgcmVtYXBwaW5nIHRhYmxlLiBJIG5lZWQgdG8gYWxzbyBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBpbiB0aGVzZSBsb2NrIG9wZXJhdGlvbnMuIEkgd2lsbCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayBpZiB0aGUgY29kZSBpcyB1c2luZyBzcGlubG9ja3MsIG9yIGlmIGl0IGhhcyBhbnkgc29waGlzdGljYXRlZCBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcy5cblxuRmluYWxseSwgSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBkZWJ1Z2dpbmcgb3V0cHV0LCBlcnJvciBoYW5kbGluZywgb3IgYXNzZXJ0aW9ucyB3aXRoaW4gdGhpcyBzZWN0aW9uLiBHb29kIGxvZ2dpbmcgb3IgZXJyb3IgcmVwb3J0aW5nIGlzIGVzc2VudGlhbCBmb3IgdHJvdWJsZXNob290aW5nIGlzc3VlcyByZWxhdGVkIHRvIHRoZSBBVklDLCBhbmQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGluIGdlbmVyYWwuIEl0IHdpbGwgYmUgaGVscGZ1bCB0byBrbm93IGhvdyB0aGUgc3lzdGVtIHJlYWN0cyBpZiB0aGUgaGFyZHdhcmUgaXNuJ3QgcXVpdGUgcmlnaHQuIFRoYXQgd2lsbCBiZSBlc3BlY2lhbGx5IGltcG9ydGFudCB3aGVuIEkgYW0gdGhpbmtpbmcgb2YgdGhlIGludGVyYWN0aW9uIG9mIG11bHRpcGxlIFZNcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEzMSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjUzOjI4LjU5MjQ0ODU0OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MTMsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MTM6XFx0c3RhdGljIGludCBhdmljX2luaXRfYmFja2luZ19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gNDE0OlxcdHtcXG4gNDE1OlxcdFxcdHUzMiBtYXhfaWQgPSB4MmF2aWNfZW5hYmxlZCA/IHgyYXZpY19tYXhfcGh5c2ljYWxfaWQgOiBBVklDX01BWF9QSFlTSUNBTF9JRDtcXG4gNDE2OlxcdFxcdHN0cnVjdCBrdm1fc3ZtICprdm1fc3ZtID0gdG9fa3ZtX3N2bSh2Y3B1LVxcdTAwM2Vrdm0pO1xcbiA0MTc6XFx0XFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XFxuIDQxODpcXHRcXHR1MzIgaWQgPSB2Y3B1LVxcdTAwM2V2Y3B1X2lkO1xcbiA0MTk6XFx0XFx0dTY0IG5ld19lbnRyeTtcXG4gNDIwOlxcdFxcbiA0MjE6XFx0XFx0LypcXG4gNDIyOlxcdFxcdCAqIEluaGliaXQgQVZJQyBpZiB0aGUgdkNQVSBJRCBpcyBiaWdnZXIgdGhhbiB3aGF0IGlzIHN1cHBvcnRlZCBieSBBVklDXFxuIDQyMzpcXHRcXHQgKiBoYXJkd2FyZS4gIEltbWVkaWF0ZWx5IGNsZWFyIGFwaWN2X2FjdGl2ZSwgaS5lLiBkb24ndCB3YWl0IHVudGlsIHRoZVxcbiA0MjQ6XFx0XFx0ICogS1ZNX1JFUV9BUElDVl9VUERBVEUgcmVxdWVzdCBpcyBwcm9jZXNzZWQgb24gdGhlIGZpcnN0IEtWTV9SVU4sIGFzXFxuIDQyNTpcXHRcXHQgKiBhdmljX3ZjcHVfbG9hZCgpIGV4cGVjdHMgdG8gYmUgY2FsbGVkIGlmIGFuZCBvbmx5IGlmIHRoZSB2Q1BVIGhhc1xcbiA0MjY6XFx0XFx0ICogZnVsbHkgaW5pdGlhbGl6ZWQgQVZJQy5cXG4gNDI3OlxcdFxcdCAqL1xcbiA0Mjg6XFx0XFx0aWYgKGlkIFxcdTAwM2UgbWF4X2lkKSB7XFxuIDQyOTpcXHRcXHRcXHRrdm1fc2V0X2FwaWN2X2luaGliaXQodmNwdS1cXHUwMDNla3ZtLCBBUElDVl9JTkhJQklUX1JFQVNPTl9QSFlTSUNBTF9JRF9UT09fQklHKTtcXG4gNDMwOlxcdFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guYXBpYy1cXHUwMDNlYXBpY3ZfYWN0aXZlID0gZmFsc2U7XFxuIDQzMTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDMyOlxcdFxcdH1cXG4gNDMzOlxcdFxcbiA0MzQ6XFx0XFx0QlVJTERfQlVHX09OKChBVklDX01BWF9QSFlTSUNBTF9JRCArIDEpICogc2l6ZW9mKG5ld19lbnRyeSkgXFx1MDAzZSBQQUdFX1NJWkUgfHxcXG4gNDM1OlxcdFxcdFxcdCAgICAgKFgyQVZJQ19NQVhfUEhZU0lDQUxfSUQgKyAxKSAqIHNpemVvZihuZXdfZW50cnkpIFxcdTAwM2UgUEFHRV9TSVpFKTtcXG4gNDM2OlxcdFxcbiA0Mzc6XFx0XFx0aWYgKFdBUk5fT05fT05DRSghdmNwdS1cXHUwMDNlYXJjaC5hcGljLVxcdTAwM2VyZWdzKSlcXG4gNDM4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0Mzk6XFx0XFxuIDQ0MDpcXHRcXHRpZiAoa3ZtX2FwaWN2X2FjdGl2YXRlZCh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuIDQ0MTpcXHRcXHRcXHRpbnQgcmV0O1xcbiA0NDI6XFx0XFxuIDQ0MzpcXHRcXHRcXHQvKlxcbiA0NDQ6XFx0XFx0XFx0ICogTm90ZSwgQVZJQyBoYXJkd2FyZSB3YWxrcyB0aGUgbmVzdGVkIHBhZ2UgdGFibGUgdG8gY2hlY2tcXG4gNDQ1OlxcdFxcdFxcdCAqIHBlcm1pc3Npb25zLCBidXQgZG9lcyBub3QgdXNlIHRoZSBTUEEgYWRkcmVzcyBzcGVjaWZpZWQgaW5cXG4gNDQ2OlxcdFxcdFxcdCAqIHRoZSBsZWFmIFNQVEUgc2luY2UgaXQgdXNlcyBhZGRyZXNzIGluIHRoZSBBVklDX0JBQ0tJTkdfUEFHRVxcbiA0NDc6XFx0XFx0XFx0ICogcG9pbnRlciBmaWVsZCBvZiB0aGUgVk1DQi5cXG4gNDQ4OlxcdFxcdFxcdCAqL1xcbiA0NDk6XFx0XFx0XFx0cmV0ID0ga3ZtX2FsbG9jX2FwaWNfYWNjZXNzX3BhZ2UodmNwdS1cXHUwMDNla3ZtKTtcXG4gNDUwOlxcdFxcdFxcdGlmIChyZXQpXFxuIDQ1MTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA0NTI6XFx0XFx0fVxcbiA0NTM6XFx0XFxuIDQ1NDpcXHRcXHQvKiBOb3RlLCBmbHM2NCgpIHJldHVybnMgdGhlIGJpdCBwb3NpdGlvbiwgKzEuICovXFxuIDQ1NTpcXHRcXHRCVUlMRF9CVUdfT04oX19QSFlTSUNBTF9NQVNLX1NISUZUIFxcdTAwM2VcXG4gNDU2OlxcdFxcdFxcdCAgICAgZmxzNjQoQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9CQUNLSU5HX1BBR0VfTUFTSykpO1xcbiA0NTc6XFx0XFxuIDQ1ODpcXHRcXHQvKiBTZXR0aW5nIEFWSUMgYmFja2luZyBwYWdlIGFkZHJlc3MgaW4gdGhlIHBoeSBBUElDIElEIHRhYmxlICovXFxuIDQ1OTpcXHRcXHRuZXdfZW50cnkgPSBhdmljX2dldF9iYWNraW5nX3BhZ2VfYWRkcmVzcyhzdm0pIHxcXG4gNDYwOlxcdFxcdFxcdCAgICBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX1ZBTElEX01BU0s7XFxuIDQ2MTpcXHRcXHRzdm0tXFx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfZW50cnkgPSBuZXdfZW50cnk7XFxuIDQ2MjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTM6MjguNTkyNTQ3ODA4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxMjM0NDI1MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIGBhdmljX2luaXRfYmFja2luZ19wYWdlYCoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIHJlbWFpbmluZyBjb2RlIGZvciBgYXZpY19pbml0X2JhY2tpbmdfcGFnZWAuIEknbSBjdXJpb3VzIHRvIHNlZSBob3cgdGhlIGJhY2tpbmcgcGFnZSBpcyBhY3R1YWxseSBpbml0aWFsaXplZC4gV2UndmUgbGlrZWx5IGVzdGFibGlzaGVkIHRoZSBiYXNpYyBzdHJ1Y3R1cmUgYW5kIGFsbG9jYXRpb24gYWxyZWFkeSwgbm93IHdlJ3JlIGdldHRpbmcgZG93biB0byB0aGUgbml0dHktZ3JpdHR5IG9mIGRhdGEgcG9wdWxhdGlvbiBvciBzZXR1cC4gSSdtIGV4cGVjdGluZyB0byBzZWUgb3BlcmF0aW9ucyByZWxhdGVkIHRvIHNldHRpbmcgdXAgcGFnZSB0YWJsZXMsIHBvdGVudGlhbGx5IGRlYWxpbmcgd2l0aCB2aXJ0dWFsIGFkZHJlc3NlcyBpZiB0aGlzIGlzIGEgaHlwZXJ2aXNvciBjb250ZXh0LCBvciBtYXliZSBpbml0aWFsIG1lbW9yeSBjbGVhciBvciBpbml0aWFsaXphdGlvbiBvZiBzcGVjaWZpYyBoYXJkd2FyZS1yZWxhdGVkIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIGJhY2tpbmcgcGFnZS4gVGhlcmUgaXMgbGlrZWx5IHRvIGJlIGEgbmVlZCB0byB2YWxpZGF0ZSB0aGF0IHRoZSBiYWNraW5nIHBhZ2UgZXhpc3RzLCB0aGF0IHRoZSBtZW1vcnkgcmVnaW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIGJhY2tpbmcgcGFnZSBhcmUgdmFsaWQsIGFuZCB0byBkZXRlcm1pbmUgdGhlIHBhZ2Ugc2l6ZS4gSSdsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgdW5pdCBhbmQgaG93IGl0IGhhbmRsZXMgdGhlIHZpcnR1YWwtdG8tcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbi4gVGhlIGludGVyYWN0aW9uIHdpdGggYW55IGhhcmR3YXJlIHN0cnVjdHVyZXMgb3Igb3RoZXIgcmVsYXRlZCBrZXJuZWwgZGF0YSB3b3VsZCBhbHNvIGJlIHNvbWV0aGluZyB0byB3YXRjaC4gSSdtIGFudGljaXBhdGluZyBzb21lIGxldmVsIG9mIGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIHRvIGVuc3VyZSB0aHJlYWQtc2FmZXR5LCBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIGluIHRoZSBrZXJuZWwuIEZpbmFsbHksIEknbSBleHBlY3Rpbmcgc29tZSBlcnJvciBjaGVja2luZyBvciBhc3NlcnRpb25zIHRvIHZhbGlkYXRlIHRoZSByZXN1bHQgb2YgdGhlc2Ugc2V0dXAgb3BlcmF0aW9ucy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY5NSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTM6MzEuNzE1OTkyNDQxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NjA6XFx0XFx0XFx0ICAgIEFWSUNfUEhZU0lDQUxfSURfRU5UUllfVkFMSURfTUFTSztcXG4gNDYxOlxcdFxcdHN2bS1cXHUwMDNlYXZpY19waHlzaWNhbF9pZF9lbnRyeSA9IG5ld19lbnRyeTtcXG4gNDYyOlxcdFxcbiA0NjM6XFx0XFx0LypcXG4gNDY0OlxcdFxcdCAqIEluaXRpYWxpemUgdGhlIHJlYWwgdGFibGUsIGFzIHZDUFVzIG11c3QgaGF2ZSBhIHZhbGlkIGVudHJ5IGluIG9yZGVyXFxuIDQ2NTpcXHRcXHQgKiBmb3IgYnJvYWRjYXN0IElQSXMgdG8gZnVuY3Rpb24gY29ycmVjdGx5IChicm9hZGNhc3QgSVBJcyBpZ25vcmVcXG4gNDY2OlxcdFxcdCAqIGludmFsaWQgZW50cmllcywgaS5lLiBhcmVuJ3QgZ3VhcmFudGVlZCB0byBnZW5lcmF0ZSBhIFZNLUV4aXQpLlxcbiA0Njc6XFx0XFx0ICovXFxuIDQ2ODpcXHRcXHRXUklURV9PTkNFKGt2bV9zdm0tXFx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGVbaWRdLCBuZXdfZW50cnkpO1xcbiA0Njk6XFx0XFxuIDQ3MDpcXHRcXHRyZXR1cm4gMDtcXG4gNDcxOlxcdH1cXG4gNDcyOlxcdFxcbiA0NzM6XFx0dm9pZCBhdmljX3JpbmdfZG9vcmJlbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiA0NzQ6XFx0e1xcbiA0NzU6XFx0XFx0LypcXG4gNDc2OlxcdFxcdCAqIE5vdGUsIHRoZSB2Q1BVIGNvdWxkIGdldCBtaWdyYXRlZCB0byBhIGRpZmZlcmVudCBwQ1BVIGF0IGFueSBwb2ludCxcXG4gNDc3OlxcdFxcdCAqIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBzaWduYWxsaW5nIHRoZSB3cm9uZy9wcmV2aW91cyBwQ1BVLiAgQnV0IGlmXFxuIDQ3ODpcXHRcXHQgKiB0aGF0IGhhcHBlbnMgdGhlIHZDUFUgaXMgZ3VhcmFudGVlZCB0byBkbyBhIFZNUlVOIChhZnRlciBiZWluZ1xcbiA0Nzk6XFx0XFx0ICogbWlncmF0ZWQpIGFuZCB0aHVzIHdpbGwgcHJvY2VzcyBwZW5kaW5nIGludGVycnVwdHMsIGkuZS4gYSBkb29yYmVsbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1MzozMS43MTYxMDQ2NDFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDg1NDgzMjM4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQXZpYyBQaHlzaWNhbCBJRCBUYWJsZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiByZXZpZXdpbmcgdGhpcyBwYXRjaCB0aGF0IGFkZHJlc3NlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5IHdpdGhpbiB0aGUgQU1EIFNWTSBBVklDIGltcGxlbWVudGF0aW9uLiBUaGUgaXNzdWUsIGFzIEkgdW5kZXJzdGFuZCBpdCwgc3RlbXMgZnJvbSB0aGUgYGF2aWNfaW5pdF9iYWNraW5nX3BhZ2VgIGZ1bmN0aW9uIHNldHRpbmcgYW4gZW50cnkgaW4gdGhlIGBrdm1fc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGVgIHRvIHBvaW50IHRvIGEgYmFja2luZyBwYWdlLiBDcml0aWNhbGx5LCBwcmlvciB0byB0aGlzIHBhdGNoLCB0aGVzZSBlbnRyaWVzIHdlcmVuJ3QgYmVpbmcgY2xlYW5lZCB1cCB3aGVuIGEgdkNQVSB3YXMgZWl0aGVyIGRlc3Ryb3llZCBvciBmYWlsZWQgZHVyaW5nIGNyZWF0aW9uLiBUaGlzIGxlZnQgYSBkYW5nbGluZyBwb2ludGVyLCBhIHN0YWxlIGVudHJ5IGluIHRoZSBgYXZpY19waHlzaWNhbF9pZF90YWJsZWAsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gbWVtb3J5IGNvcnJ1cHRpb24gaWYgYWNjZXNzZWQgbGF0ZXIuXG5cblRoZSBwYXRjaCdzIHNvbHV0aW9uIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogSXQgaW50cm9kdWNlcyBgYXZpY192Y3B1X2ZyZWVgIHRvIHplcm8gb3V0IHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHRoZSBgYXZpY19waHlzaWNhbF9pZF90YWJsZWAgdXNpbmcgYFdSSVRFX09OQ0VgLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZW4gY2FsbGVkIGJvdGggb24gZXJyb3IgcGF0aHMgd2l0aGluIGBzdm1fdmNwdV9jcmVhdGVgICphbmQqIGR1cmluZyBgc3ZtX3ZjcHVfZnJlZWAuIEVzc2VudGlhbGx5LCB0aGV5J3JlIGVuc3VyaW5nIHRoYXQgdGhlIHRhYmxlIGlzIGFsd2F5cyBjbGVhbmVkIHVwIHByb3Blcmx5LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdkNQVSBjcmVhdGlvbiBzdWNjZWVkcyBvciBmYWlscy5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyBjaGFuZ2UgcmVxdWlyZSBLTVNBTiBhbmFseXNpcz8gTGV0J3MgYnJlYWsgaXQgZG93bi4gRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gSXQgKnplcm9lcyogb3V0IGFuIGV4aXN0aW5nIHRhYmxlIGVudHJ5LiBEb2VzIGl0IGludm9sdmUgYW55IG5ldyBhbGxvY2F0aW9ucyBvciBwYWRkaW5nPyBOby4gVGhlIGNvcmUgb2YgdGhlIGJ1ZyBpcyBhYm91dCAqbGlmZWN5Y2xlIG1hbmFnZW1lbnQqIGFuZCBwcmV2ZW50aW5nIGEgc3RhbGUgcG9pbnRlciwgd2hpY2ggaXMgZmlybWx5IHdpdGhpbiB0aGUgS0FTQU4gZG9tYWluLlxuXG5HaXZlbiB0aGF0IHRoZSByb290IGNhdXNlIGlzIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8sIHdoaWNoIGlzIGEgY2xhc3NpYyBtZW1vcnkgY29ycnVwdGlvbiBidWcsIEtBU0FOIGlzIHRoZSBhcHByb3ByaWF0ZSB0b29sLiBXZSBoYXZlIGEgcnVsZSB0aGF0IHN0YXRlczogXCJUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLCBMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlwiIEtNU0FOIGlzIG1vcmUgcmVzb3VyY2UtaW50ZW5zaXZlLCBhbmQgd2Ugc2hvdWxkIG9ubHkgdXRpbGl6ZSBpdCBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggKnVuaW5pdGlhbGl6ZWQgbWVtb3J5KiByaXNrcyB0aGF0IEtBU0FOIHdvdWxkbid0IGNhdGNoLiBUaGlzIGlzbid0IHRoZSBjYXNlIGhlcmUuXG5cblNvLCBJJ20gY29uZmlkZW50IGluIGNhbGxpbmcgYHNldC1yZXN1bHRzYC4gVGhpcyBpcyBhIEtBU0FOLXJlbGV2YW50IGZpeC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQwMCwiT3V0cHV0VG9rZW5zIjoxNzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1MzozNi41NzA5Mzg4ODJaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYGF2aWNfdmNwdV9mcmVlKClgIHRvIGNsZWFyIChgV1JJVEVfT05DRSguLi4sIDApYCkgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gYGt2bV9zdm0tXFx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGVgIHdoZW4gYSB2Q1BVIGlzIGZyZWVkIG9yIHdoZW4gdkNQVSBjcmVhdGlvbiBmYWlscyBhZnRlciBBVklDIGluaXRpYWxpemF0aW9uLiBUaGlzIHByZXZlbnRzIHN0YWxlL2RhbmdsaW5nIHJlZmVyZW5jZXMgdG8gZnJlZWQgYmFja2luZyBwYWdlcyBpbiB0aGUgcGh5c2ljYWwgSUQgdGFibGUuXFxuXFxuVGhlIGNoYW5nZXMgb25seSB3cml0ZSBhIHplcm8gdmFsdWUgdG8gYW4gZXhpc3RpbmcgdGFibGUgYW5kIGRvIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgcmVhZCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYWx0ZXIgYm91bmRzIGNoZWNrcyBmb3IgdW5pbml0aWFsaXplZCBidWZmZXJzLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuIE1lbW9yeSBsaWZlY3ljbGUvZGFuZ2xpbmcgcG9pbnRlciBpc3N1ZXMgaW4gdGhpcyBjb250ZXh0IGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL21lbW9yeSBjb3JydXB0aW9uIGRldGVjdG9ycyByYXRoZXIgdGhhbiBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBhdmljX3ZjcHVfZnJlZSgpYCB0byBjbGVhciAoYFdSSVRFX09OQ0UoLi4uLCAwKWApIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIGBrdm1fc3ZtLVxcdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlYCB3aGVuIGEgdkNQVSBpcyBmcmVlZCBvciB3aGVuIHZDUFUgY3JlYXRpb24gZmFpbHMgYWZ0ZXIgQVZJQyBpbml0aWFsaXphdGlvbi4gVGhpcyBwcmV2ZW50cyBzdGFsZS9kYW5nbGluZyByZWZlcmVuY2VzIHRvIGZyZWVkIGJhY2tpbmcgcGFnZXMgaW4gdGhlIHBoeXNpY2FsIElEIHRhYmxlLlxcblxcblRoZSBjaGFuZ2VzIG9ubHkgd3JpdGUgYSB6ZXJvIHZhbHVlIHRvIGFuIGV4aXN0aW5nIHRhYmxlIGFuZCBkbyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIHJlYWQgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsdGVyIGJvdW5kcyBjaGVja3MgZm9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgb3IgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBNZW1vcnkgbGlmZWN5Y2xlL2RhbmdsaW5nIHBvaW50ZXIgaXNzdWVzIGluIHRoaXMgY29udGV4dCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9tZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RvcnMgcmF0aGVyIHRoYW4gS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6vsp2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 06:49:53 +0000 UTC FinishedAt: 2026-09-04 06:53:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD" ], "series_id": "2d200572-88c8-4b7e-8932-2e9b9ccffe60" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "avic_vcpu_free", "svm_vcpu_create", "svm_vcpu_free" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXZpY192Y3B1X2ZyZWUmIzM0OywKICAgICYjMzQ7c3ZtX3ZjcHVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3N2bV92Y3B1X2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBhdmljX3ZjcHVfZnJlZSgpYCB0byBjbGVhciAoYFdSSVRFX09OQ0UoLi4uLCAwKWApIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIGBrdm1fc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGVgIHdoZW4gYSB2Q1BVIGlzIGZyZWVkIG9yIHdoZW4gdkNQVSBjcmVhdGlvbiBmYWlscyBhZnRlciBBVklDIGluaXRpYWxpemF0aW9uLiBUaGlzIHByZXZlbnRzIHN0YWxlL2RhbmdsaW5nIHJlZmVyZW5jZXMgdG8gZnJlZWQgYmFja2luZyBwYWdlcyBpbiB0aGUgcGh5c2ljYWwgSUQgdGFibGUuXG5cblRoZSBjaGFuZ2VzIG9ubHkgd3JpdGUgYSB6ZXJvIHZhbHVlIHRvIGFuIGV4aXN0aW5nIHRhYmxlIGFuZCBkbyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIHJlYWQgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsdGVyIGJvdW5kcyBjaGVja3MgZm9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgb3IgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBNZW1vcnkgbGlmZWN5Y2xlL2RhbmdsaW5nIHBvaW50ZXIgaXNzdWVzIGluIHRoaXMgY29udGV4dCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9tZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RvcnMgcmF0aGVyIHRoYW4gS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYXZpY192Y3B1X2ZyZWUoKSB0byBjbGVhciB0aGUgcGh5c2ljYWwgQVBJQyBJRCB0YWJsZSBlbnRyeSBvbiBTVk0gdkNQVSBjcmVhdGlvbiBmYWlsdXJlIGFuZCB2Q1BVIHRlYXJkb3duLiBUaGlzIG1vZGlmaWVzIGV4ZWN1dGFibGUgbGlmZWN5Y2xlIGNvZGUgaW4gS1ZNIEFNRCAoU1ZNKSwgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZSBvbiBhbWQ2NCB2aWEgS1ZNIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY3ZDE5YmQ0ZDM0YTEzYjM2MmNkZjY4NzZlNDI2NDk5NzcxZTNiZjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDA2OjUyOjM4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jIGIvYXJjaC94ODYva3ZtL3N2bS9hdmljLmNcbmluZGV4IDNiMDM3ZTM4NTUyMzQuLmJjMmM2OTkzODBiMzQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9hdmljLmNcbkBAIC04ODUsNiAmIzQzOzg4NSwxNiBAQCBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7dm9pZCBhdmljX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHR1MzIgbWF4X2lkID0geDJhdmljX2VuYWJsZWQgPyB4MmF2aWNfbWF4X3BoeXNpY2FsX2lkIDogQVZJQ19NQVhfUEhZU0lDQUxfSUQ7XG4mIzQzO1x0c3RydWN0IGt2bV9zdm0gKmt2bV9zdm0gPSB0b19rdm1fc3ZtKHZjcHUtXHUwMDNla3ZtKTtcbiYjNDM7XHR1MzIgaWQgPSB2Y3B1LVx1MDAzZXZjcHVfaWQ7XG4mIzQzO1xuJiM0MztcdGlmIChrdm1fc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGUgXHUwMDI2XHUwMDI2IGlkIFx1MDAzYz0gbWF4X2lkKVxuJiM0MztcdFx0V1JJVEVfT05DRShrdm1fc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGVbaWRdLCAwKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRhdmljX2hhbmRsZV9kZnJfdXBkYXRlKHZjcHUpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5pbmRleCBlYTY0NzkzOGEyYTY1Li5jMmEyYWU3ZDhlYzM0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuQEAgLTEzMzcsNyAmIzQzOzEzMzcsNyBAQCBzdGF0aWMgaW50IHN2bV92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdm0tXHUwMDNlbXNycG0gPSBzdm1fdmNwdV9hbGxvY19tc3JwbSgpO1xuIFx0aWYgKCFzdm0tXHUwMDNlbXNycG0pIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbi1cdFx0Z290byBlcnJvcl9mcmVlX3NldjtcbiYjNDM7XHRcdGdvdG8gZXJyb3JfZnJlZV9hdmljO1xuIFx0fVxuIFxuIFx0c3ZtLVx1MDAzZXgyYXZpY19tc3JzX2ludGVyY2VwdGVkID0gdHJ1ZTtcbkBAIC0xMzUxLDYgJiM0MzsxMzUxLDggQEAgc3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0cmV0dXJuIDA7XG4gXG4mIzQzO2Vycm9yX2ZyZWVfYXZpYzpcbiYjNDM7XHRhdmljX3ZjcHVfZnJlZSh2Y3B1KTtcbiBlcnJvcl9mcmVlX3NldjpcbiBcdHNldl9mcmVlX3ZjcHUodmNwdSk7XG4gZXJyb3JfZnJlZV92bWNiX3BhZ2U6XG5AQCAtMTM2NSw2ICYjNDM7MTM2Nyw4IEBAIHN0YXRpYyB2b2lkIHN2bV92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0KSk7XG4gXG4mIzQzO1x0YXZpY192Y3B1X2ZyZWUodmNwdSk7XG4mIzQzO1xuIFx0c3ZtX2xlYXZlX25lc3RlZCh2Y3B1KTtcbiBcdHN2bV9mcmVlX25lc3RlZChzdm0pO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5pbmRleCBlOTU4OTQzYjgxNjI3Li43OTBiZDk2YTk3OTEwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuQEAgLTk1NCw2ICYjNDM7OTU0LDcgQEAgdm9pZCBhdmljX2luaXRfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IHZtY2IgKnZtY2IpO1xuIGludCBhdmljX2luY29tcGxldGVfaXBpX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCBhdmljX3VuYWNjZWxlcmF0ZWRfYWNjZXNzX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCBhdmljX2luaXRfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XG4mIzQzO3ZvaWQgYXZpY192Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIGF2aWNfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSk7XG4gdm9pZCBhdmljX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBhdmljX2FwaWN2X3Bvc3Rfc3RhdGVfcmVzdG9yZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXZpY192Y3B1X2ZyZWUmIzM0OywKICAgICYjMzQ7c3ZtX3ZjcHVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3N2bV92Y3B1X2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhdmljX3ZjcHVfZnJlZSgpIHRvIGNsZWFyIHRoZSBwaHlzaWNhbCBBUElDIElEIHRhYmxlIGVudHJ5IG9uIFNWTSB2Q1BVIGNyZWF0aW9uIGZhaWx1cmUgYW5kIHZDUFUgdGVhcmRvd24uIFRoaXMgbW9kaWZpZXMgZXhlY3V0YWJsZSBsaWZlY3ljbGUgY29kZSBpbiBLVk0gQU1EIChTVk0pLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIGZ1enphYmxlIG9uIGFtZDY0IHZpYSBLVk0gaW9jdGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjdkMTliZDRkMzRhMTNiMzYyY2RmNjg3NmU0MjY0OTk3NzFlM2JmMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDY6NTI6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYyBiL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jCmluZGV4IDNiMDM3ZTM4NTUyMzQuLmJjMmM2OTkzODBiMzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jCkBAIC04ODUsNiAmIzQzOzg4NSwxNiBAQCBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3ZvaWQgYXZpY192Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJdTMyIG1heF9pZCA9IHgyYXZpY19lbmFibGVkID8geDJhdmljX21heF9waHlzaWNhbF9pZCA6IEFWSUNfTUFYX1BIWVNJQ0FMX0lEOwomIzQzOwlzdHJ1Y3Qga3ZtX3N2bSAqa3ZtX3N2bSA9IHRvX2t2bV9zdm0odmNwdS0mZ3Q7a3ZtKTsKJiM0MzsJdTMyIGlkID0gdmNwdS0mZ3Q7dmNwdV9pZDsKJiM0MzsKJiM0MzsJaWYgKGt2bV9zdm0tJmd0O2F2aWNfcGh5c2ljYWxfaWRfdGFibGUgJmFtcDsmYW1wOyBpZCAmbHQ7PSBtYXhfaWQpCiYjNDM7CQlXUklURV9PTkNFKGt2bV9zdm0tJmd0O2F2aWNfcGh5c2ljYWxfaWRfdGFibGVbaWRdLCAwKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlhdmljX2hhbmRsZV9kZnJfdXBkYXRlKHZjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKaW5kZXggZWE2NDc5MzhhMmE2NS4uYzJhMmFlN2Q4ZWMzNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCkBAIC0xMzM3LDcgJiM0MzsxMzM3LDcgQEAgc3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXN2bS0mZ3Q7bXNycG0gPSBzdm1fdmNwdV9hbGxvY19tc3JwbSgpOwogCWlmICghc3ZtLSZndDttc3JwbSkgewogCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX2ZyZWVfc2V2OwomIzQzOwkJZ290byBlcnJvcl9mcmVlX2F2aWM7CiAJfQogCiAJc3ZtLSZndDt4MmF2aWNfbXNyc19pbnRlcmNlcHRlZCA9IHRydWU7CkBAIC0xMzUxLDYgJiM0MzsxMzUxLDggQEAgc3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJcmV0dXJuIDA7CiAKJiM0MztlcnJvcl9mcmVlX2F2aWM6CiYjNDM7CWF2aWNfdmNwdV9mcmVlKHZjcHUpOwogZXJyb3JfZnJlZV9zZXY6CiAJc2V2X2ZyZWVfdmNwdSh2Y3B1KTsKIGVycm9yX2ZyZWVfdm1jYl9wYWdlOgpAQCAtMTM2NSw2ICYjNDM7MTM2Nyw4IEBAIHN0YXRpYyB2b2lkIHN2bV92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZhbXA7c3ZtLSZndDtpcl9saXN0KSk7CiAKJiM0MzsJYXZpY192Y3B1X2ZyZWUodmNwdSk7CiYjNDM7CiAJc3ZtX2xlYXZlX25lc3RlZCh2Y3B1KTsKIAlzdm1fZnJlZV9uZXN0ZWQoc3ZtKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaCBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgKaW5kZXggZTk1ODk0M2I4MTYyNy4uNzkwYmQ5NmE5NzkxMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oCkBAIC05NTQsNiAmIzQzOzk1NCw3IEBAIHZvaWQgYXZpY19pbml0X3ZtY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCB2bWNiICp2bWNiKTsKIGludCBhdmljX2luY29tcGxldGVfaXBpX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IGF2aWNfdW5hY2NlbGVyYXRlZF9hY2Nlc3NfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pOwomIzQzO3ZvaWQgYXZpY192Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQgYXZpY192Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKIHZvaWQgYXZpY192Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBhdmljX2FwaWN2X3Bvc3Rfc3RhdGVfcmVzdG9yZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzMxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgS1ZNL1NWTSBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgY2hhbmdlIEkmIzM5O20gbG9va2luZyBhdCBzZWVtcyB0byBiZSB0b3VjaGluZyB0aGUgQU1ENjQgYXJjaGl0ZWN0dXJlIEtWTS9TVk0gY29kZS4gVGhlIGtleSBmaWxlcyBhcmUgaW4gYGFyY2gveDg2L2t2bS9zdm0vYXZpYy5jYCwgYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmNgLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgaGVhZGVyLCBgYXJjaC94ODYva3ZtL3N2bS9zdm0uaGAuIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgZGV0YWlscyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9mIHRoaXMuCgpGaXJzdCwgSSYjMzk7bSBnb2luZyB0byBydW4gYSBgZ2l0IGdyZXBgIG9yIG1heWJlIGp1c3QgcmVhZCB0aGUgZmlsZSBkaXJlY3RseSBvbiBgYXJjaC94ODYva3ZtL3N2bS9hdmljLmNgIGFuZCBgYXJjaC94ODYva3ZtL3N2bS9zdm0uY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBxdWljayBvdmVydmlldyBvZiB3aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQgYW5kIHdoZXJlIHRoZSBjaGFuZ2VzIGFyZSBsb2NhdGVkIHdpdGhpbiB0aGUgbGFyZ2VyIGNvZGViYXNlLiBJIGV4cGVjdCB0aGlzIGluaXRpYWwgc3dlZXAgd2lsbCByZXZlYWwgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBhZmZlY3RlZCBieSB0aGUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODcwOlx0XHRpbnQgcmV0O1xuIDg3MTpcdFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gXHUwMDI2c3ZtLVx1MDAzZXZjcHU7XG4gODcyOlx0XG4gODczOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCk7XG4gODc0Olx0XHRyYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3RfbG9jayk7XG4gODc1Olx0XG4gODc2Olx0XHRpZiAoIWVuYWJsZV9hcGljdiB8fCAhaXJxY2hpcF9pbl9rZXJuZWwodmNwdS1cdTAwM2Vrdm0pKVxuIDg3NzpcdFx0XHRyZXR1cm4gMDtcbiA4Nzg6XHRcbiA4Nzk6XHRcdHJldCA9IGF2aWNfaW5pdF9iYWNraW5nX3BhZ2UodmNwdSk7XG4gODgwOlx0XHRpZiAocmV0KVxuIDg4MTpcdFx0XHRyZXR1cm4gcmV0O1xuIDg4MjpcdFxuIDg4MzpcdFx0c3ZtLVx1MDAzZWRmcl9yZWcgPSBBUElDX0RGUl9GTEFUO1xuIDg4NDpcdFxuIDg4NTpcdFx0cmV0dXJuIHJldDtcbiA4ODY6XHR9XG4gODg3Olx0XG4gODg4Olx0dm9pZCBhdmljX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gODg5Olx0e1xuIDg5MDpcdFx0dTMyIG1heF9pZCA9IHgyYXZpY19lbmFibGVkID8geDJhdmljX21heF9waHlzaWNhbF9pZCA6IEFWSUNfTUFYX1BIWVNJQ0FMX0lEO1xuIDg5MTpcdFx0c3RydWN0IGt2bV9zdm0gKmt2bV9zdm0gPSB0b19rdm1fc3ZtKHZjcHUtXHUwMDNla3ZtKTtcbiA4OTI6XHRcdHUzMiBpZCA9IHZjcHUtXHUwMDNldmNwdV9pZDtcbiA4OTM6XHRcbiA4OTQ6XHRcdGlmIChrdm1fc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGUgXHUwMDI2XHUwMDI2IGlkIFx1MDAzYz0gbWF4X2lkKVxuIDg5NTpcdFx0XHRXUklURV9PTkNFKGt2bV9zdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZVtpZF0sIDApO1xuIDg5NjpcdH1cbiA4OTc6XHRcbiA4OTg6XHR2b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiA4OTk6XHR7XG4gOTAwOlx0XHRhdmljX2hhbmRsZV9kZnJfdXBkYXRlKHZjcHUpO1xuIDkwMTpcdFx0YXZpY19oYW5kbGVfbGRyX3VwZGF0ZSh2Y3B1KTtcbiA5MDI6XHR9XG4gOTAzOlx0XG4gOTA0Olx0c3RhdGljIHZvaWQgc3ZtX2lyX2xpc3RfZGVsKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZClcbiA5MDU6XHR7XG4gOTA2Olx0XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBpcnFmZC1cdTAwM2VpcnFfYnlwYXNzX3ZjcHU7XG4gOTA3Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDkwODpcdFxuIDkwOTpcdFx0aWYgKCF2Y3B1KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NTMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIFNWTSBWQ1BVIExpZmVjeWNsZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIEFNRCBTZWN1cmUgVmlydHVhbCBNYWNoaW5lIChTVk0pIGltcGxlbWVudGF0aW9uIHdpdGhpbiBLVk0uIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbGlmZWN5Y2xlIG9mIGEgdmlydHVhbCBDUFUgKHZDUFUpIGluIHRoZSBTVk0gY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHZDUFVzIGFyZSBjcmVhdGVkIGFuZCBkZXN0cm95ZWQuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBvdmVyYWxsIHZpcnR1YWxpemF0aW9uIGZsb3cuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IHRoZSBgYXJjaC94ODYva3ZtL3N2bS9zdm0uY2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIHRoZSBgc3ZtX3ZjcHVfY3JlYXRlYCBhbmQgYHN2bV92Y3B1X2ZyZWVgIGZ1bmN0aW9ucy4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBhbmQgY2xlYW51cCBvZiBhbiBTVk0gdkNQVSB3aWxsIGJlIGhhbmRsZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmaW5lciBkZXRhaWxzIG9mIHRoZSBndWVzdCYjMzk7cyBleGVjdXRpb24uIEkmIzM5O2xsIHByb2JhYmx5IGJlIGxvb2tpbmcgZm9yIGRhdGEgc3RydWN0dXJlcyBhbmQgaW5pdGlhbGl6YXRpb24gY2FsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzIwOlx0XG4xMzIxOlx0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHZjcHVfc3ZtLCB2Y3B1KSAhPSAwKTtcbjEzMjI6XHRcdHN2bSA9IHRvX3N2bSh2Y3B1KTtcbjEzMjM6XHRcbjEzMjQ6XHRcdGVyciA9IC1FTk9NRU07XG4xMzI1Olx0XHR2bWNiMDFfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTtcbjEzMjY6XHRcdGlmICghdm1jYjAxX3BhZ2UpXG4xMzI3Olx0XHRcdGdvdG8gb3V0O1xuMTMyODpcdFxuMTMyOTpcdFx0ZXJyID0gc2V2X3ZjcHVfY3JlYXRlKHZjcHUpO1xuMTMzMDpcdFx0aWYgKGVycilcbjEzMzE6XHRcdFx0Z290byBlcnJvcl9mcmVlX3ZtY2JfcGFnZTtcbjEzMzI6XHRcbjEzMzM6XHRcdGVyciA9IGF2aWNfaW5pdF92Y3B1KHN2bSk7XG4xMzM0Olx0XHRpZiAoZXJyKVxuMTMzNTpcdFx0XHRnb3RvIGVycm9yX2ZyZWVfc2V2O1xuMTMzNjpcdFxuMTMzNzpcdFx0c3ZtLVx1MDAzZW1zcnBtID0gc3ZtX3ZjcHVfYWxsb2NfbXNycG0oKTtcbjEzMzg6XHRcdGlmICghc3ZtLVx1MDAzZW1zcnBtKSB7XG4xMzM5Olx0XHRcdGVyciA9IC1FTk9NRU07XG4xMzQwOlx0XHRcdGdvdG8gZXJyb3JfZnJlZV9hdmljO1xuMTM0MTpcdFx0fVxuMTM0MjpcdFxuMTM0MzpcdFx0c3ZtLVx1MDAzZXgyYXZpY19tc3JzX2ludGVyY2VwdGVkID0gdHJ1ZTtcbjEzNDQ6XHRcdHN2bS1cdTAwM2VsYnJfbXNyc19pbnRlcmNlcHRlZCA9IHRydWU7XG4xMzQ1Olx0XG4xMzQ2Olx0XHRzdm0tXHUwMDNldm1jYjAxLnB0ciA9IHBhZ2VfYWRkcmVzcyh2bWNiMDFfcGFnZSk7XG4xMzQ3Olx0XHRzdm0tXHUwMDNldm1jYjAxLnBhID0gX19zbWVfc2V0KHBhZ2VfdG9fcGZuKHZtY2IwMV9wYWdlKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4xMzQ4Olx0XHRzdm1fc3dpdGNoX3ZtY2Ioc3ZtLCBcdTAwMjZzdm0tXHUwMDNldm1jYjAxKTtcbjEzNDk6XHRcbjEzNTA6XHRcdHN2bS1cdTAwM2VndWVzdF9zdGF0ZV9sb2FkZWQgPSBmYWxzZTtcbjEzNTE6XHRcbjEzNTI6XHRcdHJldHVybiAwO1xuMTM1MzpcdFxuMTM1NDpcdGVycm9yX2ZyZWVfYXZpYzpcbjEzNTU6XHRcdGF2aWNfdmNwdV9mcmVlKHZjcHUpO1xuMTM1NjpcdGVycm9yX2ZyZWVfc2V2OlxuMTM1NzpcdFx0c2V2X2ZyZWVfdmNwdSh2Y3B1KTtcbjEzNTg6XHRlcnJvcl9mcmVlX3ZtY2JfcGFnZTpcbjEzNTk6XHRcdF9fZnJlZV9wYWdlKHZtY2IwMV9wYWdlKTtcbjEzNjA6XHRvdXQ6XG4xMzYxOlx0XHRyZXR1cm4gZXJyO1xuMTM2MjpcdH1cbjEzNjM6XHRcbjEzNjQ6XHRzdGF0aWMgdm9pZCBzdm1fdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbjEzNjU6XHR7XG4xMzY2Olx0XHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbjEzNjc6XHRcbjEzNjg6XHRcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCkpO1xuMTM2OTpcdFxuMTM3MDpcdFx0YXZpY192Y3B1X2ZyZWUodmNwdSk7XG4xMzcxOlx0XG4xMzcyOlx0XHRzdm1fbGVhdmVfbmVzdGVkKHZjcHUpO1xuMTM3MzpcdFx0c3ZtX2ZyZWVfbmVzdGVkKHN2bSk7XG4xMzc0Olx0XG4xMzc1Olx0XHRzZXZfZnJlZV92Y3B1KHZjcHUpO1xuMTM3NjpcdFxuMTM3NzpcdFx0X19mcmVlX3BhZ2UoX19zbWVfcGFfdG9fcGFnZShzdm0tXHUwMDNldm1jYjAxLnBhKSk7XG4xMzc4Olx0XHRzdm1fdmNwdV9mcmVlX21zcnBtKHN2bS1cdTAwM2Vtc3JwbSk7XG4xMzc5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MjEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS1ZNIFNWTSBhbmQgRnV6emluZyAtIEEgUXVpY2sgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGRlbHZlcyBpbnRvIHRoZSBLVk0gQU1EIFNWTSBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgYXJjaC94ODYva3ZtL3N2bS9gIGRpcmVjdG9yeS4gVGhhdCBpbW1lZGlhdGVseSBzY3JlYW1zIHZpcnR1YWxpemF0aW9uLCBhbmQgZm9yIHg4NiBMaW51eCwgS1ZNIGlzIHRoZSBnby10byBjb3JlIHN1YnN5c3RlbS4gSSBrbm93IGl0JiMzOTtzICpldmVyeXdoZXJlKiBvbiBBTUQgaGFyZHdhcmUsIGFuZCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc2NlbmFyaW9zIG9yIHJ1bm5pbmcgUUVNVSB3aXRoIEtWTS9TVk0gYXJlIGluY3JlZGlibHkgY29tbW9uLiBBbmQgb2YgY291cnNlLCB0aGF0IG1lYW5zIGl0JiMzOTtzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLCBhbmQgYSB3ZWxsLXVuZGVyc3Rvb2QgdGFyZ2V0IGF0IHRoYXQuIFN5emthbGxlciYjMzk7cyBLVk0gaW9jdGwgc3VwcG9ydCDigJMgYEtWTV9DUkVBVEVfVk1gLCBgS1ZNX0NSRUFURV9WQ1BVYCwgdGhlIHdob2xlIHN1aXRlIOKAkyBpcyBleGNlbGxlbnQuCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgY2FuIHdlIGFjdHVhbGx5IGZ1enogS1ZNIFNWTSBlZmZlY3RpdmVseSB0aHJvdWdoIFFFTVUgYW5kIHN5emthbGxlcj8gVGhlIGFuc3dlciwgdGhhbmtmdWxseSwgaXMgKnllcyouIEkmIzM5O20gY29uZmlkZW50IHN5emthbGxlciBoYXMgS1ZNIHdlbGwtY292ZXJlZCwgZnV6emluZyBleHRlbnNpdmVseSB0aHJvdWdoIGAvZGV2L2t2bWAuIFRoYXQmIzM5O3MgdGhlIGtleS4gTm93LCBiZWZvcmUgSSBnbyBkZWVwZXIgSSB3aWxsIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBLY29uZmlnIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIEtWTSBTVk0uIFRoYXQmIzM5O2xsIGdpdmUgbWUgYSBiYXNlbGluZSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBzcGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0FNRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NTUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byBLVk0gQ29uZmlndXJhdGlvbiBmb3IgQU1EKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgS1ZNIEFNRCBzdXBwb3J0IGlzIHN0cnVjdHVyZWQsIHNvIGxldCYjMzk7cyBqdW1wIHN0cmFpZ2h0IGludG8gYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJvdW5kIGBjb25maWcgS1ZNX0FNRGAuIFRoaXMgaXMgdGhlIHVzdWFsIHN0YXJ0aW5nIHBvaW50LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIG9wdGlvbiB0aWVzIGludG8gdGhlIHJlc3Qgb2YgdGhlIEtWTSBpbmZyYXN0cnVjdHVyZSBvbiB4ODYsIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5LCBhbmQgd2hhdCBzcGVjaWZpYyBmZWF0dXJlcyBhcmUgY29uZGl0aW9uYWxseSBlbmFibGVkIGJhc2VkIG9uIHdoZXRoZXIgYEtWTV9BTURgIGlzIGRlZmluZWQuIEFyZSB0aGVyZSBkaWZmZXJlbnQgZmVhdHVyZSBzZXRzIGJhc2VkIG9uIHRoZSBBTUQgcHJvY2Vzc29yPyBBcmUgdGhlcmUgYW55IHJlbGF0ZWQgZGVidWdnaW5nIG9wdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEkmIzM5O20gYW50aWNpcGF0aW5nIGZpbmRpbmcgdGhlIEFNRC1zcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBleHBvc2VkIHRvIHRoZSBoeXBlcnZpc29yLCBhbnkgcXVpcmtzLCBhbmQgaG93IHRob3NlIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUgS2NvbmZpZyBzeXN0ZW0uIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGxheSBvZiB0aGUgbGFuZCBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHRcdGhlbHBcbiAxNDE6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgbGF1bmNoaW5nIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpXG4gMTQyOlx0XHQgIGNvbmZpZGVudGlhbCBWTXMgb24gSW50ZWwgcHJvY2Vzc29ycy5cbiAxNDM6XHRcbiAxNDQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxNDU6XHRcbiAxNDY6XHRjb25maWcgS1ZNX0FNRFxuIDE0NzpcdFx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4gMTQ4Olx0XHRkZXBlbmRzIG9uIEtWTSBcdTAwMjZcdTAwMjYgKENQVV9TVVBfQU1EIHx8IENQVV9TVVBfSFlHT04pXG4gMTQ5Olx0XHRoZWxwXG4gMTUwOlx0XHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBBTUQgcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIHRoZSBBTUQtVlxuIDE1MTpcdFx0ICAoU1ZNKSBleHRlbnNpb25zLlxuIDE1MjpcdFxuIDE1MzpcdFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAxNTQ6XHRcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWFtZC5cbiAxNTU6XHRcbiAxNTY6XHRjb25maWcgS1ZNX0FNRF9TRVZcbiAxNTc6XHRcdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuIDE1ODpcdFx0ZGVmYXVsdCB5XG4gMTU5Olx0XHRkZXBlbmRzIG9uIEtWTV9BTUQgXHUwMDI2XHUwMDI2IFg4Nl82NFxuIDE2MDpcdFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX1NQX1BTUCBcdTAwMjZcdTAwMjYgIShLVk1fQU1EPXkgXHUwMDI2XHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pXG4gMTYxOlx0XHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cbiAxNjI6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuIDE2MzpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9DT05WRVJUXG4gMTY0Olx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1JFQ0xBSU1cbiAxNjU6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuIDE2NjpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuIDE2NzpcdFx0aGVscFxuIDE2ODpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgZW5jcnlwdGVkIFZNcyB3aGljaCB1c2UgU2VjdXJlXG4gMTY5Olx0XHQgIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSwgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMjgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNLUFNRCBEZXBlbmRlbmNpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHBvaW50cyB0byBgS1ZNX0FNRGAgaGF2aW5nIGRlcGVuZGVuY2llcy4gU3BlY2lmaWNhbGx5LCBpdCBuZWVkcyBgS1ZNYCwgYW5kIGl0IHJlcXVpcmVzIGVpdGhlciBgQ1BVX1NVUF9BTURgIG9yIGBDUFVfU1VQX0hZR09OYCB0byBiZSBwcmVzZW50LiBUaGF0IG1ha2VzIHNlbnNlLCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhcmNoaXRlY3R1cmUuIE5vdywgdG8gY29uZmlybSB0aGlzLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IE1ha2VmaWxlLiBMZXQmIzM5O3MgbmF2aWdhdGUgdG8gYGFyY2gveDg2L2t2bS9zdm0vTWFrZWZpbGVgIGFuZCBzZWUgd2hhdCB0aGUgYnVpbGQgc3lzdGVtIGhhcyB0byBzYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+dGhlIGZpbGUgZG9lcyBub3QgZXhpc3Q8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7dGhlIGZpbGUgZG9lcyBub3QgZXhpc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NTYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIEtWTSB4ODYgTWFrZWZpbGUqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGEgY3J1Y2lhbCBmaWxlOiBgYXJjaC94ODYva3ZtL01ha2VmaWxlYC4gSSYjMzk7bSBndWVzc2luZyB0aGF0IHdoYXRldmVyIEkmIzM5O20gdHJvdWJsZXNob290aW5nLCBvciB3aGF0ZXZlciBlbmhhbmNlbWVudCBJJiMzOTttIHdvcmtpbmcgb24sIGxpa2VseSBoYXMgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBjb3JlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZSBLVk0geDg2IG1vZHVsZS4gVGhpcyBNYWtlZmlsZSBpcyB3aGVyZSBhIGxvdCBvZiB0aGUgbWFnaWMgaGFwcGVucyDigJMgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkLCBjb21waWxhdGlvbiB0YXJnZXRzIGFyZSBzZXQgdXAsIGFuZCB1bHRpbWF0ZWx5LCB0aGUgS1ZNIGtlcm5lbCBtb2R1bGUgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGdldHMgYnVpbHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZmlsZSYjMzk7cyBsb2dpYyB0byBzZWUgd2hlcmUgbXkgY2hhbmdlcyBmaXQgaW4gb3Igd2hlcmUgdGhlIHByb2JsZW0gbGllcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N2bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjIyMCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuYXJjaC94ODYva3ZtL01ha2VmaWxlPTIyPWt2bS1pbnRlbC0kKENPTkZJR19LVk1fSU5URUxfVERYKVx0JiM0Mzs9IHZteC90ZHgub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlLTIzLVxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjI0Omt2bS1hbWQteVx0XHQmIzQzOz0gc3ZtL3N2bS5vIHN2bS92bWVudGVyLm8gc3ZtL3BtdS5vIHN2bS9uZXN0ZWQubyBzdm0vYXZpYy5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMjUtXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MjY6a3ZtLWFtZC0kKENPTkZJR19LVk1fQU1EX1NFVilcdCYjNDM7PSBzdm0vc2V2Lm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZToyNzprdm0tYW1kLSQoQ09ORklHX0tWTV9IWVBFUlYpXHQmIzQzOz0gc3ZtL2h5cGVydi5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMjgtXG4tLVxuYXJjaC94ODYva3ZtL01ha2VmaWxlPTMxPWt2bS1pbnRlbC15XHRcdCYjNDM7PSB2bXgvdm14X29uaHlwZXJ2Lm8gdm14L2h5cGVydl9ldm1jcy5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MzI6a3ZtLWFtZC15XHRcdCYjNDM7PSBzdm0vc3ZtX29uaHlwZXJ2Lm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0zMy1lbmRpZlxuLS1cbmFyY2gveDg2L2t2bS9NYWtlZmlsZT0zNz1vYmotJChDT05GSUdfS1ZNX0FNRClcdCYjNDM7PSBrdm0tYW1kLm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0zOC1cbmFyY2gveDg2L2t2bS9NYWtlZmlsZTozOTpBRkxBR1Nfc3ZtL3ZtZW50ZXIubyAgICA6PSAtaXF1b3RlICQob2JqKVxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjQwOiQob2JqKS9zdm0vdm1lbnRlci5vOiAkKG9iaikva3ZtLWFzbS1vZmZzZXRzLmhcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS00MS1cbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTM4NjM9c3RhdGljIGludCBjaGVja19kcl93cml0ZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM4ODktXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjM4OTA6c3RhdGljIGludCBjaGVja19zdm1lKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zODkxLXtcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM5MDEtXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjM5MDI6c3RhdGljIGludCBjaGVja19zdm1lX3BhKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zOTAzLXtcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM5MDgtXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjM5MDk6XHRyZXR1cm4gY2hlY2tfc3ZtZShjdHh0KTtcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzkxMC19XG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz00MDE0PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3Bjb2RlIGdyb3VwN19ybTNbXSA9IHtcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NDAxNTpcdERJUChTcmNOb25lIHwgUHJvdCB8IFByaXYsXHRcdHZtcnVuLFx0XHRjaGVja19zdm1lX3BhKSxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNDAxNi1cdElJKFNyY05vbmUgIHwgUHJvdCB8IEVtdWxhdGVPblVELFx0ZW1faHlwZXJjYWxsLFx0dm1tY2FsbCksXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjQwMTc6XHRESVAoU3JjTm9uZSB8IFByb3QgfCBQcml2LFx0XHR2bWxvYWQsXHRcdGNoZWNrX3N2bWVfcGEpLFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo0MDE4Olx0RElQKFNyY05vbmUgfCBQcm90IHwgUHJpdixcdFx0dm1zYXZlLFx0XHRjaGVja19zdm1lX3BhKSxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NDAxOTpcdERJUChTcmNOb25lIHwgUHJvdCB8IFByaXYsXHRcdHN0Z2ksXHRcdGNoZWNrX3N2bWUpLFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo0MDIwOlx0RElQKFNyY05vbmUgfCBQcm90IHwgUHJpdixcdFx0Y2xnaSxcdFx0Y2hlY2tfc3ZtZSksXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjQwMjE6XHRESVAoU3JjTm9uZSB8IFByb3QgfCBQcml2LFx0XHRza2luaXQsXHRcdGNoZWNrX3N2bWUpLFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo0MDIyOlx0RElQKFNyY05vbmUgfCBQcm90IHwgUHJpdixcdFx0aW52bHBnYSxcdGNoZWNrX3N2bWUpLFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00MDIzLX07XG4tLVxuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jLTEwLSNpbmNsdWRlIFwmIzM0O3ZteC92bXguaFwmIzM0O1xuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jOjExOiNpbmNsdWRlIFwmIzM0O3N2bS9zdm0uaFwmIzM0O1xuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jLTEyLVxuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jPTEzPXN0YXRpYyB2b2lkIF9fdXNlZCBjb21tb24odm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0va3ZtLWFzbS1vZmZzZXRzLmMtMTYtXHRcdEJMQU5LKCk7XG5hcmNoL3g4Ni9rdm0va3ZtLWFzbS1vZmZzZXRzLmM6MTc6XHRcdE9GRlNFVChTVk1fdmNwdV9hcmNoX3JlZ3MsIHZjcHVfc3ZtLCB2Y3B1LmFyY2gucmVncyk7XG5hcmNoL3g4Ni9rdm0va3ZtLWFzbS1vZmZzZXRzLmM6MTg6XHRcdE9GRlNFVChTVk1fY3VycmVudF92bWNiLCB2Y3B1X3N2bSwgY3VycmVudF92bWNiKTtcbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYzoxOTpcdFx0T0ZGU0VUKFNWTV9zcGVjX2N0cmwsIHZjcHVfc3ZtLCBzcGVjX2N0cmwpO1xuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jOjIwOlx0XHRPRkZTRVQoU1ZNX3ZtY2IwMSwgdmNwdV9zdm0sIHZtY2IwMSk7XG5hcmNoL3g4Ni9rdm0va3ZtLWFzbS1vZmZzZXRzLmMtMjEtXHRcdE9GRlNFVChLVk1fVk1DQl9wYSwga3ZtX3ZtY2JfaW5mbywgcGEpO1xuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jOjIyOlx0XHRPRkZTRVQoU0Rfc2F2ZV9hcmVhX3BhLCBzdm1fY3B1X2RhdGEsIHNhdmVfYXJlYV9wYSk7XG5hcmNoL3g4Ni9rdm0va3ZtLWFzbS1vZmZzZXRzLmMtMjMtXHR9XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OC0jaW5jbHVkZSBcdTAwM2Nhc20vc3BlYy1jdHJsLmhcdTAwM2VcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTk6I2luY2x1ZGUgXHUwMDNjYXNtL3N2bS5oXHUwMDNlXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYwLSNpbmNsdWRlIFx1MDAzY2FzbS92bXguaFx1MDAzZVxuLS1cbmFyY2gveDg2L2t2bS9yZWdzLmg9MzEzPXN0YXRpYyBpbmxpbmUgdTY0IGt2bV9wZHB0cl9yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGluZGV4KVxuYXJjaC94ODYva3ZtL3JlZ3MuaC0zMTQte1xuYXJjaC94ODYva3ZtL3JlZ3MuaDozMTU6XHRtaWdodF9zbGVlcCgpOyAgLyogb24gc3ZtICovXG5hcmNoL3g4Ni9rdm0vcmVncy5oLTMxNi1cbi0tXG5hcmNoL3g4Ni9rdm0vc21tLmM9MTg9c3RhdGljIHZvaWQgY2hlY2tfc21yYW1fb2Zmc2V0cyh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS9zbW0uYy04Mi1cdENIRUNLX1NNUkFNNjRfT0ZGU0VUKGVmZXIsXHRcdFx0MHhGRUQwKTtcbmFyY2gveDg2L2t2bS9zbW0uYzo4MzpcdENIRUNLX1NNUkFNNjRfT0ZGU0VUKHN2bV9ndWVzdF9mbGFnLFx0XHQweEZFRDgpO1xuYXJjaC94ODYva3ZtL3NtbS5jOjg0Olx0Q0hFQ0tfU01SQU02NF9PRkZTRVQoc3ZtX2d1ZXN0X3ZtY2JfZ3BhLFx0MHhGRUUwKTtcbmFyY2gveDg2L2t2bS9zbW0uYzo4NTpcdENIRUNLX1NNUkFNNjRfT0ZGU0VUKHN2bV9ndWVzdF92aXJ0dWFsX2ludCxcdDB4RkVFOCk7XG5hcmNoL3g4Ni9rdm0vc21tLmMtODYtXHRDSEVDS19TTVJBTTY0X09GRlNFVChyZXNlcnZlZDMsXHRcdFx0MHhGRUYwKTtcbi0tXG5hcmNoL3g4Ni9rdm0vc21tLmMtOTAtXHRDSEVDS19TTVJBTTY0X09GRlNFVChzc3AsXHRcdFx0MHhGRjE4KTtcbmFyY2gveDg2L2t2bS9zbW0uYzo5MTpcdENIRUNLX1NNUkFNNjRfT0ZGU0VUKHN2bV9ndWVzdF9wYXQsXHRcdDB4RkYyMCk7XG5hcmNoL3g4Ni9rdm0vc21tLmM6OTI6XHRDSEVDS19TTVJBTTY0X09GRlNFVChzdm1faG9zdF9lZmVyLFx0XHQweEZGMjgpO1xuYXJjaC94ODYva3ZtL3NtbS5jOjkzOlx0Q0hFQ0tfU01SQU02NF9PRkZTRVQoc3ZtX2hvc3RfY3I0LFx0XHQweEZGMzApO1xuYXJjaC94ODYva3ZtL3NtbS5jOjk0Olx0Q0hFQ0tfU01SQU02NF9PRkZTRVQoc3ZtX2hvc3RfY3IzLFx0XHQweEZGMzgpO1xuYXJjaC94ODYva3ZtL3NtbS5jOjk1Olx0Q0hFQ0tfU01SQU02NF9PRkZTRVQoc3ZtX2hvc3RfY3IwLFx0XHQweEZGNDApO1xuYXJjaC94ODYva3ZtL3NtbS5jLTk2LVx0Q0hFQ0tfU01SQU02NF9PRkZTRVQoY3I0LFx0XHRcdDB4RkY0OCk7XG4tLVxuYXJjaC94ODYva3ZtL3NtbS5oPTc4PXN0cnVjdCBrdm1fc21yYW1fc3RhdGVfNjQge1xuLS1cbmFyY2gveDg2L2t2bS9zbW0uaC0xMDktXHQgKi9cbmFyY2gveDg2L2t2bS9zbW0uaDoxMTA6XHR1NjQgc3ZtX2d1ZXN0X2ZsYWc7XG5hcmNoL3g4Ni9rdm0vc21tLmg6MTExOlx0dTY0IHN2bV9ndWVzdF92bWNiX2dwYTtcbmFyY2gveDg2L2t2bS9zbW0uaDoxMTI6XHR1NjQgc3ZtX2d1ZXN0X3ZpcnR1YWxfaW50OyAvKiB1bmtub3duIHB1cnBvc2UsIG5vdCBpbXBsZW1lbnRlZCAqL1xuYXJjaC94ODYva3ZtL3NtbS5oLTExMy1cbi0tXG5hcmNoL3g4Ni9rdm0vc21tLmgtMTE5LVx0dTY0IHNzcDtcbmFyY2gveDg2L2t2bS9zbW0uaDoxMjA6XHQvKiBzdm1fKiBmaWVsZHMgYmVsb3cgYXJlIG5vdCBpbXBsZW1lbnRlZCBieSBLVk0gKi9cbmFyY2gveDg2L2t2bS9zbW0uaDoxMjE6XHR1NjQgc3ZtX2d1ZXN0X3BhdDtcbmFyY2gveDg2L2t2bS9zbW0uaDoxMjI6XHR1NjQgc3ZtX2hvc3RfZWZlcjtcbmFyY2gveDg2L2t2bS9zbW0uaDoxMjM6XHR1NjQgc3ZtX2hvc3RfY3I0O1xuYXJjaC94ODYva3ZtL3NtbS5oOjEyNDpcdHU2NCBzdm1faG9zdF9jcjM7XG5hcmNoL3g4Ni9rdm0vc21tLmg6MTI1Olx0dTY0IHN2bV9ob3N0X2NyMDtcbmFyY2gveDg2L2t2bS9zbW0uaC0xMjYtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzAtI2luY2x1ZGUgXCYjMzQ7aXJxLmhcJiMzNDtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjMxOiNpbmNsdWRlIFwmIzM0O3N2bS5oXCYjMzQ7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zMi1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0xMDc9bW9kdWxlX3BhcmFtX3Vuc2FmZShmb3JjZV9hdmljLCBib29sLCAwNDQ0KTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDktLyogTm90ZTpcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjExMDogKiBUaGlzIGhhc2ggdGFibGUgaXMgdXNlZCB0byBtYXAgVk1fSUQgdG8gYSBzdHJ1Y3Qga3ZtX3N2bSxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTExMS0gKiB3aGVuIGhhbmRsaW5nIEFNRCBJT01NVSBHQUxPRyBub3RpZmljYXRpb24gdG8gc2NoZWR1bGUgaW5cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMTQtI2RlZmluZSBTVk1fVk1fREFUQV9IQVNIX0JJVFNcdDhcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjExNTpzdGF0aWMgREVGSU5FX0hBU0hUQUJMRShzdm1fdm1fZGF0YV9oYXNoLCBTVk1fVk1fREFUQV9IQVNIX0JJVFMpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTE2LXN0YXRpYyB1MzIgbmV4dF92bV9pZCA9IDA7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0xMTc9c3RhdGljIGJvb2wgbmV4dF92bV9pZF93cmFwcGVkID0gMDtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjExODpzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHN2bV92bV9kYXRhX2hhc2hfbG9jayk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMTktc3RhdGljIGJvb2wgeDJhdmljX2VuYWJsZWQ7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0xMjA9c3RhdGljIHUzMiB4MmF2aWNfbWF4X3BoeXNpY2FsX2lkO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTIxLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTIyOnN0YXRpYyB2b2lkIGF2aWNfc2V0X3gyYXBpY19tc3JfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTIzLVx0XHRcdFx0XHQgICAgIGJvb2wgaW50ZXJjZXB0KVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTI0LXtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEyNTpcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IFx1MDAyNnN2bS1cdTAwM2V2Y3B1O1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTI2LVx0dTY0IHJkX3JlZ3M7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTI4LVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTI5Olx0aWYgKGludGVyY2VwdCA9PSBzdm0tXHUwMDNleDJhdmljX21zcnNfaW50ZXJjZXB0ZWQpXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMzAtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMzctXHRmb3JfZWFjaF9zZXRfYml0KGksICh1bnNpZ25lZCBsb25nICopXHUwMDI2cmRfcmVncywgQklUU19QRVJfVFlQRShyZF9yZWdzKSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEzODpcdFx0c3ZtX3NldF9pbnRlcmNlcHRfZm9yX21zcih2Y3B1LCBBUElDX0JBU0VfTVNSICYjNDM7IGksXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMzktXHRcdFx0XHRcdCAgTVNSX1RZUEVfUiwgaW50ZXJjZXB0KTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTE0MC1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjE0MTpcdHN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgWDJBUElDX01TUihBUElDX1RBU0tQUkkpLCBNU1JfVFlQRV9XLCBpbnRlcmNlcHQpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTQyOlx0c3ZtX3NldF9pbnRlcmNlcHRfZm9yX21zcih2Y3B1LCBYMkFQSUNfTVNSKEFQSUNfRU9JKSwgTVNSX1RZUEVfVywgaW50ZXJjZXB0KTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjE0MzpcdHN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgWDJBUElDX01TUihBUElDX1NFTEZfSVBJKSwgTVNSX1RZUEVfVywgaW50ZXJjZXB0KTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjE0NDpcdHN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgWDJBUElDX01TUihBUElDX0lDUiksIE1TUl9UWVBFX1csIGludGVyY2VwdCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xNDUtXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxNDY6XHRzdm0tXHUwMDNleDJhdmljX21zcnNfaW50ZXJjZXB0ZWQgPSBpbnRlcmNlcHQ7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xNDctfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTE2OT1zdGF0aWMgdTMyIGF2aWNfZ2V0X21heF9waHlzaWNhbF9pZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTczLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTc0OnN0YXRpYyB2b2lkIGF2aWNfYWN0aXZhdGVfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTE3NS17XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxNzY6XHRzdHJ1Y3Qgdm1jYiAqdm1jYiA9IHN2bS1cdTAwM2V2bWNiMDEucHRyO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTc3Olx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gXHUwMDI2c3ZtLVx1MDAzZXZjcHU7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xNzgtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTgzLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTg0Olx0c3ZtX2Nscl9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfQ1I4X1dSSVRFKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTE4NS1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yMTItXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjIxMzpcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0hfQ1VSUkVOVCwgXHUwMDI2c3ZtLVx1MDAzZXZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjE0LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTIyMS1cdCAqL1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MjIyOlx0aWYgKHgyYXZpY19lbmFibGVkIFx1MDAyNlx1MDAyNiBhcGljX3gyYXBpY19tb2RlKHN2bS1cdTAwM2V2Y3B1LmFyY2guYXBpYykpIHtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTIyMy1cdFx0dm1jYi1cdTAwM2Vjb250cm9sLmludF9jdGwgfD0gWDJBUElDX01PREVfTUFTSztcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yMjUtXHRcdC8qIERpc2FibGluZyBNU1IgaW50ZXJjZXB0IGZvciB4MkFQSUMgcmVnaXN0ZXJzICovXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyMjY6XHRcdGF2aWNfc2V0X3gyYXBpY19tc3JfaW50ZXJjZXB0aW9uKHN2bSwgZmFsc2UpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjI3LVx0fSBlbHNlIHtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTIyOC1cdFx0LyogRW5hYmxpbmcgTVNSIGludGVyY2VwdCBmb3IgeDJBUElDIHJlZ2lzdGVycyAqL1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MjI5Olx0XHRhdmljX3NldF94MmFwaWNfbXNyX2ludGVyY2VwdGlvbihzdm0sIHRydWUpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjMwLVx0fVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTIzMi1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjIzMzpzdGF0aWMgdm9pZCBhdmljX2RlYWN0aXZhdGVfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTIzNC17XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyMzU6XHRzdHJ1Y3Qgdm1jYiAqdm1jYiA9IHN2bS1cdTAwM2V2bWNiMDEucHRyO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjM2LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTIzOS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjI0MDpcdGlmICghaXNfc2V2X2VzX2d1ZXN0KFx1MDAyNnN2bS1cdTAwM2V2Y3B1KSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjI0MTpcdFx0c3ZtX3NldF9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfQ1I4X1dSSVRFKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI0Mi1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI0My1cdC8qIEVuYWJsaW5nIE1TUiBpbnRlcmNlcHQgZm9yIHgyQVBJQyByZWdpc3RlcnMgKi9cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjI0NDpcdGF2aWNfc2V0X3gyYXBpY19tc3JfaW50ZXJjZXB0aW9uKHN2bSwgdHJ1ZSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yNDUtfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTI1MT1zdGF0aWMgaW50IGF2aWNfZ2FfbG9nX25vdGlmaWVyKHUzMiBnYV90YWcpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjUzLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjI1NDpcdHN0cnVjdCBrdm1fc3ZtICprdm1fc3ZtO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjU1LVx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gTlVMTDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yNjEtXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyNjI6XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzdm1fdm1fZGF0YV9oYXNoX2xvY2ssIGZsYWdzKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjI2MzpcdGhhc2hfZm9yX2VhY2hfcG9zc2libGUoc3ZtX3ZtX2RhdGFfaGFzaCwga3ZtX3N2bSwgaG5vZGUsIHZtX2lkKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyNjQ6XHRcdGlmIChrdm1fc3ZtLVx1MDAzZWF2aWNfdm1faWQgIT0gdm1faWQpXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yNjUtXHRcdFx0Y29udGludWU7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyNjY6XHRcdHZjcHUgPSBrdm1fZ2V0X3ZjcHUoXHUwMDI2a3ZtX3N2bS1cdTAwM2Vrdm0sIHZjcHVfaWR4KTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI2Ny1cdFx0YnJlYWs7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yNjgtXHR9XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyNjk6XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnN2bV92bV9kYXRhX2hhc2hfbG9jaywgZmxhZ3MpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjcwLVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTI4OD1zdGF0aWMgaW50IGF2aWNfYWxsb2NfcGh5c2ljYWxfaWRfdGFibGUoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjg5LXtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjI5MDpcdHN0cnVjdCBrdm1fc3ZtICprdm1fc3ZtID0gdG9fa3ZtX3N2bShrdm0pO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjkxLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MjkyOlx0aWYgKGt2bV9zdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI5My1cdFx0cmV0dXJuIDA7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yOTQtXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyOTU6XHRrdm1fc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGUgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI5Ni1cdFx0XHRcdFx0XHRcdFx0ICAgYXZpY19nZXRfcGh5c2ljYWxfaWRfdGFibGVfb3JkZXIoa3ZtKSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyOTc6XHRpZiAoIWt2bV9zdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI5OC1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9MzAzPXN0YXRpYyBpbnQgYXZpY19hbGxvY19sb2dpY2FsX2lkX3RhYmxlKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTMwNC17XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozMDU6XHRzdHJ1Y3Qga3ZtX3N2bSAqa3ZtX3N2bSA9IHRvX2t2bV9zdm0oa3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTMwNi1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjMwNzpcdGlmIChrdm1fc3ZtLVx1MDAzZWF2aWNfbG9naWNhbF9pZF90YWJsZSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTMwOC1cdFx0cmV0dXJuIDA7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zMDktXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozMTA6XHRrdm1fc3ZtLVx1MDAzZWF2aWNfbG9naWNhbF9pZF90YWJsZSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozMTE6XHRpZiAoIWt2bV9zdm0tXHUwMDNlYXZpY19sb2dpY2FsX2lkX3RhYmxlKVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzEyLVx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0zMTc9c3RhdGljIHZvaWQgYXZpY19hZGRfdm1fdG9fZ2FfbG9nX2xpc3Qoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzE4LXtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjMxOTpcdHN0cnVjdCBrdm1fc3ZtICprdm1fc3ZtID0gdG9fa3ZtX3N2bShrdm0pO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MzIwOlx0c3RydWN0IGt2bV9zdm0gKmsyO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzIxLVx0dTMyIHZtX2lkO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTMyNC1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjMyNTpcdGlmIChrdm1fc3ZtLVx1MDAzZWF2aWNfdm1faWQpXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zMjYtXHRcdHJldHVybjtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTMyNy1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjMyODpcdGd1YXJkKHNwaW5sb2NrX2lycXNhdmUpKFx1MDAyNnN2bV92bV9kYXRhX2hhc2hfbG9jayk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zMjktIGFnYWluOlxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTMzNi1cdGlmIChuZXh0X3ZtX2lkX3dyYXBwZWQpIHtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjMzNzpcdFx0aGFzaF9mb3JfZWFjaF9wb3NzaWJsZShzdm1fdm1fZGF0YV9oYXNoLCBrMiwgaG5vZGUsIHZtX2lkKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zMzgtXHRcdFx0aWYgKGsyLVx1MDAzZWF2aWNfdm1faWQgPT0gdm1faWQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzQxLVx0fVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MzQyOlx0a3ZtX3N2bS1cdTAwM2VhdmljX3ZtX2lkID0gdm1faWQ7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozNDM6XHRoYXNoX2FkZChzdm1fdm1fZGF0YV9oYXNoLCBcdTAwMjZrdm1fc3ZtLVx1MDAzZWhub2RlLCBrdm1fc3ZtLVx1MDAzZWF2aWNfdm1faWQpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzQ0LX1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0zNjk9dm9pZCBhdmljX3ZtX3ByZV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM3MC17XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozNzE6XHRzdHJ1Y3Qga3ZtX3N2bSAqa3ZtX3N2bSA9IHRvX2t2bV9zdm0oa3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM3Mi1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjM3MzpcdGlmIChXQVJOX09OX09OQ0UoIWVuYWJsZV9hcGljdikgfHwgIWt2bV9zdm0tXHUwMDNlYXZpY192bV9pZClcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM3NC1cdFx0cmV0dXJuO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzc1LVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6Mzc2Olx0Z3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSkoXHUwMDI2c3ZtX3ZtX2RhdGFfaGFzaF9sb2NrKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM3Ny1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjM3ODpcdGhhc2hfZGVsKFx1MDAyNmt2bV9zdm0tXHUwMDNlaG5vZGUpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzc5LX1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0zODE9dm9pZCBhdmljX3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzgyLXtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjM4MzpcdHN0cnVjdCBrdm1fc3ZtICprdm1fc3ZtID0gdG9fa3ZtX3N2bShrdm0pO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzg0LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM4Ny1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjM4ODpcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylrdm1fc3ZtLVx1MDAzZWF2aWNfbG9naWNhbF9pZF90YWJsZSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozODk6XHRmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWt2bV9zdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZSxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM5MC1cdFx0ICAgYXZpY19nZXRfcGh5c2ljYWxfaWRfdGFibGVfb3JkZXIoa3ZtKSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzkyLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MzkzOnN0YXRpYyBwaHlzX2FkZHJfdCBhdmljX2dldF9iYWNraW5nX3BhZ2VfYWRkcmVzcyhzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM5NC17XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozOTU6XHRyZXR1cm4gX19zbWVfc2V0KF9fcGEoc3ZtLVx1MDAzZXZjcHUuYXJjaC5hcGljLVx1MDAzZXJlZ3MpKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM5Ni19XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zOTctXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozOTg6dm9pZCBhdmljX2luaXRfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IHZtY2IgKnZtY2IpXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zOTkte1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NDAwOlx0c3RydWN0IGt2bV9zdm0gKmt2bV9zdm0gPSB0b19rdm1fc3ZtKHN2bS1cdTAwM2V2Y3B1Lmt2bSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy00MDEtXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo0MDI6XHR2bWNiLVx1MDAzZWNvbnRyb2wuYXZpY19iYWNraW5nX3BhZ2UgPSBhdmljX2dldF9iYWNraW5nX3BhZ2VfYWRkcmVzcyhzdm0pO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NDAzOlx0dm1jYi1cdTAwM2Vjb250cm9sLmF2aWNfbG9naWNhbF9pZCA9IF9fc21lX3NldChfX3BhKGt2bV9zdm0tXHUwMDNlYXZpY19sb2dpY2FsX2lkX3RhYmxlKSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo0MDQ6XHR2bWNiLVx1MDAzZWNvbnRyb2wuYXZpY19waHlzaWNhbF9pZCA9IF9fc21lX3NldChfX3BhKGt2bV9zdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZSkpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDA1LVx0dm1jYi1cdTAwM2Vjb250cm9sLmF2aWNfdmFwaWNfYmFyID0gQVBJQ19ERUZBVUxUX1BIWVNfQkFTRTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTQwNi1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjQwNzpcdGlmIChrdm1fdmNwdV9hcGljdl9hY3RpdmUoXHUwMDI2c3ZtLVx1MDAzZXZjcHUpKVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NDA4Olx0XHRhdmljX2FjdGl2YXRlX3ZtY2Ioc3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTQwOS1cdGVsc2VcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjQxMDpcdFx0YXZpY19kZWFjdGl2YXRlX3ZtY2Ioc3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTQxMS19XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9NDEzPXN0YXRpYyBpbnQgYXZpY19pbml0X2JhY2tpbmdfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDE1LVx0dTMyIG1heF9pZCA9IHgyYXZpY19lbmFibGVkID8geDJhdmljX21heF9waHlzaWNhbF9pZCA6IEFWSUNfTUFYX1BIWVNJQ0FMX0lEO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NDE2Olx0c3RydWN0IGt2bV9zdm0gKmt2bV9zdm0gPSB0b19rdm1fc3ZtKHZjcHUtXHUwMDNla3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjQxNzpcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDE4LVx0dTMyIGlkID0gdmNwdS1cdTAwM2V2Y3B1X2lkO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTQ1OC1cdC8qIFNldHRpbmcgQVZJQyBiYWNraW5nIHBhZ2UgYWRkcmVzcyBpbiB0aGUgcGh5IEFQSUMgSUQgdGFibGUgKi9cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjQ1OTpcdG5ld19lbnRyeSA9IGF2aWNfZ2V0X2JhY2tpbmdfcGFnZV9hZGRyZXNzKHN2bSkgfFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDYwLVx0XHQgICAgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9WQUxJRF9NQVNLO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NDYxOlx0c3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfZW50cnkgPSBuZXdfZW50cnk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy00NjItXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDY3LVx0ICovXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo0Njg6XHRXUklURV9PTkNFKGt2bV9zdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZVtpZF0sIG5ld19lbnRyeSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy00NjktXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9NDkyPXN0YXRpYyB2b2lkIGF2aWNfa2lja192Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGljcmwpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDk0LVx0dmNwdS1cdTAwM2VhcmNoLmFwaWMtXHUwMDNlaXJyX3BlbmRpbmcgPSB0cnVlO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NDk1Olx0c3ZtX2NvbXBsZXRlX2ludGVycnVwdF9kZWxpdmVyeSh2Y3B1LFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDk2LVx0XHRcdFx0XHRpY3JsIFx1MDAyNiBBUElDX01PREVfTUFTSyxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz01NDk9c3RhdGljIGludCBhdmljX2tpY2tfdGFyZ2V0X3ZjcHVzX2Zhc3Qoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2xhcGljICpzb3VyY2UsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNTUzLVx0aW50IHNob3J0aGFuZCA9IGljcmwgXHUwMDI2IEFQSUNfU0hPUlRfTUFTSztcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjU1NDpcdHN0cnVjdCBrdm1fc3ZtICprdm1fc3ZtID0gdG9fa3ZtX3N2bShrdm0pO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNTU1LVx0dTMyIGRlc3Q7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNjAxLVx0XHRlbHNlXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo2MDI6XHRcdFx0YXZpY19sb2dpY2FsX2lkX3RhYmxlID0ga3ZtX3N2bS1cdTAwM2VhdmljX2xvZ2ljYWxfaWRfdGFibGU7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy02MDMtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9NjQyPWludCBhdmljX2luY29tcGxldGVfaXBpX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy02NDMte1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NjQ0Olx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo2NDU6XHR1MzIgaWNyaCA9IHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXhpdF9pbmZvXzEgXHUwMDNlXHUwMDNlIDMyO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NjQ2Olx0dTMyIGljcmwgPSBzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV4aXRfaW5mb18xO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NjQ3Olx0dTMyIGlkID0gc3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5leGl0X2luZm9fMiBcdTAwM2VcdTAwM2UgMzI7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo2NDg6XHR1MzIgaW5kZXggPSBzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV4aXRfaW5mb18yIFx1MDAyNiBBVklDX1BIWVNJQ0FMX01BWF9JTkRFWF9NQVNLO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNjQ5LVx0c3RydWN0IGt2bV9sYXBpYyAqYXBpYyA9IHZjcHUtXHUwMDNlYXJjaC5hcGljO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTcwMT1zdGF0aWMgdTMyICphdmljX2dldF9sb2dpY2FsX2lkX2VudHJ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGxkciwgYm9vbCBmbGF0KVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzAyLXtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjcwMzpcdHN0cnVjdCBrdm1fc3ZtICprdm1fc3ZtID0gdG9fa3ZtX3N2bSh2Y3B1LVx1MDAzZWt2bSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy03MDQtXHR1MzIgY2x1c3RlciwgaW5kZXg7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzIzLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NzI0Olx0cmV0dXJuIFx1MDAyNmt2bV9zdm0tXHUwMDNlYXZpY19sb2dpY2FsX2lkX3RhYmxlW2luZGV4XTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTcyNS19XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9NzQ0PXN0YXRpYyB2b2lkIGF2aWNfaW52YWxpZGF0ZV9sb2dpY2FsX2lkX2VudHJ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTc0NS17XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo3NDY6XHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjc0NzpcdGJvb2wgZmxhdCA9IHN2bS1cdTAwM2VkZnJfcmVnID09IEFQSUNfREZSX0ZMQVQ7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy03NDgtXHR1MzIgKmVudHJ5O1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTc1My1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjc1NDpcdGVudHJ5ID0gYXZpY19nZXRfbG9naWNhbF9pZF9lbnRyeSh2Y3B1LCBzdm0tXHUwMDNlbGRyX3JlZywgZmxhdCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy03NTUtXHRpZiAoZW50cnkpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9NzU5PXN0YXRpYyB2b2lkIGF2aWNfaGFuZGxlX2xkcl91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzYwLXtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjc2MTpcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzYyLVx0dTMyIGxkciA9IGt2bV9sYXBpY19nZXRfcmVnKHZjcHUtXHUwMDNlYXJjaC5hcGljLCBBUElDX0xEUik7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzY4LVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NzY5Olx0aWYgKGxkciA9PSBzdm0tXHUwMDNlbGRyX3JlZylcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTc3MC1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTc3My1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjc3NDpcdHN2bS1cdTAwM2VsZHJfcmVnID0gbGRyO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzc1LVx0YXZpY19sZHJfd3JpdGUodmNwdSwgaWQsIGxkcik7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9Nzc4PXN0YXRpYyB2b2lkIGF2aWNfaGFuZGxlX2Rmcl91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzc5LXtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjc4MDpcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzgxLVx0dTMyIGRmciA9IGt2bV9sYXBpY19nZXRfcmVnKHZjcHUtXHUwMDNlYXJjaC5hcGljLCBBUElDX0RGUik7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy03ODItXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo3ODM6XHRpZiAoc3ZtLVx1MDAzZWRmcl9yZWcgPT0gZGZyKVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzg0LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzg2LVx0YXZpY19pbnZhbGlkYXRlX2xvZ2ljYWxfaWRfZW50cnkodmNwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo3ODc6XHRzdm0tXHUwMDNlZGZyX3JlZyA9IGRmcjtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTc4OC19XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9NzkwPXN0YXRpYyBpbnQgYXZpY191bmFjY2VsX3RyYXBfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzkxLXtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjc5MjpcdHUzMiBvZmZzZXQgPSB0b19zdm0odmNwdSktXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV4aXRfaW5mb18xIFx1MDAyNlxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzkzLVx0XHRcdFx0QVZJQ19VTkFDQ0VMX0FDQ0VTU19PRkZTRVRfTUFTSztcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz04NDI9aW50IGF2aWNfdW5hY2NlbGVyYXRlZF9hY2Nlc3NfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg0My17XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo4NDQ6XHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg0NS1cdGludCByZXQgPSAwO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6ODQ2Olx0dTMyIG9mZnNldCA9IHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXhpdF9pbmZvXzEgXHUwMDI2XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04NDctXHRcdCAgICAgQVZJQ19VTkFDQ0VMX0FDQ0VTU19PRkZTRVRfTUFTSztcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjg0ODpcdHUzMiB2ZWN0b3IgPSBzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV4aXRfaW5mb18yIFx1MDAyNlxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtODQ5LVx0XHQgICAgIEFWSUNfVU5BQ0NFTF9BQ0NFU1NfVkVDVE9SX01BU0s7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo4NTA6XHRib29sIHdyaXRlID0gKHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXhpdF9pbmZvXzEgXHUwMDNlXHUwMDNlIDMyKSBcdTAwMjZcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg1MS1cdFx0ICAgICBBVklDX1VOQUNDRUxfQUNDRVNTX1dSSVRFX01BU0s7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtODU3LVx0XHQvKiBIYW5kbGluZyBUcmFwICovXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo4NTg6XHRcdFdBUk5fT05DRSghd3JpdGUsIFwmIzM0O3N2bTogSGFuZGxpbmcgdHJhcCByZWFkLlxcblwmIzM0Oyk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04NTktXHRcdHJldCA9IGF2aWNfdW5hY2NlbF90cmFwX3dyaXRlKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg2Ny1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjg2ODppbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04Njkte1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtODcwLVx0aW50IHJldDtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjg3MTpcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IFx1MDAyNnN2bS1cdTAwM2V2Y3B1O1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtODcyLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6ODczOlx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3QpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6ODc0Olx0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0X2xvY2spO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtODc1LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg4Mi1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjg4MzpcdHN2bS1cdTAwM2VkZnJfcmVnID0gQVBJQ19ERlJfRkxBVDtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg4NC1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz04ODg9dm9pZCBhdmljX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtODkwLVx0dTMyIG1heF9pZCA9IHgyYXZpY19lbmFibGVkID8geDJhdmljX21heF9waHlzaWNhbF9pZCA6IEFWSUNfTUFYX1BIWVNJQ0FMX0lEO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6ODkxOlx0c3RydWN0IGt2bV9zdm0gKmt2bV9zdm0gPSB0b19rdm1fc3ZtKHZjcHUtXHUwMDNla3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg5Mi1cdHUzMiBpZCA9IHZjcHUtXHUwMDNldmNwdV9pZDtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg5My1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjg5NDpcdGlmIChrdm1fc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGUgXHUwMDI2XHUwMDI2IGlkIFx1MDAzYz0gbWF4X2lkKVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6ODk1Olx0XHRXUklURV9PTkNFKGt2bV9zdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZVtpZF0sIDApO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtODk2LX1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz04OTg9dm9pZCBhdmljX2FwaWN2X3Bvc3Rfc3RhdGVfcmVzdG9yZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTAzLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6OTA0OnN0YXRpYyB2b2lkIHN2bV9pcl9saXN0X2RlbChzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQpXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MDUte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTkxMS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjkxMjpcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0b19zdm0odmNwdSktXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MTMtXHRsaXN0X2RlbChcdTAwMjZpcnFmZC1cdTAwM2V2Y3B1X2xpc3QpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6OTE0Olx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dG9fc3ZtKHZjcHUpLVx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTE1LX1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz05MTc9aW50IGF2aWNfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTI0LVx0ICovXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5MjU6XHRzdm1faXJfbGlzdF9kZWwoaXJxZmQpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTI2LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTkzNC1cdFx0c3RydWN0IGFtZF9pb21tdV9waV9kYXRhIHBpX2RhdGEgPSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5MzU6XHRcdFx0LmdhX3RhZyA9IEFWSUNfR0FUQUcodG9fa3ZtX3N2bShrdm0pLVx1MDAzZWF2aWNfdm1faWQsXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MzYtXHRcdFx0XHRcdCAgICAgdmNwdS1cdTAwM2V2Y3B1X2lkeCksXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MzctXHRcdFx0LmlzX2d1ZXN0X21vZGUgPSBrdm1fdmNwdV9hcGljdl9hY3RpdmUodmNwdSksXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5Mzg6XHRcdFx0LnZhcGljX2FkZHIgPSBhdmljX2dldF9iYWNraW5nX3BhZ2VfYWRkcmVzcyh0b19zdm0odmNwdSkpLFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTM5LVx0XHRcdC52ZWN0b3IgPSB2ZWN0b3IsXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05NDAtXHRcdH07XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5NDE6XHRcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTQyLVx0XHR1NjQgZW50cnk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTUwLVx0XHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjk1MTpcdFx0Z3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUpKFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0X2xvY2spO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTUyLVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTk1OC1cdFx0ICovXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5NTk6XHRcdGVudHJ5ID0gc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfZW50cnk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05NjAtXHRcdGlmIChlbnRyeSBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9JU19SVU5OSU5HX01BU0spIHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05ODEtXHRcdGlycWZkLVx1MDAzZWlycV9ieXBhc3NfZGF0YSA9IHBpX2RhdGEuaXJfZGF0YTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjk4MjpcdFx0bGlzdF9hZGQoXHUwMDI2aXJxZmQtXHUwMDNldmNwdV9saXN0LCBcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05ODMtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTEwMTY9c3RhdGljIHZvaWQgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTAxOS1cdGJvb2wgZ2FfbG9nX2ludHIgPSAoYWN0aW9uIFx1MDAyNiBBVklDX1NUQVJUX0JMT0NLSU5HKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEwMjA6XHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwMjEtXHRzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQ7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDIyLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTAyMzpcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3RfbG9jayk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDI0LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwMjgtXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEwMjk6XHRpZiAobGlzdF9lbXB0eShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCkpXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDMwLVx0XHRyZXR1cm47XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDMxLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTAzMjpcdGxpc3RfZm9yX2VhY2hfZW50cnkoaXJxZmQsIFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0LCB2Y3B1X2xpc3QpIHtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwMzMtXHRcdHZvaWQgKmRhdGEgPSBpcnFmZC1cdTAwM2VpcnFfYnlwYXNzX2RhdGE7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9MTA0ND1zdGF0aWMgdm9pZCBfX2F2aWNfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDQ2LXtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEwNDc6XHRzdHJ1Y3Qga3ZtX3N2bSAqa3ZtX3N2bSA9IHRvX2t2bV9zdm0odmNwdS1cdTAwM2Vrdm0pO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTA0OC1cdGludCBoX3BoeXNpY2FsX2lkID0gY3B1X3BoeXNpY2FsX2lkKGNwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMDQ5Olx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDUwLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDY0LVx0ICogX2N1cnJlbnRseV8gaGF2ZSBhc3NpZ25lZCBkZXZpY2VzLCBhcyB0aGF0IGNhbiBjaGFuZ2UuICBIb2xkaW5nXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMDY1Olx0ICogaXJfbGlzdF9sb2NrIGVuc3VyZXMgdGhhdCBlaXRoZXIgc3ZtX2lyX2xpc3RfYWRkKCkgd2lsbCBjb25zdW1lXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDY2LVx0ICogdXAtdG8tZGF0ZSBlbnRyeSBpbmZvcm1hdGlvbiwgb3IgdGhhdCB0aGlzIHRhc2sgd2lsbCB3YWl0IHVudGlsXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMDY3Olx0ICogc3ZtX2lyX2xpc3RfYWRkKCkgY29tcGxldGVzIHRvIHNldCB0aGUgbmV3IHRhcmdldCBwQ1BVLlxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTA2OC1cdCAqL1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTA2OTpcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDcwLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTA3MTpcdGVudHJ5ID0gc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfZW50cnk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDcyLVx0V0FSTl9PTl9PTkNFKGVudHJ5IFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0lTX1JVTk5JTkdfTUFTSyk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTA3OC1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEwNzk6XHRzdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF9lbnRyeSA9IGVudHJ5O1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTA4MC1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDg5LVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTA5MDpcdFdSSVRFX09OQ0Uoa3ZtX3N2bS1cdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlW3ZjcHUtXHUwMDNldmNwdV9pZF0sIGVudHJ5KTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwOTEtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTA5My1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEwOTQ6XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MTUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA3MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXcgS1ZNIFBhdGNoOiBBVklDIENsZWFudXAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIHRoZSBBTUQgU1ZNIEFkdmFuY2VkIFZpcnR1YWwgSW50ZXJydXB0IENvbnRyb2xsZXIgKEFWSUMpIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEtWTSBzdWJzeXN0ZW0uIEkmIzM5O20gc2VlaW5nIGEgbmV3IGZ1bmN0aW9uLCBgYXZpY192Y3B1X2ZyZWVgLCBhZGRlZCBpbiBgYXJjaC94ODYva3ZtL3N2bS9hdmljLmNgLiBUaGUgZnVuY3Rpb24gaXRzZWxmIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IGl0JiMzOTtzIGRlc2lnbmVkIHRvIGNsZWFyIGFuIGVudHJ5IGluIHRoZSBgYXZpY19waHlzaWNhbF9pZF90YWJsZWAgZm9yIGEgZ2l2ZW4gdkNQVSAoYHZjcHVgKS4gVGhlIGBtYXhfaWRgIGNhbGN1bGF0aW9uIHNlZW1zIHRvIGFjY291bnQgZm9yIHBvdGVudGlhbCBYMkFWSUMgc3VwcG9ydC4KCkxvb2tpbmcgYXQgdGhlIGNoYW5nZXMgaW4gYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmNgLCBpdCBzZWVtcyB0aGlzIGBhdmljX3ZjcHVfZnJlZWAgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGluIGJvdGggYHN2bV92Y3B1X2NyZWF0ZWAgYW5kIGBzdm1fdmNwdV9mcmVlYC4gSW4gYHN2bV92Y3B1X2NyZWF0ZWAsIGl0JiMzOTtzIGNhbGxlZCBkdXJpbmcgZXJyb3IgaGFuZGxpbmcgaWYgbWVtb3J5IGFsbG9jYXRpb24gZm9yIGBtc3JwbWAgZmFpbHMuIFRoaXMgaW5kaWNhdGVzIHRoYXQgcHJldmlvdXNseSwgaWYgdGhlIHZDUFUgY3JlYXRpb24gZmFpbGVkICphZnRlciogdGhlIEFWSUMgaW5pdGlhbGl6YXRpb24sIHRoZSB0YWJsZSBlbnRyeSBtaWdodCBoYXZlIGJlZW4gbGVmdCB1bmNsZWFyZWQuIE5vdywgd2UgaGF2ZSBhbiBleHBsaWNpdCBjbGVhbnVwIHBhdGggaW4gY2FzZSBvZiBhbGxvY2F0aW9uIGVycm9yLiBTaW1pbGFybHksIGluIGBzdm1fdmNwdV9mcmVlYCwgaXQmIzM5O3MgY2FsbGVkIGR1cmluZyB2Q1BVIGRlc3RydWN0aW9uLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlcmUmIzM5O3MgYWxzbyBhIGBXQVJOX09OX09OQ0VgIGFib3V0IGFuIGVtcHR5IGBpcl9saXN0YCwgd2hpY2ggaXMgYSBnb29kIHNhbml0eSBjaGVjay4KCk5vdywgbGV0JiMzOTtzIHJld2luZCBhbmQgc2VlIHdoYXQgaGFwcGVuZWQgYmVmb3JlLiBUaGUgaW5pdGlhbCBBVklDIHNldHVwIGR1cmluZyB2Q1BVIGNyZWF0aW9uIChgc3ZtX3ZjcHVfY3JlYXRlYCkgaW52b2x2ZXMgYGF2aWNfaW5pdF92Y3B1YCwgd2hpY2ggdGhlbiBjYWxscyBgYXZpY19pbml0X2JhY2tpbmdfcGFnZWAuIFRoaXMgZnVuY3Rpb24sIGF0IHNvbWUgcG9pbnQsIHdyaXRlcyB0byB0aGUgYGF2aWNfcGh5c2ljYWxfaWRfdGFibGVgIHVzaW5nIGBXUklURV9PTkNFYC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoYXQgKmJlZm9yZSogdGhpcyBwYXRjaCwgaWYgdkNQVSBjcmVhdGlvbiBmYWlsZWQgKmFmdGVyKiBgYXZpY19pbml0X2JhY2tpbmdfcGFnZWAsIG9yIGlmIHRoZSB2Q1BVIHdhcyBkZXN0cm95ZWQsIHRoYXQgdGFibGUgZW50cnkgKndhc24mIzM5O3QqIGJlaW5nIGNsZWFyZWQuIE5vdywgd2l0aCB0aGUgYWRkaXRpb24gb2YgYGF2aWNfdmNwdV9mcmVlYCwgd2UgaGF2ZSB0aGUgY2xlYW51cCBwYXRoLgoKU28sIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyByZWFjaGFibGUgdmlhIGZ1enppbmc/IENvbnNpZGVyaW5nIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCB3ZSBhcmUgdGFsa2luZyBhYm91dCBLVk0mIzM5O3MgQU1EIFNWTSAoQVZJQykuIFN5emthbGxlciBmcmVxdWVudGx5IHRhcmdldHMgYmFzaWMgS1ZNIHN5c2NhbGxzIGZvciBmdXp6aW5nLCBsaWtlIGBLVk1fQ1JFQVRFX1ZDUFVgLCBjbG9zaW5nIHZjcHUgZmRzLCBhbmQgZGVzdHJveWluZyBWTXMuIFdoZW4gcnVubmluZyBzeXprYWxsZXIgb24gQU1EIGhvc3RzIChvciBuZXN0ZWQgQU1EIFNWTSBpbiBRRU1VKSwgdGhpcyBjb2RlIHdpbGwgYmUgZXhlcmNpc2VkLiBUaGlzIG1lYW5zIHRoZSBwYXRocyB3aGVyZSBhIHZDUFUgY3JlYXRpb24gKm1pZ2h0KiBmYWlsLCBvciB3aGVyZSB3ZSYjMzk7cmUgZXhwbGljaXRseSBmcmVlaW5nIHZDUFVzLCBhcmUgYWJzb2x1dGVseSBiZWluZyBoaXQuIFRoZSBmYWN0IHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGV4ZWN1dGFibGUga2VybmVsIEMgY29kZSBpcywgaW4gaXRzZWxmLCBhIGdvb2QgcmVhc29uIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuCgpUaGVyZWZvcmUsIHllcywgdGhpcyBsb29rcyBsaWtlIGEgd29ydGh3aGlsZSBmdXp6aW5nIHRhcmdldC4gV2UganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBhcHByb3ByaWF0ZSBjb25maWd1cmF0aW9ucyBlbmFibGVkOiBzcGVjaWZpY2FsbHksIGBLVk1gIGFuZCBgS1ZNX0FNRGAuIFdlIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYW55IGRlcGVuZGVuY2llcyB0aG9zZSBvcHRpb25zIGhhdmUgdG8gZ2l2ZSB1cyBmdXJ0aGVyIGluc2lnaHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXHRib29sIFwmIzM0O0NvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFwmIzM0O0NoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzM6Y29uZmlnIEtWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3NC1cdGJvb2wgXCYjMzQ7SS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODM6Y29uZmlnIEtWTV9TTU1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4NC1cdGJvb2wgXCYjMzQ7U3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTQ6Y29uZmlnIEtWTV9IWVBFUlZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjA3LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA4OmNvbmZpZyBLVk1fWEVOXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDktXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE3OmNvbmZpZyBLVk1fUFJPVkVfTU1VXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTgtXHRib29sIFwmIzM0O1Byb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzA6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVx0Ym9vbFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMzOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzQtXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDA0NAoJCQkJCQkJb3V0cHV0OiAxMjkKCQkJCQkJCXRob3VnaHRzOiAyOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgS1ZNL0FNRCBEZXBlbmRlbmNpZXMgYW5kIEZvY3VzIFN5bWJvbHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEtWTV9BTURgLiBUaGUgbG9naWMgaXMgY2xlYXI6IGl0IGRlcGVuZHMgb24gYEtWTWAgYW5kIGVpdGhlciBgQ1BVX1NVUF9BTURgIG9yIGBDUFVfU1VQX0hZR09OYC4gYENQVV9TVVBfQU1EYCBpcywgYnkgZGVmYXVsdCwgZW5hYmxlZCBvbiB4ODYsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLiBTbywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGUgY29yZSBjb25maWd1cmF0aW9ucyByZXF1aXJlZCBhcmUgYEtWTWAgYW5kIGBLVk1fQU1EYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuCgpOb3csIHRvIGdldCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLCBJIGhhdmUgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IHN5bWJvbHMuIFdoaWNoIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgaW52b2x2ZWQsIG9yIGFyZSBpbXBsZW1lbnRpbmcgdGhlIHNwZWNpZmljIGNoYW5nZXM/IEkmIzM5O3ZlIGlkZW50aWZpZWQgZm91ciBrZXkgZnVuY3Rpb25zOiBgYXZpY192Y3B1X2ZyZWVgLCBgc3ZtX3ZjcHVfY3JlYXRlYCwgYHN2bV92Y3B1X2ZyZWVgLCBhbmQgYGF2aWNfaW5pdF92Y3B1YC4gVGhlIGZvdXJ0aCBzZWVtcyByZWxhdGVkIHRvIHRoZSBBVklDIHNldHVwLgoKVGhlIG5leHQgY3JpdGljYWwgc3RlcCBpcyB0byBhc3Nlc3MgdGhlIHNjb3BlIG9mIHRob3NlIGZ1bmN0aW9ucy4gQXJlIHRoZXkgdWJpcXVpdG91cyBrZXJuZWwgYWxsb2NhdG9ycywgb3IgYXJlIHRoZXkgc3BlY2lmaWMgdG8gS1ZNL1NWTSBpbXBsZW1lbnRhdGlvbnM/IEdvb2QsIHRoZXkgYXJlIEtWTS1TVk0gc3BlY2lmaWMuIFRoaXMgaXMgd2hhdCBJIHdhcyBob3BpbmcgdG8gc2VlLiBJdCBtZWFucyB0aGVzZSBmdW5jdGlvbnMgYXJlIGxpa2VseSB0byBiZSBzdHJvbmcgaW5kaWNhdG9ycyBvZiB0aGUgdGFyZ2V0ZWQgZnVuY3Rpb25hbGl0eS4KCkkmIzM5O20gbm93IGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0byBiZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciBzeW1ib2xzIG9yIGNvbmZpZ3MgdGhhdCBhcmUgbmVlZGVkLgoKSSYjMzk7bSBub3cgY29uZmlkZW50IHRoYXQgbXkgbGlzdHMgYXJlIGNvcnJlY3Q6IGBFbmFibGVDb25maWdzYCBpcyBgWyYjMzQ7S1ZNJiMzNDssICYjMzQ7S1ZNX0FNRCYjMzQ7XWAgYW5kIGBGb2N1c1N5bWJvbHNgIGlzIGBbJiMzNDthdmljX3ZjcHVfZnJlZSYjMzQ7LCAmIzM0O3N2bV92Y3B1X2NyZWF0ZSYjMzQ7LCAmIzM0O3N2bV92Y3B1X2ZyZWUmIzM0O11gLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgZmluYWwgcmV2aWV3IG9mIGV2ZXJ5dGhpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBhbmQgbXkgcmVhc29uaW5nIGFyZSBhY2N1cmF0ZSBhbmQgd2VsbC1mb3JtYXR0ZWQuIEkmIzM5O20gcmVhZHkgdG8gY2FsbCB0aGUgYHNldC1yZXN1bHRzYCBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthdmljX3ZjcHVfZnJlZSYjMzQ7LAogICAgJiMzNDtzdm1fdmNwdV9jcmVhdGUmIzM0OywKICAgICYjMzQ7c3ZtX3ZjcHVfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGF2aWNfdmNwdV9mcmVlKCkgdG8gY2xlYXIgdGhlIHBoeXNpY2FsIEFQSUMgSUQgdGFibGUgZW50cnkgb24gU1ZNIHZDUFUgY3JlYXRpb24gZmFpbHVyZSBhbmQgdkNQVSB0ZWFyZG93bi4gVGhpcyBtb2RpZmllcyBleGVjdXRhYmxlIGxpZmVjeWNsZSBjb2RlIGluIEtWTSBBTUQgKFNWTSksIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUgb24gYW1kNjQgdmlhIEtWTSBpb2N0bHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXZpY192Y3B1X2ZyZWUmIzM0OywKICAgICYjMzQ7c3ZtX3ZjcHVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3N2bV92Y3B1X2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhdmljX3ZjcHVfZnJlZSgpIHRvIGNsZWFyIHRoZSBwaHlzaWNhbCBBUElDIElEIHRhYmxlIGVudHJ5IG9uIFNWTSB2Q1BVIGNyZWF0aW9uIGZhaWx1cmUgYW5kIHZDUFUgdGVhcmRvd24uIFRoaXMgbW9kaWZpZXMgZXhlY3V0YWJsZSBsaWZlY3ljbGUgY29kZSBpbiBLVk0gQU1EIChTVk0pLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIGZ1enphYmxlIG9uIGFtZDY0IHZpYSBLVk0gaW9jdGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgYXZpY192Y3B1X2ZyZWUoKWAgdG8gY2xlYXIgKGBXUklURV9PTkNFKC4uLiwgMClgKSB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBpbiBga3ZtX3N2bS1cdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlYCB3aGVuIGEgdkNQVSBpcyBmcmVlZCBvciB3aGVuIHZDUFUgY3JlYXRpb24gZmFpbHMgYWZ0ZXIgQVZJQyBpbml0aWFsaXphdGlvbi4gVGhpcyBwcmV2ZW50cyBzdGFsZS9kYW5nbGluZyByZWZlcmVuY2VzIHRvIGZyZWVkIGJhY2tpbmcgcGFnZXMgaW4gdGhlIHBoeXNpY2FsIElEIHRhYmxlLlxuXG5UaGUgY2hhbmdlcyBvbmx5IHdyaXRlIGEgemVybyB2YWx1ZSB0byBhbiBleGlzdGluZyB0YWJsZSBhbmQgZG8gbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCByZWFkIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbHRlciBib3VuZHMgY2hlY2tzIGZvciB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZS4gTWVtb3J5IGxpZmVjeWNsZS9kYW5nbGluZyBwb2ludGVyIGlzc3VlcyBpbiB0aGlzIGNvbnRleHQgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0b3JzIHJhdGhlciB0aGFuIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjdkMTliZDRkMzRhMTNiMzYyY2RmNjg3NmU0MjY0OTk3NzFlM2JmMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDY6NTI6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYyBiL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jCmluZGV4IDNiMDM3ZTM4NTUyMzQuLmJjMmM2OTkzODBiMzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jCkBAIC04ODUsNiAmIzQzOzg4NSwxNiBAQCBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3ZvaWQgYXZpY192Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJdTMyIG1heF9pZCA9IHgyYXZpY19lbmFibGVkID8geDJhdmljX21heF9waHlzaWNhbF9pZCA6IEFWSUNfTUFYX1BIWVNJQ0FMX0lEOwomIzQzOwlzdHJ1Y3Qga3ZtX3N2bSAqa3ZtX3N2bSA9IHRvX2t2bV9zdm0odmNwdS0mZ3Q7a3ZtKTsKJiM0MzsJdTMyIGlkID0gdmNwdS0mZ3Q7dmNwdV9pZDsKJiM0MzsKJiM0MzsJaWYgKGt2bV9zdm0tJmd0O2F2aWNfcGh5c2ljYWxfaWRfdGFibGUgJmFtcDsmYW1wOyBpZCAmbHQ7PSBtYXhfaWQpCiYjNDM7CQlXUklURV9PTkNFKGt2bV9zdm0tJmd0O2F2aWNfcGh5c2ljYWxfaWRfdGFibGVbaWRdLCAwKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlhdmljX2hhbmRsZV9kZnJfdXBkYXRlKHZjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKaW5kZXggZWE2NDc5MzhhMmE2NS4uYzJhMmFlN2Q4ZWMzNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCkBAIC0xMzM3LDcgJiM0MzsxMzM3LDcgQEAgc3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXN2bS0mZ3Q7bXNycG0gPSBzdm1fdmNwdV9hbGxvY19tc3JwbSgpOwogCWlmICghc3ZtLSZndDttc3JwbSkgewogCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX2ZyZWVfc2V2OwomIzQzOwkJZ290byBlcnJvcl9mcmVlX2F2aWM7CiAJfQogCiAJc3ZtLSZndDt4MmF2aWNfbXNyc19pbnRlcmNlcHRlZCA9IHRydWU7CkBAIC0xMzUxLDYgJiM0MzsxMzUxLDggQEAgc3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJcmV0dXJuIDA7CiAKJiM0MztlcnJvcl9mcmVlX2F2aWM6CiYjNDM7CWF2aWNfdmNwdV9mcmVlKHZjcHUpOwogZXJyb3JfZnJlZV9zZXY6CiAJc2V2X2ZyZWVfdmNwdSh2Y3B1KTsKIGVycm9yX2ZyZWVfdm1jYl9wYWdlOgpAQCAtMTM2NSw2ICYjNDM7MTM2Nyw4IEBAIHN0YXRpYyB2b2lkIHN2bV92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZhbXA7c3ZtLSZndDtpcl9saXN0KSk7CiAKJiM0MzsJYXZpY192Y3B1X2ZyZWUodmNwdSk7CiYjNDM7CiAJc3ZtX2xlYXZlX25lc3RlZCh2Y3B1KTsKIAlzdm1fZnJlZV9uZXN0ZWQoc3ZtKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaCBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgKaW5kZXggZTk1ODk0M2I4MTYyNy4uNzkwYmQ5NmE5NzkxMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oCkBAIC05NTQsNiAmIzQzOzk1NCw3IEBAIHZvaWQgYXZpY19pbml0X3ZtY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCB2bWNiICp2bWNiKTsKIGludCBhdmljX2luY29tcGxldGVfaXBpX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IGF2aWNfdW5hY2NlbGVyYXRlZF9hY2Nlc3NfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pOwomIzQzO3ZvaWQgYXZpY192Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQgYXZpY192Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKIHZvaWQgYXZpY192Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBhdmljX2FwaWN2X3Bvc3Rfc3RhdGVfcmVzdG9yZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDMyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFWSUMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiwgYGF2aWNfdmNwdV9mcmVlYCwgd2l0aGluIGBhcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuIFJlYWRpbmcgdGhyb3VnaCBpdCwgSSBzZWUgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIGNsZWFyaW5nIGFuIGVudHJ5IGluIHRoZSBgYXZpY19waHlzaWNhbF9pZF90YWJsZWAgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgdkNQVS4gVGhlIGxvZ2ljIGFwcGVhcnMgdG8gY29uZGl0aW9uYWxseSBjbGVhciB0aGUgZW50cnkgYmFzZWQgb24gdGhlIGB4MmF2aWNfZW5hYmxlZGAgZmxhZyBhbmQgdGhlIGB2Y3B1LSZndDt2Y3B1X2lkYC4gU3BlY2lmaWNhbGx5LCBpZiBgeDJhdmljX2VuYWJsZWRgIGlzIHNldCwgaXQgdXNlcyBgeDJhdmljX21heF9waHlzaWNhbF9pZGAgYXMgdGhlIHVwcGVyIGJvdW5kIGZvciB2YWxpZCBJRHMsIG90aGVyd2lzZSBpdCB1c2VzIHRoZSBzdGFuZGFyZCBgQVZJQ19NQVhfUEhZU0lDQUxfSURgLiBJdCB0aGVuIGFjY2Vzc2VzIHRoZSB0YWJsZSB1c2luZyB0aGUgdkNQVSYjMzk7cyBJRCBhbmQgc2V0cyB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSB0byB6ZXJvIHVzaW5nIGBXUklURV9PTkNFYC4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0LiBUaGUgcGF0Y2ggYWxzbyBpbnRlZ3JhdGVzIHRoaXMgYGF2aWNfdmNwdV9mcmVlYCBmdW5jdGlvbiBpbnRvIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jYC4gSXQmIzM5O3MgYmVpbmcgY2FsbGVkIGluIHR3byBzcGVjaWZpYyBwbGFjZXM6IHRoZSBlcnJvciBwYXRoIHdpdGhpbiBgc3ZtX3ZjcHVfY3JlYXRlYCBhbmQgd2l0aGluIHRoZSBgc3ZtX3ZjcHVfZnJlZWAgZnVuY3Rpb24gaXRzZWxmLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZSBwdXJwb3NlIG9mIGBhdmljX3ZjcHVfZnJlZWAgaXMgdG8gY2xlYW4gdXAgcmVzb3VyY2VzIGFsbG9jYXRlZCB0byB0aGUgQVZJQyBmb3IgYSB2Q1BVLCBib3RoIGR1cmluZyB2Q1BVIGNyZWF0aW9uIHdoZW4gc29tZXRoaW5nIGZhaWxzIGFuZCBkdXJpbmcgc3RhbmRhcmQgdkNQVSBkZXN0cnVjdGlvbi4gVGhpcyBtYWtlcyBzZW5zZTsgd2Ugd2FudCB0byBlbnN1cmUgYW55IHBoeXNpY2FsIElEIG1hcHBpbmdzIGFyZSBwcm9wZXJseSByZWxlYXNlZC4KClRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBgYXZpY19pbml0X3ZjcHVgIG1vcmUgY2xvc2VseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIHRoYXQgYGF2aWNfcGh5c2ljYWxfaWRfdGFibGVgLiBJJiMzOTtsbCB1c2UgYSBmaWxlIHJlYWRlciB0byBqdW1wIHRvIHRoYXQgYXJlYS4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCBhcnJheSBpcyBhbGxvY2F0ZWQsIHBvcHVsYXRlZCwgYW5kIHVzZWQgdG8gY29tcGxldGUgdGhpcyBwaWN0dXJlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSB0YWJsZSBpcyBhbGxvY2F0ZWQgYW5kIGhvdyBpdHMgZW50cmllcyBhcmUgc2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NTA6XHRcdGJvb2wgd3JpdGUgPSAoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5leGl0X2luZm9fMSBcdTAwM2VcdTAwM2UgMzIpIFx1MDAyNlxuIDg1MTpcdFx0XHQgICAgIEFWSUNfVU5BQ0NFTF9BQ0NFU1NfV1JJVEVfTUFTSztcbiA4NTI6XHRcdGJvb2wgdHJhcCA9IGlzX2F2aWNfdW5hY2NlbGVyYXRlZF9hY2Nlc3NfdHJhcChvZmZzZXQpO1xuIDg1MzpcdFxuIDg1NDpcdFx0dHJhY2Vfa3ZtX2F2aWNfdW5hY2NlbGVyYXRlZF9hY2Nlc3ModmNwdS1cdTAwM2V2Y3B1X2lkLCBvZmZzZXQsXG4gODU1Olx0XHRcdFx0XHRcdCAgICB0cmFwLCB3cml0ZSwgdmVjdG9yKTtcbiA4NTY6XHRcdGlmICh0cmFwKSB7XG4gODU3Olx0XHRcdC8qIEhhbmRsaW5nIFRyYXAgKi9cbiA4NTg6XHRcdFx0V0FSTl9PTkNFKCF3cml0ZSwgXCYjMzQ7c3ZtOiBIYW5kbGluZyB0cmFwIHJlYWQuXFxuXCYjMzQ7KTtcbiA4NTk6XHRcdFx0cmV0ID0gYXZpY191bmFjY2VsX3RyYXBfd3JpdGUodmNwdSk7XG4gODYwOlx0XHR9IGVsc2Uge1xuIDg2MTpcdFx0XHQvKiBIYW5kbGluZyBGYXVsdCAqL1xuIDg2MjpcdFx0XHRyZXQgPSBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwKTtcbiA4NjM6XHRcdH1cbiA4NjQ6XHRcbiA4NjU6XHRcdHJldHVybiByZXQ7XG4gODY2Olx0fVxuIDg2NzpcdFxuIDg2ODpcdGludCBhdmljX2luaXRfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiA4Njk6XHR7XG4gODcwOlx0XHRpbnQgcmV0O1xuIDg3MTpcdFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gXHUwMDI2c3ZtLVx1MDAzZXZjcHU7XG4gODcyOlx0XG4gODczOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCk7XG4gODc0Olx0XHRyYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3RfbG9jayk7XG4gODc1Olx0XG4gODc2Olx0XHRpZiAoIWVuYWJsZV9hcGljdiB8fCAhaXJxY2hpcF9pbl9rZXJuZWwodmNwdS1cdTAwM2Vrdm0pKVxuIDg3NzpcdFx0XHRyZXR1cm4gMDtcbiA4Nzg6XHRcbiA4Nzk6XHRcdHJldCA9IGF2aWNfaW5pdF9iYWNraW5nX3BhZ2UodmNwdSk7XG4gODgwOlx0XHRpZiAocmV0KVxuIDg4MTpcdFx0XHRyZXR1cm4gcmV0O1xuIDg4MjpcdFxuIDg4MzpcdFx0c3ZtLVx1MDAzZWRmcl9yZWcgPSBBUElDX0RGUl9GTEFUO1xuIDg4NDpcdFxuIDg4NTpcdFx0cmV0dXJuIHJldDtcbiA4ODY6XHR9XG4gODg3Olx0XG4gODg4Olx0dm9pZCBhdmljX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gODg5Olx0e1xuIDg5MDpcdFx0dTMyIG1heF9pZCA9IHgyYXZpY19lbmFibGVkID8geDJhdmljX21heF9waHlzaWNhbF9pZCA6IEFWSUNfTUFYX1BIWVNJQ0FMX0lEO1xuIDg5MTpcdFx0c3RydWN0IGt2bV9zdm0gKmt2bV9zdm0gPSB0b19rdm1fc3ZtKHZjcHUtXHUwMDNla3ZtKTtcbiA4OTI6XHRcdHUzMiBpZCA9IHZjcHUtXHUwMDNldmNwdV9pZDtcbiA4OTM6XHRcbiA4OTQ6XHRcdGlmIChrdm1fc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGUgXHUwMDI2XHUwMDI2IGlkIFx1MDAzYz0gbWF4X2lkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDUyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYGF2aWNfaW5pdF9iYWNraW5nX3BhZ2VgIGFuZCBgYXZpY19waHlzaWNhbF9pZF90YWJsZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O3doZXJlIHRoZSBoZWNrIGlzIGBhdmljX2luaXRfYmFja2luZ19wYWdlYCBkZWZpbmVkPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgdGhlIGNvbnRleHQgb2YgaXRzIGV4ZWN1dGlvbi4gS25vd2luZyB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBwaWN0dXJlIG9mIHdoYXQgaXQmIzM5O3MgdHJ5aW5nIHRvIGFjaGlldmUuIElzIGl0IGEgZnVuY3Rpb24sIGEgbWFjcm8sIHBhcnQgb2YgYSBsYXJnZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uPyBBbmQgd2hhdCBoZWFkZXIgZmlsZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBwcm9jZXNzPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgcXVpY2sgc2VhcmNoIG9mIHRoZSBjb2RlYmFzZS4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyByb3V0aW5lIGlzICpkb2luZyouIFRoZSBjcnVjaWFsIHBhcnQgaXMgZmlndXJpbmcgb3V0IHdoYXQgaXQmIzM5O3Mgd3JpdGluZyB0byBgYXZpY19waHlzaWNhbF9pZF90YWJsZWAuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3Igd3JpdGVzLCByZWFkcywgb3IgYW55IGludGVyYWN0aW9ucyB3aXRoIHRoZSB0YWJsZSB3aXRoaW4gdGhlIGZ1bmN0aW9uLiBJcyBpdCBwb3B1bGF0aW5nIGl0IGZyb20gc2NyYXRjaCwgdXBkYXRpbmcgZXhpc3RpbmcgZW50cmllcywgb3IgaW5pdGlhbGl6aW5nIGl0IHRvIHNvbWUgZGVmYXVsdCBzdGF0ZT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gV2hhdCBkYXRhIHR5cGVzIGFyZSBzdG9yZWQgaW4gYGF2aWNfcGh5c2ljYWxfaWRfdGFibGVgIGFuZCB3aGF0IGlzIHRoZWlyIHNpZ25pZmljYW5jZT8gV2hhdCBpcyB0aGUgZnVuY3Rpb24mIzM5O3MgcmVsYXRpb25zaGlwIHRvIHRoZSBvdmVyYWxsIGludGVycnVwdCBjb250cm9sbGVyIHNldHVwPyBJIG5lZWQgdG8gbWFwIGl0IG91dC4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGxvZ2ljIGFuZCBub3RlIGFueSBwb3RlbnRpYWxseSBjcnVjaWFsIHN0ZXBzLiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIGRldGVybWluZSB0aGUgcHVycG9zZSBhbmQgaW1wbGljYXRpb25zIG9mIHRoZSB3cml0ZXMgdG8gdGhpcyB0YWJsZS4gVGhpcyBpcyBsaWtlbHkgYSBjcml0aWNhbCBpbml0aWFsaXphdGlvbiBzdGVwIGZvciB0aGUgQWR2YW5jZWQgVmlydHVhbCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoQVZJQykgZnVuY3Rpb25hbGl0eSwgYW5kIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBwaHlzaWNhbCBJRHMgYXJlIG1hcHBlZCBpcyBwYXJhbW91bnQuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGV0YWlscyB3aWxsIGJlIGtleSBmb3IgZGVidWdnaW5nIGFuZCBvcHRpbWl6YXRpb24gZWZmb3J0cywgaWYgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdmljX2luaXRfYmFja2luZ19wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9hdmljLmM9Mzk4PXZvaWQgYXZpY19pbml0X3ZtY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCB2bWNiICp2bWNiKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTQxMi1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjQxMzpzdGF0aWMgaW50IGF2aWNfaW5pdF9iYWNraW5nX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDE0LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz04Njg9aW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg3OC1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjg3OTpcdHJldCA9IGF2aWNfaW5pdF9iYWNraW5nX3BhZ2UodmNwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04ODAtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTMxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IG1lbnRhbCB3YWxrdGhyb3VnaCBvZiB0aGF0IGNvZGUgc2VjdGlvbiwgZm9jdXNpbmcgb24gd2hhdCYjMzk7cyByZWxldmFudCB0byBteSBleHBlcnRpc2U6CgoqKkRpc3NlY3RpbmcgQVZJQyBJbml0aWFsaXphdGlvbiBpbiBga3ZtL3N2bS9hdmljLmNgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYGFyY2gveDg2L2t2bS9zdm0vYXZpYy5jYCBhbmQgc3BlY2lmaWNhbGx5IGxpbmVzIDQxMyB0byA0NjAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgQVZJQyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSB3aXRoaW4gdGhlIEFNRCBTVk0gY29udGV4dC4gSSBrbm93IHRoaXMgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2Ugd2l0aCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gYW5kIHdvcmtsb2FkcyB0aGF0IGFyZSBBVlgtaGVhdnksIGFuZCBpcyBhIGtleSBhcmVhIGZvciBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBvciBkZWJ1Z2dpbmcgaWYgd2Ugc2VlIHVudXN1YWwgYmVoYXZpb3IuCgpJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIHNldHVwIG9mIHRoZSBzdHJ1Y3R1cmVzIGludm9sdmVkIHdpdGggdGhlIEFkdmFuY2VkIFZpcnR1YWwgSW50ZXJydXB0IENvbnRyb2xsZXIuIFJpZ2h0LCB0aGlzIHNlY3Rpb24gbGlrZWx5IGhhbmRsZXMgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBvZiB0aGUgdmlydHVhbCBpbnRlcnJ1cHQgcmVtYXBwaW5nIHRhYmxlcyBvciBvdGhlciBkYXRhIHN0cnVjdHVyZXMgZm9yIHRoZSBndWVzdCBhbmQgdGhlIGFsbG9jYXRpb24gb2YgcmVzb3VyY2VzLiBJ4oCZbGwgYmUgbG9va2luZyBmb3Igd2hlcmUgdGhlIGNvZGUgaXMgc2V0dGluZyB1cCB0aGUgQVZJQyByZWdpc3RlcnMgaW4gdGhlIHN5c3RlbS4gSSBhbHNvIG5lZWQgdG8gdHJhY2sgdGhlIGludGVycGxheSB3aXRoIHRoZSBob3N0IGFuZCBndWVzdCYjMzk7cyBwYWdlIHRhYmxlczsgdGhhdCBpcyBvZnRlbiB3aGVyZSBidWdzIGFuZCBpc3N1ZXMgYXJpc2UgZHVyaW5nIGluaXRpYWxpemF0aW9uLgoKSSYjMzk7bSBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIGVhY2ggbGluZS4gVGhpcyBpcyBwcm9iYWJseSB3aGVyZSB0aGUgY29kZSBkZWZpbmVzIGFuZCBhbGxvY2F0ZXMgbWVtb3J5IGZvciB0aGUgQVZJQy4gSSYjMzk7bSBmb2N1c2luZyBvbiBob3cgdGhlIGludGVycnVwdC1yZWxhdGVkIG1lbW9yeSBpcyBtYXBwZWQgYW5kIHRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLCBhcyB0aGVzZSBhcmUgY3JpdGljYWwgZm9yIGVuc3VyaW5nIGVmZmljaWVudCBvcGVyYXRpb24uIEFsc28sIHdoZXRoZXIgaXQgaXMgdXNpbmcgdGhlIHN0YW5kYXJkIG1ldGhvZHMsIG9yIGhhcyBhbnkgYmVzcG9rZSBtb2RpZmljYXRpb25zLCBmb3Igc2V0dGluZyB1cCB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIuIEkgYW0gYWxzbyBjaGVja2luZyB0aGF0IHRoZXJlIGlzIG5vdCBhbnl0aGluZyByZWR1bmRhbnQuIElzIGl0IGRvaW5nIGEgZG91YmxlIGFsbG9jYXRpb24/CgpJIGFudGljaXBhdGUgZW5jb3VudGVyaW5nIHRoZSBlbmFibGluZyBvZiB0aGUgZmVhdHVyZXMsIGFuZCB3aGF0IGNoZWNrcyBhcmUgcGVyZm9ybWVkIHRvIGRldGVybWluZSBpZiB0aGUgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSBvbiB0aGUgcGh5c2ljYWwgaGFyZHdhcmUuIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBjb2RlIGhhbmRsZXMgZGlmZmVyZW50IENQVSBtb2RlbHMgb3Igc3RlcHBpbmcgcmV2aXNpb25zLiBDaGVja2luZyB0aGUgQ1BVSUQgb3V0cHV0IHJlbGF0ZWQgdG8gQVZJQyBzdXBwb3J0LCBhbmQgaWYgdGhlcmUgYXJlIGFueSBmYWxsYmFja3MgaWYgQVZJQyBpcyB1bmF2YWlsYWJsZS4KCkkgYWxzbyB3YW50IHRvIHBheSBjYXJlZnVsIGF0dGVudGlvbiB0byBhbnkgbG9ja3Mgb3Igc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCBkdXJpbmcgdGhpcyBpbml0aWFsaXphdGlvbiBwaGFzZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gcmFjZSBjb25kaXRpb25zIGR1cmluZyB0aGUgc2V0dXAgb2YgdGhlIGludGVycnVwdCByZW1hcHBpbmcgdGFibGUuIEkgbmVlZCB0byBhbHNvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGluIHRoZXNlIGxvY2sgb3BlcmF0aW9ucy4gSSB3aWxsIGFsc28gbWFrZSBzdXJlIHRvIGNoZWNrIGlmIHRoZSBjb2RlIGlzIHVzaW5nIHNwaW5sb2Nrcywgb3IgaWYgaXQgaGFzIGFueSBzb3BoaXN0aWNhdGVkIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zLgoKRmluYWxseSwgSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBkZWJ1Z2dpbmcgb3V0cHV0LCBlcnJvciBoYW5kbGluZywgb3IgYXNzZXJ0aW9ucyB3aXRoaW4gdGhpcyBzZWN0aW9uLiBHb29kIGxvZ2dpbmcgb3IgZXJyb3IgcmVwb3J0aW5nIGlzIGVzc2VudGlhbCBmb3IgdHJvdWJsZXNob290aW5nIGlzc3VlcyByZWxhdGVkIHRvIHRoZSBBVklDLCBhbmQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGluIGdlbmVyYWwuIEl0IHdpbGwgYmUgaGVscGZ1bCB0byBrbm93IGhvdyB0aGUgc3lzdGVtIHJlYWN0cyBpZiB0aGUgaGFyZHdhcmUgaXNuJiMzOTt0IHF1aXRlIHJpZ2h0LiBUaGF0IHdpbGwgYmUgZXNwZWNpYWxseSBpbXBvcnRhbnQgd2hlbiBJIGFtIHRoaW5raW5nIG9mIHRoZSBpbnRlcmFjdGlvbiBvZiBtdWx0aXBsZSBWTXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9hdmljLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQxMzpcdHN0YXRpYyBpbnQgYXZpY19pbml0X2JhY2tpbmdfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gNDE0Olx0e1xuIDQxNTpcdFx0dTMyIG1heF9pZCA9IHgyYXZpY19lbmFibGVkID8geDJhdmljX21heF9waHlzaWNhbF9pZCA6IEFWSUNfTUFYX1BIWVNJQ0FMX0lEO1xuIDQxNjpcdFx0c3RydWN0IGt2bV9zdm0gKmt2bV9zdm0gPSB0b19rdm1fc3ZtKHZjcHUtXHUwMDNla3ZtKTtcbiA0MTc6XHRcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuIDQxODpcdFx0dTMyIGlkID0gdmNwdS1cdTAwM2V2Y3B1X2lkO1xuIDQxOTpcdFx0dTY0IG5ld19lbnRyeTtcbiA0MjA6XHRcbiA0MjE6XHRcdC8qXG4gNDIyOlx0XHQgKiBJbmhpYml0IEFWSUMgaWYgdGhlIHZDUFUgSUQgaXMgYmlnZ2VyIHRoYW4gd2hhdCBpcyBzdXBwb3J0ZWQgYnkgQVZJQ1xuIDQyMzpcdFx0ICogaGFyZHdhcmUuICBJbW1lZGlhdGVseSBjbGVhciBhcGljdl9hY3RpdmUsIGkuZS4gZG9uJiMzOTt0IHdhaXQgdW50aWwgdGhlXG4gNDI0Olx0XHQgKiBLVk1fUkVRX0FQSUNWX1VQREFURSByZXF1ZXN0IGlzIHByb2Nlc3NlZCBvbiB0aGUgZmlyc3QgS1ZNX1JVTiwgYXNcbiA0MjU6XHRcdCAqIGF2aWNfdmNwdV9sb2FkKCkgZXhwZWN0cyB0byBiZSBjYWxsZWQgaWYgYW5kIG9ubHkgaWYgdGhlIHZDUFUgaGFzXG4gNDI2Olx0XHQgKiBmdWxseSBpbml0aWFsaXplZCBBVklDLlxuIDQyNzpcdFx0ICovXG4gNDI4Olx0XHRpZiAoaWQgXHUwMDNlIG1heF9pZCkge1xuIDQyOTpcdFx0XHRrdm1fc2V0X2FwaWN2X2luaGliaXQodmNwdS1cdTAwM2Vrdm0sIEFQSUNWX0lOSElCSVRfUkVBU09OX1BIWVNJQ0FMX0lEX1RPT19CSUcpO1xuIDQzMDpcdFx0XHR2Y3B1LVx1MDAzZWFyY2guYXBpYy1cdTAwM2VhcGljdl9hY3RpdmUgPSBmYWxzZTtcbiA0MzE6XHRcdFx0cmV0dXJuIDA7XG4gNDMyOlx0XHR9XG4gNDMzOlx0XG4gNDM0Olx0XHRCVUlMRF9CVUdfT04oKEFWSUNfTUFYX1BIWVNJQ0FMX0lEICYjNDM7IDEpICogc2l6ZW9mKG5ld19lbnRyeSkgXHUwMDNlIFBBR0VfU0laRSB8fFxuIDQzNTpcdFx0XHQgICAgIChYMkFWSUNfTUFYX1BIWVNJQ0FMX0lEICYjNDM7IDEpICogc2l6ZW9mKG5ld19lbnRyeSkgXHUwMDNlIFBBR0VfU0laRSk7XG4gNDM2Olx0XG4gNDM3Olx0XHRpZiAoV0FSTl9PTl9PTkNFKCF2Y3B1LVx1MDAzZWFyY2guYXBpYy1cdTAwM2VyZWdzKSlcbiA0Mzg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDM5Olx0XG4gNDQwOlx0XHRpZiAoa3ZtX2FwaWN2X2FjdGl2YXRlZCh2Y3B1LVx1MDAzZWt2bSkpIHtcbiA0NDE6XHRcdFx0aW50IHJldDtcbiA0NDI6XHRcbiA0NDM6XHRcdFx0LypcbiA0NDQ6XHRcdFx0ICogTm90ZSwgQVZJQyBoYXJkd2FyZSB3YWxrcyB0aGUgbmVzdGVkIHBhZ2UgdGFibGUgdG8gY2hlY2tcbiA0NDU6XHRcdFx0ICogcGVybWlzc2lvbnMsIGJ1dCBkb2VzIG5vdCB1c2UgdGhlIFNQQSBhZGRyZXNzIHNwZWNpZmllZCBpblxuIDQ0NjpcdFx0XHQgKiB0aGUgbGVhZiBTUFRFIHNpbmNlIGl0IHVzZXMgYWRkcmVzcyBpbiB0aGUgQVZJQ19CQUNLSU5HX1BBR0VcbiA0NDc6XHRcdFx0ICogcG9pbnRlciBmaWVsZCBvZiB0aGUgVk1DQi5cbiA0NDg6XHRcdFx0ICovXG4gNDQ5Olx0XHRcdHJldCA9IGt2bV9hbGxvY19hcGljX2FjY2Vzc19wYWdlKHZjcHUtXHUwMDNla3ZtKTtcbiA0NTA6XHRcdFx0aWYgKHJldClcbiA0NTE6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDQ1MjpcdFx0fVxuIDQ1MzpcdFxuIDQ1NDpcdFx0LyogTm90ZSwgZmxzNjQoKSByZXR1cm5zIHRoZSBiaXQgcG9zaXRpb24sICYjNDM7MS4gKi9cbiA0NTU6XHRcdEJVSUxEX0JVR19PTihfX1BIWVNJQ0FMX01BU0tfU0hJRlQgXHUwMDNlXG4gNDU2Olx0XHRcdCAgICAgZmxzNjQoQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9CQUNLSU5HX1BBR0VfTUFTSykpO1xuIDQ1NzpcdFxuIDQ1ODpcdFx0LyogU2V0dGluZyBBVklDIGJhY2tpbmcgcGFnZSBhZGRyZXNzIGluIHRoZSBwaHkgQVBJQyBJRCB0YWJsZSAqL1xuIDQ1OTpcdFx0bmV3X2VudHJ5ID0gYXZpY19nZXRfYmFja2luZ19wYWdlX2FkZHJlc3Moc3ZtKSB8XG4gNDYwOlx0XHRcdCAgICBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX1ZBTElEX01BU0s7XG4gNDYxOlx0XHRzdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF9lbnRyeSA9IG5ld19lbnRyeTtcbiA0NjI6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY5NQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIERlZXBlciBpbnRvIGBhdmljX2luaXRfYmFja2luZ19wYWdlYCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGUgcmVtYWluaW5nIGNvZGUgZm9yIGBhdmljX2luaXRfYmFja2luZ19wYWdlYC4gSSYjMzk7bSBjdXJpb3VzIHRvIHNlZSBob3cgdGhlIGJhY2tpbmcgcGFnZSBpcyBhY3R1YWxseSBpbml0aWFsaXplZC4gV2UmIzM5O3ZlIGxpa2VseSBlc3RhYmxpc2hlZCB0aGUgYmFzaWMgc3RydWN0dXJlIGFuZCBhbGxvY2F0aW9uIGFscmVhZHksIG5vdyB3ZSYjMzk7cmUgZ2V0dGluZyBkb3duIHRvIHRoZSBuaXR0eS1ncml0dHkgb2YgZGF0YSBwb3B1bGF0aW9uIG9yIHNldHVwLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgb3BlcmF0aW9ucyByZWxhdGVkIHRvIHNldHRpbmcgdXAgcGFnZSB0YWJsZXMsIHBvdGVudGlhbGx5IGRlYWxpbmcgd2l0aCB2aXJ0dWFsIGFkZHJlc3NlcyBpZiB0aGlzIGlzIGEgaHlwZXJ2aXNvciBjb250ZXh0LCBvciBtYXliZSBpbml0aWFsIG1lbW9yeSBjbGVhciBvciBpbml0aWFsaXphdGlvbiBvZiBzcGVjaWZpYyBoYXJkd2FyZS1yZWxhdGVkIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIGJhY2tpbmcgcGFnZS4gVGhlcmUgaXMgbGlrZWx5IHRvIGJlIGEgbmVlZCB0byB2YWxpZGF0ZSB0aGF0IHRoZSBiYWNraW5nIHBhZ2UgZXhpc3RzLCB0aGF0IHRoZSBtZW1vcnkgcmVnaW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIGJhY2tpbmcgcGFnZSBhcmUgdmFsaWQsIGFuZCB0byBkZXRlcm1pbmUgdGhlIHBhZ2Ugc2l6ZS4gSSYjMzk7bGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBhbnkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHVuaXQgYW5kIGhvdyBpdCBoYW5kbGVzIHRoZSB2aXJ0dWFsLXRvLXBoeXNpY2FsIGFkZHJlc3MgdHJhbnNsYXRpb24uIFRoZSBpbnRlcmFjdGlvbiB3aXRoIGFueSBoYXJkd2FyZSBzdHJ1Y3R1cmVzIG9yIG90aGVyIHJlbGF0ZWQga2VybmVsIGRhdGEgd291bGQgYWxzbyBiZSBzb21ldGhpbmcgdG8gd2F0Y2guIEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgbGV2ZWwgb2YgbG9ja2luZyBvciBzeW5jaHJvbml6YXRpb24gdG8gZW5zdXJlIHRocmVhZC1zYWZldHksIHNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIGluIHRoZSBrZXJuZWwuIEZpbmFsbHksIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgZXJyb3IgY2hlY2tpbmcgb3IgYXNzZXJ0aW9ucyB0byB2YWxpZGF0ZSB0aGUgcmVzdWx0IG9mIHRoZXNlIHNldHVwIG9wZXJhdGlvbnMuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDYwOlx0XHRcdCAgICBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX1ZBTElEX01BU0s7XG4gNDYxOlx0XHRzdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF9lbnRyeSA9IG5ld19lbnRyeTtcbiA0NjI6XHRcbiA0NjM6XHRcdC8qXG4gNDY0Olx0XHQgKiBJbml0aWFsaXplIHRoZSByZWFsIHRhYmxlLCBhcyB2Q1BVcyBtdXN0IGhhdmUgYSB2YWxpZCBlbnRyeSBpbiBvcmRlclxuIDQ2NTpcdFx0ICogZm9yIGJyb2FkY2FzdCBJUElzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseSAoYnJvYWRjYXN0IElQSXMgaWdub3JlXG4gNDY2Olx0XHQgKiBpbnZhbGlkIGVudHJpZXMsIGkuZS4gYXJlbiYjMzk7dCBndWFyYW50ZWVkIHRvIGdlbmVyYXRlIGEgVk0tRXhpdCkuXG4gNDY3Olx0XHQgKi9cbiA0Njg6XHRcdFdSSVRFX09OQ0Uoa3ZtX3N2bS1cdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlW2lkXSwgbmV3X2VudHJ5KTtcbiA0Njk6XHRcbiA0NzA6XHRcdHJldHVybiAwO1xuIDQ3MTpcdH1cbiA0NzI6XHRcbiA0NzM6XHR2b2lkIGF2aWNfcmluZ19kb29yYmVsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gNDc0Olx0e1xuIDQ3NTpcdFx0LypcbiA0NzY6XHRcdCAqIE5vdGUsIHRoZSB2Q1BVIGNvdWxkIGdldCBtaWdyYXRlZCB0byBhIGRpZmZlcmVudCBwQ1BVIGF0IGFueSBwb2ludCxcbiA0Nzc6XHRcdCAqIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBzaWduYWxsaW5nIHRoZSB3cm9uZy9wcmV2aW91cyBwQ1BVLiAgQnV0IGlmXG4gNDc4Olx0XHQgKiB0aGF0IGhhcHBlbnMgdGhlIHZDUFUgaXMgZ3VhcmFudGVlZCB0byBkbyBhIFZNUlVOIChhZnRlciBiZWluZ1xuIDQ3OTpcdFx0ICogbWlncmF0ZWQpIGFuZCB0aHVzIHdpbGwgcHJvY2VzcyBwZW5kaW5nIGludGVycnVwdHMsIGkuZS4gYSBkb29yYmVsbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDAwCgkJCQkJCQlvdXRwdXQ6IDE3MAoJCQkJCQkJdGhvdWdodHM6IDQ2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQXZpYyBQaHlzaWNhbCBJRCBUYWJsZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHJldmlld2luZyB0aGlzIHBhdGNoIHRoYXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkgd2l0aGluIHRoZSBBTUQgU1ZNIEFWSUMgaW1wbGVtZW50YXRpb24uIFRoZSBpc3N1ZSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBzdGVtcyBmcm9tIHRoZSBgYXZpY19pbml0X2JhY2tpbmdfcGFnZWAgZnVuY3Rpb24gc2V0dGluZyBhbiBlbnRyeSBpbiB0aGUgYGt2bV9zdm0tJmd0O2F2aWNfcGh5c2ljYWxfaWRfdGFibGVgIHRvIHBvaW50IHRvIGEgYmFja2luZyBwYWdlLiBDcml0aWNhbGx5LCBwcmlvciB0byB0aGlzIHBhdGNoLCB0aGVzZSBlbnRyaWVzIHdlcmVuJiMzOTt0IGJlaW5nIGNsZWFuZWQgdXAgd2hlbiBhIHZDUFUgd2FzIGVpdGhlciBkZXN0cm95ZWQgb3IgZmFpbGVkIGR1cmluZyBjcmVhdGlvbi4gVGhpcyBsZWZ0IGEgZGFuZ2xpbmcgcG9pbnRlciwgYSBzdGFsZSBlbnRyeSBpbiB0aGUgYGF2aWNfcGh5c2ljYWxfaWRfdGFibGVgLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG1lbW9yeSBjb3JydXB0aW9uIGlmIGFjY2Vzc2VkIGxhdGVyLgoKVGhlIHBhdGNoJiMzOTtzIHNvbHV0aW9uIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogSXQgaW50cm9kdWNlcyBgYXZpY192Y3B1X2ZyZWVgIHRvIHplcm8gb3V0IHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHRoZSBgYXZpY19waHlzaWNhbF9pZF90YWJsZWAgdXNpbmcgYFdSSVRFX09OQ0VgLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZW4gY2FsbGVkIGJvdGggb24gZXJyb3IgcGF0aHMgd2l0aGluIGBzdm1fdmNwdV9jcmVhdGVgICphbmQqIGR1cmluZyBgc3ZtX3ZjcHVfZnJlZWAuIEVzc2VudGlhbGx5LCB0aGV5JiMzOTtyZSBlbnN1cmluZyB0aGF0IHRoZSB0YWJsZSBpcyBhbHdheXMgY2xlYW5lZCB1cCBwcm9wZXJseSwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHZDUFUgY3JlYXRpb24gc3VjY2VlZHMgb3IgZmFpbHMuCgpOb3csIHRoZSBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGNoYW5nZSByZXF1aXJlIEtNU0FOIGFuYWx5c2lzPyBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4gRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gSXQgKnplcm9lcyogb3V0IGFuIGV4aXN0aW5nIHRhYmxlIGVudHJ5LiBEb2VzIGl0IGludm9sdmUgYW55IG5ldyBhbGxvY2F0aW9ucyBvciBwYWRkaW5nPyBOby4gVGhlIGNvcmUgb2YgdGhlIGJ1ZyBpcyBhYm91dCAqbGlmZWN5Y2xlIG1hbmFnZW1lbnQqIGFuZCBwcmV2ZW50aW5nIGEgc3RhbGUgcG9pbnRlciwgd2hpY2ggaXMgZmlybWx5IHdpdGhpbiB0aGUgS0FTQU4gZG9tYWluLgoKR2l2ZW4gdGhhdCB0aGUgcm9vdCBjYXVzZSBpcyBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCB3aGljaCBpcyBhIGNsYXNzaWMgbWVtb3J5IGNvcnJ1cHRpb24gYnVnLCBLQVNBTiBpcyB0aGUgYXBwcm9wcmlhdGUgdG9vbC4gV2UgaGF2ZSBhIHJ1bGUgdGhhdCBzdGF0ZXM6ICYjMzQ7VEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwgTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4mIzM0OyBLTVNBTiBpcyBtb3JlIHJlc291cmNlLWludGVuc2l2ZSwgYW5kIHdlIHNob3VsZCBvbmx5IHV0aWxpemUgaXQgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCAqdW5pbml0aWFsaXplZCBtZW1vcnkqIHJpc2tzIHRoYXQgS0FTQU4gd291bGRuJiMzOTt0IGNhdGNoLiBUaGlzIGlzbiYjMzk7dCB0aGUgY2FzZSBoZXJlLgoKU28sIEkmIzM5O20gY29uZmlkZW50IGluIGNhbGxpbmcgYHNldC1yZXN1bHRzYC4gVGhpcyBpcyBhIEtBU0FOLXJlbGV2YW50IGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgYXZpY192Y3B1X2ZyZWUoKWAgdG8gY2xlYXIgKGBXUklURV9PTkNFKC4uLiwgMClgKSB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBpbiBga3ZtX3N2bS1cdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlYCB3aGVuIGEgdkNQVSBpcyBmcmVlZCBvciB3aGVuIHZDUFUgY3JlYXRpb24gZmFpbHMgYWZ0ZXIgQVZJQyBpbml0aWFsaXphdGlvbi4gVGhpcyBwcmV2ZW50cyBzdGFsZS9kYW5nbGluZyByZWZlcmVuY2VzIHRvIGZyZWVkIGJhY2tpbmcgcGFnZXMgaW4gdGhlIHBoeXNpY2FsIElEIHRhYmxlLlxuXG5UaGUgY2hhbmdlcyBvbmx5IHdyaXRlIGEgemVybyB2YWx1ZSB0byBhbiBleGlzdGluZyB0YWJsZSBhbmQgZG8gbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCByZWFkIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbHRlciBib3VuZHMgY2hlY2tzIGZvciB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZS4gTWVtb3J5IGxpZmVjeWNsZS9kYW5nbGluZyBwb2ludGVyIGlzc3VlcyBpbiB0aGlzIGNvbnRleHQgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0b3JzIHJhdGhlciB0aGFuIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgYXZpY192Y3B1X2ZyZWUoKWAgdG8gY2xlYXIgKGBXUklURV9PTkNFKC4uLiwgMClgKSB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBpbiBga3ZtX3N2bS1cdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlYCB3aGVuIGEgdkNQVSBpcyBmcmVlZCBvciB3aGVuIHZDUFUgY3JlYXRpb24gZmFpbHMgYWZ0ZXIgQVZJQyBpbml0aWFsaXphdGlvbi4gVGhpcyBwcmV2ZW50cyBzdGFsZS9kYW5nbGluZyByZWZlcmVuY2VzIHRvIGZyZWVkIGJhY2tpbmcgcGFnZXMgaW4gdGhlIHBoeXNpY2FsIElEIHRhYmxlLlxuXG5UaGUgY2hhbmdlcyBvbmx5IHdyaXRlIGEgemVybyB2YWx1ZSB0byBhbiBleGlzdGluZyB0YWJsZSBhbmQgZG8gbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCByZWFkIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbHRlciBib3VuZHMgY2hlY2tzIGZvciB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZS4gTWVtb3J5IGxpZmVjeWNsZS9kYW5nbGluZyBwb2ludGVyIGlzc3VlcyBpbiB0aGlzIGNvbnRleHQgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0b3JzIHJhdGhlciB0aGFuIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1Mjo0MC4zMTM2ODkzMzNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjI1NzI3ODExOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhdmljX3ZjcHVfZnJlZVwiLFxuICAgIFwic3ZtX3ZjcHVfY3JlYXRlXCIsXG4gICAgXCJzdm1fdmNwdV9mcmVlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBhdmljX3ZjcHVfZnJlZSgpYCB0byBjbGVhciAoYFdSSVRFX09OQ0UoLi4uLCAwKWApIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIGBrdm1fc3ZtLVxcdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlYCB3aGVuIGEgdkNQVSBpcyBmcmVlZCBvciB3aGVuIHZDUFUgY3JlYXRpb24gZmFpbHMgYWZ0ZXIgQVZJQyBpbml0aWFsaXphdGlvbi4gVGhpcyBwcmV2ZW50cyBzdGFsZS9kYW5nbGluZyByZWZlcmVuY2VzIHRvIGZyZWVkIGJhY2tpbmcgcGFnZXMgaW4gdGhlIHBoeXNpY2FsIElEIHRhYmxlLlxcblxcblRoZSBjaGFuZ2VzIG9ubHkgd3JpdGUgYSB6ZXJvIHZhbHVlIHRvIGFuIGV4aXN0aW5nIHRhYmxlIGFuZCBkbyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIHJlYWQgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsdGVyIGJvdW5kcyBjaGVja3MgZm9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgb3IgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBNZW1vcnkgbGlmZWN5Y2xlL2RhbmdsaW5nIHBvaW50ZXIgaXNzdWVzIGluIHRoaXMgY29udGV4dCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9tZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RvcnMgcmF0aGVyIHRoYW4gS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhdmljX3ZjcHVfZnJlZSgpIHRvIGNsZWFyIHRoZSBwaHlzaWNhbCBBUElDIElEIHRhYmxlIGVudHJ5IG9uIFNWTSB2Q1BVIGNyZWF0aW9uIGZhaWx1cmUgYW5kIHZDUFUgdGVhcmRvd24uIFRoaXMgbW9kaWZpZXMgZXhlY3V0YWJsZSBsaWZlY3ljbGUgY29kZSBpbiBLVk0gQU1EIChTVk0pLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIGZ1enphYmxlIG9uIGFtZDY0IHZpYSBLVk0gaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1Mjo0MC4zMTM2OTQwMDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTQ0OTgwNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmN2QxOWJkNGQzNGExM2IzNjJjZGY2ODc2ZTQyNjQ5OTc3MWUzYmYyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMDY6NTI6MzggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9hdmljLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1xcbmluZGV4IDNiMDM3ZTM4NTUyMzQuLmJjMmM2OTkzODBiMzQgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9hdmljLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1xcbkBAIC04ODUsNiArODg1LDE2IEBAIGludCBhdmljX2luaXRfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rdm9pZCBhdmljX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0dTMyIG1heF9pZCA9IHgyYXZpY19lbmFibGVkID8geDJhdmljX21heF9waHlzaWNhbF9pZCA6IEFWSUNfTUFYX1BIWVNJQ0FMX0lEO1xcbitcXHRzdHJ1Y3Qga3ZtX3N2bSAqa3ZtX3N2bSA9IHRvX2t2bV9zdm0odmNwdS1cXHUwMDNla3ZtKTtcXG4rXFx0dTMyIGlkID0gdmNwdS1cXHUwMDNldmNwdV9pZDtcXG4rXFxuK1xcdGlmIChrdm1fc3ZtLVxcdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlIFxcdTAwMjZcXHUwMDI2IGlkIFxcdTAwM2M9IG1heF9pZClcXG4rXFx0XFx0V1JJVEVfT05DRShrdm1fc3ZtLVxcdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlW2lkXSwgMCk7XFxuK31cXG4rXFxuIHZvaWQgYXZpY19hcGljdl9wb3N0X3N0YXRlX3Jlc3RvcmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdGF2aWNfaGFuZGxlX2Rmcl91cGRhdGUodmNwdSk7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuaW5kZXggZWE2NDc5MzhhMmE2NS4uYzJhMmFlN2Q4ZWMzNCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xcbkBAIC0xMzM3LDcgKzEzMzcsNyBAQCBzdGF0aWMgaW50IHN2bV92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHN2bS1cXHUwMDNlbXNycG0gPSBzdm1fdmNwdV9hbGxvY19tc3JwbSgpO1xcbiBcXHRpZiAoIXN2bS1cXHUwMDNlbXNycG0pIHtcXG4gXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4tXFx0XFx0Z290byBlcnJvcl9mcmVlX3NldjtcXG4rXFx0XFx0Z290byBlcnJvcl9mcmVlX2F2aWM7XFxuIFxcdH1cXG4gXFxuIFxcdHN2bS1cXHUwMDNleDJhdmljX21zcnNfaW50ZXJjZXB0ZWQgPSB0cnVlO1xcbkBAIC0xMzUxLDYgKzEzNTEsOCBAQCBzdGF0aWMgaW50IHN2bV92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuK2Vycm9yX2ZyZWVfYXZpYzpcXG4rXFx0YXZpY192Y3B1X2ZyZWUodmNwdSk7XFxuIGVycm9yX2ZyZWVfc2V2OlxcbiBcXHRzZXZfZnJlZV92Y3B1KHZjcHUpO1xcbiBlcnJvcl9mcmVlX3ZtY2JfcGFnZTpcXG5AQCAtMTM2NSw2ICsxMzY3LDggQEAgc3RhdGljIHZvaWQgc3ZtX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBcXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdCkpO1xcbiBcXG4rXFx0YXZpY192Y3B1X2ZyZWUodmNwdSk7XFxuK1xcbiBcXHRzdm1fbGVhdmVfbmVzdGVkKHZjcHUpO1xcbiBcXHRzdm1fZnJlZV9uZXN0ZWQoc3ZtKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXFxuaW5kZXggZTk1ODk0M2I4MTYyNy4uNzkwYmQ5NmE5NzkxMCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxcbkBAIC05NTQsNiArOTU0LDcgQEAgdm9pZCBhdmljX2luaXRfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IHZtY2IgKnZtY2IpO1xcbiBpbnQgYXZpY19pbmNvbXBsZXRlX2lwaV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gaW50IGF2aWNfdW5hY2NlbGVyYXRlZF9hY2Nlc3NfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIGludCBhdmljX2luaXRfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XFxuK3ZvaWQgYXZpY192Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gdm9pZCBhdmljX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xcbiB2b2lkIGF2aWNfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gdm9pZCBhdmljX2FwaWN2X3Bvc3Rfc3RhdGVfcmVzdG9yZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1Mjo0MS45Mjk2NzYxNTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMwMTk4OTM2NzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImF2aWNfdmNwdV9mcmVlXCIsXG4gICAgXCJzdm1fdmNwdV9jcmVhdGVcIixcbiAgICBcInN2bV92Y3B1X2ZyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGF2aWNfdmNwdV9mcmVlKCkgdG8gY2xlYXIgdGhlIHBoeXNpY2FsIEFQSUMgSUQgdGFibGUgZW50cnkgb24gU1ZNIHZDUFUgY3JlYXRpb24gZmFpbHVyZSBhbmQgdkNQVSB0ZWFyZG93bi4gVGhpcyBtb2RpZmllcyBleGVjdXRhYmxlIGxpZmVjeWNsZSBjb2RlIGluIEtWTSBBTUQgKFNWTSksIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUgb24gYW1kNjQgdmlhIEtWTSBpb2N0bHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjdkMTliZDRkMzRhMTNiMzYyY2RmNjg3NmU0MjY0OTk3NzFlM2JmMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDY6NTI6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYyBiL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jXG5pbmRleCAzYjAzN2UzODU1MjM0Li5iYzJjNjk5MzgwYjM0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9hdmljLmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jXG5AQCAtODg1LDYgKzg4NSwxNiBAQCBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbit2b2lkIGF2aWNfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHR1MzIgbWF4X2lkID0geDJhdmljX2VuYWJsZWQgPyB4MmF2aWNfbWF4X3BoeXNpY2FsX2lkIDogQVZJQ19NQVhfUEhZU0lDQUxfSUQ7XG4rXHRzdHJ1Y3Qga3ZtX3N2bSAqa3ZtX3N2bSA9IHRvX2t2bV9zdm0odmNwdS1cdTAwM2Vrdm0pO1xuK1x0dTMyIGlkID0gdmNwdS1cdTAwM2V2Y3B1X2lkO1xuK1xuK1x0aWYgKGt2bV9zdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZSBcdTAwMjZcdTAwMjYgaWQgXHUwMDNjPSBtYXhfaWQpXG4rXHRcdFdSSVRFX09OQ0Uoa3ZtX3N2bS1cdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlW2lkXSwgMCk7XG4rfVxuK1xuIHZvaWQgYXZpY19hcGljdl9wb3N0X3N0YXRlX3Jlc3RvcmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdGF2aWNfaGFuZGxlX2Rmcl91cGRhdGUodmNwdSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbmluZGV4IGVhNjQ3OTM4YTJhNjUuLmMyYTJhZTdkOGVjMzQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5AQCAtMTMzNyw3ICsxMzM3LDcgQEAgc3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c3ZtLVx1MDAzZW1zcnBtID0gc3ZtX3ZjcHVfYWxsb2NfbXNycG0oKTtcbiBcdGlmICghc3ZtLVx1MDAzZW1zcnBtKSB7XG4gXHRcdGVyciA9IC1FTk9NRU07XG4tXHRcdGdvdG8gZXJyb3JfZnJlZV9zZXY7XG4rXHRcdGdvdG8gZXJyb3JfZnJlZV9hdmljO1xuIFx0fVxuIFxuIFx0c3ZtLVx1MDAzZXgyYXZpY19tc3JzX2ludGVyY2VwdGVkID0gdHJ1ZTtcbkBAIC0xMzUxLDYgKzEzNTEsOCBAQCBzdGF0aWMgaW50IHN2bV92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRyZXR1cm4gMDtcbiBcbitlcnJvcl9mcmVlX2F2aWM6XG4rXHRhdmljX3ZjcHVfZnJlZSh2Y3B1KTtcbiBlcnJvcl9mcmVlX3NldjpcbiBcdHNldl9mcmVlX3ZjcHUodmNwdSk7XG4gZXJyb3JfZnJlZV92bWNiX3BhZ2U6XG5AQCAtMTM2NSw2ICsxMzY3LDggQEAgc3RhdGljIHZvaWQgc3ZtX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3QpKTtcbiBcbitcdGF2aWNfdmNwdV9mcmVlKHZjcHUpO1xuK1xuIFx0c3ZtX2xlYXZlX25lc3RlZCh2Y3B1KTtcbiBcdHN2bV9mcmVlX25lc3RlZChzdm0pO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5pbmRleCBlOTU4OTQzYjgxNjI3Li43OTBiZDk2YTk3OTEwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuQEAgLTk1NCw2ICs5NTQsNyBAQCB2b2lkIGF2aWNfaW5pdF92bWNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qgdm1jYiAqdm1jYik7XG4gaW50IGF2aWNfaW5jb21wbGV0ZV9pcGlfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gaW50IGF2aWNfdW5hY2NlbGVyYXRlZF9hY2Nlc3NfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gaW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcbit2b2lkIGF2aWNfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBhdmljX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xuIHZvaWQgYXZpY192Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgYXZpY19hcGljdl9wb3N0X3N0YXRlX3Jlc3RvcmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjUyOjQxLjkyOTY3ODAyM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0Mjk2OTU3OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBLVk0vU1ZNIFBhdGNoKipcblxuT2theSwgc28gdGhlIGNoYW5nZSBJJ20gbG9va2luZyBhdCBzZWVtcyB0byBiZSB0b3VjaGluZyB0aGUgQU1ENjQgYXJjaGl0ZWN0dXJlIEtWTS9TVk0gY29kZS4gVGhlIGtleSBmaWxlcyBhcmUgaW4gYGFyY2gveDg2L2t2bS9zdm0vYXZpYy5jYCwgYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmNgLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgaGVhZGVyLCBgYXJjaC94ODYva3ZtL3N2bS9zdm0uaGAuIEdpdmVuIG15IGV4cGVydGlzZSwgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBhY3Qgb2YgdGhpcy5cblxuRmlyc3QsIEknbSBnb2luZyB0byBydW4gYSBgZ2l0IGdyZXBgIG9yIG1heWJlIGp1c3QgcmVhZCB0aGUgZmlsZSBkaXJlY3RseSBvbiBgYXJjaC94ODYva3ZtL3N2bS9hdmljLmNgIGFuZCBgYXJjaC94ODYva3ZtL3N2bS9zdm0uY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBxdWljayBvdmVydmlldyBvZiB3aGF0J3MgYmVlbiBtb2RpZmllZCBhbmQgd2hlcmUgdGhlIGNoYW5nZXMgYXJlIGxvY2F0ZWQgd2l0aGluIHRoZSBsYXJnZXIgY29kZWJhc2UuIEkgZXhwZWN0IHRoaXMgaW5pdGlhbCBzd2VlcCB3aWxsIHJldmVhbCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IGFmZmVjdGVkIGJ5IHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzczMSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjUyOjQ4LjM1OTM3NjI1NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzOTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9zdm0vYXZpYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg3MDpcXHRcXHRpbnQgcmV0O1xcbiA4NzE6XFx0XFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gXFx1MDAyNnN2bS1cXHUwMDNldmNwdTtcXG4gODcyOlxcdFxcbiA4NzM6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdCk7XFxuIDg3NDpcXHRcXHRyYXdfc3Bpbl9sb2NrX2luaXQoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdF9sb2NrKTtcXG4gODc1OlxcdFxcbiA4NzY6XFx0XFx0aWYgKCFlbmFibGVfYXBpY3YgfHwgIWlycWNoaXBfaW5fa2VybmVsKHZjcHUtXFx1MDAzZWt2bSkpXFxuIDg3NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gODc4OlxcdFxcbiA4Nzk6XFx0XFx0cmV0ID0gYXZpY19pbml0X2JhY2tpbmdfcGFnZSh2Y3B1KTtcXG4gODgwOlxcdFxcdGlmIChyZXQpXFxuIDg4MTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA4ODI6XFx0XFxuIDg4MzpcXHRcXHRzdm0tXFx1MDAzZWRmcl9yZWcgPSBBUElDX0RGUl9GTEFUO1xcbiA4ODQ6XFx0XFxuIDg4NTpcXHRcXHRyZXR1cm4gcmV0O1xcbiA4ODY6XFx0fVxcbiA4ODc6XFx0XFxuIDg4ODpcXHR2b2lkIGF2aWNfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gODg5OlxcdHtcXG4gODkwOlxcdFxcdHUzMiBtYXhfaWQgPSB4MmF2aWNfZW5hYmxlZCA/IHgyYXZpY19tYXhfcGh5c2ljYWxfaWQgOiBBVklDX01BWF9QSFlTSUNBTF9JRDtcXG4gODkxOlxcdFxcdHN0cnVjdCBrdm1fc3ZtICprdm1fc3ZtID0gdG9fa3ZtX3N2bSh2Y3B1LVxcdTAwM2Vrdm0pO1xcbiA4OTI6XFx0XFx0dTMyIGlkID0gdmNwdS1cXHUwMDNldmNwdV9pZDtcXG4gODkzOlxcdFxcbiA4OTQ6XFx0XFx0aWYgKGt2bV9zdm0tXFx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGUgXFx1MDAyNlxcdTAwMjYgaWQgXFx1MDAzYz0gbWF4X2lkKVxcbiA4OTU6XFx0XFx0XFx0V1JJVEVfT05DRShrdm1fc3ZtLVxcdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlW2lkXSwgMCk7XFxuIDg5NjpcXHR9XFxuIDg5NzpcXHRcXG4gODk4OlxcdHZvaWQgYXZpY19hcGljdl9wb3N0X3N0YXRlX3Jlc3RvcmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiA4OTk6XFx0e1xcbiA5MDA6XFx0XFx0YXZpY19oYW5kbGVfZGZyX3VwZGF0ZSh2Y3B1KTtcXG4gOTAxOlxcdFxcdGF2aWNfaGFuZGxlX2xkcl91cGRhdGUodmNwdSk7XFxuIDkwMjpcXHR9XFxuIDkwMzpcXHRcXG4gOTA0OlxcdHN0YXRpYyB2b2lkIHN2bV9pcl9saXN0X2RlbChzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQpXFxuIDkwNTpcXHR7XFxuIDkwNjpcXHRcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBpcnFmZC1cXHUwMDNlaXJxX2J5cGFzc192Y3B1O1xcbiA5MDc6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gOTA4OlxcdFxcbiA5MDk6XFx0XFx0aWYgKCF2Y3B1KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1Mjo0OC4zNTk0NzE3ODVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDcwNzQyMDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGlnZ2luZyBpbnRvIFNWTSBWQ1BVIExpZmVjeWNsZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgQU1EIFNlY3VyZSBWaXJ0dWFsIE1hY2hpbmUgKFNWTSkgaW1wbGVtZW50YXRpb24gd2l0aGluIEtWTS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxpZmVjeWNsZSBvZiBhIHZpcnR1YWwgQ1BVICh2Q1BVKSBpbiB0aGUgU1ZNIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB2Q1BVcyBhcmUgY3JlYXRlZCBhbmQgZGVzdHJveWVkLiBUaGF0J3MgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBvdmVyYWxsIHZpcnR1YWxpemF0aW9uIGZsb3cuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jYCBmaWxlLiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIGFyb3VuZCB0aGUgYHN2bV92Y3B1X2NyZWF0ZWAgYW5kIGBzdm1fdmNwdV9mcmVlYCBmdW5jdGlvbnMuIFRoYXQncyB3aGVyZSB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBhbmQgY2xlYW51cCBvZiBhbiBTVk0gdkNQVSB3aWxsIGJlIGhhbmRsZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmaW5lciBkZXRhaWxzIG9mIHRoZSBndWVzdCdzIGV4ZWN1dGlvbi4gSSdsbCBwcm9iYWJseSBiZSBsb29raW5nIGZvciBkYXRhIHN0cnVjdHVyZXMgYW5kIGluaXRpYWxpemF0aW9uIGNhbGxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzUzLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1Mjo1MC44MzAyMTYyOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzMjA6XFx0XFxuMTMyMTpcXHRcXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHZjcHVfc3ZtLCB2Y3B1KSAhPSAwKTtcXG4xMzIyOlxcdFxcdHN2bSA9IHRvX3N2bSh2Y3B1KTtcXG4xMzIzOlxcdFxcbjEzMjQ6XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4xMzI1OlxcdFxcdHZtY2IwMV9wYWdlID0gc25wX3NhZmVfYWxsb2NfcGFnZSgpO1xcbjEzMjY6XFx0XFx0aWYgKCF2bWNiMDFfcGFnZSlcXG4xMzI3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjEzMjg6XFx0XFxuMTMyOTpcXHRcXHRlcnIgPSBzZXZfdmNwdV9jcmVhdGUodmNwdSk7XFxuMTMzMDpcXHRcXHRpZiAoZXJyKVxcbjEzMzE6XFx0XFx0XFx0Z290byBlcnJvcl9mcmVlX3ZtY2JfcGFnZTtcXG4xMzMyOlxcdFxcbjEzMzM6XFx0XFx0ZXJyID0gYXZpY19pbml0X3ZjcHUoc3ZtKTtcXG4xMzM0OlxcdFxcdGlmIChlcnIpXFxuMTMzNTpcXHRcXHRcXHRnb3RvIGVycm9yX2ZyZWVfc2V2O1xcbjEzMzY6XFx0XFxuMTMzNzpcXHRcXHRzdm0tXFx1MDAzZW1zcnBtID0gc3ZtX3ZjcHVfYWxsb2NfbXNycG0oKTtcXG4xMzM4OlxcdFxcdGlmICghc3ZtLVxcdTAwM2Vtc3JwbSkge1xcbjEzMzk6XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4xMzQwOlxcdFxcdFxcdGdvdG8gZXJyb3JfZnJlZV9hdmljO1xcbjEzNDE6XFx0XFx0fVxcbjEzNDI6XFx0XFxuMTM0MzpcXHRcXHRzdm0tXFx1MDAzZXgyYXZpY19tc3JzX2ludGVyY2VwdGVkID0gdHJ1ZTtcXG4xMzQ0OlxcdFxcdHN2bS1cXHUwMDNlbGJyX21zcnNfaW50ZXJjZXB0ZWQgPSB0cnVlO1xcbjEzNDU6XFx0XFxuMTM0NjpcXHRcXHRzdm0tXFx1MDAzZXZtY2IwMS5wdHIgPSBwYWdlX2FkZHJlc3Modm1jYjAxX3BhZ2UpO1xcbjEzNDc6XFx0XFx0c3ZtLVxcdTAwM2V2bWNiMDEucGEgPSBfX3NtZV9zZXQocGFnZV90b19wZm4odm1jYjAxX3BhZ2UpIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpO1xcbjEzNDg6XFx0XFx0c3ZtX3N3aXRjaF92bWNiKHN2bSwgXFx1MDAyNnN2bS1cXHUwMDNldm1jYjAxKTtcXG4xMzQ5OlxcdFxcbjEzNTA6XFx0XFx0c3ZtLVxcdTAwM2VndWVzdF9zdGF0ZV9sb2FkZWQgPSBmYWxzZTtcXG4xMzUxOlxcdFxcbjEzNTI6XFx0XFx0cmV0dXJuIDA7XFxuMTM1MzpcXHRcXG4xMzU0OlxcdGVycm9yX2ZyZWVfYXZpYzpcXG4xMzU1OlxcdFxcdGF2aWNfdmNwdV9mcmVlKHZjcHUpO1xcbjEzNTY6XFx0ZXJyb3JfZnJlZV9zZXY6XFxuMTM1NzpcXHRcXHRzZXZfZnJlZV92Y3B1KHZjcHUpO1xcbjEzNTg6XFx0ZXJyb3JfZnJlZV92bWNiX3BhZ2U6XFxuMTM1OTpcXHRcXHRfX2ZyZWVfcGFnZSh2bWNiMDFfcGFnZSk7XFxuMTM2MDpcXHRvdXQ6XFxuMTM2MTpcXHRcXHRyZXR1cm4gZXJyO1xcbjEzNjI6XFx0fVxcbjEzNjM6XFx0XFxuMTM2NDpcXHRzdGF0aWMgdm9pZCBzdm1fdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4xMzY1OlxcdHtcXG4xMzY2OlxcdFxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbjEzNjc6XFx0XFxuMTM2ODpcXHRcXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdCkpO1xcbjEzNjk6XFx0XFxuMTM3MDpcXHRcXHRhdmljX3ZjcHVfZnJlZSh2Y3B1KTtcXG4xMzcxOlxcdFxcbjEzNzI6XFx0XFx0c3ZtX2xlYXZlX25lc3RlZCh2Y3B1KTtcXG4xMzczOlxcdFxcdHN2bV9mcmVlX25lc3RlZChzdm0pO1xcbjEzNzQ6XFx0XFxuMTM3NTpcXHRcXHRzZXZfZnJlZV92Y3B1KHZjcHUpO1xcbjEzNzY6XFx0XFxuMTM3NzpcXHRcXHRfX2ZyZWVfcGFnZShfX3NtZV9wYV90b19wYWdlKHN2bS1cXHUwMDNldm1jYjAxLnBhKSk7XFxuMTM3ODpcXHRcXHRzdm1fdmNwdV9mcmVlX21zcnBtKHN2bS1cXHUwMDNlbXNycG0pO1xcbjEzNzk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1Mjo1MC44MzA0MjM3NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5ODg2NDUxMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS1ZNIFNWTSBhbmQgRnV6emluZyAtIEEgUXVpY2sgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBkZWx2ZXMgaW50byB0aGUgS1ZNIEFNRCBTVk0gY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGFyY2gveDg2L2t2bS9zdm0vYCBkaXJlY3RvcnkuIFRoYXQgaW1tZWRpYXRlbHkgc2NyZWFtcyB2aXJ0dWFsaXphdGlvbiwgYW5kIGZvciB4ODYgTGludXgsIEtWTSBpcyB0aGUgZ28tdG8gY29yZSBzdWJzeXN0ZW0uIEkga25vdyBpdCdzICpldmVyeXdoZXJlKiBvbiBBTUQgaGFyZHdhcmUsIGFuZCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc2NlbmFyaW9zIG9yIHJ1bm5pbmcgUUVNVSB3aXRoIEtWTS9TVk0gYXJlIGluY3JlZGlibHkgY29tbW9uLiBBbmQgb2YgY291cnNlLCB0aGF0IG1lYW5zIGl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcsIGFuZCBhIHdlbGwtdW5kZXJzdG9vZCB0YXJnZXQgYXQgdGhhdC4gU3l6a2FsbGVyJ3MgS1ZNIGlvY3RsIHN1cHBvcnQg4oCTIGBLVk1fQ1JFQVRFX1ZNYCwgYEtWTV9DUkVBVEVfVkNQVWAsIHRoZSB3aG9sZSBzdWl0ZSDigJMgaXMgZXhjZWxsZW50LlxuXG5UaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgY2FuIHdlIGFjdHVhbGx5IGZ1enogS1ZNIFNWTSBlZmZlY3RpdmVseSB0aHJvdWdoIFFFTVUgYW5kIHN5emthbGxlcj8gVGhlIGFuc3dlciwgdGhhbmtmdWxseSwgaXMgKnllcyouIEknbSBjb25maWRlbnQgc3l6a2FsbGVyIGhhcyBLVk0gd2VsbC1jb3ZlcmVkLCBmdXp6aW5nIGV4dGVuc2l2ZWx5IHRocm91Z2ggYC9kZXYva3ZtYC4gVGhhdCdzIHRoZSBrZXkuIE5vdywgYmVmb3JlIEkgZ28gZGVlcGVyIEkgd2lsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgS2NvbmZpZyBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCBLVk0gU1ZNLiBUaGF0J2xsIGdpdmUgbWUgYSBiYXNlbGluZSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBzcGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkyMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjUyOjUzLjgxOTA3MDkzNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzczOTg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0FNRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTM0PWNvbmZpZyBLVk1fSU5URUxfVERYXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1Mjo1My44NjY4MTQ4ODVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTk1NzkyODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgY29kZTpcblxuKipEaXZpbmcgaW50byBLVk0gQ29uZmlndXJhdGlvbiBmb3IgQU1EKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUga2VybmVsIGNvbmZpZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBLVk0gQU1EIHN1cHBvcnQgaXMgc3RydWN0dXJlZCwgc28gbGV0J3MganVtcCBzdHJhaWdodCBpbnRvIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIFNwZWNpZmljYWxseSwgSSdtIGZvY3VzaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJvdW5kIGBjb25maWcgS1ZNX0FNRGAuIFRoaXMgaXMgdGhlIHVzdWFsIHN0YXJ0aW5nIHBvaW50LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIG9wdGlvbiB0aWVzIGludG8gdGhlIHJlc3Qgb2YgdGhlIEtWTSBpbmZyYXN0cnVjdHVyZSBvbiB4ODYsIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5LCBhbmQgd2hhdCBzcGVjaWZpYyBmZWF0dXJlcyBhcmUgY29uZGl0aW9uYWxseSBlbmFibGVkIGJhc2VkIG9uIHdoZXRoZXIgYEtWTV9BTURgIGlzIGRlZmluZWQuIEFyZSB0aGVyZSBkaWZmZXJlbnQgZmVhdHVyZSBzZXRzIGJhc2VkIG9uIHRoZSBBTUQgcHJvY2Vzc29yPyBBcmUgdGhlcmUgYW55IHJlbGF0ZWQgZGVidWdnaW5nIG9wdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEknbSBhbnRpY2lwYXRpbmcgZmluZGluZyB0aGUgQU1ELXNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzIGV4cG9zZWQgdG8gdGhlIGh5cGVydmlzb3IsIGFueSBxdWlya3MsIGFuZCBob3cgdGhvc2UgYXJlIG1hbmFnZWQgd2l0aGluIHRoZSBLY29uZmlnIHN5c3RlbS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgbGF5IG9mIHRoZSBsYW5kIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NTUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1Mjo1Ni4wNjI2MDk2OTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdFxcdGhlbHBcXG4gMTQxOlxcdFxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgbGF1bmNoaW5nIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpXFxuIDE0MjpcXHRcXHQgIGNvbmZpZGVudGlhbCBWTXMgb24gSW50ZWwgcHJvY2Vzc29ycy5cXG4gMTQzOlxcdFxcbiAxNDQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxNDU6XFx0XFxuIDE0NjpcXHRjb25maWcgS1ZNX0FNRFxcbiAxNDc6XFx0XFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4gMTQ4OlxcdFxcdGRlcGVuZHMgb24gS1ZNIFxcdTAwMjZcXHUwMDI2IChDUFVfU1VQX0FNRCB8fCBDUFVfU1VQX0hZR09OKVxcbiAxNDk6XFx0XFx0aGVscFxcbiAxNTA6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gQU1EIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCB0aGUgQU1ELVZcXG4gMTUxOlxcdFxcdCAgKFNWTSkgZXh0ZW5zaW9ucy5cXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTU0OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWFtZC5cXG4gMTU1OlxcdFxcbiAxNTY6XFx0Y29uZmlnIEtWTV9BTURfU0VWXFxuIDE1NzpcXHRcXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbiAxNTg6XFx0XFx0ZGVmYXVsdCB5XFxuIDE1OTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9BTUQgXFx1MDAyNlxcdTAwMjYgWDg2XzY0XFxuIDE2MDpcXHRcXHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfUFNQIFxcdTAwMjZcXHUwMDI2ICEoS1ZNX0FNRD15IFxcdTAwMjZcXHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pXFxuIDE2MTpcXHRcXHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cXG4gMTYyOlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAxNjM6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9DT05WRVJUXFxuIDE2NDpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1JFQ0xBSU1cXG4gMTY1OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbiAxNjY6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxcbiAxNjc6XFx0XFx0aGVscFxcbiAxNjg6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgZW5jcnlwdGVkIFZNcyB3aGljaCB1c2UgU2VjdXJlXFxuIDE2OTpcXHRcXHQgIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSwgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjUyOjU2LjA2MjY3OTI3NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzkzMzY1MjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0tQU1EIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHBvaW50cyB0byBgS1ZNX0FNRGAgaGF2aW5nIGRlcGVuZGVuY2llcy4gU3BlY2lmaWNhbGx5LCBpdCBuZWVkcyBgS1ZNYCwgYW5kIGl0IHJlcXVpcmVzIGVpdGhlciBgQ1BVX1NVUF9BTURgIG9yIGBDUFVfU1VQX0hZR09OYCB0byBiZSBwcmVzZW50LiBUaGF0IG1ha2VzIHNlbnNlLCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhcmNoaXRlY3R1cmUuIE5vdywgdG8gY29uZmlybSB0aGlzLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IE1ha2VmaWxlLiBMZXQncyBuYXZpZ2F0ZSB0byBgYXJjaC94ODYva3ZtL3N2bS9NYWtlZmlsZWAgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gaGFzIHRvIHNheS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMyOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTI6NTcuODU2MDQ2NjgxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MjMwLCJFcnJvciI6InRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3N2bS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJ0aGUgZmlsZSBkb2VzIG5vdCBleGlzdFwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1Mjo1Ny44NTYxMTY4MjFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA3ODg4NDI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0geDg2IE1ha2VmaWxlKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYSBjcnVjaWFsIGZpbGU6IGBhcmNoL3g4Ni9rdm0vTWFrZWZpbGVgLiBJJ20gZ3Vlc3NpbmcgdGhhdCB3aGF0ZXZlciBJJ20gdHJvdWJsZXNob290aW5nLCBvciB3aGF0ZXZlciBlbmhhbmNlbWVudCBJJ20gd29ya2luZyBvbiwgbGlrZWx5IGhhcyBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIGNvcmUgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIEtWTSB4ODYgbW9kdWxlLiBUaGlzIE1ha2VmaWxlIGlzIHdoZXJlIGEgbG90IG9mIHRoZSBtYWdpYyBoYXBwZW5zIOKAkyBkZXBlbmRlbmNpZXMgYXJlIGRlZmluZWQsIGNvbXBpbGF0aW9uIHRhcmdldHMgYXJlIHNldCB1cCwgYW5kIHVsdGltYXRlbHksIHRoZSBLVk0ga2VybmVsIG1vZHVsZSBmb3IgdGhlIHg4NiBhcmNoaXRlY3R1cmUgZ2V0cyBidWlsdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmaWxlJ3MgbG9naWMgdG8gc2VlIHdoZXJlIG15IGNoYW5nZXMgZml0IGluIG9yIHdoZXJlIHRoZSBwcm9ibGVtIGxpZXMuIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NTYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjUyOjU5LjkzNTAwMzQ1M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxODE0ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3ZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDYyMjAgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZT0yMj1rdm0taW50ZWwtJChDT05GSUdfS1ZNX0lOVEVMX1REWClcXHQrPSB2bXgvdGR4Lm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMjMtXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjI0Omt2bS1hbWQteVxcdFxcdCs9IHN2bS9zdm0ubyBzdm0vdm1lbnRlci5vIHN2bS9wbXUubyBzdm0vbmVzdGVkLm8gc3ZtL2F2aWMub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0yNS1cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MjY6a3ZtLWFtZC0kKENPTkZJR19LVk1fQU1EX1NFVilcXHQrPSBzdm0vc2V2Lm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6Mjc6a3ZtLWFtZC0kKENPTkZJR19LVk1fSFlQRVJWKVxcdCs9IHN2bS9oeXBlcnYub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0yOC1cXG4tLVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZT0zMT1rdm0taW50ZWwteVxcdFxcdCs9IHZteC92bXhfb25oeXBlcnYubyB2bXgvaHlwZXJ2X2V2bWNzLm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MzI6a3ZtLWFtZC15XFx0XFx0Kz0gc3ZtL3N2bV9vbmh5cGVydi5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTMzLWVuZGlmXFxuLS1cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU9Mzc9b2JqLSQoQ09ORklHX0tWTV9BTUQpXFx0Kz0ga3ZtLWFtZC5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTM4LVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZTozOTpBRkxBR1Nfc3ZtL3ZtZW50ZXIubyAgICA6PSAtaXF1b3RlICQob2JqKVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZTo0MDokKG9iaikvc3ZtL3ZtZW50ZXIubzogJChvYmopL2t2bS1hc20tb2Zmc2V0cy5oXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTQxLVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0zODYzPXN0YXRpYyBpbnQgY2hlY2tfZHJfd3JpdGUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM4ODktXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzozODkwOnN0YXRpYyBpbnQgY2hlY2tfc3ZtZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM4OTEte1xcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zOTAxLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MzkwMjpzdGF0aWMgaW50IGNoZWNrX3N2bWVfcGEoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zOTAzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzkwOC1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjM5MDk6XFx0cmV0dXJuIGNoZWNrX3N2bWUoY3R4dCk7XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zOTEwLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9NDAxND1zdGF0aWMgY29uc3Qgc3RydWN0IG9wY29kZSBncm91cDdfcm0zW10gPSB7XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo0MDE1OlxcdERJUChTcmNOb25lIHwgUHJvdCB8IFByaXYsXFx0XFx0dm1ydW4sXFx0XFx0Y2hlY2tfc3ZtZV9wYSksXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00MDE2LVxcdElJKFNyY05vbmUgIHwgUHJvdCB8IEVtdWxhdGVPblVELFxcdGVtX2h5cGVyY2FsbCxcXHR2bW1jYWxsKSxcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjQwMTc6XFx0RElQKFNyY05vbmUgfCBQcm90IHwgUHJpdixcXHRcXHR2bWxvYWQsXFx0XFx0Y2hlY2tfc3ZtZV9wYSksXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo0MDE4OlxcdERJUChTcmNOb25lIHwgUHJvdCB8IFByaXYsXFx0XFx0dm1zYXZlLFxcdFxcdGNoZWNrX3N2bWVfcGEpLFxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NDAxOTpcXHRESVAoU3JjTm9uZSB8IFByb3QgfCBQcml2LFxcdFxcdHN0Z2ksXFx0XFx0Y2hlY2tfc3ZtZSksXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo0MDIwOlxcdERJUChTcmNOb25lIHwgUHJvdCB8IFByaXYsXFx0XFx0Y2xnaSxcXHRcXHRjaGVja19zdm1lKSxcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjQwMjE6XFx0RElQKFNyY05vbmUgfCBQcm90IHwgUHJpdixcXHRcXHRza2luaXQsXFx0XFx0Y2hlY2tfc3ZtZSksXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo0MDIyOlxcdERJUChTcmNOb25lIHwgUHJvdCB8IFByaXYsXFx0XFx0aW52bHBnYSxcXHRjaGVja19zdm1lKSxcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTQwMjMtfTtcXG4tLVxcbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYy0xMC0jaW5jbHVkZSBcXFwidm14L3ZteC5oXFxcIlxcbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYzoxMTojaW5jbHVkZSBcXFwic3ZtL3N2bS5oXFxcIlxcbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYy0xMi1cXG5hcmNoL3g4Ni9rdm0va3ZtLWFzbS1vZmZzZXRzLmM9MTM9c3RhdGljIHZvaWQgX191c2VkIGNvbW1vbih2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jLTE2LVxcdFxcdEJMQU5LKCk7XFxuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jOjE3OlxcdFxcdE9GRlNFVChTVk1fdmNwdV9hcmNoX3JlZ3MsIHZjcHVfc3ZtLCB2Y3B1LmFyY2gucmVncyk7XFxuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jOjE4OlxcdFxcdE9GRlNFVChTVk1fY3VycmVudF92bWNiLCB2Y3B1X3N2bSwgY3VycmVudF92bWNiKTtcXG5hcmNoL3g4Ni9rdm0va3ZtLWFzbS1vZmZzZXRzLmM6MTk6XFx0XFx0T0ZGU0VUKFNWTV9zcGVjX2N0cmwsIHZjcHVfc3ZtLCBzcGVjX2N0cmwpO1xcbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYzoyMDpcXHRcXHRPRkZTRVQoU1ZNX3ZtY2IwMSwgdmNwdV9zdm0sIHZtY2IwMSk7XFxuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jLTIxLVxcdFxcdE9GRlNFVChLVk1fVk1DQl9wYSwga3ZtX3ZtY2JfaW5mbywgcGEpO1xcbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYzoyMjpcXHRcXHRPRkZTRVQoU0Rfc2F2ZV9hcmVhX3BhLCBzdm1fY3B1X2RhdGEsIHNhdmVfYXJlYV9wYSk7XFxuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jLTIzLVxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTgtI2luY2x1ZGUgXFx1MDAzY2FzbS9zcGVjLWN0cmwuaFxcdTAwM2VcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5OiNpbmNsdWRlIFxcdTAwM2Nhc20vc3ZtLmhcXHUwMDNlXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MC0jaW5jbHVkZSBcXHUwMDNjYXNtL3ZteC5oXFx1MDAzZVxcbi0tXFxuYXJjaC94ODYva3ZtL3JlZ3MuaD0zMTM9c3RhdGljIGlubGluZSB1NjQga3ZtX3BkcHRyX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgaW5kZXgpXFxuYXJjaC94ODYva3ZtL3JlZ3MuaC0zMTQte1xcbmFyY2gveDg2L2t2bS9yZWdzLmg6MzE1OlxcdG1pZ2h0X3NsZWVwKCk7ICAvKiBvbiBzdm0gKi9cXG5hcmNoL3g4Ni9rdm0vcmVncy5oLTMxNi1cXG4tLVxcbmFyY2gveDg2L2t2bS9zbW0uYz0xOD1zdGF0aWMgdm9pZCBjaGVja19zbXJhbV9vZmZzZXRzKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc21tLmMtODItXFx0Q0hFQ0tfU01SQU02NF9PRkZTRVQoZWZlcixcXHRcXHRcXHQweEZFRDApO1xcbmFyY2gveDg2L2t2bS9zbW0uYzo4MzpcXHRDSEVDS19TTVJBTTY0X09GRlNFVChzdm1fZ3Vlc3RfZmxhZyxcXHRcXHQweEZFRDgpO1xcbmFyY2gveDg2L2t2bS9zbW0uYzo4NDpcXHRDSEVDS19TTVJBTTY0X09GRlNFVChzdm1fZ3Vlc3Rfdm1jYl9ncGEsXFx0MHhGRUUwKTtcXG5hcmNoL3g4Ni9rdm0vc21tLmM6ODU6XFx0Q0hFQ0tfU01SQU02NF9PRkZTRVQoc3ZtX2d1ZXN0X3ZpcnR1YWxfaW50LFxcdDB4RkVFOCk7XFxuYXJjaC94ODYva3ZtL3NtbS5jLTg2LVxcdENIRUNLX1NNUkFNNjRfT0ZGU0VUKHJlc2VydmVkMyxcXHRcXHRcXHQweEZFRjApO1xcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5jLTkwLVxcdENIRUNLX1NNUkFNNjRfT0ZGU0VUKHNzcCxcXHRcXHRcXHQweEZGMTgpO1xcbmFyY2gveDg2L2t2bS9zbW0uYzo5MTpcXHRDSEVDS19TTVJBTTY0X09GRlNFVChzdm1fZ3Vlc3RfcGF0LFxcdFxcdDB4RkYyMCk7XFxuYXJjaC94ODYva3ZtL3NtbS5jOjkyOlxcdENIRUNLX1NNUkFNNjRfT0ZGU0VUKHN2bV9ob3N0X2VmZXIsXFx0XFx0MHhGRjI4KTtcXG5hcmNoL3g4Ni9rdm0vc21tLmM6OTM6XFx0Q0hFQ0tfU01SQU02NF9PRkZTRVQoc3ZtX2hvc3RfY3I0LFxcdFxcdDB4RkYzMCk7XFxuYXJjaC94ODYva3ZtL3NtbS5jOjk0OlxcdENIRUNLX1NNUkFNNjRfT0ZGU0VUKHN2bV9ob3N0X2NyMyxcXHRcXHQweEZGMzgpO1xcbmFyY2gveDg2L2t2bS9zbW0uYzo5NTpcXHRDSEVDS19TTVJBTTY0X09GRlNFVChzdm1faG9zdF9jcjAsXFx0XFx0MHhGRjQwKTtcXG5hcmNoL3g4Ni9rdm0vc21tLmMtOTYtXFx0Q0hFQ0tfU01SQU02NF9PRkZTRVQoY3I0LFxcdFxcdFxcdDB4RkY0OCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc21tLmg9Nzg9c3RydWN0IGt2bV9zbXJhbV9zdGF0ZV82NCB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc21tLmgtMTA5LVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zbW0uaDoxMTA6XFx0dTY0IHN2bV9ndWVzdF9mbGFnO1xcbmFyY2gveDg2L2t2bS9zbW0uaDoxMTE6XFx0dTY0IHN2bV9ndWVzdF92bWNiX2dwYTtcXG5hcmNoL3g4Ni9rdm0vc21tLmg6MTEyOlxcdHU2NCBzdm1fZ3Vlc3RfdmlydHVhbF9pbnQ7IC8qIHVua25vd24gcHVycG9zZSwgbm90IGltcGxlbWVudGVkICovXFxuYXJjaC94ODYva3ZtL3NtbS5oLTExMy1cXG4tLVxcbmFyY2gveDg2L2t2bS9zbW0uaC0xMTktXFx0dTY0IHNzcDtcXG5hcmNoL3g4Ni9rdm0vc21tLmg6MTIwOlxcdC8qIHN2bV8qIGZpZWxkcyBiZWxvdyBhcmUgbm90IGltcGxlbWVudGVkIGJ5IEtWTSAqL1xcbmFyY2gveDg2L2t2bS9zbW0uaDoxMjE6XFx0dTY0IHN2bV9ndWVzdF9wYXQ7XFxuYXJjaC94ODYva3ZtL3NtbS5oOjEyMjpcXHR1NjQgc3ZtX2hvc3RfZWZlcjtcXG5hcmNoL3g4Ni9rdm0vc21tLmg6MTIzOlxcdHU2NCBzdm1faG9zdF9jcjQ7XFxuYXJjaC94ODYva3ZtL3NtbS5oOjEyNDpcXHR1NjQgc3ZtX2hvc3RfY3IzO1xcbmFyY2gveDg2L2t2bS9zbW0uaDoxMjU6XFx0dTY0IHN2bV9ob3N0X2NyMDtcXG5hcmNoL3g4Ni9rdm0vc21tLmgtMTI2LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzAtI2luY2x1ZGUgXFxcImlycS5oXFxcIlxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjMxOiNpbmNsdWRlIFxcXCJzdm0uaFxcXCJcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zMi1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTEwNz1tb2R1bGVfcGFyYW1fdW5zYWZlKGZvcmNlX2F2aWMsIGJvb2wsIDA0NDQpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTA5LS8qIE5vdGU6XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTEwOiAqIFRoaXMgaGFzaCB0YWJsZSBpcyB1c2VkIHRvIG1hcCBWTV9JRCB0byBhIHN0cnVjdCBrdm1fc3ZtLFxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTExMS0gKiB3aGVuIGhhbmRsaW5nIEFNRCBJT01NVSBHQUxPRyBub3RpZmljYXRpb24gdG8gc2NoZWR1bGUgaW5cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTExNC0jZGVmaW5lIFNWTV9WTV9EQVRBX0hBU0hfQklUU1xcdDhcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMTU6c3RhdGljIERFRklORV9IQVNIVEFCTEUoc3ZtX3ZtX2RhdGFfaGFzaCwgU1ZNX1ZNX0RBVEFfSEFTSF9CSVRTKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMTYtc3RhdGljIHUzMiBuZXh0X3ZtX2lkID0gMDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0xMTc9c3RhdGljIGJvb2wgbmV4dF92bV9pZF93cmFwcGVkID0gMDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMTg6c3RhdGljIERFRklORV9TUElOTE9DSyhzdm1fdm1fZGF0YV9oYXNoX2xvY2spO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTExOS1zdGF0aWMgYm9vbCB4MmF2aWNfZW5hYmxlZDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0xMjA9c3RhdGljIHUzMiB4MmF2aWNfbWF4X3BoeXNpY2FsX2lkO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEyMS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMjI6c3RhdGljIHZvaWQgYXZpY19zZXRfeDJhcGljX21zcl9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTIzLVxcdFxcdFxcdFxcdFxcdCAgICAgYm9vbCBpbnRlcmNlcHQpXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTI0LXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMjU6XFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gXFx1MDAyNnN2bS1cXHUwMDNldmNwdTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMjYtXFx0dTY0IHJkX3JlZ3M7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMjgtXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTI5OlxcdGlmIChpbnRlcmNlcHQgPT0gc3ZtLVxcdTAwM2V4MmF2aWNfbXNyc19pbnRlcmNlcHRlZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMzAtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTM3LVxcdGZvcl9lYWNoX3NldF9iaXQoaSwgKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2cmRfcmVncywgQklUU19QRVJfVFlQRShyZF9yZWdzKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMzg6XFx0XFx0c3ZtX3NldF9pbnRlcmNlcHRfZm9yX21zcih2Y3B1LCBBUElDX0JBU0VfTVNSICsgaSxcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMzktXFx0XFx0XFx0XFx0XFx0ICBNU1JfVFlQRV9SLCBpbnRlcmNlcHQpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTE0MC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxNDE6XFx0c3ZtX3NldF9pbnRlcmNlcHRfZm9yX21zcih2Y3B1LCBYMkFQSUNfTVNSKEFQSUNfVEFTS1BSSSksIE1TUl9UWVBFX1csIGludGVyY2VwdCk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTQyOlxcdHN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgWDJBUElDX01TUihBUElDX0VPSSksIE1TUl9UWVBFX1csIGludGVyY2VwdCk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTQzOlxcdHN2bV9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgWDJBUElDX01TUihBUElDX1NFTEZfSVBJKSwgTVNSX1RZUEVfVywgaW50ZXJjZXB0KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxNDQ6XFx0c3ZtX3NldF9pbnRlcmNlcHRfZm9yX21zcih2Y3B1LCBYMkFQSUNfTVNSKEFQSUNfSUNSKSwgTVNSX1RZUEVfVywgaW50ZXJjZXB0KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xNDUtXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTQ2OlxcdHN2bS1cXHUwMDNleDJhdmljX21zcnNfaW50ZXJjZXB0ZWQgPSBpbnRlcmNlcHQ7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTQ3LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTE2OT1zdGF0aWMgdTMyIGF2aWNfZ2V0X21heF9waHlzaWNhbF9pZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xNzMtXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTc0OnN0YXRpYyB2b2lkIGF2aWNfYWN0aXZhdGVfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xNzUte1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjE3NjpcXHRzdHJ1Y3Qgdm1jYiAqdm1jYiA9IHN2bS1cXHUwMDNldm1jYjAxLnB0cjtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxNzc6XFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gXFx1MDAyNnN2bS1cXHUwMDNldmNwdTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xNzgtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xODMtXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTg0OlxcdHN2bV9jbHJfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX0NSOF9XUklURSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTg1LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjEyLVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjIxMzpcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNIX0NVUlJFTlQsIFxcdTAwMjZzdm0tXFx1MDAzZXZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTIxNC1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTIyMS1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyMjI6XFx0aWYgKHgyYXZpY19lbmFibGVkIFxcdTAwMjZcXHUwMDI2IGFwaWNfeDJhcGljX21vZGUoc3ZtLVxcdTAwM2V2Y3B1LmFyY2guYXBpYykpIHtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yMjMtXFx0XFx0dm1jYi1cXHUwMDNlY29udHJvbC5pbnRfY3RsIHw9IFgyQVBJQ19NT0RFX01BU0s7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yMjUtXFx0XFx0LyogRGlzYWJsaW5nIE1TUiBpbnRlcmNlcHQgZm9yIHgyQVBJQyByZWdpc3RlcnMgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyMjY6XFx0XFx0YXZpY19zZXRfeDJhcGljX21zcl9pbnRlcmNlcHRpb24oc3ZtLCBmYWxzZSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjI3LVxcdH0gZWxzZSB7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjI4LVxcdFxcdC8qIEVuYWJsaW5nIE1TUiBpbnRlcmNlcHQgZm9yIHgyQVBJQyByZWdpc3RlcnMgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyMjk6XFx0XFx0YXZpY19zZXRfeDJhcGljX21zcl9pbnRlcmNlcHRpb24oc3ZtLCB0cnVlKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yMzAtXFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjMyLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjIzMzpzdGF0aWMgdm9pZCBhdmljX2RlYWN0aXZhdGVfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yMzQte1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjIzNTpcXHRzdHJ1Y3Qgdm1jYiAqdm1jYiA9IHN2bS1cXHUwMDNldm1jYjAxLnB0cjtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yMzYtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yMzktXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MjQwOlxcdGlmICghaXNfc2V2X2VzX2d1ZXN0KFxcdTAwMjZzdm0tXFx1MDAzZXZjcHUpKVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjI0MTpcXHRcXHRzdm1fc2V0X2ludGVyY2VwdChzdm0sIElOVEVSQ0VQVF9DUjhfV1JJVEUpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI0Mi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0yNDMtXFx0LyogRW5hYmxpbmcgTVNSIGludGVyY2VwdCBmb3IgeDJBUElDIHJlZ2lzdGVycyAqL1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjI0NDpcXHRhdmljX3NldF94MmFwaWNfbXNyX2ludGVyY2VwdGlvbihzdm0sIHRydWUpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI0NS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0yNTE9c3RhdGljIGludCBhdmljX2dhX2xvZ19ub3RpZmllcih1MzIgZ2FfdGFnKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjUzLVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MjU0OlxcdHN0cnVjdCBrdm1fc3ZtICprdm1fc3ZtO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI1NS1cXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBOVUxMO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjYxLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjI2MjpcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c3ZtX3ZtX2RhdGFfaGFzaF9sb2NrLCBmbGFncyk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MjYzOlxcdGhhc2hfZm9yX2VhY2hfcG9zc2libGUoc3ZtX3ZtX2RhdGFfaGFzaCwga3ZtX3N2bSwgaG5vZGUsIHZtX2lkKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MjY0OlxcdFxcdGlmIChrdm1fc3ZtLVxcdTAwM2VhdmljX3ZtX2lkICE9IHZtX2lkKVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI2NS1cXHRcXHRcXHRjb250aW51ZTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyNjY6XFx0XFx0dmNwdSA9IGt2bV9nZXRfdmNwdShcXHUwMDI2a3ZtX3N2bS1cXHUwMDNla3ZtLCB2Y3B1X2lkeCk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjY3LVxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI2OC1cXHR9XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MjY5OlxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnN2bV92bV9kYXRhX2hhc2hfbG9jaywgZmxhZ3MpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI3MC1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTI4OD1zdGF0aWMgaW50IGF2aWNfYWxsb2NfcGh5c2ljYWxfaWRfdGFibGUoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI4OS17XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MjkwOlxcdHN0cnVjdCBrdm1fc3ZtICprdm1fc3ZtID0gdG9fa3ZtX3N2bShrdm0pO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI5MS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyOTI6XFx0aWYgKGt2bV9zdm0tXFx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGUpXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMjkzLVxcdFxcdHJldHVybiAwO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI5NC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyOTU6XFx0a3ZtX3N2bS1cXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZSA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPLFxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI5Ni1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBhdmljX2dldF9waHlzaWNhbF9pZF90YWJsZV9vcmRlcihrdm0pKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoyOTc6XFx0aWYgKCFrdm1fc3ZtLVxcdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlKVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTI5OC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTMwMz1zdGF0aWMgaW50IGF2aWNfYWxsb2NfbG9naWNhbF9pZF90YWJsZShzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzA0LXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozMDU6XFx0c3RydWN0IGt2bV9zdm0gKmt2bV9zdm0gPSB0b19rdm1fc3ZtKGt2bSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzA2LVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjMwNzpcXHRpZiAoa3ZtX3N2bS1cXHUwMDNlYXZpY19sb2dpY2FsX2lkX3RhYmxlKVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTMwOC1cXHRcXHRyZXR1cm4gMDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zMDktXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MzEwOlxcdGt2bV9zdm0tXFx1MDAzZWF2aWNfbG9naWNhbF9pZF90YWJsZSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MzExOlxcdGlmICgha3ZtX3N2bS1cXHUwMDNlYXZpY19sb2dpY2FsX2lkX3RhYmxlKVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTMxMi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTMxNz1zdGF0aWMgdm9pZCBhdmljX2FkZF92bV90b19nYV9sb2dfbGlzdChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzE4LXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozMTk6XFx0c3RydWN0IGt2bV9zdm0gKmt2bV9zdm0gPSB0b19rdm1fc3ZtKGt2bSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MzIwOlxcdHN0cnVjdCBrdm1fc3ZtICprMjtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zMjEtXFx0dTMyIHZtX2lkO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzI0LVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjMyNTpcXHRpZiAoa3ZtX3N2bS1cXHUwMDNlYXZpY192bV9pZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zMjYtXFx0XFx0cmV0dXJuO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTMyNy1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozMjg6XFx0Z3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSkoXFx1MDAyNnN2bV92bV9kYXRhX2hhc2hfbG9jayk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzI5LSBhZ2FpbjpcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTMzNi1cXHRpZiAobmV4dF92bV9pZF93cmFwcGVkKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MzM3OlxcdFxcdGhhc2hfZm9yX2VhY2hfcG9zc2libGUoc3ZtX3ZtX2RhdGFfaGFzaCwgazIsIGhub2RlLCB2bV9pZCkge1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTMzOC1cXHRcXHRcXHRpZiAoazItXFx1MDAzZWF2aWNfdm1faWQgPT0gdm1faWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zNDEtXFx0fVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjM0MjpcXHRrdm1fc3ZtLVxcdTAwM2VhdmljX3ZtX2lkID0gdm1faWQ7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MzQzOlxcdGhhc2hfYWRkKHN2bV92bV9kYXRhX2hhc2gsIFxcdTAwMjZrdm1fc3ZtLVxcdTAwM2Vobm9kZSwga3ZtX3N2bS1cXHUwMDNlYXZpY192bV9pZCk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzQ0LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTM2OT12b2lkIGF2aWNfdm1fcHJlX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM3MC17XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MzcxOlxcdHN0cnVjdCBrdm1fc3ZtICprdm1fc3ZtID0gdG9fa3ZtX3N2bShrdm0pO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM3Mi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozNzM6XFx0aWYgKFdBUk5fT05fT05DRSghZW5hYmxlX2FwaWN2KSB8fCAha3ZtX3N2bS1cXHUwMDNlYXZpY192bV9pZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zNzQtXFx0XFx0cmV0dXJuO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM3NS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozNzY6XFx0Z3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSkoXFx1MDAyNnN2bV92bV9kYXRhX2hhc2hfbG9jayk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzc3LVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjM3ODpcXHRoYXNoX2RlbChcXHUwMDI2a3ZtX3N2bS1cXHUwMDNlaG5vZGUpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM3OS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0zODE9dm9pZCBhdmljX3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM4Mi17XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MzgzOlxcdHN0cnVjdCBrdm1fc3ZtICprdm1fc3ZtID0gdG9fa3ZtX3N2bShrdm0pO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM4NC1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM4Ny1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzozODg6XFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWt2bV9zdm0tXFx1MDAzZWF2aWNfbG9naWNhbF9pZF90YWJsZSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6Mzg5OlxcdGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpa3ZtX3N2bS1cXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZSxcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zOTAtXFx0XFx0ICAgYXZpY19nZXRfcGh5c2ljYWxfaWRfdGFibGVfb3JkZXIoa3ZtKSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zOTItXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MzkzOnN0YXRpYyBwaHlzX2FkZHJfdCBhdmljX2dldF9iYWNraW5nX3BhZ2VfYWRkcmVzcyhzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zOTQte1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjM5NTpcXHRyZXR1cm4gX19zbWVfc2V0KF9fcGEoc3ZtLVxcdTAwM2V2Y3B1LmFyY2guYXBpYy1cXHUwMDNlcmVncykpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTM5Ni19XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMzk3LVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjM5ODp2b2lkIGF2aWNfaW5pdF92bWNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qgdm1jYiAqdm1jYilcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0zOTkte1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjQwMDpcXHRzdHJ1Y3Qga3ZtX3N2bSAqa3ZtX3N2bSA9IHRvX2t2bV9zdm0oc3ZtLVxcdTAwM2V2Y3B1Lmt2bSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDAxLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjQwMjpcXHR2bWNiLVxcdTAwM2Vjb250cm9sLmF2aWNfYmFja2luZ19wYWdlID0gYXZpY19nZXRfYmFja2luZ19wYWdlX2FkZHJlc3Moc3ZtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo0MDM6XFx0dm1jYi1cXHUwMDNlY29udHJvbC5hdmljX2xvZ2ljYWxfaWQgPSBfX3NtZV9zZXQoX19wYShrdm1fc3ZtLVxcdTAwM2VhdmljX2xvZ2ljYWxfaWRfdGFibGUpKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo0MDQ6XFx0dm1jYi1cXHUwMDNlY29udHJvbC5hdmljX3BoeXNpY2FsX2lkID0gX19zbWVfc2V0KF9fcGEoa3ZtX3N2bS1cXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZSkpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTQwNS1cXHR2bWNiLVxcdTAwM2Vjb250cm9sLmF2aWNfdmFwaWNfYmFyID0gQVBJQ19ERUZBVUxUX1BIWVNfQkFTRTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy00MDYtXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NDA3OlxcdGlmIChrdm1fdmNwdV9hcGljdl9hY3RpdmUoXFx1MDAyNnN2bS1cXHUwMDNldmNwdSkpXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NDA4OlxcdFxcdGF2aWNfYWN0aXZhdGVfdm1jYihzdm0pO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTQwOS1cXHRlbHNlXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NDEwOlxcdFxcdGF2aWNfZGVhY3RpdmF0ZV92bWNiKHN2bSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDExLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTQxMz1zdGF0aWMgaW50IGF2aWNfaW5pdF9iYWNraW5nX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDE1LVxcdHUzMiBtYXhfaWQgPSB4MmF2aWNfZW5hYmxlZCA/IHgyYXZpY19tYXhfcGh5c2ljYWxfaWQgOiBBVklDX01BWF9QSFlTSUNBTF9JRDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo0MTY6XFx0c3RydWN0IGt2bV9zdm0gKmt2bV9zdm0gPSB0b19rdm1fc3ZtKHZjcHUtXFx1MDAzZWt2bSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NDE3OlxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTQxOC1cXHR1MzIgaWQgPSB2Y3B1LVxcdTAwM2V2Y3B1X2lkO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDU4LVxcdC8qIFNldHRpbmcgQVZJQyBiYWNraW5nIHBhZ2UgYWRkcmVzcyBpbiB0aGUgcGh5IEFQSUMgSUQgdGFibGUgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo0NTk6XFx0bmV3X2VudHJ5ID0gYXZpY19nZXRfYmFja2luZ19wYWdlX2FkZHJlc3Moc3ZtKSB8XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDYwLVxcdFxcdCAgICBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX1ZBTElEX01BU0s7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NDYxOlxcdHN2bS1cXHUwMDNlYXZpY19waHlzaWNhbF9pZF9lbnRyeSA9IG5ld19lbnRyeTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy00NjItXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy00NjctXFx0ICovXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NDY4OlxcdFdSSVRFX09OQ0Uoa3ZtX3N2bS1cXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZVtpZF0sIG5ld19lbnRyeSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDY5LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9NDkyPXN0YXRpYyB2b2lkIGF2aWNfa2lja192Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGljcmwpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy00OTQtXFx0dmNwdS1cXHUwMDNlYXJjaC5hcGljLVxcdTAwM2VpcnJfcGVuZGluZyA9IHRydWU7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NDk1OlxcdHN2bV9jb21wbGV0ZV9pbnRlcnJ1cHRfZGVsaXZlcnkodmNwdSxcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy00OTYtXFx0XFx0XFx0XFx0XFx0aWNybCBcXHUwMDI2IEFQSUNfTU9ERV9NQVNLLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9NTQ5PXN0YXRpYyBpbnQgYXZpY19raWNrX3RhcmdldF92Y3B1c19mYXN0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9sYXBpYyAqc291cmNlLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNTUzLVxcdGludCBzaG9ydGhhbmQgPSBpY3JsIFxcdTAwMjYgQVBJQ19TSE9SVF9NQVNLO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjU1NDpcXHRzdHJ1Y3Qga3ZtX3N2bSAqa3ZtX3N2bSA9IHRvX2t2bV9zdm0oa3ZtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy01NTUtXFx0dTMyIGRlc3Q7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy02MDEtXFx0XFx0ZWxzZVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjYwMjpcXHRcXHRcXHRhdmljX2xvZ2ljYWxfaWRfdGFibGUgPSBrdm1fc3ZtLVxcdTAwM2VhdmljX2xvZ2ljYWxfaWRfdGFibGU7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNjAzLVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9NjQyPWludCBhdmljX2luY29tcGxldGVfaXBpX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNjQzLXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo2NDQ6XFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NjQ1OlxcdHUzMiBpY3JoID0gc3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmV4aXRfaW5mb18xIFxcdTAwM2VcXHUwMDNlIDMyO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjY0NjpcXHR1MzIgaWNybCA9IHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbC5leGl0X2luZm9fMTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo2NDc6XFx0dTMyIGlkID0gc3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmV4aXRfaW5mb18yIFxcdTAwM2VcXHUwMDNlIDMyO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjY0ODpcXHR1MzIgaW5kZXggPSBzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXhpdF9pbmZvXzIgXFx1MDAyNiBBVklDX1BIWVNJQ0FMX01BWF9JTkRFWF9NQVNLO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTY0OS1cXHRzdHJ1Y3Qga3ZtX2xhcGljICphcGljID0gdmNwdS1cXHUwMDNlYXJjaC5hcGljO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9NzAxPXN0YXRpYyB1MzIgKmF2aWNfZ2V0X2xvZ2ljYWxfaWRfZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbGRyLCBib29sIGZsYXQpXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzAyLXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo3MDM6XFx0c3RydWN0IGt2bV9zdm0gKmt2bV9zdm0gPSB0b19rdm1fc3ZtKHZjcHUtXFx1MDAzZWt2bSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzA0LVxcdHUzMiBjbHVzdGVyLCBpbmRleDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTcyMy1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo3MjQ6XFx0cmV0dXJuIFxcdTAwMjZrdm1fc3ZtLVxcdTAwM2VhdmljX2xvZ2ljYWxfaWRfdGFibGVbaW5kZXhdO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTcyNS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz03NDQ9c3RhdGljIHZvaWQgYXZpY19pbnZhbGlkYXRlX2xvZ2ljYWxfaWRfZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTc0NS17XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NzQ2OlxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjc0NzpcXHRib29sIGZsYXQgPSBzdm0tXFx1MDAzZWRmcl9yZWcgPT0gQVBJQ19ERlJfRkxBVDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy03NDgtXFx0dTMyICplbnRyeTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTc1My1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo3NTQ6XFx0ZW50cnkgPSBhdmljX2dldF9sb2dpY2FsX2lkX2VudHJ5KHZjcHUsIHN2bS1cXHUwMDNlbGRyX3JlZywgZmxhdCk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzU1LVxcdGlmIChlbnRyeSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTc1OT1zdGF0aWMgdm9pZCBhdmljX2hhbmRsZV9sZHJfdXBkYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy03NjAte1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjc2MTpcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy03NjItXFx0dTMyIGxkciA9IGt2bV9sYXBpY19nZXRfcmVnKHZjcHUtXFx1MDAzZWFyY2guYXBpYywgQVBJQ19MRFIpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzY4LVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjc2OTpcXHRpZiAobGRyID09IHN2bS1cXHUwMDNlbGRyX3JlZylcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy03NzAtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzczLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjc3NDpcXHRzdm0tXFx1MDAzZWxkcl9yZWcgPSBsZHI7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzc1LVxcdGF2aWNfbGRyX3dyaXRlKHZjcHUsIGlkLCBsZHIpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9Nzc4PXN0YXRpYyB2b2lkIGF2aWNfaGFuZGxlX2Rmcl91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTc3OS17XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6NzgwOlxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTc4MS1cXHR1MzIgZGZyID0ga3ZtX2xhcGljX2dldF9yZWcodmNwdS1cXHUwMDNlYXJjaC5hcGljLCBBUElDX0RGUik7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzgyLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjc4MzpcXHRpZiAoc3ZtLVxcdTAwM2VkZnJfcmVnID09IGRmcilcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy03ODQtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzg2LVxcdGF2aWNfaW52YWxpZGF0ZV9sb2dpY2FsX2lkX2VudHJ5KHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjc4NzpcXHRzdm0tXFx1MDAzZWRmcl9yZWcgPSBkZnI7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNzg4LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTc5MD1zdGF0aWMgaW50IGF2aWNfdW5hY2NlbF90cmFwX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy03OTEte1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjc5MjpcXHR1MzIgb2Zmc2V0ID0gdG9fc3ZtKHZjcHUpLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmV4aXRfaW5mb18xIFxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy03OTMtXFx0XFx0XFx0XFx0QVZJQ19VTkFDQ0VMX0FDQ0VTU19PRkZTRVRfTUFTSztcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTg0Mj1pbnQgYXZpY191bmFjY2VsZXJhdGVkX2FjY2Vzc19pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg0My17XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6ODQ0OlxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg0NS1cXHRpbnQgcmV0ID0gMDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo4NDY6XFx0dTMyIG9mZnNldCA9IHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbC5leGl0X2luZm9fMSBcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtODQ3LVxcdFxcdCAgICAgQVZJQ19VTkFDQ0VMX0FDQ0VTU19PRkZTRVRfTUFTSztcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo4NDg6XFx0dTMyIHZlY3RvciA9IHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbC5leGl0X2luZm9fMiBcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtODQ5LVxcdFxcdCAgICAgQVZJQ19VTkFDQ0VMX0FDQ0VTU19WRUNUT1JfTUFTSztcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo4NTA6XFx0Ym9vbCB3cml0ZSA9IChzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXhpdF9pbmZvXzEgXFx1MDAzZVxcdTAwM2UgMzIpIFxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04NTEtXFx0XFx0ICAgICBBVklDX1VOQUNDRUxfQUNDRVNTX1dSSVRFX01BU0s7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04NTctXFx0XFx0LyogSGFuZGxpbmcgVHJhcCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjg1ODpcXHRcXHRXQVJOX09OQ0UoIXdyaXRlLCBcXFwic3ZtOiBIYW5kbGluZyB0cmFwIHJlYWQuXFxcXG5cXFwiKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04NTktXFx0XFx0cmV0ID0gYXZpY191bmFjY2VsX3RyYXBfd3JpdGUodmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04NjctXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6ODY4OmludCBhdmljX2luaXRfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04Njkte1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg3MC1cXHRpbnQgcmV0O1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjg3MTpcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBcXHUwMDI2c3ZtLVxcdTAwM2V2Y3B1O1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg3Mi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo4NzM6XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdCk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6ODc0OlxcdHJhd19zcGluX2xvY2tfaW5pdChcXHUwMDI2c3ZtLVxcdTAwM2Vpcl9saXN0X2xvY2spO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg3NS1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg4Mi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo4ODM6XFx0c3ZtLVxcdTAwM2VkZnJfcmVnID0gQVBJQ19ERlJfRkxBVDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04ODQtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz04ODg9dm9pZCBhdmljX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04OTAtXFx0dTMyIG1heF9pZCA9IHgyYXZpY19lbmFibGVkID8geDJhdmljX21heF9waHlzaWNhbF9pZCA6IEFWSUNfTUFYX1BIWVNJQ0FMX0lEO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjg5MTpcXHRzdHJ1Y3Qga3ZtX3N2bSAqa3ZtX3N2bSA9IHRvX2t2bV9zdm0odmNwdS1cXHUwMDNla3ZtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04OTItXFx0dTMyIGlkID0gdmNwdS1cXHUwMDNldmNwdV9pZDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04OTMtXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6ODk0OlxcdGlmIChrdm1fc3ZtLVxcdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlIFxcdTAwMjZcXHUwMDI2IGlkIFxcdTAwM2M9IG1heF9pZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo4OTU6XFx0XFx0V1JJVEVfT05DRShrdm1fc3ZtLVxcdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlW2lkXSwgMCk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtODk2LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTg5OD12b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTkwMy1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5MDQ6c3RhdGljIHZvaWQgc3ZtX2lyX2xpc3RfZGVsKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MDUte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTExLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjkxMjpcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnRvX3N2bSh2Y3B1KS1cXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTEzLVxcdGxpc3RfZGVsKFxcdTAwMjZpcnFmZC1cXHUwMDNldmNwdV9saXN0KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5MTQ6XFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnRvX3N2bSh2Y3B1KS1cXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTE1LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTkxNz1pbnQgYXZpY19waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTkyNC1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5MjU6XFx0c3ZtX2lyX2xpc3RfZGVsKGlycWZkKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MjYtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MzQtXFx0XFx0c3RydWN0IGFtZF9pb21tdV9waV9kYXRhIHBpX2RhdGEgPSB7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6OTM1OlxcdFxcdFxcdC5nYV90YWcgPSBBVklDX0dBVEFHKHRvX2t2bV9zdm0oa3ZtKS1cXHUwMDNlYXZpY192bV9pZCxcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MzYtXFx0XFx0XFx0XFx0XFx0ICAgICB2Y3B1LVxcdTAwM2V2Y3B1X2lkeCksXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTM3LVxcdFxcdFxcdC5pc19ndWVzdF9tb2RlID0ga3ZtX3ZjcHVfYXBpY3ZfYWN0aXZlKHZjcHUpLFxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjkzODpcXHRcXHRcXHQudmFwaWNfYWRkciA9IGF2aWNfZ2V0X2JhY2tpbmdfcGFnZV9hZGRyZXNzKHRvX3N2bSh2Y3B1KSksXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTM5LVxcdFxcdFxcdC52ZWN0b3IgPSB2ZWN0b3IsXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTQwLVxcdFxcdH07XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6OTQxOlxcdFxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTk0Mi1cXHRcXHR1NjQgZW50cnk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05NTAtXFx0XFx0ICovXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6OTUxOlxcdFxcdGd1YXJkKHJhd19zcGlubG9ja19pcnFzYXZlKShcXHUwMDI2c3ZtLVxcdTAwM2Vpcl9saXN0X2xvY2spO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTk1Mi1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTk1OC1cXHRcXHQgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5NTk6XFx0XFx0ZW50cnkgPSBzdm0tXFx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfZW50cnk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTYwLVxcdFxcdGlmIChlbnRyeSBcXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfSVNfUlVOTklOR19NQVNLKSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05ODEtXFx0XFx0aXJxZmQtXFx1MDAzZWlycV9ieXBhc3NfZGF0YSA9IHBpX2RhdGEuaXJfZGF0YTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5ODI6XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmlycWZkLVxcdTAwM2V2Y3B1X2xpc3QsIFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3QpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTk4My1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTEwMTY9c3RhdGljIHZvaWQgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDE5LVxcdGJvb2wgZ2FfbG9nX2ludHIgPSAoYWN0aW9uIFxcdTAwMjYgQVZJQ19TVEFSVF9CTE9DS0lORyk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTAyMDpcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDIxLVxcdHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDIyLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEwMjM6XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2c3ZtLVxcdTAwM2Vpcl9saXN0X2xvY2spO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwMjQtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDI4LVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEwMjk6XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdCkpXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTAzMC1cXHRcXHRyZXR1cm47XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTAzMS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMDMyOlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoaXJxZmQsIFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3QsIHZjcHVfbGlzdCkge1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwMzMtXFx0XFx0dm9pZCAqZGF0YSA9IGlycWZkLVxcdTAwM2VpcnFfYnlwYXNzX2RhdGE7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0xMDQ0PXN0YXRpYyB2b2lkIF9fYXZpY192Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTA0Ni17XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTA0NzpcXHRzdHJ1Y3Qga3ZtX3N2bSAqa3ZtX3N2bSA9IHRvX2t2bV9zdm0odmNwdS1cXHUwMDNla3ZtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDQ4LVxcdGludCBoX3BoeXNpY2FsX2lkID0gY3B1X3BoeXNpY2FsX2lkKGNwdSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTA0OTpcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDUwLVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDY0LVxcdCAqIF9jdXJyZW50bHlfIGhhdmUgYXNzaWduZWQgZGV2aWNlcywgYXMgdGhhdCBjYW4gY2hhbmdlLiAgSG9sZGluZ1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEwNjU6XFx0ICogaXJfbGlzdF9sb2NrIGVuc3VyZXMgdGhhdCBlaXRoZXIgc3ZtX2lyX2xpc3RfYWRkKCkgd2lsbCBjb25zdW1lXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTA2Ni1cXHQgKiB1cC10by1kYXRlIGVudHJ5IGluZm9ybWF0aW9uLCBvciB0aGF0IHRoaXMgdGFzayB3aWxsIHdhaXQgdW50aWxcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMDY3OlxcdCAqIHN2bV9pcl9saXN0X2FkZCgpIGNvbXBsZXRlcyB0byBzZXQgdGhlIG5ldyB0YXJnZXQgcENQVS5cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDY4LVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEwNjk6XFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwNzAtXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTA3MTpcXHRlbnRyeSA9IHN2bS1cXHUwMDNlYXZpY19waHlzaWNhbF9pZF9lbnRyeTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDcyLVxcdFdBUk5fT05fT05DRShlbnRyeSBcXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfSVNfUlVOTklOR19NQVNLKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwNzgtXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTA3OTpcXHRzdm0tXFx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfZW50cnkgPSBlbnRyeTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDgwLVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTA4OS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMDkwOlxcdFdSSVRFX09OQ0Uoa3ZtX3N2bS1cXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZVt2Y3B1LVxcdTAwM2V2Y3B1X2lkXSwgZW50cnkpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwOTEtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDkzLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEwOTQ6XFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjUyOjU5Ljk4NTE4ODI0MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTcwMzQ2NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV3IEtWTSBQYXRjaDogQVZJQyBDbGVhbnVwKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gdGhlIEFNRCBTVk0gQWR2YW5jZWQgVmlydHVhbCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoQVZJQykgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgS1ZNIHN1YnN5c3RlbS4gSSdtIHNlZWluZyBhIG5ldyBmdW5jdGlvbiwgYGF2aWNfdmNwdV9mcmVlYCwgYWRkZWQgaW4gYGFyY2gveDg2L2t2bS9zdm0vYXZpYy5jYC4gVGhlIGZ1bmN0aW9uIGl0c2VsZiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyBpdCdzIGRlc2lnbmVkIHRvIGNsZWFyIGFuIGVudHJ5IGluIHRoZSBgYXZpY19waHlzaWNhbF9pZF90YWJsZWAgZm9yIGEgZ2l2ZW4gdkNQVSAoYHZjcHVgKS4gVGhlIGBtYXhfaWRgIGNhbGN1bGF0aW9uIHNlZW1zIHRvIGFjY291bnQgZm9yIHBvdGVudGlhbCBYMkFWSUMgc3VwcG9ydC5cblxuTG9va2luZyBhdCB0aGUgY2hhbmdlcyBpbiBgYXJjaC94ODYva3ZtL3N2bS9zdm0uY2AsIGl0IHNlZW1zIHRoaXMgYGF2aWNfdmNwdV9mcmVlYCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgaW4gYm90aCBgc3ZtX3ZjcHVfY3JlYXRlYCBhbmQgYHN2bV92Y3B1X2ZyZWVgLiBJbiBgc3ZtX3ZjcHVfY3JlYXRlYCwgaXQncyBjYWxsZWQgZHVyaW5nIGVycm9yIGhhbmRsaW5nIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBgbXNycG1gIGZhaWxzLiBUaGlzIGluZGljYXRlcyB0aGF0IHByZXZpb3VzbHksIGlmIHRoZSB2Q1BVIGNyZWF0aW9uIGZhaWxlZCAqYWZ0ZXIqIHRoZSBBVklDIGluaXRpYWxpemF0aW9uLCB0aGUgdGFibGUgZW50cnkgbWlnaHQgaGF2ZSBiZWVuIGxlZnQgdW5jbGVhcmVkLiBOb3csIHdlIGhhdmUgYW4gZXhwbGljaXQgY2xlYW51cCBwYXRoIGluIGNhc2Ugb2YgYWxsb2NhdGlvbiBlcnJvci4gU2ltaWxhcmx5LCBpbiBgc3ZtX3ZjcHVfZnJlZWAsIGl0J3MgY2FsbGVkIGR1cmluZyB2Q1BVIGRlc3RydWN0aW9uLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlcmUncyBhbHNvIGEgYFdBUk5fT05fT05DRWAgYWJvdXQgYW4gZW1wdHkgYGlyX2xpc3RgLCB3aGljaCBpcyBhIGdvb2Qgc2FuaXR5IGNoZWNrLlxuXG5Ob3csIGxldCdzIHJld2luZCBhbmQgc2VlIHdoYXQgaGFwcGVuZWQgYmVmb3JlLiBUaGUgaW5pdGlhbCBBVklDIHNldHVwIGR1cmluZyB2Q1BVIGNyZWF0aW9uIChgc3ZtX3ZjcHVfY3JlYXRlYCkgaW52b2x2ZXMgYGF2aWNfaW5pdF92Y3B1YCwgd2hpY2ggdGhlbiBjYWxscyBgYXZpY19pbml0X2JhY2tpbmdfcGFnZWAuIFRoaXMgZnVuY3Rpb24sIGF0IHNvbWUgcG9pbnQsIHdyaXRlcyB0byB0aGUgYGF2aWNfcGh5c2ljYWxfaWRfdGFibGVgIHVzaW5nIGBXUklURV9PTkNFYC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoYXQgKmJlZm9yZSogdGhpcyBwYXRjaCwgaWYgdkNQVSBjcmVhdGlvbiBmYWlsZWQgKmFmdGVyKiBgYXZpY19pbml0X2JhY2tpbmdfcGFnZWAsIG9yIGlmIHRoZSB2Q1BVIHdhcyBkZXN0cm95ZWQsIHRoYXQgdGFibGUgZW50cnkgKndhc24ndCogYmVpbmcgY2xlYXJlZC4gTm93LCB3aXRoIHRoZSBhZGRpdGlvbiBvZiBgYXZpY192Y3B1X2ZyZWVgLCB3ZSBoYXZlIHRoZSBjbGVhbnVwIHBhdGguXG5cblNvLCB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgcmVhY2hhYmxlIHZpYSBmdXp6aW5nPyBDb25zaWRlcmluZyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgd2UgYXJlIHRhbGtpbmcgYWJvdXQgS1ZNJ3MgQU1EIFNWTSAoQVZJQykuIFN5emthbGxlciBmcmVxdWVudGx5IHRhcmdldHMgYmFzaWMgS1ZNIHN5c2NhbGxzIGZvciBmdXp6aW5nLCBsaWtlIGBLVk1fQ1JFQVRFX1ZDUFVgLCBjbG9zaW5nIHZjcHUgZmRzLCBhbmQgZGVzdHJveWluZyBWTXMuIFdoZW4gcnVubmluZyBzeXprYWxsZXIgb24gQU1EIGhvc3RzIChvciBuZXN0ZWQgQU1EIFNWTSBpbiBRRU1VKSwgdGhpcyBjb2RlIHdpbGwgYmUgZXhlcmNpc2VkLiBUaGlzIG1lYW5zIHRoZSBwYXRocyB3aGVyZSBhIHZDUFUgY3JlYXRpb24gKm1pZ2h0KiBmYWlsLCBvciB3aGVyZSB3ZSdyZSBleHBsaWNpdGx5IGZyZWVpbmcgdkNQVXMsIGFyZSBhYnNvbHV0ZWx5IGJlaW5nIGhpdC4gVGhlIGZhY3QgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgZXhlY3V0YWJsZSBrZXJuZWwgQyBjb2RlIGlzLCBpbiBpdHNlbGYsIGEgZ29vZCByZWFzb24gdG8gaW52ZXN0aWdhdGUgZnVydGhlci5cblxuVGhlcmVmb3JlLCB5ZXMsIHRoaXMgbG9va3MgbGlrZSBhIHdvcnRod2hpbGUgZnV6emluZyB0YXJnZXQuIFdlIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbnMgZW5hYmxlZDogc3BlY2lmaWNhbGx5LCBgS1ZNYCBhbmQgYEtWTV9BTURgLiBXZSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIEtjb25maWcgZm9yIGFueSBkZXBlbmRlbmNpZXMgdGhvc2Ugb3B0aW9ucyBoYXZlIHRvIGdpdmUgdXMgZnVydGhlciBpbnNpZ2h0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0MTUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTM6MDYuMTU1NTM3NjExWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTgzNDgwOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzM6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzQtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgzOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTg0LVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5NDpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDctXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA4OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNzpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxOC1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMDpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMzOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjM0LVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTM6MDYuNDEzODg5NjQ2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2Mzg0MTg2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgS1ZNL0FNRCBEZXBlbmRlbmNpZXMgYW5kIEZvY3VzIFN5bWJvbHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBLVk1fQU1EYC4gVGhlIGxvZ2ljIGlzIGNsZWFyOiBpdCBkZXBlbmRzIG9uIGBLVk1gIGFuZCBlaXRoZXIgYENQVV9TVVBfQU1EYCBvciBgQ1BVX1NVUF9IWUdPTmAuIGBDUFVfU1VQX0FNRGAgaXMsIGJ5IGRlZmF1bHQsIGVuYWJsZWQgb24geDg2LCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy4gU28sIEknbSBjb25maWRlbnQgdGhhdCB0aGUgY29yZSBjb25maWd1cmF0aW9ucyByZXF1aXJlZCBhcmUgYEtWTWAgYW5kIGBLVk1fQU1EYC4gVGhhdCdzIHRoZSBiYXNlbGluZS5cblxuTm93LCB0byBnZXQgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciwgSSBoYXZlIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBzeW1ib2xzLiBXaGljaCBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IGludm9sdmVkLCBvciBhcmUgaW1wbGVtZW50aW5nIHRoZSBzcGVjaWZpYyBjaGFuZ2VzPyBJJ3ZlIGlkZW50aWZpZWQgZm91ciBrZXkgZnVuY3Rpb25zOiBgYXZpY192Y3B1X2ZyZWVgLCBgc3ZtX3ZjcHVfY3JlYXRlYCwgYHN2bV92Y3B1X2ZyZWVgLCBhbmQgYGF2aWNfaW5pdF92Y3B1YC4gVGhlIGZvdXJ0aCBzZWVtcyByZWxhdGVkIHRvIHRoZSBBVklDIHNldHVwLlxuXG5UaGUgbmV4dCBjcml0aWNhbCBzdGVwIGlzIHRvIGFzc2VzcyB0aGUgc2NvcGUgb2YgdGhvc2UgZnVuY3Rpb25zLiBBcmUgdGhleSB1YmlxdWl0b3VzIGtlcm5lbCBhbGxvY2F0b3JzLCBvciBhcmUgdGhleSBzcGVjaWZpYyB0byBLVk0vU1ZNIGltcGxlbWVudGF0aW9ucz8gR29vZCwgdGhleSBhcmUgS1ZNLVNWTSBzcGVjaWZpYy4gVGhpcyBpcyB3aGF0IEkgd2FzIGhvcGluZyB0byBzZWUuIEl0IG1lYW5zIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IHRvIGJlIHN0cm9uZyBpbmRpY2F0b3JzIG9mIHRoZSB0YXJnZXRlZCBmdW5jdGlvbmFsaXR5LlxuXG5JJ20gbm93IGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0byBiZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG90aGVyIHN5bWJvbHMgb3IgY29uZmlncyB0aGF0IGFyZSBuZWVkZWQuXG5cbkknbSBub3cgY29uZmlkZW50IHRoYXQgbXkgbGlzdHMgYXJlIGNvcnJlY3Q6IGBFbmFibGVDb25maWdzYCBpcyBgW1wiS1ZNXCIsIFwiS1ZNX0FNRFwiXWAgYW5kIGBGb2N1c1N5bWJvbHNgIGlzIGBbXCJhdmljX3ZjcHVfZnJlZVwiLCBcInN2bV92Y3B1X2NyZWF0ZVwiLCBcInN2bV92Y3B1X2ZyZWVcIl1gLlxuXG5MZXQncyBkbyBhIHF1aWNrIGZpbmFsIHJldmlldyBvZiBldmVyeXRoaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgYW5kIG15IHJlYXNvbmluZyBhcmUgYWNjdXJhdGUgYW5kIHdlbGwtZm9ybWF0dGVkLiBJJ20gcmVhZHkgdG8gY2FsbCB0aGUgYHNldC1yZXN1bHRzYCBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDA0NCwiT3V0cHV0VG9rZW5zIjoxMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTM6MTIuMDUyMzEwNjAxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYyOTkwOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImF2aWNfdmNwdV9mcmVlXCIsXG4gICAgXCJzdm1fdmNwdV9jcmVhdGVcIixcbiAgICBcInN2bV92Y3B1X2ZyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGF2aWNfdmNwdV9mcmVlKCkgdG8gY2xlYXIgdGhlIHBoeXNpY2FsIEFQSUMgSUQgdGFibGUgZW50cnkgb24gU1ZNIHZDUFUgY3JlYXRpb24gZmFpbHVyZSBhbmQgdkNQVSB0ZWFyZG93bi4gVGhpcyBtb2RpZmllcyBleGVjdXRhYmxlIGxpZmVjeWNsZSBjb2RlIGluIEtWTSBBTUQgKFNWTSksIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUgb24gYW1kNjQgdmlhIEtWTSBpb2N0bHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fQU1EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXZpY192Y3B1X2ZyZWVcIixcbiAgICBcInN2bV92Y3B1X2NyZWF0ZVwiLFxuICAgIFwic3ZtX3ZjcHVfZnJlZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYXZpY192Y3B1X2ZyZWUoKSB0byBjbGVhciB0aGUgcGh5c2ljYWwgQVBJQyBJRCB0YWJsZSBlbnRyeSBvbiBTVk0gdkNQVSBjcmVhdGlvbiBmYWlsdXJlIGFuZCB2Q1BVIHRlYXJkb3duLiBUaGlzIG1vZGlmaWVzIGV4ZWN1dGFibGUgbGlmZWN5Y2xlIGNvZGUgaW4gS1ZNIEFNRCAoU1ZNKSwgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZSBvbiBhbWQ2NCB2aWEgS1ZNIGlvY3Rscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTM6MTIuMTI4NjE3MDZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDQyMzQyNTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTM6MTIuMTI5MDQ3OTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNDQ0MTkwODM3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgYXZpY192Y3B1X2ZyZWUoKWAgdG8gY2xlYXIgKGBXUklURV9PTkNFKC4uLiwgMClgKSB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBpbiBga3ZtX3N2bS1cXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZWAgd2hlbiBhIHZDUFUgaXMgZnJlZWQgb3Igd2hlbiB2Q1BVIGNyZWF0aW9uIGZhaWxzIGFmdGVyIEFWSUMgaW5pdGlhbGl6YXRpb24uIFRoaXMgcHJldmVudHMgc3RhbGUvZGFuZ2xpbmcgcmVmZXJlbmNlcyB0byBmcmVlZCBiYWNraW5nIHBhZ2VzIGluIHRoZSBwaHlzaWNhbCBJRCB0YWJsZS5cXG5cXG5UaGUgY2hhbmdlcyBvbmx5IHdyaXRlIGEgemVybyB2YWx1ZSB0byBhbiBleGlzdGluZyB0YWJsZSBhbmQgZG8gbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCByZWFkIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbHRlciBib3VuZHMgY2hlY2tzIGZvciB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZS4gTWVtb3J5IGxpZmVjeWNsZS9kYW5nbGluZyBwb2ludGVyIGlzc3VlcyBpbiB0aGlzIGNvbnRleHQgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0b3JzIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY3ZDE5YmQ0ZDM0YTEzYjM2MmNkZjY4NzZlNDI2NDk5NzcxZTNiZjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDA2OjUyOjM4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9hdmljLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1xuaW5kZXggM2IwMzdlMzg1NTIzNC4uYmMyYzY5OTM4MGIzNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1xuQEAgLTg4NSw2ICs4ODUsMTYgQEAgaW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rdm9pZCBhdmljX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0dTMyIG1heF9pZCA9IHgyYXZpY19lbmFibGVkID8geDJhdmljX21heF9waHlzaWNhbF9pZCA6IEFWSUNfTUFYX1BIWVNJQ0FMX0lEO1xuK1x0c3RydWN0IGt2bV9zdm0gKmt2bV9zdm0gPSB0b19rdm1fc3ZtKHZjcHUtXHUwMDNla3ZtKTtcbitcdHUzMiBpZCA9IHZjcHUtXHUwMDNldmNwdV9pZDtcbitcbitcdGlmIChrdm1fc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGUgXHUwMDI2XHUwMDI2IGlkIFx1MDAzYz0gbWF4X2lkKVxuK1x0XHRXUklURV9PTkNFKGt2bV9zdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZVtpZF0sIDApO1xuK31cbitcbiB2b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRhdmljX2hhbmRsZV9kZnJfdXBkYXRlKHZjcHUpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5pbmRleCBlYTY0NzkzOGEyYTY1Li5jMmEyYWU3ZDhlYzM0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuQEAgLTEzMzcsNyArMTMzNyw3IEBAIHN0YXRpYyBpbnQgc3ZtX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHN2bS1cdTAwM2Vtc3JwbSA9IHN2bV92Y3B1X2FsbG9jX21zcnBtKCk7XG4gXHRpZiAoIXN2bS1cdTAwM2Vtc3JwbSkge1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuLVx0XHRnb3RvIGVycm9yX2ZyZWVfc2V2O1xuK1x0XHRnb3RvIGVycm9yX2ZyZWVfYXZpYztcbiBcdH1cbiBcbiBcdHN2bS1cdTAwM2V4MmF2aWNfbXNyc19pbnRlcmNlcHRlZCA9IHRydWU7XG5AQCAtMTM1MSw2ICsxMzUxLDggQEAgc3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0cmV0dXJuIDA7XG4gXG4rZXJyb3JfZnJlZV9hdmljOlxuK1x0YXZpY192Y3B1X2ZyZWUodmNwdSk7XG4gZXJyb3JfZnJlZV9zZXY6XG4gXHRzZXZfZnJlZV92Y3B1KHZjcHUpO1xuIGVycm9yX2ZyZWVfdm1jYl9wYWdlOlxuQEAgLTEzNjUsNiArMTM2Nyw4IEBAIHN0YXRpYyB2b2lkIHN2bV92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0KSk7XG4gXG4rXHRhdmljX3ZjcHVfZnJlZSh2Y3B1KTtcbitcbiBcdHN2bV9sZWF2ZV9uZXN0ZWQodmNwdSk7XG4gXHRzdm1fZnJlZV9uZXN0ZWQoc3ZtKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuaW5kZXggZTk1ODk0M2I4MTYyNy4uNzkwYmQ5NmE5NzkxMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbkBAIC05NTQsNiArOTU0LDcgQEAgdm9pZCBhdmljX2luaXRfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IHZtY2IgKnZtY2IpO1xuIGludCBhdmljX2luY29tcGxldGVfaXBpX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCBhdmljX3VuYWNjZWxlcmF0ZWRfYWNjZXNzX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCBhdmljX2luaXRfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XG4rdm9pZCBhdmljX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgYXZpY192Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTtcbiB2b2lkIGF2aWNfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1MzoxMi4xMjkwNDg4NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MTcyMjk3NDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQVZJQyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiwgYGF2aWNfdmNwdV9mcmVlYCwgd2l0aGluIGBhcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuIFJlYWRpbmcgdGhyb3VnaCBpdCwgSSBzZWUgaXQncyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgYW4gZW50cnkgaW4gdGhlIGBhdmljX3BoeXNpY2FsX2lkX3RhYmxlYCBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyB2Q1BVLiBUaGUgbG9naWMgYXBwZWFycyB0byBjb25kaXRpb25hbGx5IGNsZWFyIHRoZSBlbnRyeSBiYXNlZCBvbiB0aGUgYHgyYXZpY19lbmFibGVkYCBmbGFnIGFuZCB0aGUgYHZjcHUtXHUwMDNldmNwdV9pZGAuIFNwZWNpZmljYWxseSwgaWYgYHgyYXZpY19lbmFibGVkYCBpcyBzZXQsIGl0IHVzZXMgYHgyYXZpY19tYXhfcGh5c2ljYWxfaWRgIGFzIHRoZSB1cHBlciBib3VuZCBmb3IgdmFsaWQgSURzLCBvdGhlcndpc2UgaXQgdXNlcyB0aGUgc3RhbmRhcmQgYEFWSUNfTUFYX1BIWVNJQ0FMX0lEYC4gSXQgdGhlbiBhY2Nlc3NlcyB0aGUgdGFibGUgdXNpbmcgdGhlIHZDUFUncyBJRCBhbmQgc2V0cyB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSB0byB6ZXJvIHVzaW5nIGBXUklURV9PTkNFYC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQuIFRoZSBwYXRjaCBhbHNvIGludGVncmF0ZXMgdGhpcyBgYXZpY192Y3B1X2ZyZWVgIGZ1bmN0aW9uIGludG8gYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmNgLiBJdCdzIGJlaW5nIGNhbGxlZCBpbiB0d28gc3BlY2lmaWMgcGxhY2VzOiB0aGUgZXJyb3IgcGF0aCB3aXRoaW4gYHN2bV92Y3B1X2NyZWF0ZWAgYW5kIHdpdGhpbiB0aGUgYHN2bV92Y3B1X2ZyZWVgIGZ1bmN0aW9uIGl0c2VsZi4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGUgcHVycG9zZSBvZiBgYXZpY192Y3B1X2ZyZWVgIGlzIHRvIGNsZWFuIHVwIHJlc291cmNlcyBhbGxvY2F0ZWQgdG8gdGhlIEFWSUMgZm9yIGEgdkNQVSwgYm90aCBkdXJpbmcgdkNQVSBjcmVhdGlvbiB3aGVuIHNvbWV0aGluZyBmYWlscyBhbmQgZHVyaW5nIHN0YW5kYXJkIHZDUFUgZGVzdHJ1Y3Rpb24uIFRoaXMgbWFrZXMgc2Vuc2U7IHdlIHdhbnQgdG8gZW5zdXJlIGFueSBwaHlzaWNhbCBJRCBtYXBwaW5ncyBhcmUgcHJvcGVybHkgcmVsZWFzZWQuXG5cblRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBgYXZpY19pbml0X3ZjcHVgIG1vcmUgY2xvc2VseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIHRoYXQgYGF2aWNfcGh5c2ljYWxfaWRfdGFibGVgLiBJJ2xsIHVzZSBhIGZpbGUgcmVhZGVyIHRvIGp1bXAgdG8gdGhhdCBhcmVhLiBMZXQncyBzZWUgaG93IHRoYXQgYXJyYXkgaXMgYWxsb2NhdGVkLCBwb3B1bGF0ZWQsIGFuZCB1c2VkIHRvIGNvbXBsZXRlIHRoaXMgcGljdHVyZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSB0YWJsZSBpcyBhbGxvY2F0ZWQgYW5kIGhvdyBpdHMgZW50cmllcyBhcmUgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTM6MjEuMzAxMzQ4NTMyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NTAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NTA6XFx0XFx0Ym9vbCB3cml0ZSA9IChzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXhpdF9pbmZvXzEgXFx1MDAzZVxcdTAwM2UgMzIpIFxcdTAwMjZcXG4gODUxOlxcdFxcdFxcdCAgICAgQVZJQ19VTkFDQ0VMX0FDQ0VTU19XUklURV9NQVNLO1xcbiA4NTI6XFx0XFx0Ym9vbCB0cmFwID0gaXNfYXZpY191bmFjY2VsZXJhdGVkX2FjY2Vzc190cmFwKG9mZnNldCk7XFxuIDg1MzpcXHRcXG4gODU0OlxcdFxcdHRyYWNlX2t2bV9hdmljX3VuYWNjZWxlcmF0ZWRfYWNjZXNzKHZjcHUtXFx1MDAzZXZjcHVfaWQsIG9mZnNldCxcXG4gODU1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICB0cmFwLCB3cml0ZSwgdmVjdG9yKTtcXG4gODU2OlxcdFxcdGlmICh0cmFwKSB7XFxuIDg1NzpcXHRcXHRcXHQvKiBIYW5kbGluZyBUcmFwICovXFxuIDg1ODpcXHRcXHRcXHRXQVJOX09OQ0UoIXdyaXRlLCBcXFwic3ZtOiBIYW5kbGluZyB0cmFwIHJlYWQuXFxcXG5cXFwiKTtcXG4gODU5OlxcdFxcdFxcdHJldCA9IGF2aWNfdW5hY2NlbF90cmFwX3dyaXRlKHZjcHUpO1xcbiA4NjA6XFx0XFx0fSBlbHNlIHtcXG4gODYxOlxcdFxcdFxcdC8qIEhhbmRsaW5nIEZhdWx0ICovXFxuIDg2MjpcXHRcXHRcXHRyZXQgPSBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwKTtcXG4gODYzOlxcdFxcdH1cXG4gODY0OlxcdFxcbiA4NjU6XFx0XFx0cmV0dXJuIHJldDtcXG4gODY2OlxcdH1cXG4gODY3OlxcdFxcbiA4Njg6XFx0aW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbiA4Njk6XFx0e1xcbiA4NzA6XFx0XFx0aW50IHJldDtcXG4gODcxOlxcdFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IFxcdTAwMjZzdm0tXFx1MDAzZXZjcHU7XFxuIDg3MjpcXHRcXG4gODczOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3QpO1xcbiA4NzQ6XFx0XFx0cmF3X3NwaW5fbG9ja19pbml0KFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3RfbG9jayk7XFxuIDg3NTpcXHRcXG4gODc2OlxcdFxcdGlmICghZW5hYmxlX2FwaWN2IHx8ICFpcnFjaGlwX2luX2tlcm5lbCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbiA4Nzc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDg3ODpcXHRcXG4gODc5OlxcdFxcdHJldCA9IGF2aWNfaW5pdF9iYWNraW5nX3BhZ2UodmNwdSk7XFxuIDg4MDpcXHRcXHRpZiAocmV0KVxcbiA4ODE6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gODgyOlxcdFxcbiA4ODM6XFx0XFx0c3ZtLVxcdTAwM2VkZnJfcmVnID0gQVBJQ19ERlJfRkxBVDtcXG4gODg0OlxcdFxcbiA4ODU6XFx0XFx0cmV0dXJuIHJldDtcXG4gODg2OlxcdH1cXG4gODg3OlxcdFxcbiA4ODg6XFx0dm9pZCBhdmljX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIDg4OTpcXHR7XFxuIDg5MDpcXHRcXHR1MzIgbWF4X2lkID0geDJhdmljX2VuYWJsZWQgPyB4MmF2aWNfbWF4X3BoeXNpY2FsX2lkIDogQVZJQ19NQVhfUEhZU0lDQUxfSUQ7XFxuIDg5MTpcXHRcXHRzdHJ1Y3Qga3ZtX3N2bSAqa3ZtX3N2bSA9IHRvX2t2bV9zdm0odmNwdS1cXHUwMDNla3ZtKTtcXG4gODkyOlxcdFxcdHUzMiBpZCA9IHZjcHUtXFx1MDAzZXZjcHVfaWQ7XFxuIDg5MzpcXHRcXG4gODk0OlxcdFxcdGlmIChrdm1fc3ZtLVxcdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlIFxcdTAwMjZcXHUwMDI2IGlkIFxcdTAwM2M9IG1heF9pZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTM6MjEuMzAxNDg5NDIyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1NjQzODEwNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYGF2aWNfaW5pdF9iYWNraW5nX3BhZ2VgIGFuZCBgYXZpY19waHlzaWNhbF9pZF90YWJsZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJ3aGVyZSB0aGUgaGVjayBpcyBgYXZpY19pbml0X2JhY2tpbmdfcGFnZWAgZGVmaW5lZD9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIHRoZSBjb250ZXh0IG9mIGl0cyBleGVjdXRpb24uIEtub3dpbmcgdGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgcGljdHVyZSBvZiB3aGF0IGl0J3MgdHJ5aW5nIHRvIGFjaGlldmUuIElzIGl0IGEgZnVuY3Rpb24sIGEgbWFjcm8sIHBhcnQgb2YgYSBsYXJnZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uPyBBbmQgd2hhdCBoZWFkZXIgZmlsZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBwcm9jZXNzPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBxdWljayBzZWFyY2ggb2YgdGhlIGNvZGViYXNlLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcm91dGluZSBpcyAqZG9pbmcqLiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIGZpZ3VyaW5nIG91dCB3aGF0IGl0J3Mgd3JpdGluZyB0byBgYXZpY19waHlzaWNhbF9pZF90YWJsZWAuIEknbSBnb2luZyB0byBsb29rIGZvciB3cml0ZXMsIHJlYWRzLCBvciBhbnkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHRhYmxlIHdpdGhpbiB0aGUgZnVuY3Rpb24uIElzIGl0IHBvcHVsYXRpbmcgaXQgZnJvbSBzY3JhdGNoLCB1cGRhdGluZyBleGlzdGluZyBlbnRyaWVzLCBvciBpbml0aWFsaXppbmcgaXQgdG8gc29tZSBkZWZhdWx0IHN0YXRlPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBXaGF0IGRhdGEgdHlwZXMgYXJlIHN0b3JlZCBpbiBgYXZpY19waHlzaWNhbF9pZF90YWJsZWAgYW5kIHdoYXQgaXMgdGhlaXIgc2lnbmlmaWNhbmNlPyBXaGF0IGlzIHRoZSBmdW5jdGlvbidzIHJlbGF0aW9uc2hpcCB0byB0aGUgb3ZlcmFsbCBpbnRlcnJ1cHQgY29udHJvbGxlciBzZXR1cD8gSSBuZWVkIHRvIG1hcCBpdCBvdXQuIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGxvZ2ljIGFuZCBub3RlIGFueSBwb3RlbnRpYWxseSBjcnVjaWFsIHN0ZXBzLiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIGRldGVybWluZSB0aGUgcHVycG9zZSBhbmQgaW1wbGljYXRpb25zIG9mIHRoZSB3cml0ZXMgdG8gdGhpcyB0YWJsZS4gVGhpcyBpcyBsaWtlbHkgYSBjcml0aWNhbCBpbml0aWFsaXphdGlvbiBzdGVwIGZvciB0aGUgQWR2YW5jZWQgVmlydHVhbCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoQVZJQykgZnVuY3Rpb25hbGl0eSwgYW5kIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBwaHlzaWNhbCBJRHMgYXJlIG1hcHBlZCBpcyBwYXJhbW91bnQuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGV0YWlscyB3aWxsIGJlIGtleSBmb3IgZGVidWdnaW5nIGFuZCBvcHRpbWl6YXRpb24gZWZmb3J0cywgaWYgbmVlZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDUyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1MzoyNC44NjU4NzI3ODZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0Nzk2NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF2aWNfaW5pdF9iYWNraW5nX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9Mzk4PXZvaWQgYXZpY19pbml0X3ZtY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCB2bWNiICp2bWNiKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtNDEyLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjQxMzpzdGF0aWMgaW50IGF2aWNfaW5pdF9iYWNraW5nX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTQxNC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz04Njg9aW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtODc4LVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjg3OTpcXHRyZXQgPSBhdmljX2luaXRfYmFja2luZ19wYWdlKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg4MC1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1MzoyNC45MjA2NzY4NjVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY3MTc2ODU5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBtZW50YWwgd2Fsa3Rocm91Z2ggb2YgdGhhdCBjb2RlIHNlY3Rpb24sIGZvY3VzaW5nIG9uIHdoYXQncyByZWxldmFudCB0byBteSBleHBlcnRpc2U6XG5cbioqRGlzc2VjdGluZyBBVklDIEluaXRpYWxpemF0aW9uIGluIGBrdm0vc3ZtL2F2aWMuY2AqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gYGFyY2gveDg2L2t2bS9zdm0vYXZpYy5jYCBhbmQgc3BlY2lmaWNhbGx5IGxpbmVzIDQxMyB0byA0NjAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgQVZJQyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSB3aXRoaW4gdGhlIEFNRCBTVk0gY29udGV4dC4gSSBrbm93IHRoaXMgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2Ugd2l0aCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gYW5kIHdvcmtsb2FkcyB0aGF0IGFyZSBBVlgtaGVhdnksIGFuZCBpcyBhIGtleSBhcmVhIGZvciBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBvciBkZWJ1Z2dpbmcgaWYgd2Ugc2VlIHVudXN1YWwgYmVoYXZpb3IuXG5cbkknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBzZXR1cCBvZiB0aGUgc3RydWN0dXJlcyBpbnZvbHZlZCB3aXRoIHRoZSBBZHZhbmNlZCBWaXJ0dWFsIEludGVycnVwdCBDb250cm9sbGVyLiBSaWdodCwgdGhpcyBzZWN0aW9uIGxpa2VseSBoYW5kbGVzIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHZpcnR1YWwgaW50ZXJydXB0IHJlbWFwcGluZyB0YWJsZXMgb3Igb3RoZXIgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGUgZ3Vlc3QgYW5kIHRoZSBhbGxvY2F0aW9uIG9mIHJlc291cmNlcy4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHRoZSBjb2RlIGlzIHNldHRpbmcgdXAgdGhlIEFWSUMgcmVnaXN0ZXJzIGluIHRoZSBzeXN0ZW0uIEkgYWxzbyBuZWVkIHRvIHRyYWNrIHRoZSBpbnRlcnBsYXkgd2l0aCB0aGUgaG9zdCBhbmQgZ3Vlc3QncyBwYWdlIHRhYmxlczsgdGhhdCBpcyBvZnRlbiB3aGVyZSBidWdzIGFuZCBpc3N1ZXMgYXJpc2UgZHVyaW5nIGluaXRpYWxpemF0aW9uLlxuXG5JJ20gbWVudGFsbHkgc3RlcHBpbmcgdGhyb3VnaCBlYWNoIGxpbmUuIFRoaXMgaXMgcHJvYmFibHkgd2hlcmUgdGhlIGNvZGUgZGVmaW5lcyBhbmQgYWxsb2NhdGVzIG1lbW9yeSBmb3IgdGhlIEFWSUMuIEknbSBmb2N1c2luZyBvbiBob3cgdGhlIGludGVycnVwdC1yZWxhdGVkIG1lbW9yeSBpcyBtYXBwZWQgYW5kIHRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLCBhcyB0aGVzZSBhcmUgY3JpdGljYWwgZm9yIGVuc3VyaW5nIGVmZmljaWVudCBvcGVyYXRpb24uIEFsc28sIHdoZXRoZXIgaXQgaXMgdXNpbmcgdGhlIHN0YW5kYXJkIG1ldGhvZHMsIG9yIGhhcyBhbnkgYmVzcG9rZSBtb2RpZmljYXRpb25zLCBmb3Igc2V0dGluZyB1cCB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIuIEkgYW0gYWxzbyBjaGVja2luZyB0aGF0IHRoZXJlIGlzIG5vdCBhbnl0aGluZyByZWR1bmRhbnQuIElzIGl0IGRvaW5nIGEgZG91YmxlIGFsbG9jYXRpb24/XG5cbkkgYW50aWNpcGF0ZSBlbmNvdW50ZXJpbmcgdGhlIGVuYWJsaW5nIG9mIHRoZSBmZWF0dXJlcywgYW5kIHdoYXQgY2hlY2tzIGFyZSBwZXJmb3JtZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlIG9uIHRoZSBwaHlzaWNhbCBoYXJkd2FyZS4gVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGNvZGUgaGFuZGxlcyBkaWZmZXJlbnQgQ1BVIG1vZGVscyBvciBzdGVwcGluZyByZXZpc2lvbnMuIENoZWNraW5nIHRoZSBDUFVJRCBvdXRwdXQgcmVsYXRlZCB0byBBVklDIHN1cHBvcnQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IGZhbGxiYWNrcyBpZiBBVklDIGlzIHVuYXZhaWxhYmxlLlxuXG5JIGFsc28gd2FudCB0byBwYXkgY2FyZWZ1bCBhdHRlbnRpb24gdG8gYW55IGxvY2tzIG9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQgZHVyaW5nIHRoaXMgaW5pdGlhbGl6YXRpb24gcGhhc2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGhlIHNldHVwIG9mIHRoZSBpbnRlcnJ1cHQgcmVtYXBwaW5nIHRhYmxlLiBJIG5lZWQgdG8gYWxzbyBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBpbiB0aGVzZSBsb2NrIG9wZXJhdGlvbnMuIEkgd2lsbCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayBpZiB0aGUgY29kZSBpcyB1c2luZyBzcGlubG9ja3MsIG9yIGlmIGl0IGhhcyBhbnkgc29waGlzdGljYXRlZCBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcy5cblxuRmluYWxseSwgSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBkZWJ1Z2dpbmcgb3V0cHV0LCBlcnJvciBoYW5kbGluZywgb3IgYXNzZXJ0aW9ucyB3aXRoaW4gdGhpcyBzZWN0aW9uLiBHb29kIGxvZ2dpbmcgb3IgZXJyb3IgcmVwb3J0aW5nIGlzIGVzc2VudGlhbCBmb3IgdHJvdWJsZXNob290aW5nIGlzc3VlcyByZWxhdGVkIHRvIHRoZSBBVklDLCBhbmQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGluIGdlbmVyYWwuIEl0IHdpbGwgYmUgaGVscGZ1bCB0byBrbm93IGhvdyB0aGUgc3lzdGVtIHJlYWN0cyBpZiB0aGUgaGFyZHdhcmUgaXNuJ3QgcXVpdGUgcmlnaHQuIFRoYXQgd2lsbCBiZSBlc3BlY2lhbGx5IGltcG9ydGFudCB3aGVuIEkgYW0gdGhpbmtpbmcgb2YgdGhlIGludGVyYWN0aW9uIG9mIG11bHRpcGxlIFZNcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEzMSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjUzOjI4LjU5MjQ0ODU0OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MTMsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MTM6XFx0c3RhdGljIGludCBhdmljX2luaXRfYmFja2luZ19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gNDE0OlxcdHtcXG4gNDE1OlxcdFxcdHUzMiBtYXhfaWQgPSB4MmF2aWNfZW5hYmxlZCA/IHgyYXZpY19tYXhfcGh5c2ljYWxfaWQgOiBBVklDX01BWF9QSFlTSUNBTF9JRDtcXG4gNDE2OlxcdFxcdHN0cnVjdCBrdm1fc3ZtICprdm1fc3ZtID0gdG9fa3ZtX3N2bSh2Y3B1LVxcdTAwM2Vrdm0pO1xcbiA0MTc6XFx0XFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XFxuIDQxODpcXHRcXHR1MzIgaWQgPSB2Y3B1LVxcdTAwM2V2Y3B1X2lkO1xcbiA0MTk6XFx0XFx0dTY0IG5ld19lbnRyeTtcXG4gNDIwOlxcdFxcbiA0MjE6XFx0XFx0LypcXG4gNDIyOlxcdFxcdCAqIEluaGliaXQgQVZJQyBpZiB0aGUgdkNQVSBJRCBpcyBiaWdnZXIgdGhhbiB3aGF0IGlzIHN1cHBvcnRlZCBieSBBVklDXFxuIDQyMzpcXHRcXHQgKiBoYXJkd2FyZS4gIEltbWVkaWF0ZWx5IGNsZWFyIGFwaWN2X2FjdGl2ZSwgaS5lLiBkb24ndCB3YWl0IHVudGlsIHRoZVxcbiA0MjQ6XFx0XFx0ICogS1ZNX1JFUV9BUElDVl9VUERBVEUgcmVxdWVzdCBpcyBwcm9jZXNzZWQgb24gdGhlIGZpcnN0IEtWTV9SVU4sIGFzXFxuIDQyNTpcXHRcXHQgKiBhdmljX3ZjcHVfbG9hZCgpIGV4cGVjdHMgdG8gYmUgY2FsbGVkIGlmIGFuZCBvbmx5IGlmIHRoZSB2Q1BVIGhhc1xcbiA0MjY6XFx0XFx0ICogZnVsbHkgaW5pdGlhbGl6ZWQgQVZJQy5cXG4gNDI3OlxcdFxcdCAqL1xcbiA0Mjg6XFx0XFx0aWYgKGlkIFxcdTAwM2UgbWF4X2lkKSB7XFxuIDQyOTpcXHRcXHRcXHRrdm1fc2V0X2FwaWN2X2luaGliaXQodmNwdS1cXHUwMDNla3ZtLCBBUElDVl9JTkhJQklUX1JFQVNPTl9QSFlTSUNBTF9JRF9UT09fQklHKTtcXG4gNDMwOlxcdFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guYXBpYy1cXHUwMDNlYXBpY3ZfYWN0aXZlID0gZmFsc2U7XFxuIDQzMTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDMyOlxcdFxcdH1cXG4gNDMzOlxcdFxcbiA0MzQ6XFx0XFx0QlVJTERfQlVHX09OKChBVklDX01BWF9QSFlTSUNBTF9JRCArIDEpICogc2l6ZW9mKG5ld19lbnRyeSkgXFx1MDAzZSBQQUdFX1NJWkUgfHxcXG4gNDM1OlxcdFxcdFxcdCAgICAgKFgyQVZJQ19NQVhfUEhZU0lDQUxfSUQgKyAxKSAqIHNpemVvZihuZXdfZW50cnkpIFxcdTAwM2UgUEFHRV9TSVpFKTtcXG4gNDM2OlxcdFxcbiA0Mzc6XFx0XFx0aWYgKFdBUk5fT05fT05DRSghdmNwdS1cXHUwMDNlYXJjaC5hcGljLVxcdTAwM2VyZWdzKSlcXG4gNDM4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0Mzk6XFx0XFxuIDQ0MDpcXHRcXHRpZiAoa3ZtX2FwaWN2X2FjdGl2YXRlZCh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuIDQ0MTpcXHRcXHRcXHRpbnQgcmV0O1xcbiA0NDI6XFx0XFxuIDQ0MzpcXHRcXHRcXHQvKlxcbiA0NDQ6XFx0XFx0XFx0ICogTm90ZSwgQVZJQyBoYXJkd2FyZSB3YWxrcyB0aGUgbmVzdGVkIHBhZ2UgdGFibGUgdG8gY2hlY2tcXG4gNDQ1OlxcdFxcdFxcdCAqIHBlcm1pc3Npb25zLCBidXQgZG9lcyBub3QgdXNlIHRoZSBTUEEgYWRkcmVzcyBzcGVjaWZpZWQgaW5cXG4gNDQ2OlxcdFxcdFxcdCAqIHRoZSBsZWFmIFNQVEUgc2luY2UgaXQgdXNlcyBhZGRyZXNzIGluIHRoZSBBVklDX0JBQ0tJTkdfUEFHRVxcbiA0NDc6XFx0XFx0XFx0ICogcG9pbnRlciBmaWVsZCBvZiB0aGUgVk1DQi5cXG4gNDQ4OlxcdFxcdFxcdCAqL1xcbiA0NDk6XFx0XFx0XFx0cmV0ID0ga3ZtX2FsbG9jX2FwaWNfYWNjZXNzX3BhZ2UodmNwdS1cXHUwMDNla3ZtKTtcXG4gNDUwOlxcdFxcdFxcdGlmIChyZXQpXFxuIDQ1MTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA0NTI6XFx0XFx0fVxcbiA0NTM6XFx0XFxuIDQ1NDpcXHRcXHQvKiBOb3RlLCBmbHM2NCgpIHJldHVybnMgdGhlIGJpdCBwb3NpdGlvbiwgKzEuICovXFxuIDQ1NTpcXHRcXHRCVUlMRF9CVUdfT04oX19QSFlTSUNBTF9NQVNLX1NISUZUIFxcdTAwM2VcXG4gNDU2OlxcdFxcdFxcdCAgICAgZmxzNjQoQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9CQUNLSU5HX1BBR0VfTUFTSykpO1xcbiA0NTc6XFx0XFxuIDQ1ODpcXHRcXHQvKiBTZXR0aW5nIEFWSUMgYmFja2luZyBwYWdlIGFkZHJlc3MgaW4gdGhlIHBoeSBBUElDIElEIHRhYmxlICovXFxuIDQ1OTpcXHRcXHRuZXdfZW50cnkgPSBhdmljX2dldF9iYWNraW5nX3BhZ2VfYWRkcmVzcyhzdm0pIHxcXG4gNDYwOlxcdFxcdFxcdCAgICBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX1ZBTElEX01BU0s7XFxuIDQ2MTpcXHRcXHRzdm0tXFx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfZW50cnkgPSBuZXdfZW50cnk7XFxuIDQ2MjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTM6MjguNTkyNTQ3ODA4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxMjM0NDI1MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIGBhdmljX2luaXRfYmFja2luZ19wYWdlYCoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIHJlbWFpbmluZyBjb2RlIGZvciBgYXZpY19pbml0X2JhY2tpbmdfcGFnZWAuIEknbSBjdXJpb3VzIHRvIHNlZSBob3cgdGhlIGJhY2tpbmcgcGFnZSBpcyBhY3R1YWxseSBpbml0aWFsaXplZC4gV2UndmUgbGlrZWx5IGVzdGFibGlzaGVkIHRoZSBiYXNpYyBzdHJ1Y3R1cmUgYW5kIGFsbG9jYXRpb24gYWxyZWFkeSwgbm93IHdlJ3JlIGdldHRpbmcgZG93biB0byB0aGUgbml0dHktZ3JpdHR5IG9mIGRhdGEgcG9wdWxhdGlvbiBvciBzZXR1cC4gSSdtIGV4cGVjdGluZyB0byBzZWUgb3BlcmF0aW9ucyByZWxhdGVkIHRvIHNldHRpbmcgdXAgcGFnZSB0YWJsZXMsIHBvdGVudGlhbGx5IGRlYWxpbmcgd2l0aCB2aXJ0dWFsIGFkZHJlc3NlcyBpZiB0aGlzIGlzIGEgaHlwZXJ2aXNvciBjb250ZXh0LCBvciBtYXliZSBpbml0aWFsIG1lbW9yeSBjbGVhciBvciBpbml0aWFsaXphdGlvbiBvZiBzcGVjaWZpYyBoYXJkd2FyZS1yZWxhdGVkIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIGJhY2tpbmcgcGFnZS4gVGhlcmUgaXMgbGlrZWx5IHRvIGJlIGEgbmVlZCB0byB2YWxpZGF0ZSB0aGF0IHRoZSBiYWNraW5nIHBhZ2UgZXhpc3RzLCB0aGF0IHRoZSBtZW1vcnkgcmVnaW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIGJhY2tpbmcgcGFnZSBhcmUgdmFsaWQsIGFuZCB0byBkZXRlcm1pbmUgdGhlIHBhZ2Ugc2l6ZS4gSSdsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgdW5pdCBhbmQgaG93IGl0IGhhbmRsZXMgdGhlIHZpcnR1YWwtdG8tcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbi4gVGhlIGludGVyYWN0aW9uIHdpdGggYW55IGhhcmR3YXJlIHN0cnVjdHVyZXMgb3Igb3RoZXIgcmVsYXRlZCBrZXJuZWwgZGF0YSB3b3VsZCBhbHNvIGJlIHNvbWV0aGluZyB0byB3YXRjaC4gSSdtIGFudGljaXBhdGluZyBzb21lIGxldmVsIG9mIGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIHRvIGVuc3VyZSB0aHJlYWQtc2FmZXR5LCBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIGluIHRoZSBrZXJuZWwuIEZpbmFsbHksIEknbSBleHBlY3Rpbmcgc29tZSBlcnJvciBjaGVja2luZyBvciBhc3NlcnRpb25zIHRvIHZhbGlkYXRlIHRoZSByZXN1bHQgb2YgdGhlc2Ugc2V0dXAgb3BlcmF0aW9ucy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY5NSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTM6MzEuNzE1OTkyNDQxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NjA6XFx0XFx0XFx0ICAgIEFWSUNfUEhZU0lDQUxfSURfRU5UUllfVkFMSURfTUFTSztcXG4gNDYxOlxcdFxcdHN2bS1cXHUwMDNlYXZpY19waHlzaWNhbF9pZF9lbnRyeSA9IG5ld19lbnRyeTtcXG4gNDYyOlxcdFxcbiA0NjM6XFx0XFx0LypcXG4gNDY0OlxcdFxcdCAqIEluaXRpYWxpemUgdGhlIHJlYWwgdGFibGUsIGFzIHZDUFVzIG11c3QgaGF2ZSBhIHZhbGlkIGVudHJ5IGluIG9yZGVyXFxuIDQ2NTpcXHRcXHQgKiBmb3IgYnJvYWRjYXN0IElQSXMgdG8gZnVuY3Rpb24gY29ycmVjdGx5IChicm9hZGNhc3QgSVBJcyBpZ25vcmVcXG4gNDY2OlxcdFxcdCAqIGludmFsaWQgZW50cmllcywgaS5lLiBhcmVuJ3QgZ3VhcmFudGVlZCB0byBnZW5lcmF0ZSBhIFZNLUV4aXQpLlxcbiA0Njc6XFx0XFx0ICovXFxuIDQ2ODpcXHRcXHRXUklURV9PTkNFKGt2bV9zdm0tXFx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGVbaWRdLCBuZXdfZW50cnkpO1xcbiA0Njk6XFx0XFxuIDQ3MDpcXHRcXHRyZXR1cm4gMDtcXG4gNDcxOlxcdH1cXG4gNDcyOlxcdFxcbiA0NzM6XFx0dm9pZCBhdmljX3JpbmdfZG9vcmJlbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiA0NzQ6XFx0e1xcbiA0NzU6XFx0XFx0LypcXG4gNDc2OlxcdFxcdCAqIE5vdGUsIHRoZSB2Q1BVIGNvdWxkIGdldCBtaWdyYXRlZCB0byBhIGRpZmZlcmVudCBwQ1BVIGF0IGFueSBwb2ludCxcXG4gNDc3OlxcdFxcdCAqIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBzaWduYWxsaW5nIHRoZSB3cm9uZy9wcmV2aW91cyBwQ1BVLiAgQnV0IGlmXFxuIDQ3ODpcXHRcXHQgKiB0aGF0IGhhcHBlbnMgdGhlIHZDUFUgaXMgZ3VhcmFudGVlZCB0byBkbyBhIFZNUlVOIChhZnRlciBiZWluZ1xcbiA0Nzk6XFx0XFx0ICogbWlncmF0ZWQpIGFuZCB0aHVzIHdpbGwgcHJvY2VzcyBwZW5kaW5nIGludGVycnVwdHMsIGkuZS4gYSBkb29yYmVsbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1MzozMS43MTYxMDQ2NDFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDg1NDgzMjM4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQXZpYyBQaHlzaWNhbCBJRCBUYWJsZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiByZXZpZXdpbmcgdGhpcyBwYXRjaCB0aGF0IGFkZHJlc3NlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5IHdpdGhpbiB0aGUgQU1EIFNWTSBBVklDIGltcGxlbWVudGF0aW9uLiBUaGUgaXNzdWUsIGFzIEkgdW5kZXJzdGFuZCBpdCwgc3RlbXMgZnJvbSB0aGUgYGF2aWNfaW5pdF9iYWNraW5nX3BhZ2VgIGZ1bmN0aW9uIHNldHRpbmcgYW4gZW50cnkgaW4gdGhlIGBrdm1fc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGVgIHRvIHBvaW50IHRvIGEgYmFja2luZyBwYWdlLiBDcml0aWNhbGx5LCBwcmlvciB0byB0aGlzIHBhdGNoLCB0aGVzZSBlbnRyaWVzIHdlcmVuJ3QgYmVpbmcgY2xlYW5lZCB1cCB3aGVuIGEgdkNQVSB3YXMgZWl0aGVyIGRlc3Ryb3llZCBvciBmYWlsZWQgZHVyaW5nIGNyZWF0aW9uLiBUaGlzIGxlZnQgYSBkYW5nbGluZyBwb2ludGVyLCBhIHN0YWxlIGVudHJ5IGluIHRoZSBgYXZpY19waHlzaWNhbF9pZF90YWJsZWAsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gbWVtb3J5IGNvcnJ1cHRpb24gaWYgYWNjZXNzZWQgbGF0ZXIuXG5cblRoZSBwYXRjaCdzIHNvbHV0aW9uIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogSXQgaW50cm9kdWNlcyBgYXZpY192Y3B1X2ZyZWVgIHRvIHplcm8gb3V0IHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHRoZSBgYXZpY19waHlzaWNhbF9pZF90YWJsZWAgdXNpbmcgYFdSSVRFX09OQ0VgLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZW4gY2FsbGVkIGJvdGggb24gZXJyb3IgcGF0aHMgd2l0aGluIGBzdm1fdmNwdV9jcmVhdGVgICphbmQqIGR1cmluZyBgc3ZtX3ZjcHVfZnJlZWAuIEVzc2VudGlhbGx5LCB0aGV5J3JlIGVuc3VyaW5nIHRoYXQgdGhlIHRhYmxlIGlzIGFsd2F5cyBjbGVhbmVkIHVwIHByb3Blcmx5LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdkNQVSBjcmVhdGlvbiBzdWNjZWVkcyBvciBmYWlscy5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyBjaGFuZ2UgcmVxdWlyZSBLTVNBTiBhbmFseXNpcz8gTGV0J3MgYnJlYWsgaXQgZG93bi4gRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gSXQgKnplcm9lcyogb3V0IGFuIGV4aXN0aW5nIHRhYmxlIGVudHJ5LiBEb2VzIGl0IGludm9sdmUgYW55IG5ldyBhbGxvY2F0aW9ucyBvciBwYWRkaW5nPyBOby4gVGhlIGNvcmUgb2YgdGhlIGJ1ZyBpcyBhYm91dCAqbGlmZWN5Y2xlIG1hbmFnZW1lbnQqIGFuZCBwcmV2ZW50aW5nIGEgc3RhbGUgcG9pbnRlciwgd2hpY2ggaXMgZmlybWx5IHdpdGhpbiB0aGUgS0FTQU4gZG9tYWluLlxuXG5HaXZlbiB0aGF0IHRoZSByb290IGNhdXNlIGlzIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8sIHdoaWNoIGlzIGEgY2xhc3NpYyBtZW1vcnkgY29ycnVwdGlvbiBidWcsIEtBU0FOIGlzIHRoZSBhcHByb3ByaWF0ZSB0b29sLiBXZSBoYXZlIGEgcnVsZSB0aGF0IHN0YXRlczogXCJUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLCBMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlwiIEtNU0FOIGlzIG1vcmUgcmVzb3VyY2UtaW50ZW5zaXZlLCBhbmQgd2Ugc2hvdWxkIG9ubHkgdXRpbGl6ZSBpdCBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggKnVuaW5pdGlhbGl6ZWQgbWVtb3J5KiByaXNrcyB0aGF0IEtBU0FOIHdvdWxkbid0IGNhdGNoLiBUaGlzIGlzbid0IHRoZSBjYXNlIGhlcmUuXG5cblNvLCBJJ20gY29uZmlkZW50IGluIGNhbGxpbmcgYHNldC1yZXN1bHRzYC4gVGhpcyBpcyBhIEtBU0FOLXJlbGV2YW50IGZpeC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQwMCwiT3V0cHV0VG9rZW5zIjoxNzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1MzozNi41NzA5Mzg4ODJaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYGF2aWNfdmNwdV9mcmVlKClgIHRvIGNsZWFyIChgV1JJVEVfT05DRSguLi4sIDApYCkgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gYGt2bV9zdm0tXFx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGVgIHdoZW4gYSB2Q1BVIGlzIGZyZWVkIG9yIHdoZW4gdkNQVSBjcmVhdGlvbiBmYWlscyBhZnRlciBBVklDIGluaXRpYWxpemF0aW9uLiBUaGlzIHByZXZlbnRzIHN0YWxlL2RhbmdsaW5nIHJlZmVyZW5jZXMgdG8gZnJlZWQgYmFja2luZyBwYWdlcyBpbiB0aGUgcGh5c2ljYWwgSUQgdGFibGUuXFxuXFxuVGhlIGNoYW5nZXMgb25seSB3cml0ZSBhIHplcm8gdmFsdWUgdG8gYW4gZXhpc3RpbmcgdGFibGUgYW5kIGRvIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgcmVhZCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYWx0ZXIgYm91bmRzIGNoZWNrcyBmb3IgdW5pbml0aWFsaXplZCBidWZmZXJzLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuIE1lbW9yeSBsaWZlY3ljbGUvZGFuZ2xpbmcgcG9pbnRlciBpc3N1ZXMgaW4gdGhpcyBjb250ZXh0IGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL21lbW9yeSBjb3JydXB0aW9uIGRldGVjdG9ycyByYXRoZXIgdGhhbiBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBhdmljX3ZjcHVfZnJlZSgpYCB0byBjbGVhciAoYFdSSVRFX09OQ0UoLi4uLCAwKWApIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIGBrdm1fc3ZtLVxcdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlYCB3aGVuIGEgdkNQVSBpcyBmcmVlZCBvciB3aGVuIHZDUFUgY3JlYXRpb24gZmFpbHMgYWZ0ZXIgQVZJQyBpbml0aWFsaXphdGlvbi4gVGhpcyBwcmV2ZW50cyBzdGFsZS9kYW5nbGluZyByZWZlcmVuY2VzIHRvIGZyZWVkIGJhY2tpbmcgcGFnZXMgaW4gdGhlIHBoeXNpY2FsIElEIHRhYmxlLlxcblxcblRoZSBjaGFuZ2VzIG9ubHkgd3JpdGUgYSB6ZXJvIHZhbHVlIHRvIGFuIGV4aXN0aW5nIHRhYmxlIGFuZCBkbyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIHJlYWQgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsdGVyIGJvdW5kcyBjaGVja3MgZm9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgb3IgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBNZW1vcnkgbGlmZWN5Y2xlL2RhbmdsaW5nIHBvaW50ZXIgaXNzdWVzIGluIHRoaXMgY29udGV4dCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9tZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RvcnMgcmF0aGVyIHRoYW4gS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6vsp2[1] Phase: Succeeded StartedAt: 2026-09-04 06:53:47 +0000 UTC FinishedAt: 2026-09-04 06:53:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsp2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 06:53:47 +0000 UTC FinishedAt: 2026-09-04 06:53:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsp2[2] Phase: Succeeded StartedAt: 2026-09-04 06:53:47 +0000 UTC FinishedAt: 2026-09-04 08:04:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 06:53:47 +0000 UTC FinishedAt: 2026-09-04 08:04:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 06:53:47 +0000 UTC FinishedAt: 2026-09-04 06:53:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 06:53:47 +0000 UTC FinishedAt: 2026-09-04 06:53:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6vsp2/series-workflow6vsp2-convert-artifact-3617691244/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 06:53:57 +0000 UTC FinishedAt: 2026-09-04 07:09:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 06:53:57 +0000 UTC FinishedAt: 2026-09-04 07:09:36 +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:*6756eee0-17ba-45e1-a2ad-ea7ea3fbf4ec,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-workflow6vsp2/series-workflow6vsp2-convert-artifact-3617691244/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": "286ed93a-c6e1-495c-ba05-12b6697b222b", "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-workflow6vsp2/series-workflow6vsp2-build-action-2814312602/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 06:53:57 +0000 UTC FinishedAt: 2026-09-04 07:09:26 +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:*6756eee0-17ba-45e1-a2ad-ea7ea3fbf4ec,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-workflow6vsp2/series-workflow6vsp2-convert-artifact-3617691244/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": "286ed93a-c6e1-495c-ba05-12b6697b222b", "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-workflow6vsp2/series-workflow6vsp2-build-action-2814312602/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 07:09:36 +0000 UTC FinishedAt: 2026-09-04 07:09:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 07:09:36 +0000 UTC FinishedAt: 2026-09-04 07:09:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 07:09:36 +0000 UTC FinishedAt: 2026-09-04 07:09:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 07:09:36 +0000 UTC FinishedAt: 2026-09-04 07:09:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6vsp2/series-workflow6vsp2-convert-artifact-851247403/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 07:09:46 +0000 UTC FinishedAt: 2026-09-04 07:11:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 07:09:46 +0000 UTC FinishedAt: 2026-09-04 07:11:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*286ed93a-c6e1-495c-ba05-12b6697b222b,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-workflow6vsp2/series-workflow6vsp2-build-action-2814312602/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-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 07:11:39 +0000 UTC FinishedAt: 2026-09-04 07:11:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 07:11:39 +0000 UTC FinishedAt: 2026-09-04 07:11:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 07:11:39 +0000 UTC FinishedAt: 2026-09-04 07:27:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 07:11:39 +0000 UTC FinishedAt: 2026-09-04 07:27:49 +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:*6756eee0-17ba-45e1-a2ad-ea7ea3fbf4ec,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-workflow6vsp2/series-workflow6vsp2-convert-artifact-851247403/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": "3d009afe-9fb2-44bb-9678-b937b112917c", "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-workflow6vsp2/series-workflow6vsp2-build-action-1403433295/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 07:11:39 +0000 UTC FinishedAt: 2026-09-04 07:27:39 +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:*6756eee0-17ba-45e1-a2ad-ea7ea3fbf4ec,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-workflow6vsp2/series-workflow6vsp2-convert-artifact-851247403/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": "3d009afe-9fb2-44bb-9678-b937b112917c", "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-workflow6vsp2/series-workflow6vsp2-build-action-1403433295/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 07:27:49 +0000 UTC FinishedAt: 2026-09-04 07:27:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 07:27:49 +0000 UTC FinishedAt: 2026-09-04 07:27:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 07:27:49 +0000 UTC FinishedAt: 2026-09-04 07:29:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 07:27:49 +0000 UTC FinishedAt: 2026-09-04 07:29:37 +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:*3d009afe-9fb2-44bb-9678-b937b112917c,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-workflow6vsp2/series-workflow6vsp2-build-action-1403433295/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-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 07:29:47 +0000 UTC FinishedAt: 2026-09-04 08:04:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 07:29:47 +0000 UTC FinishedAt: 2026-09-04 08:04:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"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:*286ed93a-c6e1-495c-ba05-12b6697b222b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3d009afe-9fb2-44bb-9678-b937b112917c,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-workflow6vsp2/series-workflow6vsp2-build-action-2814312602/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-workflow6vsp2/series-workflow6vsp2-build-action-1403433295/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 07:29:47 +0000 UTC FinishedAt: 2026-09-04 07:29:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 07:29:47 +0000 UTC FinishedAt: 2026-09-04 07:29:51 +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":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"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-workflow6vsp2/series-workflow6vsp2-convert-artifact-32846660/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 07:29:47 +0000 UTC FinishedAt: 2026-09-04 07:29:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 07:29:47 +0000 UTC FinishedAt: 2026-09-04 07:29:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 07:29:47 +0000 UTC FinishedAt: 2026-09-04 07:29:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 07:29:57 +0000 UTC FinishedAt: 2026-09-04 08:04:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsp2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_vcpu_free","svm_vcpu_create","svm_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"2d200572-88c8-4b7e-8932-2e9b9ccffe60","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 07:29:57 +0000 UTC FinishedAt: 2026-09-04 08:03:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*286ed93a-c6e1-495c-ba05-12b6697b222b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3d009afe-9fb2-44bb-9678-b937b112917c,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-workflow6vsp2/series-workflow6vsp2-build-action-2814312602/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-workflow6vsp2/series-workflow6vsp2-build-action-1403433295/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-workflow6vsp2/series-workflow6vsp2-convert-artifact-32846660/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,}