Name: series-workflows6h4f Phase: Succeeded StartedAt: 2026-09-08 19:53:00 +0000 UTC FinishedAt: 2026-09-09 00:20:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflows6h4f[0] Phase: Succeeded StartedAt: 2026-09-08 19:53:00 +0000 UTC FinishedAt: 2026-09-08 20:40:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflows6h4f[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 19:53:00 +0000 UTC FinishedAt: 2026-09-08 20:40:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "d4b7fb647204f0c81dfeae2d1a708e4d858e0c94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "d4b7fb647204f0c81dfeae2d1a708e4d858e0c94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD" ], "series_id": "05f6c158-dd5a-401c-b654-040d8eabe787" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_set_cr8", "kvm_arch_vcpu_ioctl_set_sregs", "kvm_vcpu_ioctl_x86_set_sregs2" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDIwOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9zZXRfY3I4JiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzJiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfc3JlZ3MyJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBpbnB1dCB2YWxpZGF0aW9uIGZvciBDUjggcmVnaXN0ZXIgdmFsdWVzIGluIEtWTSAoYGt2bV9pc192YWxpZF9jcjhgKSwgZW5zdXJpbmcgdGhhdCByZXNlcnZlZCBiaXRzICg2Mzo0KSBpbiBDUjggY2Fubm90IGJlIHNldCB2aWEgYEtWTV9TRVRfU1JFR1NgIChjaGVja2VkIGluIGBrdm1faXNfdmFsaWRfc3JlZ3NgKSBvciBga3ZtX3NldF9jcjhgLCBhbG9uZyB3aXRoIGNvcnJlc3BvbmRpbmcgc2VsZnRlc3QgdXBkYXRlcy5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlIG9ubHkgcGVyZm9ybXMgYml0d2lzZSB2YWxpZGF0aW9uIG9uIGlucHV0IHZhbHVlcyAoYHNyZWdzLVx1MDAzZWNyOGAgLyBgY3I4YCkgcGFzc2VkIGludG8gS1ZNIGZyb20gdXNlcnNwYWNlIG9yIGNhbGxlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnksIG5vciBkb2VzIGl0IGFsdGVyIGFueSBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29weSBvcGVyYXRpb25zIChpbmZvLWxlYWtzKSBvciBzdHJ1Y3R1cmUgcGFkZGluZy5cbi0gS0FTQU4vU3RhbmRhcmQgdGVzdGluZyBhcHBsaWNhYmlsaXR5OiBTdGFuZGFyZCBmdW5jdGlvbmFsIHRlc3RpbmcgYW5kIEtWTSBzZWxmdGVzdHMgYWRlcXVhdGVseSB2ZXJpZnkgdGhpcyBpbnB1dCB2YWxpZGF0aW9uIGxvZ2ljLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggcG9zZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gZm9yIENSOCByZXNlcnZlZCBiaXRzIGluIEtWTSB3aGVuIHNldHRpbmcgc3BlY2lhbCByZWdpc3RlcnMgKHNyZWdzIC8gc3JlZ3MyKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzIGluIHg4NiBLVk0gYWNjZXNzaWJsZSB2aWEgdXNlci1zcGFjZSBpb2N0bHMgKEtWTV9TRVRfU1JFR1MsIEtWTV9TRVRfU1JFR1MyKSBhbmQgQ1I4IGVtdWxhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM5MmVkNmIwMzBkZGNlNjM0YmFjNGMyMmQwNmY2ZTk4NjNkYzI4NGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDIwOjM5OjM1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9yZWdzLmMgYi9hcmNoL3g4Ni9rdm0vcmVncy5jXG5pbmRleCA4ZjY2NDM4OTg5ZTQ3Li5mYWQzMWI1OWM2MjJmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3JlZ3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3JlZ3MuY1xuQEAgLTQ0MCw5ICYjNDM7NDQwLDE0IEBAIGludCBrdm1fc2V0X2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3NldF9jcjQpO1xuIFxuJiM0MztzdGF0aWMgYm9vbCBrdm1faXNfdmFsaWRfY3I4KHVuc2lnbmVkIGxvbmcgY3I4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICEoY3I4IFx1MDAyNiBDUjhfUkVTRVJWRURfQklUUyk7XG4mIzQzO31cbiYjNDM7XG4gaW50IGt2bV9zZXRfY3I4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjgpXG4ge1xuLVx0aWYgKGNyOCBcdTAwMjYgQ1I4X1JFU0VSVkVEX0JJVFMpXG4mIzQzO1x0aWYgKCFrdm1faXNfdmFsaWRfY3I4KGNyOCkpXG4gXHRcdHJldHVybiAxO1xuIFx0aWYgKGxhcGljX2luX2tlcm5lbCh2Y3B1KSlcbiBcdFx0a3ZtX2xhcGljX3NldF90cHIodmNwdSwgY3I4KTtcbkBAIC01NjUsNiAmIzQzOzU3MCw3IEBAIHN0YXRpYyBib29sIGt2bV9pc192YWxpZF9zcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzKVxuIFxuIFx0cmV0dXJuIGt2bV9pc192YWxpZF9jcjQodmNwdSwgc3JlZ3MtXHUwMDNlY3I0KSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICBrdm1faXNfdmFsaWRfY3IwKHZjcHUsIHNyZWdzLVx1MDAzZWNyMCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIGt2bV9pc192YWxpZF9jcjgoc3JlZ3MtXHUwMDNlY3I4KSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICBrdm1fdmFsaWRfZWZlcih2Y3B1LCBzcmVncy1cdTAwM2VlZmVyKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jXG5pbmRleCA2MDMyMjZmZmU0Mzc0Li40ZTdjMzUxNzk0MzgzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmNcbkBAIC0xMzUsNiAmIzQzOzEzNSwxOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NyX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgY3I0KVxuIFx0LyogTlcgd2l0aG91dCBDRCBpcyBpbGxlZ2FsLCBhcyBpcyBQRyB3aXRob3V0IFBFLiAqL1xuIFx0VEVTVF9JTlZBTElEX1NSRUdfQklUKHZjcHUsIGNyMCwgc3JlZ3MsIFg4Nl9DUjBfTlcpO1xuIFx0VEVTVF9JTlZBTElEX1NSRUdfQklUKHZjcHUsIGNyMCwgc3JlZ3MsIFg4Nl9DUjBfUEcpO1xuJiM0MztcbiYjNDM7XHQvKiBDUjggYml0cyAzOjAgYXJlIHdyaXRhYmxlOyBiaXRzIDYzOjQgYXJlIHJlc2VydmVkLiAqL1xuJiM0MztcdHZjcHVfc3JlZ3NfZ2V0KHZjcHUsIFx1MDAyNnNyZWdzKTtcbiYjNDM7XHRzcmVncy5jcjggPSAweGY7XG4mIzQzO1x0cmMgPSBfdmNwdV9zcmVnc19zZXQodmNwdSwgXHUwMDI2c3JlZ3MpO1xuJiM0MztcdFRFU1RfQVNTRVJUKCFyYywgXCYjMzQ7RmFpbGVkIHRvIHNldCB2YWxpZCBDUjggdmFsdWUgMHhmXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0dmNwdV9zcmVnc19nZXQodmNwdSwgXHUwMDI2c3JlZ3MpO1xuJiM0MztcdFRFU1RfQVNTRVJUX0VRKHNyZWdzLmNyOCwgMHhmKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gNDsgaSBcdTAwM2MgNjQ7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0VEVTVF9JTlZBTElEX1NSRUdfQklUKHZjcHUsIGNyOCwgc3JlZ3MsIEJJVF9VTEwoaSkpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0ZXN0X2VmZXJfYml0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBlZmVyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIwOjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9zZXRfY3I4JiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzJiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfc3JlZ3MyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgQ1I4IHJlc2VydmVkIGJpdHMgaW4gS1ZNIHdoZW4gc2V0dGluZyBzcGVjaWFsIHJlZ2lzdGVycyAoc3JlZ3MgLyBzcmVnczIpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaW4geDg2IEtWTSBhY2Nlc3NpYmxlIHZpYSB1c2VyLXNwYWNlIGlvY3RscyAoS1ZNX1NFVF9TUkVHUywgS1ZNX1NFVF9TUkVHUzIpIGFuZCBDUjggZW11bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzkyZWQ2YjAzMGRkY2U2MzRiYWM0YzIyZDA2ZjZlOTg2M2RjMjg0YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMjA6Mzk6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcmVncy5jIGIvYXJjaC94ODYva3ZtL3JlZ3MuYwppbmRleCA4ZjY2NDM4OTg5ZTQ3Li5mYWQzMWI1OWM2MjJmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vcmVncy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9yZWdzLmMKQEAgLTQ0MCw5ICYjNDM7NDQwLDE0IEBAIGludCBrdm1fc2V0X2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KQogfQogRVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9zZXRfY3I0KTsKIAomIzQzO3N0YXRpYyBib29sIGt2bV9pc192YWxpZF9jcjgodW5zaWduZWQgbG9uZyBjcjgpCiYjNDM7ewomIzQzOwlyZXR1cm4gIShjcjggJmFtcDsgQ1I4X1JFU0VSVkVEX0JJVFMpOwomIzQzO30KJiM0MzsKIGludCBrdm1fc2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I4KQogewotCWlmIChjcjggJmFtcDsgQ1I4X1JFU0VSVkVEX0JJVFMpCiYjNDM7CWlmICgha3ZtX2lzX3ZhbGlkX2NyOChjcjgpKQogCQlyZXR1cm4gMTsKIAlpZiAobGFwaWNfaW5fa2VybmVsKHZjcHUpKQogCQlrdm1fbGFwaWNfc2V0X3Rwcih2Y3B1LCBjcjgpOwpAQCAtNTY1LDYgJiM0Mzs1NzAsNyBAQCBzdGF0aWMgYm9vbCBrdm1faXNfdmFsaWRfc3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncykKIAogCXJldHVybiBrdm1faXNfdmFsaWRfY3I0KHZjcHUsIHNyZWdzLSZndDtjcjQpICZhbXA7JmFtcDsKIAkgICAgICAga3ZtX2lzX3ZhbGlkX2NyMCh2Y3B1LCBzcmVncy0mZ3Q7Y3IwKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBrdm1faXNfdmFsaWRfY3I4KHNyZWdzLSZndDtjcjgpICZhbXA7JmFtcDsKIAkgICAgICAga3ZtX3ZhbGlkX2VmZXIodmNwdSwgc3JlZ3MtJmd0O2VmZXIpOwogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmMKaW5kZXggNjAzMjI2ZmZlNDM3NC4uNGU3YzM1MTc5NDM4MyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V0X3NyZWdzX3Rlc3QuYwpAQCAtMTM1LDYgJiM0MzsxMzUsMTggQEAgc3RhdGljIHZvaWQgdGVzdF9jcl9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGNyNCkKIAkvKiBOVyB3aXRob3V0IENEIGlzIGlsbGVnYWwsIGFzIGlzIFBHIHdpdGhvdXQgUEUuICovCiAJVEVTVF9JTlZBTElEX1NSRUdfQklUKHZjcHUsIGNyMCwgc3JlZ3MsIFg4Nl9DUjBfTlcpOwogCVRFU1RfSU5WQUxJRF9TUkVHX0JJVCh2Y3B1LCBjcjAsIHNyZWdzLCBYODZfQ1IwX1BHKTsKJiM0MzsKJiM0MzsJLyogQ1I4IGJpdHMgMzowIGFyZSB3cml0YWJsZTsgYml0cyA2Mzo0IGFyZSByZXNlcnZlZC4gKi8KJiM0MzsJdmNwdV9zcmVnc19nZXQodmNwdSwgJmFtcDtzcmVncyk7CiYjNDM7CXNyZWdzLmNyOCA9IDB4ZjsKJiM0MzsJcmMgPSBfdmNwdV9zcmVnc19zZXQodmNwdSwgJmFtcDtzcmVncyk7CiYjNDM7CVRFU1RfQVNTRVJUKCFyYywgJiMzNDtGYWlsZWQgdG8gc2V0IHZhbGlkIENSOCB2YWx1ZSAweGYmIzM0Oyk7CiYjNDM7CiYjNDM7CXZjcHVfc3JlZ3NfZ2V0KHZjcHUsICZhbXA7c3JlZ3MpOwomIzQzOwlURVNUX0FTU0VSVF9FUShzcmVncy5jcjgsIDB4Zik7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDQ7IGkgJmx0OyA2NDsgaSYjNDM7JiM0MzspCiYjNDM7CQlURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3I4LCBzcmVncywgQklUX1VMTChpKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHRlc3RfZWZlcl9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGVmZXIpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1ODcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoaXMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGlzIGV2ZW4gKndvcnRoKiBmdXp6aW5nLiBXZSBoYXZlIHR3byBtYWluIGZpbGVzIGludm9sdmVkOiBgYXJjaC94ODYva3ZtL3JlZ3MuY2AgYW5kIGEgc2VsZi10ZXN0IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmNgLiBUaGUgY29yZSBjaGFuZ2VzIHNlZW0gdG8gYmUgY2VudGVyZWQgYXJvdW5kIENSOCB2YWxpZGF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIHRoaXMgYGt2bV9pc192YWxpZF9jcjhgIGZ1bmN0aW9uLCB3aGljaCBjaGVja3MgaWYgY2VydGFpbiBiaXRzIGFyZSByZXNlcnZlZC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBndWFyZGluZyBhZ2FpbnN0IHBvdGVudGlhbGx5IHVuc2FmZSBDUjggdmFsdWVzIGluIHRoZSBLVk0gY29udGV4dC4KClNwZWNpZmljYWxseSwgYGt2bV9pc192YWxpZF9jcjhgIHNlZW1zIHRvIGNoZWNrIGlmIGBjcjggJmFtcDsgQ1I4X1JFU0VSVkVEX0JJVFNgIGlzIG5vdCBlcXVhbCB0byAwLiBJdCYjMzk7cyB1c2VkIGluIGBrdm1fc2V0X2NyOGAgYW5kIGFsc28gY2hlY2tlZCBhcyBwYXJ0IG9mIGBrdm1faXNfdmFsaWRfc3JlZ3NgLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgY2hhbmdlcyB0byBjb250cm9sIHJlZ2lzdGVycyBhcmUgdXN1YWxseSBwcmV0dHkgc2Vuc2l0aXZlLCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBhbiBpbnZhbGlkIENSOCDigJMgaXMgaXQganVzdCBhIFZNIGV4aXQsIGEgY3Jhc2gsIG9yIHNvbWV0aGluZyBtb3JlIHN1YnRsZSBsaWtlIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eT8KCk5vdywgbGV0JiMzOTtzIGRpZyBpbnRvIGBhcmNoL3g4Ni9rdm0vcmVncy5jYCBhbmQgc2VlIHRoZSBjb250ZXh0IGFyb3VuZCB0aGVzZSBjaGFuZ2VzIHRvIGdldCBhIGJldHRlciBmZWVsIGZvciB0aGUgYXR0YWNrIHN1cmZhY2UuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGlkZW50aWZ5IGZvY3VzIHN5bWJvbHMuIEkgd2lsbCBsb29rIGF0IGBrdm1fc2V0X2NyOGAgYW5kIGBrdm1faXNfdmFsaWRfc3JlZ3NgLiAKCkkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBzZWxmLXRlc3QuIERvZXMgaXQgcHJvdmlkZSB1c2VmdWwgdGVzdCBjYXNlcyB0byBzdGFydCB3aXRoLCBvciBpcyBpdCB0b28gbmFycm93PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNlbGYtdGVzdCB2YWxpZGF0ZXMgdGhlIGNoYW5nZXMgdG8gZW5zdXJlIHRoYXQgaXQgaGFzIGdvb2QgY292ZXJhZ2UgZm9yIHRoZSB1cGRhdGVkIGBzcmVnc2AuCgpCYXNlZCBvbiB3aGF0IEkgZmluZCwgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBmdXp6aW5nIGNvbmZpZ3VyYXRpb25zLiBUaGlzIG1lYW5zIGlkZW50aWZ5aW5nIGFueSBkZXBlbmRlbmNpZXMsIGVkZ2UgY2FzZXMsIGFuZCBwb3RlbnRpYWwgdGFyZ2V0cyBmb3IgZnV6emluZy4gSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCBob3cgdG8gbWFuaXB1bGF0ZSB0aGUgaW5wdXRzIHRvIHRyaWdnZXIgdGhlc2UgY2hlY2tzIGFuZCBpZiBJIHNob3VsZCBmb2N1cyBvbiB0aGUgcmVnaXN0ZXIgd3JpdGVzIHRocm91Z2ggdGhlIGlvY3RsIHBhdGhzIG9yIGVtdWxhdGlvbiBwYXRocy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9yZWdzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQzNTpcdFx0a3ZtX3g4Nl9jYWxsKHNldF9jcjQpKHZjcHUsIGNyNCk7XG4gNDM2Olx0XG4gNDM3Olx0XHRrdm1fcG9zdF9zZXRfY3I0KHZjcHUsIG9sZF9jcjQsIGNyNCk7XG4gNDM4Olx0XG4gNDM5Olx0XHRyZXR1cm4gMDtcbiA0NDA6XHR9XG4gNDQxOlx0RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9zZXRfY3I0KTtcbiA0NDI6XHRcbiA0NDM6XHRzdGF0aWMgYm9vbCBrdm1faXNfdmFsaWRfY3I4KHVuc2lnbmVkIGxvbmcgY3I4KVxuIDQ0NDpcdHtcbiA0NDU6XHRcdHJldHVybiAhKGNyOCBcdTAwMjYgQ1I4X1JFU0VSVkVEX0JJVFMpO1xuIDQ0NjpcdH1cbiA0NDc6XHRcbiA0NDg6XHRpbnQga3ZtX3NldF9jcjgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyOClcbiA0NDk6XHR7XG4gNDUwOlx0XHRpZiAoIWt2bV9pc192YWxpZF9jcjgoY3I4KSlcbiA0NTE6XHRcdFx0cmV0dXJuIDE7XG4gNDUyOlx0XHRpZiAobGFwaWNfaW5fa2VybmVsKHZjcHUpKVxuIDQ1MzpcdFx0XHRrdm1fbGFwaWNfc2V0X3Rwcih2Y3B1LCBjcjgpO1xuIDQ1NDpcdFx0ZWxzZVxuIDQ1NTpcdFx0XHR2Y3B1LVx1MDAzZWFyY2guY3I4ID0gY3I4O1xuIDQ1NjpcdFx0cmV0dXJuIDA7XG4gNDU3Olx0fVxuIDQ1ODpcdEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2V0X2NyOCk7XG4gNDU5Olx0XG4gNDYwOlx0dW5zaWduZWQgbG9uZyBrdm1fZ2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gNDYxOlx0e1xuIDQ2MjpcdFx0aWYgKGxhcGljX2luX2tlcm5lbCh2Y3B1KSlcbiA0NjM6XHRcdFx0cmV0dXJuIGt2bV9sYXBpY19nZXRfY3I4KHZjcHUpO1xuIDQ2NDpcdFx0ZWxzZVxuIDQ2NTpcdFx0XHRyZXR1cm4gdmNwdS1cdTAwM2VhcmNoLmNyODtcbiA0NjY6XHR9XG4gNDY3Olx0RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9nZXRfY3I4KTtcbiA0Njg6XHRcbiA0Njk6XHRzdGF0aWMgdm9pZCBfX2dldF9zcmVnc19jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncylcbiA0NzA6XHR7XG4gNDcxOlx0XHRzdHJ1Y3QgZGVzY19wdHIgZHQ7XG4gNDcyOlx0XG4gNDczOlx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLmd1ZXN0X3N0YXRlX3Byb3RlY3RlZClcbiA0NzQ6XHRcdFx0Z290byBza2lwX3Byb3RlY3RlZF9yZWdzO1xuIDQ3NTpcdFxuIDQ3NjpcdFx0a3ZtX2hhbmRsZV9leGNlcHRpb25fcGF5bG9hZF9xdWlyayh2Y3B1KTtcbiA0Nzc6XHRcbiA0Nzg6XHRcdGt2bV9nZXRfc2VnbWVudCh2Y3B1LCBcdTAwMjZzcmVncy1cdTAwM2VjcywgVkNQVV9TUkVHX0NTKTtcbiA0Nzk6XHRcdGt2bV9nZXRfc2VnbWVudCh2Y3B1LCBcdTAwMjZzcmVncy1cdTAwM2VkcywgVkNQVV9TUkVHX0RTKTtcbiA0ODA6XHRcdGt2bV9nZXRfc2VnbWVudCh2Y3B1LCBcdTAwMjZzcmVncy1cdTAwM2VlcywgVkNQVV9TUkVHX0VTKTtcbiA0ODE6XHRcdGt2bV9nZXRfc2VnbWVudCh2Y3B1LCBcdTAwMjZzcmVncy1cdTAwM2VmcywgVkNQVV9TUkVHX0ZTKTtcbiA0ODI6XHRcdGt2bV9nZXRfc2VnbWVudCh2Y3B1LCBcdTAwMjZzcmVncy1cdTAwM2VncywgVkNQVV9TUkVHX0dTKTtcbiA0ODM6XHRcdGt2bV9nZXRfc2VnbWVudCh2Y3B1LCBcdTAwMjZzcmVncy1cdTAwM2VzcywgVkNQVV9TUkVHX1NTKTtcbiA0ODQ6XHRcbiA0ODU6XHRcdGt2bV9nZXRfc2VnbWVudCh2Y3B1LCBcdTAwMjZzcmVncy1cdTAwM2V0ciwgVkNQVV9TUkVHX1RSKTtcbiA0ODY6XHRcdGt2bV9nZXRfc2VnbWVudCh2Y3B1LCBcdTAwMjZzcmVncy1cdTAwM2VsZHQsIFZDUFVfU1JFR19MRFRSKTtcbiA0ODc6XHRcbiA0ODg6XHRcdGt2bV94ODZfY2FsbChnZXRfaWR0KSh2Y3B1LCBcdTAwMjZkdCk7XG4gNDg5Olx0XHRzcmVncy1cdTAwM2VpZHQubGltaXQgPSBkdC5zaXplO1xuIDQ5MDpcdFx0c3JlZ3MtXHUwMDNlaWR0LmJhc2UgPSBkdC5hZGRyZXNzO1xuIDQ5MTpcdFx0a3ZtX3g4Nl9jYWxsKGdldF9nZHQpKHZjcHUsIFx1MDAyNmR0KTtcbiA0OTI6XHRcdHNyZWdzLVx1MDAzZWdkdC5saW1pdCA9IGR0LnNpemU7XG4gNDkzOlx0XHRzcmVncy1cdTAwM2VnZHQuYmFzZSA9IGR0LmFkZHJlc3M7XG4gNDk0Olx0XG4gNDk1Olx0XHRzcmVncy1cdTAwM2VjcjIgPSB2Y3B1LVx1MDAzZWFyY2guY3IyO1xuIDQ5NjpcdFx0c3JlZ3MtXHUwMDNlY3IzID0ga3ZtX3JlYWRfY3IzKHZjcHUpO1xuIDQ5NzpcdFxuIDQ5ODpcdHNraXBfcHJvdGVjdGVkX3JlZ3M6XG4gNDk5Olx0XHRzcmVncy1cdTAwM2VjcjAgPSBrdm1fcmVhZF9jcjAodmNwdSk7XG4gNTAwOlx0XHRzcmVncy1cdTAwM2VjcjQgPSBrdm1fcmVhZF9jcjQodmNwdSk7XG4gNTAxOlx0XHRzcmVncy1cdTAwM2VjcjggPSBrdm1fZ2V0X2NyOCh2Y3B1KTtcbiA1MDI6XHRcdHNyZWdzLVx1MDAzZWVmZXIgPSB2Y3B1LVx1MDAzZWFyY2guZWZlcjtcbiA1MDM6XHRcdHNyZWdzLVx1MDAzZWFwaWNfYmFzZSA9IHZjcHUtXHUwMDNlYXJjaC5hcGljX2Jhc2U7XG4gNTA0Olx0fVxuIDUwNTpcdFxuIDUwNjpcdHN0YXRpYyB2b2lkIF9fZ2V0X3NyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zcmVncyAqc3JlZ3MpXG4gNTA3Olx0e1xuIDUwODpcdFx0X19nZXRfc3JlZ3NfY29tbW9uKHZjcHUsIHNyZWdzKTtcbiA1MDk6XHRcbiA1MTA6XHRcdGlmICh2Y3B1LVx1MDAzZWFyY2guZ3Vlc3Rfc3RhdGVfcHJvdGVjdGVkKVxuIDUxMTpcdFx0XHRyZXR1cm47XG4gNTEyOlx0XG4gNTEzOlx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLmludGVycnVwdC5pbmplY3RlZCBcdTAwMjZcdTAwMjYgIXZjcHUtXHUwMDNlYXJjaC5pbnRlcnJ1cHQuc29mdClcbiA1MTQ6XHRcdFx0c2V0X2JpdCh2Y3B1LVx1MDAzZWFyY2guaW50ZXJydXB0Lm5yLFxuIDUxNTpcdFx0XHRcdCh1bnNpZ25lZCBsb25nICopc3JlZ3MtXHUwMDNlaW50ZXJydXB0X2JpdG1hcCk7XG4gNTE2Olx0fVxuIDUxNzpcdFxuIDUxODpcdGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9zcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gNTE5Olx0XHRcdFx0XHQgIHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzKVxuIDUyMDpcdHtcbiA1MjE6XHRcdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmhhc19wcm90ZWN0ZWRfc3RhdGUgXHUwMDI2XHUwMDI2XG4gNTIyOlx0XHQgICAgdmNwdS1cdTAwM2VhcmNoLmd1ZXN0X3N0YXRlX3Byb3RlY3RlZClcbiA1MjM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTI0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg3NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIERlZXBlciBpbnRvIGBrdm1faXNfdmFsaWRfc3JlZ3NgIFVzYWdlKioKCkFscmlnaHQsIHNvIEkmIzM5O3ZlIHNwb3R0ZWQgYGt2bV9pc192YWxpZF9zcmVnc2AgaW4gdGhlIGNvZGUsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gV2hlcmUgZWxzZSBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCB3aXRoaW4gYGFyY2gveDg2L2t2bS9yZWdzLmNgPyBJdCYjMzk7cyB0aW1lIHRvIHRyYWNlIGl0cyB1c2FnZS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYmxvY2tzLiBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgcmV2ZWFsIHRoZSBhc3N1bXB0aW9ucywgdGhlIHByZWNvbmRpdGlvbnMgYmVpbmcgY2hlY2tlZCwgYW5kIGhvdyB0aGUgZnVuY3Rpb24mIzM5O3MgcmV0dXJuIHZhbHVlIGlzIHVsdGltYXRlbHkgdXRpbGl6ZWQuIFRoaXMgd2lsbCBwYWludCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbiB0aGUgZnVuY3Rpb24gaGVscHMgdG8gZGVmZW5kLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgYW55IHNlY3VyaXR5LCBwZXJmb3JtYW5jZSwgb3IgY29ycmVjdG5lc3MgaXNzdWVzIG1pZ2h0IGJlIGx1cmtpbmcsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIHNlbnNpdGl2aXR5IG9mIFNSRUcgaGFuZGxpbmcgaW4gS1ZNLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIHJlc3Qgb2YgdGhlIGZpbGUgaGFzIHRvIHNheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9yZWdzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU2MDpcdFx0XHRpZiAoIWt2bV92Y3B1X2lzX2xlZ2FsX2NyMyh2Y3B1LCBzcmVncy1cdTAwM2VjcjMpKVxuIDU2MTpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA1NjI6XHRcdH0gZWxzZSB7XG4gNTYzOlx0XHRcdC8qXG4gNTY0Olx0XHRcdCAqIE5vdCBpbiA2NC1iaXQgbW9kZTogRUZFUi5MTUEgaXMgY2xlYXIgYW5kIHRoZSBjb2RlXG4gNTY1Olx0XHRcdCAqIHNlZ21lbnQgY2Fubm90IGJlIDY0LWJpdC5cbiA1NjY6XHRcdFx0ICovXG4gNTY3Olx0XHRcdGlmIChzcmVncy1cdTAwM2VlZmVyIFx1MDAyNiBFRkVSX0xNQSB8fCBzcmVncy1cdTAwM2Vjcy5sKVxuIDU2ODpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA1Njk6XHRcdH1cbiA1NzA6XHRcbiA1NzE6XHRcdHJldHVybiBrdm1faXNfdmFsaWRfY3I0KHZjcHUsIHNyZWdzLVx1MDAzZWNyNCkgXHUwMDI2XHUwMDI2XG4gNTcyOlx0XHQgICAgICAga3ZtX2lzX3ZhbGlkX2NyMCh2Y3B1LCBzcmVncy1cdTAwM2VjcjApIFx1MDAyNlx1MDAyNlxuIDU3MzpcdFx0ICAgICAgIGt2bV9pc192YWxpZF9jcjgoc3JlZ3MtXHUwMDNlY3I4KSBcdTAwMjZcdTAwMjZcbiA1NzQ6XHRcdCAgICAgICBrdm1fdmFsaWRfZWZlcih2Y3B1LCBzcmVncy1cdTAwM2VlZmVyKTtcbiA1NzU6XHR9XG4gNTc2Olx0XG4gNTc3Olx0c3RhdGljIGludCBfX3NldF9zcmVnc19jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncyxcbiA1Nzg6XHRcdFx0XHQgICAgICBpbnQgKm1tdV9yZXNldF9uZWVkZWQsIGJvb2wgdXBkYXRlX3BkcHRycylcbiA1Nzk6XHR7XG4gNTgwOlx0XHRpbnQgaWR4O1xuIDU4MTpcdFx0c3RydWN0IGRlc2NfcHRyIGR0O1xuIDU4MjpcdFxuIDU4MzpcdFx0aWYgKCFrdm1faXNfdmFsaWRfc3JlZ3ModmNwdSwgc3JlZ3MpKVxuIDU4NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1ODU6XHRcbiA1ODY6XHRcdGlmIChrdm1fYXBpY19zZXRfYmFzZSh2Y3B1LCBzcmVncy1cdTAwM2VhcGljX2Jhc2UsIHRydWUpKVxuIDU4NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1ODg6XHRcbiA1ODk6XHRcdGlmICh2Y3B1LVx1MDAzZWFyY2guZ3Vlc3Rfc3RhdGVfcHJvdGVjdGVkKVxuIDU5MDpcdFx0XHRyZXR1cm4gMDtcbiA1OTE6XHRcbiA1OTI6XHRcdGR0LnNpemUgPSBzcmVncy1cdTAwM2VpZHQubGltaXQ7XG4gNTkzOlx0XHRkdC5hZGRyZXNzID0gc3JlZ3MtXHUwMDNlaWR0LmJhc2U7XG4gNTk0Olx0XHRrdm1feDg2X2NhbGwoc2V0X2lkdCkodmNwdSwgXHUwMDI2ZHQpO1xuIDU5NTpcdFx0ZHQuc2l6ZSA9IHNyZWdzLVx1MDAzZWdkdC5saW1pdDtcbiA1OTY6XHRcdGR0LmFkZHJlc3MgPSBzcmVncy1cdTAwM2VnZHQuYmFzZTtcbiA1OTc6XHRcdGt2bV94ODZfY2FsbChzZXRfZ2R0KSh2Y3B1LCBcdTAwMjZkdCk7XG4gNTk4Olx0XG4gNTk5Olx0XHR2Y3B1LVx1MDAzZWFyY2guY3IyID0gc3JlZ3MtXHUwMDNlY3IyO1xuIDYwMDpcdFx0Km1tdV9yZXNldF9uZWVkZWQgfD0ga3ZtX3JlYWRfY3IzKHZjcHUpICE9IHNyZWdzLVx1MDAzZWNyMztcbiA2MDE6XHRcdHZjcHUtXHUwMDNlYXJjaC5jcjMgPSBzcmVncy1cdTAwM2VjcjM7XG4gNjAyOlx0XHRrdm1fcmVnaXN0ZXJfbWFya19kaXJ0eSh2Y3B1LCBWQ1BVX1JFR19DUjMpO1xuIDYwMzpcdFx0a3ZtX3g4Nl9jYWxsKHBvc3Rfc2V0X2NyMykodmNwdSwgc3JlZ3MtXHUwMDNlY3IzKTtcbiA2MDQ6XHRcbiA2MDU6XHRcdCptbXVfcmVzZXRfbmVlZGVkIHw9IHZjcHUtXHUwMDNlYXJjaC5lZmVyICE9IHNyZWdzLVx1MDAzZWVmZXI7XG4gNjA2Olx0XHRrdm1feDg2X2NhbGwoc2V0X2VmZXIpKHZjcHUsIHNyZWdzLVx1MDAzZWVmZXIpO1xuIDYwNzpcdFxuIDYwODpcdFx0Km1tdV9yZXNldF9uZWVkZWQgfD0ga3ZtX3JlYWRfY3IwKHZjcHUpICE9IHNyZWdzLVx1MDAzZWNyMDtcbiA2MDk6XHRcdGt2bV94ODZfY2FsbChzZXRfY3IwKSh2Y3B1LCBzcmVncy1cdTAwM2VjcjApO1xuIDYxMDpcdFxuIDYxMTpcdFx0Km1tdV9yZXNldF9uZWVkZWQgfD0ga3ZtX3JlYWRfY3I0KHZjcHUpICE9IHNyZWdzLVx1MDAzZWNyNDtcbiA2MTI6XHRcdGt2bV94ODZfY2FsbChzZXRfY3I0KSh2Y3B1LCBzcmVncy1cdTAwM2VjcjQpO1xuIDYxMzpcdFxuIDYxNDpcdFx0aWYgKHVwZGF0ZV9wZHB0cnMpIHtcbiA2MTU6XHRcdFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc3JjdSk7XG4gNjE2Olx0XHRcdGlmIChpc19wYWVfcGFnaW5nKHZjcHUpKSB7XG4gNjE3Olx0XHRcdFx0bG9hZF9wZHB0cnModmNwdSwga3ZtX3JlYWRfY3IzKHZjcHUpKTtcbiA2MTg6XHRcdFx0XHQqbW11X3Jlc2V0X25lZWRlZCA9IDE7XG4gNjE5Olx0XHRcdH1cbiA2MjA6XHRcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuIDYyMTpcdFx0fVxuIDYyMjpcdFxuIDYyMzpcdFx0a3ZtX3NldF9zZWdtZW50KHZjcHUsIFx1MDAyNnNyZWdzLVx1MDAzZWNzLCBWQ1BVX1NSRUdfQ1MpO1xuIDYyNDpcdFx0a3ZtX3NldF9zZWdtZW50KHZjcHUsIFx1MDAyNnNyZWdzLVx1MDAzZWRzLCBWQ1BVX1NSRUdfRFMpO1xuIDYyNTpcdFx0a3ZtX3NldF9zZWdtZW50KHZjcHUsIFx1MDAyNnNyZWdzLVx1MDAzZWVzLCBWQ1BVX1NSRUdfRVMpO1xuIDYyNjpcdFx0a3ZtX3NldF9zZWdtZW50KHZjcHUsIFx1MDAyNnNyZWdzLVx1MDAzZWZzLCBWQ1BVX1NSRUdfRlMpO1xuIDYyNzpcdFx0a3ZtX3NldF9zZWdtZW50KHZjcHUsIFx1MDAyNnNyZWdzLVx1MDAzZWdzLCBWQ1BVX1NSRUdfR1MpO1xuIDYyODpcdFx0a3ZtX3NldF9zZWdtZW50KHZjcHUsIFx1MDAyNnNyZWdzLVx1MDAzZXNzLCBWQ1BVX1NSRUdfU1MpO1xuIDYyOTpcdFxuIDYzMDpcdFx0a3ZtX3NldF9zZWdtZW50KHZjcHUsIFx1MDAyNnNyZWdzLVx1MDAzZXRyLCBWQ1BVX1NSRUdfVFIpO1xuIDYzMTpcdFx0a3ZtX3NldF9zZWdtZW50KHZjcHUsIFx1MDAyNnNyZWdzLVx1MDAzZWxkdCwgVkNQVV9TUkVHX0xEVFIpO1xuIDYzMjpcdFxuIDYzMzpcdFx0a3ZtX3NldF9jcjgodmNwdSwgc3JlZ3MtXHUwMDNlY3I4KTtcbiA2MzQ6XHRcbiA2MzU6XHRcdC8qIE9sZGVyIHVzZXJzcGFjZSB3b24mIzM5O3QgdW5oYWx0IHRoZSB2Y3B1IG9uIHJlc2V0LiAqL1xuIDYzNjpcdFx0aWYgKGt2bV92Y3B1X2lzX2JzcCh2Y3B1KSBcdTAwMjZcdTAwMjYga3ZtX3JpcF9yZWFkKHZjcHUpID09IDB4ZmZmMCBcdTAwMjZcdTAwMjZcbiA2Mzc6XHRcdCAgICBzcmVncy1cdTAwM2Vjcy5zZWxlY3RvciA9PSAweGYwMDAgXHUwMDI2XHUwMDI2IHNyZWdzLVx1MDAzZWNzLmJhc2UgPT0gMHhmZmZmMDAwMCBcdTAwMjZcdTAwMjZcbiA2Mzg6XHRcdCAgICAhaXNfcHJvdG1vZGUodmNwdSkpXG4gNjM5Olx0XHRcdGt2bV9zZXRfbXBfc3RhdGUodmNwdSwgS1ZNX01QX1NUQVRFX1JVTk5BQkxFKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzU5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB4ODYgS1ZNIFNlZ21lbnQgUmVnaXN0ZXIgU2V0dGluZyBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgX19zZXRfc3JlZ3NfY29tbW9uYC4gSSBrbm93IGl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciBzZXR0aW5nIHNlZ21lbnQgcmVnaXN0ZXJzIHdpdGhpbiB0aGUgS1ZNIHg4NiB2aXJ0dWFsaXphdGlvbiBjb250ZXh0LCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgaGllcmFyY2h5LiBTbywgZmlyc3QgdGhpbmdzIGZpcnN0OiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGVudHJ5IHBvaW50cy4gSXQgbG9va3MgbGlrZSBgX19zZXRfc3JlZ3NfY29tbW9uYCBnZXRzIGNhbGxlZCBlaXRoZXIgZGlyZWN0bHkgYnkgYF9fc2V0X3NyZWdzYCwgb3IgYnkgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzYCBvciBga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3MyYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBvZiBob3cgdGhlIHJlZ2lzdGVyIHVwZGF0ZXMgZ2V0IGluaXRpYXRlZC4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIHBlcmZvcm0gc29tZSBicm9hZGVyIGFuYWx5c2lzLiBJIG5lZWQgdG8gd2lkZW4gdGhlIHNjb3BlIGFuZCBjYXJlZnVsbHkgY2hlY2sgYW55IG90aGVyIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGBfX3NldF9zcmVnc19jb21tb25gLCBkZWZpbmVkIHdpdGhpbiBgYXJjaC94ODYva3ZtL3JlZ3MuY2AuIFVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMgaXMgY3J1Y2lhbCBmb3IgYW55IGRlZXBlciB3b3JrIEkgZG8gaW4gdGhpcyBhcmVhLiBJdCYjMzk7cyBhYm91dCBidWlsZGluZyBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHJlZ2lzdGVyIHNldHRpbmcgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9yZWdzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY0MDpcdFxuIDY0MTpcdFx0cmV0dXJuIDA7XG4gNjQyOlx0fVxuIDY0MzpcdFxuIDY0NDpcdHN0YXRpYyBpbnQgX19zZXRfc3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncylcbiA2NDU6XHR7XG4gNjQ2Olx0XHRpbnQgcGVuZGluZ192ZWMsIG1heF9iaXRzO1xuIDY0NzpcdFx0aW50IG1tdV9yZXNldF9uZWVkZWQgPSAwO1xuIDY0ODpcdFx0aW50IHJldCA9IF9fc2V0X3NyZWdzX2NvbW1vbih2Y3B1LCBzcmVncywgXHUwMDI2bW11X3Jlc2V0X25lZWRlZCwgdHJ1ZSk7XG4gNjQ5Olx0XG4gNjUwOlx0XHRpZiAocmV0KVxuIDY1MTpcdFx0XHRyZXR1cm4gcmV0O1xuIDY1MjpcdFxuIDY1MzpcdFx0aWYgKG1tdV9yZXNldF9uZWVkZWQpIHtcbiA2NTQ6XHRcdFx0a3ZtX21tdV9yZXNldF9jb250ZXh0KHZjcHUpO1xuIDY1NTpcdFx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNIX0dVRVNULCB2Y3B1KTtcbiA2NTY6XHRcdH1cbiA2NTc6XHRcbiA2NTg6XHRcdG1heF9iaXRzID0gS1ZNX05SX0lOVEVSUlVQVFM7XG4gNjU5Olx0XHRwZW5kaW5nX3ZlYyA9IGZpbmRfZmlyc3RfYml0KFxuIDY2MDpcdFx0XHQoY29uc3QgdW5zaWduZWQgbG9uZyAqKXNyZWdzLVx1MDAzZWludGVycnVwdF9iaXRtYXAsIG1heF9iaXRzKTtcbiA2NjE6XHRcbiA2NjI6XHRcdGlmIChwZW5kaW5nX3ZlYyBcdTAwM2MgbWF4X2JpdHMpIHtcbiA2NjM6XHRcdFx0a3ZtX3F1ZXVlX2ludGVycnVwdCh2Y3B1LCBwZW5kaW5nX3ZlYywgZmFsc2UpO1xuIDY2NDpcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtTZXQgYmFjayBwZW5kaW5nIGlycSAlZFxcblwmIzM0OywgcGVuZGluZ192ZWMpO1xuIDY2NTpcdFx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfRVZFTlQsIHZjcHUpO1xuIDY2NjpcdFx0fVxuIDY2NzpcdFx0cmV0dXJuIDA7XG4gNjY4Olx0fVxuIDY2OTpcdFxuIDY3MDpcdGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gNjcxOlx0XHRcdFx0XHQgIHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzKVxuIDY3MjpcdHtcbiA2NzM6XHRcdGludCByZXQ7XG4gNjc0Olx0XG4gNjc1Olx0XHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5oYXNfcHJvdGVjdGVkX3N0YXRlIFx1MDAyNlx1MDAyNlxuIDY3NjpcdFx0ICAgIHZjcHUtXHUwMDNlYXJjaC5ndWVzdF9zdGF0ZV9wcm90ZWN0ZWQpXG4gNjc3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDY3ODpcdFxuIDY3OTpcdFx0dmNwdV9sb2FkKHZjcHUpO1xuIDY4MDpcdFx0cmV0ID0gX19zZXRfc3JlZ3ModmNwdSwgc3JlZ3MpO1xuIDY4MTpcdFx0dmNwdV9wdXQodmNwdSk7XG4gNjgyOlx0XHRyZXR1cm4gcmV0O1xuIDY4MzpcdH1cbiA2ODQ6XHRcbiA2ODU6XHRpbnQga3ZtX3ZjcHVfaW9jdGxfeDg2X3NldF9zcmVnczIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIDY4NjpcdFx0XHRcdFx0ICBzdHJ1Y3Qga3ZtX3NyZWdzMiAqc3JlZ3MyKVxuIDY4NzpcdHtcbiA2ODg6XHRcdGludCBtbXVfcmVzZXRfbmVlZGVkID0gMDtcbiA2ODk6XHRcdGJvb2wgdmFsaWRfcGRwdHJzID0gc3JlZ3MyLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fU1JFR1MyX0ZMQUdTX1BEUFRSU19WQUxJRDtcbiA2OTA6XHRcdGJvb2wgcGFlID0gKHNyZWdzMi1cdTAwM2VjcjAgXHUwMDI2IFg4Nl9DUjBfUEcpIFx1MDAyNlx1MDAyNiAoc3JlZ3MyLVx1MDAzZWNyNCBcdTAwMjYgWDg2X0NSNF9QQUUpIFx1MDAyNlx1MDAyNlxuIDY5MTpcdFx0XHQhKHNyZWdzMi1cdTAwM2VlZmVyIFx1MDAyNiBFRkVSX0xNQSk7XG4gNjkyOlx0XHRpbnQgaSwgcmV0O1xuIDY5MzpcdFxuIDY5NDpcdFx0aWYgKHNyZWdzMi1cdTAwM2VmbGFncyBcdTAwMjYgfktWTV9TUkVHUzJfRkxBR1NfUERQVFJTX1ZBTElEKVxuIDY5NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA2OTY6XHRcbiA2OTc6XHRcdGlmICh2YWxpZF9wZHB0cnMgXHUwMDI2XHUwMDI2ICghcGFlIHx8IHZjcHUtXHUwMDNlYXJjaC5ndWVzdF9zdGF0ZV9wcm90ZWN0ZWQpKVxuIDY5ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA2OTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTE1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIHg4NiBSZWdpc3RlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGFyY2gveDg2L2t2bS9yZWdzLmNgLCB3aGljaCBpcyB0aGUga2V5IGZpbGUgZm9yIHg4NiByZWdpc3RlciBoYW5kbGluZyB3aXRoaW4gS1ZNLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSByZWdpc3RlciBtYW5pcHVsYXRpb24gaXMgY2hhbmdpbmcuCgpMb29raW5nIGF0IHRoZSBmdW5jdGlvbiBjaGFuZ2VzLCB3ZSBoYXZlOgoKKiAgIGBrdm1faXNfdmFsaWRfY3I4YCAoc3RhdGljKTogQSBzdGF0aWMgZnVuY3Rpb24sIGxpa2VseSBhbiBpbnRlcm5hbCBoZWxwZXIgdG8gdmFsaWRhdGUgdGhlIENSOCByZWdpc3Rlci4gVGhlICYjMzQ7c3RhdGljJiMzNDsgYXNwZWN0IG1lYW5zIGl0JiMzOTtzIGxpbWl0ZWQgaW4gc2NvcGUgYW5kIGlzbiYjMzk7dCBtZWFudCB0byBiZSB1c2VkIG91dHNpZGUgdGhlIGZpbGUuIFRoYXQgc3VnZ2VzdHMgdGhpcyBpcyBhYm91dCBpbnRlcm5hbCBjb25zaXN0ZW5jeSBhbmQgbm90IGFuIGV4cG9zZWQgaW50ZXJmYWNlIGNoYW5nZS4KKiAgIGBrdm1fc2V0X2NyOGA6IFRoaXMgb25lJiMzOTtzIGltcG9ydGFudC4gSXQgaW1wbGllcyB0aGF0IHRoZXJlJiMzOTtzIGxvZ2ljIGJlaW5nIGFsdGVyZWQgZm9yIHdyaXRpbmcgdG8gdGhlIENSOCByZWdpc3Rlci4gQ1I4IGlzIHRoZSBUYXNrIFByaW9yaXR5IFJlZ2lzdGVyIChUUFIpLCBhbmQgaXQgaGFzIGEgZGlyZWN0IGltcGFjdCBvbiBpbnRlcnJ1cHQgaGFuZGxpbmcgYW5kIHByaW9yaXRpemF0aW9uLiBUaGlzIHBhcnQgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgb24gdGFzayBtYW5hZ2VtZW50IG9yIHZpcnR1YWxpemF0aW9uLgoqICAgYGt2bV9pc192YWxpZF9zcmVnc2AgKHN0YXRpYywgY2FsbGVkIGluIGBfX3NldF9zcmVnc19jb21tb25gKTogQW5vdGhlciBpbnRlcm5hbCB2YWxpZGF0aW9uIGZ1bmN0aW9uLCB0aGlzIHRpbWUgZm9yIHNlZ21lbnQgcmVnaXN0ZXJzLiBgX19zZXRfc3JlZ3NfY29tbW9uYCBpcyB0aGUga2V5IHRob3VnaC4gU2V0dGluZyBzZWdtZW50IHJlZ2lzdGVycyBpcyBmdW5kYW1lbnRhbCB0byB0aGUgYXJjaGl0ZWN0dXJlLgoKU2luY2UgYGt2bV9zZXRfY3I4YCBpcyBhIGZ1bmN0aW9uIHdpdGggcG90ZW50aWFsIGZvciBicm9hZCBpbXBhY3QsIEkgbmVlZCB0byBrbm93IHdoZXJlIGl0JiMzOTtzIGJlaW5nICpjYWxsZWQqIGZyb20sIGFuZCBob3cgdGhlIGNoYW5nZXMgdG8gaXQgaGF2ZSBjaGFuZ2VkIHRoZSBjb2RlLiBJIG5lZWQgdG8gZ3JlcCBmb3IgYGt2bV9zZXRfY3I4YCBpbiB0aGUgc291cmNlIHRyZWUgdG8gaWRlbnRpZnkgd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZC4gVGhhdCB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiB0aGUgY2hhbmdlIGFuZCBpZiB0aGVyZSBhcmUgYW55IGRvd25zdHJlYW0gaW1wbGljYXRpb25zIHRvIGNvbnNpZGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fc2V0X2NyOCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vcmVncy5jPTQ0Mz1zdGF0aWMgYm9vbCBrdm1faXNfdmFsaWRfY3I4KHVuc2lnbmVkIGxvbmcgY3I4KVxuLS1cbmFyY2gveDg2L2t2bS9yZWdzLmMtNDQ3LVxuYXJjaC94ODYva3ZtL3JlZ3MuYzo0NDg6aW50IGt2bV9zZXRfY3I4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjgpXG5hcmNoL3g4Ni9rdm0vcmVncy5jLTQ0OS17XG4tLVxuYXJjaC94ODYva3ZtL3JlZ3MuYy00NTctfVxuYXJjaC94ODYva3ZtL3JlZ3MuYzo0NTg6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9zZXRfY3I4KTtcbmFyY2gveDg2L2t2bS9yZWdzLmMtNDU5LVxuLS1cbmFyY2gveDg2L2t2bS9yZWdzLmM9NTc3PXN0YXRpYyBpbnQgX19zZXRfc3JlZ3NfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zcmVncyAqc3JlZ3MsXG4tLVxuYXJjaC94ODYva3ZtL3JlZ3MuYy02MzItXG5hcmNoL3g4Ni9rdm0vcmVncy5jOjYzMzpcdGt2bV9zZXRfY3I4KHZjcHUsIHNyZWdzLVx1MDAzZWNyOCk7XG5hcmNoL3g4Ni9rdm0vcmVncy5jLTYzNC1cbi0tXG5hcmNoL3g4Ni9rdm0vcmVncy5oPTYxPWludCBrdm1fc2V0X2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KTtcbmFyY2gveDg2L2t2bS9yZWdzLmg6NjI6aW50IGt2bV9zZXRfY3I4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjgpO1xuYXJjaC94ODYva3ZtL3JlZ3MuaC02My1pbnQga3ZtX3NldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkciwgdW5zaWduZWQgbG9uZyB2YWwpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjU4Nz1zdGF0aWMgaW50IGNyX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNjI1LVx0XHRjYXNlIDg6XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjI2MjY6XHRcdFx0ZXJyID0ga3ZtX3NldF9jcjgodmNwdSwgdmFsKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjYyNy1cdFx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTI2NjE9c3RhdGljIGludCBjcl90cmFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI2ODQtXHRjYXNlIDg6XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjI2ODU6XHRcdHJldCA9IGt2bV9zZXRfY3I4KHZjcHUsIG5ld192YWx1ZSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI2ODYtXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjczNT1zdGF0aWMgaW50IGNyOF93cml0ZV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjc0MS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6Mjc0MjpcdC8qIGluc3RydWN0aW9uIGVtdWxhdGlvbiBjYWxscyBrdm1fc2V0X2NyOCgpICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI3NDMtXHRyID0gY3JfaW50ZXJjZXB0aW9uKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NDI2OD1zdGF0aWMgaW5saW5lIHZvaWQgc3luY19jcjhfdG9fbGFwaWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDI3Ni1cdFx0aW50IGNyOCA9IHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuaW50X2N0bCBcdTAwMjYgVl9UUFJfTUFTSztcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDI3NzpcdFx0a3ZtX3NldF9jcjgodmNwdSwgY3I4KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDI3OC1cdH1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTUwNDI9dm9pZCB2bXhfdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTUwNTQtXHR2bXgtXHUwMDNlaHZfZGVhZGxpbmVfdHNjID0gLTE7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjUwNTU6XHRrdm1fc2V0X2NyOCh2Y3B1LCAwKTtcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTA1Ni1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTU2Nzg9c3RhdGljIGludCBoYW5kbGVfY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTcwNy1cdFx0XHRcdHU4IGNyOCA9ICh1OCl2YWw7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjU3MDg6XHRcdFx0XHRlcnIgPSBrdm1fc2V0X2NyOCh2Y3B1LCBjcjgpO1xuYXJjaC94ODYva3ZtL3ZteC92bXguYy01NzA5LVx0XHRcdFx0cmV0ID0ga3ZtX2NvbXBsZXRlX2luc25fZ3AodmNwdSwgZXJyKTtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTUzNT1zdGF0aWMgaW50IGVtdWxhdG9yX3NldF9jcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgaW50IGNyLCB1bG9uZyB2YWwpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTU1NTMtXHRjYXNlIDg6XG5hcmNoL3g4Ni9rdm0veDg2LmM6NTU1NDpcdFx0cmVzID0ga3ZtX3NldF9jcjgodmNwdSwgdmFsKTtcbmFyY2gveDg2L2t2bS94ODYuYy01NTU1LVx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODg4MT1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04OTQ1LVx0aWYgKCFsYXBpY19pbl9rZXJuZWwodmNwdSkpIHtcbmFyY2gveDg2L2t2bS94ODYuYzo4OTQ2Olx0XHRpZiAoa3ZtX3NldF9jcjgodmNwdSwga3ZtX3J1bi1cdTAwM2VjcjgpICE9IDApIHtcbmFyY2gveDg2L2t2bS94ODYuYy04OTQ3LVx0XHRcdHIgPSAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIzMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipWYWxpZGF0aW5nIENSOCBpbiBLVk06IEEgUGF0Y2ggQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgYGt2bV9zZXRfY3I4YCBiZWluZyBpbnZva2VkIGFjcm9zcyBkaWZmZXJlbnQgS1ZNIGNvbnRleHRzLCBsaWtlIGBfX3NldF9zcmVnc19jb21tb25gLCBgZW11bGF0b3Jfc2V0X2NyYCwgYW5kIHRoZSBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIHBhdGguIEludGVyZXN0aW5nLiBCZWZvcmUgdGhpcyBwYXRjaCwgdGhlIGBrdm1faXNfdmFsaWRfc3JlZ3NgIGZ1bmN0aW9uLCB3aGljaCBpcyBjcnVjaWFsIGZvciB2YWxpZGF0aW5nIHN5c3RlbSByZWdpc3RlcnMsIHdhcyAqbm90KiBjaGVja2luZyB0aGUgdmFsaWRpdHkgb2YgYGNyOGAgdGhyb3VnaCBga3ZtX2lzX3ZhbGlkX2NyOChzcmVncy0mZ3Q7Y3I4KWAuIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS4KClNvLCB3aGF0IHRoaXMgcGF0Y2ggZG9lcyBpcyBzdHJhaWdodGZvcndhcmQ6IGl0IGVuc3VyZXMgdGhhdCBgS1ZNX1NFVF9TUkVHU2AgYW5kIGBLVk1fU0VUX1NSRUdTMmAsIGFsb25nIHdpdGggdGhvc2UgcmVsZXZhbnQgaW9jdGwgZW50cnkgcG9pbnRzIGxpa2UgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzYCBhbmQgYGt2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfc3JlZ3MyYCwgbm93IGluY2x1ZGUgdGhpcyBjcml0aWNhbCBjaGVjayBmb3IgdGhlIHZhbGlkaXR5IG9mIGBjcjhgICpiZWZvcmUqIG1vZGlmeWluZyBzeXN0ZW0gcmVnaXN0ZXJzLiBUaGlzIGVmZmVjdGl2ZWx5IHByZXZlbnRzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgaW52YWxpZCBgY3I4YCB2YWx1ZXMsIHdoaWNoIGlzIGEgZ29vZCB0aGluZyBmb3Igc2VjdXJpdHkgYW5kIHN0YWJpbGl0eS4KClRoZSBrZXkgcXVlc3Rpb24gaXMsICYjMzQ7SXMgdGhpcyByZWFjaGFibGUgY29kZT8mIzM0OyBBYnNvbHV0ZWx5LiBLVk0gaW9jdGxzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSBvbiB4ODYvYW1kNjQgc3lzdGVtcywgYW5kIHdlIGtub3cgc3l6a2FsbGVyLCBhIHByb21pbmVudCBmdXp6ZXIsIGhlYXZpbHkgZXhlcmNpc2VzIGAvZGV2L2t2bWAgdGhyb3VnaCBpb2N0bHMgbGlrZSBgS1ZNX1NFVF9TUkVHU2AuIFRoaXMgdnVsbmVyYWJpbGl0eSBpcyBkZWZpbml0ZWx5IGV4cGxvaXRhYmxlLgoKVG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiwgbGV0JiMzOTtzIHNlZSB3aGljaCBLY29uZmlnIG9wdGlvbnMgYXJlIHJlcXVpcmVkOiBgS1ZNYCBvciBgS1ZNX0lOVEVMYCAvIGBLVk1fQU1EYC4gVGhhdCBzZWVtcyByaWdodC4gQW5kIG5vdyBJIHNob3VsZCBjaGVjayB0aGUgcmVsZXZhbnQgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlLiBZZXMsIHRoaXMgcGF0Y2ggbWFrZXMgc2Vuc2UuIEl0JiMzOTtzIGEgc29saWQgZGVmZW5zZSBhZ2FpbnN0IHBvdGVudGlhbCBwcml2aWxlZ2UgZXNjYWxhdGlvbiBvciBzeXN0ZW0gaW5zdGFiaWxpdHkgZHVlIHRvIGZhdWx0eSBvciBtYWxpY2lvdXMgYGNyOGAgdmFsdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTczOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzQtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgzOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODQtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTUtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwODpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNzpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE4LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMwOmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMzpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjM0LVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMzcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIEtWTSB4ODYgTWFrZWZpbGUqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGEgY3J1Y2lhbCBmaWxlOiBgYXJjaC94ODYva3ZtL01ha2VmaWxlYC4gSSYjMzk7bSBndWVzc2luZyB0aGF0IHdoYXRldmVyIEkmIzM5O20gdHJvdWJsZXNob290aW5nLCBvciB3aGF0ZXZlciBlbmhhbmNlbWVudCBJJiMzOTttIHdvcmtpbmcgb24sIGxpa2VseSBoYXMgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBjb3JlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZSBLVk0geDg2IG1vZHVsZS4gVGhpcyBNYWtlZmlsZSBpcyB3aGVyZSBhIGxvdCBvZiB0aGUgbWFnaWMgaGFwcGVucyDigJMgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkLCBjb21waWxhdGlvbiB0YXJnZXRzIGFyZSBzZXQgdXAsIGFuZCB1bHRpbWF0ZWx5LCB0aGUgS1ZNIGtlcm5lbCBtb2R1bGUgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGdldHMgYnVpbHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZmlsZSYjMzk7cyBsb2dpYyB0byBzZWUgd2hlcmUgbXkgY2hhbmdlcyBmaXQgaW4gb3Igd2hlcmUgdGhlIHByb2JsZW0gbGllcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdGNjZmxhZ3MteSAmIzQzOz0gLUkgJChzcmN0cmVlKS9hcmNoL3g4Ni9rdm1cbiAgIDQ6XHRjY2ZsYWdzLSQoQ09ORklHX0tWTV9XRVJST1IpICYjNDM7PSAtV2Vycm9yXG4gICA1Olx0XG4gICA2Olx0aW5jbHVkZSAkKHNyY3RyZWUpL3ZpcnQva3ZtL01ha2VmaWxlLmt2bVxuICAgNzpcdFxuICAgODpcdGt2bS15XHRcdFx0JiM0Mzs9IHg4Ni5vIGVtdWxhdGUubyBpcnEubyBsYXBpYy5vIGNwdWlkLm8gbXNycy5vIHBtdS5vIHJlZ3MubyBcXFxuICAgOTpcdFx0XHRcdCAgIG10cnIubyBkZWJ1Z2ZzLm8gbW11L21tdS5vIG1tdS9wYWdlX3RyYWNrLm8gbW11L3NwdGUub1xuICAxMDpcdFxuICAxMTpcdGt2bS0kKENPTkZJR19YODZfNjQpICYjNDM7PSBtbXUvdGRwX2l0ZXIubyBtbXUvdGRwX21tdS5vXG4gIDEyOlx0a3ZtLSQoQ09ORklHX0tWTV9JT0FQSUMpICYjNDM7PSBpODI1OS5vIGk4MjU0Lm8gaW9hcGljLm9cbiAgMTM6XHRrdm0tJChDT05GSUdfS1ZNX0hZUEVSVikgJiM0Mzs9IGh5cGVydi5vXG4gIDE0Olx0a3ZtLSQoQ09ORklHX0tWTV9YRU4pXHQmIzQzOz0geGVuLm9cbiAgMTU6XHRrdm0tJChDT05GSUdfS1ZNX1NNTSlcdCYjNDM7PSBzbW0ub1xuICAxNjpcdFxuICAxNzpcdGt2bS1pbnRlbC15XHRcdCYjNDM7PSB2bXgvdm14Lm8gdm14L3ZtZW50ZXIubyB2bXgvcG11X2ludGVsLm8gdm14L3ZtY3MxMi5vIFxcXG4gIDE4Olx0XHRcdFx0ICAgdm14L25lc3RlZC5vIHZteC9wb3N0ZWRfaW50ci5vIHZteC9tYWluLm9cbiAgMTk6XHRcbiAgMjA6XHRrdm0taW50ZWwtJChDT05GSUdfWDg2X1NHWF9LVk0pXHQmIzQzOz0gdm14L3NneC5vXG4gIDIxOlx0a3ZtLWludGVsLSQoQ09ORklHX0tWTV9IWVBFUlYpXHQmIzQzOz0gdm14L2h5cGVydi5vIHZteC9oeXBlcnZfZXZtY3Mub1xuICAyMjpcdGt2bS1pbnRlbC0kKENPTkZJR19LVk1fSU5URUxfVERYKVx0JiM0Mzs9IHZteC90ZHgub1xuICAyMzpcdFxuICAyNDpcdGt2bS1hbWQteVx0XHQmIzQzOz0gc3ZtL3N2bS5vIHN2bS92bWVudGVyLm8gc3ZtL3BtdS5vIHN2bS9uZXN0ZWQubyBzdm0vYXZpYy5vXG4gIDI1Olx0XG4gIDI2Olx0a3ZtLWFtZC0kKENPTkZJR19LVk1fQU1EX1NFVilcdCYjNDM7PSBzdm0vc2V2Lm9cbiAgMjc6XHRrdm0tYW1kLSQoQ09ORklHX0tWTV9IWVBFUlYpXHQmIzQzOz0gc3ZtL2h5cGVydi5vXG4gIDI4Olx0XG4gIDI5Olx0aWZkZWYgQ09ORklHX0hZUEVSVlxuICAzMDpcdGt2bS15XHRcdFx0JiM0Mzs9IGt2bV9vbmh5cGVydi5vXG4gIDMxOlx0a3ZtLWludGVsLXlcdFx0JiM0Mzs9IHZteC92bXhfb25oeXBlcnYubyB2bXgvaHlwZXJ2X2V2bWNzLm9cbiAgMzI6XHRrdm0tYW1kLXlcdFx0JiM0Mzs9IHN2bS9zdm1fb25oeXBlcnYub1xuICAzMzpcdGVuZGlmXG4gIDM0Olx0XG4gIDM1Olx0b2JqLSQoQ09ORklHX0tWTV9YODYpXHQmIzQzOz0ga3ZtLm9cbiAgMzY6XHRvYmotJChDT05GSUdfS1ZNX0lOVEVMKVx0JiM0Mzs9IGt2bS1pbnRlbC5vXG4gIDM3Olx0b2JqLSQoQ09ORklHX0tWTV9BTUQpXHQmIzQzOz0ga3ZtLWFtZC5vXG4gIDM4Olx0XG4gIDM5Olx0QUZMQUdTX3N2bS92bWVudGVyLm8gICAgOj0gLWlxdW90ZSAkKG9iailcbiAgNDA6XHQkKG9iaikvc3ZtL3ZtZW50ZXIubzogJChvYmopL2t2bS1hc20tb2Zmc2V0cy5oXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzQ4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNzE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIENoYW5nZXMgdG8gYHJlZ3Mub2AgaW4gS1ZNLVkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGByZWdzLm9gIGhlcmUsIHdoaWNoIGlzIGNsZWFybHkgcGFydCBvZiB0aGUgYGt2bS15YCBidWlsZC4gVGhpcyBpcyBjb25kaXRpb25hbCBvbiBgQ09ORklHX0tWTV9YODZgIG9yIGBDT05GSUdfS1ZNYCBiZWluZyBlbmFibGVkLCBhbmQsIGltcG9ydGFudGx5LCBlaXRoZXIgYENPTkZJR19LVk1fSU5URUxgIG9yIGBDT05GSUdfS1ZNX0FNRGAgYXMgd2VsbC4gVGhhdCBtZWFucyBgS1ZNYCBhbmQgZWl0aGVyIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYCBhcmUgZnVuZGFtZW50YWxseSByZXF1aXJlZCBmb3IgdGhpcy4gR290IGl0LgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRoZSBhZmZlY3RlZCBzeW1ib2xzLiBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBhcmNoL3g4Ni9rdm0vcmVncy5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyB0b3VjaDoKCiogICBga3ZtX3NldF9jcjhgCiogICBga3ZtX2lzX3ZhbGlkX2NyOGAgKHRoaXMgb25lJiMzOTtzIHN0YXRpYykKKiAgIGBrdm1faXNfdmFsaWRfc3JlZ3NgIChhbHNvIHN0YXRpYykKKiAgIGBfX3NldF9zcmVnc19jb21tb25gIC8gYF9fc2V0X3NyZWdzYCAodGhlc2UgYXJlIHN0YXRpYyB0b28pCiogICBga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3NgICh0aGlzIGlzIGEgbm9uLXN0YXRpYyBlbnRyeXBvaW50KQoqICAgYGt2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfc3JlZ3MyYCAoYW5vdGhlciBub24tc3RhdGljIGVudHJ5cG9pbnQpCgpUaGUgY3JpdGljYWwgdGhpbmcgaXMgdG8gZGV0ZXJtaW5lIGlmIHRob3NlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBga3ZtX3NldF9jcjhgLCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3NgLCBhbmQgYGt2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfc3JlZ3MyYCwgYXJlIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgSSB0aGluayB0aGV5IGFyZS4gWWVzLCBhIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoaXMsIHRoZXkmIzM5O3JlIHRoZSBvbmVzIEkmIzM5O20gbG9va2luZyBhdC4KCkFscmlnaHQsIHNvIEkgbmVlZCB0byBjaGVjayBmb3Igc2lkZSBlZmZlY3RzIGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBwYXRjaCBkaWZmIHRvIGNvbmZpcm0gdGhhdCBga3ZtX2lzX3ZhbGlkX3NyZWdzYCBpcyBiZWluZyB1c2VkIHRvIHZhbGlkYXRlIGBjcjhgLiBUaGF0IGNvbmZpcm1zIGl0LiBJdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBjb2RlIGluIGBrdm1fc2V0X2NyOGAgd2FzIHJlcGxhY2VkIHdpdGggYSBjYWxsIHRvIGBrdm1faXNfdmFsaWRfY3I4YCwgd2hpY2ggbm93IGNoZWNrcyB0aGUgcmVzZXJ2ZWQgYml0cyBpbnN0ZWFkLiBBZGRpdGlvbmFsbHksIGBrdm1faXNfdmFsaWRfc3JlZ3NgIGlzIGJlaW5nIHVzZWQgbm93IHRvIHZhbGlkYXRlIGBzcmVncy0mZ3Q7Y3I4YC4KCk5vdyBJIG5lZWQgdG8gY2hlY2sgaWYgYGt2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfc3JlZ3MyYCBjYWxscyBga3ZtX2lzX3ZhbGlkX3NyZWdzYC4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBjaGFuZ2UgcHJvcGFnYXRlcy4gCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3JlZ3MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjg1Olx0aW50IGt2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfc3JlZ3MyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiA2ODY6XHRcdFx0XHRcdCAgc3RydWN0IGt2bV9zcmVnczIgKnNyZWdzMilcbiA2ODc6XHR7XG4gNjg4Olx0XHRpbnQgbW11X3Jlc2V0X25lZWRlZCA9IDA7XG4gNjg5Olx0XHRib29sIHZhbGlkX3BkcHRycyA9IHNyZWdzMi1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX1NSRUdTMl9GTEFHU19QRFBUUlNfVkFMSUQ7XG4gNjkwOlx0XHRib29sIHBhZSA9IChzcmVnczItXHUwMDNlY3IwIFx1MDAyNiBYODZfQ1IwX1BHKSBcdTAwMjZcdTAwMjYgKHNyZWdzMi1cdTAwM2VjcjQgXHUwMDI2IFg4Nl9DUjRfUEFFKSBcdTAwMjZcdTAwMjZcbiA2OTE6XHRcdFx0IShzcmVnczItXHUwMDNlZWZlciBcdTAwMjYgRUZFUl9MTUEpO1xuIDY5MjpcdFx0aW50IGksIHJldDtcbiA2OTM6XHRcbiA2OTQ6XHRcdGlmIChzcmVnczItXHUwMDNlZmxhZ3MgXHUwMDI2IH5LVk1fU1JFR1MyX0ZMQUdTX1BEUFRSU19WQUxJRClcbiA2OTU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNjk2Olx0XG4gNjk3Olx0XHRpZiAodmFsaWRfcGRwdHJzIFx1MDAyNlx1MDAyNiAoIXBhZSB8fCB2Y3B1LVx1MDAzZWFyY2guZ3Vlc3Rfc3RhdGVfcHJvdGVjdGVkKSlcbiA2OTg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNjk5Olx0XG4gNzAwOlx0XHRyZXQgPSBfX3NldF9zcmVnc19jb21tb24odmNwdSwgKHN0cnVjdCBrdm1fc3JlZ3MgKilzcmVnczIsXG4gNzAxOlx0XHRcdFx0XHQgXHUwMDI2bW11X3Jlc2V0X25lZWRlZCwgIXZhbGlkX3BkcHRycyk7XG4gNzAyOlx0XHRpZiAocmV0KVxuIDcwMzpcdFx0XHRyZXR1cm4gcmV0O1xuIDcwNDpcdFxuIDcwNTpcdFx0aWYgKHZhbGlkX3BkcHRycykge1xuIDcwNjpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA0IDsgaSYjNDM7JiM0MzspXG4gNzA3Olx0XHRcdFx0a3ZtX3BkcHRyX3dyaXRlKHZjcHUsIGksIHNyZWdzMi1cdTAwM2VwZHB0cnNbaV0pO1xuIDcwODpcdFxuIDcwOTpcdFx0XHRrdm1fcmVnaXN0ZXJfbWFya19kaXJ0eSh2Y3B1LCBWQ1BVX1JFR19QRFBUUik7XG4gNzEwOlx0XHRcdG1tdV9yZXNldF9uZWVkZWQgPSAxO1xuIDcxMTpcdFx0XHR2Y3B1LVx1MDAzZWFyY2gucGRwdHJzX2Zyb21fdXNlcnNwYWNlID0gdHJ1ZTtcbiA3MTI6XHRcdH1cbiA3MTM6XHRcdGlmIChtbXVfcmVzZXRfbmVlZGVkKSB7XG4gNzE0Olx0XHRcdGt2bV9tbXVfcmVzZXRfY29udGV4dCh2Y3B1KTtcbiA3MTU6XHRcdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1RMQl9GTFVTSF9HVUVTVCwgdmNwdSk7XG4gNzE2Olx0XHR9XG4gNzE3Olx0XHRyZXR1cm4gMDtcbiA3MTg6XHR9XG4gNzE5Olx0XG4gNzIwOlx0dm9pZCBrdm1fcnVuX3N5bmNfcmVnc190b191c2VyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiA3MjE6XHR7XG4gNzIyOlx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBrdm1fc3luY19yZWdzKSBcdTAwM2UgU1lOQ19SRUdTX1NJWkVfQllURVMpO1xuIDcyMzpcdFxuIDcyNDpcdFx0aWYgKHZjcHUtXHUwMDNlcnVuLVx1MDAzZWt2bV92YWxpZF9yZWdzIFx1MDAyNiBLVk1fU1lOQ19YODZfUkVHUylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0MjcKCQkJCQkJCW91dHB1dDogMTY0CgkJCQkJCQl0aG91Z2h0czogMjU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBSZWdpc3RlciBWYWxpZGF0aW9uIGluIEtWTSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgaXQuIEJvdGggYGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzYCBhbmQgYGt2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfc3JlZ3MyYCB1bHRpbWF0ZWx5IGNhbGwgYF9fc2V0X3NyZWdzX2NvbW1vbmAsIHdoaWNoIGluIHR1cm4gcmVsaWVzIG9uIGBrdm1faXNfdmFsaWRfc3JlZ3NgLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgcGF0aC4gQW5kLCBqdXN0IGFzIGltcG9ydGFudGx5LCBga3ZtX3NldF9jcjhgIGlzIGEgZGlzdGluY3QgZ2xvYmFsIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYWxzbyBiZWluZyBtb2RpZmllZCBieSB0aGUgcHJvcG9zZWQgcGF0Y2guCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gd2hldGhlciB0aGlzIGlzIHNvbWV0aGluZyB3ZSBzaG91bGQgYWN0dWFsbHkgZnV6ei4gKlllcyosIHRoaXMgZGVmaW5pdGVseSBmaXRzIHRoZSBiaWxsLiBXZSYjMzk7cmUgbG9va2luZyBhdCByZWFjaGFibGUgS1ZNIGtlcm5lbCBjb2RlLiBTcGVjaWZpY2FsbHksIHRoaXMgaXMgY29kZSB0aGF0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciAqbW9kaWZ5aW5nIHJlZ2lzdGVyIHZhbGlkYXRpb24gbG9naWMqIHJlbGF0ZWQgdG8gdGhlIENSOCByZWdpc3RlciBhbmQgdGhlIHNyZWdzIGlvY3Rscy4gVGhhdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgaGVyZSB3aWxsIGJlIG9uIHRob3NlIHNwZWNpZmljIHN5bWJvbHM6IGBrdm1fc2V0X2NyOGAsIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zcmVnc2AsIGFuZCBga3ZtX3ZjcHVfaW9jdGxfeDg2X3NldF9zcmVnczJgLgoKQmVmb3JlIEkgY29tbWl0IHRvIHRoaXMsIGxldCYjMzk7cyBtYWtlIGEgc2FuaXR5IGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgY29uZmlncyBsaW5lIHVwIHdpdGggdGhlIHN5bWJvbHMuIEkgbmVlZCB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCB0byBkbyB0aGlzLiBDb25maWdzIGFyZSBkZWZpbml0ZWx5IGNvcnJlY3Q6IGBLVk1gLCBgS1ZNX0lOVEVMYCwgYW5kIGBLVk1fQU1EYC4KCkFscmlnaHQsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gV2UgaGF2ZSBhIHNvbGlkICYjMzQ7V29ydGhGdXp6aW5nOiB0cnVlJiMzNDsgdmVyZGljdC4gVGhlIHJlYXNvbmluZyBpcyBjb25jaXNlIGFuZCBjbGVhci4gV2UmIzM5O3JlIGRpcmVjdGx5IHRhcmdldGluZyBjb2RlIHRoYXQgdmFsaWRhdGVzIHJlZ2lzdGVycywgYW5kIHRoYXQmIzM5O3MgZXhhY3RseSB0aGUga2luZCBvZiB0aGluZyBmdXp6aW5nIGV4Y2VscyBhdC4KCk5vdywgaXQmIzM5O3MgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIFdlJiMzOTtyZSBnb29kIHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3NldF9jcjgmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3MmIzM0OywKICAgICYjMzQ7a3ZtX3ZjcHVfaW9jdGxfeDg2X3NldF9zcmVnczImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciBDUjggcmVzZXJ2ZWQgYml0cyBpbiBLVk0gd2hlbiBzZXR0aW5nIHNwZWNpYWwgcmVnaXN0ZXJzIChzcmVncyAvIHNyZWdzMikuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocyBpbiB4ODYgS1ZNIGFjY2Vzc2libGUgdmlhIHVzZXItc3BhY2UgaW9jdGxzIChLVk1fU0VUX1NSRUdTLCBLVk1fU0VUX1NSRUdTMikgYW5kIENSOCBlbXVsYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9zZXRfY3I4JiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzJiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfc3JlZ3MyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgQ1I4IHJlc2VydmVkIGJpdHMgaW4gS1ZNIHdoZW4gc2V0dGluZyBzcGVjaWFsIHJlZ2lzdGVycyAoc3JlZ3MgLyBzcmVnczIpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaW4geDg2IEtWTSBhY2Nlc3NpYmxlIHZpYSB1c2VyLXNwYWNlIGlvY3RscyAoS1ZNX1NFVF9TUkVHUywgS1ZNX1NFVF9TUkVHUzIpIGFuZCBDUjggZW11bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIwOjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBpbnB1dCB2YWxpZGF0aW9uIGZvciBDUjggcmVnaXN0ZXIgdmFsdWVzIGluIEtWTSAoYGt2bV9pc192YWxpZF9jcjhgKSwgZW5zdXJpbmcgdGhhdCByZXNlcnZlZCBiaXRzICg2Mzo0KSBpbiBDUjggY2Fubm90IGJlIHNldCB2aWEgYEtWTV9TRVRfU1JFR1NgIChjaGVja2VkIGluIGBrdm1faXNfdmFsaWRfc3JlZ3NgKSBvciBga3ZtX3NldF9jcjhgLCBhbG9uZyB3aXRoIGNvcnJlc3BvbmRpbmcgc2VsZnRlc3QgdXBkYXRlcy5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlIG9ubHkgcGVyZm9ybXMgYml0d2lzZSB2YWxpZGF0aW9uIG9uIGlucHV0IHZhbHVlcyAoYHNyZWdzLVx1MDAzZWNyOGAgLyBgY3I4YCkgcGFzc2VkIGludG8gS1ZNIGZyb20gdXNlcnNwYWNlIG9yIGNhbGxlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnksIG5vciBkb2VzIGl0IGFsdGVyIGFueSBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29weSBvcGVyYXRpb25zIChpbmZvLWxlYWtzKSBvciBzdHJ1Y3R1cmUgcGFkZGluZy5cbi0gS0FTQU4vU3RhbmRhcmQgdGVzdGluZyBhcHBsaWNhYmlsaXR5OiBTdGFuZGFyZCBmdW5jdGlvbmFsIHRlc3RpbmcgYW5kIEtWTSBzZWxmdGVzdHMgYWRlcXVhdGVseSB2ZXJpZnkgdGhpcyBpbnB1dCB2YWxpZGF0aW9uIGxvZ2ljLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggcG9zZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzkyZWQ2YjAzMGRkY2U2MzRiYWM0YzIyZDA2ZjZlOTg2M2RjMjg0YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMjA6Mzk6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcmVncy5jIGIvYXJjaC94ODYva3ZtL3JlZ3MuYwppbmRleCA4ZjY2NDM4OTg5ZTQ3Li5mYWQzMWI1OWM2MjJmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vcmVncy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9yZWdzLmMKQEAgLTQ0MCw5ICYjNDM7NDQwLDE0IEBAIGludCBrdm1fc2V0X2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KQogfQogRVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9zZXRfY3I0KTsKIAomIzQzO3N0YXRpYyBib29sIGt2bV9pc192YWxpZF9jcjgodW5zaWduZWQgbG9uZyBjcjgpCiYjNDM7ewomIzQzOwlyZXR1cm4gIShjcjggJmFtcDsgQ1I4X1JFU0VSVkVEX0JJVFMpOwomIzQzO30KJiM0MzsKIGludCBrdm1fc2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I4KQogewotCWlmIChjcjggJmFtcDsgQ1I4X1JFU0VSVkVEX0JJVFMpCiYjNDM7CWlmICgha3ZtX2lzX3ZhbGlkX2NyOChjcjgpKQogCQlyZXR1cm4gMTsKIAlpZiAobGFwaWNfaW5fa2VybmVsKHZjcHUpKQogCQlrdm1fbGFwaWNfc2V0X3Rwcih2Y3B1LCBjcjgpOwpAQCAtNTY1LDYgJiM0Mzs1NzAsNyBAQCBzdGF0aWMgYm9vbCBrdm1faXNfdmFsaWRfc3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncykKIAogCXJldHVybiBrdm1faXNfdmFsaWRfY3I0KHZjcHUsIHNyZWdzLSZndDtjcjQpICZhbXA7JmFtcDsKIAkgICAgICAga3ZtX2lzX3ZhbGlkX2NyMCh2Y3B1LCBzcmVncy0mZ3Q7Y3IwKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBrdm1faXNfdmFsaWRfY3I4KHNyZWdzLSZndDtjcjgpICZhbXA7JmFtcDsKIAkgICAgICAga3ZtX3ZhbGlkX2VmZXIodmNwdSwgc3JlZ3MtJmd0O2VmZXIpOwogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmMKaW5kZXggNjAzMjI2ZmZlNDM3NC4uNGU3YzM1MTc5NDM4MyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V0X3NyZWdzX3Rlc3QuYwpAQCAtMTM1LDYgJiM0MzsxMzUsMTggQEAgc3RhdGljIHZvaWQgdGVzdF9jcl9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGNyNCkKIAkvKiBOVyB3aXRob3V0IENEIGlzIGlsbGVnYWwsIGFzIGlzIFBHIHdpdGhvdXQgUEUuICovCiAJVEVTVF9JTlZBTElEX1NSRUdfQklUKHZjcHUsIGNyMCwgc3JlZ3MsIFg4Nl9DUjBfTlcpOwogCVRFU1RfSU5WQUxJRF9TUkVHX0JJVCh2Y3B1LCBjcjAsIHNyZWdzLCBYODZfQ1IwX1BHKTsKJiM0MzsKJiM0MzsJLyogQ1I4IGJpdHMgMzowIGFyZSB3cml0YWJsZTsgYml0cyA2Mzo0IGFyZSByZXNlcnZlZC4gKi8KJiM0MzsJdmNwdV9zcmVnc19nZXQodmNwdSwgJmFtcDtzcmVncyk7CiYjNDM7CXNyZWdzLmNyOCA9IDB4ZjsKJiM0MzsJcmMgPSBfdmNwdV9zcmVnc19zZXQodmNwdSwgJmFtcDtzcmVncyk7CiYjNDM7CVRFU1RfQVNTRVJUKCFyYywgJiMzNDtGYWlsZWQgdG8gc2V0IHZhbGlkIENSOCB2YWx1ZSAweGYmIzM0Oyk7CiYjNDM7CiYjNDM7CXZjcHVfc3JlZ3NfZ2V0KHZjcHUsICZhbXA7c3JlZ3MpOwomIzQzOwlURVNUX0FTU0VSVF9FUShzcmVncy5jcjgsIDB4Zik7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDQ7IGkgJmx0OyA2NDsgaSYjNDM7JiM0MzspCiYjNDM7CQlURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3I4LCBzcmVncywgQklUX1VMTChpKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHRlc3RfZWZlcl9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGVmZXIpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbiBmb3IgYSBLVk0gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBhc3Nlc3Mgd2hldGhlciB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNjcnV0aW5pemUgdGhlIGNvZGUgY2hhbmdlcy4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIHByb3ZpZGVkIGRpZmY6CgpgYGBkaWZmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcmVncy5jIGIvYXJjaC94ODYva3ZtL3JlZ3MuYwppbmRleCA4ZjY2NDM4OTg5ZTQ3Li5mYWQzMWI1OWM2MjJmCi0tLSBhL2FyY2gveDg2L2t2bS9yZWdzLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3JlZ3MuYwpAQCAtNDQwLDkgJiM0Mzs0NDAsMTQgQEAgaW50IGt2bV9zZXRfY3I0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjQpCiB9CiBFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3NldF9jcjQpOwogCiYjNDM7c3RhdGljIGJvb2wga3ZtX2lzX3ZhbGlkX2NyOCh1bnNpZ25lZCBsb25nIGNyOCkKJiM0Mzt7CiYjNDM7CXJldHVybiAhKGNyOCAmYW1wOyBDUjhfUkVTRVJWRURfQklUUyk7CiYjNDM7fQomIzQzOwogaW50IGt2bV9zZXRfY3I4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjgpCiB7Ci0JaWYgKGNyOCAmYW1wOyBDUjhfUkVTRVJWRURfQklUUykKJiM0MzsJaWYgKCFrdm1faXNfdmFsaWRfY3I4KGNyOCkpCiAJCXJldHVybiAxOwogCWlmIChsYXBpY19pbl9rZXJuZWwodmNwdSkpCiAJCWt2bV9sYXBpY19zZXRfdHByKHZjcHUsIGNyOCk7CkBAIC01NjUsNiAmIzQzOzU3MCw3IEBAIHN0YXRpYyBib29sIGt2bV9pc192YWxpZF9zcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzKQogCiAJcmV0dXJuIGt2bV9pc192YWxpZF9jcjQodmNwdSwgc3JlZ3MtJmd0O2NyNCkgJmFtcDsmYW1wOwogCSAgICAgICBrdm1faXNfdmFsaWRfY3IwKHZjcHUsIHNyZWdzLSZndDtjcjApICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIGt2bV9pc192YWxpZF9jcjgoc3JlZ3MtJmd0O2NyOCkgJmFtcDsmYW1wOwogCSAgICAgICBrdm1fdmFsaWRfZWZlcih2Y3B1LCBzcmVncy0mZ3Q7ZWZlcik7CiB9CiBgYGAKClJpZ2h0LCB0aGUgY2hhbmdlcyBpbnZvbHZlIGFkZGluZyBhIG5ldyBzdGF0aWMgZnVuY3Rpb24sIGBrdm1faXNfdmFsaWRfY3I4YCwgdG8gdmFsaWRhdGUgdGhlIENSOCByZWdpc3Rlciwgd2hpY2ggdGhlbiBnZXRzIHVzZWQgaW4gYGt2bV9zZXRfY3I4YCBhbmQsIGNydWNpYWxseSwgd2l0aGluIGBrdm1faXNfdmFsaWRfc3JlZ3NgLiBJIG5lZWQgdG8gbm93IGV4YW1pbmUgYGFyY2gveDg2L2t2bS9yZWdzLmNgIGFyb3VuZCBsaW5lIDU2NSBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIG9uIHRoZSB1c2FnZSBvZiBga3ZtX2lzX3ZhbGlkX3NyZWdzYCBhbmQgaXRzIGNhbGxlcnMuIFRoZSBrZXkgaGVyZSBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBuZXcgdmFsaWRhdGlvbiBsb2dpYyBleHBvc2VzIGFueSBuZXcgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBsaWtlbHkgYm9pbHMgZG93biB0byB1bmRlcnN0YW5kaW5nIHdoZXJlIGFuZCBob3cgdGhlIGBzcmVnc2Agc3RydWN0dXJlIGlzIHBvcHVsYXRlZCBhbmQgdXNlZC4gRGVwZW5kaW5nIG9uIGhvdyBgQ1I4YCBpcyBzZXQgdXAgYW5kIHdoYXQgdGhlIHJlcGVyY3Vzc2lvbnMgb2YgYW4gaW52YWxpZCB2YWx1ZSBtaWdodCBiZSBpbiBzdWJzZXF1ZW50IG9wZXJhdGlvbnMsIEkgY2FuIGRlY2lkZSB3aGV0aGVyIHRoZSBleGlzdGluZyBmdXp6aW5nIGNvdmVyYWdlIGlzIGFkZXF1YXRlIG9yIGlmIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeS4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgZGF0YSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9yZWdzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU1MDpcdHN0YXRpYyBib29sIGt2bV9pc192YWxpZF9zcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzKVxuIDU1MTpcdHtcbiA1NTI6XHRcdGlmICgoc3JlZ3MtXHUwMDNlZWZlciBcdTAwMjYgRUZFUl9MTUUpIFx1MDAyNlx1MDAyNiAoc3JlZ3MtXHUwMDNlY3IwIFx1MDAyNiBYODZfQ1IwX1BHKSkge1xuIDU1MzpcdFx0XHQvKlxuIDU1NDpcdFx0XHQgKiBXaGVuIEVGRVIuTE1FIGFuZCBDUjAuUEcgYXJlIHNldCwgdGhlIHByb2Nlc3NvciBpcyBpblxuIDU1NTpcdFx0XHQgKiA2NC1iaXQgbW9kZSAodGhvdWdoIG1heWJlIGluIGEgMzItYml0IGNvZGUgc2VnbWVudCkuXG4gNTU2Olx0XHRcdCAqIENSNC5QQUUgYW5kIEVGRVIuTE1BIG11c3QgYmUgc2V0LlxuIDU1NzpcdFx0XHQgKi9cbiA1NTg6XHRcdFx0aWYgKCEoc3JlZ3MtXHUwMDNlY3I0IFx1MDAyNiBYODZfQ1I0X1BBRSkgfHwgIShzcmVncy1cdTAwM2VlZmVyIFx1MDAyNiBFRkVSX0xNQSkpXG4gNTU5Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDU2MDpcdFx0XHRpZiAoIWt2bV92Y3B1X2lzX2xlZ2FsX2NyMyh2Y3B1LCBzcmVncy1cdTAwM2VjcjMpKVxuIDU2MTpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA1NjI6XHRcdH0gZWxzZSB7XG4gNTYzOlx0XHRcdC8qXG4gNTY0Olx0XHRcdCAqIE5vdCBpbiA2NC1iaXQgbW9kZTogRUZFUi5MTUEgaXMgY2xlYXIgYW5kIHRoZSBjb2RlXG4gNTY1Olx0XHRcdCAqIHNlZ21lbnQgY2Fubm90IGJlIDY0LWJpdC5cbiA1NjY6XHRcdFx0ICovXG4gNTY3Olx0XHRcdGlmIChzcmVncy1cdTAwM2VlZmVyIFx1MDAyNiBFRkVSX0xNQSB8fCBzcmVncy1cdTAwM2Vjcy5sKVxuIDU2ODpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA1Njk6XHRcdH1cbiA1NzA6XHRcbiA1NzE6XHRcdHJldHVybiBrdm1faXNfdmFsaWRfY3I0KHZjcHUsIHNyZWdzLVx1MDAzZWNyNCkgXHUwMDI2XHUwMDI2XG4gNTcyOlx0XHQgICAgICAga3ZtX2lzX3ZhbGlkX2NyMCh2Y3B1LCBzcmVncy1cdTAwM2VjcjApIFx1MDAyNlx1MDAyNlxuIDU3MzpcdFx0ICAgICAgIGt2bV9pc192YWxpZF9jcjgoc3JlZ3MtXHUwMDNlY3I4KSBcdTAwMjZcdTAwMjZcbiA1NzQ6XHRcdCAgICAgICBrdm1fdmFsaWRfZWZlcih2Y3B1LCBzcmVncy1cdTAwM2VlZmVyKTtcbiA1NzU6XHR9XG4gNTc2Olx0XG4gNTc3Olx0c3RhdGljIGludCBfX3NldF9zcmVnc19jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncyxcbiA1Nzg6XHRcdFx0XHQgICAgICBpbnQgKm1tdV9yZXNldF9uZWVkZWQsIGJvb2wgdXBkYXRlX3BkcHRycylcbiA1Nzk6XHR7XG4gNTgwOlx0XHRpbnQgaWR4O1xuIDU4MTpcdFx0c3RydWN0IGRlc2NfcHRyIGR0O1xuIDU4MjpcdFxuIDU4MzpcdFx0aWYgKCFrdm1faXNfdmFsaWRfc3JlZ3ModmNwdSwgc3JlZ3MpKVxuIDU4NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1ODU6XHRcbiA1ODY6XHRcdGlmIChrdm1fYXBpY19zZXRfYmFzZSh2Y3B1LCBzcmVncy1cdTAwM2VhcGljX2Jhc2UsIHRydWUpKVxuIDU4NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1ODg6XHRcbiA1ODk6XHRcdGlmICh2Y3B1LVx1MDAzZWFyY2guZ3Vlc3Rfc3RhdGVfcHJvdGVjdGVkKVxuIDU5MDpcdFx0XHRyZXR1cm4gMDtcbiA1OTE6XHRcbiA1OTI6XHRcdGR0LnNpemUgPSBzcmVncy1cdTAwM2VpZHQubGltaXQ7XG4gNTkzOlx0XHRkdC5hZGRyZXNzID0gc3JlZ3MtXHUwMDNlaWR0LmJhc2U7XG4gNTk0Olx0XHRrdm1feDg2X2NhbGwoc2V0X2lkdCkodmNwdSwgXHUwMDI2ZHQpO1xuIDU5NTpcdFx0ZHQuc2l6ZSA9IHNyZWdzLVx1MDAzZWdkdC5saW1pdDtcbiA1OTY6XHRcdGR0LmFkZHJlc3MgPSBzcmVncy1cdTAwM2VnZHQuYmFzZTtcbiA1OTc6XHRcdGt2bV94ODZfY2FsbChzZXRfZ2R0KSh2Y3B1LCBcdTAwMjZkdCk7XG4gNTk4Olx0XG4gNTk5Olx0XHR2Y3B1LVx1MDAzZWFyY2guY3IyID0gc3JlZ3MtXHUwMDNlY3IyO1xuIDYwMDpcdFx0Km1tdV9yZXNldF9uZWVkZWQgfD0ga3ZtX3JlYWRfY3IzKHZjcHUpICE9IHNyZWdzLVx1MDAzZWNyMztcbiA2MDE6XHRcdHZjcHUtXHUwMDNlYXJjaC5jcjMgPSBzcmVncy1cdTAwM2VjcjM7XG4gNjAyOlx0XHRrdm1fcmVnaXN0ZXJfbWFya19kaXJ0eSh2Y3B1LCBWQ1BVX1JFR19DUjMpO1xuIDYwMzpcdFx0a3ZtX3g4Nl9jYWxsKHBvc3Rfc2V0X2NyMykodmNwdSwgc3JlZ3MtXHUwMDNlY3IzKTtcbiA2MDQ6XHRcbiA2MDU6XHRcdCptbXVfcmVzZXRfbmVlZGVkIHw9IHZjcHUtXHUwMDNlYXJjaC5lZmVyICE9IHNyZWdzLVx1MDAzZWVmZXI7XG4gNjA2Olx0XHRrdm1feDg2X2NhbGwoc2V0X2VmZXIpKHZjcHUsIHNyZWdzLVx1MDAzZWVmZXIpO1xuIDYwNzpcdFxuIDYwODpcdFx0Km1tdV9yZXNldF9uZWVkZWQgfD0ga3ZtX3JlYWRfY3IwKHZjcHUpICE9IHNyZWdzLVx1MDAzZWNyMDtcbiA2MDk6XHRcdGt2bV94ODZfY2FsbChzZXRfY3IwKSh2Y3B1LCBzcmVncy1cdTAwM2VjcjApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjMyCgkJCQkJCQlvdXRwdXQ6IDIzMwoJCQkJCQkJdGhvdWdodHM6IDM2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gU1JFRyBWYWxpZGF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIEtWTSBwZXJzcGVjdGl2ZS4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYF9fc2V0X3NyZWdzX2NvbW1vbmAgZnVuY3Rpb24sIHdoaWNoIGdldHMgYSBgc3RydWN0IGt2bV9zcmVncyAqc3JlZ3NgIGZyb20gYSBgS1ZNX1NFVF9TUkVHU2AgaW9jdGwgY2FsbCDigJMgc3RyYWlnaHQgZnJvbSB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggaXMgYWRkaW5nIHZhbGlkYXRpb24gdG8gZW5zdXJlIHRoZSBgc3JlZ3MtJmd0O2NyOGAgdmFsdWUsIHNwZWNpZmljYWxseSByZXNlcnZlZCBiaXRzLCBpcyBwcm9wZXJseSBjaGVja2VkIHdpdGhpbiBga3ZtX2lzX3ZhbGlkX3NyZWdzKHZjcHUsIHNyZWdzKWAuIEl0IGFsc28gaW50cm9kdWNlcyB0aGUgYGt2bV9pc192YWxpZF9jcjhgIGhlbHBlciBmb3IgdXNlIGluIGBrdm1fc2V0X2NyOGAgYW5kIHVwZGF0ZXMgdGhlIHJlbGV2YW50IHNlbGZ0ZXN0cy4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIHNvIGZhci4KCk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBhcmUgd2Ugb3BlbmluZyB1cCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIHdpdGggdGhpcyBjaGFuZ2U/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuIEZpcnN0LCBpcyB0aGlzIGludHJvZHVjaW5nIG9yIG1vZGlmeWluZyBhbnkga2VybmVsIHN0cnVjdHVyZXMgdGhhdCBhcmUgKnNlbnQqIHRvIHVzZXIgc3BhY2U/IE5vLCBkZWZpbml0ZWx5IG5vdC4gYEtWTV9TRVRfU1JFR1NgIGlzIHRoZSAqdXNlciogc2V0dGluZyByZWdpc3RlcnMgKmluKiB0aGUga2VybmVsLiBObyBuZXcgZGF0YSBpcyBnb2luZyBvdXQuIFNlY29uZCwgaXMgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgKmRlcGVuZHMqIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLiBUaGUgYHNyZWdzYCBzdHJ1Y3R1cmUgaXMgYmVpbmcgcG9wdWxhdGVkIGZyb20gdXNlciBzcGFjZSB2aWEgYGNvcHlfZnJvbV91c2VyYCwgc28gaXTigJlzIG5vdCB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoaXJkLCBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBBZ2Fpbiwgbm8uIEl0JiMzOTtzIGEgc3RydWN0dXJlIGJlaW5nIHBvcHVsYXRlZCwgbm90IGFsbG9jYXRlZC4gRmluYWxseSwgYW55dGhpbmcgd2l0aCBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgdGhhdCAqY291bGQqIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzPyBTdGlsbCBuby4KClNvLCBmcm9tIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUsIHRoaXMgaXMgYSBwdXJlIHZhbGlkYXRpb24gYW5kIGlucHV0IHNhbml0aXphdGlvbiBjaGVjayBmb3IgdGhlIEtWTSB2Q1BVIHJlZ2lzdGVyIHN0YXRlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBDUjggcmVnaXN0ZXImIzM5O3MgcmVzZXJ2ZWQgYml0cy4gQW55IGJ1Z3MgaGVyZSB3b3VsZCBiZSByZWxhdGVkIHRvIGxvZ2ljIGVycm9ycyBvciBhbGxvd2luZyBpbnZhbGlkIHN0YXRlIHRyYW5zaXRpb25zLCBub3QgS01TQU4tZGV0ZWN0YWJsZSBpc3N1ZXMgbGlrZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBhbnkgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLiBJdCYjMzk7cyBhIG1hdHRlciBvZiBlbnN1cmluZyB0aGUgKnZhbGlkaXR5KiBvZiB0aGUgaW5wdXQsIG5vdCB0aGUgKmV4aXN0ZW5jZSogb2YgdGhlIG1lbW9yeS4KClRoZXJlZm9yZSwgYWZ0ZXIgYSB0aG9yb3VnaCByZXZpZXcsIG15IGNvbmNsdXNpb24gaXMgdGhhdCAqKk5lZWRzS01TQU4gaXMgZmFsc2UqKi4KCkkmIzM5O3ZlIGNhcmVmdWxseSBjb25zaWRlcmVkIGFsbCB0aGUgdXN1YWwgcmVxdWlyZW1lbnRzIGFuZCBjb25maXJtZWQgbXkgS01TQU4gcmF0aW9uYWxlLiBJJiMzOTttIHJlYWR5IHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiBmb3IgQ1I4IHJlZ2lzdGVyIHZhbHVlcyBpbiBLVk0gKGBrdm1faXNfdmFsaWRfY3I4YCksIGVuc3VyaW5nIHRoYXQgcmVzZXJ2ZWQgYml0cyAoNjM6NCkgaW4gQ1I4IGNhbm5vdCBiZSBzZXQgdmlhIGBLVk1fU0VUX1NSRUdTYCAoY2hlY2tlZCBpbiBga3ZtX2lzX3ZhbGlkX3NyZWdzYCkgb3IgYGt2bV9zZXRfY3I4YCwgYWxvbmcgd2l0aCBjb3JyZXNwb25kaW5nIHNlbGZ0ZXN0IHVwZGF0ZXMuXG5cbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZSBvbmx5IHBlcmZvcm1zIGJpdHdpc2UgdmFsaWRhdGlvbiBvbiBpbnB1dCB2YWx1ZXMgKGBzcmVncy1cdTAwM2VjcjhgIC8gYGNyOGApIHBhc3NlZCBpbnRvIEtWTSBmcm9tIHVzZXJzcGFjZSBvciBjYWxsZXJzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LCBub3IgZG9lcyBpdCBhbHRlciBhbnkga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcHkgb3BlcmF0aW9ucyAoaW5mby1sZWFrcykgb3Igc3RydWN0dXJlIHBhZGRpbmcuXG4tIEtBU0FOL1N0YW5kYXJkIHRlc3RpbmcgYXBwbGljYWJpbGl0eTogU3RhbmRhcmQgZnVuY3Rpb25hbCB0ZXN0aW5nIGFuZCBLVk0gc2VsZnRlc3RzIGFkZXF1YXRlbHkgdmVyaWZ5IHRoaXMgaW5wdXQgdmFsaWRhdGlvbiBsb2dpYy5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHBvc2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiBmb3IgQ1I4IHJlZ2lzdGVyIHZhbHVlcyBpbiBLVk0gKGBrdm1faXNfdmFsaWRfY3I4YCksIGVuc3VyaW5nIHRoYXQgcmVzZXJ2ZWQgYml0cyAoNjM6NCkgaW4gQ1I4IGNhbm5vdCBiZSBzZXQgdmlhIGBLVk1fU0VUX1NSRUdTYCAoY2hlY2tlZCBpbiBga3ZtX2lzX3ZhbGlkX3NyZWdzYCkgb3IgYGt2bV9zZXRfY3I4YCwgYWxvbmcgd2l0aCBjb3JyZXNwb25kaW5nIHNlbGZ0ZXN0IHVwZGF0ZXMuXG5cbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZSBvbmx5IHBlcmZvcm1zIGJpdHdpc2UgdmFsaWRhdGlvbiBvbiBpbnB1dCB2YWx1ZXMgKGBzcmVncy1cdTAwM2VjcjhgIC8gYGNyOGApIHBhc3NlZCBpbnRvIEtWTSBmcm9tIHVzZXJzcGFjZSBvciBjYWxsZXJzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LCBub3IgZG9lcyBpdCBhbHRlciBhbnkga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcHkgb3BlcmF0aW9ucyAoaW5mby1sZWFrcykgb3Igc3RydWN0dXJlIHBhZGRpbmcuXG4tIEtBU0FOL1N0YW5kYXJkIHRlc3RpbmcgYXBwbGljYWJpbGl0eTogU3RhbmRhcmQgZnVuY3Rpb25hbCB0ZXN0aW5nIGFuZCBLVk0gc2VsZnRlc3RzIGFkZXF1YXRlbHkgdmVyaWZ5IHRoaXMgaW5wdXQgdmFsaWRhdGlvbiBsb2dpYy5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHBvc2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMjA6Mzk6MzcuNDY5OTAwNTU0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3Mzc3MzMzMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fc2V0X2NyOFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3NcIixcbiAgICBcImt2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfc3JlZ3MyXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGlucHV0IHZhbGlkYXRpb24gZm9yIENSOCByZWdpc3RlciB2YWx1ZXMgaW4gS1ZNIChga3ZtX2lzX3ZhbGlkX2NyOGApLCBlbnN1cmluZyB0aGF0IHJlc2VydmVkIGJpdHMgKDYzOjQpIGluIENSOCBjYW5ub3QgYmUgc2V0IHZpYSBgS1ZNX1NFVF9TUkVHU2AgKGNoZWNrZWQgaW4gYGt2bV9pc192YWxpZF9zcmVnc2ApIG9yIGBrdm1fc2V0X2NyOGAsIGFsb25nIHdpdGggY29ycmVzcG9uZGluZyBzZWxmdGVzdCB1cGRhdGVzLlxcblxcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZSBvbmx5IHBlcmZvcm1zIGJpdHdpc2UgdmFsaWRhdGlvbiBvbiBpbnB1dCB2YWx1ZXMgKGBzcmVncy1cXHUwMDNlY3I4YCAvIGBjcjhgKSBwYXNzZWQgaW50byBLVk0gZnJvbSB1c2Vyc3BhY2Ugb3IgY2FsbGVycy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWx0ZXIgYW55IGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMgKGluZm8tbGVha3MpIG9yIHN0cnVjdHVyZSBwYWRkaW5nLlxcbi0gS0FTQU4vU3RhbmRhcmQgdGVzdGluZyBhcHBsaWNhYmlsaXR5OiBTdGFuZGFyZCBmdW5jdGlvbmFsIHRlc3RpbmcgYW5kIEtWTSBzZWxmdGVzdHMgYWRlcXVhdGVseSB2ZXJpZnkgdGhpcyBpbnB1dCB2YWxpZGF0aW9uIGxvZ2ljLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBwb3NlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciBDUjggcmVzZXJ2ZWQgYml0cyBpbiBLVk0gd2hlbiBzZXR0aW5nIHNwZWNpYWwgcmVnaXN0ZXJzIChzcmVncyAvIHNyZWdzMikuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocyBpbiB4ODYgS1ZNIGFjY2Vzc2libGUgdmlhIHVzZXItc3BhY2UgaW9jdGxzIChLVk1fU0VUX1NSRUdTLCBLVk1fU0VUX1NSRUdTMikgYW5kIENSOCBlbXVsYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIwOjM5OjM3LjQ2OTkwNTEwNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1ODUzMTc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM5MmVkNmIwMzBkZGNlNjM0YmFjNGMyMmQwNmY2ZTk4NjNkYzI4NGFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMDozOTozNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcmVncy5jIGIvYXJjaC94ODYva3ZtL3JlZ3MuY1xcbmluZGV4IDhmNjY0Mzg5ODllNDcuLmZhZDMxYjU5YzYyMmYgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3JlZ3MuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9yZWdzLmNcXG5AQCAtNDQwLDkgKzQ0MCwxNCBAQCBpbnQga3ZtX3NldF9jcjQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyNClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3NldF9jcjQpO1xcbiBcXG4rc3RhdGljIGJvb2wga3ZtX2lzX3ZhbGlkX2NyOCh1bnNpZ25lZCBsb25nIGNyOClcXG4re1xcbitcXHRyZXR1cm4gIShjcjggXFx1MDAyNiBDUjhfUkVTRVJWRURfQklUUyk7XFxuK31cXG4rXFxuIGludCBrdm1fc2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I4KVxcbiB7XFxuLVxcdGlmIChjcjggXFx1MDAyNiBDUjhfUkVTRVJWRURfQklUUylcXG4rXFx0aWYgKCFrdm1faXNfdmFsaWRfY3I4KGNyOCkpXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXHRpZiAobGFwaWNfaW5fa2VybmVsKHZjcHUpKVxcbiBcXHRcXHRrdm1fbGFwaWNfc2V0X3Rwcih2Y3B1LCBjcjgpO1xcbkBAIC01NjUsNiArNTcwLDcgQEAgc3RhdGljIGJvb2wga3ZtX2lzX3ZhbGlkX3NyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zcmVncyAqc3JlZ3MpXFxuIFxcbiBcXHRyZXR1cm4ga3ZtX2lzX3ZhbGlkX2NyNCh2Y3B1LCBzcmVncy1cXHUwMDNlY3I0KSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgICAga3ZtX2lzX3ZhbGlkX2NyMCh2Y3B1LCBzcmVncy1cXHUwMDNlY3IwKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAga3ZtX2lzX3ZhbGlkX2NyOChzcmVncy1cXHUwMDNlY3I4KSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgICAga3ZtX3ZhbGlkX2VmZXIodmNwdSwgc3JlZ3MtXFx1MDAzZWVmZXIpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmNcXG5pbmRleCA2MDMyMjZmZmU0Mzc0Li40ZTdjMzUxNzk0MzgzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V0X3NyZWdzX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V0X3NyZWdzX3Rlc3QuY1xcbkBAIC0xMzUsNiArMTM1LDE4IEBAIHN0YXRpYyB2b2lkIHRlc3RfY3JfYml0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBjcjQpXFxuIFxcdC8qIE5XIHdpdGhvdXQgQ0QgaXMgaWxsZWdhbCwgYXMgaXMgUEcgd2l0aG91dCBQRS4gKi9cXG4gXFx0VEVTVF9JTlZBTElEX1NSRUdfQklUKHZjcHUsIGNyMCwgc3JlZ3MsIFg4Nl9DUjBfTlcpO1xcbiBcXHRURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3IwLCBzcmVncywgWDg2X0NSMF9QRyk7XFxuK1xcbitcXHQvKiBDUjggYml0cyAzOjAgYXJlIHdyaXRhYmxlOyBiaXRzIDYzOjQgYXJlIHJlc2VydmVkLiAqL1xcbitcXHR2Y3B1X3NyZWdzX2dldCh2Y3B1LCBcXHUwMDI2c3JlZ3MpO1xcbitcXHRzcmVncy5jcjggPSAweGY7XFxuK1xcdHJjID0gX3ZjcHVfc3JlZ3Nfc2V0KHZjcHUsIFxcdTAwMjZzcmVncyk7XFxuK1xcdFRFU1RfQVNTRVJUKCFyYywgXFxcIkZhaWxlZCB0byBzZXQgdmFsaWQgQ1I4IHZhbHVlIDB4ZlxcXCIpO1xcbitcXG4rXFx0dmNwdV9zcmVnc19nZXQodmNwdSwgXFx1MDAyNnNyZWdzKTtcXG4rXFx0VEVTVF9BU1NFUlRfRVEoc3JlZ3MuY3I4LCAweGYpO1xcbitcXG4rXFx0Zm9yIChpID0gNDsgaSBcXHUwMDNjIDY0OyBpKyspXFxuK1xcdFxcdFRFU1RfSU5WQUxJRF9TUkVHX0JJVCh2Y3B1LCBjcjgsIHNyZWdzLCBCSVRfVUxMKGkpKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgdGVzdF9lZmVyX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZWZlcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjA6Mzk6MzkuMDI5MjAzNTgzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNzExNDA1MjgwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9zZXRfY3I4XCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zcmVnc1wiLFxuICAgIFwia3ZtX3ZjcHVfaW9jdGxfeDg2X3NldF9zcmVnczJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gZm9yIENSOCByZXNlcnZlZCBiaXRzIGluIEtWTSB3aGVuIHNldHRpbmcgc3BlY2lhbCByZWdpc3RlcnMgKHNyZWdzIC8gc3JlZ3MyKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzIGluIHg4NiBLVk0gYWNjZXNzaWJsZSB2aWEgdXNlci1zcGFjZSBpb2N0bHMgKEtWTV9TRVRfU1JFR1MsIEtWTV9TRVRfU1JFR1MyKSBhbmQgQ1I4IGVtdWxhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzOTJlZDZiMDMwZGRjZTYzNGJhYzRjMjJkMDZmNmU5ODYzZGMyODRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMDozOTozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9yZWdzLmMgYi9hcmNoL3g4Ni9rdm0vcmVncy5jXG5pbmRleCA4ZjY2NDM4OTg5ZTQ3Li5mYWQzMWI1OWM2MjJmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3JlZ3MuY1xuKysrIGIvYXJjaC94ODYva3ZtL3JlZ3MuY1xuQEAgLTQ0MCw5ICs0NDAsMTQgQEAgaW50IGt2bV9zZXRfY3I0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjQpXG4gfVxuIEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2V0X2NyNCk7XG4gXG4rc3RhdGljIGJvb2wga3ZtX2lzX3ZhbGlkX2NyOCh1bnNpZ25lZCBsb25nIGNyOClcbit7XG4rXHRyZXR1cm4gIShjcjggXHUwMDI2IENSOF9SRVNFUlZFRF9CSVRTKTtcbit9XG4rXG4gaW50IGt2bV9zZXRfY3I4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjgpXG4ge1xuLVx0aWYgKGNyOCBcdTAwMjYgQ1I4X1JFU0VSVkVEX0JJVFMpXG4rXHRpZiAoIWt2bV9pc192YWxpZF9jcjgoY3I4KSlcbiBcdFx0cmV0dXJuIDE7XG4gXHRpZiAobGFwaWNfaW5fa2VybmVsKHZjcHUpKVxuIFx0XHRrdm1fbGFwaWNfc2V0X3Rwcih2Y3B1LCBjcjgpO1xuQEAgLTU2NSw2ICs1NzAsNyBAQCBzdGF0aWMgYm9vbCBrdm1faXNfdmFsaWRfc3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncylcbiBcbiBcdHJldHVybiBrdm1faXNfdmFsaWRfY3I0KHZjcHUsIHNyZWdzLVx1MDAzZWNyNCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgICAga3ZtX2lzX3ZhbGlkX2NyMCh2Y3B1LCBzcmVncy1cdTAwM2VjcjApIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIGt2bV9pc192YWxpZF9jcjgoc3JlZ3MtXHUwMDNlY3I4KSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICBrdm1fdmFsaWRfZWZlcih2Y3B1LCBzcmVncy1cdTAwM2VlZmVyKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jXG5pbmRleCA2MDMyMjZmZmU0Mzc0Li40ZTdjMzUxNzk0MzgzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmNcbkBAIC0xMzUsNiArMTM1LDE4IEBAIHN0YXRpYyB2b2lkIHRlc3RfY3JfYml0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBjcjQpXG4gXHQvKiBOVyB3aXRob3V0IENEIGlzIGlsbGVnYWwsIGFzIGlzIFBHIHdpdGhvdXQgUEUuICovXG4gXHRURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3IwLCBzcmVncywgWDg2X0NSMF9OVyk7XG4gXHRURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3IwLCBzcmVncywgWDg2X0NSMF9QRyk7XG4rXG4rXHQvKiBDUjggYml0cyAzOjAgYXJlIHdyaXRhYmxlOyBiaXRzIDYzOjQgYXJlIHJlc2VydmVkLiAqL1xuK1x0dmNwdV9zcmVnc19nZXQodmNwdSwgXHUwMDI2c3JlZ3MpO1xuK1x0c3JlZ3MuY3I4ID0gMHhmO1xuK1x0cmMgPSBfdmNwdV9zcmVnc19zZXQodmNwdSwgXHUwMDI2c3JlZ3MpO1xuK1x0VEVTVF9BU1NFUlQoIXJjLCBcIkZhaWxlZCB0byBzZXQgdmFsaWQgQ1I4IHZhbHVlIDB4ZlwiKTtcbitcbitcdHZjcHVfc3JlZ3NfZ2V0KHZjcHUsIFx1MDAyNnNyZWdzKTtcbitcdFRFU1RfQVNTRVJUX0VRKHNyZWdzLmNyOCwgMHhmKTtcbitcbitcdGZvciAoaSA9IDQ7IGkgXHUwMDNjIDY0OyBpKyspXG4rXHRcdFRFU1RfSU5WQUxJRF9TUkVHX0JJVCh2Y3B1LCBjcjgsIHNyZWdzLCBCSVRfVUxMKGkpKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdGVzdF9lZmVyX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZWZlcilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIwOjM5OjM5LjAyOTIwNjA2M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMjM5NDUyMDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGlzIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaXMgZXZlbiAqd29ydGgqIGZ1enppbmcuIFdlIGhhdmUgdHdvIG1haW4gZmlsZXMgaW52b2x2ZWQ6IGBhcmNoL3g4Ni9rdm0vcmVncy5jYCBhbmQgYSBzZWxmLXRlc3QgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V0X3NyZWdzX3Rlc3QuY2AuIFRoZSBjb3JlIGNoYW5nZXMgc2VlbSB0byBiZSBjZW50ZXJlZCBhcm91bmQgQ1I4IHZhbGlkYXRpb24sIHNwZWNpZmljYWxseSB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyBga3ZtX2lzX3ZhbGlkX2NyOGAgZnVuY3Rpb24sIHdoaWNoIGNoZWNrcyBpZiBjZXJ0YWluIGJpdHMgYXJlIHJlc2VydmVkLiBJdCBsb29rcyBsaWtlIGl0J3MgZ3VhcmRpbmcgYWdhaW5zdCBwb3RlbnRpYWxseSB1bnNhZmUgQ1I4IHZhbHVlcyBpbiB0aGUgS1ZNIGNvbnRleHQuXG5cblNwZWNpZmljYWxseSwgYGt2bV9pc192YWxpZF9jcjhgIHNlZW1zIHRvIGNoZWNrIGlmIGBjcjggXHUwMDI2IENSOF9SRVNFUlZFRF9CSVRTYCBpcyBub3QgZXF1YWwgdG8gMC4gSXQncyB1c2VkIGluIGBrdm1fc2V0X2NyOGAgYW5kIGFsc28gY2hlY2tlZCBhcyBwYXJ0IG9mIGBrdm1faXNfdmFsaWRfc3JlZ3NgLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgY2hhbmdlcyB0byBjb250cm9sIHJlZ2lzdGVycyBhcmUgdXN1YWxseSBwcmV0dHkgc2Vuc2l0aXZlLCBzbyB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIGFuIGludmFsaWQgQ1I4IOKAkyBpcyBpdCBqdXN0IGEgVk0gZXhpdCwgYSBjcmFzaCwgb3Igc29tZXRoaW5nIG1vcmUgc3VidGxlIGxpa2UgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5P1xuXG5Ob3csIGxldCdzIGRpZyBpbnRvIGBhcmNoL3g4Ni9rdm0vcmVncy5jYCBhbmQgc2VlIHRoZSBjb250ZXh0IGFyb3VuZCB0aGVzZSBjaGFuZ2VzIHRvIGdldCBhIGJldHRlciBmZWVsIGZvciB0aGUgYXR0YWNrIHN1cmZhY2UuIEZyb20gdGhlcmUsIEknbGwgaWRlbnRpZnkgZm9jdXMgc3ltYm9scy4gSSB3aWxsIGxvb2sgYXQgYGt2bV9zZXRfY3I4YCBhbmQgYGt2bV9pc192YWxpZF9zcmVnc2AuIFxuXG5JJ20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBzZWxmLXRlc3QuIERvZXMgaXQgcHJvdmlkZSB1c2VmdWwgdGVzdCBjYXNlcyB0byBzdGFydCB3aXRoLCBvciBpcyBpdCB0b28gbmFycm93PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNlbGYtdGVzdCB2YWxpZGF0ZXMgdGhlIGNoYW5nZXMgdG8gZW5zdXJlIHRoYXQgaXQgaGFzIGdvb2QgY292ZXJhZ2UgZm9yIHRoZSB1cGRhdGVkIGBzcmVnc2AuXG5cbkJhc2VkIG9uIHdoYXQgSSBmaW5kLCBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgZnV6emluZyBjb25maWd1cmF0aW9ucy4gVGhpcyBtZWFucyBpZGVudGlmeWluZyBhbnkgZGVwZW5kZW5jaWVzLCBlZGdlIGNhc2VzLCBhbmQgcG90ZW50aWFsIHRhcmdldHMgZm9yIGZ1enppbmcuIEknbGwgbmVlZCB0byB0aGluayBhYm91dCBob3cgdG8gbWFuaXB1bGF0ZSB0aGUgaW5wdXRzIHRvIHRyaWdnZXIgdGhlc2UgY2hlY2tzIGFuZCBpZiBJIHNob3VsZCBmb2N1cyBvbiB0aGUgcmVnaXN0ZXIgd3JpdGVzIHRocm91Z2ggdGhlIGlvY3RsIHBhdGhzIG9yIGVtdWxhdGlvbiBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU4NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIwOjM5OjUwLjI2ODY2MTU0MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vcmVncy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQzNSxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQzNTpcXHRcXHRrdm1feDg2X2NhbGwoc2V0X2NyNCkodmNwdSwgY3I0KTtcXG4gNDM2OlxcdFxcbiA0Mzc6XFx0XFx0a3ZtX3Bvc3Rfc2V0X2NyNCh2Y3B1LCBvbGRfY3I0LCBjcjQpO1xcbiA0Mzg6XFx0XFxuIDQzOTpcXHRcXHRyZXR1cm4gMDtcXG4gNDQwOlxcdH1cXG4gNDQxOlxcdEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2V0X2NyNCk7XFxuIDQ0MjpcXHRcXG4gNDQzOlxcdHN0YXRpYyBib29sIGt2bV9pc192YWxpZF9jcjgodW5zaWduZWQgbG9uZyBjcjgpXFxuIDQ0NDpcXHR7XFxuIDQ0NTpcXHRcXHRyZXR1cm4gIShjcjggXFx1MDAyNiBDUjhfUkVTRVJWRURfQklUUyk7XFxuIDQ0NjpcXHR9XFxuIDQ0NzpcXHRcXG4gNDQ4OlxcdGludCBrdm1fc2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I4KVxcbiA0NDk6XFx0e1xcbiA0NTA6XFx0XFx0aWYgKCFrdm1faXNfdmFsaWRfY3I4KGNyOCkpXFxuIDQ1MTpcXHRcXHRcXHRyZXR1cm4gMTtcXG4gNDUyOlxcdFxcdGlmIChsYXBpY19pbl9rZXJuZWwodmNwdSkpXFxuIDQ1MzpcXHRcXHRcXHRrdm1fbGFwaWNfc2V0X3Rwcih2Y3B1LCBjcjgpO1xcbiA0NTQ6XFx0XFx0ZWxzZVxcbiA0NTU6XFx0XFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5jcjggPSBjcjg7XFxuIDQ1NjpcXHRcXHRyZXR1cm4gMDtcXG4gNDU3OlxcdH1cXG4gNDU4OlxcdEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2V0X2NyOCk7XFxuIDQ1OTpcXHRcXG4gNDYwOlxcdHVuc2lnbmVkIGxvbmcga3ZtX2dldF9jcjgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiA0NjE6XFx0e1xcbiA0NjI6XFx0XFx0aWYgKGxhcGljX2luX2tlcm5lbCh2Y3B1KSlcXG4gNDYzOlxcdFxcdFxcdHJldHVybiBrdm1fbGFwaWNfZ2V0X2NyOCh2Y3B1KTtcXG4gNDY0OlxcdFxcdGVsc2VcXG4gNDY1OlxcdFxcdFxcdHJldHVybiB2Y3B1LVxcdTAwM2VhcmNoLmNyODtcXG4gNDY2OlxcdH1cXG4gNDY3OlxcdEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZ2V0X2NyOCk7XFxuIDQ2ODpcXHRcXG4gNDY5OlxcdHN0YXRpYyB2b2lkIF9fZ2V0X3NyZWdzX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzKVxcbiA0NzA6XFx0e1xcbiA0NzE6XFx0XFx0c3RydWN0IGRlc2NfcHRyIGR0O1xcbiA0NzI6XFx0XFxuIDQ3MzpcXHRcXHRpZiAodmNwdS1cXHUwMDNlYXJjaC5ndWVzdF9zdGF0ZV9wcm90ZWN0ZWQpXFxuIDQ3NDpcXHRcXHRcXHRnb3RvIHNraXBfcHJvdGVjdGVkX3JlZ3M7XFxuIDQ3NTpcXHRcXG4gNDc2OlxcdFxcdGt2bV9oYW5kbGVfZXhjZXB0aW9uX3BheWxvYWRfcXVpcmsodmNwdSk7XFxuIDQ3NzpcXHRcXG4gNDc4OlxcdFxcdGt2bV9nZXRfc2VnbWVudCh2Y3B1LCBcXHUwMDI2c3JlZ3MtXFx1MDAzZWNzLCBWQ1BVX1NSRUdfQ1MpO1xcbiA0Nzk6XFx0XFx0a3ZtX2dldF9zZWdtZW50KHZjcHUsIFxcdTAwMjZzcmVncy1cXHUwMDNlZHMsIFZDUFVfU1JFR19EUyk7XFxuIDQ4MDpcXHRcXHRrdm1fZ2V0X3NlZ21lbnQodmNwdSwgXFx1MDAyNnNyZWdzLVxcdTAwM2VlcywgVkNQVV9TUkVHX0VTKTtcXG4gNDgxOlxcdFxcdGt2bV9nZXRfc2VnbWVudCh2Y3B1LCBcXHUwMDI2c3JlZ3MtXFx1MDAzZWZzLCBWQ1BVX1NSRUdfRlMpO1xcbiA0ODI6XFx0XFx0a3ZtX2dldF9zZWdtZW50KHZjcHUsIFxcdTAwMjZzcmVncy1cXHUwMDNlZ3MsIFZDUFVfU1JFR19HUyk7XFxuIDQ4MzpcXHRcXHRrdm1fZ2V0X3NlZ21lbnQodmNwdSwgXFx1MDAyNnNyZWdzLVxcdTAwM2VzcywgVkNQVV9TUkVHX1NTKTtcXG4gNDg0OlxcdFxcbiA0ODU6XFx0XFx0a3ZtX2dldF9zZWdtZW50KHZjcHUsIFxcdTAwMjZzcmVncy1cXHUwMDNldHIsIFZDUFVfU1JFR19UUik7XFxuIDQ4NjpcXHRcXHRrdm1fZ2V0X3NlZ21lbnQodmNwdSwgXFx1MDAyNnNyZWdzLVxcdTAwM2VsZHQsIFZDUFVfU1JFR19MRFRSKTtcXG4gNDg3OlxcdFxcbiA0ODg6XFx0XFx0a3ZtX3g4Nl9jYWxsKGdldF9pZHQpKHZjcHUsIFxcdTAwMjZkdCk7XFxuIDQ4OTpcXHRcXHRzcmVncy1cXHUwMDNlaWR0LmxpbWl0ID0gZHQuc2l6ZTtcXG4gNDkwOlxcdFxcdHNyZWdzLVxcdTAwM2VpZHQuYmFzZSA9IGR0LmFkZHJlc3M7XFxuIDQ5MTpcXHRcXHRrdm1feDg2X2NhbGwoZ2V0X2dkdCkodmNwdSwgXFx1MDAyNmR0KTtcXG4gNDkyOlxcdFxcdHNyZWdzLVxcdTAwM2VnZHQubGltaXQgPSBkdC5zaXplO1xcbiA0OTM6XFx0XFx0c3JlZ3MtXFx1MDAzZWdkdC5iYXNlID0gZHQuYWRkcmVzcztcXG4gNDk0OlxcdFxcbiA0OTU6XFx0XFx0c3JlZ3MtXFx1MDAzZWNyMiA9IHZjcHUtXFx1MDAzZWFyY2guY3IyO1xcbiA0OTY6XFx0XFx0c3JlZ3MtXFx1MDAzZWNyMyA9IGt2bV9yZWFkX2NyMyh2Y3B1KTtcXG4gNDk3OlxcdFxcbiA0OTg6XFx0c2tpcF9wcm90ZWN0ZWRfcmVnczpcXG4gNDk5OlxcdFxcdHNyZWdzLVxcdTAwM2VjcjAgPSBrdm1fcmVhZF9jcjAodmNwdSk7XFxuIDUwMDpcXHRcXHRzcmVncy1cXHUwMDNlY3I0ID0ga3ZtX3JlYWRfY3I0KHZjcHUpO1xcbiA1MDE6XFx0XFx0c3JlZ3MtXFx1MDAzZWNyOCA9IGt2bV9nZXRfY3I4KHZjcHUpO1xcbiA1MDI6XFx0XFx0c3JlZ3MtXFx1MDAzZWVmZXIgPSB2Y3B1LVxcdTAwM2VhcmNoLmVmZXI7XFxuIDUwMzpcXHRcXHRzcmVncy1cXHUwMDNlYXBpY19iYXNlID0gdmNwdS1cXHUwMDNlYXJjaC5hcGljX2Jhc2U7XFxuIDUwNDpcXHR9XFxuIDUwNTpcXHRcXG4gNTA2OlxcdHN0YXRpYyB2b2lkIF9fZ2V0X3NyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zcmVncyAqc3JlZ3MpXFxuIDUwNzpcXHR7XFxuIDUwODpcXHRcXHRfX2dldF9zcmVnc19jb21tb24odmNwdSwgc3JlZ3MpO1xcbiA1MDk6XFx0XFxuIDUxMDpcXHRcXHRpZiAodmNwdS1cXHUwMDNlYXJjaC5ndWVzdF9zdGF0ZV9wcm90ZWN0ZWQpXFxuIDUxMTpcXHRcXHRcXHRyZXR1cm47XFxuIDUxMjpcXHRcXG4gNTEzOlxcdFxcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLmludGVycnVwdC5pbmplY3RlZCBcXHUwMDI2XFx1MDAyNiAhdmNwdS1cXHUwMDNlYXJjaC5pbnRlcnJ1cHQuc29mdClcXG4gNTE0OlxcdFxcdFxcdHNldF9iaXQodmNwdS1cXHUwMDNlYXJjaC5pbnRlcnJ1cHQubnIsXFxuIDUxNTpcXHRcXHRcXHRcXHQodW5zaWduZWQgbG9uZyAqKXNyZWdzLVxcdTAwM2VpbnRlcnJ1cHRfYml0bWFwKTtcXG4gNTE2OlxcdH1cXG4gNTE3OlxcdFxcbiA1MTg6XFx0aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X3NyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gNTE5OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGt2bV9zcmVncyAqc3JlZ3MpXFxuIDUyMDpcXHR7XFxuIDUyMTpcXHRcXHRpZiAodmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmhhc19wcm90ZWN0ZWRfc3RhdGUgXFx1MDAyNlxcdTAwMjZcXG4gNTIyOlxcdFxcdCAgICB2Y3B1LVxcdTAwM2VhcmNoLmd1ZXN0X3N0YXRlX3Byb3RlY3RlZClcXG4gNTIzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1MjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIwOjM5OjUwLjI2ODc3MjA2MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMDYwMDY5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIGBrdm1faXNfdmFsaWRfc3JlZ3NgIFVzYWdlKipcblxuQWxyaWdodCwgc28gSSd2ZSBzcG90dGVkIGBrdm1faXNfdmFsaWRfc3JlZ3NgIGluIHRoZSBjb2RlLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIFdoZXJlIGVsc2UgaXMgdGhpcyBmdW5jdGlvbiBiZWluZyBjYWxsZWQgd2l0aGluIGBhcmNoL3g4Ni9rdm0vcmVncy5jYD8gSXQncyB0aW1lIHRvIHRyYWNlIGl0cyB1c2FnZS4gSSdsbCBuZWVkIHRvIHNlZSB0aGUgc3Vycm91bmRpbmcgY29kZSBibG9ja3MuIEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCByZXZlYWwgdGhlIGFzc3VtcHRpb25zLCB0aGUgcHJlY29uZGl0aW9ucyBiZWluZyBjaGVja2VkLCBhbmQgaG93IHRoZSBmdW5jdGlvbidzIHJldHVybiB2YWx1ZSBpcyB1bHRpbWF0ZWx5IHV0aWxpemVkLiBUaGlzIHdpbGwgcGFpbnQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24gdGhlIGZ1bmN0aW9uIGhlbHBzIHRvIGRlZmVuZC4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGlmIGFueSBzZWN1cml0eSwgcGVyZm9ybWFuY2UsIG9yIGNvcnJlY3RuZXNzIGlzc3VlcyBtaWdodCBiZSBsdXJraW5nLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBzZW5zaXRpdml0eSBvZiBTUkVHIGhhbmRsaW5nIGluIEtWTS4gTGV0J3Mgc2VlIHdoYXQgdGhlIHJlc3Qgb2YgdGhlIGZpbGUgaGFzIHRvIHNheS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg3NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjA6Mzk6NTIuMjc0NzgyNTA4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ3OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3JlZ3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NjAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NjA6XFx0XFx0XFx0aWYgKCFrdm1fdmNwdV9pc19sZWdhbF9jcjModmNwdSwgc3JlZ3MtXFx1MDAzZWNyMykpXFxuIDU2MTpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDU2MjpcXHRcXHR9IGVsc2Uge1xcbiA1NjM6XFx0XFx0XFx0LypcXG4gNTY0OlxcdFxcdFxcdCAqIE5vdCBpbiA2NC1iaXQgbW9kZTogRUZFUi5MTUEgaXMgY2xlYXIgYW5kIHRoZSBjb2RlXFxuIDU2NTpcXHRcXHRcXHQgKiBzZWdtZW50IGNhbm5vdCBiZSA2NC1iaXQuXFxuIDU2NjpcXHRcXHRcXHQgKi9cXG4gNTY3OlxcdFxcdFxcdGlmIChzcmVncy1cXHUwMDNlZWZlciBcXHUwMDI2IEVGRVJfTE1BIHx8IHNyZWdzLVxcdTAwM2Vjcy5sKVxcbiA1Njg6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA1Njk6XFx0XFx0fVxcbiA1NzA6XFx0XFxuIDU3MTpcXHRcXHRyZXR1cm4ga3ZtX2lzX3ZhbGlkX2NyNCh2Y3B1LCBzcmVncy1cXHUwMDNlY3I0KSBcXHUwMDI2XFx1MDAyNlxcbiA1NzI6XFx0XFx0ICAgICAgIGt2bV9pc192YWxpZF9jcjAodmNwdSwgc3JlZ3MtXFx1MDAzZWNyMCkgXFx1MDAyNlxcdTAwMjZcXG4gNTczOlxcdFxcdCAgICAgICBrdm1faXNfdmFsaWRfY3I4KHNyZWdzLVxcdTAwM2VjcjgpIFxcdTAwMjZcXHUwMDI2XFxuIDU3NDpcXHRcXHQgICAgICAga3ZtX3ZhbGlkX2VmZXIodmNwdSwgc3JlZ3MtXFx1MDAzZWVmZXIpO1xcbiA1NzU6XFx0fVxcbiA1NzY6XFx0XFxuIDU3NzpcXHRzdGF0aWMgaW50IF9fc2V0X3NyZWdzX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzLFxcbiA1Nzg6XFx0XFx0XFx0XFx0ICAgICAgaW50ICptbXVfcmVzZXRfbmVlZGVkLCBib29sIHVwZGF0ZV9wZHB0cnMpXFxuIDU3OTpcXHR7XFxuIDU4MDpcXHRcXHRpbnQgaWR4O1xcbiA1ODE6XFx0XFx0c3RydWN0IGRlc2NfcHRyIGR0O1xcbiA1ODI6XFx0XFxuIDU4MzpcXHRcXHRpZiAoIWt2bV9pc192YWxpZF9zcmVncyh2Y3B1LCBzcmVncykpXFxuIDU4NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTg1OlxcdFxcbiA1ODY6XFx0XFx0aWYgKGt2bV9hcGljX3NldF9iYXNlKHZjcHUsIHNyZWdzLVxcdTAwM2VhcGljX2Jhc2UsIHRydWUpKVxcbiA1ODc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU4ODpcXHRcXG4gNTg5OlxcdFxcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLmd1ZXN0X3N0YXRlX3Byb3RlY3RlZClcXG4gNTkwOlxcdFxcdFxcdHJldHVybiAwO1xcbiA1OTE6XFx0XFxuIDU5MjpcXHRcXHRkdC5zaXplID0gc3JlZ3MtXFx1MDAzZWlkdC5saW1pdDtcXG4gNTkzOlxcdFxcdGR0LmFkZHJlc3MgPSBzcmVncy1cXHUwMDNlaWR0LmJhc2U7XFxuIDU5NDpcXHRcXHRrdm1feDg2X2NhbGwoc2V0X2lkdCkodmNwdSwgXFx1MDAyNmR0KTtcXG4gNTk1OlxcdFxcdGR0LnNpemUgPSBzcmVncy1cXHUwMDNlZ2R0LmxpbWl0O1xcbiA1OTY6XFx0XFx0ZHQuYWRkcmVzcyA9IHNyZWdzLVxcdTAwM2VnZHQuYmFzZTtcXG4gNTk3OlxcdFxcdGt2bV94ODZfY2FsbChzZXRfZ2R0KSh2Y3B1LCBcXHUwMDI2ZHQpO1xcbiA1OTg6XFx0XFxuIDU5OTpcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmNyMiA9IHNyZWdzLVxcdTAwM2VjcjI7XFxuIDYwMDpcXHRcXHQqbW11X3Jlc2V0X25lZWRlZCB8PSBrdm1fcmVhZF9jcjModmNwdSkgIT0gc3JlZ3MtXFx1MDAzZWNyMztcXG4gNjAxOlxcdFxcdHZjcHUtXFx1MDAzZWFyY2guY3IzID0gc3JlZ3MtXFx1MDAzZWNyMztcXG4gNjAyOlxcdFxcdGt2bV9yZWdpc3Rlcl9tYXJrX2RpcnR5KHZjcHUsIFZDUFVfUkVHX0NSMyk7XFxuIDYwMzpcXHRcXHRrdm1feDg2X2NhbGwocG9zdF9zZXRfY3IzKSh2Y3B1LCBzcmVncy1cXHUwMDNlY3IzKTtcXG4gNjA0OlxcdFxcbiA2MDU6XFx0XFx0Km1tdV9yZXNldF9uZWVkZWQgfD0gdmNwdS1cXHUwMDNlYXJjaC5lZmVyICE9IHNyZWdzLVxcdTAwM2VlZmVyO1xcbiA2MDY6XFx0XFx0a3ZtX3g4Nl9jYWxsKHNldF9lZmVyKSh2Y3B1LCBzcmVncy1cXHUwMDNlZWZlcik7XFxuIDYwNzpcXHRcXG4gNjA4OlxcdFxcdCptbXVfcmVzZXRfbmVlZGVkIHw9IGt2bV9yZWFkX2NyMCh2Y3B1KSAhPSBzcmVncy1cXHUwMDNlY3IwO1xcbiA2MDk6XFx0XFx0a3ZtX3g4Nl9jYWxsKHNldF9jcjApKHZjcHUsIHNyZWdzLVxcdTAwM2VjcjApO1xcbiA2MTA6XFx0XFxuIDYxMTpcXHRcXHQqbW11X3Jlc2V0X25lZWRlZCB8PSBrdm1fcmVhZF9jcjQodmNwdSkgIT0gc3JlZ3MtXFx1MDAzZWNyNDtcXG4gNjEyOlxcdFxcdGt2bV94ODZfY2FsbChzZXRfY3I0KSh2Y3B1LCBzcmVncy1cXHUwMDNlY3I0KTtcXG4gNjEzOlxcdFxcbiA2MTQ6XFx0XFx0aWYgKHVwZGF0ZV9wZHB0cnMpIHtcXG4gNjE1OlxcdFxcdFxcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXNyY3UpO1xcbiA2MTY6XFx0XFx0XFx0aWYgKGlzX3BhZV9wYWdpbmcodmNwdSkpIHtcXG4gNjE3OlxcdFxcdFxcdFxcdGxvYWRfcGRwdHJzKHZjcHUsIGt2bV9yZWFkX2NyMyh2Y3B1KSk7XFxuIDYxODpcXHRcXHRcXHRcXHQqbW11X3Jlc2V0X25lZWRlZCA9IDE7XFxuIDYxOTpcXHRcXHRcXHR9XFxuIDYyMDpcXHRcXHRcXHRzcmN1X3JlYWRfdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXNyY3UsIGlkeCk7XFxuIDYyMTpcXHRcXHR9XFxuIDYyMjpcXHRcXG4gNjIzOlxcdFxcdGt2bV9zZXRfc2VnbWVudCh2Y3B1LCBcXHUwMDI2c3JlZ3MtXFx1MDAzZWNzLCBWQ1BVX1NSRUdfQ1MpO1xcbiA2MjQ6XFx0XFx0a3ZtX3NldF9zZWdtZW50KHZjcHUsIFxcdTAwMjZzcmVncy1cXHUwMDNlZHMsIFZDUFVfU1JFR19EUyk7XFxuIDYyNTpcXHRcXHRrdm1fc2V0X3NlZ21lbnQodmNwdSwgXFx1MDAyNnNyZWdzLVxcdTAwM2VlcywgVkNQVV9TUkVHX0VTKTtcXG4gNjI2OlxcdFxcdGt2bV9zZXRfc2VnbWVudCh2Y3B1LCBcXHUwMDI2c3JlZ3MtXFx1MDAzZWZzLCBWQ1BVX1NSRUdfRlMpO1xcbiA2Mjc6XFx0XFx0a3ZtX3NldF9zZWdtZW50KHZjcHUsIFxcdTAwMjZzcmVncy1cXHUwMDNlZ3MsIFZDUFVfU1JFR19HUyk7XFxuIDYyODpcXHRcXHRrdm1fc2V0X3NlZ21lbnQodmNwdSwgXFx1MDAyNnNyZWdzLVxcdTAwM2VzcywgVkNQVV9TUkVHX1NTKTtcXG4gNjI5OlxcdFxcbiA2MzA6XFx0XFx0a3ZtX3NldF9zZWdtZW50KHZjcHUsIFxcdTAwMjZzcmVncy1cXHUwMDNldHIsIFZDUFVfU1JFR19UUik7XFxuIDYzMTpcXHRcXHRrdm1fc2V0X3NlZ21lbnQodmNwdSwgXFx1MDAyNnNyZWdzLVxcdTAwM2VsZHQsIFZDUFVfU1JFR19MRFRSKTtcXG4gNjMyOlxcdFxcbiA2MzM6XFx0XFx0a3ZtX3NldF9jcjgodmNwdSwgc3JlZ3MtXFx1MDAzZWNyOCk7XFxuIDYzNDpcXHRcXG4gNjM1OlxcdFxcdC8qIE9sZGVyIHVzZXJzcGFjZSB3b24ndCB1bmhhbHQgdGhlIHZjcHUgb24gcmVzZXQuICovXFxuIDYzNjpcXHRcXHRpZiAoa3ZtX3ZjcHVfaXNfYnNwKHZjcHUpIFxcdTAwMjZcXHUwMDI2IGt2bV9yaXBfcmVhZCh2Y3B1KSA9PSAweGZmZjAgXFx1MDAyNlxcdTAwMjZcXG4gNjM3OlxcdFxcdCAgICBzcmVncy1cXHUwMDNlY3Muc2VsZWN0b3IgPT0gMHhmMDAwIFxcdTAwMjZcXHUwMDI2IHNyZWdzLVxcdTAwM2Vjcy5iYXNlID09IDB4ZmZmZjAwMDAgXFx1MDAyNlxcdTAwMjZcXG4gNjM4OlxcdFxcdCAgICAhaXNfcHJvdG1vZGUodmNwdSkpXFxuIDYzOTpcXHRcXHRcXHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9SVU5OQUJMRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIwOjM5OjUyLjI3NDg4NDUwOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1ODcyODI5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB4ODYgS1ZNIFNlZ21lbnQgUmVnaXN0ZXIgU2V0dGluZyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gYF9fc2V0X3NyZWdzX2NvbW1vbmAuIEkga25vdyBpdCdzIGEga2V5IGZ1bmN0aW9uIGZvciBzZXR0aW5nIHNlZ21lbnQgcmVnaXN0ZXJzIHdpdGhpbiB0aGUgS1ZNIHg4NiB2aXJ0dWFsaXphdGlvbiBjb250ZXh0LCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgaGllcmFyY2h5LiBTbywgZmlyc3QgdGhpbmdzIGZpcnN0OiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGVudHJ5IHBvaW50cy4gSXQgbG9va3MgbGlrZSBgX19zZXRfc3JlZ3NfY29tbW9uYCBnZXRzIGNhbGxlZCBlaXRoZXIgZGlyZWN0bHkgYnkgYF9fc2V0X3NyZWdzYCwgb3IgYnkgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzYCBvciBga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3MyYC4gVGhhdCdzIHRoZSBjb3JlIG9mIGhvdyB0aGUgcmVnaXN0ZXIgdXBkYXRlcyBnZXQgaW5pdGlhdGVkLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byBwZXJmb3JtIHNvbWUgYnJvYWRlciBhbmFseXNpcy4gSSBuZWVkIHRvIHdpZGVuIHRoZSBzY29wZSBhbmQgY2FyZWZ1bGx5IGNoZWNrIGFueSBvdGhlciBmdW5jdGlvbnMsIGluY2x1ZGluZyBgX19zZXRfc3JlZ3NfY29tbW9uYCwgZGVmaW5lZCB3aXRoaW4gYGFyY2gveDg2L2t2bS9yZWdzLmNgLiBVbmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIGlzIGNydWNpYWwgZm9yIGFueSBkZWVwZXIgd29yayBJIGRvIGluIHRoaXMgYXJlYS4gSXQncyBhYm91dCBidWlsZGluZyBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHJlZ2lzdGVyIHNldHRpbmcgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc1OSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjA6Mzk6NTUuODYyMTcwMDVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vcmVncy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY0MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY0MDpcXHRcXG4gNjQxOlxcdFxcdHJldHVybiAwO1xcbiA2NDI6XFx0fVxcbiA2NDM6XFx0XFxuIDY0NDpcXHRzdGF0aWMgaW50IF9fc2V0X3NyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zcmVncyAqc3JlZ3MpXFxuIDY0NTpcXHR7XFxuIDY0NjpcXHRcXHRpbnQgcGVuZGluZ192ZWMsIG1heF9iaXRzO1xcbiA2NDc6XFx0XFx0aW50IG1tdV9yZXNldF9uZWVkZWQgPSAwO1xcbiA2NDg6XFx0XFx0aW50IHJldCA9IF9fc2V0X3NyZWdzX2NvbW1vbih2Y3B1LCBzcmVncywgXFx1MDAyNm1tdV9yZXNldF9uZWVkZWQsIHRydWUpO1xcbiA2NDk6XFx0XFxuIDY1MDpcXHRcXHRpZiAocmV0KVxcbiA2NTE6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNjUyOlxcdFxcbiA2NTM6XFx0XFx0aWYgKG1tdV9yZXNldF9uZWVkZWQpIHtcXG4gNjU0OlxcdFxcdFxcdGt2bV9tbXVfcmVzZXRfY29udGV4dCh2Y3B1KTtcXG4gNjU1OlxcdFxcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0hfR1VFU1QsIHZjcHUpO1xcbiA2NTY6XFx0XFx0fVxcbiA2NTc6XFx0XFxuIDY1ODpcXHRcXHRtYXhfYml0cyA9IEtWTV9OUl9JTlRFUlJVUFRTO1xcbiA2NTk6XFx0XFx0cGVuZGluZ192ZWMgPSBmaW5kX2ZpcnN0X2JpdChcXG4gNjYwOlxcdFxcdFxcdChjb25zdCB1bnNpZ25lZCBsb25nICopc3JlZ3MtXFx1MDAzZWludGVycnVwdF9iaXRtYXAsIG1heF9iaXRzKTtcXG4gNjYxOlxcdFxcbiA2NjI6XFx0XFx0aWYgKHBlbmRpbmdfdmVjIFxcdTAwM2MgbWF4X2JpdHMpIHtcXG4gNjYzOlxcdFxcdFxcdGt2bV9xdWV1ZV9pbnRlcnJ1cHQodmNwdSwgcGVuZGluZ192ZWMsIGZhbHNlKTtcXG4gNjY0OlxcdFxcdFxcdHByX2RlYnVnKFxcXCJTZXQgYmFjayBwZW5kaW5nIGlycSAlZFxcXFxuXFxcIiwgcGVuZGluZ192ZWMpO1xcbiA2NjU6XFx0XFx0XFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX0VWRU5ULCB2Y3B1KTtcXG4gNjY2OlxcdFxcdH1cXG4gNjY3OlxcdFxcdHJldHVybiAwO1xcbiA2Njg6XFx0fVxcbiA2Njk6XFx0XFxuIDY3MDpcXHRpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiA2NzE6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncylcXG4gNjcyOlxcdHtcXG4gNjczOlxcdFxcdGludCByZXQ7XFxuIDY3NDpcXHRcXG4gNjc1OlxcdFxcdGlmICh2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guaGFzX3Byb3RlY3RlZF9zdGF0ZSBcXHUwMDI2XFx1MDAyNlxcbiA2NzY6XFx0XFx0ICAgIHZjcHUtXFx1MDAzZWFyY2guZ3Vlc3Rfc3RhdGVfcHJvdGVjdGVkKVxcbiA2Nzc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDY3ODpcXHRcXG4gNjc5OlxcdFxcdHZjcHVfbG9hZCh2Y3B1KTtcXG4gNjgwOlxcdFxcdHJldCA9IF9fc2V0X3NyZWdzKHZjcHUsIHNyZWdzKTtcXG4gNjgxOlxcdFxcdHZjcHVfcHV0KHZjcHUpO1xcbiA2ODI6XFx0XFx0cmV0dXJuIHJldDtcXG4gNjgzOlxcdH1cXG4gNjg0OlxcdFxcbiA2ODU6XFx0aW50IGt2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfc3JlZ3MyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gNjg2OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGt2bV9zcmVnczIgKnNyZWdzMilcXG4gNjg3OlxcdHtcXG4gNjg4OlxcdFxcdGludCBtbXVfcmVzZXRfbmVlZGVkID0gMDtcXG4gNjg5OlxcdFxcdGJvb2wgdmFsaWRfcGRwdHJzID0gc3JlZ3MyLVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9TUkVHUzJfRkxBR1NfUERQVFJTX1ZBTElEO1xcbiA2OTA6XFx0XFx0Ym9vbCBwYWUgPSAoc3JlZ3MyLVxcdTAwM2VjcjAgXFx1MDAyNiBYODZfQ1IwX1BHKSBcXHUwMDI2XFx1MDAyNiAoc3JlZ3MyLVxcdTAwM2VjcjQgXFx1MDAyNiBYODZfQ1I0X1BBRSkgXFx1MDAyNlxcdTAwMjZcXG4gNjkxOlxcdFxcdFxcdCEoc3JlZ3MyLVxcdTAwM2VlZmVyIFxcdTAwMjYgRUZFUl9MTUEpO1xcbiA2OTI6XFx0XFx0aW50IGksIHJldDtcXG4gNjkzOlxcdFxcbiA2OTQ6XFx0XFx0aWYgKHNyZWdzMi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB+S1ZNX1NSRUdTMl9GTEFHU19QRFBUUlNfVkFMSUQpXFxuIDY5NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjk2OlxcdFxcbiA2OTc6XFx0XFx0aWYgKHZhbGlkX3BkcHRycyBcXHUwMDI2XFx1MDAyNiAoIXBhZSB8fCB2Y3B1LVxcdTAwM2VhcmNoLmd1ZXN0X3N0YXRlX3Byb3RlY3RlZCkpXFxuIDY5ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMDozOTo1NS44NjIyNjE3NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1MDY4NjgxNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0geDg2IFJlZ2lzdGVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGFyY2gveDg2L2t2bS9yZWdzLmNgLCB3aGljaCBpcyB0aGUga2V5IGZpbGUgZm9yIHg4NiByZWdpc3RlciBoYW5kbGluZyB3aXRoaW4gS1ZNLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHJlZ2lzdGVyIG1hbmlwdWxhdGlvbiBpcyBjaGFuZ2luZy5cblxuTG9va2luZyBhdCB0aGUgZnVuY3Rpb24gY2hhbmdlcywgd2UgaGF2ZTpcblxuKiAgIGBrdm1faXNfdmFsaWRfY3I4YCAoc3RhdGljKTogQSBzdGF0aWMgZnVuY3Rpb24sIGxpa2VseSBhbiBpbnRlcm5hbCBoZWxwZXIgdG8gdmFsaWRhdGUgdGhlIENSOCByZWdpc3Rlci4gVGhlIFwic3RhdGljXCIgYXNwZWN0IG1lYW5zIGl0J3MgbGltaXRlZCBpbiBzY29wZSBhbmQgaXNuJ3QgbWVhbnQgdG8gYmUgdXNlZCBvdXRzaWRlIHRoZSBmaWxlLiBUaGF0IHN1Z2dlc3RzIHRoaXMgaXMgYWJvdXQgaW50ZXJuYWwgY29uc2lzdGVuY3kgYW5kIG5vdCBhbiBleHBvc2VkIGludGVyZmFjZSBjaGFuZ2UuXG4qICAgYGt2bV9zZXRfY3I4YDogVGhpcyBvbmUncyBpbXBvcnRhbnQuIEl0IGltcGxpZXMgdGhhdCB0aGVyZSdzIGxvZ2ljIGJlaW5nIGFsdGVyZWQgZm9yIHdyaXRpbmcgdG8gdGhlIENSOCByZWdpc3Rlci4gQ1I4IGlzIHRoZSBUYXNrIFByaW9yaXR5IFJlZ2lzdGVyIChUUFIpLCBhbmQgaXQgaGFzIGEgZGlyZWN0IGltcGFjdCBvbiBpbnRlcnJ1cHQgaGFuZGxpbmcgYW5kIHByaW9yaXRpemF0aW9uLiBUaGlzIHBhcnQgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgb24gdGFzayBtYW5hZ2VtZW50IG9yIHZpcnR1YWxpemF0aW9uLlxuKiAgIGBrdm1faXNfdmFsaWRfc3JlZ3NgIChzdGF0aWMsIGNhbGxlZCBpbiBgX19zZXRfc3JlZ3NfY29tbW9uYCk6IEFub3RoZXIgaW50ZXJuYWwgdmFsaWRhdGlvbiBmdW5jdGlvbiwgdGhpcyB0aW1lIGZvciBzZWdtZW50IHJlZ2lzdGVycy4gYF9fc2V0X3NyZWdzX2NvbW1vbmAgaXMgdGhlIGtleSB0aG91Z2guIFNldHRpbmcgc2VnbWVudCByZWdpc3RlcnMgaXMgZnVuZGFtZW50YWwgdG8gdGhlIGFyY2hpdGVjdHVyZS5cblxuU2luY2UgYGt2bV9zZXRfY3I4YCBpcyBhIGZ1bmN0aW9uIHdpdGggcG90ZW50aWFsIGZvciBicm9hZCBpbXBhY3QsIEkgbmVlZCB0byBrbm93IHdoZXJlIGl0J3MgYmVpbmcgKmNhbGxlZCogZnJvbSwgYW5kIGhvdyB0aGUgY2hhbmdlcyB0byBpdCBoYXZlIGNoYW5nZWQgdGhlIGNvZGUuIEkgbmVlZCB0byBncmVwIGZvciBga3ZtX3NldF9jcjhgIGluIHRoZSBzb3VyY2UgdHJlZSB0byBpZGVudGlmeSB3aGVyZSBpdCdzIGJlaW5nIHVzZWQuIFRoYXQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgdGhlIGNoYW5nZSBhbmQgaWYgdGhlcmUgYXJlIGFueSBkb3duc3RyZWFtIGltcGxpY2F0aW9ucyB0byBjb25zaWRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTExNSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIwOjQwOjAwLjM2OTEzMjA3NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzNDg4NzAwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fc2V0X2NyOFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vcmVncy5jPTQ0Mz1zdGF0aWMgYm9vbCBrdm1faXNfdmFsaWRfY3I4KHVuc2lnbmVkIGxvbmcgY3I4KVxcbi0tXFxuYXJjaC94ODYva3ZtL3JlZ3MuYy00NDctXFxuYXJjaC94ODYva3ZtL3JlZ3MuYzo0NDg6aW50IGt2bV9zZXRfY3I4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjgpXFxuYXJjaC94ODYva3ZtL3JlZ3MuYy00NDkte1xcbi0tXFxuYXJjaC94ODYva3ZtL3JlZ3MuYy00NTctfVxcbmFyY2gveDg2L2t2bS9yZWdzLmM6NDU4OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2V0X2NyOCk7XFxuYXJjaC94ODYva3ZtL3JlZ3MuYy00NTktXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcmVncy5jPTU3Nz1zdGF0aWMgaW50IF9fc2V0X3NyZWdzX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzLFxcbi0tXFxuYXJjaC94ODYva3ZtL3JlZ3MuYy02MzItXFxuYXJjaC94ODYva3ZtL3JlZ3MuYzo2MzM6XFx0a3ZtX3NldF9jcjgodmNwdSwgc3JlZ3MtXFx1MDAzZWNyOCk7XFxuYXJjaC94ODYva3ZtL3JlZ3MuYy02MzQtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcmVncy5oPTYxPWludCBrdm1fc2V0X2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KTtcXG5hcmNoL3g4Ni9rdm0vcmVncy5oOjYyOmludCBrdm1fc2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I4KTtcXG5hcmNoL3g4Ni9rdm0vcmVncy5oLTYzLWludCBrdm1fc2V0X2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyLCB1bnNpZ25lZCBsb25nIHZhbCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTI1ODc9c3RhdGljIGludCBjcl9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNjI1LVxcdFxcdGNhc2UgODpcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjI2MjY6XFx0XFx0XFx0ZXJyID0ga3ZtX3NldF9jcjgodmNwdSwgdmFsKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI2MjctXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTI2NjE9c3RhdGljIGludCBjcl90cmFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjY4NC1cXHRjYXNlIDg6XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNjg1OlxcdFxcdHJldCA9IGt2bV9zZXRfY3I4KHZjcHUsIG5ld192YWx1ZSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNjg2LVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0yNzM1PXN0YXRpYyBpbnQgY3I4X3dyaXRlX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI3NDEtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNzQyOlxcdC8qIGluc3RydWN0aW9uIGVtdWxhdGlvbiBjYWxscyBrdm1fc2V0X2NyOCgpICovXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNzQzLVxcdHIgPSBjcl9pbnRlcmNlcHRpb24odmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTQyNjg9c3RhdGljIGlubGluZSB2b2lkIHN5bmNfY3I4X3RvX2xhcGljKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDI3Ni1cXHRcXHRpbnQgY3I4ID0gc3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmludF9jdGwgXFx1MDAyNiBWX1RQUl9NQVNLO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDI3NzpcXHRcXHRrdm1fc2V0X2NyOCh2Y3B1LCBjcjgpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDI3OC1cXHR9XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTUwNDI9dm9pZCB2bXhfdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTA1NC1cXHR2bXgtXFx1MDAzZWh2X2RlYWRsaW5lX3RzYyA9IC0xO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NTA1NTpcXHRrdm1fc2V0X2NyOCh2Y3B1LCAwKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTUwNTYtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTU2Nzg9c3RhdGljIGludCBoYW5kbGVfY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01NzA3LVxcdFxcdFxcdFxcdHU4IGNyOCA9ICh1OCl2YWw7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo1NzA4OlxcdFxcdFxcdFxcdGVyciA9IGt2bV9zZXRfY3I4KHZjcHUsIGNyOCk7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01NzA5LVxcdFxcdFxcdFxcdHJldCA9IGt2bV9jb21wbGV0ZV9pbnNuX2dwKHZjcHUsIGVycik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTUzNT1zdGF0aWMgaW50IGVtdWxhdG9yX3NldF9jcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgaW50IGNyLCB1bG9uZyB2YWwpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTU1My1cXHRjYXNlIDg6XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjU1NTQ6XFx0XFx0cmVzID0ga3ZtX3NldF9jcjgodmNwdSwgdmFsKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTU1NS1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz04ODgxPWludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtODk0NS1cXHRpZiAoIWxhcGljX2luX2tlcm5lbCh2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS94ODYuYzo4OTQ2OlxcdFxcdGlmIChrdm1fc2V0X2NyOCh2Y3B1LCBrdm1fcnVuLVxcdTAwM2VjcjgpICE9IDApIHtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODk0Ny1cXHRcXHRcXHRyID0gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjA6NDA6MDIuMDA0MDI1ODExWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwNDIzMzgyNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVmFsaWRhdGluZyBDUjggaW4gS1ZNOiBBIFBhdGNoIEFuYWx5c2lzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSBga3ZtX3NldF9jcjhgIGJlaW5nIGludm9rZWQgYWNyb3NzIGRpZmZlcmVudCBLVk0gY29udGV4dHMsIGxpa2UgYF9fc2V0X3NyZWdzX2NvbW1vbmAsIGBlbXVsYXRvcl9zZXRfY3JgLCBhbmQgdGhlIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAgcGF0aC4gSW50ZXJlc3RpbmcuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgYGt2bV9pc192YWxpZF9zcmVnc2AgZnVuY3Rpb24sIHdoaWNoIGlzIGNydWNpYWwgZm9yIHZhbGlkYXRpbmcgc3lzdGVtIHJlZ2lzdGVycywgd2FzICpub3QqIGNoZWNraW5nIHRoZSB2YWxpZGl0eSBvZiBgY3I4YCB0aHJvdWdoIGBrdm1faXNfdmFsaWRfY3I4KHNyZWdzLVx1MDAzZWNyOClgLiBUaGF0J3MgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS5cblxuU28sIHdoYXQgdGhpcyBwYXRjaCBkb2VzIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQgZW5zdXJlcyB0aGF0IGBLVk1fU0VUX1NSRUdTYCBhbmQgYEtWTV9TRVRfU1JFR1MyYCwgYWxvbmcgd2l0aCB0aG9zZSByZWxldmFudCBpb2N0bCBlbnRyeSBwb2ludHMgbGlrZSBga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3NgIGFuZCBga3ZtX3ZjcHVfaW9jdGxfeDg2X3NldF9zcmVnczJgLCBub3cgaW5jbHVkZSB0aGlzIGNyaXRpY2FsIGNoZWNrIGZvciB0aGUgdmFsaWRpdHkgb2YgYGNyOGAgKmJlZm9yZSogbW9kaWZ5aW5nIHN5c3RlbSByZWdpc3RlcnMuIFRoaXMgZWZmZWN0aXZlbHkgcHJldmVudHMgdGhlIGludHJvZHVjdGlvbiBvZiBpbnZhbGlkIGBjcjhgIHZhbHVlcywgd2hpY2ggaXMgYSBnb29kIHRoaW5nIGZvciBzZWN1cml0eSBhbmQgc3RhYmlsaXR5LlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzLCBcIklzIHRoaXMgcmVhY2hhYmxlIGNvZGU/XCIgQWJzb2x1dGVseS4gS1ZNIGlvY3RscyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb24geDg2L2FtZDY0IHN5c3RlbXMsIGFuZCB3ZSBrbm93IHN5emthbGxlciwgYSBwcm9taW5lbnQgZnV6emVyLCBoZWF2aWx5IGV4ZXJjaXNlcyBgL2Rldi9rdm1gIHRocm91Z2ggaW9jdGxzIGxpa2UgYEtWTV9TRVRfU1JFR1NgLiBUaGlzIHZ1bG5lcmFiaWxpdHkgaXMgZGVmaW5pdGVseSBleHBsb2l0YWJsZS5cblxuVG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiwgbGV0J3Mgc2VlIHdoaWNoIEtjb25maWcgb3B0aW9ucyBhcmUgcmVxdWlyZWQ6IGBLVk1gIG9yIGBLVk1fSU5URUxgIC8gYEtWTV9BTURgLiBUaGF0IHNlZW1zIHJpZ2h0LiBBbmQgbm93IEkgc2hvdWxkIGNoZWNrIHRoZSByZWxldmFudCBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZpbGUuIFllcywgdGhpcyBwYXRjaCBtYWtlcyBzZW5zZS4gSXQncyBhIHNvbGlkIGRlZmVuc2UgYWdhaW5zdCBwb3RlbnRpYWwgcHJpdmlsZWdlIGVzY2FsYXRpb24gb3Igc3lzdGVtIGluc3RhYmlsaXR5IGR1ZSB0byBmYXVsdHkgb3IgbWFsaWNpb3VzIGBjcjhgIHZhbHVlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMzEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjA6NDA6MDYuMDQ2MzY2MTY5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzMxNDI2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzM6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzQtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgzOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTg0LVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5NDpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDctXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA4OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNzpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxOC1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMDpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMzOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjM0LVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjA6NDA6MDYuMDkzNjg1NDIxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMDQ1ODY2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgS1ZNIHg4NiBNYWtlZmlsZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGEgY3J1Y2lhbCBmaWxlOiBgYXJjaC94ODYva3ZtL01ha2VmaWxlYC4gSSdtIGd1ZXNzaW5nIHRoYXQgd2hhdGV2ZXIgSSdtIHRyb3VibGVzaG9vdGluZywgb3Igd2hhdGV2ZXIgZW5oYW5jZW1lbnQgSSdtIHdvcmtpbmcgb24sIGxpa2VseSBoYXMgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBjb3JlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZSBLVk0geDg2IG1vZHVsZS4gVGhpcyBNYWtlZmlsZSBpcyB3aGVyZSBhIGxvdCBvZiB0aGUgbWFnaWMgaGFwcGVucyDigJMgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkLCBjb21waWxhdGlvbiB0YXJnZXRzIGFyZSBzZXQgdXAsIGFuZCB1bHRpbWF0ZWx5LCB0aGUgS1ZNIGtlcm5lbCBtb2R1bGUgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGdldHMgYnVpbHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZmlsZSdzIGxvZ2ljIHRvIHNlZSB3aGVyZSBteSBjaGFuZ2VzIGZpdCBpbiBvciB3aGVyZSB0aGUgcHJvYmxlbSBsaWVzLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzIzNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIwOjQwOjA4LjE5ODI3NDgyMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdGNjZmxhZ3MteSArPSAtSSAkKHNyY3RyZWUpL2FyY2gveDg2L2t2bVxcbiAgIDQ6XFx0Y2NmbGFncy0kKENPTkZJR19LVk1fV0VSUk9SKSArPSAtV2Vycm9yXFxuICAgNTpcXHRcXG4gICA2OlxcdGluY2x1ZGUgJChzcmN0cmVlKS92aXJ0L2t2bS9NYWtlZmlsZS5rdm1cXG4gICA3OlxcdFxcbiAgIDg6XFx0a3ZtLXlcXHRcXHRcXHQrPSB4ODYubyBlbXVsYXRlLm8gaXJxLm8gbGFwaWMubyBjcHVpZC5vIG1zcnMubyBwbXUubyByZWdzLm8gXFxcXFxcbiAgIDk6XFx0XFx0XFx0XFx0ICAgbXRyci5vIGRlYnVnZnMubyBtbXUvbW11Lm8gbW11L3BhZ2VfdHJhY2subyBtbXUvc3B0ZS5vXFxuICAxMDpcXHRcXG4gIDExOlxcdGt2bS0kKENPTkZJR19YODZfNjQpICs9IG1tdS90ZHBfaXRlci5vIG1tdS90ZHBfbW11Lm9cXG4gIDEyOlxcdGt2bS0kKENPTkZJR19LVk1fSU9BUElDKSArPSBpODI1OS5vIGk4MjU0Lm8gaW9hcGljLm9cXG4gIDEzOlxcdGt2bS0kKENPTkZJR19LVk1fSFlQRVJWKSArPSBoeXBlcnYub1xcbiAgMTQ6XFx0a3ZtLSQoQ09ORklHX0tWTV9YRU4pXFx0Kz0geGVuLm9cXG4gIDE1OlxcdGt2bS0kKENPTkZJR19LVk1fU01NKVxcdCs9IHNtbS5vXFxuICAxNjpcXHRcXG4gIDE3OlxcdGt2bS1pbnRlbC15XFx0XFx0Kz0gdm14L3ZteC5vIHZteC92bWVudGVyLm8gdm14L3BtdV9pbnRlbC5vIHZteC92bWNzMTIubyBcXFxcXFxuICAxODpcXHRcXHRcXHRcXHQgICB2bXgvbmVzdGVkLm8gdm14L3Bvc3RlZF9pbnRyLm8gdm14L21haW4ub1xcbiAgMTk6XFx0XFxuICAyMDpcXHRrdm0taW50ZWwtJChDT05GSUdfWDg2X1NHWF9LVk0pXFx0Kz0gdm14L3NneC5vXFxuICAyMTpcXHRrdm0taW50ZWwtJChDT05GSUdfS1ZNX0hZUEVSVilcXHQrPSB2bXgvaHlwZXJ2Lm8gdm14L2h5cGVydl9ldm1jcy5vXFxuICAyMjpcXHRrdm0taW50ZWwtJChDT05GSUdfS1ZNX0lOVEVMX1REWClcXHQrPSB2bXgvdGR4Lm9cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0a3ZtLWFtZC15XFx0XFx0Kz0gc3ZtL3N2bS5vIHN2bS92bWVudGVyLm8gc3ZtL3BtdS5vIHN2bS9uZXN0ZWQubyBzdm0vYXZpYy5vXFxuICAyNTpcXHRcXG4gIDI2OlxcdGt2bS1hbWQtJChDT05GSUdfS1ZNX0FNRF9TRVYpXFx0Kz0gc3ZtL3Nldi5vXFxuICAyNzpcXHRrdm0tYW1kLSQoQ09ORklHX0tWTV9IWVBFUlYpXFx0Kz0gc3ZtL2h5cGVydi5vXFxuICAyODpcXHRcXG4gIDI5OlxcdGlmZGVmIENPTkZJR19IWVBFUlZcXG4gIDMwOlxcdGt2bS15XFx0XFx0XFx0Kz0ga3ZtX29uaHlwZXJ2Lm9cXG4gIDMxOlxcdGt2bS1pbnRlbC15XFx0XFx0Kz0gdm14L3ZteF9vbmh5cGVydi5vIHZteC9oeXBlcnZfZXZtY3Mub1xcbiAgMzI6XFx0a3ZtLWFtZC15XFx0XFx0Kz0gc3ZtL3N2bV9vbmh5cGVydi5vXFxuICAzMzpcXHRlbmRpZlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRvYmotJChDT05GSUdfS1ZNX1g4NilcXHQrPSBrdm0ub1xcbiAgMzY6XFx0b2JqLSQoQ09ORklHX0tWTV9JTlRFTClcXHQrPSBrdm0taW50ZWwub1xcbiAgMzc6XFx0b2JqLSQoQ09ORklHX0tWTV9BTUQpXFx0Kz0ga3ZtLWFtZC5vXFxuICAzODpcXHRcXG4gIDM5OlxcdEFGTEFHU19zdm0vdm1lbnRlci5vICAgIDo9IC1pcXVvdGUgJChvYmopXFxuICA0MDpcXHQkKG9iaikvc3ZtL3ZtZW50ZXIubzogJChvYmopL2t2bS1hc20tb2Zmc2V0cy5oXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIwOjQwOjA4LjE5ODM0MDI1MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzQzMzc4NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIENoYW5nZXMgdG8gYHJlZ3Mub2AgaW4gS1ZNLVkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgcmVncy5vYCBoZXJlLCB3aGljaCBpcyBjbGVhcmx5IHBhcnQgb2YgdGhlIGBrdm0teWAgYnVpbGQuIFRoaXMgaXMgY29uZGl0aW9uYWwgb24gYENPTkZJR19LVk1fWDg2YCBvciBgQ09ORklHX0tWTWAgYmVpbmcgZW5hYmxlZCwgYW5kLCBpbXBvcnRhbnRseSwgZWl0aGVyIGBDT05GSUdfS1ZNX0lOVEVMYCBvciBgQ09ORklHX0tWTV9BTURgIGFzIHdlbGwuIFRoYXQgbWVhbnMgYEtWTWAgYW5kIGVpdGhlciBgS1ZNX0lOVEVMYCBvciBgS1ZNX0FNRGAgYXJlIGZ1bmRhbWVudGFsbHkgcmVxdWlyZWQgZm9yIHRoaXMuIEdvdCBpdC5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIGludG8gdGhlIGFmZmVjdGVkIHN5bWJvbHMuIEkgc2VlIG1vZGlmaWNhdGlvbnMgaW4gYGFyY2gveDg2L2t2bS9yZWdzLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIHRvdWNoOlxuXG4qICAgYGt2bV9zZXRfY3I4YFxuKiAgIGBrdm1faXNfdmFsaWRfY3I4YCAodGhpcyBvbmUncyBzdGF0aWMpXG4qICAgYGt2bV9pc192YWxpZF9zcmVnc2AgKGFsc28gc3RhdGljKVxuKiAgIGBfX3NldF9zcmVnc19jb21tb25gIC8gYF9fc2V0X3NyZWdzYCAodGhlc2UgYXJlIHN0YXRpYyB0b28pXG4qICAgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzYCAodGhpcyBpcyBhIG5vbi1zdGF0aWMgZW50cnlwb2ludClcbiogICBga3ZtX3ZjcHVfaW9jdGxfeDg2X3NldF9zcmVnczJgIChhbm90aGVyIG5vbi1zdGF0aWMgZW50cnlwb2ludClcblxuVGhlIGNyaXRpY2FsIHRoaW5nIGlzIHRvIGRldGVybWluZSBpZiB0aG9zZSBub24tc3RhdGljIGZ1bmN0aW9ucywgYGt2bV9zZXRfY3I4YCwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzYCwgYW5kIGBrdm1fdmNwdV9pb2N0bF94ODZfc2V0X3NyZWdzMmAsIGFyZSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIEkgdGhpbmsgdGhleSBhcmUuIFllcywgYSBxdWljayBjaGVjayBjb25maXJtcyB0aGlzLCB0aGV5J3JlIHRoZSBvbmVzIEknbSBsb29raW5nIGF0LlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gY2hlY2sgZm9yIHNpZGUgZWZmZWN0cyBhbmQgZW5zdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMuIExldCdzIGRpZyBpbnRvIHRoZSBwYXRjaCBkaWZmIHRvIGNvbmZpcm0gdGhhdCBga3ZtX2lzX3ZhbGlkX3NyZWdzYCBpcyBiZWluZyB1c2VkIHRvIHZhbGlkYXRlIGBjcjhgLiBUaGF0IGNvbmZpcm1zIGl0LiBJdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBjb2RlIGluIGBrdm1fc2V0X2NyOGAgd2FzIHJlcGxhY2VkIHdpdGggYSBjYWxsIHRvIGBrdm1faXNfdmFsaWRfY3I4YCwgd2hpY2ggbm93IGNoZWNrcyB0aGUgcmVzZXJ2ZWQgYml0cyBpbnN0ZWFkLiBBZGRpdGlvbmFsbHksIGBrdm1faXNfdmFsaWRfc3JlZ3NgIGlzIGJlaW5nIHVzZWQgbm93IHRvIHZhbGlkYXRlIGBzcmVncy1cdTAwM2VjcjhgLlxuXG5Ob3cgSSBuZWVkIHRvIGNoZWNrIGlmIGBrdm1fdmNwdV9pb2N0bF94ODZfc2V0X3NyZWdzMmAgY2FsbHMgYGt2bV9pc192YWxpZF9zcmVnc2AuIFRoaXMgaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgY2hhbmdlIHByb3BhZ2F0ZXMuIFxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM0OCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIwOjQwOjEyLjU0MTcyMTMwMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vcmVncy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY4NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY4NTpcXHRpbnQga3ZtX3ZjcHVfaW9jdGxfeDg2X3NldF9zcmVnczIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiA2ODY6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga3ZtX3NyZWdzMiAqc3JlZ3MyKVxcbiA2ODc6XFx0e1xcbiA2ODg6XFx0XFx0aW50IG1tdV9yZXNldF9uZWVkZWQgPSAwO1xcbiA2ODk6XFx0XFx0Ym9vbCB2YWxpZF9wZHB0cnMgPSBzcmVnczItXFx1MDAzZWZsYWdzIFxcdTAwMjYgS1ZNX1NSRUdTMl9GTEFHU19QRFBUUlNfVkFMSUQ7XFxuIDY5MDpcXHRcXHRib29sIHBhZSA9IChzcmVnczItXFx1MDAzZWNyMCBcXHUwMDI2IFg4Nl9DUjBfUEcpIFxcdTAwMjZcXHUwMDI2IChzcmVnczItXFx1MDAzZWNyNCBcXHUwMDI2IFg4Nl9DUjRfUEFFKSBcXHUwMDI2XFx1MDAyNlxcbiA2OTE6XFx0XFx0XFx0IShzcmVnczItXFx1MDAzZWVmZXIgXFx1MDAyNiBFRkVSX0xNQSk7XFxuIDY5MjpcXHRcXHRpbnQgaSwgcmV0O1xcbiA2OTM6XFx0XFxuIDY5NDpcXHRcXHRpZiAoc3JlZ3MyLVxcdTAwM2VmbGFncyBcXHUwMDI2IH5LVk1fU1JFR1MyX0ZMQUdTX1BEUFRSU19WQUxJRClcXG4gNjk1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA2OTY6XFx0XFxuIDY5NzpcXHRcXHRpZiAodmFsaWRfcGRwdHJzIFxcdTAwMjZcXHUwMDI2ICghcGFlIHx8IHZjcHUtXFx1MDAzZWFyY2guZ3Vlc3Rfc3RhdGVfcHJvdGVjdGVkKSlcXG4gNjk4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA2OTk6XFx0XFxuIDcwMDpcXHRcXHRyZXQgPSBfX3NldF9zcmVnc19jb21tb24odmNwdSwgKHN0cnVjdCBrdm1fc3JlZ3MgKilzcmVnczIsXFxuIDcwMTpcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNm1tdV9yZXNldF9uZWVkZWQsICF2YWxpZF9wZHB0cnMpO1xcbiA3MDI6XFx0XFx0aWYgKHJldClcXG4gNzAzOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDcwNDpcXHRcXG4gNzA1OlxcdFxcdGlmICh2YWxpZF9wZHB0cnMpIHtcXG4gNzA2OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyA0IDsgaSsrKVxcbiA3MDc6XFx0XFx0XFx0XFx0a3ZtX3BkcHRyX3dyaXRlKHZjcHUsIGksIHNyZWdzMi1cXHUwMDNlcGRwdHJzW2ldKTtcXG4gNzA4OlxcdFxcbiA3MDk6XFx0XFx0XFx0a3ZtX3JlZ2lzdGVyX21hcmtfZGlydHkodmNwdSwgVkNQVV9SRUdfUERQVFIpO1xcbiA3MTA6XFx0XFx0XFx0bW11X3Jlc2V0X25lZWRlZCA9IDE7XFxuIDcxMTpcXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnBkcHRyc19mcm9tX3VzZXJzcGFjZSA9IHRydWU7XFxuIDcxMjpcXHRcXHR9XFxuIDcxMzpcXHRcXHRpZiAobW11X3Jlc2V0X25lZWRlZCkge1xcbiA3MTQ6XFx0XFx0XFx0a3ZtX21tdV9yZXNldF9jb250ZXh0KHZjcHUpO1xcbiA3MTU6XFx0XFx0XFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1RMQl9GTFVTSF9HVUVTVCwgdmNwdSk7XFxuIDcxNjpcXHRcXHR9XFxuIDcxNzpcXHRcXHRyZXR1cm4gMDtcXG4gNzE4OlxcdH1cXG4gNzE5OlxcdFxcbiA3MjA6XFx0dm9pZCBrdm1fcnVuX3N5bmNfcmVnc190b191c2VyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gNzIxOlxcdHtcXG4gNzIyOlxcdFxcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGt2bV9zeW5jX3JlZ3MpIFxcdTAwM2UgU1lOQ19SRUdTX1NJWkVfQllURVMpO1xcbiA3MjM6XFx0XFxuIDcyNDpcXHRcXHRpZiAodmNwdS1cXHUwMDNlcnVuLVxcdTAwM2Vrdm1fdmFsaWRfcmVncyBcXHUwMDI2IEtWTV9TWU5DX1g4Nl9SRUdTKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMDo0MDoxMi41NDE4MTA0MzJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUyNjYxMzI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogUmVnaXN0ZXIgVmFsaWRhdGlvbiBpbiBLVk0qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCBpdC4gQm90aCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3NgIGFuZCBga3ZtX3ZjcHVfaW9jdGxfeDg2X3NldF9zcmVnczJgIHVsdGltYXRlbHkgY2FsbCBgX19zZXRfc3JlZ3NfY29tbW9uYCwgd2hpY2ggaW4gdHVybiByZWxpZXMgb24gYGt2bV9pc192YWxpZF9zcmVnc2AuIFRoYXQncyBhIGNyaXRpY2FsIHBhdGguIEFuZCwganVzdCBhcyBpbXBvcnRhbnRseSwgYGt2bV9zZXRfY3I4YCBpcyBhIGRpc3RpbmN0IGdsb2JhbCBmdW5jdGlvbiB0aGF0J3MgYWxzbyBiZWluZyBtb2RpZmllZCBieSB0aGUgcHJvcG9zZWQgcGF0Y2guXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHdoZXRoZXIgdGhpcyBpcyBzb21ldGhpbmcgd2Ugc2hvdWxkIGFjdHVhbGx5IGZ1enouICpZZXMqLCB0aGlzIGRlZmluaXRlbHkgZml0cyB0aGUgYmlsbC4gV2UncmUgbG9va2luZyBhdCByZWFjaGFibGUgS1ZNIGtlcm5lbCBjb2RlLiBTcGVjaWZpY2FsbHksIHRoaXMgaXMgY29kZSB0aGF0J3MgcmVzcG9uc2libGUgZm9yICptb2RpZnlpbmcgcmVnaXN0ZXIgdmFsaWRhdGlvbiBsb2dpYyogcmVsYXRlZCB0byB0aGUgQ1I4IHJlZ2lzdGVyIGFuZCB0aGUgc3JlZ3MgaW9jdGxzLiBUaGF0J3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZm9jdXMgaGVyZSB3aWxsIGJlIG9uIHRob3NlIHNwZWNpZmljIHN5bWJvbHM6IGBrdm1fc2V0X2NyOGAsIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zcmVnc2AsIGFuZCBga3ZtX3ZjcHVfaW9jdGxfeDg2X3NldF9zcmVnczJgLlxuXG5CZWZvcmUgSSBjb21taXQgdG8gdGhpcywgbGV0J3MgbWFrZSBhIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgdGhlIGNvbmZpZ3MgbGluZSB1cCB3aXRoIHRoZSBzeW1ib2xzLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgdG8gZG8gdGhpcy4gQ29uZmlncyBhcmUgZGVmaW5pdGVseSBjb3JyZWN0OiBgS1ZNYCwgYEtWTV9JTlRFTGAsIGFuZCBgS1ZNX0FNRGAuXG5cbkFscmlnaHQsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gV2UgaGF2ZSBhIHNvbGlkIFwiV29ydGhGdXp6aW5nOiB0cnVlXCIgdmVyZGljdC4gVGhlIHJlYXNvbmluZyBpcyBjb25jaXNlIGFuZCBjbGVhci4gV2UncmUgZGlyZWN0bHkgdGFyZ2V0aW5nIGNvZGUgdGhhdCB2YWxpZGF0ZXMgcmVnaXN0ZXJzLCBhbmQgdGhhdCdzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgZnV6emluZyBleGNlbHMgYXQuXG5cbk5vdywgaXQncyB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gV2UncmUgZ29vZCB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MjcsIk91dHB1dFRva2VucyI6MTY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjA6NDA6MTYuMDY4NDI2NDU0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ4MjYzNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3NldF9jcjhcIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzXCIsXG4gICAgXCJrdm1fdmNwdV9pb2N0bF94ODZfc2V0X3NyZWdzMlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgQ1I4IHJlc2VydmVkIGJpdHMgaW4gS1ZNIHdoZW4gc2V0dGluZyBzcGVjaWFsIHJlZ2lzdGVycyAoc3JlZ3MgLyBzcmVnczIpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaW4geDg2IEtWTSBhY2Nlc3NpYmxlIHZpYSB1c2VyLXNwYWNlIGlvY3RscyAoS1ZNX1NFVF9TUkVHUywgS1ZNX1NFVF9TUkVHUzIpIGFuZCBDUjggZW11bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3NldF9jcjhcIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzXCIsXG4gICAgXCJrdm1fdmNwdV9pb2N0bF94ODZfc2V0X3NyZWdzMlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgQ1I4IHJlc2VydmVkIGJpdHMgaW4gS1ZNIHdoZW4gc2V0dGluZyBzcGVjaWFsIHJlZ2lzdGVycyAoc3JlZ3MgLyBzcmVnczIpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaW4geDg2IEtWTSBhY2Nlc3NpYmxlIHZpYSB1c2VyLXNwYWNlIGlvY3RscyAoS1ZNX1NFVF9TUkVHUywgS1ZNX1NFVF9TUkVHUzIpIGFuZCBDUjggZW11bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMDo0MDoxNi4xNDMyNjA0MTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDY0MzY0MzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjA6NDA6MTYuMTQzNzA0MjYyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTEwNjM5MTY5MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiBmb3IgQ1I4IHJlZ2lzdGVyIHZhbHVlcyBpbiBLVk0gKGBrdm1faXNfdmFsaWRfY3I4YCksIGVuc3VyaW5nIHRoYXQgcmVzZXJ2ZWQgYml0cyAoNjM6NCkgaW4gQ1I4IGNhbm5vdCBiZSBzZXQgdmlhIGBLVk1fU0VUX1NSRUdTYCAoY2hlY2tlZCBpbiBga3ZtX2lzX3ZhbGlkX3NyZWdzYCkgb3IgYGt2bV9zZXRfY3I4YCwgYWxvbmcgd2l0aCBjb3JyZXNwb25kaW5nIHNlbGZ0ZXN0IHVwZGF0ZXMuXFxuXFxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlIG9ubHkgcGVyZm9ybXMgYml0d2lzZSB2YWxpZGF0aW9uIG9uIGlucHV0IHZhbHVlcyAoYHNyZWdzLVxcdTAwM2VjcjhgIC8gYGNyOGApIHBhc3NlZCBpbnRvIEtWTSBmcm9tIHVzZXJzcGFjZSBvciBjYWxsZXJzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LCBub3IgZG9lcyBpdCBhbHRlciBhbnkga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcHkgb3BlcmF0aW9ucyAoaW5mby1sZWFrcykgb3Igc3RydWN0dXJlIHBhZGRpbmcuXFxuLSBLQVNBTi9TdGFuZGFyZCB0ZXN0aW5nIGFwcGxpY2FiaWxpdHk6IFN0YW5kYXJkIGZ1bmN0aW9uYWwgdGVzdGluZyBhbmQgS1ZNIHNlbGZ0ZXN0cyBhZGVxdWF0ZWx5IHZlcmlmeSB0aGlzIGlucHV0IHZhbGlkYXRpb24gbG9naWMuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHBvc2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzOTJlZDZiMDMwZGRjZTYzNGJhYzRjMjJkMDZmNmU5ODYzZGMyODRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMDozOTozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9yZWdzLmMgYi9hcmNoL3g4Ni9rdm0vcmVncy5jXG5pbmRleCA4ZjY2NDM4OTg5ZTQ3Li5mYWQzMWI1OWM2MjJmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3JlZ3MuY1xuKysrIGIvYXJjaC94ODYva3ZtL3JlZ3MuY1xuQEAgLTQ0MCw5ICs0NDAsMTQgQEAgaW50IGt2bV9zZXRfY3I0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjQpXG4gfVxuIEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2V0X2NyNCk7XG4gXG4rc3RhdGljIGJvb2wga3ZtX2lzX3ZhbGlkX2NyOCh1bnNpZ25lZCBsb25nIGNyOClcbit7XG4rXHRyZXR1cm4gIShjcjggXHUwMDI2IENSOF9SRVNFUlZFRF9CSVRTKTtcbit9XG4rXG4gaW50IGt2bV9zZXRfY3I4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjgpXG4ge1xuLVx0aWYgKGNyOCBcdTAwMjYgQ1I4X1JFU0VSVkVEX0JJVFMpXG4rXHRpZiAoIWt2bV9pc192YWxpZF9jcjgoY3I4KSlcbiBcdFx0cmV0dXJuIDE7XG4gXHRpZiAobGFwaWNfaW5fa2VybmVsKHZjcHUpKVxuIFx0XHRrdm1fbGFwaWNfc2V0X3Rwcih2Y3B1LCBjcjgpO1xuQEAgLTU2NSw2ICs1NzAsNyBAQCBzdGF0aWMgYm9vbCBrdm1faXNfdmFsaWRfc3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncylcbiBcbiBcdHJldHVybiBrdm1faXNfdmFsaWRfY3I0KHZjcHUsIHNyZWdzLVx1MDAzZWNyNCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgICAga3ZtX2lzX3ZhbGlkX2NyMCh2Y3B1LCBzcmVncy1cdTAwM2VjcjApIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIGt2bV9pc192YWxpZF9jcjgoc3JlZ3MtXHUwMDNlY3I4KSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICBrdm1fdmFsaWRfZWZlcih2Y3B1LCBzcmVncy1cdTAwM2VlZmVyKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jXG5pbmRleCA2MDMyMjZmZmU0Mzc0Li40ZTdjMzUxNzk0MzgzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmNcbkBAIC0xMzUsNiArMTM1LDE4IEBAIHN0YXRpYyB2b2lkIHRlc3RfY3JfYml0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBjcjQpXG4gXHQvKiBOVyB3aXRob3V0IENEIGlzIGlsbGVnYWwsIGFzIGlzIFBHIHdpdGhvdXQgUEUuICovXG4gXHRURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3IwLCBzcmVncywgWDg2X0NSMF9OVyk7XG4gXHRURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3IwLCBzcmVncywgWDg2X0NSMF9QRyk7XG4rXG4rXHQvKiBDUjggYml0cyAzOjAgYXJlIHdyaXRhYmxlOyBiaXRzIDYzOjQgYXJlIHJlc2VydmVkLiAqL1xuK1x0dmNwdV9zcmVnc19nZXQodmNwdSwgXHUwMDI2c3JlZ3MpO1xuK1x0c3JlZ3MuY3I4ID0gMHhmO1xuK1x0cmMgPSBfdmNwdV9zcmVnc19zZXQodmNwdSwgXHUwMDI2c3JlZ3MpO1xuK1x0VEVTVF9BU1NFUlQoIXJjLCBcIkZhaWxlZCB0byBzZXQgdmFsaWQgQ1I4IHZhbHVlIDB4ZlwiKTtcbitcbitcdHZjcHVfc3JlZ3NfZ2V0KHZjcHUsIFx1MDAyNnNyZWdzKTtcbitcdFRFU1RfQVNTRVJUX0VRKHNyZWdzLmNyOCwgMHhmKTtcbitcbitcdGZvciAoaSA9IDQ7IGkgXHUwMDNjIDY0OyBpKyspXG4rXHRcdFRFU1RfSU5WQUxJRF9TUkVHX0JJVCh2Y3B1LCBjcjgsIHNyZWdzLCBCSVRfVUxMKGkpKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdGVzdF9lZmVyX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZWZlcilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIwOjQwOjE2LjE0MzcwNTQzMloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjUxMTkwMzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbiBmb3IgYSBLVk0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBzY3J1dGluaXplIHRoZSBjb2RlIGNoYW5nZXMuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIHByb3ZpZGVkIGRpZmY6XG5cbmBgYGRpZmZcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcmVncy5jIGIvYXJjaC94ODYva3ZtL3JlZ3MuY1xuaW5kZXggOGY2NjQzODk4OWU0Ny4uZmFkMzFiNTljNjIyZlxuLS0tIGEvYXJjaC94ODYva3ZtL3JlZ3MuY1xuKysrIGIvYXJjaC94ODYva3ZtL3JlZ3MuY1xuQEAgLTQ0MCw5ICs0NDAsMTQgQEAgaW50IGt2bV9zZXRfY3I0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjQpXG4gfVxuIEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2V0X2NyNCk7XG4gXG4rc3RhdGljIGJvb2wga3ZtX2lzX3ZhbGlkX2NyOCh1bnNpZ25lZCBsb25nIGNyOClcbit7XG4rXHRyZXR1cm4gIShjcjggXHUwMDI2IENSOF9SRVNFUlZFRF9CSVRTKTtcbit9XG4rXG4gaW50IGt2bV9zZXRfY3I4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjgpXG4ge1xuLVx0aWYgKGNyOCBcdTAwMjYgQ1I4X1JFU0VSVkVEX0JJVFMpXG4rXHRpZiAoIWt2bV9pc192YWxpZF9jcjgoY3I4KSlcbiBcdFx0cmV0dXJuIDE7XG4gXHRpZiAobGFwaWNfaW5fa2VybmVsKHZjcHUpKVxuIFx0XHRrdm1fbGFwaWNfc2V0X3Rwcih2Y3B1LCBjcjgpO1xuQEAgLTU2NSw2ICs1NzAsNyBAQCBzdGF0aWMgYm9vbCBrdm1faXNfdmFsaWRfc3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncylcbiBcbiBcdHJldHVybiBrdm1faXNfdmFsaWRfY3I0KHZjcHUsIHNyZWdzLVx1MDAzZWNyNCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgICAga3ZtX2lzX3ZhbGlkX2NyMCh2Y3B1LCBzcmVncy1cdTAwM2VjcjApIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIGt2bV9pc192YWxpZF9jcjgoc3JlZ3MtXHUwMDNlY3I4KSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICBrdm1fdmFsaWRfZWZlcih2Y3B1LCBzcmVncy1cdTAwM2VlZmVyKTtcbiB9XG4gYGBgXG5cblJpZ2h0LCB0aGUgY2hhbmdlcyBpbnZvbHZlIGFkZGluZyBhIG5ldyBzdGF0aWMgZnVuY3Rpb24sIGBrdm1faXNfdmFsaWRfY3I4YCwgdG8gdmFsaWRhdGUgdGhlIENSOCByZWdpc3Rlciwgd2hpY2ggdGhlbiBnZXRzIHVzZWQgaW4gYGt2bV9zZXRfY3I4YCBhbmQsIGNydWNpYWxseSwgd2l0aGluIGBrdm1faXNfdmFsaWRfc3JlZ3NgLiBJIG5lZWQgdG8gbm93IGV4YW1pbmUgYGFyY2gveDg2L2t2bS9yZWdzLmNgIGFyb3VuZCBsaW5lIDU2NSBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIG9uIHRoZSB1c2FnZSBvZiBga3ZtX2lzX3ZhbGlkX3NyZWdzYCBhbmQgaXRzIGNhbGxlcnMuIFRoZSBrZXkgaGVyZSBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBuZXcgdmFsaWRhdGlvbiBsb2dpYyBleHBvc2VzIGFueSBuZXcgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBsaWtlbHkgYm9pbHMgZG93biB0byB1bmRlcnN0YW5kaW5nIHdoZXJlIGFuZCBob3cgdGhlIGBzcmVnc2Agc3RydWN0dXJlIGlzIHBvcHVsYXRlZCBhbmQgdXNlZC4gRGVwZW5kaW5nIG9uIGhvdyBgQ1I4YCBpcyBzZXQgdXAgYW5kIHdoYXQgdGhlIHJlcGVyY3Vzc2lvbnMgb2YgYW4gaW52YWxpZCB2YWx1ZSBtaWdodCBiZSBpbiBzdWJzZXF1ZW50IG9wZXJhdGlvbnMsIEkgY2FuIGRlY2lkZSB3aGV0aGVyIHRoZSBleGlzdGluZyBmdXp6aW5nIGNvdmVyYWdlIGlzIGFkZXF1YXRlIG9yIGlmIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeS4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3OTksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMDo0MDoyMS4zOTQ4OTkzMzVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgzNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3JlZ3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NTAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NTA6XFx0c3RhdGljIGJvb2wga3ZtX2lzX3ZhbGlkX3NyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zcmVncyAqc3JlZ3MpXFxuIDU1MTpcXHR7XFxuIDU1MjpcXHRcXHRpZiAoKHNyZWdzLVxcdTAwM2VlZmVyIFxcdTAwMjYgRUZFUl9MTUUpIFxcdTAwMjZcXHUwMDI2IChzcmVncy1cXHUwMDNlY3IwIFxcdTAwMjYgWDg2X0NSMF9QRykpIHtcXG4gNTUzOlxcdFxcdFxcdC8qXFxuIDU1NDpcXHRcXHRcXHQgKiBXaGVuIEVGRVIuTE1FIGFuZCBDUjAuUEcgYXJlIHNldCwgdGhlIHByb2Nlc3NvciBpcyBpblxcbiA1NTU6XFx0XFx0XFx0ICogNjQtYml0IG1vZGUgKHRob3VnaCBtYXliZSBpbiBhIDMyLWJpdCBjb2RlIHNlZ21lbnQpLlxcbiA1NTY6XFx0XFx0XFx0ICogQ1I0LlBBRSBhbmQgRUZFUi5MTUEgbXVzdCBiZSBzZXQuXFxuIDU1NzpcXHRcXHRcXHQgKi9cXG4gNTU4OlxcdFxcdFxcdGlmICghKHNyZWdzLVxcdTAwM2VjcjQgXFx1MDAyNiBYODZfQ1I0X1BBRSkgfHwgIShzcmVncy1cXHUwMDNlZWZlciBcXHUwMDI2IEVGRVJfTE1BKSlcXG4gNTU5OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNTYwOlxcdFxcdFxcdGlmICgha3ZtX3ZjcHVfaXNfbGVnYWxfY3IzKHZjcHUsIHNyZWdzLVxcdTAwM2VjcjMpKVxcbiA1NjE6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA1NjI6XFx0XFx0fSBlbHNlIHtcXG4gNTYzOlxcdFxcdFxcdC8qXFxuIDU2NDpcXHRcXHRcXHQgKiBOb3QgaW4gNjQtYml0IG1vZGU6IEVGRVIuTE1BIGlzIGNsZWFyIGFuZCB0aGUgY29kZVxcbiA1NjU6XFx0XFx0XFx0ICogc2VnbWVudCBjYW5ub3QgYmUgNjQtYml0LlxcbiA1NjY6XFx0XFx0XFx0ICovXFxuIDU2NzpcXHRcXHRcXHRpZiAoc3JlZ3MtXFx1MDAzZWVmZXIgXFx1MDAyNiBFRkVSX0xNQSB8fCBzcmVncy1cXHUwMDNlY3MubClcXG4gNTY4OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNTY5OlxcdFxcdH1cXG4gNTcwOlxcdFxcbiA1NzE6XFx0XFx0cmV0dXJuIGt2bV9pc192YWxpZF9jcjQodmNwdSwgc3JlZ3MtXFx1MDAzZWNyNCkgXFx1MDAyNlxcdTAwMjZcXG4gNTcyOlxcdFxcdCAgICAgICBrdm1faXNfdmFsaWRfY3IwKHZjcHUsIHNyZWdzLVxcdTAwM2VjcjApIFxcdTAwMjZcXHUwMDI2XFxuIDU3MzpcXHRcXHQgICAgICAga3ZtX2lzX3ZhbGlkX2NyOChzcmVncy1cXHUwMDNlY3I4KSBcXHUwMDI2XFx1MDAyNlxcbiA1NzQ6XFx0XFx0ICAgICAgIGt2bV92YWxpZF9lZmVyKHZjcHUsIHNyZWdzLVxcdTAwM2VlZmVyKTtcXG4gNTc1OlxcdH1cXG4gNTc2OlxcdFxcbiA1Nzc6XFx0c3RhdGljIGludCBfX3NldF9zcmVnc19jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncyxcXG4gNTc4OlxcdFxcdFxcdFxcdCAgICAgIGludCAqbW11X3Jlc2V0X25lZWRlZCwgYm9vbCB1cGRhdGVfcGRwdHJzKVxcbiA1Nzk6XFx0e1xcbiA1ODA6XFx0XFx0aW50IGlkeDtcXG4gNTgxOlxcdFxcdHN0cnVjdCBkZXNjX3B0ciBkdDtcXG4gNTgyOlxcdFxcbiA1ODM6XFx0XFx0aWYgKCFrdm1faXNfdmFsaWRfc3JlZ3ModmNwdSwgc3JlZ3MpKVxcbiA1ODQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU4NTpcXHRcXG4gNTg2OlxcdFxcdGlmIChrdm1fYXBpY19zZXRfYmFzZSh2Y3B1LCBzcmVncy1cXHUwMDNlYXBpY19iYXNlLCB0cnVlKSlcXG4gNTg3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1ODg6XFx0XFxuIDU4OTpcXHRcXHRpZiAodmNwdS1cXHUwMDNlYXJjaC5ndWVzdF9zdGF0ZV9wcm90ZWN0ZWQpXFxuIDU5MDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNTkxOlxcdFxcbiA1OTI6XFx0XFx0ZHQuc2l6ZSA9IHNyZWdzLVxcdTAwM2VpZHQubGltaXQ7XFxuIDU5MzpcXHRcXHRkdC5hZGRyZXNzID0gc3JlZ3MtXFx1MDAzZWlkdC5iYXNlO1xcbiA1OTQ6XFx0XFx0a3ZtX3g4Nl9jYWxsKHNldF9pZHQpKHZjcHUsIFxcdTAwMjZkdCk7XFxuIDU5NTpcXHRcXHRkdC5zaXplID0gc3JlZ3MtXFx1MDAzZWdkdC5saW1pdDtcXG4gNTk2OlxcdFxcdGR0LmFkZHJlc3MgPSBzcmVncy1cXHUwMDNlZ2R0LmJhc2U7XFxuIDU5NzpcXHRcXHRrdm1feDg2X2NhbGwoc2V0X2dkdCkodmNwdSwgXFx1MDAyNmR0KTtcXG4gNTk4OlxcdFxcbiA1OTk6XFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5jcjIgPSBzcmVncy1cXHUwMDNlY3IyO1xcbiA2MDA6XFx0XFx0Km1tdV9yZXNldF9uZWVkZWQgfD0ga3ZtX3JlYWRfY3IzKHZjcHUpICE9IHNyZWdzLVxcdTAwM2VjcjM7XFxuIDYwMTpcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmNyMyA9IHNyZWdzLVxcdTAwM2VjcjM7XFxuIDYwMjpcXHRcXHRrdm1fcmVnaXN0ZXJfbWFya19kaXJ0eSh2Y3B1LCBWQ1BVX1JFR19DUjMpO1xcbiA2MDM6XFx0XFx0a3ZtX3g4Nl9jYWxsKHBvc3Rfc2V0X2NyMykodmNwdSwgc3JlZ3MtXFx1MDAzZWNyMyk7XFxuIDYwNDpcXHRcXG4gNjA1OlxcdFxcdCptbXVfcmVzZXRfbmVlZGVkIHw9IHZjcHUtXFx1MDAzZWFyY2guZWZlciAhPSBzcmVncy1cXHUwMDNlZWZlcjtcXG4gNjA2OlxcdFxcdGt2bV94ODZfY2FsbChzZXRfZWZlcikodmNwdSwgc3JlZ3MtXFx1MDAzZWVmZXIpO1xcbiA2MDc6XFx0XFxuIDYwODpcXHRcXHQqbW11X3Jlc2V0X25lZWRlZCB8PSBrdm1fcmVhZF9jcjAodmNwdSkgIT0gc3JlZ3MtXFx1MDAzZWNyMDtcXG4gNjA5OlxcdFxcdGt2bV94ODZfY2FsbChzZXRfY3IwKSh2Y3B1LCBzcmVncy1cXHUwMDNlY3IwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjA6NDA6MjEuMzk0OTk5NjU1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4MTI2MDI5NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIFNSRUcgVmFsaWRhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgS1ZNIHBlcnNwZWN0aXZlLiBJJ20gbG9va2luZyBhdCB0aGlzIGBfX3NldF9zcmVnc19jb21tb25gIGZ1bmN0aW9uLCB3aGljaCBnZXRzIGEgYHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzYCBmcm9tIGEgYEtWTV9TRVRfU1JFR1NgIGlvY3RsIGNhbGwg4oCTIHN0cmFpZ2h0IGZyb20gdXNlciBzcGFjZS4gVGhlIHBhdGNoIGlzIGFkZGluZyB2YWxpZGF0aW9uIHRvIGVuc3VyZSB0aGUgYHNyZWdzLVx1MDAzZWNyOGAgdmFsdWUsIHNwZWNpZmljYWxseSByZXNlcnZlZCBiaXRzLCBpcyBwcm9wZXJseSBjaGVja2VkIHdpdGhpbiBga3ZtX2lzX3ZhbGlkX3NyZWdzKHZjcHUsIHNyZWdzKWAuIEl0IGFsc28gaW50cm9kdWNlcyB0aGUgYGt2bV9pc192YWxpZF9jcjhgIGhlbHBlciBmb3IgdXNlIGluIGBrdm1fc2V0X2NyOGAgYW5kIHVwZGF0ZXMgdGhlIHJlbGV2YW50IHNlbGZ0ZXN0cy4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIHNvIGZhci5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGFyZSB3ZSBvcGVuaW5nIHVwIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgd2l0aCB0aGlzIGNoYW5nZT8gTGV0J3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LiBGaXJzdCwgaXMgdGhpcyBpbnRyb2R1Y2luZyBvciBtb2RpZnlpbmcgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlICpzZW50KiB0byB1c2VyIHNwYWNlPyBObywgZGVmaW5pdGVseSBub3QuIGBLVk1fU0VUX1NSRUdTYCBpcyB0aGUgKnVzZXIqIHNldHRpbmcgcmVnaXN0ZXJzICppbiogdGhlIGtlcm5lbC4gTm8gbmV3IGRhdGEgaXMgZ29pbmcgb3V0LiBTZWNvbmQsIGlzIHRoZXJlIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0ICpkZXBlbmRzKiBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS4gVGhlIGBzcmVnc2Agc3RydWN0dXJlIGlzIGJlaW5nIHBvcHVsYXRlZCBmcm9tIHVzZXIgc3BhY2UgdmlhIGBjb3B5X2Zyb21fdXNlcmAsIHNvIGl04oCZcyBub3QgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBUaGlyZCwgYW55IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiBvciB1bmluaXRpYWxpemVkIGZpZWxkcz8gQWdhaW4sIG5vLiBJdCdzIGEgc3RydWN0dXJlIGJlaW5nIHBvcHVsYXRlZCwgbm90IGFsbG9jYXRlZC4gRmluYWxseSwgYW55dGhpbmcgd2l0aCBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgdGhhdCAqY291bGQqIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzPyBTdGlsbCBuby5cblxuU28sIGZyb20gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSwgdGhpcyBpcyBhIHB1cmUgdmFsaWRhdGlvbiBhbmQgaW5wdXQgc2FuaXRpemF0aW9uIGNoZWNrIGZvciB0aGUgS1ZNIHZDUFUgcmVnaXN0ZXIgc3RhdGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIENSOCByZWdpc3RlcidzIHJlc2VydmVkIGJpdHMuIEFueSBidWdzIGhlcmUgd291bGQgYmUgcmVsYXRlZCB0byBsb2dpYyBlcnJvcnMgb3IgYWxsb3dpbmcgaW52YWxpZCBzdGF0ZSB0cmFuc2l0aW9ucywgbm90IEtNU0FOLWRldGVjdGFibGUgaXNzdWVzIGxpa2UgcmVhZGluZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgYW55IHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcy4gSXQncyBhIG1hdHRlciBvZiBlbnN1cmluZyB0aGUgKnZhbGlkaXR5KiBvZiB0aGUgaW5wdXQsIG5vdCB0aGUgKmV4aXN0ZW5jZSogb2YgdGhlIG1lbW9yeS5cblxuVGhlcmVmb3JlLCBhZnRlciBhIHRob3JvdWdoIHJldmlldywgbXkgY29uY2x1c2lvbiBpcyB0aGF0ICoqTmVlZHNLTVNBTiBpcyBmYWxzZSoqLlxuXG5JJ3ZlIGNhcmVmdWxseSBjb25zaWRlcmVkIGFsbCB0aGUgdXN1YWwgcmVxdWlyZW1lbnRzIGFuZCBjb25maXJtZWQgbXkgS01TQU4gcmF0aW9uYWxlLiBJJ20gcmVhZHkgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIzMiwiT3V0cHV0VG9rZW5zIjoyMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMDo0MDoyNy4yMDc2MDUyOTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiBmb3IgQ1I4IHJlZ2lzdGVyIHZhbHVlcyBpbiBLVk0gKGBrdm1faXNfdmFsaWRfY3I4YCksIGVuc3VyaW5nIHRoYXQgcmVzZXJ2ZWQgYml0cyAoNjM6NCkgaW4gQ1I4IGNhbm5vdCBiZSBzZXQgdmlhIGBLVk1fU0VUX1NSRUdTYCAoY2hlY2tlZCBpbiBga3ZtX2lzX3ZhbGlkX3NyZWdzYCkgb3IgYGt2bV9zZXRfY3I4YCwgYWxvbmcgd2l0aCBjb3JyZXNwb25kaW5nIHNlbGZ0ZXN0IHVwZGF0ZXMuXFxuXFxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlIG9ubHkgcGVyZm9ybXMgYml0d2lzZSB2YWxpZGF0aW9uIG9uIGlucHV0IHZhbHVlcyAoYHNyZWdzLVxcdTAwM2VjcjhgIC8gYGNyOGApIHBhc3NlZCBpbnRvIEtWTSBmcm9tIHVzZXJzcGFjZSBvciBjYWxsZXJzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LCBub3IgZG9lcyBpdCBhbHRlciBhbnkga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcHkgb3BlcmF0aW9ucyAoaW5mby1sZWFrcykgb3Igc3RydWN0dXJlIHBhZGRpbmcuXFxuLSBLQVNBTi9TdGFuZGFyZCB0ZXN0aW5nIGFwcGxpY2FiaWxpdHk6IFN0YW5kYXJkIGZ1bmN0aW9uYWwgdGVzdGluZyBhbmQgS1ZNIHNlbGZ0ZXN0cyBhZGVxdWF0ZWx5IHZlcmlmeSB0aGlzIGlucHV0IHZhbGlkYXRpb24gbG9naWMuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHBvc2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGlucHV0IHZhbGlkYXRpb24gZm9yIENSOCByZWdpc3RlciB2YWx1ZXMgaW4gS1ZNIChga3ZtX2lzX3ZhbGlkX2NyOGApLCBlbnN1cmluZyB0aGF0IHJlc2VydmVkIGJpdHMgKDYzOjQpIGluIENSOCBjYW5ub3QgYmUgc2V0IHZpYSBgS1ZNX1NFVF9TUkVHU2AgKGNoZWNrZWQgaW4gYGt2bV9pc192YWxpZF9zcmVnc2ApIG9yIGBrdm1fc2V0X2NyOGAsIGFsb25nIHdpdGggY29ycmVzcG9uZGluZyBzZWxmdGVzdCB1cGRhdGVzLlxcblxcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZSBvbmx5IHBlcmZvcm1zIGJpdHdpc2UgdmFsaWRhdGlvbiBvbiBpbnB1dCB2YWx1ZXMgKGBzcmVncy1cXHUwMDNlY3I4YCAvIGBjcjhgKSBwYXNzZWQgaW50byBLVk0gZnJvbSB1c2Vyc3BhY2Ugb3IgY2FsbGVycy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWx0ZXIgYW55IGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMgKGluZm8tbGVha3MpIG9yIHN0cnVjdHVyZSBwYWRkaW5nLlxcbi0gS0FTQU4vU3RhbmRhcmQgdGVzdGluZyBhcHBsaWNhYmlsaXR5OiBTdGFuZGFyZCBmdW5jdGlvbmFsIHRlc3RpbmcgYW5kIEtWTSBzZWxmdGVzdHMgYWRlcXVhdGVseSB2ZXJpZnkgdGhpcyBpbnB1dCB2YWxpZGF0aW9uIGxvZ2ljLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBwb3NlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflows6h4f[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 19:53:00 +0000 UTC FinishedAt: 2026-09-08 20:40:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "d4b7fb647204f0c81dfeae2d1a708e4d858e0c94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "d4b7fb647204f0c81dfeae2d1a708e4d858e0c94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD" ], "series_id": "05f6c158-dd5a-401c-b654-040d8eabe787" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_set_cr8", "kvm_arch_vcpu_ioctl_set_sregs", "kvm_vcpu_ioctl_x86_set_sregs2" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDIwOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9zZXRfY3I4JiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzJiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfc3JlZ3MyJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBpbnB1dCB2YWxpZGF0aW9uIGZvciBDUjggcmVnaXN0ZXIgdmFsdWVzIGluIEtWTSAoYGt2bV9pc192YWxpZF9jcjhgKSwgZW5zdXJpbmcgdGhhdCByZXNlcnZlZCBiaXRzICg2Mzo0KSBpbiBDUjggY2Fubm90IGJlIHNldCB2aWEgYEtWTV9TRVRfU1JFR1NgIChjaGVja2VkIGluIGBrdm1faXNfdmFsaWRfc3JlZ3NgKSBvciBga3ZtX3NldF9jcjhgLCBhbG9uZyB3aXRoIGNvcnJlc3BvbmRpbmcgc2VsZnRlc3QgdXBkYXRlcy5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlIG9ubHkgcGVyZm9ybXMgYml0d2lzZSB2YWxpZGF0aW9uIG9uIGlucHV0IHZhbHVlcyAoYHNyZWdzLVx1MDAzZWNyOGAgLyBgY3I4YCkgcGFzc2VkIGludG8gS1ZNIGZyb20gdXNlcnNwYWNlIG9yIGNhbGxlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnksIG5vciBkb2VzIGl0IGFsdGVyIGFueSBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29weSBvcGVyYXRpb25zIChpbmZvLWxlYWtzKSBvciBzdHJ1Y3R1cmUgcGFkZGluZy5cbi0gS0FTQU4vU3RhbmRhcmQgdGVzdGluZyBhcHBsaWNhYmlsaXR5OiBTdGFuZGFyZCBmdW5jdGlvbmFsIHRlc3RpbmcgYW5kIEtWTSBzZWxmdGVzdHMgYWRlcXVhdGVseSB2ZXJpZnkgdGhpcyBpbnB1dCB2YWxpZGF0aW9uIGxvZ2ljLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggcG9zZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gZm9yIENSOCByZXNlcnZlZCBiaXRzIGluIEtWTSB3aGVuIHNldHRpbmcgc3BlY2lhbCByZWdpc3RlcnMgKHNyZWdzIC8gc3JlZ3MyKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzIGluIHg4NiBLVk0gYWNjZXNzaWJsZSB2aWEgdXNlci1zcGFjZSBpb2N0bHMgKEtWTV9TRVRfU1JFR1MsIEtWTV9TRVRfU1JFR1MyKSBhbmQgQ1I4IGVtdWxhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM5MmVkNmIwMzBkZGNlNjM0YmFjNGMyMmQwNmY2ZTk4NjNkYzI4NGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDIwOjM5OjM1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9yZWdzLmMgYi9hcmNoL3g4Ni9rdm0vcmVncy5jXG5pbmRleCA4ZjY2NDM4OTg5ZTQ3Li5mYWQzMWI1OWM2MjJmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3JlZ3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3JlZ3MuY1xuQEAgLTQ0MCw5ICYjNDM7NDQwLDE0IEBAIGludCBrdm1fc2V0X2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3NldF9jcjQpO1xuIFxuJiM0MztzdGF0aWMgYm9vbCBrdm1faXNfdmFsaWRfY3I4KHVuc2lnbmVkIGxvbmcgY3I4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICEoY3I4IFx1MDAyNiBDUjhfUkVTRVJWRURfQklUUyk7XG4mIzQzO31cbiYjNDM7XG4gaW50IGt2bV9zZXRfY3I4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjgpXG4ge1xuLVx0aWYgKGNyOCBcdTAwMjYgQ1I4X1JFU0VSVkVEX0JJVFMpXG4mIzQzO1x0aWYgKCFrdm1faXNfdmFsaWRfY3I4KGNyOCkpXG4gXHRcdHJldHVybiAxO1xuIFx0aWYgKGxhcGljX2luX2tlcm5lbCh2Y3B1KSlcbiBcdFx0a3ZtX2xhcGljX3NldF90cHIodmNwdSwgY3I4KTtcbkBAIC01NjUsNiAmIzQzOzU3MCw3IEBAIHN0YXRpYyBib29sIGt2bV9pc192YWxpZF9zcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzKVxuIFxuIFx0cmV0dXJuIGt2bV9pc192YWxpZF9jcjQodmNwdSwgc3JlZ3MtXHUwMDNlY3I0KSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICBrdm1faXNfdmFsaWRfY3IwKHZjcHUsIHNyZWdzLVx1MDAzZWNyMCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIGt2bV9pc192YWxpZF9jcjgoc3JlZ3MtXHUwMDNlY3I4KSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICBrdm1fdmFsaWRfZWZlcih2Y3B1LCBzcmVncy1cdTAwM2VlZmVyKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jXG5pbmRleCA2MDMyMjZmZmU0Mzc0Li40ZTdjMzUxNzk0MzgzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmNcbkBAIC0xMzUsNiAmIzQzOzEzNSwxOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NyX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgY3I0KVxuIFx0LyogTlcgd2l0aG91dCBDRCBpcyBpbGxlZ2FsLCBhcyBpcyBQRyB3aXRob3V0IFBFLiAqL1xuIFx0VEVTVF9JTlZBTElEX1NSRUdfQklUKHZjcHUsIGNyMCwgc3JlZ3MsIFg4Nl9DUjBfTlcpO1xuIFx0VEVTVF9JTlZBTElEX1NSRUdfQklUKHZjcHUsIGNyMCwgc3JlZ3MsIFg4Nl9DUjBfUEcpO1xuJiM0MztcbiYjNDM7XHQvKiBDUjggYml0cyAzOjAgYXJlIHdyaXRhYmxlOyBiaXRzIDYzOjQgYXJlIHJlc2VydmVkLiAqL1xuJiM0MztcdHZjcHVfc3JlZ3NfZ2V0KHZjcHUsIFx1MDAyNnNyZWdzKTtcbiYjNDM7XHRzcmVncy5jcjggPSAweGY7XG4mIzQzO1x0cmMgPSBfdmNwdV9zcmVnc19zZXQodmNwdSwgXHUwMDI2c3JlZ3MpO1xuJiM0MztcdFRFU1RfQVNTRVJUKCFyYywgXCYjMzQ7RmFpbGVkIHRvIHNldCB2YWxpZCBDUjggdmFsdWUgMHhmXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0dmNwdV9zcmVnc19nZXQodmNwdSwgXHUwMDI2c3JlZ3MpO1xuJiM0MztcdFRFU1RfQVNTRVJUX0VRKHNyZWdzLmNyOCwgMHhmKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gNDsgaSBcdTAwM2MgNjQ7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0VEVTVF9JTlZBTElEX1NSRUdfQklUKHZjcHUsIGNyOCwgc3JlZ3MsIEJJVF9VTEwoaSkpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0ZXN0X2VmZXJfYml0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBlZmVyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIwOjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9zZXRfY3I4JiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzJiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfc3JlZ3MyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgQ1I4IHJlc2VydmVkIGJpdHMgaW4gS1ZNIHdoZW4gc2V0dGluZyBzcGVjaWFsIHJlZ2lzdGVycyAoc3JlZ3MgLyBzcmVnczIpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaW4geDg2IEtWTSBhY2Nlc3NpYmxlIHZpYSB1c2VyLXNwYWNlIGlvY3RscyAoS1ZNX1NFVF9TUkVHUywgS1ZNX1NFVF9TUkVHUzIpIGFuZCBDUjggZW11bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzkyZWQ2YjAzMGRkY2U2MzRiYWM0YzIyZDA2ZjZlOTg2M2RjMjg0YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMjA6Mzk6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcmVncy5jIGIvYXJjaC94ODYva3ZtL3JlZ3MuYwppbmRleCA4ZjY2NDM4OTg5ZTQ3Li5mYWQzMWI1OWM2MjJmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vcmVncy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9yZWdzLmMKQEAgLTQ0MCw5ICYjNDM7NDQwLDE0IEBAIGludCBrdm1fc2V0X2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KQogfQogRVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9zZXRfY3I0KTsKIAomIzQzO3N0YXRpYyBib29sIGt2bV9pc192YWxpZF9jcjgodW5zaWduZWQgbG9uZyBjcjgpCiYjNDM7ewomIzQzOwlyZXR1cm4gIShjcjggJmFtcDsgQ1I4X1JFU0VSVkVEX0JJVFMpOwomIzQzO30KJiM0MzsKIGludCBrdm1fc2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I4KQogewotCWlmIChjcjggJmFtcDsgQ1I4X1JFU0VSVkVEX0JJVFMpCiYjNDM7CWlmICgha3ZtX2lzX3ZhbGlkX2NyOChjcjgpKQogCQlyZXR1cm4gMTsKIAlpZiAobGFwaWNfaW5fa2VybmVsKHZjcHUpKQogCQlrdm1fbGFwaWNfc2V0X3Rwcih2Y3B1LCBjcjgpOwpAQCAtNTY1LDYgJiM0Mzs1NzAsNyBAQCBzdGF0aWMgYm9vbCBrdm1faXNfdmFsaWRfc3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncykKIAogCXJldHVybiBrdm1faXNfdmFsaWRfY3I0KHZjcHUsIHNyZWdzLSZndDtjcjQpICZhbXA7JmFtcDsKIAkgICAgICAga3ZtX2lzX3ZhbGlkX2NyMCh2Y3B1LCBzcmVncy0mZ3Q7Y3IwKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBrdm1faXNfdmFsaWRfY3I4KHNyZWdzLSZndDtjcjgpICZhbXA7JmFtcDsKIAkgICAgICAga3ZtX3ZhbGlkX2VmZXIodmNwdSwgc3JlZ3MtJmd0O2VmZXIpOwogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmMKaW5kZXggNjAzMjI2ZmZlNDM3NC4uNGU3YzM1MTc5NDM4MyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V0X3NyZWdzX3Rlc3QuYwpAQCAtMTM1LDYgJiM0MzsxMzUsMTggQEAgc3RhdGljIHZvaWQgdGVzdF9jcl9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGNyNCkKIAkvKiBOVyB3aXRob3V0IENEIGlzIGlsbGVnYWwsIGFzIGlzIFBHIHdpdGhvdXQgUEUuICovCiAJVEVTVF9JTlZBTElEX1NSRUdfQklUKHZjcHUsIGNyMCwgc3JlZ3MsIFg4Nl9DUjBfTlcpOwogCVRFU1RfSU5WQUxJRF9TUkVHX0JJVCh2Y3B1LCBjcjAsIHNyZWdzLCBYODZfQ1IwX1BHKTsKJiM0MzsKJiM0MzsJLyogQ1I4IGJpdHMgMzowIGFyZSB3cml0YWJsZTsgYml0cyA2Mzo0IGFyZSByZXNlcnZlZC4gKi8KJiM0MzsJdmNwdV9zcmVnc19nZXQodmNwdSwgJmFtcDtzcmVncyk7CiYjNDM7CXNyZWdzLmNyOCA9IDB4ZjsKJiM0MzsJcmMgPSBfdmNwdV9zcmVnc19zZXQodmNwdSwgJmFtcDtzcmVncyk7CiYjNDM7CVRFU1RfQVNTRVJUKCFyYywgJiMzNDtGYWlsZWQgdG8gc2V0IHZhbGlkIENSOCB2YWx1ZSAweGYmIzM0Oyk7CiYjNDM7CiYjNDM7CXZjcHVfc3JlZ3NfZ2V0KHZjcHUsICZhbXA7c3JlZ3MpOwomIzQzOwlURVNUX0FTU0VSVF9FUShzcmVncy5jcjgsIDB4Zik7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDQ7IGkgJmx0OyA2NDsgaSYjNDM7JiM0MzspCiYjNDM7CQlURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3I4LCBzcmVncywgQklUX1VMTChpKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHRlc3RfZWZlcl9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGVmZXIpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1ODcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoaXMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGlzIGV2ZW4gKndvcnRoKiBmdXp6aW5nLiBXZSBoYXZlIHR3byBtYWluIGZpbGVzIGludm9sdmVkOiBgYXJjaC94ODYva3ZtL3JlZ3MuY2AgYW5kIGEgc2VsZi10ZXN0IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmNgLiBUaGUgY29yZSBjaGFuZ2VzIHNlZW0gdG8gYmUgY2VudGVyZWQgYXJvdW5kIENSOCB2YWxpZGF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIHRoaXMgYGt2bV9pc192YWxpZF9jcjhgIGZ1bmN0aW9uLCB3aGljaCBjaGVja3MgaWYgY2VydGFpbiBiaXRzIGFyZSByZXNlcnZlZC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBndWFyZGluZyBhZ2FpbnN0IHBvdGVudGlhbGx5IHVuc2FmZSBDUjggdmFsdWVzIGluIHRoZSBLVk0gY29udGV4dC4KClNwZWNpZmljYWxseSwgYGt2bV9pc192YWxpZF9jcjhgIHNlZW1zIHRvIGNoZWNrIGlmIGBjcjggJmFtcDsgQ1I4X1JFU0VSVkVEX0JJVFNgIGlzIG5vdCBlcXVhbCB0byAwLiBJdCYjMzk7cyB1c2VkIGluIGBrdm1fc2V0X2NyOGAgYW5kIGFsc28gY2hlY2tlZCBhcyBwYXJ0IG9mIGBrdm1faXNfdmFsaWRfc3JlZ3NgLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgY2hhbmdlcyB0byBjb250cm9sIHJlZ2lzdGVycyBhcmUgdXN1YWxseSBwcmV0dHkgc2Vuc2l0aXZlLCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBhbiBpbnZhbGlkIENSOCDigJMgaXMgaXQganVzdCBhIFZNIGV4aXQsIGEgY3Jhc2gsIG9yIHNvbWV0aGluZyBtb3JlIHN1YnRsZSBsaWtlIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eT8KCk5vdywgbGV0JiMzOTtzIGRpZyBpbnRvIGBhcmNoL3g4Ni9rdm0vcmVncy5jYCBhbmQgc2VlIHRoZSBjb250ZXh0IGFyb3VuZCB0aGVzZSBjaGFuZ2VzIHRvIGdldCBhIGJldHRlciBmZWVsIGZvciB0aGUgYXR0YWNrIHN1cmZhY2UuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGlkZW50aWZ5IGZvY3VzIHN5bWJvbHMuIEkgd2lsbCBsb29rIGF0IGBrdm1fc2V0X2NyOGAgYW5kIGBrdm1faXNfdmFsaWRfc3JlZ3NgLiAKCkkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBzZWxmLXRlc3QuIERvZXMgaXQgcHJvdmlkZSB1c2VmdWwgdGVzdCBjYXNlcyB0byBzdGFydCB3aXRoLCBvciBpcyBpdCB0b28gbmFycm93PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNlbGYtdGVzdCB2YWxpZGF0ZXMgdGhlIGNoYW5nZXMgdG8gZW5zdXJlIHRoYXQgaXQgaGFzIGdvb2QgY292ZXJhZ2UgZm9yIHRoZSB1cGRhdGVkIGBzcmVnc2AuCgpCYXNlZCBvbiB3aGF0IEkgZmluZCwgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBmdXp6aW5nIGNvbmZpZ3VyYXRpb25zLiBUaGlzIG1lYW5zIGlkZW50aWZ5aW5nIGFueSBkZXBlbmRlbmNpZXMsIGVkZ2UgY2FzZXMsIGFuZCBwb3RlbnRpYWwgdGFyZ2V0cyBmb3IgZnV6emluZy4gSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCBob3cgdG8gbWFuaXB1bGF0ZSB0aGUgaW5wdXRzIHRvIHRyaWdnZXIgdGhlc2UgY2hlY2tzIGFuZCBpZiBJIHNob3VsZCBmb2N1cyBvbiB0aGUgcmVnaXN0ZXIgd3JpdGVzIHRocm91Z2ggdGhlIGlvY3RsIHBhdGhzIG9yIGVtdWxhdGlvbiBwYXRocy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9yZWdzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQzNTpcdFx0a3ZtX3g4Nl9jYWxsKHNldF9jcjQpKHZjcHUsIGNyNCk7XG4gNDM2Olx0XG4gNDM3Olx0XHRrdm1fcG9zdF9zZXRfY3I0KHZjcHUsIG9sZF9jcjQsIGNyNCk7XG4gNDM4Olx0XG4gNDM5Olx0XHRyZXR1cm4gMDtcbiA0NDA6XHR9XG4gNDQxOlx0RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9zZXRfY3I0KTtcbiA0NDI6XHRcbiA0NDM6XHRzdGF0aWMgYm9vbCBrdm1faXNfdmFsaWRfY3I4KHVuc2lnbmVkIGxvbmcgY3I4KVxuIDQ0NDpcdHtcbiA0NDU6XHRcdHJldHVybiAhKGNyOCBcdTAwMjYgQ1I4X1JFU0VSVkVEX0JJVFMpO1xuIDQ0NjpcdH1cbiA0NDc6XHRcbiA0NDg6XHRpbnQga3ZtX3NldF9jcjgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyOClcbiA0NDk6XHR7XG4gNDUwOlx0XHRpZiAoIWt2bV9pc192YWxpZF9jcjgoY3I4KSlcbiA0NTE6XHRcdFx0cmV0dXJuIDE7XG4gNDUyOlx0XHRpZiAobGFwaWNfaW5fa2VybmVsKHZjcHUpKVxuIDQ1MzpcdFx0XHRrdm1fbGFwaWNfc2V0X3Rwcih2Y3B1LCBjcjgpO1xuIDQ1NDpcdFx0ZWxzZVxuIDQ1NTpcdFx0XHR2Y3B1LVx1MDAzZWFyY2guY3I4ID0gY3I4O1xuIDQ1NjpcdFx0cmV0dXJuIDA7XG4gNDU3Olx0fVxuIDQ1ODpcdEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2V0X2NyOCk7XG4gNDU5Olx0XG4gNDYwOlx0dW5zaWduZWQgbG9uZyBrdm1fZ2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gNDYxOlx0e1xuIDQ2MjpcdFx0aWYgKGxhcGljX2luX2tlcm5lbCh2Y3B1KSlcbiA0NjM6XHRcdFx0cmV0dXJuIGt2bV9sYXBpY19nZXRfY3I4KHZjcHUpO1xuIDQ2NDpcdFx0ZWxzZVxuIDQ2NTpcdFx0XHRyZXR1cm4gdmNwdS1cdTAwM2VhcmNoLmNyODtcbiA0NjY6XHR9XG4gNDY3Olx0RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9nZXRfY3I4KTtcbiA0Njg6XHRcbiA0Njk6XHRzdGF0aWMgdm9pZCBfX2dldF9zcmVnc19jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncylcbiA0NzA6XHR7XG4gNDcxOlx0XHRzdHJ1Y3QgZGVzY19wdHIgZHQ7XG4gNDcyOlx0XG4gNDczOlx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLmd1ZXN0X3N0YXRlX3Byb3RlY3RlZClcbiA0NzQ6XHRcdFx0Z290byBza2lwX3Byb3RlY3RlZF9yZWdzO1xuIDQ3NTpcdFxuIDQ3NjpcdFx0a3ZtX2hhbmRsZV9leGNlcHRpb25fcGF5bG9hZF9xdWlyayh2Y3B1KTtcbiA0Nzc6XHRcbiA0Nzg6XHRcdGt2bV9nZXRfc2VnbWVudCh2Y3B1LCBcdTAwMjZzcmVncy1cdTAwM2VjcywgVkNQVV9TUkVHX0NTKTtcbiA0Nzk6XHRcdGt2bV9nZXRfc2VnbWVudCh2Y3B1LCBcdTAwMjZzcmVncy1cdTAwM2VkcywgVkNQVV9TUkVHX0RTKTtcbiA0ODA6XHRcdGt2bV9nZXRfc2VnbWVudCh2Y3B1LCBcdTAwMjZzcmVncy1cdTAwM2VlcywgVkNQVV9TUkVHX0VTKTtcbiA0ODE6XHRcdGt2bV9nZXRfc2VnbWVudCh2Y3B1LCBcdTAwMjZzcmVncy1cdTAwM2VmcywgVkNQVV9TUkVHX0ZTKTtcbiA0ODI6XHRcdGt2bV9nZXRfc2VnbWVudCh2Y3B1LCBcdTAwMjZzcmVncy1cdTAwM2VncywgVkNQVV9TUkVHX0dTKTtcbiA0ODM6XHRcdGt2bV9nZXRfc2VnbWVudCh2Y3B1LCBcdTAwMjZzcmVncy1cdTAwM2VzcywgVkNQVV9TUkVHX1NTKTtcbiA0ODQ6XHRcbiA0ODU6XHRcdGt2bV9nZXRfc2VnbWVudCh2Y3B1LCBcdTAwMjZzcmVncy1cdTAwM2V0ciwgVkNQVV9TUkVHX1RSKTtcbiA0ODY6XHRcdGt2bV9nZXRfc2VnbWVudCh2Y3B1LCBcdTAwMjZzcmVncy1cdTAwM2VsZHQsIFZDUFVfU1JFR19MRFRSKTtcbiA0ODc6XHRcbiA0ODg6XHRcdGt2bV94ODZfY2FsbChnZXRfaWR0KSh2Y3B1LCBcdTAwMjZkdCk7XG4gNDg5Olx0XHRzcmVncy1cdTAwM2VpZHQubGltaXQgPSBkdC5zaXplO1xuIDQ5MDpcdFx0c3JlZ3MtXHUwMDNlaWR0LmJhc2UgPSBkdC5hZGRyZXNzO1xuIDQ5MTpcdFx0a3ZtX3g4Nl9jYWxsKGdldF9nZHQpKHZjcHUsIFx1MDAyNmR0KTtcbiA0OTI6XHRcdHNyZWdzLVx1MDAzZWdkdC5saW1pdCA9IGR0LnNpemU7XG4gNDkzOlx0XHRzcmVncy1cdTAwM2VnZHQuYmFzZSA9IGR0LmFkZHJlc3M7XG4gNDk0Olx0XG4gNDk1Olx0XHRzcmVncy1cdTAwM2VjcjIgPSB2Y3B1LVx1MDAzZWFyY2guY3IyO1xuIDQ5NjpcdFx0c3JlZ3MtXHUwMDNlY3IzID0ga3ZtX3JlYWRfY3IzKHZjcHUpO1xuIDQ5NzpcdFxuIDQ5ODpcdHNraXBfcHJvdGVjdGVkX3JlZ3M6XG4gNDk5Olx0XHRzcmVncy1cdTAwM2VjcjAgPSBrdm1fcmVhZF9jcjAodmNwdSk7XG4gNTAwOlx0XHRzcmVncy1cdTAwM2VjcjQgPSBrdm1fcmVhZF9jcjQodmNwdSk7XG4gNTAxOlx0XHRzcmVncy1cdTAwM2VjcjggPSBrdm1fZ2V0X2NyOCh2Y3B1KTtcbiA1MDI6XHRcdHNyZWdzLVx1MDAzZWVmZXIgPSB2Y3B1LVx1MDAzZWFyY2guZWZlcjtcbiA1MDM6XHRcdHNyZWdzLVx1MDAzZWFwaWNfYmFzZSA9IHZjcHUtXHUwMDNlYXJjaC5hcGljX2Jhc2U7XG4gNTA0Olx0fVxuIDUwNTpcdFxuIDUwNjpcdHN0YXRpYyB2b2lkIF9fZ2V0X3NyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zcmVncyAqc3JlZ3MpXG4gNTA3Olx0e1xuIDUwODpcdFx0X19nZXRfc3JlZ3NfY29tbW9uKHZjcHUsIHNyZWdzKTtcbiA1MDk6XHRcbiA1MTA6XHRcdGlmICh2Y3B1LVx1MDAzZWFyY2guZ3Vlc3Rfc3RhdGVfcHJvdGVjdGVkKVxuIDUxMTpcdFx0XHRyZXR1cm47XG4gNTEyOlx0XG4gNTEzOlx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLmludGVycnVwdC5pbmplY3RlZCBcdTAwMjZcdTAwMjYgIXZjcHUtXHUwMDNlYXJjaC5pbnRlcnJ1cHQuc29mdClcbiA1MTQ6XHRcdFx0c2V0X2JpdCh2Y3B1LVx1MDAzZWFyY2guaW50ZXJydXB0Lm5yLFxuIDUxNTpcdFx0XHRcdCh1bnNpZ25lZCBsb25nICopc3JlZ3MtXHUwMDNlaW50ZXJydXB0X2JpdG1hcCk7XG4gNTE2Olx0fVxuIDUxNzpcdFxuIDUxODpcdGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9zcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gNTE5Olx0XHRcdFx0XHQgIHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzKVxuIDUyMDpcdHtcbiA1MjE6XHRcdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmhhc19wcm90ZWN0ZWRfc3RhdGUgXHUwMDI2XHUwMDI2XG4gNTIyOlx0XHQgICAgdmNwdS1cdTAwM2VhcmNoLmd1ZXN0X3N0YXRlX3Byb3RlY3RlZClcbiA1MjM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTI0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg3NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIERlZXBlciBpbnRvIGBrdm1faXNfdmFsaWRfc3JlZ3NgIFVzYWdlKioKCkFscmlnaHQsIHNvIEkmIzM5O3ZlIHNwb3R0ZWQgYGt2bV9pc192YWxpZF9zcmVnc2AgaW4gdGhlIGNvZGUsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gV2hlcmUgZWxzZSBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCB3aXRoaW4gYGFyY2gveDg2L2t2bS9yZWdzLmNgPyBJdCYjMzk7cyB0aW1lIHRvIHRyYWNlIGl0cyB1c2FnZS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYmxvY2tzLiBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgcmV2ZWFsIHRoZSBhc3N1bXB0aW9ucywgdGhlIHByZWNvbmRpdGlvbnMgYmVpbmcgY2hlY2tlZCwgYW5kIGhvdyB0aGUgZnVuY3Rpb24mIzM5O3MgcmV0dXJuIHZhbHVlIGlzIHVsdGltYXRlbHkgdXRpbGl6ZWQuIFRoaXMgd2lsbCBwYWludCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbiB0aGUgZnVuY3Rpb24gaGVscHMgdG8gZGVmZW5kLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgYW55IHNlY3VyaXR5LCBwZXJmb3JtYW5jZSwgb3IgY29ycmVjdG5lc3MgaXNzdWVzIG1pZ2h0IGJlIGx1cmtpbmcsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIHNlbnNpdGl2aXR5IG9mIFNSRUcgaGFuZGxpbmcgaW4gS1ZNLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIHJlc3Qgb2YgdGhlIGZpbGUgaGFzIHRvIHNheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9yZWdzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU2MDpcdFx0XHRpZiAoIWt2bV92Y3B1X2lzX2xlZ2FsX2NyMyh2Y3B1LCBzcmVncy1cdTAwM2VjcjMpKVxuIDU2MTpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA1NjI6XHRcdH0gZWxzZSB7XG4gNTYzOlx0XHRcdC8qXG4gNTY0Olx0XHRcdCAqIE5vdCBpbiA2NC1iaXQgbW9kZTogRUZFUi5MTUEgaXMgY2xlYXIgYW5kIHRoZSBjb2RlXG4gNTY1Olx0XHRcdCAqIHNlZ21lbnQgY2Fubm90IGJlIDY0LWJpdC5cbiA1NjY6XHRcdFx0ICovXG4gNTY3Olx0XHRcdGlmIChzcmVncy1cdTAwM2VlZmVyIFx1MDAyNiBFRkVSX0xNQSB8fCBzcmVncy1cdTAwM2Vjcy5sKVxuIDU2ODpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA1Njk6XHRcdH1cbiA1NzA6XHRcbiA1NzE6XHRcdHJldHVybiBrdm1faXNfdmFsaWRfY3I0KHZjcHUsIHNyZWdzLVx1MDAzZWNyNCkgXHUwMDI2XHUwMDI2XG4gNTcyOlx0XHQgICAgICAga3ZtX2lzX3ZhbGlkX2NyMCh2Y3B1LCBzcmVncy1cdTAwM2VjcjApIFx1MDAyNlx1MDAyNlxuIDU3MzpcdFx0ICAgICAgIGt2bV9pc192YWxpZF9jcjgoc3JlZ3MtXHUwMDNlY3I4KSBcdTAwMjZcdTAwMjZcbiA1NzQ6XHRcdCAgICAgICBrdm1fdmFsaWRfZWZlcih2Y3B1LCBzcmVncy1cdTAwM2VlZmVyKTtcbiA1NzU6XHR9XG4gNTc2Olx0XG4gNTc3Olx0c3RhdGljIGludCBfX3NldF9zcmVnc19jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncyxcbiA1Nzg6XHRcdFx0XHQgICAgICBpbnQgKm1tdV9yZXNldF9uZWVkZWQsIGJvb2wgdXBkYXRlX3BkcHRycylcbiA1Nzk6XHR7XG4gNTgwOlx0XHRpbnQgaWR4O1xuIDU4MTpcdFx0c3RydWN0IGRlc2NfcHRyIGR0O1xuIDU4MjpcdFxuIDU4MzpcdFx0aWYgKCFrdm1faXNfdmFsaWRfc3JlZ3ModmNwdSwgc3JlZ3MpKVxuIDU4NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1ODU6XHRcbiA1ODY6XHRcdGlmIChrdm1fYXBpY19zZXRfYmFzZSh2Y3B1LCBzcmVncy1cdTAwM2VhcGljX2Jhc2UsIHRydWUpKVxuIDU4NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1ODg6XHRcbiA1ODk6XHRcdGlmICh2Y3B1LVx1MDAzZWFyY2guZ3Vlc3Rfc3RhdGVfcHJvdGVjdGVkKVxuIDU5MDpcdFx0XHRyZXR1cm4gMDtcbiA1OTE6XHRcbiA1OTI6XHRcdGR0LnNpemUgPSBzcmVncy1cdTAwM2VpZHQubGltaXQ7XG4gNTkzOlx0XHRkdC5hZGRyZXNzID0gc3JlZ3MtXHUwMDNlaWR0LmJhc2U7XG4gNTk0Olx0XHRrdm1feDg2X2NhbGwoc2V0X2lkdCkodmNwdSwgXHUwMDI2ZHQpO1xuIDU5NTpcdFx0ZHQuc2l6ZSA9IHNyZWdzLVx1MDAzZWdkdC5saW1pdDtcbiA1OTY6XHRcdGR0LmFkZHJlc3MgPSBzcmVncy1cdTAwM2VnZHQuYmFzZTtcbiA1OTc6XHRcdGt2bV94ODZfY2FsbChzZXRfZ2R0KSh2Y3B1LCBcdTAwMjZkdCk7XG4gNTk4Olx0XG4gNTk5Olx0XHR2Y3B1LVx1MDAzZWFyY2guY3IyID0gc3JlZ3MtXHUwMDNlY3IyO1xuIDYwMDpcdFx0Km1tdV9yZXNldF9uZWVkZWQgfD0ga3ZtX3JlYWRfY3IzKHZjcHUpICE9IHNyZWdzLVx1MDAzZWNyMztcbiA2MDE6XHRcdHZjcHUtXHUwMDNlYXJjaC5jcjMgPSBzcmVncy1cdTAwM2VjcjM7XG4gNjAyOlx0XHRrdm1fcmVnaXN0ZXJfbWFya19kaXJ0eSh2Y3B1LCBWQ1BVX1JFR19DUjMpO1xuIDYwMzpcdFx0a3ZtX3g4Nl9jYWxsKHBvc3Rfc2V0X2NyMykodmNwdSwgc3JlZ3MtXHUwMDNlY3IzKTtcbiA2MDQ6XHRcbiA2MDU6XHRcdCptbXVfcmVzZXRfbmVlZGVkIHw9IHZjcHUtXHUwMDNlYXJjaC5lZmVyICE9IHNyZWdzLVx1MDAzZWVmZXI7XG4gNjA2Olx0XHRrdm1feDg2X2NhbGwoc2V0X2VmZXIpKHZjcHUsIHNyZWdzLVx1MDAzZWVmZXIpO1xuIDYwNzpcdFxuIDYwODpcdFx0Km1tdV9yZXNldF9uZWVkZWQgfD0ga3ZtX3JlYWRfY3IwKHZjcHUpICE9IHNyZWdzLVx1MDAzZWNyMDtcbiA2MDk6XHRcdGt2bV94ODZfY2FsbChzZXRfY3IwKSh2Y3B1LCBzcmVncy1cdTAwM2VjcjApO1xuIDYxMDpcdFxuIDYxMTpcdFx0Km1tdV9yZXNldF9uZWVkZWQgfD0ga3ZtX3JlYWRfY3I0KHZjcHUpICE9IHNyZWdzLVx1MDAzZWNyNDtcbiA2MTI6XHRcdGt2bV94ODZfY2FsbChzZXRfY3I0KSh2Y3B1LCBzcmVncy1cdTAwM2VjcjQpO1xuIDYxMzpcdFxuIDYxNDpcdFx0aWYgKHVwZGF0ZV9wZHB0cnMpIHtcbiA2MTU6XHRcdFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc3JjdSk7XG4gNjE2Olx0XHRcdGlmIChpc19wYWVfcGFnaW5nKHZjcHUpKSB7XG4gNjE3Olx0XHRcdFx0bG9hZF9wZHB0cnModmNwdSwga3ZtX3JlYWRfY3IzKHZjcHUpKTtcbiA2MTg6XHRcdFx0XHQqbW11X3Jlc2V0X25lZWRlZCA9IDE7XG4gNjE5Olx0XHRcdH1cbiA2MjA6XHRcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuIDYyMTpcdFx0fVxuIDYyMjpcdFxuIDYyMzpcdFx0a3ZtX3NldF9zZWdtZW50KHZjcHUsIFx1MDAyNnNyZWdzLVx1MDAzZWNzLCBWQ1BVX1NSRUdfQ1MpO1xuIDYyNDpcdFx0a3ZtX3NldF9zZWdtZW50KHZjcHUsIFx1MDAyNnNyZWdzLVx1MDAzZWRzLCBWQ1BVX1NSRUdfRFMpO1xuIDYyNTpcdFx0a3ZtX3NldF9zZWdtZW50KHZjcHUsIFx1MDAyNnNyZWdzLVx1MDAzZWVzLCBWQ1BVX1NSRUdfRVMpO1xuIDYyNjpcdFx0a3ZtX3NldF9zZWdtZW50KHZjcHUsIFx1MDAyNnNyZWdzLVx1MDAzZWZzLCBWQ1BVX1NSRUdfRlMpO1xuIDYyNzpcdFx0a3ZtX3NldF9zZWdtZW50KHZjcHUsIFx1MDAyNnNyZWdzLVx1MDAzZWdzLCBWQ1BVX1NSRUdfR1MpO1xuIDYyODpcdFx0a3ZtX3NldF9zZWdtZW50KHZjcHUsIFx1MDAyNnNyZWdzLVx1MDAzZXNzLCBWQ1BVX1NSRUdfU1MpO1xuIDYyOTpcdFxuIDYzMDpcdFx0a3ZtX3NldF9zZWdtZW50KHZjcHUsIFx1MDAyNnNyZWdzLVx1MDAzZXRyLCBWQ1BVX1NSRUdfVFIpO1xuIDYzMTpcdFx0a3ZtX3NldF9zZWdtZW50KHZjcHUsIFx1MDAyNnNyZWdzLVx1MDAzZWxkdCwgVkNQVV9TUkVHX0xEVFIpO1xuIDYzMjpcdFxuIDYzMzpcdFx0a3ZtX3NldF9jcjgodmNwdSwgc3JlZ3MtXHUwMDNlY3I4KTtcbiA2MzQ6XHRcbiA2MzU6XHRcdC8qIE9sZGVyIHVzZXJzcGFjZSB3b24mIzM5O3QgdW5oYWx0IHRoZSB2Y3B1IG9uIHJlc2V0LiAqL1xuIDYzNjpcdFx0aWYgKGt2bV92Y3B1X2lzX2JzcCh2Y3B1KSBcdTAwMjZcdTAwMjYga3ZtX3JpcF9yZWFkKHZjcHUpID09IDB4ZmZmMCBcdTAwMjZcdTAwMjZcbiA2Mzc6XHRcdCAgICBzcmVncy1cdTAwM2Vjcy5zZWxlY3RvciA9PSAweGYwMDAgXHUwMDI2XHUwMDI2IHNyZWdzLVx1MDAzZWNzLmJhc2UgPT0gMHhmZmZmMDAwMCBcdTAwMjZcdTAwMjZcbiA2Mzg6XHRcdCAgICAhaXNfcHJvdG1vZGUodmNwdSkpXG4gNjM5Olx0XHRcdGt2bV9zZXRfbXBfc3RhdGUodmNwdSwgS1ZNX01QX1NUQVRFX1JVTk5BQkxFKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzU5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB4ODYgS1ZNIFNlZ21lbnQgUmVnaXN0ZXIgU2V0dGluZyBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgX19zZXRfc3JlZ3NfY29tbW9uYC4gSSBrbm93IGl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciBzZXR0aW5nIHNlZ21lbnQgcmVnaXN0ZXJzIHdpdGhpbiB0aGUgS1ZNIHg4NiB2aXJ0dWFsaXphdGlvbiBjb250ZXh0LCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgaGllcmFyY2h5LiBTbywgZmlyc3QgdGhpbmdzIGZpcnN0OiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGVudHJ5IHBvaW50cy4gSXQgbG9va3MgbGlrZSBgX19zZXRfc3JlZ3NfY29tbW9uYCBnZXRzIGNhbGxlZCBlaXRoZXIgZGlyZWN0bHkgYnkgYF9fc2V0X3NyZWdzYCwgb3IgYnkgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzYCBvciBga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3MyYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBvZiBob3cgdGhlIHJlZ2lzdGVyIHVwZGF0ZXMgZ2V0IGluaXRpYXRlZC4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIHBlcmZvcm0gc29tZSBicm9hZGVyIGFuYWx5c2lzLiBJIG5lZWQgdG8gd2lkZW4gdGhlIHNjb3BlIGFuZCBjYXJlZnVsbHkgY2hlY2sgYW55IG90aGVyIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGBfX3NldF9zcmVnc19jb21tb25gLCBkZWZpbmVkIHdpdGhpbiBgYXJjaC94ODYva3ZtL3JlZ3MuY2AuIFVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMgaXMgY3J1Y2lhbCBmb3IgYW55IGRlZXBlciB3b3JrIEkgZG8gaW4gdGhpcyBhcmVhLiBJdCYjMzk7cyBhYm91dCBidWlsZGluZyBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHJlZ2lzdGVyIHNldHRpbmcgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9yZWdzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY0MDpcdFxuIDY0MTpcdFx0cmV0dXJuIDA7XG4gNjQyOlx0fVxuIDY0MzpcdFxuIDY0NDpcdHN0YXRpYyBpbnQgX19zZXRfc3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncylcbiA2NDU6XHR7XG4gNjQ2Olx0XHRpbnQgcGVuZGluZ192ZWMsIG1heF9iaXRzO1xuIDY0NzpcdFx0aW50IG1tdV9yZXNldF9uZWVkZWQgPSAwO1xuIDY0ODpcdFx0aW50IHJldCA9IF9fc2V0X3NyZWdzX2NvbW1vbih2Y3B1LCBzcmVncywgXHUwMDI2bW11X3Jlc2V0X25lZWRlZCwgdHJ1ZSk7XG4gNjQ5Olx0XG4gNjUwOlx0XHRpZiAocmV0KVxuIDY1MTpcdFx0XHRyZXR1cm4gcmV0O1xuIDY1MjpcdFxuIDY1MzpcdFx0aWYgKG1tdV9yZXNldF9uZWVkZWQpIHtcbiA2NTQ6XHRcdFx0a3ZtX21tdV9yZXNldF9jb250ZXh0KHZjcHUpO1xuIDY1NTpcdFx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNIX0dVRVNULCB2Y3B1KTtcbiA2NTY6XHRcdH1cbiA2NTc6XHRcbiA2NTg6XHRcdG1heF9iaXRzID0gS1ZNX05SX0lOVEVSUlVQVFM7XG4gNjU5Olx0XHRwZW5kaW5nX3ZlYyA9IGZpbmRfZmlyc3RfYml0KFxuIDY2MDpcdFx0XHQoY29uc3QgdW5zaWduZWQgbG9uZyAqKXNyZWdzLVx1MDAzZWludGVycnVwdF9iaXRtYXAsIG1heF9iaXRzKTtcbiA2NjE6XHRcbiA2NjI6XHRcdGlmIChwZW5kaW5nX3ZlYyBcdTAwM2MgbWF4X2JpdHMpIHtcbiA2NjM6XHRcdFx0a3ZtX3F1ZXVlX2ludGVycnVwdCh2Y3B1LCBwZW5kaW5nX3ZlYywgZmFsc2UpO1xuIDY2NDpcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtTZXQgYmFjayBwZW5kaW5nIGlycSAlZFxcblwmIzM0OywgcGVuZGluZ192ZWMpO1xuIDY2NTpcdFx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfRVZFTlQsIHZjcHUpO1xuIDY2NjpcdFx0fVxuIDY2NzpcdFx0cmV0dXJuIDA7XG4gNjY4Olx0fVxuIDY2OTpcdFxuIDY3MDpcdGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gNjcxOlx0XHRcdFx0XHQgIHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzKVxuIDY3MjpcdHtcbiA2NzM6XHRcdGludCByZXQ7XG4gNjc0Olx0XG4gNjc1Olx0XHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5oYXNfcHJvdGVjdGVkX3N0YXRlIFx1MDAyNlx1MDAyNlxuIDY3NjpcdFx0ICAgIHZjcHUtXHUwMDNlYXJjaC5ndWVzdF9zdGF0ZV9wcm90ZWN0ZWQpXG4gNjc3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDY3ODpcdFxuIDY3OTpcdFx0dmNwdV9sb2FkKHZjcHUpO1xuIDY4MDpcdFx0cmV0ID0gX19zZXRfc3JlZ3ModmNwdSwgc3JlZ3MpO1xuIDY4MTpcdFx0dmNwdV9wdXQodmNwdSk7XG4gNjgyOlx0XHRyZXR1cm4gcmV0O1xuIDY4MzpcdH1cbiA2ODQ6XHRcbiA2ODU6XHRpbnQga3ZtX3ZjcHVfaW9jdGxfeDg2X3NldF9zcmVnczIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIDY4NjpcdFx0XHRcdFx0ICBzdHJ1Y3Qga3ZtX3NyZWdzMiAqc3JlZ3MyKVxuIDY4NzpcdHtcbiA2ODg6XHRcdGludCBtbXVfcmVzZXRfbmVlZGVkID0gMDtcbiA2ODk6XHRcdGJvb2wgdmFsaWRfcGRwdHJzID0gc3JlZ3MyLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fU1JFR1MyX0ZMQUdTX1BEUFRSU19WQUxJRDtcbiA2OTA6XHRcdGJvb2wgcGFlID0gKHNyZWdzMi1cdTAwM2VjcjAgXHUwMDI2IFg4Nl9DUjBfUEcpIFx1MDAyNlx1MDAyNiAoc3JlZ3MyLVx1MDAzZWNyNCBcdTAwMjYgWDg2X0NSNF9QQUUpIFx1MDAyNlx1MDAyNlxuIDY5MTpcdFx0XHQhKHNyZWdzMi1cdTAwM2VlZmVyIFx1MDAyNiBFRkVSX0xNQSk7XG4gNjkyOlx0XHRpbnQgaSwgcmV0O1xuIDY5MzpcdFxuIDY5NDpcdFx0aWYgKHNyZWdzMi1cdTAwM2VmbGFncyBcdTAwMjYgfktWTV9TUkVHUzJfRkxBR1NfUERQVFJTX1ZBTElEKVxuIDY5NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA2OTY6XHRcbiA2OTc6XHRcdGlmICh2YWxpZF9wZHB0cnMgXHUwMDI2XHUwMDI2ICghcGFlIHx8IHZjcHUtXHUwMDNlYXJjaC5ndWVzdF9zdGF0ZV9wcm90ZWN0ZWQpKVxuIDY5ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA2OTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTE1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIHg4NiBSZWdpc3RlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGFyY2gveDg2L2t2bS9yZWdzLmNgLCB3aGljaCBpcyB0aGUga2V5IGZpbGUgZm9yIHg4NiByZWdpc3RlciBoYW5kbGluZyB3aXRoaW4gS1ZNLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSByZWdpc3RlciBtYW5pcHVsYXRpb24gaXMgY2hhbmdpbmcuCgpMb29raW5nIGF0IHRoZSBmdW5jdGlvbiBjaGFuZ2VzLCB3ZSBoYXZlOgoKKiAgIGBrdm1faXNfdmFsaWRfY3I4YCAoc3RhdGljKTogQSBzdGF0aWMgZnVuY3Rpb24sIGxpa2VseSBhbiBpbnRlcm5hbCBoZWxwZXIgdG8gdmFsaWRhdGUgdGhlIENSOCByZWdpc3Rlci4gVGhlICYjMzQ7c3RhdGljJiMzNDsgYXNwZWN0IG1lYW5zIGl0JiMzOTtzIGxpbWl0ZWQgaW4gc2NvcGUgYW5kIGlzbiYjMzk7dCBtZWFudCB0byBiZSB1c2VkIG91dHNpZGUgdGhlIGZpbGUuIFRoYXQgc3VnZ2VzdHMgdGhpcyBpcyBhYm91dCBpbnRlcm5hbCBjb25zaXN0ZW5jeSBhbmQgbm90IGFuIGV4cG9zZWQgaW50ZXJmYWNlIGNoYW5nZS4KKiAgIGBrdm1fc2V0X2NyOGA6IFRoaXMgb25lJiMzOTtzIGltcG9ydGFudC4gSXQgaW1wbGllcyB0aGF0IHRoZXJlJiMzOTtzIGxvZ2ljIGJlaW5nIGFsdGVyZWQgZm9yIHdyaXRpbmcgdG8gdGhlIENSOCByZWdpc3Rlci4gQ1I4IGlzIHRoZSBUYXNrIFByaW9yaXR5IFJlZ2lzdGVyIChUUFIpLCBhbmQgaXQgaGFzIGEgZGlyZWN0IGltcGFjdCBvbiBpbnRlcnJ1cHQgaGFuZGxpbmcgYW5kIHByaW9yaXRpemF0aW9uLiBUaGlzIHBhcnQgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgb24gdGFzayBtYW5hZ2VtZW50IG9yIHZpcnR1YWxpemF0aW9uLgoqICAgYGt2bV9pc192YWxpZF9zcmVnc2AgKHN0YXRpYywgY2FsbGVkIGluIGBfX3NldF9zcmVnc19jb21tb25gKTogQW5vdGhlciBpbnRlcm5hbCB2YWxpZGF0aW9uIGZ1bmN0aW9uLCB0aGlzIHRpbWUgZm9yIHNlZ21lbnQgcmVnaXN0ZXJzLiBgX19zZXRfc3JlZ3NfY29tbW9uYCBpcyB0aGUga2V5IHRob3VnaC4gU2V0dGluZyBzZWdtZW50IHJlZ2lzdGVycyBpcyBmdW5kYW1lbnRhbCB0byB0aGUgYXJjaGl0ZWN0dXJlLgoKU2luY2UgYGt2bV9zZXRfY3I4YCBpcyBhIGZ1bmN0aW9uIHdpdGggcG90ZW50aWFsIGZvciBicm9hZCBpbXBhY3QsIEkgbmVlZCB0byBrbm93IHdoZXJlIGl0JiMzOTtzIGJlaW5nICpjYWxsZWQqIGZyb20sIGFuZCBob3cgdGhlIGNoYW5nZXMgdG8gaXQgaGF2ZSBjaGFuZ2VkIHRoZSBjb2RlLiBJIG5lZWQgdG8gZ3JlcCBmb3IgYGt2bV9zZXRfY3I4YCBpbiB0aGUgc291cmNlIHRyZWUgdG8gaWRlbnRpZnkgd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZC4gVGhhdCB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiB0aGUgY2hhbmdlIGFuZCBpZiB0aGVyZSBhcmUgYW55IGRvd25zdHJlYW0gaW1wbGljYXRpb25zIHRvIGNvbnNpZGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fc2V0X2NyOCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vcmVncy5jPTQ0Mz1zdGF0aWMgYm9vbCBrdm1faXNfdmFsaWRfY3I4KHVuc2lnbmVkIGxvbmcgY3I4KVxuLS1cbmFyY2gveDg2L2t2bS9yZWdzLmMtNDQ3LVxuYXJjaC94ODYva3ZtL3JlZ3MuYzo0NDg6aW50IGt2bV9zZXRfY3I4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjgpXG5hcmNoL3g4Ni9rdm0vcmVncy5jLTQ0OS17XG4tLVxuYXJjaC94ODYva3ZtL3JlZ3MuYy00NTctfVxuYXJjaC94ODYva3ZtL3JlZ3MuYzo0NTg6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9zZXRfY3I4KTtcbmFyY2gveDg2L2t2bS9yZWdzLmMtNDU5LVxuLS1cbmFyY2gveDg2L2t2bS9yZWdzLmM9NTc3PXN0YXRpYyBpbnQgX19zZXRfc3JlZ3NfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zcmVncyAqc3JlZ3MsXG4tLVxuYXJjaC94ODYva3ZtL3JlZ3MuYy02MzItXG5hcmNoL3g4Ni9rdm0vcmVncy5jOjYzMzpcdGt2bV9zZXRfY3I4KHZjcHUsIHNyZWdzLVx1MDAzZWNyOCk7XG5hcmNoL3g4Ni9rdm0vcmVncy5jLTYzNC1cbi0tXG5hcmNoL3g4Ni9rdm0vcmVncy5oPTYxPWludCBrdm1fc2V0X2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KTtcbmFyY2gveDg2L2t2bS9yZWdzLmg6NjI6aW50IGt2bV9zZXRfY3I4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjgpO1xuYXJjaC94ODYva3ZtL3JlZ3MuaC02My1pbnQga3ZtX3NldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkciwgdW5zaWduZWQgbG9uZyB2YWwpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjU4Nz1zdGF0aWMgaW50IGNyX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNjI1LVx0XHRjYXNlIDg6XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjI2MjY6XHRcdFx0ZXJyID0ga3ZtX3NldF9jcjgodmNwdSwgdmFsKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjYyNy1cdFx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTI2NjE9c3RhdGljIGludCBjcl90cmFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI2ODQtXHRjYXNlIDg6XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjI2ODU6XHRcdHJldCA9IGt2bV9zZXRfY3I4KHZjcHUsIG5ld192YWx1ZSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI2ODYtXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjczNT1zdGF0aWMgaW50IGNyOF93cml0ZV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjc0MS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6Mjc0MjpcdC8qIGluc3RydWN0aW9uIGVtdWxhdGlvbiBjYWxscyBrdm1fc2V0X2NyOCgpICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI3NDMtXHRyID0gY3JfaW50ZXJjZXB0aW9uKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NDI2OD1zdGF0aWMgaW5saW5lIHZvaWQgc3luY19jcjhfdG9fbGFwaWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDI3Ni1cdFx0aW50IGNyOCA9IHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuaW50X2N0bCBcdTAwMjYgVl9UUFJfTUFTSztcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDI3NzpcdFx0a3ZtX3NldF9jcjgodmNwdSwgY3I4KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDI3OC1cdH1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTUwNDI9dm9pZCB2bXhfdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTUwNTQtXHR2bXgtXHUwMDNlaHZfZGVhZGxpbmVfdHNjID0gLTE7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjUwNTU6XHRrdm1fc2V0X2NyOCh2Y3B1LCAwKTtcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTA1Ni1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTU2Nzg9c3RhdGljIGludCBoYW5kbGVfY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTcwNy1cdFx0XHRcdHU4IGNyOCA9ICh1OCl2YWw7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjU3MDg6XHRcdFx0XHRlcnIgPSBrdm1fc2V0X2NyOCh2Y3B1LCBjcjgpO1xuYXJjaC94ODYva3ZtL3ZteC92bXguYy01NzA5LVx0XHRcdFx0cmV0ID0ga3ZtX2NvbXBsZXRlX2luc25fZ3AodmNwdSwgZXJyKTtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTUzNT1zdGF0aWMgaW50IGVtdWxhdG9yX3NldF9jcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgaW50IGNyLCB1bG9uZyB2YWwpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTU1NTMtXHRjYXNlIDg6XG5hcmNoL3g4Ni9rdm0veDg2LmM6NTU1NDpcdFx0cmVzID0ga3ZtX3NldF9jcjgodmNwdSwgdmFsKTtcbmFyY2gveDg2L2t2bS94ODYuYy01NTU1LVx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODg4MT1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04OTQ1LVx0aWYgKCFsYXBpY19pbl9rZXJuZWwodmNwdSkpIHtcbmFyY2gveDg2L2t2bS94ODYuYzo4OTQ2Olx0XHRpZiAoa3ZtX3NldF9jcjgodmNwdSwga3ZtX3J1bi1cdTAwM2VjcjgpICE9IDApIHtcbmFyY2gveDg2L2t2bS94ODYuYy04OTQ3LVx0XHRcdHIgPSAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIzMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipWYWxpZGF0aW5nIENSOCBpbiBLVk06IEEgUGF0Y2ggQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgYGt2bV9zZXRfY3I4YCBiZWluZyBpbnZva2VkIGFjcm9zcyBkaWZmZXJlbnQgS1ZNIGNvbnRleHRzLCBsaWtlIGBfX3NldF9zcmVnc19jb21tb25gLCBgZW11bGF0b3Jfc2V0X2NyYCwgYW5kIHRoZSBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIHBhdGguIEludGVyZXN0aW5nLiBCZWZvcmUgdGhpcyBwYXRjaCwgdGhlIGBrdm1faXNfdmFsaWRfc3JlZ3NgIGZ1bmN0aW9uLCB3aGljaCBpcyBjcnVjaWFsIGZvciB2YWxpZGF0aW5nIHN5c3RlbSByZWdpc3RlcnMsIHdhcyAqbm90KiBjaGVja2luZyB0aGUgdmFsaWRpdHkgb2YgYGNyOGAgdGhyb3VnaCBga3ZtX2lzX3ZhbGlkX2NyOChzcmVncy0mZ3Q7Y3I4KWAuIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS4KClNvLCB3aGF0IHRoaXMgcGF0Y2ggZG9lcyBpcyBzdHJhaWdodGZvcndhcmQ6IGl0IGVuc3VyZXMgdGhhdCBgS1ZNX1NFVF9TUkVHU2AgYW5kIGBLVk1fU0VUX1NSRUdTMmAsIGFsb25nIHdpdGggdGhvc2UgcmVsZXZhbnQgaW9jdGwgZW50cnkgcG9pbnRzIGxpa2UgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzYCBhbmQgYGt2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfc3JlZ3MyYCwgbm93IGluY2x1ZGUgdGhpcyBjcml0aWNhbCBjaGVjayBmb3IgdGhlIHZhbGlkaXR5IG9mIGBjcjhgICpiZWZvcmUqIG1vZGlmeWluZyBzeXN0ZW0gcmVnaXN0ZXJzLiBUaGlzIGVmZmVjdGl2ZWx5IHByZXZlbnRzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgaW52YWxpZCBgY3I4YCB2YWx1ZXMsIHdoaWNoIGlzIGEgZ29vZCB0aGluZyBmb3Igc2VjdXJpdHkgYW5kIHN0YWJpbGl0eS4KClRoZSBrZXkgcXVlc3Rpb24gaXMsICYjMzQ7SXMgdGhpcyByZWFjaGFibGUgY29kZT8mIzM0OyBBYnNvbHV0ZWx5LiBLVk0gaW9jdGxzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSBvbiB4ODYvYW1kNjQgc3lzdGVtcywgYW5kIHdlIGtub3cgc3l6a2FsbGVyLCBhIHByb21pbmVudCBmdXp6ZXIsIGhlYXZpbHkgZXhlcmNpc2VzIGAvZGV2L2t2bWAgdGhyb3VnaCBpb2N0bHMgbGlrZSBgS1ZNX1NFVF9TUkVHU2AuIFRoaXMgdnVsbmVyYWJpbGl0eSBpcyBkZWZpbml0ZWx5IGV4cGxvaXRhYmxlLgoKVG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiwgbGV0JiMzOTtzIHNlZSB3aGljaCBLY29uZmlnIG9wdGlvbnMgYXJlIHJlcXVpcmVkOiBgS1ZNYCBvciBgS1ZNX0lOVEVMYCAvIGBLVk1fQU1EYC4gVGhhdCBzZWVtcyByaWdodC4gQW5kIG5vdyBJIHNob3VsZCBjaGVjayB0aGUgcmVsZXZhbnQgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlLiBZZXMsIHRoaXMgcGF0Y2ggbWFrZXMgc2Vuc2UuIEl0JiMzOTtzIGEgc29saWQgZGVmZW5zZSBhZ2FpbnN0IHBvdGVudGlhbCBwcml2aWxlZ2UgZXNjYWxhdGlvbiBvciBzeXN0ZW0gaW5zdGFiaWxpdHkgZHVlIHRvIGZhdWx0eSBvciBtYWxpY2lvdXMgYGNyOGAgdmFsdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTczOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzQtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgzOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODQtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTUtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwODpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNzpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE4LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMwOmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMzpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjM0LVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMzcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIEtWTSB4ODYgTWFrZWZpbGUqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGEgY3J1Y2lhbCBmaWxlOiBgYXJjaC94ODYva3ZtL01ha2VmaWxlYC4gSSYjMzk7bSBndWVzc2luZyB0aGF0IHdoYXRldmVyIEkmIzM5O20gdHJvdWJsZXNob290aW5nLCBvciB3aGF0ZXZlciBlbmhhbmNlbWVudCBJJiMzOTttIHdvcmtpbmcgb24sIGxpa2VseSBoYXMgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBjb3JlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZSBLVk0geDg2IG1vZHVsZS4gVGhpcyBNYWtlZmlsZSBpcyB3aGVyZSBhIGxvdCBvZiB0aGUgbWFnaWMgaGFwcGVucyDigJMgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkLCBjb21waWxhdGlvbiB0YXJnZXRzIGFyZSBzZXQgdXAsIGFuZCB1bHRpbWF0ZWx5LCB0aGUgS1ZNIGtlcm5lbCBtb2R1bGUgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGdldHMgYnVpbHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZmlsZSYjMzk7cyBsb2dpYyB0byBzZWUgd2hlcmUgbXkgY2hhbmdlcyBmaXQgaW4gb3Igd2hlcmUgdGhlIHByb2JsZW0gbGllcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdGNjZmxhZ3MteSAmIzQzOz0gLUkgJChzcmN0cmVlKS9hcmNoL3g4Ni9rdm1cbiAgIDQ6XHRjY2ZsYWdzLSQoQ09ORklHX0tWTV9XRVJST1IpICYjNDM7PSAtV2Vycm9yXG4gICA1Olx0XG4gICA2Olx0aW5jbHVkZSAkKHNyY3RyZWUpL3ZpcnQva3ZtL01ha2VmaWxlLmt2bVxuICAgNzpcdFxuICAgODpcdGt2bS15XHRcdFx0JiM0Mzs9IHg4Ni5vIGVtdWxhdGUubyBpcnEubyBsYXBpYy5vIGNwdWlkLm8gbXNycy5vIHBtdS5vIHJlZ3MubyBcXFxuICAgOTpcdFx0XHRcdCAgIG10cnIubyBkZWJ1Z2ZzLm8gbW11L21tdS5vIG1tdS9wYWdlX3RyYWNrLm8gbW11L3NwdGUub1xuICAxMDpcdFxuICAxMTpcdGt2bS0kKENPTkZJR19YODZfNjQpICYjNDM7PSBtbXUvdGRwX2l0ZXIubyBtbXUvdGRwX21tdS5vXG4gIDEyOlx0a3ZtLSQoQ09ORklHX0tWTV9JT0FQSUMpICYjNDM7PSBpODI1OS5vIGk4MjU0Lm8gaW9hcGljLm9cbiAgMTM6XHRrdm0tJChDT05GSUdfS1ZNX0hZUEVSVikgJiM0Mzs9IGh5cGVydi5vXG4gIDE0Olx0a3ZtLSQoQ09ORklHX0tWTV9YRU4pXHQmIzQzOz0geGVuLm9cbiAgMTU6XHRrdm0tJChDT05GSUdfS1ZNX1NNTSlcdCYjNDM7PSBzbW0ub1xuICAxNjpcdFxuICAxNzpcdGt2bS1pbnRlbC15XHRcdCYjNDM7PSB2bXgvdm14Lm8gdm14L3ZtZW50ZXIubyB2bXgvcG11X2ludGVsLm8gdm14L3ZtY3MxMi5vIFxcXG4gIDE4Olx0XHRcdFx0ICAgdm14L25lc3RlZC5vIHZteC9wb3N0ZWRfaW50ci5vIHZteC9tYWluLm9cbiAgMTk6XHRcbiAgMjA6XHRrdm0taW50ZWwtJChDT05GSUdfWDg2X1NHWF9LVk0pXHQmIzQzOz0gdm14L3NneC5vXG4gIDIxOlx0a3ZtLWludGVsLSQoQ09ORklHX0tWTV9IWVBFUlYpXHQmIzQzOz0gdm14L2h5cGVydi5vIHZteC9oeXBlcnZfZXZtY3Mub1xuICAyMjpcdGt2bS1pbnRlbC0kKENPTkZJR19LVk1fSU5URUxfVERYKVx0JiM0Mzs9IHZteC90ZHgub1xuICAyMzpcdFxuICAyNDpcdGt2bS1hbWQteVx0XHQmIzQzOz0gc3ZtL3N2bS5vIHN2bS92bWVudGVyLm8gc3ZtL3BtdS5vIHN2bS9uZXN0ZWQubyBzdm0vYXZpYy5vXG4gIDI1Olx0XG4gIDI2Olx0a3ZtLWFtZC0kKENPTkZJR19LVk1fQU1EX1NFVilcdCYjNDM7PSBzdm0vc2V2Lm9cbiAgMjc6XHRrdm0tYW1kLSQoQ09ORklHX0tWTV9IWVBFUlYpXHQmIzQzOz0gc3ZtL2h5cGVydi5vXG4gIDI4Olx0XG4gIDI5Olx0aWZkZWYgQ09ORklHX0hZUEVSVlxuICAzMDpcdGt2bS15XHRcdFx0JiM0Mzs9IGt2bV9vbmh5cGVydi5vXG4gIDMxOlx0a3ZtLWludGVsLXlcdFx0JiM0Mzs9IHZteC92bXhfb25oeXBlcnYubyB2bXgvaHlwZXJ2X2V2bWNzLm9cbiAgMzI6XHRrdm0tYW1kLXlcdFx0JiM0Mzs9IHN2bS9zdm1fb25oeXBlcnYub1xuICAzMzpcdGVuZGlmXG4gIDM0Olx0XG4gIDM1Olx0b2JqLSQoQ09ORklHX0tWTV9YODYpXHQmIzQzOz0ga3ZtLm9cbiAgMzY6XHRvYmotJChDT05GSUdfS1ZNX0lOVEVMKVx0JiM0Mzs9IGt2bS1pbnRlbC5vXG4gIDM3Olx0b2JqLSQoQ09ORklHX0tWTV9BTUQpXHQmIzQzOz0ga3ZtLWFtZC5vXG4gIDM4Olx0XG4gIDM5Olx0QUZMQUdTX3N2bS92bWVudGVyLm8gICAgOj0gLWlxdW90ZSAkKG9iailcbiAgNDA6XHQkKG9iaikvc3ZtL3ZtZW50ZXIubzogJChvYmopL2t2bS1hc20tb2Zmc2V0cy5oXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzQ4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNzE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIENoYW5nZXMgdG8gYHJlZ3Mub2AgaW4gS1ZNLVkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGByZWdzLm9gIGhlcmUsIHdoaWNoIGlzIGNsZWFybHkgcGFydCBvZiB0aGUgYGt2bS15YCBidWlsZC4gVGhpcyBpcyBjb25kaXRpb25hbCBvbiBgQ09ORklHX0tWTV9YODZgIG9yIGBDT05GSUdfS1ZNYCBiZWluZyBlbmFibGVkLCBhbmQsIGltcG9ydGFudGx5LCBlaXRoZXIgYENPTkZJR19LVk1fSU5URUxgIG9yIGBDT05GSUdfS1ZNX0FNRGAgYXMgd2VsbC4gVGhhdCBtZWFucyBgS1ZNYCBhbmQgZWl0aGVyIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYCBhcmUgZnVuZGFtZW50YWxseSByZXF1aXJlZCBmb3IgdGhpcy4gR290IGl0LgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRoZSBhZmZlY3RlZCBzeW1ib2xzLiBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBhcmNoL3g4Ni9rdm0vcmVncy5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyB0b3VjaDoKCiogICBga3ZtX3NldF9jcjhgCiogICBga3ZtX2lzX3ZhbGlkX2NyOGAgKHRoaXMgb25lJiMzOTtzIHN0YXRpYykKKiAgIGBrdm1faXNfdmFsaWRfc3JlZ3NgIChhbHNvIHN0YXRpYykKKiAgIGBfX3NldF9zcmVnc19jb21tb25gIC8gYF9fc2V0X3NyZWdzYCAodGhlc2UgYXJlIHN0YXRpYyB0b28pCiogICBga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3NgICh0aGlzIGlzIGEgbm9uLXN0YXRpYyBlbnRyeXBvaW50KQoqICAgYGt2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfc3JlZ3MyYCAoYW5vdGhlciBub24tc3RhdGljIGVudHJ5cG9pbnQpCgpUaGUgY3JpdGljYWwgdGhpbmcgaXMgdG8gZGV0ZXJtaW5lIGlmIHRob3NlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBga3ZtX3NldF9jcjhgLCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3NgLCBhbmQgYGt2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfc3JlZ3MyYCwgYXJlIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgSSB0aGluayB0aGV5IGFyZS4gWWVzLCBhIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoaXMsIHRoZXkmIzM5O3JlIHRoZSBvbmVzIEkmIzM5O20gbG9va2luZyBhdC4KCkFscmlnaHQsIHNvIEkgbmVlZCB0byBjaGVjayBmb3Igc2lkZSBlZmZlY3RzIGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBwYXRjaCBkaWZmIHRvIGNvbmZpcm0gdGhhdCBga3ZtX2lzX3ZhbGlkX3NyZWdzYCBpcyBiZWluZyB1c2VkIHRvIHZhbGlkYXRlIGBjcjhgLiBUaGF0IGNvbmZpcm1zIGl0LiBJdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBjb2RlIGluIGBrdm1fc2V0X2NyOGAgd2FzIHJlcGxhY2VkIHdpdGggYSBjYWxsIHRvIGBrdm1faXNfdmFsaWRfY3I4YCwgd2hpY2ggbm93IGNoZWNrcyB0aGUgcmVzZXJ2ZWQgYml0cyBpbnN0ZWFkLiBBZGRpdGlvbmFsbHksIGBrdm1faXNfdmFsaWRfc3JlZ3NgIGlzIGJlaW5nIHVzZWQgbm93IHRvIHZhbGlkYXRlIGBzcmVncy0mZ3Q7Y3I4YC4KCk5vdyBJIG5lZWQgdG8gY2hlY2sgaWYgYGt2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfc3JlZ3MyYCBjYWxscyBga3ZtX2lzX3ZhbGlkX3NyZWdzYC4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBjaGFuZ2UgcHJvcGFnYXRlcy4gCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3JlZ3MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjg1Olx0aW50IGt2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfc3JlZ3MyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiA2ODY6XHRcdFx0XHRcdCAgc3RydWN0IGt2bV9zcmVnczIgKnNyZWdzMilcbiA2ODc6XHR7XG4gNjg4Olx0XHRpbnQgbW11X3Jlc2V0X25lZWRlZCA9IDA7XG4gNjg5Olx0XHRib29sIHZhbGlkX3BkcHRycyA9IHNyZWdzMi1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX1NSRUdTMl9GTEFHU19QRFBUUlNfVkFMSUQ7XG4gNjkwOlx0XHRib29sIHBhZSA9IChzcmVnczItXHUwMDNlY3IwIFx1MDAyNiBYODZfQ1IwX1BHKSBcdTAwMjZcdTAwMjYgKHNyZWdzMi1cdTAwM2VjcjQgXHUwMDI2IFg4Nl9DUjRfUEFFKSBcdTAwMjZcdTAwMjZcbiA2OTE6XHRcdFx0IShzcmVnczItXHUwMDNlZWZlciBcdTAwMjYgRUZFUl9MTUEpO1xuIDY5MjpcdFx0aW50IGksIHJldDtcbiA2OTM6XHRcbiA2OTQ6XHRcdGlmIChzcmVnczItXHUwMDNlZmxhZ3MgXHUwMDI2IH5LVk1fU1JFR1MyX0ZMQUdTX1BEUFRSU19WQUxJRClcbiA2OTU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNjk2Olx0XG4gNjk3Olx0XHRpZiAodmFsaWRfcGRwdHJzIFx1MDAyNlx1MDAyNiAoIXBhZSB8fCB2Y3B1LVx1MDAzZWFyY2guZ3Vlc3Rfc3RhdGVfcHJvdGVjdGVkKSlcbiA2OTg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNjk5Olx0XG4gNzAwOlx0XHRyZXQgPSBfX3NldF9zcmVnc19jb21tb24odmNwdSwgKHN0cnVjdCBrdm1fc3JlZ3MgKilzcmVnczIsXG4gNzAxOlx0XHRcdFx0XHQgXHUwMDI2bW11X3Jlc2V0X25lZWRlZCwgIXZhbGlkX3BkcHRycyk7XG4gNzAyOlx0XHRpZiAocmV0KVxuIDcwMzpcdFx0XHRyZXR1cm4gcmV0O1xuIDcwNDpcdFxuIDcwNTpcdFx0aWYgKHZhbGlkX3BkcHRycykge1xuIDcwNjpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA0IDsgaSYjNDM7JiM0MzspXG4gNzA3Olx0XHRcdFx0a3ZtX3BkcHRyX3dyaXRlKHZjcHUsIGksIHNyZWdzMi1cdTAwM2VwZHB0cnNbaV0pO1xuIDcwODpcdFxuIDcwOTpcdFx0XHRrdm1fcmVnaXN0ZXJfbWFya19kaXJ0eSh2Y3B1LCBWQ1BVX1JFR19QRFBUUik7XG4gNzEwOlx0XHRcdG1tdV9yZXNldF9uZWVkZWQgPSAxO1xuIDcxMTpcdFx0XHR2Y3B1LVx1MDAzZWFyY2gucGRwdHJzX2Zyb21fdXNlcnNwYWNlID0gdHJ1ZTtcbiA3MTI6XHRcdH1cbiA3MTM6XHRcdGlmIChtbXVfcmVzZXRfbmVlZGVkKSB7XG4gNzE0Olx0XHRcdGt2bV9tbXVfcmVzZXRfY29udGV4dCh2Y3B1KTtcbiA3MTU6XHRcdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1RMQl9GTFVTSF9HVUVTVCwgdmNwdSk7XG4gNzE2Olx0XHR9XG4gNzE3Olx0XHRyZXR1cm4gMDtcbiA3MTg6XHR9XG4gNzE5Olx0XG4gNzIwOlx0dm9pZCBrdm1fcnVuX3N5bmNfcmVnc190b191c2VyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiA3MjE6XHR7XG4gNzIyOlx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBrdm1fc3luY19yZWdzKSBcdTAwM2UgU1lOQ19SRUdTX1NJWkVfQllURVMpO1xuIDcyMzpcdFxuIDcyNDpcdFx0aWYgKHZjcHUtXHUwMDNlcnVuLVx1MDAzZWt2bV92YWxpZF9yZWdzIFx1MDAyNiBLVk1fU1lOQ19YODZfUkVHUylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0MjcKCQkJCQkJCW91dHB1dDogMTY0CgkJCQkJCQl0aG91Z2h0czogMjU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBSZWdpc3RlciBWYWxpZGF0aW9uIGluIEtWTSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgaXQuIEJvdGggYGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzYCBhbmQgYGt2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfc3JlZ3MyYCB1bHRpbWF0ZWx5IGNhbGwgYF9fc2V0X3NyZWdzX2NvbW1vbmAsIHdoaWNoIGluIHR1cm4gcmVsaWVzIG9uIGBrdm1faXNfdmFsaWRfc3JlZ3NgLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgcGF0aC4gQW5kLCBqdXN0IGFzIGltcG9ydGFudGx5LCBga3ZtX3NldF9jcjhgIGlzIGEgZGlzdGluY3QgZ2xvYmFsIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYWxzbyBiZWluZyBtb2RpZmllZCBieSB0aGUgcHJvcG9zZWQgcGF0Y2guCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gd2hldGhlciB0aGlzIGlzIHNvbWV0aGluZyB3ZSBzaG91bGQgYWN0dWFsbHkgZnV6ei4gKlllcyosIHRoaXMgZGVmaW5pdGVseSBmaXRzIHRoZSBiaWxsLiBXZSYjMzk7cmUgbG9va2luZyBhdCByZWFjaGFibGUgS1ZNIGtlcm5lbCBjb2RlLiBTcGVjaWZpY2FsbHksIHRoaXMgaXMgY29kZSB0aGF0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciAqbW9kaWZ5aW5nIHJlZ2lzdGVyIHZhbGlkYXRpb24gbG9naWMqIHJlbGF0ZWQgdG8gdGhlIENSOCByZWdpc3RlciBhbmQgdGhlIHNyZWdzIGlvY3Rscy4gVGhhdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgaGVyZSB3aWxsIGJlIG9uIHRob3NlIHNwZWNpZmljIHN5bWJvbHM6IGBrdm1fc2V0X2NyOGAsIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zcmVnc2AsIGFuZCBga3ZtX3ZjcHVfaW9jdGxfeDg2X3NldF9zcmVnczJgLgoKQmVmb3JlIEkgY29tbWl0IHRvIHRoaXMsIGxldCYjMzk7cyBtYWtlIGEgc2FuaXR5IGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgY29uZmlncyBsaW5lIHVwIHdpdGggdGhlIHN5bWJvbHMuIEkgbmVlZCB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCB0byBkbyB0aGlzLiBDb25maWdzIGFyZSBkZWZpbml0ZWx5IGNvcnJlY3Q6IGBLVk1gLCBgS1ZNX0lOVEVMYCwgYW5kIGBLVk1fQU1EYC4KCkFscmlnaHQsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gV2UgaGF2ZSBhIHNvbGlkICYjMzQ7V29ydGhGdXp6aW5nOiB0cnVlJiMzNDsgdmVyZGljdC4gVGhlIHJlYXNvbmluZyBpcyBjb25jaXNlIGFuZCBjbGVhci4gV2UmIzM5O3JlIGRpcmVjdGx5IHRhcmdldGluZyBjb2RlIHRoYXQgdmFsaWRhdGVzIHJlZ2lzdGVycywgYW5kIHRoYXQmIzM5O3MgZXhhY3RseSB0aGUga2luZCBvZiB0aGluZyBmdXp6aW5nIGV4Y2VscyBhdC4KCk5vdywgaXQmIzM5O3MgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIFdlJiMzOTtyZSBnb29kIHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3NldF9jcjgmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3MmIzM0OywKICAgICYjMzQ7a3ZtX3ZjcHVfaW9jdGxfeDg2X3NldF9zcmVnczImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciBDUjggcmVzZXJ2ZWQgYml0cyBpbiBLVk0gd2hlbiBzZXR0aW5nIHNwZWNpYWwgcmVnaXN0ZXJzIChzcmVncyAvIHNyZWdzMikuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocyBpbiB4ODYgS1ZNIGFjY2Vzc2libGUgdmlhIHVzZXItc3BhY2UgaW9jdGxzIChLVk1fU0VUX1NSRUdTLCBLVk1fU0VUX1NSRUdTMikgYW5kIENSOCBlbXVsYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9zZXRfY3I4JiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzJiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfc3JlZ3MyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgQ1I4IHJlc2VydmVkIGJpdHMgaW4gS1ZNIHdoZW4gc2V0dGluZyBzcGVjaWFsIHJlZ2lzdGVycyAoc3JlZ3MgLyBzcmVnczIpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaW4geDg2IEtWTSBhY2Nlc3NpYmxlIHZpYSB1c2VyLXNwYWNlIGlvY3RscyAoS1ZNX1NFVF9TUkVHUywgS1ZNX1NFVF9TUkVHUzIpIGFuZCBDUjggZW11bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIwOjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBpbnB1dCB2YWxpZGF0aW9uIGZvciBDUjggcmVnaXN0ZXIgdmFsdWVzIGluIEtWTSAoYGt2bV9pc192YWxpZF9jcjhgKSwgZW5zdXJpbmcgdGhhdCByZXNlcnZlZCBiaXRzICg2Mzo0KSBpbiBDUjggY2Fubm90IGJlIHNldCB2aWEgYEtWTV9TRVRfU1JFR1NgIChjaGVja2VkIGluIGBrdm1faXNfdmFsaWRfc3JlZ3NgKSBvciBga3ZtX3NldF9jcjhgLCBhbG9uZyB3aXRoIGNvcnJlc3BvbmRpbmcgc2VsZnRlc3QgdXBkYXRlcy5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlIG9ubHkgcGVyZm9ybXMgYml0d2lzZSB2YWxpZGF0aW9uIG9uIGlucHV0IHZhbHVlcyAoYHNyZWdzLVx1MDAzZWNyOGAgLyBgY3I4YCkgcGFzc2VkIGludG8gS1ZNIGZyb20gdXNlcnNwYWNlIG9yIGNhbGxlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnksIG5vciBkb2VzIGl0IGFsdGVyIGFueSBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29weSBvcGVyYXRpb25zIChpbmZvLWxlYWtzKSBvciBzdHJ1Y3R1cmUgcGFkZGluZy5cbi0gS0FTQU4vU3RhbmRhcmQgdGVzdGluZyBhcHBsaWNhYmlsaXR5OiBTdGFuZGFyZCBmdW5jdGlvbmFsIHRlc3RpbmcgYW5kIEtWTSBzZWxmdGVzdHMgYWRlcXVhdGVseSB2ZXJpZnkgdGhpcyBpbnB1dCB2YWxpZGF0aW9uIGxvZ2ljLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggcG9zZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzkyZWQ2YjAzMGRkY2U2MzRiYWM0YzIyZDA2ZjZlOTg2M2RjMjg0YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMjA6Mzk6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcmVncy5jIGIvYXJjaC94ODYva3ZtL3JlZ3MuYwppbmRleCA4ZjY2NDM4OTg5ZTQ3Li5mYWQzMWI1OWM2MjJmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vcmVncy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9yZWdzLmMKQEAgLTQ0MCw5ICYjNDM7NDQwLDE0IEBAIGludCBrdm1fc2V0X2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KQogfQogRVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9zZXRfY3I0KTsKIAomIzQzO3N0YXRpYyBib29sIGt2bV9pc192YWxpZF9jcjgodW5zaWduZWQgbG9uZyBjcjgpCiYjNDM7ewomIzQzOwlyZXR1cm4gIShjcjggJmFtcDsgQ1I4X1JFU0VSVkVEX0JJVFMpOwomIzQzO30KJiM0MzsKIGludCBrdm1fc2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I4KQogewotCWlmIChjcjggJmFtcDsgQ1I4X1JFU0VSVkVEX0JJVFMpCiYjNDM7CWlmICgha3ZtX2lzX3ZhbGlkX2NyOChjcjgpKQogCQlyZXR1cm4gMTsKIAlpZiAobGFwaWNfaW5fa2VybmVsKHZjcHUpKQogCQlrdm1fbGFwaWNfc2V0X3Rwcih2Y3B1LCBjcjgpOwpAQCAtNTY1LDYgJiM0Mzs1NzAsNyBAQCBzdGF0aWMgYm9vbCBrdm1faXNfdmFsaWRfc3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncykKIAogCXJldHVybiBrdm1faXNfdmFsaWRfY3I0KHZjcHUsIHNyZWdzLSZndDtjcjQpICZhbXA7JmFtcDsKIAkgICAgICAga3ZtX2lzX3ZhbGlkX2NyMCh2Y3B1LCBzcmVncy0mZ3Q7Y3IwKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBrdm1faXNfdmFsaWRfY3I4KHNyZWdzLSZndDtjcjgpICZhbXA7JmFtcDsKIAkgICAgICAga3ZtX3ZhbGlkX2VmZXIodmNwdSwgc3JlZ3MtJmd0O2VmZXIpOwogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmMKaW5kZXggNjAzMjI2ZmZlNDM3NC4uNGU3YzM1MTc5NDM4MyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V0X3NyZWdzX3Rlc3QuYwpAQCAtMTM1LDYgJiM0MzsxMzUsMTggQEAgc3RhdGljIHZvaWQgdGVzdF9jcl9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGNyNCkKIAkvKiBOVyB3aXRob3V0IENEIGlzIGlsbGVnYWwsIGFzIGlzIFBHIHdpdGhvdXQgUEUuICovCiAJVEVTVF9JTlZBTElEX1NSRUdfQklUKHZjcHUsIGNyMCwgc3JlZ3MsIFg4Nl9DUjBfTlcpOwogCVRFU1RfSU5WQUxJRF9TUkVHX0JJVCh2Y3B1LCBjcjAsIHNyZWdzLCBYODZfQ1IwX1BHKTsKJiM0MzsKJiM0MzsJLyogQ1I4IGJpdHMgMzowIGFyZSB3cml0YWJsZTsgYml0cyA2Mzo0IGFyZSByZXNlcnZlZC4gKi8KJiM0MzsJdmNwdV9zcmVnc19nZXQodmNwdSwgJmFtcDtzcmVncyk7CiYjNDM7CXNyZWdzLmNyOCA9IDB4ZjsKJiM0MzsJcmMgPSBfdmNwdV9zcmVnc19zZXQodmNwdSwgJmFtcDtzcmVncyk7CiYjNDM7CVRFU1RfQVNTRVJUKCFyYywgJiMzNDtGYWlsZWQgdG8gc2V0IHZhbGlkIENSOCB2YWx1ZSAweGYmIzM0Oyk7CiYjNDM7CiYjNDM7CXZjcHVfc3JlZ3NfZ2V0KHZjcHUsICZhbXA7c3JlZ3MpOwomIzQzOwlURVNUX0FTU0VSVF9FUShzcmVncy5jcjgsIDB4Zik7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDQ7IGkgJmx0OyA2NDsgaSYjNDM7JiM0MzspCiYjNDM7CQlURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3I4LCBzcmVncywgQklUX1VMTChpKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHRlc3RfZWZlcl9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGVmZXIpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbiBmb3IgYSBLVk0gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBhc3Nlc3Mgd2hldGhlciB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNjcnV0aW5pemUgdGhlIGNvZGUgY2hhbmdlcy4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIHByb3ZpZGVkIGRpZmY6CgpgYGBkaWZmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcmVncy5jIGIvYXJjaC94ODYva3ZtL3JlZ3MuYwppbmRleCA4ZjY2NDM4OTg5ZTQ3Li5mYWQzMWI1OWM2MjJmCi0tLSBhL2FyY2gveDg2L2t2bS9yZWdzLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3JlZ3MuYwpAQCAtNDQwLDkgJiM0Mzs0NDAsMTQgQEAgaW50IGt2bV9zZXRfY3I0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjQpCiB9CiBFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3NldF9jcjQpOwogCiYjNDM7c3RhdGljIGJvb2wga3ZtX2lzX3ZhbGlkX2NyOCh1bnNpZ25lZCBsb25nIGNyOCkKJiM0Mzt7CiYjNDM7CXJldHVybiAhKGNyOCAmYW1wOyBDUjhfUkVTRVJWRURfQklUUyk7CiYjNDM7fQomIzQzOwogaW50IGt2bV9zZXRfY3I4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjgpCiB7Ci0JaWYgKGNyOCAmYW1wOyBDUjhfUkVTRVJWRURfQklUUykKJiM0MzsJaWYgKCFrdm1faXNfdmFsaWRfY3I4KGNyOCkpCiAJCXJldHVybiAxOwogCWlmIChsYXBpY19pbl9rZXJuZWwodmNwdSkpCiAJCWt2bV9sYXBpY19zZXRfdHByKHZjcHUsIGNyOCk7CkBAIC01NjUsNiAmIzQzOzU3MCw3IEBAIHN0YXRpYyBib29sIGt2bV9pc192YWxpZF9zcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzKQogCiAJcmV0dXJuIGt2bV9pc192YWxpZF9jcjQodmNwdSwgc3JlZ3MtJmd0O2NyNCkgJmFtcDsmYW1wOwogCSAgICAgICBrdm1faXNfdmFsaWRfY3IwKHZjcHUsIHNyZWdzLSZndDtjcjApICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIGt2bV9pc192YWxpZF9jcjgoc3JlZ3MtJmd0O2NyOCkgJmFtcDsmYW1wOwogCSAgICAgICBrdm1fdmFsaWRfZWZlcih2Y3B1LCBzcmVncy0mZ3Q7ZWZlcik7CiB9CiBgYGAKClJpZ2h0LCB0aGUgY2hhbmdlcyBpbnZvbHZlIGFkZGluZyBhIG5ldyBzdGF0aWMgZnVuY3Rpb24sIGBrdm1faXNfdmFsaWRfY3I4YCwgdG8gdmFsaWRhdGUgdGhlIENSOCByZWdpc3Rlciwgd2hpY2ggdGhlbiBnZXRzIHVzZWQgaW4gYGt2bV9zZXRfY3I4YCBhbmQsIGNydWNpYWxseSwgd2l0aGluIGBrdm1faXNfdmFsaWRfc3JlZ3NgLiBJIG5lZWQgdG8gbm93IGV4YW1pbmUgYGFyY2gveDg2L2t2bS9yZWdzLmNgIGFyb3VuZCBsaW5lIDU2NSBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIG9uIHRoZSB1c2FnZSBvZiBga3ZtX2lzX3ZhbGlkX3NyZWdzYCBhbmQgaXRzIGNhbGxlcnMuIFRoZSBrZXkgaGVyZSBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBuZXcgdmFsaWRhdGlvbiBsb2dpYyBleHBvc2VzIGFueSBuZXcgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBsaWtlbHkgYm9pbHMgZG93biB0byB1bmRlcnN0YW5kaW5nIHdoZXJlIGFuZCBob3cgdGhlIGBzcmVnc2Agc3RydWN0dXJlIGlzIHBvcHVsYXRlZCBhbmQgdXNlZC4gRGVwZW5kaW5nIG9uIGhvdyBgQ1I4YCBpcyBzZXQgdXAgYW5kIHdoYXQgdGhlIHJlcGVyY3Vzc2lvbnMgb2YgYW4gaW52YWxpZCB2YWx1ZSBtaWdodCBiZSBpbiBzdWJzZXF1ZW50IG9wZXJhdGlvbnMsIEkgY2FuIGRlY2lkZSB3aGV0aGVyIHRoZSBleGlzdGluZyBmdXp6aW5nIGNvdmVyYWdlIGlzIGFkZXF1YXRlIG9yIGlmIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeS4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgZGF0YSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9yZWdzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU1MDpcdHN0YXRpYyBib29sIGt2bV9pc192YWxpZF9zcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzKVxuIDU1MTpcdHtcbiA1NTI6XHRcdGlmICgoc3JlZ3MtXHUwMDNlZWZlciBcdTAwMjYgRUZFUl9MTUUpIFx1MDAyNlx1MDAyNiAoc3JlZ3MtXHUwMDNlY3IwIFx1MDAyNiBYODZfQ1IwX1BHKSkge1xuIDU1MzpcdFx0XHQvKlxuIDU1NDpcdFx0XHQgKiBXaGVuIEVGRVIuTE1FIGFuZCBDUjAuUEcgYXJlIHNldCwgdGhlIHByb2Nlc3NvciBpcyBpblxuIDU1NTpcdFx0XHQgKiA2NC1iaXQgbW9kZSAodGhvdWdoIG1heWJlIGluIGEgMzItYml0IGNvZGUgc2VnbWVudCkuXG4gNTU2Olx0XHRcdCAqIENSNC5QQUUgYW5kIEVGRVIuTE1BIG11c3QgYmUgc2V0LlxuIDU1NzpcdFx0XHQgKi9cbiA1NTg6XHRcdFx0aWYgKCEoc3JlZ3MtXHUwMDNlY3I0IFx1MDAyNiBYODZfQ1I0X1BBRSkgfHwgIShzcmVncy1cdTAwM2VlZmVyIFx1MDAyNiBFRkVSX0xNQSkpXG4gNTU5Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDU2MDpcdFx0XHRpZiAoIWt2bV92Y3B1X2lzX2xlZ2FsX2NyMyh2Y3B1LCBzcmVncy1cdTAwM2VjcjMpKVxuIDU2MTpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA1NjI6XHRcdH0gZWxzZSB7XG4gNTYzOlx0XHRcdC8qXG4gNTY0Olx0XHRcdCAqIE5vdCBpbiA2NC1iaXQgbW9kZTogRUZFUi5MTUEgaXMgY2xlYXIgYW5kIHRoZSBjb2RlXG4gNTY1Olx0XHRcdCAqIHNlZ21lbnQgY2Fubm90IGJlIDY0LWJpdC5cbiA1NjY6XHRcdFx0ICovXG4gNTY3Olx0XHRcdGlmIChzcmVncy1cdTAwM2VlZmVyIFx1MDAyNiBFRkVSX0xNQSB8fCBzcmVncy1cdTAwM2Vjcy5sKVxuIDU2ODpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA1Njk6XHRcdH1cbiA1NzA6XHRcbiA1NzE6XHRcdHJldHVybiBrdm1faXNfdmFsaWRfY3I0KHZjcHUsIHNyZWdzLVx1MDAzZWNyNCkgXHUwMDI2XHUwMDI2XG4gNTcyOlx0XHQgICAgICAga3ZtX2lzX3ZhbGlkX2NyMCh2Y3B1LCBzcmVncy1cdTAwM2VjcjApIFx1MDAyNlx1MDAyNlxuIDU3MzpcdFx0ICAgICAgIGt2bV9pc192YWxpZF9jcjgoc3JlZ3MtXHUwMDNlY3I4KSBcdTAwMjZcdTAwMjZcbiA1NzQ6XHRcdCAgICAgICBrdm1fdmFsaWRfZWZlcih2Y3B1LCBzcmVncy1cdTAwM2VlZmVyKTtcbiA1NzU6XHR9XG4gNTc2Olx0XG4gNTc3Olx0c3RhdGljIGludCBfX3NldF9zcmVnc19jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncyxcbiA1Nzg6XHRcdFx0XHQgICAgICBpbnQgKm1tdV9yZXNldF9uZWVkZWQsIGJvb2wgdXBkYXRlX3BkcHRycylcbiA1Nzk6XHR7XG4gNTgwOlx0XHRpbnQgaWR4O1xuIDU4MTpcdFx0c3RydWN0IGRlc2NfcHRyIGR0O1xuIDU4MjpcdFxuIDU4MzpcdFx0aWYgKCFrdm1faXNfdmFsaWRfc3JlZ3ModmNwdSwgc3JlZ3MpKVxuIDU4NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1ODU6XHRcbiA1ODY6XHRcdGlmIChrdm1fYXBpY19zZXRfYmFzZSh2Y3B1LCBzcmVncy1cdTAwM2VhcGljX2Jhc2UsIHRydWUpKVxuIDU4NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1ODg6XHRcbiA1ODk6XHRcdGlmICh2Y3B1LVx1MDAzZWFyY2guZ3Vlc3Rfc3RhdGVfcHJvdGVjdGVkKVxuIDU5MDpcdFx0XHRyZXR1cm4gMDtcbiA1OTE6XHRcbiA1OTI6XHRcdGR0LnNpemUgPSBzcmVncy1cdTAwM2VpZHQubGltaXQ7XG4gNTkzOlx0XHRkdC5hZGRyZXNzID0gc3JlZ3MtXHUwMDNlaWR0LmJhc2U7XG4gNTk0Olx0XHRrdm1feDg2X2NhbGwoc2V0X2lkdCkodmNwdSwgXHUwMDI2ZHQpO1xuIDU5NTpcdFx0ZHQuc2l6ZSA9IHNyZWdzLVx1MDAzZWdkdC5saW1pdDtcbiA1OTY6XHRcdGR0LmFkZHJlc3MgPSBzcmVncy1cdTAwM2VnZHQuYmFzZTtcbiA1OTc6XHRcdGt2bV94ODZfY2FsbChzZXRfZ2R0KSh2Y3B1LCBcdTAwMjZkdCk7XG4gNTk4Olx0XG4gNTk5Olx0XHR2Y3B1LVx1MDAzZWFyY2guY3IyID0gc3JlZ3MtXHUwMDNlY3IyO1xuIDYwMDpcdFx0Km1tdV9yZXNldF9uZWVkZWQgfD0ga3ZtX3JlYWRfY3IzKHZjcHUpICE9IHNyZWdzLVx1MDAzZWNyMztcbiA2MDE6XHRcdHZjcHUtXHUwMDNlYXJjaC5jcjMgPSBzcmVncy1cdTAwM2VjcjM7XG4gNjAyOlx0XHRrdm1fcmVnaXN0ZXJfbWFya19kaXJ0eSh2Y3B1LCBWQ1BVX1JFR19DUjMpO1xuIDYwMzpcdFx0a3ZtX3g4Nl9jYWxsKHBvc3Rfc2V0X2NyMykodmNwdSwgc3JlZ3MtXHUwMDNlY3IzKTtcbiA2MDQ6XHRcbiA2MDU6XHRcdCptbXVfcmVzZXRfbmVlZGVkIHw9IHZjcHUtXHUwMDNlYXJjaC5lZmVyICE9IHNyZWdzLVx1MDAzZWVmZXI7XG4gNjA2Olx0XHRrdm1feDg2X2NhbGwoc2V0X2VmZXIpKHZjcHUsIHNyZWdzLVx1MDAzZWVmZXIpO1xuIDYwNzpcdFxuIDYwODpcdFx0Km1tdV9yZXNldF9uZWVkZWQgfD0ga3ZtX3JlYWRfY3IwKHZjcHUpICE9IHNyZWdzLVx1MDAzZWNyMDtcbiA2MDk6XHRcdGt2bV94ODZfY2FsbChzZXRfY3IwKSh2Y3B1LCBzcmVncy1cdTAwM2VjcjApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjMyCgkJCQkJCQlvdXRwdXQ6IDIzMwoJCQkJCQkJdGhvdWdodHM6IDM2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gU1JFRyBWYWxpZGF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIEtWTSBwZXJzcGVjdGl2ZS4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYF9fc2V0X3NyZWdzX2NvbW1vbmAgZnVuY3Rpb24sIHdoaWNoIGdldHMgYSBgc3RydWN0IGt2bV9zcmVncyAqc3JlZ3NgIGZyb20gYSBgS1ZNX1NFVF9TUkVHU2AgaW9jdGwgY2FsbCDigJMgc3RyYWlnaHQgZnJvbSB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggaXMgYWRkaW5nIHZhbGlkYXRpb24gdG8gZW5zdXJlIHRoZSBgc3JlZ3MtJmd0O2NyOGAgdmFsdWUsIHNwZWNpZmljYWxseSByZXNlcnZlZCBiaXRzLCBpcyBwcm9wZXJseSBjaGVja2VkIHdpdGhpbiBga3ZtX2lzX3ZhbGlkX3NyZWdzKHZjcHUsIHNyZWdzKWAuIEl0IGFsc28gaW50cm9kdWNlcyB0aGUgYGt2bV9pc192YWxpZF9jcjhgIGhlbHBlciBmb3IgdXNlIGluIGBrdm1fc2V0X2NyOGAgYW5kIHVwZGF0ZXMgdGhlIHJlbGV2YW50IHNlbGZ0ZXN0cy4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIHNvIGZhci4KCk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBhcmUgd2Ugb3BlbmluZyB1cCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIHdpdGggdGhpcyBjaGFuZ2U/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuIEZpcnN0LCBpcyB0aGlzIGludHJvZHVjaW5nIG9yIG1vZGlmeWluZyBhbnkga2VybmVsIHN0cnVjdHVyZXMgdGhhdCBhcmUgKnNlbnQqIHRvIHVzZXIgc3BhY2U/IE5vLCBkZWZpbml0ZWx5IG5vdC4gYEtWTV9TRVRfU1JFR1NgIGlzIHRoZSAqdXNlciogc2V0dGluZyByZWdpc3RlcnMgKmluKiB0aGUga2VybmVsLiBObyBuZXcgZGF0YSBpcyBnb2luZyBvdXQuIFNlY29uZCwgaXMgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgKmRlcGVuZHMqIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLiBUaGUgYHNyZWdzYCBzdHJ1Y3R1cmUgaXMgYmVpbmcgcG9wdWxhdGVkIGZyb20gdXNlciBzcGFjZSB2aWEgYGNvcHlfZnJvbV91c2VyYCwgc28gaXTigJlzIG5vdCB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoaXJkLCBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBBZ2Fpbiwgbm8uIEl0JiMzOTtzIGEgc3RydWN0dXJlIGJlaW5nIHBvcHVsYXRlZCwgbm90IGFsbG9jYXRlZC4gRmluYWxseSwgYW55dGhpbmcgd2l0aCBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgdGhhdCAqY291bGQqIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzPyBTdGlsbCBuby4KClNvLCBmcm9tIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUsIHRoaXMgaXMgYSBwdXJlIHZhbGlkYXRpb24gYW5kIGlucHV0IHNhbml0aXphdGlvbiBjaGVjayBmb3IgdGhlIEtWTSB2Q1BVIHJlZ2lzdGVyIHN0YXRlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBDUjggcmVnaXN0ZXImIzM5O3MgcmVzZXJ2ZWQgYml0cy4gQW55IGJ1Z3MgaGVyZSB3b3VsZCBiZSByZWxhdGVkIHRvIGxvZ2ljIGVycm9ycyBvciBhbGxvd2luZyBpbnZhbGlkIHN0YXRlIHRyYW5zaXRpb25zLCBub3QgS01TQU4tZGV0ZWN0YWJsZSBpc3N1ZXMgbGlrZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBhbnkgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLiBJdCYjMzk7cyBhIG1hdHRlciBvZiBlbnN1cmluZyB0aGUgKnZhbGlkaXR5KiBvZiB0aGUgaW5wdXQsIG5vdCB0aGUgKmV4aXN0ZW5jZSogb2YgdGhlIG1lbW9yeS4KClRoZXJlZm9yZSwgYWZ0ZXIgYSB0aG9yb3VnaCByZXZpZXcsIG15IGNvbmNsdXNpb24gaXMgdGhhdCAqKk5lZWRzS01TQU4gaXMgZmFsc2UqKi4KCkkmIzM5O3ZlIGNhcmVmdWxseSBjb25zaWRlcmVkIGFsbCB0aGUgdXN1YWwgcmVxdWlyZW1lbnRzIGFuZCBjb25maXJtZWQgbXkgS01TQU4gcmF0aW9uYWxlLiBJJiMzOTttIHJlYWR5IHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiBmb3IgQ1I4IHJlZ2lzdGVyIHZhbHVlcyBpbiBLVk0gKGBrdm1faXNfdmFsaWRfY3I4YCksIGVuc3VyaW5nIHRoYXQgcmVzZXJ2ZWQgYml0cyAoNjM6NCkgaW4gQ1I4IGNhbm5vdCBiZSBzZXQgdmlhIGBLVk1fU0VUX1NSRUdTYCAoY2hlY2tlZCBpbiBga3ZtX2lzX3ZhbGlkX3NyZWdzYCkgb3IgYGt2bV9zZXRfY3I4YCwgYWxvbmcgd2l0aCBjb3JyZXNwb25kaW5nIHNlbGZ0ZXN0IHVwZGF0ZXMuXG5cbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZSBvbmx5IHBlcmZvcm1zIGJpdHdpc2UgdmFsaWRhdGlvbiBvbiBpbnB1dCB2YWx1ZXMgKGBzcmVncy1cdTAwM2VjcjhgIC8gYGNyOGApIHBhc3NlZCBpbnRvIEtWTSBmcm9tIHVzZXJzcGFjZSBvciBjYWxsZXJzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LCBub3IgZG9lcyBpdCBhbHRlciBhbnkga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcHkgb3BlcmF0aW9ucyAoaW5mby1sZWFrcykgb3Igc3RydWN0dXJlIHBhZGRpbmcuXG4tIEtBU0FOL1N0YW5kYXJkIHRlc3RpbmcgYXBwbGljYWJpbGl0eTogU3RhbmRhcmQgZnVuY3Rpb25hbCB0ZXN0aW5nIGFuZCBLVk0gc2VsZnRlc3RzIGFkZXF1YXRlbHkgdmVyaWZ5IHRoaXMgaW5wdXQgdmFsaWRhdGlvbiBsb2dpYy5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHBvc2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiBmb3IgQ1I4IHJlZ2lzdGVyIHZhbHVlcyBpbiBLVk0gKGBrdm1faXNfdmFsaWRfY3I4YCksIGVuc3VyaW5nIHRoYXQgcmVzZXJ2ZWQgYml0cyAoNjM6NCkgaW4gQ1I4IGNhbm5vdCBiZSBzZXQgdmlhIGBLVk1fU0VUX1NSRUdTYCAoY2hlY2tlZCBpbiBga3ZtX2lzX3ZhbGlkX3NyZWdzYCkgb3IgYGt2bV9zZXRfY3I4YCwgYWxvbmcgd2l0aCBjb3JyZXNwb25kaW5nIHNlbGZ0ZXN0IHVwZGF0ZXMuXG5cbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZSBvbmx5IHBlcmZvcm1zIGJpdHdpc2UgdmFsaWRhdGlvbiBvbiBpbnB1dCB2YWx1ZXMgKGBzcmVncy1cdTAwM2VjcjhgIC8gYGNyOGApIHBhc3NlZCBpbnRvIEtWTSBmcm9tIHVzZXJzcGFjZSBvciBjYWxsZXJzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LCBub3IgZG9lcyBpdCBhbHRlciBhbnkga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcHkgb3BlcmF0aW9ucyAoaW5mby1sZWFrcykgb3Igc3RydWN0dXJlIHBhZGRpbmcuXG4tIEtBU0FOL1N0YW5kYXJkIHRlc3RpbmcgYXBwbGljYWJpbGl0eTogU3RhbmRhcmQgZnVuY3Rpb25hbCB0ZXN0aW5nIGFuZCBLVk0gc2VsZnRlc3RzIGFkZXF1YXRlbHkgdmVyaWZ5IHRoaXMgaW5wdXQgdmFsaWRhdGlvbiBsb2dpYy5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHBvc2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMjA6Mzk6MzcuNDY5OTAwNTU0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3Mzc3MzMzMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fc2V0X2NyOFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3NcIixcbiAgICBcImt2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfc3JlZ3MyXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGlucHV0IHZhbGlkYXRpb24gZm9yIENSOCByZWdpc3RlciB2YWx1ZXMgaW4gS1ZNIChga3ZtX2lzX3ZhbGlkX2NyOGApLCBlbnN1cmluZyB0aGF0IHJlc2VydmVkIGJpdHMgKDYzOjQpIGluIENSOCBjYW5ub3QgYmUgc2V0IHZpYSBgS1ZNX1NFVF9TUkVHU2AgKGNoZWNrZWQgaW4gYGt2bV9pc192YWxpZF9zcmVnc2ApIG9yIGBrdm1fc2V0X2NyOGAsIGFsb25nIHdpdGggY29ycmVzcG9uZGluZyBzZWxmdGVzdCB1cGRhdGVzLlxcblxcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZSBvbmx5IHBlcmZvcm1zIGJpdHdpc2UgdmFsaWRhdGlvbiBvbiBpbnB1dCB2YWx1ZXMgKGBzcmVncy1cXHUwMDNlY3I4YCAvIGBjcjhgKSBwYXNzZWQgaW50byBLVk0gZnJvbSB1c2Vyc3BhY2Ugb3IgY2FsbGVycy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWx0ZXIgYW55IGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMgKGluZm8tbGVha3MpIG9yIHN0cnVjdHVyZSBwYWRkaW5nLlxcbi0gS0FTQU4vU3RhbmRhcmQgdGVzdGluZyBhcHBsaWNhYmlsaXR5OiBTdGFuZGFyZCBmdW5jdGlvbmFsIHRlc3RpbmcgYW5kIEtWTSBzZWxmdGVzdHMgYWRlcXVhdGVseSB2ZXJpZnkgdGhpcyBpbnB1dCB2YWxpZGF0aW9uIGxvZ2ljLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBwb3NlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciBDUjggcmVzZXJ2ZWQgYml0cyBpbiBLVk0gd2hlbiBzZXR0aW5nIHNwZWNpYWwgcmVnaXN0ZXJzIChzcmVncyAvIHNyZWdzMikuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocyBpbiB4ODYgS1ZNIGFjY2Vzc2libGUgdmlhIHVzZXItc3BhY2UgaW9jdGxzIChLVk1fU0VUX1NSRUdTLCBLVk1fU0VUX1NSRUdTMikgYW5kIENSOCBlbXVsYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIwOjM5OjM3LjQ2OTkwNTEwNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1ODUzMTc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM5MmVkNmIwMzBkZGNlNjM0YmFjNGMyMmQwNmY2ZTk4NjNkYzI4NGFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMDozOTozNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcmVncy5jIGIvYXJjaC94ODYva3ZtL3JlZ3MuY1xcbmluZGV4IDhmNjY0Mzg5ODllNDcuLmZhZDMxYjU5YzYyMmYgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3JlZ3MuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9yZWdzLmNcXG5AQCAtNDQwLDkgKzQ0MCwxNCBAQCBpbnQga3ZtX3NldF9jcjQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyNClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3NldF9jcjQpO1xcbiBcXG4rc3RhdGljIGJvb2wga3ZtX2lzX3ZhbGlkX2NyOCh1bnNpZ25lZCBsb25nIGNyOClcXG4re1xcbitcXHRyZXR1cm4gIShjcjggXFx1MDAyNiBDUjhfUkVTRVJWRURfQklUUyk7XFxuK31cXG4rXFxuIGludCBrdm1fc2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I4KVxcbiB7XFxuLVxcdGlmIChjcjggXFx1MDAyNiBDUjhfUkVTRVJWRURfQklUUylcXG4rXFx0aWYgKCFrdm1faXNfdmFsaWRfY3I4KGNyOCkpXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXHRpZiAobGFwaWNfaW5fa2VybmVsKHZjcHUpKVxcbiBcXHRcXHRrdm1fbGFwaWNfc2V0X3Rwcih2Y3B1LCBjcjgpO1xcbkBAIC01NjUsNiArNTcwLDcgQEAgc3RhdGljIGJvb2wga3ZtX2lzX3ZhbGlkX3NyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zcmVncyAqc3JlZ3MpXFxuIFxcbiBcXHRyZXR1cm4ga3ZtX2lzX3ZhbGlkX2NyNCh2Y3B1LCBzcmVncy1cXHUwMDNlY3I0KSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgICAga3ZtX2lzX3ZhbGlkX2NyMCh2Y3B1LCBzcmVncy1cXHUwMDNlY3IwKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAga3ZtX2lzX3ZhbGlkX2NyOChzcmVncy1cXHUwMDNlY3I4KSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgICAga3ZtX3ZhbGlkX2VmZXIodmNwdSwgc3JlZ3MtXFx1MDAzZWVmZXIpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmNcXG5pbmRleCA2MDMyMjZmZmU0Mzc0Li40ZTdjMzUxNzk0MzgzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V0X3NyZWdzX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V0X3NyZWdzX3Rlc3QuY1xcbkBAIC0xMzUsNiArMTM1LDE4IEBAIHN0YXRpYyB2b2lkIHRlc3RfY3JfYml0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBjcjQpXFxuIFxcdC8qIE5XIHdpdGhvdXQgQ0QgaXMgaWxsZWdhbCwgYXMgaXMgUEcgd2l0aG91dCBQRS4gKi9cXG4gXFx0VEVTVF9JTlZBTElEX1NSRUdfQklUKHZjcHUsIGNyMCwgc3JlZ3MsIFg4Nl9DUjBfTlcpO1xcbiBcXHRURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3IwLCBzcmVncywgWDg2X0NSMF9QRyk7XFxuK1xcbitcXHQvKiBDUjggYml0cyAzOjAgYXJlIHdyaXRhYmxlOyBiaXRzIDYzOjQgYXJlIHJlc2VydmVkLiAqL1xcbitcXHR2Y3B1X3NyZWdzX2dldCh2Y3B1LCBcXHUwMDI2c3JlZ3MpO1xcbitcXHRzcmVncy5jcjggPSAweGY7XFxuK1xcdHJjID0gX3ZjcHVfc3JlZ3Nfc2V0KHZjcHUsIFxcdTAwMjZzcmVncyk7XFxuK1xcdFRFU1RfQVNTRVJUKCFyYywgXFxcIkZhaWxlZCB0byBzZXQgdmFsaWQgQ1I4IHZhbHVlIDB4ZlxcXCIpO1xcbitcXG4rXFx0dmNwdV9zcmVnc19nZXQodmNwdSwgXFx1MDAyNnNyZWdzKTtcXG4rXFx0VEVTVF9BU1NFUlRfRVEoc3JlZ3MuY3I4LCAweGYpO1xcbitcXG4rXFx0Zm9yIChpID0gNDsgaSBcXHUwMDNjIDY0OyBpKyspXFxuK1xcdFxcdFRFU1RfSU5WQUxJRF9TUkVHX0JJVCh2Y3B1LCBjcjgsIHNyZWdzLCBCSVRfVUxMKGkpKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgdGVzdF9lZmVyX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZWZlcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjA6Mzk6MzkuMDI5MjAzNTgzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNzExNDA1MjgwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9zZXRfY3I4XCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zcmVnc1wiLFxuICAgIFwia3ZtX3ZjcHVfaW9jdGxfeDg2X3NldF9zcmVnczJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gZm9yIENSOCByZXNlcnZlZCBiaXRzIGluIEtWTSB3aGVuIHNldHRpbmcgc3BlY2lhbCByZWdpc3RlcnMgKHNyZWdzIC8gc3JlZ3MyKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzIGluIHg4NiBLVk0gYWNjZXNzaWJsZSB2aWEgdXNlci1zcGFjZSBpb2N0bHMgKEtWTV9TRVRfU1JFR1MsIEtWTV9TRVRfU1JFR1MyKSBhbmQgQ1I4IGVtdWxhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzOTJlZDZiMDMwZGRjZTYzNGJhYzRjMjJkMDZmNmU5ODYzZGMyODRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMDozOTozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9yZWdzLmMgYi9hcmNoL3g4Ni9rdm0vcmVncy5jXG5pbmRleCA4ZjY2NDM4OTg5ZTQ3Li5mYWQzMWI1OWM2MjJmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3JlZ3MuY1xuKysrIGIvYXJjaC94ODYva3ZtL3JlZ3MuY1xuQEAgLTQ0MCw5ICs0NDAsMTQgQEAgaW50IGt2bV9zZXRfY3I0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjQpXG4gfVxuIEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2V0X2NyNCk7XG4gXG4rc3RhdGljIGJvb2wga3ZtX2lzX3ZhbGlkX2NyOCh1bnNpZ25lZCBsb25nIGNyOClcbit7XG4rXHRyZXR1cm4gIShjcjggXHUwMDI2IENSOF9SRVNFUlZFRF9CSVRTKTtcbit9XG4rXG4gaW50IGt2bV9zZXRfY3I4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjgpXG4ge1xuLVx0aWYgKGNyOCBcdTAwMjYgQ1I4X1JFU0VSVkVEX0JJVFMpXG4rXHRpZiAoIWt2bV9pc192YWxpZF9jcjgoY3I4KSlcbiBcdFx0cmV0dXJuIDE7XG4gXHRpZiAobGFwaWNfaW5fa2VybmVsKHZjcHUpKVxuIFx0XHRrdm1fbGFwaWNfc2V0X3Rwcih2Y3B1LCBjcjgpO1xuQEAgLTU2NSw2ICs1NzAsNyBAQCBzdGF0aWMgYm9vbCBrdm1faXNfdmFsaWRfc3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncylcbiBcbiBcdHJldHVybiBrdm1faXNfdmFsaWRfY3I0KHZjcHUsIHNyZWdzLVx1MDAzZWNyNCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgICAga3ZtX2lzX3ZhbGlkX2NyMCh2Y3B1LCBzcmVncy1cdTAwM2VjcjApIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIGt2bV9pc192YWxpZF9jcjgoc3JlZ3MtXHUwMDNlY3I4KSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICBrdm1fdmFsaWRfZWZlcih2Y3B1LCBzcmVncy1cdTAwM2VlZmVyKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jXG5pbmRleCA2MDMyMjZmZmU0Mzc0Li40ZTdjMzUxNzk0MzgzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmNcbkBAIC0xMzUsNiArMTM1LDE4IEBAIHN0YXRpYyB2b2lkIHRlc3RfY3JfYml0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBjcjQpXG4gXHQvKiBOVyB3aXRob3V0IENEIGlzIGlsbGVnYWwsIGFzIGlzIFBHIHdpdGhvdXQgUEUuICovXG4gXHRURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3IwLCBzcmVncywgWDg2X0NSMF9OVyk7XG4gXHRURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3IwLCBzcmVncywgWDg2X0NSMF9QRyk7XG4rXG4rXHQvKiBDUjggYml0cyAzOjAgYXJlIHdyaXRhYmxlOyBiaXRzIDYzOjQgYXJlIHJlc2VydmVkLiAqL1xuK1x0dmNwdV9zcmVnc19nZXQodmNwdSwgXHUwMDI2c3JlZ3MpO1xuK1x0c3JlZ3MuY3I4ID0gMHhmO1xuK1x0cmMgPSBfdmNwdV9zcmVnc19zZXQodmNwdSwgXHUwMDI2c3JlZ3MpO1xuK1x0VEVTVF9BU1NFUlQoIXJjLCBcIkZhaWxlZCB0byBzZXQgdmFsaWQgQ1I4IHZhbHVlIDB4ZlwiKTtcbitcbitcdHZjcHVfc3JlZ3NfZ2V0KHZjcHUsIFx1MDAyNnNyZWdzKTtcbitcdFRFU1RfQVNTRVJUX0VRKHNyZWdzLmNyOCwgMHhmKTtcbitcbitcdGZvciAoaSA9IDQ7IGkgXHUwMDNjIDY0OyBpKyspXG4rXHRcdFRFU1RfSU5WQUxJRF9TUkVHX0JJVCh2Y3B1LCBjcjgsIHNyZWdzLCBCSVRfVUxMKGkpKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdGVzdF9lZmVyX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZWZlcilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIwOjM5OjM5LjAyOTIwNjA2M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMjM5NDUyMDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGlzIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaXMgZXZlbiAqd29ydGgqIGZ1enppbmcuIFdlIGhhdmUgdHdvIG1haW4gZmlsZXMgaW52b2x2ZWQ6IGBhcmNoL3g4Ni9rdm0vcmVncy5jYCBhbmQgYSBzZWxmLXRlc3QgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V0X3NyZWdzX3Rlc3QuY2AuIFRoZSBjb3JlIGNoYW5nZXMgc2VlbSB0byBiZSBjZW50ZXJlZCBhcm91bmQgQ1I4IHZhbGlkYXRpb24sIHNwZWNpZmljYWxseSB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyBga3ZtX2lzX3ZhbGlkX2NyOGAgZnVuY3Rpb24sIHdoaWNoIGNoZWNrcyBpZiBjZXJ0YWluIGJpdHMgYXJlIHJlc2VydmVkLiBJdCBsb29rcyBsaWtlIGl0J3MgZ3VhcmRpbmcgYWdhaW5zdCBwb3RlbnRpYWxseSB1bnNhZmUgQ1I4IHZhbHVlcyBpbiB0aGUgS1ZNIGNvbnRleHQuXG5cblNwZWNpZmljYWxseSwgYGt2bV9pc192YWxpZF9jcjhgIHNlZW1zIHRvIGNoZWNrIGlmIGBjcjggXHUwMDI2IENSOF9SRVNFUlZFRF9CSVRTYCBpcyBub3QgZXF1YWwgdG8gMC4gSXQncyB1c2VkIGluIGBrdm1fc2V0X2NyOGAgYW5kIGFsc28gY2hlY2tlZCBhcyBwYXJ0IG9mIGBrdm1faXNfdmFsaWRfc3JlZ3NgLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgY2hhbmdlcyB0byBjb250cm9sIHJlZ2lzdGVycyBhcmUgdXN1YWxseSBwcmV0dHkgc2Vuc2l0aXZlLCBzbyB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIGFuIGludmFsaWQgQ1I4IOKAkyBpcyBpdCBqdXN0IGEgVk0gZXhpdCwgYSBjcmFzaCwgb3Igc29tZXRoaW5nIG1vcmUgc3VidGxlIGxpa2UgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5P1xuXG5Ob3csIGxldCdzIGRpZyBpbnRvIGBhcmNoL3g4Ni9rdm0vcmVncy5jYCBhbmQgc2VlIHRoZSBjb250ZXh0IGFyb3VuZCB0aGVzZSBjaGFuZ2VzIHRvIGdldCBhIGJldHRlciBmZWVsIGZvciB0aGUgYXR0YWNrIHN1cmZhY2UuIEZyb20gdGhlcmUsIEknbGwgaWRlbnRpZnkgZm9jdXMgc3ltYm9scy4gSSB3aWxsIGxvb2sgYXQgYGt2bV9zZXRfY3I4YCBhbmQgYGt2bV9pc192YWxpZF9zcmVnc2AuIFxuXG5JJ20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBzZWxmLXRlc3QuIERvZXMgaXQgcHJvdmlkZSB1c2VmdWwgdGVzdCBjYXNlcyB0byBzdGFydCB3aXRoLCBvciBpcyBpdCB0b28gbmFycm93PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNlbGYtdGVzdCB2YWxpZGF0ZXMgdGhlIGNoYW5nZXMgdG8gZW5zdXJlIHRoYXQgaXQgaGFzIGdvb2QgY292ZXJhZ2UgZm9yIHRoZSB1cGRhdGVkIGBzcmVnc2AuXG5cbkJhc2VkIG9uIHdoYXQgSSBmaW5kLCBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgZnV6emluZyBjb25maWd1cmF0aW9ucy4gVGhpcyBtZWFucyBpZGVudGlmeWluZyBhbnkgZGVwZW5kZW5jaWVzLCBlZGdlIGNhc2VzLCBhbmQgcG90ZW50aWFsIHRhcmdldHMgZm9yIGZ1enppbmcuIEknbGwgbmVlZCB0byB0aGluayBhYm91dCBob3cgdG8gbWFuaXB1bGF0ZSB0aGUgaW5wdXRzIHRvIHRyaWdnZXIgdGhlc2UgY2hlY2tzIGFuZCBpZiBJIHNob3VsZCBmb2N1cyBvbiB0aGUgcmVnaXN0ZXIgd3JpdGVzIHRocm91Z2ggdGhlIGlvY3RsIHBhdGhzIG9yIGVtdWxhdGlvbiBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU4NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIwOjM5OjUwLjI2ODY2MTU0MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vcmVncy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQzNSxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQzNTpcXHRcXHRrdm1feDg2X2NhbGwoc2V0X2NyNCkodmNwdSwgY3I0KTtcXG4gNDM2OlxcdFxcbiA0Mzc6XFx0XFx0a3ZtX3Bvc3Rfc2V0X2NyNCh2Y3B1LCBvbGRfY3I0LCBjcjQpO1xcbiA0Mzg6XFx0XFxuIDQzOTpcXHRcXHRyZXR1cm4gMDtcXG4gNDQwOlxcdH1cXG4gNDQxOlxcdEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2V0X2NyNCk7XFxuIDQ0MjpcXHRcXG4gNDQzOlxcdHN0YXRpYyBib29sIGt2bV9pc192YWxpZF9jcjgodW5zaWduZWQgbG9uZyBjcjgpXFxuIDQ0NDpcXHR7XFxuIDQ0NTpcXHRcXHRyZXR1cm4gIShjcjggXFx1MDAyNiBDUjhfUkVTRVJWRURfQklUUyk7XFxuIDQ0NjpcXHR9XFxuIDQ0NzpcXHRcXG4gNDQ4OlxcdGludCBrdm1fc2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I4KVxcbiA0NDk6XFx0e1xcbiA0NTA6XFx0XFx0aWYgKCFrdm1faXNfdmFsaWRfY3I4KGNyOCkpXFxuIDQ1MTpcXHRcXHRcXHRyZXR1cm4gMTtcXG4gNDUyOlxcdFxcdGlmIChsYXBpY19pbl9rZXJuZWwodmNwdSkpXFxuIDQ1MzpcXHRcXHRcXHRrdm1fbGFwaWNfc2V0X3Rwcih2Y3B1LCBjcjgpO1xcbiA0NTQ6XFx0XFx0ZWxzZVxcbiA0NTU6XFx0XFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5jcjggPSBjcjg7XFxuIDQ1NjpcXHRcXHRyZXR1cm4gMDtcXG4gNDU3OlxcdH1cXG4gNDU4OlxcdEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2V0X2NyOCk7XFxuIDQ1OTpcXHRcXG4gNDYwOlxcdHVuc2lnbmVkIGxvbmcga3ZtX2dldF9jcjgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiA0NjE6XFx0e1xcbiA0NjI6XFx0XFx0aWYgKGxhcGljX2luX2tlcm5lbCh2Y3B1KSlcXG4gNDYzOlxcdFxcdFxcdHJldHVybiBrdm1fbGFwaWNfZ2V0X2NyOCh2Y3B1KTtcXG4gNDY0OlxcdFxcdGVsc2VcXG4gNDY1OlxcdFxcdFxcdHJldHVybiB2Y3B1LVxcdTAwM2VhcmNoLmNyODtcXG4gNDY2OlxcdH1cXG4gNDY3OlxcdEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZ2V0X2NyOCk7XFxuIDQ2ODpcXHRcXG4gNDY5OlxcdHN0YXRpYyB2b2lkIF9fZ2V0X3NyZWdzX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzKVxcbiA0NzA6XFx0e1xcbiA0NzE6XFx0XFx0c3RydWN0IGRlc2NfcHRyIGR0O1xcbiA0NzI6XFx0XFxuIDQ3MzpcXHRcXHRpZiAodmNwdS1cXHUwMDNlYXJjaC5ndWVzdF9zdGF0ZV9wcm90ZWN0ZWQpXFxuIDQ3NDpcXHRcXHRcXHRnb3RvIHNraXBfcHJvdGVjdGVkX3JlZ3M7XFxuIDQ3NTpcXHRcXG4gNDc2OlxcdFxcdGt2bV9oYW5kbGVfZXhjZXB0aW9uX3BheWxvYWRfcXVpcmsodmNwdSk7XFxuIDQ3NzpcXHRcXG4gNDc4OlxcdFxcdGt2bV9nZXRfc2VnbWVudCh2Y3B1LCBcXHUwMDI2c3JlZ3MtXFx1MDAzZWNzLCBWQ1BVX1NSRUdfQ1MpO1xcbiA0Nzk6XFx0XFx0a3ZtX2dldF9zZWdtZW50KHZjcHUsIFxcdTAwMjZzcmVncy1cXHUwMDNlZHMsIFZDUFVfU1JFR19EUyk7XFxuIDQ4MDpcXHRcXHRrdm1fZ2V0X3NlZ21lbnQodmNwdSwgXFx1MDAyNnNyZWdzLVxcdTAwM2VlcywgVkNQVV9TUkVHX0VTKTtcXG4gNDgxOlxcdFxcdGt2bV9nZXRfc2VnbWVudCh2Y3B1LCBcXHUwMDI2c3JlZ3MtXFx1MDAzZWZzLCBWQ1BVX1NSRUdfRlMpO1xcbiA0ODI6XFx0XFx0a3ZtX2dldF9zZWdtZW50KHZjcHUsIFxcdTAwMjZzcmVncy1cXHUwMDNlZ3MsIFZDUFVfU1JFR19HUyk7XFxuIDQ4MzpcXHRcXHRrdm1fZ2V0X3NlZ21lbnQodmNwdSwgXFx1MDAyNnNyZWdzLVxcdTAwM2VzcywgVkNQVV9TUkVHX1NTKTtcXG4gNDg0OlxcdFxcbiA0ODU6XFx0XFx0a3ZtX2dldF9zZWdtZW50KHZjcHUsIFxcdTAwMjZzcmVncy1cXHUwMDNldHIsIFZDUFVfU1JFR19UUik7XFxuIDQ4NjpcXHRcXHRrdm1fZ2V0X3NlZ21lbnQodmNwdSwgXFx1MDAyNnNyZWdzLVxcdTAwM2VsZHQsIFZDUFVfU1JFR19MRFRSKTtcXG4gNDg3OlxcdFxcbiA0ODg6XFx0XFx0a3ZtX3g4Nl9jYWxsKGdldF9pZHQpKHZjcHUsIFxcdTAwMjZkdCk7XFxuIDQ4OTpcXHRcXHRzcmVncy1cXHUwMDNlaWR0LmxpbWl0ID0gZHQuc2l6ZTtcXG4gNDkwOlxcdFxcdHNyZWdzLVxcdTAwM2VpZHQuYmFzZSA9IGR0LmFkZHJlc3M7XFxuIDQ5MTpcXHRcXHRrdm1feDg2X2NhbGwoZ2V0X2dkdCkodmNwdSwgXFx1MDAyNmR0KTtcXG4gNDkyOlxcdFxcdHNyZWdzLVxcdTAwM2VnZHQubGltaXQgPSBkdC5zaXplO1xcbiA0OTM6XFx0XFx0c3JlZ3MtXFx1MDAzZWdkdC5iYXNlID0gZHQuYWRkcmVzcztcXG4gNDk0OlxcdFxcbiA0OTU6XFx0XFx0c3JlZ3MtXFx1MDAzZWNyMiA9IHZjcHUtXFx1MDAzZWFyY2guY3IyO1xcbiA0OTY6XFx0XFx0c3JlZ3MtXFx1MDAzZWNyMyA9IGt2bV9yZWFkX2NyMyh2Y3B1KTtcXG4gNDk3OlxcdFxcbiA0OTg6XFx0c2tpcF9wcm90ZWN0ZWRfcmVnczpcXG4gNDk5OlxcdFxcdHNyZWdzLVxcdTAwM2VjcjAgPSBrdm1fcmVhZF9jcjAodmNwdSk7XFxuIDUwMDpcXHRcXHRzcmVncy1cXHUwMDNlY3I0ID0ga3ZtX3JlYWRfY3I0KHZjcHUpO1xcbiA1MDE6XFx0XFx0c3JlZ3MtXFx1MDAzZWNyOCA9IGt2bV9nZXRfY3I4KHZjcHUpO1xcbiA1MDI6XFx0XFx0c3JlZ3MtXFx1MDAzZWVmZXIgPSB2Y3B1LVxcdTAwM2VhcmNoLmVmZXI7XFxuIDUwMzpcXHRcXHRzcmVncy1cXHUwMDNlYXBpY19iYXNlID0gdmNwdS1cXHUwMDNlYXJjaC5hcGljX2Jhc2U7XFxuIDUwNDpcXHR9XFxuIDUwNTpcXHRcXG4gNTA2OlxcdHN0YXRpYyB2b2lkIF9fZ2V0X3NyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zcmVncyAqc3JlZ3MpXFxuIDUwNzpcXHR7XFxuIDUwODpcXHRcXHRfX2dldF9zcmVnc19jb21tb24odmNwdSwgc3JlZ3MpO1xcbiA1MDk6XFx0XFxuIDUxMDpcXHRcXHRpZiAodmNwdS1cXHUwMDNlYXJjaC5ndWVzdF9zdGF0ZV9wcm90ZWN0ZWQpXFxuIDUxMTpcXHRcXHRcXHRyZXR1cm47XFxuIDUxMjpcXHRcXG4gNTEzOlxcdFxcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLmludGVycnVwdC5pbmplY3RlZCBcXHUwMDI2XFx1MDAyNiAhdmNwdS1cXHUwMDNlYXJjaC5pbnRlcnJ1cHQuc29mdClcXG4gNTE0OlxcdFxcdFxcdHNldF9iaXQodmNwdS1cXHUwMDNlYXJjaC5pbnRlcnJ1cHQubnIsXFxuIDUxNTpcXHRcXHRcXHRcXHQodW5zaWduZWQgbG9uZyAqKXNyZWdzLVxcdTAwM2VpbnRlcnJ1cHRfYml0bWFwKTtcXG4gNTE2OlxcdH1cXG4gNTE3OlxcdFxcbiA1MTg6XFx0aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X3NyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gNTE5OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGt2bV9zcmVncyAqc3JlZ3MpXFxuIDUyMDpcXHR7XFxuIDUyMTpcXHRcXHRpZiAodmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmhhc19wcm90ZWN0ZWRfc3RhdGUgXFx1MDAyNlxcdTAwMjZcXG4gNTIyOlxcdFxcdCAgICB2Y3B1LVxcdTAwM2VhcmNoLmd1ZXN0X3N0YXRlX3Byb3RlY3RlZClcXG4gNTIzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1MjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIwOjM5OjUwLjI2ODc3MjA2MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMDYwMDY5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIGBrdm1faXNfdmFsaWRfc3JlZ3NgIFVzYWdlKipcblxuQWxyaWdodCwgc28gSSd2ZSBzcG90dGVkIGBrdm1faXNfdmFsaWRfc3JlZ3NgIGluIHRoZSBjb2RlLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIFdoZXJlIGVsc2UgaXMgdGhpcyBmdW5jdGlvbiBiZWluZyBjYWxsZWQgd2l0aGluIGBhcmNoL3g4Ni9rdm0vcmVncy5jYD8gSXQncyB0aW1lIHRvIHRyYWNlIGl0cyB1c2FnZS4gSSdsbCBuZWVkIHRvIHNlZSB0aGUgc3Vycm91bmRpbmcgY29kZSBibG9ja3MuIEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCByZXZlYWwgdGhlIGFzc3VtcHRpb25zLCB0aGUgcHJlY29uZGl0aW9ucyBiZWluZyBjaGVja2VkLCBhbmQgaG93IHRoZSBmdW5jdGlvbidzIHJldHVybiB2YWx1ZSBpcyB1bHRpbWF0ZWx5IHV0aWxpemVkLiBUaGlzIHdpbGwgcGFpbnQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24gdGhlIGZ1bmN0aW9uIGhlbHBzIHRvIGRlZmVuZC4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGlmIGFueSBzZWN1cml0eSwgcGVyZm9ybWFuY2UsIG9yIGNvcnJlY3RuZXNzIGlzc3VlcyBtaWdodCBiZSBsdXJraW5nLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBzZW5zaXRpdml0eSBvZiBTUkVHIGhhbmRsaW5nIGluIEtWTS4gTGV0J3Mgc2VlIHdoYXQgdGhlIHJlc3Qgb2YgdGhlIGZpbGUgaGFzIHRvIHNheS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg3NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjA6Mzk6NTIuMjc0NzgyNTA4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ3OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3JlZ3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NjAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NjA6XFx0XFx0XFx0aWYgKCFrdm1fdmNwdV9pc19sZWdhbF9jcjModmNwdSwgc3JlZ3MtXFx1MDAzZWNyMykpXFxuIDU2MTpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDU2MjpcXHRcXHR9IGVsc2Uge1xcbiA1NjM6XFx0XFx0XFx0LypcXG4gNTY0OlxcdFxcdFxcdCAqIE5vdCBpbiA2NC1iaXQgbW9kZTogRUZFUi5MTUEgaXMgY2xlYXIgYW5kIHRoZSBjb2RlXFxuIDU2NTpcXHRcXHRcXHQgKiBzZWdtZW50IGNhbm5vdCBiZSA2NC1iaXQuXFxuIDU2NjpcXHRcXHRcXHQgKi9cXG4gNTY3OlxcdFxcdFxcdGlmIChzcmVncy1cXHUwMDNlZWZlciBcXHUwMDI2IEVGRVJfTE1BIHx8IHNyZWdzLVxcdTAwM2Vjcy5sKVxcbiA1Njg6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA1Njk6XFx0XFx0fVxcbiA1NzA6XFx0XFxuIDU3MTpcXHRcXHRyZXR1cm4ga3ZtX2lzX3ZhbGlkX2NyNCh2Y3B1LCBzcmVncy1cXHUwMDNlY3I0KSBcXHUwMDI2XFx1MDAyNlxcbiA1NzI6XFx0XFx0ICAgICAgIGt2bV9pc192YWxpZF9jcjAodmNwdSwgc3JlZ3MtXFx1MDAzZWNyMCkgXFx1MDAyNlxcdTAwMjZcXG4gNTczOlxcdFxcdCAgICAgICBrdm1faXNfdmFsaWRfY3I4KHNyZWdzLVxcdTAwM2VjcjgpIFxcdTAwMjZcXHUwMDI2XFxuIDU3NDpcXHRcXHQgICAgICAga3ZtX3ZhbGlkX2VmZXIodmNwdSwgc3JlZ3MtXFx1MDAzZWVmZXIpO1xcbiA1NzU6XFx0fVxcbiA1NzY6XFx0XFxuIDU3NzpcXHRzdGF0aWMgaW50IF9fc2V0X3NyZWdzX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzLFxcbiA1Nzg6XFx0XFx0XFx0XFx0ICAgICAgaW50ICptbXVfcmVzZXRfbmVlZGVkLCBib29sIHVwZGF0ZV9wZHB0cnMpXFxuIDU3OTpcXHR7XFxuIDU4MDpcXHRcXHRpbnQgaWR4O1xcbiA1ODE6XFx0XFx0c3RydWN0IGRlc2NfcHRyIGR0O1xcbiA1ODI6XFx0XFxuIDU4MzpcXHRcXHRpZiAoIWt2bV9pc192YWxpZF9zcmVncyh2Y3B1LCBzcmVncykpXFxuIDU4NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTg1OlxcdFxcbiA1ODY6XFx0XFx0aWYgKGt2bV9hcGljX3NldF9iYXNlKHZjcHUsIHNyZWdzLVxcdTAwM2VhcGljX2Jhc2UsIHRydWUpKVxcbiA1ODc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU4ODpcXHRcXG4gNTg5OlxcdFxcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLmd1ZXN0X3N0YXRlX3Byb3RlY3RlZClcXG4gNTkwOlxcdFxcdFxcdHJldHVybiAwO1xcbiA1OTE6XFx0XFxuIDU5MjpcXHRcXHRkdC5zaXplID0gc3JlZ3MtXFx1MDAzZWlkdC5saW1pdDtcXG4gNTkzOlxcdFxcdGR0LmFkZHJlc3MgPSBzcmVncy1cXHUwMDNlaWR0LmJhc2U7XFxuIDU5NDpcXHRcXHRrdm1feDg2X2NhbGwoc2V0X2lkdCkodmNwdSwgXFx1MDAyNmR0KTtcXG4gNTk1OlxcdFxcdGR0LnNpemUgPSBzcmVncy1cXHUwMDNlZ2R0LmxpbWl0O1xcbiA1OTY6XFx0XFx0ZHQuYWRkcmVzcyA9IHNyZWdzLVxcdTAwM2VnZHQuYmFzZTtcXG4gNTk3OlxcdFxcdGt2bV94ODZfY2FsbChzZXRfZ2R0KSh2Y3B1LCBcXHUwMDI2ZHQpO1xcbiA1OTg6XFx0XFxuIDU5OTpcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmNyMiA9IHNyZWdzLVxcdTAwM2VjcjI7XFxuIDYwMDpcXHRcXHQqbW11X3Jlc2V0X25lZWRlZCB8PSBrdm1fcmVhZF9jcjModmNwdSkgIT0gc3JlZ3MtXFx1MDAzZWNyMztcXG4gNjAxOlxcdFxcdHZjcHUtXFx1MDAzZWFyY2guY3IzID0gc3JlZ3MtXFx1MDAzZWNyMztcXG4gNjAyOlxcdFxcdGt2bV9yZWdpc3Rlcl9tYXJrX2RpcnR5KHZjcHUsIFZDUFVfUkVHX0NSMyk7XFxuIDYwMzpcXHRcXHRrdm1feDg2X2NhbGwocG9zdF9zZXRfY3IzKSh2Y3B1LCBzcmVncy1cXHUwMDNlY3IzKTtcXG4gNjA0OlxcdFxcbiA2MDU6XFx0XFx0Km1tdV9yZXNldF9uZWVkZWQgfD0gdmNwdS1cXHUwMDNlYXJjaC5lZmVyICE9IHNyZWdzLVxcdTAwM2VlZmVyO1xcbiA2MDY6XFx0XFx0a3ZtX3g4Nl9jYWxsKHNldF9lZmVyKSh2Y3B1LCBzcmVncy1cXHUwMDNlZWZlcik7XFxuIDYwNzpcXHRcXG4gNjA4OlxcdFxcdCptbXVfcmVzZXRfbmVlZGVkIHw9IGt2bV9yZWFkX2NyMCh2Y3B1KSAhPSBzcmVncy1cXHUwMDNlY3IwO1xcbiA2MDk6XFx0XFx0a3ZtX3g4Nl9jYWxsKHNldF9jcjApKHZjcHUsIHNyZWdzLVxcdTAwM2VjcjApO1xcbiA2MTA6XFx0XFxuIDYxMTpcXHRcXHQqbW11X3Jlc2V0X25lZWRlZCB8PSBrdm1fcmVhZF9jcjQodmNwdSkgIT0gc3JlZ3MtXFx1MDAzZWNyNDtcXG4gNjEyOlxcdFxcdGt2bV94ODZfY2FsbChzZXRfY3I0KSh2Y3B1LCBzcmVncy1cXHUwMDNlY3I0KTtcXG4gNjEzOlxcdFxcbiA2MTQ6XFx0XFx0aWYgKHVwZGF0ZV9wZHB0cnMpIHtcXG4gNjE1OlxcdFxcdFxcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXNyY3UpO1xcbiA2MTY6XFx0XFx0XFx0aWYgKGlzX3BhZV9wYWdpbmcodmNwdSkpIHtcXG4gNjE3OlxcdFxcdFxcdFxcdGxvYWRfcGRwdHJzKHZjcHUsIGt2bV9yZWFkX2NyMyh2Y3B1KSk7XFxuIDYxODpcXHRcXHRcXHRcXHQqbW11X3Jlc2V0X25lZWRlZCA9IDE7XFxuIDYxOTpcXHRcXHRcXHR9XFxuIDYyMDpcXHRcXHRcXHRzcmN1X3JlYWRfdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXNyY3UsIGlkeCk7XFxuIDYyMTpcXHRcXHR9XFxuIDYyMjpcXHRcXG4gNjIzOlxcdFxcdGt2bV9zZXRfc2VnbWVudCh2Y3B1LCBcXHUwMDI2c3JlZ3MtXFx1MDAzZWNzLCBWQ1BVX1NSRUdfQ1MpO1xcbiA2MjQ6XFx0XFx0a3ZtX3NldF9zZWdtZW50KHZjcHUsIFxcdTAwMjZzcmVncy1cXHUwMDNlZHMsIFZDUFVfU1JFR19EUyk7XFxuIDYyNTpcXHRcXHRrdm1fc2V0X3NlZ21lbnQodmNwdSwgXFx1MDAyNnNyZWdzLVxcdTAwM2VlcywgVkNQVV9TUkVHX0VTKTtcXG4gNjI2OlxcdFxcdGt2bV9zZXRfc2VnbWVudCh2Y3B1LCBcXHUwMDI2c3JlZ3MtXFx1MDAzZWZzLCBWQ1BVX1NSRUdfRlMpO1xcbiA2Mjc6XFx0XFx0a3ZtX3NldF9zZWdtZW50KHZjcHUsIFxcdTAwMjZzcmVncy1cXHUwMDNlZ3MsIFZDUFVfU1JFR19HUyk7XFxuIDYyODpcXHRcXHRrdm1fc2V0X3NlZ21lbnQodmNwdSwgXFx1MDAyNnNyZWdzLVxcdTAwM2VzcywgVkNQVV9TUkVHX1NTKTtcXG4gNjI5OlxcdFxcbiA2MzA6XFx0XFx0a3ZtX3NldF9zZWdtZW50KHZjcHUsIFxcdTAwMjZzcmVncy1cXHUwMDNldHIsIFZDUFVfU1JFR19UUik7XFxuIDYzMTpcXHRcXHRrdm1fc2V0X3NlZ21lbnQodmNwdSwgXFx1MDAyNnNyZWdzLVxcdTAwM2VsZHQsIFZDUFVfU1JFR19MRFRSKTtcXG4gNjMyOlxcdFxcbiA2MzM6XFx0XFx0a3ZtX3NldF9jcjgodmNwdSwgc3JlZ3MtXFx1MDAzZWNyOCk7XFxuIDYzNDpcXHRcXG4gNjM1OlxcdFxcdC8qIE9sZGVyIHVzZXJzcGFjZSB3b24ndCB1bmhhbHQgdGhlIHZjcHUgb24gcmVzZXQuICovXFxuIDYzNjpcXHRcXHRpZiAoa3ZtX3ZjcHVfaXNfYnNwKHZjcHUpIFxcdTAwMjZcXHUwMDI2IGt2bV9yaXBfcmVhZCh2Y3B1KSA9PSAweGZmZjAgXFx1MDAyNlxcdTAwMjZcXG4gNjM3OlxcdFxcdCAgICBzcmVncy1cXHUwMDNlY3Muc2VsZWN0b3IgPT0gMHhmMDAwIFxcdTAwMjZcXHUwMDI2IHNyZWdzLVxcdTAwM2Vjcy5iYXNlID09IDB4ZmZmZjAwMDAgXFx1MDAyNlxcdTAwMjZcXG4gNjM4OlxcdFxcdCAgICAhaXNfcHJvdG1vZGUodmNwdSkpXFxuIDYzOTpcXHRcXHRcXHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9SVU5OQUJMRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIwOjM5OjUyLjI3NDg4NDUwOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1ODcyODI5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB4ODYgS1ZNIFNlZ21lbnQgUmVnaXN0ZXIgU2V0dGluZyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gYF9fc2V0X3NyZWdzX2NvbW1vbmAuIEkga25vdyBpdCdzIGEga2V5IGZ1bmN0aW9uIGZvciBzZXR0aW5nIHNlZ21lbnQgcmVnaXN0ZXJzIHdpdGhpbiB0aGUgS1ZNIHg4NiB2aXJ0dWFsaXphdGlvbiBjb250ZXh0LCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgaGllcmFyY2h5LiBTbywgZmlyc3QgdGhpbmdzIGZpcnN0OiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGVudHJ5IHBvaW50cy4gSXQgbG9va3MgbGlrZSBgX19zZXRfc3JlZ3NfY29tbW9uYCBnZXRzIGNhbGxlZCBlaXRoZXIgZGlyZWN0bHkgYnkgYF9fc2V0X3NyZWdzYCwgb3IgYnkgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzYCBvciBga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3MyYC4gVGhhdCdzIHRoZSBjb3JlIG9mIGhvdyB0aGUgcmVnaXN0ZXIgdXBkYXRlcyBnZXQgaW5pdGlhdGVkLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byBwZXJmb3JtIHNvbWUgYnJvYWRlciBhbmFseXNpcy4gSSBuZWVkIHRvIHdpZGVuIHRoZSBzY29wZSBhbmQgY2FyZWZ1bGx5IGNoZWNrIGFueSBvdGhlciBmdW5jdGlvbnMsIGluY2x1ZGluZyBgX19zZXRfc3JlZ3NfY29tbW9uYCwgZGVmaW5lZCB3aXRoaW4gYGFyY2gveDg2L2t2bS9yZWdzLmNgLiBVbmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIGlzIGNydWNpYWwgZm9yIGFueSBkZWVwZXIgd29yayBJIGRvIGluIHRoaXMgYXJlYS4gSXQncyBhYm91dCBidWlsZGluZyBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHJlZ2lzdGVyIHNldHRpbmcgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc1OSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjA6Mzk6NTUuODYyMTcwMDVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vcmVncy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY0MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY0MDpcXHRcXG4gNjQxOlxcdFxcdHJldHVybiAwO1xcbiA2NDI6XFx0fVxcbiA2NDM6XFx0XFxuIDY0NDpcXHRzdGF0aWMgaW50IF9fc2V0X3NyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zcmVncyAqc3JlZ3MpXFxuIDY0NTpcXHR7XFxuIDY0NjpcXHRcXHRpbnQgcGVuZGluZ192ZWMsIG1heF9iaXRzO1xcbiA2NDc6XFx0XFx0aW50IG1tdV9yZXNldF9uZWVkZWQgPSAwO1xcbiA2NDg6XFx0XFx0aW50IHJldCA9IF9fc2V0X3NyZWdzX2NvbW1vbih2Y3B1LCBzcmVncywgXFx1MDAyNm1tdV9yZXNldF9uZWVkZWQsIHRydWUpO1xcbiA2NDk6XFx0XFxuIDY1MDpcXHRcXHRpZiAocmV0KVxcbiA2NTE6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNjUyOlxcdFxcbiA2NTM6XFx0XFx0aWYgKG1tdV9yZXNldF9uZWVkZWQpIHtcXG4gNjU0OlxcdFxcdFxcdGt2bV9tbXVfcmVzZXRfY29udGV4dCh2Y3B1KTtcXG4gNjU1OlxcdFxcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0hfR1VFU1QsIHZjcHUpO1xcbiA2NTY6XFx0XFx0fVxcbiA2NTc6XFx0XFxuIDY1ODpcXHRcXHRtYXhfYml0cyA9IEtWTV9OUl9JTlRFUlJVUFRTO1xcbiA2NTk6XFx0XFx0cGVuZGluZ192ZWMgPSBmaW5kX2ZpcnN0X2JpdChcXG4gNjYwOlxcdFxcdFxcdChjb25zdCB1bnNpZ25lZCBsb25nICopc3JlZ3MtXFx1MDAzZWludGVycnVwdF9iaXRtYXAsIG1heF9iaXRzKTtcXG4gNjYxOlxcdFxcbiA2NjI6XFx0XFx0aWYgKHBlbmRpbmdfdmVjIFxcdTAwM2MgbWF4X2JpdHMpIHtcXG4gNjYzOlxcdFxcdFxcdGt2bV9xdWV1ZV9pbnRlcnJ1cHQodmNwdSwgcGVuZGluZ192ZWMsIGZhbHNlKTtcXG4gNjY0OlxcdFxcdFxcdHByX2RlYnVnKFxcXCJTZXQgYmFjayBwZW5kaW5nIGlycSAlZFxcXFxuXFxcIiwgcGVuZGluZ192ZWMpO1xcbiA2NjU6XFx0XFx0XFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX0VWRU5ULCB2Y3B1KTtcXG4gNjY2OlxcdFxcdH1cXG4gNjY3OlxcdFxcdHJldHVybiAwO1xcbiA2Njg6XFx0fVxcbiA2Njk6XFx0XFxuIDY3MDpcXHRpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiA2NzE6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncylcXG4gNjcyOlxcdHtcXG4gNjczOlxcdFxcdGludCByZXQ7XFxuIDY3NDpcXHRcXG4gNjc1OlxcdFxcdGlmICh2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guaGFzX3Byb3RlY3RlZF9zdGF0ZSBcXHUwMDI2XFx1MDAyNlxcbiA2NzY6XFx0XFx0ICAgIHZjcHUtXFx1MDAzZWFyY2guZ3Vlc3Rfc3RhdGVfcHJvdGVjdGVkKVxcbiA2Nzc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDY3ODpcXHRcXG4gNjc5OlxcdFxcdHZjcHVfbG9hZCh2Y3B1KTtcXG4gNjgwOlxcdFxcdHJldCA9IF9fc2V0X3NyZWdzKHZjcHUsIHNyZWdzKTtcXG4gNjgxOlxcdFxcdHZjcHVfcHV0KHZjcHUpO1xcbiA2ODI6XFx0XFx0cmV0dXJuIHJldDtcXG4gNjgzOlxcdH1cXG4gNjg0OlxcdFxcbiA2ODU6XFx0aW50IGt2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfc3JlZ3MyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gNjg2OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGt2bV9zcmVnczIgKnNyZWdzMilcXG4gNjg3OlxcdHtcXG4gNjg4OlxcdFxcdGludCBtbXVfcmVzZXRfbmVlZGVkID0gMDtcXG4gNjg5OlxcdFxcdGJvb2wgdmFsaWRfcGRwdHJzID0gc3JlZ3MyLVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9TUkVHUzJfRkxBR1NfUERQVFJTX1ZBTElEO1xcbiA2OTA6XFx0XFx0Ym9vbCBwYWUgPSAoc3JlZ3MyLVxcdTAwM2VjcjAgXFx1MDAyNiBYODZfQ1IwX1BHKSBcXHUwMDI2XFx1MDAyNiAoc3JlZ3MyLVxcdTAwM2VjcjQgXFx1MDAyNiBYODZfQ1I0X1BBRSkgXFx1MDAyNlxcdTAwMjZcXG4gNjkxOlxcdFxcdFxcdCEoc3JlZ3MyLVxcdTAwM2VlZmVyIFxcdTAwMjYgRUZFUl9MTUEpO1xcbiA2OTI6XFx0XFx0aW50IGksIHJldDtcXG4gNjkzOlxcdFxcbiA2OTQ6XFx0XFx0aWYgKHNyZWdzMi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB+S1ZNX1NSRUdTMl9GTEFHU19QRFBUUlNfVkFMSUQpXFxuIDY5NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjk2OlxcdFxcbiA2OTc6XFx0XFx0aWYgKHZhbGlkX3BkcHRycyBcXHUwMDI2XFx1MDAyNiAoIXBhZSB8fCB2Y3B1LVxcdTAwM2VhcmNoLmd1ZXN0X3N0YXRlX3Byb3RlY3RlZCkpXFxuIDY5ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMDozOTo1NS44NjIyNjE3NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1MDY4NjgxNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0geDg2IFJlZ2lzdGVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGFyY2gveDg2L2t2bS9yZWdzLmNgLCB3aGljaCBpcyB0aGUga2V5IGZpbGUgZm9yIHg4NiByZWdpc3RlciBoYW5kbGluZyB3aXRoaW4gS1ZNLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHJlZ2lzdGVyIG1hbmlwdWxhdGlvbiBpcyBjaGFuZ2luZy5cblxuTG9va2luZyBhdCB0aGUgZnVuY3Rpb24gY2hhbmdlcywgd2UgaGF2ZTpcblxuKiAgIGBrdm1faXNfdmFsaWRfY3I4YCAoc3RhdGljKTogQSBzdGF0aWMgZnVuY3Rpb24sIGxpa2VseSBhbiBpbnRlcm5hbCBoZWxwZXIgdG8gdmFsaWRhdGUgdGhlIENSOCByZWdpc3Rlci4gVGhlIFwic3RhdGljXCIgYXNwZWN0IG1lYW5zIGl0J3MgbGltaXRlZCBpbiBzY29wZSBhbmQgaXNuJ3QgbWVhbnQgdG8gYmUgdXNlZCBvdXRzaWRlIHRoZSBmaWxlLiBUaGF0IHN1Z2dlc3RzIHRoaXMgaXMgYWJvdXQgaW50ZXJuYWwgY29uc2lzdGVuY3kgYW5kIG5vdCBhbiBleHBvc2VkIGludGVyZmFjZSBjaGFuZ2UuXG4qICAgYGt2bV9zZXRfY3I4YDogVGhpcyBvbmUncyBpbXBvcnRhbnQuIEl0IGltcGxpZXMgdGhhdCB0aGVyZSdzIGxvZ2ljIGJlaW5nIGFsdGVyZWQgZm9yIHdyaXRpbmcgdG8gdGhlIENSOCByZWdpc3Rlci4gQ1I4IGlzIHRoZSBUYXNrIFByaW9yaXR5IFJlZ2lzdGVyIChUUFIpLCBhbmQgaXQgaGFzIGEgZGlyZWN0IGltcGFjdCBvbiBpbnRlcnJ1cHQgaGFuZGxpbmcgYW5kIHByaW9yaXRpemF0aW9uLiBUaGlzIHBhcnQgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgb24gdGFzayBtYW5hZ2VtZW50IG9yIHZpcnR1YWxpemF0aW9uLlxuKiAgIGBrdm1faXNfdmFsaWRfc3JlZ3NgIChzdGF0aWMsIGNhbGxlZCBpbiBgX19zZXRfc3JlZ3NfY29tbW9uYCk6IEFub3RoZXIgaW50ZXJuYWwgdmFsaWRhdGlvbiBmdW5jdGlvbiwgdGhpcyB0aW1lIGZvciBzZWdtZW50IHJlZ2lzdGVycy4gYF9fc2V0X3NyZWdzX2NvbW1vbmAgaXMgdGhlIGtleSB0aG91Z2guIFNldHRpbmcgc2VnbWVudCByZWdpc3RlcnMgaXMgZnVuZGFtZW50YWwgdG8gdGhlIGFyY2hpdGVjdHVyZS5cblxuU2luY2UgYGt2bV9zZXRfY3I4YCBpcyBhIGZ1bmN0aW9uIHdpdGggcG90ZW50aWFsIGZvciBicm9hZCBpbXBhY3QsIEkgbmVlZCB0byBrbm93IHdoZXJlIGl0J3MgYmVpbmcgKmNhbGxlZCogZnJvbSwgYW5kIGhvdyB0aGUgY2hhbmdlcyB0byBpdCBoYXZlIGNoYW5nZWQgdGhlIGNvZGUuIEkgbmVlZCB0byBncmVwIGZvciBga3ZtX3NldF9jcjhgIGluIHRoZSBzb3VyY2UgdHJlZSB0byBpZGVudGlmeSB3aGVyZSBpdCdzIGJlaW5nIHVzZWQuIFRoYXQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgdGhlIGNoYW5nZSBhbmQgaWYgdGhlcmUgYXJlIGFueSBkb3duc3RyZWFtIGltcGxpY2F0aW9ucyB0byBjb25zaWRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTExNSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIwOjQwOjAwLjM2OTEzMjA3NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzNDg4NzAwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fc2V0X2NyOFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vcmVncy5jPTQ0Mz1zdGF0aWMgYm9vbCBrdm1faXNfdmFsaWRfY3I4KHVuc2lnbmVkIGxvbmcgY3I4KVxcbi0tXFxuYXJjaC94ODYva3ZtL3JlZ3MuYy00NDctXFxuYXJjaC94ODYva3ZtL3JlZ3MuYzo0NDg6aW50IGt2bV9zZXRfY3I4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjgpXFxuYXJjaC94ODYva3ZtL3JlZ3MuYy00NDkte1xcbi0tXFxuYXJjaC94ODYva3ZtL3JlZ3MuYy00NTctfVxcbmFyY2gveDg2L2t2bS9yZWdzLmM6NDU4OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2V0X2NyOCk7XFxuYXJjaC94ODYva3ZtL3JlZ3MuYy00NTktXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcmVncy5jPTU3Nz1zdGF0aWMgaW50IF9fc2V0X3NyZWdzX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzLFxcbi0tXFxuYXJjaC94ODYva3ZtL3JlZ3MuYy02MzItXFxuYXJjaC94ODYva3ZtL3JlZ3MuYzo2MzM6XFx0a3ZtX3NldF9jcjgodmNwdSwgc3JlZ3MtXFx1MDAzZWNyOCk7XFxuYXJjaC94ODYva3ZtL3JlZ3MuYy02MzQtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcmVncy5oPTYxPWludCBrdm1fc2V0X2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KTtcXG5hcmNoL3g4Ni9rdm0vcmVncy5oOjYyOmludCBrdm1fc2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I4KTtcXG5hcmNoL3g4Ni9rdm0vcmVncy5oLTYzLWludCBrdm1fc2V0X2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyLCB1bnNpZ25lZCBsb25nIHZhbCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTI1ODc9c3RhdGljIGludCBjcl9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNjI1LVxcdFxcdGNhc2UgODpcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjI2MjY6XFx0XFx0XFx0ZXJyID0ga3ZtX3NldF9jcjgodmNwdSwgdmFsKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI2MjctXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTI2NjE9c3RhdGljIGludCBjcl90cmFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjY4NC1cXHRjYXNlIDg6XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNjg1OlxcdFxcdHJldCA9IGt2bV9zZXRfY3I4KHZjcHUsIG5ld192YWx1ZSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNjg2LVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0yNzM1PXN0YXRpYyBpbnQgY3I4X3dyaXRlX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI3NDEtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNzQyOlxcdC8qIGluc3RydWN0aW9uIGVtdWxhdGlvbiBjYWxscyBrdm1fc2V0X2NyOCgpICovXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNzQzLVxcdHIgPSBjcl9pbnRlcmNlcHRpb24odmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTQyNjg9c3RhdGljIGlubGluZSB2b2lkIHN5bmNfY3I4X3RvX2xhcGljKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDI3Ni1cXHRcXHRpbnQgY3I4ID0gc3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmludF9jdGwgXFx1MDAyNiBWX1RQUl9NQVNLO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDI3NzpcXHRcXHRrdm1fc2V0X2NyOCh2Y3B1LCBjcjgpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDI3OC1cXHR9XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTUwNDI9dm9pZCB2bXhfdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTA1NC1cXHR2bXgtXFx1MDAzZWh2X2RlYWRsaW5lX3RzYyA9IC0xO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NTA1NTpcXHRrdm1fc2V0X2NyOCh2Y3B1LCAwKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTUwNTYtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTU2Nzg9c3RhdGljIGludCBoYW5kbGVfY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01NzA3LVxcdFxcdFxcdFxcdHU4IGNyOCA9ICh1OCl2YWw7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo1NzA4OlxcdFxcdFxcdFxcdGVyciA9IGt2bV9zZXRfY3I4KHZjcHUsIGNyOCk7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01NzA5LVxcdFxcdFxcdFxcdHJldCA9IGt2bV9jb21wbGV0ZV9pbnNuX2dwKHZjcHUsIGVycik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTUzNT1zdGF0aWMgaW50IGVtdWxhdG9yX3NldF9jcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgaW50IGNyLCB1bG9uZyB2YWwpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTU1My1cXHRjYXNlIDg6XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjU1NTQ6XFx0XFx0cmVzID0ga3ZtX3NldF9jcjgodmNwdSwgdmFsKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTU1NS1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz04ODgxPWludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtODk0NS1cXHRpZiAoIWxhcGljX2luX2tlcm5lbCh2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS94ODYuYzo4OTQ2OlxcdFxcdGlmIChrdm1fc2V0X2NyOCh2Y3B1LCBrdm1fcnVuLVxcdTAwM2VjcjgpICE9IDApIHtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODk0Ny1cXHRcXHRcXHRyID0gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjA6NDA6MDIuMDA0MDI1ODExWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwNDIzMzgyNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVmFsaWRhdGluZyBDUjggaW4gS1ZNOiBBIFBhdGNoIEFuYWx5c2lzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSBga3ZtX3NldF9jcjhgIGJlaW5nIGludm9rZWQgYWNyb3NzIGRpZmZlcmVudCBLVk0gY29udGV4dHMsIGxpa2UgYF9fc2V0X3NyZWdzX2NvbW1vbmAsIGBlbXVsYXRvcl9zZXRfY3JgLCBhbmQgdGhlIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAgcGF0aC4gSW50ZXJlc3RpbmcuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgYGt2bV9pc192YWxpZF9zcmVnc2AgZnVuY3Rpb24sIHdoaWNoIGlzIGNydWNpYWwgZm9yIHZhbGlkYXRpbmcgc3lzdGVtIHJlZ2lzdGVycywgd2FzICpub3QqIGNoZWNraW5nIHRoZSB2YWxpZGl0eSBvZiBgY3I4YCB0aHJvdWdoIGBrdm1faXNfdmFsaWRfY3I4KHNyZWdzLVx1MDAzZWNyOClgLiBUaGF0J3MgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS5cblxuU28sIHdoYXQgdGhpcyBwYXRjaCBkb2VzIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQgZW5zdXJlcyB0aGF0IGBLVk1fU0VUX1NSRUdTYCBhbmQgYEtWTV9TRVRfU1JFR1MyYCwgYWxvbmcgd2l0aCB0aG9zZSByZWxldmFudCBpb2N0bCBlbnRyeSBwb2ludHMgbGlrZSBga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3NgIGFuZCBga3ZtX3ZjcHVfaW9jdGxfeDg2X3NldF9zcmVnczJgLCBub3cgaW5jbHVkZSB0aGlzIGNyaXRpY2FsIGNoZWNrIGZvciB0aGUgdmFsaWRpdHkgb2YgYGNyOGAgKmJlZm9yZSogbW9kaWZ5aW5nIHN5c3RlbSByZWdpc3RlcnMuIFRoaXMgZWZmZWN0aXZlbHkgcHJldmVudHMgdGhlIGludHJvZHVjdGlvbiBvZiBpbnZhbGlkIGBjcjhgIHZhbHVlcywgd2hpY2ggaXMgYSBnb29kIHRoaW5nIGZvciBzZWN1cml0eSBhbmQgc3RhYmlsaXR5LlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzLCBcIklzIHRoaXMgcmVhY2hhYmxlIGNvZGU/XCIgQWJzb2x1dGVseS4gS1ZNIGlvY3RscyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb24geDg2L2FtZDY0IHN5c3RlbXMsIGFuZCB3ZSBrbm93IHN5emthbGxlciwgYSBwcm9taW5lbnQgZnV6emVyLCBoZWF2aWx5IGV4ZXJjaXNlcyBgL2Rldi9rdm1gIHRocm91Z2ggaW9jdGxzIGxpa2UgYEtWTV9TRVRfU1JFR1NgLiBUaGlzIHZ1bG5lcmFiaWxpdHkgaXMgZGVmaW5pdGVseSBleHBsb2l0YWJsZS5cblxuVG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiwgbGV0J3Mgc2VlIHdoaWNoIEtjb25maWcgb3B0aW9ucyBhcmUgcmVxdWlyZWQ6IGBLVk1gIG9yIGBLVk1fSU5URUxgIC8gYEtWTV9BTURgLiBUaGF0IHNlZW1zIHJpZ2h0LiBBbmQgbm93IEkgc2hvdWxkIGNoZWNrIHRoZSByZWxldmFudCBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZpbGUuIFllcywgdGhpcyBwYXRjaCBtYWtlcyBzZW5zZS4gSXQncyBhIHNvbGlkIGRlZmVuc2UgYWdhaW5zdCBwb3RlbnRpYWwgcHJpdmlsZWdlIGVzY2FsYXRpb24gb3Igc3lzdGVtIGluc3RhYmlsaXR5IGR1ZSB0byBmYXVsdHkgb3IgbWFsaWNpb3VzIGBjcjhgIHZhbHVlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMzEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjA6NDA6MDYuMDQ2MzY2MTY5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzMxNDI2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzM6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzQtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgzOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTg0LVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5NDpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDctXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA4OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNzpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxOC1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMDpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMzOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjM0LVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjA6NDA6MDYuMDkzNjg1NDIxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMDQ1ODY2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgS1ZNIHg4NiBNYWtlZmlsZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGEgY3J1Y2lhbCBmaWxlOiBgYXJjaC94ODYva3ZtL01ha2VmaWxlYC4gSSdtIGd1ZXNzaW5nIHRoYXQgd2hhdGV2ZXIgSSdtIHRyb3VibGVzaG9vdGluZywgb3Igd2hhdGV2ZXIgZW5oYW5jZW1lbnQgSSdtIHdvcmtpbmcgb24sIGxpa2VseSBoYXMgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBjb3JlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZSBLVk0geDg2IG1vZHVsZS4gVGhpcyBNYWtlZmlsZSBpcyB3aGVyZSBhIGxvdCBvZiB0aGUgbWFnaWMgaGFwcGVucyDigJMgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkLCBjb21waWxhdGlvbiB0YXJnZXRzIGFyZSBzZXQgdXAsIGFuZCB1bHRpbWF0ZWx5LCB0aGUgS1ZNIGtlcm5lbCBtb2R1bGUgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGdldHMgYnVpbHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZmlsZSdzIGxvZ2ljIHRvIHNlZSB3aGVyZSBteSBjaGFuZ2VzIGZpdCBpbiBvciB3aGVyZSB0aGUgcHJvYmxlbSBsaWVzLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzIzNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIwOjQwOjA4LjE5ODI3NDgyMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdGNjZmxhZ3MteSArPSAtSSAkKHNyY3RyZWUpL2FyY2gveDg2L2t2bVxcbiAgIDQ6XFx0Y2NmbGFncy0kKENPTkZJR19LVk1fV0VSUk9SKSArPSAtV2Vycm9yXFxuICAgNTpcXHRcXG4gICA2OlxcdGluY2x1ZGUgJChzcmN0cmVlKS92aXJ0L2t2bS9NYWtlZmlsZS5rdm1cXG4gICA3OlxcdFxcbiAgIDg6XFx0a3ZtLXlcXHRcXHRcXHQrPSB4ODYubyBlbXVsYXRlLm8gaXJxLm8gbGFwaWMubyBjcHVpZC5vIG1zcnMubyBwbXUubyByZWdzLm8gXFxcXFxcbiAgIDk6XFx0XFx0XFx0XFx0ICAgbXRyci5vIGRlYnVnZnMubyBtbXUvbW11Lm8gbW11L3BhZ2VfdHJhY2subyBtbXUvc3B0ZS5vXFxuICAxMDpcXHRcXG4gIDExOlxcdGt2bS0kKENPTkZJR19YODZfNjQpICs9IG1tdS90ZHBfaXRlci5vIG1tdS90ZHBfbW11Lm9cXG4gIDEyOlxcdGt2bS0kKENPTkZJR19LVk1fSU9BUElDKSArPSBpODI1OS5vIGk4MjU0Lm8gaW9hcGljLm9cXG4gIDEzOlxcdGt2bS0kKENPTkZJR19LVk1fSFlQRVJWKSArPSBoeXBlcnYub1xcbiAgMTQ6XFx0a3ZtLSQoQ09ORklHX0tWTV9YRU4pXFx0Kz0geGVuLm9cXG4gIDE1OlxcdGt2bS0kKENPTkZJR19LVk1fU01NKVxcdCs9IHNtbS5vXFxuICAxNjpcXHRcXG4gIDE3OlxcdGt2bS1pbnRlbC15XFx0XFx0Kz0gdm14L3ZteC5vIHZteC92bWVudGVyLm8gdm14L3BtdV9pbnRlbC5vIHZteC92bWNzMTIubyBcXFxcXFxuICAxODpcXHRcXHRcXHRcXHQgICB2bXgvbmVzdGVkLm8gdm14L3Bvc3RlZF9pbnRyLm8gdm14L21haW4ub1xcbiAgMTk6XFx0XFxuICAyMDpcXHRrdm0taW50ZWwtJChDT05GSUdfWDg2X1NHWF9LVk0pXFx0Kz0gdm14L3NneC5vXFxuICAyMTpcXHRrdm0taW50ZWwtJChDT05GSUdfS1ZNX0hZUEVSVilcXHQrPSB2bXgvaHlwZXJ2Lm8gdm14L2h5cGVydl9ldm1jcy5vXFxuICAyMjpcXHRrdm0taW50ZWwtJChDT05GSUdfS1ZNX0lOVEVMX1REWClcXHQrPSB2bXgvdGR4Lm9cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0a3ZtLWFtZC15XFx0XFx0Kz0gc3ZtL3N2bS5vIHN2bS92bWVudGVyLm8gc3ZtL3BtdS5vIHN2bS9uZXN0ZWQubyBzdm0vYXZpYy5vXFxuICAyNTpcXHRcXG4gIDI2OlxcdGt2bS1hbWQtJChDT05GSUdfS1ZNX0FNRF9TRVYpXFx0Kz0gc3ZtL3Nldi5vXFxuICAyNzpcXHRrdm0tYW1kLSQoQ09ORklHX0tWTV9IWVBFUlYpXFx0Kz0gc3ZtL2h5cGVydi5vXFxuICAyODpcXHRcXG4gIDI5OlxcdGlmZGVmIENPTkZJR19IWVBFUlZcXG4gIDMwOlxcdGt2bS15XFx0XFx0XFx0Kz0ga3ZtX29uaHlwZXJ2Lm9cXG4gIDMxOlxcdGt2bS1pbnRlbC15XFx0XFx0Kz0gdm14L3ZteF9vbmh5cGVydi5vIHZteC9oeXBlcnZfZXZtY3Mub1xcbiAgMzI6XFx0a3ZtLWFtZC15XFx0XFx0Kz0gc3ZtL3N2bV9vbmh5cGVydi5vXFxuICAzMzpcXHRlbmRpZlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRvYmotJChDT05GSUdfS1ZNX1g4NilcXHQrPSBrdm0ub1xcbiAgMzY6XFx0b2JqLSQoQ09ORklHX0tWTV9JTlRFTClcXHQrPSBrdm0taW50ZWwub1xcbiAgMzc6XFx0b2JqLSQoQ09ORklHX0tWTV9BTUQpXFx0Kz0ga3ZtLWFtZC5vXFxuICAzODpcXHRcXG4gIDM5OlxcdEFGTEFHU19zdm0vdm1lbnRlci5vICAgIDo9IC1pcXVvdGUgJChvYmopXFxuICA0MDpcXHQkKG9iaikvc3ZtL3ZtZW50ZXIubzogJChvYmopL2t2bS1hc20tb2Zmc2V0cy5oXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIwOjQwOjA4LjE5ODM0MDI1MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzQzMzc4NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIENoYW5nZXMgdG8gYHJlZ3Mub2AgaW4gS1ZNLVkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgcmVncy5vYCBoZXJlLCB3aGljaCBpcyBjbGVhcmx5IHBhcnQgb2YgdGhlIGBrdm0teWAgYnVpbGQuIFRoaXMgaXMgY29uZGl0aW9uYWwgb24gYENPTkZJR19LVk1fWDg2YCBvciBgQ09ORklHX0tWTWAgYmVpbmcgZW5hYmxlZCwgYW5kLCBpbXBvcnRhbnRseSwgZWl0aGVyIGBDT05GSUdfS1ZNX0lOVEVMYCBvciBgQ09ORklHX0tWTV9BTURgIGFzIHdlbGwuIFRoYXQgbWVhbnMgYEtWTWAgYW5kIGVpdGhlciBgS1ZNX0lOVEVMYCBvciBgS1ZNX0FNRGAgYXJlIGZ1bmRhbWVudGFsbHkgcmVxdWlyZWQgZm9yIHRoaXMuIEdvdCBpdC5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIGludG8gdGhlIGFmZmVjdGVkIHN5bWJvbHMuIEkgc2VlIG1vZGlmaWNhdGlvbnMgaW4gYGFyY2gveDg2L2t2bS9yZWdzLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIHRvdWNoOlxuXG4qICAgYGt2bV9zZXRfY3I4YFxuKiAgIGBrdm1faXNfdmFsaWRfY3I4YCAodGhpcyBvbmUncyBzdGF0aWMpXG4qICAgYGt2bV9pc192YWxpZF9zcmVnc2AgKGFsc28gc3RhdGljKVxuKiAgIGBfX3NldF9zcmVnc19jb21tb25gIC8gYF9fc2V0X3NyZWdzYCAodGhlc2UgYXJlIHN0YXRpYyB0b28pXG4qICAgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzYCAodGhpcyBpcyBhIG5vbi1zdGF0aWMgZW50cnlwb2ludClcbiogICBga3ZtX3ZjcHVfaW9jdGxfeDg2X3NldF9zcmVnczJgIChhbm90aGVyIG5vbi1zdGF0aWMgZW50cnlwb2ludClcblxuVGhlIGNyaXRpY2FsIHRoaW5nIGlzIHRvIGRldGVybWluZSBpZiB0aG9zZSBub24tc3RhdGljIGZ1bmN0aW9ucywgYGt2bV9zZXRfY3I4YCwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzYCwgYW5kIGBrdm1fdmNwdV9pb2N0bF94ODZfc2V0X3NyZWdzMmAsIGFyZSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIEkgdGhpbmsgdGhleSBhcmUuIFllcywgYSBxdWljayBjaGVjayBjb25maXJtcyB0aGlzLCB0aGV5J3JlIHRoZSBvbmVzIEknbSBsb29raW5nIGF0LlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gY2hlY2sgZm9yIHNpZGUgZWZmZWN0cyBhbmQgZW5zdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMuIExldCdzIGRpZyBpbnRvIHRoZSBwYXRjaCBkaWZmIHRvIGNvbmZpcm0gdGhhdCBga3ZtX2lzX3ZhbGlkX3NyZWdzYCBpcyBiZWluZyB1c2VkIHRvIHZhbGlkYXRlIGBjcjhgLiBUaGF0IGNvbmZpcm1zIGl0LiBJdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBjb2RlIGluIGBrdm1fc2V0X2NyOGAgd2FzIHJlcGxhY2VkIHdpdGggYSBjYWxsIHRvIGBrdm1faXNfdmFsaWRfY3I4YCwgd2hpY2ggbm93IGNoZWNrcyB0aGUgcmVzZXJ2ZWQgYml0cyBpbnN0ZWFkLiBBZGRpdGlvbmFsbHksIGBrdm1faXNfdmFsaWRfc3JlZ3NgIGlzIGJlaW5nIHVzZWQgbm93IHRvIHZhbGlkYXRlIGBzcmVncy1cdTAwM2VjcjhgLlxuXG5Ob3cgSSBuZWVkIHRvIGNoZWNrIGlmIGBrdm1fdmNwdV9pb2N0bF94ODZfc2V0X3NyZWdzMmAgY2FsbHMgYGt2bV9pc192YWxpZF9zcmVnc2AuIFRoaXMgaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgY2hhbmdlIHByb3BhZ2F0ZXMuIFxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM0OCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIwOjQwOjEyLjU0MTcyMTMwMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vcmVncy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY4NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY4NTpcXHRpbnQga3ZtX3ZjcHVfaW9jdGxfeDg2X3NldF9zcmVnczIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiA2ODY6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga3ZtX3NyZWdzMiAqc3JlZ3MyKVxcbiA2ODc6XFx0e1xcbiA2ODg6XFx0XFx0aW50IG1tdV9yZXNldF9uZWVkZWQgPSAwO1xcbiA2ODk6XFx0XFx0Ym9vbCB2YWxpZF9wZHB0cnMgPSBzcmVnczItXFx1MDAzZWZsYWdzIFxcdTAwMjYgS1ZNX1NSRUdTMl9GTEFHU19QRFBUUlNfVkFMSUQ7XFxuIDY5MDpcXHRcXHRib29sIHBhZSA9IChzcmVnczItXFx1MDAzZWNyMCBcXHUwMDI2IFg4Nl9DUjBfUEcpIFxcdTAwMjZcXHUwMDI2IChzcmVnczItXFx1MDAzZWNyNCBcXHUwMDI2IFg4Nl9DUjRfUEFFKSBcXHUwMDI2XFx1MDAyNlxcbiA2OTE6XFx0XFx0XFx0IShzcmVnczItXFx1MDAzZWVmZXIgXFx1MDAyNiBFRkVSX0xNQSk7XFxuIDY5MjpcXHRcXHRpbnQgaSwgcmV0O1xcbiA2OTM6XFx0XFxuIDY5NDpcXHRcXHRpZiAoc3JlZ3MyLVxcdTAwM2VmbGFncyBcXHUwMDI2IH5LVk1fU1JFR1MyX0ZMQUdTX1BEUFRSU19WQUxJRClcXG4gNjk1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA2OTY6XFx0XFxuIDY5NzpcXHRcXHRpZiAodmFsaWRfcGRwdHJzIFxcdTAwMjZcXHUwMDI2ICghcGFlIHx8IHZjcHUtXFx1MDAzZWFyY2guZ3Vlc3Rfc3RhdGVfcHJvdGVjdGVkKSlcXG4gNjk4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA2OTk6XFx0XFxuIDcwMDpcXHRcXHRyZXQgPSBfX3NldF9zcmVnc19jb21tb24odmNwdSwgKHN0cnVjdCBrdm1fc3JlZ3MgKilzcmVnczIsXFxuIDcwMTpcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNm1tdV9yZXNldF9uZWVkZWQsICF2YWxpZF9wZHB0cnMpO1xcbiA3MDI6XFx0XFx0aWYgKHJldClcXG4gNzAzOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDcwNDpcXHRcXG4gNzA1OlxcdFxcdGlmICh2YWxpZF9wZHB0cnMpIHtcXG4gNzA2OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyA0IDsgaSsrKVxcbiA3MDc6XFx0XFx0XFx0XFx0a3ZtX3BkcHRyX3dyaXRlKHZjcHUsIGksIHNyZWdzMi1cXHUwMDNlcGRwdHJzW2ldKTtcXG4gNzA4OlxcdFxcbiA3MDk6XFx0XFx0XFx0a3ZtX3JlZ2lzdGVyX21hcmtfZGlydHkodmNwdSwgVkNQVV9SRUdfUERQVFIpO1xcbiA3MTA6XFx0XFx0XFx0bW11X3Jlc2V0X25lZWRlZCA9IDE7XFxuIDcxMTpcXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnBkcHRyc19mcm9tX3VzZXJzcGFjZSA9IHRydWU7XFxuIDcxMjpcXHRcXHR9XFxuIDcxMzpcXHRcXHRpZiAobW11X3Jlc2V0X25lZWRlZCkge1xcbiA3MTQ6XFx0XFx0XFx0a3ZtX21tdV9yZXNldF9jb250ZXh0KHZjcHUpO1xcbiA3MTU6XFx0XFx0XFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1RMQl9GTFVTSF9HVUVTVCwgdmNwdSk7XFxuIDcxNjpcXHRcXHR9XFxuIDcxNzpcXHRcXHRyZXR1cm4gMDtcXG4gNzE4OlxcdH1cXG4gNzE5OlxcdFxcbiA3MjA6XFx0dm9pZCBrdm1fcnVuX3N5bmNfcmVnc190b191c2VyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gNzIxOlxcdHtcXG4gNzIyOlxcdFxcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGt2bV9zeW5jX3JlZ3MpIFxcdTAwM2UgU1lOQ19SRUdTX1NJWkVfQllURVMpO1xcbiA3MjM6XFx0XFxuIDcyNDpcXHRcXHRpZiAodmNwdS1cXHUwMDNlcnVuLVxcdTAwM2Vrdm1fdmFsaWRfcmVncyBcXHUwMDI2IEtWTV9TWU5DX1g4Nl9SRUdTKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMDo0MDoxMi41NDE4MTA0MzJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUyNjYxMzI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogUmVnaXN0ZXIgVmFsaWRhdGlvbiBpbiBLVk0qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCBpdC4gQm90aCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3NgIGFuZCBga3ZtX3ZjcHVfaW9jdGxfeDg2X3NldF9zcmVnczJgIHVsdGltYXRlbHkgY2FsbCBgX19zZXRfc3JlZ3NfY29tbW9uYCwgd2hpY2ggaW4gdHVybiByZWxpZXMgb24gYGt2bV9pc192YWxpZF9zcmVnc2AuIFRoYXQncyBhIGNyaXRpY2FsIHBhdGguIEFuZCwganVzdCBhcyBpbXBvcnRhbnRseSwgYGt2bV9zZXRfY3I4YCBpcyBhIGRpc3RpbmN0IGdsb2JhbCBmdW5jdGlvbiB0aGF0J3MgYWxzbyBiZWluZyBtb2RpZmllZCBieSB0aGUgcHJvcG9zZWQgcGF0Y2guXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHdoZXRoZXIgdGhpcyBpcyBzb21ldGhpbmcgd2Ugc2hvdWxkIGFjdHVhbGx5IGZ1enouICpZZXMqLCB0aGlzIGRlZmluaXRlbHkgZml0cyB0aGUgYmlsbC4gV2UncmUgbG9va2luZyBhdCByZWFjaGFibGUgS1ZNIGtlcm5lbCBjb2RlLiBTcGVjaWZpY2FsbHksIHRoaXMgaXMgY29kZSB0aGF0J3MgcmVzcG9uc2libGUgZm9yICptb2RpZnlpbmcgcmVnaXN0ZXIgdmFsaWRhdGlvbiBsb2dpYyogcmVsYXRlZCB0byB0aGUgQ1I4IHJlZ2lzdGVyIGFuZCB0aGUgc3JlZ3MgaW9jdGxzLiBUaGF0J3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZm9jdXMgaGVyZSB3aWxsIGJlIG9uIHRob3NlIHNwZWNpZmljIHN5bWJvbHM6IGBrdm1fc2V0X2NyOGAsIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zcmVnc2AsIGFuZCBga3ZtX3ZjcHVfaW9jdGxfeDg2X3NldF9zcmVnczJgLlxuXG5CZWZvcmUgSSBjb21taXQgdG8gdGhpcywgbGV0J3MgbWFrZSBhIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgdGhlIGNvbmZpZ3MgbGluZSB1cCB3aXRoIHRoZSBzeW1ib2xzLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgdG8gZG8gdGhpcy4gQ29uZmlncyBhcmUgZGVmaW5pdGVseSBjb3JyZWN0OiBgS1ZNYCwgYEtWTV9JTlRFTGAsIGFuZCBgS1ZNX0FNRGAuXG5cbkFscmlnaHQsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gV2UgaGF2ZSBhIHNvbGlkIFwiV29ydGhGdXp6aW5nOiB0cnVlXCIgdmVyZGljdC4gVGhlIHJlYXNvbmluZyBpcyBjb25jaXNlIGFuZCBjbGVhci4gV2UncmUgZGlyZWN0bHkgdGFyZ2V0aW5nIGNvZGUgdGhhdCB2YWxpZGF0ZXMgcmVnaXN0ZXJzLCBhbmQgdGhhdCdzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgZnV6emluZyBleGNlbHMgYXQuXG5cbk5vdywgaXQncyB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gV2UncmUgZ29vZCB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MjcsIk91dHB1dFRva2VucyI6MTY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjA6NDA6MTYuMDY4NDI2NDU0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ4MjYzNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3NldF9jcjhcIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzXCIsXG4gICAgXCJrdm1fdmNwdV9pb2N0bF94ODZfc2V0X3NyZWdzMlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgQ1I4IHJlc2VydmVkIGJpdHMgaW4gS1ZNIHdoZW4gc2V0dGluZyBzcGVjaWFsIHJlZ2lzdGVycyAoc3JlZ3MgLyBzcmVnczIpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaW4geDg2IEtWTSBhY2Nlc3NpYmxlIHZpYSB1c2VyLXNwYWNlIGlvY3RscyAoS1ZNX1NFVF9TUkVHUywgS1ZNX1NFVF9TUkVHUzIpIGFuZCBDUjggZW11bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3NldF9jcjhcIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzXCIsXG4gICAgXCJrdm1fdmNwdV9pb2N0bF94ODZfc2V0X3NyZWdzMlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgQ1I4IHJlc2VydmVkIGJpdHMgaW4gS1ZNIHdoZW4gc2V0dGluZyBzcGVjaWFsIHJlZ2lzdGVycyAoc3JlZ3MgLyBzcmVnczIpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaW4geDg2IEtWTSBhY2Nlc3NpYmxlIHZpYSB1c2VyLXNwYWNlIGlvY3RscyAoS1ZNX1NFVF9TUkVHUywgS1ZNX1NFVF9TUkVHUzIpIGFuZCBDUjggZW11bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMDo0MDoxNi4xNDMyNjA0MTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDY0MzY0MzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjA6NDA6MTYuMTQzNzA0MjYyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTEwNjM5MTY5MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiBmb3IgQ1I4IHJlZ2lzdGVyIHZhbHVlcyBpbiBLVk0gKGBrdm1faXNfdmFsaWRfY3I4YCksIGVuc3VyaW5nIHRoYXQgcmVzZXJ2ZWQgYml0cyAoNjM6NCkgaW4gQ1I4IGNhbm5vdCBiZSBzZXQgdmlhIGBLVk1fU0VUX1NSRUdTYCAoY2hlY2tlZCBpbiBga3ZtX2lzX3ZhbGlkX3NyZWdzYCkgb3IgYGt2bV9zZXRfY3I4YCwgYWxvbmcgd2l0aCBjb3JyZXNwb25kaW5nIHNlbGZ0ZXN0IHVwZGF0ZXMuXFxuXFxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlIG9ubHkgcGVyZm9ybXMgYml0d2lzZSB2YWxpZGF0aW9uIG9uIGlucHV0IHZhbHVlcyAoYHNyZWdzLVxcdTAwM2VjcjhgIC8gYGNyOGApIHBhc3NlZCBpbnRvIEtWTSBmcm9tIHVzZXJzcGFjZSBvciBjYWxsZXJzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LCBub3IgZG9lcyBpdCBhbHRlciBhbnkga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcHkgb3BlcmF0aW9ucyAoaW5mby1sZWFrcykgb3Igc3RydWN0dXJlIHBhZGRpbmcuXFxuLSBLQVNBTi9TdGFuZGFyZCB0ZXN0aW5nIGFwcGxpY2FiaWxpdHk6IFN0YW5kYXJkIGZ1bmN0aW9uYWwgdGVzdGluZyBhbmQgS1ZNIHNlbGZ0ZXN0cyBhZGVxdWF0ZWx5IHZlcmlmeSB0aGlzIGlucHV0IHZhbGlkYXRpb24gbG9naWMuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHBvc2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzOTJlZDZiMDMwZGRjZTYzNGJhYzRjMjJkMDZmNmU5ODYzZGMyODRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMDozOTozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9yZWdzLmMgYi9hcmNoL3g4Ni9rdm0vcmVncy5jXG5pbmRleCA4ZjY2NDM4OTg5ZTQ3Li5mYWQzMWI1OWM2MjJmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3JlZ3MuY1xuKysrIGIvYXJjaC94ODYva3ZtL3JlZ3MuY1xuQEAgLTQ0MCw5ICs0NDAsMTQgQEAgaW50IGt2bV9zZXRfY3I0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjQpXG4gfVxuIEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2V0X2NyNCk7XG4gXG4rc3RhdGljIGJvb2wga3ZtX2lzX3ZhbGlkX2NyOCh1bnNpZ25lZCBsb25nIGNyOClcbit7XG4rXHRyZXR1cm4gIShjcjggXHUwMDI2IENSOF9SRVNFUlZFRF9CSVRTKTtcbit9XG4rXG4gaW50IGt2bV9zZXRfY3I4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjgpXG4ge1xuLVx0aWYgKGNyOCBcdTAwMjYgQ1I4X1JFU0VSVkVEX0JJVFMpXG4rXHRpZiAoIWt2bV9pc192YWxpZF9jcjgoY3I4KSlcbiBcdFx0cmV0dXJuIDE7XG4gXHRpZiAobGFwaWNfaW5fa2VybmVsKHZjcHUpKVxuIFx0XHRrdm1fbGFwaWNfc2V0X3Rwcih2Y3B1LCBjcjgpO1xuQEAgLTU2NSw2ICs1NzAsNyBAQCBzdGF0aWMgYm9vbCBrdm1faXNfdmFsaWRfc3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncylcbiBcbiBcdHJldHVybiBrdm1faXNfdmFsaWRfY3I0KHZjcHUsIHNyZWdzLVx1MDAzZWNyNCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgICAga3ZtX2lzX3ZhbGlkX2NyMCh2Y3B1LCBzcmVncy1cdTAwM2VjcjApIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIGt2bV9pc192YWxpZF9jcjgoc3JlZ3MtXHUwMDNlY3I4KSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICBrdm1fdmFsaWRfZWZlcih2Y3B1LCBzcmVncy1cdTAwM2VlZmVyKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jXG5pbmRleCA2MDMyMjZmZmU0Mzc0Li40ZTdjMzUxNzk0MzgzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXRfc3JlZ3NfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NldF9zcmVnc190ZXN0LmNcbkBAIC0xMzUsNiArMTM1LDE4IEBAIHN0YXRpYyB2b2lkIHRlc3RfY3JfYml0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBjcjQpXG4gXHQvKiBOVyB3aXRob3V0IENEIGlzIGlsbGVnYWwsIGFzIGlzIFBHIHdpdGhvdXQgUEUuICovXG4gXHRURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3IwLCBzcmVncywgWDg2X0NSMF9OVyk7XG4gXHRURVNUX0lOVkFMSURfU1JFR19CSVQodmNwdSwgY3IwLCBzcmVncywgWDg2X0NSMF9QRyk7XG4rXG4rXHQvKiBDUjggYml0cyAzOjAgYXJlIHdyaXRhYmxlOyBiaXRzIDYzOjQgYXJlIHJlc2VydmVkLiAqL1xuK1x0dmNwdV9zcmVnc19nZXQodmNwdSwgXHUwMDI2c3JlZ3MpO1xuK1x0c3JlZ3MuY3I4ID0gMHhmO1xuK1x0cmMgPSBfdmNwdV9zcmVnc19zZXQodmNwdSwgXHUwMDI2c3JlZ3MpO1xuK1x0VEVTVF9BU1NFUlQoIXJjLCBcIkZhaWxlZCB0byBzZXQgdmFsaWQgQ1I4IHZhbHVlIDB4ZlwiKTtcbitcbitcdHZjcHVfc3JlZ3NfZ2V0KHZjcHUsIFx1MDAyNnNyZWdzKTtcbitcdFRFU1RfQVNTRVJUX0VRKHNyZWdzLmNyOCwgMHhmKTtcbitcbitcdGZvciAoaSA9IDQ7IGkgXHUwMDNjIDY0OyBpKyspXG4rXHRcdFRFU1RfSU5WQUxJRF9TUkVHX0JJVCh2Y3B1LCBjcjgsIHNyZWdzLCBCSVRfVUxMKGkpKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdGVzdF9lZmVyX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZWZlcilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIwOjQwOjE2LjE0MzcwNTQzMloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjUxMTkwMzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbiBmb3IgYSBLVk0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBzY3J1dGluaXplIHRoZSBjb2RlIGNoYW5nZXMuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIHByb3ZpZGVkIGRpZmY6XG5cbmBgYGRpZmZcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcmVncy5jIGIvYXJjaC94ODYva3ZtL3JlZ3MuY1xuaW5kZXggOGY2NjQzODk4OWU0Ny4uZmFkMzFiNTljNjIyZlxuLS0tIGEvYXJjaC94ODYva3ZtL3JlZ3MuY1xuKysrIGIvYXJjaC94ODYva3ZtL3JlZ3MuY1xuQEAgLTQ0MCw5ICs0NDAsMTQgQEAgaW50IGt2bV9zZXRfY3I0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjQpXG4gfVxuIEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2V0X2NyNCk7XG4gXG4rc3RhdGljIGJvb2wga3ZtX2lzX3ZhbGlkX2NyOCh1bnNpZ25lZCBsb25nIGNyOClcbit7XG4rXHRyZXR1cm4gIShjcjggXHUwMDI2IENSOF9SRVNFUlZFRF9CSVRTKTtcbit9XG4rXG4gaW50IGt2bV9zZXRfY3I4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjgpXG4ge1xuLVx0aWYgKGNyOCBcdTAwMjYgQ1I4X1JFU0VSVkVEX0JJVFMpXG4rXHRpZiAoIWt2bV9pc192YWxpZF9jcjgoY3I4KSlcbiBcdFx0cmV0dXJuIDE7XG4gXHRpZiAobGFwaWNfaW5fa2VybmVsKHZjcHUpKVxuIFx0XHRrdm1fbGFwaWNfc2V0X3Rwcih2Y3B1LCBjcjgpO1xuQEAgLTU2NSw2ICs1NzAsNyBAQCBzdGF0aWMgYm9vbCBrdm1faXNfdmFsaWRfc3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncylcbiBcbiBcdHJldHVybiBrdm1faXNfdmFsaWRfY3I0KHZjcHUsIHNyZWdzLVx1MDAzZWNyNCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgICAga3ZtX2lzX3ZhbGlkX2NyMCh2Y3B1LCBzcmVncy1cdTAwM2VjcjApIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIGt2bV9pc192YWxpZF9jcjgoc3JlZ3MtXHUwMDNlY3I4KSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICBrdm1fdmFsaWRfZWZlcih2Y3B1LCBzcmVncy1cdTAwM2VlZmVyKTtcbiB9XG4gYGBgXG5cblJpZ2h0LCB0aGUgY2hhbmdlcyBpbnZvbHZlIGFkZGluZyBhIG5ldyBzdGF0aWMgZnVuY3Rpb24sIGBrdm1faXNfdmFsaWRfY3I4YCwgdG8gdmFsaWRhdGUgdGhlIENSOCByZWdpc3Rlciwgd2hpY2ggdGhlbiBnZXRzIHVzZWQgaW4gYGt2bV9zZXRfY3I4YCBhbmQsIGNydWNpYWxseSwgd2l0aGluIGBrdm1faXNfdmFsaWRfc3JlZ3NgLiBJIG5lZWQgdG8gbm93IGV4YW1pbmUgYGFyY2gveDg2L2t2bS9yZWdzLmNgIGFyb3VuZCBsaW5lIDU2NSBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIG9uIHRoZSB1c2FnZSBvZiBga3ZtX2lzX3ZhbGlkX3NyZWdzYCBhbmQgaXRzIGNhbGxlcnMuIFRoZSBrZXkgaGVyZSBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBuZXcgdmFsaWRhdGlvbiBsb2dpYyBleHBvc2VzIGFueSBuZXcgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBsaWtlbHkgYm9pbHMgZG93biB0byB1bmRlcnN0YW5kaW5nIHdoZXJlIGFuZCBob3cgdGhlIGBzcmVnc2Agc3RydWN0dXJlIGlzIHBvcHVsYXRlZCBhbmQgdXNlZC4gRGVwZW5kaW5nIG9uIGhvdyBgQ1I4YCBpcyBzZXQgdXAgYW5kIHdoYXQgdGhlIHJlcGVyY3Vzc2lvbnMgb2YgYW4gaW52YWxpZCB2YWx1ZSBtaWdodCBiZSBpbiBzdWJzZXF1ZW50IG9wZXJhdGlvbnMsIEkgY2FuIGRlY2lkZSB3aGV0aGVyIHRoZSBleGlzdGluZyBmdXp6aW5nIGNvdmVyYWdlIGlzIGFkZXF1YXRlIG9yIGlmIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeS4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3OTksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMDo0MDoyMS4zOTQ4OTkzMzVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgzNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3JlZ3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NTAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NTA6XFx0c3RhdGljIGJvb2wga3ZtX2lzX3ZhbGlkX3NyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zcmVncyAqc3JlZ3MpXFxuIDU1MTpcXHR7XFxuIDU1MjpcXHRcXHRpZiAoKHNyZWdzLVxcdTAwM2VlZmVyIFxcdTAwMjYgRUZFUl9MTUUpIFxcdTAwMjZcXHUwMDI2IChzcmVncy1cXHUwMDNlY3IwIFxcdTAwMjYgWDg2X0NSMF9QRykpIHtcXG4gNTUzOlxcdFxcdFxcdC8qXFxuIDU1NDpcXHRcXHRcXHQgKiBXaGVuIEVGRVIuTE1FIGFuZCBDUjAuUEcgYXJlIHNldCwgdGhlIHByb2Nlc3NvciBpcyBpblxcbiA1NTU6XFx0XFx0XFx0ICogNjQtYml0IG1vZGUgKHRob3VnaCBtYXliZSBpbiBhIDMyLWJpdCBjb2RlIHNlZ21lbnQpLlxcbiA1NTY6XFx0XFx0XFx0ICogQ1I0LlBBRSBhbmQgRUZFUi5MTUEgbXVzdCBiZSBzZXQuXFxuIDU1NzpcXHRcXHRcXHQgKi9cXG4gNTU4OlxcdFxcdFxcdGlmICghKHNyZWdzLVxcdTAwM2VjcjQgXFx1MDAyNiBYODZfQ1I0X1BBRSkgfHwgIShzcmVncy1cXHUwMDNlZWZlciBcXHUwMDI2IEVGRVJfTE1BKSlcXG4gNTU5OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNTYwOlxcdFxcdFxcdGlmICgha3ZtX3ZjcHVfaXNfbGVnYWxfY3IzKHZjcHUsIHNyZWdzLVxcdTAwM2VjcjMpKVxcbiA1NjE6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA1NjI6XFx0XFx0fSBlbHNlIHtcXG4gNTYzOlxcdFxcdFxcdC8qXFxuIDU2NDpcXHRcXHRcXHQgKiBOb3QgaW4gNjQtYml0IG1vZGU6IEVGRVIuTE1BIGlzIGNsZWFyIGFuZCB0aGUgY29kZVxcbiA1NjU6XFx0XFx0XFx0ICogc2VnbWVudCBjYW5ub3QgYmUgNjQtYml0LlxcbiA1NjY6XFx0XFx0XFx0ICovXFxuIDU2NzpcXHRcXHRcXHRpZiAoc3JlZ3MtXFx1MDAzZWVmZXIgXFx1MDAyNiBFRkVSX0xNQSB8fCBzcmVncy1cXHUwMDNlY3MubClcXG4gNTY4OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNTY5OlxcdFxcdH1cXG4gNTcwOlxcdFxcbiA1NzE6XFx0XFx0cmV0dXJuIGt2bV9pc192YWxpZF9jcjQodmNwdSwgc3JlZ3MtXFx1MDAzZWNyNCkgXFx1MDAyNlxcdTAwMjZcXG4gNTcyOlxcdFxcdCAgICAgICBrdm1faXNfdmFsaWRfY3IwKHZjcHUsIHNyZWdzLVxcdTAwM2VjcjApIFxcdTAwMjZcXHUwMDI2XFxuIDU3MzpcXHRcXHQgICAgICAga3ZtX2lzX3ZhbGlkX2NyOChzcmVncy1cXHUwMDNlY3I4KSBcXHUwMDI2XFx1MDAyNlxcbiA1NzQ6XFx0XFx0ICAgICAgIGt2bV92YWxpZF9lZmVyKHZjcHUsIHNyZWdzLVxcdTAwM2VlZmVyKTtcXG4gNTc1OlxcdH1cXG4gNTc2OlxcdFxcbiA1Nzc6XFx0c3RhdGljIGludCBfX3NldF9zcmVnc19jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncyxcXG4gNTc4OlxcdFxcdFxcdFxcdCAgICAgIGludCAqbW11X3Jlc2V0X25lZWRlZCwgYm9vbCB1cGRhdGVfcGRwdHJzKVxcbiA1Nzk6XFx0e1xcbiA1ODA6XFx0XFx0aW50IGlkeDtcXG4gNTgxOlxcdFxcdHN0cnVjdCBkZXNjX3B0ciBkdDtcXG4gNTgyOlxcdFxcbiA1ODM6XFx0XFx0aWYgKCFrdm1faXNfdmFsaWRfc3JlZ3ModmNwdSwgc3JlZ3MpKVxcbiA1ODQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU4NTpcXHRcXG4gNTg2OlxcdFxcdGlmIChrdm1fYXBpY19zZXRfYmFzZSh2Y3B1LCBzcmVncy1cXHUwMDNlYXBpY19iYXNlLCB0cnVlKSlcXG4gNTg3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1ODg6XFx0XFxuIDU4OTpcXHRcXHRpZiAodmNwdS1cXHUwMDNlYXJjaC5ndWVzdF9zdGF0ZV9wcm90ZWN0ZWQpXFxuIDU5MDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNTkxOlxcdFxcbiA1OTI6XFx0XFx0ZHQuc2l6ZSA9IHNyZWdzLVxcdTAwM2VpZHQubGltaXQ7XFxuIDU5MzpcXHRcXHRkdC5hZGRyZXNzID0gc3JlZ3MtXFx1MDAzZWlkdC5iYXNlO1xcbiA1OTQ6XFx0XFx0a3ZtX3g4Nl9jYWxsKHNldF9pZHQpKHZjcHUsIFxcdTAwMjZkdCk7XFxuIDU5NTpcXHRcXHRkdC5zaXplID0gc3JlZ3MtXFx1MDAzZWdkdC5saW1pdDtcXG4gNTk2OlxcdFxcdGR0LmFkZHJlc3MgPSBzcmVncy1cXHUwMDNlZ2R0LmJhc2U7XFxuIDU5NzpcXHRcXHRrdm1feDg2X2NhbGwoc2V0X2dkdCkodmNwdSwgXFx1MDAyNmR0KTtcXG4gNTk4OlxcdFxcbiA1OTk6XFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5jcjIgPSBzcmVncy1cXHUwMDNlY3IyO1xcbiA2MDA6XFx0XFx0Km1tdV9yZXNldF9uZWVkZWQgfD0ga3ZtX3JlYWRfY3IzKHZjcHUpICE9IHNyZWdzLVxcdTAwM2VjcjM7XFxuIDYwMTpcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmNyMyA9IHNyZWdzLVxcdTAwM2VjcjM7XFxuIDYwMjpcXHRcXHRrdm1fcmVnaXN0ZXJfbWFya19kaXJ0eSh2Y3B1LCBWQ1BVX1JFR19DUjMpO1xcbiA2MDM6XFx0XFx0a3ZtX3g4Nl9jYWxsKHBvc3Rfc2V0X2NyMykodmNwdSwgc3JlZ3MtXFx1MDAzZWNyMyk7XFxuIDYwNDpcXHRcXG4gNjA1OlxcdFxcdCptbXVfcmVzZXRfbmVlZGVkIHw9IHZjcHUtXFx1MDAzZWFyY2guZWZlciAhPSBzcmVncy1cXHUwMDNlZWZlcjtcXG4gNjA2OlxcdFxcdGt2bV94ODZfY2FsbChzZXRfZWZlcikodmNwdSwgc3JlZ3MtXFx1MDAzZWVmZXIpO1xcbiA2MDc6XFx0XFxuIDYwODpcXHRcXHQqbW11X3Jlc2V0X25lZWRlZCB8PSBrdm1fcmVhZF9jcjAodmNwdSkgIT0gc3JlZ3MtXFx1MDAzZWNyMDtcXG4gNjA5OlxcdFxcdGt2bV94ODZfY2FsbChzZXRfY3IwKSh2Y3B1LCBzcmVncy1cXHUwMDNlY3IwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjA6NDA6MjEuMzk0OTk5NjU1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4MTI2MDI5NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIFNSRUcgVmFsaWRhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgS1ZNIHBlcnNwZWN0aXZlLiBJJ20gbG9va2luZyBhdCB0aGlzIGBfX3NldF9zcmVnc19jb21tb25gIGZ1bmN0aW9uLCB3aGljaCBnZXRzIGEgYHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzYCBmcm9tIGEgYEtWTV9TRVRfU1JFR1NgIGlvY3RsIGNhbGwg4oCTIHN0cmFpZ2h0IGZyb20gdXNlciBzcGFjZS4gVGhlIHBhdGNoIGlzIGFkZGluZyB2YWxpZGF0aW9uIHRvIGVuc3VyZSB0aGUgYHNyZWdzLVx1MDAzZWNyOGAgdmFsdWUsIHNwZWNpZmljYWxseSByZXNlcnZlZCBiaXRzLCBpcyBwcm9wZXJseSBjaGVja2VkIHdpdGhpbiBga3ZtX2lzX3ZhbGlkX3NyZWdzKHZjcHUsIHNyZWdzKWAuIEl0IGFsc28gaW50cm9kdWNlcyB0aGUgYGt2bV9pc192YWxpZF9jcjhgIGhlbHBlciBmb3IgdXNlIGluIGBrdm1fc2V0X2NyOGAgYW5kIHVwZGF0ZXMgdGhlIHJlbGV2YW50IHNlbGZ0ZXN0cy4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIHNvIGZhci5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGFyZSB3ZSBvcGVuaW5nIHVwIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgd2l0aCB0aGlzIGNoYW5nZT8gTGV0J3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LiBGaXJzdCwgaXMgdGhpcyBpbnRyb2R1Y2luZyBvciBtb2RpZnlpbmcgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlICpzZW50KiB0byB1c2VyIHNwYWNlPyBObywgZGVmaW5pdGVseSBub3QuIGBLVk1fU0VUX1NSRUdTYCBpcyB0aGUgKnVzZXIqIHNldHRpbmcgcmVnaXN0ZXJzICppbiogdGhlIGtlcm5lbC4gTm8gbmV3IGRhdGEgaXMgZ29pbmcgb3V0LiBTZWNvbmQsIGlzIHRoZXJlIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0ICpkZXBlbmRzKiBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS4gVGhlIGBzcmVnc2Agc3RydWN0dXJlIGlzIGJlaW5nIHBvcHVsYXRlZCBmcm9tIHVzZXIgc3BhY2UgdmlhIGBjb3B5X2Zyb21fdXNlcmAsIHNvIGl04oCZcyBub3QgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBUaGlyZCwgYW55IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiBvciB1bmluaXRpYWxpemVkIGZpZWxkcz8gQWdhaW4sIG5vLiBJdCdzIGEgc3RydWN0dXJlIGJlaW5nIHBvcHVsYXRlZCwgbm90IGFsbG9jYXRlZC4gRmluYWxseSwgYW55dGhpbmcgd2l0aCBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgdGhhdCAqY291bGQqIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzPyBTdGlsbCBuby5cblxuU28sIGZyb20gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSwgdGhpcyBpcyBhIHB1cmUgdmFsaWRhdGlvbiBhbmQgaW5wdXQgc2FuaXRpemF0aW9uIGNoZWNrIGZvciB0aGUgS1ZNIHZDUFUgcmVnaXN0ZXIgc3RhdGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIENSOCByZWdpc3RlcidzIHJlc2VydmVkIGJpdHMuIEFueSBidWdzIGhlcmUgd291bGQgYmUgcmVsYXRlZCB0byBsb2dpYyBlcnJvcnMgb3IgYWxsb3dpbmcgaW52YWxpZCBzdGF0ZSB0cmFuc2l0aW9ucywgbm90IEtNU0FOLWRldGVjdGFibGUgaXNzdWVzIGxpa2UgcmVhZGluZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgYW55IHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcy4gSXQncyBhIG1hdHRlciBvZiBlbnN1cmluZyB0aGUgKnZhbGlkaXR5KiBvZiB0aGUgaW5wdXQsIG5vdCB0aGUgKmV4aXN0ZW5jZSogb2YgdGhlIG1lbW9yeS5cblxuVGhlcmVmb3JlLCBhZnRlciBhIHRob3JvdWdoIHJldmlldywgbXkgY29uY2x1c2lvbiBpcyB0aGF0ICoqTmVlZHNLTVNBTiBpcyBmYWxzZSoqLlxuXG5JJ3ZlIGNhcmVmdWxseSBjb25zaWRlcmVkIGFsbCB0aGUgdXN1YWwgcmVxdWlyZW1lbnRzIGFuZCBjb25maXJtZWQgbXkgS01TQU4gcmF0aW9uYWxlLiBJJ20gcmVhZHkgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIzMiwiT3V0cHV0VG9rZW5zIjoyMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMDo0MDoyNy4yMDc2MDUyOTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiBmb3IgQ1I4IHJlZ2lzdGVyIHZhbHVlcyBpbiBLVk0gKGBrdm1faXNfdmFsaWRfY3I4YCksIGVuc3VyaW5nIHRoYXQgcmVzZXJ2ZWQgYml0cyAoNjM6NCkgaW4gQ1I4IGNhbm5vdCBiZSBzZXQgdmlhIGBLVk1fU0VUX1NSRUdTYCAoY2hlY2tlZCBpbiBga3ZtX2lzX3ZhbGlkX3NyZWdzYCkgb3IgYGt2bV9zZXRfY3I4YCwgYWxvbmcgd2l0aCBjb3JyZXNwb25kaW5nIHNlbGZ0ZXN0IHVwZGF0ZXMuXFxuXFxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlIG9ubHkgcGVyZm9ybXMgYml0d2lzZSB2YWxpZGF0aW9uIG9uIGlucHV0IHZhbHVlcyAoYHNyZWdzLVxcdTAwM2VjcjhgIC8gYGNyOGApIHBhc3NlZCBpbnRvIEtWTSBmcm9tIHVzZXJzcGFjZSBvciBjYWxsZXJzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LCBub3IgZG9lcyBpdCBhbHRlciBhbnkga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcHkgb3BlcmF0aW9ucyAoaW5mby1sZWFrcykgb3Igc3RydWN0dXJlIHBhZGRpbmcuXFxuLSBLQVNBTi9TdGFuZGFyZCB0ZXN0aW5nIGFwcGxpY2FiaWxpdHk6IFN0YW5kYXJkIGZ1bmN0aW9uYWwgdGVzdGluZyBhbmQgS1ZNIHNlbGZ0ZXN0cyBhZGVxdWF0ZWx5IHZlcmlmeSB0aGlzIGlucHV0IHZhbGlkYXRpb24gbG9naWMuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHBvc2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGlucHV0IHZhbGlkYXRpb24gZm9yIENSOCByZWdpc3RlciB2YWx1ZXMgaW4gS1ZNIChga3ZtX2lzX3ZhbGlkX2NyOGApLCBlbnN1cmluZyB0aGF0IHJlc2VydmVkIGJpdHMgKDYzOjQpIGluIENSOCBjYW5ub3QgYmUgc2V0IHZpYSBgS1ZNX1NFVF9TUkVHU2AgKGNoZWNrZWQgaW4gYGt2bV9pc192YWxpZF9zcmVnc2ApIG9yIGBrdm1fc2V0X2NyOGAsIGFsb25nIHdpdGggY29ycmVzcG9uZGluZyBzZWxmdGVzdCB1cGRhdGVzLlxcblxcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZSBvbmx5IHBlcmZvcm1zIGJpdHdpc2UgdmFsaWRhdGlvbiBvbiBpbnB1dCB2YWx1ZXMgKGBzcmVncy1cXHUwMDNlY3I4YCAvIGBjcjhgKSBwYXNzZWQgaW50byBLVk0gZnJvbSB1c2Vyc3BhY2Ugb3IgY2FsbGVycy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWx0ZXIgYW55IGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMgKGluZm8tbGVha3MpIG9yIHN0cnVjdHVyZSBwYWRkaW5nLlxcbi0gS0FTQU4vU3RhbmRhcmQgdGVzdGluZyBhcHBsaWNhYmlsaXR5OiBTdGFuZGFyZCBmdW5jdGlvbmFsIHRlc3RpbmcgYW5kIEtWTSBzZWxmdGVzdHMgYWRlcXVhdGVseSB2ZXJpZnkgdGhpcyBpbnB1dCB2YWxpZGF0aW9uIGxvZ2ljLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBwb3NlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflows6h4f[1] Phase: Succeeded StartedAt: 2026-09-08 20:40:37 +0000 UTC FinishedAt: 2026-09-08 20:40:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflows6h4f[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 20:40:37 +0000 UTC FinishedAt: 2026-09-08 20:40:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflows6h4f[2] Phase: Succeeded StartedAt: 2026-09-08 20:40:37 +0000 UTC FinishedAt: 2026-09-09 00:20:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 20:40:37 +0000 UTC FinishedAt: 2026-09-09 00:20:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 20:40:37 +0000 UTC FinishedAt: 2026-09-08 20:40:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 20:40:37 +0000 UTC FinishedAt: 2026-09-08 20:40:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflows6h4f/series-workflows6h4f-convert-artifact-2836665391/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 20:40:48 +0000 UTC FinishedAt: 2026-09-08 20:56:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 20:40:48 +0000 UTC FinishedAt: 2026-09-08 20:56:40 +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:*a14a7c24-95e8-4274-bae1-f532ca100e2e,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-workflows6h4f/series-workflows6h4f-convert-artifact-2836665391/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": "9a501bf4-cf77-4a0e-8311-344679802d78", "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-workflows6h4f/series-workflows6h4f-build-action-1262590453/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 20:40:48 +0000 UTC FinishedAt: 2026-09-08 20:56:30 +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:*a14a7c24-95e8-4274-bae1-f532ca100e2e,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-workflows6h4f/series-workflows6h4f-convert-artifact-2836665391/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": "9a501bf4-cf77-4a0e-8311-344679802d78", "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-workflows6h4f/series-workflows6h4f-build-action-1262590453/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 20:56:40 +0000 UTC FinishedAt: 2026-09-08 20:56:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 20:56:40 +0000 UTC FinishedAt: 2026-09-08 20:56:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 20:56:40 +0000 UTC FinishedAt: 2026-09-08 20:56:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 20:56:40 +0000 UTC FinishedAt: 2026-09-08 20:56:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflows6h4f/series-workflows6h4f-convert-artifact-1472476542/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 20:56:50 +0000 UTC FinishedAt: 2026-09-08 20:58:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 20:56:50 +0000 UTC FinishedAt: 2026-09-08 20:58:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9a501bf4-cf77-4a0e-8311-344679802d78,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-workflows6h4f/series-workflows6h4f-build-action-1262590453/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-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 20:58:37 +0000 UTC FinishedAt: 2026-09-08 20:58:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 20:58:37 +0000 UTC FinishedAt: 2026-09-08 20:58:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 20:58:37 +0000 UTC FinishedAt: 2026-09-08 21:16:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 20:58:37 +0000 UTC FinishedAt: 2026-09-08 21:16:37 +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:*a14a7c24-95e8-4274-bae1-f532ca100e2e,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-workflows6h4f/series-workflows6h4f-convert-artifact-1472476542/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": "124e986e-a73e-453d-ba26-848fee32f2a3", "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-workflows6h4f/series-workflows6h4f-build-action-272302546/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 20:58:37 +0000 UTC FinishedAt: 2026-09-08 21:16:27 +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:*a14a7c24-95e8-4274-bae1-f532ca100e2e,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-workflows6h4f/series-workflows6h4f-convert-artifact-1472476542/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": "124e986e-a73e-453d-ba26-848fee32f2a3", "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-workflows6h4f/series-workflows6h4f-build-action-272302546/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 21:16:37 +0000 UTC FinishedAt: 2026-09-08 21:16:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 21:16:37 +0000 UTC FinishedAt: 2026-09-08 21:16:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 21:16:37 +0000 UTC FinishedAt: 2026-09-08 21:18:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 21:16:37 +0000 UTC FinishedAt: 2026-09-08 21:18:28 +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:*124e986e-a73e-453d-ba26-848fee32f2a3,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-workflows6h4f/series-workflows6h4f-build-action-272302546/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-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 21:18:39 +0000 UTC FinishedAt: 2026-09-09 00:20:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 21:18:39 +0000 UTC FinishedAt: 2026-09-09 00:20:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"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:*9a501bf4-cf77-4a0e-8311-344679802d78,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*124e986e-a73e-453d-ba26-848fee32f2a3,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-workflows6h4f/series-workflows6h4f-build-action-1262590453/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-workflows6h4f/series-workflows6h4f-build-action-272302546/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 21:18:39 +0000 UTC FinishedAt: 2026-09-08 21:18:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 21:18:39 +0000 UTC FinishedAt: 2026-09-08 21:18:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"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-workflows6h4f/series-workflows6h4f-convert-artifact-1147243907/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 21:18:39 +0000 UTC FinishedAt: 2026-09-08 21:18:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 21:18:39 +0000 UTC FinishedAt: 2026-09-08 21:18:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 21:18:39 +0000 UTC FinishedAt: 2026-09-08 21:18:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 21:18:49 +0000 UTC FinishedAt: 2026-09-09 00:20:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflows6h4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_set_cr8","kvm_arch_vcpu_ioctl_set_sregs","kvm_vcpu_ioctl_x86_set_sregs2"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"05f6c158-dd5a-401c-b654-040d8eabe787","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 21:18:49 +0000 UTC FinishedAt: 2026-09-09 00:20:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9a501bf4-cf77-4a0e-8311-344679802d78,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*124e986e-a73e-453d-ba26-848fee32f2a3,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-workflows6h4f/series-workflows6h4f-build-action-1262590453/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-workflows6h4f/series-workflows6h4f-build-action-272302546/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-workflows6h4f/series-workflows6h4f-convert-artifact-1147243907/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,}