Name: series-workflows5htf Phase: Succeeded StartedAt: 2026-09-03 10:37:46 +0000 UTC FinishedAt: 2026-09-03 14:23:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5htf[0] Phase: Succeeded StartedAt: 2026-09-03 10:37:46 +0000 UTC FinishedAt: 2026-09-03 10:40:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5htf[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 10:37:46 +0000 UTC FinishedAt: 2026-09-03 10:40:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d761934c9483ecde93fe99d8705282f716dfee50", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_EVENTS", "DEBUG_INFO_BTF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d761934c9483ecde93fe99d8705282f716dfee50", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_EVENTS", "DEBUG_INFO_BTF" ], "series_id": "ea5eadd3-9a5d-45dc-8739-6c468759b490" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_send_signal_task" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc2VuZF9zaWduYWxfdGFzayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGEgY2hlY2sgaW4gYGJwZl9zZW5kX3NpZ25hbF9jb21tb24oKWAgc28gdGhhdCBgbm1pX3VhY2Nlc3Nfb2theSgpYCBpcyBvbmx5IGV2YWx1YXRlZCB3aGVuIGB0YXNrID09IGN1cnJlbnRgLCBhbGxvd2luZyBCUEYgcHJvZ3JhbXMgcnVubmluZyBpbiBrdGhyZWFkL2t3b3JrZXIgY29udGV4dCB0byBzZW5kIHNpZ25hbHMgdG8gb3RoZXIgdGFyZ2V0IHRhc2tzIHZpYSBgYnBmX3NlbmRfc2lnbmFsX3Rhc2soKWAuIEl0IGFsc28gYWRkcyBhIEJQRiBzZWxmdGVzdC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgbGVuZ3RocywgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGNvcHktdG8tdXNlciBvcGVyYXRpb25zLiBBbnkgcmVsYXRlZCB0YXNrIGxpZmV0aW1lIG9yIHJlZmVyZW5jZSBjb3VudGluZyBjb25jZXJucyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCB0cmFja2luZy4gQXMgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbigpIHRvIG9ubHkgZW5mb3JjZSBubWlfdWFjY2Vzc19va2F5KCkgd2hlbiB0aGUgdGFyZ2V0IHRhc2sgaXMgY3VycmVudC4gVGhpcyBlbmFibGVzIEJQRiBwcm9ncmFtcyAoc3VjaCBhcyB0aG9zZSBydW5uaW5nIGluIGt3b3JrZXIvdHJhY2Vwb2ludCBjb250ZXh0KSB0byBzdWNjZXNzZnVsbHkgaW52b2tlIHRoZSBicGZfc2VuZF9zaWduYWxfdGFzayBrZnVuYyBvbiBub24tY3VycmVudCB0YXNrcy4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIGtlcm5lbCBleGVjdXRpb24gbG9naWMgZm9yIEJQRiBzaWduYWwgZGVsaXZlcnkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1NmQ2NGYyM2QzYmY5OGE0MDFmOTQ1OGY2YThkOGNlYzI1Y2EyZGE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxMDozOToxMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbmluZGV4IDI5MjYwOTUxYWE4NzEuLmY3YTQxZjIyMjU5OTkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuQEAgLTg3MSw3ICYjNDM7ODcxLDEwIEBAIHN0YXRpYyBpbnQgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbih1MzIgc2lnLCBlbnVtIHBpZF90eXBlIHR5cGUsIHN0cnVjdCB0YXNrX3N0cnVjXG4gXHQgKi9cbiBcdGlmICh1bmxpa2VseSh0YXNrLVx1MDAzZWZsYWdzIFx1MDAyNiAoUEZfS1RIUkVBRCB8IFBGX0VYSVRJTkcpKSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbi1cdGlmICh1bmxpa2VseSghbm1pX3VhY2Nlc3Nfb2theSgpKSlcbiYjNDM7XHQvKiBTaW5jZSBubWlfdWFjY2Vzc19va2F5KCkgaXMgb25seSBmb3IgdGhlIGN1cnJlbnRcbiYjNDM7XHQgKiB0YXNrLCBjaGVjayBpZiB0YXNrIGlzIGN1cnJlbnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHRhc2sgPT0gY3VycmVudCBcdTAwMjZcdTAwMjYgdW5saWtlbHkoIW5taV91YWNjZXNzX29rYXkoKSkpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXHQvKiBUYXNrIHNob3VsZCBub3QgYmUgcGlkPTEgdG8gYXZvaWQga2VybmVsIHBhbmljLiAqL1xuIFx0aWYgKHVubGlrZWx5KGlzX2dsb2JhbF9pbml0KHRhc2spKSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZW5kX3NpZ25hbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VuZF9zaWduYWwuY1xuaW5kZXggN2FjNGQ1YTQ4OGFhNS4uZjlkZDIzZGIxZWY5OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlbmRfc2lnbmFsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlbmRfc2lnbmFsLmNcbkBAIC0yNjEsNiAmIzQzOzI2MSwxMDggQEAgc3RhdGljIHZvaWQgdGVzdF9zZW5kX3NpZ25hbF9ubWkoYm9vbCBzaWduYWxfdGhyZWFkLCBib29sIHJlbW90ZSlcbiBcdHRlc3Rfc2VuZF9zaWduYWxfY29tbW9uKFx1MDAyNmF0dHIsIHNpZ25hbF90aHJlYWQsIHJlbW90ZSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3NlbmRfc2lnbmFsX2t3b3JrZXIodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X3NlbmRfc2lnbmFsX2tlcm4gKnNrZWw7XG4mIzQzO1x0aW50IHBpcGVfYzJwWzJdLCBwaXBlX3AyY1syXTtcbiYjNDM7XHRzdHJ1Y3Qgc2lnYWN0aW9uIHNhID0ge307XG4mIzQzO1x0Y2hhciBidWZbMjU2XTtcbiYjNDM7XHRpbnQgZXJyID0gLTE7XG4mIzQzO1x0cGlkX3QgcGlkO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhwaXBlKHBpcGVfYzJwKSwgXCYjMzQ7cGlwZV9jMnBcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhwaXBlKHBpcGVfcDJjKSwgXCYjMzQ7cGlwZV9wMmNcJiMzNDspKSB7XG4mIzQzO1x0XHRjbG9zZShwaXBlX2MycFswXSk7XG4mIzQzO1x0XHRjbG9zZShwaXBlX2MycFsxXSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwaWQgPSBmb3JrKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UocGlkLCAwLCBcJiMzNDtmb3JrXCYjMzQ7KSkge1xuJiM0MztcdFx0Y2xvc2UocGlwZV9jMnBbMF0pO1xuJiM0MztcdFx0Y2xvc2UocGlwZV9jMnBbMV0pO1xuJiM0MztcdFx0Y2xvc2UocGlwZV9wMmNbMF0pO1xuJiM0MztcdFx0Y2xvc2UocGlwZV9wMmNbMV0pO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBpZCA9PSAwKSB7XG4mIzQzO1x0XHQvKiBpbnN0YWxsIHNpZ25hbCBoYW5kbGVyIGFuZCBub3RpZnkgcGFyZW50ICovXG4mIzQzO1x0XHRzYS5zYV9zaWdhY3Rpb24gPSBzaWd1c3IxX3NpZ2luZm9faGFuZGxlcjtcbiYjNDM7XHRcdHNhLnNhX2ZsYWdzID0gU0FfUkVTVEFSVCB8IFNBX1NJR0lORk87XG4mIzQzO1x0XHRBU1NFUlRfTkVRKHNpZ2FjdGlvbihTSUdVU1IxLCBcdTAwMjZzYSwgTlVMTCksIC0xLCBcJiMzNDtzaWdhY3Rpb25cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdGNsb3NlKHBpcGVfYzJwWzBdKTsgLyogY2xvc2UgcmVhZCAqL1xuJiM0MztcdFx0Y2xvc2UocGlwZV9wMmNbMV0pOyAvKiBjbG9zZSB3cml0ZSAqL1xuJiM0MztcbiYjNDM7XHRcdC8qIG5vdGlmeSBwYXJlbnQgc2lnbmFsIGhhbmRsZXIgaXMgaW5zdGFsbGVkICovXG4mIzQzO1x0XHRBU1NFUlRfRVEod3JpdGUocGlwZV9jMnBbMV0sIGJ1ZiwgMSksIDEsIFwmIzM0O3BpcGVfd3JpdGVcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdC8qIG1ha2Ugc3VyZSBwYXJlbnQgZW5hYmxlZCBicGYgcHJvZ3JhbSB0byBzZW5kX3NpZ25hbCAqL1xuJiM0MztcdFx0QVNTRVJUX0VRKHJlYWQocGlwZV9wMmNbMF0sIGJ1ZiwgMSksIDEsIFwmIzM0O3BpcGVfcmVhZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0LyogdGhlIHNpZ25hbCBpcyBzZW50IGZyb20gd29ya3F1ZXVlIGNvbnRleHQsIHNvIG5vdGhpbmcgaGFzXG4mIzQzO1x0XHQgKiB0byBiZSB0cmlnZ2VyZWQgZnJvbSBoZXJlXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHdoaWxlICghc2lndXNyMV9yZWNlaXZlZClcbiYjNDM7XHRcdFx0c2xlZXAoMSk7XG4mIzQzO1xuJiM0MztcdFx0YnVmWzBdID0gc2lndXNyMV9yZWNlaXZlZDtcbiYjNDM7XG4mIzQzO1x0XHRBU1NFUlRfRVEoc2lndXNyMV9yZWNlaXZlZCwgOCwgXCYjMzQ7c2lndXNyMV9yZWNlaXZlZFwmIzM0Oyk7XG4mIzQzO1x0XHRBU1NFUlRfRVEod3JpdGUocGlwZV9jMnBbMV0sIGJ1ZiwgMSksIDEsIFwmIzM0O3BpcGVfd3JpdGVcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdGNsb3NlKHBpcGVfYzJwWzFdKTtcbiYjNDM7XHRcdGNsb3NlKHBpcGVfcDJjWzBdKTtcbiYjNDM7XHRcdGV4aXQoMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjbG9zZShwaXBlX2MycFsxXSk7IC8qIGNsb3NlIHdyaXRlICovXG4mIzQzO1x0Y2xvc2UocGlwZV9wMmNbMF0pOyAvKiBjbG9zZSByZWFkICovXG4mIzQzO1xuJiM0MztcdHNrZWwgPSB0ZXN0X3NlbmRfc2lnbmFsX2tlcm5fX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7c2tlbF9vcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gc2tlbF9vcGVuX2xvYWRfZmFpbHVyZTtcbiYjNDM7XG4mIzQzO1x0Lyogd2FpdCB1bnRpbCBjaGlsZCBzaWduYWwgaGFuZGxlciBpbnN0YWxsZWQgKi9cbiYjNDM7XHRBU1NFUlRfRVEocmVhZChwaXBlX2MycFswXSwgYnVmLCAxKSwgMSwgXCYjMzQ7cGlwZV9yZWFkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogcGlkID09IDAga2VlcHMgdGhlIG90aGVyIHByb2dyYW1zIG9mIHRoaXMgc2tlbGV0b24gaW5hY3RpdmUgKi9cbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VwaWQgPSAwO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNpZyA9IFNJR1VTUjE7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldGFyZ2V0X3BpZCA9IHBpZDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gdGVzdF9zZW5kX3NpZ25hbF9rZXJuX19hdHRhY2goc2tlbCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtza2VsX2F0dGFjaFwmIzM0OykpIHtcbiYjNDM7XHRcdGVyciA9IC0xO1xuJiM0MztcdFx0Z290byBkZXN0cm95X3NrZWw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBub3RpZnkgY2hpbGQgdGhhdCBicGYgcHJvZ3JhbSBjYW4gc2VuZF9zaWduYWwgbm93ICovXG4mIzQzO1x0QVNTRVJUX0VRKHdyaXRlKHBpcGVfcDJjWzFdLCBidWYsIDEpLCAxLCBcJiMzNDtwaXBlX3dyaXRlXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0Lyogd2FpdCBmb3IgcmVzdWx0LCB3b3JrcXVldWVzIHJ1biBvbiB0aGVpciBvd24gKi9cbiYjNDM7XHRlcnIgPSByZWFkX3dpdGhfdGltZW91dChwaXBlX2MycFswXSwgYnVmLCAxLCAxMCAqIDEwMDAgKiAxMDAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HVChlcnIsIDAsIFwmIzM0O3JlYWRpbmcgcGlwZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGRlc3Ryb3lfc2tlbDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGJ1ZlswXSwgOCwgXCYjMzQ7aW5jb3JyZWN0IHJlc3VsdFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztkZXN0cm95X3NrZWw6XG4mIzQzO1x0dGVzdF9zZW5kX3NpZ25hbF9rZXJuX19kZXN0cm95KHNrZWwpO1xuJiM0Mztza2VsX29wZW5fbG9hZF9mYWlsdXJlOlxuJiM0MztcdGNsb3NlKHBpcGVfYzJwWzBdKTtcbiYjNDM7XHRjbG9zZShwaXBlX3AyY1sxXSk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDaGlsZCBpcyBlaXRoZXIgYWJvdXQgdG8gZXhpdCBjbGVhbmx5IG9yIHN0dWNrIGluIGNhc2Ugb2YgZXJyb3JzLlxuJiM0MztcdCAqIE51ZGdlIGl0IHRvIGV4aXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0a2lsbChwaWQsIFNJR0tJTEwpO1xuJiM0MztcdHdhaXQoTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCB0ZXN0X3NlbmRfc2lnbmFsKHZvaWQpXG4ge1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7c2VuZF9zaWduYWxfdHJhY2Vwb2ludFwmIzM0OykpXG5AQCAtMjg5LDQgJiM0MzszOTEsNiBAQCB2b2lkIHRlc3Rfc2VuZF9zaWduYWwodm9pZClcbiBcdFx0dGVzdF9zZW5kX3NpZ25hbF9wZXJmKHRydWUsIHRydWUpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7c2VuZF9zaWduYWxfbm1pX3RocmVhZF9yZW1vdGVcJiMzNDspKVxuIFx0XHR0ZXN0X3NlbmRfc2lnbmFsX25taSh0cnVlLCB0cnVlKTtcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtzZW5kX3NpZ25hbF9rd29ya2VyXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3Rfc2VuZF9zaWduYWxfa3dvcmtlcigpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmNcbmluZGV4IDE3NmEzNTVlMzA2MjQuLmQxYzAwMGMzMDg4NTcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uY1xuQEAgLTYwLDYgJiM0Mzs2MCwzMiBAQCBpbnQgc2VuZF9zaWduYWxfdHBfc2NoZWQodm9pZCAqY3R4KVxuIFx0cmV0dXJuIGJwZl9zZW5kX3NpZ25hbF90ZXN0KGN0eCk7XG4gfVxuIFxuJiM0MzsvKiBTZW5kIGEgc2lnbmFsIHRvIGEgdGFzayBvdGhlciB0aGFuIGN1cnJlbnQsIGZyb20gYSBjb250ZXh0IHdoZXJlIGN1cnJlbnRcbiYjNDM7ICogaXMgYSBrZXJuZWwgdGhyZWFkLiBObyBmaWx0ZXJpbmcgb24gY3VycmVudCBpcyBwb3NzaWJsZSBoZXJlLCBzbyB0aGlzIGlzXG4mIzQzOyAqIGRyaXZlbiBlbnRpcmVseSBieSB0YXJnZXRfcGlkLlxuJiM0MzsgKi9cbiYjNDM7U0VDKFwmIzM0O3RwX2J0Zi93b3JrcXVldWVfZXhlY3V0ZV9zdGFydFwmIzM0OylcbiYjNDM7aW50IHNlbmRfc2lnbmFsX2t3b3JrZXIodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXRfdGFzaztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoc3RhdHVzICE9IDAgfHwgdGFyZ2V0X3BpZCA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHRhcmdldF90YXNrID0gYnBmX3Rhc2tfZnJvbV9waWQodGFyZ2V0X3BpZCk7XG4mIzQzO1x0aWYgKCF0YXJnZXRfdGFzaylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBicGZfc2VuZF9zaWduYWxfdGFzayh0YXJnZXRfdGFzaywgc2lnLCBQSURUWVBFX1RHSUQsIDgpO1xuJiM0MztcdGJwZl90YXNrX3JlbGVhc2UodGFyZ2V0X3Rhc2spO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0ID09IDApXG4mIzQzO1x0XHRzdGF0dXMgPSAxO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7cGVyZl9ldmVudFwmIzM0OylcbiBpbnQgc2VuZF9zaWduYWxfcGVyZih2b2lkICpjdHgpXG4ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc2VuZF9zaWduYWxfdGFzayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBicGZfc2VuZF9zaWduYWxfY29tbW9uKCkgdG8gb25seSBlbmZvcmNlIG5taV91YWNjZXNzX29rYXkoKSB3aGVuIHRoZSB0YXJnZXQgdGFzayBpcyBjdXJyZW50LiBUaGlzIGVuYWJsZXMgQlBGIHByb2dyYW1zIChzdWNoIGFzIHRob3NlIHJ1bm5pbmcgaW4ga3dvcmtlci90cmFjZXBvaW50IGNvbnRleHQpIHRvIHN1Y2Nlc3NmdWxseSBpbnZva2UgdGhlIGJwZl9zZW5kX3NpZ25hbF90YXNrIGtmdW5jIG9uIG5vbi1jdXJyZW50IHRhc2tzLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMga2VybmVsIGV4ZWN1dGlvbiBsb2dpYyBmb3IgQlBGIHNpZ25hbCBkZWxpdmVyeS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU2ZDY0ZjIzZDNiZjk4YTQwMWY5NDU4ZjZhOGQ4Y2VjMjVjYTJkYTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDEwOjM5OjEwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jCmluZGV4IDI5MjYwOTUxYWE4NzEuLmY3YTQxZjIyMjU5OTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMKQEAgLTg3MSw3ICYjNDM7ODcxLDEwIEBAIHN0YXRpYyBpbnQgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbih1MzIgc2lnLCBlbnVtIHBpZF90eXBlIHR5cGUsIHN0cnVjdCB0YXNrX3N0cnVjCiAJICovCiAJaWYgKHVubGlrZWx5KHRhc2stJmd0O2ZsYWdzICZhbXA7IChQRl9LVEhSRUFEIHwgUEZfRVhJVElORykpKQogCQlyZXR1cm4gLUVQRVJNOwotCWlmICh1bmxpa2VseSghbm1pX3VhY2Nlc3Nfb2theSgpKSkKJiM0MzsJLyogU2luY2Ugbm1pX3VhY2Nlc3Nfb2theSgpIGlzIG9ubHkgZm9yIHRoZSBjdXJyZW50CiYjNDM7CSAqIHRhc2ssIGNoZWNrIGlmIHRhc2sgaXMgY3VycmVudC4KJiM0MzsJICovCiYjNDM7CWlmICh0YXNrID09IGN1cnJlbnQgJmFtcDsmYW1wOyB1bmxpa2VseSghbm1pX3VhY2Nlc3Nfb2theSgpKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAkvKiBUYXNrIHNob3VsZCBub3QgYmUgcGlkPTEgdG8gYXZvaWQga2VybmVsIHBhbmljLiAqLwogCWlmICh1bmxpa2VseShpc19nbG9iYWxfaW5pdCh0YXNrKSkpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZW5kX3NpZ25hbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VuZF9zaWduYWwuYwppbmRleCA3YWM0ZDVhNDg4YWE1Li5mOWRkMjNkYjFlZjk4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZW5kX3NpZ25hbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlbmRfc2lnbmFsLmMKQEAgLTI2MSw2ICYjNDM7MjYxLDEwOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NlbmRfc2lnbmFsX25taShib29sIHNpZ25hbF90aHJlYWQsIGJvb2wgcmVtb3RlKQogCXRlc3Rfc2VuZF9zaWduYWxfY29tbW9uKCZhbXA7YXR0ciwgc2lnbmFsX3RocmVhZCwgcmVtb3RlKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc2VuZF9zaWduYWxfa3dvcmtlcih2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHRlc3Rfc2VuZF9zaWduYWxfa2VybiAqc2tlbDsKJiM0MzsJaW50IHBpcGVfYzJwWzJdLCBwaXBlX3AyY1syXTsKJiM0MzsJc3RydWN0IHNpZ2FjdGlvbiBzYSA9IHt9OwomIzQzOwljaGFyIGJ1ZlsyNTZdOwomIzQzOwlpbnQgZXJyID0gLTE7CiYjNDM7CXBpZF90IHBpZDsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0socGlwZShwaXBlX2MycCksICYjMzQ7cGlwZV9jMnAmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LKHBpcGUocGlwZV9wMmMpLCAmIzM0O3BpcGVfcDJjJiMzNDspKSB7CiYjNDM7CQljbG9zZShwaXBlX2MycFswXSk7CiYjNDM7CQljbG9zZShwaXBlX2MycFsxXSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGlkID0gZm9yaygpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShwaWQsIDAsICYjMzQ7Zm9yayYjMzQ7KSkgewomIzQzOwkJY2xvc2UocGlwZV9jMnBbMF0pOwomIzQzOwkJY2xvc2UocGlwZV9jMnBbMV0pOwomIzQzOwkJY2xvc2UocGlwZV9wMmNbMF0pOwomIzQzOwkJY2xvc2UocGlwZV9wMmNbMV0pOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwaWQgPT0gMCkgewomIzQzOwkJLyogaW5zdGFsbCBzaWduYWwgaGFuZGxlciBhbmQgbm90aWZ5IHBhcmVudCAqLwomIzQzOwkJc2Euc2Ffc2lnYWN0aW9uID0gc2lndXNyMV9zaWdpbmZvX2hhbmRsZXI7CiYjNDM7CQlzYS5zYV9mbGFncyA9IFNBX1JFU1RBUlQgfCBTQV9TSUdJTkZPOwomIzQzOwkJQVNTRVJUX05FUShzaWdhY3Rpb24oU0lHVVNSMSwgJmFtcDtzYSwgTlVMTCksIC0xLCAmIzM0O3NpZ2FjdGlvbiYjMzQ7KTsKJiM0MzsKJiM0MzsJCWNsb3NlKHBpcGVfYzJwWzBdKTsgLyogY2xvc2UgcmVhZCAqLwomIzQzOwkJY2xvc2UocGlwZV9wMmNbMV0pOyAvKiBjbG9zZSB3cml0ZSAqLwomIzQzOwomIzQzOwkJLyogbm90aWZ5IHBhcmVudCBzaWduYWwgaGFuZGxlciBpcyBpbnN0YWxsZWQgKi8KJiM0MzsJCUFTU0VSVF9FUSh3cml0ZShwaXBlX2MycFsxXSwgYnVmLCAxKSwgMSwgJiMzNDtwaXBlX3dyaXRlJiMzNDspOwomIzQzOwomIzQzOwkJLyogbWFrZSBzdXJlIHBhcmVudCBlbmFibGVkIGJwZiBwcm9ncmFtIHRvIHNlbmRfc2lnbmFsICovCiYjNDM7CQlBU1NFUlRfRVEocmVhZChwaXBlX3AyY1swXSwgYnVmLCAxKSwgMSwgJiMzNDtwaXBlX3JlYWQmIzM0Oyk7CiYjNDM7CiYjNDM7CQkvKiB0aGUgc2lnbmFsIGlzIHNlbnQgZnJvbSB3b3JrcXVldWUgY29udGV4dCwgc28gbm90aGluZyBoYXMKJiM0MzsJCSAqIHRvIGJlIHRyaWdnZXJlZCBmcm9tIGhlcmUKJiM0MzsJCSAqLwomIzQzOwkJd2hpbGUgKCFzaWd1c3IxX3JlY2VpdmVkKQomIzQzOwkJCXNsZWVwKDEpOwomIzQzOwomIzQzOwkJYnVmWzBdID0gc2lndXNyMV9yZWNlaXZlZDsKJiM0MzsKJiM0MzsJCUFTU0VSVF9FUShzaWd1c3IxX3JlY2VpdmVkLCA4LCAmIzM0O3NpZ3VzcjFfcmVjZWl2ZWQmIzM0Oyk7CiYjNDM7CQlBU1NFUlRfRVEod3JpdGUocGlwZV9jMnBbMV0sIGJ1ZiwgMSksIDEsICYjMzQ7cGlwZV93cml0ZSYjMzQ7KTsKJiM0MzsKJiM0MzsJCWNsb3NlKHBpcGVfYzJwWzFdKTsKJiM0MzsJCWNsb3NlKHBpcGVfcDJjWzBdKTsKJiM0MzsJCWV4aXQoMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2xvc2UocGlwZV9jMnBbMV0pOyAvKiBjbG9zZSB3cml0ZSAqLwomIzQzOwljbG9zZShwaXBlX3AyY1swXSk7IC8qIGNsb3NlIHJlYWQgKi8KJiM0MzsKJiM0MzsJc2tlbCA9IHRlc3Rfc2VuZF9zaWduYWxfa2Vybl9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtza2VsX29wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlnb3RvIHNrZWxfb3Blbl9sb2FkX2ZhaWx1cmU7CiYjNDM7CiYjNDM7CS8qIHdhaXQgdW50aWwgY2hpbGQgc2lnbmFsIGhhbmRsZXIgaW5zdGFsbGVkICovCiYjNDM7CUFTU0VSVF9FUShyZWFkKHBpcGVfYzJwWzBdLCBidWYsIDEpLCAxLCAmIzM0O3BpcGVfcmVhZCYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogcGlkID09IDAga2VlcHMgdGhlIG90aGVyIHByb2dyYW1zIG9mIHRoaXMgc2tlbGV0b24gaW5hY3RpdmUgKi8KJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtwaWQgPSAwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3NpZyA9IFNJR1VTUjE7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7dGFyZ2V0X3BpZCA9IHBpZDsKJiM0MzsKJiM0MzsJZXJyID0gdGVzdF9zZW5kX3NpZ25hbF9rZXJuX19hdHRhY2goc2tlbCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtza2VsX2F0dGFjaCYjMzQ7KSkgewomIzQzOwkJZXJyID0gLTE7CiYjNDM7CQlnb3RvIGRlc3Ryb3lfc2tlbDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBub3RpZnkgY2hpbGQgdGhhdCBicGYgcHJvZ3JhbSBjYW4gc2VuZF9zaWduYWwgbm93ICovCiYjNDM7CUFTU0VSVF9FUSh3cml0ZShwaXBlX3AyY1sxXSwgYnVmLCAxKSwgMSwgJiMzNDtwaXBlX3dyaXRlJiMzNDspOwomIzQzOwomIzQzOwkvKiB3YWl0IGZvciByZXN1bHQsIHdvcmtxdWV1ZXMgcnVuIG9uIHRoZWlyIG93biAqLwomIzQzOwllcnIgPSByZWFkX3dpdGhfdGltZW91dChwaXBlX2MycFswXSwgYnVmLCAxLCAxMCAqIDEwMDAgKiAxMDAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfR1QoZXJyLCAwLCAmIzM0O3JlYWRpbmcgcGlwZSYjMzQ7KSkKJiM0MzsJCWdvdG8gZGVzdHJveV9za2VsOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoYnVmWzBdLCA4LCAmIzM0O2luY29ycmVjdCByZXN1bHQmIzM0Oyk7CiYjNDM7CiYjNDM7ZGVzdHJveV9za2VsOgomIzQzOwl0ZXN0X3NlbmRfc2lnbmFsX2tlcm5fX2Rlc3Ryb3koc2tlbCk7CiYjNDM7c2tlbF9vcGVuX2xvYWRfZmFpbHVyZToKJiM0MzsJY2xvc2UocGlwZV9jMnBbMF0pOwomIzQzOwljbG9zZShwaXBlX3AyY1sxXSk7CiYjNDM7CS8qCiYjNDM7CSAqIENoaWxkIGlzIGVpdGhlciBhYm91dCB0byBleGl0IGNsZWFubHkgb3Igc3R1Y2sgaW4gY2FzZSBvZiBlcnJvcnMuCiYjNDM7CSAqIE51ZGdlIGl0IHRvIGV4aXQuCiYjNDM7CSAqLwomIzQzOwlraWxsKHBpZCwgU0lHS0lMTCk7CiYjNDM7CXdhaXQoTlVMTCk7CiYjNDM7fQomIzQzOwogdm9pZCB0ZXN0X3NlbmRfc2lnbmFsKHZvaWQpCiB7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzZW5kX3NpZ25hbF90cmFjZXBvaW50JiMzNDspKQpAQCAtMjg5LDQgJiM0MzszOTEsNiBAQCB2b2lkIHRlc3Rfc2VuZF9zaWduYWwodm9pZCkKIAkJdGVzdF9zZW5kX3NpZ25hbF9wZXJmKHRydWUsIHRydWUpOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7c2VuZF9zaWduYWxfbm1pX3RocmVhZF9yZW1vdGUmIzM0OykpCiAJCXRlc3Rfc2VuZF9zaWduYWxfbm1pKHRydWUsIHRydWUpOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3NlbmRfc2lnbmFsX2t3b3JrZXImIzM0OykpCiYjNDM7CQl0ZXN0X3NlbmRfc2lnbmFsX2t3b3JrZXIoKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uYwppbmRleCAxNzZhMzU1ZTMwNjI0Li5kMWMwMDBjMzA4ODU3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jCkBAIC02MCw2ICYjNDM7NjAsMzIgQEAgaW50IHNlbmRfc2lnbmFsX3RwX3NjaGVkKHZvaWQgKmN0eCkKIAlyZXR1cm4gYnBmX3NlbmRfc2lnbmFsX3Rlc3QoY3R4KTsKIH0KIAomIzQzOy8qIFNlbmQgYSBzaWduYWwgdG8gYSB0YXNrIG90aGVyIHRoYW4gY3VycmVudCwgZnJvbSBhIGNvbnRleHQgd2hlcmUgY3VycmVudAomIzQzOyAqIGlzIGEga2VybmVsIHRocmVhZC4gTm8gZmlsdGVyaW5nIG9uIGN1cnJlbnQgaXMgcG9zc2libGUgaGVyZSwgc28gdGhpcyBpcwomIzQzOyAqIGRyaXZlbiBlbnRpcmVseSBieSB0YXJnZXRfcGlkLgomIzQzOyAqLwomIzQzO1NFQygmIzM0O3RwX2J0Zi93b3JrcXVldWVfZXhlY3V0ZV9zdGFydCYjMzQ7KQomIzQzO2ludCBzZW5kX3NpZ25hbF9rd29ya2VyKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0X3Rhc2s7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChzdGF0dXMgIT0gMCB8fCB0YXJnZXRfcGlkID09IDApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJdGFyZ2V0X3Rhc2sgPSBicGZfdGFza19mcm9tX3BpZCh0YXJnZXRfcGlkKTsKJiM0MzsJaWYgKCF0YXJnZXRfdGFzaykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXQgPSBicGZfc2VuZF9zaWduYWxfdGFzayh0YXJnZXRfdGFzaywgc2lnLCBQSURUWVBFX1RHSUQsIDgpOwomIzQzOwlicGZfdGFza19yZWxlYXNlKHRhcmdldF90YXNrKTsKJiM0MzsKJiM0MzsJaWYgKHJldCA9PSAwKQomIzQzOwkJc3RhdHVzID0gMTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7cGVyZl9ldmVudCYjMzQ7KQogaW50IHNlbmRfc2lnbmFsX3BlcmYodm9pZCAqY3R4KQogewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTA2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IGBicGZfc2VuZF9zaWduYWxfY29tbW9uYCBpbiBgYnBmX3RyYWNlLmNgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBhbmQgc29tZSBzZWxmdGVzdHMgdW5kZXIgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uLi5gLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCB0cmFjaW5nIGFuZCBCUEYgdXN1YWxseSBnbyBoYW5kIGluIGhhbmQuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIHdpdGhpbiB0aGUgYGJwZl9zZW5kX3NpZ25hbF9jb21tb25gIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFib3V0IHRoZSBgbm1pX3VhY2Nlc3Nfb2theSgpYCBjaGVjay4gSSBzZWUgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSBjaGVja2VkIGBubWlfdWFjY2Vzc19va2F5KClgIGRpcmVjdGx5LCBidXQgdGhlIHJldmlzZWQgdmVyc2lvbiBpcyBhZGRpbmcgYSBjaGVjayB0byBzZWUgaWYgdGhlIHRhcmdldCBgdGFza2AgaXMgYWN0dWFsbHkgdGhlIGBjdXJyZW50YCB0YXNrIGJlZm9yZSBjYWxsaW5nIGBubWlfdWFjY2Vzc19va2F5KClgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSB0YXJnZXRlZCBvcHRpbWl6YXRpb24gb3IgYSBmaXggZm9yIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byBOTUkgYWNjZXNzIHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuIFRoZSBvcmlnaW5hbCBjaGVjayBsaWtlbHkgaGFkIGEgZmxhdywgYXMgaXQgZGlkbiYjMzk7dCBhY2NvdW50IGZvciB0aGUgY29udGV4dCBvZiB0aGUgdGFyZ2V0IHRhc2suCgpJJiMzOTttIGN1cmlvdXMgdG8gc2VlIHdoeSB0aGUgYG5taV91YWNjZXNzX29rYXkoKWAgY2hlY2sgaXMgYmVpbmcgbW9kaWZpZWQgaW4gdGhpcyBzcGVjaWZpYyB3YXkuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB1c2UgbXkgdG9vbHMgdG8gZ3JhYiB0aGUgY29kZSBhcm91bmQgbGluZSA4NzEgb2YgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgZm9yIGEgYml0IG1vcmUgY29udGV4dC4gVGhlbiBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIG11Y2ggYmV0dGVyIGlkZWEgb2YgdGhlIHBvdGVudGlhbCByYW1pZmljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJcyB0aGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBBIHNlY3VyaXR5IGhhcmRlbmluZyBtZWFzdXJlPyBBIGJ1ZyBmaXg/IExldCYjMzk7cyBmaW5kIG91dCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODUwOlx0XHRzdHJ1Y3Qga2VybmVsX3NpZ2luZm8gaW5mbztcbiA4NTE6XHRcdHN0cnVjdCBrZXJuZWxfc2lnaW5mbyAqc2lnaW5mbztcbiA4NTI6XHRcbiA4NTM6XHRcdGlmICghdGFzaykge1xuIDg1NDpcdFx0XHR0YXNrID0gY3VycmVudDtcbiA4NTU6XHRcdFx0c2lnaW5mbyA9IFNFTkRfU0lHX1BSSVY7XG4gODU2Olx0XHR9IGVsc2Uge1xuIDg1NzpcdFx0XHRjbGVhcl9zaWdpbmZvKFx1MDAyNmluZm8pO1xuIDg1ODpcdFx0XHRpbmZvLnNpX3NpZ25vID0gc2lnO1xuIDg1OTpcdFx0XHRpbmZvLnNpX2Vycm5vID0gMDtcbiA4NjA6XHRcdFx0aW5mby5zaV9jb2RlID0gU0lfS0VSTkVMO1xuIDg2MTpcdFx0XHRpbmZvLnNpX3BpZCA9IDA7XG4gODYyOlx0XHRcdGluZm8uc2lfdWlkID0gMDtcbiA4NjM6XHRcdFx0aW5mby5zaV92YWx1ZS5zaXZhbF9wdHIgPSAodm9pZCBfX3VzZXIgX19mb3JjZSAqKSh1bnNpZ25lZCBsb25nKXZhbHVlO1xuIDg2NDpcdFx0XHRzaWdpbmZvID0gXHUwMDI2aW5mbztcbiA4NjU6XHRcdH1cbiA4NjY6XHRcbiA4Njc6XHRcdC8qIFNpbWlsYXIgdG8gYnBmX3Byb2JlX3dyaXRlX3VzZXIsIHRhc2sgbmVlZHMgdG8gYmVcbiA4Njg6XHRcdCAqIGluIGEgc291bmQgY29uZGl0aW9uIGFuZCBrZXJuZWwgbWVtb3J5IGFjY2VzcyBiZVxuIDg2OTpcdFx0ICogcGVybWl0dGVkIGluIG9yZGVyIHRvIHNlbmQgc2lnbmFsIHRvIHRoZSBjdXJyZW50XG4gODcwOlx0XHQgKiB0YXNrLlxuIDg3MTpcdFx0ICovXG4gODcyOlx0XHRpZiAodW5saWtlbHkodGFzay1cdTAwM2VmbGFncyBcdTAwMjYgKFBGX0tUSFJFQUQgfCBQRl9FWElUSU5HKSkpXG4gODczOlx0XHRcdHJldHVybiAtRVBFUk07XG4gODc0Olx0XHQvKiBTaW5jZSBubWlfdWFjY2Vzc19va2F5KCkgaXMgb25seSBmb3IgdGhlIGN1cnJlbnRcbiA4NzU6XHRcdCAqIHRhc2ssIGNoZWNrIGlmIHRhc2sgaXMgY3VycmVudC5cbiA4NzY6XHRcdCAqL1xuIDg3NzpcdFx0aWYgKHRhc2sgPT0gY3VycmVudCBcdTAwMjZcdTAwMjYgdW5saWtlbHkoIW5taV91YWNjZXNzX29rYXkoKSkpXG4gODc4Olx0XHRcdHJldHVybiAtRVBFUk07XG4gODc5Olx0XHQvKiBUYXNrIHNob3VsZCBub3QgYmUgcGlkPTEgdG8gYXZvaWQga2VybmVsIHBhbmljLiAqL1xuIDg4MDpcdFx0aWYgKHVubGlrZWx5KGlzX2dsb2JhbF9pbml0KHRhc2spKSlcbiA4ODE6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiA4ODI6XHRcbiA4ODM6XHRcdGlmIChwcmVlbXB0X2NvdW50KCkgIT0gMCB8fCBpcnFzX2Rpc2FibGVkKCkpIHtcbiA4ODQ6XHRcdFx0LyogRG8gYW4gZWFybHkgY2hlY2sgb24gc2lnbmFsIHZhbGlkaXR5LiBPdGhlcndpc2UsXG4gODg1Olx0XHRcdCAqIHRoZSBlcnJvciBpcyBsb3N0IGluIGRlZmVycmVkIGlycV93b3JrLlxuIDg4NjpcdFx0XHQgKi9cbiA4ODc6XHRcdFx0aWYgKHVubGlrZWx5KCF2YWxpZF9zaWduYWwoc2lnKSkpXG4gODg4Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODg5Olx0XG4gODkwOlx0XHRcdHdvcmsgPSB0aGlzX2NwdV9wdHIoXHUwMDI2c2VuZF9zaWduYWxfd29yayk7XG4gODkxOlx0XHRcdGlmIChpcnFfd29ya19pc19idXN5KFx1MDAyNndvcmstXHUwMDNlaXJxX3dvcmspKVxuIDg5MjpcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4gODkzOlx0XG4gODk0Olx0XHRcdC8qIEFkZCB0aGUgY3VycmVudCB0YXNrLCB3aGljaCBpcyB0aGUgdGFyZ2V0IG9mIHNlbmRpbmcgc2lnbmFsLFxuIDg5NTpcdFx0XHQgKiB0byB0aGUgaXJxX3dvcmsuIFRoZSBjdXJyZW50IHRhc2sgbWF5IGNoYW5nZSB3aGVuIHF1ZXVlZFxuIDg5NjpcdFx0XHQgKiBpcnEgd29ya3MgZ2V0IGV4ZWN1dGVkLlxuIDg5NzpcdFx0XHQgKi9cbiA4OTg6XHRcdFx0d29yay1cdTAwM2V0YXNrID0gZ2V0X3Rhc2tfc3RydWN0KHRhc2spO1xuIDg5OTpcdFx0XHR3b3JrLVx1MDAzZWhhc19zaWdpbmZvID0gc2lnaW5mbyA9PSBcdTAwMjZpbmZvO1xuIDkwMDpcdFx0XHRpZiAod29yay1cdTAwM2VoYXNfc2lnaW5mbylcbiA5MDE6XHRcdFx0XHRjb3B5X3NpZ2luZm8oXHUwMDI2d29yay1cdTAwM2VpbmZvLCBcdTAwMjZpbmZvKTtcbiA5MDI6XHRcdFx0d29yay1cdTAwM2VzaWcgPSBzaWc7XG4gOTAzOlx0XHRcdHdvcmstXHUwMDNldHlwZSA9IHR5cGU7XG4gOTA0Olx0XHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNndvcmstXHUwMDNlaXJxX3dvcmspO1xuIDkwNTpcdFx0XHRyZXR1cm4gMDtcbiA5MDY6XHRcdH1cbiA5MDc6XHRcbiA5MDg6XHRcdHJldHVybiBncm91cF9zZW5kX3NpZ19pbmZvKHNpZywgc2lnaW5mbywgdGFzaywgdHlwZSk7XG4gOTA5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NTYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRyYWNpbmcgdGhlIGNhbGxlciBmdW5jdGlvbnMgb2YgYGJwZl9zZW5kX3NpZ25hbF9jb21tb25gOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsZXJzIG9mIGBicGZfc2VuZF9zaWduYWxfY29tbW9uYCoqCgpBbHJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHdoZXJlIGBicGZfc2VuZF9zaWduYWxfY29tbW9uYCBpcyBhY3R1YWxseSBiZWluZyAqdXNlZCouIEdpdmVuIHRoZSBuYW1lLCBJJiMzOTtkIGV4cGVjdCBpdCB0byBiZSBhIGNvbW1vbiBmdW5jdGlvbiByZWxhdGVkIHRvIHNpZ25hbCBoYW5kbGluZyB3aXRoaW4gdGhlIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgY29udGV4dC4gU28sIHdoZXJlIGlzIHRoZSBlbnRyeXBvaW50PwoKTXkgaW1tZWRpYXRlIG1vdmUgaXMgdG8gdXNlIGBncmVwYC4gSSB3YW50IHRvIGZpbmQgd2hlcmUgYGJwZl9zZW5kX3NpZ25hbGAgaXMgY2FsbGVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGZvY3VzIG15IHNlYXJjaCBvbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gSSBleHBlY3QgYGJwZl90cmFjZS5jYCB0byBjb250YWluIHRoZSBzb3VyY2UgY29kZSBpbXBsZW1lbnRpbmcgdGhlIHRyYWNlcG9pbnRzIHRoYXQgYWxsb3cgbWUgdG8gdW5kZXJzdGFuZCB3aGVyZSBzaWduYWxzIGFyZSBnZXR0aW5nIHNlbnQuIEZyb20gdGhlcmUsIEkgY2FuIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGNhbGwgZ3JhcGguIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyBiYWNrIHRoZSBjYWxsZXJzIGFuZCB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3NlbmRfc2lnbmFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYz04MzM9c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzZW5kX3NpZ25hbF9pcnFfd29yaywgc2VuZF9zaWduYWxfd29yayk7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtODM0LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjgzNTpzdGF0aWMgdm9pZCBkb19icGZfc2VuZF9zaWduYWwoc3RydWN0IGlycV93b3JrICplbnRyeSlcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy04MzYte1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy04NDYtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6ODQ3OnN0YXRpYyBpbnQgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbih1MzIgc2lnLCBlbnVtIHBpZF90eXBlIHR5cGUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTY0IHZhbHVlKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTg0OC17XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTkxMC1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo5MTE6QlBGX0NBTExfMShicGZfc2VuZF9zaWduYWwsIHUzMiwgc2lnKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTkxMi17XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6OTEzOlx0cmV0dXJuIGJwZl9zZW5kX3NpZ25hbF9jb21tb24oc2lnLCBQSURUWVBFX1RHSUQsIE5VTEwsIDApO1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTkxNC19XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTE1LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjkxNjpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NlbmRfc2lnbmFsX3Byb3RvID0ge1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjkxNzpcdC5mdW5jXHRcdD0gYnBmX3NlbmRfc2lnbmFsLFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTkxOC1cdC5ncGxfb25seVx0PSBmYWxzZSxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTIyLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjkyMzpCUEZfQ0FMTF8xKGJwZl9zZW5kX3NpZ25hbF90aHJlYWQsIHUzMiwgc2lnKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTkyNC17XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6OTI1Olx0cmV0dXJuIGJwZl9zZW5kX3NpZ25hbF9jb21tb24oc2lnLCBQSURUWVBFX1BJRCwgTlVMTCwgMCk7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTI2LX1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy05MjctXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6OTI4OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2VuZF9zaWduYWxfdGhyZWFkX3Byb3RvID0ge1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjkyOTpcdC5mdW5jXHRcdD0gYnBmX3NlbmRfc2lnbmFsX3RocmVhZCxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy05MzAtXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIyNjQ9c3RhdGljIGludCBfX2luaXQgc2VuZF9zaWduYWxfaXJxX3dvcmtfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjcwLVx0XHR3b3JrID0gcGVyX2NwdV9wdHIoXHUwMDI2c2VuZF9zaWduYWxfd29yaywgY3B1KTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMjcxOlx0XHRpbml0X2lycV93b3JrKFx1MDAyNndvcmstXHUwMDNlaXJxX3dvcmssIGRvX2JwZl9zZW5kX3NpZ25hbCk7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI3Mi1cdH1cbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzYxND1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzYxNS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNjE2Ol9fYnBmX2tmdW5jIGludCBicGZfc2VuZF9zaWduYWxfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBzaWcsIGVudW0gcGlkX3R5cGUgdHlwZSxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjE3LVx0XHRcdFx0ICAgICB1NjQgdmFsdWUpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM2MjEtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzYyMjpcdHJldHVybiBicGZfc2VuZF9zaWduYWxfY29tbW9uKHNpZywgdHlwZSwgdGFzaywgdmFsdWUpO1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM2MjMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NTQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgS2Z1bmM6IGBicGZfc2VuZF9zaWduYWxfdGFza2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBicGZfc2VuZF9zaWduYWxfdGFza2AuIFJpZ2h0LCB0aGF0JiMzOTtzIGEgQlBGIGtmdW5jLiBJbnRlcmVzdGluZy4gVGhlIGNvZGUgcGF0aCBJJiMzOTttIGV4YW1pbmluZyBpbnZvbHZlcyBgYnBmX3NlbmRfc2lnbmFsX3Rhc2sodGFzaywgLi4uKWAgYmVpbmcgaW52b2tlZCwgYW5kIGNydWNpYWxseSwgdGhlIGB0YXNrYCBhcmd1bWVudCBoZXJlIHJlZmVycyB0byBhICpkaWZmZXJlbnQqIHRhc2ssIG5vdCB0aGUgY3VycmVudCBvbmUuIEkgc2VlIGEgY2FsbCB0byBgbm1pX3VhY2Nlc3Nfb2theSgpYCBpbiB0aGUgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgY29kZSwgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQuIFRoaXMgaXMgYSBiaXQgdW5leHBlY3RlZCBhbmQgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBubWlfdWFjY2Vzc19va2F5KClgIGlzIGFsbCBhYm91dCBpbiB0aGlzIGNvbnRleHQuIFRpbWUgdG8gcHVsbCBvdXQgdGhlIGdyZXAgYW5kIGRpZyBpbiB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGhlcmUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25taV91YWNjZXNzX29rYXkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvZXZlbnRzL2NvcmUuYz0yOTExPXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9zZWdtZW50X2Jhc2UodW5zaWduZWQgaW50IHNlZ21lbnQpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0yOTIzLVx0XHQgKi9cbmFyY2gveDg2L2V2ZW50cy9jb3JlLmM6MjkyNDpcdFx0aWYgKCFubWlfdWFjY2Vzc19va2F5KCkpXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTI5MjUtXHRcdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYz0yOTk3PXBlcmZfY2FsbGNoYWluX3VzZXIoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5X2N0eCAqZW50cnksIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmFyY2gveDg2L2V2ZW50cy9jb3JlLmMtMzAxNy1cbmFyY2gveDg2L2V2ZW50cy9jb3JlLmM6MzAxODpcdGlmICghbm1pX3VhY2Nlc3Nfb2theSgpKVxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0zMDE5LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaD03ND1zdHJ1Y3QgdGxiX3N0YXRlIHtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90bGJmbHVzaC5oLTgzLVx0ICogd2hlbiBDUjMgYW5kIGxvYWRlZF9tbSB3b3VsZCBvdGhlcndpc2UgYmUgaW5jb25zaXN0ZW50LiAgVGhpc1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaDo4NDpcdCAqIGlzIGZvciBubWlfdWFjY2Vzc19va2F5KCkmIzM5O3MgYmVuZWZpdC5cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgtODUtXHQgKi9cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90bGJmbHVzaC5oPTE5MD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZW50ZXJfbGF6eV90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgtMTk3LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaDoxOTg6Ym9vbCBubWlfdWFjY2Vzc19va2F5KHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaDoxOTk6I2RlZmluZSBubWlfdWFjY2Vzc19va2F5IG5taV91YWNjZXNzX29rYXlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgtMjAwLVxuLS1cbmFyY2gveDg2L2xpYi9pbnNuLWV2YWwuYz02MjE9c3RhdGljIGJvb2wgZ2V0X2Rlc2Moc3RydWN0IGRlc2Nfc3RydWN0ICpvdXQsIHVuc2lnbmVkIHNob3J0IHNlbClcbi0tXG5hcmNoL3g4Ni9saWIvaW5zbi1ldmFsLmMtNjM3LVx0XHQgKi9cbmFyY2gveDg2L2xpYi9pbnNuLWV2YWwuYzo2Mzg6XHRcdGlmICghbm1pX3VhY2Nlc3Nfb2theSgpKVxuYXJjaC94ODYvbGliL2luc24tZXZhbC5jLTYzOS1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuYXJjaC94ODYvbGliL3VzZXJjb3B5LmM9MzI9Y29weV9mcm9tX3VzZXJfbm1pKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKVxuLS1cbmFyY2gveDg2L2xpYi91c2VyY29weS5jLTM4LVxuYXJjaC94ODYvbGliL3VzZXJjb3B5LmM6Mzk6XHRpZiAoIW5taV91YWNjZXNzX29rYXkoKSlcbmFyY2gveDg2L2xpYi91c2VyY29weS5jLTQwLVx0XHRyZXR1cm4gbjtcbi0tXG5hcmNoL3g4Ni9tbS90bGIuYz03ODM9dm9pZCBzd2l0Y2hfbW1faXJxc19vZmYoc3RydWN0IG1tX3N0cnVjdCAqdW51c2VkLCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0LFxuLS1cbmFyY2gveDg2L21tL3RsYi5jLTkwOS1cdFx0LypcbmFyY2gveDg2L21tL3RsYi5jOjkxMDpcdFx0ICogSW5kaWNhdGUgdGhhdCBDUjMgaXMgYWJvdXQgdG8gY2hhbmdlLiBubWlfdWFjY2Vzc19va2F5KClcbmFyY2gveDg2L21tL3RsYi5jLTkxMS1cdFx0ICogYW5kIG90aGVycyBhcmUgc2Vuc2l0aXZlIHRvIHRoZSB3aW5kb3cgd2hlcmUgbW1fY3B1bWFzaygpLFxuLS1cbmFyY2gveDg2L21tL3RsYi5jPTE2ODI9dm9pZCBhcmNoX3RsYmJhdGNoX2ZsdXNoKHN0cnVjdCBhcmNoX3RsYmZsdXNoX3VubWFwX2JhdGNoICpiYXRjaClcbi0tXG5hcmNoL3g4Ni9tbS90bGIuYy0xNzIxLSAqL1xuYXJjaC94ODYvbW0vdGxiLmM6MTcyMjpib29sIG5taV91YWNjZXNzX29rYXkodm9pZClcbmFyY2gveDg2L21tL3RsYi5jLTE3MjMte1xuLS1cbmFyY2gveDg2L21tL3RsYi5jLTE3MzEtXHQgKiBjdXJyZW50X21tLVx1MDAzZXBnZCA9PSBfX3ZhKHJlYWRfY3IzX3BhKCkpLiAgVGhpcyBtYXkgYmUgc2xvdywgdGhvdWdoLFxuYXJjaC94ODYvbW0vdGxiLmM6MTczMjpcdCAqIGlmIHdlJiMzOTtyZSBydW5uaW5nIGluIGEgVk0gd2l0aCBzaGFkb3cgcGFnaW5nLCBhbmQgbm1pX3VhY2Nlc3Nfb2theSgpXG5hcmNoL3g4Ni9tbS90bGIuYy0xNzMzLVx0ICogaXMgc3VwcG9zZWQgdG8gYmUgcmVhc29uYWJseSBmYXN0LlxuLS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmgtMjQtICovXG5pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oOjI1OiNpZm5kZWYgbm1pX3VhY2Nlc3Nfb2theVxuaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaDoyNjojIGRlZmluZSBubWlfdWFjY2Vzc19va2F5KCkgdHJ1ZVxuaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaC0yNy0jZW5kaWZcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzU1PUJQRl9DQUxMXzMoYnBmX3Byb2JlX3dyaXRlX3VzZXIsIHZvaWQgX191c2VyICosIHVuc2FmZV9wdHIsIGNvbnN0IHZvaWQgKiwgc3JjLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjUtXHQgKlxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM2NjpcdCAqIG5taV91YWNjZXNzX29rYXkoKSBlbnN1cmVzIHRoZSBwcm9iZSBpcyBub3QgcnVuIGluIGFuIGludGVyaW1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjctXHQgKiBzdGF0ZSwgd2hlbiB0aGUgdGFzayBvciBtbSBhcmUgc3dpdGNoZWQuIFRoaXMgaXMgc3BlY2lmaWNhbGx5XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3My1cdFx0cmV0dXJuIC1FUEVSTTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNzQ6XHRpZiAodW5saWtlbHkoIW5taV91YWNjZXNzX29rYXkoKSkpXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc1LVx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz04NDc9c3RhdGljIGludCBicGZfc2VuZF9zaWduYWxfY29tbW9uKHUzMiBzaWcsIGVudW0gcGlkX3R5cGUgdHlwZSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1NjQgdmFsdWUpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTg3My1cdFx0cmV0dXJuIC1FUEVSTTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo4NzQ6XHQvKiBTaW5jZSBubWlfdWFjY2Vzc19va2F5KCkgaXMgb25seSBmb3IgdGhlIGN1cnJlbnRcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy04NzUtXHQgKiB0YXNrLCBjaGVjayBpZiB0YXNrIGlzIGN1cnJlbnQuXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtODc2LVx0ICovXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6ODc3Olx0aWYgKHRhc2sgPT0gY3VycmVudCBcdTAwMjZcdTAwMjYgdW5saWtlbHkoIW5taV91YWNjZXNzX29rYXkoKSkpXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtODc4LVx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbm1tL21hY2Nlc3MuYz0xMjA9bG9uZyBjb3B5X2Zyb21fdXNlcl9ub2ZhdWx0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgc2l6ZV90IHNpemUpXG4tLVxubW0vbWFjY2Vzcy5jLTEyNi1cbm1tL21hY2Nlc3MuYzoxMjc6XHRpZiAoIW5taV91YWNjZXNzX29rYXkoKSlcbm1tL21hY2Nlc3MuYy0xMjgtXHRcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk1OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aCBGdXp6aW5nOiBBIEJQRiBTaWduYWwgSW5qZWN0aW9uIEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYSBjaGFuZ2UgdG8gYGJwZl9zZW5kX3NpZ25hbF9jb21tb25gIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGF0IHdoZW4gYGJwZl9zZW5kX3NpZ25hbF90YXNrYCBpcyBjYWxsZWQgZnJvbSBhIGt3b3JrZXIgdGhyZWFkLCBhIHRyYWNlcG9pbnQsIG9yIHNvbWUgb3RoZXIgY29udGV4dCB3aGVyZSB0aGUgYGN1cnJlbnRgIHRhc2sgaXMgYSBrdGhyZWFkLCBgbm1pX3VhY2Nlc3Nfb2theSgpYCBmYWlscy4gVGhpcyBoYXBwZW5zIGJlY2F1c2Uga3RocmVhZHMgb24geDg2IGRvbiYjMzk7dCBoYXZlIGEgdmFsaWQgYGN1cnJlbnQtJmd0O21tYCBvciB0aGVpciBDUjMgaXMgZGlmZmVyZW50LCBhbmQgYXMgYSByZXN1bHQsIGBicGZfc2VuZF9zaWduYWxfdGFza2Agd2FzIGluY29ycmVjdGx5IHJldHVybmluZyAtRVBFUk0gZXZlbiB3aGVuIGl0IHNob3VsZCBoYXZlIHN1Y2NlZWRlZCBpbiBzZW5kaW5nIGEgc2lnbmFsIHRvIGEgdXNlciB0YXNrLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgdGhhdC4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGZ1enphYmxlPyBJIGhhdmUgYSBwcmV0dHkgY2xlYXIgY2hlY2tsaXN0IGluIG1pbmQuIERvZXMgaXQgYWZmZWN0IGNvcmUga2VybmVsIGxvZ2ljPyBDaGVjay4gVGhpcyBwYXRjaCBkaXJlY3RseSBtb2RpZmllcyB0aGUgQlBGIHRyYWNpbmcgaGVscGVyLCBzcGVjaWZpY2FsbHkgYGJwZl9zZW5kX3NpZ25hbF90YXNrYCB3aGljaCBpcyBhIGtmdW5jLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLiBJdCYjMzk7cyBmaXhpbmcgYSBidWcgdGhhdCBwcmV2ZW50ZWQgc2lnbmFsIHNlbmRpbmcgZnJvbSBCUEYgcHJvZ3JhbXMgdG8gb3RoZXIgdGFza3MsIGFuZCBJIGNhbiBlbnZpc2lvbiBhdHRhY2hpbmcgdGhhdCBCUEYgY29kZSB0byB0cmFjZXBvaW50cyBvciBrd29ya2VycyB3aGljaCBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUuCgpHaXZlbiBteSBjcml0ZXJpYSwgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIEkgbWVhbiwgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBCUEYgc2lnbmFsIGluamVjdGlvbiBwYXRoLCB3aGljaCwgaWYgbWlzaGFuZGxlZCwgY291bGQgYmUgcHJvYmxlbWF0aWMuCgpOb3csIGxldCBtZSBjaGVjayB0aGUgcmVsZXZhbnQgQ09ORklHIG9wdGlvbnMgYW5kIEZvY3VzU3ltYm9scyB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIHBhdGggaXMgYWN0dWFsbHkgZW5hYmxlZC4gTGV0IG1lIGZpbmQgYGtlcm5lbC90cmFjZS9NYWtlZmlsZWAgb3IgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgdG8gc2VlIHdoaWNoIGNvbmZpZyBvcHRpb25zIGVuYWJsZSBgYnBmX3RyYWNlLmNgLCBlc3BlY2lhbGx5IGBicGZfc2VuZF9zaWduYWxfdGFza2AuIE9uY2UgSSBrbm93IHRoYXQsIEkmIzM5O2xsIGJlIGluIGdvb2Qgc2hhcGUgdG8gc3RhcnQgcHJlcHBpbmcgYSBmdXp6aW5nIGNhbXBhaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhY2VcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvTWFrZWZpbGU9NTQ9S0NPVl9JTlNUUlVNRU5UX3RyYWNlX2lycXNvZmYubyA6PSBuXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNTUtXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6NTY6Q0ZMQUdTX2JwZl90cmFjZS5vIDo9IC1JJChzcmMpXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNTctXG4tLVxua2VybmVsL3RyYWNlL01ha2VmaWxlPTEwOT1vYmotJChDT05GSUdfVVNFUl9FVkVOVFMpICYjNDM7PSB0cmFjZV9ldmVudHNfdXNlci5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6MTEwOm9iai0kKENPTkZJR19CUEZfRVZFTlRTKSAmIzQzOz0gYnBmX3RyYWNlLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xMTEtb2JqLSQoQ09ORklHX0tQUk9CRV9FVkVOVFMpICYjNDM7PSB0cmFjZV9rcHJvYmUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE2MAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgS2NvbmZpZyBmb3IgQlBGX0VWRU5UUyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbnRhbCBtYXAgb2YgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgQlBGX0VWRU5UU2AuIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcGFydCBvZiB0aGUgc3RhbmRhcmQgQlBGIGluZnJhc3RydWN0dXJlLCBidXQgaXQmIzM5O3MgYWx3YXlzIHdpc2UgdG8gY29uZmlybSBhbmQgdW5kZXJzdGFuZCBpdHMgcHJlY2lzZSBsb2NhdGlvbiB3aXRoaW4gdGhlIEtjb25maWcgaGllcmFyY2h5LiBUaGlzIGlzIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCB3aGVyZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHRzIGFyZSBtYW5hZ2VkLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hldGhlciBpdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQsIHdoYXQgb3RoZXIgb3B0aW9ucyBpdCBtaWdodCBkZXBlbmQgb24gKGUuZy4sIGBDT05GSUdfQlBGYCwgYENPTkZJR19ERUJVR19JTkZPX0JURmApLCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGNvbnN0cmFpbnRzIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIGEgZmVhdHVyZSBmbGFnLCBhIGRlcGVuZGVuY3ksIG9yIGEgcGFydCBvZiBhIGxhcmdlciwgbW9yZSBjb21wbGV4IHN1YnN5c3RlbSBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIFRoZSBnb2FsIGlzIHRvIGVpdGhlciBjb25maXJtIG15IGFzc3VtcHRpb25zIHF1aWNrbHksIG9yLCBtb3JlIGltcG9ydGFudGx5LCBkaXNjb3ZlciBhbnkgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gcGl0ZmFsbHMgb3IgbnVhbmNlcyByZWxhdGVkIHRvIGBCUEZfRVZFTlRTYC4gSSBuZWVkIHRvIGhhdmUgYSBjb25jcmV0ZSBncmFzcCBvZiB0aGUgZmVhdHVyZSwgc28gSSBjYW4gY29udGludWUgd2l0aCB0aGUgdGFzayBhdCBoYW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0VWRU5UUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9ODM5PWNvbmZpZyBFUFJPQkVfRVZFTlRTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctODUyLVxua2VybmVsL3RyYWNlL0tjb25maWc6ODUzOmNvbmZpZyBCUEZfRVZFTlRTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NTQtXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTM0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIEtlcm5lbCBUcmFjZSBLY29uZmlnKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYGtlcm5lbC90cmFjZS9LY29uZmlnYC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB3aGF0JiMzOTtzIGdvaW5nIG9uIGFyb3VuZCBsaW5lIDg1My4gSSYjMzk7dmUgZ290IGEgaHVuY2ggYWJvdXQgc29tZXRoaW5nIHRoZXJlLCBsaWtlbHkgcmVsYXRlZCB0byBhIHBhcnRpY3VsYXIgdHJhY2luZyBmZWF0dXJlIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgaHVuY2ggaXMgY29ycmVjdCwgb3IgaWYgdGhlcmUmIzM5O3MgYSByZWxhdGVkIGRlcGVuZGVuY3kgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhhdCBmdW5jdGlvbi4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGlzIHNlY3Rpb24gb2YgdGhlIEtjb25maWcgZmlsZSBjb250cm9scyB0aGUgYnVpbGQgYW5kIGluY2x1c2lvbiBvZiBzcGVjaWZpYyB0cmFjaW5nIGNhcGFiaWxpdGllcyB3aXRoaW4gdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODUwOlx0XHQgIGNvbnZlcnQgdGhlIHR5cGUgb2YgYW4gZXZlbnQgZmllbGQuIEZvciBleGFtcGxlLCB0dXJuIGFuXG4gODUxOlx0XHQgIGFkZHJlc3MgaW50byBhIHN0cmluZy5cbiA4NTI6XHRcbiA4NTM6XHRjb25maWcgQlBGX0VWRU5UU1xuIDg1NDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuIDg1NTpcdFx0ZGVwZW5kcyBvbiAoS1BST0JFX0VWRU5UUyB8fCBVUFJPQkVfRVZFTlRTKSBcdTAwMjZcdTAwMjYgUEVSRl9FVkVOVFNcbiA4NTY6XHRcdGJvb2xcbiA4NTc6XHRcdGRlZmF1bHQgeVxuIDg1ODpcdFx0aGVscFxuIDg1OTpcdFx0ICBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBhdHRhY2ggQlBGIHByb2dyYW1zIHRvIGtwcm9iZSwgdXByb2JlLCBhbmRcbiA4NjA6XHRcdCAgdHJhY2Vwb2ludCBldmVudHMuXG4gODYxOlx0XG4gODYyOlx0Y29uZmlnIERZTkFNSUNfRVZFTlRTXG4gODYzOlx0XHRkZWZfYm9vbCBuXG4gODY0Olx0XG4gODY1Olx0Y29uZmlnIFBST0JFX0VWRU5UU1xuIDg2NjpcdFx0ZGVmX2Jvb2wgblxuIDg2NzpcdFxuIDg2ODpcdGNvbmZpZyBCUEZfS1BST0JFX09WRVJSSURFXG4gODY5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgcHJvZ3JhbXMgdG8gb3ZlcnJpZGUgYSBrcHJvYmVkIGZ1bmN0aW9uXCYjMzQ7XG4gODcwOlx0XHRkZXBlbmRzIG9uIEJQRl9FVkVOVFNcbiA4NzE6XHRcdGRlcGVuZHMgb24gRlVOQ1RJT05fRVJST1JfSU5KRUNUSU9OXG4gODcyOlx0XHRkZWZhdWx0IG5cbiA4NzM6XHRcdGhlbHBcbiA4NzQ6XHRcdCBBbGxvd3MgQlBGIHRvIG92ZXJyaWRlIHRoZSBleGVjdXRpb24gb2YgYSBwcm9iZWQgZnVuY3Rpb24gYW5kXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDc2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gQlBGIFNpZ25hbCBIYW5kbGluZyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nLCBiZXlvbmQgdGhlIGluaXRpYWwgaW52ZXN0aWdhdGlvbiwgd2Ugc2hvdWxkIGRvdWJsZS1jaGVjayBzb21ldGhpbmcgY3J1Y2lhbC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGlmIHRoZSBmdW5jdGlvbiBgYnBmX3NlbmRfc2lnbmFsX3Rhc2tgIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIGlzIHdyYXBwZWQgd2l0aGluIGFueSBwcmVwcm9jZXNzb3IgYCNpZmRlZmAgZGlyZWN0aXZlcy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgZ290Y2hhLCBhbmQgaXQgY291bGQgZHJhbWF0aWNhbGx5IGFsdGVyIGl0cyBhdmFpbGFiaWxpdHkgZGVwZW5kaW5nIG9uIHRoZSBrZXJuZWwgYnVpbGQgY29uZmlndXJhdGlvbi4gSSYjMzk7dmUgZ290IGEgaHVuY2ggaXQgbWlnaHQgYmUsIGFuZCBpZiBzbywgaXQmIzM5O3MgZ29pbmcgdG8gaW5mbHVlbmNlIG91ciBhbmFseXNpcyBncmVhdGx5LiBTbywgbGV0IG1lIGp1bXAgb3ZlciB0byBsaW5lIDM2MTYgaW4gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgYW5kIHRha2UgYSBnb29kIGxvb2sgYXJvdW5kIHRoYXQgYXJlYS4gTmVlZCB0byBzZWUgaWYgaXQmIzM5O3MgY29uZGl0aW9uYWxseSBjb21waWxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM2MTA6XHR7XG4zNjExOlx0XHRyZXR1cm4gc3RybmNweV9mcm9tX2tlcm5lbF9ub2ZhdWx0KGRzdCwgdW5zYWZlX3NyYywgc2l6ZSk7XG4zNjEyOlx0fVxuMzYxMzpcdFxuMzYxNDpcdF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbjM2MTU6XHRcbjM2MTY6XHRfX2JwZl9rZnVuYyBpbnQgYnBmX3NlbmRfc2lnbmFsX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgc2lnLCBlbnVtIHBpZF90eXBlIHR5cGUsXG4zNjE3Olx0XHRcdFx0XHQgICAgIHU2NCB2YWx1ZSlcbjM2MTg6XHR7XG4zNjE5Olx0XHRpZiAodHlwZSAhPSBQSURUWVBFX1BJRCBcdTAwMjZcdTAwMjYgdHlwZSAhPSBQSURUWVBFX1RHSUQpXG4zNjIwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzYyMTpcdFxuMzYyMjpcdFx0cmV0dXJuIGJwZl9zZW5kX3NpZ25hbF9jb21tb24oc2lnLCB0eXBlLCB0YXNrLCB2YWx1ZSk7XG4zNjIzOlx0fVxuMzYyNDpcdFxuMzYyNTpcdF9fYnBmX2tmdW5jIGludCBicGZfcHJvYmVfcmVhZF91c2VyX2R5bnB0cihjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZHB0ciwgdTY0IG9mZixcbjM2MjY6XHRcdFx0XHRcdFx0ICAgdTY0IHNpemUsIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24pXG4zNjI3Olx0e1xuMzYyODpcdFx0cmV0dXJuIF9fYnBmX2R5bnB0cl9jb3B5KGRwdHIsIG9mZiwgc2l6ZSwgKGNvbnN0IHZvaWQgX19mb3JjZSAqKXVuc2FmZV9wdHJfX2lnbixcbjM2Mjk6XHRcdFx0XHRcdCBjb3B5X3VzZXJfZGF0YV9ub2ZhdWx0LCBOVUxMKTtcbjM2MzA6XHR9XG4zNjMxOlx0XG4zNjMyOlx0X19icGZfa2Z1bmMgaW50IGJwZl9wcm9iZV9yZWFkX2tlcm5lbF9keW5wdHIoY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRwdHIsIHU2NCBvZmYsXG4zNjMzOlx0XHRcdFx0XHRcdCAgICAgdTY0IHNpemUsIGNvbnN0IHZvaWQgKnVuc2FmZV9wdHJfX2lnbilcbjM2MzQ6XHR7XG4zNjM1Olx0XHRyZXR1cm4gX19icGZfZHlucHRyX2NvcHkoZHB0ciwgb2ZmLCBzaXplLCB1bnNhZmVfcHRyX19pZ24sXG4zNjM2Olx0XHRcdFx0XHQgY29weV9rZXJuZWxfZGF0YV9ub2ZhdWx0LCBOVUxMKTtcbjM2Mzc6XHR9XG4zNjM4Olx0XG4zNjM5Olx0X19icGZfa2Z1bmMgaW50IGJwZl9wcm9iZV9yZWFkX3VzZXJfc3RyX2R5bnB0cihjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZHB0ciwgdTY0IG9mZixcbjM2NDA6XHRcdFx0XHRcdFx0ICAgICAgIHU2NCBzaXplLCBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduKVxuMzY0MTpcdHtcbjM2NDI6XHRcdHJldHVybiBfX2JwZl9keW5wdHJfY29weV9zdHIoZHB0ciwgb2ZmLCBzaXplLCAoY29uc3Qgdm9pZCBfX2ZvcmNlICopdW5zYWZlX3B0cl9faWduLFxuMzY0MzpcdFx0XHRcdFx0ICAgICBjb3B5X3VzZXJfc3RyX25vZmF1bHQsIE5VTEwpO1xuMzY0NDpcdH1cbjM2NDU6XHRcbjM2NDY6XHRfX2JwZl9rZnVuYyBpbnQgYnBmX3Byb2JlX3JlYWRfa2VybmVsX3N0cl9keW5wdHIoY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRwdHIsIHU2NCBvZmYsXG4zNjQ3Olx0XHRcdFx0XHRcdFx0IHU2NCBzaXplLCBjb25zdCB2b2lkICp1bnNhZmVfcHRyX19pZ24pXG4zNjQ4Olx0e1xuMzY0OTpcdFx0cmV0dXJuIF9fYnBmX2R5bnB0cl9jb3B5X3N0cihkcHRyLCBvZmYsIHNpemUsIHVuc2FmZV9wdHJfX2lnbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMjEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBEZXBlbmRlbmNpZXMgaW4gYGJwZl90cmFjZS5jYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBkZXBlbmRlbmNpZXMsIHNvIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBicGZfdHJhY2UuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGNsYXJpZnkgaWYgdGhlIGBrZnVuY3NgIHdpdGhpbiB0aGF0IGZpbGUgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIG9uIEJURiAoQlRGIGJlaW5nIGVzc2VudGlhbCBmb3IgdHlwZSBpbmZvcm1hdGlvbiBpbiBCUEYgcHJvZ3JhbXMpLCBvciBwb3NzaWJseSBvdGhlciBrZXJuZWwgY29uZmlndXJhdGlvbnMgbGlrZSBgQ09ORklHX0JQRl9TWVNDQUxMYCAod2hpY2ggZW5hYmxlcyB0aGUgQlBGIHN5c2NhbGwgaXRzZWxmKSBvciBgQ09ORklHX0RFQlVHX0lORk9fQlRGYCAod2hpY2ggaW1wYWN0cyB0aGUgYXZhaWxhYmlsaXR5IGFuZCBjb21wbGV0ZW5lc3Mgb2YgQlRGIGRhdGEpLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBwb3J0YWJpbGl0eSBhbmQgZW5zdXJpbmcgdGhpbmdzIHdvcmsgYXMgZXhwZWN0ZWQuCgpCZXlvbmQgdGhhdCwgSSBhbHNvIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYGJwZl9zZW5kX3NpZ25hbF90YXNrYCBmdW5jdGlvbi4gSXQmIzM5O3MgYSBrZXkgcHJpbWl0aXZlIGZvciBpbnRlci1wcm9jZXNzIHNpZ25hbGluZyB3aXRoaW4gQlBGIHByb2dyYW1zLCBzbyBrbm93aW5nIHdoZXJlIGl0JiMzOTtzIHJlZ2lzdGVyZWQgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc2lnbmFsIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9zZW5kX3NpZ25hbF90YXNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzYxND1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzYxNS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNjE2Ol9fYnBmX2tmdW5jIGludCBicGZfc2VuZF9zaWduYWxfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBzaWcsIGVudW0gcGlkX3R5cGUgdHlwZSxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjE3LVx0XHRcdFx0ICAgICB1NjQgdmFsdWUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTYyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIHRoZSBrZnVuYyBSZWdpc3RyYXRpb25zIGluIGJwZl90cmFjZS5jKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gYGJwZl90cmFjZS5jYCB0byB1bmRlcnN0YW5kIHRoZSBrZnVuYyByZWdpc3RyYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIEJURiAoQlBGIFR5cGUgRm9ybWF0KSBrZnVuYyBzZXQuIEkgd2FudCB0byBwaW5wb2ludCBleGFjdGx5IHdoZXJlIGFuZCBob3cgdGhlc2Uga2VybmVsIGZ1bmN0aW9ucyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoYXQgQlRGIGluZnJhc3RydWN0dXJlLiBJdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgQlBGIHZlcmlmaWVyIGhhbmRsZXMgdGhlc2UgZnVuY3Rpb24gY2FsbHMgYW5kIGhvdyB3ZSBleHBvc2UgdGhlbSB0byB1c2Vyc3BhY2UuIEkgbmVlZCB0byB0cmFjZSB0aGUgcmVnaXN0cmF0aW9uIHBvaW50cyB0byBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiBob3cga2Z1bmNzIGFyZSBtYWRlIGF2YWlsYWJsZSBmb3IgdXNlIGluIEJQRiBwcm9ncmFtcy4gVGhpcyBpbmNsdWRlcyBpZGVudGlmeWluZyB0aGUgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBtZWNoYW5pc21zIGludm9sdmVkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSByZWdpc3RyYXRpb24gbWVjaGFuaXNtcyB0byBzZWUgaG93IHRoZSBCVEYgaW5mb3JtYXRpb24gaXMgY29uc3RydWN0ZWQgYW5kIHBvcHVsYXRlZCwgYXMgd2VsbCBhcyBjb25zaWRlcmluZyBwb3RlbnRpYWwgaW1wYWN0cyBvbiB2ZXJpZmllciBwZXJmb3JtYW5jZSBhbmQga2Z1bmMgdXNhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM2NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzY1MDpcdFx0XHRcdFx0ICAgICBjb3B5X2tlcm5lbF9zdHJfbm9mYXVsdCwgTlVMTCk7XG4zNjUxOlx0fVxuMzY1MjpcdFxuMzY1MzpcdF9fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfZHlucHRyKGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpkcHRyLCB1NjQgb2ZmLFxuMzY1NDpcdFx0XHRcdFx0XHQgIHU2NCBzaXplLCBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduKVxuMzY1NTpcdHtcbjM2NTY6XHRcdHJldHVybiBfX2JwZl9keW5wdHJfY29weShkcHRyLCBvZmYsIHNpemUsIChjb25zdCB2b2lkIF9fZm9yY2UgKil1bnNhZmVfcHRyX19pZ24sXG4zNjU3Olx0XHRcdFx0XHQgY29weV91c2VyX2RhdGFfc2xlZXBhYmxlLCBOVUxMKTtcbjM2NTg6XHR9XG4zNjU5Olx0XG4zNjYwOlx0X19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9zdHJfZHlucHRyKGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpkcHRyLCB1NjQgb2ZmLFxuMzY2MTpcdFx0XHRcdFx0XHQgICAgICB1NjQgc2l6ZSwgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbilcbjM2NjI6XHR7XG4zNjYzOlx0XHRyZXR1cm4gX19icGZfZHlucHRyX2NvcHlfc3RyKGRwdHIsIG9mZiwgc2l6ZSwgKGNvbnN0IHZvaWQgX19mb3JjZSAqKXVuc2FmZV9wdHJfX2lnbixcbjM2NjQ6XHRcdFx0XHRcdCAgICAgY29weV91c2VyX3N0cl9zbGVlcGFibGUsIE5VTEwpO1xuMzY2NTpcdH1cbjM2NjY6XHRcbjM2Njc6XHRfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfZHlucHRyKGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpkcHRyLCB1NjQgb2ZmLFxuMzY2ODpcdFx0XHRcdFx0XHQgICAgICAgdTY0IHNpemUsIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24sXG4zNjY5Olx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbjM2NzA6XHR7XG4zNjcxOlx0XHRyZXR1cm4gX19icGZfZHlucHRyX2NvcHkoZHB0ciwgb2ZmLCBzaXplLCAoY29uc3Qgdm9pZCBfX2ZvcmNlICopdW5zYWZlX3B0cl9faWduLFxuMzY3MjpcdFx0XHRcdFx0IGNvcHlfdXNlcl9kYXRhX3NsZWVwYWJsZSwgdHNrKTtcbjM2NzM6XHR9XG4zNjc0Olx0XG4zNjc1Olx0X19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cl9keW5wdHIoY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRwdHIsIHU2NCBvZmYsXG4zNjc2Olx0XHRcdFx0XHRcdFx0ICAgdTY0IHNpemUsIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24sXG4zNjc3Olx0XHRcdFx0XHRcdFx0ICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4zNjc4Olx0e1xuMzY3OTpcdFx0cmV0dXJuIF9fYnBmX2R5bnB0cl9jb3B5X3N0cihkcHRyLCBvZmYsIHNpemUsIChjb25zdCB2b2lkIF9fZm9yY2UgKil1bnNhZmVfcHRyX19pZ24sXG4zNjgwOlx0XHRcdFx0XHQgICAgIGNvcHlfdXNlcl9zdHJfc2xlZXBhYmxlLCB0c2spO1xuMzY4MTpcdH1cbjM2ODI6XHRcbjM2ODM6XHRfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuMzY4NDpcdFxuMzY4NTpcdCNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUykgXHUwMDI2XHUwMDI2IFxcXG4zNjg2Olx0ICAgIGRlZmluZWQoQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTKVxuMzY4NzpcdFxuMzY4ODpcdHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4zNjg5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU5OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBrZnVuYyBCVEYgSUQgU2V0KioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIHRoZSBrZnVuYyBCVEYgSUQgc2V0IGlzIGFjdHVhbGx5IGRlZmluZWQgYW5kL29yIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBzdGFydCBwb2tpbmcgYXJvdW5kIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBJdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSwgZ2l2ZW4gdGhlIGNvbnRleHQgb2YgQlBGIGFuZCB0cmFjaW5nLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciB0aGUgc2V0JiMzOTtzIGRlY2xhcmF0aW9uLCBpdHMgaW5pdGlhbGl6YXRpb24sIGFuZCBpbXBvcnRhbnRseSwgdGhlIG1lY2hhbmlzbXMgcmVzcG9uc2libGUgZm9yIHBvcHVsYXRpbmcgYW5kIHVzaW5nIHRoaXMgZGF0YSBzdHJ1Y3R1cmUuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgQlRGIElEcyBmb3Iga2Z1bmNzIGFyZSBsaW5rZWQgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBrZXJuZWwgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGNvZGViYXNlLiBJdCB3aWxsIGJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGlzIGEgY2VudHJhbGl6ZWQgcmVnaXN0cmF0aW9uIG9yIG1hbmFnZW1lbnQgcHJvY2VzcyBoYXBwZW5pbmcuIEVzc2VudGlhbGx5LCBJIG5lZWQgdG8gc2VlIHRoZSBsaWZlY3ljbGUgb2YgdGhhdCBrZnVuYyBCVEYgSUQgc2V0IGZyb20gY3JlYXRpb24gdG8gdXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzQ2Mj1zdGF0aWMgaW50IF9faW5pdCBicGZfdHJhY2Vfa2Z1bmNzX2luaXQodm9pZClcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzQ2NS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNDY2Olx0ZXJyID0gZXJyID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9LUFJPQkUsIFx1MDAyNmJwZl9zZXNzaW9uX2tmdW5jX3NldCk7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzQ2NzpcdGVyciA9IGVyciA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2YnBmX3Nlc3Npb25fa2Z1bmNfc2V0KTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNDY4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDA0OAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuCgoqKlRyYWNpbmcgRG93biB0aGUgQlBGIFNpZ25hbCBQYXRoKioKCkFscmlnaHQsIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBicGZfc2VuZF9zaWduYWxfdGFza2AgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZyb20uIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byBjaGVjayB0aGUgQlBGIHRyYWNlcG9pbnQgaW5pdGlhbGl6YXRpb24sIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYnBmX3RyYWNlX2tmdW5jc19pbml0YCBvciBwb3RlbnRpYWxseSB0aGUgQlRGX1NFVDggaW4gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AuIEJ1dCB0aGF0JiMzOTtzIGp1c3QgYSBzdGFydGluZyBwb2ludC4gVG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIGl0JiMzOTtzIGFjdHVhbGx5IHVzZWQgd2l0aGluIHRoZSBrZXJuZWwsIEkgbmVlZCB0byBkbyBhIGJyb2FkZXIgc2VhcmNoLiBUaW1lIHRvIGZpcmUgdXAgYSBncmVwIGFjcm9zcyB0aGUgZW50aXJlIGNvZGViYXNlIGFuZCBsb29rIGZvciBldmVyeSBpbnN0YW5jZSBvZiBgYnBmX3NlbmRfc2lnbmFsX3Rhc2tgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBsYXkgb2YgdGhlIGxhbmQgYW5kIHBpbnBvaW50IHRoZSBjcml0aWNhbCBjYWxsIHNpdGVzLiBIb3BlZnVsbHksIHRoYXQgZ2l2ZXMgbWUgdGhlIGNvbnRleHQgSSBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc2VuZF9zaWduYWxfdGFzayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hlbHBlcnMuYz00ODU0PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGhyb3cpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODU1LSNpZmRlZiBDT05GSUdfQlBGX0VWRU5UU1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDg1NjpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NlbmRfc2lnbmFsX3Rhc2spXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODU3LSNlbmRpZlxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zNjE0PV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjE1LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM2MTY6X19icGZfa2Z1bmMgaW50IGJwZl9zZW5kX3NpZ25hbF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IHNpZywgZW51bSBwaWRfdHlwZSB0eXBlLFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM2MTctXHRcdFx0XHQgICAgIHU2NCB2YWx1ZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmM9OD12b2lkIGJwZl90YXNrX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmM6OTppbnQgYnBmX3NlbmRfc2lnbmFsX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgc2lnLCBlbnVtIHBpZF90eXBlIHR5cGUsIHU2NCB2YWx1ZSkgX19rc3ltO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jLTEwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uYz0xMz1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBicGZfc2VuZF9zaWduYWxfdGVzdCh2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jLTMxLVx0XHRcdGlmICh0YXJnZXRfcGlkKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jOjMyOlx0XHRcdFx0cmV0ID0gYnBmX3NlbmRfc2lnbmFsX3Rhc2sodGFyZ2V0X3Rhc2ssIHNpZywgUElEVFlQRV9QSUQsIHZhbHVlKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uYy0zMy1cdFx0XHRlbHNlXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jLTM2LVx0XHRcdGlmICh0YXJnZXRfcGlkKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jOjM3Olx0XHRcdFx0cmV0ID0gYnBmX3NlbmRfc2lnbmFsX3Rhc2sodGFyZ2V0X3Rhc2ssIHNpZywgUElEVFlQRV9UR0lELCB2YWx1ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmMtMzgtXHRcdFx0ZWxzZVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uYz02OD1pbnQgc2VuZF9zaWduYWxfa3dvcmtlcih2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jLTc5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jOjgwOlx0cmV0ID0gYnBmX3NlbmRfc2lnbmFsX3Rhc2sodGFyZ2V0X3Rhc2ssIHNpZywgUElEVFlQRV9UR0lELCA4KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uYy04MS1cdGJwZl90YXNrX3JlbGVhc2UodGFyZ2V0X3Rhc2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE0OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBgYnBmX3NlbmRfc2lnbmFsX3Rhc2tgIEZ1bmN0aW9uJiMzOTtzIEF2YWlsYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGJwZl9zZW5kX3NpZ25hbF90YXNrYCB3aXRoaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gaG93IGl0cyBjb21waWxhdGlvbiBpcyBjb250cm9sbGVkOyBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIHByb3RlY3RlZCBieSBhbiBgI2lmZGVmIENPTkZJR19CUEZfRVZFTlRTYC4gVGltZSB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHNlZSwgYEJQRl9FVkVOVFNgIG5lZWRzIGBCUEZfU1lTQ0FMTGAsIGFuZCBlaXRoZXIgYFBFUkZfRVZFTlRTYCBhbG9uZyB3aXRoIGVpdGhlciBgS1BST0JFX0VWRU5UU2Agb3IgYFVQUk9CRV9FVkVOVFNgLiBHb3QgaXQuCgpOb3csIGEgbmFnZ2luZyBmZWVsaW5nIHRlbGxzIG1lIHRoZXJlJiMzOTtzIHNvbWV0aGluZyBhYm91dCBCVEYgcmVxdWlyZWQgZm9yIGtmdW5jcywgc28gSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBDT05GSUdfREVCVUdfSU5GT19CVEZgLiBJIHNob3VsZCBjaGVjayBpZiBCVEYgaXMsIGluIGZhY3QsIHJlcXVpcmVkIGZvciBrZnVuY3MuIEkgY2FuJiMzOTt0IHF1aXRlIHJlY2FsbCBpZiBpdCYjMzk7cyBzdHJpY3RseSBhIGRlcGVuZGVuY3kgb3IganVzdCBhIGdvb2QtdG8taGF2ZSwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LgoKQWxyaWdodCwgSSYjMzk7bGwgZ28gY2hlY2sgYGtlcm5lbC9icGYvaGVscGVycy5jYCBhcm91bmQgbGluZSA0ODUwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGVscGVycy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDg0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0ODQwOlx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yYnRyZWVfcm9vdCwgS0ZfUkVUX05VTEwgfCBLRl9TUElOTE9DS19TQUZFKVxuNDg0MTpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmJ0cmVlX2xlZnQsIEtGX1JFVF9OVUxMIHwgS0ZfU1BJTkxPQ0tfU0FGRSlcbjQ4NDI6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JidHJlZV9yaWdodCwgS0ZfUkVUX05VTEwgfCBLRl9TUElOTE9DS19TQUZFKVxuNDg0MzpcdFxuNDg0NDpcdCNpZmRlZiBDT05GSUdfQ0dST1VQU1xuNDg0NTpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY2dyb3VwX2FjcXVpcmUsIEtGX0FDUVVJUkUgfCBLRl9SQ1UgfCBLRl9SRVRfTlVMTClcbjQ4NDY6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2Nncm91cF9yZWxlYXNlLCBLRl9SRUxFQVNFKVxuNDg0NzpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY2dyb3VwX2FuY2VzdG9yLCBLRl9BQ1FVSVJFIHwgS0ZfUkNVIHwgS0ZfUkVUX05VTEwpXG40ODQ4Olx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jZ3JvdXBfZnJvbV9pZCwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKVxuNDg0OTpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGFza191bmRlcl9jZ3JvdXAsIEtGX1JDVSlcbjQ4NTA6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rhc2tfZ2V0X2Nncm91cDEsIEtGX0FDUVVJUkUgfCBLRl9SQ1UgfCBLRl9SRVRfTlVMTClcbjQ4NTE6XHQjZW5kaWZcbjQ4NTI6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rhc2tfZnJvbV9waWQsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTClcbjQ4NTM6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rhc2tfZnJvbV92cGlkLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwpXG40ODU0Olx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90aHJvdylcbjQ4NTU6XHQjaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcbjQ4NTY6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NlbmRfc2lnbmFsX3Rhc2spXG40ODU3Olx0I2VuZGlmXG40ODU4Olx0I2lmZGVmIENPTkZJR19LRVlTXG40ODU5Olx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9sb29rdXBfdXNlcl9rZXksIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTCB8IEtGX1NMRUVQQUJMRSlcbjQ4NjA6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2xvb2t1cF9zeXN0ZW1fa2V5LCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwpXG40ODYxOlx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZXlfcHV0LCBLRl9SRUxFQVNFKVxuNDg2MjpcdCNpZmRlZiBDT05GSUdfU1lTVEVNX0RBVEFfVkVSSUZJQ0FUSU9OXG40ODYzOlx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl92ZXJpZnlfcGtjczdfc2lnbmF0dXJlLCBLRl9TTEVFUEFCTEUpXG40ODY0Olx0I2VuZGlmXG40ODY1Olx0I2VuZGlmXG40ODY2Olx0I2lmZGVmIENPTkZJR19TMzkwXG40ODY3Olx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfbG93Y29yZSlcbjQ4Njg6XHQjZW5kaWZcbjQ4Njk6XHRCVEZfS0ZVTkNTX0VORChnZW5lcmljX2J0Zl9pZHMpXG40ODcwOlx0XG40ODcxOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGdlbmVyaWNfa2Z1bmNfc2V0ID0ge1xuNDg3MjpcdFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG40ODczOlx0XHQuc2V0ICAgPSBcdTAwMjZnZW5lcmljX2J0Zl9pZHMsXG40ODc0Olx0fTtcbjQ4NzU6XHRcbjQ4NzY6XHRCVEZfSURfTElTVChnZW5lcmljX2R0b3JfaWRzKVxuNDg3NzpcdEJURl9JRChzdHJ1Y3QsIHRhc2tfc3RydWN0KVxuNDg3ODpcdEJURl9JRChmdW5jLCBicGZfdGFza19yZWxlYXNlX2R0b3IpXG40ODc5Olx0I2lmZGVmIENPTkZJR19DR1JPVVBTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTMwCgkJCQkJCQlvdXRwdXQ6IDE0NQoJCQkJCQkJdGhvdWdodHM6IDYwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBgYnBmX3NlbmRfc2lnbmFsX3Rhc2tgIGFuZCBSZWxldmFudCBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYGJwZl9zZW5kX3NpZ25hbF90YXNrYCBpcyBhIG5vbi1zdGF0aWMga2VybmVsIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBpdCBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHNpZ25hbCBkZWxpdmVyeS4gSSBzZWUgdGhhdCBgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbmAgaXMgc3RhdGljLCB3aGljaCBpcyBnb29kIHRvIGtub3csIGFuZCBgYnBmX3NlbmRfc2lnbmFsYCBhbmQgYGJwZl9zZW5kX3NpZ25hbF90aHJlYWRgIGJvdGggY2FsbCBgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbmAuIEhvd2V2ZXIsIGltcG9ydGFudGx5LCB0aGVzZSBsYXR0ZXIgdHdvIHBhc3MgYE5VTExgIGFzIHRoZSBgdGFza2AgYXJndW1lbnQsIHdoaWNoIHJlc29sdmVzIHRvIHRoZSBjdXJyZW50IHRhc2suCgpOb3csIGBicGZfc2VuZF9zaWduYWxfdGFza2AgaXMgdGhlIGNyaXRpY2FsIGtmdW5jIGhlcmUgYmVjYXVzZSBpdCBhbGxvd3MgZGlyZWN0IHNpZ25hbCBkZWxpdmVyeSB0byAqYW55KiBgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrYCwgbm90IGp1c3QgdGhlIGN1cnJlbnQgb25lLiBUaGlzIGlzIGtleSwgZXNwZWNpYWxseSBiZWNhdXNlIGl0IHJlbGF0ZXMgZGlyZWN0bHkgdG8gdGhhdCBgbm1pX3VhY2Nlc3Nfb2theSgpYCBjaGVjayB0aGF04oCZcyBhdCB0aGUgaGVhcnQgb2YgdGhpcyBwcm9ibGVtIHdoZW4gYHRhc2sgIT0gY3VycmVudGAuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGVudGlyZSByZWFzb24gdGhlIGZpeCBmb3IgdGhhdCBzcGVjaWZpYyBzaWduYWwgZGVsaXZlcnkgaXNzdWUgaXMgdmFsdWFibGUuCgpOZXh0LCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbnMuIGBCUEZfRVZFTlRTYCwgYEJQRl9TWVNDQUxMYCwgYERFQlVHX0lORk9fQlRGYCwgYFBFUkZfRVZFTlRTYCwgYW5kIGBLUFJPQkVfRVZFTlRTYCBhcmUgYWxsIHJlbGV2YW50LiBMb29raW5nIGF0IGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AsIGl0JiMzOTtzIGNsZWFyIHRoYXQgZW5hYmxpbmcgYEJQRl9TWVNDQUxMYCwgYFBFUkZfRVZFTlRTYCwgYW5kIGBLUFJPQkVfRVZFTlRTYCAob3IgYEJQRl9FVkVOVFNgKSBpcyByZXF1aXJlZC4gVGhpcyBpcyBlc3NlbnRpYWwgZm9yIHRoZSBmdW5jdGlvbmFsaXR5IG9mIEJQRi1iYXNlZCBzaWduYWwgZGVsaXZlcnkuCgpTbywgbGV0JiMzOTtzIHN1bW1hcml6ZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zOiBgQlBGX1NZU0NBTExgLCBgQlBGX0VWRU5UU2AsIGFuZCBgREVCVUdfSU5GT19CVEZgLgoKVGhlcmVmb3JlLCB0aGUgdmVyZGljdCBpcyBgV29ydGhGdXp6aW5nOiB0cnVlYCwgYmVjYXVzZSBvZiB0aGUgZm9jdXMgb24gYGJwZl9zZW5kX3NpZ25hbF90YXNrYCwgYW5kIGFsbCB0aGF0IG1ha2VzIGl0IGludGVyZXN0aW5nIHRvIGZ1enogYW5kIGJlY2F1c2UgdGhlIEJQRiBjb25maWd1cmF0aW9ucyBhcmUgYXBwcm9wcmlhdGUgZm9yIHRoaXMgdHlwZSBvZiB0ZXN0LiBJIGFtIHJlYWR5IHRvIGNhbGwgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfRVZFTlRTJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NlbmRfc2lnbmFsX3Rhc2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbigpIHRvIG9ubHkgZW5mb3JjZSBubWlfdWFjY2Vzc19va2F5KCkgd2hlbiB0aGUgdGFyZ2V0IHRhc2sgaXMgY3VycmVudC4gVGhpcyBlbmFibGVzIEJQRiBwcm9ncmFtcyAoc3VjaCBhcyB0aG9zZSBydW5uaW5nIGluIGt3b3JrZXIvdHJhY2Vwb2ludCBjb250ZXh0KSB0byBzdWNjZXNzZnVsbHkgaW52b2tlIHRoZSBicGZfc2VuZF9zaWduYWxfdGFzayBrZnVuYyBvbiBub24tY3VycmVudCB0YXNrcy4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIGtlcm5lbCBleGVjdXRpb24gbG9naWMgZm9yIEJQRiBzaWduYWwgZGVsaXZlcnkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc2VuZF9zaWduYWxfdGFzayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBicGZfc2VuZF9zaWduYWxfY29tbW9uKCkgdG8gb25seSBlbmZvcmNlIG5taV91YWNjZXNzX29rYXkoKSB3aGVuIHRoZSB0YXJnZXQgdGFzayBpcyBjdXJyZW50LiBUaGlzIGVuYWJsZXMgQlBGIHByb2dyYW1zIChzdWNoIGFzIHRob3NlIHJ1bm5pbmcgaW4ga3dvcmtlci90cmFjZXBvaW50IGNvbnRleHQpIHRvIHN1Y2Nlc3NmdWxseSBpbnZva2UgdGhlIGJwZl9zZW5kX3NpZ25hbF90YXNrIGtmdW5jIG9uIG5vbi1jdXJyZW50IHRhc2tzLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMga2VybmVsIGV4ZWN1dGlvbiBsb2dpYyBmb3IgQlBGIHNpZ25hbCBkZWxpdmVyeS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGEgY2hlY2sgaW4gYGJwZl9zZW5kX3NpZ25hbF9jb21tb24oKWAgc28gdGhhdCBgbm1pX3VhY2Nlc3Nfb2theSgpYCBpcyBvbmx5IGV2YWx1YXRlZCB3aGVuIGB0YXNrID09IGN1cnJlbnRgLCBhbGxvd2luZyBCUEYgcHJvZ3JhbXMgcnVubmluZyBpbiBrdGhyZWFkL2t3b3JrZXIgY29udGV4dCB0byBzZW5kIHNpZ25hbHMgdG8gb3RoZXIgdGFyZ2V0IHRhc2tzIHZpYSBgYnBmX3NlbmRfc2lnbmFsX3Rhc2soKWAuIEl0IGFsc28gYWRkcyBhIEJQRiBzZWxmdGVzdC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgbGVuZ3RocywgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGNvcHktdG8tdXNlciBvcGVyYXRpb25zLiBBbnkgcmVsYXRlZCB0YXNrIGxpZmV0aW1lIG9yIHJlZmVyZW5jZSBjb3VudGluZyBjb25jZXJucyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCB0cmFja2luZy4gQXMgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTZkNjRmMjNkM2JmOThhNDAxZjk0NThmNmE4ZDhjZWMyNWNhMmRhNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTA6Mzk6MTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMKaW5kZXggMjkyNjA5NTFhYTg3MS4uZjdhNDFmMjIyNTk5OSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYwpAQCAtODcxLDcgJiM0Mzs4NzEsMTAgQEAgc3RhdGljIGludCBicGZfc2VuZF9zaWduYWxfY29tbW9uKHUzMiBzaWcsIGVudW0gcGlkX3R5cGUgdHlwZSwgc3RydWN0IHRhc2tfc3RydWMKIAkgKi8KIAlpZiAodW5saWtlbHkodGFzay0mZ3Q7ZmxhZ3MgJmFtcDsgKFBGX0tUSFJFQUQgfCBQRl9FWElUSU5HKSkpCiAJCXJldHVybiAtRVBFUk07Ci0JaWYgKHVubGlrZWx5KCFubWlfdWFjY2Vzc19va2F5KCkpKQomIzQzOwkvKiBTaW5jZSBubWlfdWFjY2Vzc19va2F5KCkgaXMgb25seSBmb3IgdGhlIGN1cnJlbnQKJiM0MzsJICogdGFzaywgY2hlY2sgaWYgdGFzayBpcyBjdXJyZW50LgomIzQzOwkgKi8KJiM0MzsJaWYgKHRhc2sgPT0gY3VycmVudCAmYW1wOyZhbXA7IHVubGlrZWx5KCFubWlfdWFjY2Vzc19va2F5KCkpKQogCQlyZXR1cm4gLUVQRVJNOwogCS8qIFRhc2sgc2hvdWxkIG5vdCBiZSBwaWQ9MSB0byBhdm9pZCBrZXJuZWwgcGFuaWMuICovCiAJaWYgKHVubGlrZWx5KGlzX2dsb2JhbF9pbml0KHRhc2spKSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlbmRfc2lnbmFsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZW5kX3NpZ25hbC5jCmluZGV4IDdhYzRkNWE0ODhhYTUuLmY5ZGQyM2RiMWVmOTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlbmRfc2lnbmFsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VuZF9zaWduYWwuYwpAQCAtMjYxLDYgJiM0MzsyNjEsMTA4IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2VuZF9zaWduYWxfbm1pKGJvb2wgc2lnbmFsX3RocmVhZCwgYm9vbCByZW1vdGUpCiAJdGVzdF9zZW5kX3NpZ25hbF9jb21tb24oJmFtcDthdHRyLCBzaWduYWxfdGhyZWFkLCByZW1vdGUpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zZW5kX3NpZ25hbF9rd29ya2VyKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGVzdF9zZW5kX3NpZ25hbF9rZXJuICpza2VsOwomIzQzOwlpbnQgcGlwZV9jMnBbMl0sIHBpcGVfcDJjWzJdOwomIzQzOwlzdHJ1Y3Qgc2lnYWN0aW9uIHNhID0ge307CiYjNDM7CWNoYXIgYnVmWzI1Nl07CiYjNDM7CWludCBlcnIgPSAtMTsKJiM0MzsJcGlkX3QgcGlkOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhwaXBlKHBpcGVfYzJwKSwgJiMzNDtwaXBlX2MycCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0socGlwZShwaXBlX3AyYyksICYjMzQ7cGlwZV9wMmMmIzM0OykpIHsKJiM0MzsJCWNsb3NlKHBpcGVfYzJwWzBdKTsKJiM0MzsJCWNsb3NlKHBpcGVfYzJwWzFdKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlwaWQgPSBmb3JrKCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKHBpZCwgMCwgJiMzNDtmb3JrJiMzNDspKSB7CiYjNDM7CQljbG9zZShwaXBlX2MycFswXSk7CiYjNDM7CQljbG9zZShwaXBlX2MycFsxXSk7CiYjNDM7CQljbG9zZShwaXBlX3AyY1swXSk7CiYjNDM7CQljbG9zZShwaXBlX3AyY1sxXSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHBpZCA9PSAwKSB7CiYjNDM7CQkvKiBpbnN0YWxsIHNpZ25hbCBoYW5kbGVyIGFuZCBub3RpZnkgcGFyZW50ICovCiYjNDM7CQlzYS5zYV9zaWdhY3Rpb24gPSBzaWd1c3IxX3NpZ2luZm9faGFuZGxlcjsKJiM0MzsJCXNhLnNhX2ZsYWdzID0gU0FfUkVTVEFSVCB8IFNBX1NJR0lORk87CiYjNDM7CQlBU1NFUlRfTkVRKHNpZ2FjdGlvbihTSUdVU1IxLCAmYW1wO3NhLCBOVUxMKSwgLTEsICYjMzQ7c2lnYWN0aW9uJiMzNDspOwomIzQzOwomIzQzOwkJY2xvc2UocGlwZV9jMnBbMF0pOyAvKiBjbG9zZSByZWFkICovCiYjNDM7CQljbG9zZShwaXBlX3AyY1sxXSk7IC8qIGNsb3NlIHdyaXRlICovCiYjNDM7CiYjNDM7CQkvKiBub3RpZnkgcGFyZW50IHNpZ25hbCBoYW5kbGVyIGlzIGluc3RhbGxlZCAqLwomIzQzOwkJQVNTRVJUX0VRKHdyaXRlKHBpcGVfYzJwWzFdLCBidWYsIDEpLCAxLCAmIzM0O3BpcGVfd3JpdGUmIzM0Oyk7CiYjNDM7CiYjNDM7CQkvKiBtYWtlIHN1cmUgcGFyZW50IGVuYWJsZWQgYnBmIHByb2dyYW0gdG8gc2VuZF9zaWduYWwgKi8KJiM0MzsJCUFTU0VSVF9FUShyZWFkKHBpcGVfcDJjWzBdLCBidWYsIDEpLCAxLCAmIzM0O3BpcGVfcmVhZCYjMzQ7KTsKJiM0MzsKJiM0MzsJCS8qIHRoZSBzaWduYWwgaXMgc2VudCBmcm9tIHdvcmtxdWV1ZSBjb250ZXh0LCBzbyBub3RoaW5nIGhhcwomIzQzOwkJICogdG8gYmUgdHJpZ2dlcmVkIGZyb20gaGVyZQomIzQzOwkJICovCiYjNDM7CQl3aGlsZSAoIXNpZ3VzcjFfcmVjZWl2ZWQpCiYjNDM7CQkJc2xlZXAoMSk7CiYjNDM7CiYjNDM7CQlidWZbMF0gPSBzaWd1c3IxX3JlY2VpdmVkOwomIzQzOwomIzQzOwkJQVNTRVJUX0VRKHNpZ3VzcjFfcmVjZWl2ZWQsIDgsICYjMzQ7c2lndXNyMV9yZWNlaXZlZCYjMzQ7KTsKJiM0MzsJCUFTU0VSVF9FUSh3cml0ZShwaXBlX2MycFsxXSwgYnVmLCAxKSwgMSwgJiMzNDtwaXBlX3dyaXRlJiMzNDspOwomIzQzOwomIzQzOwkJY2xvc2UocGlwZV9jMnBbMV0pOwomIzQzOwkJY2xvc2UocGlwZV9wMmNbMF0pOwomIzQzOwkJZXhpdCgwKTsKJiM0MzsJfQomIzQzOwomIzQzOwljbG9zZShwaXBlX2MycFsxXSk7IC8qIGNsb3NlIHdyaXRlICovCiYjNDM7CWNsb3NlKHBpcGVfcDJjWzBdKTsgLyogY2xvc2UgcmVhZCAqLwomIzQzOwomIzQzOwlza2VsID0gdGVzdF9zZW5kX3NpZ25hbF9rZXJuX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3NrZWxfb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCWdvdG8gc2tlbF9vcGVuX2xvYWRfZmFpbHVyZTsKJiM0MzsKJiM0MzsJLyogd2FpdCB1bnRpbCBjaGlsZCBzaWduYWwgaGFuZGxlciBpbnN0YWxsZWQgKi8KJiM0MzsJQVNTRVJUX0VRKHJlYWQocGlwZV9jMnBbMF0sIGJ1ZiwgMSksIDEsICYjMzQ7cGlwZV9yZWFkJiMzNDspOwomIzQzOwomIzQzOwkvKiBwaWQgPT0gMCBrZWVwcyB0aGUgb3RoZXIgcHJvZ3JhbXMgb2YgdGhpcyBza2VsZXRvbiBpbmFjdGl2ZSAqLwomIzQzOwlza2VsLSZndDtic3MtJmd0O3BpZCA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7c2lnID0gU0lHVVNSMTsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDt0YXJnZXRfcGlkID0gcGlkOwomIzQzOwomIzQzOwllcnIgPSB0ZXN0X3NlbmRfc2lnbmFsX2tlcm5fX2F0dGFjaChza2VsKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3NrZWxfYXR0YWNoJiMzNDspKSB7CiYjNDM7CQllcnIgPSAtMTsKJiM0MzsJCWdvdG8gZGVzdHJveV9za2VsOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIG5vdGlmeSBjaGlsZCB0aGF0IGJwZiBwcm9ncmFtIGNhbiBzZW5kX3NpZ25hbCBub3cgKi8KJiM0MzsJQVNTRVJUX0VRKHdyaXRlKHBpcGVfcDJjWzFdLCBidWYsIDEpLCAxLCAmIzM0O3BpcGVfd3JpdGUmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIHdhaXQgZm9yIHJlc3VsdCwgd29ya3F1ZXVlcyBydW4gb24gdGhlaXIgb3duICovCiYjNDM7CWVyciA9IHJlYWRfd2l0aF90aW1lb3V0KHBpcGVfYzJwWzBdLCBidWYsIDEsIDEwICogMTAwMCAqIDEwMDApOwomIzQzOwlpZiAoIUFTU0VSVF9HVChlcnIsIDAsICYjMzQ7cmVhZGluZyBwaXBlJiMzNDspKQomIzQzOwkJZ290byBkZXN0cm95X3NrZWw7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShidWZbMF0sIDgsICYjMzQ7aW5jb3JyZWN0IHJlc3VsdCYjMzQ7KTsKJiM0MzsKJiM0MztkZXN0cm95X3NrZWw6CiYjNDM7CXRlc3Rfc2VuZF9zaWduYWxfa2Vybl9fZGVzdHJveShza2VsKTsKJiM0Mztza2VsX29wZW5fbG9hZF9mYWlsdXJlOgomIzQzOwljbG9zZShwaXBlX2MycFswXSk7CiYjNDM7CWNsb3NlKHBpcGVfcDJjWzFdKTsKJiM0MzsJLyoKJiM0MzsJICogQ2hpbGQgaXMgZWl0aGVyIGFib3V0IHRvIGV4aXQgY2xlYW5seSBvciBzdHVjayBpbiBjYXNlIG9mIGVycm9ycy4KJiM0MzsJICogTnVkZ2UgaXQgdG8gZXhpdC4KJiM0MzsJICovCiYjNDM7CWtpbGwocGlkLCBTSUdLSUxMKTsKJiM0MzsJd2FpdChOVUxMKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHRlc3Rfc2VuZF9zaWduYWwodm9pZCkKIHsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3NlbmRfc2lnbmFsX3RyYWNlcG9pbnQmIzM0OykpCkBAIC0yODksNCAmIzQzOzM5MSw2IEBAIHZvaWQgdGVzdF9zZW5kX3NpZ25hbCh2b2lkKQogCQl0ZXN0X3NlbmRfc2lnbmFsX3BlcmYodHJ1ZSwgdHJ1ZSk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzZW5kX3NpZ25hbF9ubWlfdGhyZWFkX3JlbW90ZSYjMzQ7KSkKIAkJdGVzdF9zZW5kX3NpZ25hbF9ubWkodHJ1ZSwgdHJ1ZSk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7c2VuZF9zaWduYWxfa3dvcmtlciYjMzQ7KSkKJiM0MzsJCXRlc3Rfc2VuZF9zaWduYWxfa3dvcmtlcigpOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jCmluZGV4IDE3NmEzNTVlMzA2MjQuLmQxYzAwMGMzMDg4NTcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmMKQEAgLTYwLDYgJiM0Mzs2MCwzMiBAQCBpbnQgc2VuZF9zaWduYWxfdHBfc2NoZWQodm9pZCAqY3R4KQogCXJldHVybiBicGZfc2VuZF9zaWduYWxfdGVzdChjdHgpOwogfQogCiYjNDM7LyogU2VuZCBhIHNpZ25hbCB0byBhIHRhc2sgb3RoZXIgdGhhbiBjdXJyZW50LCBmcm9tIGEgY29udGV4dCB3aGVyZSBjdXJyZW50CiYjNDM7ICogaXMgYSBrZXJuZWwgdGhyZWFkLiBObyBmaWx0ZXJpbmcgb24gY3VycmVudCBpcyBwb3NzaWJsZSBoZXJlLCBzbyB0aGlzIGlzCiYjNDM7ICogZHJpdmVuIGVudGlyZWx5IGJ5IHRhcmdldF9waWQuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7dHBfYnRmL3dvcmtxdWV1ZV9leGVjdXRlX3N0YXJ0JiMzNDspCiYjNDM7aW50IHNlbmRfc2lnbmFsX2t3b3JrZXIodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXRfdGFzazsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHN0YXR1cyAhPSAwIHx8IHRhcmdldF9waWQgPT0gMCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl0YXJnZXRfdGFzayA9IGJwZl90YXNrX2Zyb21fcGlkKHRhcmdldF9waWQpOwomIzQzOwlpZiAoIXRhcmdldF90YXNrKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldCA9IGJwZl9zZW5kX3NpZ25hbF90YXNrKHRhcmdldF90YXNrLCBzaWcsIFBJRFRZUEVfVEdJRCwgOCk7CiYjNDM7CWJwZl90YXNrX3JlbGVhc2UodGFyZ2V0X3Rhc2spOwomIzQzOwomIzQzOwlpZiAocmV0ID09IDApCiYjNDM7CQlzdGF0dXMgPSAxOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDtwZXJmX2V2ZW50JiMzNDspCiBpbnQgc2VuZF9zaWduYWxfcGVyZih2b2lkICpjdHgpCiB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTAzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgTmVlZHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzOiBzaG91bGQgd2UgZXZlbiBib3RoZXIgd2l0aCBLTVNBTiBmdXp6aW5nIGhlcmUsIG9yIGFyZSB0aGUgc3RhbmRhcmQgS0FTQU4gYW5kIHNhbml0aXplcnMgZW5vdWdoPyBUaGlzIHBhdGNoIHNlZW1zIHRhcmdldGVkLCBzbyBsZXQmIzM5O3Mgc2VlLgoKRmlyc3QsIEkgc2VlIGEgY2hhbmdlIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbmAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgYWRkZWQgYSBjaGVjazogcmF0aGVyIHRoYW4ganVzdCBjYWxsaW5nIGBubWlfdWFjY2Vzc19va2F5KClgLCB0aGV5JiMzOTtyZSBub3cgZXhwbGljaXRseSBjaGVja2luZyBpZiB0aGUgdGFyZ2V0IGB0YXNrYCBpcyB0aGUgYGN1cnJlbnRgIHRhc2sgYmVmb3JlIGNhbGxpbmcgaXQuIFRoYXQmIzM5O3MgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBjaGFuZ2UuIFRoZSBvcmlnaW5hbCBjaGVjaywgYGlmICh1bmxpa2VseSghbm1pX3VhY2Nlc3Nfb2theSgpKSlgLCBub3cgaGFzIGFuIGV4dHJhIGNoZWNrIHRvIHByZXZlbnQgY2FsbGluZyB0aGF0IGZ1bmN0aW9uIG9uIGFub3RoZXIgdGFzay4KClRoZSBjb21tZW50IG1lbnRpb25zIHRoYXQgYG5taV91YWNjZXNzX29rYXkoKWAgb25seSBhcHBsaWVzIHRvIHRoZSAqY3VycmVudCogdGFzay4gTWFrZXMgc2Vuc2UsIGFuZCB0aGUgYWRkZWQgY29uZGl0aW9uIG1ha2VzIHRoYXQgZXhwbGljaXQuICBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGlzc3VlIHdoZXJlIHRoZSBmdW5jdGlvbiB3YXMgYmVpbmcgdXNlZCBpbmNvcnJlY3RseSwgYW5kIHRoZSBwYXRjaCBpcyBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBvciBhIHNpbWlsYXIgdHlwZSBvZiBidWcuCgpTZWNvbmQsIHRoZXJlIGFyZSBzZWxmdGVzdHMsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZW5kX3NpZ25hbC5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uY2AuIFRoZXkmIzM5O3JlIGFkZGluZyBhIHRlc3QgY2FzZSwgYHRlc3Rfc2VuZF9zaWduYWxfa3dvcmtlcmAsIHRvIHRlc3QgYGJwZl9zZW5kX3NpZ25hbF90YXNrYCBmcm9tIHdpdGhpbiBhIGt3b3JrZXIgY29udGV4dC4gIFRoYXQmIzM5O3MgYSBwcmV0dHkgY2xlYXIgc2lnbmFsIHRoYXQgdGhlIGNvZGUgd2FzICpwcmV2aW91c2x5KiBwb3RlbnRpYWxseSBub3QgaGFuZGxpbmcga3dvcmtlciBjb250ZXh0cyBjb3JyZWN0bHksIGFuZCBub3cgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIHZhbGlkYXRlIHRoZSBmaXguCgpTbywgaW4gc3VtbWFyeSwgd2UmIzM5O3JlIGxpa2VseSBkZWFsaW5nIHdpdGggYSBmaXggZm9yIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGEgc2ltaWxhciBtZW1vcnkgc2FmZXR5IGlzc3VlIHRoYXQgY291bGQgb2NjdXIgd2l0aGluIGEga3dvcmtlciBjb250ZXh0LiBUaGUgcGF0Y2ggaXMgcHJvYmFibHkgdHJ5aW5nIHRvIHByZXZlbnQgYSBkb3VibGUtZmV0Y2gsIG9yIGEgc2ltaWxhciBidWcgcmVsYXRpbmcgdG8gYSByYWNlIGNvbmRpdGlvbi4gU2luY2UgdGhpcyBpcyBhbiBleHBsaWNpdCBjaGFuZ2UgdG8gaGFuZGxlIGEgc3BlY2lmaWMgY29udGV4dCwgdGhpcyBzZWVtcyBsaWtlIHRoZSBraW5kIG9mIGlzc3VlIHRoYXQgS0FTQU4gYW5kIHRoZSBvdGhlciBzdGFuZGFyZCBzYW5pdGl6ZXJzIHNob3VsZCBjYXRjaC4gS01TQU4gKm1pZ2h0KiBiZSBoZWxwZnVsIGlmIGl0JiMzOTtzIGEgc3VidGxlIHJhY2UsIGJ1dCBJJiMzOTttIHRoaW5raW5nIGEgc3RhbmRhcmQgc2FuaXRpemVyIHBhc3MgaXMgc3VmZmljaWVudCwgZ2l2ZW4gdGhlIHRhcmdldGVkIG5hdHVyZSBvZiB0aGUgZml4IGFuZCB0aGUgZXhpc3RlbmNlIG9mIHRoZSBuZXcgc2VsZnRlc3QuIEkmIzM5O2QgbGVhbiB0b3dhcmQgZm9jdXNpbmcgb3VyIGluaXRpYWwgYW5hbHlzaXMgb24gdmVyaWZ5aW5nIHRoZSBwYXRjaCYjMzk7cyBjb3JyZWN0bmVzcyBhbmQgZW5zdXJpbmcgdGhlIHNlbGZ0ZXN0IGNvdmVycyB0aGUgaW50ZW5kZWQgc2NlbmFyaW8gdGhvcm91Z2hseS4gV2UgcHJvYmFibHkgZG9uJiMzOTt0IG5lZWQgdG8gcHJpb3JpdGl6ZSBLTVNBTiBmb3IgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3NlbmRfc2lnbmFsX2NvbW1vbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9ODM1PXN0YXRpYyB2b2lkIGRvX2JwZl9zZW5kX3NpZ25hbChzdHJ1Y3QgaXJxX3dvcmsgKmVudHJ5KVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy04NDYtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6ODQ3OnN0YXRpYyBpbnQgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbih1MzIgc2lnLCBlbnVtIHBpZF90eXBlIHR5cGUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTY0IHZhbHVlKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTg0OC17XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTkxMT1CUEZfQ0FMTF8xKGJwZl9zZW5kX3NpZ25hbCwgdTMyLCBzaWcpXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTEyLXtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo5MTM6XHRyZXR1cm4gYnBmX3NlbmRfc2lnbmFsX2NvbW1vbihzaWcsIFBJRFRZUEVfVEdJRCwgTlVMTCwgMCk7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTE0LX1cbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9OTIzPUJQRl9DQUxMXzEoYnBmX3NlbmRfc2lnbmFsX3RocmVhZCwgdTMyLCBzaWcpXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTI0LXtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo5MjU6XHRyZXR1cm4gYnBmX3NlbmRfc2lnbmFsX2NvbW1vbihzaWcsIFBJRFRZUEVfUElELCBOVUxMLCAwKTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy05MjYtfVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zNjE2PV9fYnBmX2tmdW5jIGludCBicGZfc2VuZF9zaWduYWxfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBzaWcsIGVudW0gcGlkX3R5cGUgdHlwZSxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzYyMS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNjIyOlx0cmV0dXJuIGJwZl9zZW5kX3NpZ25hbF9jb21tb24oc2lnLCB0eXBlLCB0YXNrLCB2YWx1ZSk7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzYyMy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MTYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbmAgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGJwZl9zZW5kX3NpZ25hbF9jb21tb25gICpyZWFsbHkqIHdvcmtzLiBJIGtub3cgdGhlIGhpZ2gtbGV2ZWwgY29uY2VwdCwgYnV0IHRvIHRydWx5IGdyYXNwIHRoZSBudWFuY2VzIG9mIHNpZ25hbCBpbmplY3Rpb24gZnJvbSBCUEYgcHJvZ3JhbXMsIEkgbmVlZCB0byBzZWUgdGhlIGZ1bGwgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgYW5kIGRpc3NlY3QgaXQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoaW5ncyBsaWtlOiBhdG9taWNpdHkgY29uY2VybnMsIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucywgaG93IGNvbnRleHQgaXMgbWFuYWdlZCwgYW5kIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgc2lnbmFsIGRlbGl2ZXJ5IGluZnJhc3RydWN0dXJlLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXkmIzM5O3JlIGRvaW5nIGFueSBvcHRpbWl6YXRpb25zIEkgY2FuIGxldmVyYWdlLCBvciBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBnb3RjaGFzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHdoZW4gZGVzaWduaW5nIG15IG93biBCUEYtYmFzZWQgc2lnbmFsIGhhbmRsaW5nLiBJ4oCZbSB0aGlua2luZyBhYm91dCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmZhY2VzIHdpdGggdGhlIHRhc2sgc3RydWN0IGFuZCBzaWduYWwgbWFzay4gVGltZSB0byByb2xsIHVwIG15IHNsZWV2ZXMgYW5kIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg0NTpcdH1cbiA4NDY6XHRcbiA4NDc6XHRzdGF0aWMgaW50IGJwZl9zZW5kX3NpZ25hbF9jb21tb24odTMyIHNpZywgZW51bSBwaWRfdHlwZSB0eXBlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHU2NCB2YWx1ZSlcbiA4NDg6XHR7XG4gODQ5Olx0XHRzdHJ1Y3Qgc2VuZF9zaWduYWxfaXJxX3dvcmsgKndvcmsgPSBOVUxMO1xuIDg1MDpcdFx0c3RydWN0IGtlcm5lbF9zaWdpbmZvIGluZm87XG4gODUxOlx0XHRzdHJ1Y3Qga2VybmVsX3NpZ2luZm8gKnNpZ2luZm87XG4gODUyOlx0XG4gODUzOlx0XHRpZiAoIXRhc2spIHtcbiA4NTQ6XHRcdFx0dGFzayA9IGN1cnJlbnQ7XG4gODU1Olx0XHRcdHNpZ2luZm8gPSBTRU5EX1NJR19QUklWO1xuIDg1NjpcdFx0fSBlbHNlIHtcbiA4NTc6XHRcdFx0Y2xlYXJfc2lnaW5mbyhcdTAwMjZpbmZvKTtcbiA4NTg6XHRcdFx0aW5mby5zaV9zaWdubyA9IHNpZztcbiA4NTk6XHRcdFx0aW5mby5zaV9lcnJubyA9IDA7XG4gODYwOlx0XHRcdGluZm8uc2lfY29kZSA9IFNJX0tFUk5FTDtcbiA4NjE6XHRcdFx0aW5mby5zaV9waWQgPSAwO1xuIDg2MjpcdFx0XHRpbmZvLnNpX3VpZCA9IDA7XG4gODYzOlx0XHRcdGluZm8uc2lfdmFsdWUuc2l2YWxfcHRyID0gKHZvaWQgX191c2VyIF9fZm9yY2UgKikodW5zaWduZWQgbG9uZyl2YWx1ZTtcbiA4NjQ6XHRcdFx0c2lnaW5mbyA9IFx1MDAyNmluZm87XG4gODY1Olx0XHR9XG4gODY2Olx0XG4gODY3Olx0XHQvKiBTaW1pbGFyIHRvIGJwZl9wcm9iZV93cml0ZV91c2VyLCB0YXNrIG5lZWRzIHRvIGJlXG4gODY4Olx0XHQgKiBpbiBhIHNvdW5kIGNvbmRpdGlvbiBhbmQga2VybmVsIG1lbW9yeSBhY2Nlc3MgYmVcbiA4Njk6XHRcdCAqIHBlcm1pdHRlZCBpbiBvcmRlciB0byBzZW5kIHNpZ25hbCB0byB0aGUgY3VycmVudFxuIDg3MDpcdFx0ICogdGFzay5cbiA4NzE6XHRcdCAqL1xuIDg3MjpcdFx0aWYgKHVubGlrZWx5KHRhc2stXHUwMDNlZmxhZ3MgXHUwMDI2IChQRl9LVEhSRUFEIHwgUEZfRVhJVElORykpKVxuIDg3MzpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuIDg3NDpcdFx0LyogU2luY2Ugbm1pX3VhY2Nlc3Nfb2theSgpIGlzIG9ubHkgZm9yIHRoZSBjdXJyZW50XG4gODc1Olx0XHQgKiB0YXNrLCBjaGVjayBpZiB0YXNrIGlzIGN1cnJlbnQuXG4gODc2Olx0XHQgKi9cbiA4Nzc6XHRcdGlmICh0YXNrID09IGN1cnJlbnQgXHUwMDI2XHUwMDI2IHVubGlrZWx5KCFubWlfdWFjY2Vzc19va2F5KCkpKVxuIDg3ODpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuIDg3OTpcdFx0LyogVGFzayBzaG91bGQgbm90IGJlIHBpZD0xIHRvIGF2b2lkIGtlcm5lbCBwYW5pYy4gKi9cbiA4ODA6XHRcdGlmICh1bmxpa2VseShpc19nbG9iYWxfaW5pdCh0YXNrKSkpXG4gODgxOlx0XHRcdHJldHVybiAtRVBFUk07XG4gODgyOlx0XG4gODgzOlx0XHRpZiAocHJlZW1wdF9jb3VudCgpICE9IDAgfHwgaXJxc19kaXNhYmxlZCgpKSB7XG4gODg0Olx0XHRcdC8qIERvIGFuIGVhcmx5IGNoZWNrIG9uIHNpZ25hbCB2YWxpZGl0eS4gT3RoZXJ3aXNlLFxuIDg4NTpcdFx0XHQgKiB0aGUgZXJyb3IgaXMgbG9zdCBpbiBkZWZlcnJlZCBpcnFfd29yay5cbiA4ODY6XHRcdFx0ICovXG4gODg3Olx0XHRcdGlmICh1bmxpa2VseSghdmFsaWRfc2lnbmFsKHNpZykpKVxuIDg4ODpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDg4OTpcdFxuIDg5MDpcdFx0XHR3b3JrID0gdGhpc19jcHVfcHRyKFx1MDAyNnNlbmRfc2lnbmFsX3dvcmspO1xuIDg5MTpcdFx0XHRpZiAoaXJxX3dvcmtfaXNfYnVzeShcdTAwMjZ3b3JrLVx1MDAzZWlycV93b3JrKSlcbiA4OTI6XHRcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDg5MzpcdFxuIDg5NDpcdFx0XHQvKiBBZGQgdGhlIGN1cnJlbnQgdGFzaywgd2hpY2ggaXMgdGhlIHRhcmdldCBvZiBzZW5kaW5nIHNpZ25hbCxcbiA4OTU6XHRcdFx0ICogdG8gdGhlIGlycV93b3JrLiBUaGUgY3VycmVudCB0YXNrIG1heSBjaGFuZ2Ugd2hlbiBxdWV1ZWRcbiA4OTY6XHRcdFx0ICogaXJxIHdvcmtzIGdldCBleGVjdXRlZC5cbiA4OTc6XHRcdFx0ICovXG4gODk4Olx0XHRcdHdvcmstXHUwMDNldGFzayA9IGdldF90YXNrX3N0cnVjdCh0YXNrKTtcbiA4OTk6XHRcdFx0d29yay1cdTAwM2VoYXNfc2lnaW5mbyA9IHNpZ2luZm8gPT0gXHUwMDI2aW5mbztcbiA5MDA6XHRcdFx0aWYgKHdvcmstXHUwMDNlaGFzX3NpZ2luZm8pXG4gOTAxOlx0XHRcdFx0Y29weV9zaWdpbmZvKFx1MDAyNndvcmstXHUwMDNlaW5mbywgXHUwMDI2aW5mbyk7XG4gOTAyOlx0XHRcdHdvcmstXHUwMDNlc2lnID0gc2lnO1xuIDkwMzpcdFx0XHR3b3JrLVx1MDAzZXR5cGUgPSB0eXBlO1xuIDkwNDpcdFx0XHRpcnFfd29ya19xdWV1ZShcdTAwMjZ3b3JrLVx1MDAzZWlycV93b3JrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc1OAoJCQkJCQkJb3V0cHV0OiAxNzQKCQkJCQkJCXRob3VnaHRzOiA1NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXBwbGljYWJpbGl0eSBBc3Nlc3NtZW50IGZvciBCUEYgU2lnbmFsIFNlbmRpbmcgRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgaW4gdGhlIGBicGZfc2VuZF9zaWduYWxfY29tbW9uYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gY2FsbGluZyBgYnBmX3NlbmRfc2lnbmFsX3Rhc2tgLCB0aGUgY29kZSB3YXMgcHJldmlvdXNseSB1c2luZyBgbm1pX3VhY2Nlc3Nfb2theSgpYCBpbmNvcnJlY3RseS4gVGhpcyBmdW5jdGlvbiwgaW50ZW5kZWQgdG8gY2hlY2sgZm9yIHBlcm1pdHRlZCB1c2VyIGFjY2VzcyBmb3IgdGhlICpjdXJyZW50KiB0YXNrLCB3YXMgZmFpbGluZyBpZiB0aGUgKmN1cnJlbnQqIHRhc2sgd2FzIGEga3dvcmtlciB0aHJlYWQsIGV2ZW4gaWYgdGhlICp0YXJnZXQqIGB0YXNrYCB3YXMgYSByZWd1bGFyIHVzZXIgcHJvY2Vzcy4gVGhpcyBpcyBiZWNhdXNlIGBubWlfdWFjY2Vzc19va2F5KClgIGNoZWNrcyB0aGUgYGN1cnJlbnRgIHRhc2smIzM5O3MgcHJvcGVydGllcy4gVGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQ6IG9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgaWYgYHRhc2sgPT0gY3VycmVudGAuCgpOb3csIHRvIHRoZSBLTVNBTiBxdWVzdGlvbjogZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuIEZpcnN0bHksIGFyZSBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIGZpZWxkcz8gTm8sIHRoZSBgaW5mb2Agc3RydWN0dXJlIGlzIGluaXRpYWxpemVkIHdpdGggYGNsZWFyX3NpZ2luZm8oJmFtcDtpbmZvKWAuIFNlY29uZGx5LCBpcyB0aGVyZSBhbnkgY29uZGl0aW9uYWwgbG9naWMgdGhhdCByZWxpZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuIFRoZSBjb25kaXRpb24gbm93IGhpbmdlcyBvbiBwb2ludGVyIGVxdWFsaXR5LCBgdGFzayA9PSBjdXJyZW50YCwgYW5kIHRoZSByZXR1cm4gb2YgYG5taV91YWNjZXNzX29rYXkoKWAsIHdoaWNoIGlzIGEgYm9vbGVhbi4gVGhpcmQsIGFyZSB0aGVyZSBuZXcgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgaW5pdGlhbGl6ZWQ/IE5vLCB0aGlzIHBhdGNoIGlzIHB1cmVseSBjb25kaXRpb25hbC4gRmluYWxseSwgYXJlIHRoZXJlIGFueSBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aCBjaGVja3MgdGhhdCBtaWdodCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgYmVpbmcgYWNjZXNzZWQ/IE5vLiBUaGUgY29kZSBtb2RpZmllcyB0aGUgY29uZGl0aW9uLCBidXQgdGhlcmUgaXMgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9uIG9yIGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLgoKSW4gZXNzZW5jZSwgdGhpcyBwYXRjaCBzaW1wbHkgcmVmaW5lcyB0aGUgY29uZGl0aW9uYWwgbG9naWMgdG8gcHJldmVudCBhbiBvdmVybHkgcmVzdHJpY3RpdmUgYWNjZXNzIGNoZWNrIGluIGEgdmVyeSBzcGVjaWZpYyBzY2VuYXJpby4gSXQgYWxsb3dzIEJQRiBwcm9ncmFtcywgZXZlbiB0aG9zZSBydW5uaW5nIGluIGt3b3JrZXIva2VybmVsIHRocmVhZCBjb250ZXh0LCB0byBjb3JyZWN0bHkgc2VuZCBzaWduYWxzIHRvIHVzZXIgdGFza3MuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBUaGlzIHBhdGNoIGlzIG1vcmUgYWJvdXQgbG9naWMgYW5kIHBlcm1pc3Npb25zIHRoYW4gbWVtb3J5IGluaXRpYWxpemF0aW9uLgoKTm93LCBsZXQmIzM5O3MgY2xlYXJseSBjb250cmFzdCB0aGlzIHdpdGggS0FTQU4uIEtNU0FOIGlzIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLCB3aGlsZSBLQVNBTiBpcyBhbGwgYWJvdXQgbWVtb3J5IHNhZmV0eSDigJMgZGV0ZWN0aW5nIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZXMsIGJ1ZmZlciBvdmVyZmxvd3MsIGV0Yy4gVGhlIGNoYW5nZSBtYWRlIGhlcmUgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcywgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbi4gQWxsIG1lbW9yeSBzYWZldHkgY29uY2VybnMsIHN1Y2ggYXMgdGhlIGB0YXNrYCBzdHJ1Y3QgcmVmZXJlbmNlIGNvdW50aW5nLCBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IHRoZSBzdGFuZGFyZCBzYW5pdGl6ZXJzIG9yIEtBU0FOLiBJdCYjMzk7cyBhIGNvbmRpdGlvbmFsIGNoYW5nZSwgcHVyZWx5LiBTbywgbm8gS01TQU4gaXMgbmVlZGVkLgoKQWxyaWdodCwgdGltZSB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBhIGNoZWNrIGluIGBicGZfc2VuZF9zaWduYWxfY29tbW9uKClgIHNvIHRoYXQgYG5taV91YWNjZXNzX29rYXkoKWAgaXMgb25seSBldmFsdWF0ZWQgd2hlbiBgdGFzayA9PSBjdXJyZW50YCwgYWxsb3dpbmcgQlBGIHByb2dyYW1zIHJ1bm5pbmcgaW4ga3RocmVhZC9rd29ya2VyIGNvbnRleHQgdG8gc2VuZCBzaWduYWxzIHRvIG90aGVyIHRhcmdldCB0YXNrcyB2aWEgYGJwZl9zZW5kX3NpZ25hbF90YXNrKClgLiBJdCBhbHNvIGFkZHMgYSBCUEYgc2VsZnRlc3QuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGxlbmd0aHMsIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBjb3B5LXRvLXVzZXIgb3BlcmF0aW9ucy4gQW55IHJlbGF0ZWQgdGFzayBsaWZldGltZSBvciByZWZlcmVuY2UgY291bnRpbmcgY29uY2VybnMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnQgdHJhY2tpbmcuIEFzIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gZGlzY2xvc3VyZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBhIGNoZWNrIGluIGBicGZfc2VuZF9zaWduYWxfY29tbW9uKClgIHNvIHRoYXQgYG5taV91YWNjZXNzX29rYXkoKWAgaXMgb25seSBldmFsdWF0ZWQgd2hlbiBgdGFzayA9PSBjdXJyZW50YCwgYWxsb3dpbmcgQlBGIHByb2dyYW1zIHJ1bm5pbmcgaW4ga3RocmVhZC9rd29ya2VyIGNvbnRleHQgdG8gc2VuZCBzaWduYWxzIHRvIG90aGVyIHRhcmdldCB0YXNrcyB2aWEgYGJwZl9zZW5kX3NpZ25hbF90YXNrKClgLiBJdCBhbHNvIGFkZHMgYSBCUEYgc2VsZnRlc3QuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGxlbmd0aHMsIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBjb3B5LXRvLXVzZXIgb3BlcmF0aW9ucy4gQW55IHJlbGF0ZWQgdGFzayBsaWZldGltZSBvciByZWZlcmVuY2UgY291bnRpbmcgY29uY2VybnMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnQgdHJhY2tpbmcuIEFzIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gZGlzY2xvc3VyZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjExLjU0MjI5MTU1NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NTk2NTQ4MTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zZW5kX3NpZ25hbF90YXNrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBhIGNoZWNrIGluIGBicGZfc2VuZF9zaWduYWxfY29tbW9uKClgIHNvIHRoYXQgYG5taV91YWNjZXNzX29rYXkoKWAgaXMgb25seSBldmFsdWF0ZWQgd2hlbiBgdGFzayA9PSBjdXJyZW50YCwgYWxsb3dpbmcgQlBGIHByb2dyYW1zIHJ1bm5pbmcgaW4ga3RocmVhZC9rd29ya2VyIGNvbnRleHQgdG8gc2VuZCBzaWduYWxzIHRvIG90aGVyIHRhcmdldCB0YXNrcyB2aWEgYGJwZl9zZW5kX3NpZ25hbF90YXNrKClgLiBJdCBhbHNvIGFkZHMgYSBCUEYgc2VsZnRlc3QuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgbGVuZ3RocywgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGNvcHktdG8tdXNlciBvcGVyYXRpb25zLiBBbnkgcmVsYXRlZCB0YXNrIGxpZmV0aW1lIG9yIHJlZmVyZW5jZSBjb3VudGluZyBjb25jZXJucyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCB0cmFja2luZy4gQXMgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBicGZfc2VuZF9zaWduYWxfY29tbW9uKCkgdG8gb25seSBlbmZvcmNlIG5taV91YWNjZXNzX29rYXkoKSB3aGVuIHRoZSB0YXJnZXQgdGFzayBpcyBjdXJyZW50LiBUaGlzIGVuYWJsZXMgQlBGIHByb2dyYW1zIChzdWNoIGFzIHRob3NlIHJ1bm5pbmcgaW4ga3dvcmtlci90cmFjZXBvaW50IGNvbnRleHQpIHRvIHN1Y2Nlc3NmdWxseSBpbnZva2UgdGhlIGJwZl9zZW5kX3NpZ25hbF90YXNrIGtmdW5jIG9uIG5vbi1jdXJyZW50IHRhc2tzLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMga2VybmVsIGV4ZWN1dGlvbiBsb2dpYyBmb3IgQlBGIHNpZ25hbCBkZWxpdmVyeS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6Mzk6MTEuNTQyMjk3MjM1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY4MzUyNDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTZkNjRmMjNkM2JmOThhNDAxZjk0NThmNmE4ZDhjZWMyNWNhMmRhNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDEwOjM5OjEwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xcbmluZGV4IDI5MjYwOTUxYWE4NzEuLmY3YTQxZjIyMjU5OTkgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXFxuKysrIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXFxuQEAgLTg3MSw3ICs4NzEsMTAgQEAgc3RhdGljIGludCBicGZfc2VuZF9zaWduYWxfY29tbW9uKHUzMiBzaWcsIGVudW0gcGlkX3R5cGUgdHlwZSwgc3RydWN0IHRhc2tfc3RydWNcXG4gXFx0ICovXFxuIFxcdGlmICh1bmxpa2VseSh0YXNrLVxcdTAwM2VmbGFncyBcXHUwMDI2IChQRl9LVEhSRUFEIHwgUEZfRVhJVElORykpKVxcbiBcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi1cXHRpZiAodW5saWtlbHkoIW5taV91YWNjZXNzX29rYXkoKSkpXFxuK1xcdC8qIFNpbmNlIG5taV91YWNjZXNzX29rYXkoKSBpcyBvbmx5IGZvciB0aGUgY3VycmVudFxcbitcXHQgKiB0YXNrLCBjaGVjayBpZiB0YXNrIGlzIGN1cnJlbnQuXFxuK1xcdCAqL1xcbitcXHRpZiAodGFzayA9PSBjdXJyZW50IFxcdTAwMjZcXHUwMDI2IHVubGlrZWx5KCFubWlfdWFjY2Vzc19va2F5KCkpKVxcbiBcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbiBcXHQvKiBUYXNrIHNob3VsZCBub3QgYmUgcGlkPTEgdG8gYXZvaWQga2VybmVsIHBhbmljLiAqL1xcbiBcXHRpZiAodW5saWtlbHkoaXNfZ2xvYmFsX2luaXQodGFzaykpKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZW5kX3NpZ25hbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VuZF9zaWduYWwuY1xcbmluZGV4IDdhYzRkNWE0ODhhYTUuLmY5ZGQyM2RiMWVmOTggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VuZF9zaWduYWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlbmRfc2lnbmFsLmNcXG5AQCAtMjYxLDYgKzI2MSwxMDggQEAgc3RhdGljIHZvaWQgdGVzdF9zZW5kX3NpZ25hbF9ubWkoYm9vbCBzaWduYWxfdGhyZWFkLCBib29sIHJlbW90ZSlcXG4gXFx0dGVzdF9zZW5kX3NpZ25hbF9jb21tb24oXFx1MDAyNmF0dHIsIHNpZ25hbF90aHJlYWQsIHJlbW90ZSk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHRlc3Rfc2VuZF9zaWduYWxfa3dvcmtlcih2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCB0ZXN0X3NlbmRfc2lnbmFsX2tlcm4gKnNrZWw7XFxuK1xcdGludCBwaXBlX2MycFsyXSwgcGlwZV9wMmNbMl07XFxuK1xcdHN0cnVjdCBzaWdhY3Rpb24gc2EgPSB7fTtcXG4rXFx0Y2hhciBidWZbMjU2XTtcXG4rXFx0aW50IGVyciA9IC0xO1xcbitcXHRwaWRfdCBwaWQ7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9PSyhwaXBlKHBpcGVfYzJwKSwgXFxcInBpcGVfYzJwXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmICghQVNTRVJUX09LKHBpcGUocGlwZV9wMmMpLCBcXFwicGlwZV9wMmNcXFwiKSkge1xcbitcXHRcXHRjbG9zZShwaXBlX2MycFswXSk7XFxuK1xcdFxcdGNsb3NlKHBpcGVfYzJwWzFdKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRwaWQgPSBmb3JrKCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKHBpZCwgMCwgXFxcImZvcmtcXFwiKSkge1xcbitcXHRcXHRjbG9zZShwaXBlX2MycFswXSk7XFxuK1xcdFxcdGNsb3NlKHBpcGVfYzJwWzFdKTtcXG4rXFx0XFx0Y2xvc2UocGlwZV9wMmNbMF0pO1xcbitcXHRcXHRjbG9zZShwaXBlX3AyY1sxXSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHBpZCA9PSAwKSB7XFxuK1xcdFxcdC8qIGluc3RhbGwgc2lnbmFsIGhhbmRsZXIgYW5kIG5vdGlmeSBwYXJlbnQgKi9cXG4rXFx0XFx0c2Euc2Ffc2lnYWN0aW9uID0gc2lndXNyMV9zaWdpbmZvX2hhbmRsZXI7XFxuK1xcdFxcdHNhLnNhX2ZsYWdzID0gU0FfUkVTVEFSVCB8IFNBX1NJR0lORk87XFxuK1xcdFxcdEFTU0VSVF9ORVEoc2lnYWN0aW9uKFNJR1VTUjEsIFxcdTAwMjZzYSwgTlVMTCksIC0xLCBcXFwic2lnYWN0aW9uXFxcIik7XFxuK1xcbitcXHRcXHRjbG9zZShwaXBlX2MycFswXSk7IC8qIGNsb3NlIHJlYWQgKi9cXG4rXFx0XFx0Y2xvc2UocGlwZV9wMmNbMV0pOyAvKiBjbG9zZSB3cml0ZSAqL1xcbitcXG4rXFx0XFx0Lyogbm90aWZ5IHBhcmVudCBzaWduYWwgaGFuZGxlciBpcyBpbnN0YWxsZWQgKi9cXG4rXFx0XFx0QVNTRVJUX0VRKHdyaXRlKHBpcGVfYzJwWzFdLCBidWYsIDEpLCAxLCBcXFwicGlwZV93cml0ZVxcXCIpO1xcbitcXG4rXFx0XFx0LyogbWFrZSBzdXJlIHBhcmVudCBlbmFibGVkIGJwZiBwcm9ncmFtIHRvIHNlbmRfc2lnbmFsICovXFxuK1xcdFxcdEFTU0VSVF9FUShyZWFkKHBpcGVfcDJjWzBdLCBidWYsIDEpLCAxLCBcXFwicGlwZV9yZWFkXFxcIik7XFxuK1xcbitcXHRcXHQvKiB0aGUgc2lnbmFsIGlzIHNlbnQgZnJvbSB3b3JrcXVldWUgY29udGV4dCwgc28gbm90aGluZyBoYXNcXG4rXFx0XFx0ICogdG8gYmUgdHJpZ2dlcmVkIGZyb20gaGVyZVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0d2hpbGUgKCFzaWd1c3IxX3JlY2VpdmVkKVxcbitcXHRcXHRcXHRzbGVlcCgxKTtcXG4rXFxuK1xcdFxcdGJ1ZlswXSA9IHNpZ3VzcjFfcmVjZWl2ZWQ7XFxuK1xcbitcXHRcXHRBU1NFUlRfRVEoc2lndXNyMV9yZWNlaXZlZCwgOCwgXFxcInNpZ3VzcjFfcmVjZWl2ZWRcXFwiKTtcXG4rXFx0XFx0QVNTRVJUX0VRKHdyaXRlKHBpcGVfYzJwWzFdLCBidWYsIDEpLCAxLCBcXFwicGlwZV93cml0ZVxcXCIpO1xcbitcXG4rXFx0XFx0Y2xvc2UocGlwZV9jMnBbMV0pO1xcbitcXHRcXHRjbG9zZShwaXBlX3AyY1swXSk7XFxuK1xcdFxcdGV4aXQoMCk7XFxuK1xcdH1cXG4rXFxuK1xcdGNsb3NlKHBpcGVfYzJwWzFdKTsgLyogY2xvc2Ugd3JpdGUgKi9cXG4rXFx0Y2xvc2UocGlwZV9wMmNbMF0pOyAvKiBjbG9zZSByZWFkICovXFxuK1xcbitcXHRza2VsID0gdGVzdF9zZW5kX3NpZ25hbF9rZXJuX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic2tlbF9vcGVuX2FuZF9sb2FkXFxcIikpXFxuK1xcdFxcdGdvdG8gc2tlbF9vcGVuX2xvYWRfZmFpbHVyZTtcXG4rXFxuK1xcdC8qIHdhaXQgdW50aWwgY2hpbGQgc2lnbmFsIGhhbmRsZXIgaW5zdGFsbGVkICovXFxuK1xcdEFTU0VSVF9FUShyZWFkKHBpcGVfYzJwWzBdLCBidWYsIDEpLCAxLCBcXFwicGlwZV9yZWFkXFxcIik7XFxuK1xcbitcXHQvKiBwaWQgPT0gMCBrZWVwcyB0aGUgb3RoZXIgcHJvZ3JhbXMgb2YgdGhpcyBza2VsZXRvbiBpbmFjdGl2ZSAqL1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXBpZCA9IDA7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlc2lnID0gU0lHVVNSMTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2V0YXJnZXRfcGlkID0gcGlkO1xcbitcXG4rXFx0ZXJyID0gdGVzdF9zZW5kX3NpZ25hbF9rZXJuX19hdHRhY2goc2tlbCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNrZWxfYXR0YWNoXFxcIikpIHtcXG4rXFx0XFx0ZXJyID0gLTE7XFxuK1xcdFxcdGdvdG8gZGVzdHJveV9za2VsO1xcbitcXHR9XFxuK1xcbitcXHQvKiBub3RpZnkgY2hpbGQgdGhhdCBicGYgcHJvZ3JhbSBjYW4gc2VuZF9zaWduYWwgbm93ICovXFxuK1xcdEFTU0VSVF9FUSh3cml0ZShwaXBlX3AyY1sxXSwgYnVmLCAxKSwgMSwgXFxcInBpcGVfd3JpdGVcXFwiKTtcXG4rXFxuK1xcdC8qIHdhaXQgZm9yIHJlc3VsdCwgd29ya3F1ZXVlcyBydW4gb24gdGhlaXIgb3duICovXFxuK1xcdGVyciA9IHJlYWRfd2l0aF90aW1lb3V0KHBpcGVfYzJwWzBdLCBidWYsIDEsIDEwICogMTAwMCAqIDEwMDApO1xcbitcXHRpZiAoIUFTU0VSVF9HVChlcnIsIDAsIFxcXCJyZWFkaW5nIHBpcGVcXFwiKSlcXG4rXFx0XFx0Z290byBkZXN0cm95X3NrZWw7XFxuK1xcbitcXHRBU1NFUlRfRVEoYnVmWzBdLCA4LCBcXFwiaW5jb3JyZWN0IHJlc3VsdFxcXCIpO1xcbitcXG4rZGVzdHJveV9za2VsOlxcbitcXHR0ZXN0X3NlbmRfc2lnbmFsX2tlcm5fX2Rlc3Ryb3koc2tlbCk7XFxuK3NrZWxfb3Blbl9sb2FkX2ZhaWx1cmU6XFxuK1xcdGNsb3NlKHBpcGVfYzJwWzBdKTtcXG4rXFx0Y2xvc2UocGlwZV9wMmNbMV0pO1xcbitcXHQvKlxcbitcXHQgKiBDaGlsZCBpcyBlaXRoZXIgYWJvdXQgdG8gZXhpdCBjbGVhbmx5IG9yIHN0dWNrIGluIGNhc2Ugb2YgZXJyb3JzLlxcbitcXHQgKiBOdWRnZSBpdCB0byBleGl0LlxcbitcXHQgKi9cXG4rXFx0a2lsbChwaWQsIFNJR0tJTEwpO1xcbitcXHR3YWl0KE5VTEwpO1xcbit9XFxuK1xcbiB2b2lkIHRlc3Rfc2VuZF9zaWduYWwodm9pZClcXG4ge1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic2VuZF9zaWduYWxfdHJhY2Vwb2ludFxcXCIpKVxcbkBAIC0yODksNCArMzkxLDYgQEAgdm9pZCB0ZXN0X3NlbmRfc2lnbmFsKHZvaWQpXFxuIFxcdFxcdHRlc3Rfc2VuZF9zaWduYWxfcGVyZih0cnVlLCB0cnVlKTtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInNlbmRfc2lnbmFsX25taV90aHJlYWRfcmVtb3RlXFxcIikpXFxuIFxcdFxcdHRlc3Rfc2VuZF9zaWduYWxfbm1pKHRydWUsIHRydWUpO1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic2VuZF9zaWduYWxfa3dvcmtlclxcXCIpKVxcbitcXHRcXHR0ZXN0X3NlbmRfc2lnbmFsX2t3b3JrZXIoKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmNcXG5pbmRleCAxNzZhMzU1ZTMwNjI0Li5kMWMwMDBjMzA4ODU3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uY1xcbkBAIC02MCw2ICs2MCwzMiBAQCBpbnQgc2VuZF9zaWduYWxfdHBfc2NoZWQodm9pZCAqY3R4KVxcbiBcXHRyZXR1cm4gYnBmX3NlbmRfc2lnbmFsX3Rlc3QoY3R4KTtcXG4gfVxcbiBcXG4rLyogU2VuZCBhIHNpZ25hbCB0byBhIHRhc2sgb3RoZXIgdGhhbiBjdXJyZW50LCBmcm9tIGEgY29udGV4dCB3aGVyZSBjdXJyZW50XFxuKyAqIGlzIGEga2VybmVsIHRocmVhZC4gTm8gZmlsdGVyaW5nIG9uIGN1cnJlbnQgaXMgcG9zc2libGUgaGVyZSwgc28gdGhpcyBpc1xcbisgKiBkcml2ZW4gZW50aXJlbHkgYnkgdGFyZ2V0X3BpZC5cXG4rICovXFxuK1NFQyhcXFwidHBfYnRmL3dvcmtxdWV1ZV9leGVjdXRlX3N0YXJ0XFxcIilcXG4raW50IHNlbmRfc2lnbmFsX2t3b3JrZXIodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0X3Rhc2s7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoc3RhdHVzICE9IDAgfHwgdGFyZ2V0X3BpZCA9PSAwKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHRhcmdldF90YXNrID0gYnBmX3Rhc2tfZnJvbV9waWQodGFyZ2V0X3BpZCk7XFxuK1xcdGlmICghdGFyZ2V0X3Rhc2spXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0ID0gYnBmX3NlbmRfc2lnbmFsX3Rhc2sodGFyZ2V0X3Rhc2ssIHNpZywgUElEVFlQRV9UR0lELCA4KTtcXG4rXFx0YnBmX3Rhc2tfcmVsZWFzZSh0YXJnZXRfdGFzayk7XFxuK1xcbitcXHRpZiAocmV0ID09IDApXFxuK1xcdFxcdHN0YXR1cyA9IDE7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gU0VDKFxcXCJwZXJmX2V2ZW50XFxcIilcXG4gaW50IHNlbmRfc2lnbmFsX3BlcmYodm9pZCAqY3R4KVxcbiB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjEyLjgxMTU2NjcxMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjgxMDgwMTU3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9FVkVOVFNcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NlbmRfc2lnbmFsX3Rhc2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBicGZfc2VuZF9zaWduYWxfY29tbW9uKCkgdG8gb25seSBlbmZvcmNlIG5taV91YWNjZXNzX29rYXkoKSB3aGVuIHRoZSB0YXJnZXQgdGFzayBpcyBjdXJyZW50LiBUaGlzIGVuYWJsZXMgQlBGIHByb2dyYW1zIChzdWNoIGFzIHRob3NlIHJ1bm5pbmcgaW4ga3dvcmtlci90cmFjZXBvaW50IGNvbnRleHQpIHRvIHN1Y2Nlc3NmdWxseSBpbnZva2UgdGhlIGJwZl9zZW5kX3NpZ25hbF90YXNrIGtmdW5jIG9uIG5vbi1jdXJyZW50IHRhc2tzLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMga2VybmVsIGV4ZWN1dGlvbiBsb2dpYyBmb3IgQlBGIHNpZ25hbCBkZWxpdmVyeS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTZkNjRmMjNkM2JmOThhNDAxZjk0NThmNmE4ZDhjZWMyNWNhMmRhNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMTA6Mzk6MTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbmluZGV4IDI5MjYwOTUxYWE4NzEuLmY3YTQxZjIyMjU5OTkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbisrKyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuQEAgLTg3MSw3ICs4NzEsMTAgQEAgc3RhdGljIGludCBicGZfc2VuZF9zaWduYWxfY29tbW9uKHUzMiBzaWcsIGVudW0gcGlkX3R5cGUgdHlwZSwgc3RydWN0IHRhc2tfc3RydWNcbiBcdCAqL1xuIFx0aWYgKHVubGlrZWx5KHRhc2stXHUwMDNlZmxhZ3MgXHUwMDI2IChQRl9LVEhSRUFEIHwgUEZfRVhJVElORykpKVxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuLVx0aWYgKHVubGlrZWx5KCFubWlfdWFjY2Vzc19va2F5KCkpKVxuK1x0LyogU2luY2Ugbm1pX3VhY2Nlc3Nfb2theSgpIGlzIG9ubHkgZm9yIHRoZSBjdXJyZW50XG4rXHQgKiB0YXNrLCBjaGVjayBpZiB0YXNrIGlzIGN1cnJlbnQuXG4rXHQgKi9cbitcdGlmICh0YXNrID09IGN1cnJlbnQgXHUwMDI2XHUwMDI2IHVubGlrZWx5KCFubWlfdWFjY2Vzc19va2F5KCkpKVxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuIFx0LyogVGFzayBzaG91bGQgbm90IGJlIHBpZD0xIHRvIGF2b2lkIGtlcm5lbCBwYW5pYy4gKi9cbiBcdGlmICh1bmxpa2VseShpc19nbG9iYWxfaW5pdCh0YXNrKSkpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VuZF9zaWduYWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlbmRfc2lnbmFsLmNcbmluZGV4IDdhYzRkNWE0ODhhYTUuLmY5ZGQyM2RiMWVmOTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZW5kX3NpZ25hbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZW5kX3NpZ25hbC5jXG5AQCAtMjYxLDYgKzI2MSwxMDggQEAgc3RhdGljIHZvaWQgdGVzdF9zZW5kX3NpZ25hbF9ubWkoYm9vbCBzaWduYWxfdGhyZWFkLCBib29sIHJlbW90ZSlcbiBcdHRlc3Rfc2VuZF9zaWduYWxfY29tbW9uKFx1MDAyNmF0dHIsIHNpZ25hbF90aHJlYWQsIHJlbW90ZSk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHRlc3Rfc2VuZF9zaWduYWxfa3dvcmtlcih2b2lkKVxuK3tcbitcdHN0cnVjdCB0ZXN0X3NlbmRfc2lnbmFsX2tlcm4gKnNrZWw7XG4rXHRpbnQgcGlwZV9jMnBbMl0sIHBpcGVfcDJjWzJdO1xuK1x0c3RydWN0IHNpZ2FjdGlvbiBzYSA9IHt9O1xuK1x0Y2hhciBidWZbMjU2XTtcbitcdGludCBlcnIgPSAtMTtcbitcdHBpZF90IHBpZDtcbitcbitcdGlmICghQVNTRVJUX09LKHBpcGUocGlwZV9jMnApLCBcInBpcGVfYzJwXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoIUFTU0VSVF9PSyhwaXBlKHBpcGVfcDJjKSwgXCJwaXBlX3AyY1wiKSkge1xuK1x0XHRjbG9zZShwaXBlX2MycFswXSk7XG4rXHRcdGNsb3NlKHBpcGVfYzJwWzFdKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0cGlkID0gZm9yaygpO1xuK1x0aWYgKCFBU1NFUlRfR0UocGlkLCAwLCBcImZvcmtcIikpIHtcbitcdFx0Y2xvc2UocGlwZV9jMnBbMF0pO1xuK1x0XHRjbG9zZShwaXBlX2MycFsxXSk7XG4rXHRcdGNsb3NlKHBpcGVfcDJjWzBdKTtcbitcdFx0Y2xvc2UocGlwZV9wMmNbMV0pO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAocGlkID09IDApIHtcbitcdFx0LyogaW5zdGFsbCBzaWduYWwgaGFuZGxlciBhbmQgbm90aWZ5IHBhcmVudCAqL1xuK1x0XHRzYS5zYV9zaWdhY3Rpb24gPSBzaWd1c3IxX3NpZ2luZm9faGFuZGxlcjtcbitcdFx0c2Euc2FfZmxhZ3MgPSBTQV9SRVNUQVJUIHwgU0FfU0lHSU5GTztcbitcdFx0QVNTRVJUX05FUShzaWdhY3Rpb24oU0lHVVNSMSwgXHUwMDI2c2EsIE5VTEwpLCAtMSwgXCJzaWdhY3Rpb25cIik7XG4rXG4rXHRcdGNsb3NlKHBpcGVfYzJwWzBdKTsgLyogY2xvc2UgcmVhZCAqL1xuK1x0XHRjbG9zZShwaXBlX3AyY1sxXSk7IC8qIGNsb3NlIHdyaXRlICovXG4rXG4rXHRcdC8qIG5vdGlmeSBwYXJlbnQgc2lnbmFsIGhhbmRsZXIgaXMgaW5zdGFsbGVkICovXG4rXHRcdEFTU0VSVF9FUSh3cml0ZShwaXBlX2MycFsxXSwgYnVmLCAxKSwgMSwgXCJwaXBlX3dyaXRlXCIpO1xuK1xuK1x0XHQvKiBtYWtlIHN1cmUgcGFyZW50IGVuYWJsZWQgYnBmIHByb2dyYW0gdG8gc2VuZF9zaWduYWwgKi9cbitcdFx0QVNTRVJUX0VRKHJlYWQocGlwZV9wMmNbMF0sIGJ1ZiwgMSksIDEsIFwicGlwZV9yZWFkXCIpO1xuK1xuK1x0XHQvKiB0aGUgc2lnbmFsIGlzIHNlbnQgZnJvbSB3b3JrcXVldWUgY29udGV4dCwgc28gbm90aGluZyBoYXNcbitcdFx0ICogdG8gYmUgdHJpZ2dlcmVkIGZyb20gaGVyZVxuK1x0XHQgKi9cbitcdFx0d2hpbGUgKCFzaWd1c3IxX3JlY2VpdmVkKVxuK1x0XHRcdHNsZWVwKDEpO1xuK1xuK1x0XHRidWZbMF0gPSBzaWd1c3IxX3JlY2VpdmVkO1xuK1xuK1x0XHRBU1NFUlRfRVEoc2lndXNyMV9yZWNlaXZlZCwgOCwgXCJzaWd1c3IxX3JlY2VpdmVkXCIpO1xuK1x0XHRBU1NFUlRfRVEod3JpdGUocGlwZV9jMnBbMV0sIGJ1ZiwgMSksIDEsIFwicGlwZV93cml0ZVwiKTtcbitcbitcdFx0Y2xvc2UocGlwZV9jMnBbMV0pO1xuK1x0XHRjbG9zZShwaXBlX3AyY1swXSk7XG4rXHRcdGV4aXQoMCk7XG4rXHR9XG4rXG4rXHRjbG9zZShwaXBlX2MycFsxXSk7IC8qIGNsb3NlIHdyaXRlICovXG4rXHRjbG9zZShwaXBlX3AyY1swXSk7IC8qIGNsb3NlIHJlYWQgKi9cbitcbitcdHNrZWwgPSB0ZXN0X3NlbmRfc2lnbmFsX2tlcm5fX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInNrZWxfb3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0Z290byBza2VsX29wZW5fbG9hZF9mYWlsdXJlO1xuK1xuK1x0Lyogd2FpdCB1bnRpbCBjaGlsZCBzaWduYWwgaGFuZGxlciBpbnN0YWxsZWQgKi9cbitcdEFTU0VSVF9FUShyZWFkKHBpcGVfYzJwWzBdLCBidWYsIDEpLCAxLCBcInBpcGVfcmVhZFwiKTtcbitcbitcdC8qIHBpZCA9PSAwIGtlZXBzIHRoZSBvdGhlciBwcm9ncmFtcyBvZiB0aGlzIHNrZWxldG9uIGluYWN0aXZlICovXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VwaWQgPSAwO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlc2lnID0gU0lHVVNSMTtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXRhcmdldF9waWQgPSBwaWQ7XG4rXG4rXHRlcnIgPSB0ZXN0X3NlbmRfc2lnbmFsX2tlcm5fX2F0dGFjaChza2VsKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJza2VsX2F0dGFjaFwiKSkge1xuK1x0XHRlcnIgPSAtMTtcbitcdFx0Z290byBkZXN0cm95X3NrZWw7XG4rXHR9XG4rXG4rXHQvKiBub3RpZnkgY2hpbGQgdGhhdCBicGYgcHJvZ3JhbSBjYW4gc2VuZF9zaWduYWwgbm93ICovXG4rXHRBU1NFUlRfRVEod3JpdGUocGlwZV9wMmNbMV0sIGJ1ZiwgMSksIDEsIFwicGlwZV93cml0ZVwiKTtcbitcbitcdC8qIHdhaXQgZm9yIHJlc3VsdCwgd29ya3F1ZXVlcyBydW4gb24gdGhlaXIgb3duICovXG4rXHRlcnIgPSByZWFkX3dpdGhfdGltZW91dChwaXBlX2MycFswXSwgYnVmLCAxLCAxMCAqIDEwMDAgKiAxMDAwKTtcbitcdGlmICghQVNTRVJUX0dUKGVyciwgMCwgXCJyZWFkaW5nIHBpcGVcIikpXG4rXHRcdGdvdG8gZGVzdHJveV9za2VsO1xuK1xuK1x0QVNTRVJUX0VRKGJ1ZlswXSwgOCwgXCJpbmNvcnJlY3QgcmVzdWx0XCIpO1xuK1xuK2Rlc3Ryb3lfc2tlbDpcbitcdHRlc3Rfc2VuZF9zaWduYWxfa2Vybl9fZGVzdHJveShza2VsKTtcbitza2VsX29wZW5fbG9hZF9mYWlsdXJlOlxuK1x0Y2xvc2UocGlwZV9jMnBbMF0pO1xuK1x0Y2xvc2UocGlwZV9wMmNbMV0pO1xuK1x0LypcbitcdCAqIENoaWxkIGlzIGVpdGhlciBhYm91dCB0byBleGl0IGNsZWFubHkgb3Igc3R1Y2sgaW4gY2FzZSBvZiBlcnJvcnMuXG4rXHQgKiBOdWRnZSBpdCB0byBleGl0LlxuK1x0ICovXG4rXHRraWxsKHBpZCwgU0lHS0lMTCk7XG4rXHR3YWl0KE5VTEwpO1xuK31cbitcbiB2b2lkIHRlc3Rfc2VuZF9zaWduYWwodm9pZClcbiB7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInNlbmRfc2lnbmFsX3RyYWNlcG9pbnRcIikpXG5AQCAtMjg5LDQgKzM5MSw2IEBAIHZvaWQgdGVzdF9zZW5kX3NpZ25hbCh2b2lkKVxuIFx0XHR0ZXN0X3NlbmRfc2lnbmFsX3BlcmYodHJ1ZSwgdHJ1ZSk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInNlbmRfc2lnbmFsX25taV90aHJlYWRfcmVtb3RlXCIpKVxuIFx0XHR0ZXN0X3NlbmRfc2lnbmFsX25taSh0cnVlLCB0cnVlKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic2VuZF9zaWduYWxfa3dvcmtlclwiKSlcbitcdFx0dGVzdF9zZW5kX3NpZ25hbF9rd29ya2VyKCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uY1xuaW5kZXggMTc2YTM1NWUzMDYyNC4uZDFjMDAwYzMwODg1NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jXG5AQCAtNjAsNiArNjAsMzIgQEAgaW50IHNlbmRfc2lnbmFsX3RwX3NjaGVkKHZvaWQgKmN0eClcbiBcdHJldHVybiBicGZfc2VuZF9zaWduYWxfdGVzdChjdHgpO1xuIH1cbiBcbisvKiBTZW5kIGEgc2lnbmFsIHRvIGEgdGFzayBvdGhlciB0aGFuIGN1cnJlbnQsIGZyb20gYSBjb250ZXh0IHdoZXJlIGN1cnJlbnRcbisgKiBpcyBhIGtlcm5lbCB0aHJlYWQuIE5vIGZpbHRlcmluZyBvbiBjdXJyZW50IGlzIHBvc3NpYmxlIGhlcmUsIHNvIHRoaXMgaXNcbisgKiBkcml2ZW4gZW50aXJlbHkgYnkgdGFyZ2V0X3BpZC5cbisgKi9cbitTRUMoXCJ0cF9idGYvd29ya3F1ZXVlX2V4ZWN1dGVfc3RhcnRcIilcbitpbnQgc2VuZF9zaWduYWxfa3dvcmtlcih2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXRfdGFzaztcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoc3RhdHVzICE9IDAgfHwgdGFyZ2V0X3BpZCA9PSAwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHRhcmdldF90YXNrID0gYnBmX3Rhc2tfZnJvbV9waWQodGFyZ2V0X3BpZCk7XG4rXHRpZiAoIXRhcmdldF90YXNrKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldCA9IGJwZl9zZW5kX3NpZ25hbF90YXNrKHRhcmdldF90YXNrLCBzaWcsIFBJRFRZUEVfVEdJRCwgOCk7XG4rXHRicGZfdGFza19yZWxlYXNlKHRhcmdldF90YXNrKTtcbitcbitcdGlmIChyZXQgPT0gMClcbitcdFx0c3RhdHVzID0gMTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCJwZXJmX2V2ZW50XCIpXG4gaW50IHNlbmRfc2lnbmFsX3BlcmYodm9pZCAqY3R4KVxuIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjEyLjgxMTU2ODYwMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2Nzk5NDU0NzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IGBicGZfc2VuZF9zaWduYWxfY29tbW9uYCBpbiBgYnBmX3RyYWNlLmNgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgaXQncyB0b3VjaGluZyBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBhbmQgc29tZSBzZWxmdGVzdHMgdW5kZXIgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uLi5gLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHRyYWNpbmcgYW5kIEJQRiB1c3VhbGx5IGdvIGhhbmQgaW4gaGFuZC5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSB3aXRoaW4gdGhlIGBicGZfc2VuZF9zaWduYWxfY29tbW9uYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCdzIGFib3V0IHRoZSBgbm1pX3VhY2Nlc3Nfb2theSgpYCBjaGVjay4gSSBzZWUgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSBjaGVja2VkIGBubWlfdWFjY2Vzc19va2F5KClgIGRpcmVjdGx5LCBidXQgdGhlIHJldmlzZWQgdmVyc2lvbiBpcyBhZGRpbmcgYSBjaGVjayB0byBzZWUgaWYgdGhlIHRhcmdldCBgdGFza2AgaXMgYWN0dWFsbHkgdGhlIGBjdXJyZW50YCB0YXNrIGJlZm9yZSBjYWxsaW5nIGBubWlfdWFjY2Vzc19va2F5KClgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSBhIHRhcmdldGVkIG9wdGltaXphdGlvbiBvciBhIGZpeCBmb3IgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIE5NSSBhY2Nlc3Mgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gVGhlIG9yaWdpbmFsIGNoZWNrIGxpa2VseSBoYWQgYSBmbGF3LCBhcyBpdCBkaWRuJ3QgYWNjb3VudCBmb3IgdGhlIGNvbnRleHQgb2YgdGhlIHRhcmdldCB0YXNrLlxuXG5JJ20gY3VyaW91cyB0byBzZWUgd2h5IHRoZSBgbm1pX3VhY2Nlc3Nfb2theSgpYCBjaGVjayBpcyBiZWluZyBtb2RpZmllZCBpbiB0aGlzIHNwZWNpZmljIHdheS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgdXNlIG15IHRvb2xzIHRvIGdyYWIgdGhlIGNvZGUgYXJvdW5kIGxpbmUgODcxIG9mIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIGZvciBhIGJpdCBtb3JlIGNvbnRleHQuIFRoZW4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBtdWNoIGJldHRlciBpZGVhIG9mIHRoZSBwb3RlbnRpYWwgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXMgdGhpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbj8gQSBzZWN1cml0eSBoYXJkZW5pbmcgbWVhc3VyZT8gQSBidWcgZml4PyBMZXQncyBmaW5kIG91dCFcblxuXG4iLCJJbnB1dFRva2VucyI6NDEwNiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjI5LjYxMTAyNTM2MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODUwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODUwOlxcdFxcdHN0cnVjdCBrZXJuZWxfc2lnaW5mbyBpbmZvO1xcbiA4NTE6XFx0XFx0c3RydWN0IGtlcm5lbF9zaWdpbmZvICpzaWdpbmZvO1xcbiA4NTI6XFx0XFxuIDg1MzpcXHRcXHRpZiAoIXRhc2spIHtcXG4gODU0OlxcdFxcdFxcdHRhc2sgPSBjdXJyZW50O1xcbiA4NTU6XFx0XFx0XFx0c2lnaW5mbyA9IFNFTkRfU0lHX1BSSVY7XFxuIDg1NjpcXHRcXHR9IGVsc2Uge1xcbiA4NTc6XFx0XFx0XFx0Y2xlYXJfc2lnaW5mbyhcXHUwMDI2aW5mbyk7XFxuIDg1ODpcXHRcXHRcXHRpbmZvLnNpX3NpZ25vID0gc2lnO1xcbiA4NTk6XFx0XFx0XFx0aW5mby5zaV9lcnJubyA9IDA7XFxuIDg2MDpcXHRcXHRcXHRpbmZvLnNpX2NvZGUgPSBTSV9LRVJORUw7XFxuIDg2MTpcXHRcXHRcXHRpbmZvLnNpX3BpZCA9IDA7XFxuIDg2MjpcXHRcXHRcXHRpbmZvLnNpX3VpZCA9IDA7XFxuIDg2MzpcXHRcXHRcXHRpbmZvLnNpX3ZhbHVlLnNpdmFsX3B0ciA9ICh2b2lkIF9fdXNlciBfX2ZvcmNlICopKHVuc2lnbmVkIGxvbmcpdmFsdWU7XFxuIDg2NDpcXHRcXHRcXHRzaWdpbmZvID0gXFx1MDAyNmluZm87XFxuIDg2NTpcXHRcXHR9XFxuIDg2NjpcXHRcXG4gODY3OlxcdFxcdC8qIFNpbWlsYXIgdG8gYnBmX3Byb2JlX3dyaXRlX3VzZXIsIHRhc2sgbmVlZHMgdG8gYmVcXG4gODY4OlxcdFxcdCAqIGluIGEgc291bmQgY29uZGl0aW9uIGFuZCBrZXJuZWwgbWVtb3J5IGFjY2VzcyBiZVxcbiA4Njk6XFx0XFx0ICogcGVybWl0dGVkIGluIG9yZGVyIHRvIHNlbmQgc2lnbmFsIHRvIHRoZSBjdXJyZW50XFxuIDg3MDpcXHRcXHQgKiB0YXNrLlxcbiA4NzE6XFx0XFx0ICovXFxuIDg3MjpcXHRcXHRpZiAodW5saWtlbHkodGFzay1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoUEZfS1RIUkVBRCB8IFBGX0VYSVRJTkcpKSlcXG4gODczOlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuIDg3NDpcXHRcXHQvKiBTaW5jZSBubWlfdWFjY2Vzc19va2F5KCkgaXMgb25seSBmb3IgdGhlIGN1cnJlbnRcXG4gODc1OlxcdFxcdCAqIHRhc2ssIGNoZWNrIGlmIHRhc2sgaXMgY3VycmVudC5cXG4gODc2OlxcdFxcdCAqL1xcbiA4Nzc6XFx0XFx0aWYgKHRhc2sgPT0gY3VycmVudCBcXHUwMDI2XFx1MDAyNiB1bmxpa2VseSghbm1pX3VhY2Nlc3Nfb2theSgpKSlcXG4gODc4OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuIDg3OTpcXHRcXHQvKiBUYXNrIHNob3VsZCBub3QgYmUgcGlkPTEgdG8gYXZvaWQga2VybmVsIHBhbmljLiAqL1xcbiA4ODA6XFx0XFx0aWYgKHVubGlrZWx5KGlzX2dsb2JhbF9pbml0KHRhc2spKSlcXG4gODgxOlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuIDg4MjpcXHRcXG4gODgzOlxcdFxcdGlmIChwcmVlbXB0X2NvdW50KCkgIT0gMCB8fCBpcnFzX2Rpc2FibGVkKCkpIHtcXG4gODg0OlxcdFxcdFxcdC8qIERvIGFuIGVhcmx5IGNoZWNrIG9uIHNpZ25hbCB2YWxpZGl0eS4gT3RoZXJ3aXNlLFxcbiA4ODU6XFx0XFx0XFx0ICogdGhlIGVycm9yIGlzIGxvc3QgaW4gZGVmZXJyZWQgaXJxX3dvcmsuXFxuIDg4NjpcXHRcXHRcXHQgKi9cXG4gODg3OlxcdFxcdFxcdGlmICh1bmxpa2VseSghdmFsaWRfc2lnbmFsKHNpZykpKVxcbiA4ODg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDg4OTpcXHRcXG4gODkwOlxcdFxcdFxcdHdvcmsgPSB0aGlzX2NwdV9wdHIoXFx1MDAyNnNlbmRfc2lnbmFsX3dvcmspO1xcbiA4OTE6XFx0XFx0XFx0aWYgKGlycV93b3JrX2lzX2J1c3koXFx1MDAyNndvcmstXFx1MDAzZWlycV93b3JrKSlcXG4gODkyOlxcdFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDg5MzpcXHRcXG4gODk0OlxcdFxcdFxcdC8qIEFkZCB0aGUgY3VycmVudCB0YXNrLCB3aGljaCBpcyB0aGUgdGFyZ2V0IG9mIHNlbmRpbmcgc2lnbmFsLFxcbiA4OTU6XFx0XFx0XFx0ICogdG8gdGhlIGlycV93b3JrLiBUaGUgY3VycmVudCB0YXNrIG1heSBjaGFuZ2Ugd2hlbiBxdWV1ZWRcXG4gODk2OlxcdFxcdFxcdCAqIGlycSB3b3JrcyBnZXQgZXhlY3V0ZWQuXFxuIDg5NzpcXHRcXHRcXHQgKi9cXG4gODk4OlxcdFxcdFxcdHdvcmstXFx1MDAzZXRhc2sgPSBnZXRfdGFza19zdHJ1Y3QodGFzayk7XFxuIDg5OTpcXHRcXHRcXHR3b3JrLVxcdTAwM2VoYXNfc2lnaW5mbyA9IHNpZ2luZm8gPT0gXFx1MDAyNmluZm87XFxuIDkwMDpcXHRcXHRcXHRpZiAod29yay1cXHUwMDNlaGFzX3NpZ2luZm8pXFxuIDkwMTpcXHRcXHRcXHRcXHRjb3B5X3NpZ2luZm8oXFx1MDAyNndvcmstXFx1MDAzZWluZm8sIFxcdTAwMjZpbmZvKTtcXG4gOTAyOlxcdFxcdFxcdHdvcmstXFx1MDAzZXNpZyA9IHNpZztcXG4gOTAzOlxcdFxcdFxcdHdvcmstXFx1MDAzZXR5cGUgPSB0eXBlO1xcbiA5MDQ6XFx0XFx0XFx0aXJxX3dvcmtfcXVldWUoXFx1MDAyNndvcmstXFx1MDAzZWlycV93b3JrKTtcXG4gOTA1OlxcdFxcdFxcdHJldHVybiAwO1xcbiA5MDY6XFx0XFx0fVxcbiA5MDc6XFx0XFxuIDkwODpcXHRcXHRyZXR1cm4gZ3JvdXBfc2VuZF9zaWdfaW5mbyhzaWcsIHNpZ2luZm8sIHRhc2ssIHR5cGUpO1xcbiA5MDk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozOToyOS42MTEyMDE2MjJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDcxNDgyNTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdHJhY2luZyB0aGUgY2FsbGVyIGZ1bmN0aW9ucyBvZiBgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbmA6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbGVycyBvZiBgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbmAqKlxuXG5BbHJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHdoZXJlIGBicGZfc2VuZF9zaWduYWxfY29tbW9uYCBpcyBhY3R1YWxseSBiZWluZyAqdXNlZCouIEdpdmVuIHRoZSBuYW1lLCBJJ2QgZXhwZWN0IGl0IHRvIGJlIGEgY29tbW9uIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gc2lnbmFsIGhhbmRsaW5nIHdpdGhpbiB0aGUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBjb250ZXh0LiBTbywgd2hlcmUgaXMgdGhlIGVudHJ5cG9pbnQ/XG5cbk15IGltbWVkaWF0ZSBtb3ZlIGlzIHRvIHVzZSBgZ3JlcGAuIEkgd2FudCB0byBmaW5kIHdoZXJlIGBicGZfc2VuZF9zaWduYWxgIGlzIGNhbGxlZC4gU3BlY2lmaWNhbGx5LCBJJ2xsIGZvY3VzIG15IHNlYXJjaCBvbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gSSBleHBlY3QgYGJwZl90cmFjZS5jYCB0byBjb250YWluIHRoZSBzb3VyY2UgY29kZSBpbXBsZW1lbnRpbmcgdGhlIHRyYWNlcG9pbnRzIHRoYXQgYWxsb3cgbWUgdG8gdW5kZXJzdGFuZCB3aGVyZSBzaWduYWxzIGFyZSBnZXR0aW5nIHNlbnQuIEZyb20gdGhlcmUsIEkgY2FuIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGNhbGwgZ3JhcGguIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyBiYWNrIHRoZSBjYWxsZXJzIGFuZCB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjMxLjY4MjY4NzY5M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDgxMDQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc2VuZF9zaWduYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz04MzM9c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzZW5kX3NpZ25hbF9pcnFfd29yaywgc2VuZF9zaWduYWxfd29yayk7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTgzNC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6ODM1OnN0YXRpYyB2b2lkIGRvX2JwZl9zZW5kX3NpZ25hbChzdHJ1Y3QgaXJxX3dvcmsgKmVudHJ5KVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy04MzYte1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTg0Ni1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6ODQ3OnN0YXRpYyBpbnQgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbih1MzIgc2lnLCBlbnVtIHBpZF90eXBlIHR5cGUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTY0IHZhbHVlKVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy04NDgte1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTkxMC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6OTExOkJQRl9DQUxMXzEoYnBmX3NlbmRfc2lnbmFsLCB1MzIsIHNpZylcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTEyLXtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6OTEzOlxcdHJldHVybiBicGZfc2VuZF9zaWduYWxfY29tbW9uKHNpZywgUElEVFlQRV9UR0lELCBOVUxMLCAwKTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTE0LX1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTE1LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo5MTY6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zZW5kX3NpZ25hbF9wcm90byA9IHtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6OTE3OlxcdC5mdW5jXFx0XFx0PSBicGZfc2VuZF9zaWduYWwsXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTkxOC1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTkyMi1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6OTIzOkJQRl9DQUxMXzEoYnBmX3NlbmRfc2lnbmFsX3RocmVhZCwgdTMyLCBzaWcpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTkyNC17XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjkyNTpcXHRyZXR1cm4gYnBmX3NlbmRfc2lnbmFsX2NvbW1vbihzaWcsIFBJRFRZUEVfUElELCBOVUxMLCAwKTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTI2LX1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTI3LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo5Mjg6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zZW5kX3NpZ25hbF90aHJlYWRfcHJvdG8gPSB7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjkyOTpcXHQuZnVuY1xcdFxcdD0gYnBmX3NlbmRfc2lnbmFsX3RocmVhZCxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTMwLVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MjI2ND1zdGF0aWMgaW50IF9faW5pdCBzZW5kX3NpZ25hbF9pcnFfd29ya19pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI3MC1cXHRcXHR3b3JrID0gcGVyX2NwdV9wdHIoXFx1MDAyNnNlbmRfc2lnbmFsX3dvcmssIGNwdSk7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjIyNzE6XFx0XFx0aW5pdF9pcnFfd29yayhcXHUwMDI2d29yay1cXHUwMDNlaXJxX3dvcmssIGRvX2JwZl9zZW5kX3NpZ25hbCk7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNzItXFx0fVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM2MTQ9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjE1LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNjE2Ol9fYnBmX2tmdW5jIGludCBicGZfc2VuZF9zaWduYWxfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBzaWcsIGVudW0gcGlkX3R5cGUgdHlwZSxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzYxNy1cXHRcXHRcXHRcXHQgICAgIHU2NCB2YWx1ZSlcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjIxLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNjIyOlxcdHJldHVybiBicGZfc2VuZF9zaWduYWxfY29tbW9uKHNpZywgdHlwZSwgdGFzaywgdmFsdWUpO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjIzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6Mzk6MzEuNzI3NTAxNDcyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE5MTQyMTY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCUEYgS2Z1bmM6IGBicGZfc2VuZF9zaWduYWxfdGFza2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgYnBmX3NlbmRfc2lnbmFsX3Rhc2tgLiBSaWdodCwgdGhhdCdzIGEgQlBGIGtmdW5jLiBJbnRlcmVzdGluZy4gVGhlIGNvZGUgcGF0aCBJJ20gZXhhbWluaW5nIGludm9sdmVzIGBicGZfc2VuZF9zaWduYWxfdGFzayh0YXNrLCAuLi4pYCBiZWluZyBpbnZva2VkLCBhbmQgY3J1Y2lhbGx5LCB0aGUgYHRhc2tgIGFyZ3VtZW50IGhlcmUgcmVmZXJzIHRvIGEgKmRpZmZlcmVudCogdGFzaywgbm90IHRoZSBjdXJyZW50IG9uZS4gSSBzZWUgYSBjYWxsIHRvIGBubWlfdWFjY2Vzc19va2F5KClgIGluIHRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSBjb2RlLCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZC4gVGhpcyBpcyBhIGJpdCB1bmV4cGVjdGVkIGFuZCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYG5taV91YWNjZXNzX29rYXkoKWAgaXMgYWxsIGFib3V0IGluIHRoaXMgY29udGV4dC4gVGltZSB0byBwdWxsIG91dCB0aGUgZ3JlcCBhbmQgZGlnIGluIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgaGVyZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk1NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjMzLjkxODkyNTE3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODY1OTc0MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibm1pX3VhY2Nlc3Nfb2theVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9ldmVudHMvY29yZS5jPTI5MTE9c3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3NlZ21lbnRfYmFzZSh1bnNpZ25lZCBpbnQgc2VnbWVudClcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9jb3JlLmMtMjkyMy1cXHRcXHQgKi9cXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jOjI5MjQ6XFx0XFx0aWYgKCFubWlfdWFjY2Vzc19va2F5KCkpXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0yOTI1LVxcdFxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYz0yOTk3PXBlcmZfY2FsbGNoYWluX3VzZXIoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5X2N0eCAqZW50cnksIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0zMDE3LVxcbmFyY2gveDg2L2V2ZW50cy9jb3JlLmM6MzAxODpcXHRpZiAoIW5taV91YWNjZXNzX29rYXkoKSlcXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTMwMTktXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaD03ND1zdHJ1Y3QgdGxiX3N0YXRlIHtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgtODMtXFx0ICogd2hlbiBDUjMgYW5kIGxvYWRlZF9tbSB3b3VsZCBvdGhlcndpc2UgYmUgaW5jb25zaXN0ZW50LiAgVGhpc1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmg6ODQ6XFx0ICogaXMgZm9yIG5taV91YWNjZXNzX29rYXkoKSdzIGJlbmVmaXQuXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaC04NS1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmg9MTkwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90bGJmbHVzaC5oLTE5Ny1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90bGJmbHVzaC5oOjE5ODpib29sIG5taV91YWNjZXNzX29rYXkodm9pZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaDoxOTk6I2RlZmluZSBubWlfdWFjY2Vzc19va2F5IG5taV91YWNjZXNzX29rYXlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90bGJmbHVzaC5oLTIwMC1cXG4tLVxcbmFyY2gveDg2L2xpYi9pbnNuLWV2YWwuYz02MjE9c3RhdGljIGJvb2wgZ2V0X2Rlc2Moc3RydWN0IGRlc2Nfc3RydWN0ICpvdXQsIHVuc2lnbmVkIHNob3J0IHNlbClcXG4tLVxcbmFyY2gveDg2L2xpYi9pbnNuLWV2YWwuYy02MzctXFx0XFx0ICovXFxuYXJjaC94ODYvbGliL2luc24tZXZhbC5jOjYzODpcXHRcXHRpZiAoIW5taV91YWNjZXNzX29rYXkoKSlcXG5hcmNoL3g4Ni9saWIvaW5zbi1ldmFsLmMtNjM5LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmFyY2gveDg2L2xpYi91c2VyY29weS5jPTMyPWNvcHlfZnJvbV91c2VyX25taSh2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbilcXG4tLVxcbmFyY2gveDg2L2xpYi91c2VyY29weS5jLTM4LVxcbmFyY2gveDg2L2xpYi91c2VyY29weS5jOjM5OlxcdGlmICghbm1pX3VhY2Nlc3Nfb2theSgpKVxcbmFyY2gveDg2L2xpYi91c2VyY29weS5jLTQwLVxcdFxcdHJldHVybiBuO1xcbi0tXFxuYXJjaC94ODYvbW0vdGxiLmM9NzgzPXZvaWQgc3dpdGNoX21tX2lycXNfb2ZmKHN0cnVjdCBtbV9zdHJ1Y3QgKnVudXNlZCwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCxcXG4tLVxcbmFyY2gveDg2L21tL3RsYi5jLTkwOS1cXHRcXHQvKlxcbmFyY2gveDg2L21tL3RsYi5jOjkxMDpcXHRcXHQgKiBJbmRpY2F0ZSB0aGF0IENSMyBpcyBhYm91dCB0byBjaGFuZ2UuIG5taV91YWNjZXNzX29rYXkoKVxcbmFyY2gveDg2L21tL3RsYi5jLTkxMS1cXHRcXHQgKiBhbmQgb3RoZXJzIGFyZSBzZW5zaXRpdmUgdG8gdGhlIHdpbmRvdyB3aGVyZSBtbV9jcHVtYXNrKCksXFxuLS1cXG5hcmNoL3g4Ni9tbS90bGIuYz0xNjgyPXZvaWQgYXJjaF90bGJiYXRjaF9mbHVzaChzdHJ1Y3QgYXJjaF90bGJmbHVzaF91bm1hcF9iYXRjaCAqYmF0Y2gpXFxuLS1cXG5hcmNoL3g4Ni9tbS90bGIuYy0xNzIxLSAqL1xcbmFyY2gveDg2L21tL3RsYi5jOjE3MjI6Ym9vbCBubWlfdWFjY2Vzc19va2F5KHZvaWQpXFxuYXJjaC94ODYvbW0vdGxiLmMtMTcyMy17XFxuLS1cXG5hcmNoL3g4Ni9tbS90bGIuYy0xNzMxLVxcdCAqIGN1cnJlbnRfbW0tXFx1MDAzZXBnZCA9PSBfX3ZhKHJlYWRfY3IzX3BhKCkpLiAgVGhpcyBtYXkgYmUgc2xvdywgdGhvdWdoLFxcbmFyY2gveDg2L21tL3RsYi5jOjE3MzI6XFx0ICogaWYgd2UncmUgcnVubmluZyBpbiBhIFZNIHdpdGggc2hhZG93IHBhZ2luZywgYW5kIG5taV91YWNjZXNzX29rYXkoKVxcbmFyY2gveDg2L21tL3RsYi5jLTE3MzMtXFx0ICogaXMgc3VwcG9zZWQgdG8gYmUgcmVhc29uYWJseSBmYXN0Llxcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaC0yNC0gKi9cXG5pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oOjI1OiNpZm5kZWYgbm1pX3VhY2Nlc3Nfb2theVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmg6MjY6IyBkZWZpbmUgbm1pX3VhY2Nlc3Nfb2theSgpIHRydWVcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oLTI3LSNlbmRpZlxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM1NT1CUEZfQ0FMTF8zKGJwZl9wcm9iZV93cml0ZV91c2VyLCB2b2lkIF9fdXNlciAqLCB1bnNhZmVfcHRyLCBjb25zdCB2b2lkICosIHNyYyxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjUtXFx0ICpcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzY2OlxcdCAqIG5taV91YWNjZXNzX29rYXkoKSBlbnN1cmVzIHRoZSBwcm9iZSBpcyBub3QgcnVuIGluIGFuIGludGVyaW1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzY3LVxcdCAqIHN0YXRlLCB3aGVuIHRoZSB0YXNrIG9yIG1tIGFyZSBzd2l0Y2hlZC4gVGhpcyBpcyBzcGVjaWZpY2FsbHlcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzMtXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6Mzc0OlxcdGlmICh1bmxpa2VseSghbm1pX3VhY2Nlc3Nfb2theSgpKSlcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc1LVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9ODQ3PXN0YXRpYyBpbnQgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbih1MzIgc2lnLCBlbnVtIHBpZF90eXBlIHR5cGUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTY0IHZhbHVlKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTg3My1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo4NzQ6XFx0LyogU2luY2Ugbm1pX3VhY2Nlc3Nfb2theSgpIGlzIG9ubHkgZm9yIHRoZSBjdXJyZW50XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTg3NS1cXHQgKiB0YXNrLCBjaGVjayBpZiB0YXNrIGlzIGN1cnJlbnQuXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTg3Ni1cXHQgKi9cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6ODc3OlxcdGlmICh0YXNrID09IGN1cnJlbnQgXFx1MDAyNlxcdTAwMjYgdW5saWtlbHkoIW5taV91YWNjZXNzX29rYXkoKSkpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTg3OC1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxubW0vbWFjY2Vzcy5jPTEyMD1sb25nIGNvcHlfZnJvbV91c2VyX25vZmF1bHQodm9pZCAqZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbm1tL21hY2Nlc3MuYy0xMjYtXFxubW0vbWFjY2Vzcy5jOjEyNzpcXHRpZiAoIW5taV91YWNjZXNzX29rYXkoKSlcXG5tbS9tYWNjZXNzLmMtMTI4LVxcdFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjM1LjcwNTUyNjYzN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwMjYwNzg5NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGggRnV6emluZzogQSBCUEYgU2lnbmFsIEluamVjdGlvbiBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGEgY2hhbmdlIHRvIGBicGZfc2VuZF9zaWduYWxfY29tbW9uYCBpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gVGhlIGNvcmUgaXNzdWUgaXMgdGhhdCB3aGVuIGBicGZfc2VuZF9zaWduYWxfdGFza2AgaXMgY2FsbGVkIGZyb20gYSBrd29ya2VyIHRocmVhZCwgYSB0cmFjZXBvaW50LCBvciBzb21lIG90aGVyIGNvbnRleHQgd2hlcmUgdGhlIGBjdXJyZW50YCB0YXNrIGlzIGEga3RocmVhZCwgYG5taV91YWNjZXNzX29rYXkoKWAgZmFpbHMuIFRoaXMgaGFwcGVucyBiZWNhdXNlIGt0aHJlYWRzIG9uIHg4NiBkb24ndCBoYXZlIGEgdmFsaWQgYGN1cnJlbnQtXHUwMDNlbW1gIG9yIHRoZWlyIENSMyBpcyBkaWZmZXJlbnQsIGFuZCBhcyBhIHJlc3VsdCwgYGJwZl9zZW5kX3NpZ25hbF90YXNrYCB3YXMgaW5jb3JyZWN0bHkgcmV0dXJuaW5nIC1FUEVSTSBldmVuIHdoZW4gaXQgc2hvdWxkIGhhdmUgc3VjY2VlZGVkIGluIHNlbmRpbmcgYSBzaWduYWwgdG8gYSB1c2VyIHRhc2suIFRoaXMgY2hhbmdlIGFkZHJlc3NlcyB0aGF0LlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBmdXp6YWJsZT8gSSBoYXZlIGEgcHJldHR5IGNsZWFyIGNoZWNrbGlzdCBpbiBtaW5kLiBEb2VzIGl0IGFmZmVjdCBjb3JlIGtlcm5lbCBsb2dpYz8gQ2hlY2suIFRoaXMgcGF0Y2ggZGlyZWN0bHkgbW9kaWZpZXMgdGhlIEJQRiB0cmFjaW5nIGhlbHBlciwgc3BlY2lmaWNhbGx5IGBicGZfc2VuZF9zaWduYWxfdGFza2Agd2hpY2ggaXMgYSBrZnVuYy4gVGhhdCdzIGEgZ29vZCBzaWduLiBJdCdzIGZpeGluZyBhIGJ1ZyB0aGF0IHByZXZlbnRlZCBzaWduYWwgc2VuZGluZyBmcm9tIEJQRiBwcm9ncmFtcyB0byBvdGhlciB0YXNrcywgYW5kIEkgY2FuIGVudmlzaW9uIGF0dGFjaGluZyB0aGF0IEJQRiBjb2RlIHRvIHRyYWNlcG9pbnRzIG9yIGt3b3JrZXJzIHdoaWNoIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZS5cblxuR2l2ZW4gbXkgY3JpdGVyaWEsIHRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBJIG1lYW4sIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBCUEYgc2lnbmFsIGluamVjdGlvbiBwYXRoLCB3aGljaCwgaWYgbWlzaGFuZGxlZCwgY291bGQgYmUgcHJvYmxlbWF0aWMuXG5cbk5vdywgbGV0IG1lIGNoZWNrIHRoZSByZWxldmFudCBDT05GSUcgb3B0aW9ucyBhbmQgRm9jdXNTeW1ib2xzIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgcGF0aCBpcyBhY3R1YWxseSBlbmFibGVkLiBMZXQgbWUgZmluZCBga2VybmVsL3RyYWNlL01ha2VmaWxlYCBvciBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCB0byBzZWUgd2hpY2ggY29uZmlnIG9wdGlvbnMgZW5hYmxlIGBicGZfdHJhY2UuY2AsIGVzcGVjaWFsbHkgYGJwZl9zZW5kX3NpZ25hbF90YXNrYC4gT25jZSBJIGtub3cgdGhhdCwgSSdsbCBiZSBpbiBnb29kIHNoYXBlIHRvIHN0YXJ0IHByZXBwaW5nIGEgZnV6emluZyBjYW1wYWlnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk1OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozOTo0MS43MzE2MDc5MzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTg0MDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl90cmFjZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9NYWtlZmlsZT01ND1LQ09WX0lOU1RSVU1FTlRfdHJhY2VfaXJxc29mZi5vIDo9IG5cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNTUtXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjU2OkNGTEFHU19icGZfdHJhY2UubyA6PSAtSSQoc3JjKVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01Ny1cXG4tLVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZT0xMDk9b2JqLSQoQ09ORklHX1VTRVJfRVZFTlRTKSArPSB0cmFjZV9ldmVudHNfdXNlci5vXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjExMDpvYmotJChDT05GSUdfQlBGX0VWRU5UUykgKz0gYnBmX3RyYWNlLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTExLW9iai0kKENPTkZJR19LUFJPQkVfRVZFTlRTKSArPSB0cmFjZV9rcHJvYmUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozOTo0MS43ODAxOTc0OTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzYwODU2NDM1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBLY29uZmlnIGZvciBCUEZfRVZFTlRTKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW50YWwgbWFwIG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYEJQRl9FVkVOVFNgLiBJJ20gYXNzdW1pbmcgaXQncyBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBCUEYgaW5mcmFzdHJ1Y3R1cmUsIGJ1dCBpdCdzIGFsd2F5cyB3aXNlIHRvIGNvbmZpcm0gYW5kIHVuZGVyc3RhbmQgaXRzIHByZWNpc2UgbG9jYXRpb24gd2l0aGluIHRoZSBLY29uZmlnIGhpZXJhcmNoeS4gVGhpcyBpcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLCBhbmQgd2hlcmUgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0cyBhcmUgbWFuYWdlZC4gSSdsbCBuZWVkIHRvIGtub3cgd2hldGhlciBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hhdCBvdGhlciBvcHRpb25zIGl0IG1pZ2h0IGRlcGVuZCBvbiAoZS5nLiwgYENPTkZJR19CUEZgLCBgQ09ORklHX0RFQlVHX0lORk9fQlRGYCksIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgY29uc3RyYWludHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoaXMgaXMgYSBmZWF0dXJlIGZsYWcsIGEgZGVwZW5kZW5jeSwgb3IgYSBwYXJ0IG9mIGEgbGFyZ2VyLCBtb3JlIGNvbXBsZXggc3Vic3lzdGVtIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gVGhlIGdvYWwgaXMgdG8gZWl0aGVyIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgcXVpY2tseSwgb3IsIG1vcmUgaW1wb3J0YW50bHksIGRpc2NvdmVyIGFueSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBwaXRmYWxscyBvciBudWFuY2VzIHJlbGF0ZWQgdG8gYEJQRl9FVkVOVFNgLiBJIG5lZWQgdG8gaGF2ZSBhIGNvbmNyZXRlIGdyYXNwIG9mIHRoZSBmZWF0dXJlLCBzbyBJIGNhbiBjb250aW51ZSB3aXRoIHRoZSB0YXNrIGF0IGhhbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTYwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6Mzk6NDkuMzg4NzYzNjY3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzEyNDk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0VWRU5UU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTgzOT1jb25maWcgRVBST0JFX0VWRU5UU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODUyLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg1Mzpjb25maWcgQlBGX0VWRU5UU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg1NC1cXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjQ5LjQzNTg5NTY5NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzM3MzQ1MjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgS2VybmVsIFRyYWNlIEtjb25maWcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AuIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB3aGF0J3MgZ29pbmcgb24gYXJvdW5kIGxpbmUgODUzLiBJJ3ZlIGdvdCBhIGh1bmNoIGFib3V0IHNvbWV0aGluZyB0aGVyZSwgbGlrZWx5IHJlbGF0ZWQgdG8gYSBwYXJ0aWN1bGFyIHRyYWNpbmcgZmVhdHVyZSBvciBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0J3Mgc2VlIGlmIHRoaXMgaHVuY2ggaXMgY29ycmVjdCwgb3IgaWYgdGhlcmUncyBhIHJlbGF0ZWQgZGVwZW5kZW5jeSB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoYXQgZnVuY3Rpb24uIEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGlzIHNlY3Rpb24gb2YgdGhlIEtjb25maWcgZmlsZSBjb250cm9scyB0aGUgYnVpbGQgYW5kIGluY2x1c2lvbiBvZiBzcGVjaWZpYyB0cmFjaW5nIGNhcGFiaWxpdGllcyB3aXRoaW4gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozOTo1MS4xNzMyNDI4NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NTA6XFx0XFx0ICBjb252ZXJ0IHRoZSB0eXBlIG9mIGFuIGV2ZW50IGZpZWxkLiBGb3IgZXhhbXBsZSwgdHVybiBhblxcbiA4NTE6XFx0XFx0ICBhZGRyZXNzIGludG8gYSBzdHJpbmcuXFxuIDg1MjpcXHRcXG4gODUzOlxcdGNvbmZpZyBCUEZfRVZFTlRTXFxuIDg1NDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuIDg1NTpcXHRcXHRkZXBlbmRzIG9uIChLUFJPQkVfRVZFTlRTIHx8IFVQUk9CRV9FVkVOVFMpIFxcdTAwMjZcXHUwMDI2IFBFUkZfRVZFTlRTXFxuIDg1NjpcXHRcXHRib29sXFxuIDg1NzpcXHRcXHRkZWZhdWx0IHlcXG4gODU4OlxcdFxcdGhlbHBcXG4gODU5OlxcdFxcdCAgVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gYXR0YWNoIEJQRiBwcm9ncmFtcyB0byBrcHJvYmUsIHVwcm9iZSwgYW5kXFxuIDg2MDpcXHRcXHQgIHRyYWNlcG9pbnQgZXZlbnRzLlxcbiA4NjE6XFx0XFxuIDg2MjpcXHRjb25maWcgRFlOQU1JQ19FVkVOVFNcXG4gODYzOlxcdFxcdGRlZl9ib29sIG5cXG4gODY0OlxcdFxcbiA4NjU6XFx0Y29uZmlnIFBST0JFX0VWRU5UU1xcbiA4NjY6XFx0XFx0ZGVmX2Jvb2wgblxcbiA4Njc6XFx0XFxuIDg2ODpcXHRjb25maWcgQlBGX0tQUk9CRV9PVkVSUklERVxcbiA4Njk6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBwcm9ncmFtcyB0byBvdmVycmlkZSBhIGtwcm9iZWQgZnVuY3Rpb25cXFwiXFxuIDg3MDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9FVkVOVFNcXG4gODcxOlxcdFxcdGRlcGVuZHMgb24gRlVOQ1RJT05fRVJST1JfSU5KRUNUSU9OXFxuIDg3MjpcXHRcXHRkZWZhdWx0IG5cXG4gODczOlxcdFxcdGhlbHBcXG4gODc0OlxcdFxcdCBBbGxvd3MgQlBGIHRvIG92ZXJyaWRlIHRoZSBleGVjdXRpb24gb2YgYSBwcm9iZWQgZnVuY3Rpb24gYW5kXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjUxLjE3MzMzMTIxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyMDM5NDAwMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIEJQRiBTaWduYWwgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcsIGJleW9uZCB0aGUgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uLCB3ZSBzaG91bGQgZG91YmxlLWNoZWNrIHNvbWV0aGluZyBjcnVjaWFsLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgaWYgdGhlIGZ1bmN0aW9uIGBicGZfc2VuZF9zaWduYWxfdGFza2AgaW4gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgaXMgd3JhcHBlZCB3aXRoaW4gYW55IHByZXByb2Nlc3NvciBgI2lmZGVmYCBkaXJlY3RpdmVzLiBUaGF0J3MgYSBjbGFzc2ljIGdvdGNoYSwgYW5kIGl0IGNvdWxkIGRyYW1hdGljYWxseSBhbHRlciBpdHMgYXZhaWxhYmlsaXR5IGRlcGVuZGluZyBvbiB0aGUga2VybmVsIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEkndmUgZ290IGEgaHVuY2ggaXQgbWlnaHQgYmUsIGFuZCBpZiBzbywgaXQncyBnb2luZyB0byBpbmZsdWVuY2Ugb3VyIGFuYWx5c2lzIGdyZWF0bHkuIFNvLCBsZXQgbWUganVtcCBvdmVyIHRvIGxpbmUgMzYxNiBpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBhbmQgdGFrZSBhIGdvb2QgbG9vayBhcm91bmQgdGhhdCBhcmVhLiBOZWVkIHRvIHNlZSBpZiBpdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDc2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozOTo1Ni4zNzcyNzM4NzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNjEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNjEwOlxcdHtcXG4zNjExOlxcdFxcdHJldHVybiBzdHJuY3B5X2Zyb21fa2VybmVsX25vZmF1bHQoZHN0LCB1bnNhZmVfc3JjLCBzaXplKTtcXG4zNjEyOlxcdH1cXG4zNjEzOlxcdFxcbjM2MTQ6XFx0X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbjM2MTU6XFx0XFxuMzYxNjpcXHRfX2JwZl9rZnVuYyBpbnQgYnBmX3NlbmRfc2lnbmFsX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgc2lnLCBlbnVtIHBpZF90eXBlIHR5cGUsXFxuMzYxNzpcXHRcXHRcXHRcXHRcXHQgICAgIHU2NCB2YWx1ZSlcXG4zNjE4OlxcdHtcXG4zNjE5OlxcdFxcdGlmICh0eXBlICE9IFBJRFRZUEVfUElEIFxcdTAwMjZcXHUwMDI2IHR5cGUgIT0gUElEVFlQRV9UR0lEKVxcbjM2MjA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzYyMTpcXHRcXG4zNjIyOlxcdFxcdHJldHVybiBicGZfc2VuZF9zaWduYWxfY29tbW9uKHNpZywgdHlwZSwgdGFzaywgdmFsdWUpO1xcbjM2MjM6XFx0fVxcbjM2MjQ6XFx0XFxuMzYyNTpcXHRfX2JwZl9rZnVuYyBpbnQgYnBmX3Byb2JlX3JlYWRfdXNlcl9keW5wdHIoY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRwdHIsIHU2NCBvZmYsXFxuMzYyNjpcXHRcXHRcXHRcXHRcXHRcXHQgICB1NjQgc2l6ZSwgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbilcXG4zNjI3OlxcdHtcXG4zNjI4OlxcdFxcdHJldHVybiBfX2JwZl9keW5wdHJfY29weShkcHRyLCBvZmYsIHNpemUsIChjb25zdCB2b2lkIF9fZm9yY2UgKil1bnNhZmVfcHRyX19pZ24sXFxuMzYyOTpcXHRcXHRcXHRcXHRcXHQgY29weV91c2VyX2RhdGFfbm9mYXVsdCwgTlVMTCk7XFxuMzYzMDpcXHR9XFxuMzYzMTpcXHRcXG4zNjMyOlxcdF9fYnBmX2tmdW5jIGludCBicGZfcHJvYmVfcmVhZF9rZXJuZWxfZHlucHRyKGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpkcHRyLCB1NjQgb2ZmLFxcbjM2MzM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB1NjQgc2l6ZSwgY29uc3Qgdm9pZCAqdW5zYWZlX3B0cl9faWduKVxcbjM2MzQ6XFx0e1xcbjM2MzU6XFx0XFx0cmV0dXJuIF9fYnBmX2R5bnB0cl9jb3B5KGRwdHIsIG9mZiwgc2l6ZSwgdW5zYWZlX3B0cl9faWduLFxcbjM2MzY6XFx0XFx0XFx0XFx0XFx0IGNvcHlfa2VybmVsX2RhdGFfbm9mYXVsdCwgTlVMTCk7XFxuMzYzNzpcXHR9XFxuMzYzODpcXHRcXG4zNjM5OlxcdF9fYnBmX2tmdW5jIGludCBicGZfcHJvYmVfcmVhZF91c2VyX3N0cl9keW5wdHIoY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRwdHIsIHU2NCBvZmYsXFxuMzY0MDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgdTY0IHNpemUsIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24pXFxuMzY0MTpcXHR7XFxuMzY0MjpcXHRcXHRyZXR1cm4gX19icGZfZHlucHRyX2NvcHlfc3RyKGRwdHIsIG9mZiwgc2l6ZSwgKGNvbnN0IHZvaWQgX19mb3JjZSAqKXVuc2FmZV9wdHJfX2lnbixcXG4zNjQzOlxcdFxcdFxcdFxcdFxcdCAgICAgY29weV91c2VyX3N0cl9ub2ZhdWx0LCBOVUxMKTtcXG4zNjQ0OlxcdH1cXG4zNjQ1OlxcdFxcbjM2NDY6XFx0X19icGZfa2Z1bmMgaW50IGJwZl9wcm9iZV9yZWFkX2tlcm5lbF9zdHJfZHlucHRyKGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpkcHRyLCB1NjQgb2ZmLFxcbjM2NDc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHU2NCBzaXplLCBjb25zdCB2b2lkICp1bnNhZmVfcHRyX19pZ24pXFxuMzY0ODpcXHR7XFxuMzY0OTpcXHRcXHRyZXR1cm4gX19icGZfZHlucHRyX2NvcHlfc3RyKGRwdHIsIG9mZiwgc2l6ZSwgdW5zYWZlX3B0cl9faWduLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozOTo1Ni4zNzc0Mjk1OTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAyODM1MjgwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuXG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgRGVwZW5kZW5jaWVzIGluIGBicGZfdHJhY2UuY2AqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IGRlcGVuZGVuY2llcywgc28gSSdtIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgYnBmX3RyYWNlLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBjbGFyaWZ5IGlmIHRoZSBga2Z1bmNzYCB3aXRoaW4gdGhhdCBmaWxlIGhhdmUgYW55IGRlcGVuZGVuY2llcyBvbiBCVEYgKEJURiBiZWluZyBlc3NlbnRpYWwgZm9yIHR5cGUgaW5mb3JtYXRpb24gaW4gQlBGIHByb2dyYW1zKSwgb3IgcG9zc2libHkgb3RoZXIga2VybmVsIGNvbmZpZ3VyYXRpb25zIGxpa2UgYENPTkZJR19CUEZfU1lTQ0FMTGAgKHdoaWNoIGVuYWJsZXMgdGhlIEJQRiBzeXNjYWxsIGl0c2VsZikgb3IgYENPTkZJR19ERUJVR19JTkZPX0JURmAgKHdoaWNoIGltcGFjdHMgdGhlIGF2YWlsYWJpbGl0eSBhbmQgY29tcGxldGVuZXNzIG9mIEJURiBkYXRhKS4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgcG9ydGFiaWxpdHkgYW5kIGVuc3VyaW5nIHRoaW5ncyB3b3JrIGFzIGV4cGVjdGVkLlxuXG5CZXlvbmQgdGhhdCwgSSBhbHNvIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYGJwZl9zZW5kX3NpZ25hbF90YXNrYCBmdW5jdGlvbi4gSXQncyBhIGtleSBwcmltaXRpdmUgZm9yIGludGVyLXByb2Nlc3Mgc2lnbmFsaW5nIHdpdGhpbiBCUEYgcHJvZ3JhbXMsIHNvIGtub3dpbmcgd2hlcmUgaXQncyByZWdpc3RlcmVkIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHNpZ25hbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEyMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6Mzk6NTguNDA1Nzg1ODcxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzEzMzg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc2VuZF9zaWduYWxfdGFza1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zNjE0PV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzYxNS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzYxNjpfX2JwZl9rZnVuYyBpbnQgYnBmX3NlbmRfc2lnbmFsX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgc2lnLCBlbnVtIHBpZF90eXBlIHR5cGUsXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM2MTctXFx0XFx0XFx0XFx0ICAgICB1NjQgdmFsdWUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjU4LjQ1MjkyNTQxOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTc2NzM4OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgdGhlIGtmdW5jIFJlZ2lzdHJhdGlvbnMgaW4gYnBmX3RyYWNlLmMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gYGJwZl90cmFjZS5jYCB0byB1bmRlcnN0YW5kIHRoZSBrZnVuYyByZWdpc3RyYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIEJURiAoQlBGIFR5cGUgRm9ybWF0KSBrZnVuYyBzZXQuIEkgd2FudCB0byBwaW5wb2ludCBleGFjdGx5IHdoZXJlIGFuZCBob3cgdGhlc2Uga2VybmVsIGZ1bmN0aW9ucyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoYXQgQlRGIGluZnJhc3RydWN0dXJlLiBJdCdzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBCUEYgdmVyaWZpZXIgaGFuZGxlcyB0aGVzZSBmdW5jdGlvbiBjYWxscyBhbmQgaG93IHdlIGV4cG9zZSB0aGVtIHRvIHVzZXJzcGFjZS4gSSBuZWVkIHRvIHRyYWNlIHRoZSByZWdpc3RyYXRpb24gcG9pbnRzIHRvIGhhdmUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBrZnVuY3MgYXJlIG1hZGUgYXZhaWxhYmxlIGZvciB1c2UgaW4gQlBGIHByb2dyYW1zLiBUaGlzIGluY2x1ZGVzIGlkZW50aWZ5aW5nIHRoZSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgYW5kIG1lY2hhbmlzbXMgaW52b2x2ZWQuIEknbSBsb29raW5nIGZvciB0aGUgcmVnaXN0cmF0aW9uIG1lY2hhbmlzbXMgdG8gc2VlIGhvdyB0aGUgQlRGIGluZm9ybWF0aW9uIGlzIGNvbnN0cnVjdGVkIGFuZCBwb3B1bGF0ZWQsIGFzIHdlbGwgYXMgY29uc2lkZXJpbmcgcG90ZW50aWFsIGltcGFjdHMgb24gdmVyaWZpZXIgcGVyZm9ybWFuY2UgYW5kIGtmdW5jIHVzYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NjIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDowMS4wMjk2NjcyNDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAyNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNjUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNjUwOlxcdFxcdFxcdFxcdFxcdCAgICAgY29weV9rZXJuZWxfc3RyX25vZmF1bHQsIE5VTEwpO1xcbjM2NTE6XFx0fVxcbjM2NTI6XFx0XFxuMzY1MzpcXHRfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX2R5bnB0cihjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZHB0ciwgdTY0IG9mZixcXG4zNjU0OlxcdFxcdFxcdFxcdFxcdFxcdCAgdTY0IHNpemUsIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24pXFxuMzY1NTpcXHR7XFxuMzY1NjpcXHRcXHRyZXR1cm4gX19icGZfZHlucHRyX2NvcHkoZHB0ciwgb2ZmLCBzaXplLCAoY29uc3Qgdm9pZCBfX2ZvcmNlICopdW5zYWZlX3B0cl9faWduLFxcbjM2NTc6XFx0XFx0XFx0XFx0XFx0IGNvcHlfdXNlcl9kYXRhX3NsZWVwYWJsZSwgTlVMTCk7XFxuMzY1ODpcXHR9XFxuMzY1OTpcXHRcXG4zNjYwOlxcdF9fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfc3RyX2R5bnB0cihjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZHB0ciwgdTY0IG9mZixcXG4zNjYxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHU2NCBzaXplLCBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduKVxcbjM2NjI6XFx0e1xcbjM2NjM6XFx0XFx0cmV0dXJuIF9fYnBmX2R5bnB0cl9jb3B5X3N0cihkcHRyLCBvZmYsIHNpemUsIChjb25zdCB2b2lkIF9fZm9yY2UgKil1bnNhZmVfcHRyX19pZ24sXFxuMzY2NDpcXHRcXHRcXHRcXHRcXHQgICAgIGNvcHlfdXNlcl9zdHJfc2xlZXBhYmxlLCBOVUxMKTtcXG4zNjY1OlxcdH1cXG4zNjY2OlxcdFxcbjM2Njc6XFx0X19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX2R5bnB0cihjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZHB0ciwgdTY0IG9mZixcXG4zNjY4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICB1NjQgc2l6ZSwgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbixcXG4zNjY5OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4zNjcwOlxcdHtcXG4zNjcxOlxcdFxcdHJldHVybiBfX2JwZl9keW5wdHJfY29weShkcHRyLCBvZmYsIHNpemUsIChjb25zdCB2b2lkIF9fZm9yY2UgKil1bnNhZmVfcHRyX19pZ24sXFxuMzY3MjpcXHRcXHRcXHRcXHRcXHQgY29weV91c2VyX2RhdGFfc2xlZXBhYmxlLCB0c2spO1xcbjM2NzM6XFx0fVxcbjM2NzQ6XFx0XFxuMzY3NTpcXHRfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyX2R5bnB0cihjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZHB0ciwgdTY0IG9mZixcXG4zNjc2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHU2NCBzaXplLCBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLFxcbjM2Nzc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuMzY3ODpcXHR7XFxuMzY3OTpcXHRcXHRyZXR1cm4gX19icGZfZHlucHRyX2NvcHlfc3RyKGRwdHIsIG9mZiwgc2l6ZSwgKGNvbnN0IHZvaWQgX19mb3JjZSAqKXVuc2FmZV9wdHJfX2lnbixcXG4zNjgwOlxcdFxcdFxcdFxcdFxcdCAgICAgY29weV91c2VyX3N0cl9zbGVlcGFibGUsIHRzayk7XFxuMzY4MTpcXHR9XFxuMzY4MjpcXHRcXG4zNjgzOlxcdF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XFxuMzY4NDpcXHRcXG4zNjg1OlxcdCNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUykgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbjM2ODY6XFx0ICAgIGRlZmluZWQoQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTKVxcbjM2ODc6XFx0XFxuMzY4ODpcXHRzdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbjM2ODk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDowMS4wMjk4NzEyNjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzODkyMzAwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUga2Z1bmMgQlRGIElEIFNldCoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIHRoZSBrZnVuYyBCVEYgSUQgc2V0IGlzIGFjdHVhbGx5IGRlZmluZWQgYW5kL29yIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBzdGFydCBwb2tpbmcgYXJvdW5kIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBJdCdzIHRoZSBsb2dpY2FsIHBsYWNlLCBnaXZlbiB0aGUgY29udGV4dCBvZiBCUEYgYW5kIHRyYWNpbmcuIEknbSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgdGhlIHNldCdzIGRlY2xhcmF0aW9uLCBpdHMgaW5pdGlhbGl6YXRpb24sIGFuZCBpbXBvcnRhbnRseSwgdGhlIG1lY2hhbmlzbXMgcmVzcG9uc2libGUgZm9yIHBvcHVsYXRpbmcgYW5kIHVzaW5nIHRoaXMgZGF0YSBzdHJ1Y3R1cmUuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBCVEYgSURzIGZvciBrZnVuY3MgYXJlIGxpbmtlZCB0byB0aGVpciBjb3JyZXNwb25kaW5nIGtlcm5lbCBmdW5jdGlvbnMgd2l0aGluIHRoaXMgY29kZWJhc2UuIEl0IHdpbGwgYmUgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgaXMgYSBjZW50cmFsaXplZCByZWdpc3RyYXRpb24gb3IgbWFuYWdlbWVudCBwcm9jZXNzIGhhcHBlbmluZy4gRXNzZW50aWFsbHksIEkgbmVlZCB0byBzZWUgdGhlIGxpZmVjeWNsZSBvZiB0aGF0IGtmdW5jIEJURiBJRCBzZXQgZnJvbSBjcmVhdGlvbiB0byB1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTk5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDowMi44Njg3OTY1ODZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMDI4NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzQ2Mj1zdGF0aWMgaW50IF9faW5pdCBicGZfdHJhY2Vfa2Z1bmNzX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNDY1LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNDY2OlxcdGVyciA9IGVyciA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfS1BST0JFLCBcXHUwMDI2YnBmX3Nlc3Npb25fa2Z1bmNfc2V0KTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzQ2NzpcXHRlcnIgPSBlcnIgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFxcdTAwMjZicGZfc2Vzc2lvbl9rZnVuY19zZXQpO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNDY4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDowMi45MTk4MzE5ODVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAzOTUwNzI1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuXG5cbioqVHJhY2luZyBEb3duIHRoZSBCUEYgU2lnbmFsIFBhdGgqKlxuXG5BbHJpZ2h0LCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBicGZfc2VuZF9zaWduYWxfdGFza2AgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZyb20uIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byBjaGVjayB0aGUgQlBGIHRyYWNlcG9pbnQgaW5pdGlhbGl6YXRpb24sIHNvIEknbSBsb29raW5nIGF0IGBicGZfdHJhY2Vfa2Z1bmNzX2luaXRgIG9yIHBvdGVudGlhbGx5IHRoZSBCVEZfU0VUOCBpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gQnV0IHRoYXQncyBqdXN0IGEgc3RhcnRpbmcgcG9pbnQuIFRvIGdldCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSBpdCdzIGFjdHVhbGx5IHVzZWQgd2l0aGluIHRoZSBrZXJuZWwsIEkgbmVlZCB0byBkbyBhIGJyb2FkZXIgc2VhcmNoLiBUaW1lIHRvIGZpcmUgdXAgYSBncmVwIGFjcm9zcyB0aGUgZW50aXJlIGNvZGViYXNlIGFuZCBsb29rIGZvciBldmVyeSBpbnN0YW5jZSBvZiBgYnBmX3NlbmRfc2lnbmFsX3Rhc2tgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBsYXkgb2YgdGhlIGxhbmQgYW5kIHBpbnBvaW50IHRoZSBjcml0aWNhbCBjYWxsIHNpdGVzLiBIb3BlZnVsbHksIHRoYXQgZ2l2ZXMgbWUgdGhlIGNvbnRleHQgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA0OCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjQwOjA0Ljk1OTM0MTM2MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyNDc5NDgxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc2VuZF9zaWduYWxfdGFza1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hlbHBlcnMuYz00ODU0PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGhyb3cpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDg1NS0jaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODU2OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfc2VuZF9zaWduYWxfdGFzaylcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODU3LSNlbmRpZlxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM2MTQ9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjE1LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNjE2Ol9fYnBmX2tmdW5jIGludCBicGZfc2VuZF9zaWduYWxfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBzaWcsIGVudW0gcGlkX3R5cGUgdHlwZSxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzYxNy1cXHRcXHRcXHRcXHQgICAgIHU2NCB2YWx1ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uYz04PXZvaWQgYnBmX3Rhc2tfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmM6OTppbnQgYnBmX3NlbmRfc2lnbmFsX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgc2lnLCBlbnVtIHBpZF90eXBlIHR5cGUsIHU2NCB2YWx1ZSkgX19rc3ltO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uYy0xMC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uYz0xMz1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBicGZfc2VuZF9zaWduYWxfdGVzdCh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmMtMzEtXFx0XFx0XFx0aWYgKHRhcmdldF9waWQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jOjMyOlxcdFxcdFxcdFxcdHJldCA9IGJwZl9zZW5kX3NpZ25hbF90YXNrKHRhcmdldF90YXNrLCBzaWcsIFBJRFRZUEVfUElELCB2YWx1ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jLTMzLVxcdFxcdFxcdGVsc2VcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uYy0zNi1cXHRcXHRcXHRpZiAodGFyZ2V0X3BpZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmM6Mzc6XFx0XFx0XFx0XFx0cmV0ID0gYnBmX3NlbmRfc2lnbmFsX3Rhc2sodGFyZ2V0X3Rhc2ssIHNpZywgUElEVFlQRV9UR0lELCB2YWx1ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jLTM4LVxcdFxcdFxcdGVsc2VcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uYz02OD1pbnQgc2VuZF9zaWduYWxfa3dvcmtlcih2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmMtNzktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jOjgwOlxcdHJldCA9IGJwZl9zZW5kX3NpZ25hbF90YXNrKHRhcmdldF90YXNrLCBzaWcsIFBJRFRZUEVfVEdJRCwgOCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jLTgxLVxcdGJwZl90YXNrX3JlbGVhc2UodGFyZ2V0X3Rhc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDowNi41ODQxNDA0NzhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ2NDMyNTM0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgYnBmX3NlbmRfc2lnbmFsX3Rhc2tgIEZ1bmN0aW9uJ3MgQXZhaWxhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGJwZl9zZW5kX3NpZ25hbF90YXNrYCB3aXRoaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gaG93IGl0cyBjb21waWxhdGlvbiBpcyBjb250cm9sbGVkOyBpdCBsb29rcyBsaWtlIGl0J3MgcHJvdGVjdGVkIGJ5IGFuIGAjaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNgLiBUaW1lIHRvIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzLiBMZXQncyBzZWUsIGBCUEZfRVZFTlRTYCBuZWVkcyBgQlBGX1NZU0NBTExgLCBhbmQgZWl0aGVyIGBQRVJGX0VWRU5UU2AgYWxvbmcgd2l0aCBlaXRoZXIgYEtQUk9CRV9FVkVOVFNgIG9yIGBVUFJPQkVfRVZFTlRTYC4gR290IGl0LlxuXG5Ob3csIGEgbmFnZ2luZyBmZWVsaW5nIHRlbGxzIG1lIHRoZXJlJ3Mgc29tZXRoaW5nIGFib3V0IEJURiByZXF1aXJlZCBmb3Iga2Z1bmNzLCBzbyBJJ2xsIGRvdWJsZS1jaGVjayBgQ09ORklHX0RFQlVHX0lORk9fQlRGYC4gSSBzaG91bGQgY2hlY2sgaWYgQlRGIGlzLCBpbiBmYWN0LCByZXF1aXJlZCBmb3Iga2Z1bmNzLiBJIGNhbid0IHF1aXRlIHJlY2FsbCBpZiBpdCdzIHN0cmljdGx5IGEgZGVwZW5kZW5jeSBvciBqdXN0IGEgZ29vZC10by1oYXZlLCBhbmQgSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdC5cblxuQWxyaWdodCwgSSdsbCBnbyBjaGVjayBga2VybmVsL2JwZi9oZWxwZXJzLmNgIGFyb3VuZCBsaW5lIDQ4NTAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTQ5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjQwOjEyLjA0ODQ2OTE2MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9oZWxwZXJzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDg0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDg0MDpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JidHJlZV9yb290LCBLRl9SRVRfTlVMTCB8IEtGX1NQSU5MT0NLX1NBRkUpXFxuNDg0MTpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JidHJlZV9sZWZ0LCBLRl9SRVRfTlVMTCB8IEtGX1NQSU5MT0NLX1NBRkUpXFxuNDg0MjpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JidHJlZV9yaWdodCwgS0ZfUkVUX05VTEwgfCBLRl9TUElOTE9DS19TQUZFKVxcbjQ4NDM6XFx0XFxuNDg0NDpcXHQjaWZkZWYgQ09ORklHX0NHUk9VUFNcXG40ODQ1OlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY2dyb3VwX2FjcXVpcmUsIEtGX0FDUVVJUkUgfCBLRl9SQ1UgfCBLRl9SRVRfTlVMTClcXG40ODQ2OlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY2dyb3VwX3JlbGVhc2UsIEtGX1JFTEVBU0UpXFxuNDg0NzpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2Nncm91cF9hbmNlc3RvciwgS0ZfQUNRVUlSRSB8IEtGX1JDVSB8IEtGX1JFVF9OVUxMKVxcbjQ4NDg6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jZ3JvdXBfZnJvbV9pZCwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKVxcbjQ4NDk6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90YXNrX3VuZGVyX2Nncm91cCwgS0ZfUkNVKVxcbjQ4NTA6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90YXNrX2dldF9jZ3JvdXAxLCBLRl9BQ1FVSVJFIHwgS0ZfUkNVIHwgS0ZfUkVUX05VTEwpXFxuNDg1MTpcXHQjZW5kaWZcXG40ODUyOlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGFza19mcm9tX3BpZCwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKVxcbjQ4NTM6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90YXNrX2Zyb21fdnBpZCwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKVxcbjQ4NTQ6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90aHJvdylcXG40ODU1OlxcdCNpZmRlZiBDT05GSUdfQlBGX0VWRU5UU1xcbjQ4NTY6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zZW5kX3NpZ25hbF90YXNrKVxcbjQ4NTc6XFx0I2VuZGlmXFxuNDg1ODpcXHQjaWZkZWYgQ09ORklHX0tFWVNcXG40ODU5OlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfbG9va3VwX3VzZXJfa2V5LCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXFxuNDg2MDpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2xvb2t1cF9zeXN0ZW1fa2V5LCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwpXFxuNDg2MTpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tleV9wdXQsIEtGX1JFTEVBU0UpXFxuNDg2MjpcXHQjaWZkZWYgQ09ORklHX1NZU1RFTV9EQVRBX1ZFUklGSUNBVElPTlxcbjQ4NjM6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl92ZXJpZnlfcGtjczdfc2lnbmF0dXJlLCBLRl9TTEVFUEFCTEUpXFxuNDg2NDpcXHQjZW5kaWZcXG40ODY1OlxcdCNlbmRpZlxcbjQ4NjY6XFx0I2lmZGVmIENPTkZJR19TMzkwXFxuNDg2NzpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2dldF9sb3djb3JlKVxcbjQ4Njg6XFx0I2VuZGlmXFxuNDg2OTpcXHRCVEZfS0ZVTkNTX0VORChnZW5lcmljX2J0Zl9pZHMpXFxuNDg3MDpcXHRcXG40ODcxOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBnZW5lcmljX2tmdW5jX3NldCA9IHtcXG40ODcyOlxcdFxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbjQ4NzM6XFx0XFx0LnNldCAgID0gXFx1MDAyNmdlbmVyaWNfYnRmX2lkcyxcXG40ODc0OlxcdH07XFxuNDg3NTpcXHRcXG40ODc2OlxcdEJURl9JRF9MSVNUKGdlbmVyaWNfZHRvcl9pZHMpXFxuNDg3NzpcXHRCVEZfSUQoc3RydWN0LCB0YXNrX3N0cnVjdClcXG40ODc4OlxcdEJURl9JRChmdW5jLCBicGZfdGFza19yZWxlYXNlX2R0b3IpXFxuNDg3OTpcXHQjaWZkZWYgQ09ORklHX0NHUk9VUFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6MTIuMDQ4Njg1OTkyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg3OTA4NTAyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYGJwZl9zZW5kX3NpZ25hbF90YXNrYCBhbmQgUmVsZXZhbnQgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgYnBmX3NlbmRfc2lnbmFsX3Rhc2tgIGlzIGEgbm9uLXN0YXRpYyBrZXJuZWwgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIGl0IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIGZ1bmN0aW9ucywgZXNwZWNpYWxseSByZWdhcmRpbmcgc2lnbmFsIGRlbGl2ZXJ5LiBJIHNlZSB0aGF0IGBicGZfc2VuZF9zaWduYWxfY29tbW9uYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGdvb2QgdG8ga25vdywgYW5kIGBicGZfc2VuZF9zaWduYWxgIGFuZCBgYnBmX3NlbmRfc2lnbmFsX3RocmVhZGAgYm90aCBjYWxsIGBicGZfc2VuZF9zaWduYWxfY29tbW9uYC4gSG93ZXZlciwgaW1wb3J0YW50bHksIHRoZXNlIGxhdHRlciB0d28gcGFzcyBgTlVMTGAgYXMgdGhlIGB0YXNrYCBhcmd1bWVudCwgd2hpY2ggcmVzb2x2ZXMgdG8gdGhlIGN1cnJlbnQgdGFzay5cblxuTm93LCBgYnBmX3NlbmRfc2lnbmFsX3Rhc2tgIGlzIHRoZSBjcml0aWNhbCBrZnVuYyBoZXJlIGJlY2F1c2UgaXQgYWxsb3dzIGRpcmVjdCBzaWduYWwgZGVsaXZlcnkgdG8gKmFueSogYHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza2AsIG5vdCBqdXN0IHRoZSBjdXJyZW50IG9uZS4gVGhpcyBpcyBrZXksIGVzcGVjaWFsbHkgYmVjYXVzZSBpdCByZWxhdGVzIGRpcmVjdGx5IHRvIHRoYXQgYG5taV91YWNjZXNzX29rYXkoKWAgY2hlY2sgdGhhdOKAmXMgYXQgdGhlIGhlYXJ0IG9mIHRoaXMgcHJvYmxlbSB3aGVuIGB0YXNrICE9IGN1cnJlbnRgLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBlbnRpcmUgcmVhc29uIHRoZSBmaXggZm9yIHRoYXQgc3BlY2lmaWMgc2lnbmFsIGRlbGl2ZXJ5IGlzc3VlIGlzIHZhbHVhYmxlLlxuXG5OZXh0LCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbnMuIGBCUEZfRVZFTlRTYCwgYEJQRl9TWVNDQUxMYCwgYERFQlVHX0lORk9fQlRGYCwgYFBFUkZfRVZFTlRTYCwgYW5kIGBLUFJPQkVfRVZFTlRTYCBhcmUgYWxsIHJlbGV2YW50LiBMb29raW5nIGF0IGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AsIGl0J3MgY2xlYXIgdGhhdCBlbmFibGluZyBgQlBGX1NZU0NBTExgLCBgUEVSRl9FVkVOVFNgLCBhbmQgYEtQUk9CRV9FVkVOVFNgIChvciBgQlBGX0VWRU5UU2ApIGlzIHJlcXVpcmVkLiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgQlBGLWJhc2VkIHNpZ25hbCBkZWxpdmVyeS5cblxuU28sIGxldCdzIHN1bW1hcml6ZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zOiBgQlBGX1NZU0NBTExgLCBgQlBGX0VWRU5UU2AsIGFuZCBgREVCVUdfSU5GT19CVEZgLlxuXG5UaGVyZWZvcmUsIHRoZSB2ZXJkaWN0IGlzIGBXb3J0aEZ1enppbmc6IHRydWVgLCBiZWNhdXNlIG9mIHRoZSBmb2N1cyBvbiBgYnBmX3NlbmRfc2lnbmFsX3Rhc2tgLCBhbmQgYWxsIHRoYXQgbWFrZXMgaXQgaW50ZXJlc3RpbmcgdG8gZnV6eiBhbmQgYmVjYXVzZSB0aGUgQlBGIGNvbmZpZ3VyYXRpb25zIGFyZSBhcHByb3ByaWF0ZSBmb3IgdGhpcyB0eXBlIG9mIHRlc3QuIEkgYW0gcmVhZHkgdG8gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MzAsIk91dHB1dFRva2VucyI6MTQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6MjAuODM5NTM4MzE3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAwNDAxOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zZW5kX3NpZ25hbF90YXNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbigpIHRvIG9ubHkgZW5mb3JjZSBubWlfdWFjY2Vzc19va2F5KCkgd2hlbiB0aGUgdGFyZ2V0IHRhc2sgaXMgY3VycmVudC4gVGhpcyBlbmFibGVzIEJQRiBwcm9ncmFtcyAoc3VjaCBhcyB0aG9zZSBydW5uaW5nIGluIGt3b3JrZXIvdHJhY2Vwb2ludCBjb250ZXh0KSB0byBzdWNjZXNzZnVsbHkgaW52b2tlIHRoZSBicGZfc2VuZF9zaWduYWxfdGFzayBrZnVuYyBvbiBub24tY3VycmVudCB0YXNrcy4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIGtlcm5lbCBleGVjdXRpb24gbG9naWMgZm9yIEJQRiBzaWduYWwgZGVsaXZlcnkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9FVkVOVFNcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NlbmRfc2lnbmFsX3Rhc2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBicGZfc2VuZF9zaWduYWxfY29tbW9uKCkgdG8gb25seSBlbmZvcmNlIG5taV91YWNjZXNzX29rYXkoKSB3aGVuIHRoZSB0YXJnZXQgdGFzayBpcyBjdXJyZW50LiBUaGlzIGVuYWJsZXMgQlBGIHByb2dyYW1zIChzdWNoIGFzIHRob3NlIHJ1bm5pbmcgaW4ga3dvcmtlci90cmFjZXBvaW50IGNvbnRleHQpIHRvIHN1Y2Nlc3NmdWxseSBpbnZva2UgdGhlIGJwZl9zZW5kX3NpZ25hbF90YXNrIGtmdW5jIG9uIG5vbi1jdXJyZW50IHRhc2tzLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMga2VybmVsIGV4ZWN1dGlvbiBsb2dpYyBmb3IgQlBGIHNpZ25hbCBkZWxpdmVyeS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6MjAuOTE5NTg2NzE1WiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDIxOTI0MzQ2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjQwOjIwLjkyMDE2OTMxNVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIwMjE4NjU2NjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBhIGNoZWNrIGluIGBicGZfc2VuZF9zaWduYWxfY29tbW9uKClgIHNvIHRoYXQgYG5taV91YWNjZXNzX29rYXkoKWAgaXMgb25seSBldmFsdWF0ZWQgd2hlbiBgdGFzayA9PSBjdXJyZW50YCwgYWxsb3dpbmcgQlBGIHByb2dyYW1zIHJ1bm5pbmcgaW4ga3RocmVhZC9rd29ya2VyIGNvbnRleHQgdG8gc2VuZCBzaWduYWxzIHRvIG90aGVyIHRhcmdldCB0YXNrcyB2aWEgYGJwZl9zZW5kX3NpZ25hbF90YXNrKClgLiBJdCBhbHNvIGFkZHMgYSBCUEYgc2VsZnRlc3QuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgbGVuZ3RocywgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGNvcHktdG8tdXNlciBvcGVyYXRpb25zLiBBbnkgcmVsYXRlZCB0YXNrIGxpZmV0aW1lIG9yIHJlZmVyZW5jZSBjb3VudGluZyBjb25jZXJucyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCB0cmFja2luZy4gQXMgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NmQ2NGYyM2QzYmY5OGE0MDFmOTQ1OGY2YThkOGNlYzI1Y2EyZGE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxMDozOToxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuaW5kZXggMjkyNjA5NTFhYTg3MS4uZjdhNDFmMjIyNTk5OSAxMDA2NDRcbi0tLSBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuKysrIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG5AQCAtODcxLDcgKzg3MSwxMCBAQCBzdGF0aWMgaW50IGJwZl9zZW5kX3NpZ25hbF9jb21tb24odTMyIHNpZywgZW51bSBwaWRfdHlwZSB0eXBlLCBzdHJ1Y3QgdGFza19zdHJ1Y1xuIFx0ICovXG4gXHRpZiAodW5saWtlbHkodGFzay1cdTAwM2VmbGFncyBcdTAwMjYgKFBGX0tUSFJFQUQgfCBQRl9FWElUSU5HKSkpXG4gXHRcdHJldHVybiAtRVBFUk07XG4tXHRpZiAodW5saWtlbHkoIW5taV91YWNjZXNzX29rYXkoKSkpXG4rXHQvKiBTaW5jZSBubWlfdWFjY2Vzc19va2F5KCkgaXMgb25seSBmb3IgdGhlIGN1cnJlbnRcbitcdCAqIHRhc2ssIGNoZWNrIGlmIHRhc2sgaXMgY3VycmVudC5cbitcdCAqL1xuK1x0aWYgKHRhc2sgPT0gY3VycmVudCBcdTAwMjZcdTAwMjYgdW5saWtlbHkoIW5taV91YWNjZXNzX29rYXkoKSkpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXHQvKiBUYXNrIHNob3VsZCBub3QgYmUgcGlkPTEgdG8gYXZvaWQga2VybmVsIHBhbmljLiAqL1xuIFx0aWYgKHVubGlrZWx5KGlzX2dsb2JhbF9pbml0KHRhc2spKSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZW5kX3NpZ25hbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VuZF9zaWduYWwuY1xuaW5kZXggN2FjNGQ1YTQ4OGFhNS4uZjlkZDIzZGIxZWY5OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlbmRfc2lnbmFsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlbmRfc2lnbmFsLmNcbkBAIC0yNjEsNiArMjYxLDEwOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NlbmRfc2lnbmFsX25taShib29sIHNpZ25hbF90aHJlYWQsIGJvb2wgcmVtb3RlKVxuIFx0dGVzdF9zZW5kX3NpZ25hbF9jb21tb24oXHUwMDI2YXR0ciwgc2lnbmFsX3RocmVhZCwgcmVtb3RlKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdGVzdF9zZW5kX3NpZ25hbF9rd29ya2VyKHZvaWQpXG4re1xuK1x0c3RydWN0IHRlc3Rfc2VuZF9zaWduYWxfa2VybiAqc2tlbDtcbitcdGludCBwaXBlX2MycFsyXSwgcGlwZV9wMmNbMl07XG4rXHRzdHJ1Y3Qgc2lnYWN0aW9uIHNhID0ge307XG4rXHRjaGFyIGJ1ZlsyNTZdO1xuK1x0aW50IGVyciA9IC0xO1xuK1x0cGlkX3QgcGlkO1xuK1xuK1x0aWYgKCFBU1NFUlRfT0socGlwZShwaXBlX2MycCksIFwicGlwZV9jMnBcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICghQVNTRVJUX09LKHBpcGUocGlwZV9wMmMpLCBcInBpcGVfcDJjXCIpKSB7XG4rXHRcdGNsb3NlKHBpcGVfYzJwWzBdKTtcbitcdFx0Y2xvc2UocGlwZV9jMnBbMV0pO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRwaWQgPSBmb3JrKCk7XG4rXHRpZiAoIUFTU0VSVF9HRShwaWQsIDAsIFwiZm9ya1wiKSkge1xuK1x0XHRjbG9zZShwaXBlX2MycFswXSk7XG4rXHRcdGNsb3NlKHBpcGVfYzJwWzFdKTtcbitcdFx0Y2xvc2UocGlwZV9wMmNbMF0pO1xuK1x0XHRjbG9zZShwaXBlX3AyY1sxXSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmIChwaWQgPT0gMCkge1xuK1x0XHQvKiBpbnN0YWxsIHNpZ25hbCBoYW5kbGVyIGFuZCBub3RpZnkgcGFyZW50ICovXG4rXHRcdHNhLnNhX3NpZ2FjdGlvbiA9IHNpZ3VzcjFfc2lnaW5mb19oYW5kbGVyO1xuK1x0XHRzYS5zYV9mbGFncyA9IFNBX1JFU1RBUlQgfCBTQV9TSUdJTkZPO1xuK1x0XHRBU1NFUlRfTkVRKHNpZ2FjdGlvbihTSUdVU1IxLCBcdTAwMjZzYSwgTlVMTCksIC0xLCBcInNpZ2FjdGlvblwiKTtcbitcbitcdFx0Y2xvc2UocGlwZV9jMnBbMF0pOyAvKiBjbG9zZSByZWFkICovXG4rXHRcdGNsb3NlKHBpcGVfcDJjWzFdKTsgLyogY2xvc2Ugd3JpdGUgKi9cbitcbitcdFx0Lyogbm90aWZ5IHBhcmVudCBzaWduYWwgaGFuZGxlciBpcyBpbnN0YWxsZWQgKi9cbitcdFx0QVNTRVJUX0VRKHdyaXRlKHBpcGVfYzJwWzFdLCBidWYsIDEpLCAxLCBcInBpcGVfd3JpdGVcIik7XG4rXG4rXHRcdC8qIG1ha2Ugc3VyZSBwYXJlbnQgZW5hYmxlZCBicGYgcHJvZ3JhbSB0byBzZW5kX3NpZ25hbCAqL1xuK1x0XHRBU1NFUlRfRVEocmVhZChwaXBlX3AyY1swXSwgYnVmLCAxKSwgMSwgXCJwaXBlX3JlYWRcIik7XG4rXG4rXHRcdC8qIHRoZSBzaWduYWwgaXMgc2VudCBmcm9tIHdvcmtxdWV1ZSBjb250ZXh0LCBzbyBub3RoaW5nIGhhc1xuK1x0XHQgKiB0byBiZSB0cmlnZ2VyZWQgZnJvbSBoZXJlXG4rXHRcdCAqL1xuK1x0XHR3aGlsZSAoIXNpZ3VzcjFfcmVjZWl2ZWQpXG4rXHRcdFx0c2xlZXAoMSk7XG4rXG4rXHRcdGJ1ZlswXSA9IHNpZ3VzcjFfcmVjZWl2ZWQ7XG4rXG4rXHRcdEFTU0VSVF9FUShzaWd1c3IxX3JlY2VpdmVkLCA4LCBcInNpZ3VzcjFfcmVjZWl2ZWRcIik7XG4rXHRcdEFTU0VSVF9FUSh3cml0ZShwaXBlX2MycFsxXSwgYnVmLCAxKSwgMSwgXCJwaXBlX3dyaXRlXCIpO1xuK1xuK1x0XHRjbG9zZShwaXBlX2MycFsxXSk7XG4rXHRcdGNsb3NlKHBpcGVfcDJjWzBdKTtcbitcdFx0ZXhpdCgwKTtcbitcdH1cbitcbitcdGNsb3NlKHBpcGVfYzJwWzFdKTsgLyogY2xvc2Ugd3JpdGUgKi9cbitcdGNsb3NlKHBpcGVfcDJjWzBdKTsgLyogY2xvc2UgcmVhZCAqL1xuK1xuK1x0c2tlbCA9IHRlc3Rfc2VuZF9zaWduYWxfa2Vybl9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbF9vcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRnb3RvIHNrZWxfb3Blbl9sb2FkX2ZhaWx1cmU7XG4rXG4rXHQvKiB3YWl0IHVudGlsIGNoaWxkIHNpZ25hbCBoYW5kbGVyIGluc3RhbGxlZCAqL1xuK1x0QVNTRVJUX0VRKHJlYWQocGlwZV9jMnBbMF0sIGJ1ZiwgMSksIDEsIFwicGlwZV9yZWFkXCIpO1xuK1xuK1x0LyogcGlkID09IDAga2VlcHMgdGhlIG90aGVyIHByb2dyYW1zIG9mIHRoaXMgc2tlbGV0b24gaW5hY3RpdmUgKi9cbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXBpZCA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VzaWcgPSBTSUdVU1IxO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldGFyZ2V0X3BpZCA9IHBpZDtcbitcbitcdGVyciA9IHRlc3Rfc2VuZF9zaWduYWxfa2Vybl9fYXR0YWNoKHNrZWwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNrZWxfYXR0YWNoXCIpKSB7XG4rXHRcdGVyciA9IC0xO1xuK1x0XHRnb3RvIGRlc3Ryb3lfc2tlbDtcbitcdH1cbitcbitcdC8qIG5vdGlmeSBjaGlsZCB0aGF0IGJwZiBwcm9ncmFtIGNhbiBzZW5kX3NpZ25hbCBub3cgKi9cbitcdEFTU0VSVF9FUSh3cml0ZShwaXBlX3AyY1sxXSwgYnVmLCAxKSwgMSwgXCJwaXBlX3dyaXRlXCIpO1xuK1xuK1x0Lyogd2FpdCBmb3IgcmVzdWx0LCB3b3JrcXVldWVzIHJ1biBvbiB0aGVpciBvd24gKi9cbitcdGVyciA9IHJlYWRfd2l0aF90aW1lb3V0KHBpcGVfYzJwWzBdLCBidWYsIDEsIDEwICogMTAwMCAqIDEwMDApO1xuK1x0aWYgKCFBU1NFUlRfR1QoZXJyLCAwLCBcInJlYWRpbmcgcGlwZVwiKSlcbitcdFx0Z290byBkZXN0cm95X3NrZWw7XG4rXG4rXHRBU1NFUlRfRVEoYnVmWzBdLCA4LCBcImluY29ycmVjdCByZXN1bHRcIik7XG4rXG4rZGVzdHJveV9za2VsOlxuK1x0dGVzdF9zZW5kX3NpZ25hbF9rZXJuX19kZXN0cm95KHNrZWwpO1xuK3NrZWxfb3Blbl9sb2FkX2ZhaWx1cmU6XG4rXHRjbG9zZShwaXBlX2MycFswXSk7XG4rXHRjbG9zZShwaXBlX3AyY1sxXSk7XG4rXHQvKlxuK1x0ICogQ2hpbGQgaXMgZWl0aGVyIGFib3V0IHRvIGV4aXQgY2xlYW5seSBvciBzdHVjayBpbiBjYXNlIG9mIGVycm9ycy5cbitcdCAqIE51ZGdlIGl0IHRvIGV4aXQuXG4rXHQgKi9cbitcdGtpbGwocGlkLCBTSUdLSUxMKTtcbitcdHdhaXQoTlVMTCk7XG4rfVxuK1xuIHZvaWQgdGVzdF9zZW5kX3NpZ25hbCh2b2lkKVxuIHtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic2VuZF9zaWduYWxfdHJhY2Vwb2ludFwiKSlcbkBAIC0yODksNCArMzkxLDYgQEAgdm9pZCB0ZXN0X3NlbmRfc2lnbmFsKHZvaWQpXG4gXHRcdHRlc3Rfc2VuZF9zaWduYWxfcGVyZih0cnVlLCB0cnVlKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic2VuZF9zaWduYWxfbm1pX3RocmVhZF9yZW1vdGVcIikpXG4gXHRcdHRlc3Rfc2VuZF9zaWduYWxfbm1pKHRydWUsIHRydWUpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJzZW5kX3NpZ25hbF9rd29ya2VyXCIpKVxuK1x0XHR0ZXN0X3NlbmRfc2lnbmFsX2t3b3JrZXIoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jXG5pbmRleCAxNzZhMzU1ZTMwNjI0Li5kMWMwMDBjMzA4ODU3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmNcbkBAIC02MCw2ICs2MCwzMiBAQCBpbnQgc2VuZF9zaWduYWxfdHBfc2NoZWQodm9pZCAqY3R4KVxuIFx0cmV0dXJuIGJwZl9zZW5kX3NpZ25hbF90ZXN0KGN0eCk7XG4gfVxuIFxuKy8qIFNlbmQgYSBzaWduYWwgdG8gYSB0YXNrIG90aGVyIHRoYW4gY3VycmVudCwgZnJvbSBhIGNvbnRleHQgd2hlcmUgY3VycmVudFxuKyAqIGlzIGEga2VybmVsIHRocmVhZC4gTm8gZmlsdGVyaW5nIG9uIGN1cnJlbnQgaXMgcG9zc2libGUgaGVyZSwgc28gdGhpcyBpc1xuKyAqIGRyaXZlbiBlbnRpcmVseSBieSB0YXJnZXRfcGlkLlxuKyAqL1xuK1NFQyhcInRwX2J0Zi93b3JrcXVldWVfZXhlY3V0ZV9zdGFydFwiKVxuK2ludCBzZW5kX3NpZ25hbF9rd29ya2VyKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldF90YXNrO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChzdGF0dXMgIT0gMCB8fCB0YXJnZXRfcGlkID09IDApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0dGFyZ2V0X3Rhc2sgPSBicGZfdGFza19mcm9tX3BpZCh0YXJnZXRfcGlkKTtcbitcdGlmICghdGFyZ2V0X3Rhc2spXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0ID0gYnBmX3NlbmRfc2lnbmFsX3Rhc2sodGFyZ2V0X3Rhc2ssIHNpZywgUElEVFlQRV9UR0lELCA4KTtcbitcdGJwZl90YXNrX3JlbGVhc2UodGFyZ2V0X3Rhc2spO1xuK1xuK1x0aWYgKHJldCA9PSAwKVxuK1x0XHRzdGF0dXMgPSAxO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIFNFQyhcInBlcmZfZXZlbnRcIilcbiBpbnQgc2VuZF9zaWduYWxfcGVyZih2b2lkICpjdHgpXG4ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6MjAuOTIwMTcwOTQ1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0MzU4MzcxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBOZWVkcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzOiBzaG91bGQgd2UgZXZlbiBib3RoZXIgd2l0aCBLTVNBTiBmdXp6aW5nIGhlcmUsIG9yIGFyZSB0aGUgc3RhbmRhcmQgS0FTQU4gYW5kIHNhbml0aXplcnMgZW5vdWdoPyBUaGlzIHBhdGNoIHNlZW1zIHRhcmdldGVkLCBzbyBsZXQncyBzZWUuXG5cbkZpcnN0LCBJIHNlZSBhIGNoYW5nZSBpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgYGJwZl9zZW5kX3NpZ25hbF9jb21tb25gIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgYWRkZWQgYSBjaGVjazogcmF0aGVyIHRoYW4ganVzdCBjYWxsaW5nIGBubWlfdWFjY2Vzc19va2F5KClgLCB0aGV5J3JlIG5vdyBleHBsaWNpdGx5IGNoZWNraW5nIGlmIHRoZSB0YXJnZXQgYHRhc2tgIGlzIHRoZSBgY3VycmVudGAgdGFzayBiZWZvcmUgY2FsbGluZyBpdC4gVGhhdCdzIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgY2hhbmdlLiBUaGUgb3JpZ2luYWwgY2hlY2ssIGBpZiAodW5saWtlbHkoIW5taV91YWNjZXNzX29rYXkoKSkpYCwgbm93IGhhcyBhbiBleHRyYSBjaGVjayB0byBwcmV2ZW50IGNhbGxpbmcgdGhhdCBmdW5jdGlvbiBvbiBhbm90aGVyIHRhc2suXG5cblRoZSBjb21tZW50IG1lbnRpb25zIHRoYXQgYG5taV91YWNjZXNzX29rYXkoKWAgb25seSBhcHBsaWVzIHRvIHRoZSAqY3VycmVudCogdGFzay4gTWFrZXMgc2Vuc2UsIGFuZCB0aGUgYWRkZWQgY29uZGl0aW9uIG1ha2VzIHRoYXQgZXhwbGljaXQuICBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGlzc3VlIHdoZXJlIHRoZSBmdW5jdGlvbiB3YXMgYmVpbmcgdXNlZCBpbmNvcnJlY3RseSwgYW5kIHRoZSBwYXRjaCBpcyBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBvciBhIHNpbWlsYXIgdHlwZSBvZiBidWcuXG5cblNlY29uZCwgdGhlcmUgYXJlIHNlbGZ0ZXN0cywgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlbmRfc2lnbmFsLmNgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jYC4gVGhleSdyZSBhZGRpbmcgYSB0ZXN0IGNhc2UsIGB0ZXN0X3NlbmRfc2lnbmFsX2t3b3JrZXJgLCB0byB0ZXN0IGBicGZfc2VuZF9zaWduYWxfdGFza2AgZnJvbSB3aXRoaW4gYSBrd29ya2VyIGNvbnRleHQuICBUaGF0J3MgYSBwcmV0dHkgY2xlYXIgc2lnbmFsIHRoYXQgdGhlIGNvZGUgd2FzICpwcmV2aW91c2x5KiBwb3RlbnRpYWxseSBub3QgaGFuZGxpbmcga3dvcmtlciBjb250ZXh0cyBjb3JyZWN0bHksIGFuZCBub3cgdGhleSdyZSB0cnlpbmcgdG8gdmFsaWRhdGUgdGhlIGZpeC5cblxuU28sIGluIHN1bW1hcnksIHdlJ3JlIGxpa2VseSBkZWFsaW5nIHdpdGggYSBmaXggZm9yIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGEgc2ltaWxhciBtZW1vcnkgc2FmZXR5IGlzc3VlIHRoYXQgY291bGQgb2NjdXIgd2l0aGluIGEga3dvcmtlciBjb250ZXh0LiBUaGUgcGF0Y2ggaXMgcHJvYmFibHkgdHJ5aW5nIHRvIHByZXZlbnQgYSBkb3VibGUtZmV0Y2gsIG9yIGEgc2ltaWxhciBidWcgcmVsYXRpbmcgdG8gYSByYWNlIGNvbmRpdGlvbi4gU2luY2UgdGhpcyBpcyBhbiBleHBsaWNpdCBjaGFuZ2UgdG8gaGFuZGxlIGEgc3BlY2lmaWMgY29udGV4dCwgdGhpcyBzZWVtcyBsaWtlIHRoZSBraW5kIG9mIGlzc3VlIHRoYXQgS0FTQU4gYW5kIHRoZSBvdGhlciBzdGFuZGFyZCBzYW5pdGl6ZXJzIHNob3VsZCBjYXRjaC4gS01TQU4gKm1pZ2h0KiBiZSBoZWxwZnVsIGlmIGl0J3MgYSBzdWJ0bGUgcmFjZSwgYnV0IEknbSB0aGlua2luZyBhIHN0YW5kYXJkIHNhbml0aXplciBwYXNzIGlzIHN1ZmZpY2llbnQsIGdpdmVuIHRoZSB0YXJnZXRlZCBuYXR1cmUgb2YgdGhlIGZpeCBhbmQgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgbmV3IHNlbGZ0ZXN0LiBJJ2QgbGVhbiB0b3dhcmQgZm9jdXNpbmcgb3VyIGluaXRpYWwgYW5hbHlzaXMgb24gdmVyaWZ5aW5nIHRoZSBwYXRjaCdzIGNvcnJlY3RuZXNzIGFuZCBlbnN1cmluZyB0aGUgc2VsZnRlc3QgY292ZXJzIHRoZSBpbnRlbmRlZCBzY2VuYXJpbyB0aG9yb3VnaGx5LiBXZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIHByaW9yaXRpemUgS01TQU4gZm9yIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMDMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDoyNy4zNTYwMTAyODlaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNDMyOTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zZW5kX3NpZ25hbF9jb21tb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz04MzU9c3RhdGljIHZvaWQgZG9fYnBmX3NlbmRfc2lnbmFsKHN0cnVjdCBpcnFfd29yayAqZW50cnkpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtODQ2LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo4NDc6c3RhdGljIGludCBicGZfc2VuZF9zaWduYWxfY29tbW9uKHUzMiBzaWcsIGVudW0gcGlkX3R5cGUgdHlwZSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1NjQgdmFsdWUpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTg0OC17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9OTExPUJQRl9DQUxMXzEoYnBmX3NlbmRfc2lnbmFsLCB1MzIsIHNpZylcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTEyLXtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6OTEzOlxcdHJldHVybiBicGZfc2VuZF9zaWduYWxfY29tbW9uKHNpZywgUElEVFlQRV9UR0lELCBOVUxMLCAwKTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTE0LX1cXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz05MjM9QlBGX0NBTExfMShicGZfc2VuZF9zaWduYWxfdGhyZWFkLCB1MzIsIHNpZylcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTI0LXtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6OTI1OlxcdHJldHVybiBicGZfc2VuZF9zaWduYWxfY29tbW9uKHNpZywgUElEVFlQRV9QSUQsIE5VTEwsIDApO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy05MjYtfVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM2MTY9X19icGZfa2Z1bmMgaW50IGJwZl9zZW5kX3NpZ25hbF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IHNpZywgZW51bSBwaWRfdHlwZSB0eXBlLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM2MjEtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM2MjI6XFx0cmV0dXJuIGJwZl9zZW5kX3NpZ25hbF9jb21tb24oc2lnLCB0eXBlLCB0YXNrLCB2YWx1ZSk7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM2MjMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDoyNy40MTk0NTM1ODhaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM3MTQ2MDUxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYGJwZl9zZW5kX3NpZ25hbF9jb21tb25gIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbmAgKnJlYWxseSogd29ya3MuIEkga25vdyB0aGUgaGlnaC1sZXZlbCBjb25jZXB0LCBidXQgdG8gdHJ1bHkgZ3Jhc3AgdGhlIG51YW5jZXMgb2Ygc2lnbmFsIGluamVjdGlvbiBmcm9tIEJQRiBwcm9ncmFtcywgSSBuZWVkIHRvIHNlZSB0aGUgZnVsbCBpbXBsZW1lbnRhdGlvbi4gTGV0J3MgaGVhZCBvdmVyIHRvIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIGFuZCBkaXNzZWN0IGl0LiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoaW5ncyBsaWtlOiBhdG9taWNpdHkgY29uY2VybnMsIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucywgaG93IGNvbnRleHQgaXMgbWFuYWdlZCwgYW5kIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgc2lnbmFsIGRlbGl2ZXJ5IGluZnJhc3RydWN0dXJlLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXkncmUgZG9pbmcgYW55IG9wdGltaXphdGlvbnMgSSBjYW4gbGV2ZXJhZ2UsIG9yIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGdvdGNoYXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Ygd2hlbiBkZXNpZ25pbmcgbXkgb3duIEJQRi1iYXNlZCBzaWduYWwgaGFuZGxpbmcuIEnigJltIHRoaW5raW5nIGFib3V0IGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyZmFjZXMgd2l0aCB0aGUgdGFzayBzdHJ1Y3QgYW5kIHNpZ25hbCBtYXNrLiBUaW1lIHRvIHJvbGwgdXAgbXkgc2xlZXZlcyBhbmQgZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTE2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6MjkuNzkwOTE2NjU4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODQ1LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODQ1OlxcdH1cXG4gODQ2OlxcdFxcbiA4NDc6XFx0c3RhdGljIGludCBicGZfc2VuZF9zaWduYWxfY29tbW9uKHUzMiBzaWcsIGVudW0gcGlkX3R5cGUgdHlwZSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1NjQgdmFsdWUpXFxuIDg0ODpcXHR7XFxuIDg0OTpcXHRcXHRzdHJ1Y3Qgc2VuZF9zaWduYWxfaXJxX3dvcmsgKndvcmsgPSBOVUxMO1xcbiA4NTA6XFx0XFx0c3RydWN0IGtlcm5lbF9zaWdpbmZvIGluZm87XFxuIDg1MTpcXHRcXHRzdHJ1Y3Qga2VybmVsX3NpZ2luZm8gKnNpZ2luZm87XFxuIDg1MjpcXHRcXG4gODUzOlxcdFxcdGlmICghdGFzaykge1xcbiA4NTQ6XFx0XFx0XFx0dGFzayA9IGN1cnJlbnQ7XFxuIDg1NTpcXHRcXHRcXHRzaWdpbmZvID0gU0VORF9TSUdfUFJJVjtcXG4gODU2OlxcdFxcdH0gZWxzZSB7XFxuIDg1NzpcXHRcXHRcXHRjbGVhcl9zaWdpbmZvKFxcdTAwMjZpbmZvKTtcXG4gODU4OlxcdFxcdFxcdGluZm8uc2lfc2lnbm8gPSBzaWc7XFxuIDg1OTpcXHRcXHRcXHRpbmZvLnNpX2Vycm5vID0gMDtcXG4gODYwOlxcdFxcdFxcdGluZm8uc2lfY29kZSA9IFNJX0tFUk5FTDtcXG4gODYxOlxcdFxcdFxcdGluZm8uc2lfcGlkID0gMDtcXG4gODYyOlxcdFxcdFxcdGluZm8uc2lfdWlkID0gMDtcXG4gODYzOlxcdFxcdFxcdGluZm8uc2lfdmFsdWUuc2l2YWxfcHRyID0gKHZvaWQgX191c2VyIF9fZm9yY2UgKikodW5zaWduZWQgbG9uZyl2YWx1ZTtcXG4gODY0OlxcdFxcdFxcdHNpZ2luZm8gPSBcXHUwMDI2aW5mbztcXG4gODY1OlxcdFxcdH1cXG4gODY2OlxcdFxcbiA4Njc6XFx0XFx0LyogU2ltaWxhciB0byBicGZfcHJvYmVfd3JpdGVfdXNlciwgdGFzayBuZWVkcyB0byBiZVxcbiA4Njg6XFx0XFx0ICogaW4gYSBzb3VuZCBjb25kaXRpb24gYW5kIGtlcm5lbCBtZW1vcnkgYWNjZXNzIGJlXFxuIDg2OTpcXHRcXHQgKiBwZXJtaXR0ZWQgaW4gb3JkZXIgdG8gc2VuZCBzaWduYWwgdG8gdGhlIGN1cnJlbnRcXG4gODcwOlxcdFxcdCAqIHRhc2suXFxuIDg3MTpcXHRcXHQgKi9cXG4gODcyOlxcdFxcdGlmICh1bmxpa2VseSh0YXNrLVxcdTAwM2VmbGFncyBcXHUwMDI2IChQRl9LVEhSRUFEIHwgUEZfRVhJVElORykpKVxcbiA4NzM6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gODc0OlxcdFxcdC8qIFNpbmNlIG5taV91YWNjZXNzX29rYXkoKSBpcyBvbmx5IGZvciB0aGUgY3VycmVudFxcbiA4NzU6XFx0XFx0ICogdGFzaywgY2hlY2sgaWYgdGFzayBpcyBjdXJyZW50LlxcbiA4NzY6XFx0XFx0ICovXFxuIDg3NzpcXHRcXHRpZiAodGFzayA9PSBjdXJyZW50IFxcdTAwMjZcXHUwMDI2IHVubGlrZWx5KCFubWlfdWFjY2Vzc19va2F5KCkpKVxcbiA4Nzg6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gODc5OlxcdFxcdC8qIFRhc2sgc2hvdWxkIG5vdCBiZSBwaWQ9MSB0byBhdm9pZCBrZXJuZWwgcGFuaWMuICovXFxuIDg4MDpcXHRcXHRpZiAodW5saWtlbHkoaXNfZ2xvYmFsX2luaXQodGFzaykpKVxcbiA4ODE6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gODgyOlxcdFxcbiA4ODM6XFx0XFx0aWYgKHByZWVtcHRfY291bnQoKSAhPSAwIHx8IGlycXNfZGlzYWJsZWQoKSkge1xcbiA4ODQ6XFx0XFx0XFx0LyogRG8gYW4gZWFybHkgY2hlY2sgb24gc2lnbmFsIHZhbGlkaXR5LiBPdGhlcndpc2UsXFxuIDg4NTpcXHRcXHRcXHQgKiB0aGUgZXJyb3IgaXMgbG9zdCBpbiBkZWZlcnJlZCBpcnFfd29yay5cXG4gODg2OlxcdFxcdFxcdCAqL1xcbiA4ODc6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCF2YWxpZF9zaWduYWwoc2lnKSkpXFxuIDg4ODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODg5OlxcdFxcbiA4OTA6XFx0XFx0XFx0d29yayA9IHRoaXNfY3B1X3B0cihcXHUwMDI2c2VuZF9zaWduYWxfd29yayk7XFxuIDg5MTpcXHRcXHRcXHRpZiAoaXJxX3dvcmtfaXNfYnVzeShcXHUwMDI2d29yay1cXHUwMDNlaXJxX3dvcmspKVxcbiA4OTI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gODkzOlxcdFxcbiA4OTQ6XFx0XFx0XFx0LyogQWRkIHRoZSBjdXJyZW50IHRhc2ssIHdoaWNoIGlzIHRoZSB0YXJnZXQgb2Ygc2VuZGluZyBzaWduYWwsXFxuIDg5NTpcXHRcXHRcXHQgKiB0byB0aGUgaXJxX3dvcmsuIFRoZSBjdXJyZW50IHRhc2sgbWF5IGNoYW5nZSB3aGVuIHF1ZXVlZFxcbiA4OTY6XFx0XFx0XFx0ICogaXJxIHdvcmtzIGdldCBleGVjdXRlZC5cXG4gODk3OlxcdFxcdFxcdCAqL1xcbiA4OTg6XFx0XFx0XFx0d29yay1cXHUwMDNldGFzayA9IGdldF90YXNrX3N0cnVjdCh0YXNrKTtcXG4gODk5OlxcdFxcdFxcdHdvcmstXFx1MDAzZWhhc19zaWdpbmZvID0gc2lnaW5mbyA9PSBcXHUwMDI2aW5mbztcXG4gOTAwOlxcdFxcdFxcdGlmICh3b3JrLVxcdTAwM2VoYXNfc2lnaW5mbylcXG4gOTAxOlxcdFxcdFxcdFxcdGNvcHlfc2lnaW5mbyhcXHUwMDI2d29yay1cXHUwMDNlaW5mbywgXFx1MDAyNmluZm8pO1xcbiA5MDI6XFx0XFx0XFx0d29yay1cXHUwMDNlc2lnID0gc2lnO1xcbiA5MDM6XFx0XFx0XFx0d29yay1cXHUwMDNldHlwZSA9IHR5cGU7XFxuIDkwNDpcXHRcXHRcXHRpcnFfd29ya19xdWV1ZShcXHUwMDI2d29yay1cXHUwMDNlaXJxX3dvcmspO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDoyOS43OTExNzMwOThaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEzNDc2MzQ2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXBwbGljYWJpbGl0eSBBc3Nlc3NtZW50IGZvciBCUEYgU2lnbmFsIFNlbmRpbmcgRml4KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGF0IGluIHRoZSBgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbmAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aGVuIGNhbGxpbmcgYGJwZl9zZW5kX3NpZ25hbF90YXNrYCwgdGhlIGNvZGUgd2FzIHByZXZpb3VzbHkgdXNpbmcgYG5taV91YWNjZXNzX29rYXkoKWAgaW5jb3JyZWN0bHkuIFRoaXMgZnVuY3Rpb24sIGludGVuZGVkIHRvIGNoZWNrIGZvciBwZXJtaXR0ZWQgdXNlciBhY2Nlc3MgZm9yIHRoZSAqY3VycmVudCogdGFzaywgd2FzIGZhaWxpbmcgaWYgdGhlICpjdXJyZW50KiB0YXNrIHdhcyBhIGt3b3JrZXIgdGhyZWFkLCBldmVuIGlmIHRoZSAqdGFyZ2V0KiBgdGFza2Agd2FzIGEgcmVndWxhciB1c2VyIHByb2Nlc3MuIFRoaXMgaXMgYmVjYXVzZSBgbm1pX3VhY2Nlc3Nfb2theSgpYCBjaGVja3MgdGhlIGBjdXJyZW50YCB0YXNrJ3MgcHJvcGVydGllcy4gVGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQ6IG9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgaWYgYHRhc2sgPT0gY3VycmVudGAuXG5cbk5vdywgdG8gdGhlIEtNU0FOIHF1ZXN0aW9uOiBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gTGV0J3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LiBGaXJzdGx5LCBhcmUga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vLCB0aGUgYGluZm9gIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCB3aXRoIGBjbGVhcl9zaWdpbmZvKFx1MDAyNmluZm8pYC4gU2Vjb25kbHksIGlzIHRoZXJlIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IHJlbGllcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS4gVGhlIGNvbmRpdGlvbiBub3cgaGluZ2VzIG9uIHBvaW50ZXIgZXF1YWxpdHksIGB0YXNrID09IGN1cnJlbnRgLCBhbmQgdGhlIHJldHVybiBvZiBgbm1pX3VhY2Nlc3Nfb2theSgpYCwgd2hpY2ggaXMgYSBib29sZWFuLiBUaGlyZCwgYXJlIHRoZXJlIG5ldyBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBiZWluZyBpbml0aWFsaXplZD8gTm8sIHRoaXMgcGF0Y2ggaXMgcHVyZWx5IGNvbmRpdGlvbmFsLiBGaW5hbGx5LCBhcmUgdGhlcmUgYW55IGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RoIGNoZWNrcyB0aGF0IG1pZ2h0IGxlYWQgdG8gdW5pbml0aWFsaXplZCBieXRlcyBiZWluZyBhY2Nlc3NlZD8gTm8uIFRoZSBjb2RlIG1vZGlmaWVzIHRoZSBjb25kaXRpb24sIGJ1dCB0aGVyZSBpcyBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb24gb3IgY29weV90b191c2VyIG9wZXJhdGlvbnMuXG5cbkluIGVzc2VuY2UsIHRoaXMgcGF0Y2ggc2ltcGx5IHJlZmluZXMgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIHRvIHByZXZlbnQgYW4gb3Zlcmx5IHJlc3RyaWN0aXZlIGFjY2VzcyBjaGVjayBpbiBhIHZlcnkgc3BlY2lmaWMgc2NlbmFyaW8uIEl0IGFsbG93cyBCUEYgcHJvZ3JhbXMsIGV2ZW4gdGhvc2UgcnVubmluZyBpbiBrd29ya2VyL2tlcm5lbCB0aHJlYWQgY29udGV4dCwgdG8gY29ycmVjdGx5IHNlbmQgc2lnbmFscyB0byB1c2VyIHRhc2tzLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBUaGlzIHBhdGNoIGlzIG1vcmUgYWJvdXQgbG9naWMgYW5kIHBlcm1pc3Npb25zIHRoYW4gbWVtb3J5IGluaXRpYWxpemF0aW9uLlxuXG5Ob3csIGxldCdzIGNsZWFybHkgY29udHJhc3QgdGhpcyB3aXRoIEtBU0FOLiBLTVNBTiBpcyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZSwgd2hpbGUgS0FTQU4gaXMgYWxsIGFib3V0IG1lbW9yeSBzYWZldHkg4oCTIGRldGVjdGluZyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCBidWZmZXIgb3ZlcmZsb3dzLCBldGMuIFRoZSBjaGFuZ2UgbWFkZSBoZXJlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcywgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbi4gQWxsIG1lbW9yeSBzYWZldHkgY29uY2VybnMsIHN1Y2ggYXMgdGhlIGB0YXNrYCBzdHJ1Y3QgcmVmZXJlbmNlIGNvdW50aW5nLCBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IHRoZSBzdGFuZGFyZCBzYW5pdGl6ZXJzIG9yIEtBU0FOLiBJdCdzIGEgY29uZGl0aW9uYWwgY2hhbmdlLCBwdXJlbHkuIFNvLCBubyBLTVNBTiBpcyBuZWVkZWQuXG5cbkFscmlnaHQsIHRpbWUgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc1OCwiT3V0cHV0VG9rZW5zIjoxNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDo0MS4xMzg4MTA3NjhaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGEgY2hlY2sgaW4gYGJwZl9zZW5kX3NpZ25hbF9jb21tb24oKWAgc28gdGhhdCBgbm1pX3VhY2Nlc3Nfb2theSgpYCBpcyBvbmx5IGV2YWx1YXRlZCB3aGVuIGB0YXNrID09IGN1cnJlbnRgLCBhbGxvd2luZyBCUEYgcHJvZ3JhbXMgcnVubmluZyBpbiBrdGhyZWFkL2t3b3JrZXIgY29udGV4dCB0byBzZW5kIHNpZ25hbHMgdG8gb3RoZXIgdGFyZ2V0IHRhc2tzIHZpYSBgYnBmX3NlbmRfc2lnbmFsX3Rhc2soKWAuIEl0IGFsc28gYWRkcyBhIEJQRiBzZWxmdGVzdC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlciBsZW5ndGhzLCB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgY29weS10by11c2VyIG9wZXJhdGlvbnMuIEFueSByZWxhdGVkIHRhc2sgbGlmZXRpbWUgb3IgcmVmZXJlbmNlIGNvdW50aW5nIGNvbmNlcm5zIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL3JlZmNvdW50IHRyYWNraW5nLiBBcyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGRpc2Nsb3N1cmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGEgY2hlY2sgaW4gYGJwZl9zZW5kX3NpZ25hbF9jb21tb24oKWAgc28gdGhhdCBgbm1pX3VhY2Nlc3Nfb2theSgpYCBpcyBvbmx5IGV2YWx1YXRlZCB3aGVuIGB0YXNrID09IGN1cnJlbnRgLCBhbGxvd2luZyBCUEYgcHJvZ3JhbXMgcnVubmluZyBpbiBrdGhyZWFkL2t3b3JrZXIgY29udGV4dCB0byBzZW5kIHNpZ25hbHMgdG8gb3RoZXIgdGFyZ2V0IHRhc2tzIHZpYSBgYnBmX3NlbmRfc2lnbmFsX3Rhc2soKWAuIEl0IGFsc28gYWRkcyBhIEJQRiBzZWxmdGVzdC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlciBsZW5ndGhzLCB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgY29weS10by11c2VyIG9wZXJhdGlvbnMuIEFueSByZWxhdGVkIHRhc2sgbGlmZXRpbWUgb3IgcmVmZXJlbmNlIGNvdW50aW5nIGNvbmNlcm5zIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL3JlZmNvdW50IHRyYWNraW5nLiBBcyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGRpc2Nsb3N1cmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflows5htf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 10:37:46 +0000 UTC FinishedAt: 2026-09-03 10:40:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d761934c9483ecde93fe99d8705282f716dfee50", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_EVENTS", "DEBUG_INFO_BTF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d761934c9483ecde93fe99d8705282f716dfee50", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_EVENTS", "DEBUG_INFO_BTF" ], "series_id": "ea5eadd3-9a5d-45dc-8739-6c468759b490" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_send_signal_task" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc2VuZF9zaWduYWxfdGFzayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGEgY2hlY2sgaW4gYGJwZl9zZW5kX3NpZ25hbF9jb21tb24oKWAgc28gdGhhdCBgbm1pX3VhY2Nlc3Nfb2theSgpYCBpcyBvbmx5IGV2YWx1YXRlZCB3aGVuIGB0YXNrID09IGN1cnJlbnRgLCBhbGxvd2luZyBCUEYgcHJvZ3JhbXMgcnVubmluZyBpbiBrdGhyZWFkL2t3b3JrZXIgY29udGV4dCB0byBzZW5kIHNpZ25hbHMgdG8gb3RoZXIgdGFyZ2V0IHRhc2tzIHZpYSBgYnBmX3NlbmRfc2lnbmFsX3Rhc2soKWAuIEl0IGFsc28gYWRkcyBhIEJQRiBzZWxmdGVzdC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgbGVuZ3RocywgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGNvcHktdG8tdXNlciBvcGVyYXRpb25zLiBBbnkgcmVsYXRlZCB0YXNrIGxpZmV0aW1lIG9yIHJlZmVyZW5jZSBjb3VudGluZyBjb25jZXJucyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCB0cmFja2luZy4gQXMgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbigpIHRvIG9ubHkgZW5mb3JjZSBubWlfdWFjY2Vzc19va2F5KCkgd2hlbiB0aGUgdGFyZ2V0IHRhc2sgaXMgY3VycmVudC4gVGhpcyBlbmFibGVzIEJQRiBwcm9ncmFtcyAoc3VjaCBhcyB0aG9zZSBydW5uaW5nIGluIGt3b3JrZXIvdHJhY2Vwb2ludCBjb250ZXh0KSB0byBzdWNjZXNzZnVsbHkgaW52b2tlIHRoZSBicGZfc2VuZF9zaWduYWxfdGFzayBrZnVuYyBvbiBub24tY3VycmVudCB0YXNrcy4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIGtlcm5lbCBleGVjdXRpb24gbG9naWMgZm9yIEJQRiBzaWduYWwgZGVsaXZlcnkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1NmQ2NGYyM2QzYmY5OGE0MDFmOTQ1OGY2YThkOGNlYzI1Y2EyZGE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxMDozOToxMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbmluZGV4IDI5MjYwOTUxYWE4NzEuLmY3YTQxZjIyMjU5OTkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuQEAgLTg3MSw3ICYjNDM7ODcxLDEwIEBAIHN0YXRpYyBpbnQgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbih1MzIgc2lnLCBlbnVtIHBpZF90eXBlIHR5cGUsIHN0cnVjdCB0YXNrX3N0cnVjXG4gXHQgKi9cbiBcdGlmICh1bmxpa2VseSh0YXNrLVx1MDAzZWZsYWdzIFx1MDAyNiAoUEZfS1RIUkVBRCB8IFBGX0VYSVRJTkcpKSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbi1cdGlmICh1bmxpa2VseSghbm1pX3VhY2Nlc3Nfb2theSgpKSlcbiYjNDM7XHQvKiBTaW5jZSBubWlfdWFjY2Vzc19va2F5KCkgaXMgb25seSBmb3IgdGhlIGN1cnJlbnRcbiYjNDM7XHQgKiB0YXNrLCBjaGVjayBpZiB0YXNrIGlzIGN1cnJlbnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHRhc2sgPT0gY3VycmVudCBcdTAwMjZcdTAwMjYgdW5saWtlbHkoIW5taV91YWNjZXNzX29rYXkoKSkpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXHQvKiBUYXNrIHNob3VsZCBub3QgYmUgcGlkPTEgdG8gYXZvaWQga2VybmVsIHBhbmljLiAqL1xuIFx0aWYgKHVubGlrZWx5KGlzX2dsb2JhbF9pbml0KHRhc2spKSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZW5kX3NpZ25hbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VuZF9zaWduYWwuY1xuaW5kZXggN2FjNGQ1YTQ4OGFhNS4uZjlkZDIzZGIxZWY5OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlbmRfc2lnbmFsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlbmRfc2lnbmFsLmNcbkBAIC0yNjEsNiAmIzQzOzI2MSwxMDggQEAgc3RhdGljIHZvaWQgdGVzdF9zZW5kX3NpZ25hbF9ubWkoYm9vbCBzaWduYWxfdGhyZWFkLCBib29sIHJlbW90ZSlcbiBcdHRlc3Rfc2VuZF9zaWduYWxfY29tbW9uKFx1MDAyNmF0dHIsIHNpZ25hbF90aHJlYWQsIHJlbW90ZSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3NlbmRfc2lnbmFsX2t3b3JrZXIodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X3NlbmRfc2lnbmFsX2tlcm4gKnNrZWw7XG4mIzQzO1x0aW50IHBpcGVfYzJwWzJdLCBwaXBlX3AyY1syXTtcbiYjNDM7XHRzdHJ1Y3Qgc2lnYWN0aW9uIHNhID0ge307XG4mIzQzO1x0Y2hhciBidWZbMjU2XTtcbiYjNDM7XHRpbnQgZXJyID0gLTE7XG4mIzQzO1x0cGlkX3QgcGlkO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhwaXBlKHBpcGVfYzJwKSwgXCYjMzQ7cGlwZV9jMnBcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhwaXBlKHBpcGVfcDJjKSwgXCYjMzQ7cGlwZV9wMmNcJiMzNDspKSB7XG4mIzQzO1x0XHRjbG9zZShwaXBlX2MycFswXSk7XG4mIzQzO1x0XHRjbG9zZShwaXBlX2MycFsxXSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwaWQgPSBmb3JrKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UocGlkLCAwLCBcJiMzNDtmb3JrXCYjMzQ7KSkge1xuJiM0MztcdFx0Y2xvc2UocGlwZV9jMnBbMF0pO1xuJiM0MztcdFx0Y2xvc2UocGlwZV9jMnBbMV0pO1xuJiM0MztcdFx0Y2xvc2UocGlwZV9wMmNbMF0pO1xuJiM0MztcdFx0Y2xvc2UocGlwZV9wMmNbMV0pO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBpZCA9PSAwKSB7XG4mIzQzO1x0XHQvKiBpbnN0YWxsIHNpZ25hbCBoYW5kbGVyIGFuZCBub3RpZnkgcGFyZW50ICovXG4mIzQzO1x0XHRzYS5zYV9zaWdhY3Rpb24gPSBzaWd1c3IxX3NpZ2luZm9faGFuZGxlcjtcbiYjNDM7XHRcdHNhLnNhX2ZsYWdzID0gU0FfUkVTVEFSVCB8IFNBX1NJR0lORk87XG4mIzQzO1x0XHRBU1NFUlRfTkVRKHNpZ2FjdGlvbihTSUdVU1IxLCBcdTAwMjZzYSwgTlVMTCksIC0xLCBcJiMzNDtzaWdhY3Rpb25cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdGNsb3NlKHBpcGVfYzJwWzBdKTsgLyogY2xvc2UgcmVhZCAqL1xuJiM0MztcdFx0Y2xvc2UocGlwZV9wMmNbMV0pOyAvKiBjbG9zZSB3cml0ZSAqL1xuJiM0MztcbiYjNDM7XHRcdC8qIG5vdGlmeSBwYXJlbnQgc2lnbmFsIGhhbmRsZXIgaXMgaW5zdGFsbGVkICovXG4mIzQzO1x0XHRBU1NFUlRfRVEod3JpdGUocGlwZV9jMnBbMV0sIGJ1ZiwgMSksIDEsIFwmIzM0O3BpcGVfd3JpdGVcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdC8qIG1ha2Ugc3VyZSBwYXJlbnQgZW5hYmxlZCBicGYgcHJvZ3JhbSB0byBzZW5kX3NpZ25hbCAqL1xuJiM0MztcdFx0QVNTRVJUX0VRKHJlYWQocGlwZV9wMmNbMF0sIGJ1ZiwgMSksIDEsIFwmIzM0O3BpcGVfcmVhZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0LyogdGhlIHNpZ25hbCBpcyBzZW50IGZyb20gd29ya3F1ZXVlIGNvbnRleHQsIHNvIG5vdGhpbmcgaGFzXG4mIzQzO1x0XHQgKiB0byBiZSB0cmlnZ2VyZWQgZnJvbSBoZXJlXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHdoaWxlICghc2lndXNyMV9yZWNlaXZlZClcbiYjNDM7XHRcdFx0c2xlZXAoMSk7XG4mIzQzO1xuJiM0MztcdFx0YnVmWzBdID0gc2lndXNyMV9yZWNlaXZlZDtcbiYjNDM7XG4mIzQzO1x0XHRBU1NFUlRfRVEoc2lndXNyMV9yZWNlaXZlZCwgOCwgXCYjMzQ7c2lndXNyMV9yZWNlaXZlZFwmIzM0Oyk7XG4mIzQzO1x0XHRBU1NFUlRfRVEod3JpdGUocGlwZV9jMnBbMV0sIGJ1ZiwgMSksIDEsIFwmIzM0O3BpcGVfd3JpdGVcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdGNsb3NlKHBpcGVfYzJwWzFdKTtcbiYjNDM7XHRcdGNsb3NlKHBpcGVfcDJjWzBdKTtcbiYjNDM7XHRcdGV4aXQoMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjbG9zZShwaXBlX2MycFsxXSk7IC8qIGNsb3NlIHdyaXRlICovXG4mIzQzO1x0Y2xvc2UocGlwZV9wMmNbMF0pOyAvKiBjbG9zZSByZWFkICovXG4mIzQzO1xuJiM0MztcdHNrZWwgPSB0ZXN0X3NlbmRfc2lnbmFsX2tlcm5fX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7c2tlbF9vcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gc2tlbF9vcGVuX2xvYWRfZmFpbHVyZTtcbiYjNDM7XG4mIzQzO1x0Lyogd2FpdCB1bnRpbCBjaGlsZCBzaWduYWwgaGFuZGxlciBpbnN0YWxsZWQgKi9cbiYjNDM7XHRBU1NFUlRfRVEocmVhZChwaXBlX2MycFswXSwgYnVmLCAxKSwgMSwgXCYjMzQ7cGlwZV9yZWFkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogcGlkID09IDAga2VlcHMgdGhlIG90aGVyIHByb2dyYW1zIG9mIHRoaXMgc2tlbGV0b24gaW5hY3RpdmUgKi9cbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VwaWQgPSAwO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNpZyA9IFNJR1VTUjE7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldGFyZ2V0X3BpZCA9IHBpZDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gdGVzdF9zZW5kX3NpZ25hbF9rZXJuX19hdHRhY2goc2tlbCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtza2VsX2F0dGFjaFwmIzM0OykpIHtcbiYjNDM7XHRcdGVyciA9IC0xO1xuJiM0MztcdFx0Z290byBkZXN0cm95X3NrZWw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBub3RpZnkgY2hpbGQgdGhhdCBicGYgcHJvZ3JhbSBjYW4gc2VuZF9zaWduYWwgbm93ICovXG4mIzQzO1x0QVNTRVJUX0VRKHdyaXRlKHBpcGVfcDJjWzFdLCBidWYsIDEpLCAxLCBcJiMzNDtwaXBlX3dyaXRlXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0Lyogd2FpdCBmb3IgcmVzdWx0LCB3b3JrcXVldWVzIHJ1biBvbiB0aGVpciBvd24gKi9cbiYjNDM7XHRlcnIgPSByZWFkX3dpdGhfdGltZW91dChwaXBlX2MycFswXSwgYnVmLCAxLCAxMCAqIDEwMDAgKiAxMDAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HVChlcnIsIDAsIFwmIzM0O3JlYWRpbmcgcGlwZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGRlc3Ryb3lfc2tlbDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGJ1ZlswXSwgOCwgXCYjMzQ7aW5jb3JyZWN0IHJlc3VsdFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztkZXN0cm95X3NrZWw6XG4mIzQzO1x0dGVzdF9zZW5kX3NpZ25hbF9rZXJuX19kZXN0cm95KHNrZWwpO1xuJiM0Mztza2VsX29wZW5fbG9hZF9mYWlsdXJlOlxuJiM0MztcdGNsb3NlKHBpcGVfYzJwWzBdKTtcbiYjNDM7XHRjbG9zZShwaXBlX3AyY1sxXSk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDaGlsZCBpcyBlaXRoZXIgYWJvdXQgdG8gZXhpdCBjbGVhbmx5IG9yIHN0dWNrIGluIGNhc2Ugb2YgZXJyb3JzLlxuJiM0MztcdCAqIE51ZGdlIGl0IHRvIGV4aXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0a2lsbChwaWQsIFNJR0tJTEwpO1xuJiM0MztcdHdhaXQoTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCB0ZXN0X3NlbmRfc2lnbmFsKHZvaWQpXG4ge1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7c2VuZF9zaWduYWxfdHJhY2Vwb2ludFwmIzM0OykpXG5AQCAtMjg5LDQgJiM0MzszOTEsNiBAQCB2b2lkIHRlc3Rfc2VuZF9zaWduYWwodm9pZClcbiBcdFx0dGVzdF9zZW5kX3NpZ25hbF9wZXJmKHRydWUsIHRydWUpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7c2VuZF9zaWduYWxfbm1pX3RocmVhZF9yZW1vdGVcJiMzNDspKVxuIFx0XHR0ZXN0X3NlbmRfc2lnbmFsX25taSh0cnVlLCB0cnVlKTtcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtzZW5kX3NpZ25hbF9rd29ya2VyXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3Rfc2VuZF9zaWduYWxfa3dvcmtlcigpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmNcbmluZGV4IDE3NmEzNTVlMzA2MjQuLmQxYzAwMGMzMDg4NTcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uY1xuQEAgLTYwLDYgJiM0Mzs2MCwzMiBAQCBpbnQgc2VuZF9zaWduYWxfdHBfc2NoZWQodm9pZCAqY3R4KVxuIFx0cmV0dXJuIGJwZl9zZW5kX3NpZ25hbF90ZXN0KGN0eCk7XG4gfVxuIFxuJiM0MzsvKiBTZW5kIGEgc2lnbmFsIHRvIGEgdGFzayBvdGhlciB0aGFuIGN1cnJlbnQsIGZyb20gYSBjb250ZXh0IHdoZXJlIGN1cnJlbnRcbiYjNDM7ICogaXMgYSBrZXJuZWwgdGhyZWFkLiBObyBmaWx0ZXJpbmcgb24gY3VycmVudCBpcyBwb3NzaWJsZSBoZXJlLCBzbyB0aGlzIGlzXG4mIzQzOyAqIGRyaXZlbiBlbnRpcmVseSBieSB0YXJnZXRfcGlkLlxuJiM0MzsgKi9cbiYjNDM7U0VDKFwmIzM0O3RwX2J0Zi93b3JrcXVldWVfZXhlY3V0ZV9zdGFydFwmIzM0OylcbiYjNDM7aW50IHNlbmRfc2lnbmFsX2t3b3JrZXIodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXRfdGFzaztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoc3RhdHVzICE9IDAgfHwgdGFyZ2V0X3BpZCA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHRhcmdldF90YXNrID0gYnBmX3Rhc2tfZnJvbV9waWQodGFyZ2V0X3BpZCk7XG4mIzQzO1x0aWYgKCF0YXJnZXRfdGFzaylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBicGZfc2VuZF9zaWduYWxfdGFzayh0YXJnZXRfdGFzaywgc2lnLCBQSURUWVBFX1RHSUQsIDgpO1xuJiM0MztcdGJwZl90YXNrX3JlbGVhc2UodGFyZ2V0X3Rhc2spO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0ID09IDApXG4mIzQzO1x0XHRzdGF0dXMgPSAxO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7cGVyZl9ldmVudFwmIzM0OylcbiBpbnQgc2VuZF9zaWduYWxfcGVyZih2b2lkICpjdHgpXG4ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc2VuZF9zaWduYWxfdGFzayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBicGZfc2VuZF9zaWduYWxfY29tbW9uKCkgdG8gb25seSBlbmZvcmNlIG5taV91YWNjZXNzX29rYXkoKSB3aGVuIHRoZSB0YXJnZXQgdGFzayBpcyBjdXJyZW50LiBUaGlzIGVuYWJsZXMgQlBGIHByb2dyYW1zIChzdWNoIGFzIHRob3NlIHJ1bm5pbmcgaW4ga3dvcmtlci90cmFjZXBvaW50IGNvbnRleHQpIHRvIHN1Y2Nlc3NmdWxseSBpbnZva2UgdGhlIGJwZl9zZW5kX3NpZ25hbF90YXNrIGtmdW5jIG9uIG5vbi1jdXJyZW50IHRhc2tzLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMga2VybmVsIGV4ZWN1dGlvbiBsb2dpYyBmb3IgQlBGIHNpZ25hbCBkZWxpdmVyeS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU2ZDY0ZjIzZDNiZjk4YTQwMWY5NDU4ZjZhOGQ4Y2VjMjVjYTJkYTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDEwOjM5OjEwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jCmluZGV4IDI5MjYwOTUxYWE4NzEuLmY3YTQxZjIyMjU5OTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMKQEAgLTg3MSw3ICYjNDM7ODcxLDEwIEBAIHN0YXRpYyBpbnQgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbih1MzIgc2lnLCBlbnVtIHBpZF90eXBlIHR5cGUsIHN0cnVjdCB0YXNrX3N0cnVjCiAJICovCiAJaWYgKHVubGlrZWx5KHRhc2stJmd0O2ZsYWdzICZhbXA7IChQRl9LVEhSRUFEIHwgUEZfRVhJVElORykpKQogCQlyZXR1cm4gLUVQRVJNOwotCWlmICh1bmxpa2VseSghbm1pX3VhY2Nlc3Nfb2theSgpKSkKJiM0MzsJLyogU2luY2Ugbm1pX3VhY2Nlc3Nfb2theSgpIGlzIG9ubHkgZm9yIHRoZSBjdXJyZW50CiYjNDM7CSAqIHRhc2ssIGNoZWNrIGlmIHRhc2sgaXMgY3VycmVudC4KJiM0MzsJICovCiYjNDM7CWlmICh0YXNrID09IGN1cnJlbnQgJmFtcDsmYW1wOyB1bmxpa2VseSghbm1pX3VhY2Nlc3Nfb2theSgpKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAkvKiBUYXNrIHNob3VsZCBub3QgYmUgcGlkPTEgdG8gYXZvaWQga2VybmVsIHBhbmljLiAqLwogCWlmICh1bmxpa2VseShpc19nbG9iYWxfaW5pdCh0YXNrKSkpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZW5kX3NpZ25hbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VuZF9zaWduYWwuYwppbmRleCA3YWM0ZDVhNDg4YWE1Li5mOWRkMjNkYjFlZjk4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZW5kX3NpZ25hbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlbmRfc2lnbmFsLmMKQEAgLTI2MSw2ICYjNDM7MjYxLDEwOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NlbmRfc2lnbmFsX25taShib29sIHNpZ25hbF90aHJlYWQsIGJvb2wgcmVtb3RlKQogCXRlc3Rfc2VuZF9zaWduYWxfY29tbW9uKCZhbXA7YXR0ciwgc2lnbmFsX3RocmVhZCwgcmVtb3RlKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc2VuZF9zaWduYWxfa3dvcmtlcih2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHRlc3Rfc2VuZF9zaWduYWxfa2VybiAqc2tlbDsKJiM0MzsJaW50IHBpcGVfYzJwWzJdLCBwaXBlX3AyY1syXTsKJiM0MzsJc3RydWN0IHNpZ2FjdGlvbiBzYSA9IHt9OwomIzQzOwljaGFyIGJ1ZlsyNTZdOwomIzQzOwlpbnQgZXJyID0gLTE7CiYjNDM7CXBpZF90IHBpZDsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0socGlwZShwaXBlX2MycCksICYjMzQ7cGlwZV9jMnAmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LKHBpcGUocGlwZV9wMmMpLCAmIzM0O3BpcGVfcDJjJiMzNDspKSB7CiYjNDM7CQljbG9zZShwaXBlX2MycFswXSk7CiYjNDM7CQljbG9zZShwaXBlX2MycFsxXSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGlkID0gZm9yaygpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShwaWQsIDAsICYjMzQ7Zm9yayYjMzQ7KSkgewomIzQzOwkJY2xvc2UocGlwZV9jMnBbMF0pOwomIzQzOwkJY2xvc2UocGlwZV9jMnBbMV0pOwomIzQzOwkJY2xvc2UocGlwZV9wMmNbMF0pOwomIzQzOwkJY2xvc2UocGlwZV9wMmNbMV0pOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwaWQgPT0gMCkgewomIzQzOwkJLyogaW5zdGFsbCBzaWduYWwgaGFuZGxlciBhbmQgbm90aWZ5IHBhcmVudCAqLwomIzQzOwkJc2Euc2Ffc2lnYWN0aW9uID0gc2lndXNyMV9zaWdpbmZvX2hhbmRsZXI7CiYjNDM7CQlzYS5zYV9mbGFncyA9IFNBX1JFU1RBUlQgfCBTQV9TSUdJTkZPOwomIzQzOwkJQVNTRVJUX05FUShzaWdhY3Rpb24oU0lHVVNSMSwgJmFtcDtzYSwgTlVMTCksIC0xLCAmIzM0O3NpZ2FjdGlvbiYjMzQ7KTsKJiM0MzsKJiM0MzsJCWNsb3NlKHBpcGVfYzJwWzBdKTsgLyogY2xvc2UgcmVhZCAqLwomIzQzOwkJY2xvc2UocGlwZV9wMmNbMV0pOyAvKiBjbG9zZSB3cml0ZSAqLwomIzQzOwomIzQzOwkJLyogbm90aWZ5IHBhcmVudCBzaWduYWwgaGFuZGxlciBpcyBpbnN0YWxsZWQgKi8KJiM0MzsJCUFTU0VSVF9FUSh3cml0ZShwaXBlX2MycFsxXSwgYnVmLCAxKSwgMSwgJiMzNDtwaXBlX3dyaXRlJiMzNDspOwomIzQzOwomIzQzOwkJLyogbWFrZSBzdXJlIHBhcmVudCBlbmFibGVkIGJwZiBwcm9ncmFtIHRvIHNlbmRfc2lnbmFsICovCiYjNDM7CQlBU1NFUlRfRVEocmVhZChwaXBlX3AyY1swXSwgYnVmLCAxKSwgMSwgJiMzNDtwaXBlX3JlYWQmIzM0Oyk7CiYjNDM7CiYjNDM7CQkvKiB0aGUgc2lnbmFsIGlzIHNlbnQgZnJvbSB3b3JrcXVldWUgY29udGV4dCwgc28gbm90aGluZyBoYXMKJiM0MzsJCSAqIHRvIGJlIHRyaWdnZXJlZCBmcm9tIGhlcmUKJiM0MzsJCSAqLwomIzQzOwkJd2hpbGUgKCFzaWd1c3IxX3JlY2VpdmVkKQomIzQzOwkJCXNsZWVwKDEpOwomIzQzOwomIzQzOwkJYnVmWzBdID0gc2lndXNyMV9yZWNlaXZlZDsKJiM0MzsKJiM0MzsJCUFTU0VSVF9FUShzaWd1c3IxX3JlY2VpdmVkLCA4LCAmIzM0O3NpZ3VzcjFfcmVjZWl2ZWQmIzM0Oyk7CiYjNDM7CQlBU1NFUlRfRVEod3JpdGUocGlwZV9jMnBbMV0sIGJ1ZiwgMSksIDEsICYjMzQ7cGlwZV93cml0ZSYjMzQ7KTsKJiM0MzsKJiM0MzsJCWNsb3NlKHBpcGVfYzJwWzFdKTsKJiM0MzsJCWNsb3NlKHBpcGVfcDJjWzBdKTsKJiM0MzsJCWV4aXQoMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2xvc2UocGlwZV9jMnBbMV0pOyAvKiBjbG9zZSB3cml0ZSAqLwomIzQzOwljbG9zZShwaXBlX3AyY1swXSk7IC8qIGNsb3NlIHJlYWQgKi8KJiM0MzsKJiM0MzsJc2tlbCA9IHRlc3Rfc2VuZF9zaWduYWxfa2Vybl9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtza2VsX29wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlnb3RvIHNrZWxfb3Blbl9sb2FkX2ZhaWx1cmU7CiYjNDM7CiYjNDM7CS8qIHdhaXQgdW50aWwgY2hpbGQgc2lnbmFsIGhhbmRsZXIgaW5zdGFsbGVkICovCiYjNDM7CUFTU0VSVF9FUShyZWFkKHBpcGVfYzJwWzBdLCBidWYsIDEpLCAxLCAmIzM0O3BpcGVfcmVhZCYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogcGlkID09IDAga2VlcHMgdGhlIG90aGVyIHByb2dyYW1zIG9mIHRoaXMgc2tlbGV0b24gaW5hY3RpdmUgKi8KJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtwaWQgPSAwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3NpZyA9IFNJR1VTUjE7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7dGFyZ2V0X3BpZCA9IHBpZDsKJiM0MzsKJiM0MzsJZXJyID0gdGVzdF9zZW5kX3NpZ25hbF9rZXJuX19hdHRhY2goc2tlbCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtza2VsX2F0dGFjaCYjMzQ7KSkgewomIzQzOwkJZXJyID0gLTE7CiYjNDM7CQlnb3RvIGRlc3Ryb3lfc2tlbDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBub3RpZnkgY2hpbGQgdGhhdCBicGYgcHJvZ3JhbSBjYW4gc2VuZF9zaWduYWwgbm93ICovCiYjNDM7CUFTU0VSVF9FUSh3cml0ZShwaXBlX3AyY1sxXSwgYnVmLCAxKSwgMSwgJiMzNDtwaXBlX3dyaXRlJiMzNDspOwomIzQzOwomIzQzOwkvKiB3YWl0IGZvciByZXN1bHQsIHdvcmtxdWV1ZXMgcnVuIG9uIHRoZWlyIG93biAqLwomIzQzOwllcnIgPSByZWFkX3dpdGhfdGltZW91dChwaXBlX2MycFswXSwgYnVmLCAxLCAxMCAqIDEwMDAgKiAxMDAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfR1QoZXJyLCAwLCAmIzM0O3JlYWRpbmcgcGlwZSYjMzQ7KSkKJiM0MzsJCWdvdG8gZGVzdHJveV9za2VsOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoYnVmWzBdLCA4LCAmIzM0O2luY29ycmVjdCByZXN1bHQmIzM0Oyk7CiYjNDM7CiYjNDM7ZGVzdHJveV9za2VsOgomIzQzOwl0ZXN0X3NlbmRfc2lnbmFsX2tlcm5fX2Rlc3Ryb3koc2tlbCk7CiYjNDM7c2tlbF9vcGVuX2xvYWRfZmFpbHVyZToKJiM0MzsJY2xvc2UocGlwZV9jMnBbMF0pOwomIzQzOwljbG9zZShwaXBlX3AyY1sxXSk7CiYjNDM7CS8qCiYjNDM7CSAqIENoaWxkIGlzIGVpdGhlciBhYm91dCB0byBleGl0IGNsZWFubHkgb3Igc3R1Y2sgaW4gY2FzZSBvZiBlcnJvcnMuCiYjNDM7CSAqIE51ZGdlIGl0IHRvIGV4aXQuCiYjNDM7CSAqLwomIzQzOwlraWxsKHBpZCwgU0lHS0lMTCk7CiYjNDM7CXdhaXQoTlVMTCk7CiYjNDM7fQomIzQzOwogdm9pZCB0ZXN0X3NlbmRfc2lnbmFsKHZvaWQpCiB7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzZW5kX3NpZ25hbF90cmFjZXBvaW50JiMzNDspKQpAQCAtMjg5LDQgJiM0MzszOTEsNiBAQCB2b2lkIHRlc3Rfc2VuZF9zaWduYWwodm9pZCkKIAkJdGVzdF9zZW5kX3NpZ25hbF9wZXJmKHRydWUsIHRydWUpOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7c2VuZF9zaWduYWxfbm1pX3RocmVhZF9yZW1vdGUmIzM0OykpCiAJCXRlc3Rfc2VuZF9zaWduYWxfbm1pKHRydWUsIHRydWUpOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3NlbmRfc2lnbmFsX2t3b3JrZXImIzM0OykpCiYjNDM7CQl0ZXN0X3NlbmRfc2lnbmFsX2t3b3JrZXIoKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uYwppbmRleCAxNzZhMzU1ZTMwNjI0Li5kMWMwMDBjMzA4ODU3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jCkBAIC02MCw2ICYjNDM7NjAsMzIgQEAgaW50IHNlbmRfc2lnbmFsX3RwX3NjaGVkKHZvaWQgKmN0eCkKIAlyZXR1cm4gYnBmX3NlbmRfc2lnbmFsX3Rlc3QoY3R4KTsKIH0KIAomIzQzOy8qIFNlbmQgYSBzaWduYWwgdG8gYSB0YXNrIG90aGVyIHRoYW4gY3VycmVudCwgZnJvbSBhIGNvbnRleHQgd2hlcmUgY3VycmVudAomIzQzOyAqIGlzIGEga2VybmVsIHRocmVhZC4gTm8gZmlsdGVyaW5nIG9uIGN1cnJlbnQgaXMgcG9zc2libGUgaGVyZSwgc28gdGhpcyBpcwomIzQzOyAqIGRyaXZlbiBlbnRpcmVseSBieSB0YXJnZXRfcGlkLgomIzQzOyAqLwomIzQzO1NFQygmIzM0O3RwX2J0Zi93b3JrcXVldWVfZXhlY3V0ZV9zdGFydCYjMzQ7KQomIzQzO2ludCBzZW5kX3NpZ25hbF9rd29ya2VyKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0X3Rhc2s7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChzdGF0dXMgIT0gMCB8fCB0YXJnZXRfcGlkID09IDApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJdGFyZ2V0X3Rhc2sgPSBicGZfdGFza19mcm9tX3BpZCh0YXJnZXRfcGlkKTsKJiM0MzsJaWYgKCF0YXJnZXRfdGFzaykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXQgPSBicGZfc2VuZF9zaWduYWxfdGFzayh0YXJnZXRfdGFzaywgc2lnLCBQSURUWVBFX1RHSUQsIDgpOwomIzQzOwlicGZfdGFza19yZWxlYXNlKHRhcmdldF90YXNrKTsKJiM0MzsKJiM0MzsJaWYgKHJldCA9PSAwKQomIzQzOwkJc3RhdHVzID0gMTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7cGVyZl9ldmVudCYjMzQ7KQogaW50IHNlbmRfc2lnbmFsX3BlcmYodm9pZCAqY3R4KQogewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTA2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IGBicGZfc2VuZF9zaWduYWxfY29tbW9uYCBpbiBgYnBmX3RyYWNlLmNgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBhbmQgc29tZSBzZWxmdGVzdHMgdW5kZXIgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uLi5gLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCB0cmFjaW5nIGFuZCBCUEYgdXN1YWxseSBnbyBoYW5kIGluIGhhbmQuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIHdpdGhpbiB0aGUgYGJwZl9zZW5kX3NpZ25hbF9jb21tb25gIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFib3V0IHRoZSBgbm1pX3VhY2Nlc3Nfb2theSgpYCBjaGVjay4gSSBzZWUgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSBjaGVja2VkIGBubWlfdWFjY2Vzc19va2F5KClgIGRpcmVjdGx5LCBidXQgdGhlIHJldmlzZWQgdmVyc2lvbiBpcyBhZGRpbmcgYSBjaGVjayB0byBzZWUgaWYgdGhlIHRhcmdldCBgdGFza2AgaXMgYWN0dWFsbHkgdGhlIGBjdXJyZW50YCB0YXNrIGJlZm9yZSBjYWxsaW5nIGBubWlfdWFjY2Vzc19va2F5KClgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSB0YXJnZXRlZCBvcHRpbWl6YXRpb24gb3IgYSBmaXggZm9yIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byBOTUkgYWNjZXNzIHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuIFRoZSBvcmlnaW5hbCBjaGVjayBsaWtlbHkgaGFkIGEgZmxhdywgYXMgaXQgZGlkbiYjMzk7dCBhY2NvdW50IGZvciB0aGUgY29udGV4dCBvZiB0aGUgdGFyZ2V0IHRhc2suCgpJJiMzOTttIGN1cmlvdXMgdG8gc2VlIHdoeSB0aGUgYG5taV91YWNjZXNzX29rYXkoKWAgY2hlY2sgaXMgYmVpbmcgbW9kaWZpZWQgaW4gdGhpcyBzcGVjaWZpYyB3YXkuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB1c2UgbXkgdG9vbHMgdG8gZ3JhYiB0aGUgY29kZSBhcm91bmQgbGluZSA4NzEgb2YgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgZm9yIGEgYml0IG1vcmUgY29udGV4dC4gVGhlbiBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIG11Y2ggYmV0dGVyIGlkZWEgb2YgdGhlIHBvdGVudGlhbCByYW1pZmljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJcyB0aGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBBIHNlY3VyaXR5IGhhcmRlbmluZyBtZWFzdXJlPyBBIGJ1ZyBmaXg/IExldCYjMzk7cyBmaW5kIG91dCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODUwOlx0XHRzdHJ1Y3Qga2VybmVsX3NpZ2luZm8gaW5mbztcbiA4NTE6XHRcdHN0cnVjdCBrZXJuZWxfc2lnaW5mbyAqc2lnaW5mbztcbiA4NTI6XHRcbiA4NTM6XHRcdGlmICghdGFzaykge1xuIDg1NDpcdFx0XHR0YXNrID0gY3VycmVudDtcbiA4NTU6XHRcdFx0c2lnaW5mbyA9IFNFTkRfU0lHX1BSSVY7XG4gODU2Olx0XHR9IGVsc2Uge1xuIDg1NzpcdFx0XHRjbGVhcl9zaWdpbmZvKFx1MDAyNmluZm8pO1xuIDg1ODpcdFx0XHRpbmZvLnNpX3NpZ25vID0gc2lnO1xuIDg1OTpcdFx0XHRpbmZvLnNpX2Vycm5vID0gMDtcbiA4NjA6XHRcdFx0aW5mby5zaV9jb2RlID0gU0lfS0VSTkVMO1xuIDg2MTpcdFx0XHRpbmZvLnNpX3BpZCA9IDA7XG4gODYyOlx0XHRcdGluZm8uc2lfdWlkID0gMDtcbiA4NjM6XHRcdFx0aW5mby5zaV92YWx1ZS5zaXZhbF9wdHIgPSAodm9pZCBfX3VzZXIgX19mb3JjZSAqKSh1bnNpZ25lZCBsb25nKXZhbHVlO1xuIDg2NDpcdFx0XHRzaWdpbmZvID0gXHUwMDI2aW5mbztcbiA4NjU6XHRcdH1cbiA4NjY6XHRcbiA4Njc6XHRcdC8qIFNpbWlsYXIgdG8gYnBmX3Byb2JlX3dyaXRlX3VzZXIsIHRhc2sgbmVlZHMgdG8gYmVcbiA4Njg6XHRcdCAqIGluIGEgc291bmQgY29uZGl0aW9uIGFuZCBrZXJuZWwgbWVtb3J5IGFjY2VzcyBiZVxuIDg2OTpcdFx0ICogcGVybWl0dGVkIGluIG9yZGVyIHRvIHNlbmQgc2lnbmFsIHRvIHRoZSBjdXJyZW50XG4gODcwOlx0XHQgKiB0YXNrLlxuIDg3MTpcdFx0ICovXG4gODcyOlx0XHRpZiAodW5saWtlbHkodGFzay1cdTAwM2VmbGFncyBcdTAwMjYgKFBGX0tUSFJFQUQgfCBQRl9FWElUSU5HKSkpXG4gODczOlx0XHRcdHJldHVybiAtRVBFUk07XG4gODc0Olx0XHQvKiBTaW5jZSBubWlfdWFjY2Vzc19va2F5KCkgaXMgb25seSBmb3IgdGhlIGN1cnJlbnRcbiA4NzU6XHRcdCAqIHRhc2ssIGNoZWNrIGlmIHRhc2sgaXMgY3VycmVudC5cbiA4NzY6XHRcdCAqL1xuIDg3NzpcdFx0aWYgKHRhc2sgPT0gY3VycmVudCBcdTAwMjZcdTAwMjYgdW5saWtlbHkoIW5taV91YWNjZXNzX29rYXkoKSkpXG4gODc4Olx0XHRcdHJldHVybiAtRVBFUk07XG4gODc5Olx0XHQvKiBUYXNrIHNob3VsZCBub3QgYmUgcGlkPTEgdG8gYXZvaWQga2VybmVsIHBhbmljLiAqL1xuIDg4MDpcdFx0aWYgKHVubGlrZWx5KGlzX2dsb2JhbF9pbml0KHRhc2spKSlcbiA4ODE6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiA4ODI6XHRcbiA4ODM6XHRcdGlmIChwcmVlbXB0X2NvdW50KCkgIT0gMCB8fCBpcnFzX2Rpc2FibGVkKCkpIHtcbiA4ODQ6XHRcdFx0LyogRG8gYW4gZWFybHkgY2hlY2sgb24gc2lnbmFsIHZhbGlkaXR5LiBPdGhlcndpc2UsXG4gODg1Olx0XHRcdCAqIHRoZSBlcnJvciBpcyBsb3N0IGluIGRlZmVycmVkIGlycV93b3JrLlxuIDg4NjpcdFx0XHQgKi9cbiA4ODc6XHRcdFx0aWYgKHVubGlrZWx5KCF2YWxpZF9zaWduYWwoc2lnKSkpXG4gODg4Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODg5Olx0XG4gODkwOlx0XHRcdHdvcmsgPSB0aGlzX2NwdV9wdHIoXHUwMDI2c2VuZF9zaWduYWxfd29yayk7XG4gODkxOlx0XHRcdGlmIChpcnFfd29ya19pc19idXN5KFx1MDAyNndvcmstXHUwMDNlaXJxX3dvcmspKVxuIDg5MjpcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4gODkzOlx0XG4gODk0Olx0XHRcdC8qIEFkZCB0aGUgY3VycmVudCB0YXNrLCB3aGljaCBpcyB0aGUgdGFyZ2V0IG9mIHNlbmRpbmcgc2lnbmFsLFxuIDg5NTpcdFx0XHQgKiB0byB0aGUgaXJxX3dvcmsuIFRoZSBjdXJyZW50IHRhc2sgbWF5IGNoYW5nZSB3aGVuIHF1ZXVlZFxuIDg5NjpcdFx0XHQgKiBpcnEgd29ya3MgZ2V0IGV4ZWN1dGVkLlxuIDg5NzpcdFx0XHQgKi9cbiA4OTg6XHRcdFx0d29yay1cdTAwM2V0YXNrID0gZ2V0X3Rhc2tfc3RydWN0KHRhc2spO1xuIDg5OTpcdFx0XHR3b3JrLVx1MDAzZWhhc19zaWdpbmZvID0gc2lnaW5mbyA9PSBcdTAwMjZpbmZvO1xuIDkwMDpcdFx0XHRpZiAod29yay1cdTAwM2VoYXNfc2lnaW5mbylcbiA5MDE6XHRcdFx0XHRjb3B5X3NpZ2luZm8oXHUwMDI2d29yay1cdTAwM2VpbmZvLCBcdTAwMjZpbmZvKTtcbiA5MDI6XHRcdFx0d29yay1cdTAwM2VzaWcgPSBzaWc7XG4gOTAzOlx0XHRcdHdvcmstXHUwMDNldHlwZSA9IHR5cGU7XG4gOTA0Olx0XHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNndvcmstXHUwMDNlaXJxX3dvcmspO1xuIDkwNTpcdFx0XHRyZXR1cm4gMDtcbiA5MDY6XHRcdH1cbiA5MDc6XHRcbiA5MDg6XHRcdHJldHVybiBncm91cF9zZW5kX3NpZ19pbmZvKHNpZywgc2lnaW5mbywgdGFzaywgdHlwZSk7XG4gOTA5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NTYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRyYWNpbmcgdGhlIGNhbGxlciBmdW5jdGlvbnMgb2YgYGJwZl9zZW5kX3NpZ25hbF9jb21tb25gOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsZXJzIG9mIGBicGZfc2VuZF9zaWduYWxfY29tbW9uYCoqCgpBbHJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHdoZXJlIGBicGZfc2VuZF9zaWduYWxfY29tbW9uYCBpcyBhY3R1YWxseSBiZWluZyAqdXNlZCouIEdpdmVuIHRoZSBuYW1lLCBJJiMzOTtkIGV4cGVjdCBpdCB0byBiZSBhIGNvbW1vbiBmdW5jdGlvbiByZWxhdGVkIHRvIHNpZ25hbCBoYW5kbGluZyB3aXRoaW4gdGhlIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgY29udGV4dC4gU28sIHdoZXJlIGlzIHRoZSBlbnRyeXBvaW50PwoKTXkgaW1tZWRpYXRlIG1vdmUgaXMgdG8gdXNlIGBncmVwYC4gSSB3YW50IHRvIGZpbmQgd2hlcmUgYGJwZl9zZW5kX3NpZ25hbGAgaXMgY2FsbGVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGZvY3VzIG15IHNlYXJjaCBvbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gSSBleHBlY3QgYGJwZl90cmFjZS5jYCB0byBjb250YWluIHRoZSBzb3VyY2UgY29kZSBpbXBsZW1lbnRpbmcgdGhlIHRyYWNlcG9pbnRzIHRoYXQgYWxsb3cgbWUgdG8gdW5kZXJzdGFuZCB3aGVyZSBzaWduYWxzIGFyZSBnZXR0aW5nIHNlbnQuIEZyb20gdGhlcmUsIEkgY2FuIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGNhbGwgZ3JhcGguIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyBiYWNrIHRoZSBjYWxsZXJzIGFuZCB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3NlbmRfc2lnbmFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYz04MzM9c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzZW5kX3NpZ25hbF9pcnFfd29yaywgc2VuZF9zaWduYWxfd29yayk7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtODM0LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjgzNTpzdGF0aWMgdm9pZCBkb19icGZfc2VuZF9zaWduYWwoc3RydWN0IGlycV93b3JrICplbnRyeSlcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy04MzYte1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy04NDYtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6ODQ3OnN0YXRpYyBpbnQgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbih1MzIgc2lnLCBlbnVtIHBpZF90eXBlIHR5cGUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTY0IHZhbHVlKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTg0OC17XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTkxMC1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo5MTE6QlBGX0NBTExfMShicGZfc2VuZF9zaWduYWwsIHUzMiwgc2lnKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTkxMi17XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6OTEzOlx0cmV0dXJuIGJwZl9zZW5kX3NpZ25hbF9jb21tb24oc2lnLCBQSURUWVBFX1RHSUQsIE5VTEwsIDApO1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTkxNC19XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTE1LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjkxNjpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NlbmRfc2lnbmFsX3Byb3RvID0ge1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjkxNzpcdC5mdW5jXHRcdD0gYnBmX3NlbmRfc2lnbmFsLFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTkxOC1cdC5ncGxfb25seVx0PSBmYWxzZSxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTIyLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjkyMzpCUEZfQ0FMTF8xKGJwZl9zZW5kX3NpZ25hbF90aHJlYWQsIHUzMiwgc2lnKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTkyNC17XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6OTI1Olx0cmV0dXJuIGJwZl9zZW5kX3NpZ25hbF9jb21tb24oc2lnLCBQSURUWVBFX1BJRCwgTlVMTCwgMCk7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTI2LX1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy05MjctXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6OTI4OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2VuZF9zaWduYWxfdGhyZWFkX3Byb3RvID0ge1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjkyOTpcdC5mdW5jXHRcdD0gYnBmX3NlbmRfc2lnbmFsX3RocmVhZCxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy05MzAtXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIyNjQ9c3RhdGljIGludCBfX2luaXQgc2VuZF9zaWduYWxfaXJxX3dvcmtfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjcwLVx0XHR3b3JrID0gcGVyX2NwdV9wdHIoXHUwMDI2c2VuZF9zaWduYWxfd29yaywgY3B1KTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMjcxOlx0XHRpbml0X2lycV93b3JrKFx1MDAyNndvcmstXHUwMDNlaXJxX3dvcmssIGRvX2JwZl9zZW5kX3NpZ25hbCk7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI3Mi1cdH1cbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzYxND1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzYxNS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNjE2Ol9fYnBmX2tmdW5jIGludCBicGZfc2VuZF9zaWduYWxfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBzaWcsIGVudW0gcGlkX3R5cGUgdHlwZSxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjE3LVx0XHRcdFx0ICAgICB1NjQgdmFsdWUpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM2MjEtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzYyMjpcdHJldHVybiBicGZfc2VuZF9zaWduYWxfY29tbW9uKHNpZywgdHlwZSwgdGFzaywgdmFsdWUpO1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM2MjMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NTQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgS2Z1bmM6IGBicGZfc2VuZF9zaWduYWxfdGFza2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBicGZfc2VuZF9zaWduYWxfdGFza2AuIFJpZ2h0LCB0aGF0JiMzOTtzIGEgQlBGIGtmdW5jLiBJbnRlcmVzdGluZy4gVGhlIGNvZGUgcGF0aCBJJiMzOTttIGV4YW1pbmluZyBpbnZvbHZlcyBgYnBmX3NlbmRfc2lnbmFsX3Rhc2sodGFzaywgLi4uKWAgYmVpbmcgaW52b2tlZCwgYW5kIGNydWNpYWxseSwgdGhlIGB0YXNrYCBhcmd1bWVudCBoZXJlIHJlZmVycyB0byBhICpkaWZmZXJlbnQqIHRhc2ssIG5vdCB0aGUgY3VycmVudCBvbmUuIEkgc2VlIGEgY2FsbCB0byBgbm1pX3VhY2Nlc3Nfb2theSgpYCBpbiB0aGUgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgY29kZSwgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQuIFRoaXMgaXMgYSBiaXQgdW5leHBlY3RlZCBhbmQgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBubWlfdWFjY2Vzc19va2F5KClgIGlzIGFsbCBhYm91dCBpbiB0aGlzIGNvbnRleHQuIFRpbWUgdG8gcHVsbCBvdXQgdGhlIGdyZXAgYW5kIGRpZyBpbiB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGhlcmUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25taV91YWNjZXNzX29rYXkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvZXZlbnRzL2NvcmUuYz0yOTExPXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9zZWdtZW50X2Jhc2UodW5zaWduZWQgaW50IHNlZ21lbnQpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0yOTIzLVx0XHQgKi9cbmFyY2gveDg2L2V2ZW50cy9jb3JlLmM6MjkyNDpcdFx0aWYgKCFubWlfdWFjY2Vzc19va2F5KCkpXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTI5MjUtXHRcdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYz0yOTk3PXBlcmZfY2FsbGNoYWluX3VzZXIoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5X2N0eCAqZW50cnksIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmFyY2gveDg2L2V2ZW50cy9jb3JlLmMtMzAxNy1cbmFyY2gveDg2L2V2ZW50cy9jb3JlLmM6MzAxODpcdGlmICghbm1pX3VhY2Nlc3Nfb2theSgpKVxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0zMDE5LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaD03ND1zdHJ1Y3QgdGxiX3N0YXRlIHtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90bGJmbHVzaC5oLTgzLVx0ICogd2hlbiBDUjMgYW5kIGxvYWRlZF9tbSB3b3VsZCBvdGhlcndpc2UgYmUgaW5jb25zaXN0ZW50LiAgVGhpc1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaDo4NDpcdCAqIGlzIGZvciBubWlfdWFjY2Vzc19va2F5KCkmIzM5O3MgYmVuZWZpdC5cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgtODUtXHQgKi9cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90bGJmbHVzaC5oPTE5MD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZW50ZXJfbGF6eV90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgtMTk3LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaDoxOTg6Ym9vbCBubWlfdWFjY2Vzc19va2F5KHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaDoxOTk6I2RlZmluZSBubWlfdWFjY2Vzc19va2F5IG5taV91YWNjZXNzX29rYXlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgtMjAwLVxuLS1cbmFyY2gveDg2L2xpYi9pbnNuLWV2YWwuYz02MjE9c3RhdGljIGJvb2wgZ2V0X2Rlc2Moc3RydWN0IGRlc2Nfc3RydWN0ICpvdXQsIHVuc2lnbmVkIHNob3J0IHNlbClcbi0tXG5hcmNoL3g4Ni9saWIvaW5zbi1ldmFsLmMtNjM3LVx0XHQgKi9cbmFyY2gveDg2L2xpYi9pbnNuLWV2YWwuYzo2Mzg6XHRcdGlmICghbm1pX3VhY2Nlc3Nfb2theSgpKVxuYXJjaC94ODYvbGliL2luc24tZXZhbC5jLTYzOS1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuYXJjaC94ODYvbGliL3VzZXJjb3B5LmM9MzI9Y29weV9mcm9tX3VzZXJfbm1pKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKVxuLS1cbmFyY2gveDg2L2xpYi91c2VyY29weS5jLTM4LVxuYXJjaC94ODYvbGliL3VzZXJjb3B5LmM6Mzk6XHRpZiAoIW5taV91YWNjZXNzX29rYXkoKSlcbmFyY2gveDg2L2xpYi91c2VyY29weS5jLTQwLVx0XHRyZXR1cm4gbjtcbi0tXG5hcmNoL3g4Ni9tbS90bGIuYz03ODM9dm9pZCBzd2l0Y2hfbW1faXJxc19vZmYoc3RydWN0IG1tX3N0cnVjdCAqdW51c2VkLCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0LFxuLS1cbmFyY2gveDg2L21tL3RsYi5jLTkwOS1cdFx0LypcbmFyY2gveDg2L21tL3RsYi5jOjkxMDpcdFx0ICogSW5kaWNhdGUgdGhhdCBDUjMgaXMgYWJvdXQgdG8gY2hhbmdlLiBubWlfdWFjY2Vzc19va2F5KClcbmFyY2gveDg2L21tL3RsYi5jLTkxMS1cdFx0ICogYW5kIG90aGVycyBhcmUgc2Vuc2l0aXZlIHRvIHRoZSB3aW5kb3cgd2hlcmUgbW1fY3B1bWFzaygpLFxuLS1cbmFyY2gveDg2L21tL3RsYi5jPTE2ODI9dm9pZCBhcmNoX3RsYmJhdGNoX2ZsdXNoKHN0cnVjdCBhcmNoX3RsYmZsdXNoX3VubWFwX2JhdGNoICpiYXRjaClcbi0tXG5hcmNoL3g4Ni9tbS90bGIuYy0xNzIxLSAqL1xuYXJjaC94ODYvbW0vdGxiLmM6MTcyMjpib29sIG5taV91YWNjZXNzX29rYXkodm9pZClcbmFyY2gveDg2L21tL3RsYi5jLTE3MjMte1xuLS1cbmFyY2gveDg2L21tL3RsYi5jLTE3MzEtXHQgKiBjdXJyZW50X21tLVx1MDAzZXBnZCA9PSBfX3ZhKHJlYWRfY3IzX3BhKCkpLiAgVGhpcyBtYXkgYmUgc2xvdywgdGhvdWdoLFxuYXJjaC94ODYvbW0vdGxiLmM6MTczMjpcdCAqIGlmIHdlJiMzOTtyZSBydW5uaW5nIGluIGEgVk0gd2l0aCBzaGFkb3cgcGFnaW5nLCBhbmQgbm1pX3VhY2Nlc3Nfb2theSgpXG5hcmNoL3g4Ni9tbS90bGIuYy0xNzMzLVx0ICogaXMgc3VwcG9zZWQgdG8gYmUgcmVhc29uYWJseSBmYXN0LlxuLS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmgtMjQtICovXG5pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oOjI1OiNpZm5kZWYgbm1pX3VhY2Nlc3Nfb2theVxuaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaDoyNjojIGRlZmluZSBubWlfdWFjY2Vzc19va2F5KCkgdHJ1ZVxuaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaC0yNy0jZW5kaWZcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzU1PUJQRl9DQUxMXzMoYnBmX3Byb2JlX3dyaXRlX3VzZXIsIHZvaWQgX191c2VyICosIHVuc2FmZV9wdHIsIGNvbnN0IHZvaWQgKiwgc3JjLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjUtXHQgKlxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM2NjpcdCAqIG5taV91YWNjZXNzX29rYXkoKSBlbnN1cmVzIHRoZSBwcm9iZSBpcyBub3QgcnVuIGluIGFuIGludGVyaW1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjctXHQgKiBzdGF0ZSwgd2hlbiB0aGUgdGFzayBvciBtbSBhcmUgc3dpdGNoZWQuIFRoaXMgaXMgc3BlY2lmaWNhbGx5XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3My1cdFx0cmV0dXJuIC1FUEVSTTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNzQ6XHRpZiAodW5saWtlbHkoIW5taV91YWNjZXNzX29rYXkoKSkpXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc1LVx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz04NDc9c3RhdGljIGludCBicGZfc2VuZF9zaWduYWxfY29tbW9uKHUzMiBzaWcsIGVudW0gcGlkX3R5cGUgdHlwZSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1NjQgdmFsdWUpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTg3My1cdFx0cmV0dXJuIC1FUEVSTTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo4NzQ6XHQvKiBTaW5jZSBubWlfdWFjY2Vzc19va2F5KCkgaXMgb25seSBmb3IgdGhlIGN1cnJlbnRcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy04NzUtXHQgKiB0YXNrLCBjaGVjayBpZiB0YXNrIGlzIGN1cnJlbnQuXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtODc2LVx0ICovXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6ODc3Olx0aWYgKHRhc2sgPT0gY3VycmVudCBcdTAwMjZcdTAwMjYgdW5saWtlbHkoIW5taV91YWNjZXNzX29rYXkoKSkpXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtODc4LVx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbm1tL21hY2Nlc3MuYz0xMjA9bG9uZyBjb3B5X2Zyb21fdXNlcl9ub2ZhdWx0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgc2l6ZV90IHNpemUpXG4tLVxubW0vbWFjY2Vzcy5jLTEyNi1cbm1tL21hY2Nlc3MuYzoxMjc6XHRpZiAoIW5taV91YWNjZXNzX29rYXkoKSlcbm1tL21hY2Nlc3MuYy0xMjgtXHRcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk1OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aCBGdXp6aW5nOiBBIEJQRiBTaWduYWwgSW5qZWN0aW9uIEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYSBjaGFuZ2UgdG8gYGJwZl9zZW5kX3NpZ25hbF9jb21tb25gIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGF0IHdoZW4gYGJwZl9zZW5kX3NpZ25hbF90YXNrYCBpcyBjYWxsZWQgZnJvbSBhIGt3b3JrZXIgdGhyZWFkLCBhIHRyYWNlcG9pbnQsIG9yIHNvbWUgb3RoZXIgY29udGV4dCB3aGVyZSB0aGUgYGN1cnJlbnRgIHRhc2sgaXMgYSBrdGhyZWFkLCBgbm1pX3VhY2Nlc3Nfb2theSgpYCBmYWlscy4gVGhpcyBoYXBwZW5zIGJlY2F1c2Uga3RocmVhZHMgb24geDg2IGRvbiYjMzk7dCBoYXZlIGEgdmFsaWQgYGN1cnJlbnQtJmd0O21tYCBvciB0aGVpciBDUjMgaXMgZGlmZmVyZW50LCBhbmQgYXMgYSByZXN1bHQsIGBicGZfc2VuZF9zaWduYWxfdGFza2Agd2FzIGluY29ycmVjdGx5IHJldHVybmluZyAtRVBFUk0gZXZlbiB3aGVuIGl0IHNob3VsZCBoYXZlIHN1Y2NlZWRlZCBpbiBzZW5kaW5nIGEgc2lnbmFsIHRvIGEgdXNlciB0YXNrLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgdGhhdC4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGZ1enphYmxlPyBJIGhhdmUgYSBwcmV0dHkgY2xlYXIgY2hlY2tsaXN0IGluIG1pbmQuIERvZXMgaXQgYWZmZWN0IGNvcmUga2VybmVsIGxvZ2ljPyBDaGVjay4gVGhpcyBwYXRjaCBkaXJlY3RseSBtb2RpZmllcyB0aGUgQlBGIHRyYWNpbmcgaGVscGVyLCBzcGVjaWZpY2FsbHkgYGJwZl9zZW5kX3NpZ25hbF90YXNrYCB3aGljaCBpcyBhIGtmdW5jLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLiBJdCYjMzk7cyBmaXhpbmcgYSBidWcgdGhhdCBwcmV2ZW50ZWQgc2lnbmFsIHNlbmRpbmcgZnJvbSBCUEYgcHJvZ3JhbXMgdG8gb3RoZXIgdGFza3MsIGFuZCBJIGNhbiBlbnZpc2lvbiBhdHRhY2hpbmcgdGhhdCBCUEYgY29kZSB0byB0cmFjZXBvaW50cyBvciBrd29ya2VycyB3aGljaCBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUuCgpHaXZlbiBteSBjcml0ZXJpYSwgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIEkgbWVhbiwgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBCUEYgc2lnbmFsIGluamVjdGlvbiBwYXRoLCB3aGljaCwgaWYgbWlzaGFuZGxlZCwgY291bGQgYmUgcHJvYmxlbWF0aWMuCgpOb3csIGxldCBtZSBjaGVjayB0aGUgcmVsZXZhbnQgQ09ORklHIG9wdGlvbnMgYW5kIEZvY3VzU3ltYm9scyB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIHBhdGggaXMgYWN0dWFsbHkgZW5hYmxlZC4gTGV0IG1lIGZpbmQgYGtlcm5lbC90cmFjZS9NYWtlZmlsZWAgb3IgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgdG8gc2VlIHdoaWNoIGNvbmZpZyBvcHRpb25zIGVuYWJsZSBgYnBmX3RyYWNlLmNgLCBlc3BlY2lhbGx5IGBicGZfc2VuZF9zaWduYWxfdGFza2AuIE9uY2UgSSBrbm93IHRoYXQsIEkmIzM5O2xsIGJlIGluIGdvb2Qgc2hhcGUgdG8gc3RhcnQgcHJlcHBpbmcgYSBmdXp6aW5nIGNhbXBhaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhY2VcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvTWFrZWZpbGU9NTQ9S0NPVl9JTlNUUlVNRU5UX3RyYWNlX2lycXNvZmYubyA6PSBuXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNTUtXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6NTY6Q0ZMQUdTX2JwZl90cmFjZS5vIDo9IC1JJChzcmMpXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNTctXG4tLVxua2VybmVsL3RyYWNlL01ha2VmaWxlPTEwOT1vYmotJChDT05GSUdfVVNFUl9FVkVOVFMpICYjNDM7PSB0cmFjZV9ldmVudHNfdXNlci5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6MTEwOm9iai0kKENPTkZJR19CUEZfRVZFTlRTKSAmIzQzOz0gYnBmX3RyYWNlLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xMTEtb2JqLSQoQ09ORklHX0tQUk9CRV9FVkVOVFMpICYjNDM7PSB0cmFjZV9rcHJvYmUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE2MAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgS2NvbmZpZyBmb3IgQlBGX0VWRU5UUyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbnRhbCBtYXAgb2YgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgQlBGX0VWRU5UU2AuIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcGFydCBvZiB0aGUgc3RhbmRhcmQgQlBGIGluZnJhc3RydWN0dXJlLCBidXQgaXQmIzM5O3MgYWx3YXlzIHdpc2UgdG8gY29uZmlybSBhbmQgdW5kZXJzdGFuZCBpdHMgcHJlY2lzZSBsb2NhdGlvbiB3aXRoaW4gdGhlIEtjb25maWcgaGllcmFyY2h5LiBUaGlzIGlzIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCB3aGVyZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHRzIGFyZSBtYW5hZ2VkLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hldGhlciBpdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQsIHdoYXQgb3RoZXIgb3B0aW9ucyBpdCBtaWdodCBkZXBlbmQgb24gKGUuZy4sIGBDT05GSUdfQlBGYCwgYENPTkZJR19ERUJVR19JTkZPX0JURmApLCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGNvbnN0cmFpbnRzIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIGEgZmVhdHVyZSBmbGFnLCBhIGRlcGVuZGVuY3ksIG9yIGEgcGFydCBvZiBhIGxhcmdlciwgbW9yZSBjb21wbGV4IHN1YnN5c3RlbSBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIFRoZSBnb2FsIGlzIHRvIGVpdGhlciBjb25maXJtIG15IGFzc3VtcHRpb25zIHF1aWNrbHksIG9yLCBtb3JlIGltcG9ydGFudGx5LCBkaXNjb3ZlciBhbnkgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gcGl0ZmFsbHMgb3IgbnVhbmNlcyByZWxhdGVkIHRvIGBCUEZfRVZFTlRTYC4gSSBuZWVkIHRvIGhhdmUgYSBjb25jcmV0ZSBncmFzcCBvZiB0aGUgZmVhdHVyZSwgc28gSSBjYW4gY29udGludWUgd2l0aCB0aGUgdGFzayBhdCBoYW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0VWRU5UUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9ODM5PWNvbmZpZyBFUFJPQkVfRVZFTlRTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctODUyLVxua2VybmVsL3RyYWNlL0tjb25maWc6ODUzOmNvbmZpZyBCUEZfRVZFTlRTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NTQtXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTM0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIEtlcm5lbCBUcmFjZSBLY29uZmlnKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYGtlcm5lbC90cmFjZS9LY29uZmlnYC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB3aGF0JiMzOTtzIGdvaW5nIG9uIGFyb3VuZCBsaW5lIDg1My4gSSYjMzk7dmUgZ290IGEgaHVuY2ggYWJvdXQgc29tZXRoaW5nIHRoZXJlLCBsaWtlbHkgcmVsYXRlZCB0byBhIHBhcnRpY3VsYXIgdHJhY2luZyBmZWF0dXJlIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgaHVuY2ggaXMgY29ycmVjdCwgb3IgaWYgdGhlcmUmIzM5O3MgYSByZWxhdGVkIGRlcGVuZGVuY3kgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhhdCBmdW5jdGlvbi4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGlzIHNlY3Rpb24gb2YgdGhlIEtjb25maWcgZmlsZSBjb250cm9scyB0aGUgYnVpbGQgYW5kIGluY2x1c2lvbiBvZiBzcGVjaWZpYyB0cmFjaW5nIGNhcGFiaWxpdGllcyB3aXRoaW4gdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODUwOlx0XHQgIGNvbnZlcnQgdGhlIHR5cGUgb2YgYW4gZXZlbnQgZmllbGQuIEZvciBleGFtcGxlLCB0dXJuIGFuXG4gODUxOlx0XHQgIGFkZHJlc3MgaW50byBhIHN0cmluZy5cbiA4NTI6XHRcbiA4NTM6XHRjb25maWcgQlBGX0VWRU5UU1xuIDg1NDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuIDg1NTpcdFx0ZGVwZW5kcyBvbiAoS1BST0JFX0VWRU5UUyB8fCBVUFJPQkVfRVZFTlRTKSBcdTAwMjZcdTAwMjYgUEVSRl9FVkVOVFNcbiA4NTY6XHRcdGJvb2xcbiA4NTc6XHRcdGRlZmF1bHQgeVxuIDg1ODpcdFx0aGVscFxuIDg1OTpcdFx0ICBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBhdHRhY2ggQlBGIHByb2dyYW1zIHRvIGtwcm9iZSwgdXByb2JlLCBhbmRcbiA4NjA6XHRcdCAgdHJhY2Vwb2ludCBldmVudHMuXG4gODYxOlx0XG4gODYyOlx0Y29uZmlnIERZTkFNSUNfRVZFTlRTXG4gODYzOlx0XHRkZWZfYm9vbCBuXG4gODY0Olx0XG4gODY1Olx0Y29uZmlnIFBST0JFX0VWRU5UU1xuIDg2NjpcdFx0ZGVmX2Jvb2wgblxuIDg2NzpcdFxuIDg2ODpcdGNvbmZpZyBCUEZfS1BST0JFX09WRVJSSURFXG4gODY5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgcHJvZ3JhbXMgdG8gb3ZlcnJpZGUgYSBrcHJvYmVkIGZ1bmN0aW9uXCYjMzQ7XG4gODcwOlx0XHRkZXBlbmRzIG9uIEJQRl9FVkVOVFNcbiA4NzE6XHRcdGRlcGVuZHMgb24gRlVOQ1RJT05fRVJST1JfSU5KRUNUSU9OXG4gODcyOlx0XHRkZWZhdWx0IG5cbiA4NzM6XHRcdGhlbHBcbiA4NzQ6XHRcdCBBbGxvd3MgQlBGIHRvIG92ZXJyaWRlIHRoZSBleGVjdXRpb24gb2YgYSBwcm9iZWQgZnVuY3Rpb24gYW5kXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDc2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gQlBGIFNpZ25hbCBIYW5kbGluZyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nLCBiZXlvbmQgdGhlIGluaXRpYWwgaW52ZXN0aWdhdGlvbiwgd2Ugc2hvdWxkIGRvdWJsZS1jaGVjayBzb21ldGhpbmcgY3J1Y2lhbC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGlmIHRoZSBmdW5jdGlvbiBgYnBmX3NlbmRfc2lnbmFsX3Rhc2tgIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIGlzIHdyYXBwZWQgd2l0aGluIGFueSBwcmVwcm9jZXNzb3IgYCNpZmRlZmAgZGlyZWN0aXZlcy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgZ290Y2hhLCBhbmQgaXQgY291bGQgZHJhbWF0aWNhbGx5IGFsdGVyIGl0cyBhdmFpbGFiaWxpdHkgZGVwZW5kaW5nIG9uIHRoZSBrZXJuZWwgYnVpbGQgY29uZmlndXJhdGlvbi4gSSYjMzk7dmUgZ290IGEgaHVuY2ggaXQgbWlnaHQgYmUsIGFuZCBpZiBzbywgaXQmIzM5O3MgZ29pbmcgdG8gaW5mbHVlbmNlIG91ciBhbmFseXNpcyBncmVhdGx5LiBTbywgbGV0IG1lIGp1bXAgb3ZlciB0byBsaW5lIDM2MTYgaW4gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgYW5kIHRha2UgYSBnb29kIGxvb2sgYXJvdW5kIHRoYXQgYXJlYS4gTmVlZCB0byBzZWUgaWYgaXQmIzM5O3MgY29uZGl0aW9uYWxseSBjb21waWxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM2MTA6XHR7XG4zNjExOlx0XHRyZXR1cm4gc3RybmNweV9mcm9tX2tlcm5lbF9ub2ZhdWx0KGRzdCwgdW5zYWZlX3NyYywgc2l6ZSk7XG4zNjEyOlx0fVxuMzYxMzpcdFxuMzYxNDpcdF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbjM2MTU6XHRcbjM2MTY6XHRfX2JwZl9rZnVuYyBpbnQgYnBmX3NlbmRfc2lnbmFsX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgc2lnLCBlbnVtIHBpZF90eXBlIHR5cGUsXG4zNjE3Olx0XHRcdFx0XHQgICAgIHU2NCB2YWx1ZSlcbjM2MTg6XHR7XG4zNjE5Olx0XHRpZiAodHlwZSAhPSBQSURUWVBFX1BJRCBcdTAwMjZcdTAwMjYgdHlwZSAhPSBQSURUWVBFX1RHSUQpXG4zNjIwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzYyMTpcdFxuMzYyMjpcdFx0cmV0dXJuIGJwZl9zZW5kX3NpZ25hbF9jb21tb24oc2lnLCB0eXBlLCB0YXNrLCB2YWx1ZSk7XG4zNjIzOlx0fVxuMzYyNDpcdFxuMzYyNTpcdF9fYnBmX2tmdW5jIGludCBicGZfcHJvYmVfcmVhZF91c2VyX2R5bnB0cihjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZHB0ciwgdTY0IG9mZixcbjM2MjY6XHRcdFx0XHRcdFx0ICAgdTY0IHNpemUsIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24pXG4zNjI3Olx0e1xuMzYyODpcdFx0cmV0dXJuIF9fYnBmX2R5bnB0cl9jb3B5KGRwdHIsIG9mZiwgc2l6ZSwgKGNvbnN0IHZvaWQgX19mb3JjZSAqKXVuc2FmZV9wdHJfX2lnbixcbjM2Mjk6XHRcdFx0XHRcdCBjb3B5X3VzZXJfZGF0YV9ub2ZhdWx0LCBOVUxMKTtcbjM2MzA6XHR9XG4zNjMxOlx0XG4zNjMyOlx0X19icGZfa2Z1bmMgaW50IGJwZl9wcm9iZV9yZWFkX2tlcm5lbF9keW5wdHIoY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRwdHIsIHU2NCBvZmYsXG4zNjMzOlx0XHRcdFx0XHRcdCAgICAgdTY0IHNpemUsIGNvbnN0IHZvaWQgKnVuc2FmZV9wdHJfX2lnbilcbjM2MzQ6XHR7XG4zNjM1Olx0XHRyZXR1cm4gX19icGZfZHlucHRyX2NvcHkoZHB0ciwgb2ZmLCBzaXplLCB1bnNhZmVfcHRyX19pZ24sXG4zNjM2Olx0XHRcdFx0XHQgY29weV9rZXJuZWxfZGF0YV9ub2ZhdWx0LCBOVUxMKTtcbjM2Mzc6XHR9XG4zNjM4Olx0XG4zNjM5Olx0X19icGZfa2Z1bmMgaW50IGJwZl9wcm9iZV9yZWFkX3VzZXJfc3RyX2R5bnB0cihjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZHB0ciwgdTY0IG9mZixcbjM2NDA6XHRcdFx0XHRcdFx0ICAgICAgIHU2NCBzaXplLCBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduKVxuMzY0MTpcdHtcbjM2NDI6XHRcdHJldHVybiBfX2JwZl9keW5wdHJfY29weV9zdHIoZHB0ciwgb2ZmLCBzaXplLCAoY29uc3Qgdm9pZCBfX2ZvcmNlICopdW5zYWZlX3B0cl9faWduLFxuMzY0MzpcdFx0XHRcdFx0ICAgICBjb3B5X3VzZXJfc3RyX25vZmF1bHQsIE5VTEwpO1xuMzY0NDpcdH1cbjM2NDU6XHRcbjM2NDY6XHRfX2JwZl9rZnVuYyBpbnQgYnBmX3Byb2JlX3JlYWRfa2VybmVsX3N0cl9keW5wdHIoY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRwdHIsIHU2NCBvZmYsXG4zNjQ3Olx0XHRcdFx0XHRcdFx0IHU2NCBzaXplLCBjb25zdCB2b2lkICp1bnNhZmVfcHRyX19pZ24pXG4zNjQ4Olx0e1xuMzY0OTpcdFx0cmV0dXJuIF9fYnBmX2R5bnB0cl9jb3B5X3N0cihkcHRyLCBvZmYsIHNpemUsIHVuc2FmZV9wdHJfX2lnbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMjEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBEZXBlbmRlbmNpZXMgaW4gYGJwZl90cmFjZS5jYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBkZXBlbmRlbmNpZXMsIHNvIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBicGZfdHJhY2UuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGNsYXJpZnkgaWYgdGhlIGBrZnVuY3NgIHdpdGhpbiB0aGF0IGZpbGUgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIG9uIEJURiAoQlRGIGJlaW5nIGVzc2VudGlhbCBmb3IgdHlwZSBpbmZvcm1hdGlvbiBpbiBCUEYgcHJvZ3JhbXMpLCBvciBwb3NzaWJseSBvdGhlciBrZXJuZWwgY29uZmlndXJhdGlvbnMgbGlrZSBgQ09ORklHX0JQRl9TWVNDQUxMYCAod2hpY2ggZW5hYmxlcyB0aGUgQlBGIHN5c2NhbGwgaXRzZWxmKSBvciBgQ09ORklHX0RFQlVHX0lORk9fQlRGYCAod2hpY2ggaW1wYWN0cyB0aGUgYXZhaWxhYmlsaXR5IGFuZCBjb21wbGV0ZW5lc3Mgb2YgQlRGIGRhdGEpLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBwb3J0YWJpbGl0eSBhbmQgZW5zdXJpbmcgdGhpbmdzIHdvcmsgYXMgZXhwZWN0ZWQuCgpCZXlvbmQgdGhhdCwgSSBhbHNvIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYGJwZl9zZW5kX3NpZ25hbF90YXNrYCBmdW5jdGlvbi4gSXQmIzM5O3MgYSBrZXkgcHJpbWl0aXZlIGZvciBpbnRlci1wcm9jZXNzIHNpZ25hbGluZyB3aXRoaW4gQlBGIHByb2dyYW1zLCBzbyBrbm93aW5nIHdoZXJlIGl0JiMzOTtzIHJlZ2lzdGVyZWQgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc2lnbmFsIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9zZW5kX3NpZ25hbF90YXNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzYxND1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzYxNS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNjE2Ol9fYnBmX2tmdW5jIGludCBicGZfc2VuZF9zaWduYWxfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBzaWcsIGVudW0gcGlkX3R5cGUgdHlwZSxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjE3LVx0XHRcdFx0ICAgICB1NjQgdmFsdWUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTYyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIHRoZSBrZnVuYyBSZWdpc3RyYXRpb25zIGluIGJwZl90cmFjZS5jKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gYGJwZl90cmFjZS5jYCB0byB1bmRlcnN0YW5kIHRoZSBrZnVuYyByZWdpc3RyYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIEJURiAoQlBGIFR5cGUgRm9ybWF0KSBrZnVuYyBzZXQuIEkgd2FudCB0byBwaW5wb2ludCBleGFjdGx5IHdoZXJlIGFuZCBob3cgdGhlc2Uga2VybmVsIGZ1bmN0aW9ucyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoYXQgQlRGIGluZnJhc3RydWN0dXJlLiBJdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgQlBGIHZlcmlmaWVyIGhhbmRsZXMgdGhlc2UgZnVuY3Rpb24gY2FsbHMgYW5kIGhvdyB3ZSBleHBvc2UgdGhlbSB0byB1c2Vyc3BhY2UuIEkgbmVlZCB0byB0cmFjZSB0aGUgcmVnaXN0cmF0aW9uIHBvaW50cyB0byBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiBob3cga2Z1bmNzIGFyZSBtYWRlIGF2YWlsYWJsZSBmb3IgdXNlIGluIEJQRiBwcm9ncmFtcy4gVGhpcyBpbmNsdWRlcyBpZGVudGlmeWluZyB0aGUgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBtZWNoYW5pc21zIGludm9sdmVkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSByZWdpc3RyYXRpb24gbWVjaGFuaXNtcyB0byBzZWUgaG93IHRoZSBCVEYgaW5mb3JtYXRpb24gaXMgY29uc3RydWN0ZWQgYW5kIHBvcHVsYXRlZCwgYXMgd2VsbCBhcyBjb25zaWRlcmluZyBwb3RlbnRpYWwgaW1wYWN0cyBvbiB2ZXJpZmllciBwZXJmb3JtYW5jZSBhbmQga2Z1bmMgdXNhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM2NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzY1MDpcdFx0XHRcdFx0ICAgICBjb3B5X2tlcm5lbF9zdHJfbm9mYXVsdCwgTlVMTCk7XG4zNjUxOlx0fVxuMzY1MjpcdFxuMzY1MzpcdF9fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfZHlucHRyKGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpkcHRyLCB1NjQgb2ZmLFxuMzY1NDpcdFx0XHRcdFx0XHQgIHU2NCBzaXplLCBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduKVxuMzY1NTpcdHtcbjM2NTY6XHRcdHJldHVybiBfX2JwZl9keW5wdHJfY29weShkcHRyLCBvZmYsIHNpemUsIChjb25zdCB2b2lkIF9fZm9yY2UgKil1bnNhZmVfcHRyX19pZ24sXG4zNjU3Olx0XHRcdFx0XHQgY29weV91c2VyX2RhdGFfc2xlZXBhYmxlLCBOVUxMKTtcbjM2NTg6XHR9XG4zNjU5Olx0XG4zNjYwOlx0X19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9zdHJfZHlucHRyKGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpkcHRyLCB1NjQgb2ZmLFxuMzY2MTpcdFx0XHRcdFx0XHQgICAgICB1NjQgc2l6ZSwgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbilcbjM2NjI6XHR7XG4zNjYzOlx0XHRyZXR1cm4gX19icGZfZHlucHRyX2NvcHlfc3RyKGRwdHIsIG9mZiwgc2l6ZSwgKGNvbnN0IHZvaWQgX19mb3JjZSAqKXVuc2FmZV9wdHJfX2lnbixcbjM2NjQ6XHRcdFx0XHRcdCAgICAgY29weV91c2VyX3N0cl9zbGVlcGFibGUsIE5VTEwpO1xuMzY2NTpcdH1cbjM2NjY6XHRcbjM2Njc6XHRfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfZHlucHRyKGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpkcHRyLCB1NjQgb2ZmLFxuMzY2ODpcdFx0XHRcdFx0XHQgICAgICAgdTY0IHNpemUsIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24sXG4zNjY5Olx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbjM2NzA6XHR7XG4zNjcxOlx0XHRyZXR1cm4gX19icGZfZHlucHRyX2NvcHkoZHB0ciwgb2ZmLCBzaXplLCAoY29uc3Qgdm9pZCBfX2ZvcmNlICopdW5zYWZlX3B0cl9faWduLFxuMzY3MjpcdFx0XHRcdFx0IGNvcHlfdXNlcl9kYXRhX3NsZWVwYWJsZSwgdHNrKTtcbjM2NzM6XHR9XG4zNjc0Olx0XG4zNjc1Olx0X19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cl9keW5wdHIoY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRwdHIsIHU2NCBvZmYsXG4zNjc2Olx0XHRcdFx0XHRcdFx0ICAgdTY0IHNpemUsIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24sXG4zNjc3Olx0XHRcdFx0XHRcdFx0ICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4zNjc4Olx0e1xuMzY3OTpcdFx0cmV0dXJuIF9fYnBmX2R5bnB0cl9jb3B5X3N0cihkcHRyLCBvZmYsIHNpemUsIChjb25zdCB2b2lkIF9fZm9yY2UgKil1bnNhZmVfcHRyX19pZ24sXG4zNjgwOlx0XHRcdFx0XHQgICAgIGNvcHlfdXNlcl9zdHJfc2xlZXBhYmxlLCB0c2spO1xuMzY4MTpcdH1cbjM2ODI6XHRcbjM2ODM6XHRfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuMzY4NDpcdFxuMzY4NTpcdCNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUykgXHUwMDI2XHUwMDI2IFxcXG4zNjg2Olx0ICAgIGRlZmluZWQoQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTKVxuMzY4NzpcdFxuMzY4ODpcdHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4zNjg5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU5OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBrZnVuYyBCVEYgSUQgU2V0KioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIHRoZSBrZnVuYyBCVEYgSUQgc2V0IGlzIGFjdHVhbGx5IGRlZmluZWQgYW5kL29yIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBzdGFydCBwb2tpbmcgYXJvdW5kIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBJdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSwgZ2l2ZW4gdGhlIGNvbnRleHQgb2YgQlBGIGFuZCB0cmFjaW5nLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciB0aGUgc2V0JiMzOTtzIGRlY2xhcmF0aW9uLCBpdHMgaW5pdGlhbGl6YXRpb24sIGFuZCBpbXBvcnRhbnRseSwgdGhlIG1lY2hhbmlzbXMgcmVzcG9uc2libGUgZm9yIHBvcHVsYXRpbmcgYW5kIHVzaW5nIHRoaXMgZGF0YSBzdHJ1Y3R1cmUuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgQlRGIElEcyBmb3Iga2Z1bmNzIGFyZSBsaW5rZWQgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBrZXJuZWwgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGNvZGViYXNlLiBJdCB3aWxsIGJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGlzIGEgY2VudHJhbGl6ZWQgcmVnaXN0cmF0aW9uIG9yIG1hbmFnZW1lbnQgcHJvY2VzcyBoYXBwZW5pbmcuIEVzc2VudGlhbGx5LCBJIG5lZWQgdG8gc2VlIHRoZSBsaWZlY3ljbGUgb2YgdGhhdCBrZnVuYyBCVEYgSUQgc2V0IGZyb20gY3JlYXRpb24gdG8gdXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzQ2Mj1zdGF0aWMgaW50IF9faW5pdCBicGZfdHJhY2Vfa2Z1bmNzX2luaXQodm9pZClcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzQ2NS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNDY2Olx0ZXJyID0gZXJyID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9LUFJPQkUsIFx1MDAyNmJwZl9zZXNzaW9uX2tmdW5jX3NldCk7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzQ2NzpcdGVyciA9IGVyciA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2YnBmX3Nlc3Npb25fa2Z1bmNfc2V0KTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNDY4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDA0OAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuCgoqKlRyYWNpbmcgRG93biB0aGUgQlBGIFNpZ25hbCBQYXRoKioKCkFscmlnaHQsIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBicGZfc2VuZF9zaWduYWxfdGFza2AgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZyb20uIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byBjaGVjayB0aGUgQlBGIHRyYWNlcG9pbnQgaW5pdGlhbGl6YXRpb24sIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYnBmX3RyYWNlX2tmdW5jc19pbml0YCBvciBwb3RlbnRpYWxseSB0aGUgQlRGX1NFVDggaW4gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AuIEJ1dCB0aGF0JiMzOTtzIGp1c3QgYSBzdGFydGluZyBwb2ludC4gVG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIGl0JiMzOTtzIGFjdHVhbGx5IHVzZWQgd2l0aGluIHRoZSBrZXJuZWwsIEkgbmVlZCB0byBkbyBhIGJyb2FkZXIgc2VhcmNoLiBUaW1lIHRvIGZpcmUgdXAgYSBncmVwIGFjcm9zcyB0aGUgZW50aXJlIGNvZGViYXNlIGFuZCBsb29rIGZvciBldmVyeSBpbnN0YW5jZSBvZiBgYnBmX3NlbmRfc2lnbmFsX3Rhc2tgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBsYXkgb2YgdGhlIGxhbmQgYW5kIHBpbnBvaW50IHRoZSBjcml0aWNhbCBjYWxsIHNpdGVzLiBIb3BlZnVsbHksIHRoYXQgZ2l2ZXMgbWUgdGhlIGNvbnRleHQgSSBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc2VuZF9zaWduYWxfdGFzayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hlbHBlcnMuYz00ODU0PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGhyb3cpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODU1LSNpZmRlZiBDT05GSUdfQlBGX0VWRU5UU1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDg1NjpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NlbmRfc2lnbmFsX3Rhc2spXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODU3LSNlbmRpZlxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zNjE0PV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjE1LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM2MTY6X19icGZfa2Z1bmMgaW50IGJwZl9zZW5kX3NpZ25hbF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IHNpZywgZW51bSBwaWRfdHlwZSB0eXBlLFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM2MTctXHRcdFx0XHQgICAgIHU2NCB2YWx1ZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmM9OD12b2lkIGJwZl90YXNrX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmM6OTppbnQgYnBmX3NlbmRfc2lnbmFsX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgc2lnLCBlbnVtIHBpZF90eXBlIHR5cGUsIHU2NCB2YWx1ZSkgX19rc3ltO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jLTEwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uYz0xMz1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBicGZfc2VuZF9zaWduYWxfdGVzdCh2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jLTMxLVx0XHRcdGlmICh0YXJnZXRfcGlkKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jOjMyOlx0XHRcdFx0cmV0ID0gYnBmX3NlbmRfc2lnbmFsX3Rhc2sodGFyZ2V0X3Rhc2ssIHNpZywgUElEVFlQRV9QSUQsIHZhbHVlKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uYy0zMy1cdFx0XHRlbHNlXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jLTM2LVx0XHRcdGlmICh0YXJnZXRfcGlkKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jOjM3Olx0XHRcdFx0cmV0ID0gYnBmX3NlbmRfc2lnbmFsX3Rhc2sodGFyZ2V0X3Rhc2ssIHNpZywgUElEVFlQRV9UR0lELCB2YWx1ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmMtMzgtXHRcdFx0ZWxzZVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uYz02OD1pbnQgc2VuZF9zaWduYWxfa3dvcmtlcih2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jLTc5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jOjgwOlx0cmV0ID0gYnBmX3NlbmRfc2lnbmFsX3Rhc2sodGFyZ2V0X3Rhc2ssIHNpZywgUElEVFlQRV9UR0lELCA4KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uYy04MS1cdGJwZl90YXNrX3JlbGVhc2UodGFyZ2V0X3Rhc2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE0OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBgYnBmX3NlbmRfc2lnbmFsX3Rhc2tgIEZ1bmN0aW9uJiMzOTtzIEF2YWlsYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGJwZl9zZW5kX3NpZ25hbF90YXNrYCB3aXRoaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gaG93IGl0cyBjb21waWxhdGlvbiBpcyBjb250cm9sbGVkOyBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIHByb3RlY3RlZCBieSBhbiBgI2lmZGVmIENPTkZJR19CUEZfRVZFTlRTYC4gVGltZSB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHNlZSwgYEJQRl9FVkVOVFNgIG5lZWRzIGBCUEZfU1lTQ0FMTGAsIGFuZCBlaXRoZXIgYFBFUkZfRVZFTlRTYCBhbG9uZyB3aXRoIGVpdGhlciBgS1BST0JFX0VWRU5UU2Agb3IgYFVQUk9CRV9FVkVOVFNgLiBHb3QgaXQuCgpOb3csIGEgbmFnZ2luZyBmZWVsaW5nIHRlbGxzIG1lIHRoZXJlJiMzOTtzIHNvbWV0aGluZyBhYm91dCBCVEYgcmVxdWlyZWQgZm9yIGtmdW5jcywgc28gSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBDT05GSUdfREVCVUdfSU5GT19CVEZgLiBJIHNob3VsZCBjaGVjayBpZiBCVEYgaXMsIGluIGZhY3QsIHJlcXVpcmVkIGZvciBrZnVuY3MuIEkgY2FuJiMzOTt0IHF1aXRlIHJlY2FsbCBpZiBpdCYjMzk7cyBzdHJpY3RseSBhIGRlcGVuZGVuY3kgb3IganVzdCBhIGdvb2QtdG8taGF2ZSwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LgoKQWxyaWdodCwgSSYjMzk7bGwgZ28gY2hlY2sgYGtlcm5lbC9icGYvaGVscGVycy5jYCBhcm91bmQgbGluZSA0ODUwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGVscGVycy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDg0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0ODQwOlx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yYnRyZWVfcm9vdCwgS0ZfUkVUX05VTEwgfCBLRl9TUElOTE9DS19TQUZFKVxuNDg0MTpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmJ0cmVlX2xlZnQsIEtGX1JFVF9OVUxMIHwgS0ZfU1BJTkxPQ0tfU0FGRSlcbjQ4NDI6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JidHJlZV9yaWdodCwgS0ZfUkVUX05VTEwgfCBLRl9TUElOTE9DS19TQUZFKVxuNDg0MzpcdFxuNDg0NDpcdCNpZmRlZiBDT05GSUdfQ0dST1VQU1xuNDg0NTpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY2dyb3VwX2FjcXVpcmUsIEtGX0FDUVVJUkUgfCBLRl9SQ1UgfCBLRl9SRVRfTlVMTClcbjQ4NDY6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2Nncm91cF9yZWxlYXNlLCBLRl9SRUxFQVNFKVxuNDg0NzpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY2dyb3VwX2FuY2VzdG9yLCBLRl9BQ1FVSVJFIHwgS0ZfUkNVIHwgS0ZfUkVUX05VTEwpXG40ODQ4Olx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jZ3JvdXBfZnJvbV9pZCwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKVxuNDg0OTpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGFza191bmRlcl9jZ3JvdXAsIEtGX1JDVSlcbjQ4NTA6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rhc2tfZ2V0X2Nncm91cDEsIEtGX0FDUVVJUkUgfCBLRl9SQ1UgfCBLRl9SRVRfTlVMTClcbjQ4NTE6XHQjZW5kaWZcbjQ4NTI6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rhc2tfZnJvbV9waWQsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTClcbjQ4NTM6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rhc2tfZnJvbV92cGlkLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwpXG40ODU0Olx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90aHJvdylcbjQ4NTU6XHQjaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcbjQ4NTY6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NlbmRfc2lnbmFsX3Rhc2spXG40ODU3Olx0I2VuZGlmXG40ODU4Olx0I2lmZGVmIENPTkZJR19LRVlTXG40ODU5Olx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9sb29rdXBfdXNlcl9rZXksIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTCB8IEtGX1NMRUVQQUJMRSlcbjQ4NjA6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2xvb2t1cF9zeXN0ZW1fa2V5LCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwpXG40ODYxOlx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZXlfcHV0LCBLRl9SRUxFQVNFKVxuNDg2MjpcdCNpZmRlZiBDT05GSUdfU1lTVEVNX0RBVEFfVkVSSUZJQ0FUSU9OXG40ODYzOlx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl92ZXJpZnlfcGtjczdfc2lnbmF0dXJlLCBLRl9TTEVFUEFCTEUpXG40ODY0Olx0I2VuZGlmXG40ODY1Olx0I2VuZGlmXG40ODY2Olx0I2lmZGVmIENPTkZJR19TMzkwXG40ODY3Olx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfbG93Y29yZSlcbjQ4Njg6XHQjZW5kaWZcbjQ4Njk6XHRCVEZfS0ZVTkNTX0VORChnZW5lcmljX2J0Zl9pZHMpXG40ODcwOlx0XG40ODcxOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGdlbmVyaWNfa2Z1bmNfc2V0ID0ge1xuNDg3MjpcdFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG40ODczOlx0XHQuc2V0ICAgPSBcdTAwMjZnZW5lcmljX2J0Zl9pZHMsXG40ODc0Olx0fTtcbjQ4NzU6XHRcbjQ4NzY6XHRCVEZfSURfTElTVChnZW5lcmljX2R0b3JfaWRzKVxuNDg3NzpcdEJURl9JRChzdHJ1Y3QsIHRhc2tfc3RydWN0KVxuNDg3ODpcdEJURl9JRChmdW5jLCBicGZfdGFza19yZWxlYXNlX2R0b3IpXG40ODc5Olx0I2lmZGVmIENPTkZJR19DR1JPVVBTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTMwCgkJCQkJCQlvdXRwdXQ6IDE0NQoJCQkJCQkJdGhvdWdodHM6IDYwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBgYnBmX3NlbmRfc2lnbmFsX3Rhc2tgIGFuZCBSZWxldmFudCBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYGJwZl9zZW5kX3NpZ25hbF90YXNrYCBpcyBhIG5vbi1zdGF0aWMga2VybmVsIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBpdCBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHNpZ25hbCBkZWxpdmVyeS4gSSBzZWUgdGhhdCBgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbmAgaXMgc3RhdGljLCB3aGljaCBpcyBnb29kIHRvIGtub3csIGFuZCBgYnBmX3NlbmRfc2lnbmFsYCBhbmQgYGJwZl9zZW5kX3NpZ25hbF90aHJlYWRgIGJvdGggY2FsbCBgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbmAuIEhvd2V2ZXIsIGltcG9ydGFudGx5LCB0aGVzZSBsYXR0ZXIgdHdvIHBhc3MgYE5VTExgIGFzIHRoZSBgdGFza2AgYXJndW1lbnQsIHdoaWNoIHJlc29sdmVzIHRvIHRoZSBjdXJyZW50IHRhc2suCgpOb3csIGBicGZfc2VuZF9zaWduYWxfdGFza2AgaXMgdGhlIGNyaXRpY2FsIGtmdW5jIGhlcmUgYmVjYXVzZSBpdCBhbGxvd3MgZGlyZWN0IHNpZ25hbCBkZWxpdmVyeSB0byAqYW55KiBgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrYCwgbm90IGp1c3QgdGhlIGN1cnJlbnQgb25lLiBUaGlzIGlzIGtleSwgZXNwZWNpYWxseSBiZWNhdXNlIGl0IHJlbGF0ZXMgZGlyZWN0bHkgdG8gdGhhdCBgbm1pX3VhY2Nlc3Nfb2theSgpYCBjaGVjayB0aGF04oCZcyBhdCB0aGUgaGVhcnQgb2YgdGhpcyBwcm9ibGVtIHdoZW4gYHRhc2sgIT0gY3VycmVudGAuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGVudGlyZSByZWFzb24gdGhlIGZpeCBmb3IgdGhhdCBzcGVjaWZpYyBzaWduYWwgZGVsaXZlcnkgaXNzdWUgaXMgdmFsdWFibGUuCgpOZXh0LCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbnMuIGBCUEZfRVZFTlRTYCwgYEJQRl9TWVNDQUxMYCwgYERFQlVHX0lORk9fQlRGYCwgYFBFUkZfRVZFTlRTYCwgYW5kIGBLUFJPQkVfRVZFTlRTYCBhcmUgYWxsIHJlbGV2YW50LiBMb29raW5nIGF0IGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AsIGl0JiMzOTtzIGNsZWFyIHRoYXQgZW5hYmxpbmcgYEJQRl9TWVNDQUxMYCwgYFBFUkZfRVZFTlRTYCwgYW5kIGBLUFJPQkVfRVZFTlRTYCAob3IgYEJQRl9FVkVOVFNgKSBpcyByZXF1aXJlZC4gVGhpcyBpcyBlc3NlbnRpYWwgZm9yIHRoZSBmdW5jdGlvbmFsaXR5IG9mIEJQRi1iYXNlZCBzaWduYWwgZGVsaXZlcnkuCgpTbywgbGV0JiMzOTtzIHN1bW1hcml6ZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zOiBgQlBGX1NZU0NBTExgLCBgQlBGX0VWRU5UU2AsIGFuZCBgREVCVUdfSU5GT19CVEZgLgoKVGhlcmVmb3JlLCB0aGUgdmVyZGljdCBpcyBgV29ydGhGdXp6aW5nOiB0cnVlYCwgYmVjYXVzZSBvZiB0aGUgZm9jdXMgb24gYGJwZl9zZW5kX3NpZ25hbF90YXNrYCwgYW5kIGFsbCB0aGF0IG1ha2VzIGl0IGludGVyZXN0aW5nIHRvIGZ1enogYW5kIGJlY2F1c2UgdGhlIEJQRiBjb25maWd1cmF0aW9ucyBhcmUgYXBwcm9wcmlhdGUgZm9yIHRoaXMgdHlwZSBvZiB0ZXN0LiBJIGFtIHJlYWR5IHRvIGNhbGwgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfRVZFTlRTJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NlbmRfc2lnbmFsX3Rhc2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbigpIHRvIG9ubHkgZW5mb3JjZSBubWlfdWFjY2Vzc19va2F5KCkgd2hlbiB0aGUgdGFyZ2V0IHRhc2sgaXMgY3VycmVudC4gVGhpcyBlbmFibGVzIEJQRiBwcm9ncmFtcyAoc3VjaCBhcyB0aG9zZSBydW5uaW5nIGluIGt3b3JrZXIvdHJhY2Vwb2ludCBjb250ZXh0KSB0byBzdWNjZXNzZnVsbHkgaW52b2tlIHRoZSBicGZfc2VuZF9zaWduYWxfdGFzayBrZnVuYyBvbiBub24tY3VycmVudCB0YXNrcy4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIGtlcm5lbCBleGVjdXRpb24gbG9naWMgZm9yIEJQRiBzaWduYWwgZGVsaXZlcnkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc2VuZF9zaWduYWxfdGFzayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBicGZfc2VuZF9zaWduYWxfY29tbW9uKCkgdG8gb25seSBlbmZvcmNlIG5taV91YWNjZXNzX29rYXkoKSB3aGVuIHRoZSB0YXJnZXQgdGFzayBpcyBjdXJyZW50LiBUaGlzIGVuYWJsZXMgQlBGIHByb2dyYW1zIChzdWNoIGFzIHRob3NlIHJ1bm5pbmcgaW4ga3dvcmtlci90cmFjZXBvaW50IGNvbnRleHQpIHRvIHN1Y2Nlc3NmdWxseSBpbnZva2UgdGhlIGJwZl9zZW5kX3NpZ25hbF90YXNrIGtmdW5jIG9uIG5vbi1jdXJyZW50IHRhc2tzLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMga2VybmVsIGV4ZWN1dGlvbiBsb2dpYyBmb3IgQlBGIHNpZ25hbCBkZWxpdmVyeS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGEgY2hlY2sgaW4gYGJwZl9zZW5kX3NpZ25hbF9jb21tb24oKWAgc28gdGhhdCBgbm1pX3VhY2Nlc3Nfb2theSgpYCBpcyBvbmx5IGV2YWx1YXRlZCB3aGVuIGB0YXNrID09IGN1cnJlbnRgLCBhbGxvd2luZyBCUEYgcHJvZ3JhbXMgcnVubmluZyBpbiBrdGhyZWFkL2t3b3JrZXIgY29udGV4dCB0byBzZW5kIHNpZ25hbHMgdG8gb3RoZXIgdGFyZ2V0IHRhc2tzIHZpYSBgYnBmX3NlbmRfc2lnbmFsX3Rhc2soKWAuIEl0IGFsc28gYWRkcyBhIEJQRiBzZWxmdGVzdC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgbGVuZ3RocywgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGNvcHktdG8tdXNlciBvcGVyYXRpb25zLiBBbnkgcmVsYXRlZCB0YXNrIGxpZmV0aW1lIG9yIHJlZmVyZW5jZSBjb3VudGluZyBjb25jZXJucyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCB0cmFja2luZy4gQXMgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTZkNjRmMjNkM2JmOThhNDAxZjk0NThmNmE4ZDhjZWMyNWNhMmRhNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTA6Mzk6MTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMKaW5kZXggMjkyNjA5NTFhYTg3MS4uZjdhNDFmMjIyNTk5OSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYwpAQCAtODcxLDcgJiM0Mzs4NzEsMTAgQEAgc3RhdGljIGludCBicGZfc2VuZF9zaWduYWxfY29tbW9uKHUzMiBzaWcsIGVudW0gcGlkX3R5cGUgdHlwZSwgc3RydWN0IHRhc2tfc3RydWMKIAkgKi8KIAlpZiAodW5saWtlbHkodGFzay0mZ3Q7ZmxhZ3MgJmFtcDsgKFBGX0tUSFJFQUQgfCBQRl9FWElUSU5HKSkpCiAJCXJldHVybiAtRVBFUk07Ci0JaWYgKHVubGlrZWx5KCFubWlfdWFjY2Vzc19va2F5KCkpKQomIzQzOwkvKiBTaW5jZSBubWlfdWFjY2Vzc19va2F5KCkgaXMgb25seSBmb3IgdGhlIGN1cnJlbnQKJiM0MzsJICogdGFzaywgY2hlY2sgaWYgdGFzayBpcyBjdXJyZW50LgomIzQzOwkgKi8KJiM0MzsJaWYgKHRhc2sgPT0gY3VycmVudCAmYW1wOyZhbXA7IHVubGlrZWx5KCFubWlfdWFjY2Vzc19va2F5KCkpKQogCQlyZXR1cm4gLUVQRVJNOwogCS8qIFRhc2sgc2hvdWxkIG5vdCBiZSBwaWQ9MSB0byBhdm9pZCBrZXJuZWwgcGFuaWMuICovCiAJaWYgKHVubGlrZWx5KGlzX2dsb2JhbF9pbml0KHRhc2spKSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlbmRfc2lnbmFsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZW5kX3NpZ25hbC5jCmluZGV4IDdhYzRkNWE0ODhhYTUuLmY5ZGQyM2RiMWVmOTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlbmRfc2lnbmFsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VuZF9zaWduYWwuYwpAQCAtMjYxLDYgJiM0MzsyNjEsMTA4IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2VuZF9zaWduYWxfbm1pKGJvb2wgc2lnbmFsX3RocmVhZCwgYm9vbCByZW1vdGUpCiAJdGVzdF9zZW5kX3NpZ25hbF9jb21tb24oJmFtcDthdHRyLCBzaWduYWxfdGhyZWFkLCByZW1vdGUpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zZW5kX3NpZ25hbF9rd29ya2VyKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGVzdF9zZW5kX3NpZ25hbF9rZXJuICpza2VsOwomIzQzOwlpbnQgcGlwZV9jMnBbMl0sIHBpcGVfcDJjWzJdOwomIzQzOwlzdHJ1Y3Qgc2lnYWN0aW9uIHNhID0ge307CiYjNDM7CWNoYXIgYnVmWzI1Nl07CiYjNDM7CWludCBlcnIgPSAtMTsKJiM0MzsJcGlkX3QgcGlkOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhwaXBlKHBpcGVfYzJwKSwgJiMzNDtwaXBlX2MycCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0socGlwZShwaXBlX3AyYyksICYjMzQ7cGlwZV9wMmMmIzM0OykpIHsKJiM0MzsJCWNsb3NlKHBpcGVfYzJwWzBdKTsKJiM0MzsJCWNsb3NlKHBpcGVfYzJwWzFdKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlwaWQgPSBmb3JrKCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKHBpZCwgMCwgJiMzNDtmb3JrJiMzNDspKSB7CiYjNDM7CQljbG9zZShwaXBlX2MycFswXSk7CiYjNDM7CQljbG9zZShwaXBlX2MycFsxXSk7CiYjNDM7CQljbG9zZShwaXBlX3AyY1swXSk7CiYjNDM7CQljbG9zZShwaXBlX3AyY1sxXSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHBpZCA9PSAwKSB7CiYjNDM7CQkvKiBpbnN0YWxsIHNpZ25hbCBoYW5kbGVyIGFuZCBub3RpZnkgcGFyZW50ICovCiYjNDM7CQlzYS5zYV9zaWdhY3Rpb24gPSBzaWd1c3IxX3NpZ2luZm9faGFuZGxlcjsKJiM0MzsJCXNhLnNhX2ZsYWdzID0gU0FfUkVTVEFSVCB8IFNBX1NJR0lORk87CiYjNDM7CQlBU1NFUlRfTkVRKHNpZ2FjdGlvbihTSUdVU1IxLCAmYW1wO3NhLCBOVUxMKSwgLTEsICYjMzQ7c2lnYWN0aW9uJiMzNDspOwomIzQzOwomIzQzOwkJY2xvc2UocGlwZV9jMnBbMF0pOyAvKiBjbG9zZSByZWFkICovCiYjNDM7CQljbG9zZShwaXBlX3AyY1sxXSk7IC8qIGNsb3NlIHdyaXRlICovCiYjNDM7CiYjNDM7CQkvKiBub3RpZnkgcGFyZW50IHNpZ25hbCBoYW5kbGVyIGlzIGluc3RhbGxlZCAqLwomIzQzOwkJQVNTRVJUX0VRKHdyaXRlKHBpcGVfYzJwWzFdLCBidWYsIDEpLCAxLCAmIzM0O3BpcGVfd3JpdGUmIzM0Oyk7CiYjNDM7CiYjNDM7CQkvKiBtYWtlIHN1cmUgcGFyZW50IGVuYWJsZWQgYnBmIHByb2dyYW0gdG8gc2VuZF9zaWduYWwgKi8KJiM0MzsJCUFTU0VSVF9FUShyZWFkKHBpcGVfcDJjWzBdLCBidWYsIDEpLCAxLCAmIzM0O3BpcGVfcmVhZCYjMzQ7KTsKJiM0MzsKJiM0MzsJCS8qIHRoZSBzaWduYWwgaXMgc2VudCBmcm9tIHdvcmtxdWV1ZSBjb250ZXh0LCBzbyBub3RoaW5nIGhhcwomIzQzOwkJICogdG8gYmUgdHJpZ2dlcmVkIGZyb20gaGVyZQomIzQzOwkJICovCiYjNDM7CQl3aGlsZSAoIXNpZ3VzcjFfcmVjZWl2ZWQpCiYjNDM7CQkJc2xlZXAoMSk7CiYjNDM7CiYjNDM7CQlidWZbMF0gPSBzaWd1c3IxX3JlY2VpdmVkOwomIzQzOwomIzQzOwkJQVNTRVJUX0VRKHNpZ3VzcjFfcmVjZWl2ZWQsIDgsICYjMzQ7c2lndXNyMV9yZWNlaXZlZCYjMzQ7KTsKJiM0MzsJCUFTU0VSVF9FUSh3cml0ZShwaXBlX2MycFsxXSwgYnVmLCAxKSwgMSwgJiMzNDtwaXBlX3dyaXRlJiMzNDspOwomIzQzOwomIzQzOwkJY2xvc2UocGlwZV9jMnBbMV0pOwomIzQzOwkJY2xvc2UocGlwZV9wMmNbMF0pOwomIzQzOwkJZXhpdCgwKTsKJiM0MzsJfQomIzQzOwomIzQzOwljbG9zZShwaXBlX2MycFsxXSk7IC8qIGNsb3NlIHdyaXRlICovCiYjNDM7CWNsb3NlKHBpcGVfcDJjWzBdKTsgLyogY2xvc2UgcmVhZCAqLwomIzQzOwomIzQzOwlza2VsID0gdGVzdF9zZW5kX3NpZ25hbF9rZXJuX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3NrZWxfb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCWdvdG8gc2tlbF9vcGVuX2xvYWRfZmFpbHVyZTsKJiM0MzsKJiM0MzsJLyogd2FpdCB1bnRpbCBjaGlsZCBzaWduYWwgaGFuZGxlciBpbnN0YWxsZWQgKi8KJiM0MzsJQVNTRVJUX0VRKHJlYWQocGlwZV9jMnBbMF0sIGJ1ZiwgMSksIDEsICYjMzQ7cGlwZV9yZWFkJiMzNDspOwomIzQzOwomIzQzOwkvKiBwaWQgPT0gMCBrZWVwcyB0aGUgb3RoZXIgcHJvZ3JhbXMgb2YgdGhpcyBza2VsZXRvbiBpbmFjdGl2ZSAqLwomIzQzOwlza2VsLSZndDtic3MtJmd0O3BpZCA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7c2lnID0gU0lHVVNSMTsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDt0YXJnZXRfcGlkID0gcGlkOwomIzQzOwomIzQzOwllcnIgPSB0ZXN0X3NlbmRfc2lnbmFsX2tlcm5fX2F0dGFjaChza2VsKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3NrZWxfYXR0YWNoJiMzNDspKSB7CiYjNDM7CQllcnIgPSAtMTsKJiM0MzsJCWdvdG8gZGVzdHJveV9za2VsOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIG5vdGlmeSBjaGlsZCB0aGF0IGJwZiBwcm9ncmFtIGNhbiBzZW5kX3NpZ25hbCBub3cgKi8KJiM0MzsJQVNTRVJUX0VRKHdyaXRlKHBpcGVfcDJjWzFdLCBidWYsIDEpLCAxLCAmIzM0O3BpcGVfd3JpdGUmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIHdhaXQgZm9yIHJlc3VsdCwgd29ya3F1ZXVlcyBydW4gb24gdGhlaXIgb3duICovCiYjNDM7CWVyciA9IHJlYWRfd2l0aF90aW1lb3V0KHBpcGVfYzJwWzBdLCBidWYsIDEsIDEwICogMTAwMCAqIDEwMDApOwomIzQzOwlpZiAoIUFTU0VSVF9HVChlcnIsIDAsICYjMzQ7cmVhZGluZyBwaXBlJiMzNDspKQomIzQzOwkJZ290byBkZXN0cm95X3NrZWw7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShidWZbMF0sIDgsICYjMzQ7aW5jb3JyZWN0IHJlc3VsdCYjMzQ7KTsKJiM0MzsKJiM0MztkZXN0cm95X3NrZWw6CiYjNDM7CXRlc3Rfc2VuZF9zaWduYWxfa2Vybl9fZGVzdHJveShza2VsKTsKJiM0Mztza2VsX29wZW5fbG9hZF9mYWlsdXJlOgomIzQzOwljbG9zZShwaXBlX2MycFswXSk7CiYjNDM7CWNsb3NlKHBpcGVfcDJjWzFdKTsKJiM0MzsJLyoKJiM0MzsJICogQ2hpbGQgaXMgZWl0aGVyIGFib3V0IHRvIGV4aXQgY2xlYW5seSBvciBzdHVjayBpbiBjYXNlIG9mIGVycm9ycy4KJiM0MzsJICogTnVkZ2UgaXQgdG8gZXhpdC4KJiM0MzsJICovCiYjNDM7CWtpbGwocGlkLCBTSUdLSUxMKTsKJiM0MzsJd2FpdChOVUxMKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHRlc3Rfc2VuZF9zaWduYWwodm9pZCkKIHsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3NlbmRfc2lnbmFsX3RyYWNlcG9pbnQmIzM0OykpCkBAIC0yODksNCAmIzQzOzM5MSw2IEBAIHZvaWQgdGVzdF9zZW5kX3NpZ25hbCh2b2lkKQogCQl0ZXN0X3NlbmRfc2lnbmFsX3BlcmYodHJ1ZSwgdHJ1ZSk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzZW5kX3NpZ25hbF9ubWlfdGhyZWFkX3JlbW90ZSYjMzQ7KSkKIAkJdGVzdF9zZW5kX3NpZ25hbF9ubWkodHJ1ZSwgdHJ1ZSk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7c2VuZF9zaWduYWxfa3dvcmtlciYjMzQ7KSkKJiM0MzsJCXRlc3Rfc2VuZF9zaWduYWxfa3dvcmtlcigpOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jCmluZGV4IDE3NmEzNTVlMzA2MjQuLmQxYzAwMGMzMDg4NTcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmMKQEAgLTYwLDYgJiM0Mzs2MCwzMiBAQCBpbnQgc2VuZF9zaWduYWxfdHBfc2NoZWQodm9pZCAqY3R4KQogCXJldHVybiBicGZfc2VuZF9zaWduYWxfdGVzdChjdHgpOwogfQogCiYjNDM7LyogU2VuZCBhIHNpZ25hbCB0byBhIHRhc2sgb3RoZXIgdGhhbiBjdXJyZW50LCBmcm9tIGEgY29udGV4dCB3aGVyZSBjdXJyZW50CiYjNDM7ICogaXMgYSBrZXJuZWwgdGhyZWFkLiBObyBmaWx0ZXJpbmcgb24gY3VycmVudCBpcyBwb3NzaWJsZSBoZXJlLCBzbyB0aGlzIGlzCiYjNDM7ICogZHJpdmVuIGVudGlyZWx5IGJ5IHRhcmdldF9waWQuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7dHBfYnRmL3dvcmtxdWV1ZV9leGVjdXRlX3N0YXJ0JiMzNDspCiYjNDM7aW50IHNlbmRfc2lnbmFsX2t3b3JrZXIodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXRfdGFzazsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHN0YXR1cyAhPSAwIHx8IHRhcmdldF9waWQgPT0gMCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl0YXJnZXRfdGFzayA9IGJwZl90YXNrX2Zyb21fcGlkKHRhcmdldF9waWQpOwomIzQzOwlpZiAoIXRhcmdldF90YXNrKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldCA9IGJwZl9zZW5kX3NpZ25hbF90YXNrKHRhcmdldF90YXNrLCBzaWcsIFBJRFRZUEVfVEdJRCwgOCk7CiYjNDM7CWJwZl90YXNrX3JlbGVhc2UodGFyZ2V0X3Rhc2spOwomIzQzOwomIzQzOwlpZiAocmV0ID09IDApCiYjNDM7CQlzdGF0dXMgPSAxOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDtwZXJmX2V2ZW50JiMzNDspCiBpbnQgc2VuZF9zaWduYWxfcGVyZih2b2lkICpjdHgpCiB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTAzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgTmVlZHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzOiBzaG91bGQgd2UgZXZlbiBib3RoZXIgd2l0aCBLTVNBTiBmdXp6aW5nIGhlcmUsIG9yIGFyZSB0aGUgc3RhbmRhcmQgS0FTQU4gYW5kIHNhbml0aXplcnMgZW5vdWdoPyBUaGlzIHBhdGNoIHNlZW1zIHRhcmdldGVkLCBzbyBsZXQmIzM5O3Mgc2VlLgoKRmlyc3QsIEkgc2VlIGEgY2hhbmdlIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbmAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgYWRkZWQgYSBjaGVjazogcmF0aGVyIHRoYW4ganVzdCBjYWxsaW5nIGBubWlfdWFjY2Vzc19va2F5KClgLCB0aGV5JiMzOTtyZSBub3cgZXhwbGljaXRseSBjaGVja2luZyBpZiB0aGUgdGFyZ2V0IGB0YXNrYCBpcyB0aGUgYGN1cnJlbnRgIHRhc2sgYmVmb3JlIGNhbGxpbmcgaXQuIFRoYXQmIzM5O3MgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBjaGFuZ2UuIFRoZSBvcmlnaW5hbCBjaGVjaywgYGlmICh1bmxpa2VseSghbm1pX3VhY2Nlc3Nfb2theSgpKSlgLCBub3cgaGFzIGFuIGV4dHJhIGNoZWNrIHRvIHByZXZlbnQgY2FsbGluZyB0aGF0IGZ1bmN0aW9uIG9uIGFub3RoZXIgdGFzay4KClRoZSBjb21tZW50IG1lbnRpb25zIHRoYXQgYG5taV91YWNjZXNzX29rYXkoKWAgb25seSBhcHBsaWVzIHRvIHRoZSAqY3VycmVudCogdGFzay4gTWFrZXMgc2Vuc2UsIGFuZCB0aGUgYWRkZWQgY29uZGl0aW9uIG1ha2VzIHRoYXQgZXhwbGljaXQuICBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGlzc3VlIHdoZXJlIHRoZSBmdW5jdGlvbiB3YXMgYmVpbmcgdXNlZCBpbmNvcnJlY3RseSwgYW5kIHRoZSBwYXRjaCBpcyBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBvciBhIHNpbWlsYXIgdHlwZSBvZiBidWcuCgpTZWNvbmQsIHRoZXJlIGFyZSBzZWxmdGVzdHMsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZW5kX3NpZ25hbC5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uY2AuIFRoZXkmIzM5O3JlIGFkZGluZyBhIHRlc3QgY2FzZSwgYHRlc3Rfc2VuZF9zaWduYWxfa3dvcmtlcmAsIHRvIHRlc3QgYGJwZl9zZW5kX3NpZ25hbF90YXNrYCBmcm9tIHdpdGhpbiBhIGt3b3JrZXIgY29udGV4dC4gIFRoYXQmIzM5O3MgYSBwcmV0dHkgY2xlYXIgc2lnbmFsIHRoYXQgdGhlIGNvZGUgd2FzICpwcmV2aW91c2x5KiBwb3RlbnRpYWxseSBub3QgaGFuZGxpbmcga3dvcmtlciBjb250ZXh0cyBjb3JyZWN0bHksIGFuZCBub3cgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIHZhbGlkYXRlIHRoZSBmaXguCgpTbywgaW4gc3VtbWFyeSwgd2UmIzM5O3JlIGxpa2VseSBkZWFsaW5nIHdpdGggYSBmaXggZm9yIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGEgc2ltaWxhciBtZW1vcnkgc2FmZXR5IGlzc3VlIHRoYXQgY291bGQgb2NjdXIgd2l0aGluIGEga3dvcmtlciBjb250ZXh0LiBUaGUgcGF0Y2ggaXMgcHJvYmFibHkgdHJ5aW5nIHRvIHByZXZlbnQgYSBkb3VibGUtZmV0Y2gsIG9yIGEgc2ltaWxhciBidWcgcmVsYXRpbmcgdG8gYSByYWNlIGNvbmRpdGlvbi4gU2luY2UgdGhpcyBpcyBhbiBleHBsaWNpdCBjaGFuZ2UgdG8gaGFuZGxlIGEgc3BlY2lmaWMgY29udGV4dCwgdGhpcyBzZWVtcyBsaWtlIHRoZSBraW5kIG9mIGlzc3VlIHRoYXQgS0FTQU4gYW5kIHRoZSBvdGhlciBzdGFuZGFyZCBzYW5pdGl6ZXJzIHNob3VsZCBjYXRjaC4gS01TQU4gKm1pZ2h0KiBiZSBoZWxwZnVsIGlmIGl0JiMzOTtzIGEgc3VidGxlIHJhY2UsIGJ1dCBJJiMzOTttIHRoaW5raW5nIGEgc3RhbmRhcmQgc2FuaXRpemVyIHBhc3MgaXMgc3VmZmljaWVudCwgZ2l2ZW4gdGhlIHRhcmdldGVkIG5hdHVyZSBvZiB0aGUgZml4IGFuZCB0aGUgZXhpc3RlbmNlIG9mIHRoZSBuZXcgc2VsZnRlc3QuIEkmIzM5O2QgbGVhbiB0b3dhcmQgZm9jdXNpbmcgb3VyIGluaXRpYWwgYW5hbHlzaXMgb24gdmVyaWZ5aW5nIHRoZSBwYXRjaCYjMzk7cyBjb3JyZWN0bmVzcyBhbmQgZW5zdXJpbmcgdGhlIHNlbGZ0ZXN0IGNvdmVycyB0aGUgaW50ZW5kZWQgc2NlbmFyaW8gdGhvcm91Z2hseS4gV2UgcHJvYmFibHkgZG9uJiMzOTt0IG5lZWQgdG8gcHJpb3JpdGl6ZSBLTVNBTiBmb3IgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3NlbmRfc2lnbmFsX2NvbW1vbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9ODM1PXN0YXRpYyB2b2lkIGRvX2JwZl9zZW5kX3NpZ25hbChzdHJ1Y3QgaXJxX3dvcmsgKmVudHJ5KVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy04NDYtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6ODQ3OnN0YXRpYyBpbnQgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbih1MzIgc2lnLCBlbnVtIHBpZF90eXBlIHR5cGUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTY0IHZhbHVlKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTg0OC17XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTkxMT1CUEZfQ0FMTF8xKGJwZl9zZW5kX3NpZ25hbCwgdTMyLCBzaWcpXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTEyLXtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo5MTM6XHRyZXR1cm4gYnBmX3NlbmRfc2lnbmFsX2NvbW1vbihzaWcsIFBJRFRZUEVfVEdJRCwgTlVMTCwgMCk7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTE0LX1cbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9OTIzPUJQRl9DQUxMXzEoYnBmX3NlbmRfc2lnbmFsX3RocmVhZCwgdTMyLCBzaWcpXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTI0LXtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo5MjU6XHRyZXR1cm4gYnBmX3NlbmRfc2lnbmFsX2NvbW1vbihzaWcsIFBJRFRZUEVfUElELCBOVUxMLCAwKTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy05MjYtfVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zNjE2PV9fYnBmX2tmdW5jIGludCBicGZfc2VuZF9zaWduYWxfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBzaWcsIGVudW0gcGlkX3R5cGUgdHlwZSxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzYyMS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNjIyOlx0cmV0dXJuIGJwZl9zZW5kX3NpZ25hbF9jb21tb24oc2lnLCB0eXBlLCB0YXNrLCB2YWx1ZSk7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzYyMy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MTYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbmAgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGJwZl9zZW5kX3NpZ25hbF9jb21tb25gICpyZWFsbHkqIHdvcmtzLiBJIGtub3cgdGhlIGhpZ2gtbGV2ZWwgY29uY2VwdCwgYnV0IHRvIHRydWx5IGdyYXNwIHRoZSBudWFuY2VzIG9mIHNpZ25hbCBpbmplY3Rpb24gZnJvbSBCUEYgcHJvZ3JhbXMsIEkgbmVlZCB0byBzZWUgdGhlIGZ1bGwgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgYW5kIGRpc3NlY3QgaXQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoaW5ncyBsaWtlOiBhdG9taWNpdHkgY29uY2VybnMsIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucywgaG93IGNvbnRleHQgaXMgbWFuYWdlZCwgYW5kIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgc2lnbmFsIGRlbGl2ZXJ5IGluZnJhc3RydWN0dXJlLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXkmIzM5O3JlIGRvaW5nIGFueSBvcHRpbWl6YXRpb25zIEkgY2FuIGxldmVyYWdlLCBvciBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBnb3RjaGFzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHdoZW4gZGVzaWduaW5nIG15IG93biBCUEYtYmFzZWQgc2lnbmFsIGhhbmRsaW5nLiBJ4oCZbSB0aGlua2luZyBhYm91dCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmZhY2VzIHdpdGggdGhlIHRhc2sgc3RydWN0IGFuZCBzaWduYWwgbWFzay4gVGltZSB0byByb2xsIHVwIG15IHNsZWV2ZXMgYW5kIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg0NTpcdH1cbiA4NDY6XHRcbiA4NDc6XHRzdGF0aWMgaW50IGJwZl9zZW5kX3NpZ25hbF9jb21tb24odTMyIHNpZywgZW51bSBwaWRfdHlwZSB0eXBlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHU2NCB2YWx1ZSlcbiA4NDg6XHR7XG4gODQ5Olx0XHRzdHJ1Y3Qgc2VuZF9zaWduYWxfaXJxX3dvcmsgKndvcmsgPSBOVUxMO1xuIDg1MDpcdFx0c3RydWN0IGtlcm5lbF9zaWdpbmZvIGluZm87XG4gODUxOlx0XHRzdHJ1Y3Qga2VybmVsX3NpZ2luZm8gKnNpZ2luZm87XG4gODUyOlx0XG4gODUzOlx0XHRpZiAoIXRhc2spIHtcbiA4NTQ6XHRcdFx0dGFzayA9IGN1cnJlbnQ7XG4gODU1Olx0XHRcdHNpZ2luZm8gPSBTRU5EX1NJR19QUklWO1xuIDg1NjpcdFx0fSBlbHNlIHtcbiA4NTc6XHRcdFx0Y2xlYXJfc2lnaW5mbyhcdTAwMjZpbmZvKTtcbiA4NTg6XHRcdFx0aW5mby5zaV9zaWdubyA9IHNpZztcbiA4NTk6XHRcdFx0aW5mby5zaV9lcnJubyA9IDA7XG4gODYwOlx0XHRcdGluZm8uc2lfY29kZSA9IFNJX0tFUk5FTDtcbiA4NjE6XHRcdFx0aW5mby5zaV9waWQgPSAwO1xuIDg2MjpcdFx0XHRpbmZvLnNpX3VpZCA9IDA7XG4gODYzOlx0XHRcdGluZm8uc2lfdmFsdWUuc2l2YWxfcHRyID0gKHZvaWQgX191c2VyIF9fZm9yY2UgKikodW5zaWduZWQgbG9uZyl2YWx1ZTtcbiA4NjQ6XHRcdFx0c2lnaW5mbyA9IFx1MDAyNmluZm87XG4gODY1Olx0XHR9XG4gODY2Olx0XG4gODY3Olx0XHQvKiBTaW1pbGFyIHRvIGJwZl9wcm9iZV93cml0ZV91c2VyLCB0YXNrIG5lZWRzIHRvIGJlXG4gODY4Olx0XHQgKiBpbiBhIHNvdW5kIGNvbmRpdGlvbiBhbmQga2VybmVsIG1lbW9yeSBhY2Nlc3MgYmVcbiA4Njk6XHRcdCAqIHBlcm1pdHRlZCBpbiBvcmRlciB0byBzZW5kIHNpZ25hbCB0byB0aGUgY3VycmVudFxuIDg3MDpcdFx0ICogdGFzay5cbiA4NzE6XHRcdCAqL1xuIDg3MjpcdFx0aWYgKHVubGlrZWx5KHRhc2stXHUwMDNlZmxhZ3MgXHUwMDI2IChQRl9LVEhSRUFEIHwgUEZfRVhJVElORykpKVxuIDg3MzpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuIDg3NDpcdFx0LyogU2luY2Ugbm1pX3VhY2Nlc3Nfb2theSgpIGlzIG9ubHkgZm9yIHRoZSBjdXJyZW50XG4gODc1Olx0XHQgKiB0YXNrLCBjaGVjayBpZiB0YXNrIGlzIGN1cnJlbnQuXG4gODc2Olx0XHQgKi9cbiA4Nzc6XHRcdGlmICh0YXNrID09IGN1cnJlbnQgXHUwMDI2XHUwMDI2IHVubGlrZWx5KCFubWlfdWFjY2Vzc19va2F5KCkpKVxuIDg3ODpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuIDg3OTpcdFx0LyogVGFzayBzaG91bGQgbm90IGJlIHBpZD0xIHRvIGF2b2lkIGtlcm5lbCBwYW5pYy4gKi9cbiA4ODA6XHRcdGlmICh1bmxpa2VseShpc19nbG9iYWxfaW5pdCh0YXNrKSkpXG4gODgxOlx0XHRcdHJldHVybiAtRVBFUk07XG4gODgyOlx0XG4gODgzOlx0XHRpZiAocHJlZW1wdF9jb3VudCgpICE9IDAgfHwgaXJxc19kaXNhYmxlZCgpKSB7XG4gODg0Olx0XHRcdC8qIERvIGFuIGVhcmx5IGNoZWNrIG9uIHNpZ25hbCB2YWxpZGl0eS4gT3RoZXJ3aXNlLFxuIDg4NTpcdFx0XHQgKiB0aGUgZXJyb3IgaXMgbG9zdCBpbiBkZWZlcnJlZCBpcnFfd29yay5cbiA4ODY6XHRcdFx0ICovXG4gODg3Olx0XHRcdGlmICh1bmxpa2VseSghdmFsaWRfc2lnbmFsKHNpZykpKVxuIDg4ODpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDg4OTpcdFxuIDg5MDpcdFx0XHR3b3JrID0gdGhpc19jcHVfcHRyKFx1MDAyNnNlbmRfc2lnbmFsX3dvcmspO1xuIDg5MTpcdFx0XHRpZiAoaXJxX3dvcmtfaXNfYnVzeShcdTAwMjZ3b3JrLVx1MDAzZWlycV93b3JrKSlcbiA4OTI6XHRcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDg5MzpcdFxuIDg5NDpcdFx0XHQvKiBBZGQgdGhlIGN1cnJlbnQgdGFzaywgd2hpY2ggaXMgdGhlIHRhcmdldCBvZiBzZW5kaW5nIHNpZ25hbCxcbiA4OTU6XHRcdFx0ICogdG8gdGhlIGlycV93b3JrLiBUaGUgY3VycmVudCB0YXNrIG1heSBjaGFuZ2Ugd2hlbiBxdWV1ZWRcbiA4OTY6XHRcdFx0ICogaXJxIHdvcmtzIGdldCBleGVjdXRlZC5cbiA4OTc6XHRcdFx0ICovXG4gODk4Olx0XHRcdHdvcmstXHUwMDNldGFzayA9IGdldF90YXNrX3N0cnVjdCh0YXNrKTtcbiA4OTk6XHRcdFx0d29yay1cdTAwM2VoYXNfc2lnaW5mbyA9IHNpZ2luZm8gPT0gXHUwMDI2aW5mbztcbiA5MDA6XHRcdFx0aWYgKHdvcmstXHUwMDNlaGFzX3NpZ2luZm8pXG4gOTAxOlx0XHRcdFx0Y29weV9zaWdpbmZvKFx1MDAyNndvcmstXHUwMDNlaW5mbywgXHUwMDI2aW5mbyk7XG4gOTAyOlx0XHRcdHdvcmstXHUwMDNlc2lnID0gc2lnO1xuIDkwMzpcdFx0XHR3b3JrLVx1MDAzZXR5cGUgPSB0eXBlO1xuIDkwNDpcdFx0XHRpcnFfd29ya19xdWV1ZShcdTAwMjZ3b3JrLVx1MDAzZWlycV93b3JrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc1OAoJCQkJCQkJb3V0cHV0OiAxNzQKCQkJCQkJCXRob3VnaHRzOiA1NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXBwbGljYWJpbGl0eSBBc3Nlc3NtZW50IGZvciBCUEYgU2lnbmFsIFNlbmRpbmcgRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgaW4gdGhlIGBicGZfc2VuZF9zaWduYWxfY29tbW9uYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gY2FsbGluZyBgYnBmX3NlbmRfc2lnbmFsX3Rhc2tgLCB0aGUgY29kZSB3YXMgcHJldmlvdXNseSB1c2luZyBgbm1pX3VhY2Nlc3Nfb2theSgpYCBpbmNvcnJlY3RseS4gVGhpcyBmdW5jdGlvbiwgaW50ZW5kZWQgdG8gY2hlY2sgZm9yIHBlcm1pdHRlZCB1c2VyIGFjY2VzcyBmb3IgdGhlICpjdXJyZW50KiB0YXNrLCB3YXMgZmFpbGluZyBpZiB0aGUgKmN1cnJlbnQqIHRhc2sgd2FzIGEga3dvcmtlciB0aHJlYWQsIGV2ZW4gaWYgdGhlICp0YXJnZXQqIGB0YXNrYCB3YXMgYSByZWd1bGFyIHVzZXIgcHJvY2Vzcy4gVGhpcyBpcyBiZWNhdXNlIGBubWlfdWFjY2Vzc19va2F5KClgIGNoZWNrcyB0aGUgYGN1cnJlbnRgIHRhc2smIzM5O3MgcHJvcGVydGllcy4gVGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQ6IG9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgaWYgYHRhc2sgPT0gY3VycmVudGAuCgpOb3csIHRvIHRoZSBLTVNBTiBxdWVzdGlvbjogZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuIEZpcnN0bHksIGFyZSBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIGZpZWxkcz8gTm8sIHRoZSBgaW5mb2Agc3RydWN0dXJlIGlzIGluaXRpYWxpemVkIHdpdGggYGNsZWFyX3NpZ2luZm8oJmFtcDtpbmZvKWAuIFNlY29uZGx5LCBpcyB0aGVyZSBhbnkgY29uZGl0aW9uYWwgbG9naWMgdGhhdCByZWxpZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuIFRoZSBjb25kaXRpb24gbm93IGhpbmdlcyBvbiBwb2ludGVyIGVxdWFsaXR5LCBgdGFzayA9PSBjdXJyZW50YCwgYW5kIHRoZSByZXR1cm4gb2YgYG5taV91YWNjZXNzX29rYXkoKWAsIHdoaWNoIGlzIGEgYm9vbGVhbi4gVGhpcmQsIGFyZSB0aGVyZSBuZXcgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgaW5pdGlhbGl6ZWQ/IE5vLCB0aGlzIHBhdGNoIGlzIHB1cmVseSBjb25kaXRpb25hbC4gRmluYWxseSwgYXJlIHRoZXJlIGFueSBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aCBjaGVja3MgdGhhdCBtaWdodCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgYmVpbmcgYWNjZXNzZWQ/IE5vLiBUaGUgY29kZSBtb2RpZmllcyB0aGUgY29uZGl0aW9uLCBidXQgdGhlcmUgaXMgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9uIG9yIGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLgoKSW4gZXNzZW5jZSwgdGhpcyBwYXRjaCBzaW1wbHkgcmVmaW5lcyB0aGUgY29uZGl0aW9uYWwgbG9naWMgdG8gcHJldmVudCBhbiBvdmVybHkgcmVzdHJpY3RpdmUgYWNjZXNzIGNoZWNrIGluIGEgdmVyeSBzcGVjaWZpYyBzY2VuYXJpby4gSXQgYWxsb3dzIEJQRiBwcm9ncmFtcywgZXZlbiB0aG9zZSBydW5uaW5nIGluIGt3b3JrZXIva2VybmVsIHRocmVhZCBjb250ZXh0LCB0byBjb3JyZWN0bHkgc2VuZCBzaWduYWxzIHRvIHVzZXIgdGFza3MuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBUaGlzIHBhdGNoIGlzIG1vcmUgYWJvdXQgbG9naWMgYW5kIHBlcm1pc3Npb25zIHRoYW4gbWVtb3J5IGluaXRpYWxpemF0aW9uLgoKTm93LCBsZXQmIzM5O3MgY2xlYXJseSBjb250cmFzdCB0aGlzIHdpdGggS0FTQU4uIEtNU0FOIGlzIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLCB3aGlsZSBLQVNBTiBpcyBhbGwgYWJvdXQgbWVtb3J5IHNhZmV0eSDigJMgZGV0ZWN0aW5nIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZXMsIGJ1ZmZlciBvdmVyZmxvd3MsIGV0Yy4gVGhlIGNoYW5nZSBtYWRlIGhlcmUgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcywgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbi4gQWxsIG1lbW9yeSBzYWZldHkgY29uY2VybnMsIHN1Y2ggYXMgdGhlIGB0YXNrYCBzdHJ1Y3QgcmVmZXJlbmNlIGNvdW50aW5nLCBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IHRoZSBzdGFuZGFyZCBzYW5pdGl6ZXJzIG9yIEtBU0FOLiBJdCYjMzk7cyBhIGNvbmRpdGlvbmFsIGNoYW5nZSwgcHVyZWx5LiBTbywgbm8gS01TQU4gaXMgbmVlZGVkLgoKQWxyaWdodCwgdGltZSB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBhIGNoZWNrIGluIGBicGZfc2VuZF9zaWduYWxfY29tbW9uKClgIHNvIHRoYXQgYG5taV91YWNjZXNzX29rYXkoKWAgaXMgb25seSBldmFsdWF0ZWQgd2hlbiBgdGFzayA9PSBjdXJyZW50YCwgYWxsb3dpbmcgQlBGIHByb2dyYW1zIHJ1bm5pbmcgaW4ga3RocmVhZC9rd29ya2VyIGNvbnRleHQgdG8gc2VuZCBzaWduYWxzIHRvIG90aGVyIHRhcmdldCB0YXNrcyB2aWEgYGJwZl9zZW5kX3NpZ25hbF90YXNrKClgLiBJdCBhbHNvIGFkZHMgYSBCUEYgc2VsZnRlc3QuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGxlbmd0aHMsIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBjb3B5LXRvLXVzZXIgb3BlcmF0aW9ucy4gQW55IHJlbGF0ZWQgdGFzayBsaWZldGltZSBvciByZWZlcmVuY2UgY291bnRpbmcgY29uY2VybnMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnQgdHJhY2tpbmcuIEFzIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gZGlzY2xvc3VyZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBhIGNoZWNrIGluIGBicGZfc2VuZF9zaWduYWxfY29tbW9uKClgIHNvIHRoYXQgYG5taV91YWNjZXNzX29rYXkoKWAgaXMgb25seSBldmFsdWF0ZWQgd2hlbiBgdGFzayA9PSBjdXJyZW50YCwgYWxsb3dpbmcgQlBGIHByb2dyYW1zIHJ1bm5pbmcgaW4ga3RocmVhZC9rd29ya2VyIGNvbnRleHQgdG8gc2VuZCBzaWduYWxzIHRvIG90aGVyIHRhcmdldCB0YXNrcyB2aWEgYGJwZl9zZW5kX3NpZ25hbF90YXNrKClgLiBJdCBhbHNvIGFkZHMgYSBCUEYgc2VsZnRlc3QuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGxlbmd0aHMsIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBjb3B5LXRvLXVzZXIgb3BlcmF0aW9ucy4gQW55IHJlbGF0ZWQgdGFzayBsaWZldGltZSBvciByZWZlcmVuY2UgY291bnRpbmcgY29uY2VybnMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnQgdHJhY2tpbmcuIEFzIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gZGlzY2xvc3VyZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjExLjU0MjI5MTU1NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NTk2NTQ4MTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zZW5kX3NpZ25hbF90YXNrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBhIGNoZWNrIGluIGBicGZfc2VuZF9zaWduYWxfY29tbW9uKClgIHNvIHRoYXQgYG5taV91YWNjZXNzX29rYXkoKWAgaXMgb25seSBldmFsdWF0ZWQgd2hlbiBgdGFzayA9PSBjdXJyZW50YCwgYWxsb3dpbmcgQlBGIHByb2dyYW1zIHJ1bm5pbmcgaW4ga3RocmVhZC9rd29ya2VyIGNvbnRleHQgdG8gc2VuZCBzaWduYWxzIHRvIG90aGVyIHRhcmdldCB0YXNrcyB2aWEgYGJwZl9zZW5kX3NpZ25hbF90YXNrKClgLiBJdCBhbHNvIGFkZHMgYSBCUEYgc2VsZnRlc3QuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgbGVuZ3RocywgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGNvcHktdG8tdXNlciBvcGVyYXRpb25zLiBBbnkgcmVsYXRlZCB0YXNrIGxpZmV0aW1lIG9yIHJlZmVyZW5jZSBjb3VudGluZyBjb25jZXJucyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCB0cmFja2luZy4gQXMgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBicGZfc2VuZF9zaWduYWxfY29tbW9uKCkgdG8gb25seSBlbmZvcmNlIG5taV91YWNjZXNzX29rYXkoKSB3aGVuIHRoZSB0YXJnZXQgdGFzayBpcyBjdXJyZW50LiBUaGlzIGVuYWJsZXMgQlBGIHByb2dyYW1zIChzdWNoIGFzIHRob3NlIHJ1bm5pbmcgaW4ga3dvcmtlci90cmFjZXBvaW50IGNvbnRleHQpIHRvIHN1Y2Nlc3NmdWxseSBpbnZva2UgdGhlIGJwZl9zZW5kX3NpZ25hbF90YXNrIGtmdW5jIG9uIG5vbi1jdXJyZW50IHRhc2tzLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMga2VybmVsIGV4ZWN1dGlvbiBsb2dpYyBmb3IgQlBGIHNpZ25hbCBkZWxpdmVyeS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6Mzk6MTEuNTQyMjk3MjM1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY4MzUyNDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTZkNjRmMjNkM2JmOThhNDAxZjk0NThmNmE4ZDhjZWMyNWNhMmRhNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDEwOjM5OjEwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xcbmluZGV4IDI5MjYwOTUxYWE4NzEuLmY3YTQxZjIyMjU5OTkgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXFxuKysrIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXFxuQEAgLTg3MSw3ICs4NzEsMTAgQEAgc3RhdGljIGludCBicGZfc2VuZF9zaWduYWxfY29tbW9uKHUzMiBzaWcsIGVudW0gcGlkX3R5cGUgdHlwZSwgc3RydWN0IHRhc2tfc3RydWNcXG4gXFx0ICovXFxuIFxcdGlmICh1bmxpa2VseSh0YXNrLVxcdTAwM2VmbGFncyBcXHUwMDI2IChQRl9LVEhSRUFEIHwgUEZfRVhJVElORykpKVxcbiBcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi1cXHRpZiAodW5saWtlbHkoIW5taV91YWNjZXNzX29rYXkoKSkpXFxuK1xcdC8qIFNpbmNlIG5taV91YWNjZXNzX29rYXkoKSBpcyBvbmx5IGZvciB0aGUgY3VycmVudFxcbitcXHQgKiB0YXNrLCBjaGVjayBpZiB0YXNrIGlzIGN1cnJlbnQuXFxuK1xcdCAqL1xcbitcXHRpZiAodGFzayA9PSBjdXJyZW50IFxcdTAwMjZcXHUwMDI2IHVubGlrZWx5KCFubWlfdWFjY2Vzc19va2F5KCkpKVxcbiBcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbiBcXHQvKiBUYXNrIHNob3VsZCBub3QgYmUgcGlkPTEgdG8gYXZvaWQga2VybmVsIHBhbmljLiAqL1xcbiBcXHRpZiAodW5saWtlbHkoaXNfZ2xvYmFsX2luaXQodGFzaykpKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZW5kX3NpZ25hbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VuZF9zaWduYWwuY1xcbmluZGV4IDdhYzRkNWE0ODhhYTUuLmY5ZGQyM2RiMWVmOTggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VuZF9zaWduYWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlbmRfc2lnbmFsLmNcXG5AQCAtMjYxLDYgKzI2MSwxMDggQEAgc3RhdGljIHZvaWQgdGVzdF9zZW5kX3NpZ25hbF9ubWkoYm9vbCBzaWduYWxfdGhyZWFkLCBib29sIHJlbW90ZSlcXG4gXFx0dGVzdF9zZW5kX3NpZ25hbF9jb21tb24oXFx1MDAyNmF0dHIsIHNpZ25hbF90aHJlYWQsIHJlbW90ZSk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHRlc3Rfc2VuZF9zaWduYWxfa3dvcmtlcih2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCB0ZXN0X3NlbmRfc2lnbmFsX2tlcm4gKnNrZWw7XFxuK1xcdGludCBwaXBlX2MycFsyXSwgcGlwZV9wMmNbMl07XFxuK1xcdHN0cnVjdCBzaWdhY3Rpb24gc2EgPSB7fTtcXG4rXFx0Y2hhciBidWZbMjU2XTtcXG4rXFx0aW50IGVyciA9IC0xO1xcbitcXHRwaWRfdCBwaWQ7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9PSyhwaXBlKHBpcGVfYzJwKSwgXFxcInBpcGVfYzJwXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmICghQVNTRVJUX09LKHBpcGUocGlwZV9wMmMpLCBcXFwicGlwZV9wMmNcXFwiKSkge1xcbitcXHRcXHRjbG9zZShwaXBlX2MycFswXSk7XFxuK1xcdFxcdGNsb3NlKHBpcGVfYzJwWzFdKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRwaWQgPSBmb3JrKCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKHBpZCwgMCwgXFxcImZvcmtcXFwiKSkge1xcbitcXHRcXHRjbG9zZShwaXBlX2MycFswXSk7XFxuK1xcdFxcdGNsb3NlKHBpcGVfYzJwWzFdKTtcXG4rXFx0XFx0Y2xvc2UocGlwZV9wMmNbMF0pO1xcbitcXHRcXHRjbG9zZShwaXBlX3AyY1sxXSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHBpZCA9PSAwKSB7XFxuK1xcdFxcdC8qIGluc3RhbGwgc2lnbmFsIGhhbmRsZXIgYW5kIG5vdGlmeSBwYXJlbnQgKi9cXG4rXFx0XFx0c2Euc2Ffc2lnYWN0aW9uID0gc2lndXNyMV9zaWdpbmZvX2hhbmRsZXI7XFxuK1xcdFxcdHNhLnNhX2ZsYWdzID0gU0FfUkVTVEFSVCB8IFNBX1NJR0lORk87XFxuK1xcdFxcdEFTU0VSVF9ORVEoc2lnYWN0aW9uKFNJR1VTUjEsIFxcdTAwMjZzYSwgTlVMTCksIC0xLCBcXFwic2lnYWN0aW9uXFxcIik7XFxuK1xcbitcXHRcXHRjbG9zZShwaXBlX2MycFswXSk7IC8qIGNsb3NlIHJlYWQgKi9cXG4rXFx0XFx0Y2xvc2UocGlwZV9wMmNbMV0pOyAvKiBjbG9zZSB3cml0ZSAqL1xcbitcXG4rXFx0XFx0Lyogbm90aWZ5IHBhcmVudCBzaWduYWwgaGFuZGxlciBpcyBpbnN0YWxsZWQgKi9cXG4rXFx0XFx0QVNTRVJUX0VRKHdyaXRlKHBpcGVfYzJwWzFdLCBidWYsIDEpLCAxLCBcXFwicGlwZV93cml0ZVxcXCIpO1xcbitcXG4rXFx0XFx0LyogbWFrZSBzdXJlIHBhcmVudCBlbmFibGVkIGJwZiBwcm9ncmFtIHRvIHNlbmRfc2lnbmFsICovXFxuK1xcdFxcdEFTU0VSVF9FUShyZWFkKHBpcGVfcDJjWzBdLCBidWYsIDEpLCAxLCBcXFwicGlwZV9yZWFkXFxcIik7XFxuK1xcbitcXHRcXHQvKiB0aGUgc2lnbmFsIGlzIHNlbnQgZnJvbSB3b3JrcXVldWUgY29udGV4dCwgc28gbm90aGluZyBoYXNcXG4rXFx0XFx0ICogdG8gYmUgdHJpZ2dlcmVkIGZyb20gaGVyZVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0d2hpbGUgKCFzaWd1c3IxX3JlY2VpdmVkKVxcbitcXHRcXHRcXHRzbGVlcCgxKTtcXG4rXFxuK1xcdFxcdGJ1ZlswXSA9IHNpZ3VzcjFfcmVjZWl2ZWQ7XFxuK1xcbitcXHRcXHRBU1NFUlRfRVEoc2lndXNyMV9yZWNlaXZlZCwgOCwgXFxcInNpZ3VzcjFfcmVjZWl2ZWRcXFwiKTtcXG4rXFx0XFx0QVNTRVJUX0VRKHdyaXRlKHBpcGVfYzJwWzFdLCBidWYsIDEpLCAxLCBcXFwicGlwZV93cml0ZVxcXCIpO1xcbitcXG4rXFx0XFx0Y2xvc2UocGlwZV9jMnBbMV0pO1xcbitcXHRcXHRjbG9zZShwaXBlX3AyY1swXSk7XFxuK1xcdFxcdGV4aXQoMCk7XFxuK1xcdH1cXG4rXFxuK1xcdGNsb3NlKHBpcGVfYzJwWzFdKTsgLyogY2xvc2Ugd3JpdGUgKi9cXG4rXFx0Y2xvc2UocGlwZV9wMmNbMF0pOyAvKiBjbG9zZSByZWFkICovXFxuK1xcbitcXHRza2VsID0gdGVzdF9zZW5kX3NpZ25hbF9rZXJuX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic2tlbF9vcGVuX2FuZF9sb2FkXFxcIikpXFxuK1xcdFxcdGdvdG8gc2tlbF9vcGVuX2xvYWRfZmFpbHVyZTtcXG4rXFxuK1xcdC8qIHdhaXQgdW50aWwgY2hpbGQgc2lnbmFsIGhhbmRsZXIgaW5zdGFsbGVkICovXFxuK1xcdEFTU0VSVF9FUShyZWFkKHBpcGVfYzJwWzBdLCBidWYsIDEpLCAxLCBcXFwicGlwZV9yZWFkXFxcIik7XFxuK1xcbitcXHQvKiBwaWQgPT0gMCBrZWVwcyB0aGUgb3RoZXIgcHJvZ3JhbXMgb2YgdGhpcyBza2VsZXRvbiBpbmFjdGl2ZSAqL1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXBpZCA9IDA7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlc2lnID0gU0lHVVNSMTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2V0YXJnZXRfcGlkID0gcGlkO1xcbitcXG4rXFx0ZXJyID0gdGVzdF9zZW5kX3NpZ25hbF9rZXJuX19hdHRhY2goc2tlbCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNrZWxfYXR0YWNoXFxcIikpIHtcXG4rXFx0XFx0ZXJyID0gLTE7XFxuK1xcdFxcdGdvdG8gZGVzdHJveV9za2VsO1xcbitcXHR9XFxuK1xcbitcXHQvKiBub3RpZnkgY2hpbGQgdGhhdCBicGYgcHJvZ3JhbSBjYW4gc2VuZF9zaWduYWwgbm93ICovXFxuK1xcdEFTU0VSVF9FUSh3cml0ZShwaXBlX3AyY1sxXSwgYnVmLCAxKSwgMSwgXFxcInBpcGVfd3JpdGVcXFwiKTtcXG4rXFxuK1xcdC8qIHdhaXQgZm9yIHJlc3VsdCwgd29ya3F1ZXVlcyBydW4gb24gdGhlaXIgb3duICovXFxuK1xcdGVyciA9IHJlYWRfd2l0aF90aW1lb3V0KHBpcGVfYzJwWzBdLCBidWYsIDEsIDEwICogMTAwMCAqIDEwMDApO1xcbitcXHRpZiAoIUFTU0VSVF9HVChlcnIsIDAsIFxcXCJyZWFkaW5nIHBpcGVcXFwiKSlcXG4rXFx0XFx0Z290byBkZXN0cm95X3NrZWw7XFxuK1xcbitcXHRBU1NFUlRfRVEoYnVmWzBdLCA4LCBcXFwiaW5jb3JyZWN0IHJlc3VsdFxcXCIpO1xcbitcXG4rZGVzdHJveV9za2VsOlxcbitcXHR0ZXN0X3NlbmRfc2lnbmFsX2tlcm5fX2Rlc3Ryb3koc2tlbCk7XFxuK3NrZWxfb3Blbl9sb2FkX2ZhaWx1cmU6XFxuK1xcdGNsb3NlKHBpcGVfYzJwWzBdKTtcXG4rXFx0Y2xvc2UocGlwZV9wMmNbMV0pO1xcbitcXHQvKlxcbitcXHQgKiBDaGlsZCBpcyBlaXRoZXIgYWJvdXQgdG8gZXhpdCBjbGVhbmx5IG9yIHN0dWNrIGluIGNhc2Ugb2YgZXJyb3JzLlxcbitcXHQgKiBOdWRnZSBpdCB0byBleGl0LlxcbitcXHQgKi9cXG4rXFx0a2lsbChwaWQsIFNJR0tJTEwpO1xcbitcXHR3YWl0KE5VTEwpO1xcbit9XFxuK1xcbiB2b2lkIHRlc3Rfc2VuZF9zaWduYWwodm9pZClcXG4ge1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic2VuZF9zaWduYWxfdHJhY2Vwb2ludFxcXCIpKVxcbkBAIC0yODksNCArMzkxLDYgQEAgdm9pZCB0ZXN0X3NlbmRfc2lnbmFsKHZvaWQpXFxuIFxcdFxcdHRlc3Rfc2VuZF9zaWduYWxfcGVyZih0cnVlLCB0cnVlKTtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInNlbmRfc2lnbmFsX25taV90aHJlYWRfcmVtb3RlXFxcIikpXFxuIFxcdFxcdHRlc3Rfc2VuZF9zaWduYWxfbm1pKHRydWUsIHRydWUpO1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic2VuZF9zaWduYWxfa3dvcmtlclxcXCIpKVxcbitcXHRcXHR0ZXN0X3NlbmRfc2lnbmFsX2t3b3JrZXIoKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmNcXG5pbmRleCAxNzZhMzU1ZTMwNjI0Li5kMWMwMDBjMzA4ODU3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uY1xcbkBAIC02MCw2ICs2MCwzMiBAQCBpbnQgc2VuZF9zaWduYWxfdHBfc2NoZWQodm9pZCAqY3R4KVxcbiBcXHRyZXR1cm4gYnBmX3NlbmRfc2lnbmFsX3Rlc3QoY3R4KTtcXG4gfVxcbiBcXG4rLyogU2VuZCBhIHNpZ25hbCB0byBhIHRhc2sgb3RoZXIgdGhhbiBjdXJyZW50LCBmcm9tIGEgY29udGV4dCB3aGVyZSBjdXJyZW50XFxuKyAqIGlzIGEga2VybmVsIHRocmVhZC4gTm8gZmlsdGVyaW5nIG9uIGN1cnJlbnQgaXMgcG9zc2libGUgaGVyZSwgc28gdGhpcyBpc1xcbisgKiBkcml2ZW4gZW50aXJlbHkgYnkgdGFyZ2V0X3BpZC5cXG4rICovXFxuK1NFQyhcXFwidHBfYnRmL3dvcmtxdWV1ZV9leGVjdXRlX3N0YXJ0XFxcIilcXG4raW50IHNlbmRfc2lnbmFsX2t3b3JrZXIodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0X3Rhc2s7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoc3RhdHVzICE9IDAgfHwgdGFyZ2V0X3BpZCA9PSAwKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHRhcmdldF90YXNrID0gYnBmX3Rhc2tfZnJvbV9waWQodGFyZ2V0X3BpZCk7XFxuK1xcdGlmICghdGFyZ2V0X3Rhc2spXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0ID0gYnBmX3NlbmRfc2lnbmFsX3Rhc2sodGFyZ2V0X3Rhc2ssIHNpZywgUElEVFlQRV9UR0lELCA4KTtcXG4rXFx0YnBmX3Rhc2tfcmVsZWFzZSh0YXJnZXRfdGFzayk7XFxuK1xcbitcXHRpZiAocmV0ID09IDApXFxuK1xcdFxcdHN0YXR1cyA9IDE7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gU0VDKFxcXCJwZXJmX2V2ZW50XFxcIilcXG4gaW50IHNlbmRfc2lnbmFsX3BlcmYodm9pZCAqY3R4KVxcbiB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjEyLjgxMTU2NjcxMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjgxMDgwMTU3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9FVkVOVFNcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NlbmRfc2lnbmFsX3Rhc2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBicGZfc2VuZF9zaWduYWxfY29tbW9uKCkgdG8gb25seSBlbmZvcmNlIG5taV91YWNjZXNzX29rYXkoKSB3aGVuIHRoZSB0YXJnZXQgdGFzayBpcyBjdXJyZW50LiBUaGlzIGVuYWJsZXMgQlBGIHByb2dyYW1zIChzdWNoIGFzIHRob3NlIHJ1bm5pbmcgaW4ga3dvcmtlci90cmFjZXBvaW50IGNvbnRleHQpIHRvIHN1Y2Nlc3NmdWxseSBpbnZva2UgdGhlIGJwZl9zZW5kX3NpZ25hbF90YXNrIGtmdW5jIG9uIG5vbi1jdXJyZW50IHRhc2tzLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMga2VybmVsIGV4ZWN1dGlvbiBsb2dpYyBmb3IgQlBGIHNpZ25hbCBkZWxpdmVyeS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTZkNjRmMjNkM2JmOThhNDAxZjk0NThmNmE4ZDhjZWMyNWNhMmRhNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMTA6Mzk6MTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbmluZGV4IDI5MjYwOTUxYWE4NzEuLmY3YTQxZjIyMjU5OTkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbisrKyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuQEAgLTg3MSw3ICs4NzEsMTAgQEAgc3RhdGljIGludCBicGZfc2VuZF9zaWduYWxfY29tbW9uKHUzMiBzaWcsIGVudW0gcGlkX3R5cGUgdHlwZSwgc3RydWN0IHRhc2tfc3RydWNcbiBcdCAqL1xuIFx0aWYgKHVubGlrZWx5KHRhc2stXHUwMDNlZmxhZ3MgXHUwMDI2IChQRl9LVEhSRUFEIHwgUEZfRVhJVElORykpKVxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuLVx0aWYgKHVubGlrZWx5KCFubWlfdWFjY2Vzc19va2F5KCkpKVxuK1x0LyogU2luY2Ugbm1pX3VhY2Nlc3Nfb2theSgpIGlzIG9ubHkgZm9yIHRoZSBjdXJyZW50XG4rXHQgKiB0YXNrLCBjaGVjayBpZiB0YXNrIGlzIGN1cnJlbnQuXG4rXHQgKi9cbitcdGlmICh0YXNrID09IGN1cnJlbnQgXHUwMDI2XHUwMDI2IHVubGlrZWx5KCFubWlfdWFjY2Vzc19va2F5KCkpKVxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuIFx0LyogVGFzayBzaG91bGQgbm90IGJlIHBpZD0xIHRvIGF2b2lkIGtlcm5lbCBwYW5pYy4gKi9cbiBcdGlmICh1bmxpa2VseShpc19nbG9iYWxfaW5pdCh0YXNrKSkpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VuZF9zaWduYWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlbmRfc2lnbmFsLmNcbmluZGV4IDdhYzRkNWE0ODhhYTUuLmY5ZGQyM2RiMWVmOTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZW5kX3NpZ25hbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZW5kX3NpZ25hbC5jXG5AQCAtMjYxLDYgKzI2MSwxMDggQEAgc3RhdGljIHZvaWQgdGVzdF9zZW5kX3NpZ25hbF9ubWkoYm9vbCBzaWduYWxfdGhyZWFkLCBib29sIHJlbW90ZSlcbiBcdHRlc3Rfc2VuZF9zaWduYWxfY29tbW9uKFx1MDAyNmF0dHIsIHNpZ25hbF90aHJlYWQsIHJlbW90ZSk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHRlc3Rfc2VuZF9zaWduYWxfa3dvcmtlcih2b2lkKVxuK3tcbitcdHN0cnVjdCB0ZXN0X3NlbmRfc2lnbmFsX2tlcm4gKnNrZWw7XG4rXHRpbnQgcGlwZV9jMnBbMl0sIHBpcGVfcDJjWzJdO1xuK1x0c3RydWN0IHNpZ2FjdGlvbiBzYSA9IHt9O1xuK1x0Y2hhciBidWZbMjU2XTtcbitcdGludCBlcnIgPSAtMTtcbitcdHBpZF90IHBpZDtcbitcbitcdGlmICghQVNTRVJUX09LKHBpcGUocGlwZV9jMnApLCBcInBpcGVfYzJwXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoIUFTU0VSVF9PSyhwaXBlKHBpcGVfcDJjKSwgXCJwaXBlX3AyY1wiKSkge1xuK1x0XHRjbG9zZShwaXBlX2MycFswXSk7XG4rXHRcdGNsb3NlKHBpcGVfYzJwWzFdKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0cGlkID0gZm9yaygpO1xuK1x0aWYgKCFBU1NFUlRfR0UocGlkLCAwLCBcImZvcmtcIikpIHtcbitcdFx0Y2xvc2UocGlwZV9jMnBbMF0pO1xuK1x0XHRjbG9zZShwaXBlX2MycFsxXSk7XG4rXHRcdGNsb3NlKHBpcGVfcDJjWzBdKTtcbitcdFx0Y2xvc2UocGlwZV9wMmNbMV0pO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAocGlkID09IDApIHtcbitcdFx0LyogaW5zdGFsbCBzaWduYWwgaGFuZGxlciBhbmQgbm90aWZ5IHBhcmVudCAqL1xuK1x0XHRzYS5zYV9zaWdhY3Rpb24gPSBzaWd1c3IxX3NpZ2luZm9faGFuZGxlcjtcbitcdFx0c2Euc2FfZmxhZ3MgPSBTQV9SRVNUQVJUIHwgU0FfU0lHSU5GTztcbitcdFx0QVNTRVJUX05FUShzaWdhY3Rpb24oU0lHVVNSMSwgXHUwMDI2c2EsIE5VTEwpLCAtMSwgXCJzaWdhY3Rpb25cIik7XG4rXG4rXHRcdGNsb3NlKHBpcGVfYzJwWzBdKTsgLyogY2xvc2UgcmVhZCAqL1xuK1x0XHRjbG9zZShwaXBlX3AyY1sxXSk7IC8qIGNsb3NlIHdyaXRlICovXG4rXG4rXHRcdC8qIG5vdGlmeSBwYXJlbnQgc2lnbmFsIGhhbmRsZXIgaXMgaW5zdGFsbGVkICovXG4rXHRcdEFTU0VSVF9FUSh3cml0ZShwaXBlX2MycFsxXSwgYnVmLCAxKSwgMSwgXCJwaXBlX3dyaXRlXCIpO1xuK1xuK1x0XHQvKiBtYWtlIHN1cmUgcGFyZW50IGVuYWJsZWQgYnBmIHByb2dyYW0gdG8gc2VuZF9zaWduYWwgKi9cbitcdFx0QVNTRVJUX0VRKHJlYWQocGlwZV9wMmNbMF0sIGJ1ZiwgMSksIDEsIFwicGlwZV9yZWFkXCIpO1xuK1xuK1x0XHQvKiB0aGUgc2lnbmFsIGlzIHNlbnQgZnJvbSB3b3JrcXVldWUgY29udGV4dCwgc28gbm90aGluZyBoYXNcbitcdFx0ICogdG8gYmUgdHJpZ2dlcmVkIGZyb20gaGVyZVxuK1x0XHQgKi9cbitcdFx0d2hpbGUgKCFzaWd1c3IxX3JlY2VpdmVkKVxuK1x0XHRcdHNsZWVwKDEpO1xuK1xuK1x0XHRidWZbMF0gPSBzaWd1c3IxX3JlY2VpdmVkO1xuK1xuK1x0XHRBU1NFUlRfRVEoc2lndXNyMV9yZWNlaXZlZCwgOCwgXCJzaWd1c3IxX3JlY2VpdmVkXCIpO1xuK1x0XHRBU1NFUlRfRVEod3JpdGUocGlwZV9jMnBbMV0sIGJ1ZiwgMSksIDEsIFwicGlwZV93cml0ZVwiKTtcbitcbitcdFx0Y2xvc2UocGlwZV9jMnBbMV0pO1xuK1x0XHRjbG9zZShwaXBlX3AyY1swXSk7XG4rXHRcdGV4aXQoMCk7XG4rXHR9XG4rXG4rXHRjbG9zZShwaXBlX2MycFsxXSk7IC8qIGNsb3NlIHdyaXRlICovXG4rXHRjbG9zZShwaXBlX3AyY1swXSk7IC8qIGNsb3NlIHJlYWQgKi9cbitcbitcdHNrZWwgPSB0ZXN0X3NlbmRfc2lnbmFsX2tlcm5fX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInNrZWxfb3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0Z290byBza2VsX29wZW5fbG9hZF9mYWlsdXJlO1xuK1xuK1x0Lyogd2FpdCB1bnRpbCBjaGlsZCBzaWduYWwgaGFuZGxlciBpbnN0YWxsZWQgKi9cbitcdEFTU0VSVF9FUShyZWFkKHBpcGVfYzJwWzBdLCBidWYsIDEpLCAxLCBcInBpcGVfcmVhZFwiKTtcbitcbitcdC8qIHBpZCA9PSAwIGtlZXBzIHRoZSBvdGhlciBwcm9ncmFtcyBvZiB0aGlzIHNrZWxldG9uIGluYWN0aXZlICovXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VwaWQgPSAwO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlc2lnID0gU0lHVVNSMTtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXRhcmdldF9waWQgPSBwaWQ7XG4rXG4rXHRlcnIgPSB0ZXN0X3NlbmRfc2lnbmFsX2tlcm5fX2F0dGFjaChza2VsKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJza2VsX2F0dGFjaFwiKSkge1xuK1x0XHRlcnIgPSAtMTtcbitcdFx0Z290byBkZXN0cm95X3NrZWw7XG4rXHR9XG4rXG4rXHQvKiBub3RpZnkgY2hpbGQgdGhhdCBicGYgcHJvZ3JhbSBjYW4gc2VuZF9zaWduYWwgbm93ICovXG4rXHRBU1NFUlRfRVEod3JpdGUocGlwZV9wMmNbMV0sIGJ1ZiwgMSksIDEsIFwicGlwZV93cml0ZVwiKTtcbitcbitcdC8qIHdhaXQgZm9yIHJlc3VsdCwgd29ya3F1ZXVlcyBydW4gb24gdGhlaXIgb3duICovXG4rXHRlcnIgPSByZWFkX3dpdGhfdGltZW91dChwaXBlX2MycFswXSwgYnVmLCAxLCAxMCAqIDEwMDAgKiAxMDAwKTtcbitcdGlmICghQVNTRVJUX0dUKGVyciwgMCwgXCJyZWFkaW5nIHBpcGVcIikpXG4rXHRcdGdvdG8gZGVzdHJveV9za2VsO1xuK1xuK1x0QVNTRVJUX0VRKGJ1ZlswXSwgOCwgXCJpbmNvcnJlY3QgcmVzdWx0XCIpO1xuK1xuK2Rlc3Ryb3lfc2tlbDpcbitcdHRlc3Rfc2VuZF9zaWduYWxfa2Vybl9fZGVzdHJveShza2VsKTtcbitza2VsX29wZW5fbG9hZF9mYWlsdXJlOlxuK1x0Y2xvc2UocGlwZV9jMnBbMF0pO1xuK1x0Y2xvc2UocGlwZV9wMmNbMV0pO1xuK1x0LypcbitcdCAqIENoaWxkIGlzIGVpdGhlciBhYm91dCB0byBleGl0IGNsZWFubHkgb3Igc3R1Y2sgaW4gY2FzZSBvZiBlcnJvcnMuXG4rXHQgKiBOdWRnZSBpdCB0byBleGl0LlxuK1x0ICovXG4rXHRraWxsKHBpZCwgU0lHS0lMTCk7XG4rXHR3YWl0KE5VTEwpO1xuK31cbitcbiB2b2lkIHRlc3Rfc2VuZF9zaWduYWwodm9pZClcbiB7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInNlbmRfc2lnbmFsX3RyYWNlcG9pbnRcIikpXG5AQCAtMjg5LDQgKzM5MSw2IEBAIHZvaWQgdGVzdF9zZW5kX3NpZ25hbCh2b2lkKVxuIFx0XHR0ZXN0X3NlbmRfc2lnbmFsX3BlcmYodHJ1ZSwgdHJ1ZSk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInNlbmRfc2lnbmFsX25taV90aHJlYWRfcmVtb3RlXCIpKVxuIFx0XHR0ZXN0X3NlbmRfc2lnbmFsX25taSh0cnVlLCB0cnVlKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic2VuZF9zaWduYWxfa3dvcmtlclwiKSlcbitcdFx0dGVzdF9zZW5kX3NpZ25hbF9rd29ya2VyKCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uY1xuaW5kZXggMTc2YTM1NWUzMDYyNC4uZDFjMDAwYzMwODg1NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jXG5AQCAtNjAsNiArNjAsMzIgQEAgaW50IHNlbmRfc2lnbmFsX3RwX3NjaGVkKHZvaWQgKmN0eClcbiBcdHJldHVybiBicGZfc2VuZF9zaWduYWxfdGVzdChjdHgpO1xuIH1cbiBcbisvKiBTZW5kIGEgc2lnbmFsIHRvIGEgdGFzayBvdGhlciB0aGFuIGN1cnJlbnQsIGZyb20gYSBjb250ZXh0IHdoZXJlIGN1cnJlbnRcbisgKiBpcyBhIGtlcm5lbCB0aHJlYWQuIE5vIGZpbHRlcmluZyBvbiBjdXJyZW50IGlzIHBvc3NpYmxlIGhlcmUsIHNvIHRoaXMgaXNcbisgKiBkcml2ZW4gZW50aXJlbHkgYnkgdGFyZ2V0X3BpZC5cbisgKi9cbitTRUMoXCJ0cF9idGYvd29ya3F1ZXVlX2V4ZWN1dGVfc3RhcnRcIilcbitpbnQgc2VuZF9zaWduYWxfa3dvcmtlcih2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXRfdGFzaztcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoc3RhdHVzICE9IDAgfHwgdGFyZ2V0X3BpZCA9PSAwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHRhcmdldF90YXNrID0gYnBmX3Rhc2tfZnJvbV9waWQodGFyZ2V0X3BpZCk7XG4rXHRpZiAoIXRhcmdldF90YXNrKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldCA9IGJwZl9zZW5kX3NpZ25hbF90YXNrKHRhcmdldF90YXNrLCBzaWcsIFBJRFRZUEVfVEdJRCwgOCk7XG4rXHRicGZfdGFza19yZWxlYXNlKHRhcmdldF90YXNrKTtcbitcbitcdGlmIChyZXQgPT0gMClcbitcdFx0c3RhdHVzID0gMTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCJwZXJmX2V2ZW50XCIpXG4gaW50IHNlbmRfc2lnbmFsX3BlcmYodm9pZCAqY3R4KVxuIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjEyLjgxMTU2ODYwMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2Nzk5NDU0NzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IGBicGZfc2VuZF9zaWduYWxfY29tbW9uYCBpbiBgYnBmX3RyYWNlLmNgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgaXQncyB0b3VjaGluZyBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBhbmQgc29tZSBzZWxmdGVzdHMgdW5kZXIgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uLi5gLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHRyYWNpbmcgYW5kIEJQRiB1c3VhbGx5IGdvIGhhbmQgaW4gaGFuZC5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSB3aXRoaW4gdGhlIGBicGZfc2VuZF9zaWduYWxfY29tbW9uYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCdzIGFib3V0IHRoZSBgbm1pX3VhY2Nlc3Nfb2theSgpYCBjaGVjay4gSSBzZWUgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSBjaGVja2VkIGBubWlfdWFjY2Vzc19va2F5KClgIGRpcmVjdGx5LCBidXQgdGhlIHJldmlzZWQgdmVyc2lvbiBpcyBhZGRpbmcgYSBjaGVjayB0byBzZWUgaWYgdGhlIHRhcmdldCBgdGFza2AgaXMgYWN0dWFsbHkgdGhlIGBjdXJyZW50YCB0YXNrIGJlZm9yZSBjYWxsaW5nIGBubWlfdWFjY2Vzc19va2F5KClgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSBhIHRhcmdldGVkIG9wdGltaXphdGlvbiBvciBhIGZpeCBmb3IgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIE5NSSBhY2Nlc3Mgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gVGhlIG9yaWdpbmFsIGNoZWNrIGxpa2VseSBoYWQgYSBmbGF3LCBhcyBpdCBkaWRuJ3QgYWNjb3VudCBmb3IgdGhlIGNvbnRleHQgb2YgdGhlIHRhcmdldCB0YXNrLlxuXG5JJ20gY3VyaW91cyB0byBzZWUgd2h5IHRoZSBgbm1pX3VhY2Nlc3Nfb2theSgpYCBjaGVjayBpcyBiZWluZyBtb2RpZmllZCBpbiB0aGlzIHNwZWNpZmljIHdheS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgdXNlIG15IHRvb2xzIHRvIGdyYWIgdGhlIGNvZGUgYXJvdW5kIGxpbmUgODcxIG9mIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIGZvciBhIGJpdCBtb3JlIGNvbnRleHQuIFRoZW4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBtdWNoIGJldHRlciBpZGVhIG9mIHRoZSBwb3RlbnRpYWwgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXMgdGhpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbj8gQSBzZWN1cml0eSBoYXJkZW5pbmcgbWVhc3VyZT8gQSBidWcgZml4PyBMZXQncyBmaW5kIG91dCFcblxuXG4iLCJJbnB1dFRva2VucyI6NDEwNiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjI5LjYxMTAyNTM2MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODUwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODUwOlxcdFxcdHN0cnVjdCBrZXJuZWxfc2lnaW5mbyBpbmZvO1xcbiA4NTE6XFx0XFx0c3RydWN0IGtlcm5lbF9zaWdpbmZvICpzaWdpbmZvO1xcbiA4NTI6XFx0XFxuIDg1MzpcXHRcXHRpZiAoIXRhc2spIHtcXG4gODU0OlxcdFxcdFxcdHRhc2sgPSBjdXJyZW50O1xcbiA4NTU6XFx0XFx0XFx0c2lnaW5mbyA9IFNFTkRfU0lHX1BSSVY7XFxuIDg1NjpcXHRcXHR9IGVsc2Uge1xcbiA4NTc6XFx0XFx0XFx0Y2xlYXJfc2lnaW5mbyhcXHUwMDI2aW5mbyk7XFxuIDg1ODpcXHRcXHRcXHRpbmZvLnNpX3NpZ25vID0gc2lnO1xcbiA4NTk6XFx0XFx0XFx0aW5mby5zaV9lcnJubyA9IDA7XFxuIDg2MDpcXHRcXHRcXHRpbmZvLnNpX2NvZGUgPSBTSV9LRVJORUw7XFxuIDg2MTpcXHRcXHRcXHRpbmZvLnNpX3BpZCA9IDA7XFxuIDg2MjpcXHRcXHRcXHRpbmZvLnNpX3VpZCA9IDA7XFxuIDg2MzpcXHRcXHRcXHRpbmZvLnNpX3ZhbHVlLnNpdmFsX3B0ciA9ICh2b2lkIF9fdXNlciBfX2ZvcmNlICopKHVuc2lnbmVkIGxvbmcpdmFsdWU7XFxuIDg2NDpcXHRcXHRcXHRzaWdpbmZvID0gXFx1MDAyNmluZm87XFxuIDg2NTpcXHRcXHR9XFxuIDg2NjpcXHRcXG4gODY3OlxcdFxcdC8qIFNpbWlsYXIgdG8gYnBmX3Byb2JlX3dyaXRlX3VzZXIsIHRhc2sgbmVlZHMgdG8gYmVcXG4gODY4OlxcdFxcdCAqIGluIGEgc291bmQgY29uZGl0aW9uIGFuZCBrZXJuZWwgbWVtb3J5IGFjY2VzcyBiZVxcbiA4Njk6XFx0XFx0ICogcGVybWl0dGVkIGluIG9yZGVyIHRvIHNlbmQgc2lnbmFsIHRvIHRoZSBjdXJyZW50XFxuIDg3MDpcXHRcXHQgKiB0YXNrLlxcbiA4NzE6XFx0XFx0ICovXFxuIDg3MjpcXHRcXHRpZiAodW5saWtlbHkodGFzay1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoUEZfS1RIUkVBRCB8IFBGX0VYSVRJTkcpKSlcXG4gODczOlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuIDg3NDpcXHRcXHQvKiBTaW5jZSBubWlfdWFjY2Vzc19va2F5KCkgaXMgb25seSBmb3IgdGhlIGN1cnJlbnRcXG4gODc1OlxcdFxcdCAqIHRhc2ssIGNoZWNrIGlmIHRhc2sgaXMgY3VycmVudC5cXG4gODc2OlxcdFxcdCAqL1xcbiA4Nzc6XFx0XFx0aWYgKHRhc2sgPT0gY3VycmVudCBcXHUwMDI2XFx1MDAyNiB1bmxpa2VseSghbm1pX3VhY2Nlc3Nfb2theSgpKSlcXG4gODc4OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuIDg3OTpcXHRcXHQvKiBUYXNrIHNob3VsZCBub3QgYmUgcGlkPTEgdG8gYXZvaWQga2VybmVsIHBhbmljLiAqL1xcbiA4ODA6XFx0XFx0aWYgKHVubGlrZWx5KGlzX2dsb2JhbF9pbml0KHRhc2spKSlcXG4gODgxOlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuIDg4MjpcXHRcXG4gODgzOlxcdFxcdGlmIChwcmVlbXB0X2NvdW50KCkgIT0gMCB8fCBpcnFzX2Rpc2FibGVkKCkpIHtcXG4gODg0OlxcdFxcdFxcdC8qIERvIGFuIGVhcmx5IGNoZWNrIG9uIHNpZ25hbCB2YWxpZGl0eS4gT3RoZXJ3aXNlLFxcbiA4ODU6XFx0XFx0XFx0ICogdGhlIGVycm9yIGlzIGxvc3QgaW4gZGVmZXJyZWQgaXJxX3dvcmsuXFxuIDg4NjpcXHRcXHRcXHQgKi9cXG4gODg3OlxcdFxcdFxcdGlmICh1bmxpa2VseSghdmFsaWRfc2lnbmFsKHNpZykpKVxcbiA4ODg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDg4OTpcXHRcXG4gODkwOlxcdFxcdFxcdHdvcmsgPSB0aGlzX2NwdV9wdHIoXFx1MDAyNnNlbmRfc2lnbmFsX3dvcmspO1xcbiA4OTE6XFx0XFx0XFx0aWYgKGlycV93b3JrX2lzX2J1c3koXFx1MDAyNndvcmstXFx1MDAzZWlycV93b3JrKSlcXG4gODkyOlxcdFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDg5MzpcXHRcXG4gODk0OlxcdFxcdFxcdC8qIEFkZCB0aGUgY3VycmVudCB0YXNrLCB3aGljaCBpcyB0aGUgdGFyZ2V0IG9mIHNlbmRpbmcgc2lnbmFsLFxcbiA4OTU6XFx0XFx0XFx0ICogdG8gdGhlIGlycV93b3JrLiBUaGUgY3VycmVudCB0YXNrIG1heSBjaGFuZ2Ugd2hlbiBxdWV1ZWRcXG4gODk2OlxcdFxcdFxcdCAqIGlycSB3b3JrcyBnZXQgZXhlY3V0ZWQuXFxuIDg5NzpcXHRcXHRcXHQgKi9cXG4gODk4OlxcdFxcdFxcdHdvcmstXFx1MDAzZXRhc2sgPSBnZXRfdGFza19zdHJ1Y3QodGFzayk7XFxuIDg5OTpcXHRcXHRcXHR3b3JrLVxcdTAwM2VoYXNfc2lnaW5mbyA9IHNpZ2luZm8gPT0gXFx1MDAyNmluZm87XFxuIDkwMDpcXHRcXHRcXHRpZiAod29yay1cXHUwMDNlaGFzX3NpZ2luZm8pXFxuIDkwMTpcXHRcXHRcXHRcXHRjb3B5X3NpZ2luZm8oXFx1MDAyNndvcmstXFx1MDAzZWluZm8sIFxcdTAwMjZpbmZvKTtcXG4gOTAyOlxcdFxcdFxcdHdvcmstXFx1MDAzZXNpZyA9IHNpZztcXG4gOTAzOlxcdFxcdFxcdHdvcmstXFx1MDAzZXR5cGUgPSB0eXBlO1xcbiA5MDQ6XFx0XFx0XFx0aXJxX3dvcmtfcXVldWUoXFx1MDAyNndvcmstXFx1MDAzZWlycV93b3JrKTtcXG4gOTA1OlxcdFxcdFxcdHJldHVybiAwO1xcbiA5MDY6XFx0XFx0fVxcbiA5MDc6XFx0XFxuIDkwODpcXHRcXHRyZXR1cm4gZ3JvdXBfc2VuZF9zaWdfaW5mbyhzaWcsIHNpZ2luZm8sIHRhc2ssIHR5cGUpO1xcbiA5MDk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozOToyOS42MTEyMDE2MjJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDcxNDgyNTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdHJhY2luZyB0aGUgY2FsbGVyIGZ1bmN0aW9ucyBvZiBgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbmA6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbGVycyBvZiBgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbmAqKlxuXG5BbHJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHdoZXJlIGBicGZfc2VuZF9zaWduYWxfY29tbW9uYCBpcyBhY3R1YWxseSBiZWluZyAqdXNlZCouIEdpdmVuIHRoZSBuYW1lLCBJJ2QgZXhwZWN0IGl0IHRvIGJlIGEgY29tbW9uIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gc2lnbmFsIGhhbmRsaW5nIHdpdGhpbiB0aGUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBjb250ZXh0LiBTbywgd2hlcmUgaXMgdGhlIGVudHJ5cG9pbnQ/XG5cbk15IGltbWVkaWF0ZSBtb3ZlIGlzIHRvIHVzZSBgZ3JlcGAuIEkgd2FudCB0byBmaW5kIHdoZXJlIGBicGZfc2VuZF9zaWduYWxgIGlzIGNhbGxlZC4gU3BlY2lmaWNhbGx5LCBJJ2xsIGZvY3VzIG15IHNlYXJjaCBvbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gSSBleHBlY3QgYGJwZl90cmFjZS5jYCB0byBjb250YWluIHRoZSBzb3VyY2UgY29kZSBpbXBsZW1lbnRpbmcgdGhlIHRyYWNlcG9pbnRzIHRoYXQgYWxsb3cgbWUgdG8gdW5kZXJzdGFuZCB3aGVyZSBzaWduYWxzIGFyZSBnZXR0aW5nIHNlbnQuIEZyb20gdGhlcmUsIEkgY2FuIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGNhbGwgZ3JhcGguIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyBiYWNrIHRoZSBjYWxsZXJzIGFuZCB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjMxLjY4MjY4NzY5M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDgxMDQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc2VuZF9zaWduYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz04MzM9c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzZW5kX3NpZ25hbF9pcnFfd29yaywgc2VuZF9zaWduYWxfd29yayk7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTgzNC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6ODM1OnN0YXRpYyB2b2lkIGRvX2JwZl9zZW5kX3NpZ25hbChzdHJ1Y3QgaXJxX3dvcmsgKmVudHJ5KVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy04MzYte1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTg0Ni1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6ODQ3OnN0YXRpYyBpbnQgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbih1MzIgc2lnLCBlbnVtIHBpZF90eXBlIHR5cGUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTY0IHZhbHVlKVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy04NDgte1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTkxMC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6OTExOkJQRl9DQUxMXzEoYnBmX3NlbmRfc2lnbmFsLCB1MzIsIHNpZylcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTEyLXtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6OTEzOlxcdHJldHVybiBicGZfc2VuZF9zaWduYWxfY29tbW9uKHNpZywgUElEVFlQRV9UR0lELCBOVUxMLCAwKTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTE0LX1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTE1LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo5MTY6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zZW5kX3NpZ25hbF9wcm90byA9IHtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6OTE3OlxcdC5mdW5jXFx0XFx0PSBicGZfc2VuZF9zaWduYWwsXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTkxOC1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTkyMi1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6OTIzOkJQRl9DQUxMXzEoYnBmX3NlbmRfc2lnbmFsX3RocmVhZCwgdTMyLCBzaWcpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTkyNC17XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjkyNTpcXHRyZXR1cm4gYnBmX3NlbmRfc2lnbmFsX2NvbW1vbihzaWcsIFBJRFRZUEVfUElELCBOVUxMLCAwKTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTI2LX1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTI3LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo5Mjg6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zZW5kX3NpZ25hbF90aHJlYWRfcHJvdG8gPSB7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjkyOTpcXHQuZnVuY1xcdFxcdD0gYnBmX3NlbmRfc2lnbmFsX3RocmVhZCxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTMwLVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MjI2ND1zdGF0aWMgaW50IF9faW5pdCBzZW5kX3NpZ25hbF9pcnFfd29ya19pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI3MC1cXHRcXHR3b3JrID0gcGVyX2NwdV9wdHIoXFx1MDAyNnNlbmRfc2lnbmFsX3dvcmssIGNwdSk7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjIyNzE6XFx0XFx0aW5pdF9pcnFfd29yayhcXHUwMDI2d29yay1cXHUwMDNlaXJxX3dvcmssIGRvX2JwZl9zZW5kX3NpZ25hbCk7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNzItXFx0fVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM2MTQ9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjE1LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNjE2Ol9fYnBmX2tmdW5jIGludCBicGZfc2VuZF9zaWduYWxfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBzaWcsIGVudW0gcGlkX3R5cGUgdHlwZSxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzYxNy1cXHRcXHRcXHRcXHQgICAgIHU2NCB2YWx1ZSlcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjIxLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNjIyOlxcdHJldHVybiBicGZfc2VuZF9zaWduYWxfY29tbW9uKHNpZywgdHlwZSwgdGFzaywgdmFsdWUpO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjIzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6Mzk6MzEuNzI3NTAxNDcyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE5MTQyMTY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCUEYgS2Z1bmM6IGBicGZfc2VuZF9zaWduYWxfdGFza2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgYnBmX3NlbmRfc2lnbmFsX3Rhc2tgLiBSaWdodCwgdGhhdCdzIGEgQlBGIGtmdW5jLiBJbnRlcmVzdGluZy4gVGhlIGNvZGUgcGF0aCBJJ20gZXhhbWluaW5nIGludm9sdmVzIGBicGZfc2VuZF9zaWduYWxfdGFzayh0YXNrLCAuLi4pYCBiZWluZyBpbnZva2VkLCBhbmQgY3J1Y2lhbGx5LCB0aGUgYHRhc2tgIGFyZ3VtZW50IGhlcmUgcmVmZXJzIHRvIGEgKmRpZmZlcmVudCogdGFzaywgbm90IHRoZSBjdXJyZW50IG9uZS4gSSBzZWUgYSBjYWxsIHRvIGBubWlfdWFjY2Vzc19va2F5KClgIGluIHRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSBjb2RlLCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZC4gVGhpcyBpcyBhIGJpdCB1bmV4cGVjdGVkIGFuZCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYG5taV91YWNjZXNzX29rYXkoKWAgaXMgYWxsIGFib3V0IGluIHRoaXMgY29udGV4dC4gVGltZSB0byBwdWxsIG91dCB0aGUgZ3JlcCBhbmQgZGlnIGluIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgaGVyZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk1NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjMzLjkxODkyNTE3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODY1OTc0MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibm1pX3VhY2Nlc3Nfb2theVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9ldmVudHMvY29yZS5jPTI5MTE9c3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3NlZ21lbnRfYmFzZSh1bnNpZ25lZCBpbnQgc2VnbWVudClcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9jb3JlLmMtMjkyMy1cXHRcXHQgKi9cXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jOjI5MjQ6XFx0XFx0aWYgKCFubWlfdWFjY2Vzc19va2F5KCkpXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0yOTI1LVxcdFxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYz0yOTk3PXBlcmZfY2FsbGNoYWluX3VzZXIoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5X2N0eCAqZW50cnksIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0zMDE3LVxcbmFyY2gveDg2L2V2ZW50cy9jb3JlLmM6MzAxODpcXHRpZiAoIW5taV91YWNjZXNzX29rYXkoKSlcXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTMwMTktXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaD03ND1zdHJ1Y3QgdGxiX3N0YXRlIHtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgtODMtXFx0ICogd2hlbiBDUjMgYW5kIGxvYWRlZF9tbSB3b3VsZCBvdGhlcndpc2UgYmUgaW5jb25zaXN0ZW50LiAgVGhpc1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmg6ODQ6XFx0ICogaXMgZm9yIG5taV91YWNjZXNzX29rYXkoKSdzIGJlbmVmaXQuXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaC04NS1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmg9MTkwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90bGJmbHVzaC5oLTE5Ny1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90bGJmbHVzaC5oOjE5ODpib29sIG5taV91YWNjZXNzX29rYXkodm9pZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaDoxOTk6I2RlZmluZSBubWlfdWFjY2Vzc19va2F5IG5taV91YWNjZXNzX29rYXlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90bGJmbHVzaC5oLTIwMC1cXG4tLVxcbmFyY2gveDg2L2xpYi9pbnNuLWV2YWwuYz02MjE9c3RhdGljIGJvb2wgZ2V0X2Rlc2Moc3RydWN0IGRlc2Nfc3RydWN0ICpvdXQsIHVuc2lnbmVkIHNob3J0IHNlbClcXG4tLVxcbmFyY2gveDg2L2xpYi9pbnNuLWV2YWwuYy02MzctXFx0XFx0ICovXFxuYXJjaC94ODYvbGliL2luc24tZXZhbC5jOjYzODpcXHRcXHRpZiAoIW5taV91YWNjZXNzX29rYXkoKSlcXG5hcmNoL3g4Ni9saWIvaW5zbi1ldmFsLmMtNjM5LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmFyY2gveDg2L2xpYi91c2VyY29weS5jPTMyPWNvcHlfZnJvbV91c2VyX25taSh2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbilcXG4tLVxcbmFyY2gveDg2L2xpYi91c2VyY29weS5jLTM4LVxcbmFyY2gveDg2L2xpYi91c2VyY29weS5jOjM5OlxcdGlmICghbm1pX3VhY2Nlc3Nfb2theSgpKVxcbmFyY2gveDg2L2xpYi91c2VyY29weS5jLTQwLVxcdFxcdHJldHVybiBuO1xcbi0tXFxuYXJjaC94ODYvbW0vdGxiLmM9NzgzPXZvaWQgc3dpdGNoX21tX2lycXNfb2ZmKHN0cnVjdCBtbV9zdHJ1Y3QgKnVudXNlZCwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCxcXG4tLVxcbmFyY2gveDg2L21tL3RsYi5jLTkwOS1cXHRcXHQvKlxcbmFyY2gveDg2L21tL3RsYi5jOjkxMDpcXHRcXHQgKiBJbmRpY2F0ZSB0aGF0IENSMyBpcyBhYm91dCB0byBjaGFuZ2UuIG5taV91YWNjZXNzX29rYXkoKVxcbmFyY2gveDg2L21tL3RsYi5jLTkxMS1cXHRcXHQgKiBhbmQgb3RoZXJzIGFyZSBzZW5zaXRpdmUgdG8gdGhlIHdpbmRvdyB3aGVyZSBtbV9jcHVtYXNrKCksXFxuLS1cXG5hcmNoL3g4Ni9tbS90bGIuYz0xNjgyPXZvaWQgYXJjaF90bGJiYXRjaF9mbHVzaChzdHJ1Y3QgYXJjaF90bGJmbHVzaF91bm1hcF9iYXRjaCAqYmF0Y2gpXFxuLS1cXG5hcmNoL3g4Ni9tbS90bGIuYy0xNzIxLSAqL1xcbmFyY2gveDg2L21tL3RsYi5jOjE3MjI6Ym9vbCBubWlfdWFjY2Vzc19va2F5KHZvaWQpXFxuYXJjaC94ODYvbW0vdGxiLmMtMTcyMy17XFxuLS1cXG5hcmNoL3g4Ni9tbS90bGIuYy0xNzMxLVxcdCAqIGN1cnJlbnRfbW0tXFx1MDAzZXBnZCA9PSBfX3ZhKHJlYWRfY3IzX3BhKCkpLiAgVGhpcyBtYXkgYmUgc2xvdywgdGhvdWdoLFxcbmFyY2gveDg2L21tL3RsYi5jOjE3MzI6XFx0ICogaWYgd2UncmUgcnVubmluZyBpbiBhIFZNIHdpdGggc2hhZG93IHBhZ2luZywgYW5kIG5taV91YWNjZXNzX29rYXkoKVxcbmFyY2gveDg2L21tL3RsYi5jLTE3MzMtXFx0ICogaXMgc3VwcG9zZWQgdG8gYmUgcmVhc29uYWJseSBmYXN0Llxcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaC0yNC0gKi9cXG5pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oOjI1OiNpZm5kZWYgbm1pX3VhY2Nlc3Nfb2theVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmg6MjY6IyBkZWZpbmUgbm1pX3VhY2Nlc3Nfb2theSgpIHRydWVcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oLTI3LSNlbmRpZlxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM1NT1CUEZfQ0FMTF8zKGJwZl9wcm9iZV93cml0ZV91c2VyLCB2b2lkIF9fdXNlciAqLCB1bnNhZmVfcHRyLCBjb25zdCB2b2lkICosIHNyYyxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjUtXFx0ICpcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzY2OlxcdCAqIG5taV91YWNjZXNzX29rYXkoKSBlbnN1cmVzIHRoZSBwcm9iZSBpcyBub3QgcnVuIGluIGFuIGludGVyaW1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzY3LVxcdCAqIHN0YXRlLCB3aGVuIHRoZSB0YXNrIG9yIG1tIGFyZSBzd2l0Y2hlZC4gVGhpcyBpcyBzcGVjaWZpY2FsbHlcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzMtXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6Mzc0OlxcdGlmICh1bmxpa2VseSghbm1pX3VhY2Nlc3Nfb2theSgpKSlcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc1LVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9ODQ3PXN0YXRpYyBpbnQgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbih1MzIgc2lnLCBlbnVtIHBpZF90eXBlIHR5cGUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTY0IHZhbHVlKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTg3My1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo4NzQ6XFx0LyogU2luY2Ugbm1pX3VhY2Nlc3Nfb2theSgpIGlzIG9ubHkgZm9yIHRoZSBjdXJyZW50XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTg3NS1cXHQgKiB0YXNrLCBjaGVjayBpZiB0YXNrIGlzIGN1cnJlbnQuXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTg3Ni1cXHQgKi9cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6ODc3OlxcdGlmICh0YXNrID09IGN1cnJlbnQgXFx1MDAyNlxcdTAwMjYgdW5saWtlbHkoIW5taV91YWNjZXNzX29rYXkoKSkpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTg3OC1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxubW0vbWFjY2Vzcy5jPTEyMD1sb25nIGNvcHlfZnJvbV91c2VyX25vZmF1bHQodm9pZCAqZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbm1tL21hY2Nlc3MuYy0xMjYtXFxubW0vbWFjY2Vzcy5jOjEyNzpcXHRpZiAoIW5taV91YWNjZXNzX29rYXkoKSlcXG5tbS9tYWNjZXNzLmMtMTI4LVxcdFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjM1LjcwNTUyNjYzN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwMjYwNzg5NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGggRnV6emluZzogQSBCUEYgU2lnbmFsIEluamVjdGlvbiBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGEgY2hhbmdlIHRvIGBicGZfc2VuZF9zaWduYWxfY29tbW9uYCBpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gVGhlIGNvcmUgaXNzdWUgaXMgdGhhdCB3aGVuIGBicGZfc2VuZF9zaWduYWxfdGFza2AgaXMgY2FsbGVkIGZyb20gYSBrd29ya2VyIHRocmVhZCwgYSB0cmFjZXBvaW50LCBvciBzb21lIG90aGVyIGNvbnRleHQgd2hlcmUgdGhlIGBjdXJyZW50YCB0YXNrIGlzIGEga3RocmVhZCwgYG5taV91YWNjZXNzX29rYXkoKWAgZmFpbHMuIFRoaXMgaGFwcGVucyBiZWNhdXNlIGt0aHJlYWRzIG9uIHg4NiBkb24ndCBoYXZlIGEgdmFsaWQgYGN1cnJlbnQtXHUwMDNlbW1gIG9yIHRoZWlyIENSMyBpcyBkaWZmZXJlbnQsIGFuZCBhcyBhIHJlc3VsdCwgYGJwZl9zZW5kX3NpZ25hbF90YXNrYCB3YXMgaW5jb3JyZWN0bHkgcmV0dXJuaW5nIC1FUEVSTSBldmVuIHdoZW4gaXQgc2hvdWxkIGhhdmUgc3VjY2VlZGVkIGluIHNlbmRpbmcgYSBzaWduYWwgdG8gYSB1c2VyIHRhc2suIFRoaXMgY2hhbmdlIGFkZHJlc3NlcyB0aGF0LlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBmdXp6YWJsZT8gSSBoYXZlIGEgcHJldHR5IGNsZWFyIGNoZWNrbGlzdCBpbiBtaW5kLiBEb2VzIGl0IGFmZmVjdCBjb3JlIGtlcm5lbCBsb2dpYz8gQ2hlY2suIFRoaXMgcGF0Y2ggZGlyZWN0bHkgbW9kaWZpZXMgdGhlIEJQRiB0cmFjaW5nIGhlbHBlciwgc3BlY2lmaWNhbGx5IGBicGZfc2VuZF9zaWduYWxfdGFza2Agd2hpY2ggaXMgYSBrZnVuYy4gVGhhdCdzIGEgZ29vZCBzaWduLiBJdCdzIGZpeGluZyBhIGJ1ZyB0aGF0IHByZXZlbnRlZCBzaWduYWwgc2VuZGluZyBmcm9tIEJQRiBwcm9ncmFtcyB0byBvdGhlciB0YXNrcywgYW5kIEkgY2FuIGVudmlzaW9uIGF0dGFjaGluZyB0aGF0IEJQRiBjb2RlIHRvIHRyYWNlcG9pbnRzIG9yIGt3b3JrZXJzIHdoaWNoIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZS5cblxuR2l2ZW4gbXkgY3JpdGVyaWEsIHRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBJIG1lYW4sIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBCUEYgc2lnbmFsIGluamVjdGlvbiBwYXRoLCB3aGljaCwgaWYgbWlzaGFuZGxlZCwgY291bGQgYmUgcHJvYmxlbWF0aWMuXG5cbk5vdywgbGV0IG1lIGNoZWNrIHRoZSByZWxldmFudCBDT05GSUcgb3B0aW9ucyBhbmQgRm9jdXNTeW1ib2xzIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgcGF0aCBpcyBhY3R1YWxseSBlbmFibGVkLiBMZXQgbWUgZmluZCBga2VybmVsL3RyYWNlL01ha2VmaWxlYCBvciBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCB0byBzZWUgd2hpY2ggY29uZmlnIG9wdGlvbnMgZW5hYmxlIGBicGZfdHJhY2UuY2AsIGVzcGVjaWFsbHkgYGJwZl9zZW5kX3NpZ25hbF90YXNrYC4gT25jZSBJIGtub3cgdGhhdCwgSSdsbCBiZSBpbiBnb29kIHNoYXBlIHRvIHN0YXJ0IHByZXBwaW5nIGEgZnV6emluZyBjYW1wYWlnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk1OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozOTo0MS43MzE2MDc5MzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTg0MDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl90cmFjZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9NYWtlZmlsZT01ND1LQ09WX0lOU1RSVU1FTlRfdHJhY2VfaXJxc29mZi5vIDo9IG5cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNTUtXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjU2OkNGTEFHU19icGZfdHJhY2UubyA6PSAtSSQoc3JjKVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01Ny1cXG4tLVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZT0xMDk9b2JqLSQoQ09ORklHX1VTRVJfRVZFTlRTKSArPSB0cmFjZV9ldmVudHNfdXNlci5vXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjExMDpvYmotJChDT05GSUdfQlBGX0VWRU5UUykgKz0gYnBmX3RyYWNlLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTExLW9iai0kKENPTkZJR19LUFJPQkVfRVZFTlRTKSArPSB0cmFjZV9rcHJvYmUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozOTo0MS43ODAxOTc0OTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzYwODU2NDM1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBLY29uZmlnIGZvciBCUEZfRVZFTlRTKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW50YWwgbWFwIG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYEJQRl9FVkVOVFNgLiBJJ20gYXNzdW1pbmcgaXQncyBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBCUEYgaW5mcmFzdHJ1Y3R1cmUsIGJ1dCBpdCdzIGFsd2F5cyB3aXNlIHRvIGNvbmZpcm0gYW5kIHVuZGVyc3RhbmQgaXRzIHByZWNpc2UgbG9jYXRpb24gd2l0aGluIHRoZSBLY29uZmlnIGhpZXJhcmNoeS4gVGhpcyBpcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLCBhbmQgd2hlcmUgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0cyBhcmUgbWFuYWdlZC4gSSdsbCBuZWVkIHRvIGtub3cgd2hldGhlciBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hhdCBvdGhlciBvcHRpb25zIGl0IG1pZ2h0IGRlcGVuZCBvbiAoZS5nLiwgYENPTkZJR19CUEZgLCBgQ09ORklHX0RFQlVHX0lORk9fQlRGYCksIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgY29uc3RyYWludHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoaXMgaXMgYSBmZWF0dXJlIGZsYWcsIGEgZGVwZW5kZW5jeSwgb3IgYSBwYXJ0IG9mIGEgbGFyZ2VyLCBtb3JlIGNvbXBsZXggc3Vic3lzdGVtIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gVGhlIGdvYWwgaXMgdG8gZWl0aGVyIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgcXVpY2tseSwgb3IsIG1vcmUgaW1wb3J0YW50bHksIGRpc2NvdmVyIGFueSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBwaXRmYWxscyBvciBudWFuY2VzIHJlbGF0ZWQgdG8gYEJQRl9FVkVOVFNgLiBJIG5lZWQgdG8gaGF2ZSBhIGNvbmNyZXRlIGdyYXNwIG9mIHRoZSBmZWF0dXJlLCBzbyBJIGNhbiBjb250aW51ZSB3aXRoIHRoZSB0YXNrIGF0IGhhbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTYwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6Mzk6NDkuMzg4NzYzNjY3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzEyNDk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0VWRU5UU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTgzOT1jb25maWcgRVBST0JFX0VWRU5UU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODUyLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg1Mzpjb25maWcgQlBGX0VWRU5UU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg1NC1cXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjQ5LjQzNTg5NTY5NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzM3MzQ1MjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgS2VybmVsIFRyYWNlIEtjb25maWcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AuIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB3aGF0J3MgZ29pbmcgb24gYXJvdW5kIGxpbmUgODUzLiBJJ3ZlIGdvdCBhIGh1bmNoIGFib3V0IHNvbWV0aGluZyB0aGVyZSwgbGlrZWx5IHJlbGF0ZWQgdG8gYSBwYXJ0aWN1bGFyIHRyYWNpbmcgZmVhdHVyZSBvciBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0J3Mgc2VlIGlmIHRoaXMgaHVuY2ggaXMgY29ycmVjdCwgb3IgaWYgdGhlcmUncyBhIHJlbGF0ZWQgZGVwZW5kZW5jeSB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoYXQgZnVuY3Rpb24uIEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGlzIHNlY3Rpb24gb2YgdGhlIEtjb25maWcgZmlsZSBjb250cm9scyB0aGUgYnVpbGQgYW5kIGluY2x1c2lvbiBvZiBzcGVjaWZpYyB0cmFjaW5nIGNhcGFiaWxpdGllcyB3aXRoaW4gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozOTo1MS4xNzMyNDI4NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NTA6XFx0XFx0ICBjb252ZXJ0IHRoZSB0eXBlIG9mIGFuIGV2ZW50IGZpZWxkLiBGb3IgZXhhbXBsZSwgdHVybiBhblxcbiA4NTE6XFx0XFx0ICBhZGRyZXNzIGludG8gYSBzdHJpbmcuXFxuIDg1MjpcXHRcXG4gODUzOlxcdGNvbmZpZyBCUEZfRVZFTlRTXFxuIDg1NDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuIDg1NTpcXHRcXHRkZXBlbmRzIG9uIChLUFJPQkVfRVZFTlRTIHx8IFVQUk9CRV9FVkVOVFMpIFxcdTAwMjZcXHUwMDI2IFBFUkZfRVZFTlRTXFxuIDg1NjpcXHRcXHRib29sXFxuIDg1NzpcXHRcXHRkZWZhdWx0IHlcXG4gODU4OlxcdFxcdGhlbHBcXG4gODU5OlxcdFxcdCAgVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gYXR0YWNoIEJQRiBwcm9ncmFtcyB0byBrcHJvYmUsIHVwcm9iZSwgYW5kXFxuIDg2MDpcXHRcXHQgIHRyYWNlcG9pbnQgZXZlbnRzLlxcbiA4NjE6XFx0XFxuIDg2MjpcXHRjb25maWcgRFlOQU1JQ19FVkVOVFNcXG4gODYzOlxcdFxcdGRlZl9ib29sIG5cXG4gODY0OlxcdFxcbiA4NjU6XFx0Y29uZmlnIFBST0JFX0VWRU5UU1xcbiA4NjY6XFx0XFx0ZGVmX2Jvb2wgblxcbiA4Njc6XFx0XFxuIDg2ODpcXHRjb25maWcgQlBGX0tQUk9CRV9PVkVSUklERVxcbiA4Njk6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBwcm9ncmFtcyB0byBvdmVycmlkZSBhIGtwcm9iZWQgZnVuY3Rpb25cXFwiXFxuIDg3MDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9FVkVOVFNcXG4gODcxOlxcdFxcdGRlcGVuZHMgb24gRlVOQ1RJT05fRVJST1JfSU5KRUNUSU9OXFxuIDg3MjpcXHRcXHRkZWZhdWx0IG5cXG4gODczOlxcdFxcdGhlbHBcXG4gODc0OlxcdFxcdCBBbGxvd3MgQlBGIHRvIG92ZXJyaWRlIHRoZSBleGVjdXRpb24gb2YgYSBwcm9iZWQgZnVuY3Rpb24gYW5kXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjUxLjE3MzMzMTIxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyMDM5NDAwMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIEJQRiBTaWduYWwgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcsIGJleW9uZCB0aGUgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uLCB3ZSBzaG91bGQgZG91YmxlLWNoZWNrIHNvbWV0aGluZyBjcnVjaWFsLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgaWYgdGhlIGZ1bmN0aW9uIGBicGZfc2VuZF9zaWduYWxfdGFza2AgaW4gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgaXMgd3JhcHBlZCB3aXRoaW4gYW55IHByZXByb2Nlc3NvciBgI2lmZGVmYCBkaXJlY3RpdmVzLiBUaGF0J3MgYSBjbGFzc2ljIGdvdGNoYSwgYW5kIGl0IGNvdWxkIGRyYW1hdGljYWxseSBhbHRlciBpdHMgYXZhaWxhYmlsaXR5IGRlcGVuZGluZyBvbiB0aGUga2VybmVsIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEkndmUgZ290IGEgaHVuY2ggaXQgbWlnaHQgYmUsIGFuZCBpZiBzbywgaXQncyBnb2luZyB0byBpbmZsdWVuY2Ugb3VyIGFuYWx5c2lzIGdyZWF0bHkuIFNvLCBsZXQgbWUganVtcCBvdmVyIHRvIGxpbmUgMzYxNiBpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBhbmQgdGFrZSBhIGdvb2QgbG9vayBhcm91bmQgdGhhdCBhcmVhLiBOZWVkIHRvIHNlZSBpZiBpdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDc2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozOTo1Ni4zNzcyNzM4NzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNjEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNjEwOlxcdHtcXG4zNjExOlxcdFxcdHJldHVybiBzdHJuY3B5X2Zyb21fa2VybmVsX25vZmF1bHQoZHN0LCB1bnNhZmVfc3JjLCBzaXplKTtcXG4zNjEyOlxcdH1cXG4zNjEzOlxcdFxcbjM2MTQ6XFx0X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbjM2MTU6XFx0XFxuMzYxNjpcXHRfX2JwZl9rZnVuYyBpbnQgYnBmX3NlbmRfc2lnbmFsX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgc2lnLCBlbnVtIHBpZF90eXBlIHR5cGUsXFxuMzYxNzpcXHRcXHRcXHRcXHRcXHQgICAgIHU2NCB2YWx1ZSlcXG4zNjE4OlxcdHtcXG4zNjE5OlxcdFxcdGlmICh0eXBlICE9IFBJRFRZUEVfUElEIFxcdTAwMjZcXHUwMDI2IHR5cGUgIT0gUElEVFlQRV9UR0lEKVxcbjM2MjA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzYyMTpcXHRcXG4zNjIyOlxcdFxcdHJldHVybiBicGZfc2VuZF9zaWduYWxfY29tbW9uKHNpZywgdHlwZSwgdGFzaywgdmFsdWUpO1xcbjM2MjM6XFx0fVxcbjM2MjQ6XFx0XFxuMzYyNTpcXHRfX2JwZl9rZnVuYyBpbnQgYnBmX3Byb2JlX3JlYWRfdXNlcl9keW5wdHIoY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRwdHIsIHU2NCBvZmYsXFxuMzYyNjpcXHRcXHRcXHRcXHRcXHRcXHQgICB1NjQgc2l6ZSwgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbilcXG4zNjI3OlxcdHtcXG4zNjI4OlxcdFxcdHJldHVybiBfX2JwZl9keW5wdHJfY29weShkcHRyLCBvZmYsIHNpemUsIChjb25zdCB2b2lkIF9fZm9yY2UgKil1bnNhZmVfcHRyX19pZ24sXFxuMzYyOTpcXHRcXHRcXHRcXHRcXHQgY29weV91c2VyX2RhdGFfbm9mYXVsdCwgTlVMTCk7XFxuMzYzMDpcXHR9XFxuMzYzMTpcXHRcXG4zNjMyOlxcdF9fYnBmX2tmdW5jIGludCBicGZfcHJvYmVfcmVhZF9rZXJuZWxfZHlucHRyKGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpkcHRyLCB1NjQgb2ZmLFxcbjM2MzM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB1NjQgc2l6ZSwgY29uc3Qgdm9pZCAqdW5zYWZlX3B0cl9faWduKVxcbjM2MzQ6XFx0e1xcbjM2MzU6XFx0XFx0cmV0dXJuIF9fYnBmX2R5bnB0cl9jb3B5KGRwdHIsIG9mZiwgc2l6ZSwgdW5zYWZlX3B0cl9faWduLFxcbjM2MzY6XFx0XFx0XFx0XFx0XFx0IGNvcHlfa2VybmVsX2RhdGFfbm9mYXVsdCwgTlVMTCk7XFxuMzYzNzpcXHR9XFxuMzYzODpcXHRcXG4zNjM5OlxcdF9fYnBmX2tmdW5jIGludCBicGZfcHJvYmVfcmVhZF91c2VyX3N0cl9keW5wdHIoY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRwdHIsIHU2NCBvZmYsXFxuMzY0MDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgdTY0IHNpemUsIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24pXFxuMzY0MTpcXHR7XFxuMzY0MjpcXHRcXHRyZXR1cm4gX19icGZfZHlucHRyX2NvcHlfc3RyKGRwdHIsIG9mZiwgc2l6ZSwgKGNvbnN0IHZvaWQgX19mb3JjZSAqKXVuc2FmZV9wdHJfX2lnbixcXG4zNjQzOlxcdFxcdFxcdFxcdFxcdCAgICAgY29weV91c2VyX3N0cl9ub2ZhdWx0LCBOVUxMKTtcXG4zNjQ0OlxcdH1cXG4zNjQ1OlxcdFxcbjM2NDY6XFx0X19icGZfa2Z1bmMgaW50IGJwZl9wcm9iZV9yZWFkX2tlcm5lbF9zdHJfZHlucHRyKGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpkcHRyLCB1NjQgb2ZmLFxcbjM2NDc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHU2NCBzaXplLCBjb25zdCB2b2lkICp1bnNhZmVfcHRyX19pZ24pXFxuMzY0ODpcXHR7XFxuMzY0OTpcXHRcXHRyZXR1cm4gX19icGZfZHlucHRyX2NvcHlfc3RyKGRwdHIsIG9mZiwgc2l6ZSwgdW5zYWZlX3B0cl9faWduLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozOTo1Ni4zNzc0Mjk1OTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAyODM1MjgwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuXG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgRGVwZW5kZW5jaWVzIGluIGBicGZfdHJhY2UuY2AqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IGRlcGVuZGVuY2llcywgc28gSSdtIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgYnBmX3RyYWNlLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBjbGFyaWZ5IGlmIHRoZSBga2Z1bmNzYCB3aXRoaW4gdGhhdCBmaWxlIGhhdmUgYW55IGRlcGVuZGVuY2llcyBvbiBCVEYgKEJURiBiZWluZyBlc3NlbnRpYWwgZm9yIHR5cGUgaW5mb3JtYXRpb24gaW4gQlBGIHByb2dyYW1zKSwgb3IgcG9zc2libHkgb3RoZXIga2VybmVsIGNvbmZpZ3VyYXRpb25zIGxpa2UgYENPTkZJR19CUEZfU1lTQ0FMTGAgKHdoaWNoIGVuYWJsZXMgdGhlIEJQRiBzeXNjYWxsIGl0c2VsZikgb3IgYENPTkZJR19ERUJVR19JTkZPX0JURmAgKHdoaWNoIGltcGFjdHMgdGhlIGF2YWlsYWJpbGl0eSBhbmQgY29tcGxldGVuZXNzIG9mIEJURiBkYXRhKS4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgcG9ydGFiaWxpdHkgYW5kIGVuc3VyaW5nIHRoaW5ncyB3b3JrIGFzIGV4cGVjdGVkLlxuXG5CZXlvbmQgdGhhdCwgSSBhbHNvIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYGJwZl9zZW5kX3NpZ25hbF90YXNrYCBmdW5jdGlvbi4gSXQncyBhIGtleSBwcmltaXRpdmUgZm9yIGludGVyLXByb2Nlc3Mgc2lnbmFsaW5nIHdpdGhpbiBCUEYgcHJvZ3JhbXMsIHNvIGtub3dpbmcgd2hlcmUgaXQncyByZWdpc3RlcmVkIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHNpZ25hbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEyMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6Mzk6NTguNDA1Nzg1ODcxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzEzMzg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc2VuZF9zaWduYWxfdGFza1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zNjE0PV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzYxNS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzYxNjpfX2JwZl9rZnVuYyBpbnQgYnBmX3NlbmRfc2lnbmFsX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgc2lnLCBlbnVtIHBpZF90eXBlIHR5cGUsXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM2MTctXFx0XFx0XFx0XFx0ICAgICB1NjQgdmFsdWUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjU4LjQ1MjkyNTQxOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTc2NzM4OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgdGhlIGtmdW5jIFJlZ2lzdHJhdGlvbnMgaW4gYnBmX3RyYWNlLmMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gYGJwZl90cmFjZS5jYCB0byB1bmRlcnN0YW5kIHRoZSBrZnVuYyByZWdpc3RyYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIEJURiAoQlBGIFR5cGUgRm9ybWF0KSBrZnVuYyBzZXQuIEkgd2FudCB0byBwaW5wb2ludCBleGFjdGx5IHdoZXJlIGFuZCBob3cgdGhlc2Uga2VybmVsIGZ1bmN0aW9ucyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoYXQgQlRGIGluZnJhc3RydWN0dXJlLiBJdCdzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBCUEYgdmVyaWZpZXIgaGFuZGxlcyB0aGVzZSBmdW5jdGlvbiBjYWxscyBhbmQgaG93IHdlIGV4cG9zZSB0aGVtIHRvIHVzZXJzcGFjZS4gSSBuZWVkIHRvIHRyYWNlIHRoZSByZWdpc3RyYXRpb24gcG9pbnRzIHRvIGhhdmUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBrZnVuY3MgYXJlIG1hZGUgYXZhaWxhYmxlIGZvciB1c2UgaW4gQlBGIHByb2dyYW1zLiBUaGlzIGluY2x1ZGVzIGlkZW50aWZ5aW5nIHRoZSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgYW5kIG1lY2hhbmlzbXMgaW52b2x2ZWQuIEknbSBsb29raW5nIGZvciB0aGUgcmVnaXN0cmF0aW9uIG1lY2hhbmlzbXMgdG8gc2VlIGhvdyB0aGUgQlRGIGluZm9ybWF0aW9uIGlzIGNvbnN0cnVjdGVkIGFuZCBwb3B1bGF0ZWQsIGFzIHdlbGwgYXMgY29uc2lkZXJpbmcgcG90ZW50aWFsIGltcGFjdHMgb24gdmVyaWZpZXIgcGVyZm9ybWFuY2UgYW5kIGtmdW5jIHVzYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NjIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDowMS4wMjk2NjcyNDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAyNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNjUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNjUwOlxcdFxcdFxcdFxcdFxcdCAgICAgY29weV9rZXJuZWxfc3RyX25vZmF1bHQsIE5VTEwpO1xcbjM2NTE6XFx0fVxcbjM2NTI6XFx0XFxuMzY1MzpcXHRfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX2R5bnB0cihjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZHB0ciwgdTY0IG9mZixcXG4zNjU0OlxcdFxcdFxcdFxcdFxcdFxcdCAgdTY0IHNpemUsIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24pXFxuMzY1NTpcXHR7XFxuMzY1NjpcXHRcXHRyZXR1cm4gX19icGZfZHlucHRyX2NvcHkoZHB0ciwgb2ZmLCBzaXplLCAoY29uc3Qgdm9pZCBfX2ZvcmNlICopdW5zYWZlX3B0cl9faWduLFxcbjM2NTc6XFx0XFx0XFx0XFx0XFx0IGNvcHlfdXNlcl9kYXRhX3NsZWVwYWJsZSwgTlVMTCk7XFxuMzY1ODpcXHR9XFxuMzY1OTpcXHRcXG4zNjYwOlxcdF9fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfc3RyX2R5bnB0cihjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZHB0ciwgdTY0IG9mZixcXG4zNjYxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHU2NCBzaXplLCBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduKVxcbjM2NjI6XFx0e1xcbjM2NjM6XFx0XFx0cmV0dXJuIF9fYnBmX2R5bnB0cl9jb3B5X3N0cihkcHRyLCBvZmYsIHNpemUsIChjb25zdCB2b2lkIF9fZm9yY2UgKil1bnNhZmVfcHRyX19pZ24sXFxuMzY2NDpcXHRcXHRcXHRcXHRcXHQgICAgIGNvcHlfdXNlcl9zdHJfc2xlZXBhYmxlLCBOVUxMKTtcXG4zNjY1OlxcdH1cXG4zNjY2OlxcdFxcbjM2Njc6XFx0X19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX2R5bnB0cihjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZHB0ciwgdTY0IG9mZixcXG4zNjY4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICB1NjQgc2l6ZSwgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbixcXG4zNjY5OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4zNjcwOlxcdHtcXG4zNjcxOlxcdFxcdHJldHVybiBfX2JwZl9keW5wdHJfY29weShkcHRyLCBvZmYsIHNpemUsIChjb25zdCB2b2lkIF9fZm9yY2UgKil1bnNhZmVfcHRyX19pZ24sXFxuMzY3MjpcXHRcXHRcXHRcXHRcXHQgY29weV91c2VyX2RhdGFfc2xlZXBhYmxlLCB0c2spO1xcbjM2NzM6XFx0fVxcbjM2NzQ6XFx0XFxuMzY3NTpcXHRfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyX2R5bnB0cihjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZHB0ciwgdTY0IG9mZixcXG4zNjc2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHU2NCBzaXplLCBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLFxcbjM2Nzc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuMzY3ODpcXHR7XFxuMzY3OTpcXHRcXHRyZXR1cm4gX19icGZfZHlucHRyX2NvcHlfc3RyKGRwdHIsIG9mZiwgc2l6ZSwgKGNvbnN0IHZvaWQgX19mb3JjZSAqKXVuc2FmZV9wdHJfX2lnbixcXG4zNjgwOlxcdFxcdFxcdFxcdFxcdCAgICAgY29weV91c2VyX3N0cl9zbGVlcGFibGUsIHRzayk7XFxuMzY4MTpcXHR9XFxuMzY4MjpcXHRcXG4zNjgzOlxcdF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XFxuMzY4NDpcXHRcXG4zNjg1OlxcdCNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUykgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbjM2ODY6XFx0ICAgIGRlZmluZWQoQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTKVxcbjM2ODc6XFx0XFxuMzY4ODpcXHRzdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbjM2ODk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDowMS4wMjk4NzEyNjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzODkyMzAwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUga2Z1bmMgQlRGIElEIFNldCoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIHRoZSBrZnVuYyBCVEYgSUQgc2V0IGlzIGFjdHVhbGx5IGRlZmluZWQgYW5kL29yIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBzdGFydCBwb2tpbmcgYXJvdW5kIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBJdCdzIHRoZSBsb2dpY2FsIHBsYWNlLCBnaXZlbiB0aGUgY29udGV4dCBvZiBCUEYgYW5kIHRyYWNpbmcuIEknbSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgdGhlIHNldCdzIGRlY2xhcmF0aW9uLCBpdHMgaW5pdGlhbGl6YXRpb24sIGFuZCBpbXBvcnRhbnRseSwgdGhlIG1lY2hhbmlzbXMgcmVzcG9uc2libGUgZm9yIHBvcHVsYXRpbmcgYW5kIHVzaW5nIHRoaXMgZGF0YSBzdHJ1Y3R1cmUuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBCVEYgSURzIGZvciBrZnVuY3MgYXJlIGxpbmtlZCB0byB0aGVpciBjb3JyZXNwb25kaW5nIGtlcm5lbCBmdW5jdGlvbnMgd2l0aGluIHRoaXMgY29kZWJhc2UuIEl0IHdpbGwgYmUgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgaXMgYSBjZW50cmFsaXplZCByZWdpc3RyYXRpb24gb3IgbWFuYWdlbWVudCBwcm9jZXNzIGhhcHBlbmluZy4gRXNzZW50aWFsbHksIEkgbmVlZCB0byBzZWUgdGhlIGxpZmVjeWNsZSBvZiB0aGF0IGtmdW5jIEJURiBJRCBzZXQgZnJvbSBjcmVhdGlvbiB0byB1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTk5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDowMi44Njg3OTY1ODZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMDI4NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzQ2Mj1zdGF0aWMgaW50IF9faW5pdCBicGZfdHJhY2Vfa2Z1bmNzX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNDY1LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNDY2OlxcdGVyciA9IGVyciA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfS1BST0JFLCBcXHUwMDI2YnBmX3Nlc3Npb25fa2Z1bmNfc2V0KTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzQ2NzpcXHRlcnIgPSBlcnIgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFxcdTAwMjZicGZfc2Vzc2lvbl9rZnVuY19zZXQpO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNDY4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDowMi45MTk4MzE5ODVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAzOTUwNzI1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuXG5cbioqVHJhY2luZyBEb3duIHRoZSBCUEYgU2lnbmFsIFBhdGgqKlxuXG5BbHJpZ2h0LCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBicGZfc2VuZF9zaWduYWxfdGFza2AgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZyb20uIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byBjaGVjayB0aGUgQlBGIHRyYWNlcG9pbnQgaW5pdGlhbGl6YXRpb24sIHNvIEknbSBsb29raW5nIGF0IGBicGZfdHJhY2Vfa2Z1bmNzX2luaXRgIG9yIHBvdGVudGlhbGx5IHRoZSBCVEZfU0VUOCBpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gQnV0IHRoYXQncyBqdXN0IGEgc3RhcnRpbmcgcG9pbnQuIFRvIGdldCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSBpdCdzIGFjdHVhbGx5IHVzZWQgd2l0aGluIHRoZSBrZXJuZWwsIEkgbmVlZCB0byBkbyBhIGJyb2FkZXIgc2VhcmNoLiBUaW1lIHRvIGZpcmUgdXAgYSBncmVwIGFjcm9zcyB0aGUgZW50aXJlIGNvZGViYXNlIGFuZCBsb29rIGZvciBldmVyeSBpbnN0YW5jZSBvZiBgYnBmX3NlbmRfc2lnbmFsX3Rhc2tgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBsYXkgb2YgdGhlIGxhbmQgYW5kIHBpbnBvaW50IHRoZSBjcml0aWNhbCBjYWxsIHNpdGVzLiBIb3BlZnVsbHksIHRoYXQgZ2l2ZXMgbWUgdGhlIGNvbnRleHQgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA0OCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjQwOjA0Ljk1OTM0MTM2MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyNDc5NDgxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc2VuZF9zaWduYWxfdGFza1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hlbHBlcnMuYz00ODU0PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGhyb3cpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDg1NS0jaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODU2OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfc2VuZF9zaWduYWxfdGFzaylcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODU3LSNlbmRpZlxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM2MTQ9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjE1LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNjE2Ol9fYnBmX2tmdW5jIGludCBicGZfc2VuZF9zaWduYWxfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBzaWcsIGVudW0gcGlkX3R5cGUgdHlwZSxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzYxNy1cXHRcXHRcXHRcXHQgICAgIHU2NCB2YWx1ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uYz04PXZvaWQgYnBmX3Rhc2tfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmM6OTppbnQgYnBmX3NlbmRfc2lnbmFsX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgc2lnLCBlbnVtIHBpZF90eXBlIHR5cGUsIHU2NCB2YWx1ZSkgX19rc3ltO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uYy0xMC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uYz0xMz1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBicGZfc2VuZF9zaWduYWxfdGVzdCh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmMtMzEtXFx0XFx0XFx0aWYgKHRhcmdldF9waWQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jOjMyOlxcdFxcdFxcdFxcdHJldCA9IGJwZl9zZW5kX3NpZ25hbF90YXNrKHRhcmdldF90YXNrLCBzaWcsIFBJRFRZUEVfUElELCB2YWx1ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jLTMzLVxcdFxcdFxcdGVsc2VcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uYy0zNi1cXHRcXHRcXHRpZiAodGFyZ2V0X3BpZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmM6Mzc6XFx0XFx0XFx0XFx0cmV0ID0gYnBmX3NlbmRfc2lnbmFsX3Rhc2sodGFyZ2V0X3Rhc2ssIHNpZywgUElEVFlQRV9UR0lELCB2YWx1ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jLTM4LVxcdFxcdFxcdGVsc2VcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlbmRfc2lnbmFsX2tlcm4uYz02OD1pbnQgc2VuZF9zaWduYWxfa3dvcmtlcih2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmMtNzktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jOjgwOlxcdHJldCA9IGJwZl9zZW5kX3NpZ25hbF90YXNrKHRhcmdldF90YXNrLCBzaWcsIFBJRFRZUEVfVEdJRCwgOCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jLTgxLVxcdGJwZl90YXNrX3JlbGVhc2UodGFyZ2V0X3Rhc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDowNi41ODQxNDA0NzhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ2NDMyNTM0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgYnBmX3NlbmRfc2lnbmFsX3Rhc2tgIEZ1bmN0aW9uJ3MgQXZhaWxhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGJwZl9zZW5kX3NpZ25hbF90YXNrYCB3aXRoaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gaG93IGl0cyBjb21waWxhdGlvbiBpcyBjb250cm9sbGVkOyBpdCBsb29rcyBsaWtlIGl0J3MgcHJvdGVjdGVkIGJ5IGFuIGAjaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNgLiBUaW1lIHRvIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzLiBMZXQncyBzZWUsIGBCUEZfRVZFTlRTYCBuZWVkcyBgQlBGX1NZU0NBTExgLCBhbmQgZWl0aGVyIGBQRVJGX0VWRU5UU2AgYWxvbmcgd2l0aCBlaXRoZXIgYEtQUk9CRV9FVkVOVFNgIG9yIGBVUFJPQkVfRVZFTlRTYC4gR290IGl0LlxuXG5Ob3csIGEgbmFnZ2luZyBmZWVsaW5nIHRlbGxzIG1lIHRoZXJlJ3Mgc29tZXRoaW5nIGFib3V0IEJURiByZXF1aXJlZCBmb3Iga2Z1bmNzLCBzbyBJJ2xsIGRvdWJsZS1jaGVjayBgQ09ORklHX0RFQlVHX0lORk9fQlRGYC4gSSBzaG91bGQgY2hlY2sgaWYgQlRGIGlzLCBpbiBmYWN0LCByZXF1aXJlZCBmb3Iga2Z1bmNzLiBJIGNhbid0IHF1aXRlIHJlY2FsbCBpZiBpdCdzIHN0cmljdGx5IGEgZGVwZW5kZW5jeSBvciBqdXN0IGEgZ29vZC10by1oYXZlLCBhbmQgSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdC5cblxuQWxyaWdodCwgSSdsbCBnbyBjaGVjayBga2VybmVsL2JwZi9oZWxwZXJzLmNgIGFyb3VuZCBsaW5lIDQ4NTAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTQ5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjQwOjEyLjA0ODQ2OTE2MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9oZWxwZXJzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDg0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDg0MDpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JidHJlZV9yb290LCBLRl9SRVRfTlVMTCB8IEtGX1NQSU5MT0NLX1NBRkUpXFxuNDg0MTpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JidHJlZV9sZWZ0LCBLRl9SRVRfTlVMTCB8IEtGX1NQSU5MT0NLX1NBRkUpXFxuNDg0MjpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JidHJlZV9yaWdodCwgS0ZfUkVUX05VTEwgfCBLRl9TUElOTE9DS19TQUZFKVxcbjQ4NDM6XFx0XFxuNDg0NDpcXHQjaWZkZWYgQ09ORklHX0NHUk9VUFNcXG40ODQ1OlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY2dyb3VwX2FjcXVpcmUsIEtGX0FDUVVJUkUgfCBLRl9SQ1UgfCBLRl9SRVRfTlVMTClcXG40ODQ2OlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY2dyb3VwX3JlbGVhc2UsIEtGX1JFTEVBU0UpXFxuNDg0NzpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2Nncm91cF9hbmNlc3RvciwgS0ZfQUNRVUlSRSB8IEtGX1JDVSB8IEtGX1JFVF9OVUxMKVxcbjQ4NDg6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jZ3JvdXBfZnJvbV9pZCwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKVxcbjQ4NDk6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90YXNrX3VuZGVyX2Nncm91cCwgS0ZfUkNVKVxcbjQ4NTA6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90YXNrX2dldF9jZ3JvdXAxLCBLRl9BQ1FVSVJFIHwgS0ZfUkNVIHwgS0ZfUkVUX05VTEwpXFxuNDg1MTpcXHQjZW5kaWZcXG40ODUyOlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGFza19mcm9tX3BpZCwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKVxcbjQ4NTM6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90YXNrX2Zyb21fdnBpZCwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKVxcbjQ4NTQ6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90aHJvdylcXG40ODU1OlxcdCNpZmRlZiBDT05GSUdfQlBGX0VWRU5UU1xcbjQ4NTY6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zZW5kX3NpZ25hbF90YXNrKVxcbjQ4NTc6XFx0I2VuZGlmXFxuNDg1ODpcXHQjaWZkZWYgQ09ORklHX0tFWVNcXG40ODU5OlxcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfbG9va3VwX3VzZXJfa2V5LCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXFxuNDg2MDpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2xvb2t1cF9zeXN0ZW1fa2V5LCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwpXFxuNDg2MTpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tleV9wdXQsIEtGX1JFTEVBU0UpXFxuNDg2MjpcXHQjaWZkZWYgQ09ORklHX1NZU1RFTV9EQVRBX1ZFUklGSUNBVElPTlxcbjQ4NjM6XFx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl92ZXJpZnlfcGtjczdfc2lnbmF0dXJlLCBLRl9TTEVFUEFCTEUpXFxuNDg2NDpcXHQjZW5kaWZcXG40ODY1OlxcdCNlbmRpZlxcbjQ4NjY6XFx0I2lmZGVmIENPTkZJR19TMzkwXFxuNDg2NzpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2dldF9sb3djb3JlKVxcbjQ4Njg6XFx0I2VuZGlmXFxuNDg2OTpcXHRCVEZfS0ZVTkNTX0VORChnZW5lcmljX2J0Zl9pZHMpXFxuNDg3MDpcXHRcXG40ODcxOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBnZW5lcmljX2tmdW5jX3NldCA9IHtcXG40ODcyOlxcdFxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbjQ4NzM6XFx0XFx0LnNldCAgID0gXFx1MDAyNmdlbmVyaWNfYnRmX2lkcyxcXG40ODc0OlxcdH07XFxuNDg3NTpcXHRcXG40ODc2OlxcdEJURl9JRF9MSVNUKGdlbmVyaWNfZHRvcl9pZHMpXFxuNDg3NzpcXHRCVEZfSUQoc3RydWN0LCB0YXNrX3N0cnVjdClcXG40ODc4OlxcdEJURl9JRChmdW5jLCBicGZfdGFza19yZWxlYXNlX2R0b3IpXFxuNDg3OTpcXHQjaWZkZWYgQ09ORklHX0NHUk9VUFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6MTIuMDQ4Njg1OTkyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg3OTA4NTAyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYGJwZl9zZW5kX3NpZ25hbF90YXNrYCBhbmQgUmVsZXZhbnQgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgYnBmX3NlbmRfc2lnbmFsX3Rhc2tgIGlzIGEgbm9uLXN0YXRpYyBrZXJuZWwgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIGl0IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIGZ1bmN0aW9ucywgZXNwZWNpYWxseSByZWdhcmRpbmcgc2lnbmFsIGRlbGl2ZXJ5LiBJIHNlZSB0aGF0IGBicGZfc2VuZF9zaWduYWxfY29tbW9uYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGdvb2QgdG8ga25vdywgYW5kIGBicGZfc2VuZF9zaWduYWxgIGFuZCBgYnBmX3NlbmRfc2lnbmFsX3RocmVhZGAgYm90aCBjYWxsIGBicGZfc2VuZF9zaWduYWxfY29tbW9uYC4gSG93ZXZlciwgaW1wb3J0YW50bHksIHRoZXNlIGxhdHRlciB0d28gcGFzcyBgTlVMTGAgYXMgdGhlIGB0YXNrYCBhcmd1bWVudCwgd2hpY2ggcmVzb2x2ZXMgdG8gdGhlIGN1cnJlbnQgdGFzay5cblxuTm93LCBgYnBmX3NlbmRfc2lnbmFsX3Rhc2tgIGlzIHRoZSBjcml0aWNhbCBrZnVuYyBoZXJlIGJlY2F1c2UgaXQgYWxsb3dzIGRpcmVjdCBzaWduYWwgZGVsaXZlcnkgdG8gKmFueSogYHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza2AsIG5vdCBqdXN0IHRoZSBjdXJyZW50IG9uZS4gVGhpcyBpcyBrZXksIGVzcGVjaWFsbHkgYmVjYXVzZSBpdCByZWxhdGVzIGRpcmVjdGx5IHRvIHRoYXQgYG5taV91YWNjZXNzX29rYXkoKWAgY2hlY2sgdGhhdOKAmXMgYXQgdGhlIGhlYXJ0IG9mIHRoaXMgcHJvYmxlbSB3aGVuIGB0YXNrICE9IGN1cnJlbnRgLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBlbnRpcmUgcmVhc29uIHRoZSBmaXggZm9yIHRoYXQgc3BlY2lmaWMgc2lnbmFsIGRlbGl2ZXJ5IGlzc3VlIGlzIHZhbHVhYmxlLlxuXG5OZXh0LCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbnMuIGBCUEZfRVZFTlRTYCwgYEJQRl9TWVNDQUxMYCwgYERFQlVHX0lORk9fQlRGYCwgYFBFUkZfRVZFTlRTYCwgYW5kIGBLUFJPQkVfRVZFTlRTYCBhcmUgYWxsIHJlbGV2YW50LiBMb29raW5nIGF0IGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AsIGl0J3MgY2xlYXIgdGhhdCBlbmFibGluZyBgQlBGX1NZU0NBTExgLCBgUEVSRl9FVkVOVFNgLCBhbmQgYEtQUk9CRV9FVkVOVFNgIChvciBgQlBGX0VWRU5UU2ApIGlzIHJlcXVpcmVkLiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgQlBGLWJhc2VkIHNpZ25hbCBkZWxpdmVyeS5cblxuU28sIGxldCdzIHN1bW1hcml6ZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zOiBgQlBGX1NZU0NBTExgLCBgQlBGX0VWRU5UU2AsIGFuZCBgREVCVUdfSU5GT19CVEZgLlxuXG5UaGVyZWZvcmUsIHRoZSB2ZXJkaWN0IGlzIGBXb3J0aEZ1enppbmc6IHRydWVgLCBiZWNhdXNlIG9mIHRoZSBmb2N1cyBvbiBgYnBmX3NlbmRfc2lnbmFsX3Rhc2tgLCBhbmQgYWxsIHRoYXQgbWFrZXMgaXQgaW50ZXJlc3RpbmcgdG8gZnV6eiBhbmQgYmVjYXVzZSB0aGUgQlBGIGNvbmZpZ3VyYXRpb25zIGFyZSBhcHByb3ByaWF0ZSBmb3IgdGhpcyB0eXBlIG9mIHRlc3QuIEkgYW0gcmVhZHkgdG8gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MzAsIk91dHB1dFRva2VucyI6MTQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6MjAuODM5NTM4MzE3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAwNDAxOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zZW5kX3NpZ25hbF90YXNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbigpIHRvIG9ubHkgZW5mb3JjZSBubWlfdWFjY2Vzc19va2F5KCkgd2hlbiB0aGUgdGFyZ2V0IHRhc2sgaXMgY3VycmVudC4gVGhpcyBlbmFibGVzIEJQRiBwcm9ncmFtcyAoc3VjaCBhcyB0aG9zZSBydW5uaW5nIGluIGt3b3JrZXIvdHJhY2Vwb2ludCBjb250ZXh0KSB0byBzdWNjZXNzZnVsbHkgaW52b2tlIHRoZSBicGZfc2VuZF9zaWduYWxfdGFzayBrZnVuYyBvbiBub24tY3VycmVudCB0YXNrcy4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIGtlcm5lbCBleGVjdXRpb24gbG9naWMgZm9yIEJQRiBzaWduYWwgZGVsaXZlcnkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9FVkVOVFNcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NlbmRfc2lnbmFsX3Rhc2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBicGZfc2VuZF9zaWduYWxfY29tbW9uKCkgdG8gb25seSBlbmZvcmNlIG5taV91YWNjZXNzX29rYXkoKSB3aGVuIHRoZSB0YXJnZXQgdGFzayBpcyBjdXJyZW50LiBUaGlzIGVuYWJsZXMgQlBGIHByb2dyYW1zIChzdWNoIGFzIHRob3NlIHJ1bm5pbmcgaW4ga3dvcmtlci90cmFjZXBvaW50IGNvbnRleHQpIHRvIHN1Y2Nlc3NmdWxseSBpbnZva2UgdGhlIGJwZl9zZW5kX3NpZ25hbF90YXNrIGtmdW5jIG9uIG5vbi1jdXJyZW50IHRhc2tzLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMga2VybmVsIGV4ZWN1dGlvbiBsb2dpYyBmb3IgQlBGIHNpZ25hbCBkZWxpdmVyeS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6MjAuOTE5NTg2NzE1WiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDIxOTI0MzQ2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjQwOjIwLjkyMDE2OTMxNVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIwMjE4NjU2NjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBhIGNoZWNrIGluIGBicGZfc2VuZF9zaWduYWxfY29tbW9uKClgIHNvIHRoYXQgYG5taV91YWNjZXNzX29rYXkoKWAgaXMgb25seSBldmFsdWF0ZWQgd2hlbiBgdGFzayA9PSBjdXJyZW50YCwgYWxsb3dpbmcgQlBGIHByb2dyYW1zIHJ1bm5pbmcgaW4ga3RocmVhZC9rd29ya2VyIGNvbnRleHQgdG8gc2VuZCBzaWduYWxzIHRvIG90aGVyIHRhcmdldCB0YXNrcyB2aWEgYGJwZl9zZW5kX3NpZ25hbF90YXNrKClgLiBJdCBhbHNvIGFkZHMgYSBCUEYgc2VsZnRlc3QuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgbGVuZ3RocywgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGNvcHktdG8tdXNlciBvcGVyYXRpb25zLiBBbnkgcmVsYXRlZCB0YXNrIGxpZmV0aW1lIG9yIHJlZmVyZW5jZSBjb3VudGluZyBjb25jZXJucyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCB0cmFja2luZy4gQXMgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NmQ2NGYyM2QzYmY5OGE0MDFmOTQ1OGY2YThkOGNlYzI1Y2EyZGE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxMDozOToxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuaW5kZXggMjkyNjA5NTFhYTg3MS4uZjdhNDFmMjIyNTk5OSAxMDA2NDRcbi0tLSBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuKysrIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG5AQCAtODcxLDcgKzg3MSwxMCBAQCBzdGF0aWMgaW50IGJwZl9zZW5kX3NpZ25hbF9jb21tb24odTMyIHNpZywgZW51bSBwaWRfdHlwZSB0eXBlLCBzdHJ1Y3QgdGFza19zdHJ1Y1xuIFx0ICovXG4gXHRpZiAodW5saWtlbHkodGFzay1cdTAwM2VmbGFncyBcdTAwMjYgKFBGX0tUSFJFQUQgfCBQRl9FWElUSU5HKSkpXG4gXHRcdHJldHVybiAtRVBFUk07XG4tXHRpZiAodW5saWtlbHkoIW5taV91YWNjZXNzX29rYXkoKSkpXG4rXHQvKiBTaW5jZSBubWlfdWFjY2Vzc19va2F5KCkgaXMgb25seSBmb3IgdGhlIGN1cnJlbnRcbitcdCAqIHRhc2ssIGNoZWNrIGlmIHRhc2sgaXMgY3VycmVudC5cbitcdCAqL1xuK1x0aWYgKHRhc2sgPT0gY3VycmVudCBcdTAwMjZcdTAwMjYgdW5saWtlbHkoIW5taV91YWNjZXNzX29rYXkoKSkpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXHQvKiBUYXNrIHNob3VsZCBub3QgYmUgcGlkPTEgdG8gYXZvaWQga2VybmVsIHBhbmljLiAqL1xuIFx0aWYgKHVubGlrZWx5KGlzX2dsb2JhbF9pbml0KHRhc2spKSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZW5kX3NpZ25hbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VuZF9zaWduYWwuY1xuaW5kZXggN2FjNGQ1YTQ4OGFhNS4uZjlkZDIzZGIxZWY5OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlbmRfc2lnbmFsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlbmRfc2lnbmFsLmNcbkBAIC0yNjEsNiArMjYxLDEwOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NlbmRfc2lnbmFsX25taShib29sIHNpZ25hbF90aHJlYWQsIGJvb2wgcmVtb3RlKVxuIFx0dGVzdF9zZW5kX3NpZ25hbF9jb21tb24oXHUwMDI2YXR0ciwgc2lnbmFsX3RocmVhZCwgcmVtb3RlKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdGVzdF9zZW5kX3NpZ25hbF9rd29ya2VyKHZvaWQpXG4re1xuK1x0c3RydWN0IHRlc3Rfc2VuZF9zaWduYWxfa2VybiAqc2tlbDtcbitcdGludCBwaXBlX2MycFsyXSwgcGlwZV9wMmNbMl07XG4rXHRzdHJ1Y3Qgc2lnYWN0aW9uIHNhID0ge307XG4rXHRjaGFyIGJ1ZlsyNTZdO1xuK1x0aW50IGVyciA9IC0xO1xuK1x0cGlkX3QgcGlkO1xuK1xuK1x0aWYgKCFBU1NFUlRfT0socGlwZShwaXBlX2MycCksIFwicGlwZV9jMnBcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICghQVNTRVJUX09LKHBpcGUocGlwZV9wMmMpLCBcInBpcGVfcDJjXCIpKSB7XG4rXHRcdGNsb3NlKHBpcGVfYzJwWzBdKTtcbitcdFx0Y2xvc2UocGlwZV9jMnBbMV0pO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRwaWQgPSBmb3JrKCk7XG4rXHRpZiAoIUFTU0VSVF9HRShwaWQsIDAsIFwiZm9ya1wiKSkge1xuK1x0XHRjbG9zZShwaXBlX2MycFswXSk7XG4rXHRcdGNsb3NlKHBpcGVfYzJwWzFdKTtcbitcdFx0Y2xvc2UocGlwZV9wMmNbMF0pO1xuK1x0XHRjbG9zZShwaXBlX3AyY1sxXSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmIChwaWQgPT0gMCkge1xuK1x0XHQvKiBpbnN0YWxsIHNpZ25hbCBoYW5kbGVyIGFuZCBub3RpZnkgcGFyZW50ICovXG4rXHRcdHNhLnNhX3NpZ2FjdGlvbiA9IHNpZ3VzcjFfc2lnaW5mb19oYW5kbGVyO1xuK1x0XHRzYS5zYV9mbGFncyA9IFNBX1JFU1RBUlQgfCBTQV9TSUdJTkZPO1xuK1x0XHRBU1NFUlRfTkVRKHNpZ2FjdGlvbihTSUdVU1IxLCBcdTAwMjZzYSwgTlVMTCksIC0xLCBcInNpZ2FjdGlvblwiKTtcbitcbitcdFx0Y2xvc2UocGlwZV9jMnBbMF0pOyAvKiBjbG9zZSByZWFkICovXG4rXHRcdGNsb3NlKHBpcGVfcDJjWzFdKTsgLyogY2xvc2Ugd3JpdGUgKi9cbitcbitcdFx0Lyogbm90aWZ5IHBhcmVudCBzaWduYWwgaGFuZGxlciBpcyBpbnN0YWxsZWQgKi9cbitcdFx0QVNTRVJUX0VRKHdyaXRlKHBpcGVfYzJwWzFdLCBidWYsIDEpLCAxLCBcInBpcGVfd3JpdGVcIik7XG4rXG4rXHRcdC8qIG1ha2Ugc3VyZSBwYXJlbnQgZW5hYmxlZCBicGYgcHJvZ3JhbSB0byBzZW5kX3NpZ25hbCAqL1xuK1x0XHRBU1NFUlRfRVEocmVhZChwaXBlX3AyY1swXSwgYnVmLCAxKSwgMSwgXCJwaXBlX3JlYWRcIik7XG4rXG4rXHRcdC8qIHRoZSBzaWduYWwgaXMgc2VudCBmcm9tIHdvcmtxdWV1ZSBjb250ZXh0LCBzbyBub3RoaW5nIGhhc1xuK1x0XHQgKiB0byBiZSB0cmlnZ2VyZWQgZnJvbSBoZXJlXG4rXHRcdCAqL1xuK1x0XHR3aGlsZSAoIXNpZ3VzcjFfcmVjZWl2ZWQpXG4rXHRcdFx0c2xlZXAoMSk7XG4rXG4rXHRcdGJ1ZlswXSA9IHNpZ3VzcjFfcmVjZWl2ZWQ7XG4rXG4rXHRcdEFTU0VSVF9FUShzaWd1c3IxX3JlY2VpdmVkLCA4LCBcInNpZ3VzcjFfcmVjZWl2ZWRcIik7XG4rXHRcdEFTU0VSVF9FUSh3cml0ZShwaXBlX2MycFsxXSwgYnVmLCAxKSwgMSwgXCJwaXBlX3dyaXRlXCIpO1xuK1xuK1x0XHRjbG9zZShwaXBlX2MycFsxXSk7XG4rXHRcdGNsb3NlKHBpcGVfcDJjWzBdKTtcbitcdFx0ZXhpdCgwKTtcbitcdH1cbitcbitcdGNsb3NlKHBpcGVfYzJwWzFdKTsgLyogY2xvc2Ugd3JpdGUgKi9cbitcdGNsb3NlKHBpcGVfcDJjWzBdKTsgLyogY2xvc2UgcmVhZCAqL1xuK1xuK1x0c2tlbCA9IHRlc3Rfc2VuZF9zaWduYWxfa2Vybl9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbF9vcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRnb3RvIHNrZWxfb3Blbl9sb2FkX2ZhaWx1cmU7XG4rXG4rXHQvKiB3YWl0IHVudGlsIGNoaWxkIHNpZ25hbCBoYW5kbGVyIGluc3RhbGxlZCAqL1xuK1x0QVNTRVJUX0VRKHJlYWQocGlwZV9jMnBbMF0sIGJ1ZiwgMSksIDEsIFwicGlwZV9yZWFkXCIpO1xuK1xuK1x0LyogcGlkID09IDAga2VlcHMgdGhlIG90aGVyIHByb2dyYW1zIG9mIHRoaXMgc2tlbGV0b24gaW5hY3RpdmUgKi9cbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXBpZCA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VzaWcgPSBTSUdVU1IxO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldGFyZ2V0X3BpZCA9IHBpZDtcbitcbitcdGVyciA9IHRlc3Rfc2VuZF9zaWduYWxfa2Vybl9fYXR0YWNoKHNrZWwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNrZWxfYXR0YWNoXCIpKSB7XG4rXHRcdGVyciA9IC0xO1xuK1x0XHRnb3RvIGRlc3Ryb3lfc2tlbDtcbitcdH1cbitcbitcdC8qIG5vdGlmeSBjaGlsZCB0aGF0IGJwZiBwcm9ncmFtIGNhbiBzZW5kX3NpZ25hbCBub3cgKi9cbitcdEFTU0VSVF9FUSh3cml0ZShwaXBlX3AyY1sxXSwgYnVmLCAxKSwgMSwgXCJwaXBlX3dyaXRlXCIpO1xuK1xuK1x0Lyogd2FpdCBmb3IgcmVzdWx0LCB3b3JrcXVldWVzIHJ1biBvbiB0aGVpciBvd24gKi9cbitcdGVyciA9IHJlYWRfd2l0aF90aW1lb3V0KHBpcGVfYzJwWzBdLCBidWYsIDEsIDEwICogMTAwMCAqIDEwMDApO1xuK1x0aWYgKCFBU1NFUlRfR1QoZXJyLCAwLCBcInJlYWRpbmcgcGlwZVwiKSlcbitcdFx0Z290byBkZXN0cm95X3NrZWw7XG4rXG4rXHRBU1NFUlRfRVEoYnVmWzBdLCA4LCBcImluY29ycmVjdCByZXN1bHRcIik7XG4rXG4rZGVzdHJveV9za2VsOlxuK1x0dGVzdF9zZW5kX3NpZ25hbF9rZXJuX19kZXN0cm95KHNrZWwpO1xuK3NrZWxfb3Blbl9sb2FkX2ZhaWx1cmU6XG4rXHRjbG9zZShwaXBlX2MycFswXSk7XG4rXHRjbG9zZShwaXBlX3AyY1sxXSk7XG4rXHQvKlxuK1x0ICogQ2hpbGQgaXMgZWl0aGVyIGFib3V0IHRvIGV4aXQgY2xlYW5seSBvciBzdHVjayBpbiBjYXNlIG9mIGVycm9ycy5cbitcdCAqIE51ZGdlIGl0IHRvIGV4aXQuXG4rXHQgKi9cbitcdGtpbGwocGlkLCBTSUdLSUxMKTtcbitcdHdhaXQoTlVMTCk7XG4rfVxuK1xuIHZvaWQgdGVzdF9zZW5kX3NpZ25hbCh2b2lkKVxuIHtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic2VuZF9zaWduYWxfdHJhY2Vwb2ludFwiKSlcbkBAIC0yODksNCArMzkxLDYgQEAgdm9pZCB0ZXN0X3NlbmRfc2lnbmFsKHZvaWQpXG4gXHRcdHRlc3Rfc2VuZF9zaWduYWxfcGVyZih0cnVlLCB0cnVlKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic2VuZF9zaWduYWxfbm1pX3RocmVhZF9yZW1vdGVcIikpXG4gXHRcdHRlc3Rfc2VuZF9zaWduYWxfbm1pKHRydWUsIHRydWUpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJzZW5kX3NpZ25hbF9rd29ya2VyXCIpKVxuK1x0XHR0ZXN0X3NlbmRfc2lnbmFsX2t3b3JrZXIoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jXG5pbmRleCAxNzZhMzU1ZTMwNjI0Li5kMWMwMDBjMzA4ODU3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZW5kX3NpZ25hbF9rZXJuLmNcbkBAIC02MCw2ICs2MCwzMiBAQCBpbnQgc2VuZF9zaWduYWxfdHBfc2NoZWQodm9pZCAqY3R4KVxuIFx0cmV0dXJuIGJwZl9zZW5kX3NpZ25hbF90ZXN0KGN0eCk7XG4gfVxuIFxuKy8qIFNlbmQgYSBzaWduYWwgdG8gYSB0YXNrIG90aGVyIHRoYW4gY3VycmVudCwgZnJvbSBhIGNvbnRleHQgd2hlcmUgY3VycmVudFxuKyAqIGlzIGEga2VybmVsIHRocmVhZC4gTm8gZmlsdGVyaW5nIG9uIGN1cnJlbnQgaXMgcG9zc2libGUgaGVyZSwgc28gdGhpcyBpc1xuKyAqIGRyaXZlbiBlbnRpcmVseSBieSB0YXJnZXRfcGlkLlxuKyAqL1xuK1NFQyhcInRwX2J0Zi93b3JrcXVldWVfZXhlY3V0ZV9zdGFydFwiKVxuK2ludCBzZW5kX3NpZ25hbF9rd29ya2VyKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldF90YXNrO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChzdGF0dXMgIT0gMCB8fCB0YXJnZXRfcGlkID09IDApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0dGFyZ2V0X3Rhc2sgPSBicGZfdGFza19mcm9tX3BpZCh0YXJnZXRfcGlkKTtcbitcdGlmICghdGFyZ2V0X3Rhc2spXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0ID0gYnBmX3NlbmRfc2lnbmFsX3Rhc2sodGFyZ2V0X3Rhc2ssIHNpZywgUElEVFlQRV9UR0lELCA4KTtcbitcdGJwZl90YXNrX3JlbGVhc2UodGFyZ2V0X3Rhc2spO1xuK1xuK1x0aWYgKHJldCA9PSAwKVxuK1x0XHRzdGF0dXMgPSAxO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIFNFQyhcInBlcmZfZXZlbnRcIilcbiBpbnQgc2VuZF9zaWduYWxfcGVyZih2b2lkICpjdHgpXG4ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6MjAuOTIwMTcwOTQ1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0MzU4MzcxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBOZWVkcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzOiBzaG91bGQgd2UgZXZlbiBib3RoZXIgd2l0aCBLTVNBTiBmdXp6aW5nIGhlcmUsIG9yIGFyZSB0aGUgc3RhbmRhcmQgS0FTQU4gYW5kIHNhbml0aXplcnMgZW5vdWdoPyBUaGlzIHBhdGNoIHNlZW1zIHRhcmdldGVkLCBzbyBsZXQncyBzZWUuXG5cbkZpcnN0LCBJIHNlZSBhIGNoYW5nZSBpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgYGJwZl9zZW5kX3NpZ25hbF9jb21tb25gIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgYWRkZWQgYSBjaGVjazogcmF0aGVyIHRoYW4ganVzdCBjYWxsaW5nIGBubWlfdWFjY2Vzc19va2F5KClgLCB0aGV5J3JlIG5vdyBleHBsaWNpdGx5IGNoZWNraW5nIGlmIHRoZSB0YXJnZXQgYHRhc2tgIGlzIHRoZSBgY3VycmVudGAgdGFzayBiZWZvcmUgY2FsbGluZyBpdC4gVGhhdCdzIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgY2hhbmdlLiBUaGUgb3JpZ2luYWwgY2hlY2ssIGBpZiAodW5saWtlbHkoIW5taV91YWNjZXNzX29rYXkoKSkpYCwgbm93IGhhcyBhbiBleHRyYSBjaGVjayB0byBwcmV2ZW50IGNhbGxpbmcgdGhhdCBmdW5jdGlvbiBvbiBhbm90aGVyIHRhc2suXG5cblRoZSBjb21tZW50IG1lbnRpb25zIHRoYXQgYG5taV91YWNjZXNzX29rYXkoKWAgb25seSBhcHBsaWVzIHRvIHRoZSAqY3VycmVudCogdGFzay4gTWFrZXMgc2Vuc2UsIGFuZCB0aGUgYWRkZWQgY29uZGl0aW9uIG1ha2VzIHRoYXQgZXhwbGljaXQuICBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGlzc3VlIHdoZXJlIHRoZSBmdW5jdGlvbiB3YXMgYmVpbmcgdXNlZCBpbmNvcnJlY3RseSwgYW5kIHRoZSBwYXRjaCBpcyBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBvciBhIHNpbWlsYXIgdHlwZSBvZiBidWcuXG5cblNlY29uZCwgdGhlcmUgYXJlIHNlbGZ0ZXN0cywgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlbmRfc2lnbmFsLmNgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VuZF9zaWduYWxfa2Vybi5jYC4gVGhleSdyZSBhZGRpbmcgYSB0ZXN0IGNhc2UsIGB0ZXN0X3NlbmRfc2lnbmFsX2t3b3JrZXJgLCB0byB0ZXN0IGBicGZfc2VuZF9zaWduYWxfdGFza2AgZnJvbSB3aXRoaW4gYSBrd29ya2VyIGNvbnRleHQuICBUaGF0J3MgYSBwcmV0dHkgY2xlYXIgc2lnbmFsIHRoYXQgdGhlIGNvZGUgd2FzICpwcmV2aW91c2x5KiBwb3RlbnRpYWxseSBub3QgaGFuZGxpbmcga3dvcmtlciBjb250ZXh0cyBjb3JyZWN0bHksIGFuZCBub3cgdGhleSdyZSB0cnlpbmcgdG8gdmFsaWRhdGUgdGhlIGZpeC5cblxuU28sIGluIHN1bW1hcnksIHdlJ3JlIGxpa2VseSBkZWFsaW5nIHdpdGggYSBmaXggZm9yIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGEgc2ltaWxhciBtZW1vcnkgc2FmZXR5IGlzc3VlIHRoYXQgY291bGQgb2NjdXIgd2l0aGluIGEga3dvcmtlciBjb250ZXh0LiBUaGUgcGF0Y2ggaXMgcHJvYmFibHkgdHJ5aW5nIHRvIHByZXZlbnQgYSBkb3VibGUtZmV0Y2gsIG9yIGEgc2ltaWxhciBidWcgcmVsYXRpbmcgdG8gYSByYWNlIGNvbmRpdGlvbi4gU2luY2UgdGhpcyBpcyBhbiBleHBsaWNpdCBjaGFuZ2UgdG8gaGFuZGxlIGEgc3BlY2lmaWMgY29udGV4dCwgdGhpcyBzZWVtcyBsaWtlIHRoZSBraW5kIG9mIGlzc3VlIHRoYXQgS0FTQU4gYW5kIHRoZSBvdGhlciBzdGFuZGFyZCBzYW5pdGl6ZXJzIHNob3VsZCBjYXRjaC4gS01TQU4gKm1pZ2h0KiBiZSBoZWxwZnVsIGlmIGl0J3MgYSBzdWJ0bGUgcmFjZSwgYnV0IEknbSB0aGlua2luZyBhIHN0YW5kYXJkIHNhbml0aXplciBwYXNzIGlzIHN1ZmZpY2llbnQsIGdpdmVuIHRoZSB0YXJnZXRlZCBuYXR1cmUgb2YgdGhlIGZpeCBhbmQgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgbmV3IHNlbGZ0ZXN0LiBJJ2QgbGVhbiB0b3dhcmQgZm9jdXNpbmcgb3VyIGluaXRpYWwgYW5hbHlzaXMgb24gdmVyaWZ5aW5nIHRoZSBwYXRjaCdzIGNvcnJlY3RuZXNzIGFuZCBlbnN1cmluZyB0aGUgc2VsZnRlc3QgY292ZXJzIHRoZSBpbnRlbmRlZCBzY2VuYXJpbyB0aG9yb3VnaGx5LiBXZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIHByaW9yaXRpemUgS01TQU4gZm9yIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMDMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDoyNy4zNTYwMTAyODlaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNDMyOTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zZW5kX3NpZ25hbF9jb21tb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz04MzU9c3RhdGljIHZvaWQgZG9fYnBmX3NlbmRfc2lnbmFsKHN0cnVjdCBpcnFfd29yayAqZW50cnkpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtODQ2LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo4NDc6c3RhdGljIGludCBicGZfc2VuZF9zaWduYWxfY29tbW9uKHUzMiBzaWcsIGVudW0gcGlkX3R5cGUgdHlwZSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1NjQgdmFsdWUpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTg0OC17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9OTExPUJQRl9DQUxMXzEoYnBmX3NlbmRfc2lnbmFsLCB1MzIsIHNpZylcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTEyLXtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6OTEzOlxcdHJldHVybiBicGZfc2VuZF9zaWduYWxfY29tbW9uKHNpZywgUElEVFlQRV9UR0lELCBOVUxMLCAwKTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTE0LX1cXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz05MjM9QlBGX0NBTExfMShicGZfc2VuZF9zaWduYWxfdGhyZWFkLCB1MzIsIHNpZylcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTI0LXtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6OTI1OlxcdHJldHVybiBicGZfc2VuZF9zaWduYWxfY29tbW9uKHNpZywgUElEVFlQRV9QSUQsIE5VTEwsIDApO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy05MjYtfVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM2MTY9X19icGZfa2Z1bmMgaW50IGJwZl9zZW5kX3NpZ25hbF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IHNpZywgZW51bSBwaWRfdHlwZSB0eXBlLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM2MjEtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM2MjI6XFx0cmV0dXJuIGJwZl9zZW5kX3NpZ25hbF9jb21tb24oc2lnLCB0eXBlLCB0YXNrLCB2YWx1ZSk7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM2MjMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDoyNy40MTk0NTM1ODhaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM3MTQ2MDUxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYGJwZl9zZW5kX3NpZ25hbF9jb21tb25gIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbmAgKnJlYWxseSogd29ya3MuIEkga25vdyB0aGUgaGlnaC1sZXZlbCBjb25jZXB0LCBidXQgdG8gdHJ1bHkgZ3Jhc3AgdGhlIG51YW5jZXMgb2Ygc2lnbmFsIGluamVjdGlvbiBmcm9tIEJQRiBwcm9ncmFtcywgSSBuZWVkIHRvIHNlZSB0aGUgZnVsbCBpbXBsZW1lbnRhdGlvbi4gTGV0J3MgaGVhZCBvdmVyIHRvIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIGFuZCBkaXNzZWN0IGl0LiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoaW5ncyBsaWtlOiBhdG9taWNpdHkgY29uY2VybnMsIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucywgaG93IGNvbnRleHQgaXMgbWFuYWdlZCwgYW5kIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgc2lnbmFsIGRlbGl2ZXJ5IGluZnJhc3RydWN0dXJlLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXkncmUgZG9pbmcgYW55IG9wdGltaXphdGlvbnMgSSBjYW4gbGV2ZXJhZ2UsIG9yIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGdvdGNoYXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Ygd2hlbiBkZXNpZ25pbmcgbXkgb3duIEJQRi1iYXNlZCBzaWduYWwgaGFuZGxpbmcuIEnigJltIHRoaW5raW5nIGFib3V0IGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyZmFjZXMgd2l0aCB0aGUgdGFzayBzdHJ1Y3QgYW5kIHNpZ25hbCBtYXNrLiBUaW1lIHRvIHJvbGwgdXAgbXkgc2xlZXZlcyBhbmQgZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTE2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6MjkuNzkwOTE2NjU4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODQ1LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODQ1OlxcdH1cXG4gODQ2OlxcdFxcbiA4NDc6XFx0c3RhdGljIGludCBicGZfc2VuZF9zaWduYWxfY29tbW9uKHUzMiBzaWcsIGVudW0gcGlkX3R5cGUgdHlwZSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1NjQgdmFsdWUpXFxuIDg0ODpcXHR7XFxuIDg0OTpcXHRcXHRzdHJ1Y3Qgc2VuZF9zaWduYWxfaXJxX3dvcmsgKndvcmsgPSBOVUxMO1xcbiA4NTA6XFx0XFx0c3RydWN0IGtlcm5lbF9zaWdpbmZvIGluZm87XFxuIDg1MTpcXHRcXHRzdHJ1Y3Qga2VybmVsX3NpZ2luZm8gKnNpZ2luZm87XFxuIDg1MjpcXHRcXG4gODUzOlxcdFxcdGlmICghdGFzaykge1xcbiA4NTQ6XFx0XFx0XFx0dGFzayA9IGN1cnJlbnQ7XFxuIDg1NTpcXHRcXHRcXHRzaWdpbmZvID0gU0VORF9TSUdfUFJJVjtcXG4gODU2OlxcdFxcdH0gZWxzZSB7XFxuIDg1NzpcXHRcXHRcXHRjbGVhcl9zaWdpbmZvKFxcdTAwMjZpbmZvKTtcXG4gODU4OlxcdFxcdFxcdGluZm8uc2lfc2lnbm8gPSBzaWc7XFxuIDg1OTpcXHRcXHRcXHRpbmZvLnNpX2Vycm5vID0gMDtcXG4gODYwOlxcdFxcdFxcdGluZm8uc2lfY29kZSA9IFNJX0tFUk5FTDtcXG4gODYxOlxcdFxcdFxcdGluZm8uc2lfcGlkID0gMDtcXG4gODYyOlxcdFxcdFxcdGluZm8uc2lfdWlkID0gMDtcXG4gODYzOlxcdFxcdFxcdGluZm8uc2lfdmFsdWUuc2l2YWxfcHRyID0gKHZvaWQgX191c2VyIF9fZm9yY2UgKikodW5zaWduZWQgbG9uZyl2YWx1ZTtcXG4gODY0OlxcdFxcdFxcdHNpZ2luZm8gPSBcXHUwMDI2aW5mbztcXG4gODY1OlxcdFxcdH1cXG4gODY2OlxcdFxcbiA4Njc6XFx0XFx0LyogU2ltaWxhciB0byBicGZfcHJvYmVfd3JpdGVfdXNlciwgdGFzayBuZWVkcyB0byBiZVxcbiA4Njg6XFx0XFx0ICogaW4gYSBzb3VuZCBjb25kaXRpb24gYW5kIGtlcm5lbCBtZW1vcnkgYWNjZXNzIGJlXFxuIDg2OTpcXHRcXHQgKiBwZXJtaXR0ZWQgaW4gb3JkZXIgdG8gc2VuZCBzaWduYWwgdG8gdGhlIGN1cnJlbnRcXG4gODcwOlxcdFxcdCAqIHRhc2suXFxuIDg3MTpcXHRcXHQgKi9cXG4gODcyOlxcdFxcdGlmICh1bmxpa2VseSh0YXNrLVxcdTAwM2VmbGFncyBcXHUwMDI2IChQRl9LVEhSRUFEIHwgUEZfRVhJVElORykpKVxcbiA4NzM6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gODc0OlxcdFxcdC8qIFNpbmNlIG5taV91YWNjZXNzX29rYXkoKSBpcyBvbmx5IGZvciB0aGUgY3VycmVudFxcbiA4NzU6XFx0XFx0ICogdGFzaywgY2hlY2sgaWYgdGFzayBpcyBjdXJyZW50LlxcbiA4NzY6XFx0XFx0ICovXFxuIDg3NzpcXHRcXHRpZiAodGFzayA9PSBjdXJyZW50IFxcdTAwMjZcXHUwMDI2IHVubGlrZWx5KCFubWlfdWFjY2Vzc19va2F5KCkpKVxcbiA4Nzg6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gODc5OlxcdFxcdC8qIFRhc2sgc2hvdWxkIG5vdCBiZSBwaWQ9MSB0byBhdm9pZCBrZXJuZWwgcGFuaWMuICovXFxuIDg4MDpcXHRcXHRpZiAodW5saWtlbHkoaXNfZ2xvYmFsX2luaXQodGFzaykpKVxcbiA4ODE6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gODgyOlxcdFxcbiA4ODM6XFx0XFx0aWYgKHByZWVtcHRfY291bnQoKSAhPSAwIHx8IGlycXNfZGlzYWJsZWQoKSkge1xcbiA4ODQ6XFx0XFx0XFx0LyogRG8gYW4gZWFybHkgY2hlY2sgb24gc2lnbmFsIHZhbGlkaXR5LiBPdGhlcndpc2UsXFxuIDg4NTpcXHRcXHRcXHQgKiB0aGUgZXJyb3IgaXMgbG9zdCBpbiBkZWZlcnJlZCBpcnFfd29yay5cXG4gODg2OlxcdFxcdFxcdCAqL1xcbiA4ODc6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCF2YWxpZF9zaWduYWwoc2lnKSkpXFxuIDg4ODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODg5OlxcdFxcbiA4OTA6XFx0XFx0XFx0d29yayA9IHRoaXNfY3B1X3B0cihcXHUwMDI2c2VuZF9zaWduYWxfd29yayk7XFxuIDg5MTpcXHRcXHRcXHRpZiAoaXJxX3dvcmtfaXNfYnVzeShcXHUwMDI2d29yay1cXHUwMDNlaXJxX3dvcmspKVxcbiA4OTI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gODkzOlxcdFxcbiA4OTQ6XFx0XFx0XFx0LyogQWRkIHRoZSBjdXJyZW50IHRhc2ssIHdoaWNoIGlzIHRoZSB0YXJnZXQgb2Ygc2VuZGluZyBzaWduYWwsXFxuIDg5NTpcXHRcXHRcXHQgKiB0byB0aGUgaXJxX3dvcmsuIFRoZSBjdXJyZW50IHRhc2sgbWF5IGNoYW5nZSB3aGVuIHF1ZXVlZFxcbiA4OTY6XFx0XFx0XFx0ICogaXJxIHdvcmtzIGdldCBleGVjdXRlZC5cXG4gODk3OlxcdFxcdFxcdCAqL1xcbiA4OTg6XFx0XFx0XFx0d29yay1cXHUwMDNldGFzayA9IGdldF90YXNrX3N0cnVjdCh0YXNrKTtcXG4gODk5OlxcdFxcdFxcdHdvcmstXFx1MDAzZWhhc19zaWdpbmZvID0gc2lnaW5mbyA9PSBcXHUwMDI2aW5mbztcXG4gOTAwOlxcdFxcdFxcdGlmICh3b3JrLVxcdTAwM2VoYXNfc2lnaW5mbylcXG4gOTAxOlxcdFxcdFxcdFxcdGNvcHlfc2lnaW5mbyhcXHUwMDI2d29yay1cXHUwMDNlaW5mbywgXFx1MDAyNmluZm8pO1xcbiA5MDI6XFx0XFx0XFx0d29yay1cXHUwMDNlc2lnID0gc2lnO1xcbiA5MDM6XFx0XFx0XFx0d29yay1cXHUwMDNldHlwZSA9IHR5cGU7XFxuIDkwNDpcXHRcXHRcXHRpcnFfd29ya19xdWV1ZShcXHUwMDI2d29yay1cXHUwMDNlaXJxX3dvcmspO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDoyOS43OTExNzMwOThaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEzNDc2MzQ2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXBwbGljYWJpbGl0eSBBc3Nlc3NtZW50IGZvciBCUEYgU2lnbmFsIFNlbmRpbmcgRml4KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGF0IGluIHRoZSBgYnBmX3NlbmRfc2lnbmFsX2NvbW1vbmAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aGVuIGNhbGxpbmcgYGJwZl9zZW5kX3NpZ25hbF90YXNrYCwgdGhlIGNvZGUgd2FzIHByZXZpb3VzbHkgdXNpbmcgYG5taV91YWNjZXNzX29rYXkoKWAgaW5jb3JyZWN0bHkuIFRoaXMgZnVuY3Rpb24sIGludGVuZGVkIHRvIGNoZWNrIGZvciBwZXJtaXR0ZWQgdXNlciBhY2Nlc3MgZm9yIHRoZSAqY3VycmVudCogdGFzaywgd2FzIGZhaWxpbmcgaWYgdGhlICpjdXJyZW50KiB0YXNrIHdhcyBhIGt3b3JrZXIgdGhyZWFkLCBldmVuIGlmIHRoZSAqdGFyZ2V0KiBgdGFza2Agd2FzIGEgcmVndWxhciB1c2VyIHByb2Nlc3MuIFRoaXMgaXMgYmVjYXVzZSBgbm1pX3VhY2Nlc3Nfb2theSgpYCBjaGVja3MgdGhlIGBjdXJyZW50YCB0YXNrJ3MgcHJvcGVydGllcy4gVGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQ6IG9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgaWYgYHRhc2sgPT0gY3VycmVudGAuXG5cbk5vdywgdG8gdGhlIEtNU0FOIHF1ZXN0aW9uOiBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gTGV0J3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LiBGaXJzdGx5LCBhcmUga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vLCB0aGUgYGluZm9gIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCB3aXRoIGBjbGVhcl9zaWdpbmZvKFx1MDAyNmluZm8pYC4gU2Vjb25kbHksIGlzIHRoZXJlIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IHJlbGllcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS4gVGhlIGNvbmRpdGlvbiBub3cgaGluZ2VzIG9uIHBvaW50ZXIgZXF1YWxpdHksIGB0YXNrID09IGN1cnJlbnRgLCBhbmQgdGhlIHJldHVybiBvZiBgbm1pX3VhY2Nlc3Nfb2theSgpYCwgd2hpY2ggaXMgYSBib29sZWFuLiBUaGlyZCwgYXJlIHRoZXJlIG5ldyBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBiZWluZyBpbml0aWFsaXplZD8gTm8sIHRoaXMgcGF0Y2ggaXMgcHVyZWx5IGNvbmRpdGlvbmFsLiBGaW5hbGx5LCBhcmUgdGhlcmUgYW55IGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RoIGNoZWNrcyB0aGF0IG1pZ2h0IGxlYWQgdG8gdW5pbml0aWFsaXplZCBieXRlcyBiZWluZyBhY2Nlc3NlZD8gTm8uIFRoZSBjb2RlIG1vZGlmaWVzIHRoZSBjb25kaXRpb24sIGJ1dCB0aGVyZSBpcyBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb24gb3IgY29weV90b191c2VyIG9wZXJhdGlvbnMuXG5cbkluIGVzc2VuY2UsIHRoaXMgcGF0Y2ggc2ltcGx5IHJlZmluZXMgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIHRvIHByZXZlbnQgYW4gb3Zlcmx5IHJlc3RyaWN0aXZlIGFjY2VzcyBjaGVjayBpbiBhIHZlcnkgc3BlY2lmaWMgc2NlbmFyaW8uIEl0IGFsbG93cyBCUEYgcHJvZ3JhbXMsIGV2ZW4gdGhvc2UgcnVubmluZyBpbiBrd29ya2VyL2tlcm5lbCB0aHJlYWQgY29udGV4dCwgdG8gY29ycmVjdGx5IHNlbmQgc2lnbmFscyB0byB1c2VyIHRhc2tzLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBUaGlzIHBhdGNoIGlzIG1vcmUgYWJvdXQgbG9naWMgYW5kIHBlcm1pc3Npb25zIHRoYW4gbWVtb3J5IGluaXRpYWxpemF0aW9uLlxuXG5Ob3csIGxldCdzIGNsZWFybHkgY29udHJhc3QgdGhpcyB3aXRoIEtBU0FOLiBLTVNBTiBpcyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZSwgd2hpbGUgS0FTQU4gaXMgYWxsIGFib3V0IG1lbW9yeSBzYWZldHkg4oCTIGRldGVjdGluZyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCBidWZmZXIgb3ZlcmZsb3dzLCBldGMuIFRoZSBjaGFuZ2UgbWFkZSBoZXJlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcywgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbi4gQWxsIG1lbW9yeSBzYWZldHkgY29uY2VybnMsIHN1Y2ggYXMgdGhlIGB0YXNrYCBzdHJ1Y3QgcmVmZXJlbmNlIGNvdW50aW5nLCBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IHRoZSBzdGFuZGFyZCBzYW5pdGl6ZXJzIG9yIEtBU0FOLiBJdCdzIGEgY29uZGl0aW9uYWwgY2hhbmdlLCBwdXJlbHkuIFNvLCBubyBLTVNBTiBpcyBuZWVkZWQuXG5cbkFscmlnaHQsIHRpbWUgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc1OCwiT3V0cHV0VG9rZW5zIjoxNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDo0MS4xMzg4MTA3NjhaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGEgY2hlY2sgaW4gYGJwZl9zZW5kX3NpZ25hbF9jb21tb24oKWAgc28gdGhhdCBgbm1pX3VhY2Nlc3Nfb2theSgpYCBpcyBvbmx5IGV2YWx1YXRlZCB3aGVuIGB0YXNrID09IGN1cnJlbnRgLCBhbGxvd2luZyBCUEYgcHJvZ3JhbXMgcnVubmluZyBpbiBrdGhyZWFkL2t3b3JrZXIgY29udGV4dCB0byBzZW5kIHNpZ25hbHMgdG8gb3RoZXIgdGFyZ2V0IHRhc2tzIHZpYSBgYnBmX3NlbmRfc2lnbmFsX3Rhc2soKWAuIEl0IGFsc28gYWRkcyBhIEJQRiBzZWxmdGVzdC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlciBsZW5ndGhzLCB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgY29weS10by11c2VyIG9wZXJhdGlvbnMuIEFueSByZWxhdGVkIHRhc2sgbGlmZXRpbWUgb3IgcmVmZXJlbmNlIGNvdW50aW5nIGNvbmNlcm5zIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL3JlZmNvdW50IHRyYWNraW5nLiBBcyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGRpc2Nsb3N1cmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGEgY2hlY2sgaW4gYGJwZl9zZW5kX3NpZ25hbF9jb21tb24oKWAgc28gdGhhdCBgbm1pX3VhY2Nlc3Nfb2theSgpYCBpcyBvbmx5IGV2YWx1YXRlZCB3aGVuIGB0YXNrID09IGN1cnJlbnRgLCBhbGxvd2luZyBCUEYgcHJvZ3JhbXMgcnVubmluZyBpbiBrdGhyZWFkL2t3b3JrZXIgY29udGV4dCB0byBzZW5kIHNpZ25hbHMgdG8gb3RoZXIgdGFyZ2V0IHRhc2tzIHZpYSBgYnBmX3NlbmRfc2lnbmFsX3Rhc2soKWAuIEl0IGFsc28gYWRkcyBhIEJQRiBzZWxmdGVzdC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlciBsZW5ndGhzLCB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgY29weS10by11c2VyIG9wZXJhdGlvbnMuIEFueSByZWxhdGVkIHRhc2sgbGlmZXRpbWUgb3IgcmVmZXJlbmNlIGNvdW50aW5nIGNvbmNlcm5zIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL3JlZmNvdW50IHRyYWNraW5nLiBBcyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGRpc2Nsb3N1cmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflows5htf[1] Phase: Succeeded StartedAt: 2026-09-03 10:40:52 +0000 UTC FinishedAt: 2026-09-03 10:40:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5htf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 10:40:52 +0000 UTC FinishedAt: 2026-09-03 10:40:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5htf[2] Phase: Succeeded StartedAt: 2026-09-03 10:40:52 +0000 UTC FinishedAt: 2026-09-03 14:23:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 10:40:52 +0000 UTC FinishedAt: 2026-09-03 14:23:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 10:40:52 +0000 UTC FinishedAt: 2026-09-03 10:41:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 10:40:52 +0000 UTC FinishedAt: 2026-09-03 10:40:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflows5htf/series-workflows5htf-convert-artifact-893520836/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 10:41:02 +0000 UTC FinishedAt: 2026-09-03 10:58:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 10:41:02 +0000 UTC FinishedAt: 2026-09-03 10:58:10 +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:*80b47a71-0ba9-4754-9988-5efbaf2b0394,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-workflows5htf/series-workflows5htf-convert-artifact-893520836/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": "e74013fb-96ed-4f03-b042-c0feeffdffe9", "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-workflows5htf/series-workflows5htf-build-action-546852610/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 10:41:02 +0000 UTC FinishedAt: 2026-09-03 10:58:00 +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:*80b47a71-0ba9-4754-9988-5efbaf2b0394,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-workflows5htf/series-workflows5htf-convert-artifact-893520836/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": "e74013fb-96ed-4f03-b042-c0feeffdffe9", "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-workflows5htf/series-workflows5htf-build-action-546852610/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 10:58:10 +0000 UTC FinishedAt: 2026-09-03 10:58:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 10:58:10 +0000 UTC FinishedAt: 2026-09-03 10:58:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 10:58:10 +0000 UTC FinishedAt: 2026-09-03 10:58:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 10:58:10 +0000 UTC FinishedAt: 2026-09-03 10:58:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflows5htf/series-workflows5htf-convert-artifact-1049384259/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 10:58:20 +0000 UTC FinishedAt: 2026-09-03 11:00:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 10:58:20 +0000 UTC FinishedAt: 2026-09-03 11:00:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e74013fb-96ed-4f03-b042-c0feeffdffe9,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-workflows5htf/series-workflows5htf-build-action-546852610/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-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 11:00:26 +0000 UTC FinishedAt: 2026-09-03 11:00:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 11:00:26 +0000 UTC FinishedAt: 2026-09-03 11:00:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 11:00:26 +0000 UTC FinishedAt: 2026-09-03 11:18:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 11:00:26 +0000 UTC FinishedAt: 2026-09-03 11:18:45 +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:*80b47a71-0ba9-4754-9988-5efbaf2b0394,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-workflows5htf/series-workflows5htf-convert-artifact-1049384259/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": "aa299f79-a22c-47aa-8b41-6f28291bcb1c", "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-workflows5htf/series-workflows5htf-build-action-2404106231/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 11:00:26 +0000 UTC FinishedAt: 2026-09-03 11:18:35 +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:*80b47a71-0ba9-4754-9988-5efbaf2b0394,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-workflows5htf/series-workflows5htf-convert-artifact-1049384259/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": "aa299f79-a22c-47aa-8b41-6f28291bcb1c", "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-workflows5htf/series-workflows5htf-build-action-2404106231/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 11:18:45 +0000 UTC FinishedAt: 2026-09-03 11:18:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 11:18:45 +0000 UTC FinishedAt: 2026-09-03 11:18:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 11:18:45 +0000 UTC FinishedAt: 2026-09-03 11:20:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 11:18:45 +0000 UTC FinishedAt: 2026-09-03 11:20:33 +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:*aa299f79-a22c-47aa-8b41-6f28291bcb1c,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-workflows5htf/series-workflows5htf-build-action-2404106231/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-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 11:20:43 +0000 UTC FinishedAt: 2026-09-03 14:23:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 11:20:43 +0000 UTC FinishedAt: 2026-09-03 14:23:00 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"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:*e74013fb-96ed-4f03-b042-c0feeffdffe9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aa299f79-a22c-47aa-8b41-6f28291bcb1c,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-workflows5htf/series-workflows5htf-build-action-546852610/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-workflows5htf/series-workflows5htf-build-action-2404106231/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 11:20:43 +0000 UTC FinishedAt: 2026-09-03 11:20:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 11:20:43 +0000 UTC FinishedAt: 2026-09-03 11:20:48 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"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-workflows5htf/series-workflows5htf-convert-artifact-1353084764/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 11:20:43 +0000 UTC FinishedAt: 2026-09-03 11:20:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 11:20:43 +0000 UTC FinishedAt: 2026-09-03 11:20:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 11:20:43 +0000 UTC FinishedAt: 2026-09-03 11:20:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 11:20:53 +0000 UTC FinishedAt: 2026-09-03 14:23:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflows5htf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_send_signal_task"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d761934c9483ecde93fe99d8705282f716dfee50","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","DEBUG_INFO_BTF"],"series_id":"ea5eadd3-9a5d-45dc-8739-6c468759b490","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 11:20:53 +0000 UTC FinishedAt: 2026-09-03 14:22:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e74013fb-96ed-4f03-b042-c0feeffdffe9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aa299f79-a22c-47aa-8b41-6f28291bcb1c,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-workflows5htf/series-workflows5htf-build-action-546852610/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-workflows5htf/series-workflows5htf-build-action-2404106231/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-workflows5htf/series-workflows5htf-convert-artifact-1353084764/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,}