Name: series-workflowzqz6n Phase: Succeeded StartedAt: 2026-09-10 13:19:41 +0000 UTC FinishedAt: 2026-09-10 17:02:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqz6n[0] Phase: Succeeded StartedAt: 2026-09-10 13:19:41 +0000 UTC FinishedAt: 2026-09-10 13:22:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqz6n[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 13:19:41 +0000 UTC FinishedAt: 2026-09-10 13:22:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "15e2565f1c43771af0bc5324971cabaad79ac286", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "15e2565f1c43771af0bc5324971cabaad79ac286", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF", "INET" ], "series_id": "d9df2dc8-c122-426b-be13-58e48b2a4c8a" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_sock_destroy", "inet_csk_listen_stop" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-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+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc29ja19kZXN0cm95JiMzNDssCiAgICAmIzM0O2luZXRfY3NrX2xpc3Rlbl9zdG9wJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9zb2NrX2Rlc3Ryb3koKWAgdG8gc3VwcG9ydCBub24tZnVsbCBzb2NrZXRzIChlLmcuLCBUQ1AgVElNRV9XQUlUIHNvY2tldHMpIGJ5IGd1YXJkaW5nIHRoZSBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIGNoZWNrIHdpdGggYHNrX2Z1bGxzb2NrKClgLCBhbmQgdXBkYXRlcyBgaW5ldF9jc2tfbGlzdGVuX3N0b3AoKWAgdG8gYnlwYXNzIGBjb25kX3Jlc2NoZWQoKWAgd2hlbiBydW5uaW5nIHdpdGhpbiBhIEJQRiBleGVjdXRpb24gY29udGV4dCB0byBwcmV2ZW50IHNsZWVwaW5nIGluIGF0b21pYy9SQ1UgY29udGV4dHMuXG5cblRoZXNlIGNoYW5nZXMgZG8gbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgY29weS10by11c2VyIG9wZXJhdGlvbnMsIG9yIGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBBbnkgcG90ZW50aWFsIHJpc2tzIHJlbGF0ZWQgdG8gc29ja2V0IGxpZmV0aW1lLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIGV4ZWN1dGlvbiBjb250ZXh0IGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgYW5kIGRlYnVnZ2VycyAoS0FTQU4gZm9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMsIExPQ0tERVAgLyBERUJVR19BVE9NSUNfU0xFRVAgZm9yIHNsZWVwaW5nIGluIGF0b21pYyBjb250ZXh0KS4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBicGZfc29ja19kZXN0cm95KCkgQlBGIGtmdW5jIHRvIHBlcm1pdCBkZXN0cm95aW5nIG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBzb2NrZXRzKSB0aGF0IGltcGxlbWVudCBkaWFnX2Rlc3Ryb3ksIGFuZCBhZGp1c3RzIGluZXRfY3NrX2xpc3Rlbl9zdG9wKCkgdG8gYXZvaWQgY2FsbGluZyBjb25kX3Jlc2NoZWQoKSB3aGlsZSBleGVjdXRpbmcgaW4gYSBCUEYgY29udGV4dC4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBCUEYgc29ja2V0IGl0ZXJhdGlvbi9kZXN0cnVjdGlvbiBwYXRocyB0aGF0IHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM4OGQ5NTU4ODEzYWY2NDhmZjk0MmM2N2FmZTFiNjVkZDFjYmNkNTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxMzoyMDo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCA4NTEzMTY3YTg1OGE4Li5kOWM0YTEwOGRkYjVlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtMTI5MTEsOCAmIzQzOzEyOTExLDkgQEAgX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuICAqIEBzb2NrOiBQb2ludGVyIHRvIHNvY2tldCB0byBiZSBkZXN0cm95ZWRcbiAgKlxuICAqIFJldHVybjpcbi0gKiBPbiBlcnJvciwgbWF5IHJldHVybiBFUFJPVE9OT1NVUFBPUlQsIEVJTlZBTC5cbi0gKiBFUFJPVE9OT1NVUFBPUlQgaWYgcHJvdG9jb2wgc3BlY2lmaWMgZGVzdHJveSBoYW5kbGVyIGlzIG5vdCBzdXBwb3J0ZWQuXG4mIzQzOyAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIG9yIHdoYXRldmVyIHRoZSBwcm90b2NvbCBzcGVjaWZpY1xuJiM0MzsgKiBkZXN0cm95IGhhbmRsZXIgcmV0dXJucy5cbiYjNDM7ICogRU9QTk9UU1VQUCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC5cbiAgKiAwIG90aGVyd2lzZVxuICAqL1xuIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaylcbkBAIC0xMjkyNCw4ICYjNDM7MTI5MjUsMTIgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxuIFx0ICogU3VwcG9ydGluZyBwcm90b2NvbHMgd2lsbCBuZWVkIHRvIGFjcXVpcmUgc29jayBsb2NrIGluIHRoZSBCUEYgY29udGV4dFxuIFx0ICogcHJpb3IgdG8gaW52b2tpbmcgdGhpcyBrZnVuYy5cbiBcdCAqL1xuLVx0aWYgKCFzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveSB8fCAoc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRcdCAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKSlcbiYjNDM7XHRpZiAoIXNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95KVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRpZiAoc2tfZnVsbHNvY2soc2spIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdHJldHVybiBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY1xuaW5kZXggNjI1NzQ1OWJjZWUyNC4uNmEzMGYxMTM4NDU0NyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbkBAIC0xNTIwLDcgJiM0MzsxNTIwLDggQEAgdm9pZCBpbmV0X2Nza19saXN0ZW5fc3RvcChzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFx0XHRzb2NrX3B1dChjaGlsZCk7XG4gXG4tXHRcdGNvbmRfcmVzY2hlZCgpO1xuJiM0MztcdFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXG4mIzQzO1x0XHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuIFx0aWYgKHF1ZXVlLVx1MDAzZWZhc3RvcGVucS5yc2txX3JzdF9oZWFkKSB7XG4gXHRcdC8qIEZyZWUgYWxsIHRoZSByZXFzIHF1ZXVlZCBpbiByc2txX3JzdF9oZWFkLiAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmNcbmluZGV4IDljMTE5MzhmZTU5N2QuLjc4ZDY0MmEwMmJkYjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmNcbkBAIC0xLDQgJiM0MzsxLDUgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nwb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2VuZGlhbi5oXHUwMDNlXG4gXG5AQCAtMTEwLDYgJiM0MzsxMTEsMTIyIEBAIHN0YXRpYyB2b2lkIHRlc3RfdGNwX3NlcnZlcihzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpXG4gXHRcdGNsb3NlKHNlcnYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF90Y3BfbGlzdGVuX3BlbmRpbmcoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHNlcnYgPSAtMSwgY2xpZW4gPSAtMSwgYWNjZXB0X3NlcnYgPSAtMSwgbiwgc2Vydl9wb3J0O1xuJiM0MztcdHN0cnVjdCBwb2xsZmQgcGZkID0geyAuZXZlbnRzID0gUE9MTElOIH07XG4mIzQzO1x0Y2hhciBidWZbMV07XG4mIzQzO1xuJiM0MztcdHNlcnYgPSBzdGFydF9zZXJ2ZXIoQUZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBOVUxMLCAwLCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShzZXJ2LCAwLCBcJiMzNDtzdGFydF9zZXJ2ZXJcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdHNlcnZfcG9ydCA9IGdldF9zb2NrZXRfbG9jYWxfcG9ydChzZXJ2KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShzZXJ2X3BvcnQsIDAsIFwmIzM0O2dldF9zb2NrX2xvY2FsX3BvcnRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNlcnZfcG9ydCA9IChfX2JlMTYpc2Vydl9wb3J0O1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENvbm5lY3QgYnV0IG5ldmVyIGFjY2VwdCwgc28gdGhlIGNoaWxkIHNpdHMgaW4gdGhlIGFjY2VwdCBxdWV1ZVxuJiM0MztcdCAqIG9mIHRoZSBsaXN0ZW5lci4gV2FpdCB1bnRpbCBpdCYjMzk7cyBhY3R1YWxseSB0aGVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjbGllbiA9IGNvbm5lY3RfdG9fZmQoc2VydiwgMCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UoY2xpZW4sIDAsIFwmIzM0O2Nvbm5lY3RfdG9fZmRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdHBmZC5mZCA9IHNlcnY7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEocG9sbChcdTAwMjZwZmQsIDEsIC0xKSwgMSwgXCYjMzQ7cG9sbCBsaXN0ZW5lclwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIFJ1biBpdGVyYXRvciBwcm9ncmFtIHRoYXQgZGVzdHJveXMgc2VydmVyIHNvY2tldHMuICovXG4mIzQzO1x0c3RhcnRfaXRlcl9zb2NrZXRzKHNrZWwtXHUwMDNlcHJvZ3MuaXRlcl90Y3A2X3NlcnZlcik7XG4mIzQzO1xuJiM0MztcdGFjY2VwdF9zZXJ2ID0gYWNjZXB0KHNlcnYsIE5VTEwsIE5VTEwpO1xuJiM0MztcdGlmICghQVNTRVJUX0xUKGFjY2VwdF9zZXJ2LCAwLCBcJiMzNDthY2NlcHQgb24gZGVzdHJveWVkIGxpc3RlbmVyXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRBU1NFUlRfRVEoZXJybm8sIEVJTlZBTCwgXCYjMzQ7ZXJyb3IgY29kZSBvbiBkZXN0cm95ZWQgbGlzdGVuZXJcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgdW5hY2NlcHRlZCBjaGlsZCB3YXMgcmVzZXQgYWxvbmcgd2l0aCB0aGUgbGlzdGVuZXIuICovXG4mIzQzO1x0biA9IHJlY3YoY2xpZW4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xuJiM0MztcdGlmICghQVNTRVJUX0xUKG4sIDAsIFwmIzM0O2NsaWVudCByZWN2IG9uIHJlc2V0IGNoaWxkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRBU1NFUlRfRVEoZXJybm8sIEVDT05OUkVTRVQsIFwmIzM0O2Vycm9yIGNvZGUgb24gcmVzZXQgY2hpbGRcJiMzNDspO1xuJiM0MztcbiYjNDM7Y2xlYW51cDpcbiYjNDM7XHRpZiAoY2xpZW4gIT0gLTEpXG4mIzQzO1x0XHRjbG9zZShjbGllbik7XG4mIzQzO1x0aWYgKGFjY2VwdF9zZXJ2ICE9IC0xKVxuJiM0MztcdFx0Y2xvc2UoYWNjZXB0X3NlcnYpO1xuJiM0MztcdGlmIChzZXJ2ICE9IC0xKVxuJiM0MztcdFx0Y2xvc2Uoc2Vydik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfdGNwX3RpbWV3YWl0KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcbiYjNDM7e1xuJiM0MztcdGludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIGFjY2VwdF9zZXJ2ID0gLTEsIG47XG4mIzQzO1x0c3RydWN0IHRpbWV2YWwgdHYgPSB7fTtcbiYjNDM7XHRjaGFyIGJ1ZlsxXTtcbiYjNDM7XG4mIzQzO1x0c2VydiA9IHN0YXJ0X3NlcnZlcihBRl9JTkVUNiwgU09DS19TVFJFQU0sIE5VTEwsIDAsIDApO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKHNlcnYsIDAsIFwmIzM0O3N0YXJ0X3NlcnZlclwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGNsaWVuID0gY29ubmVjdF90b19mZChzZXJ2LCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShjbGllbiwgMCwgXCYjMzQ7Y29ubmVjdF90b19mZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGFjY2VwdF9zZXJ2ID0gYWNjZXB0KHNlcnYsIE5VTEwsIE5VTEwpO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKGFjY2VwdF9zZXJ2LCAwLCBcJiMzNDtzZXJ2IGFjY2VwdFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQWN0aXZlIGNsb3NlIGZyb20gdGhlIGNsaWVudCwgdGhlbiBjbG9zZSB0aGUgc2VydmVyIHNpZGUuIE9uY2VcbiYjNDM7XHQgKiByZWN2KCkgc2VlcyBFT0YgdGhlIHNlcnZlciBGSU4gaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCB0aGUgY2xpZW50XG4mIzQzO1x0ICogc29jayBpcyBpbiBUSU1FX1dBSVQuIEJsb2NrIHdpdGhvdXQgdGltZW91dCBzbyBhIGxvYWRlZCBDSSBib3hcbiYjNDM7XHQgKiBjYW4mIzM5O3QgcmFjZSB1cy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhzZXRzb2Nrb3B0KGNsaWVuLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgXHUwMDI2dHYsXG4mIzQzO1x0XHRcdFx0ICBzaXplb2YodHYpKSwgXCYjMzQ7Y2xlYXIgcmN2dGltZW9cJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdGlmICghQVNTRVJUX09LKHNodXRkb3duKGNsaWVuLCBTSFVUX1dSKSwgXCYjMzQ7Y2xpZW50IHNodXRkb3duXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYWtlIHN1cmUgdGhlIHNlcnZlciBoYXMgc2VlbiB0aGUgY2xpZW50IEZJTiBiZWZvcmUgaXQgY2xvc2VzLFxuJiM0MztcdCAqIHNvIHRoZSB0d28gRklOcyBuZXZlciBjcm9zcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRuID0gcmVjdihhY2NlcHRfc2VydiwgYnVmLCBzaXplb2YoYnVmKSwgMCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEobiwgMCwgXCYjMzQ7c2VydmVyIHJlY3YgRU9GXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0Y2xvc2UoYWNjZXB0X3NlcnYpO1xuJiM0MztcdGFjY2VwdF9zZXJ2ID0gLTE7XG4mIzQzO1xuJiM0MztcdC8qIGJsb2NrIHVudGlsIHJldHVybiBFT0YgKi9cbiYjNDM7XHRuID0gcmVjdihjbGllbiwgYnVmLCBzaXplb2YoYnVmKSwgMCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEobiwgMCwgXCYjMzQ7Y2xpZW50IHJlY3YgRU9GXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0LyogUnVuIGl0ZXJhdG9yIHByb2dyYW0gdGhhdCBkZXN0cm95cyB0aGUgdGltZXdhaXQgY2xpZW50IHNvY2suICovXG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZm91bmQgPSAwO1xuJiM0MztcdHN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLVx1MDAzZXByb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZm91bmQsIDEsIFwmIzM0O3RpbWV3YWl0IHNvY2sgZm91bmRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfT0soc2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZGVzdHJveV9lcnIsIFwmIzM0O2Rlc3Ryb3kgdGltZXdhaXQgc29ja1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBkZXN0cm95ZWQgdGltZXdhaXQgc29jayBtdXN0IGJlIGdvbmUuICovXG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZm91bmQgPSAwO1xuJiM0MztcdHN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLVx1MDAzZXByb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kLCAwLCBcJiMzNDt0aW1ld2FpdCBzb2NrIGRlc3Ryb3llZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdGlmIChjbGllbiAhPSAtMSlcbiYjNDM7XHRcdGNsb3NlKGNsaWVuKTtcbiYjNDM7XHRpZiAoYWNjZXB0X3NlcnYgIT0gLTEpXG4mIzQzO1x0XHRjbG9zZShhY2NlcHRfc2Vydik7XG4mIzQzO1x0aWYgKHNlcnYgIT0gLTEpXG4mIzQzO1x0XHRjbG9zZShzZXJ2KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB0ZXN0X3VkcF9jbGllbnQoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxuIHtcbiBcdGludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIG4gPSAwO1xuQEAgLTIwNCw2ICYjNDM7MzIxLDEwIEBAIHZvaWQgdGVzdF9zb2NrX2Rlc3Ryb3kodm9pZClcbiBcdFx0dGVzdF90Y3BfY2xpZW50KHNrZWwpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7dGNwX3NlcnZlclwmIzM0OykpXG4gXHRcdHRlc3RfdGNwX3NlcnZlcihza2VsKTtcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDt0Y3BfbGlzdGVuX3BlbmRpbmdcJiMzNDspKVxuJiM0MztcdFx0dGVzdF90Y3BfbGlzdGVuX3BlbmRpbmcoc2tlbCk7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7dGNwX3RpbWV3YWl0XCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3RfdGNwX3RpbWV3YWl0KHNrZWwpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7dWRwX2NsaWVudFwmIzM0OykpXG4gXHRcdHRlc3RfdWRwX2NsaWVudChza2VsKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3VkcF9zZXJ2ZXJcJiMzNDspKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcbmluZGV4IDllMGJmN2E1NGNlYzkuLjBhODg4NzU0MzIxOGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcbkBAIC03LDYgJiM0Mzs3LDggQEBcbiAjaW5jbHVkZSBcJiMzNDticGZfdHJhY2luZ19uZXQuaFwmIzM0O1xuIFxuIF9fYmUxNiBzZXJ2X3BvcnQgPSAwO1xuJiM0MztpbnQgdHdfZm91bmQgPSAwO1xuJiM0MztpbnQgdHdfZGVzdHJveV9lcnIgPSAwO1xuIFxuIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc2spIF9fa3N5bTtcbiBcbkBAIC0xMDAsNiAmIzQzOzEwMiwzNCBAQCBpbnQgaXRlcl90Y3A2X3NlcnZlcihzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7aXRlci90Y3BcJiMzNDspXG4mIzQzO2ludCBpdGVyX3RjcDZfdGltZXdhaXQoc3RydWN0IGJwZl9pdGVyX190Y3AgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tfY29tbW9uID0gY3R4LVx1MDAzZXNrX2NvbW1vbjtcbiYjNDM7XHRfX3U2NCAqdmFsO1xuJiM0MztcdGludCBrZXkgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXNrX2NvbW1vbilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoc2tfY29tbW9uLVx1MDAzZXNrY19mYW1pbHkgIT0gQUZfSU5FVDYpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFicGZfc2tjX3RvX3RjcF90aW1ld2FpdF9zb2NrKHNrX2NvbW1vbikpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ0Y3BfY29ubl9zb2NrZXRzLCBcdTAwMjZrZXkpO1xuJiM0MztcdGlmICghdmFsKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0LyogVGhlIHRpbWV3YWl0IHNvY2sgaW5oZXJpdHMgdGhlIGNvb2tpZSBvZiB0aGUgY2xvc2VkIGNsaWVudCBzb2NrLiAqL1xuJiM0MztcdGlmIChicGZfZ2V0X3NvY2tldF9jb29raWUoc2tfY29tbW9uKSAhPSAqdmFsKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHR3X2ZvdW5kJiM0MzsmIzQzOztcbiYjNDM7XHR0d19kZXN0cm95X2VyciA9IGJwZl9zb2NrX2Rlc3Ryb3koc2tfY29tbW9uKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiBcbiBTRUMoXCYjMzQ7aXRlci91ZHBcJiMzNDspXG4gaW50IGl0ZXJfdWRwNl9jbGllbnQoc3RydWN0IGJwZl9pdGVyX191ZHAgKmN0eClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NvY2tfZGVzdHJveSYjMzQ7LAogICAgJiMzNDtpbmV0X2Nza19saXN0ZW5fc3RvcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYnBmX3NvY2tfZGVzdHJveSgpIEJQRiBrZnVuYyB0byBwZXJtaXQgZGVzdHJveWluZyBub24tZnVsbCBzb2NrZXRzIChzdWNoIGFzIFRDUCBUSU1FX1dBSVQgc29ja2V0cykgdGhhdCBpbXBsZW1lbnQgZGlhZ19kZXN0cm95LCBhbmQgYWRqdXN0cyBpbmV0X2Nza19saXN0ZW5fc3RvcCgpIHRvIGF2b2lkIGNhbGxpbmcgY29uZF9yZXNjaGVkKCkgd2hpbGUgZXhlY3V0aW5nIGluIGEgQlBGIGNvbnRleHQuIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGIHNvY2tldCBpdGVyYXRpb24vZGVzdHJ1Y3Rpb24gcGF0aHMgdGhhdCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzODhkOTU1ODgxM2FmNjQ4ZmY5NDJjNjdhZmUxYjY1ZGQxY2JjZDU5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMTM6MjA6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDg1MTMxNjdhODU4YTguLmQ5YzRhMTA4ZGRiNWUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC0xMjkxMSw4ICYjNDM7MTI5MTEsOSBAQCBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7CiAgKiBAc29jazogUG9pbnRlciB0byBzb2NrZXQgdG8gYmUgZGVzdHJveWVkCiAgKgogICogUmV0dXJuOgotICogT24gZXJyb3IsIG1heSByZXR1cm4gRVBST1RPTk9TVVBQT1JULCBFSU5WQUwuCi0gKiBFUFJPVE9OT1NVUFBPUlQgaWYgcHJvdG9jb2wgc3BlY2lmaWMgZGVzdHJveSBoYW5kbGVyIGlzIG5vdCBzdXBwb3J0ZWQuCiYjNDM7ICogT24gZXJyb3IsIG1heSByZXR1cm4gRU9QTk9UU1VQUCwgb3Igd2hhdGV2ZXIgdGhlIHByb3RvY29sIHNwZWNpZmljCiYjNDM7ICogZGVzdHJveSBoYW5kbGVyIHJldHVybnMuCiYjNDM7ICogRU9QTk9UU1VQUCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC4KICAqIDAgb3RoZXJ3aXNlCiAgKi8KIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaykKQEAgLTEyOTI0LDggJiM0MzsxMjkyNSwxMiBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spCiAJICogU3VwcG9ydGluZyBwcm90b2NvbHMgd2lsbCBuZWVkIHRvIGFjcXVpcmUgc29jayBsb2NrIGluIHRoZSBCUEYgY29udGV4dAogCSAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuCiAJICovCi0JaWYgKCFzay0mZ3Q7c2tfcHJvdC0mZ3Q7ZGlhZ19kZXN0cm95IHx8IChzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgJmFtcDsmYW1wOwotCQkJCQkgICBzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApKQomIzQzOwlpZiAoIXNrLSZndDtza19wcm90LSZndDtkaWFnX2Rlc3Ryb3kpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWlmIChza19mdWxsc29jayhzaykgJmFtcDsmYW1wOwomIzQzOwkgICAgc2stJmd0O3NrX3Byb3RvY29sICE9IElQUFJPVE9fVENQICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrLSZndDtza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJcmV0dXJuIHNrLSZndDtza19wcm90LSZndDtkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwppbmRleCA2MjU3NDU5YmNlZTI0Li42YTMwZjExMzg0NTQ3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTE1MjAsNyAmIzQzOzE1MjAsOCBAQCB2b2lkIGluZXRfY3NrX2xpc3Rlbl9zdG9wKHN0cnVjdCBzb2NrICpzaykKIAkJbG9jYWxfYmhfZW5hYmxlKCk7CiAJCXNvY2tfcHV0KGNoaWxkKTsKIAotCQljb25kX3Jlc2NoZWQoKTsKJiM0MzsJCWlmICghaGFzX2N1cnJlbnRfYnBmX2N0eCgpKQomIzQzOwkJCWNvbmRfcmVzY2hlZCgpOwogCX0KIAlpZiAocXVldWUtJmd0O2Zhc3RvcGVucS5yc2txX3JzdF9oZWFkKSB7CiAJCS8qIEZyZWUgYWxsIHRoZSByZXFzIHF1ZXVlZCBpbiByc2txX3JzdF9oZWFkLiAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYwppbmRleCA5YzExOTM4ZmU1OTdkLi43OGQ2NDJhMDJiZGI2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYwpAQCAtMSw0ICYjNDM7MSw1IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDtwb2xsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwogI2luY2x1ZGUgJmx0O2JwZi9icGZfZW5kaWFuLmgmZ3Q7CiAKQEAgLTExMCw2ICYjNDM7MTExLDEyMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3RjcF9zZXJ2ZXIoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKQogCQljbG9zZShzZXJ2KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHRlc3RfdGNwX2xpc3Rlbl9wZW5kaW5nKHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbCkKJiM0Mzt7CiYjNDM7CWludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIGFjY2VwdF9zZXJ2ID0gLTEsIG4sIHNlcnZfcG9ydDsKJiM0MzsJc3RydWN0IHBvbGxmZCBwZmQgPSB7IC5ldmVudHMgPSBQT0xMSU4gfTsKJiM0MzsJY2hhciBidWZbMV07CiYjNDM7CiYjNDM7CXNlcnYgPSBzdGFydF9zZXJ2ZXIoQUZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBOVUxMLCAwLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0Uoc2VydiwgMCwgJiMzNDtzdGFydF9zZXJ2ZXImIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CXNlcnZfcG9ydCA9IGdldF9zb2NrZXRfbG9jYWxfcG9ydChzZXJ2KTsKJiM0MzsJaWYgKCFBU1NFUlRfR0Uoc2Vydl9wb3J0LCAwLCAmIzM0O2dldF9zb2NrX2xvY2FsX3BvcnQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7c2Vydl9wb3J0ID0gKF9fYmUxNilzZXJ2X3BvcnQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIENvbm5lY3QgYnV0IG5ldmVyIGFjY2VwdCwgc28gdGhlIGNoaWxkIHNpdHMgaW4gdGhlIGFjY2VwdCBxdWV1ZQomIzQzOwkgKiBvZiB0aGUgbGlzdGVuZXIuIFdhaXQgdW50aWwgaXQmIzM5O3MgYWN0dWFsbHkgdGhlcmUuCiYjNDM7CSAqLwomIzQzOwljbGllbiA9IGNvbm5lY3RfdG9fZmQoc2VydiwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGNsaWVuLCAwLCAmIzM0O2Nvbm5lY3RfdG9fZmQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CXBmZC5mZCA9IHNlcnY7CiYjNDM7CWlmICghQVNTRVJUX0VRKHBvbGwoJmFtcDtwZmQsIDEsIC0xKSwgMSwgJiMzNDtwb2xsIGxpc3RlbmVyJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKiBSdW4gaXRlcmF0b3IgcHJvZ3JhbSB0aGF0IGRlc3Ryb3lzIHNlcnZlciBzb2NrZXRzLiAqLwomIzQzOwlzdGFydF9pdGVyX3NvY2tldHMoc2tlbC0mZ3Q7cHJvZ3MuaXRlcl90Y3A2X3NlcnZlcik7CiYjNDM7CiYjNDM7CWFjY2VwdF9zZXJ2ID0gYWNjZXB0KHNlcnYsIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9MVChhY2NlcHRfc2VydiwgMCwgJiMzNDthY2NlcHQgb24gZGVzdHJveWVkIGxpc3RlbmVyJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlBU1NFUlRfRVEoZXJybm8sIEVJTlZBTCwgJiMzNDtlcnJvciBjb2RlIG9uIGRlc3Ryb3llZCBsaXN0ZW5lciYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogVGhlIHVuYWNjZXB0ZWQgY2hpbGQgd2FzIHJlc2V0IGFsb25nIHdpdGggdGhlIGxpc3RlbmVyLiAqLwomIzQzOwluID0gcmVjdihjbGllbiwgYnVmLCBzaXplb2YoYnVmKSwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0xUKG4sIDAsICYjMzQ7Y2xpZW50IHJlY3Ygb24gcmVzZXQgY2hpbGQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CUFTU0VSVF9FUShlcnJubywgRUNPTk5SRVNFVCwgJiMzNDtlcnJvciBjb2RlIG9uIHJlc2V0IGNoaWxkJiMzNDspOwomIzQzOwomIzQzO2NsZWFudXA6CiYjNDM7CWlmIChjbGllbiAhPSAtMSkKJiM0MzsJCWNsb3NlKGNsaWVuKTsKJiM0MzsJaWYgKGFjY2VwdF9zZXJ2ICE9IC0xKQomIzQzOwkJY2xvc2UoYWNjZXB0X3NlcnYpOwomIzQzOwlpZiAoc2VydiAhPSAtMSkKJiM0MzsJCWNsb3NlKHNlcnYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3RjcF90aW1ld2FpdChzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpCiYjNDM7ewomIzQzOwlpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBhY2NlcHRfc2VydiA9IC0xLCBuOwomIzQzOwlzdHJ1Y3QgdGltZXZhbCB0diA9IHt9OwomIzQzOwljaGFyIGJ1ZlsxXTsKJiM0MzsKJiM0MzsJc2VydiA9IHN0YXJ0X3NlcnZlcihBRl9JTkVUNiwgU09DS19TVFJFQU0sIE5VTEwsIDAsIDApOwomIzQzOwlpZiAoIUFTU0VSVF9HRShzZXJ2LCAwLCAmIzM0O3N0YXJ0X3NlcnZlciYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJY2xpZW4gPSBjb25uZWN0X3RvX2ZkKHNlcnYsIDApOwomIzQzOwlpZiAoIUFTU0VSVF9HRShjbGllbiwgMCwgJiMzNDtjb25uZWN0X3RvX2ZkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlhY2NlcHRfc2VydiA9IGFjY2VwdChzZXJ2LCBOVUxMLCBOVUxMKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoYWNjZXB0X3NlcnYsIDAsICYjMzQ7c2VydiBhY2NlcHQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEFjdGl2ZSBjbG9zZSBmcm9tIHRoZSBjbGllbnQsIHRoZW4gY2xvc2UgdGhlIHNlcnZlciBzaWRlLiBPbmNlCiYjNDM7CSAqIHJlY3YoKSBzZWVzIEVPRiB0aGUgc2VydmVyIEZJTiBoYXMgYmVlbiBwcm9jZXNzZWQgYW5kIHRoZSBjbGllbnQKJiM0MzsJICogc29jayBpcyBpbiBUSU1FX1dBSVQuIEJsb2NrIHdpdGhvdXQgdGltZW91dCBzbyBhIGxvYWRlZCBDSSBib3gKJiM0MzsJICogY2FuJiMzOTt0IHJhY2UgdXMuCiYjNDM7CSAqLwomIzQzOwlpZiAoIUFTU0VSVF9PSyhzZXRzb2Nrb3B0KGNsaWVuLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgJmFtcDt0diwKJiM0MzsJCQkJICBzaXplb2YodHYpKSwgJiMzNDtjbGVhciByY3Z0aW1lbyYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soc2h1dGRvd24oY2xpZW4sIFNIVVRfV1IpLCAmIzM0O2NsaWVudCBzaHV0ZG93biYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTWFrZSBzdXJlIHRoZSBzZXJ2ZXIgaGFzIHNlZW4gdGhlIGNsaWVudCBGSU4gYmVmb3JlIGl0IGNsb3NlcywKJiM0MzsJICogc28gdGhlIHR3byBGSU5zIG5ldmVyIGNyb3NzLgomIzQzOwkgKi8KJiM0MzsJbiA9IHJlY3YoYWNjZXB0X3NlcnYsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOwomIzQzOwlpZiAoIUFTU0VSVF9FUShuLCAwLCAmIzM0O3NlcnZlciByZWN2IEVPRiYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJY2xvc2UoYWNjZXB0X3NlcnYpOwomIzQzOwlhY2NlcHRfc2VydiA9IC0xOwomIzQzOwomIzQzOwkvKiBibG9jayB1bnRpbCByZXR1cm4gRU9GICovCiYjNDM7CW4gPSByZWN2KGNsaWVuLCBidWYsIHNpemVvZihidWYpLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVEobiwgMCwgJiMzNDtjbGllbnQgcmVjdiBFT0YmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIFJ1biBpdGVyYXRvciBwcm9ncmFtIHRoYXQgZGVzdHJveXMgdGhlIHRpbWV3YWl0IGNsaWVudCBzb2NrLiAqLwomIzQzOwlza2VsLSZndDtic3MtJmd0O3R3X2ZvdW5kID0gMDsKJiM0MzsJc3RhcnRfaXRlcl9zb2NrZXRzKHNrZWwtJmd0O3Byb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7CiYjNDM7CWlmICghQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7dHdfZm91bmQsIDEsICYjMzQ7dGltZXdhaXQgc29jayBmb3VuZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJQVNTRVJUX09LKHNrZWwtJmd0O2Jzcy0mZ3Q7dHdfZGVzdHJveV9lcnIsICYjMzQ7ZGVzdHJveSB0aW1ld2FpdCBzb2NrJiMzNDspOwomIzQzOwomIzQzOwkvKiBUaGUgZGVzdHJveWVkIHRpbWV3YWl0IHNvY2sgbXVzdCBiZSBnb25lLiAqLwomIzQzOwlza2VsLSZndDtic3MtJmd0O3R3X2ZvdW5kID0gMDsKJiM0MzsJc3RhcnRfaXRlcl9zb2NrZXRzKHNrZWwtJmd0O3Byb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3R3X2ZvdW5kLCAwLCAmIzM0O3RpbWV3YWl0IHNvY2sgZGVzdHJveWVkJiMzNDspOwomIzQzOwomIzQzO2NsZWFudXA6CiYjNDM7CWlmIChjbGllbiAhPSAtMSkKJiM0MzsJCWNsb3NlKGNsaWVuKTsKJiM0MzsJaWYgKGFjY2VwdF9zZXJ2ICE9IC0xKQomIzQzOwkJY2xvc2UoYWNjZXB0X3NlcnYpOwomIzQzOwlpZiAoc2VydiAhPSAtMSkKJiM0MzsJCWNsb3NlKHNlcnYpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHRlc3RfdWRwX2NsaWVudChzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpCiB7CiAJaW50IHNlcnYgPSAtMSwgY2xpZW4gPSAtMSwgbiA9IDA7CkBAIC0yMDQsNiAmIzQzOzMyMSwxMCBAQCB2b2lkIHRlc3Rfc29ja19kZXN0cm95KHZvaWQpCiAJCXRlc3RfdGNwX2NsaWVudChza2VsKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3RjcF9zZXJ2ZXImIzM0OykpCiAJCXRlc3RfdGNwX3NlcnZlcihza2VsKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt0Y3BfbGlzdGVuX3BlbmRpbmcmIzM0OykpCiYjNDM7CQl0ZXN0X3RjcF9saXN0ZW5fcGVuZGluZyhza2VsKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt0Y3BfdGltZXdhaXQmIzM0OykpCiYjNDM7CQl0ZXN0X3RjcF90aW1ld2FpdChza2VsKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3VkcF9jbGllbnQmIzM0OykpCiAJCXRlc3RfdWRwX2NsaWVudChza2VsKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3VkcF9zZXJ2ZXImIzM0OykpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jCmluZGV4IDllMGJmN2E1NGNlYzkuLjBhODg4NzU0MzIxOGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jCkBAIC03LDYgJiM0Mzs3LDggQEAKICNpbmNsdWRlICYjMzQ7YnBmX3RyYWNpbmdfbmV0LmgmIzM0OwogCiBfX2JlMTYgc2Vydl9wb3J0ID0gMDsKJiM0MztpbnQgdHdfZm91bmQgPSAwOwomIzQzO2ludCB0d19kZXN0cm95X2VyciA9IDA7CiAKIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc2spIF9fa3N5bTsKIApAQCAtMTAwLDYgJiM0MzsxMDIsMzQgQEAgaW50IGl0ZXJfdGNwNl9zZXJ2ZXIoc3RydWN0IGJwZl9pdGVyX190Y3AgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0O2l0ZXIvdGNwJiMzNDspCiYjNDM7aW50IGl0ZXJfdGNwNl90aW1ld2FpdChzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHNvY2tfY29tbW9uICpza19jb21tb24gPSBjdHgtJmd0O3NrX2NvbW1vbjsKJiM0MzsJX191NjQgKnZhbDsKJiM0MzsJaW50IGtleSA9IDA7CiYjNDM7CiYjNDM7CWlmICghc2tfY29tbW9uKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChza19jb21tb24tJmd0O3NrY19mYW1pbHkgIT0gQUZfSU5FVDYpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCFicGZfc2tjX3RvX3RjcF90aW1ld2FpdF9zb2NrKHNrX2NvbW1vbikpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3RjcF9jb25uX3NvY2tldHMsICZhbXA7a2V5KTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJLyogVGhlIHRpbWV3YWl0IHNvY2sgaW5oZXJpdHMgdGhlIGNvb2tpZSBvZiB0aGUgY2xvc2VkIGNsaWVudCBzb2NrLiAqLwomIzQzOwlpZiAoYnBmX2dldF9zb2NrZXRfY29va2llKHNrX2NvbW1vbikgIT0gKnZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl0d19mb3VuZCYjNDM7JiM0Mzs7CiYjNDM7CXR3X2Rlc3Ryb3lfZXJyID0gYnBmX3NvY2tfZGVzdHJveShza19jb21tb24pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiAKIFNFQygmIzM0O2l0ZXIvdWRwJiMzNDspCiBpbnQgaXRlcl91ZHA2X2NsaWVudChzdHJ1Y3QgYnBmX2l0ZXJfX3VkcCAqY3R4KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzI4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmsgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgd2hldGhlciBpdCBwcmVzZW50cyBhbnkgaW50ZXJlc3RpbmcgZnV6emluZyB0YXJnZXRzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMuIExldCYjMzk7cyBzZWUuLi4KCkluIGBuZXQvY29yZS9maWx0ZXIuY2AsIHRoZSBgYnBmX3NvY2tfZGVzdHJveWAgZnVuY3Rpb24gaGFzIGJlZW4gbW9kaWZpZWQuICBJdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIHNvbWUgZmluZS10dW5pbmcgcmVsYXRlZCB0byBob3cgc29ja2V0IGRlc3RydWN0aW9uIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggc2VlbXMgdG8gcmVsYXggdGhlIHJlcXVpcmVtZW50IHRoYXQgdGhlIHNvY2tldCBiZSBhICYjMzQ7ZnVsbHNvY2smIzM0OyBiZWZvcmUgYWxsb3dpbmcgYGRpYWdfZGVzdHJveWAgdG8gYmUgY2FsbGVkLiAgVGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGhhcyBjaGFuZ2VkLCBhbmQgaXQgbm93IHNlZW1zIHRvIGNvbnNpZGVyIGFsbG93aW5nIG5vbi1mdWxsc29jayBzb2NrZXRzIChsaWtlIGB0d19zb2NrYCBvciBgcmVxX3NvY2tgKSBpZiB0aGV5IGhhdmUgYSBgZGlhZ19kZXN0cm95YCBmdW5jdGlvbi4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpczogd2hhdCBpcyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlPyBDb3VsZCB0aGlzIGxlYWQgdG8gbmV3IGNvZGUgcGF0aHMgd2hlbiBkZWFsaW5nIHdpdGggY2VydGFpbiBzb2NrZXQgc3RhdGVzLCBsaWtlIHRpbWUtd2FpdCBzb2NrZXRzIG9yIHJlcXVlc3Qgc29ja2V0cz8gVGhlIHJldHVybiBjb2RlIGxvZ2ljIGlzIGFsc28gbW9kaWZpZWQsIHdoaWNoIEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQuCgpOZXh0LCBpbiBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2AsIHRoZSBwYXRjaCB0b3VjaGVzIGBpbmV0X2Nza19saXN0ZW5fc3RvcGAuIFRoZSBrZXkgY2hhbmdlIGlzIGFkZGluZyBhIGNoZWNrIGZvciB0aGUgQlBGIGNvbnRleHQgKGAhaGFzX2N1cnJlbnRfYnBmX2N0eCgpYCkgYmVmb3JlIGNhbGxpbmcgYGNvbmRfcmVzY2hlZCgpYC4gVGhpcyBpcyBpbXBvcnRhbnQsIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBpc3N1ZXMgd2hlbiBjYWxsZWQgZnJvbSBhIEJQRiBjb250ZXh0LiBDYWxsaW5nIGBjb25kX3Jlc2NoZWQoKWAgaW4gYW4gYXRvbWljIG9yIEJQRiBjb250ZXh0IGlzIGdlbmVyYWxseSBwcm9ibGVtYXRpYy4gSSBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kLgoKRmluYWxseSwgdGhlcmUgYXJlIHNvbWUgc2VsZnRlc3QgYWRkaXRpb25zLiBUaGlzIGNvdWxkIGJlIHVzZWZ1bC4gSXQmIzM5O3MgbGlrZWx5IHRoZXNlIHRlc3RzIHdpbGwgZ2l2ZSBtZSBzb21lIGluc2lnaHQgaW50byBob3cgdGhlc2UgY2hhbmdlcyBhcmUgaW50ZW5kZWQgdG8gZnVuY3Rpb24gYW5kIHBlcmhhcHMgcmV2ZWFsIHNvbWUgZWRnZSBjYXNlcy4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBzdGFydCBkaWdnaW5nIGluIHdpdGggc29tZSBncmVwcGluZyBhbmQgZmlsZSByZWFkaW5nLiBJIG5lZWQgdG8gZGV0ZXJtaW5lOiBXaGF0IGFyZSB0aGUgc3BlY2lmaWMgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMgaW4gdGhlIEJQRiBjb250ZXh0PyBXaGF0IHNvY2tldCBzdGF0ZXMgYXJlIGltcGFjdGVkIGJ5IHRoZXNlIG1vZGlmaWNhdGlvbnM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBjYW5kaWRhdGVzIGZvciBmdXp6aW5nIGJhc2VkIG9uIHRoZSBhbHRlcmVkIGNvZGUgcGF0aHMgb3IgcmV0dXJuIGNvZGVzPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBmb2N1cyBzeW1ib2xzIGFuZCByZWxhdGVkIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0byBiZXR0ZXIgYW5hbHl6ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc29ja19kZXN0cm95JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTEyOTAwPV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTAxLVxubmV0L2NvcmUvZmlsdGVyLmM6MTI5MDI6LyogYnBmX3NvY2tfZGVzdHJveTogRGVzdHJveSB0aGUgZ2l2ZW4gc29ja2V0IHdpdGggRUNPTk5BQk9SVEVEIGVycm9yIGNvZGUuXG5uZXQvY29yZS9maWx0ZXIuYy0xMjkwMy0gKlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTE4LSAqL1xubmV0L2NvcmUvZmlsdGVyLmM6MTI5MTk6X19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxubmV0L2NvcmUvZmlsdGVyLmMtMTI5MjAte1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyOTQxPUJURl9LRlVOQ1NfU1RBUlQoYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzKVxubmV0L2NvcmUvZmlsdGVyLmM6MTI5NDI6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zb2NrX2Rlc3Ryb3kpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk0My1CVEZfS0ZVTkNTX0VORChicGZfc2tfaXRlcl9rZnVuY19pZHMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmM9MTE9aW50IHR3X2Rlc3Ryb3lfZXJyID0gMDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jLTEyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmM6MTM6aW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzaykgX19rc3ltO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMtMTQtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmM9NTE9aW50IGl0ZXJfdGNwNl9jbGllbnQoc3RydWN0IGJwZl9pdGVyX190Y3AgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYy02OS1cdGlmIChzb2NrX2Nvb2tpZSA9PSAqdmFsKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmM6NzA6XHRcdGJwZl9zb2NrX2Rlc3Ryb3koc2tfY29tbW9uKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jLTcxLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jPTc2PWludCBpdGVyX3RjcDZfc2VydmVyKHN0cnVjdCBicGZfaXRlcl9fdGNwICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMtOTktXHRpZiAoc3JjcCA9PSBzZXJ2X3BvcnQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYzoxMDA6XHRcdGJwZl9zb2NrX2Rlc3Ryb3koc2tfY29tbW9uKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jLTEwMS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYz0xMDY9aW50IGl0ZXJfdGNwNl90aW1ld2FpdChzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jLTEyOC1cdHR3X2ZvdW5kJiM0MzsmIzQzOztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jOjEyOTpcdHR3X2Rlc3Ryb3lfZXJyID0gYnBmX3NvY2tfZGVzdHJveShza19jb21tb24pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMtMTMwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jPTEzNT1pbnQgaXRlcl91ZHA2X2NsaWVudChzdHJ1Y3QgYnBmX2l0ZXJfX3VkcCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jLTE1MC1cdGlmIChzb2NrX2Nvb2tpZSA9PSAqdmFsKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmM6MTUxOlx0XHRicGZfc29ja19kZXN0cm95KChzdHJ1Y3Qgc29ja19jb21tb24gKilzayk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYy0xNTItXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmM9MTU3PWludCBpdGVyX3VkcDZfc2VydmVyKHN0cnVjdCBicGZfaXRlcl9fdWRwICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMtMTY5LVx0aWYgKHNyY3AgPT0gc2Vydl9wb3J0KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmM6MTcwOlx0XHRicGZfc29ja19kZXN0cm95KChzdHJ1Y3Qgc29ja19jb21tb24gKilzayk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYy0xNzEtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nX2ZhaWwuYz05PWNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2dfZmFpbC5jLTEwLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nX2ZhaWwuYzoxMTppbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNrKSBfX2tzeW07XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2dfZmFpbC5jLTEyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nX2ZhaWwuYz0xMz1TRUMoXCYjMzQ7dHBfYnRmL3RjcF9kZXN0cm95X3NvY2tcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2dfZmFpbC5jOjE0Ol9fZmFpbHVyZSBfX21zZyhcJiMzNDtjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBicGZfc29ja19kZXN0cm95IGlzIG5vdCBhbGxvd2VkXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nX2ZhaWwuYy0xNS1pbnQgQlBGX1BST0codHJhY2VfdGNwX2Rlc3Ryb3lfc29jaywgc3RydWN0IHNvY2sgKnNrKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZ19mYWlsLmMtMTctXHQvKiBzaG91bGQgbm90IGxvYWQgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZ19mYWlsLmM6MTg6XHRicGZfc29ja19kZXN0cm95KChzdHJ1Y3Qgc29ja19jb21tb24gKilzayk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2dfZmFpbC5jLTE5LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2l0ZXJfYmF0Y2guYz03Nj1pbnQgaXRlcl90Y3BfZGVzdHJveShzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2l0ZXJfYmF0Y2guYy04Ny1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2l0ZXJfYmF0Y2guYzo4ODpcdGJwZl9zb2NrX2Rlc3Ryb3koc2tfY29tbW9uKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2l0ZXJfYmF0Y2guYy04OS1cdGJwZl9zZXFfd3JpdGUoY3R4LVx1MDAzZW1ldGEtXHUwMDNlc2VxLCBcdTAwMjZzb2NrX2Nvb2tpZSwgc2l6ZW9mKHNvY2tfY29va2llKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTM6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ2MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgQ29kZTogVW5kZXJzdGFuZGluZyBOZXR3b3JrIEZpbHRlcmluZyBhbmQgQ29ubmVjdGlvbiBNYW5hZ2VtZW50KioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbW9kaWZpY2F0aW9ucyB0aGF0IGhhdmUgYmVlbiBtYWRlLCBzbyBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0d28ga2V5IGZpbGVzLiBGaXJzdCwgSSYjMzk7bSBzdGFydGluZyB3aXRoIGBuZXQvY29yZS9maWx0ZXIuY2AuIEkga25vdyB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIHBhY2tldCBmaWx0ZXJpbmcgbG9naWMgcmVzaWRlcywgc28gSSYjMzk7bSBsb29raW5nIGZvciBjaGFuZ2VzIHRoYXQgd291bGQgYWZmZWN0IGhvdyBwYWNrZXRzIGFyZSBjbGFzc2lmaWVkLCBwcm9jZXNzZWQsIG9yIHBvdGVudGlhbGx5IGRyb3BwZWQuIEkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGFsdGVyYXRpb25zIGluIHRoZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGhhbmRsaW5nLCBhbnkgbmV3IGZpbHRlciBob29rcywgb3IgYW55IHVwZGF0ZXMgdG8gdGhlIGZpbHRlciBjaGFpbnMuIEkmIzM5O20gbG9va2luZyBmb3IgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZmlsdGVyaW5nIGxhbmRzY2FwZSBoYXMgY2hhbmdlZC4KCk5leHQsIEkmIzM5O2xsIG1vdmUgb3ZlciB0byBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2AuIFRoaXMgZmlsZSBpcyBjcnVjaWFsIGZvciBtYW5hZ2luZyBUQ1AvSVAgY29ubmVjdGlvbnMgaW4gdGhlIElQdjQgY29udGV4dC4gSSBhbnRpY2lwYXRlIGNoYW5nZXMgaGVyZSBtaWdodCByZWxhdGUgdG8gaG93IGNvbm5lY3Rpb25zIGFyZSBlc3RhYmxpc2hlZCwgbWFpbnRhaW5lZCwgb3IgdGVybWluYXRlZCwgcG90ZW50aWFsbHkgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgZmlsdGVyaW5nIHJ1bGVzIEkgZXhhbWluZWQgcHJldmlvdXNseS4gSSYjMzk7bGwgYmUgc2NydXRpbml6aW5nIHNvY2tldCBjcmVhdGlvbiwgY29ubmVjdGlvbiBhY2NlcHRhbmNlLCBhbmQgZGF0YSBmbG93IHRvIHNlZSBpZiBhbnkgbmV3IGZpbHRlcmluZyBjcml0ZXJpYSBvciBzZWN1cml0eSBtZWFzdXJlcyBoYXZlIGJlZW4gaW50ZWdyYXRlZCB3aXRoaW4gdGhpcyBwYXJ0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJdCYjMzk7cyBhIGtleSBzcG90IHRvIHNlZSBob3cgdGhlIGNvbm5lY3Rpb24gcHJvY2VzcyBpbnRlcmFjdHMgd2l0aCB0aGUgZmlsdGVyaW5nIG1lY2hhbmlzbXMuIFVsdGltYXRlbHksIEkmIzM5O20gZXhwZWN0aW5nIHRvIHVuY292ZXIgaG93IHRoZXNlIHNwZWNpZmljIG1vZGlmaWNhdGlvbnMgaW5mbHVlbmNlIHRoZSBuZXR3b3JrIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjkwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjkwNTpcdCAqIHByb3RvY29sIHNwZWNpZmljIHNvY2tldCBkZXN0cm95IGhhbmRsZXJzLlxuMTI5MDY6XHQgKlxuMTI5MDc6XHQgKiBUaGUgaGVscGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIEJQRiBjb250ZXh0cyB0aGF0IGhhdmUgYWNxdWlyZWQgdGhlIHNvY2tldFxuMTI5MDg6XHQgKiBsb2Nrcy5cbjEyOTA5Olx0ICpcbjEyOTEwOlx0ICogUGFyYW1ldGVyczpcbjEyOTExOlx0ICogQHNvY2s6IFBvaW50ZXIgdG8gc29ja2V0IHRvIGJlIGRlc3Ryb3llZFxuMTI5MTI6XHQgKlxuMTI5MTM6XHQgKiBSZXR1cm46XG4xMjkxNDpcdCAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIG9yIHdoYXRldmVyIHRoZSBwcm90b2NvbCBzcGVjaWZpY1xuMTI5MTU6XHQgKiBkZXN0cm95IGhhbmRsZXIgcmV0dXJucy5cbjEyOTE2Olx0ICogRU9QTk9UU1VQUCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC5cbjEyOTE3Olx0ICogMCBvdGhlcndpc2VcbjEyOTE4Olx0ICovXG4xMjkxOTpcdF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaylcbjEyOTIwOlx0e1xuMTI5MjE6XHRcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKXNvY2s7XG4xMjkyMjpcdFxuMTI5MjM6XHRcdC8qIFRoZSBsb2NraW5nIHNlbWFudGljcyB0aGF0IGFsbG93IGZvciBzeW5jaHJvbm91cyBleGVjdXRpb24gb2YgdGhlXG4xMjkyNDpcdFx0ICogZGVzdHJveSBoYW5kbGVycyBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIFRDUCBhbmQgVURQLlxuMTI5MjU6XHRcdCAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHRcbjEyOTI2Olx0XHQgKiBwcmlvciB0byBpbnZva2luZyB0aGlzIGtmdW5jLlxuMTI5Mjc6XHRcdCAqL1xuMTI5Mjg6XHRcdGlmICghc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3kpXG4xMjkyOTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMjkzMDpcdFxuMTI5MzE6XHRcdGlmIChza19mdWxsc29jayhzaykgXHUwMDI2XHUwMDI2XG4xMjkzMjpcdFx0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNlxuMTI5MzM6XHRcdCAgICBzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUClcbjEyOTM0Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjEyOTM1Olx0XG4xMjkzNjpcdFx0cmV0dXJuIHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95KHNrLCBFQ09OTkFCT1JURUQpO1xuMTI5Mzc6XHR9XG4xMjkzODpcdFxuMTI5Mzk6XHRfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuMTI5NDA6XHRcbjEyOTQxOlx0QlRGX0tGVU5DU19TVEFSVChicGZfc2tfaXRlcl9rZnVuY19pZHMpXG4xMjk0MjpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc29ja19kZXN0cm95KVxuMTI5NDM6XHRCVEZfS0ZVTkNTX0VORChicGZfc2tfaXRlcl9rZnVuY19pZHMpXG4xMjk0NDpcdFxuMTI5NDU6XHRzdGF0aWMgaW50IHRyYWNpbmdfaXRlcl9maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG4xMjk0NjpcdHtcbjEyOTQ3Olx0XHRpZiAoYnRmX2lkX3NldDhfY29udGFpbnMoXHUwMDI2YnBmX3NrX2l0ZXJfa2Z1bmNfaWRzLCBrZnVuY19pZCkgXHUwMDI2XHUwMDI2XG4xMjk0ODpcdFx0ICAgIHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX0lURVIpXG4xMjk0OTpcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTk5CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgaW5ldF9jb25uZWN0aW9uX3NvY2suY2AqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMgcHJvYmxlbS4gTGV0JiMzOTtzIHB1bGwgdXAgdGhlIHNvdXJjZSBjb2RlIGZvciBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2AuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIHNlY3Rpb24gYXJvdW5kIGxpbmUgMTUwMCB0byAxNTQwLiBUaGF0IHJhbmdlIHVzdWFsbHkgY292ZXJzIFtpbnNlcnQgYXNzdW1wdGlvbiBhYm91dCB0aGUgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcyBsaWtlbHkgY292ZXJlZCBieSB0aGUgY29kZSB3aXRoaW4gdGhlIHNwZWNpZmllZCBsaW5lczsgZS5nLiwgJiMzNDtjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIHRlYXIgZG93biBsb2dpYywmIzM0OyBvciAmIzM0O2hhbmRsaW5nIG9mIHNwZWNpZmljIHNvY2tldCBvcHRpb25zLCYjMzQ7IG9yICYjMzQ7YSBwYXJ0aWN1bGFyIHF1ZXVpbmcgbWVjaGFuaXNtJiMzNDtdLiBJJiMzOTttIGhvcGluZyBJIGNhbiBwaW5wb2ludCBleGFjdGx5IHdoZXJlIHRoZSBbaW5zZXJ0IHlvdXIgaHlwb3RoZXNpcyBhYm91dCB0aGUgYnVnLCBvciB0aGUgZmVhdHVyZSB5b3UmIzM5O3JlIGxvb2tpbmcgZm9yXSBpcyBoYXBwZW5pbmcgb3IgaW1wbGVtZW50ZWQgd2l0aGluIHRoZSBUQ1AvSVAgc3RhY2suIFRoaXMgc2hvdWxkIHByb3ZpZGUgc29tZSB1c2VmdWwgY29udGV4dCBhbmQgYSBtb3JlIG5hcnJvdyBzZXQgb2YgY29kZSB0byBhbmFseXplLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTUwMDpcdFx0XHRcdFx0XHRSRUFEX09OQ0UobnNrLVx1MDAzZXNrX2RhdGFfcmVhZHkpKG5zayk7XG4xNTAxOlx0XHRcdFx0XHR9IGVsc2Uge1xuMTUwMjpcdFx0XHRcdFx0XHRfX05FVF9JTkNfU1RBVFMoc29ja19uZXQobnNrKSxcbjE1MDM6XHRcdFx0XHRcdFx0XHRcdExJTlVYX01JQl9UQ1BNSUdSQVRFUkVRRkFJTFVSRSk7XG4xNTA0Olx0XHRcdFx0XHRcdHJlcXNrX21pZ3JhdGVfcmVzZXQobnJlcSk7XG4xNTA1Olx0XHRcdFx0XHRcdF9fcmVxc2tfZnJlZShucmVxKTtcbjE1MDY6XHRcdFx0XHRcdH1cbjE1MDc6XHRcdFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTUwODpcdFxuMTUwOTpcdFx0XHRcdFx0LyogaW5ldF9jc2tfcmVxc2tfcXVldWVfYWRkKCkgaGFzIGFscmVhZHlcbjE1MTA6XHRcdFx0XHRcdCAqIGNhbGxlZCBpbmV0X2NoaWxkX2ZvcmdldCgpIG9uIGZhaWx1cmUgY2FzZS5cbjE1MTE6XHRcdFx0XHRcdCAqL1xuMTUxMjpcdFx0XHRcdFx0Z290byBza2lwX2NoaWxkX2ZvcmdldDtcbjE1MTM6XHRcdFx0XHR9XG4xNTE0Olx0XHRcdH1cbjE1MTU6XHRcbjE1MTY6XHRcdFx0aW5ldF9jaGlsZF9mb3JnZXQoc2ssIHJlcSwgY2hpbGQpO1xuMTUxNzpcdHNraXBfY2hpbGRfZm9yZ2V0OlxuMTUxODpcdFx0XHRyZXFza19wdXQocmVxKTtcbjE1MTk6XHRcdFx0YmhfdW5sb2NrX3NvY2soY2hpbGQpO1xuMTUyMDpcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbjE1MjE6XHRcdFx0c29ja19wdXQoY2hpbGQpO1xuMTUyMjpcdFxuMTUyMzpcdFx0XHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcbjE1MjQ6XHRcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjE1MjU6XHRcdH1cbjE1MjY6XHRcdGlmIChxdWV1ZS1cdTAwM2VmYXN0b3BlbnEucnNrcV9yc3RfaGVhZCkge1xuMTUyNzpcdFx0XHQvKiBGcmVlIGFsbCB0aGUgcmVxcyBxdWV1ZWQgaW4gcnNrcV9yc3RfaGVhZC4gKi9cbjE1Mjg6XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnF1ZXVlLVx1MDAzZWZhc3RvcGVucS5sb2NrKTtcbjE1Mjk6XHRcdFx0cmVxID0gcXVldWUtXHUwMDNlZmFzdG9wZW5xLnJza3FfcnN0X2hlYWQ7XG4xNTMwOlx0XHRcdHF1ZXVlLVx1MDAzZWZhc3RvcGVucS5yc2txX3JzdF9oZWFkID0gTlVMTDtcbjE1MzE6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cXVldWUtXHUwMDNlZmFzdG9wZW5xLmxvY2spO1xuMTUzMjpcdFx0XHR3aGlsZSAocmVxICE9IE5VTEwpIHtcbjE1MzM6XHRcdFx0XHRuZXh0ID0gcmVxLVx1MDAzZWRsX25leHQ7XG4xNTM0Olx0XHRcdFx0cmVxc2tfcHV0KHJlcSk7XG4xNTM1Olx0XHRcdFx0cmVxID0gbmV4dDtcbjE1MzY6XHRcdFx0fVxuMTUzNzpcdFx0fVxuMTUzODpcdFx0V0FSTl9PTl9PTkNFKHNrLVx1MDAzZXNrX2Fja19iYWNrbG9nKTtcbjE1Mzk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTM6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NzIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBicGZfc29ja19kZXN0cm95YCBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYGJwZl9zb2NrX2Rlc3Ryb3lgIGlzIGEgQlBGIGtmdW5jLCB3aGljaCBtZWFucyBpdCBjYW4gYmUgdXNlZCB3aXRoaW4gQlBGIGl0ZXJhdG9yIHByb2dyYW1zLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgYmVoYXZpb3Igb2YgdGhpcyBmdW5jdGlvbiB3aGVuIGNhbGxlZCBvbiBkaWZmZXJlbnQgc29ja2V0IHN0YXRlcyDigJMgcGFydGljdWxhcmx5IHRpbWV3YWl0IGFuZCBsaXN0ZW5pbmcgc29ja2V0cy4KCkZvciBhIHRpbWV3YWl0IHNvY2tldCwgdGhlIGNvZGUgbm93IGNoZWNrcyBgc2tfZnVsbHNvY2soc2spYC4gVGhpcyBtYWtlcyBzZW5zZSBiZWNhdXNlIGEgdGltZXdhaXQgc29ja2V0IGlzbiYjMzk7dCBhICYjMzQ7ZnVsbCYjMzQ7IHNvY2tldCAoaS5lLiwgYHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUYCBvciBgVENQX05FV19TWU5fUkVDVmApLiBQcmV2aW91c2x5LCB0aGVyZSB3YXMgYSBjaGVjayBvbiBgc2stJmd0O3NrX3Byb3RvY29sYCB3aGljaCBtaWdodCBub3QgYmUgdmFsaWQgb3IgcmVsaWFibGUgZm9yIG5vbi1mdWxsc29jayBzdGF0ZXMuIFNvLCBhZGRpbmcgdGhpcyBgc2tfZnVsbHNvY2soc2spYCBjaGVjayBzZWVtcyB0byBhbGxvdyBgZGlhZ19kZXN0cm95YCBvcGVyYXRpb25zIChsaWtlIHRob3NlIHVzZWQgYnkgdHdfc29jaykgdG8gcHJvY2VlZCBjb3JyZWN0bHkuIFVsdGltYXRlbHksIHRoaXMgY2hhbmdlIG1ha2VzIHNlbnNlIGJlY2F1c2UgaXQgbWVhbnMgdGhhdCB3ZSBjYW4gY29ycmVjdGx5IGRlc3Ryb3kgYSBzb2NrZXQgdXNpbmcgdGhlIGBicGZfc29ja19kZXN0cm95YCBldmVuIGlmIGl0IGlzIG5vdCBhIGZ1bGx5IGVzdGFibGlzaGVkIHNvY2tldC4KCkZvciBhIGxpc3RlbmluZyBzb2NrZXQsIHRoZSBmdW5jdGlvbiBgaW5ldF9jc2tfbGlzdGVuX3N0b3BgIGlzIGNyaXRpY2FsIHdoZW4gYGJwZl9zb2NrX2Rlc3Ryb3lgIGlzIGNhbGxlZC4gSXQgc2VlbXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBsaXN0ZW5pbmcgcHJvY2VzcyBpcyBzdG9wcGVkIHZpYSBgZGlhZ19kZXN0cm95YCAoc3BlY2lmaWNhbGx5LCBgdGNwX2RpYWdfZGVzdHJveWAgbGVhZHMgdG8gYHRjcF9hYm9ydGAgYW5kIGV2ZW50dWFsbHkgYGluZXRfY3NrX2xpc3Rlbl9zdG9wYCkuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGNvbmRfcmVzY2hlZCgpYCBpcyBpbnRlcmVzdGluZy4gVGhlIHByZXZpb3VzIGNvZGUgY291bGQgY2F1c2UgYSAmIzM0O3NjaGVkdWxpbmcgd2hpbGUgYXRvbWljJiMzNDsgZXJyb3IgaW4gYSBCUEYgaXRlcmF0b3IgY29udGV4dC4gSXQgc2VlbXMgdGhhdCB0aGUgY29uZGl0aW9uIGBpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSkgY29uZF9yZXNjaGVkKCk7YCB3YXMgYWRkZWQgdG8gZW5zdXJlIHRoYXQgd2Ugb25seSB5aWVsZCBpZiB3ZSYjMzk7cmUgKm5vdCogaW4gYSBCUEYgY29udGV4dCB0aGF0IHByb2hpYml0cyBzbGVlcGluZyBvciBtaWdyYXRpb24uCgpOb3csIGEga2V5IHF1ZXN0aW9uIGZvciBtZTogSXMgdGhpcyBjb2RlIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cz8gVGhlIGFuc3dlciBpcyB5ZXMuIFNpbmNlIEJQRiBhbmQgc29ja2V0IGRlc3RydWN0aW9uIHZpYSBCUEYgaXRlcmF0b3JzIChlLmcuLCBgQlBGX1BST0dfVFlQRV9UUkFDSU5HYCBvciBgQlBGX1RSQUNFX0lURVJgKSBhcmUgc3RhbmRhcmQsIGFzIHdlbGwgYXMgdGhlIGZhY3QgdGhhdCBzeXprYWxsZXIgZnV6emVzIEJQRiBhbmQgc29ja2V0IGl0ZXJhdG9ycywgdGhlcmUgaXMgYSBzdHJvbmcgcG9zc2liaWxpdHkgdGhhdCB0aGlzIG5ldyBjb2RlIHBhdGggY2FuIGJlIGhpdC4KClRoZXJlZm9yZSwgaXMgdGhpcyBjaGFuZ2Ugd29ydGggZnV6emluZz8gQWJzb2x1dGVseSwgYFdvcnRoRnV6emluZzogdHJ1ZWAuIFRoaXMgaXMgYmVjYXVzZSBpdCBtb2RpZmllcyB0aGUgZXhlY3V0YWJsZSBsb2dpYyB3aXRoaW4gY29yZSBzdWJzeXN0ZW1zOiBCUEYgYW5kIFRDUC9JUHY0IG5ldHdvcmtpbmcuIFNwZWNpZmljYWxseSwgaXQgY2hhbmdlcyB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBzb2NrZXQgZGVzdHJ1Y3Rpb24gb2NjdXJzIGFuZCB0aGUgc2NoZWR1bGVyIHlpZWxkIGJlaGF2aW9yIGluIGBpbmV0X2Nza19saXN0ZW5fc3RvcGAuIEkgbmVlZCB0byBub3cgY2hlY2sgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhbmQgdGhlIGZvY3VzIHN5bWJvbHMgcmVsYXRlZCB0byBib3RoIGBicGZfc29ja19kZXN0cm95YCBhbmQgYGluZXRfY3NrX2xpc3Rlbl9zdG9wYC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFyb3VuZCBgbmV0L2NvcmUvZmlsdGVyLmNgIGFuZCBzcGVjaWZpY2FsbHkgYEJQRmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19CUEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9NDQ9b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHNrbXNnLm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9za19zdG9yYWdlLm9cbm5ldC9jb3JlL01ha2VmaWxlLTQ3LWlmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9NYWtlZmlsZTo0ODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfa3NvY2sub1xubmV0L2NvcmUvTWFrZWZpbGUtNDktZW5kaWZcbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYz0yNzQ9QlRGX0tGVU5DU19FTkQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcbm5ldC9jb3JlL2JwZl9rc29jay5jLTI3NS1cbm5ldC9jb3JlL2JwZl9rc29jay5jOjI3NjojaWZkZWYgQ09ORklHX0JQRl9MU01cbm5ldC9jb3JlL2JwZl9rc29jay5jLTI3Ny1CVEZfSURfTElTVF9TSU5HTEUoYnBmX2xzbV9zb2NrZXRfc2VuZG1zZ19pZCwgZnVuYywgYnBmX2xzbV9zb2NrZXRfc2VuZG1zZylcbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYz0yODA9c3RhdGljIGludCBicGZfa3NvY2tfa2Z1bmNfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jLTI4Ny1cbm5ldC9jb3JlL2JwZl9rc29jay5jOjI4ODojaWZkZWYgQ09ORklHX0JQRl9MU01cbm5ldC9jb3JlL2JwZl9rc29jay5jLTI4OS1cdGlmIChwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00gXHUwMDI2XHUwMDI2XG4tLVxubmV0L2NvcmUvZGV2Lmg9MzgyPWludCBycHNfY3B1bWFza19ob3VzZWtlZXBpbmcoc3RydWN0IGNwdW1hc2sgKm1hc2spO1xubmV0L2NvcmUvZGV2LmgtMzgzLVxubmV0L2NvcmUvZGV2Lmg6Mzg0OiNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19ORVQpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcbm5ldC9jb3JlL2Rldi5oLTM4NS12b2lkIHhkcF9kb19jaGVja19mbHVzaGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NDUzMz1FWFBPUlRfU1lNQk9MX0dQTCh4ZHBfZG9fZmx1c2gpO1xubmV0L2NvcmUvZmlsdGVyLmMtNDUzNC1cbm5ldC9jb3JlL2ZpbHRlci5jOjQ1MzU6I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX05FVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxubmV0L2NvcmUvZmlsdGVyLmMtNDUzNi12b2lkIHhkcF9kb19jaGVja19mbHVzaGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcbi0tXG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jPTc0PUVYUE9SVF9TWU1CT0woc2tiX2Zsb3dfZGlzc2VjdG9yX2luaXQpO1xubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYy03NS1cbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmM6NzY6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYy03Ny1pbnQgZmxvd19kaXNzZWN0b3JfYnBmX3Byb2dfYXR0YWNoX2NoZWNrKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jLTEwNS19XG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jOjEwNjojZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jLTEwNy1cbi0tXG5uZXQvY29yZS9za21zZy5jPTU0NT1zdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za21zZy5jLTU3My1cbm5ldC9jb3JlL3NrbXNnLmM6NTc0OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcbm5ldC9jb3JlL3NrbXNnLmMtNTc1LVx0cHNvY2stXHUwMDNlaW5ncmVzc19ieXRlcyAmIzQzOz0gbGVuO1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTA1Nz1zdGF0aWMgdm9pZCBza19wc29ja193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMDczLVxubmV0L2NvcmUvc2ttc2cuYzoxMDc0OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcbm5ldC9jb3JlL3NrbXNnLmMtMTA3NS1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX3JlYWQoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jPTExOTM9c3RhdGljIHZvaWQgc2tfcHNvY2tfZG9uZV9zdHJwKHN0cnVjdCBza19wc29jayAqcHNvY2spXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMTk1LX1cbm5ldC9jb3JlL3NrbXNnLmM6MTE5NjojZW5kaWYgLyogQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSICovXG5uZXQvY29yZS9za21zZy5jLTExOTctXG4tLVxubmV0L2NvcmUvc29jay5jPTIzNDk9c3RhdGljIHZvaWQgX19za19kZXN0cnVjdChzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4tLVxubmV0L2NvcmUvc29jay5jLTIzNjYtXG5uZXQvY29yZS9zb2NrLmM6MjM2NzojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5uZXQvY29yZS9zb2NrLmMtMjM2OC1cdGJwZl9za19zdG9yYWdlX2ZyZWUoc2spO1xuLS1cbm5ldC9jb3JlL3NvY2suYz0yNDc5PXN0cnVjdCBzb2NrICpza19jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGdmcF90IHByaW9yaXR5LFxuLS1cbm5ldC9jb3JlL3NvY2suYy0yNDkzLVx0bmV3c2stXHUwMDNlc2tfcHJvdF9jcmVhdG9yID0gcHJvdDtcbm5ldC9jb3JlL3NvY2suYzoyNDk0OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC9jb3JlL3NvY2suYy0yNDk1LVx0UkNVX0lOSVRfUE9JTlRFUihuZXdzay1cdTAwM2Vza19icGZfc3RvcmFnZSwgTlVMTCk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xNDc3PXN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19saW5rX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKioqcHByb2csXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNDkxLVx0XHRicmVhaztcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ5MjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0OTMtXHRjYXNlIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUjpcbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYz0zNTI9c3RhdGljIGludCBwcm9jX2RvX3NrYl9kZWZlcl9tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0zNzQtXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzozNzU6I2lmZGVmIENPTkZJR19CUEZfSklUXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0zNzYtc3RhdGljIGludCBwcm9jX2RvaW50dmVjX21pbm1heF9icGZfZW5hYmxlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4tLVxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNDAxLVx0aWYgKHdyaXRlIFx1MDAyNlx1MDAyNiByZXQgXHUwMDI2XHUwMDI2IG1pbiA9PSBtYXgpXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzo0MDI6XHRcdHByX2luZm9fb25jZShcJiMzNDtDT05GSUdfQlBGX0pJVF9BTFdBWVNfT04gaXMgZW5hYmxlZCwgYnBmX2ppdF9lbmFibGUgaXMgcGVybWFuZW50bHkgc2V0IHRvIDEuXFxuXCYjMzQ7KTtcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTQwMy1cbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYz00MzA9c3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0X2NvcmVfdGFibGVbXSA9IHtcbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy00ODMtXHR9LFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6NDg0OiNpZmRlZiBDT05GSUdfQlBGX0pJVFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNDg1LVx0e1xuLS1cbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTQ5MC1cdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvaW50dmVjX21pbm1heF9icGZfZW5hYmxlLFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6NDkxOiMgaWZkZWYgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy00OTItXHRcdC5leHRyYTFcdFx0PSBTWVNDVExfT05FLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzYwMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50LCBhc3N1bWluZyBJJiMzOTttIHRoZSBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYGJwZl9zb2NrX2Rlc3Ryb3lgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AqKgoKT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgYGJwZl9zb2NrX2Rlc3Ryb3lgIGZ1bmN0aW9uIGFuZCBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBuZXQvY29yZS9maWx0ZXIuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHVuZGVyIHdoYXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MgKGAjaWZkZWZgKSBpdOKAmXMgaW5jbHVkZWQuIFRoaXMgaXMgbGlrZWx5IGEga2V5IGFzcGVjdCBvZiB0aGlzIGZ1bmN0aW9uLCBhcyBpdCBpcyBhIGxlc3MgZnJlcXVlbnRseSB1c2VkIGZ1bmN0aW9uLiBUaGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgd2lsbCB0ZWxsIG1lIHdoaWNoIGZlYXR1cmVzIG9yIGtlcm5lbCBjb25maWd1cmF0aW9ucyBlbmFibGUgb3IgZGlzYWJsZSB0aGUgZnVuY3Rpb25hbGl0eSBhc3NvY2lhdGVkIHdpdGggYGJwZl9zb2NrX2Rlc3Ryb3lgLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgY3JpdGljYWwgdG8gdHJvdWJsZXNob290aW5nLiBJdCB3aWxsIGhlbHAgbWUgc2VlIHdoaWNoIGtlcm5lbCBidWlsZHMgd2lsbCBpbmNsdWRlIHRoaXMgYW5kIHRoZXJlZm9yZSB3aGljaCBjb25maWd1cmF0aW9ucyBJIHNob3VsZCB0ZXN0IHdoZW4gSSBhbSB3b3JraW5nIG9uIHJlbGF0ZWQgY29kZS4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgaG93IGl04oCZcyBiZWluZyB1c2VkIGluIHRoZSBzb2NrZXQgQlBGIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZnwjaWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0zMTg9c3RhdGljIHUzMiBjb252ZXJ0X3NrYl9hY2Nlc3MoaW50IHNrYl9maWVsZCwgaW50IGRzdF9yZWcsIGludCBzcmNfcmVnLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTMzMy1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTMyX0lNTShCUEZfQU5ELCBkc3RfcmVnLCBQS1RfVFlQRV9NQVgpO1xubmV0L2NvcmUvZmlsdGVyLmM6MzM0OiNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTERcbm5ldC9jb3JlL2ZpbHRlci5jLTMzNS1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTMyX0lNTShCUEZfUlNILCBkc3RfcmVnLCA1KTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xNjgxPXN0YXRpYyBpbmxpbmUgaW50IF9fYnBmX3RyeV9tYWtlX3dyaXRhYmxlKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTY4My17XG5uZXQvY29yZS9maWx0ZXIuYzoxNjg0OiNpZmRlZiBDT05GSUdfREVCVUdfTkVUXG5uZXQvY29yZS9maWx0ZXIuYy0xNjg1LVx0LyogQXZvaWQgYSBzcGxhdCBpbiBwc2tiX21heV9wdWxsX3JlYXNvbigpICovXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MjIwNz1zdGF0aWMgaW50IF9fYnBmX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMjIxNS1cbm5ldC9jb3JlL2ZpbHRlci5jOjIyMTY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy0yMjE3LXN0YXRpYyBpbnQgYnBmX291dF9uZWlnaF92NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MjMxMz1zdGF0aWMgaW50IF9fYnBmX3JlZGlyZWN0X25laWdoX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMjMyMC1cbm5ldC9jb3JlL2ZpbHRlci5jOjIzMjE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXG5uZXQvY29yZS9maWx0ZXIuYy0yMzIyLXN0YXRpYyBpbnQgYnBmX291dF9uZWlnaF92NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MzE4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9tc2dfcG9wX2RhdGFfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzE5Mi1cbm5ldC9jb3JlL2ZpbHRlci5jOjMxOTM6I2lmZGVmIENPTkZJR19DR1JPVVBfTkVUX0NMQVNTSURcbm5ldC9jb3JlL2ZpbHRlci5jLTMxOTQtQlBGX0NBTExfMChicGZfZ2V0X2Nncm91cF9jbGFzc2lkX2N1cnIpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NDUzMz1FWFBPUlRfU1lNQk9MX0dQTCh4ZHBfZG9fZmx1c2gpO1xubmV0L2NvcmUvZmlsdGVyLmMtNDUzNC1cbm5ldC9jb3JlL2ZpbHRlci5jOjQ1MzU6I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX05FVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxubmV0L2NvcmUvZmlsdGVyLmMtNDUzNi12b2lkIHhkcF9kb19jaGVja19mbHVzaGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz01MTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl91bmRlcl9jZ3JvdXBfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNTE3OS1cbm5ldC9jb3JlL2ZpbHRlci5jOjUxODA6I2lmZGVmIENPTkZJR19TT0NLX0NHUk9VUF9EQVRBXG5uZXQvY29yZS9maWx0ZXIuYy01MTgxLXN0YXRpYyBpbmxpbmUgdTY0IF9fYnBmX3NrX2Nncm91cF9pZChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjIwMj1CUEZfQ0FMTF8zKGJwZl9iaW5kLCBzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuICosIGN0eCwgc3RydWN0IHNvY2thZGRyICosIGFkZHIsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjIwNC17XG5uZXQvY29yZS9maWx0ZXIuYzo2MjA1OiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtNjIwNi1cdHN0cnVjdCBzb2NrICpzayA9IGN0eC1cdTAwM2Vzaztcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02MjE4LVx0XHRyZXR1cm4gX19pbmV0X2JpbmQoc2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWFkZHIsIGFkZHJfbGVuLCBmbGFncyk7XG5uZXQvY29yZS9maWx0ZXIuYzo2MjE5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtNjIyMC1cdH0gZWxzZSBpZiAoYWRkci1cdTAwM2VzYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02MjM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2JpbmRfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjI0My1cbm5ldC9jb3JlL2ZpbHRlci5jOjYyNDQ6I2lmZGVmIENPTkZJR19YRlJNXG5uZXQvY29yZS9maWx0ZXIuYy02MjQ1LVxubmV0L2NvcmUvZmlsdGVyLmM6NjI0NjojaWYgKElTX0JVSUxUSU4oQ09ORklHX1hGUk1fSU5URVJGQUNFKSBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfREVCVUdfSU5GT19CVEYpKSB8fCBcXFxubmV0L2NvcmUvZmlsdGVyLmMtNjI0Ny0gICAgKElTX01PRFVMRShDT05GSUdfWEZSTV9JTlRFUkZBQ0UpIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTKSlcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02Mjg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9nZXRfeGZybV9zdGF0ZV9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02Mjk4LVxubmV0L2NvcmUvZmlsdGVyLmM6NjI5OTojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgfHwgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTYzMDAtc3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjMwNi1cbm5ldC9jb3JlL2ZpbHRlci5jOjYzMDc6I2lmIElTX0VOQUJMRUQoQ09ORklHX1ZMQU5fODAyMVEpXG5uZXQvY29yZS9maWx0ZXIuYy02MzA4LVx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikgXHUwMDI2XHUwMDI2IGlzX3ZsYW5fZGV2KGRldikpIHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02MzI5PXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnBmX2ZpYl92bGFuX2lucHV0X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTYzNDgtXG5uZXQvY29yZS9maWx0ZXIuYzo2MzQ5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxubmV0L2NvcmUvZmlsdGVyLmMtNjM1MC1zdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02NTAwLVxubmV0L2NvcmUvZmlsdGVyLmM6NjUwMTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTY1MDItc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjY3MT1CUEZfQ0FMTF80KGJwZl94ZHBfZmliX2xvb2t1cCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02NjgwLVx0c3dpdGNoIChwYXJhbXMtXHUwMDNlZmFtaWx5KSB7XG5uZXQvY29yZS9maWx0ZXIuYzo2NjgxOiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxubmV0L2NvcmUvZmlsdGVyLmMtNjY4Mi1cdGNhc2UgQUZfSU5FVDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02Njg1LSNlbmRpZlxubmV0L2NvcmUvZmlsdGVyLmM6NjY4NjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTY2ODctXHRjYXNlIEFGX0lORVQ2OlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTY3MDU9QlBGX0NBTExfNChicGZfc2tiX2ZpYl9sb29rdXAsIHN0cnVjdCBza19idWZmICosIHNrYixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02NzI0LVx0c3dpdGNoIChwYXJhbXMtXHUwMDNlZmFtaWx5KSB7XG5uZXQvY29yZS9maWx0ZXIuYzo2NzI1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxubmV0L2NvcmUvZmlsdGVyLmMtNjcyNi1cdGNhc2UgQUZfSU5FVDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02NzI5LSNlbmRpZlxubmV0L2NvcmUvZmlsdGVyLmM6NjczMDojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTY3MzEtXHRjYXNlIEFGX0lORVQ2OlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTY4NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX2NoZWNrX210dV9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02ODc3LVxubmV0L2NvcmUvZmlsdGVyLmM6Njg3ODojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcbm5ldC9jb3JlL2ZpbHRlci5jLTY4Nzktc3RhdGljIGludCBicGZfcHVzaF9zZWc2X2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHUzMiB0eXBlLCB2b2lkICpoZHIsIHUzMiBsZW4pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjkxMi1cbm5ldC9jb3JlL2ZpbHRlci5jOjY5MTM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0xXVFVOTkVMX0JQRilcbm5ldC9jb3JlL2ZpbHRlci5jLTY5MTQtc3RhdGljIGludCBicGZfcHVzaF9pcF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpoZHIsIHUzMiBsZW4sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjkyMT1CUEZfQ0FMTF80KGJwZl9sd3RfaW5fcHVzaF9lbmNhcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIHR5cGUsIHZvaWQgKiwgaGRyLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY5MjQtXHRzd2l0Y2ggKHR5cGUpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjY5MjU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXG5uZXQvY29yZS9maWx0ZXIuYy02OTI2LVx0Y2FzZSBCUEZfTFdUX0VOQ0FQX1NFRzY6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjkyOS0jZW5kaWZcbm5ldC9jb3JlL2ZpbHRlci5jOjY5MzA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0xXVFVOTkVMX0JQRilcbm5ldC9jb3JlL2ZpbHRlci5jLTY5MzEtXHRjYXNlIEJQRl9MV1RfRU5DQVBfSVA6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjkzOT1CUEZfQ0FMTF80KGJwZl9sd3RfeG1pdF9wdXNoX2VuY2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgdHlwZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02OTQyLVx0c3dpdGNoICh0eXBlKSB7XG5uZXQvY29yZS9maWx0ZXIuYzo2OTQzOiNpZiBJU19FTkFCTEVEKENPTkZJR19MV1RVTk5FTF9CUEYpXG5uZXQvY29yZS9maWx0ZXIuYy02OTQ0LVx0Y2FzZSBCUEZfTFdUX0VOQ0FQX0lQOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTY5NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3htaXRfcHVzaF9lbmNhcF9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02OTcxLVxubmV0L2NvcmUvZmlsdGVyLmM6Njk3MjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcbm5ldC9jb3JlL2ZpbHRlci5jLTY5NzMtQlBGX0NBTExfNChicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXMsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBvZmZzZXQsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzE1Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcxNjUtXG5uZXQvY29yZS9maWx0ZXIuYzo3MTY2OiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtNzE2Ny1zdGF0aWMgc3RydWN0IHNvY2sgKnNrX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzE4NS1cdFx0XHRcdFx0ICAgICAgIGRpZiwgc2RpZiwgTlVMTCk7XG5uZXQvY29yZS9maWx0ZXIuYzo3MTg2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtNzE4Ny1cdH0gZWxzZSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzgzOT1CUEZfQ0FMTF81KGJwZl90Y3BfY2hlY2tfc3luY29va2llLCBzdHJ1Y3Qgc29jayAqLCBzaywgdm9pZCAqLCBpcGgsIHUzMiwgaXBoX2xlbixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03ODQxLXtcbm5ldC9jb3JlL2ZpbHRlci5jOjc4NDI6I2lmZGVmIENPTkZJR19TWU5fQ09PS0lFU1xubmV0L2NvcmUvZmlsdGVyLmMtNzg0My1cdGludCByZXQ7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzg3NC1cbm5ldC9jb3JlL2ZpbHRlci5jOjc4NzU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy03ODc2LVx0Y2FzZSA2OlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTc5MTI9QlBGX0NBTExfNShicGZfdGNwX2dlbl9zeW5jb29raWUsIHN0cnVjdCBzb2NrICosIHNrLCB2b2lkICosIGlwaCwgdTMyLCBpcGhfbGVuLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTc5MTQte1xubmV0L2NvcmUvZmlsdGVyLmM6NzkxNTojaWZkZWYgQ09ORklHX1NZTl9DT09LSUVTXG5uZXQvY29yZS9maWx0ZXIuYy03OTE2LVx0dTMyIGNvb2tpZTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03OTQ0LVxubmV0L2NvcmUvZmlsdGVyLmM6Nzk0NTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTc5NDYtXHRjYXNlIDY6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODI3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2Jfc2V0X3RzdGFtcF9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04MjgwLVxubmV0L2NvcmUvZmlsdGVyLmM6ODI4MTojaWZkZWYgQ09ORklHX1NZTl9DT09LSUVTXG5uZXQvY29yZS9maWx0ZXIuYy04MjgyLUJQRl9DQUxMXzMoYnBmX3RjcF9yYXdfZ2VuX3N5bmNvb2tpZV9pcHY0LCBzdHJ1Y3QgaXBoZHIgKiwgaXBoLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTgzMDg9QlBGX0NBTExfMyhicGZfdGNwX3Jhd19nZW5fc3luY29va2llX2lwdjYsIHN0cnVjdCBpcHY2aGRyICosIGlwaCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04MzEwLXtcbm5ldC9jb3JlL2ZpbHRlci5jOjgzMTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy04MzEyLVx0Y29uc3QgdTE2IG1zc19jbGFtcCA9IElQVjZfTUlOX01UVSAtIHNpemVvZihzdHJ1Y3QgdGNwaGRyKSAtXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODM2MD1CUEZfQ0FMTF8yKGJwZl90Y3BfcmF3X2NoZWNrX3N5bmNvb2tpZV9pcHY2LCBzdHJ1Y3QgaXB2NmhkciAqLCBpcGgsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODM2Mi17XG5uZXQvY29yZS9maWx0ZXIuYzo4MzYzOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtODM2NC1cdGlmIChfX2Nvb2tpZV92Nl9jaGVjayhpcGgsIHRoKSBcdTAwM2UgMClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NDYzPXNvY2tfYWRkcl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg0ODUtXHRcdHJldHVybiBcdTAwMjZicGZfZXZlbnRfb3V0cHV0X2RhdGFfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYzo4NDg2OiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtODQ4Ny1cdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NTcyPWNnX3NrYl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg1ODgtXHRcdHJldHVybiBcdTAwMjZicGZfc2tiX2V2ZW50X291dHB1dF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg1ODk6I2lmZGVmIENPTkZJR19TT0NLX0NHUk9VUF9EQVRBXG5uZXQvY29yZS9maWx0ZXIuYy04NTkwLVx0Y2FzZSBCUEZfRlVOQ19za2JfY2dyb3VwX2lkOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg1OTgtI2VuZGlmXG5uZXQvY29yZS9maWx0ZXIuYzo4NTk5OiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtODYwMC1cdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NjIxPXRjX2Nsc19hY3RfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NzAzLVx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrX3N0b3JhZ2VfZGVsZXRlX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmM6ODcwNDojaWZkZWYgQ09ORklHX1hGUk1cbm5ldC9jb3JlL2ZpbHRlci5jLTg3MDUtXHRjYXNlIEJQRl9GVU5DX3NrYl9nZXRfeGZybV9zdGF0ZTpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NzA3LSNlbmRpZlxubmV0L2NvcmUvZmlsdGVyLmM6ODcwODojaWZkZWYgQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRFxubmV0L2NvcmUvZmlsdGVyLmMtODcwOS1cdGNhc2UgQlBGX0ZVTkNfc2tiX2Nncm91cF9jbGFzc2lkOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg3MTEtI2VuZGlmXG5uZXQvY29yZS9maWx0ZXIuYzo4NzEyOiNpZmRlZiBDT05GSUdfU09DS19DR1JPVVBfREFUQVxubmV0L2NvcmUvZmlsdGVyLmMtODcxMy1cdGNhc2UgQlBGX0ZVTkNfc2tiX2Nncm91cF9pZDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NzE3LSNlbmRpZlxubmV0L2NvcmUvZmlsdGVyLmM6ODcxODojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTg3MTktXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODc0MC1cdFx0cmV0dXJuIFx1MDAyNmJwZl9za2Jfc2V0X3RzdGFtcF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg3NDE6I2lmZGVmIENPTkZJR19TWU5fQ09PS0lFU1xubmV0L2NvcmUvZmlsdGVyLmMtODc0Mi1cdGNhc2UgQlBGX0ZVTkNfdGNwX3Jhd19nZW5fc3luY29va2llX2lwdjQ6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODc1OD14ZHBfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04Nzg2LVx0XHRyZXR1cm4gXHUwMDI2YnBmX3hkcF9jaGVja19tdHVfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYzo4Nzg3OiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtODc4OC1cdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3VkcDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04Nzk5LVx0XHRyZXR1cm4gXHUwMDI2YnBmX3RjcF9nZW5fc3luY29va2llX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmM6ODgwMDojaWZkZWYgQ09ORklHX1NZTl9DT09LSUVTXG5uZXQvY29yZS9maWx0ZXIuYy04ODAxLVx0Y2FzZSBCUEZfRlVOQ190Y3BfcmF3X2dlbl9zeW5jb29raWVfaXB2NDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04ODE0LVxubmV0L2NvcmUvZmlsdGVyLmM6ODgxNTojaWYgSVNfTU9EVUxFKENPTkZJR19ORl9DT05OVFJBQ0spIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTKVxubmV0L2NvcmUvZmlsdGVyLmMtODgxNi1cdC8qIFRoZSBuZl9jb25uX19faW5pdCB0eXBlIGlzIHVzZWQgaW4gdGhlIE5GX0NPTk5UUkFDSyBrZnVuY3MuIFRoZVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg4MzM9c29ja19vcHNfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04ODYxLVx0XHRyZXR1cm4gXHUwMDI2YnBmX2dldF9uZXRuc19jb29raWVfc29ja19vcHNfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYzo4ODYyOiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtODg2My1cdGNhc2UgQlBGX0ZVTkNfbG9hZF9oZHJfb3B0OlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg5MTU9c2tfc2tiX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODkzOS1cdFx0cmV0dXJuIFx1MDAyNmJwZl9za2JfZXZlbnRfb3V0cHV0X3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmM6ODk0MDojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTg5NDEtXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9OTA0ND1sd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtOTA0Ni1cdHN3aXRjaCAoZnVuY19pZCkge1xubmV0L2NvcmUvZmlsdGVyLmM6OTA0NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcbm5ldC9jb3JlL2ZpbHRlci5jLTkwNDgtXHRjYXNlIEJQRl9GVU5DX2x3dF9zZWc2X3N0b3JlX2J5dGVzOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTk5MjM9c3RhdGljIHN0cnVjdCBicGZfaW5zbiAqYnBmX2NvbnZlcnRfdHN0YW1wX3R5cGVfcmVhZChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnNpLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTk5MzMtXHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfQUxVMzJfSU1NKEJQRl9BTkQsIHZhbHVlX3JlZywgU0tCX1RTVEFNUF9UWVBFX01BU0spO1xubmV0L2NvcmUvZmlsdGVyLmM6OTkzNDojaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxEXG5uZXQvY29yZS9maWx0ZXIuYy05OTM1LVx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTMyX0lNTShCUEZfUlNILCB2YWx1ZV9yZWcsIFNLQl9UU1RBTVBfVFlQRV9SU0hJRlQpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTk5NDM9c3RhdGljIHN0cnVjdCBicGZfaW5zbiAqYnBmX2NvbnZlcnRfc2hpbmZvX2FjY2VzcyhfX3U4IGRzdF9yZWcsIF9fdTggc2tiX3JlZyxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy05OTQ2LVx0Lyogc2ktXHUwMDNlZHN0X3JlZyA9IHNrYl9zaGluZm8oU0tCKTsgKi9cbm5ldC9jb3JlL2ZpbHRlci5jOjk5NDc6I2lmZGVmIE5FVF9TS0JVRkZfREFUQV9VU0VTX09GRlNFVFxubmV0L2NvcmUvZmlsdGVyLmMtOTk0OC1cdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0Yoc3RydWN0IHNrX2J1ZmYsIGVuZCksXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9OTk2ND1zdGF0aWMgc3RydWN0IGJwZl9pbnNuICpicGZfY29udmVydF90c3RhbXBfcmVhZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtOTk3MC1cbm5ldC9jb3JlL2ZpbHRlci5jOjk5NzE6I2lmZGVmIENPTkZJR19ORVRfWEdSRVNTXG5uZXQvY29yZS9maWx0ZXIuYy05OTcyLVx0LyogSWYgdGhlIHRzdGFtcF90eXBlIGlzIHJlYWQsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9OTk5OT1zdGF0aWMgc3RydWN0IGJwZl9pbnNuICpicGZfY29udmVydF90c3RhbXBfd3JpdGUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEwMDA1LVxubmV0L2NvcmUvZmlsdGVyLmM6MTAwMDY6I2lmZGVmIENPTkZJR19ORVRfWEdSRVNTXG5uZXQvY29yZS9maWx0ZXIuYy0xMDAwNy1cdC8qIElmIHRoZSB0c3RhbXBfdHlwZSBpcyByZWFkLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEwMDM3PXN0YXRpYyB1MzIgYnBmX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEwMTEyLVx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfQUxVMzJfSU1NKEJQRl9BTkQsIHNpLVx1MDAzZWRzdF9yZWcsIFBLVF9UWVBFX01BWCk7XG5uZXQvY29yZS9maWx0ZXIuYzoxMDExMzojaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxEXG5uZXQvY29yZS9maWx0ZXIuYy0xMDExNC1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTMyX0lNTShCUEZfUlNILCBzaS1cdTAwM2Vkc3RfcmVnLCA1KTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMDIxMC1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IF9fc2tfYnVmZiwgdGNfaW5kZXgpOlxubmV0L2NvcmUvZmlsdGVyLmM6MTAyMTE6I2lmZGVmIENPTkZJR19ORVRfU0NIRURcbm5ldC9jb3JlL2ZpbHRlci5jLTEwMjEyLVx0XHRpZiAodHlwZSA9PSBCUEZfV1JJVEUpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTAyMjktXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBfX3NrX2J1ZmYsIG5hcGlfaWQpOlxubmV0L2NvcmUvZmlsdGVyLmM6MTAyMzA6I2lmIGRlZmluZWQoQ09ORklHX05FVF9SWF9CVVNZX1BPTEwpXG5uZXQvY29yZS9maWx0ZXIuYy0xMDIzMS1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZXNyY19yZWcsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTAyNzYtXHQgICAgIG9mZnNldG9mKHN0cnVjdCBfX3NrX2J1ZmYsIHJlbW90ZV9pcDZbM10pOlxubmV0L2NvcmUvZmlsdGVyLmM6MTAyNzc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy0xMDI3OC1cdFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTAyOTYtXHQgICAgIG9mZnNldG9mKHN0cnVjdCBfX3NrX2J1ZmYsIGxvY2FsX2lwNlszXSk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMDI5NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTEwMjk4LVx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCBzb2NrX2NvbW1vbixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMDMyNS1cdFx0XHRcdFx0XHQgICAgIDIsIHRhcmdldF9zaXplKSk7XG5uZXQvY29yZS9maWx0ZXIuYzoxMDMyNjojaWZuZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRFxubmV0L2NvcmUvZmlsdGVyLmMtMTAzMjctXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFUzMl9JTU0oQlBGX0xTSCwgc2ktXHUwMDNlZHN0X3JlZywgMTYpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEwNDAzPXUzMiBicGZfc29ja19jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMDQ5Mi1cdGNhc2UgYnBmX2N0eF9yYW5nZV90aWxsKHN0cnVjdCBicGZfc29jaywgc3JjX2lwNlswXSwgc3JjX2lwNlszXSk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMDQ5MzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTEwNDk0LVx0XHRvZmYgPSBzaS1cdTAwM2VvZmY7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTA1MTAtXHRjYXNlIGJwZl9jdHhfcmFuZ2VfdGlsbChzdHJ1Y3QgYnBmX3NvY2ssIGRzdF9pcDZbMF0sIGRzdF9pcDZbM10pOlxubmV0L2NvcmUvZmlsdGVyLmM6MTA1MTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy0xMDUxMi1cdFx0b2ZmID0gc2ktXHUwMDNlb2ZmO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEwNTU2LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2ssIHJ4X3F1ZXVlX21hcHBpbmcpOlxubmV0L2NvcmUvZmlsdGVyLmM6MTA1NTc6I2lmZGVmIENPTkZJR19TT0NLX1JYX1FVRVVFX01BUFBJTkdcbm5ldC9jb3JlL2ZpbHRlci5jLTEwNTU4LVx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMDgxNT1zdGF0aWMgdTMyIHNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExMDIwLVx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCByZW1vdGVfaXA2WzNdKTpcbm5ldC9jb3JlL2ZpbHRlci5jOjExMDIxOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtMTEwMjItXHRcdEJVSUxEX0JVR19PTihzaXplb2ZfZmllbGQoc3RydWN0IHNvY2tfY29tbW9uLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExMDQxLVx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBsb2NhbF9pcDZbM10pOlxubmV0L2NvcmUvZmlsdGVyLmM6MTEwNDI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy0xMTA0My1cdFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTEwNjktXHRcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc29ja19jb21tb24sIHNrY19kcG9ydCkpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTEwNzA6I2lmbmRlZiBfX0JJR19FTkRJQU5fQklURklFTERcbm5ldC9jb3JlL2ZpbHRlci5jLTExMDcxLVx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfQUxVMzJfSU1NKEJQRl9MU0gsIHNpLVx1MDAzZWRzdF9yZWcsIDE2KTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMTM1MD1zdGF0aWMgdTMyIHNrX21zZ19jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTM1NS1cdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmO1xubmV0L2NvcmUvZmlsdGVyLmM6MTEzNTY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy0xMTM1Ny1cdGludCBvZmY7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE0MTAtXHQgICAgIG9mZnNldG9mKHN0cnVjdCBza19tc2dfbWQsIHJlbW90ZV9pcDZbM10pOlxubmV0L2NvcmUvZmlsdGVyLmM6MTE0MTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy0xMTQxMi1cdFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE0MzEtXHQgICAgIG9mZnNldG9mKHN0cnVjdCBza19tc2dfbWQsIGxvY2FsX2lwNlszXSk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMTQzMjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTExNDMzLVx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCBzb2NrX2NvbW1vbixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTQ1OS1cdFx0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBzb2NrX2NvbW1vbiwgc2tjX2Rwb3J0KSk7XG5uZXQvY29yZS9maWx0ZXIuYzoxMTQ2MDojaWZuZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRFxubmV0L2NvcmUvZmlsdGVyLmMtMTE0NjEtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFUzMl9JTU0oQlBGX0xTSCwgc2ktXHUwMDNlZHN0X3JlZywgMTYpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTExNjU1PWludCBza19nZXRfZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IGxlbilcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTY5Ny1cbm5ldC9jb3JlL2ZpbHRlci5jOjExNjk4OiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtMTE2OTktc3RhdGljIHZvaWQgYnBmX2luaXRfcmV1c2Vwb3J0X2tlcm4oc3RydWN0IHNrX3JldXNlcG9ydF9rZXJuICpyZXVzZV9rZXJuLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyMDc2PXN0YXRpYyB1MzIgc2tfbG9va3VwX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTE1LVx0XHRcdFx0cmVtb3RlX2lwNlswXSwgcmVtb3RlX2lwNlszXSk6IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTE2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtMTIxMTctXHRcdGludCBvZmYgPSBzaS1cdTAwM2VvZmY7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIxMzEtXHRcdFx0XHRsb2NhbF9pcDZbMF0sIGxvY2FsX2lwNlszXSk6IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTMyOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtMTIxMzMtXHRcdGludCBvZmYgPSBzaS1cdTAwM2VvZmY7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTIyMzQ9QlBGX0NBTExfMShicGZfc2tjX3RvX3RjcF90aW1ld2FpdF9zb2NrLCBzdHJ1Y3Qgc29jayAqLCBzaylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI0MS1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjQyOiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyNDMtXHRpZiAoc2sgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3Byb3QgPT0gXHUwMDI2dGNwX3Byb3QgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9USU1FX1dBSVQpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIyNDYtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjI0NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjQ4LVx0aWYgKHNrIFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19wcm90ID09IFx1MDAyNnRjcHY2X3Byb3QgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9USU1FX1dBSVQpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTIyNjM9QlBGX0NBTExfMShicGZfc2tjX3RvX3RjcF9yZXF1ZXN0X3NvY2ssIHN0cnVjdCBzb2NrICosIHNrKVxubmV0L2NvcmUvZmlsdGVyLmMtMTIyNjQte1xubmV0L2NvcmUvZmlsdGVyLmM6MTIyNjU6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI2Ni1cdGlmIChzayBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfcHJvdCA9PSBcdTAwMjZ0Y3BfcHJvdCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX05FV19TWU5fUkVDVilcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI2OS1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjcwOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtMTIyNzEtXHRpZiAoc2sgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3Byb3QgPT0gXHUwMDI2dGNwdjZfcHJvdCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX05FV19TWU5fUkVDVilcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjUwND1fX2JwZl9rZnVuYyBpbnQgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2soc3RydWN0IF9fc2tfYnVmZiAqcywgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTA2LXtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNTA3OiNpZiBJU19FTkFCTEVEKENPTkZJR19TWU5fQ09PS0lFUylcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTA4LVx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKXM7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI1MzItXHRcdGJyZWFrO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI1MzM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjUzNC1cdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTI3MzM9X19icGZfa2Z1bmMgaW50IGJwZl9pY21wX3NlbmQoc3RydWN0IF9fc2tfYnVmZiAqc2tiX2N0eCwgaW50IHR5cGUsIGludCBjb2RlKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzQ2LVx0c3dpdGNoIChza2ItXHUwMDNlcHJvdG9jb2wpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNzQ3OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxubmV0L2NvcmUvZmlsdGVyLmMtMTI3NDgtXHRjYXNlIGh0b25zKEVUSF9QX0lQKToge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzY2LSNlbmRpZlxubmV0L2NvcmUvZmlsdGVyLmM6MTI3Njc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjc2OC1cdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTM6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxNTkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBicGZfc29ja19kZXN0cm95IFJlZ2lzdHJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBob3cgYGJwZl9zb2NrX2Rlc3Ryb3lgIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBpdHMgcmVnaXN0cmF0aW9uLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgaXQmIzM5O3MgcmVnaXN0ZXJlZCB0aHJvdWdoIEJURiBrZnVuY3MsIGFuZCB0aGUgbG9jYXRpb24gcG9pbnRlZCB0byBpcyBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBhIGNvbW1vbiBwbGFjZSBmb3IgbmV0d29yay1yZWxhdGVkIEJQRiBob29rcy4KClNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCB0aGUgcmVnaXN0cmF0aW9uIHVzZXMgYEJURl9LRlVOQ1NfU1RBUlQoYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzKWAgYW5kIHRoYXQgYGJwZl9zb2NrX2Rlc3Ryb3lgIGl0c2VsZiBpcyBsaW5rZWQgdmlhIGBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfZGVzdHJveSlgLiBUaGlzIGlzIHN0YW5kYXJkIEJURi1iYXNlZCBmdW5jdGlvbiByZWdpc3RyYXRpb247IHRoZSBgQlRGX0lEX0ZMQUdTYCBtYWNybyBjbGVhcmx5IGFzc29jaWF0ZXMgdGhlIGZ1bmN0aW9uIHdpdGggYW4gSUQgdGhhdCB0aGUgQlBGIHZlcmlmaWVyIG9yIG90aGVyIHBhcnRzIG9mIHRoZSBCUEYgaW5mcmFzdHJ1Y3R1cmUgd2lsbCB1c2UuCgpOb3csIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYGJwZl9za19pdGVyX2tmdW5jX2lkc2Agd2l0aGluIHRoaXMgZmlsZS4gSSBuZWVkIHRvIHRyYWNlIHdoZXJlIHRoaXMgcGFydGljdWxhciBzdHJ1Y3R1cmUsIGBicGZfc2tfaXRlcl9rZnVuY19pZHNgLCBpcyAqdXNlZCogaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhhdCB3aWxsIGlsbHVtaW5hdGUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgYGJwZl9zb2NrX2Rlc3Ryb3lgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHNvY2tldCBpdGVyYXRpb24gYW5kIEJQRiBwcm9ncmFtIGludGVyYWN0aW9uIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmsgc3RhY2suIFVuZGVyc3RhbmRpbmcgdGhlIHVzYWdlIGNvbnRleHQgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIHJvbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za19pdGVyX2tmdW5jX2lkcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0xMjkzOT1fX2JwZl9rZnVuY19lbmRfZGVmcygpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTI5NDAtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjk0MTpCVEZfS0ZVTkNTX1NUQVJUKGJwZl9za19pdGVyX2tmdW5jX2lkcylcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTQyLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfc29ja19kZXN0cm95KVxubmV0L2NvcmUvZmlsdGVyLmM6MTI5NDM6QlRGX0tGVU5DU19FTkQoYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzKVxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NDQtXG5uZXQvY29yZS9maWx0ZXIuYz0xMjk0NT1zdGF0aWMgaW50IHRyYWNpbmdfaXRlcl9maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk0Ni17XG5uZXQvY29yZS9maWx0ZXIuYzoxMjk0NzpcdGlmIChidGZfaWRfc2V0OF9jb250YWlucyhcdTAwMjZicGZfc2tfaXRlcl9rZnVuY19pZHMsIGtmdW5jX2lkKSBcdTAwMjZcdTAwMjZcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTQ4LVx0ICAgIHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX0lURVIpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTI5NTM9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9za19pdGVyX2tmdW5jX3NldCA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTU0LVx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG5uZXQvY29yZS9maWx0ZXIuYzoxMjk1NTpcdC5zZXQgICA9IFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX2lkcyxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTU2LVx0LmZpbHRlciA9IHRyYWNpbmdfaXRlcl9maWx0ZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDQ5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBmdW5jdGlvbjoKCioqRmluZGluZyB0aGUgUmVnaXN0cmF0aW9uIG9mIGBicGZfc2tfaXRlcl9rZnVuY19zZXRgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBicGZfc2tfaXRlcl9rZnVuY19zZXRgIGlzIGFjdHVhbGx5IGRlZmluZWQsIG9yIGF0IGxlYXN0IGhvdyBpdCYjMzk7cyBicm91Z2h0IGludG8gdGhlIHN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdHJhY2UgaXRzIHJlZ2lzdHJhdGlvbi4gV2hlcmUgZG9lcyB0aGUga2VybmVsIGtub3cgYWJvdXQgdGhpcyB0aGluZz8gSSBuZWVkIHRvIGZpbmQgdGhlIHBvaW50IHdoZXJlIGl0JiMzOTtzIGhvb2tlZCBpbnRvIHRoZSBCUEYgc3Vic3lzdGVtLCBvciBtYXliZSBldmVuIGp1c3QgZGVjbGFyZWQgYXMgYSBrbm93biBrZXJuZWwgZnVuY3Rpb24uIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UsIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggdGhlIEJQRi1yZWxhdGVkIGRpcmVjdG9yaWVzLCB0byBmaW5kIHRoZSByZWdpc3RyYXRpb24gcG9pbnQuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHBhcnQgb2YgdGhlIEJQRiBpdGVyYXRvciBmdW5jdGlvbmFsaXR5LCBzbyB0aGF0IG5hcnJvd3MgdGhlIHNlYXJjaCBzb21ld2hhdC4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za19pdGVyX2tmdW5jX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0xMjk0NT1zdGF0aWMgaW50IHRyYWNpbmdfaXRlcl9maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NTItXG5uZXQvY29yZS9maWx0ZXIuYzoxMjk1MzpzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX3NrX2l0ZXJfa2Z1bmNfc2V0ID0ge1xubmV0L2NvcmUvZmlsdGVyLmMtMTI5NTQtXHQub3duZXIgPSBUSElTX01PRFVMRSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjk1OT1zdGF0aWMgaW50IGluaXRfc3Vic3lzdGVtKHZvaWQpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk2MC17XG5uZXQvY29yZS9maWx0ZXIuYzoxMjk2MTpcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2YnBmX3NrX2l0ZXJfa2Z1bmNfc2V0KTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTYyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTM6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1MjIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2wgTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgYSBmZXcga2VybmVsIGNvbmZpZ3VyYXRpb25zIOKAkyBzcGVjaWZpY2FsbHkgYEJQRl9TWVNDQUxMYCBhbmQgYERFQlVHX0lORk9fQlRGYC4gSSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgdG8gY2hlY2sgYWxsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyByZXF1aXJlZCBmb3IgQlBGIGtmdW5jcywgQlBGIGl0ZXJhdG9ycywgYW5kIHRoZSBgaW5ldGAgc3RhY2suIFNvLCB0aGUgYmFzZSByZXF1aXJlbWVudHMgYXJlIGBDT05GSUdfQlBGX1NZU0NBTExgLCBgQ09ORklHX0RFQlVHX0lORk9fQlRGYCwgYW5kIGBDT05GSUdfSU5FVGAuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IGBpbmV0X2Nza19saXN0ZW5fc3RvcGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0JiMzOTtzIGFjdHVhbGx5IGNvbXBpbGVkLiBBaCwgcmlnaHQsIGl0JiMzOTtzIGluIGBuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jYCwgd2hpY2ggaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX0lORVRgIGlzIGVuYWJsZWQuIE1ha2VzIHNlbnNlLgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgcGF0Y2guIFRoZSBrZXkgc3ltYm9scyBtb2RpZmllZCBzZWVtIHRvIGJlOgoxLiAgYGJwZl9zb2NrX2Rlc3Ryb3lgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AKMi4gIGBpbmV0X2Nza19saXN0ZW5fc3RvcGAgaW4gYG5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNgCgpJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaG93IHdpZGVzcHJlYWQgdGhlc2UgZnVuY3Rpb25zIGFyZS4gYGJwZl9zb2NrX2Rlc3Ryb3lgPyBEZWZpbml0ZWx5IG5vdCB1YmlxdWl0b3VzLiBJdCYjMzk7cyBhIHZlcnkgc3BlY2lmaWMga2Z1bmMgY2FsbGVkIHdoZW4gQlBGIGl0ZXJhdG9ycyBhcmUgdXNlZCB0byBkZXN0cm95IHNvY2tldHMuIFdoYXQgYWJvdXQgYGluZXRfY3NrX2xpc3Rlbl9zdG9wYD8gT2theSwgdGhhdCYjMzk7cyBjYWxsZWQgd2hlbiBhIGxpc3RlbmluZyBjb25uZWN0aW9uIHNvY2tldCBzdG9wcyBsaXN0ZW5pbmc7IHRoaW5ncyBsaWtlIGB0Y3BfY2xvc2VgIG9uIGEgbGlzdGVuaW5nIHNvY2tldCBvciBgdGNwX2Fib3J0YCBhbmQgYHRjcF9kaWFnX2Rlc3Ryb3lgLiBJcyBpdCB1YmlxdWl0b3VzPyBObywgaXQmIzM5O3Mgc3BlY2lmaWMgdG8gc3RvcHBpbmcvY2xvc2luZyBhIGxpc3RlbmluZyBzb2NrZXQgYW5kIGFib3J0aW5nIGl0cyBwZW5kaW5nIGNvbm5lY3Rpb24gcXVldWUuCgpGaW5hbGx5LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgcHVycG9zZSBvZiBgaGFzX2N1cnJlbnRfYnBmX2N0eCgpYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFzX2N1cnJlbnRfYnBmX2N0eCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTMyMDE9c3RhdGljIGlubGluZSBib29sIHVucHJpdmlsZWdlZF9lYnBmX2VuYWJsZWQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTMyMTAtICovXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjMyMTE6c3RhdGljIGlubGluZSBib29sIGhhc19jdXJyZW50X2JwZl9jdHgodm9pZClcbmluY2x1ZGUvbGludXgvYnBmLmgtMzIxMi17XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD0zNTMxPXN0YXRpYyBpbmxpbmUgYm9vbCB1bnByaXZpbGVnZWRfZWJwZl9lbmFibGVkKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0zNTM1LVxuaW5jbHVkZS9saW51eC9icGYuaDozNTM2OnN0YXRpYyBpbmxpbmUgYm9vbCBoYXNfY3VycmVudF9icGZfY3R4KHZvaWQpXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM1Mzcte1xuLS1cbm5ldC9jb3JlL3NvY2suYz0xMTQ0PXZvaWQgc29ja29wdF9sb2NrX3NvY2soc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NvY2suYy0xMTQ5LVx0ICovXG5uZXQvY29yZS9zb2NrLmM6MTE1MDpcdGlmIChoYXNfY3VycmVudF9icGZfY3R4KCkpXG5uZXQvY29yZS9zb2NrLmMtMTE1MS1cdFx0cmV0dXJuO1xuLS1cbm5ldC9jb3JlL3NvY2suYz0xMTU3PXZvaWQgc29ja29wdF9yZWxlYXNlX3NvY2soc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29jay5jLTExNTgte1xubmV0L2NvcmUvc29jay5jOjExNTk6XHRpZiAoaGFzX2N1cnJlbnRfYnBmX2N0eCgpKVxubmV0L2NvcmUvc29jay5jLTExNjAtXHRcdHJldHVybjtcbi0tXG5uZXQvY29yZS9zb2NrLmM9MTE2Nj1ib29sIHNvY2tvcHRfbnNfY2FwYWJsZShzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKVxubmV0L2NvcmUvc29jay5jLTExNjcte1xubmV0L2NvcmUvc29jay5jOjExNjg6XHRyZXR1cm4gaGFzX2N1cnJlbnRfYnBmX2N0eCgpIHx8IG5zX2NhcGFibGUobnMsIGNhcCk7XG5uZXQvY29yZS9zb2NrLmMtMTE2OS19XG4tLVxubmV0L2NvcmUvc29jay5jPTExNzI9Ym9vbCBzb2Nrb3B0X2NhcGFibGUoaW50IGNhcClcbm5ldC9jb3JlL3NvY2suYy0xMTczLXtcbm5ldC9jb3JlL3NvY2suYzoxMTc0Olx0cmV0dXJuIGhhc19jdXJyZW50X2JwZl9jdHgoKSB8fCBjYXBhYmxlKGNhcCk7XG5uZXQvY29yZS9zb2NrLmMtMTE3NS19XG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xNDY2PXZvaWQgaW5ldF9jc2tfbGlzdGVuX3N0b3Aoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTUyMi1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTUyMzpcdFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE1MjQtXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4tLVxubmV0L2lwdjQvdGNwLmM9MzgzNz1pbnQgZG9fdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTM4NjAtXHRcdHNvY2tvcHRfbG9ja19zb2NrKHNrKTtcbm5ldC9pcHY0L3RjcC5jOjM4NjE6XHRcdGVyciA9IHRjcF9zZXRfY29uZ2VzdGlvbl9jb250cm9sKHNrLCBuYW1lLCAhaGFzX2N1cnJlbnRfYnBmX2N0eCgpLFxubmV0L2lwdjQvdGNwLmMtMzg2Mi1cdFx0XHRcdFx0XHQgc29ja29wdF9uc19jYXBhYmxlKHNvY2tfbmV0KHNrKS1cdTAwM2V1c2VyX25zLFxuLS1cbm5ldC9pcHY0L3RjcC5jPTUxMTU9aW50IHRjcF9hYm9ydChzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXG4tLVxubmV0L2lwdjQvdGNwLmMtNTEzNy1cdC8qIEJQRiBjb250ZXh0IGVuc3VyZXMgc29jayBsb2NraW5nLiAqL1xubmV0L2lwdjQvdGNwLmM6NTEzODpcdGlmICghaGFzX2N1cnJlbnRfYnBmX2N0eCgpKVxubmV0L2lwdjQvdGNwLmMtNTEzOS1cdFx0LyogRG9uJiMzOTt0IHJhY2Ugd2l0aCB1c2Vyc3BhY2Ugc29ja2V0IGNsb3NlcyBzdWNoIGFzIHRjcF9jbG9zZS4gKi9cbi0tXG5uZXQvaXB2NC90Y3AuYy01MTQzLVx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkge1xubmV0L2lwdjQvdGNwLmM6NTE0NDpcdFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXG5uZXQvaXB2NC90Y3AuYy01MTQ1LVx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4tLVxubmV0L2lwdjQvdGNwLmMtNTE2My1cdGxvY2FsX2JoX2VuYWJsZSgpO1xubmV0L2lwdjQvdGNwLmM6NTE2NDpcdGlmICghaGFzX2N1cnJlbnRfYnBmX2N0eCgpKVxubmV0L2lwdjQvdGNwLmMtNTE2NS1cdFx0cmVsZWFzZV9zb2NrKHNrKTtcbi0tXG5uZXQvaXB2NC91ZHAuYz0zMTIxPWludCB1ZHBfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKVxubmV0L2lwdjQvdWRwLmMtMzEyMi17XG5uZXQvaXB2NC91ZHAuYzozMTIzOlx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXG5uZXQvaXB2NC91ZHAuYy0zMTI0LVx0XHRsb2NrX3NvY2soc2spO1xuLS1cbm5ldC9pcHY0L3VkcC5jLTMxMzYtb3V0OlxubmV0L2lwdjQvdWRwLmM6MzEzNzpcdGlmICghaGFzX2N1cnJlbnRfYnBmX2N0eCgpKVxubmV0L2lwdjQvdWRwLmMtMzEzOC1cdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTM6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU0OTcKCQkJCQkJCW91dHB1dDogMTU0CgkJCQkJCQl0aG91Z2h0czogMzEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIGV2ZXJ5dGhpbmcgYXBwZWFycyB0byBiZSBpbiBvcmRlciBoZXJlLiBUaGUgY2hhbmdlcyBhcmUgc3RyYWlnaHRmb3J3YXJkIGFuZCBpbnRlcm5hbGx5IGNvbnNpc3RlbnQuIExldCYjMzk7cyBydW4gdGhyb3VnaCBpdCBvbmUgbGFzdCB0aW1lIHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCkZpcnN0LCB0aGUgY29yZSBtb2RpZmljYXRpb25zIGFyZSBjbGVhcjogd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgYnBmX3NvY2tfZGVzdHJveWAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCBhbmQgYGluZXRfY3NrX2xpc3Rlbl9zdG9wYCBpbiBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2AuIFRoYXQmIzM5O3MgdGhlIGhlYXJ0IG9mIGl0LiBUaGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBmbGFnIGlzIHNldCwgd2hpY2ggaXMgYSBnb29kIGluZGljYXRvciwgYW5kIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZSBwcmVjaXNlbHkgdGhvc2U6IGBicGZfc29ja19kZXN0cm95YCBhbmQgYGluZXRfY3NrX2xpc3Rlbl9zdG9wYC4KClRoZW4sIHdlIGhhdmUgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zOiBgQlBGX1NZU0NBTExgLCBgREVCVUdfSU5GT19CVEZgLCBhbmQgYElORVRgLiBUaGlzIG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgY29udGV4dCBvZiBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBCUEYgaW50ZXJhY3Rpb25zLiBMZXQgbWUgcXVpY2tseSBzY2FuIGZvciBhbnkgb3RoZXIgdG91Y2hlZCBmdW5jdGlvbnM7IE5vcGUsIGp1c3QgdGhvc2UgdHdvIOKAkyBgYnBmX3NvY2tfZGVzdHJveWAgYW5kIGBpbmV0X2Nza19saXN0ZW5fc3RvcGAuIEdvb2QuIEFuZCB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5IGNoYW5nZXMgYXJlIGp1c3QgdGVzdC1yZWxhdGVkLCBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhlcmUuCgpOb3csIHRvIHNvbGlkaWZ5IHRoZSByZWFzb25pbmc6IFRoZSBwYXRjaCYjMzk7cyBwdXJwb3NlIGlzIHRvIGFsbG93IGBicGZfc29ja19kZXN0cm95KClgIHRvIGhhbmRsZSBub24tZnVsbCBzb2NrZXRzLCBsaWtlIHRob3NlIGluIFRJTUVfV0FJVCBzdGF0ZSwgdXNpbmcgYGRpYWdfZGVzdHJveWAgY2FsbGJhY2tzLiBBbmQgd2l0aCBgaW5ldF9jc2tfbGlzdGVuX3N0b3AoKWAsIHdlJiMzOTtyZSBieXBhc3NpbmcgYGNvbmRfcmVzY2hlZCgpYCB3aGVuIGl0JiMzOTtzIHJ1bm5pbmcgaW4gYSBCUEYgY29udGV4dCB2aWEgYGhhc19jdXJyZW50X2JwZl9jdHgoKWAuIE1ha2VzIHNlbnNlLCBjb25zaWRlcmluZyB0aGUgc29ja2V0IGxpZmVjeWNsZSBhbmQgQlBGIGtmdW5jIGV4ZWN1dGlvbiBwYXRocyBhY2Nlc3NlZCB2aWEgQlBGIGl0ZXJhdG9yIHByb2dyYW1zIGFuZCBzb2NrZXQgc3lzY2FsbHMgdGhhdCB0aGVzZSBjaGFuZ2VzIG1vZGlmeS4KCkFscmlnaHQsIHRoYXQmIzM5O3MgdGhvcm91Z2guIEkmIzM5O20gc2F0aXNmaWVkLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9zb2NrX2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7aW5ldF9jc2tfbGlzdGVuX3N0b3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJwZl9zb2NrX2Rlc3Ryb3koKSBCUEYga2Z1bmMgdG8gcGVybWl0IGRlc3Ryb3lpbmcgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIHNvY2tldHMpIHRoYXQgaW1wbGVtZW50IGRpYWdfZGVzdHJveSwgYW5kIGFkanVzdHMgaW5ldF9jc2tfbGlzdGVuX3N0b3AoKSB0byBhdm9pZCBjYWxsaW5nIGNvbmRfcmVzY2hlZCgpIHdoaWxlIGV4ZWN1dGluZyBpbiBhIEJQRiBjb250ZXh0LiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIEJQRiBzb2NrZXQgaXRlcmF0aW9uL2Rlc3RydWN0aW9uIHBhdGhzIHRoYXQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NvY2tfZGVzdHJveSYjMzQ7LAogICAgJiMzNDtpbmV0X2Nza19saXN0ZW5fc3RvcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYnBmX3NvY2tfZGVzdHJveSgpIEJQRiBrZnVuYyB0byBwZXJtaXQgZGVzdHJveWluZyBub24tZnVsbCBzb2NrZXRzIChzdWNoIGFzIFRDUCBUSU1FX1dBSVQgc29ja2V0cykgdGhhdCBpbXBsZW1lbnQgZGlhZ19kZXN0cm95LCBhbmQgYWRqdXN0cyBpbmV0X2Nza19saXN0ZW5fc3RvcCgpIHRvIGF2b2lkIGNhbGxpbmcgY29uZF9yZXNjaGVkKCkgd2hpbGUgZXhlY3V0aW5nIGluIGEgQlBGIGNvbnRleHQuIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGIHNvY2tldCBpdGVyYXRpb24vZGVzdHJ1Y3Rpb24gcGF0aHMgdGhhdCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTM6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYnBmX3NvY2tfZGVzdHJveSgpYCB0byBzdXBwb3J0IG5vbi1mdWxsIHNvY2tldHMgKGUuZy4sIFRDUCBUSU1FX1dBSVQgc29ja2V0cykgYnkgZ3VhcmRpbmcgdGhlIGBzay1cdTAwM2Vza19wcm90b2NvbGAgY2hlY2sgd2l0aCBgc2tfZnVsbHNvY2soKWAsIGFuZCB1cGRhdGVzIGBpbmV0X2Nza19saXN0ZW5fc3RvcCgpYCB0byBieXBhc3MgYGNvbmRfcmVzY2hlZCgpYCB3aGVuIHJ1bm5pbmcgd2l0aGluIGEgQlBGIGV4ZWN1dGlvbiBjb250ZXh0IHRvIHByZXZlbnQgc2xlZXBpbmcgaW4gYXRvbWljL1JDVSBjb250ZXh0cy5cblxuVGhlc2UgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBjb3B5LXRvLXVzZXIgb3BlcmF0aW9ucywgb3IgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBwb3RlbnRpYWwgcmlza3MgcmVsYXRlZCB0byBzb2NrZXQgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgZXhlY3V0aW9uIGNvbnRleHQgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyBhbmQgZGVidWdnZXJzIChLQVNBTiBmb3IgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcywgTE9DS0RFUCAvIERFQlVHX0FUT01JQ19TTEVFUCBmb3Igc2xlZXBpbmcgaW4gYXRvbWljIGNvbnRleHQpLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM4OGQ5NTU4ODEzYWY2NDhmZjk0MmM2N2FmZTFiNjVkZDFjYmNkNTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAxMzoyMDo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggODUxMzE2N2E4NThhOC4uZDljNGExMDhkZGI1ZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmMKQEAgLTEyOTExLDggJiM0MzsxMjkxMSw5IEBAIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTsKICAqIEBzb2NrOiBQb2ludGVyIHRvIHNvY2tldCB0byBiZSBkZXN0cm95ZWQKICAqCiAgKiBSZXR1cm46Ci0gKiBPbiBlcnJvciwgbWF5IHJldHVybiBFUFJPVE9OT1NVUFBPUlQsIEVJTlZBTC4KLSAqIEVQUk9UT05PU1VQUE9SVCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC4KJiM0MzsgKiBPbiBlcnJvciwgbWF5IHJldHVybiBFT1BOT1RTVVBQLCBvciB3aGF0ZXZlciB0aGUgcHJvdG9jb2wgc3BlY2lmaWMKJiM0MzsgKiBkZXN0cm95IGhhbmRsZXIgcmV0dXJucy4KJiM0MzsgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLgogICogMCBvdGhlcndpc2UKICAqLwogX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKQpAQCAtMTI5MjQsOCAmIzQzOzEyOTI1LDEyIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaykKIAkgKiBTdXBwb3J0aW5nIHByb3RvY29scyB3aWxsIG5lZWQgdG8gYWNxdWlyZSBzb2NrIGxvY2sgaW4gdGhlIEJQRiBjb250ZXh0CiAJICogcHJpb3IgdG8gaW52b2tpbmcgdGhpcyBrZnVuYy4KIAkgKi8KLQlpZiAoIXNrLSZndDtza19wcm90LSZndDtkaWFnX2Rlc3Ryb3kgfHwgKHNrLSZndDtza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCAmYW1wOyZhbXA7Ci0JCQkJCSAgIHNrLSZndDtza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUCkpCiYjNDM7CWlmICghc2stJmd0O3NrX3Byb3QtJmd0O2RpYWdfZGVzdHJveSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJaWYgKHNrX2Z1bGxzb2NrKHNrKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgJmFtcDsmYW1wOwomIzQzOwkgICAgc2stJmd0O3NrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlyZXR1cm4gc2stJmd0O3NrX3Byb3QtJmd0O2RpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCmluZGV4IDYyNTc0NTliY2VlMjQuLjZhMzBmMTEzODQ1NDcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwpAQCAtMTUyMCw3ICYjNDM7MTUyMCw4IEBAIHZvaWQgaW5ldF9jc2tfbGlzdGVuX3N0b3Aoc3RydWN0IHNvY2sgKnNrKQogCQlsb2NhbF9iaF9lbmFibGUoKTsKIAkJc29ja19wdXQoY2hpbGQpOwogCi0JCWNvbmRfcmVzY2hlZCgpOwomIzQzOwkJaWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpCiYjNDM7CQkJY29uZF9yZXNjaGVkKCk7CiAJfQogCWlmIChxdWV1ZS0mZ3Q7ZmFzdG9wZW5xLnJza3FfcnN0X2hlYWQpIHsKIAkJLyogRnJlZSBhbGwgdGhlIHJlcXMgcXVldWVkIGluIHJza3FfcnN0X2hlYWQuICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jCmluZGV4IDljMTE5MzhmZTU5N2QuLjc4ZDY0MmEwMmJkYjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jCkBAIC0xLDQgJiM0MzsxLDUgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O3BvbGwuaCZndDsKICNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YnBmL2JwZl9lbmRpYW4uaCZndDsKIApAQCAtMTEwLDYgJiM0MzsxMTEsMTIyIEBAIHN0YXRpYyB2b2lkIHRlc3RfdGNwX3NlcnZlcihzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpCiAJCWNsb3NlKHNlcnYpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdGVzdF90Y3BfbGlzdGVuX3BlbmRpbmcoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKQomIzQzO3sKJiM0MzsJaW50IHNlcnYgPSAtMSwgY2xpZW4gPSAtMSwgYWNjZXB0X3NlcnYgPSAtMSwgbiwgc2Vydl9wb3J0OwomIzQzOwlzdHJ1Y3QgcG9sbGZkIHBmZCA9IHsgLmV2ZW50cyA9IFBPTExJTiB9OwomIzQzOwljaGFyIGJ1ZlsxXTsKJiM0MzsKJiM0MzsJc2VydiA9IHN0YXJ0X3NlcnZlcihBRl9JTkVUNiwgU09DS19TVFJFQU0sIE5VTEwsIDAsIDApOwomIzQzOwlpZiAoIUFTU0VSVF9HRShzZXJ2LCAwLCAmIzM0O3N0YXJ0X3NlcnZlciYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJc2Vydl9wb3J0ID0gZ2V0X3NvY2tldF9sb2NhbF9wb3J0KHNlcnYpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShzZXJ2X3BvcnQsIDAsICYjMzQ7Z2V0X3NvY2tfbG9jYWxfcG9ydCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtzZXJ2X3BvcnQgPSAoX19iZTE2KXNlcnZfcG9ydDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQ29ubmVjdCBidXQgbmV2ZXIgYWNjZXB0LCBzbyB0aGUgY2hpbGQgc2l0cyBpbiB0aGUgYWNjZXB0IHF1ZXVlCiYjNDM7CSAqIG9mIHRoZSBsaXN0ZW5lci4gV2FpdCB1bnRpbCBpdCYjMzk7cyBhY3R1YWxseSB0aGVyZS4KJiM0MzsJICovCiYjNDM7CWNsaWVuID0gY29ubmVjdF90b19mZChzZXJ2LCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoY2xpZW4sIDAsICYjMzQ7Y29ubmVjdF90b19mZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJcGZkLmZkID0gc2VydjsKJiM0MzsJaWYgKCFBU1NFUlRfRVEocG9sbCgmYW1wO3BmZCwgMSwgLTEpLCAxLCAmIzM0O3BvbGwgbGlzdGVuZXImIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIFJ1biBpdGVyYXRvciBwcm9ncmFtIHRoYXQgZGVzdHJveXMgc2VydmVyIHNvY2tldHMuICovCiYjNDM7CXN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLSZndDtwcm9ncy5pdGVyX3RjcDZfc2VydmVyKTsKJiM0MzsKJiM0MzsJYWNjZXB0X3NlcnYgPSBhY2NlcHQoc2VydiwgTlVMTCwgTlVMTCk7CiYjNDM7CWlmICghQVNTRVJUX0xUKGFjY2VwdF9zZXJ2LCAwLCAmIzM0O2FjY2VwdCBvbiBkZXN0cm95ZWQgbGlzdGVuZXImIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CUFTU0VSVF9FUShlcnJubywgRUlOVkFMLCAmIzM0O2Vycm9yIGNvZGUgb24gZGVzdHJveWVkIGxpc3RlbmVyJiMzNDspOwomIzQzOwomIzQzOwkvKiBUaGUgdW5hY2NlcHRlZCBjaGlsZCB3YXMgcmVzZXQgYWxvbmcgd2l0aCB0aGUgbGlzdGVuZXIuICovCiYjNDM7CW4gPSByZWN2KGNsaWVuLCBidWYsIHNpemVvZihidWYpLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfTFQobiwgMCwgJiMzNDtjbGllbnQgcmVjdiBvbiByZXNldCBjaGlsZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJQVNTRVJUX0VRKGVycm5vLCBFQ09OTlJFU0VULCAmIzM0O2Vycm9yIGNvZGUgb24gcmVzZXQgY2hpbGQmIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKGNsaWVuICE9IC0xKQomIzQzOwkJY2xvc2UoY2xpZW4pOwomIzQzOwlpZiAoYWNjZXB0X3NlcnYgIT0gLTEpCiYjNDM7CQljbG9zZShhY2NlcHRfc2Vydik7CiYjNDM7CWlmIChzZXJ2ICE9IC0xKQomIzQzOwkJY2xvc2Uoc2Vydik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfdGNwX3RpbWV3YWl0KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbCkKJiM0Mzt7CiYjNDM7CWludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIGFjY2VwdF9zZXJ2ID0gLTEsIG47CiYjNDM7CXN0cnVjdCB0aW1ldmFsIHR2ID0ge307CiYjNDM7CWNoYXIgYnVmWzFdOwomIzQzOwomIzQzOwlzZXJ2ID0gc3RhcnRfc2VydmVyKEFGX0lORVQ2LCBTT0NLX1NUUkVBTSwgTlVMTCwgMCwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKHNlcnYsIDAsICYjMzQ7c3RhcnRfc2VydmVyJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwljbGllbiA9IGNvbm5lY3RfdG9fZmQoc2VydiwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGNsaWVuLCAwLCAmIzM0O2Nvbm5lY3RfdG9fZmQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWFjY2VwdF9zZXJ2ID0gYWNjZXB0KHNlcnYsIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShhY2NlcHRfc2VydiwgMCwgJiMzNDtzZXJ2IGFjY2VwdCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQWN0aXZlIGNsb3NlIGZyb20gdGhlIGNsaWVudCwgdGhlbiBjbG9zZSB0aGUgc2VydmVyIHNpZGUuIE9uY2UKJiM0MzsJICogcmVjdigpIHNlZXMgRU9GIHRoZSBzZXJ2ZXIgRklOIGhhcyBiZWVuIHByb2Nlc3NlZCBhbmQgdGhlIGNsaWVudAomIzQzOwkgKiBzb2NrIGlzIGluIFRJTUVfV0FJVC4gQmxvY2sgd2l0aG91dCB0aW1lb3V0IHNvIGEgbG9hZGVkIENJIGJveAomIzQzOwkgKiBjYW4mIzM5O3QgcmFjZSB1cy4KJiM0MzsJICovCiYjNDM7CWlmICghQVNTRVJUX09LKHNldHNvY2tvcHQoY2xpZW4sIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCAmYW1wO3R2LAomIzQzOwkJCQkgIHNpemVvZih0dikpLCAmIzM0O2NsZWFyIHJjdnRpbWVvJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhzaHV0ZG93bihjbGllbiwgU0hVVF9XUiksICYjMzQ7Y2xpZW50IHNodXRkb3duJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYWtlIHN1cmUgdGhlIHNlcnZlciBoYXMgc2VlbiB0aGUgY2xpZW50IEZJTiBiZWZvcmUgaXQgY2xvc2VzLAomIzQzOwkgKiBzbyB0aGUgdHdvIEZJTnMgbmV2ZXIgY3Jvc3MuCiYjNDM7CSAqLwomIzQzOwluID0gcmVjdihhY2NlcHRfc2VydiwgYnVmLCBzaXplb2YoYnVmKSwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0VRKG4sIDAsICYjMzQ7c2VydmVyIHJlY3YgRU9GJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwljbG9zZShhY2NlcHRfc2Vydik7CiYjNDM7CWFjY2VwdF9zZXJ2ID0gLTE7CiYjNDM7CiYjNDM7CS8qIGJsb2NrIHVudGlsIHJldHVybiBFT0YgKi8KJiM0MzsJbiA9IHJlY3YoY2xpZW4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOwomIzQzOwlpZiAoIUFTU0VSVF9FUShuLCAwLCAmIzM0O2NsaWVudCByZWN2IEVPRiYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogUnVuIGl0ZXJhdG9yIHByb2dyYW0gdGhhdCBkZXN0cm95cyB0aGUgdGltZXdhaXQgY2xpZW50IHNvY2suICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7dHdfZm91bmQgPSAwOwomIzQzOwlzdGFydF9pdGVyX3NvY2tldHMoc2tlbC0mZ3Q7cHJvZ3MuaXRlcl90Y3A2X3RpbWV3YWl0KTsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDt0d19mb3VuZCwgMSwgJiMzNDt0aW1ld2FpdCBzb2NrIGZvdW5kJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlBU1NFUlRfT0soc2tlbC0mZ3Q7YnNzLSZndDt0d19kZXN0cm95X2VyciwgJiMzNDtkZXN0cm95IHRpbWV3YWl0IHNvY2smIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIFRoZSBkZXN0cm95ZWQgdGltZXdhaXQgc29jayBtdXN0IGJlIGdvbmUuICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7dHdfZm91bmQgPSAwOwomIzQzOwlzdGFydF9pdGVyX3NvY2tldHMoc2tlbC0mZ3Q7cHJvZ3MuaXRlcl90Y3A2X3RpbWV3YWl0KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7dHdfZm91bmQsIDAsICYjMzQ7dGltZXdhaXQgc29jayBkZXN0cm95ZWQmIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKGNsaWVuICE9IC0xKQomIzQzOwkJY2xvc2UoY2xpZW4pOwomIzQzOwlpZiAoYWNjZXB0X3NlcnYgIT0gLTEpCiYjNDM7CQljbG9zZShhY2NlcHRfc2Vydik7CiYjNDM7CWlmIChzZXJ2ICE9IC0xKQomIzQzOwkJY2xvc2Uoc2Vydik7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdGVzdF91ZHBfY2xpZW50KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbCkKIHsKIAlpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBuID0gMDsKQEAgLTIwNCw2ICYjNDM7MzIxLDEwIEBAIHZvaWQgdGVzdF9zb2NrX2Rlc3Ryb3kodm9pZCkKIAkJdGVzdF90Y3BfY2xpZW50KHNrZWwpOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7dGNwX3NlcnZlciYjMzQ7KSkKIAkJdGVzdF90Y3Bfc2VydmVyKHNrZWwpOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3RjcF9saXN0ZW5fcGVuZGluZyYjMzQ7KSkKJiM0MzsJCXRlc3RfdGNwX2xpc3Rlbl9wZW5kaW5nKHNrZWwpOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3RjcF90aW1ld2FpdCYjMzQ7KSkKJiM0MzsJCXRlc3RfdGNwX3RpbWV3YWl0KHNrZWwpOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7dWRwX2NsaWVudCYjMzQ7KSkKIAkJdGVzdF91ZHBfY2xpZW50KHNrZWwpOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7dWRwX3NlcnZlciYjMzQ7KSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMKaW5kZXggOWUwYmY3YTU0Y2VjOS4uMGE4ODg3NTQzMjE4YSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMKQEAgLTcsNiAmIzQzOzcsOCBAQAogI2luY2x1ZGUgJiMzNDticGZfdHJhY2luZ19uZXQuaCYjMzQ7CiAKIF9fYmUxNiBzZXJ2X3BvcnQgPSAwOwomIzQzO2ludCB0d19mb3VuZCA9IDA7CiYjNDM7aW50IHR3X2Rlc3Ryb3lfZXJyID0gMDsKIAogaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzaykgX19rc3ltOwogCkBAIC0xMDAsNiAmIzQzOzEwMiwzNCBAQCBpbnQgaXRlcl90Y3A2X3NlcnZlcihzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7aXRlci90Y3AmIzM0OykKJiM0MztpbnQgaXRlcl90Y3A2X3RpbWV3YWl0KHN0cnVjdCBicGZfaXRlcl9fdGNwICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja19jb21tb24gKnNrX2NvbW1vbiA9IGN0eC0mZ3Q7c2tfY29tbW9uOwomIzQzOwlfX3U2NCAqdmFsOwomIzQzOwlpbnQga2V5ID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFza19jb21tb24pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHNrX2NvbW1vbi0mZ3Q7c2tjX2ZhbWlseSAhPSBBRl9JTkVUNikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoIWJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2soc2tfY29tbW9uKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7dGNwX2Nvbm5fc29ja2V0cywgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwkvKiBUaGUgdGltZXdhaXQgc29jayBpbmhlcml0cyB0aGUgY29va2llIG9mIHRoZSBjbG9zZWQgY2xpZW50IHNvY2suICovCiYjNDM7CWlmIChicGZfZ2V0X3NvY2tldF9jb29raWUoc2tfY29tbW9uKSAhPSAqdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXR3X2ZvdW5kJiM0MzsmIzQzOzsKJiM0MzsJdHdfZGVzdHJveV9lcnIgPSBicGZfc29ja19kZXN0cm95KHNrX2NvbW1vbik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KIAogU0VDKCYjMzQ7aXRlci91ZHAmIzM0OykKIGludCBpdGVyX3VkcDZfY2xpZW50KHN0cnVjdCBicGZfaXRlcl9fdWRwICpjdHgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTQwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyB0aGF0IHdhcnJhbnQgS01TQU4gb3IgaWYgc3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUCB3aWxsIGN1dCBpdC4KCkZpcnN0LCBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBkaWZmLiBTcGVjaWZpY2FsbHksIHRoaXMgY2hhbmdlIGluIGBuZXQvY29yZS9maWx0ZXIuY2Agd2l0aGluIHRoZSBgYnBmX3NvY2tfZGVzdHJveWAgZnVuY3Rpb24uIEhtbSwgaXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSByZW1vdmVkIGEgY2hlY2sgYW5kIGFkZGVkIGEgbmV3IG9uZToKCmBgYGMKLQlpZiAoIXNrLSZndDtza19wcm90LSZndDtkaWFnX2Rlc3Ryb3kgfHwgKHNrLSZndDtza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCAmYW1wOyZhbXA7Ci0JCQkJCSAgIHNrLSZndDtza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUCkpCiYjNDM7CWlmICghc2stJmd0O3NrX3Byb3QtJmd0O2RpYWdfZGVzdHJveSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJaWYgKHNrX2Z1bGxzb2NrKHNrKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgJmFtcDsmYW1wOwomIzQzOwkgICAgc2stJmd0O3NrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlyZXR1cm4gc2stJmd0O3NrX3Byb3QtJmd0O2RpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTsKYGBgCgpQcmV2aW91c2x5LCBgc2stJmd0O3NrX3Byb3RvY29sYCB3YXMgYmVpbmcgYWNjZXNzZWQgb24gYW55IGBzb2NrX2NvbW1vbmAgc3RydWN0dXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2FpdCBhIHNlY29uZCwgaXNuJiMzOTt0IGBzay0mZ3Q7c2tfcHJvdG9jb2xgIHBvc3NpYmx5IHVuaW5pdGlhbGl6ZWQgaW4gY2VydGFpbiBgc29ja19jb21tb25gIHNjZW5hcmlvcz8gU3BlY2lmaWNhbGx5LCBmb3Igc29tZXRoaW5nIGxpa2UgYHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2tgLCB3aGljaCBpc24mIzM5O3QgYSBmdWxsIHNvY2tldCwgYWNjZXNzaW5nIGBza19wcm90b2NvbGAgZGlyZWN0bHkgY291bGQgYmUgZGFuZ2Vyb3VzLgoKSSYjMzk7bSB0aGlua2luZywgaXNuJiMzOTt0IGBzdHJ1Y3Qgc29ja19jb21tb25gIHN1cHBvc2VkIHRvIGhvbGQgc29tZSBvZiB0aGlzIGVzc2VudGlhbCBpbmZvIGxpa2UgYHNrY19wcm90YCBvciBgc2tjX2ZhbWlseWA/IEkmIzM5O20gZ2V0dGluZyBhIGxpdHRsZSBmdXp6eSBoZXJlLiBEaWQgdGhleSBndWFyZCB0aGF0IGFjY2VzcyB3aXRoIHRoZSBgc2tfZnVsbHNvY2soc2spYCBjaGVjaz8gQWhhLCB0aGF0JiMzOTtzIGl0ISBJZiB3ZSBvbmx5IGNoZWNrIGBza19wcm90b2NvbGAgd2hlbiBgc2tfZnVsbHNvY2tgIHJldHVybnMgdHJ1ZSwgaXQmIzM5O3Mgc2FmZXIuIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoaXMgc3RyYWlnaHQ6IEkgbmVlZCB0byBjaGVjayBob3cgYHNrX2Z1bGxzb2NrYCBpcyBkZWZpbmVkLiBJIHNob3VsZCBhbHNvIGNoZWNrIHdoaWNoIGZpZWxkcyBhcmUgYWN0dWFsbHkgZGVmaW5lZCBpbiBgc29ja19jb21tb25gIHZlcnN1cyBgc29ja2AsIGluIGdlbmVyYWwuCgpPa2F5LCB0aW1lIHRvIGdyZXAgZm9yIGBza19mdWxsc29ja2Agb3IgZ28gZGlyZWN0bHkgdG8gYGluY2x1ZGUvbmV0L3NvY2suaGAuIEkmIzM5O2xsIGdldCB0aGUgZGV0YWlscyBiZWZvcmUgYXNzdW1pbmcgYW55dGhpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX2Z1bGxzb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2Nsc19jZ3JvdXAuaD01Mz1zdGF0aWMgaW5saW5lIHUzMiB0YXNrX2dldF9jbGFzc2lkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9uZXQvY2xzX2Nncm91cC5oLTY5LVx0XHQvKiBJZiB0aGVyZSBpcyBhbiBzb2NrX2Nncm91cF9jbGFzc2lkIHdlJiMzOTtsbCB1c2UgdGhhdC4gKi9cbmluY2x1ZGUvbmV0L2Nsc19jZ3JvdXAuaDo3MDpcdFx0aWYgKCFzayB8fCAhc2tfZnVsbHNvY2soc2spKVxuaW5jbHVkZS9uZXQvY2xzX2Nncm91cC5oLTcxLVx0XHRcdHJldHVybiAwO1xuLS1cbmluY2x1ZGUvbmV0L2luZXQ2X2hhc2h0YWJsZXMuaD0xMDY9c3RydWN0IHNvY2sgKmluZXQ2X3N0ZWFsX3NvY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZG9mZixcbi0tXG5pbmNsdWRlL25ldC9pbmV0Nl9oYXNodGFibGVzLmgtMTE3LVxuaW5jbHVkZS9uZXQvaW5ldDZfaGFzaHRhYmxlcy5oOjExODpcdGlmICghcHJlZmV0Y2hlZCB8fCAhc2tfZnVsbHNvY2soc2spKVxuaW5jbHVkZS9uZXQvaW5ldDZfaGFzaHRhYmxlcy5oLTExOS1cdFx0cmV0dXJuIHNrO1xuLS1cbmluY2x1ZGUvbmV0L2luZXRfaGFzaHRhYmxlcy5oPTQ0Nj1zdHJ1Y3Qgc29jayAqaW5ldF9zdGVhbF9zb2NrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGRvZmYsXG4tLVxuaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmgtNDU3LVxuaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmg6NDU4Olx0aWYgKCFwcmVmZXRjaGVkIHx8ICFza19mdWxsc29jayhzaykpXG5pbmNsdWRlL25ldC9pbmV0X2hhc2h0YWJsZXMuaC00NTktXHRcdHJldHVybiBzaztcbi0tXG5pbmNsdWRlL25ldC9pcC5oPTUzND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9za2JfZHN0X210dShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxuaW5jbHVkZS9uZXQvaXAuaC01MzktXG5pbmNsdWRlL25ldC9pcC5oOjU0MDpcdGlmICghc2sgfHwgIXNrX2Z1bGxzb2NrKHNrKSB8fCBpcF9za191c2VfcG10dShzaykpIHtcbmluY2x1ZGUvbmV0L2lwLmgtNTQxLVx0XHRib29sIGZvcndhcmRpbmcgPSBJUENCKHNrYiktXHUwMDNlZmxhZ3MgXHUwMDI2IElQU0tCX0ZPUldBUkRFRDtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5oPTIyPXN0YXRpYyBpbmxpbmUgYm9vbCBuZnRfZmliX2Nhbl9za2lwKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZnRfZmliLmgtMzYtXHRzayA9IHBrdC1cdTAwM2Vza2ItXHUwMDNlc2s7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5oOjM3Olx0aWYgKHNrIFx1MDAyNlx1MDAyNiBza19mdWxsc29jayhzaykpXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5oLTM4LVx0ICAgICAgIHJldHVybiBzay1cdTAwM2Vza19yeF9kc3RfaWZpbmRleCA9PSBpbmRldi1cdTAwM2VpZmluZGV4O1xuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0zMDE2PXNrYl9za19pc19wcmVmZXRjaGVkKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9uZXQvc29jay5oLTMwMjctICovXG5pbmNsdWRlL25ldC9zb2NrLmg6MzAyODpzdGF0aWMgaW5saW5lIGJvb2wgc2tfZnVsbHNvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuaW5jbHVkZS9uZXQvc29jay5oLTMwMjkte1xuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0zMDM0PXNrX2lzX3JlZmNvdW50ZWQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaC0zMDM2LVx0LyogT25seSBmdWxsIHNvY2tldHMgaGF2ZSBzay1cdTAwM2Vza19mbGFncy4gKi9cbmluY2x1ZGUvbmV0L3NvY2suaDozMDM3Olx0cmV0dXJuICFza19mdWxsc29jayhzaykgfHwgIXNvY2tfZmxhZyhzaywgU09DS19SQ1VfRlJFRSk7XG5pbmNsdWRlL25ldC9zb2NrLmgtMzAzOC19XG4tLVxuaW5jbHVkZS9uZXQvc29jay5oPTMwNDE9c2tfcmVxdWVzdHNfd2lmaV9zdGF0dXMoc3RydWN0IHNvY2sgKnNrKVxuaW5jbHVkZS9uZXQvc29jay5oLTMwNDIte1xuaW5jbHVkZS9uZXQvc29jay5oOjMwNDM6XHRyZXR1cm4gc2sgXHUwMDI2XHUwMDI2IHNrX2Z1bGxzb2NrKHNrKSBcdTAwMjZcdTAwMjYgc29ja19mbGFnKHNrLCBTT0NLX1dJRklfU1RBVFVTKTtcbmluY2x1ZGUvbmV0L3NvY2suaC0zMDQ0LX1cbi0tXG5pbmNsdWRlL25ldC9zb2NrLmg9MzExNj1zdGF0aWMgaW5saW5lIHZvaWQgc2tfcGFjaW5nX3NoaWZ0X3VwZGF0ZShzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXG5pbmNsdWRlL25ldC9zb2NrLmgtMzExNy17XG5pbmNsdWRlL25ldC9zb2NrLmg6MzExODpcdGlmICghc2sgfHwgIXNrX2Z1bGxzb2NrKHNrKSB8fCBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcGFjaW5nX3NoaWZ0KSA9PSB2YWwpXG5pbmNsdWRlL25ldC9zb2NrLmgtMzExOS1cdFx0cmV0dXJuO1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oPTI4OTQ9c3RhdGljIGlubGluZSBpbnQgdGNwX2NhbGxfYnBmKHN0cnVjdCBzb2NrICpzaywgaW50IG9wLCB1MzIgbmFyZ3MsIHUzMiAqYXJncylcbi0tXG5pbmNsdWRlL25ldC90Y3AuaC0yODk5LVx0bWVtc2V0KFx1MDAyNnNvY2tfb3BzLCAwLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sIHRlbXApKTtcbmluY2x1ZGUvbmV0L3RjcC5oOjI5MDA6XHRpZiAoc2tfZnVsbHNvY2soc2spKSB7XG5pbmNsdWRlL25ldC90Y3AuaC0yOTAxLVx0XHRzb2NrX29wcy5pc19mdWxsc29jayA9IDE7XG4tLVxuaW5jbHVkZS9uZXQvdGxzLmg9MzYwPXN0YXRpYyBpbmxpbmUgYm9vbCB0bHNfaXNfc2tiX3R4X2RldmljZV9vZmZsb2FkZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL25ldC90bHMuaC0zNjQtXG5pbmNsdWRlL25ldC90bHMuaDozNjU6XHRyZXR1cm4gc2sgXHUwMDI2XHUwMDI2IHNrX2Z1bGxzb2NrKHNrKSBcdTAwMjZcdTAwMjZcbmluY2x1ZGUvbmV0L3Rscy5oLTM2Ni1cdCAgICAgICAoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZzay1cdTAwM2Vza192YWxpZGF0ZV94bWl0X3NrYikgPT1cbi0tXG5pbmNsdWRlL25ldC90bHMuaD01MDg9c3RhdGljIGlubGluZSBib29sIHRsc19pc19za19yeF9kZXZpY2Vfb2ZmbG9hZGVkKHN0cnVjdCBzb2NrICpzaylcbmluY2x1ZGUvbmV0L3Rscy5oLTUwOS17XG5pbmNsdWRlL25ldC90bHMuaDo1MTA6XHRpZiAoIXNrX2Z1bGxzb2NrKHNrKSB8fFxuaW5jbHVkZS9uZXQvdGxzLmgtNTExLVx0ICAgIHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2c2stXHUwMDNlc2tfZGVzdHJ1Y3QpICE9IHRsc19kZXZpY2Vfc2tfZGVzdHJ1Y3QpXG4tLVxuaW5jbHVkZS9uZXQveGZybS5oPTEzOTM9c3RhdGljIGlubGluZSBpbnQgeGZybV9za19jbG9uZV9wb2xpY3koc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqb3NrKVxuaW5jbHVkZS9uZXQveGZybS5oLTEzOTQte1xuaW5jbHVkZS9uZXQveGZybS5oOjEzOTU6XHRpZiAoIXNrX2Z1bGxzb2NrKG9zaykpXG5pbmNsdWRlL25ldC94ZnJtLmgtMTM5Ni1cdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczODEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgYnBmX3NvY2tfZGVzdHJveWAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIGBicGZfc29ja19kZXN0cm95YCBmdW5jdGlvbi4uLiB0aGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgd2hlbiBpdCBjb21lcyB0byBjbGVhbmluZyB1cCBCUEYtcmVsYXRlZCByZXNvdXJjZXMgdGllZCB0byBhIHNvY2tldC4gR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIG1lbW9yeSBsZWFrcyBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBpbiB0aGlzIGFyZWEsIG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byByZXZpc2l0IHRoYXQgc2VjdGlvbiBvZiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBJIG5lZWQgdG8gZW5zdXJlIGFsbCByZXNvdXJjZXMgYWxsb2NhdGVkIGZvciB0aGUgQlBGIHByb2dyYW0gYXNzb2NpYXRlZCB3aXRoIGEgc29ja2V0IGFyZSBwcm9wZXJseSBmcmVlZCBkdXJpbmcgc29ja2V0IGRlc3RydWN0aW9uLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMg4oCTIGFyZSB0aGVyZSBhbnkgc2NlbmFyaW9zIHdoZXJlIGFub3RoZXIgdGhyZWFkIG1pZ2h0IGJlIGFjY2Vzc2luZyB0aGUgQlBGIHByb2dyYW0gd2hpbGUgd2UmIzM5O3JlIHRyeWluZyB0byB0ZWFyIGl0IGRvd24/IEFsc28sIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIHJlZmVyZW5jZSBjb3VudHMgYXJlIGhhbmRsZWQgbWV0aWN1bG91c2x5OyBhIHNpbmdsZSBtaXNzZWQgZGVjcmVtZW50IGNvdWxkIGJlIGEgdGlja2luZyB0aW1lIGJvbWIuIEnigJlsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSwgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIHJlc291cmNlLXJlbGF0ZWQgaXNzdWVzPyBBbnkgc3BvdHMgd2hlcmUgYSBwcm9ncmFtIG1pZ2h0IGJlIHVzZWQgYWZ0ZXIgaXQgaXMgZnJlZWQuIEFuZCBJIGhhdmUgdG8ga2VlcCBpbiBtaW5kLCBvZiBjb3Vyc2UsIHRoZSBpbXBsaWNhdGlvbnMgb2YgY2hhbmdlcyBoZXJlIG9uIG90aGVyIHN5c3RlbXMsIHNvIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI5MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI5MTA6XHQgKiBQYXJhbWV0ZXJzOlxuMTI5MTE6XHQgKiBAc29jazogUG9pbnRlciB0byBzb2NrZXQgdG8gYmUgZGVzdHJveWVkXG4xMjkxMjpcdCAqXG4xMjkxMzpcdCAqIFJldHVybjpcbjEyOTE0Olx0ICogT24gZXJyb3IsIG1heSByZXR1cm4gRU9QTk9UU1VQUCwgb3Igd2hhdGV2ZXIgdGhlIHByb3RvY29sIHNwZWNpZmljXG4xMjkxNTpcdCAqIGRlc3Ryb3kgaGFuZGxlciByZXR1cm5zLlxuMTI5MTY6XHQgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxuMTI5MTc6XHQgKiAwIG90aGVyd2lzZVxuMTI5MTg6XHQgKi9cbjEyOTE5Olx0X19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxuMTI5MjA6XHR7XG4xMjkyMTpcdFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopc29jaztcbjEyOTIyOlx0XG4xMjkyMzpcdFx0LyogVGhlIGxvY2tpbmcgc2VtYW50aWNzIHRoYXQgYWxsb3cgZm9yIHN5bmNocm9ub3VzIGV4ZWN1dGlvbiBvZiB0aGVcbjEyOTI0Olx0XHQgKiBkZXN0cm95IGhhbmRsZXJzIGFyZSBvbmx5IHN1cHBvcnRlZCBmb3IgVENQIGFuZCBVRFAuXG4xMjkyNTpcdFx0ICogU3VwcG9ydGluZyBwcm90b2NvbHMgd2lsbCBuZWVkIHRvIGFjcXVpcmUgc29jayBsb2NrIGluIHRoZSBCUEYgY29udGV4dFxuMTI5MjY6XHRcdCAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuXG4xMjkyNzpcdFx0ICovXG4xMjkyODpcdFx0aWYgKCFzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveSlcbjEyOTI5Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjEyOTMwOlx0XG4xMjkzMTpcdFx0aWYgKHNrX2Z1bGxzb2NrKHNrKSBcdTAwMjZcdTAwMjZcbjEyOTMyOlx0XHQgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG4xMjkzMzpcdFx0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxuMTI5MzQ6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTI5MzU6XHRcbjEyOTM2Olx0XHRyZXR1cm4gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7XG4xMjkzNzpcdH1cbjEyOTM4Olx0XG4xMjkzOTpcdF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG4xMjk0MDpcdFxuMTI5NDE6XHRCVEZfS0ZVTkNTX1NUQVJUKGJwZl9za19pdGVyX2tmdW5jX2lkcylcbjEyOTQyOlx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zb2NrX2Rlc3Ryb3kpXG4xMjk0MzpcdEJURl9LRlVOQ1NfRU5EKGJwZl9za19pdGVyX2tmdW5jX2lkcylcbjEyOTQ0Olx0XG4xMjk0NTpcdHN0YXRpYyBpbnQgdHJhY2luZ19pdGVyX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbjEyOTQ2Olx0e1xuMTI5NDc6XHRcdGlmIChidGZfaWRfc2V0OF9jb250YWlucyhcdTAwMjZicGZfc2tfaXRlcl9rZnVuY19pZHMsIGtmdW5jX2lkKSBcdTAwMjZcdTAwMjZcbjEyOTQ4Olx0XHQgICAgcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfSVRFUilcbjEyOTQ5Olx0XHRcdHJldHVybiAtRUFDQ0VTO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Mzk4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBpbmV0X2Nvbm5lY3Rpb25fc29jay5jYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIG9uIGBuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jYC4gU3BlY2lmaWNhbGx5LCBJIHRoaW5rIHRoZSBhY3Rpb24gaXMgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDE1MjAuIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIHRoZSBzeW1wdG9tcyBJJiMzOTttIHNlZWluZy4gSSYjMzk7bGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cgYXJvdW5kIHRoYXQgYXJlYSBvZiB0aGUgY29kZS4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1MDA6XHRcdFx0XHRcdFx0UkVBRF9PTkNFKG5zay1cdTAwM2Vza19kYXRhX3JlYWR5KShuc2spO1xuMTUwMTpcdFx0XHRcdFx0fSBlbHNlIHtcbjE1MDI6XHRcdFx0XHRcdFx0X19ORVRfSU5DX1NUQVRTKHNvY2tfbmV0KG5zayksXG4xNTAzOlx0XHRcdFx0XHRcdFx0XHRMSU5VWF9NSUJfVENQTUlHUkFURVJFUUZBSUxVUkUpO1xuMTUwNDpcdFx0XHRcdFx0XHRyZXFza19taWdyYXRlX3Jlc2V0KG5yZXEpO1xuMTUwNTpcdFx0XHRcdFx0XHRfX3JlcXNrX2ZyZWUobnJlcSk7XG4xNTA2Olx0XHRcdFx0XHR9XG4xNTA3Olx0XHRcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjE1MDg6XHRcbjE1MDk6XHRcdFx0XHRcdC8qIGluZXRfY3NrX3JlcXNrX3F1ZXVlX2FkZCgpIGhhcyBhbHJlYWR5XG4xNTEwOlx0XHRcdFx0XHQgKiBjYWxsZWQgaW5ldF9jaGlsZF9mb3JnZXQoKSBvbiBmYWlsdXJlIGNhc2UuXG4xNTExOlx0XHRcdFx0XHQgKi9cbjE1MTI6XHRcdFx0XHRcdGdvdG8gc2tpcF9jaGlsZF9mb3JnZXQ7XG4xNTEzOlx0XHRcdFx0fVxuMTUxNDpcdFx0XHR9XG4xNTE1Olx0XG4xNTE2Olx0XHRcdGluZXRfY2hpbGRfZm9yZ2V0KHNrLCByZXEsIGNoaWxkKTtcbjE1MTc6XHRza2lwX2NoaWxkX2ZvcmdldDpcbjE1MTg6XHRcdFx0cmVxc2tfcHV0KHJlcSk7XG4xNTE5Olx0XHRcdGJoX3VubG9ja19zb2NrKGNoaWxkKTtcbjE1MjA6XHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4xNTIxOlx0XHRcdHNvY2tfcHV0KGNoaWxkKTtcbjE1MjI6XHRcbjE1MjM6XHRcdFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXG4xNTI0Olx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4xNTI1Olx0XHR9XG4xNTI2Olx0XHRpZiAocXVldWUtXHUwMDNlZmFzdG9wZW5xLnJza3FfcnN0X2hlYWQpIHtcbjE1Mjc6XHRcdFx0LyogRnJlZSBhbGwgdGhlIHJlcXMgcXVldWVkIGluIHJza3FfcnN0X2hlYWQuICovXG4xNTI4Olx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZxdWV1ZS1cdTAwM2VmYXN0b3BlbnEubG9jayk7XG4xNTI5Olx0XHRcdHJlcSA9IHF1ZXVlLVx1MDAzZWZhc3RvcGVucS5yc2txX3JzdF9oZWFkO1xuMTUzMDpcdFx0XHRxdWV1ZS1cdTAwM2VmYXN0b3BlbnEucnNrcV9yc3RfaGVhZCA9IE5VTEw7XG4xNTMxOlx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnF1ZXVlLVx1MDAzZWZhc3RvcGVucS5sb2NrKTtcbjE1MzI6XHRcdFx0d2hpbGUgKHJlcSAhPSBOVUxMKSB7XG4xNTMzOlx0XHRcdFx0bmV4dCA9IHJlcS1cdTAwM2VkbF9uZXh0O1xuMTUzNDpcdFx0XHRcdHJlcXNrX3B1dChyZXEpO1xuMTUzNTpcdFx0XHRcdHJlcSA9IG5leHQ7XG4xNTM2Olx0XHRcdH1cbjE1Mzc6XHRcdH1cbjE1Mzg6XHRcdFdBUk5fT05fT05DRShzay1cdTAwM2Vza19hY2tfYmFja2xvZyk7XG4xNTM5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTk1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgYW5kIFNvY2tldCBMaWZlY3ljbGUgSW50ZXJhY3Rpb25zKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEkgc2VlIHRoYXQgYGluZXRfY3NrX2xpc3Rlbl9zdG9wYCBoYXMgdGhpcyBjb25kaXRpb25hbCBgaWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpIGNvbmRfcmVzY2hlZCgpO2AuIFRoZSByYXRpb25hbGUgaXMgcHJldHR5IGNsZWFyOiB3aGVuIGBicGZfc29ja19kZXN0cm95YCBpcyBpbnZva2VkIGZyb20gd2l0aGluIGEgQlBGIHByb2dyYW0sIGVzcGVjaWFsbHkgdGhyb3VnaCBpdGVyYXRvcnMsIGl0IGNhbiBiZSBydW5uaW5nIHVuZGVyIGFuIFJDVSByZWFkIGxvY2sgb3IgaW4gYSBub24tcHJlZW1wdGlibGUgY29udGV4dC4gQ2FsbGluZyBgY29uZF9yZXNjaGVkKClgIGluIHRoYXQgc2NlbmFyaW8gaXMgYSByZWNpcGUgZm9yIGRpc2FzdGVyIOKAkyBjbGFzc2ljIGBtaWdodF9zbGVlcCgpYCBhbmQgJiMzNDtzY2hlZHVsaW5nIHdoaWxlIGF0b21pYyYjMzQ7IHdhcm5pbmdzLCBvciBwb3RlbnRpYWxseSBSQ1UtcmVsYXRlZCBwcm9ibGVtcy4gU3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhbmQgbG9ja2RlcCB3b3VsZCBlYXNpbHkgY2F0Y2ggdGhvc2Ugc2NoZWR1bGVyLCBjb25jdXJyZW5jeSwgYW5kIFJDVSBpc3N1ZXMuIFRoYXQgbWFrZXMgc2Vuc2UuCgpOb3csIHRoZSBjaGFuZ2VzIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgYXJlIG1vcmUgaW50ZXJlc3RpbmcuIGBicGZfc29ja19kZXN0cm95YCBpcyBjbGVhcmx5IGJlaW5nIHVwZGF0ZWQgdG8gaGFuZGxlIG5vbi1mdWxsIHNvY2tldHMsIGxpa2UgYGluZXRfdGltZXdhaXRfc29ja2Agb3IgYHJlcXVlc3Rfc29ja2AuIFRoZSBjb2RlIG5vdyBjaGVja3MgYHNrX2Z1bGxzb2NrKHNrKWAgYmVmb3JlIGFjY2Vzc2luZyBgc2stJmd0O3NrX3Byb3RvY29sYC4gSG1tLCB3aHk/IEFoLCBmb3IgdGltZXdhaXQgc29ja2V0cywgYHNrX2NvbW1vbmAgaXMgZW1iZWRkZWQsIGJ1dCB0aGUgYGluZXRfdGltZXdhaXRfc29ja2Agc3RydWN0dXJlIGRvZXNu4oCZdCBoYXZlIHRoZSBmdWxsIGBzdHJ1Y3Qgc29ja2AgZmllbGRzIGxpa2UgYHNrX3Byb3RvY29sYCBhdCB0aGUgc2FtZSBvZmZzZXRzLiBSaWdodCwgSSByZW1lbWJlciBub3chIEluIGBzdHJ1Y3Qgc29ja19jb21tb25gLCB3ZSBoYXZlIGBza2NfcHJvdGAsIGJ1dCB0aGUgZnVsbCBgc2tfcHJvdG9jb2xgIGxpdmVzIGluIGBzdHJ1Y3Qgc29ja2AsIG5vdCBgc29ja19jb21tb25gLiBTbywgYGluZXRfdGltZXdhaXRfc29ja2AgbWlnaHQgYmUgdXNpbmcgYHR3X3Byb3RgIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQgd2l0aGluIHRoZSBgc2tjX3Byb3RgLiBJZiBgYnBmX3NvY2tfZGVzdHJveWAgd2VyZSB0byB0YWtlIGEgYHNvY2tfY29tbW9uYCBwb2ludGVyIGFuZCBibGluZGx5IGNhc3QgaXQgdG8gYHN0cnVjdCBzb2NrICpgLCBhY2Nlc3NpbmcgYHNrLSZndDtza19wcm90b2NvbGAgb24gYW4gYGluZXRfdGltZXdhaXRfc29ja2Agd291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQsIG9yLCBhdCBiZXN0LCBhIHJlYWQgZnJvbSB0aGUgd3Jvbmcgb2Zmc2V0LiBUaGF0IHdvdWxkIGJlIG1lc3N5LiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGxheW91dCBvZiBgc3RydWN0IGluZXRfdGltZXdhaXRfc29ja2AgdmVyc3VzIGBzdHJ1Y3Qgc29ja2AganVzdCB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaD0yNj1zdHJ1Y3QgaW5ldF9iaW5kX2J1Y2tldDtcbi0tXG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaC0zMi0gKi9cbmluY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oOjMzOnN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sge1xuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgtMzQtXHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDIyNwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gZ3JhYiBgaW5ldF90aW1ld2FpdF9zb2NrLmhgIGFuZCBmb2N1cyBvbiBsaW5lcyAzMC03MC4gSSBrbm93IHRoaXMgaGVhZGVyIGZpbGUsIHNvIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgY29yZSBkZWZpbml0aW9ucyByZWxhdGVkIHRvIHRoZSBUQ1AgVElNRS1XQUlUIHN0YXRlIGZvciBJUHY0IGFuZCBJUHY2IHNvY2tldHMuIE15IGdvYWwgaGVyZSBpcyB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBwb3NzaWJseSBpZGVudGlmeSBhbnkgcmVsZXZhbnQgcGFyYW1ldGVycyBvciBtYWNyb3MgdGhhdCBtaWdodCBiZSBpbiBteSBjdXJyZW50IGxpbmUgb2YgdGhpbmtpbmcgb3IgcHJvYmxlbS1zb2x2aW5nIHRoYXQgSSBhbSBkb2luZy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgdGhlIGB0d19zb2NrYCBzdHJ1Y3R1cmUgaXRzZWxmLCBhbnkgcmVsYXRlZCBmbGFncywgb3IgZnVuY3Rpb25zIHRoYXQgb3BlcmF0ZSBvbiBUSU1FLVdBSVQgc29ja2V0cy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgdGhlIHRpbWVyIHN0cnVjdHVyZXMgdXNlZCBmb3IgdGhlIDJNU0wgdGltZW91dCBwZXJpb2QsIGFueSByZWZlcmVuY2VzIHRvIGNvbm5lY3Rpb24gc3RhdGUgdHJhbnNpdGlvbnMsIGFuZCBob3cgdGhlIGtlcm5lbCB0cmFja3MgdGhlc2Ugc29ja2V0cyBmb3IgY2xlYW51cC4gSeKAmWxsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHVudXN1YWwgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvciBvcHRpbWl6YXRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBvZiBUQ1AgY29ubmVjdGlvbnMsIHRvby4gVGltZSB0byBnZXQgc3RhcnRlZCBhbmQgZ2V0IHRob3NlIG1lbnRhbCBnZWFycyB0dXJuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzMDpcdCAqIHByb2JsZW1zIG9mIHNvY2tldHMgaW4gc3VjaCBhIHN0YXRlIG9uIGhlYXZpbHkgbG9hZGVkIHNlcnZlcnMsIGJ1dFxuICAzMTpcdCAqIHdpdGhvdXQgdmlvbGF0aW5nIHRoZSBwcm90b2NvbCBzcGVjaWZpY2F0aW9uLlxuICAzMjpcdCAqL1xuICAzMzpcdHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sge1xuICAzNDpcdFx0LypcbiAgMzU6XHRcdCAqIE5vdyBzdHJ1Y3Qgc29jayBhbHNvIHVzZXMgc29ja19jb21tb24sIHNvIHBsZWFzZSBqdXN0XG4gIDM2Olx0XHQgKiBkb24mIzM5O3QgYWRkIG5vdGhpbmcgYmVmb3JlIHRoaXMgZmlyc3QgbWVtYmVyIChfX3R3X2NvbW1vbikgLS1hY21lXG4gIDM3Olx0XHQgKi9cbiAgMzg6XHRcdHN0cnVjdCBzb2NrX2NvbW1vblx0X190d19jb21tb247XG4gIDM5Olx0I2RlZmluZSB0d19mYW1pbHlcdFx0X190d19jb21tb24uc2tjX2ZhbWlseVxuICA0MDpcdCNkZWZpbmUgdHdfc3RhdGVcdFx0X190d19jb21tb24uc2tjX3N0YXRlXG4gIDQxOlx0I2RlZmluZSB0d19yZXVzZVx0XHRfX3R3X2NvbW1vbi5za2NfcmV1c2VcbiAgNDI6XHQjZGVmaW5lIHR3X3JldXNlcG9ydFx0XHRfX3R3X2NvbW1vbi5za2NfcmV1c2Vwb3J0XG4gIDQzOlx0I2RlZmluZSB0d19pcHY2b25seVx0XHRfX3R3X2NvbW1vbi5za2NfaXB2Nm9ubHlcbiAgNDQ6XHQjZGVmaW5lIHR3X2JvdW5kX2Rldl9pZlx0XHRfX3R3X2NvbW1vbi5za2NfYm91bmRfZGV2X2lmXG4gIDQ1Olx0I2RlZmluZSB0d19ub2RlXHRcdFx0X190d19jb21tb24uc2tjX251bGxzX25vZGVcbiAgNDY6XHQjZGVmaW5lIHR3X2JpbmRfbm9kZVx0XHRfX3R3X2NvbW1vbi5za2NfYmluZF9ub2RlXG4gIDQ3Olx0I2RlZmluZSB0d19yZWZjbnRcdFx0X190d19jb21tb24uc2tjX3JlZmNudFxuICA0ODpcdCNkZWZpbmUgdHdfdHhfcXVldWVfbWFwcGluZ1x0X190d19jb21tb24uc2tjX3R4X3F1ZXVlX21hcHBpbmdcbiAgNDk6XHQjZGVmaW5lIHR3X3J4X3F1ZXVlX21hcHBpbmdcdF9fdHdfY29tbW9uLnNrY19yeF9xdWV1ZV9tYXBwaW5nXG4gIDUwOlx0I2RlZmluZSB0d19oYXNoXHRcdFx0X190d19jb21tb24uc2tjX2hhc2hcbiAgNTE6XHQjZGVmaW5lIHR3X3Byb3RcdFx0XHRfX3R3X2NvbW1vbi5za2NfcHJvdFxuICA1MjpcdCNkZWZpbmUgdHdfbmV0XHRcdFx0X190d19jb21tb24uc2tjX25ldFxuICA1MzpcdCNkZWZpbmUgdHdfZGFkZHIgICAgICAgIFx0X190d19jb21tb24uc2tjX2RhZGRyXG4gIDU0Olx0I2RlZmluZSB0d192Nl9kYWRkclx0XHRfX3R3X2NvbW1vbi5za2NfdjZfZGFkZHJcbiAgNTU6XHQjZGVmaW5lIHR3X3Jjdl9zYWRkciAgICBcdF9fdHdfY29tbW9uLnNrY19yY3Zfc2FkZHJcbiAgNTY6XHQjZGVmaW5lIHR3X3Y2X3Jjdl9zYWRkciAgICBcdF9fdHdfY29tbW9uLnNrY192Nl9yY3Zfc2FkZHJcbiAgNTc6XHQjZGVmaW5lIHR3X2Rwb3J0XHRcdF9fdHdfY29tbW9uLnNrY19kcG9ydFxuICA1ODpcdCNkZWZpbmUgdHdfbnVtXHRcdFx0X190d19jb21tb24uc2tjX251bVxuICA1OTpcdCNkZWZpbmUgdHdfY29va2llXHRcdF9fdHdfY29tbW9uLnNrY19jb29raWVcbiAgNjA6XHQjZGVmaW5lIHR3X2RyXHRcdFx0X190d19jb21tb24uc2tjX3R3X2RyXG4gIDYxOlx0XG4gIDYyOlx0XHRfX3UzMlx0XHRcdHR3X21hcms7XG4gIDYzOlx0XHR1bnNpZ25lZCBjaGFyXHRcdHR3X3N1YnN0YXRlO1xuICA2NDpcdFx0dW5zaWduZWQgY2hhclx0XHR0d19yY3Zfd3NjYWxlO1xuICA2NTpcdFxuICA2NjpcdFx0LyogU29ja2V0IGRlbXVsdGlwbGV4IGNvbXBhcmlzb25zIG9uIGluY29taW5nIHBhY2tldHMuICovXG4gIDY3Olx0XHQvKiB0aGVzZSB0aHJlZSBhcmUgaW4gaW5ldF9zb2NrICovXG4gIDY4Olx0XHRfX2JlMTZcdFx0XHR0d19zcG9ydDtcbiAgNjk6XHRcdC8qIEFuZCB0aGVzZSBhcmUgb3Vycy4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMDYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMga2VybmVsIGNvZGUgYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGEgZml4LiBJdCBzZWVtcyBsaWtlIHRoZSBpc3N1ZSBpcyByb290ZWQgaW4gaG93IGBzdHJ1Y3Qgc29ja2AgYW5kIGBpbmV0X3RpbWV3YWl0X3NvY2tgIGFyZSByZWxhdGVkLCBhbmQgc3BlY2lmaWNhbGx5LCBob3cgYHNrX3Byb3RvY29sYCBpcyBhY2Nlc3NlZC4gSSBzZWUgdGhhdCBgc2tfcHJvdG9jb2xgIHdpdGhpbiBgc3RydWN0IHNvY2tgIGlzIGxvY2F0ZWQgYXQgYW4gb2Zmc2V0IGFmdGVyIGBzb2NrX2NvbW1vbmAuIFRoZSBwcm9ibGVtLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRoYXQgd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgYHRpbWV3YWl0YCBzb2NrZXQsIHdoaWNoIHVzZXMgYGluZXRfdGltZXdhaXRfc29ja2AsIGFjY2Vzc2luZyBgc2stJmd0O3NrX3Byb3RvY29sYCBpbiBhIGZ1bmN0aW9uIGxpa2UgYGJwZl9zb2NrX2Rlc3Ryb3lgIGNvdWxkIGJlIHByb2JsZW1hdGljLiBFc3NlbnRpYWxseSwgd2Ugd2VyZSBwb3RlbnRpYWxseSByZWFkaW5nIGZyb20gYW4gaW5jb3JyZWN0IG1lbW9yeSBsb2NhdGlvbiBiZWNhdXNlIHRoZSBvZmZzZXQgZm9yIGBza19wcm90b2NvbGAgbWlnaHQgYmUgZGlmZmVyZW50IGluIHRoZSBgaW5ldF90aW1ld2FpdF9zb2NrYCBzdHJ1Y3R1cmUgKG9yIGV2ZW4gb3V0LW9mLWJvdW5kcyBpZiB0aGUgc3RydWN0dXJlIGlzIHNtYWxsZXIpLgoKVGhlIGZpeCBpbnZvbHZlcyBhZGRpbmcgYSBjaGVjazogYGlmIChza19mdWxsc29jayhzaykgJmFtcDsmYW1wOyBzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgJmFtcDsmYW1wOyBzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApYC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBza19mdWxsc29ja2Agd2lsbCByZXR1cm4gYGZhbHNlYCBpZiB0aGUgc29ja2V0IGlzbiYjMzk7dCBhICYjMzQ7ZnVsbHNvY2ssJiMzNDsgd2hpY2ggaW5jbHVkZXMgdGltZXdhaXQgc29ja2V0cywgc28gdGhhdCBpZiBpdCBpcyBhIHRpbWV3YWl0IHNvY2tldCB3ZSBkb24mIzM5O3QgYWNjZXNzIHNrX3Byb3RvY29sIGluIGJwZl9zb2NrX2Rlc3Ryb3kuIEFuZCwgaW4gdGhlIGNhc2Ugb2YgYSBmdWxsIHNvY2tldCwgd2Ugb25seSBwcm9jZWVkIGlmIHRoZSBwcm90b2NvbCBpc24mIzM5O3QgVENQIG9yIFVEUC4gSSB0aGluayB0aGlzIHByZXZlbnRzIHVzIGZyb20gYWNjaWRlbnRhbGx5IHJlYWRpbmcgZnJvbSBhbiBpbmNvcnJlY3QgbWVtb3J5IGxvY2F0aW9uIG9uIHRoZXNlIHNwZWNpYWxpemVkIGB0aW1ld2FpdGAgc29ja2V0cy4KCkkgYW0gYWxzbyBzZWVpbmcgdGhhdCB0aGUgYGluZXRfdHdza19kaWFnX2Rlc3Ryb3lgIGZ1bmN0aW9uIGlzIGxpbmtlZCB0byB2aWEgYHRjcF90d3NrX3Byb3QuZGlhZ19kZXN0cm95YCBvciBgdGNwX3Byb3QuZGlhZ19kZXN0cm95YC4gVGhpcyBtaWdodCBiZSByZWxhdGVkIHRvIHRoZSBvcmlnaW5hbCBpc3N1ZS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYHRjcF90d3NrX3Byb3RgIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTM6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfdHdza19wcm90JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5OTgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYHRjcF9wcm90YCBhbmQgYGRpYWdfZGVzdHJveWAqKgoKT2theSwgdGltZSB0byB0YWtlIGEgbG9vayBhdCBgdGNwX3Byb3RgIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBgZGlhZ19kZXN0cm95YC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gaG93IHdlIGhhbmRsZSB0ZWFyZG93biBhbmQgY2xlYW51cCBvZiBUQ1AgcHJvdG9jb2wtc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGR1cmluZyB0aGUgZGlhZ25vc3RpYyBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGNvbXBvbmVudHMgaW50ZXJhY3QsIHNwZWNpZmljYWxseSB0byBlbnN1cmUgcHJvcGVyIHJlc291cmNlIGRlYWxsb2NhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgY29kZSBwYXRoLCBwcm9iYWJseSBzdGFydGluZyB3aXRoIHdoZXJlIGB0Y3BfcHJvdGAgaXMgaW5pdGlhbGl6ZWQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBkaWFnbm9zdGljIGZyYW1ld29yay4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgbWVtb3J5IGxlYWtzLCBvciBhbnkgb3RoZXIgaXNzdWVzIHRoYXQgY291bGQgYXJpc2Ugd2hlbiBkaWFnbm9zdGljcyBhcmUgZW5hYmxlZCBhbmQgZGlzYWJsZWQsIGFuZCBjb25uZWN0aW9ucyBhcmUgZXN0YWJsaXNoZWQgYW5kIHRvcm4gZG93bi4gRXNzZW50aWFsbHksIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB3ZSYjMzk7cmUgcHJvcGVybHkgY2xlYW5pbmcgdXAgYWZ0ZXIgb3Vyc2VsdmVzIHdoZW4gZGlhZ25vc3RpY3MgYXJlIGludm9sdmVkIHdpdGggdGhlIFRDUCBwcm90b2NvbC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTM6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFwuZGlhZ19kZXN0cm95JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9yYXcuYz05NDg9c3RydWN0IHByb3RvIHJhd19wcm90ID0ge1xuLS1cbm5ldC9pcHY0L3Jhdy5jLTk3Mi0jZW5kaWZcbm5ldC9pcHY0L3Jhdy5jOjk3MzpcdC5kaWFnX2Rlc3Ryb3lcdCAgID0gcmF3X2Fib3J0LFxubmV0L2lwdjQvcmF3LmMtOTc0LX07XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz0zMzQ4PXN0cnVjdCBwcm90byB0Y3BfcHJvdCA9IHtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTMzOTYtXHQubm9fYXV0b2JpbmRcdFx0PSB0cnVlLFxubmV0L2lwdjQvdGNwX2lwdjQuYzozMzk3Olx0LmRpYWdfZGVzdHJveVx0XHQ9IHRjcF9hYm9ydCxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM5OC19O1xuLS1cbm5ldC9pcHY0L3VkcC5jPTMxNDM9c3RydWN0IHByb3RvIHVkcF9wcm90ID0ge1xuLS1cbm5ldC9pcHY0L3VkcC5jLTMxNzMtXHQub2JqX3NpemVcdFx0PSBzaXplb2Yoc3RydWN0IHVkcF9zb2NrKSxcbm5ldC9pcHY0L3VkcC5jOjMxNzQ6XHQuZGlhZ19kZXN0cm95XHRcdD0gdWRwX2Fib3J0LFxubmV0L2lwdjQvdWRwLmMtMzE3NS19O1xuLS1cbm5ldC9pcHY2L3Jhdy5jPTEyMDc9c3RydWN0IHByb3RvIHJhd3Y2X3Byb3QgPSB7XG4tLVxubmV0L2lwdjYvcmF3LmMtMTIzMS0jZW5kaWZcbm5ldC9pcHY2L3Jhdy5jOjEyMzI6XHQuZGlhZ19kZXN0cm95XHQgICA9IHJhd19hYm9ydCxcbm5ldC9pcHY2L3Jhdy5jLTEyMzMtfTtcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jPTIyNzY9c3RydWN0IHByb3RvIHRjcHY2X3Byb3QgPSB7XG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzI1LVx0Lm5vX2F1dG9iaW5kXHRcdD0gdHJ1ZSxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MjMyNjpcdC5kaWFnX2Rlc3Ryb3lcdFx0PSB0Y3BfYWJvcnQsXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIzMjctfTtcbi0tXG5uZXQvaXB2Ni91ZHAuYz0xOTA4PXN0cnVjdCBwcm90byB1ZHB2Nl9wcm90ID0ge1xuLS1cbm5ldC9pcHY2L3VkcC5jLTE5NDAtXHQuaXB2Nl9waW5mb19vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdWRwNl9zb2NrLCBpbmV0NiksXG5uZXQvaXB2Ni91ZHAuYzoxOTQxOlx0LmRpYWdfZGVzdHJveVx0XHQ9IHVkcF9hYm9ydCxcbm5ldC9pcHY2L3VkcC5jLTE5NDItfTtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIxNDY9dm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd19pbml0KHZvaWQpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTY2LVx0dGNwX3Byb3Rfb3ZlcnJpZGUucmVsZWFzZV9jYiA9IHRjcF9yZWxlYXNlX2NiX292ZXJyaWRlO1xubmV0L21wdGNwL3N1YmZsb3cuYzoyMTY3Olx0dGNwX3Byb3Rfb3ZlcnJpZGUuZGlhZ19kZXN0cm95ID0gdGNwX2Fib3J0X292ZXJyaWRlO1xubmV0L21wdGNwL3N1YmZsb3cuYy0yMTY4LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIxODA9dm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd192Nl9pbml0KHZvaWQpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0yMjEzLVx0dGNwdjZfcHJvdF9vdmVycmlkZS5yZWxlYXNlX2NiID0gdGNwX3JlbGVhc2VfY2Jfb3ZlcnJpZGU7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIyMTQ6XHR0Y3B2Nl9wcm90X292ZXJyaWRlLmRpYWdfZGVzdHJveSA9IHRjcF9hYm9ydF9vdmVycmlkZTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjIxNS0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTA1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipBbmFseXppbmcgYHRjcF9hYm9ydGAmIzM5O3MgU2NvcGUqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYHRjcF9hYm9ydGAgaGVyZS4gTGV0JiMzOTtzIHNlZS4uLiBhIHF1aWNrIG1lbnRhbCBzY2FuIHJlbWluZHMgbWUgdGhhdCBpdCYjMzk7cyBub3QgKmp1c3QqIGZvciBhYnJ1cHRseSB0ZWFyaW5nIGRvd24gZXN0YWJsaXNoZWQgVENQIGNvbm5lY3Rpb25zLiBJIHNlZW0gdG8gcmVjYWxsIGl0IGFsc28gaGFzIGEgaGFuZCBpbiBkZWFsaW5nIHdpdGggc29ja2V0cyBpbiB0aGUgYFRJTUVfV0FJVGAgc3RhdGUsIHdoaWNoIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0JiMzOTtzIGEgY3JpdGljYWwgc3RhdGUgdG8gcHJvcGVybHkgaGFuZGxlLiBZZXAsIHRoZSBjb2RlIGNvbmZpcm1zIGl0OiBpdCBleHBsaWNpdGx5IGNoZWNrcyBmb3IgYHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUYCwgYW5kIGlmIHRoYXQmIzM5O3MgdGhlIGNhc2UgaXQgY2FsbHMgcmVsZXZhbnQgZnVuY3Rpb25zIHN1Y2ggYXMgYGluZXRfdHdza19kZXNjaGVkdWxlX3B1dGAuIFRoaXMgaW5kaWNhdGVzIGEgYnJvYWRlciBmdW5jdGlvbmFsaXR5IHRoYW4gdGhlIG5hbWUgbWlnaHQgc3VnZ2VzdC4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIGxpbmdlcmluZyByZXNvdXJjZXMgYW5kIHRoZSBuZWVkIGZvciBjbGVhbnVwLiBUaW1lIHRvIGRpdmUgZGVlcGVyIGFuZCBzZWUgaG93IGl0IGFsbCB3b3Jrcy4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgZm9yIGB0Y3BfYWJvcnRgIGRpcmVjdGx5IG5vdyB0byBiZSBzdXJlIG9mIG15IHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB0Y3BfYWJvcnRcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmM9NTA4OT12b2lkIHRjcF9kb25lKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3AuYy01MTE0LVxubmV0L2lwdjQvdGNwLmM6NTExNTppbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycilcbm5ldC9pcHY0L3RjcC5jLTUxMTYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUwNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHRjcC5jYCoqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbi4gTXkgaW50ZXJuYWwgcmFkYXIganVzdCBwaW5nZWQgb24gYHRjcC5jYC4gU29tZXRoaW5nJiMzOTtzIHByb2JhYmx5IGhhcHBlbmluZyBhcm91bmQgbGluZSA1MTE1IHRoYXQgd2FycmFudHMgYSBjbG9zZXIgbG9vay4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB0aGVyZSBhbmQgc2VlIHdoYXQganVtcHMgb3V0LiBJIGhhdmUgYSBmZWVsaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpcyBnb2luZyBvbiBpbiB0aGUgVENQIGltcGxlbWVudGF0aW9uIGFuZCBsaW5lIDUxMTUgZmVlbHMgbGlrZSBhIGdvb2Qgc3BvdCB0byBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgaGFzIHRvIG9mZmVyLiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSByZWxldmFudCBmdW5jdGlvbiBvciBibG9jayBhbmQgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgVENQIGNvbnRleHQuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUxMTU6XHRpbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycilcbjUxMTY6XHR7XG41MTE3Olx0XHRpbnQgc3RhdGUgPSBpbmV0X3NrX3N0YXRlX2xvYWQoc2spO1xuNTExODpcdFxuNTExOTpcdFx0aWYgKHN0YXRlID09IFRDUF9ORVdfU1lOX1JFQ1YpIHtcbjUxMjA6XHRcdFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxID0gaW5ldF9yZXFzayhzayk7XG41MTIxOlx0XG41MTIyOlx0XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbjUxMjM6XHRcdFx0aW5ldF9jc2tfcmVxc2tfcXVldWVfZHJvcChyZXEtXHUwMDNlcnNrX2xpc3RlbmVyLCByZXEpO1xuNTEyNDpcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbjUxMjU6XHRcdFx0cmV0dXJuIDA7XG41MTI2Olx0XHR9XG41MTI3Olx0XHRpZiAoc3RhdGUgPT0gVENQX1RJTUVfV0FJVCkge1xuNTEyODpcdFx0XHRzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dyA9IGluZXRfdHdzayhzayk7XG41MTI5Olx0XG41MTMwOlx0XHRcdHJlZmNvdW50X2luYyhcdTAwMjZ0dy1cdTAwM2V0d19yZWZjbnQpO1xuNTEzMTpcdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG41MTMyOlx0XHRcdGluZXRfdHdza19kZXNjaGVkdWxlX3B1dCh0dyk7XG41MTMzOlx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuNTEzNDpcdFx0XHRyZXR1cm4gMDtcbjUxMzU6XHRcdH1cbjUxMzY6XHRcbjUxMzc6XHRcdC8qIEJQRiBjb250ZXh0IGVuc3VyZXMgc29jayBsb2NraW5nLiAqL1xuNTEzODpcdFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXG41MTM5Olx0XHRcdC8qIERvbiYjMzk7dCByYWNlIHdpdGggdXNlcnNwYWNlIHNvY2tldCBjbG9zZXMgc3VjaCBhcyB0Y3BfY2xvc2UuICovXG41MTQwOlx0XHRcdGxvY2tfc29jayhzayk7XG41MTQxOlx0XG41MTQyOlx0XHQvKiBBdm9pZCBjbG9zaW5nIHRoZSBzYW1lIHNvY2tldCB0d2ljZS4gKi9cbjUxNDM6XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHtcbjUxNDQ6XHRcdFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXG41MTQ1Olx0XHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbjUxNDY6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG41MTQ3Olx0XHR9XG41MTQ4Olx0XG41MTQ5Olx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTikge1xuNTE1MDpcdFx0XHR0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpO1xuNTE1MTpcdFx0XHRpbmV0X2Nza19saXN0ZW5fc3RvcChzayk7XG41MTUyOlx0XHR9XG41MTUzOlx0XG41MTU0Olx0XHQvKiBEb24mIzM5O3QgcmFjZSB3aXRoIEJIIHNvY2tldCBjbG9zZXMgc3VjaCBhcyBpbmV0X2Nza19saXN0ZW5fc3RvcC4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzMTAKCQkJCQkJCW91dHB1dDogMjA0CgkJCQkJCQl0aG91Z2h0czogODQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzIGFuZCBTYWZldHkgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgZm9jdXNlcyBvbiBtZW1vcnkgc2FmZXR5IGFuZCwgc3BlY2lmaWNhbGx5LCB3aGV0aGVyIGl0IGludHJvZHVjZXMgYW55IG5ldyBLTVNBTiBjb25jZXJucy4gRmlyc3QsIEkmIzM5O20gbm90aW5nIHRoZSBjb3JlIGNoYW5nZXM6IGBicGZfc29ja19kZXN0cm95YCBoYXMgYmVlbiB1cGRhdGVkIHRvIGhhbmRsZSBub24tZnVsbCBzb2NrZXRzIG1vcmUgZ3JhY2VmdWxseS4gSXQgYXZvaWRzIHRoZSBwcm9ibGVtYXRpYyBgc2stJmd0O3NrX3Byb3RvY29sYCBhY2Nlc3Mgb24gc29ja2V0cyBsaWtlIGBpbmV0X3RpbWV3YWl0X3NvY2tgIHdpdGggYSBjaGVjayB1c2luZyBgc2tfZnVsbHNvY2soKWAuIFRoaXMgaXMgZ29vZCwgYXMgaXQgcHJldmVudHMgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLiBJdCBhbHNvIGFsbG93cyB0aGUgZGlyZWN0IGNhbGwgdG8gYHNrLSZndDtza19wcm90LSZndDtkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7YC4gVGhlbiwgYGluZXRfY3NrX2xpc3Rlbl9zdG9wYCBoYXMgYmVlbiBhZGp1c3RlZCB0byBhdm9pZCBgY29uZF9yZXNjaGVkKClgIHdoZW4gcnVubmluZyB3aXRoaW4gYSBCUEYgY29udGV4dCwgd2hpY2ggaXMgYSBzZW5zaWJsZSBwcmVjYXV0aW9uIGZvciBhdG9taWMgb3IgUkNVIGNvbnRleHRzLiBGaW5hbGx5LCB0aGVyZSBhcmUgYWRkZWQgc2VsZnRlc3RzLCB3aGljaCwgb2YgY291cnNlLCBhcmUgYWx3YXlzIHdlbGNvbWUuCgpOb3csIHJlZ2FyZGluZyBtZW1vcnkgc2FmZXR5LCBJJiMzOTttIG5vdCBzZWVpbmcgYW55IHJlZCBmbGFncy4gVGhlcmUgYXJlbiYjMzk7dCBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvbiB0aGUgaGVhcCBvciBzdGFjay4gTm8gb3BlcmF0aW9ucyB3aXRoIHVzZXJzcGFjZSAoY29weWluZywgZXRjKS4gSSYjMzk7bSBub3QgZmluZGluZyBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMsIG9yIGNvZGUgdGhhdCB1c2VzIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbmRpdGlvbmFsIGxvZ2ljLiBJbiBmYWN0LCB0aGlzIHBhdGNoICppbXByb3ZlcyogbWVtb3J5IHNhZmV0eSBieSBndWFyZGluZyBhZ2FpbnN0IHRoZSBwb3RlbnRpYWwgZm9yIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvZiBgc2stJmd0O3NrX3Byb3RvY29sYCBpbiB0aGUgY2FzZSBvZiBub24tZnVsbCBzb2NrZXRzLCB3aGljaCBpcyBncmVhdC4gVGhlIGZpeCBmb3IgYGNvbmRfcmVzY2hlZCgpYCBhdm9pZHMgYXRvbWljIGNvbnRleHQgaXNzdWVzLiBJdCBhcHBlYXJzIHNvdW5kLgoKSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoZSBmb3VyIEtNU0FOIGNyaXRlcmlhOgoxLiBObyBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLgoyLiBObyBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4KMy4gTm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSB1c2VkLgo0LiBObyBib3VuZHMgY2hlY2tzIHRoYXQgbWlnaHQgYWxsb3cgcmVhZGluZyBiZXlvbmQgYnVmZmVyIGJvdW5kYXJpZXMuClRoZXJlZm9yZSwgS01TQU4gaXNuJiMzOTt0IGEgY29uY2VybiBoZXJlLgoKVG8gc3VtbWFyaXplLCB0aGlzIHBhdGNoIGltcHJvdmVzIHNhZmV0eSBieSBjb3JyZWN0bHkgbWFuYWdpbmcgc29ja2V0IGRlc3RydWN0aW9uIGFuZCBzY2hlZHVsaW5nIHdpdGhpbiBCUEYgY29udGV4dHMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IEtNU0FOLXJlbGF0ZWQgaXNzdWVzLiBUaGUgZXhpc3RpbmcgS0FTQU4sIExPQ0tERVAsIGFuZCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyB3aWxsIGNhdGNoIG90aGVyIHBvdGVudGlhbCBpc3N1ZXMgKGUuZy4sIFVBRiwgcmVmZXJlbmNlIGNvdW50aW5nLCBsb2NraW5nKS4KClRoaXMgc2hvdWxkIGluZm9ybSBhIGBzZXQtcmVzdWx0c2AgdG9vbCBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYnBmX3NvY2tfZGVzdHJveSgpYCB0byBzdXBwb3J0IG5vbi1mdWxsIHNvY2tldHMgKGUuZy4sIFRDUCBUSU1FX1dBSVQgc29ja2V0cykgYnkgZ3VhcmRpbmcgdGhlIGBzay1cdTAwM2Vza19wcm90b2NvbGAgY2hlY2sgd2l0aCBgc2tfZnVsbHNvY2soKWAsIGFuZCB1cGRhdGVzIGBpbmV0X2Nza19saXN0ZW5fc3RvcCgpYCB0byBieXBhc3MgYGNvbmRfcmVzY2hlZCgpYCB3aGVuIHJ1bm5pbmcgd2l0aGluIGEgQlBGIGV4ZWN1dGlvbiBjb250ZXh0IHRvIHByZXZlbnQgc2xlZXBpbmcgaW4gYXRvbWljL1JDVSBjb250ZXh0cy5cblxuVGhlc2UgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBjb3B5LXRvLXVzZXIgb3BlcmF0aW9ucywgb3IgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBwb3RlbnRpYWwgcmlza3MgcmVsYXRlZCB0byBzb2NrZXQgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgZXhlY3V0aW9uIGNvbnRleHQgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyBhbmQgZGVidWdnZXJzIChLQVNBTiBmb3IgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcywgTE9DS0RFUCAvIERFQlVHX0FUT01JQ19TTEVFUCBmb3Igc2xlZXBpbmcgaW4gYXRvbWljIGNvbnRleHQpLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfc29ja19kZXN0cm95KClgIHRvIHN1cHBvcnQgbm9uLWZ1bGwgc29ja2V0cyAoZS5nLiwgVENQIFRJTUVfV0FJVCBzb2NrZXRzKSBieSBndWFyZGluZyB0aGUgYHNrLVx1MDAzZXNrX3Byb3RvY29sYCBjaGVjayB3aXRoIGBza19mdWxsc29jaygpYCwgYW5kIHVwZGF0ZXMgYGluZXRfY3NrX2xpc3Rlbl9zdG9wKClgIHRvIGJ5cGFzcyBgY29uZF9yZXNjaGVkKClgIHdoZW4gcnVubmluZyB3aXRoaW4gYSBCUEYgZXhlY3V0aW9uIGNvbnRleHQgdG8gcHJldmVudCBzbGVlcGluZyBpbiBhdG9taWMvUkNVIGNvbnRleHRzLlxuXG5UaGVzZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IGNvcHktdG8tdXNlciBvcGVyYXRpb25zLCBvciBpbnRyb2R1Y2UgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQW55IHBvdGVudGlhbCByaXNrcyByZWxhdGVkIHRvIHNvY2tldCBsaWZldGltZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBleGVjdXRpb24gY29udGV4dCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCBkZWJ1Z2dlcnMgKEtBU0FOIGZvciB1c2UtYWZ0ZXItZnJlZS9vdXQtb2YtYm91bmRzLCBMT0NLREVQIC8gREVCVUdfQVRPTUlDX1NMRUVQIGZvciBzbGVlcGluZyBpbiBhdG9taWMgY29udGV4dCkuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMzoyMDo1MS4zOTQzNzkzNzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDQyMjMxMjAwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc29ja19kZXN0cm95XCIsXG4gICAgXCJpbmV0X2Nza19saXN0ZW5fc3RvcFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9zb2NrX2Rlc3Ryb3koKWAgdG8gc3VwcG9ydCBub24tZnVsbCBzb2NrZXRzIChlLmcuLCBUQ1AgVElNRV9XQUlUIHNvY2tldHMpIGJ5IGd1YXJkaW5nIHRoZSBgc2stXFx1MDAzZXNrX3Byb3RvY29sYCBjaGVjayB3aXRoIGBza19mdWxsc29jaygpYCwgYW5kIHVwZGF0ZXMgYGluZXRfY3NrX2xpc3Rlbl9zdG9wKClgIHRvIGJ5cGFzcyBgY29uZF9yZXNjaGVkKClgIHdoZW4gcnVubmluZyB3aXRoaW4gYSBCUEYgZXhlY3V0aW9uIGNvbnRleHQgdG8gcHJldmVudCBzbGVlcGluZyBpbiBhdG9taWMvUkNVIGNvbnRleHRzLlxcblxcblRoZXNlIGNoYW5nZXMgZG8gbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgY29weS10by11c2VyIG9wZXJhdGlvbnMsIG9yIGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBBbnkgcG90ZW50aWFsIHJpc2tzIHJlbGF0ZWQgdG8gc29ja2V0IGxpZmV0aW1lLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIGV4ZWN1dGlvbiBjb250ZXh0IGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgYW5kIGRlYnVnZ2VycyAoS0FTQU4gZm9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMsIExPQ0tERVAgLyBERUJVR19BVE9NSUNfU0xFRVAgZm9yIHNsZWVwaW5nIGluIGF0b21pYyBjb250ZXh0KS4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJwZl9zb2NrX2Rlc3Ryb3koKSBCUEYga2Z1bmMgdG8gcGVybWl0IGRlc3Ryb3lpbmcgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIHNvY2tldHMpIHRoYXQgaW1wbGVtZW50IGRpYWdfZGVzdHJveSwgYW5kIGFkanVzdHMgaW5ldF9jc2tfbGlzdGVuX3N0b3AoKSB0byBhdm9pZCBjYWxsaW5nIGNvbmRfcmVzY2hlZCgpIHdoaWxlIGV4ZWN1dGluZyBpbiBhIEJQRiBjb250ZXh0LiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIEJQRiBzb2NrZXQgaXRlcmF0aW9uL2Rlc3RydWN0aW9uIHBhdGhzIHRoYXQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMzoyMDo1MS4zOTQzODQwMjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1ODE2NDkzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM4OGQ5NTU4ODEzYWY2NDhmZjk0MmM2N2FmZTFiNjVkZDFjYmNkNTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMTAgMTM6MjA6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IDg1MTMxNjdhODU4YTguLmQ5YzRhMTA4ZGRiNWUgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xcbkBAIC0xMjkxMSw4ICsxMjkxMSw5IEBAIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG4gICogQHNvY2s6IFBvaW50ZXIgdG8gc29ja2V0IHRvIGJlIGRlc3Ryb3llZFxcbiAgKlxcbiAgKiBSZXR1cm46XFxuLSAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVQUk9UT05PU1VQUE9SVCwgRUlOVkFMLlxcbi0gKiBFUFJPVE9OT1NVUFBPUlQgaWYgcHJvdG9jb2wgc3BlY2lmaWMgZGVzdHJveSBoYW5kbGVyIGlzIG5vdCBzdXBwb3J0ZWQuXFxuKyAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIG9yIHdoYXRldmVyIHRoZSBwcm90b2NvbCBzcGVjaWZpY1xcbisgKiBkZXN0cm95IGhhbmRsZXIgcmV0dXJucy5cXG4rICogRU9QTk9UU1VQUCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC5cXG4gICogMCBvdGhlcndpc2VcXG4gICovXFxuIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaylcXG5AQCAtMTI5MjQsOCArMTI5MjUsMTIgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxcbiBcXHQgKiBTdXBwb3J0aW5nIHByb3RvY29scyB3aWxsIG5lZWQgdG8gYWNxdWlyZSBzb2NrIGxvY2sgaW4gdGhlIEJQRiBjb250ZXh0XFxuIFxcdCAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuXFxuIFxcdCAqL1xcbi1cXHRpZiAoIXNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VkaWFnX2Rlc3Ryb3kgfHwgKHNrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHRcXHRcXHQgICBzay1cXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApKVxcbitcXHRpZiAoIXNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VkaWFnX2Rlc3Ryb3kpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGlmIChza19mdWxsc29jayhzaykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHNrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2stXFx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbiBcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcXG5pbmRleCA2MjU3NDU5YmNlZTI0Li42YTMwZjExMzg0NTQ3IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcXG4rKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXFxuQEAgLTE1MjAsNyArMTUyMCw4IEBAIHZvaWQgaW5ldF9jc2tfbGlzdGVuX3N0b3Aoc3RydWN0IHNvY2sgKnNrKVxcbiBcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gXFx0XFx0c29ja19wdXQoY2hpbGQpO1xcbiBcXG4tXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuK1xcdFxcdGlmICghaGFzX2N1cnJlbnRfYnBmX2N0eCgpKVxcbitcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gXFx0fVxcbiBcXHRpZiAocXVldWUtXFx1MDAzZWZhc3RvcGVucS5yc2txX3JzdF9oZWFkKSB7XFxuIFxcdFxcdC8qIEZyZWUgYWxsIHRoZSByZXFzIHF1ZXVlZCBpbiByc2txX3JzdF9oZWFkLiAqL1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXFxuaW5kZXggOWMxMTkzOGZlNTk3ZC4uNzhkNjQyYTAyYmRiNiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXFxuQEAgLTEsNCArMSw1IEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2Nwb2xsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2VuZGlhbi5oXFx1MDAzZVxcbiBcXG5AQCAtMTEwLDYgKzExMSwxMjIgQEAgc3RhdGljIHZvaWQgdGVzdF90Y3Bfc2VydmVyKHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcXG4gXFx0XFx0Y2xvc2Uoc2Vydik7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHRlc3RfdGNwX2xpc3Rlbl9wZW5kaW5nKHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcXG4re1xcbitcXHRpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBhY2NlcHRfc2VydiA9IC0xLCBuLCBzZXJ2X3BvcnQ7XFxuK1xcdHN0cnVjdCBwb2xsZmQgcGZkID0geyAuZXZlbnRzID0gUE9MTElOIH07XFxuK1xcdGNoYXIgYnVmWzFdO1xcbitcXG4rXFx0c2VydiA9IHN0YXJ0X3NlcnZlcihBRl9JTkVUNiwgU09DS19TVFJFQU0sIE5VTEwsIDAsIDApO1xcbitcXHRpZiAoIUFTU0VSVF9HRShzZXJ2LCAwLCBcXFwic3RhcnRfc2VydmVyXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0c2Vydl9wb3J0ID0gZ2V0X3NvY2tldF9sb2NhbF9wb3J0KHNlcnYpO1xcbitcXHRpZiAoIUFTU0VSVF9HRShzZXJ2X3BvcnQsIDAsIFxcXCJnZXRfc29ja19sb2NhbF9wb3J0XFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VzZXJ2X3BvcnQgPSAoX19iZTE2KXNlcnZfcG9ydDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIENvbm5lY3QgYnV0IG5ldmVyIGFjY2VwdCwgc28gdGhlIGNoaWxkIHNpdHMgaW4gdGhlIGFjY2VwdCBxdWV1ZVxcbitcXHQgKiBvZiB0aGUgbGlzdGVuZXIuIFdhaXQgdW50aWwgaXQncyBhY3R1YWxseSB0aGVyZS5cXG4rXFx0ICovXFxuK1xcdGNsaWVuID0gY29ubmVjdF90b19mZChzZXJ2LCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UoY2xpZW4sIDAsIFxcXCJjb25uZWN0X3RvX2ZkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0cGZkLmZkID0gc2VydjtcXG4rXFx0aWYgKCFBU1NFUlRfRVEocG9sbChcXHUwMDI2cGZkLCAxLCAtMSksIDEsIFxcXCJwb2xsIGxpc3RlbmVyXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIFJ1biBpdGVyYXRvciBwcm9ncmFtIHRoYXQgZGVzdHJveXMgc2VydmVyIHNvY2tldHMuICovXFxuK1xcdHN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLVxcdTAwM2Vwcm9ncy5pdGVyX3RjcDZfc2VydmVyKTtcXG4rXFxuK1xcdGFjY2VwdF9zZXJ2ID0gYWNjZXB0KHNlcnYsIE5VTEwsIE5VTEwpO1xcbitcXHRpZiAoIUFTU0VSVF9MVChhY2NlcHRfc2VydiwgMCwgXFxcImFjY2VwdCBvbiBkZXN0cm95ZWQgbGlzdGVuZXJcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRBU1NFUlRfRVEoZXJybm8sIEVJTlZBTCwgXFxcImVycm9yIGNvZGUgb24gZGVzdHJveWVkIGxpc3RlbmVyXFxcIik7XFxuK1xcbitcXHQvKiBUaGUgdW5hY2NlcHRlZCBjaGlsZCB3YXMgcmVzZXQgYWxvbmcgd2l0aCB0aGUgbGlzdGVuZXIuICovXFxuK1xcdG4gPSByZWN2KGNsaWVuLCBidWYsIHNpemVvZihidWYpLCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfTFQobiwgMCwgXFxcImNsaWVudCByZWN2IG9uIHJlc2V0IGNoaWxkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0QVNTRVJUX0VRKGVycm5vLCBFQ09OTlJFU0VULCBcXFwiZXJyb3IgY29kZSBvbiByZXNldCBjaGlsZFxcXCIpO1xcbitcXG4rY2xlYW51cDpcXG4rXFx0aWYgKGNsaWVuICE9IC0xKVxcbitcXHRcXHRjbG9zZShjbGllbik7XFxuK1xcdGlmIChhY2NlcHRfc2VydiAhPSAtMSlcXG4rXFx0XFx0Y2xvc2UoYWNjZXB0X3NlcnYpO1xcbitcXHRpZiAoc2VydiAhPSAtMSlcXG4rXFx0XFx0Y2xvc2Uoc2Vydik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3RfdGNwX3RpbWV3YWl0KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcXG4re1xcbitcXHRpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBhY2NlcHRfc2VydiA9IC0xLCBuO1xcbitcXHRzdHJ1Y3QgdGltZXZhbCB0diA9IHt9O1xcbitcXHRjaGFyIGJ1ZlsxXTtcXG4rXFxuK1xcdHNlcnYgPSBzdGFydF9zZXJ2ZXIoQUZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBOVUxMLCAwLCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0Uoc2VydiwgMCwgXFxcInN0YXJ0X3NlcnZlclxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRjbGllbiA9IGNvbm5lY3RfdG9fZmQoc2VydiwgMCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKGNsaWVuLCAwLCBcXFwiY29ubmVjdF90b19mZFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRhY2NlcHRfc2VydiA9IGFjY2VwdChzZXJ2LCBOVUxMLCBOVUxMKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UoYWNjZXB0X3NlcnYsIDAsIFxcXCJzZXJ2IGFjY2VwdFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBY3RpdmUgY2xvc2UgZnJvbSB0aGUgY2xpZW50LCB0aGVuIGNsb3NlIHRoZSBzZXJ2ZXIgc2lkZS4gT25jZVxcbitcXHQgKiByZWN2KCkgc2VlcyBFT0YgdGhlIHNlcnZlciBGSU4gaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCB0aGUgY2xpZW50XFxuK1xcdCAqIHNvY2sgaXMgaW4gVElNRV9XQUlULiBCbG9jayB3aXRob3V0IHRpbWVvdXQgc28gYSBsb2FkZWQgQ0kgYm94XFxuK1xcdCAqIGNhbid0IHJhY2UgdXMuXFxuK1xcdCAqL1xcbitcXHRpZiAoIUFTU0VSVF9PSyhzZXRzb2Nrb3B0KGNsaWVuLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgXFx1MDAyNnR2LFxcbitcXHRcXHRcXHRcXHQgIHNpemVvZih0dikpLCBcXFwiY2xlYXIgcmN2dGltZW9cXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhzaHV0ZG93bihjbGllbiwgU0hVVF9XUiksIFxcXCJjbGllbnQgc2h1dGRvd25cXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTWFrZSBzdXJlIHRoZSBzZXJ2ZXIgaGFzIHNlZW4gdGhlIGNsaWVudCBGSU4gYmVmb3JlIGl0IGNsb3NlcyxcXG4rXFx0ICogc28gdGhlIHR3byBGSU5zIG5ldmVyIGNyb3NzLlxcbitcXHQgKi9cXG4rXFx0biA9IHJlY3YoYWNjZXB0X3NlcnYsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xcbitcXHRpZiAoIUFTU0VSVF9FUShuLCAwLCBcXFwic2VydmVyIHJlY3YgRU9GXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGNsb3NlKGFjY2VwdF9zZXJ2KTtcXG4rXFx0YWNjZXB0X3NlcnYgPSAtMTtcXG4rXFxuK1xcdC8qIGJsb2NrIHVudGlsIHJldHVybiBFT0YgKi9cXG4rXFx0biA9IHJlY3YoY2xpZW4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xcbitcXHRpZiAoIUFTU0VSVF9FUShuLCAwLCBcXFwiY2xpZW50IHJlY3YgRU9GXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIFJ1biBpdGVyYXRvciBwcm9ncmFtIHRoYXQgZGVzdHJveXMgdGhlIHRpbWV3YWl0IGNsaWVudCBzb2NrLiAqL1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXR3X2ZvdW5kID0gMDtcXG4rXFx0c3RhcnRfaXRlcl9zb2NrZXRzKHNrZWwtXFx1MDAzZXByb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7XFxuK1xcdGlmICghQVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldHdfZm91bmQsIDEsIFxcXCJ0aW1ld2FpdCBzb2NrIGZvdW5kXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdEFTU0VSVF9PSyhza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXR3X2Rlc3Ryb3lfZXJyLCBcXFwiZGVzdHJveSB0aW1ld2FpdCBzb2NrXFxcIik7XFxuK1xcbitcXHQvKiBUaGUgZGVzdHJveWVkIHRpbWV3YWl0IHNvY2sgbXVzdCBiZSBnb25lLiAqL1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXR3X2ZvdW5kID0gMDtcXG4rXFx0c3RhcnRfaXRlcl9zb2NrZXRzKHNrZWwtXFx1MDAzZXByb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXR3X2ZvdW5kLCAwLCBcXFwidGltZXdhaXQgc29jayBkZXN0cm95ZWRcXFwiKTtcXG4rXFxuK2NsZWFudXA6XFxuK1xcdGlmIChjbGllbiAhPSAtMSlcXG4rXFx0XFx0Y2xvc2UoY2xpZW4pO1xcbitcXHRpZiAoYWNjZXB0X3NlcnYgIT0gLTEpXFxuK1xcdFxcdGNsb3NlKGFjY2VwdF9zZXJ2KTtcXG4rXFx0aWYgKHNlcnYgIT0gLTEpXFxuK1xcdFxcdGNsb3NlKHNlcnYpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCB0ZXN0X3VkcF9jbGllbnQoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxcbiB7XFxuIFxcdGludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIG4gPSAwO1xcbkBAIC0yMDQsNiArMzIxLDEwIEBAIHZvaWQgdGVzdF9zb2NrX2Rlc3Ryb3kodm9pZClcXG4gXFx0XFx0dGVzdF90Y3BfY2xpZW50KHNrZWwpO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwidGNwX3NlcnZlclxcXCIpKVxcbiBcXHRcXHR0ZXN0X3RjcF9zZXJ2ZXIoc2tlbCk7XFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJ0Y3BfbGlzdGVuX3BlbmRpbmdcXFwiKSlcXG4rXFx0XFx0dGVzdF90Y3BfbGlzdGVuX3BlbmRpbmcoc2tlbCk7XFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJ0Y3BfdGltZXdhaXRcXFwiKSlcXG4rXFx0XFx0dGVzdF90Y3BfdGltZXdhaXQoc2tlbCk7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJ1ZHBfY2xpZW50XFxcIikpXFxuIFxcdFxcdHRlc3RfdWRwX2NsaWVudChza2VsKTtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInVkcF9zZXJ2ZXJcXFwiKSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuY1xcbmluZGV4IDllMGJmN2E1NGNlYzkuLjBhODg4NzU0MzIxOGEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuY1xcbkBAIC03LDYgKzcsOCBAQFxcbiAjaW5jbHVkZSBcXFwiYnBmX3RyYWNpbmdfbmV0LmhcXFwiXFxuIFxcbiBfX2JlMTYgc2Vydl9wb3J0ID0gMDtcXG4raW50IHR3X2ZvdW5kID0gMDtcXG4raW50IHR3X2Rlc3Ryb3lfZXJyID0gMDtcXG4gXFxuIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc2spIF9fa3N5bTtcXG4gXFxuQEAgLTEwMCw2ICsxMDIsMzQgQEAgaW50IGl0ZXJfdGNwNl9zZXJ2ZXIoc3RydWN0IGJwZl9pdGVyX190Y3AgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwiaXRlci90Y3BcXFwiKVxcbitpbnQgaXRlcl90Y3A2X3RpbWV3YWl0KHN0cnVjdCBicGZfaXRlcl9fdGNwICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IHNvY2tfY29tbW9uICpza19jb21tb24gPSBjdHgtXFx1MDAzZXNrX2NvbW1vbjtcXG4rXFx0X191NjQgKnZhbDtcXG4rXFx0aW50IGtleSA9IDA7XFxuK1xcbitcXHRpZiAoIXNrX2NvbW1vbilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoc2tfY29tbW9uLVxcdTAwM2Vza2NfZmFtaWx5ICE9IEFGX0lORVQ2KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmICghYnBmX3NrY190b190Y3BfdGltZXdhaXRfc29jayhza19jb21tb24pKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNnRjcF9jb25uX3NvY2tldHMsIFxcdTAwMjZrZXkpO1xcbitcXHRpZiAoIXZhbClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdC8qIFRoZSB0aW1ld2FpdCBzb2NrIGluaGVyaXRzIHRoZSBjb29raWUgb2YgdGhlIGNsb3NlZCBjbGllbnQgc29jay4gKi9cXG4rXFx0aWYgKGJwZl9nZXRfc29ja2V0X2Nvb2tpZShza19jb21tb24pICE9ICp2YWwpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0dHdfZm91bmQrKztcXG4rXFx0dHdfZGVzdHJveV9lcnIgPSBicGZfc29ja19kZXN0cm95KHNrX2NvbW1vbik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbiBcXG4gU0VDKFxcXCJpdGVyL3VkcFxcXCIpXFxuIGludCBpdGVyX3VkcDZfY2xpZW50KHN0cnVjdCBicGZfaXRlcl9fdWRwICpjdHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIwOjUxLjk1MzMwNzAxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NDYwNzkzNjQyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc29ja19kZXN0cm95XCIsXG4gICAgXCJpbmV0X2Nza19saXN0ZW5fc3RvcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBicGZfc29ja19kZXN0cm95KCkgQlBGIGtmdW5jIHRvIHBlcm1pdCBkZXN0cm95aW5nIG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBzb2NrZXRzKSB0aGF0IGltcGxlbWVudCBkaWFnX2Rlc3Ryb3ksIGFuZCBhZGp1c3RzIGluZXRfY3NrX2xpc3Rlbl9zdG9wKCkgdG8gYXZvaWQgY2FsbGluZyBjb25kX3Jlc2NoZWQoKSB3aGlsZSBleGVjdXRpbmcgaW4gYSBCUEYgY29udGV4dC4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBCUEYgc29ja2V0IGl0ZXJhdGlvbi9kZXN0cnVjdGlvbiBwYXRocyB0aGF0IHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzODhkOTU1ODgxM2FmNjQ4ZmY5NDJjNjdhZmUxYjY1ZGQxY2JjZDU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTM6MjA6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCA4NTEzMTY3YTg1OGE4Li5kOWM0YTEwOGRkYjVlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtMTI5MTEsOCArMTI5MTEsOSBAQCBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4gICogQHNvY2s6IFBvaW50ZXIgdG8gc29ja2V0IHRvIGJlIGRlc3Ryb3llZFxuICAqXG4gICogUmV0dXJuOlxuLSAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVQUk9UT05PU1VQUE9SVCwgRUlOVkFMLlxuLSAqIEVQUk9UT05PU1VQUE9SVCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC5cbisgKiBPbiBlcnJvciwgbWF5IHJldHVybiBFT1BOT1RTVVBQLCBvciB3aGF0ZXZlciB0aGUgcHJvdG9jb2wgc3BlY2lmaWNcbisgKiBkZXN0cm95IGhhbmRsZXIgcmV0dXJucy5cbisgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxuICAqIDAgb3RoZXJ3aXNlXG4gICovXG4gX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxuQEAgLTEyOTI0LDggKzEyOTI1LDEyIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaylcbiBcdCAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHRcbiBcdCAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuXG4gXHQgKi9cbi1cdGlmICghc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3kgfHwgKHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0XHQgICBzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUCkpXG4rXHRpZiAoIXNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95KVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRpZiAoc2tfZnVsbHNvY2soc2spIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4gXHRyZXR1cm4gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbmluZGV4IDYyNTc0NTliY2VlMjQuLjZhMzBmMTEzODQ1NDcgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG4rKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG5AQCAtMTUyMCw3ICsxNTIwLDggQEAgdm9pZCBpbmV0X2Nza19saXN0ZW5fc3RvcChzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFx0XHRzb2NrX3B1dChjaGlsZCk7XG4gXG4tXHRcdGNvbmRfcmVzY2hlZCgpO1xuK1x0XHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcbitcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdH1cbiBcdGlmIChxdWV1ZS1cdTAwM2VmYXN0b3BlbnEucnNrcV9yc3RfaGVhZCkge1xuIFx0XHQvKiBGcmVlIGFsbCB0aGUgcmVxcyBxdWV1ZWQgaW4gcnNrcV9yc3RfaGVhZC4gKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXG5pbmRleCA5YzExOTM4ZmU1OTdkLi43OGQ2NDJhMDJiZGI2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXG5AQCAtMSw0ICsxLDUgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2JwZi9icGZfZW5kaWFuLmhcdTAwM2VcbiBcbkBAIC0xMTAsNiArMTExLDEyMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3RjcF9zZXJ2ZXIoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxuIFx0XHRjbG9zZShzZXJ2KTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdGVzdF90Y3BfbGlzdGVuX3BlbmRpbmcoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxuK3tcbitcdGludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIGFjY2VwdF9zZXJ2ID0gLTEsIG4sIHNlcnZfcG9ydDtcbitcdHN0cnVjdCBwb2xsZmQgcGZkID0geyAuZXZlbnRzID0gUE9MTElOIH07XG4rXHRjaGFyIGJ1ZlsxXTtcbitcbitcdHNlcnYgPSBzdGFydF9zZXJ2ZXIoQUZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBOVUxMLCAwLCAwKTtcbitcdGlmICghQVNTRVJUX0dFKHNlcnYsIDAsIFwic3RhcnRfc2VydmVyXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRzZXJ2X3BvcnQgPSBnZXRfc29ja2V0X2xvY2FsX3BvcnQoc2Vydik7XG4rXHRpZiAoIUFTU0VSVF9HRShzZXJ2X3BvcnQsIDAsIFwiZ2V0X3NvY2tfbG9jYWxfcG9ydFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlc2Vydl9wb3J0ID0gKF9fYmUxNilzZXJ2X3BvcnQ7XG4rXG4rXHQvKlxuK1x0ICogQ29ubmVjdCBidXQgbmV2ZXIgYWNjZXB0LCBzbyB0aGUgY2hpbGQgc2l0cyBpbiB0aGUgYWNjZXB0IHF1ZXVlXG4rXHQgKiBvZiB0aGUgbGlzdGVuZXIuIFdhaXQgdW50aWwgaXQncyBhY3R1YWxseSB0aGVyZS5cbitcdCAqL1xuK1x0Y2xpZW4gPSBjb25uZWN0X3RvX2ZkKHNlcnYsIDApO1xuK1x0aWYgKCFBU1NFUlRfR0UoY2xpZW4sIDAsIFwiY29ubmVjdF90b19mZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0cGZkLmZkID0gc2VydjtcbitcdGlmICghQVNTRVJUX0VRKHBvbGwoXHUwMDI2cGZkLCAxLCAtMSksIDEsIFwicG9sbCBsaXN0ZW5lclwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LyogUnVuIGl0ZXJhdG9yIHByb2dyYW0gdGhhdCBkZXN0cm95cyBzZXJ2ZXIgc29ja2V0cy4gKi9cbitcdHN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLVx1MDAzZXByb2dzLml0ZXJfdGNwNl9zZXJ2ZXIpO1xuK1xuK1x0YWNjZXB0X3NlcnYgPSBhY2NlcHQoc2VydiwgTlVMTCwgTlVMTCk7XG4rXHRpZiAoIUFTU0VSVF9MVChhY2NlcHRfc2VydiwgMCwgXCJhY2NlcHQgb24gZGVzdHJveWVkIGxpc3RlbmVyXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVJTlZBTCwgXCJlcnJvciBjb2RlIG9uIGRlc3Ryb3llZCBsaXN0ZW5lclwiKTtcbitcbitcdC8qIFRoZSB1bmFjY2VwdGVkIGNoaWxkIHdhcyByZXNldCBhbG9uZyB3aXRoIHRoZSBsaXN0ZW5lci4gKi9cbitcdG4gPSByZWN2KGNsaWVuLCBidWYsIHNpemVvZihidWYpLCAwKTtcbitcdGlmICghQVNTRVJUX0xUKG4sIDAsIFwiY2xpZW50IHJlY3Ygb24gcmVzZXQgY2hpbGRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdEFTU0VSVF9FUShlcnJubywgRUNPTk5SRVNFVCwgXCJlcnJvciBjb2RlIG9uIHJlc2V0IGNoaWxkXCIpO1xuK1xuK2NsZWFudXA6XG4rXHRpZiAoY2xpZW4gIT0gLTEpXG4rXHRcdGNsb3NlKGNsaWVuKTtcbitcdGlmIChhY2NlcHRfc2VydiAhPSAtMSlcbitcdFx0Y2xvc2UoYWNjZXB0X3NlcnYpO1xuK1x0aWYgKHNlcnYgIT0gLTEpXG4rXHRcdGNsb3NlKHNlcnYpO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X3RjcF90aW1ld2FpdChzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpXG4re1xuK1x0aW50IHNlcnYgPSAtMSwgY2xpZW4gPSAtMSwgYWNjZXB0X3NlcnYgPSAtMSwgbjtcbitcdHN0cnVjdCB0aW1ldmFsIHR2ID0ge307XG4rXHRjaGFyIGJ1ZlsxXTtcbitcbitcdHNlcnYgPSBzdGFydF9zZXJ2ZXIoQUZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBOVUxMLCAwLCAwKTtcbitcdGlmICghQVNTRVJUX0dFKHNlcnYsIDAsIFwic3RhcnRfc2VydmVyXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRjbGllbiA9IGNvbm5lY3RfdG9fZmQoc2VydiwgMCk7XG4rXHRpZiAoIUFTU0VSVF9HRShjbGllbiwgMCwgXCJjb25uZWN0X3RvX2ZkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRhY2NlcHRfc2VydiA9IGFjY2VwdChzZXJ2LCBOVUxMLCBOVUxMKTtcbitcdGlmICghQVNTRVJUX0dFKGFjY2VwdF9zZXJ2LCAwLCBcInNlcnYgYWNjZXB0XCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKlxuK1x0ICogQWN0aXZlIGNsb3NlIGZyb20gdGhlIGNsaWVudCwgdGhlbiBjbG9zZSB0aGUgc2VydmVyIHNpZGUuIE9uY2VcbitcdCAqIHJlY3YoKSBzZWVzIEVPRiB0aGUgc2VydmVyIEZJTiBoYXMgYmVlbiBwcm9jZXNzZWQgYW5kIHRoZSBjbGllbnRcbitcdCAqIHNvY2sgaXMgaW4gVElNRV9XQUlULiBCbG9jayB3aXRob3V0IHRpbWVvdXQgc28gYSBsb2FkZWQgQ0kgYm94XG4rXHQgKiBjYW4ndCByYWNlIHVzLlxuK1x0ICovXG4rXHRpZiAoIUFTU0VSVF9PSyhzZXRzb2Nrb3B0KGNsaWVuLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgXHUwMDI2dHYsXG4rXHRcdFx0XHQgIHNpemVvZih0dikpLCBcImNsZWFyIHJjdnRpbWVvXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRpZiAoIUFTU0VSVF9PSyhzaHV0ZG93bihjbGllbiwgU0hVVF9XUiksIFwiY2xpZW50IHNodXRkb3duXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKlxuK1x0ICogTWFrZSBzdXJlIHRoZSBzZXJ2ZXIgaGFzIHNlZW4gdGhlIGNsaWVudCBGSU4gYmVmb3JlIGl0IGNsb3NlcyxcbitcdCAqIHNvIHRoZSB0d28gRklOcyBuZXZlciBjcm9zcy5cbitcdCAqL1xuK1x0biA9IHJlY3YoYWNjZXB0X3NlcnYsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xuK1x0aWYgKCFBU1NFUlRfRVEobiwgMCwgXCJzZXJ2ZXIgcmVjdiBFT0ZcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGNsb3NlKGFjY2VwdF9zZXJ2KTtcbitcdGFjY2VwdF9zZXJ2ID0gLTE7XG4rXG4rXHQvKiBibG9jayB1bnRpbCByZXR1cm4gRU9GICovXG4rXHRuID0gcmVjdihjbGllbiwgYnVmLCBzaXplb2YoYnVmKSwgMCk7XG4rXHRpZiAoIUFTU0VSVF9FUShuLCAwLCBcImNsaWVudCByZWN2IEVPRlwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LyogUnVuIGl0ZXJhdG9yIHByb2dyYW0gdGhhdCBkZXN0cm95cyB0aGUgdGltZXdhaXQgY2xpZW50IHNvY2suICovXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0d19mb3VuZCA9IDA7XG4rXHRzdGFydF9pdGVyX3NvY2tldHMoc2tlbC1cdTAwM2Vwcm9ncy5pdGVyX3RjcDZfdGltZXdhaXQpO1xuK1x0aWYgKCFBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZm91bmQsIDEsIFwidGltZXdhaXQgc29jayBmb3VuZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0QVNTRVJUX09LKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2Rlc3Ryb3lfZXJyLCBcImRlc3Ryb3kgdGltZXdhaXQgc29ja1wiKTtcbitcbitcdC8qIFRoZSBkZXN0cm95ZWQgdGltZXdhaXQgc29jayBtdXN0IGJlIGdvbmUuICovXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0d19mb3VuZCA9IDA7XG4rXHRzdGFydF9pdGVyX3NvY2tldHMoc2tlbC1cdTAwM2Vwcm9ncy5pdGVyX3RjcDZfdGltZXdhaXQpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kLCAwLCBcInRpbWV3YWl0IHNvY2sgZGVzdHJveWVkXCIpO1xuK1xuK2NsZWFudXA6XG4rXHRpZiAoY2xpZW4gIT0gLTEpXG4rXHRcdGNsb3NlKGNsaWVuKTtcbitcdGlmIChhY2NlcHRfc2VydiAhPSAtMSlcbitcdFx0Y2xvc2UoYWNjZXB0X3NlcnYpO1xuK1x0aWYgKHNlcnYgIT0gLTEpXG4rXHRcdGNsb3NlKHNlcnYpO1xuK31cbitcbiBzdGF0aWMgdm9pZCB0ZXN0X3VkcF9jbGllbnQoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxuIHtcbiBcdGludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIG4gPSAwO1xuQEAgLTIwNCw2ICszMjEsMTAgQEAgdm9pZCB0ZXN0X3NvY2tfZGVzdHJveSh2b2lkKVxuIFx0XHR0ZXN0X3RjcF9jbGllbnQoc2tlbCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInRjcF9zZXJ2ZXJcIikpXG4gXHRcdHRlc3RfdGNwX3NlcnZlcihza2VsKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidGNwX2xpc3Rlbl9wZW5kaW5nXCIpKVxuK1x0XHR0ZXN0X3RjcF9saXN0ZW5fcGVuZGluZyhza2VsKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidGNwX3RpbWV3YWl0XCIpKVxuK1x0XHR0ZXN0X3RjcF90aW1ld2FpdChza2VsKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidWRwX2NsaWVudFwiKSlcbiBcdFx0dGVzdF91ZHBfY2xpZW50KHNrZWwpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ1ZHBfc2VydmVyXCIpKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcbmluZGV4IDllMGJmN2E1NGNlYzkuLjBhODg4NzU0MzIxOGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcbkBAIC03LDYgKzcsOCBAQFxuICNpbmNsdWRlIFwiYnBmX3RyYWNpbmdfbmV0LmhcIlxuIFxuIF9fYmUxNiBzZXJ2X3BvcnQgPSAwO1xuK2ludCB0d19mb3VuZCA9IDA7XG4raW50IHR3X2Rlc3Ryb3lfZXJyID0gMDtcbiBcbiBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNrKSBfX2tzeW07XG4gXG5AQCAtMTAwLDYgKzEwMiwzNCBAQCBpbnQgaXRlcl90Y3A2X3NlcnZlcihzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcIml0ZXIvdGNwXCIpXG4raW50IGl0ZXJfdGNwNl90aW1ld2FpdChzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxuK3tcbitcdHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tfY29tbW9uID0gY3R4LVx1MDAzZXNrX2NvbW1vbjtcbitcdF9fdTY0ICp2YWw7XG4rXHRpbnQga2V5ID0gMDtcbitcbitcdGlmICghc2tfY29tbW9uKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChza19jb21tb24tXHUwMDNlc2tjX2ZhbWlseSAhPSBBRl9JTkVUNilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoIWJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2soc2tfY29tbW9uKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRjcF9jb25uX3NvY2tldHMsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXHQvKiBUaGUgdGltZXdhaXQgc29jayBpbmhlcml0cyB0aGUgY29va2llIG9mIHRoZSBjbG9zZWQgY2xpZW50IHNvY2suICovXG4rXHRpZiAoYnBmX2dldF9zb2NrZXRfY29va2llKHNrX2NvbW1vbikgIT0gKnZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHR0d19mb3VuZCsrO1xuK1x0dHdfZGVzdHJveV9lcnIgPSBicGZfc29ja19kZXN0cm95KHNrX2NvbW1vbik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4gXG4gU0VDKFwiaXRlci91ZHBcIilcbiBpbnQgaXRlcl91ZHA2X2NsaWVudChzdHJ1Y3QgYnBmX2l0ZXJfX3VkcCAqY3R4KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjA6NTEuOTUzMzA4NDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzY4NzE0NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmsgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHdoZXRoZXIgaXQgcHJlc2VudHMgYW55IGludGVyZXN0aW5nIGZ1enppbmcgdGFyZ2V0cy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLiBMZXQncyBzZWUuLi5cblxuSW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgdGhlIGBicGZfc29ja19kZXN0cm95YCBmdW5jdGlvbiBoYXMgYmVlbiBtb2RpZmllZC4gIEl0IGxvb2tzIGxpa2UgdGhlcmUncyBzb21lIGZpbmUtdHVuaW5nIHJlbGF0ZWQgdG8gaG93IHNvY2tldCBkZXN0cnVjdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIHNlZW1zIHRvIHJlbGF4IHRoZSByZXF1aXJlbWVudCB0aGF0IHRoZSBzb2NrZXQgYmUgYSBcImZ1bGxzb2NrXCIgYmVmb3JlIGFsbG93aW5nIGBkaWFnX2Rlc3Ryb3lgIHRvIGJlIGNhbGxlZC4gIFRoZSBjb25kaXRpb25hbCBsb2dpYyBoYXMgY2hhbmdlZCwgYW5kIGl0IG5vdyBzZWVtcyB0byBjb25zaWRlciBhbGxvd2luZyBub24tZnVsbHNvY2sgc29ja2V0cyAobGlrZSBgdHdfc29ja2Agb3IgYHJlcV9zb2NrYCkgaWYgdGhleSBoYXZlIGEgYGRpYWdfZGVzdHJveWAgZnVuY3Rpb24uIE15IGluaXRpYWwgcXVlc3Rpb24gaXM6IHdoYXQgaXMgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZT8gQ291bGQgdGhpcyBsZWFkIHRvIG5ldyBjb2RlIHBhdGhzIHdoZW4gZGVhbGluZyB3aXRoIGNlcnRhaW4gc29ja2V0IHN0YXRlcywgbGlrZSB0aW1lLXdhaXQgc29ja2V0cyBvciByZXF1ZXN0IHNvY2tldHM/IFRoZSByZXR1cm4gY29kZSBsb2dpYyBpcyBhbHNvIG1vZGlmaWVkLCB3aGljaCBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kLlxuXG5OZXh0LCBpbiBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2AsIHRoZSBwYXRjaCB0b3VjaGVzIGBpbmV0X2Nza19saXN0ZW5fc3RvcGAuIFRoZSBrZXkgY2hhbmdlIGlzIGFkZGluZyBhIGNoZWNrIGZvciB0aGUgQlBGIGNvbnRleHQgKGAhaGFzX2N1cnJlbnRfYnBmX2N0eCgpYCkgYmVmb3JlIGNhbGxpbmcgYGNvbmRfcmVzY2hlZCgpYC4gVGhpcyBpcyBpbXBvcnRhbnQsIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBpc3N1ZXMgd2hlbiBjYWxsZWQgZnJvbSBhIEJQRiBjb250ZXh0LiBDYWxsaW5nIGBjb25kX3Jlc2NoZWQoKWAgaW4gYW4gYXRvbWljIG9yIEJQRiBjb250ZXh0IGlzIGdlbmVyYWxseSBwcm9ibGVtYXRpYy4gSSBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kLlxuXG5GaW5hbGx5LCB0aGVyZSBhcmUgc29tZSBzZWxmdGVzdCBhZGRpdGlvbnMuIFRoaXMgY291bGQgYmUgdXNlZnVsLiBJdCdzIGxpa2VseSB0aGVzZSB0ZXN0cyB3aWxsIGdpdmUgbWUgc29tZSBpbnNpZ2h0IGludG8gaG93IHRoZXNlIGNoYW5nZXMgYXJlIGludGVuZGVkIHRvIGZ1bmN0aW9uIGFuZCBwZXJoYXBzIHJldmVhbCBzb21lIGVkZ2UgY2FzZXMuXG5cbk5vdywgSSdtIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW4gd2l0aCBzb21lIGdyZXBwaW5nIGFuZCBmaWxlIHJlYWRpbmcuIEkgbmVlZCB0byBkZXRlcm1pbmU6IFdoYXQgYXJlIHRoZSBzcGVjaWZpYyBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBpbiB0aGUgQlBGIGNvbnRleHQ/IFdoYXQgc29ja2V0IHN0YXRlcyBhcmUgaW1wYWN0ZWQgYnkgdGhlc2UgbW9kaWZpY2F0aW9ucz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcgYmFzZWQgb24gdGhlIGFsdGVyZWQgY29kZSBwYXRocyBvciByZXR1cm4gY29kZXM/IEknbGwgYmUgbG9va2luZyBmb3IgZm9jdXMgc3ltYm9scyBhbmQgcmVsYXRlZCBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gYmV0dGVyIGFuYWx5emUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MjgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMzoyMDo1Ny43MjIwMjQ3NDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MjAwOTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc29ja19kZXN0cm95XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTEyOTAwPV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjkwMS1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjkwMjovKiBicGZfc29ja19kZXN0cm95OiBEZXN0cm95IHRoZSBnaXZlbiBzb2NrZXQgd2l0aCBFQ09OTkFCT1JURUQgZXJyb3IgY29kZS5cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjkwMy0gKlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5MTgtICovXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI5MTk6X19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTIwLXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyOTQxPUJURl9LRlVOQ1NfU1RBUlQoYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzKVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTQyOkJURl9JRF9GTEFHUyhmdW5jLCBicGZfc29ja19kZXN0cm95KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTQzLUJURl9LRlVOQ1NfRU5EKGJwZl9za19pdGVyX2tmdW5jX2lkcylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jPTExPWludCB0d19kZXN0cm95X2VyciA9IDA7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMtMTItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmM6MTM6aW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzaykgX19rc3ltO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jLTE0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmM9NTE9aW50IGl0ZXJfdGNwNl9jbGllbnQoc3RydWN0IGJwZl9pdGVyX190Y3AgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jLTY5LVxcdGlmIChzb2NrX2Nvb2tpZSA9PSAqdmFsKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jOjcwOlxcdFxcdGJwZl9zb2NrX2Rlc3Ryb3koc2tfY29tbW9uKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYy03MS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jPTc2PWludCBpdGVyX3RjcDZfc2VydmVyKHN0cnVjdCBicGZfaXRlcl9fdGNwICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYy05OS1cXHRpZiAoc3JjcCA9PSBzZXJ2X3BvcnQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmM6MTAwOlxcdFxcdGJwZl9zb2NrX2Rlc3Ryb3koc2tfY29tbW9uKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYy0xMDEtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYz0xMDY9aW50IGl0ZXJfdGNwNl90aW1ld2FpdChzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMtMTI4LVxcdHR3X2ZvdW5kKys7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmM6MTI5OlxcdHR3X2Rlc3Ryb3lfZXJyID0gYnBmX3NvY2tfZGVzdHJveShza19jb21tb24pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jLTEzMC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jPTEzNT1pbnQgaXRlcl91ZHA2X2NsaWVudChzdHJ1Y3QgYnBmX2l0ZXJfX3VkcCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMtMTUwLVxcdGlmIChzb2NrX2Nvb2tpZSA9PSAqdmFsKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jOjE1MTpcXHRcXHRicGZfc29ja19kZXN0cm95KChzdHJ1Y3Qgc29ja19jb21tb24gKilzayk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMtMTUyLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmM9MTU3PWludCBpdGVyX3VkcDZfc2VydmVyKHN0cnVjdCBicGZfaXRlcl9fdWRwICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYy0xNjktXFx0aWYgKHNyY3AgPT0gc2Vydl9wb3J0KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jOjE3MDpcXHRcXHRicGZfc29ja19kZXN0cm95KChzdHJ1Y3Qgc29ja19jb21tb24gKilzayk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMtMTcxLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nX2ZhaWwuYz05PWNoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZ19mYWlsLmMtMTAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nX2ZhaWwuYzoxMTppbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNrKSBfX2tzeW07XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nX2ZhaWwuYy0xMi1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2dfZmFpbC5jPTEzPVNFQyhcXFwidHBfYnRmL3RjcF9kZXN0cm95X3NvY2tcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZ19mYWlsLmM6MTQ6X19mYWlsdXJlIF9fbXNnKFxcXCJjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBicGZfc29ja19kZXN0cm95IGlzIG5vdCBhbGxvd2VkXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2dfZmFpbC5jLTE1LWludCBCUEZfUFJPRyh0cmFjZV90Y3BfZGVzdHJveV9zb2NrLCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2dfZmFpbC5jLTE3LVxcdC8qIHNob3VsZCBub3QgbG9hZCAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZ19mYWlsLmM6MTg6XFx0YnBmX3NvY2tfZGVzdHJveSgoc3RydWN0IHNvY2tfY29tbW9uICopc2spO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZ19mYWlsLmMtMTktXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19pdGVyX2JhdGNoLmM9NzY9aW50IGl0ZXJfdGNwX2Rlc3Ryb3koc3RydWN0IGJwZl9pdGVyX190Y3AgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2l0ZXJfYmF0Y2guYy04Ny1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19pdGVyX2JhdGNoLmM6ODg6XFx0YnBmX3NvY2tfZGVzdHJveShza19jb21tb24pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2l0ZXJfYmF0Y2guYy04OS1cXHRicGZfc2VxX3dyaXRlKGN0eC1cXHUwMDNlbWV0YS1cXHUwMDNlc2VxLCBcXHUwMDI2c29ja19jb29raWUsIHNpemVvZihzb2NrX2Nvb2tpZSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMzoyMDo1OS4zOTQwMzg5MjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODMzNjM5NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgQ29kZTogVW5kZXJzdGFuZGluZyBOZXR3b3JrIEZpbHRlcmluZyBhbmQgQ29ubmVjdGlvbiBNYW5hZ2VtZW50KipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtb2RpZmljYXRpb25zIHRoYXQgaGF2ZSBiZWVuIG1hZGUsIHNvIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdHdvIGtleSBmaWxlcy4gRmlyc3QsIEknbSBzdGFydGluZyB3aXRoIGBuZXQvY29yZS9maWx0ZXIuY2AuIEkga25vdyB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIHBhY2tldCBmaWx0ZXJpbmcgbG9naWMgcmVzaWRlcywgc28gSSdtIGxvb2tpbmcgZm9yIGNoYW5nZXMgdGhhdCB3b3VsZCBhZmZlY3QgaG93IHBhY2tldHMgYXJlIGNsYXNzaWZpZWQsIHByb2Nlc3NlZCwgb3IgcG90ZW50aWFsbHkgZHJvcHBlZC4gSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBhbHRlcmF0aW9ucyBpbiB0aGUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBoYW5kbGluZywgYW55IG5ldyBmaWx0ZXIgaG9va3MsIG9yIGFueSB1cGRhdGVzIHRvIHRoZSBmaWx0ZXIgY2hhaW5zLiBJJ20gbG9va2luZyBmb3IgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZmlsdGVyaW5nIGxhbmRzY2FwZSBoYXMgY2hhbmdlZC5cblxuTmV4dCwgSSdsbCBtb3ZlIG92ZXIgdG8gYG5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNgLiBUaGlzIGZpbGUgaXMgY3J1Y2lhbCBmb3IgbWFuYWdpbmcgVENQL0lQIGNvbm5lY3Rpb25zIGluIHRoZSBJUHY0IGNvbnRleHQuIEkgYW50aWNpcGF0ZSBjaGFuZ2VzIGhlcmUgbWlnaHQgcmVsYXRlIHRvIGhvdyBjb25uZWN0aW9ucyBhcmUgZXN0YWJsaXNoZWQsIG1haW50YWluZWQsIG9yIHRlcm1pbmF0ZWQsIHBvdGVudGlhbGx5IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGZpbHRlcmluZyBydWxlcyBJIGV4YW1pbmVkIHByZXZpb3VzbHkuIEknbGwgYmUgc2NydXRpbml6aW5nIHNvY2tldCBjcmVhdGlvbiwgY29ubmVjdGlvbiBhY2NlcHRhbmNlLCBhbmQgZGF0YSBmbG93IHRvIHNlZSBpZiBhbnkgbmV3IGZpbHRlcmluZyBjcml0ZXJpYSBvciBzZWN1cml0eSBtZWFzdXJlcyBoYXZlIGJlZW4gaW50ZWdyYXRlZCB3aXRoaW4gdGhpcyBwYXJ0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJdCdzIGEga2V5IHNwb3QgdG8gc2VlIGhvdyB0aGUgY29ubmVjdGlvbiBwcm9jZXNzIGludGVyYWN0cyB3aXRoIHRoZSBmaWx0ZXJpbmcgbWVjaGFuaXNtcy4gVWx0aW1hdGVseSwgSSdtIGV4cGVjdGluZyB0byB1bmNvdmVyIGhvdyB0aGVzZSBzcGVjaWZpYyBtb2RpZmljYXRpb25zIGluZmx1ZW5jZSB0aGUgbmV0d29yayBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ2MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIxOjA0LjIyNzY4MDQ0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg4MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOTA1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjkwNTpcXHQgKiBwcm90b2NvbCBzcGVjaWZpYyBzb2NrZXQgZGVzdHJveSBoYW5kbGVycy5cXG4xMjkwNjpcXHQgKlxcbjEyOTA3OlxcdCAqIFRoZSBoZWxwZXIgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gQlBGIGNvbnRleHRzIHRoYXQgaGF2ZSBhY3F1aXJlZCB0aGUgc29ja2V0XFxuMTI5MDg6XFx0ICogbG9ja3MuXFxuMTI5MDk6XFx0ICpcXG4xMjkxMDpcXHQgKiBQYXJhbWV0ZXJzOlxcbjEyOTExOlxcdCAqIEBzb2NrOiBQb2ludGVyIHRvIHNvY2tldCB0byBiZSBkZXN0cm95ZWRcXG4xMjkxMjpcXHQgKlxcbjEyOTEzOlxcdCAqIFJldHVybjpcXG4xMjkxNDpcXHQgKiBPbiBlcnJvciwgbWF5IHJldHVybiBFT1BOT1RTVVBQLCBvciB3aGF0ZXZlciB0aGUgcHJvdG9jb2wgc3BlY2lmaWNcXG4xMjkxNTpcXHQgKiBkZXN0cm95IGhhbmRsZXIgcmV0dXJucy5cXG4xMjkxNjpcXHQgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxcbjEyOTE3OlxcdCAqIDAgb3RoZXJ3aXNlXFxuMTI5MTg6XFx0ICovXFxuMTI5MTk6XFx0X19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxcbjEyOTIwOlxcdHtcXG4xMjkyMTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKilzb2NrO1xcbjEyOTIyOlxcdFxcbjEyOTIzOlxcdFxcdC8qIFRoZSBsb2NraW5nIHNlbWFudGljcyB0aGF0IGFsbG93IGZvciBzeW5jaHJvbm91cyBleGVjdXRpb24gb2YgdGhlXFxuMTI5MjQ6XFx0XFx0ICogZGVzdHJveSBoYW5kbGVycyBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIFRDUCBhbmQgVURQLlxcbjEyOTI1OlxcdFxcdCAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHRcXG4xMjkyNjpcXHRcXHQgKiBwcmlvciB0byBpbnZva2luZyB0aGlzIGtmdW5jLlxcbjEyOTI3OlxcdFxcdCAqL1xcbjEyOTI4OlxcdFxcdGlmICghc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveSlcXG4xMjkyOTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTI5MzA6XFx0XFxuMTI5MzE6XFx0XFx0aWYgKHNrX2Z1bGxzb2NrKHNrKSBcXHUwMDI2XFx1MDAyNlxcbjEyOTMyOlxcdFxcdCAgICBzay1cXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXFx1MDAyNlxcdTAwMjZcXG4xMjkzMzpcXHRcXHQgICAgc2stXFx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxcbjEyOTM0OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMjkzNTpcXHRcXG4xMjkzNjpcXHRcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcXG4xMjkzNzpcXHR9XFxuMTI5Mzg6XFx0XFxuMTI5Mzk6XFx0X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG4xMjk0MDpcXHRcXG4xMjk0MTpcXHRCVEZfS0ZVTkNTX1NUQVJUKGJwZl9za19pdGVyX2tmdW5jX2lkcylcXG4xMjk0MjpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfZGVzdHJveSlcXG4xMjk0MzpcXHRCVEZfS0ZVTkNTX0VORChicGZfc2tfaXRlcl9rZnVuY19pZHMpXFxuMTI5NDQ6XFx0XFxuMTI5NDU6XFx0c3RhdGljIGludCB0cmFjaW5nX2l0ZXJfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxcbjEyOTQ2OlxcdHtcXG4xMjk0NzpcXHRcXHRpZiAoYnRmX2lkX3NldDhfY29udGFpbnMoXFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX2lkcywga2Z1bmNfaWQpIFxcdTAwMjZcXHUwMDI2XFxuMTI5NDg6XFx0XFx0ICAgIHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9JVEVSKVxcbjEyOTQ5OlxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMzoyMTowNC4yMjgyNzEyN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NTQ4Mzk2MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGluZXRfY29ubmVjdGlvbl9zb2NrLmNgKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMgcHJvYmxlbS4gTGV0J3MgcHVsbCB1cCB0aGUgc291cmNlIGNvZGUgZm9yIGBuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jYC4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIHRoZSBzZWN0aW9uIGFyb3VuZCBsaW5lIDE1MDAgdG8gMTU0MC4gVGhhdCByYW5nZSB1c3VhbGx5IGNvdmVycyBbaW5zZXJ0IGFzc3VtcHRpb24gYWJvdXQgdGhlIGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgbGlrZWx5IGNvdmVyZWQgYnkgdGhlIGNvZGUgd2l0aGluIHRoZSBzcGVjaWZpZWQgbGluZXM7IGUuZy4sIFwiY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCB0ZWFyIGRvd24gbG9naWMsXCIgb3IgXCJoYW5kbGluZyBvZiBzcGVjaWZpYyBzb2NrZXQgb3B0aW9ucyxcIiBvciBcImEgcGFydGljdWxhciBxdWV1aW5nIG1lY2hhbmlzbVwiXS4gSSdtIGhvcGluZyBJIGNhbiBwaW5wb2ludCBleGFjdGx5IHdoZXJlIHRoZSBbaW5zZXJ0IHlvdXIgaHlwb3RoZXNpcyBhYm91dCB0aGUgYnVnLCBvciB0aGUgZmVhdHVyZSB5b3UncmUgbG9va2luZyBmb3JdIGlzIGhhcHBlbmluZyBvciBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIFRDUC9JUCBzdGFjay4gVGhpcyBzaG91bGQgcHJvdmlkZSBzb21lIHVzZWZ1bCBjb250ZXh0IGFuZCBhIG1vcmUgbmFycm93IHNldCBvZiBjb2RlIHRvIGFuYWx5emUuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU5OSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjE6MDYuOTgzMTEyOTc2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTUwMDpcXHRcXHRcXHRcXHRcXHRcXHRSRUFEX09OQ0UobnNrLVxcdTAwM2Vza19kYXRhX3JlYWR5KShuc2spO1xcbjE1MDE6XFx0XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4xNTAyOlxcdFxcdFxcdFxcdFxcdFxcdF9fTkVUX0lOQ19TVEFUUyhzb2NrX25ldChuc2spLFxcbjE1MDM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0TElOVVhfTUlCX1RDUE1JR1JBVEVSRVFGQUlMVVJFKTtcXG4xNTA0OlxcdFxcdFxcdFxcdFxcdFxcdHJlcXNrX21pZ3JhdGVfcmVzZXQobnJlcSk7XFxuMTUwNTpcXHRcXHRcXHRcXHRcXHRcXHRfX3JlcXNrX2ZyZWUobnJlcSk7XFxuMTUwNjpcXHRcXHRcXHRcXHRcXHR9XFxuMTUwNzpcXHRcXHRcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xNTA4OlxcdFxcbjE1MDk6XFx0XFx0XFx0XFx0XFx0LyogaW5ldF9jc2tfcmVxc2tfcXVldWVfYWRkKCkgaGFzIGFscmVhZHlcXG4xNTEwOlxcdFxcdFxcdFxcdFxcdCAqIGNhbGxlZCBpbmV0X2NoaWxkX2ZvcmdldCgpIG9uIGZhaWx1cmUgY2FzZS5cXG4xNTExOlxcdFxcdFxcdFxcdFxcdCAqL1xcbjE1MTI6XFx0XFx0XFx0XFx0XFx0Z290byBza2lwX2NoaWxkX2ZvcmdldDtcXG4xNTEzOlxcdFxcdFxcdFxcdH1cXG4xNTE0OlxcdFxcdFxcdH1cXG4xNTE1OlxcdFxcbjE1MTY6XFx0XFx0XFx0aW5ldF9jaGlsZF9mb3JnZXQoc2ssIHJlcSwgY2hpbGQpO1xcbjE1MTc6XFx0c2tpcF9jaGlsZF9mb3JnZXQ6XFxuMTUxODpcXHRcXHRcXHRyZXFza19wdXQocmVxKTtcXG4xNTE5OlxcdFxcdFxcdGJoX3VubG9ja19zb2NrKGNoaWxkKTtcXG4xNTIwOlxcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbjE1MjE6XFx0XFx0XFx0c29ja19wdXQoY2hpbGQpO1xcbjE1MjI6XFx0XFxuMTUyMzpcXHRcXHRcXHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcXG4xNTI0OlxcdFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjE1MjU6XFx0XFx0fVxcbjE1MjY6XFx0XFx0aWYgKHF1ZXVlLVxcdTAwM2VmYXN0b3BlbnEucnNrcV9yc3RfaGVhZCkge1xcbjE1Mjc6XFx0XFx0XFx0LyogRnJlZSBhbGwgdGhlIHJlcXMgcXVldWVkIGluIHJza3FfcnN0X2hlYWQuICovXFxuMTUyODpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnF1ZXVlLVxcdTAwM2VmYXN0b3BlbnEubG9jayk7XFxuMTUyOTpcXHRcXHRcXHRyZXEgPSBxdWV1ZS1cXHUwMDNlZmFzdG9wZW5xLnJza3FfcnN0X2hlYWQ7XFxuMTUzMDpcXHRcXHRcXHRxdWV1ZS1cXHUwMDNlZmFzdG9wZW5xLnJza3FfcnN0X2hlYWQgPSBOVUxMO1xcbjE1MzE6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnF1ZXVlLVxcdTAwM2VmYXN0b3BlbnEubG9jayk7XFxuMTUzMjpcXHRcXHRcXHR3aGlsZSAocmVxICE9IE5VTEwpIHtcXG4xNTMzOlxcdFxcdFxcdFxcdG5leHQgPSByZXEtXFx1MDAzZWRsX25leHQ7XFxuMTUzNDpcXHRcXHRcXHRcXHRyZXFza19wdXQocmVxKTtcXG4xNTM1OlxcdFxcdFxcdFxcdHJlcSA9IG5leHQ7XFxuMTUzNjpcXHRcXHRcXHR9XFxuMTUzNzpcXHRcXHR9XFxuMTUzODpcXHRcXHRXQVJOX09OX09OQ0Uoc2stXFx1MDAzZXNrX2Fja19iYWNrbG9nKTtcXG4xNTM5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjE6MDYuOTgzMjE1MDY2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjAzMzMwODc4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGJwZl9zb2NrX2Rlc3Ryb3lgIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYGJwZl9zb2NrX2Rlc3Ryb3lgIGlzIGEgQlBGIGtmdW5jLCB3aGljaCBtZWFucyBpdCBjYW4gYmUgdXNlZCB3aXRoaW4gQlBGIGl0ZXJhdG9yIHByb2dyYW1zLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgYmVoYXZpb3Igb2YgdGhpcyBmdW5jdGlvbiB3aGVuIGNhbGxlZCBvbiBkaWZmZXJlbnQgc29ja2V0IHN0YXRlcyDigJMgcGFydGljdWxhcmx5IHRpbWV3YWl0IGFuZCBsaXN0ZW5pbmcgc29ja2V0cy5cblxuRm9yIGEgdGltZXdhaXQgc29ja2V0LCB0aGUgY29kZSBub3cgY2hlY2tzIGBza19mdWxsc29jayhzaylgLiBUaGlzIG1ha2VzIHNlbnNlIGJlY2F1c2UgYSB0aW1ld2FpdCBzb2NrZXQgaXNuJ3QgYSBcImZ1bGxcIiBzb2NrZXQgKGkuZS4sIGBzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUYCBvciBgVENQX05FV19TWU5fUkVDVmApLiBQcmV2aW91c2x5LCB0aGVyZSB3YXMgYSBjaGVjayBvbiBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIHdoaWNoIG1pZ2h0IG5vdCBiZSB2YWxpZCBvciByZWxpYWJsZSBmb3Igbm9uLWZ1bGxzb2NrIHN0YXRlcy4gU28sIGFkZGluZyB0aGlzIGBza19mdWxsc29jayhzaylgIGNoZWNrIHNlZW1zIHRvIGFsbG93IGBkaWFnX2Rlc3Ryb3lgIG9wZXJhdGlvbnMgKGxpa2UgdGhvc2UgdXNlZCBieSB0d19zb2NrKSB0byBwcm9jZWVkIGNvcnJlY3RseS4gVWx0aW1hdGVseSwgdGhpcyBjaGFuZ2UgbWFrZXMgc2Vuc2UgYmVjYXVzZSBpdCBtZWFucyB0aGF0IHdlIGNhbiBjb3JyZWN0bHkgZGVzdHJveSBhIHNvY2tldCB1c2luZyB0aGUgYGJwZl9zb2NrX2Rlc3Ryb3lgIGV2ZW4gaWYgaXQgaXMgbm90IGEgZnVsbHkgZXN0YWJsaXNoZWQgc29ja2V0LlxuXG5Gb3IgYSBsaXN0ZW5pbmcgc29ja2V0LCB0aGUgZnVuY3Rpb24gYGluZXRfY3NrX2xpc3Rlbl9zdG9wYCBpcyBjcml0aWNhbCB3aGVuIGBicGZfc29ja19kZXN0cm95YCBpcyBjYWxsZWQuIEl0IHNlZW1zIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgbGlzdGVuaW5nIHByb2Nlc3MgaXMgc3RvcHBlZCB2aWEgYGRpYWdfZGVzdHJveWAgKHNwZWNpZmljYWxseSwgYHRjcF9kaWFnX2Rlc3Ryb3lgIGxlYWRzIHRvIGB0Y3BfYWJvcnRgIGFuZCBldmVudHVhbGx5IGBpbmV0X2Nza19saXN0ZW5fc3RvcGApLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBjb25kX3Jlc2NoZWQoKWAgaXMgaW50ZXJlc3RpbmcuIFRoZSBwcmV2aW91cyBjb2RlIGNvdWxkIGNhdXNlIGEgXCJzY2hlZHVsaW5nIHdoaWxlIGF0b21pY1wiIGVycm9yIGluIGEgQlBGIGl0ZXJhdG9yIGNvbnRleHQuIEl0IHNlZW1zIHRoYXQgdGhlIGNvbmRpdGlvbiBgaWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpIGNvbmRfcmVzY2hlZCgpO2Agd2FzIGFkZGVkIHRvIGVuc3VyZSB0aGF0IHdlIG9ubHkgeWllbGQgaWYgd2UncmUgKm5vdCogaW4gYSBCUEYgY29udGV4dCB0aGF0IHByb2hpYml0cyBzbGVlcGluZyBvciBtaWdyYXRpb24uXG5cbk5vdywgYSBrZXkgcXVlc3Rpb24gZm9yIG1lOiBJcyB0aGlzIGNvZGUgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzPyBUaGUgYW5zd2VyIGlzIHllcy4gU2luY2UgQlBGIGFuZCBzb2NrZXQgZGVzdHJ1Y3Rpb24gdmlhIEJQRiBpdGVyYXRvcnMgKGUuZy4sIGBCUEZfUFJPR19UWVBFX1RSQUNJTkdgIG9yIGBCUEZfVFJBQ0VfSVRFUmApIGFyZSBzdGFuZGFyZCwgYXMgd2VsbCBhcyB0aGUgZmFjdCB0aGF0IHN5emthbGxlciBmdXp6ZXMgQlBGIGFuZCBzb2NrZXQgaXRlcmF0b3JzLCB0aGVyZSBpcyBhIHN0cm9uZyBwb3NzaWJpbGl0eSB0aGF0IHRoaXMgbmV3IGNvZGUgcGF0aCBjYW4gYmUgaGl0LlxuXG5UaGVyZWZvcmUsIGlzIHRoaXMgY2hhbmdlIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHksIGBXb3J0aEZ1enppbmc6IHRydWVgLiBUaGlzIGlzIGJlY2F1c2UgaXQgbW9kaWZpZXMgdGhlIGV4ZWN1dGFibGUgbG9naWMgd2l0aGluIGNvcmUgc3Vic3lzdGVtczogQlBGIGFuZCBUQ1AvSVB2NCBuZXR3b3JraW5nLiBTcGVjaWZpY2FsbHksIGl0IGNoYW5nZXMgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggc29ja2V0IGRlc3RydWN0aW9uIG9jY3VycyBhbmQgdGhlIHNjaGVkdWxlciB5aWVsZCBiZWhhdmlvciBpbiBgaW5ldF9jc2tfbGlzdGVuX3N0b3BgLiBJIG5lZWQgdG8gbm93IGNoZWNrIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYW5kIHRoZSBmb2N1cyBzeW1ib2xzIHJlbGF0ZWQgdG8gYm90aCBgYnBmX3NvY2tfZGVzdHJveWAgYW5kIGBpbmV0X2Nza19saXN0ZW5fc3RvcGAuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFyb3VuZCBgbmV0L2NvcmUvZmlsdGVyLmNgIGFuZCBzcGVjaWZpY2FsbHkgYEJQRmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDcyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjE6MTMuMDE2NTI2OTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMzQxNDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19CUEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTQ0PW9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICs9IHNrbXNnLm9cXG5uZXQvY29yZS9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHNvY2tfbWFwLm9cXG5uZXQvY29yZS9NYWtlZmlsZTo0NjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9za19zdG9yYWdlLm9cXG5uZXQvY29yZS9NYWtlZmlsZS00Ny1pZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL01ha2VmaWxlOjQ4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2tzb2NrLm9cXG5uZXQvY29yZS9NYWtlZmlsZS00OS1lbmRpZlxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM9Mjc0PUJURl9LRlVOQ1NfRU5EKGtzb2NrX2tmdW5jX2J0Zl9pZHMpXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjc1LVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjI3NjojaWZkZWYgQ09ORklHX0JQRl9MU01cXG5uZXQvY29yZS9icGZfa3NvY2suYy0yNzctQlRGX0lEX0xJU1RfU0lOR0xFKGJwZl9sc21fc29ja2V0X3NlbmRtc2dfaWQsIGZ1bmMsIGJwZl9sc21fc29ja2V0X3NlbmRtc2cpXFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYz0yODA9c3RhdGljIGludCBicGZfa3NvY2tfa2Z1bmNfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjg3LVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjI4ODojaWZkZWYgQ09ORklHX0JQRl9MU01cXG5uZXQvY29yZS9icGZfa3NvY2suYy0yODktXFx0aWYgKHByb2ctXFx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00gXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9jb3JlL2Rldi5oPTM4Mj1pbnQgcnBzX2NwdW1hc2tfaG91c2VrZWVwaW5nKHN0cnVjdCBjcHVtYXNrICptYXNrKTtcXG5uZXQvY29yZS9kZXYuaC0zODMtXFxubmV0L2NvcmUvZGV2Lmg6Mzg0OiNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19ORVQpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxcbm5ldC9jb3JlL2Rldi5oLTM4NS12b2lkIHhkcF9kb19jaGVja19mbHVzaGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz00NTMzPUVYUE9SVF9TWU1CT0xfR1BMKHhkcF9kb19mbHVzaCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNDUzNC1cXG5uZXQvY29yZS9maWx0ZXIuYzo0NTM1OiNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19ORVQpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ1MzYtdm9pZCB4ZHBfZG9fY2hlY2tfZmx1c2hlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuLS1cXG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jPTc0PUVYUE9SVF9TWU1CT0woc2tiX2Zsb3dfZGlzc2VjdG9yX2luaXQpO1xcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmMtNzUtXFxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYzo3NjojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYy03Ny1pbnQgZmxvd19kaXNzZWN0b3JfYnBmX3Byb2dfYXR0YWNoX2NoZWNrKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmMtMTA1LX1cXG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jOjEwNjojZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXFxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYy0xMDctXFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTU0NT1zdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNTczLVxcbm5ldC9jb3JlL3NrbXNnLmM6NTc0OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcXG5uZXQvY29yZS9za21zZy5jLTU3NS1cXHRwc29jay1cXHUwMDNlaW5ncmVzc19ieXRlcyArPSBsZW47XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTEwNTc9c3RhdGljIHZvaWQgc2tfcHNvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMDczLVxcbm5ldC9jb3JlL3NrbXNnLmM6MTA3NDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXFxubmV0L2NvcmUvc2ttc2cuYy0xMDc1LXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfcmVhZChzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMTkzPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX2RvbmVfc3RycChzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMTk1LX1cXG5uZXQvY29yZS9za21zZy5jOjExOTY6I2VuZGlmIC8qIENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUiAqL1xcbm5ldC9jb3JlL3NrbXNnLmMtMTE5Ny1cXG4tLVxcbm5ldC9jb3JlL3NvY2suYz0yMzQ5PXN0YXRpYyB2b2lkIF9fc2tfZGVzdHJ1Y3Qoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbi0tXFxubmV0L2NvcmUvc29jay5jLTIzNjYtXFxubmV0L2NvcmUvc29jay5jOjIzNjc6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm5ldC9jb3JlL3NvY2suYy0yMzY4LVxcdGJwZl9za19zdG9yYWdlX2ZyZWUoc2spO1xcbi0tXFxubmV0L2NvcmUvc29jay5jPTI0Nzk9c3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtMjQ5My1cXHRuZXdzay1cXHUwMDNlc2tfcHJvdF9jcmVhdG9yID0gcHJvdDtcXG5uZXQvY29yZS9zb2NrLmM6MjQ5NDojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2NvcmUvc29jay5jLTI0OTUtXFx0UkNVX0lOSVRfUE9JTlRFUihuZXdzay1cXHUwMDNlc2tfYnBmX3N0b3JhZ2UsIE5VTEwpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xNDc3PXN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19saW5rX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKioqcHByb2csXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0OTEtXFx0XFx0YnJlYWs7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxNDkyOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0OTMtXFx0Y2FzZSBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVI6XFxuLS1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYz0zNTI9c3RhdGljIGludCBwcm9jX2RvX3NrYl9kZWZlcl9tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4tLVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTM3NC1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzozNzU6I2lmZGVmIENPTkZJR19CUEZfSklUXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMzc2LXN0YXRpYyBpbnQgcHJvY19kb2ludHZlY19taW5tYXhfYnBmX2VuYWJsZShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbi0tXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNDAxLVxcdGlmICh3cml0ZSBcXHUwMDI2XFx1MDAyNiByZXQgXFx1MDAyNlxcdTAwMjYgbWluID09IG1heClcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzo0MDI6XFx0XFx0cHJfaW5mb19vbmNlKFxcXCJDT05GSUdfQlBGX0pJVF9BTFdBWVNfT04gaXMgZW5hYmxlZCwgYnBmX2ppdF9lbmFibGUgaXMgcGVybWFuZW50bHkgc2V0IHRvIDEuXFxcXG5cXFwiKTtcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy00MDMtXFxuLS1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYz00MzA9c3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0X2NvcmVfdGFibGVbXSA9IHtcXG4tLVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTQ4My1cXHR9LFxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjQ4NDojaWZkZWYgQ09ORklHX0JQRl9KSVRcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy00ODUtXFx0e1xcbi0tXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNDkwLVxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHByb2NfZG9pbnR2ZWNfbWlubWF4X2JwZl9lbmFibGUsXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6NDkxOiMgaWZkZWYgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNDkyLVxcdFxcdC5leHRyYTFcXHRcXHQ9IFNZU0NUTF9PTkUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIxOjEzLjA4Njg3NDU0NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDYxMTYwNjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQsIGFzc3VtaW5nIEknbSB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYGJwZl9zb2NrX2Rlc3Ryb3lgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBgYnBmX3NvY2tfZGVzdHJveWAgZnVuY3Rpb24gYW5kIGhvdyBpdCdzIGludGVncmF0ZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB1bmRlciB3aGF0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzIChgI2lmZGVmYCkgaXTigJlzIGluY2x1ZGVkLiBUaGlzIGlzIGxpa2VseSBhIGtleSBhc3BlY3Qgb2YgdGhpcyBmdW5jdGlvbiwgYXMgaXQgaXMgYSBsZXNzIGZyZXF1ZW50bHkgdXNlZCBmdW5jdGlvbi4gVGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHdpbGwgdGVsbCBtZSB3aGljaCBmZWF0dXJlcyBvciBrZXJuZWwgY29uZmlndXJhdGlvbnMgZW5hYmxlIG9yIGRpc2FibGUgdGhlIGZ1bmN0aW9uYWxpdHkgYXNzb2NpYXRlZCB3aXRoIGBicGZfc29ja19kZXN0cm95YC4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzIGNyaXRpY2FsIHRvIHRyb3VibGVzaG9vdGluZy4gSXQgd2lsbCBoZWxwIG1lIHNlZSB3aGljaCBrZXJuZWwgYnVpbGRzIHdpbGwgaW5jbHVkZSB0aGlzIGFuZCB0aGVyZWZvcmUgd2hpY2ggY29uZmlndXJhdGlvbnMgSSBzaG91bGQgdGVzdCB3aGVuIEkgYW0gd29ya2luZyBvbiByZWxhdGVkIGNvZGUuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIGhvdyBpdOKAmXMgYmVpbmcgdXNlZCBpbiB0aGUgc29ja2V0IEJQRiBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYwMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIxOjE2LjU0ODAzNzg0M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczOTAzMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmfCNpZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0zMTg9c3RhdGljIHUzMiBjb252ZXJ0X3NrYl9hY2Nlc3MoaW50IHNrYl9maWVsZCwgaW50IGRzdF9yZWcsIGludCBzcmNfcmVnLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzMzLVxcdFxcdCppbnNuKysgPSBCUEZfQUxVMzJfSU1NKEJQRl9BTkQsIGRzdF9yZWcsIFBLVF9UWVBFX01BWCk7XFxubmV0L2NvcmUvZmlsdGVyLmM6MzM0OiNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTERcXG5uZXQvY29yZS9maWx0ZXIuYy0zMzUtXFx0XFx0Kmluc24rKyA9IEJQRl9BTFUzMl9JTU0oQlBGX1JTSCwgZHN0X3JlZywgNSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xNjgxPXN0YXRpYyBpbmxpbmUgaW50IF9fYnBmX3RyeV9tYWtlX3dyaXRhYmxlKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xNjgzLXtcXG5uZXQvY29yZS9maWx0ZXIuYzoxNjg0OiNpZmRlZiBDT05GSUdfREVCVUdfTkVUXFxubmV0L2NvcmUvZmlsdGVyLmMtMTY4NS1cXHQvKiBBdm9pZCBhIHNwbGF0IGluIHBza2JfbWF5X3B1bGxfcmVhc29uKCkgKi9cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTIyMDc9c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjIxNS1cXG5uZXQvY29yZS9maWx0ZXIuYzoyMjE2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTIyMTctc3RhdGljIGludCBicGZfb3V0X25laWdoX3Y2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTIzMTM9c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9uZWlnaF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjMyMC1cXG5uZXQvY29yZS9maWx0ZXIuYzoyMzIxOiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTIzMjItc3RhdGljIGludCBicGZfb3V0X25laWdoX3Y0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTMxODM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbXNnX3BvcF9kYXRhX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzE5Mi1cXG5uZXQvY29yZS9maWx0ZXIuYzozMTkzOiNpZmRlZiBDT05GSUdfQ0dST1VQX05FVF9DTEFTU0lEXFxubmV0L2NvcmUvZmlsdGVyLmMtMzE5NC1CUEZfQ0FMTF8wKGJwZl9nZXRfY2dyb3VwX2NsYXNzaWRfY3VycilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTQ1MzM9RVhQT1JUX1NZTUJPTF9HUEwoeGRwX2RvX2ZsdXNoKTtcXG5uZXQvY29yZS9maWx0ZXIuYy00NTM0LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjQ1MzU6I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX05FVCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpXFxubmV0L2NvcmUvZmlsdGVyLmMtNDUzNi12b2lkIHhkcF9kb19jaGVja19mbHVzaGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTUxNzE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX3VuZGVyX2Nncm91cF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTUxNzktXFxubmV0L2NvcmUvZmlsdGVyLmM6NTE4MDojaWZkZWYgQ09ORklHX1NPQ0tfQ0dST1VQX0RBVEFcXG5uZXQvY29yZS9maWx0ZXIuYy01MTgxLXN0YXRpYyBpbmxpbmUgdTY0IF9fYnBmX3NrX2Nncm91cF9pZChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02MjAyPUJQRl9DQUxMXzMoYnBmX2JpbmQsIHN0cnVjdCBicGZfc29ja19hZGRyX2tlcm4gKiwgY3R4LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgYWRkcixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMDQte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjYyMDU6I2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmMtNjIwNi1cXHRzdHJ1Y3Qgc29jayAqc2sgPSBjdHgtXFx1MDAzZXNrO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjIxOC1cXHRcXHRyZXR1cm4gX19pbmV0X2JpbmQoc2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWFkZHIsIGFkZHJfbGVuLCBmbGFncyk7XFxubmV0L2NvcmUvZmlsdGVyLmM6NjIxOTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy02MjIwLVxcdH0gZWxzZSBpZiAoYWRkci1cXHUwMDNlc2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02MjM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2JpbmRfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02MjQzLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjYyNDQ6I2lmZGVmIENPTkZJR19YRlJNXFxubmV0L2NvcmUvZmlsdGVyLmMtNjI0NS1cXG5uZXQvY29yZS9maWx0ZXIuYzo2MjQ2OiNpZiAoSVNfQlVJTFRJTihDT05GSUdfWEZSTV9JTlRFUkZBQ0UpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSkgfHwgXFxcXFxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyNDctICAgIChJU19NT0RVTEUoQ09ORklHX1hGUk1fSU5URVJGQUNFKSBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTKSlcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTYyODc9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2dldF94ZnJtX3N0YXRlX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjI5OC1cXG5uZXQvY29yZS9maWx0ZXIuYzo2Mjk5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKSB8fCBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYzMDAtc3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02MzA2LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjYzMDc6I2lmIElTX0VOQUJMRUQoQ09ORklHX1ZMQU5fODAyMVEpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjMwOC1cXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikgXFx1MDAyNlxcdTAwMjYgaXNfdmxhbl9kZXYoZGV2KSkge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjMyOT1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJwZl9maWJfdmxhbl9pbnB1dF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYzNDgtXFxubmV0L2NvcmUvZmlsdGVyLmM6NjM0OTojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcXG5uZXQvY29yZS9maWx0ZXIuYy02MzUwLXN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjUwMC1cXG5uZXQvY29yZS9maWx0ZXIuYzo2NTAxOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY1MDItc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02NjcxPUJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjY4MC1cXHRzd2l0Y2ggKHBhcmFtcy1cXHUwMDNlZmFtaWx5KSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6NjY4MTojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcXG5uZXQvY29yZS9maWx0ZXIuYy02NjgyLVxcdGNhc2UgQUZfSU5FVDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY2ODUtI2VuZGlmXFxubmV0L2NvcmUvZmlsdGVyLmM6NjY4NjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy02Njg3LVxcdGNhc2UgQUZfSU5FVDY6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02NzA1PUJQRl9DQUxMXzQoYnBmX3NrYl9maWJfbG9va3VwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02NzI0LVxcdHN3aXRjaCAocGFyYW1zLVxcdTAwM2VmYW1pbHkpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzo2NzI1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY3MjYtXFx0Y2FzZSBBRl9JTkVUOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjcyOS0jZW5kaWZcXG5uZXQvY29yZS9maWx0ZXIuYzo2NzMwOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY3MzEtXFx0Y2FzZSBBRl9JTkVUNjpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTY4NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX2NoZWNrX210dV9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY4NzctXFxubmV0L2NvcmUvZmlsdGVyLmM6Njg3ODojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy02ODc5LXN0YXRpYyBpbnQgYnBmX3B1c2hfc2VnNl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgdHlwZSwgdm9pZCAqaGRyLCB1MzIgbGVuKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjkxMi1cXG5uZXQvY29yZS9maWx0ZXIuYzo2OTEzOiNpZiBJU19FTkFCTEVEKENPTkZJR19MV1RVTk5FTF9CUEYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjkxNC1zdGF0aWMgaW50IGJwZl9wdXNoX2lwX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmhkciwgdTMyIGxlbixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTY5MjE9QlBGX0NBTExfNChicGZfbHd0X2luX3B1c2hfZW5jYXAsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCB0eXBlLCB2b2lkICosIGhkcixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY5MjQtXFx0c3dpdGNoICh0eXBlKSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6NjkyNTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy02OTI2LVxcdGNhc2UgQlBGX0xXVF9FTkNBUF9TRUc2Olxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjkyOS0jZW5kaWZcXG5uZXQvY29yZS9maWx0ZXIuYzo2OTMwOiNpZiBJU19FTkFCTEVEKENPTkZJR19MV1RVTk5FTF9CUEYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjkzMS1cXHRjYXNlIEJQRl9MV1RfRU5DQVBfSVA6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02OTM5PUJQRl9DQUxMXzQoYnBmX2x3dF94bWl0X3B1c2hfZW5jYXAsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCB0eXBlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjk0Mi1cXHRzd2l0Y2ggKHR5cGUpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzo2OTQzOiNpZiBJU19FTkFCTEVEKENPTkZJR19MV1RVTk5FTF9CUEYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjk0NC1cXHRjYXNlIEJQRl9MV1RfRU5DQVBfSVA6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02OTYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF94bWl0X3B1c2hfZW5jYXBfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02OTcxLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjY5NzI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjk3My1CUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlcywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG9mZnNldCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcxNTY9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3NlZzZfYWRqdXN0X3NyaF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNjUtXFxubmV0L2NvcmUvZmlsdGVyLmM6NzE2NjojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy03MTY3LXN0YXRpYyBzdHJ1Y3Qgc29jayAqc2tfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxODUtXFx0XFx0XFx0XFx0XFx0ICAgICAgIGRpZiwgc2RpZiwgTlVMTCk7XFxubmV0L2NvcmUvZmlsdGVyLmM6NzE4NjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy03MTg3LVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03ODM5PUJQRl9DQUxMXzUoYnBmX3RjcF9jaGVja19zeW5jb29raWUsIHN0cnVjdCBzb2NrICosIHNrLCB2b2lkICosIGlwaCwgdTMyLCBpcGhfbGVuLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzg0MS17XFxubmV0L2NvcmUvZmlsdGVyLmM6Nzg0MjojaWZkZWYgQ09ORklHX1NZTl9DT09LSUVTXFxubmV0L2NvcmUvZmlsdGVyLmMtNzg0My1cXHRpbnQgcmV0O1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzg3NC1cXG5uZXQvY29yZS9maWx0ZXIuYzo3ODc1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTc4NzYtXFx0Y2FzZSA2Olxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzkxMj1CUEZfQ0FMTF81KGJwZl90Y3BfZ2VuX3N5bmNvb2tpZSwgc3RydWN0IHNvY2sgKiwgc2ssIHZvaWQgKiwgaXBoLCB1MzIsIGlwaF9sZW4sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03OTE0LXtcXG5uZXQvY29yZS9maWx0ZXIuYzo3OTE1OiNpZmRlZiBDT05GSUdfU1lOX0NPT0tJRVNcXG5uZXQvY29yZS9maWx0ZXIuYy03OTE2LVxcdHUzMiBjb29raWU7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03OTQ0LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjc5NDU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNzk0Ni1cXHRjYXNlIDY6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04MjcyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9zZXRfdHN0YW1wX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODI4MC1cXG5uZXQvY29yZS9maWx0ZXIuYzo4MjgxOiNpZmRlZiBDT05GSUdfU1lOX0NPT0tJRVNcXG5uZXQvY29yZS9maWx0ZXIuYy04MjgyLUJQRl9DQUxMXzMoYnBmX3RjcF9yYXdfZ2VuX3N5bmNvb2tpZV9pcHY0LCBzdHJ1Y3QgaXBoZHIgKiwgaXBoLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODMwOD1CUEZfQ0FMTF8zKGJwZl90Y3BfcmF3X2dlbl9zeW5jb29raWVfaXB2Niwgc3RydWN0IGlwdjZoZHIgKiwgaXBoLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODMxMC17XFxubmV0L2NvcmUvZmlsdGVyLmM6ODMxMTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy04MzEyLVxcdGNvbnN0IHUxNiBtc3NfY2xhbXAgPSBJUFY2X01JTl9NVFUgLSBzaXplb2Yoc3RydWN0IHRjcGhkcikgLVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODM2MD1CUEZfQ0FMTF8yKGJwZl90Y3BfcmF3X2NoZWNrX3N5bmNvb2tpZV9pcHY2LCBzdHJ1Y3QgaXB2NmhkciAqLCBpcGgsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04MzYyLXtcXG5uZXQvY29yZS9maWx0ZXIuYzo4MzYzOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTgzNjQtXFx0aWYgKF9fY29va2llX3Y2X2NoZWNrKGlwaCwgdGgpIFxcdTAwM2UgMClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg0NjM9c29ja19hZGRyX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04NDg1LVxcdFxcdHJldHVybiBcXHUwMDI2YnBmX2V2ZW50X291dHB1dF9kYXRhX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg0ODY6I2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmMtODQ4Ny1cXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04NTcyPWNnX3NrYl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODU4OC1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za2JfZXZlbnRfb3V0cHV0X3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg1ODk6I2lmZGVmIENPTkZJR19TT0NLX0NHUk9VUF9EQVRBXFxubmV0L2NvcmUvZmlsdGVyLmMtODU5MC1cXHRjYXNlIEJQRl9GVU5DX3NrYl9jZ3JvdXBfaWQ6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04NTk4LSNlbmRpZlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg1OTk6I2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmMtODYwMC1cXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04NjIxPXRjX2Nsc19hY3RfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3MDMtXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tfc3RvcmFnZV9kZWxldGVfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmM6ODcwNDojaWZkZWYgQ09ORklHX1hGUk1cXG5uZXQvY29yZS9maWx0ZXIuYy04NzA1LVxcdGNhc2UgQlBGX0ZVTkNfc2tiX2dldF94ZnJtX3N0YXRlOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODcwNy0jZW5kaWZcXG5uZXQvY29yZS9maWx0ZXIuYzo4NzA4OiNpZmRlZiBDT05GSUdfQ0dST1VQX05FVF9DTEFTU0lEXFxubmV0L2NvcmUvZmlsdGVyLmMtODcwOS1cXHRjYXNlIEJQRl9GVU5DX3NrYl9jZ3JvdXBfY2xhc3NpZDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3MTEtI2VuZGlmXFxubmV0L2NvcmUvZmlsdGVyLmM6ODcxMjojaWZkZWYgQ09ORklHX1NPQ0tfQ0dST1VQX0RBVEFcXG5uZXQvY29yZS9maWx0ZXIuYy04NzEzLVxcdGNhc2UgQlBGX0ZVTkNfc2tiX2Nncm91cF9pZDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3MTctI2VuZGlmXFxubmV0L2NvcmUvZmlsdGVyLmM6ODcxODojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy04NzE5LVxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3NDAtXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tiX3NldF90c3RhbXBfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmM6ODc0MTojaWZkZWYgQ09ORklHX1NZTl9DT09LSUVTXFxubmV0L2NvcmUvZmlsdGVyLmMtODc0Mi1cXHRjYXNlIEJQRl9GVU5DX3RjcF9yYXdfZ2VuX3N5bmNvb2tpZV9pcHY0Olxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODc1OD14ZHBfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3ODYtXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfeGRwX2NoZWNrX210dV9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4Nzg3OiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3ODgtXFx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdWRwOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODc5OS1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl90Y3BfZ2VuX3N5bmNvb2tpZV9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4ODAwOiNpZmRlZiBDT05GSUdfU1lOX0NPT0tJRVNcXG5uZXQvY29yZS9maWx0ZXIuYy04ODAxLVxcdGNhc2UgQlBGX0ZVTkNfdGNwX3Jhd19nZW5fc3luY29va2llX2lwdjQ6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04ODE0LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjg4MTU6I2lmIElTX01PRFVMRShDT05GSUdfTkZfQ09OTlRSQUNLKSBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg4MTYtXFx0LyogVGhlIG5mX2Nvbm5fX19pbml0IHR5cGUgaXMgdXNlZCBpbiB0aGUgTkZfQ09OTlRSQUNLIGtmdW5jcy4gVGhlXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04ODMzPXNvY2tfb3BzX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04ODYxLVxcdFxcdHJldHVybiBcXHUwMDI2YnBmX2dldF9uZXRuc19jb29raWVfc29ja19vcHNfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmM6ODg2MjojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy04ODYzLVxcdGNhc2UgQlBGX0ZVTkNfbG9hZF9oZHJfb3B0Olxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODkxNT1za19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg5MzktXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tiX2V2ZW50X291dHB1dF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4OTQwOiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTg5NDEtXFx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9OTA0ND1sd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy05MDQ2LVxcdHN3aXRjaCAoZnVuY19pZCkge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjkwNDc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXFxubmV0L2NvcmUvZmlsdGVyLmMtOTA0OC1cXHRjYXNlIEJQRl9GVU5DX2x3dF9zZWc2X3N0b3JlX2J5dGVzOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9OTkyMz1zdGF0aWMgc3RydWN0IGJwZl9pbnNuICpicGZfY29udmVydF90c3RhbXBfdHlwZV9yZWFkKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqc2ksXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy05OTMzLVxcdCppbnNuKysgPSBCUEZfQUxVMzJfSU1NKEJQRl9BTkQsIHZhbHVlX3JlZywgU0tCX1RTVEFNUF9UWVBFX01BU0spO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjk5MzQ6I2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRFxcbm5ldC9jb3JlL2ZpbHRlci5jLTk5MzUtXFx0Kmluc24rKyA9IEJQRl9BTFUzMl9JTU0oQlBGX1JTSCwgdmFsdWVfcmVnLCBTS0JfVFNUQU1QX1RZUEVfUlNISUZUKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTk5NDM9c3RhdGljIHN0cnVjdCBicGZfaW5zbiAqYnBmX2NvbnZlcnRfc2hpbmZvX2FjY2VzcyhfX3U4IGRzdF9yZWcsIF9fdTggc2tiX3JlZyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTk5NDYtXFx0Lyogc2ktXFx1MDAzZWRzdF9yZWcgPSBza2Jfc2hpbmZvKFNLQik7ICovXFxubmV0L2NvcmUvZmlsdGVyLmM6OTk0NzojaWZkZWYgTkVUX1NLQlVGRl9EQVRBX1VTRVNfT0ZGU0VUXFxubmV0L2NvcmUvZmlsdGVyLmMtOTk0OC1cXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX0ZJRUxEX1NJWkVPRihzdHJ1Y3Qgc2tfYnVmZiwgZW5kKSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTk5NjQ9c3RhdGljIHN0cnVjdCBicGZfaW5zbiAqYnBmX2NvbnZlcnRfdHN0YW1wX3JlYWQoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtOTk3MC1cXG5uZXQvY29yZS9maWx0ZXIuYzo5OTcxOiNpZmRlZiBDT05GSUdfTkVUX1hHUkVTU1xcbm5ldC9jb3JlL2ZpbHRlci5jLTk5NzItXFx0LyogSWYgdGhlIHRzdGFtcF90eXBlIGlzIHJlYWQsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz05OTk5PXN0YXRpYyBzdHJ1Y3QgYnBmX2luc24gKmJwZl9jb252ZXJ0X3RzdGFtcF93cml0ZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMDAwNS1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMDAwNjojaWZkZWYgQ09ORklHX05FVF9YR1JFU1NcXG5uZXQvY29yZS9maWx0ZXIuYy0xMDAwNy1cXHQvKiBJZiB0aGUgdHN0YW1wX3R5cGUgaXMgcmVhZCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEwMDM3PXN0YXRpYyB1MzIgYnBmX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTAxMTItXFx0XFx0Kmluc24rKyA9IEJQRl9BTFUzMl9JTU0oQlBGX0FORCwgc2ktXFx1MDAzZWRzdF9yZWcsIFBLVF9UWVBFX01BWCk7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTAxMTM6I2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwMTE0LVxcdFxcdCppbnNuKysgPSBCUEZfQUxVMzJfSU1NKEJQRl9SU0gsIHNpLVxcdTAwM2Vkc3RfcmVnLCA1KTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwMjEwLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IF9fc2tfYnVmZiwgdGNfaW5kZXgpOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjEwMjExOiNpZmRlZiBDT05GSUdfTkVUX1NDSEVEXFxubmV0L2NvcmUvZmlsdGVyLmMtMTAyMTItXFx0XFx0aWYgKHR5cGUgPT0gQlBGX1dSSVRFKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTAyMjktXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgX19za19idWZmLCBuYXBpX2lkKTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMDIzMDojaWYgZGVmaW5lZChDT05GSUdfTkVUX1JYX0JVU1lfUE9MTClcXG5uZXQvY29yZS9maWx0ZXIuYy0xMDIzMS1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwMjc2LVxcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IF9fc2tfYnVmZiwgcmVtb3RlX2lwNlszXSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTAyNzc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTAyNzgtXFx0XFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMDI5Ni1cXHQgICAgIG9mZnNldG9mKHN0cnVjdCBfX3NrX2J1ZmYsIGxvY2FsX2lwNlszXSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTAyOTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTAyOTgtXFx0XFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMDMyNS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIDIsIHRhcmdldF9zaXplKSk7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTAzMjY6I2lmbmRlZiBfX0JJR19FTkRJQU5fQklURklFTERcXG5uZXQvY29yZS9maWx0ZXIuYy0xMDMyNy1cXHRcXHQqaW5zbisrID0gQlBGX0FMVTMyX0lNTShCUEZfTFNILCBzaS1cXHUwMDNlZHN0X3JlZywgMTYpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTA0MDM9dTMyIGJwZl9zb2NrX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTA0OTItXFx0Y2FzZSBicGZfY3R4X3JhbmdlX3RpbGwoc3RydWN0IGJwZl9zb2NrLCBzcmNfaXA2WzBdLCBzcmNfaXA2WzNdKTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMDQ5MzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy0xMDQ5NC1cXHRcXHRvZmYgPSBzaS1cXHUwMDNlb2ZmO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTA1MTAtXFx0Y2FzZSBicGZfY3R4X3JhbmdlX3RpbGwoc3RydWN0IGJwZl9zb2NrLCBkc3RfaXA2WzBdLCBkc3RfaXA2WzNdKTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMDUxMTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy0xMDUxMi1cXHRcXHRvZmYgPSBzaS1cXHUwMDNlb2ZmO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTA1NTYtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2ssIHJ4X3F1ZXVlX21hcHBpbmcpOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjEwNTU3OiNpZmRlZiBDT05GSUdfU09DS19SWF9RVUVVRV9NQVBQSU5HXFxubmV0L2NvcmUvZmlsdGVyLmMtMTA1NTgtXFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTA4MTU9c3RhdGljIHUzMiBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExMDIwLVxcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgcmVtb3RlX2lwNlszXSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTEwMjE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTEwMjItXFx0XFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTA0MS1cXHQgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIGxvY2FsX2lwNlszXSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTEwNDI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTEwNDMtXFx0XFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTA2OS1cXHRcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc29ja19jb21tb24sIHNrY19kcG9ydCkpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjExMDcwOiNpZm5kZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxEXFxubmV0L2NvcmUvZmlsdGVyLmMtMTEwNzEtXFx0XFx0Kmluc24rKyA9IEJQRl9BTFUzMl9JTU0oQlBGX0xTSCwgc2ktXFx1MDAzZWRzdF9yZWcsIDE2KTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTExMzUwPXN0YXRpYyB1MzIgc2tfbXNnX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTEzNTUtXFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTEzNTY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTEzNTctXFx0aW50IG9mZjtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNDEwLVxcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IHNrX21zZ19tZCwgcmVtb3RlX2lwNlszXSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE0MTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE0MTItXFx0XFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTQzMS1cXHQgICAgIG9mZnNldG9mKHN0cnVjdCBza19tc2dfbWQsIGxvY2FsX2lwNlszXSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE0MzI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE0MzMtXFx0XFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTQ1OS1cXHRcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc29ja19jb21tb24sIHNrY19kcG9ydCkpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjExNDYwOiNpZm5kZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxEXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE0NjEtXFx0XFx0Kmluc24rKyA9IEJQRl9BTFUzMl9JTU0oQlBGX0xTSCwgc2ktXFx1MDAzZWRzdF9yZWcsIDE2KTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTExNjU1PWludCBza19nZXRfZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IGxlbilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNjk3LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExNjk4OiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNjk5LXN0YXRpYyB2b2lkIGJwZl9pbml0X3JldXNlcG9ydF9rZXJuKHN0cnVjdCBza19yZXVzZXBvcnRfa2VybiAqcmV1c2Vfa2VybixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMDc2PXN0YXRpYyB1MzIgc2tfbG9va3VwX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxMTUtXFx0XFx0XFx0XFx0cmVtb3RlX2lwNlswXSwgcmVtb3RlX2lwNlszXSk6IHtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjExNjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjExNy1cXHRcXHRpbnQgb2ZmID0gc2ktXFx1MDAzZW9mZjtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTMxLVxcdFxcdFxcdFxcdGxvY2FsX2lwNlswXSwgbG9jYWxfaXA2WzNdKToge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTMyOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTMzLVxcdFxcdGludCBvZmYgPSBzaS1cXHUwMDNlb2ZmO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTIyMzQ9QlBGX0NBTExfMShicGZfc2tjX3RvX3RjcF90aW1ld2FpdF9zb2NrLCBzdHJ1Y3Qgc29jayAqLCBzaylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjQxLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjQyOiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjQzLVxcdGlmIChzayBcXHUwMDI2XFx1MDAyNiBzay1cXHUwMDNlc2tfcHJvdCA9PSBcXHUwMDI2dGNwX3Byb3QgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9USU1FX1dBSVQpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI0Ni1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjI0NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI0OC1cXHRpZiAoc2sgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3Byb3QgPT0gXFx1MDAyNnRjcHY2X3Byb3QgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9USU1FX1dBSVQpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjI2Mz1CUEZfQ0FMTF8xKGJwZl9za2NfdG9fdGNwX3JlcXVlc3Rfc29jaywgc3RydWN0IHNvY2sgKiwgc2spXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyNjQte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjY1OiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjY2LVxcdGlmIChzayBcXHUwMDI2XFx1MDAyNiBzay1cXHUwMDNlc2tfcHJvdCA9PSBcXHUwMDI2dGNwX3Byb3QgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9ORVdfU1lOX1JFQ1YpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI2OS1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjI3MDojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI3MS1cXHRpZiAoc2sgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3Byb3QgPT0gXFx1MDAyNnRjcHY2X3Byb3QgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9ORVdfU1lOX1JFQ1YpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjUwND1fX2JwZl9rZnVuYyBpbnQgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2soc3RydWN0IF9fc2tfYnVmZiAqcywgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI1MDYte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNTA3OiNpZiBJU19FTkFCTEVEKENPTkZJR19TWU5fQ09PS0lFUylcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjUwOC1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopcztcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTMyLVxcdFxcdGJyZWFrO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNTMzOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTM0LVxcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjczMz1fX2JwZl9rZnVuYyBpbnQgYnBmX2ljbXBfc2VuZChzdHJ1Y3QgX19za19idWZmICpza2JfY3R4LCBpbnQgdHlwZSwgaW50IGNvZGUpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjc0Ni1cXHRzd2l0Y2ggKHNrYi1cXHUwMDNlcHJvdG9jb2wpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjc0NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjc0OC1cXHRjYXNlIGh0b25zKEVUSF9QX0lQKToge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI3NjYtI2VuZGlmXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI3Njc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI3NjgtXFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KToge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMzoyMToxNi41OTU0MzE2NjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk2NDUxNDE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGJwZl9zb2NrX2Rlc3Ryb3kgUmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBob3cgYGJwZl9zb2NrX2Rlc3Ryb3lgIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBpdHMgcmVnaXN0cmF0aW9uLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgaXQncyByZWdpc3RlcmVkIHRocm91Z2ggQlRGIGtmdW5jcywgYW5kIHRoZSBsb2NhdGlvbiBwb2ludGVkIHRvIGlzIGBuZXQvY29yZS9maWx0ZXIuY2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgYSBjb21tb24gcGxhY2UgZm9yIG5ldHdvcmstcmVsYXRlZCBCUEYgaG9va3MuXG5cblNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCB0aGUgcmVnaXN0cmF0aW9uIHVzZXMgYEJURl9LRlVOQ1NfU1RBUlQoYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzKWAgYW5kIHRoYXQgYGJwZl9zb2NrX2Rlc3Ryb3lgIGl0c2VsZiBpcyBsaW5rZWQgdmlhIGBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfZGVzdHJveSlgLiBUaGlzIGlzIHN0YW5kYXJkIEJURi1iYXNlZCBmdW5jdGlvbiByZWdpc3RyYXRpb247IHRoZSBgQlRGX0lEX0ZMQUdTYCBtYWNybyBjbGVhcmx5IGFzc29jaWF0ZXMgdGhlIGZ1bmN0aW9uIHdpdGggYW4gSUQgdGhhdCB0aGUgQlBGIHZlcmlmaWVyIG9yIG90aGVyIHBhcnRzIG9mIHRoZSBCUEYgaW5mcmFzdHJ1Y3R1cmUgd2lsbCB1c2UuXG5cbk5vdywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzYCB3aXRoaW4gdGhpcyBmaWxlLiBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIHN0cnVjdHVyZSwgYGJwZl9za19pdGVyX2tmdW5jX2lkc2AsIGlzICp1c2VkKiBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGF0IHdpbGwgaWxsdW1pbmF0ZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgYnBmX3NvY2tfZGVzdHJveWAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2Ygc29ja2V0IGl0ZXJhdGlvbiBhbmQgQlBGIHByb2dyYW0gaW50ZXJhY3Rpb24gd2l0aGluIHRoZSBrZXJuZWwncyBuZXR3b3JrIHN0YWNrLiBVbmRlcnN0YW5kaW5nIHRoZSB1c2FnZSBjb250ZXh0IGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbidzIHJvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTU5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIxOjE5LjU1OTk0ODQxNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3OTYxODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0xMjkzOT1fX2JwZl9rZnVuY19lbmRfZGVmcygpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTQwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTQxOkJURl9LRlVOQ1NfU1RBUlQoYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTQyLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfc29ja19kZXN0cm95KVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTQzOkJURl9LRlVOQ1NfRU5EKGJwZl9za19pdGVyX2tmdW5jX2lkcylcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk0NC1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjk0NT1zdGF0aWMgaW50IHRyYWNpbmdfaXRlcl9maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NDYte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTQ3OlxcdGlmIChidGZfaWRfc2V0OF9jb250YWlucyhcXHUwMDI2YnBmX3NrX2l0ZXJfa2Z1bmNfaWRzLCBrZnVuY19pZCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk0OC1cXHQgICAgcHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX0lURVIpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjk1Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX3NrX2l0ZXJfa2Z1bmNfc2V0ID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTU0LVxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTU1OlxcdC5zZXQgICA9IFxcdTAwMjZicGZfc2tfaXRlcl9rZnVuY19pZHMsXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NTYtXFx0LmZpbHRlciA9IHRyYWNpbmdfaXRlcl9maWx0ZXIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIxOjE5LjYwNTc0OTQ2NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjI1MjU4MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBmdW5jdGlvbjpcblxuKipGaW5kaW5nIHRoZSBSZWdpc3RyYXRpb24gb2YgYGJwZl9za19pdGVyX2tmdW5jX3NldGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgYnBmX3NrX2l0ZXJfa2Z1bmNfc2V0YCBpcyBhY3R1YWxseSBkZWZpbmVkLCBvciBhdCBsZWFzdCBob3cgaXQncyBicm91Z2h0IGludG8gdGhlIHN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdHJhY2UgaXRzIHJlZ2lzdHJhdGlvbi4gV2hlcmUgZG9lcyB0aGUga2VybmVsIGtub3cgYWJvdXQgdGhpcyB0aGluZz8gSSBuZWVkIHRvIGZpbmQgdGhlIHBvaW50IHdoZXJlIGl0J3MgaG9va2VkIGludG8gdGhlIEJQRiBzdWJzeXN0ZW0sIG9yIG1heWJlIGV2ZW4ganVzdCBkZWNsYXJlZCBhcyBhIGtub3duIGtlcm5lbCBmdW5jdGlvbi4gSSdtIHRoaW5raW5nIEknbGwgbmVlZCB0byBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UsIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggdGhlIEJQRi1yZWxhdGVkIGRpcmVjdG9yaWVzLCB0byBmaW5kIHRoZSByZWdpc3RyYXRpb24gcG9pbnQuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHBhcnQgb2YgdGhlIEJQRiBpdGVyYXRvciBmdW5jdGlvbmFsaXR5LCBzbyB0aGF0IG5hcnJvd3MgdGhlIHNlYXJjaCBzb21ld2hhdC4gTGV0J3Mgc3RhcnQgZGlnZ2luZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjMwNDksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMzoyMToyMy44MzEwMTA5ODNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTg4NDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9za19pdGVyX2tmdW5jX3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9MTI5NDU9c3RhdGljIGludCB0cmFjaW5nX2l0ZXJfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NTItXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI5NTM6c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9za19pdGVyX2tmdW5jX3NldCA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk1NC1cXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyOTU5PXN0YXRpYyBpbnQgaW5pdF9zdWJzeXN0ZW0odm9pZClcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk2MC17XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI5NjE6XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcXHUwMDI2YnBmX3NrX2l0ZXJfa2Z1bmNfc2V0KTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk2Mi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIxOjIzLjg3ODIwNjI0NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1Nzk5ODcwNzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgU3ltYm9sIE1vZGlmaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBhIGZldyBrZXJuZWwgY29uZmlndXJhdGlvbnMg4oCTIHNwZWNpZmljYWxseSBgQlBGX1NZU0NBTExgIGFuZCBgREVCVUdfSU5GT19CVEZgLiBJIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIGZvciBCUEYga2Z1bmNzLCBCUEYgaXRlcmF0b3JzLCBhbmQgdGhlIGBpbmV0YCBzdGFjay4gU28sIHRoZSBiYXNlIHJlcXVpcmVtZW50cyBhcmUgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfREVCVUdfSU5GT19CVEZgLCBhbmQgYENPTkZJR19JTkVUYC5cblxuTm93LCBsZXQncyBsb29rIGF0IGBpbmV0X2Nza19saXN0ZW5fc3RvcGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0J3MgYWN0dWFsbHkgY29tcGlsZWQuIEFoLCByaWdodCwgaXQncyBpbiBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2AsIHdoaWNoIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19JTkVUYCBpcyBlbmFibGVkLiBNYWtlcyBzZW5zZS5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgcGF0Y2guIFRoZSBrZXkgc3ltYm9scyBtb2RpZmllZCBzZWVtIHRvIGJlOlxuMS4gIGBicGZfc29ja19kZXN0cm95YCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgXG4yLiAgYGluZXRfY3NrX2xpc3Rlbl9zdG9wYCBpbiBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2BcblxuSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGhvdyB3aWRlc3ByZWFkIHRoZXNlIGZ1bmN0aW9ucyBhcmUuIGBicGZfc29ja19kZXN0cm95YD8gRGVmaW5pdGVseSBub3QgdWJpcXVpdG91cy4gSXQncyBhIHZlcnkgc3BlY2lmaWMga2Z1bmMgY2FsbGVkIHdoZW4gQlBGIGl0ZXJhdG9ycyBhcmUgdXNlZCB0byBkZXN0cm95IHNvY2tldHMuIFdoYXQgYWJvdXQgYGluZXRfY3NrX2xpc3Rlbl9zdG9wYD8gT2theSwgdGhhdCdzIGNhbGxlZCB3aGVuIGEgbGlzdGVuaW5nIGNvbm5lY3Rpb24gc29ja2V0IHN0b3BzIGxpc3RlbmluZzsgdGhpbmdzIGxpa2UgYHRjcF9jbG9zZWAgb24gYSBsaXN0ZW5pbmcgc29ja2V0IG9yIGB0Y3BfYWJvcnRgIGFuZCBgdGNwX2RpYWdfZGVzdHJveWAuIElzIGl0IHViaXF1aXRvdXM/IE5vLCBpdCdzIHNwZWNpZmljIHRvIHN0b3BwaW5nL2Nsb3NpbmcgYSBsaXN0ZW5pbmcgc29ja2V0IGFuZCBhYm9ydGluZyBpdHMgcGVuZGluZyBjb25uZWN0aW9uIHF1ZXVlLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgcHVycG9zZSBvZiBgaGFzX2N1cnJlbnRfYnBmX2N0eCgpYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1MjIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjE6MjkuNjc4MDc5NTM3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEzNjkyNTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhc19jdXJyZW50X2JwZl9jdHhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0zMjAxPXN0YXRpYyBpbmxpbmUgYm9vbCB1bnByaXZpbGVnZWRfZWJwZl9lbmFibGVkKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTMyMTAtICovXFxuaW5jbHVkZS9saW51eC9icGYuaDozMjExOnN0YXRpYyBpbmxpbmUgYm9vbCBoYXNfY3VycmVudF9icGZfY3R4KHZvaWQpXFxuaW5jbHVkZS9saW51eC9icGYuaC0zMjEyLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9MzUzMT1zdGF0aWMgaW5saW5lIGJvb2wgdW5wcml2aWxlZ2VkX2VicGZfZW5hYmxlZCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNTM1LVxcbmluY2x1ZGUvbGludXgvYnBmLmg6MzUzNjpzdGF0aWMgaW5saW5lIGJvb2wgaGFzX2N1cnJlbnRfYnBmX2N0eCh2b2lkKVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzUzNy17XFxuLS1cXG5uZXQvY29yZS9zb2NrLmM9MTE0ND12b2lkIHNvY2tvcHRfbG9ja19zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9jb3JlL3NvY2suYy0xMTQ5LVxcdCAqL1xcbm5ldC9jb3JlL3NvY2suYzoxMTUwOlxcdGlmIChoYXNfY3VycmVudF9icGZfY3R4KCkpXFxubmV0L2NvcmUvc29jay5jLTExNTEtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2NvcmUvc29jay5jPTExNTc9dm9pZCBzb2Nrb3B0X3JlbGVhc2Vfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc29jay5jLTExNTgte1xcbm5ldC9jb3JlL3NvY2suYzoxMTU5OlxcdGlmIChoYXNfY3VycmVudF9icGZfY3R4KCkpXFxubmV0L2NvcmUvc29jay5jLTExNjAtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2NvcmUvc29jay5jPTExNjY9Ym9vbCBzb2Nrb3B0X25zX2NhcGFibGUoc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucywgaW50IGNhcClcXG5uZXQvY29yZS9zb2NrLmMtMTE2Ny17XFxubmV0L2NvcmUvc29jay5jOjExNjg6XFx0cmV0dXJuIGhhc19jdXJyZW50X2JwZl9jdHgoKSB8fCBuc19jYXBhYmxlKG5zLCBjYXApO1xcbm5ldC9jb3JlL3NvY2suYy0xMTY5LX1cXG4tLVxcbm5ldC9jb3JlL3NvY2suYz0xMTcyPWJvb2wgc29ja29wdF9jYXBhYmxlKGludCBjYXApXFxubmV0L2NvcmUvc29jay5jLTExNzMte1xcbm5ldC9jb3JlL3NvY2suYzoxMTc0OlxcdHJldHVybiBoYXNfY3VycmVudF9icGZfY3R4KCkgfHwgY2FwYWJsZShjYXApO1xcbm5ldC9jb3JlL3NvY2suYy0xMTc1LX1cXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTQ2Nj12b2lkIGluZXRfY3NrX2xpc3Rlbl9zdG9wKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTUyMi1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjE1MjM6XFx0XFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNTI0LVxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxubmV0L2lwdjQvdGNwLmM9MzgzNz1pbnQgZG9fdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMzg2MC1cXHRcXHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XFxubmV0L2lwdjQvdGNwLmM6Mzg2MTpcXHRcXHRlcnIgPSB0Y3Bfc2V0X2Nvbmdlc3Rpb25fY29udHJvbChzaywgbmFtZSwgIWhhc19jdXJyZW50X2JwZl9jdHgoKSxcXG5uZXQvaXB2NC90Y3AuYy0zODYyLVxcdFxcdFxcdFxcdFxcdFxcdCBzb2Nrb3B0X25zX2NhcGFibGUoc29ja19uZXQoc2spLVxcdTAwM2V1c2VyX25zLFxcbi0tXFxubmV0L2lwdjQvdGNwLmM9NTExNT1pbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycilcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTUxMzctXFx0LyogQlBGIGNvbnRleHQgZW5zdXJlcyBzb2NrIGxvY2tpbmcuICovXFxubmV0L2lwdjQvdGNwLmM6NTEzODpcXHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcXG5uZXQvaXB2NC90Y3AuYy01MTM5LVxcdFxcdC8qIERvbid0IHJhY2Ugd2l0aCB1c2Vyc3BhY2Ugc29ja2V0IGNsb3NlcyBzdWNoIGFzIHRjcF9jbG9zZS4gKi9cXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTUxNDMtXFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHtcXG5uZXQvaXB2NC90Y3AuYzo1MTQ0OlxcdFxcdGlmICghaGFzX2N1cnJlbnRfYnBmX2N0eCgpKVxcbm5ldC9pcHY0L3RjcC5jLTUxNDUtXFx0XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTUxNjMtXFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxubmV0L2lwdjQvdGNwLmM6NTE2NDpcXHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcXG5uZXQvaXB2NC90Y3AuYy01MTY1LVxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0zMTIxPWludCB1ZHBfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKVxcbm5ldC9pcHY0L3VkcC5jLTMxMjIte1xcbm5ldC9pcHY0L3VkcC5jOjMxMjM6XFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXFxubmV0L2lwdjQvdWRwLmMtMzEyNC1cXHRcXHRsb2NrX3NvY2soc2spO1xcbi0tXFxubmV0L2lwdjQvdWRwLmMtMzEzNi1vdXQ6XFxubmV0L2lwdjQvdWRwLmM6MzEzNzpcXHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcXG5uZXQvaXB2NC91ZHAuYy0zMTM4LVxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIxOjMxLjM5MTc3OTAyMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDkyNzY1NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgZXZlcnl0aGluZyBhcHBlYXJzIHRvIGJlIGluIG9yZGVyIGhlcmUuIFRoZSBjaGFuZ2VzIGFyZSBzdHJhaWdodGZvcndhcmQgYW5kIGludGVybmFsbHkgY29uc2lzdGVudC4gTGV0J3MgcnVuIHRocm91Z2ggaXQgb25lIGxhc3QgdGltZSB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cbkZpcnN0LCB0aGUgY29yZSBtb2RpZmljYXRpb25zIGFyZSBjbGVhcjogd2UncmUgZGVhbGluZyB3aXRoIGBicGZfc29ja19kZXN0cm95YCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIGFuZCBgaW5ldF9jc2tfbGlzdGVuX3N0b3BgIGluIGBuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jYC4gVGhhdCdzIHRoZSBoZWFydCBvZiBpdC4gVGhlIFwiV29ydGhGdXp6aW5nXCIgZmxhZyBpcyBzZXQsIHdoaWNoIGlzIGEgZ29vZCBpbmRpY2F0b3IsIGFuZCB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmUgcHJlY2lzZWx5IHRob3NlOiBgYnBmX3NvY2tfZGVzdHJveWAgYW5kIGBpbmV0X2Nza19saXN0ZW5fc3RvcGAuXG5cblRoZW4sIHdlIGhhdmUgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zOiBgQlBGX1NZU0NBTExgLCBgREVCVUdfSU5GT19CVEZgLCBhbmQgYElORVRgLiBUaGlzIG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgY29udGV4dCBvZiBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBCUEYgaW50ZXJhY3Rpb25zLiBMZXQgbWUgcXVpY2tseSBzY2FuIGZvciBhbnkgb3RoZXIgdG91Y2hlZCBmdW5jdGlvbnM7IE5vcGUsIGp1c3QgdGhvc2UgdHdvIOKAkyBgYnBmX3NvY2tfZGVzdHJveWAgYW5kIGBpbmV0X2Nza19saXN0ZW5fc3RvcGAuIEdvb2QuIEFuZCB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5IGNoYW5nZXMgYXJlIGp1c3QgdGVzdC1yZWxhdGVkLCBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhlcmUuXG5cbk5vdywgdG8gc29saWRpZnkgdGhlIHJlYXNvbmluZzogVGhlIHBhdGNoJ3MgcHVycG9zZSBpcyB0byBhbGxvdyBgYnBmX3NvY2tfZGVzdHJveSgpYCB0byBoYW5kbGUgbm9uLWZ1bGwgc29ja2V0cywgbGlrZSB0aG9zZSBpbiBUSU1FX1dBSVQgc3RhdGUsIHVzaW5nIGBkaWFnX2Rlc3Ryb3lgIGNhbGxiYWNrcy4gQW5kIHdpdGggYGluZXRfY3NrX2xpc3Rlbl9zdG9wKClgLCB3ZSdyZSBieXBhc3NpbmcgYGNvbmRfcmVzY2hlZCgpYCB3aGVuIGl0J3MgcnVubmluZyBpbiBhIEJQRiBjb250ZXh0IHZpYSBgaGFzX2N1cnJlbnRfYnBmX2N0eCgpYC4gTWFrZXMgc2Vuc2UsIGNvbnNpZGVyaW5nIHRoZSBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBCUEYga2Z1bmMgZXhlY3V0aW9uIHBhdGhzIGFjY2Vzc2VkIHZpYSBCUEYgaXRlcmF0b3IgcHJvZ3JhbXMgYW5kIHNvY2tldCBzeXNjYWxscyB0aGF0IHRoZXNlIGNoYW5nZXMgbW9kaWZ5LlxuXG5BbHJpZ2h0LCB0aGF0J3MgdGhvcm91Z2guIEknbSBzYXRpc2ZpZWQuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU0OTcsIk91dHB1dFRva2VucyI6MTU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIxOjM2LjQ4NDU0ODMzMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NjkxODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc29ja19kZXN0cm95XCIsXG4gICAgXCJpbmV0X2Nza19saXN0ZW5fc3RvcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBicGZfc29ja19kZXN0cm95KCkgQlBGIGtmdW5jIHRvIHBlcm1pdCBkZXN0cm95aW5nIG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBzb2NrZXRzKSB0aGF0IGltcGxlbWVudCBkaWFnX2Rlc3Ryb3ksIGFuZCBhZGp1c3RzIGluZXRfY3NrX2xpc3Rlbl9zdG9wKCkgdG8gYXZvaWQgY2FsbGluZyBjb25kX3Jlc2NoZWQoKSB3aGlsZSBleGVjdXRpbmcgaW4gYSBCUEYgY29udGV4dC4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBCUEYgc29ja2V0IGl0ZXJhdGlvbi9kZXN0cnVjdGlvbiBwYXRocyB0aGF0IHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc29ja19kZXN0cm95XCIsXG4gICAgXCJpbmV0X2Nza19saXN0ZW5fc3RvcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBicGZfc29ja19kZXN0cm95KCkgQlBGIGtmdW5jIHRvIHBlcm1pdCBkZXN0cm95aW5nIG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBzb2NrZXRzKSB0aGF0IGltcGxlbWVudCBkaWFnX2Rlc3Ryb3ksIGFuZCBhZGp1c3RzIGluZXRfY3NrX2xpc3Rlbl9zdG9wKCkgdG8gYXZvaWQgY2FsbGluZyBjb25kX3Jlc2NoZWQoKSB3aGlsZSBleGVjdXRpbmcgaW4gYSBCUEYgY29udGV4dC4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBCUEYgc29ja2V0IGl0ZXJhdGlvbi9kZXN0cnVjdGlvbiBwYXRocyB0aGF0IHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjE6MzYuNTYxMjQ3OTE0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTI1NTQzNDc4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIxOjM2LjU2MTk3NTgzNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ1MjU0NzAyNTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX3NvY2tfZGVzdHJveSgpYCB0byBzdXBwb3J0IG5vbi1mdWxsIHNvY2tldHMgKGUuZy4sIFRDUCBUSU1FX1dBSVQgc29ja2V0cykgYnkgZ3VhcmRpbmcgdGhlIGBzay1cXHUwMDNlc2tfcHJvdG9jb2xgIGNoZWNrIHdpdGggYHNrX2Z1bGxzb2NrKClgLCBhbmQgdXBkYXRlcyBgaW5ldF9jc2tfbGlzdGVuX3N0b3AoKWAgdG8gYnlwYXNzIGBjb25kX3Jlc2NoZWQoKWAgd2hlbiBydW5uaW5nIHdpdGhpbiBhIEJQRiBleGVjdXRpb24gY29udGV4dCB0byBwcmV2ZW50IHNsZWVwaW5nIGluIGF0b21pYy9SQ1UgY29udGV4dHMuXFxuXFxuVGhlc2UgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBjb3B5LXRvLXVzZXIgb3BlcmF0aW9ucywgb3IgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBwb3RlbnRpYWwgcmlza3MgcmVsYXRlZCB0byBzb2NrZXQgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgZXhlY3V0aW9uIGNvbnRleHQgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyBhbmQgZGVidWdnZXJzIChLQVNBTiBmb3IgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcywgTE9DS0RFUCAvIERFQlVHX0FUT01JQ19TTEVFUCBmb3Igc2xlZXBpbmcgaW4gYXRvbWljIGNvbnRleHQpLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzODhkOTU1ODgxM2FmNjQ4ZmY5NDJjNjdhZmUxYjY1ZGQxY2JjZDU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTM6MjA6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCA4NTEzMTY3YTg1OGE4Li5kOWM0YTEwOGRkYjVlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtMTI5MTEsOCArMTI5MTEsOSBAQCBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4gICogQHNvY2s6IFBvaW50ZXIgdG8gc29ja2V0IHRvIGJlIGRlc3Ryb3llZFxuICAqXG4gICogUmV0dXJuOlxuLSAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVQUk9UT05PU1VQUE9SVCwgRUlOVkFMLlxuLSAqIEVQUk9UT05PU1VQUE9SVCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC5cbisgKiBPbiBlcnJvciwgbWF5IHJldHVybiBFT1BOT1RTVVBQLCBvciB3aGF0ZXZlciB0aGUgcHJvdG9jb2wgc3BlY2lmaWNcbisgKiBkZXN0cm95IGhhbmRsZXIgcmV0dXJucy5cbisgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxuICAqIDAgb3RoZXJ3aXNlXG4gICovXG4gX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxuQEAgLTEyOTI0LDggKzEyOTI1LDEyIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaylcbiBcdCAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHRcbiBcdCAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuXG4gXHQgKi9cbi1cdGlmICghc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3kgfHwgKHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0XHQgICBzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUCkpXG4rXHRpZiAoIXNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95KVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRpZiAoc2tfZnVsbHNvY2soc2spIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4gXHRyZXR1cm4gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbmluZGV4IDYyNTc0NTliY2VlMjQuLjZhMzBmMTEzODQ1NDcgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG4rKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG5AQCAtMTUyMCw3ICsxNTIwLDggQEAgdm9pZCBpbmV0X2Nza19saXN0ZW5fc3RvcChzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFx0XHRzb2NrX3B1dChjaGlsZCk7XG4gXG4tXHRcdGNvbmRfcmVzY2hlZCgpO1xuK1x0XHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcbitcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdH1cbiBcdGlmIChxdWV1ZS1cdTAwM2VmYXN0b3BlbnEucnNrcV9yc3RfaGVhZCkge1xuIFx0XHQvKiBGcmVlIGFsbCB0aGUgcmVxcyBxdWV1ZWQgaW4gcnNrcV9yc3RfaGVhZC4gKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXG5pbmRleCA5YzExOTM4ZmU1OTdkLi43OGQ2NDJhMDJiZGI2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXG5AQCAtMSw0ICsxLDUgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2JwZi9icGZfZW5kaWFuLmhcdTAwM2VcbiBcbkBAIC0xMTAsNiArMTExLDEyMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3RjcF9zZXJ2ZXIoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxuIFx0XHRjbG9zZShzZXJ2KTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdGVzdF90Y3BfbGlzdGVuX3BlbmRpbmcoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxuK3tcbitcdGludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIGFjY2VwdF9zZXJ2ID0gLTEsIG4sIHNlcnZfcG9ydDtcbitcdHN0cnVjdCBwb2xsZmQgcGZkID0geyAuZXZlbnRzID0gUE9MTElOIH07XG4rXHRjaGFyIGJ1ZlsxXTtcbitcbitcdHNlcnYgPSBzdGFydF9zZXJ2ZXIoQUZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBOVUxMLCAwLCAwKTtcbitcdGlmICghQVNTRVJUX0dFKHNlcnYsIDAsIFwic3RhcnRfc2VydmVyXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRzZXJ2X3BvcnQgPSBnZXRfc29ja2V0X2xvY2FsX3BvcnQoc2Vydik7XG4rXHRpZiAoIUFTU0VSVF9HRShzZXJ2X3BvcnQsIDAsIFwiZ2V0X3NvY2tfbG9jYWxfcG9ydFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlc2Vydl9wb3J0ID0gKF9fYmUxNilzZXJ2X3BvcnQ7XG4rXG4rXHQvKlxuK1x0ICogQ29ubmVjdCBidXQgbmV2ZXIgYWNjZXB0LCBzbyB0aGUgY2hpbGQgc2l0cyBpbiB0aGUgYWNjZXB0IHF1ZXVlXG4rXHQgKiBvZiB0aGUgbGlzdGVuZXIuIFdhaXQgdW50aWwgaXQncyBhY3R1YWxseSB0aGVyZS5cbitcdCAqL1xuK1x0Y2xpZW4gPSBjb25uZWN0X3RvX2ZkKHNlcnYsIDApO1xuK1x0aWYgKCFBU1NFUlRfR0UoY2xpZW4sIDAsIFwiY29ubmVjdF90b19mZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0cGZkLmZkID0gc2VydjtcbitcdGlmICghQVNTRVJUX0VRKHBvbGwoXHUwMDI2cGZkLCAxLCAtMSksIDEsIFwicG9sbCBsaXN0ZW5lclwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LyogUnVuIGl0ZXJhdG9yIHByb2dyYW0gdGhhdCBkZXN0cm95cyBzZXJ2ZXIgc29ja2V0cy4gKi9cbitcdHN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLVx1MDAzZXByb2dzLml0ZXJfdGNwNl9zZXJ2ZXIpO1xuK1xuK1x0YWNjZXB0X3NlcnYgPSBhY2NlcHQoc2VydiwgTlVMTCwgTlVMTCk7XG4rXHRpZiAoIUFTU0VSVF9MVChhY2NlcHRfc2VydiwgMCwgXCJhY2NlcHQgb24gZGVzdHJveWVkIGxpc3RlbmVyXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVJTlZBTCwgXCJlcnJvciBjb2RlIG9uIGRlc3Ryb3llZCBsaXN0ZW5lclwiKTtcbitcbitcdC8qIFRoZSB1bmFjY2VwdGVkIGNoaWxkIHdhcyByZXNldCBhbG9uZyB3aXRoIHRoZSBsaXN0ZW5lci4gKi9cbitcdG4gPSByZWN2KGNsaWVuLCBidWYsIHNpemVvZihidWYpLCAwKTtcbitcdGlmICghQVNTRVJUX0xUKG4sIDAsIFwiY2xpZW50IHJlY3Ygb24gcmVzZXQgY2hpbGRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdEFTU0VSVF9FUShlcnJubywgRUNPTk5SRVNFVCwgXCJlcnJvciBjb2RlIG9uIHJlc2V0IGNoaWxkXCIpO1xuK1xuK2NsZWFudXA6XG4rXHRpZiAoY2xpZW4gIT0gLTEpXG4rXHRcdGNsb3NlKGNsaWVuKTtcbitcdGlmIChhY2NlcHRfc2VydiAhPSAtMSlcbitcdFx0Y2xvc2UoYWNjZXB0X3NlcnYpO1xuK1x0aWYgKHNlcnYgIT0gLTEpXG4rXHRcdGNsb3NlKHNlcnYpO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X3RjcF90aW1ld2FpdChzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpXG4re1xuK1x0aW50IHNlcnYgPSAtMSwgY2xpZW4gPSAtMSwgYWNjZXB0X3NlcnYgPSAtMSwgbjtcbitcdHN0cnVjdCB0aW1ldmFsIHR2ID0ge307XG4rXHRjaGFyIGJ1ZlsxXTtcbitcbitcdHNlcnYgPSBzdGFydF9zZXJ2ZXIoQUZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBOVUxMLCAwLCAwKTtcbitcdGlmICghQVNTRVJUX0dFKHNlcnYsIDAsIFwic3RhcnRfc2VydmVyXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRjbGllbiA9IGNvbm5lY3RfdG9fZmQoc2VydiwgMCk7XG4rXHRpZiAoIUFTU0VSVF9HRShjbGllbiwgMCwgXCJjb25uZWN0X3RvX2ZkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRhY2NlcHRfc2VydiA9IGFjY2VwdChzZXJ2LCBOVUxMLCBOVUxMKTtcbitcdGlmICghQVNTRVJUX0dFKGFjY2VwdF9zZXJ2LCAwLCBcInNlcnYgYWNjZXB0XCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKlxuK1x0ICogQWN0aXZlIGNsb3NlIGZyb20gdGhlIGNsaWVudCwgdGhlbiBjbG9zZSB0aGUgc2VydmVyIHNpZGUuIE9uY2VcbitcdCAqIHJlY3YoKSBzZWVzIEVPRiB0aGUgc2VydmVyIEZJTiBoYXMgYmVlbiBwcm9jZXNzZWQgYW5kIHRoZSBjbGllbnRcbitcdCAqIHNvY2sgaXMgaW4gVElNRV9XQUlULiBCbG9jayB3aXRob3V0IHRpbWVvdXQgc28gYSBsb2FkZWQgQ0kgYm94XG4rXHQgKiBjYW4ndCByYWNlIHVzLlxuK1x0ICovXG4rXHRpZiAoIUFTU0VSVF9PSyhzZXRzb2Nrb3B0KGNsaWVuLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgXHUwMDI2dHYsXG4rXHRcdFx0XHQgIHNpemVvZih0dikpLCBcImNsZWFyIHJjdnRpbWVvXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRpZiAoIUFTU0VSVF9PSyhzaHV0ZG93bihjbGllbiwgU0hVVF9XUiksIFwiY2xpZW50IHNodXRkb3duXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKlxuK1x0ICogTWFrZSBzdXJlIHRoZSBzZXJ2ZXIgaGFzIHNlZW4gdGhlIGNsaWVudCBGSU4gYmVmb3JlIGl0IGNsb3NlcyxcbitcdCAqIHNvIHRoZSB0d28gRklOcyBuZXZlciBjcm9zcy5cbitcdCAqL1xuK1x0biA9IHJlY3YoYWNjZXB0X3NlcnYsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xuK1x0aWYgKCFBU1NFUlRfRVEobiwgMCwgXCJzZXJ2ZXIgcmVjdiBFT0ZcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGNsb3NlKGFjY2VwdF9zZXJ2KTtcbitcdGFjY2VwdF9zZXJ2ID0gLTE7XG4rXG4rXHQvKiBibG9jayB1bnRpbCByZXR1cm4gRU9GICovXG4rXHRuID0gcmVjdihjbGllbiwgYnVmLCBzaXplb2YoYnVmKSwgMCk7XG4rXHRpZiAoIUFTU0VSVF9FUShuLCAwLCBcImNsaWVudCByZWN2IEVPRlwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LyogUnVuIGl0ZXJhdG9yIHByb2dyYW0gdGhhdCBkZXN0cm95cyB0aGUgdGltZXdhaXQgY2xpZW50IHNvY2suICovXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0d19mb3VuZCA9IDA7XG4rXHRzdGFydF9pdGVyX3NvY2tldHMoc2tlbC1cdTAwM2Vwcm9ncy5pdGVyX3RjcDZfdGltZXdhaXQpO1xuK1x0aWYgKCFBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZm91bmQsIDEsIFwidGltZXdhaXQgc29jayBmb3VuZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0QVNTRVJUX09LKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2Rlc3Ryb3lfZXJyLCBcImRlc3Ryb3kgdGltZXdhaXQgc29ja1wiKTtcbitcbitcdC8qIFRoZSBkZXN0cm95ZWQgdGltZXdhaXQgc29jayBtdXN0IGJlIGdvbmUuICovXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0d19mb3VuZCA9IDA7XG4rXHRzdGFydF9pdGVyX3NvY2tldHMoc2tlbC1cdTAwM2Vwcm9ncy5pdGVyX3RjcDZfdGltZXdhaXQpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kLCAwLCBcInRpbWV3YWl0IHNvY2sgZGVzdHJveWVkXCIpO1xuK1xuK2NsZWFudXA6XG4rXHRpZiAoY2xpZW4gIT0gLTEpXG4rXHRcdGNsb3NlKGNsaWVuKTtcbitcdGlmIChhY2NlcHRfc2VydiAhPSAtMSlcbitcdFx0Y2xvc2UoYWNjZXB0X3NlcnYpO1xuK1x0aWYgKHNlcnYgIT0gLTEpXG4rXHRcdGNsb3NlKHNlcnYpO1xuK31cbitcbiBzdGF0aWMgdm9pZCB0ZXN0X3VkcF9jbGllbnQoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxuIHtcbiBcdGludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIG4gPSAwO1xuQEAgLTIwNCw2ICszMjEsMTAgQEAgdm9pZCB0ZXN0X3NvY2tfZGVzdHJveSh2b2lkKVxuIFx0XHR0ZXN0X3RjcF9jbGllbnQoc2tlbCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInRjcF9zZXJ2ZXJcIikpXG4gXHRcdHRlc3RfdGNwX3NlcnZlcihza2VsKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidGNwX2xpc3Rlbl9wZW5kaW5nXCIpKVxuK1x0XHR0ZXN0X3RjcF9saXN0ZW5fcGVuZGluZyhza2VsKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidGNwX3RpbWV3YWl0XCIpKVxuK1x0XHR0ZXN0X3RjcF90aW1ld2FpdChza2VsKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidWRwX2NsaWVudFwiKSlcbiBcdFx0dGVzdF91ZHBfY2xpZW50KHNrZWwpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ1ZHBfc2VydmVyXCIpKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcbmluZGV4IDllMGJmN2E1NGNlYzkuLjBhODg4NzU0MzIxOGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcbkBAIC03LDYgKzcsOCBAQFxuICNpbmNsdWRlIFwiYnBmX3RyYWNpbmdfbmV0LmhcIlxuIFxuIF9fYmUxNiBzZXJ2X3BvcnQgPSAwO1xuK2ludCB0d19mb3VuZCA9IDA7XG4raW50IHR3X2Rlc3Ryb3lfZXJyID0gMDtcbiBcbiBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNrKSBfX2tzeW07XG4gXG5AQCAtMTAwLDYgKzEwMiwzNCBAQCBpbnQgaXRlcl90Y3A2X3NlcnZlcihzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcIml0ZXIvdGNwXCIpXG4raW50IGl0ZXJfdGNwNl90aW1ld2FpdChzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxuK3tcbitcdHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tfY29tbW9uID0gY3R4LVx1MDAzZXNrX2NvbW1vbjtcbitcdF9fdTY0ICp2YWw7XG4rXHRpbnQga2V5ID0gMDtcbitcbitcdGlmICghc2tfY29tbW9uKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChza19jb21tb24tXHUwMDNlc2tjX2ZhbWlseSAhPSBBRl9JTkVUNilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoIWJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2soc2tfY29tbW9uKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRjcF9jb25uX3NvY2tldHMsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXHQvKiBUaGUgdGltZXdhaXQgc29jayBpbmhlcml0cyB0aGUgY29va2llIG9mIHRoZSBjbG9zZWQgY2xpZW50IHNvY2suICovXG4rXHRpZiAoYnBmX2dldF9zb2NrZXRfY29va2llKHNrX2NvbW1vbikgIT0gKnZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHR0d19mb3VuZCsrO1xuK1x0dHdfZGVzdHJveV9lcnIgPSBicGZfc29ja19kZXN0cm95KHNrX2NvbW1vbik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4gXG4gU0VDKFwiaXRlci91ZHBcIilcbiBpbnQgaXRlcl91ZHA2X2NsaWVudChzdHJ1Y3QgYnBmX2l0ZXJfX3VkcCAqY3R4KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjE6MzYuNTYxOTc3MTI1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4MzIwNTk1NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIHRoYXQgd2FycmFudCBLTVNBTiBvciBpZiBzdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQIHdpbGwgY3V0IGl0LlxuXG5GaXJzdCwgSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgZGlmZi4gU3BlY2lmaWNhbGx5LCB0aGlzIGNoYW5nZSBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHdpdGhpbiB0aGUgYGJwZl9zb2NrX2Rlc3Ryb3lgIGZ1bmN0aW9uLiBIbW0sIGl0IGxvb2tzIGxpa2UgdGhleSd2ZSByZW1vdmVkIGEgY2hlY2sgYW5kIGFkZGVkIGEgbmV3IG9uZTpcblxuYGBgY1xuLVx0aWYgKCFzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveSB8fCAoc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRcdCAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKSlcbitcdGlmICghc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3kpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGlmIChza19mdWxsc29jayhzaykgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdHJldHVybiBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcbmBgYFxuXG5QcmV2aW91c2x5LCBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIHdhcyBiZWluZyBhY2Nlc3NlZCBvbiBhbnkgYHNvY2tfY29tbW9uYCBzdHJ1Y3R1cmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3YWl0IGEgc2Vjb25kLCBpc24ndCBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIHBvc3NpYmx5IHVuaW5pdGlhbGl6ZWQgaW4gY2VydGFpbiBgc29ja19jb21tb25gIHNjZW5hcmlvcz8gU3BlY2lmaWNhbGx5LCBmb3Igc29tZXRoaW5nIGxpa2UgYHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2tgLCB3aGljaCBpc24ndCBhIGZ1bGwgc29ja2V0LCBhY2Nlc3NpbmcgYHNrX3Byb3RvY29sYCBkaXJlY3RseSBjb3VsZCBiZSBkYW5nZXJvdXMuXG5cbkknbSB0aGlua2luZywgaXNuJ3QgYHN0cnVjdCBzb2NrX2NvbW1vbmAgc3VwcG9zZWQgdG8gaG9sZCBzb21lIG9mIHRoaXMgZXNzZW50aWFsIGluZm8gbGlrZSBgc2tjX3Byb3RgIG9yIGBza2NfZmFtaWx5YD8gSSdtIGdldHRpbmcgYSBsaXR0bGUgZnV6enkgaGVyZS4gRGlkIHRoZXkgZ3VhcmQgdGhhdCBhY2Nlc3Mgd2l0aCB0aGUgYHNrX2Z1bGxzb2NrKHNrKWAgY2hlY2s/IEFoYSwgdGhhdCdzIGl0ISBJZiB3ZSBvbmx5IGNoZWNrIGBza19wcm90b2NvbGAgd2hlbiBgc2tfZnVsbHNvY2tgIHJldHVybnMgdHJ1ZSwgaXQncyBzYWZlci4gTGV0J3MgbWFrZSBzdXJlIEkndmUgZ290IHRoaXMgc3RyYWlnaHQ6IEkgbmVlZCB0byBjaGVjayBob3cgYHNrX2Z1bGxzb2NrYCBpcyBkZWZpbmVkLiBJIHNob3VsZCBhbHNvIGNoZWNrIHdoaWNoIGZpZWxkcyBhcmUgYWN0dWFsbHkgZGVmaW5lZCBpbiBgc29ja19jb21tb25gIHZlcnN1cyBgc29ja2AsIGluIGdlbmVyYWwuXG5cbk9rYXksIHRpbWUgdG8gZ3JlcCBmb3IgYHNrX2Z1bGxzb2NrYCBvciBnbyBkaXJlY3RseSB0byBgaW5jbHVkZS9uZXQvc29jay5oYC4gSSdsbCBnZXQgdGhlIGRldGFpbHMgYmVmb3JlIGFzc3VtaW5nIGFueXRoaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTQwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjE6NDIuMzk0MDM5NDRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MzQ3MDczNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19mdWxsc29ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvY2xzX2Nncm91cC5oPTUzPXN0YXRpYyBpbmxpbmUgdTMyIHRhc2tfZ2V0X2NsYXNzaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbmV0L2Nsc19jZ3JvdXAuaC02OS1cXHRcXHQvKiBJZiB0aGVyZSBpcyBhbiBzb2NrX2Nncm91cF9jbGFzc2lkIHdlJ2xsIHVzZSB0aGF0LiAqL1xcbmluY2x1ZGUvbmV0L2Nsc19jZ3JvdXAuaDo3MDpcXHRcXHRpZiAoIXNrIHx8ICFza19mdWxsc29jayhzaykpXFxuaW5jbHVkZS9uZXQvY2xzX2Nncm91cC5oLTcxLVxcdFxcdFxcdHJldHVybiAwO1xcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldDZfaGFzaHRhYmxlcy5oPTEwNj1zdHJ1Y3Qgc29jayAqaW5ldDZfc3RlYWxfc29jayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBkb2ZmLFxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldDZfaGFzaHRhYmxlcy5oLTExNy1cXG5pbmNsdWRlL25ldC9pbmV0Nl9oYXNodGFibGVzLmg6MTE4OlxcdGlmICghcHJlZmV0Y2hlZCB8fCAhc2tfZnVsbHNvY2soc2spKVxcbmluY2x1ZGUvbmV0L2luZXQ2X2hhc2h0YWJsZXMuaC0xMTktXFx0XFx0cmV0dXJuIHNrO1xcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmg9NDQ2PXN0cnVjdCBzb2NrICppbmV0X3N0ZWFsX3NvY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZG9mZixcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRfaGFzaHRhYmxlcy5oLTQ1Ny1cXG5pbmNsdWRlL25ldC9pbmV0X2hhc2h0YWJsZXMuaDo0NTg6XFx0aWYgKCFwcmVmZXRjaGVkIHx8ICFza19mdWxsc29jayhzaykpXFxuaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmgtNDU5LVxcdFxcdHJldHVybiBzaztcXG4tLVxcbmluY2x1ZGUvbmV0L2lwLmg9NTM0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3NrYl9kc3RfbXR1KHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbmluY2x1ZGUvbmV0L2lwLmgtNTM5LVxcbmluY2x1ZGUvbmV0L2lwLmg6NTQwOlxcdGlmICghc2sgfHwgIXNrX2Z1bGxzb2NrKHNrKSB8fCBpcF9za191c2VfcG10dShzaykpIHtcXG5pbmNsdWRlL25ldC9pcC5oLTU0MS1cXHRcXHRib29sIGZvcndhcmRpbmcgPSBJUENCKHNrYiktXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBTS0JfRk9SV0FSREVEO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mdF9maWIuaD0yMj1zdGF0aWMgaW5saW5lIGJvb2wgbmZ0X2ZpYl9jYW5fc2tpcChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZnRfZmliLmgtMzYtXFx0c2sgPSBwa3QtXFx1MDAzZXNrYi1cXHUwMDNlc2s7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mdF9maWIuaDozNzpcXHRpZiAoc2sgXFx1MDAyNlxcdTAwMjYgc2tfZnVsbHNvY2soc2spKVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZnRfZmliLmgtMzgtXFx0ICAgICAgIHJldHVybiBzay1cXHUwMDNlc2tfcnhfZHN0X2lmaW5kZXggPT0gaW5kZXYtXFx1MDAzZWlmaW5kZXg7XFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmg9MzAxNj1za2Jfc2tfaXNfcHJlZmV0Y2hlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oLTMwMjctICovXFxuaW5jbHVkZS9uZXQvc29jay5oOjMwMjg6c3RhdGljIGlubGluZSBib29sIHNrX2Z1bGxzb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5pbmNsdWRlL25ldC9zb2NrLmgtMzAyOS17XFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmg9MzAzND1za19pc19yZWZjb3VudGVkKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaC0zMDM2LVxcdC8qIE9ubHkgZnVsbCBzb2NrZXRzIGhhdmUgc2stXFx1MDAzZXNrX2ZsYWdzLiAqL1xcbmluY2x1ZGUvbmV0L3NvY2suaDozMDM3OlxcdHJldHVybiAhc2tfZnVsbHNvY2soc2spIHx8ICFzb2NrX2ZsYWcoc2ssIFNPQ0tfUkNVX0ZSRUUpO1xcbmluY2x1ZGUvbmV0L3NvY2suaC0zMDM4LX1cXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaD0zMDQxPXNrX3JlcXVlc3RzX3dpZmlfc3RhdHVzKHN0cnVjdCBzb2NrICpzaylcXG5pbmNsdWRlL25ldC9zb2NrLmgtMzA0Mi17XFxuaW5jbHVkZS9uZXQvc29jay5oOjMwNDM6XFx0cmV0dXJuIHNrIFxcdTAwMjZcXHUwMDI2IHNrX2Z1bGxzb2NrKHNrKSBcXHUwMDI2XFx1MDAyNiBzb2NrX2ZsYWcoc2ssIFNPQ0tfV0lGSV9TVEFUVVMpO1xcbmluY2x1ZGUvbmV0L3NvY2suaC0zMDQ0LX1cXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaD0zMTE2PXN0YXRpYyBpbmxpbmUgdm9pZCBza19wYWNpbmdfc2hpZnRfdXBkYXRlKHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcXG5pbmNsdWRlL25ldC9zb2NrLmgtMzExNy17XFxuaW5jbHVkZS9uZXQvc29jay5oOjMxMTg6XFx0aWYgKCFzayB8fCAhc2tfZnVsbHNvY2soc2spIHx8IFJFQURfT05DRShzay1cXHUwMDNlc2tfcGFjaW5nX3NoaWZ0KSA9PSB2YWwpXFxuaW5jbHVkZS9uZXQvc29jay5oLTMxMTktXFx0XFx0cmV0dXJuO1xcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmg9Mjg5ND1zdGF0aWMgaW5saW5lIGludCB0Y3BfY2FsbF9icGYoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3AsIHUzMiBuYXJncywgdTMyICphcmdzKVxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmgtMjg5OS1cXHRtZW1zZXQoXFx1MDAyNnNvY2tfb3BzLCAwLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sIHRlbXApKTtcXG5pbmNsdWRlL25ldC90Y3AuaDoyOTAwOlxcdGlmIChza19mdWxsc29jayhzaykpIHtcXG5pbmNsdWRlL25ldC90Y3AuaC0yOTAxLVxcdFxcdHNvY2tfb3BzLmlzX2Z1bGxzb2NrID0gMTtcXG4tLVxcbmluY2x1ZGUvbmV0L3Rscy5oPTM2MD1zdGF0aWMgaW5saW5lIGJvb2wgdGxzX2lzX3NrYl90eF9kZXZpY2Vfb2ZmbG9hZGVkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL25ldC90bHMuaC0zNjQtXFxuaW5jbHVkZS9uZXQvdGxzLmg6MzY1OlxcdHJldHVybiBzayBcXHUwMDI2XFx1MDAyNiBza19mdWxsc29jayhzaykgXFx1MDAyNlxcdTAwMjZcXG5pbmNsdWRlL25ldC90bHMuaC0zNjYtXFx0ICAgICAgIChzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZzay1cXHUwMDNlc2tfdmFsaWRhdGVfeG1pdF9za2IpID09XFxuLS1cXG5pbmNsdWRlL25ldC90bHMuaD01MDg9c3RhdGljIGlubGluZSBib29sIHRsc19pc19za19yeF9kZXZpY2Vfb2ZmbG9hZGVkKHN0cnVjdCBzb2NrICpzaylcXG5pbmNsdWRlL25ldC90bHMuaC01MDkte1xcbmluY2x1ZGUvbmV0L3Rscy5oOjUxMDpcXHRpZiAoIXNrX2Z1bGxzb2NrKHNrKSB8fFxcbmluY2x1ZGUvbmV0L3Rscy5oLTUxMS1cXHQgICAgc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2c2stXFx1MDAzZXNrX2Rlc3RydWN0KSAhPSB0bHNfZGV2aWNlX3NrX2Rlc3RydWN0KVxcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oPTEzOTM9c3RhdGljIGlubGluZSBpbnQgeGZybV9za19jbG9uZV9wb2xpY3koc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqb3NrKVxcbmluY2x1ZGUvbmV0L3hmcm0uaC0xMzk0LXtcXG5pbmNsdWRlL25ldC94ZnJtLmg6MTM5NTpcXHRpZiAoIXNrX2Z1bGxzb2NrKG9zaykpXFxuaW5jbHVkZS9uZXQveGZybS5oLTEzOTYtXFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIxOjQyLjY1NzUxNjk5NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzcyNTkxNTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgYnBmX3NvY2tfZGVzdHJveWAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUgYGJwZl9zb2NrX2Rlc3Ryb3lgIGZ1bmN0aW9uLi4uIHRoYXQncyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkIHdoZW4gaXQgY29tZXMgdG8gY2xlYW5pbmcgdXAgQlBGLXJlbGF0ZWQgcmVzb3VyY2VzIHRpZWQgdG8gYSBzb2NrZXQuIEdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBtZW1vcnkgbGVha3MgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgaW4gdGhpcyBhcmVhLCBteSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gcmV2aXNpdCB0aGF0IHNlY3Rpb24gb2YgYG5ldC9jb3JlL2ZpbHRlci5jYC4gSSBuZWVkIHRvIGVuc3VyZSBhbGwgcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgdGhlIEJQRiBwcm9ncmFtIGFzc29jaWF0ZWQgd2l0aCBhIHNvY2tldCBhcmUgcHJvcGVybHkgZnJlZWQgZHVyaW5nIHNvY2tldCBkZXN0cnVjdGlvbi4gSSdtIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMg4oCTIGFyZSB0aGVyZSBhbnkgc2NlbmFyaW9zIHdoZXJlIGFub3RoZXIgdGhyZWFkIG1pZ2h0IGJlIGFjY2Vzc2luZyB0aGUgQlBGIHByb2dyYW0gd2hpbGUgd2UncmUgdHJ5aW5nIHRvIHRlYXIgaXQgZG93bj8gQWxzbywgSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgcmVmZXJlbmNlIGNvdW50cyBhcmUgaGFuZGxlZCBtZXRpY3Vsb3VzbHk7IGEgc2luZ2xlIG1pc3NlZCBkZWNyZW1lbnQgY291bGQgYmUgYSB0aWNraW5nIHRpbWUgYm9tYi4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlLCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCBtZW1vcnkgbGVha3Mgb3IgcmVzb3VyY2UtcmVsYXRlZCBpc3N1ZXM/IEFueSBzcG90cyB3aGVyZSBhIHByb2dyYW0gbWlnaHQgYmUgdXNlZCBhZnRlciBpdCBpcyBmcmVlZC4gQW5kIEkgaGF2ZSB0byBrZWVwIGluIG1pbmQsIG9mIGNvdXJzZSwgdGhlIGltcGxpY2F0aW9ucyBvZiBjaGFuZ2VzIGhlcmUgb24gb3RoZXIgc3lzdGVtcywgc28gdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczODEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMzoyMTo0NS4wMzAxMTA2MjhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYyOTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOTEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjkxMDpcXHQgKiBQYXJhbWV0ZXJzOlxcbjEyOTExOlxcdCAqIEBzb2NrOiBQb2ludGVyIHRvIHNvY2tldCB0byBiZSBkZXN0cm95ZWRcXG4xMjkxMjpcXHQgKlxcbjEyOTEzOlxcdCAqIFJldHVybjpcXG4xMjkxNDpcXHQgKiBPbiBlcnJvciwgbWF5IHJldHVybiBFT1BOT1RTVVBQLCBvciB3aGF0ZXZlciB0aGUgcHJvdG9jb2wgc3BlY2lmaWNcXG4xMjkxNTpcXHQgKiBkZXN0cm95IGhhbmRsZXIgcmV0dXJucy5cXG4xMjkxNjpcXHQgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxcbjEyOTE3OlxcdCAqIDAgb3RoZXJ3aXNlXFxuMTI5MTg6XFx0ICovXFxuMTI5MTk6XFx0X19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxcbjEyOTIwOlxcdHtcXG4xMjkyMTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKilzb2NrO1xcbjEyOTIyOlxcdFxcbjEyOTIzOlxcdFxcdC8qIFRoZSBsb2NraW5nIHNlbWFudGljcyB0aGF0IGFsbG93IGZvciBzeW5jaHJvbm91cyBleGVjdXRpb24gb2YgdGhlXFxuMTI5MjQ6XFx0XFx0ICogZGVzdHJveSBoYW5kbGVycyBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIFRDUCBhbmQgVURQLlxcbjEyOTI1OlxcdFxcdCAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHRcXG4xMjkyNjpcXHRcXHQgKiBwcmlvciB0byBpbnZva2luZyB0aGlzIGtmdW5jLlxcbjEyOTI3OlxcdFxcdCAqL1xcbjEyOTI4OlxcdFxcdGlmICghc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveSlcXG4xMjkyOTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTI5MzA6XFx0XFxuMTI5MzE6XFx0XFx0aWYgKHNrX2Z1bGxzb2NrKHNrKSBcXHUwMDI2XFx1MDAyNlxcbjEyOTMyOlxcdFxcdCAgICBzay1cXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXFx1MDAyNlxcdTAwMjZcXG4xMjkzMzpcXHRcXHQgICAgc2stXFx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxcbjEyOTM0OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMjkzNTpcXHRcXG4xMjkzNjpcXHRcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcXG4xMjkzNzpcXHR9XFxuMTI5Mzg6XFx0XFxuMTI5Mzk6XFx0X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG4xMjk0MDpcXHRcXG4xMjk0MTpcXHRCVEZfS0ZVTkNTX1NUQVJUKGJwZl9za19pdGVyX2tmdW5jX2lkcylcXG4xMjk0MjpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfZGVzdHJveSlcXG4xMjk0MzpcXHRCVEZfS0ZVTkNTX0VORChicGZfc2tfaXRlcl9rZnVuY19pZHMpXFxuMTI5NDQ6XFx0XFxuMTI5NDU6XFx0c3RhdGljIGludCB0cmFjaW5nX2l0ZXJfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxcbjEyOTQ2OlxcdHtcXG4xMjk0NzpcXHRcXHRpZiAoYnRmX2lkX3NldDhfY29udGFpbnMoXFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX2lkcywga2Z1bmNfaWQpIFxcdTAwMjZcXHUwMDI2XFxuMTI5NDg6XFx0XFx0ICAgIHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9JVEVSKVxcbjEyOTQ5OlxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMzoyMTo0NS4wMzA0NzU1OThaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA1MTUzNTEyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBpbmV0X2Nvbm5lY3Rpb25fc29jay5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gemVybyBpbiBvbiBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2AuIFNwZWNpZmljYWxseSwgSSB0aGluayB0aGUgYWN0aW9uIGlzIGhhcHBlbmluZyBhcm91bmQgbGluZSAxNTIwLiBUaGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGUgc3ltcHRvbXMgSSdtIHNlZWluZy4gSSdsbCBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxvdyBhcm91bmQgdGhhdCBhcmVhIG9mIHRoZSBjb2RlLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mzk4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMzoyMTo1MC4wODIwMTMwMzdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTUwMDpcXHRcXHRcXHRcXHRcXHRcXHRSRUFEX09OQ0UobnNrLVxcdTAwM2Vza19kYXRhX3JlYWR5KShuc2spO1xcbjE1MDE6XFx0XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4xNTAyOlxcdFxcdFxcdFxcdFxcdFxcdF9fTkVUX0lOQ19TVEFUUyhzb2NrX25ldChuc2spLFxcbjE1MDM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0TElOVVhfTUlCX1RDUE1JR1JBVEVSRVFGQUlMVVJFKTtcXG4xNTA0OlxcdFxcdFxcdFxcdFxcdFxcdHJlcXNrX21pZ3JhdGVfcmVzZXQobnJlcSk7XFxuMTUwNTpcXHRcXHRcXHRcXHRcXHRcXHRfX3JlcXNrX2ZyZWUobnJlcSk7XFxuMTUwNjpcXHRcXHRcXHRcXHRcXHR9XFxuMTUwNzpcXHRcXHRcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xNTA4OlxcdFxcbjE1MDk6XFx0XFx0XFx0XFx0XFx0LyogaW5ldF9jc2tfcmVxc2tfcXVldWVfYWRkKCkgaGFzIGFscmVhZHlcXG4xNTEwOlxcdFxcdFxcdFxcdFxcdCAqIGNhbGxlZCBpbmV0X2NoaWxkX2ZvcmdldCgpIG9uIGZhaWx1cmUgY2FzZS5cXG4xNTExOlxcdFxcdFxcdFxcdFxcdCAqL1xcbjE1MTI6XFx0XFx0XFx0XFx0XFx0Z290byBza2lwX2NoaWxkX2ZvcmdldDtcXG4xNTEzOlxcdFxcdFxcdFxcdH1cXG4xNTE0OlxcdFxcdFxcdH1cXG4xNTE1OlxcdFxcbjE1MTY6XFx0XFx0XFx0aW5ldF9jaGlsZF9mb3JnZXQoc2ssIHJlcSwgY2hpbGQpO1xcbjE1MTc6XFx0c2tpcF9jaGlsZF9mb3JnZXQ6XFxuMTUxODpcXHRcXHRcXHRyZXFza19wdXQocmVxKTtcXG4xNTE5OlxcdFxcdFxcdGJoX3VubG9ja19zb2NrKGNoaWxkKTtcXG4xNTIwOlxcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbjE1MjE6XFx0XFx0XFx0c29ja19wdXQoY2hpbGQpO1xcbjE1MjI6XFx0XFxuMTUyMzpcXHRcXHRcXHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcXG4xNTI0OlxcdFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjE1MjU6XFx0XFx0fVxcbjE1MjY6XFx0XFx0aWYgKHF1ZXVlLVxcdTAwM2VmYXN0b3BlbnEucnNrcV9yc3RfaGVhZCkge1xcbjE1Mjc6XFx0XFx0XFx0LyogRnJlZSBhbGwgdGhlIHJlcXMgcXVldWVkIGluIHJza3FfcnN0X2hlYWQuICovXFxuMTUyODpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnF1ZXVlLVxcdTAwM2VmYXN0b3BlbnEubG9jayk7XFxuMTUyOTpcXHRcXHRcXHRyZXEgPSBxdWV1ZS1cXHUwMDNlZmFzdG9wZW5xLnJza3FfcnN0X2hlYWQ7XFxuMTUzMDpcXHRcXHRcXHRxdWV1ZS1cXHUwMDNlZmFzdG9wZW5xLnJza3FfcnN0X2hlYWQgPSBOVUxMO1xcbjE1MzE6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnF1ZXVlLVxcdTAwM2VmYXN0b3BlbnEubG9jayk7XFxuMTUzMjpcXHRcXHRcXHR3aGlsZSAocmVxICE9IE5VTEwpIHtcXG4xNTMzOlxcdFxcdFxcdFxcdG5leHQgPSByZXEtXFx1MDAzZWRsX25leHQ7XFxuMTUzNDpcXHRcXHRcXHRcXHRyZXFza19wdXQocmVxKTtcXG4xNTM1OlxcdFxcdFxcdFxcdHJlcSA9IG5leHQ7XFxuMTUzNjpcXHRcXHRcXHR9XFxuMTUzNzpcXHRcXHR9XFxuMTUzODpcXHRcXHRXQVJOX09OX09OQ0Uoc2stXFx1MDAzZXNrX2Fja19iYWNrbG9nKTtcXG4xNTM5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjE6NTAuMDgyMTQ4NzE3WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3MjUyMTkyNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBhbmQgU29ja2V0IExpZmVjeWNsZSBJbnRlcmFjdGlvbnMqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBpbmV0X2Nza19saXN0ZW5fc3RvcGAgaGFzIHRoaXMgY29uZGl0aW9uYWwgYGlmICghaGFzX2N1cnJlbnRfYnBmX2N0eCgpKSBjb25kX3Jlc2NoZWQoKTtgLiBUaGUgcmF0aW9uYWxlIGlzIHByZXR0eSBjbGVhcjogd2hlbiBgYnBmX3NvY2tfZGVzdHJveWAgaXMgaW52b2tlZCBmcm9tIHdpdGhpbiBhIEJQRiBwcm9ncmFtLCBlc3BlY2lhbGx5IHRocm91Z2ggaXRlcmF0b3JzLCBpdCBjYW4gYmUgcnVubmluZyB1bmRlciBhbiBSQ1UgcmVhZCBsb2NrIG9yIGluIGEgbm9uLXByZWVtcHRpYmxlIGNvbnRleHQuIENhbGxpbmcgYGNvbmRfcmVzY2hlZCgpYCBpbiB0aGF0IHNjZW5hcmlvIGlzIGEgcmVjaXBlIGZvciBkaXNhc3RlciDigJMgY2xhc3NpYyBgbWlnaHRfc2xlZXAoKWAgYW5kIFwic2NoZWR1bGluZyB3aGlsZSBhdG9taWNcIiB3YXJuaW5ncywgb3IgcG90ZW50aWFsbHkgUkNVLXJlbGF0ZWQgcHJvYmxlbXMuIFN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYW5kIGxvY2tkZXAgd291bGQgZWFzaWx5IGNhdGNoIHRob3NlIHNjaGVkdWxlciwgY29uY3VycmVuY3ksIGFuZCBSQ1UgaXNzdWVzLiBUaGF0IG1ha2VzIHNlbnNlLlxuXG5Ob3csIHRoZSBjaGFuZ2VzIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgYXJlIG1vcmUgaW50ZXJlc3RpbmcuIGBicGZfc29ja19kZXN0cm95YCBpcyBjbGVhcmx5IGJlaW5nIHVwZGF0ZWQgdG8gaGFuZGxlIG5vbi1mdWxsIHNvY2tldHMsIGxpa2UgYGluZXRfdGltZXdhaXRfc29ja2Agb3IgYHJlcXVlc3Rfc29ja2AuIFRoZSBjb2RlIG5vdyBjaGVja3MgYHNrX2Z1bGxzb2NrKHNrKWAgYmVmb3JlIGFjY2Vzc2luZyBgc2stXHUwMDNlc2tfcHJvdG9jb2xgLiBIbW0sIHdoeT8gQWgsIGZvciB0aW1ld2FpdCBzb2NrZXRzLCBgc2tfY29tbW9uYCBpcyBlbWJlZGRlZCwgYnV0IHRoZSBgaW5ldF90aW1ld2FpdF9zb2NrYCBzdHJ1Y3R1cmUgZG9lc27igJl0IGhhdmUgdGhlIGZ1bGwgYHN0cnVjdCBzb2NrYCBmaWVsZHMgbGlrZSBgc2tfcHJvdG9jb2xgIGF0IHRoZSBzYW1lIG9mZnNldHMuIFJpZ2h0LCBJIHJlbWVtYmVyIG5vdyEgSW4gYHN0cnVjdCBzb2NrX2NvbW1vbmAsIHdlIGhhdmUgYHNrY19wcm90YCwgYnV0IHRoZSBmdWxsIGBza19wcm90b2NvbGAgbGl2ZXMgaW4gYHN0cnVjdCBzb2NrYCwgbm90IGBzb2NrX2NvbW1vbmAuIFNvLCBgaW5ldF90aW1ld2FpdF9zb2NrYCBtaWdodCBiZSB1c2luZyBgdHdfcHJvdGAgb3Igc29tZXRoaW5nIGxpa2UgdGhhdCB3aXRoaW4gdGhlIGBza2NfcHJvdGAuIElmIGBicGZfc29ja19kZXN0cm95YCB3ZXJlIHRvIHRha2UgYSBgc29ja19jb21tb25gIHBvaW50ZXIgYW5kIGJsaW5kbHkgY2FzdCBpdCB0byBgc3RydWN0IHNvY2sgKmAsIGFjY2Vzc2luZyBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIG9uIGFuIGBpbmV0X3RpbWV3YWl0X3NvY2tgIHdvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBvciwgYXQgYmVzdCwgYSByZWFkIGZyb20gdGhlIHdyb25nIG9mZnNldC4gVGhhdCB3b3VsZCBiZSBtZXNzeS4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBsYXlvdXQgb2YgYHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2tgIHZlcnN1cyBgc3RydWN0IHNvY2tgIGp1c3QgdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE5NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIxOjU0LjgwNzM3MDQ4MloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0NTk4OTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oPTI2PXN0cnVjdCBpbmV0X2JpbmRfYnVja2V0O1xcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgtMzItICovXFxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmg6MzM6c3RydWN0IGluZXRfdGltZXdhaXRfc29jayB7XFxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgtMzQtXFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjE6NTUuMDExOTc1MjQyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2NDYzNDY0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gZ3JhYiBgaW5ldF90aW1ld2FpdF9zb2NrLmhgIGFuZCBmb2N1cyBvbiBsaW5lcyAzMC03MC4gSSBrbm93IHRoaXMgaGVhZGVyIGZpbGUsIHNvIEknbSBleHBlY3RpbmcgdG8gZmluZCBjb3JlIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gdGhlIFRDUCBUSU1FLVdBSVQgc3RhdGUgZm9yIElQdjQgYW5kIElQdjYgc29ja2V0cy4gTXkgZ29hbCBoZXJlIGlzIHRvIHF1aWNrbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHBvc3NpYmx5IGlkZW50aWZ5IGFueSByZWxldmFudCBwYXJhbWV0ZXJzIG9yIG1hY3JvcyB0aGF0IG1pZ2h0IGJlIGluIG15IGN1cnJlbnQgbGluZSBvZiB0aGlua2luZyBvciBwcm9ibGVtLXNvbHZpbmcgdGhhdCBJIGFtIGRvaW5nLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHRoZSBgdHdfc29ja2Agc3RydWN0dXJlIGl0c2VsZiwgYW55IHJlbGF0ZWQgZmxhZ3MsIG9yIGZ1bmN0aW9ucyB0aGF0IG9wZXJhdGUgb24gVElNRS1XQUlUIHNvY2tldHMuIFNwZWNpZmljYWxseSwgSSdtIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgdGhlIHRpbWVyIHN0cnVjdHVyZXMgdXNlZCBmb3IgdGhlIDJNU0wgdGltZW91dCBwZXJpb2QsIGFueSByZWZlcmVuY2VzIHRvIGNvbm5lY3Rpb24gc3RhdGUgdHJhbnNpdGlvbnMsIGFuZCBob3cgdGhlIGtlcm5lbCB0cmFja3MgdGhlc2Ugc29ja2V0cyBmb3IgY2xlYW51cC4gSeKAmWxsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHVudXN1YWwgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvciBvcHRpbWl6YXRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBvZiBUQ1AgY29ubmVjdGlvbnMsIHRvby4gVGltZSB0byBnZXQgc3RhcnRlZCBhbmQgZ2V0IHRob3NlIG1lbnRhbCBnZWFycyB0dXJuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIyNywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIyOjAwLjY1ODMyNDM4N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHQgKiBwcm9ibGVtcyBvZiBzb2NrZXRzIGluIHN1Y2ggYSBzdGF0ZSBvbiBoZWF2aWx5IGxvYWRlZCBzZXJ2ZXJzLCBidXRcXG4gIDMxOlxcdCAqIHdpdGhvdXQgdmlvbGF0aW5nIHRoZSBwcm90b2NvbCBzcGVjaWZpY2F0aW9uLlxcbiAgMzI6XFx0ICovXFxuICAzMzpcXHRzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrIHtcXG4gIDM0OlxcdFxcdC8qXFxuICAzNTpcXHRcXHQgKiBOb3cgc3RydWN0IHNvY2sgYWxzbyB1c2VzIHNvY2tfY29tbW9uLCBzbyBwbGVhc2UganVzdFxcbiAgMzY6XFx0XFx0ICogZG9uJ3QgYWRkIG5vdGhpbmcgYmVmb3JlIHRoaXMgZmlyc3QgbWVtYmVyIChfX3R3X2NvbW1vbikgLS1hY21lXFxuICAzNzpcXHRcXHQgKi9cXG4gIDM4OlxcdFxcdHN0cnVjdCBzb2NrX2NvbW1vblxcdF9fdHdfY29tbW9uO1xcbiAgMzk6XFx0I2RlZmluZSB0d19mYW1pbHlcXHRcXHRfX3R3X2NvbW1vbi5za2NfZmFtaWx5XFxuICA0MDpcXHQjZGVmaW5lIHR3X3N0YXRlXFx0XFx0X190d19jb21tb24uc2tjX3N0YXRlXFxuICA0MTpcXHQjZGVmaW5lIHR3X3JldXNlXFx0XFx0X190d19jb21tb24uc2tjX3JldXNlXFxuICA0MjpcXHQjZGVmaW5lIHR3X3JldXNlcG9ydFxcdFxcdF9fdHdfY29tbW9uLnNrY19yZXVzZXBvcnRcXG4gIDQzOlxcdCNkZWZpbmUgdHdfaXB2Nm9ubHlcXHRcXHRfX3R3X2NvbW1vbi5za2NfaXB2Nm9ubHlcXG4gIDQ0OlxcdCNkZWZpbmUgdHdfYm91bmRfZGV2X2lmXFx0XFx0X190d19jb21tb24uc2tjX2JvdW5kX2Rldl9pZlxcbiAgNDU6XFx0I2RlZmluZSB0d19ub2RlXFx0XFx0XFx0X190d19jb21tb24uc2tjX251bGxzX25vZGVcXG4gIDQ2OlxcdCNkZWZpbmUgdHdfYmluZF9ub2RlXFx0XFx0X190d19jb21tb24uc2tjX2JpbmRfbm9kZVxcbiAgNDc6XFx0I2RlZmluZSB0d19yZWZjbnRcXHRcXHRfX3R3X2NvbW1vbi5za2NfcmVmY250XFxuICA0ODpcXHQjZGVmaW5lIHR3X3R4X3F1ZXVlX21hcHBpbmdcXHRfX3R3X2NvbW1vbi5za2NfdHhfcXVldWVfbWFwcGluZ1xcbiAgNDk6XFx0I2RlZmluZSB0d19yeF9xdWV1ZV9tYXBwaW5nXFx0X190d19jb21tb24uc2tjX3J4X3F1ZXVlX21hcHBpbmdcXG4gIDUwOlxcdCNkZWZpbmUgdHdfaGFzaFxcdFxcdFxcdF9fdHdfY29tbW9uLnNrY19oYXNoXFxuICA1MTpcXHQjZGVmaW5lIHR3X3Byb3RcXHRcXHRcXHRfX3R3X2NvbW1vbi5za2NfcHJvdFxcbiAgNTI6XFx0I2RlZmluZSB0d19uZXRcXHRcXHRcXHRfX3R3X2NvbW1vbi5za2NfbmV0XFxuICA1MzpcXHQjZGVmaW5lIHR3X2RhZGRyICAgICAgICBcXHRfX3R3X2NvbW1vbi5za2NfZGFkZHJcXG4gIDU0OlxcdCNkZWZpbmUgdHdfdjZfZGFkZHJcXHRcXHRfX3R3X2NvbW1vbi5za2NfdjZfZGFkZHJcXG4gIDU1OlxcdCNkZWZpbmUgdHdfcmN2X3NhZGRyICAgIFxcdF9fdHdfY29tbW9uLnNrY19yY3Zfc2FkZHJcXG4gIDU2OlxcdCNkZWZpbmUgdHdfdjZfcmN2X3NhZGRyICAgIFxcdF9fdHdfY29tbW9uLnNrY192Nl9yY3Zfc2FkZHJcXG4gIDU3OlxcdCNkZWZpbmUgdHdfZHBvcnRcXHRcXHRfX3R3X2NvbW1vbi5za2NfZHBvcnRcXG4gIDU4OlxcdCNkZWZpbmUgdHdfbnVtXFx0XFx0XFx0X190d19jb21tb24uc2tjX251bVxcbiAgNTk6XFx0I2RlZmluZSB0d19jb29raWVcXHRcXHRfX3R3X2NvbW1vbi5za2NfY29va2llXFxuICA2MDpcXHQjZGVmaW5lIHR3X2RyXFx0XFx0XFx0X190d19jb21tb24uc2tjX3R3X2RyXFxuICA2MTpcXHRcXG4gIDYyOlxcdFxcdF9fdTMyXFx0XFx0XFx0dHdfbWFyaztcXG4gIDYzOlxcdFxcdHVuc2lnbmVkIGNoYXJcXHRcXHR0d19zdWJzdGF0ZTtcXG4gIDY0OlxcdFxcdHVuc2lnbmVkIGNoYXJcXHRcXHR0d19yY3Zfd3NjYWxlO1xcbiAgNjU6XFx0XFxuICA2NjpcXHRcXHQvKiBTb2NrZXQgZGVtdWx0aXBsZXggY29tcGFyaXNvbnMgb24gaW5jb21pbmcgcGFja2V0cy4gKi9cXG4gIDY3OlxcdFxcdC8qIHRoZXNlIHRocmVlIGFyZSBpbiBpbmV0X3NvY2sgKi9cXG4gIDY4OlxcdFxcdF9fYmUxNlxcdFxcdFxcdHR3X3Nwb3J0O1xcbiAgNjk6XFx0XFx0LyogQW5kIHRoZXNlIGFyZSBvdXJzLiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMzoyMjowMC42NTgzOTM0NjdaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ5MDQyNTYzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgQnVnIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMga2VybmVsIGNvZGUgYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGEgZml4LiBJdCBzZWVtcyBsaWtlIHRoZSBpc3N1ZSBpcyByb290ZWQgaW4gaG93IGBzdHJ1Y3Qgc29ja2AgYW5kIGBpbmV0X3RpbWV3YWl0X3NvY2tgIGFyZSByZWxhdGVkLCBhbmQgc3BlY2lmaWNhbGx5LCBob3cgYHNrX3Byb3RvY29sYCBpcyBhY2Nlc3NlZC4gSSBzZWUgdGhhdCBgc2tfcHJvdG9jb2xgIHdpdGhpbiBgc3RydWN0IHNvY2tgIGlzIGxvY2F0ZWQgYXQgYW4gb2Zmc2V0IGFmdGVyIGBzb2NrX2NvbW1vbmAuIFRoZSBwcm9ibGVtLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRoYXQgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBgdGltZXdhaXRgIHNvY2tldCwgd2hpY2ggdXNlcyBgaW5ldF90aW1ld2FpdF9zb2NrYCwgYWNjZXNzaW5nIGBzay1cdTAwM2Vza19wcm90b2NvbGAgaW4gYSBmdW5jdGlvbiBsaWtlIGBicGZfc29ja19kZXN0cm95YCBjb3VsZCBiZSBwcm9ibGVtYXRpYy4gRXNzZW50aWFsbHksIHdlIHdlcmUgcG90ZW50aWFsbHkgcmVhZGluZyBmcm9tIGFuIGluY29ycmVjdCBtZW1vcnkgbG9jYXRpb24gYmVjYXVzZSB0aGUgb2Zmc2V0IGZvciBgc2tfcHJvdG9jb2xgIG1pZ2h0IGJlIGRpZmZlcmVudCBpbiB0aGUgYGluZXRfdGltZXdhaXRfc29ja2Agc3RydWN0dXJlIChvciBldmVuIG91dC1vZi1ib3VuZHMgaWYgdGhlIHN0cnVjdHVyZSBpcyBzbWFsbGVyKS5cblxuVGhlIGZpeCBpbnZvbHZlcyBhZGRpbmcgYSBjaGVjazogYGlmIChza19mdWxsc29jayhzaykgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUClgLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYHNrX2Z1bGxzb2NrYCB3aWxsIHJldHVybiBgZmFsc2VgIGlmIHRoZSBzb2NrZXQgaXNuJ3QgYSBcImZ1bGxzb2NrLFwiIHdoaWNoIGluY2x1ZGVzIHRpbWV3YWl0IHNvY2tldHMsIHNvIHRoYXQgaWYgaXQgaXMgYSB0aW1ld2FpdCBzb2NrZXQgd2UgZG9uJ3QgYWNjZXNzIHNrX3Byb3RvY29sIGluIGJwZl9zb2NrX2Rlc3Ryb3kuIEFuZCwgaW4gdGhlIGNhc2Ugb2YgYSBmdWxsIHNvY2tldCwgd2Ugb25seSBwcm9jZWVkIGlmIHRoZSBwcm90b2NvbCBpc24ndCBUQ1Agb3IgVURQLiBJIHRoaW5rIHRoaXMgcHJldmVudHMgdXMgZnJvbSBhY2NpZGVudGFsbHkgcmVhZGluZyBmcm9tIGFuIGluY29ycmVjdCBtZW1vcnkgbG9jYXRpb24gb24gdGhlc2Ugc3BlY2lhbGl6ZWQgYHRpbWV3YWl0YCBzb2NrZXRzLlxuXG5JIGFtIGFsc28gc2VlaW5nIHRoYXQgdGhlIGBpbmV0X3R3c2tfZGlhZ19kZXN0cm95YCBmdW5jdGlvbiBpcyBsaW5rZWQgdG8gdmlhIGB0Y3BfdHdza19wcm90LmRpYWdfZGVzdHJveWAgb3IgYHRjcF9wcm90LmRpYWdfZGVzdHJveWAuIFRoaXMgbWlnaHQgYmUgcmVsYXRlZCB0byB0aGUgb3JpZ2luYWwgaXNzdWUuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYHRjcF90d3NrX3Byb3RgIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMDYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMzoyMjowNS4xNDg4MjIxODhaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMzQ0NjY3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfdHdza19wcm90XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjI6MDUuMjAyMTc1NjM1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxODQyODIyNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGB0Y3BfcHJvdGAgYW5kIGBkaWFnX2Rlc3Ryb3lgKipcblxuT2theSwgdGltZSB0byB0YWtlIGEgbG9vayBhdCBgdGNwX3Byb3RgIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBgZGlhZ19kZXN0cm95YC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gaG93IHdlIGhhbmRsZSB0ZWFyZG93biBhbmQgY2xlYW51cCBvZiBUQ1AgcHJvdG9jb2wtc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGR1cmluZyB0aGUgZGlhZ25vc3RpYyBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGNvbXBvbmVudHMgaW50ZXJhY3QsIHNwZWNpZmljYWxseSB0byBlbnN1cmUgcHJvcGVyIHJlc291cmNlIGRlYWxsb2NhdGlvbi4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjb2RlIHBhdGgsIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggd2hlcmUgYHRjcF9wcm90YCBpcyBpbml0aWFsaXplZCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhlIGRpYWdub3N0aWMgZnJhbWV3b3JrLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG1lbW9yeSBsZWFrcywgb3IgYW55IG90aGVyIGlzc3VlcyB0aGF0IGNvdWxkIGFyaXNlIHdoZW4gZGlhZ25vc3RpY3MgYXJlIGVuYWJsZWQgYW5kIGRpc2FibGVkLCBhbmQgY29ubmVjdGlvbnMgYXJlIGVzdGFibGlzaGVkIGFuZCB0b3JuIGRvd24uIEVzc2VudGlhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UncmUgcHJvcGVybHkgY2xlYW5pbmcgdXAgYWZ0ZXIgb3Vyc2VsdmVzIHdoZW4gZGlhZ25vc3RpY3MgYXJlIGludm9sdmVkIHdpdGggdGhlIFRDUCBwcm90b2NvbC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk5OCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIyOjA3LjM4NjQ2MDM1NloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc0NjQ5MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXFxcXC5kaWFnX2Rlc3Ryb3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9yYXcuYz05NDg9c3RydWN0IHByb3RvIHJhd19wcm90ID0ge1xcbi0tXFxubmV0L2lwdjQvcmF3LmMtOTcyLSNlbmRpZlxcbm5ldC9pcHY0L3Jhdy5jOjk3MzpcXHQuZGlhZ19kZXN0cm95XFx0ICAgPSByYXdfYWJvcnQsXFxubmV0L2lwdjQvcmF3LmMtOTc0LX07XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTMzNDg9c3RydWN0IHByb3RvIHRjcF9wcm90ID0ge1xcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzk2LVxcdC5ub19hdXRvYmluZFxcdFxcdD0gdHJ1ZSxcXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjMzOTc6XFx0LmRpYWdfZGVzdHJveVxcdFxcdD0gdGNwX2Fib3J0LFxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM5OC19O1xcbi0tXFxubmV0L2lwdjQvdWRwLmM9MzE0Mz1zdHJ1Y3QgcHJvdG8gdWRwX3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0zMTczLVxcdC5vYmpfc2l6ZVxcdFxcdD0gc2l6ZW9mKHN0cnVjdCB1ZHBfc29jayksXFxubmV0L2lwdjQvdWRwLmM6MzE3NDpcXHQuZGlhZ19kZXN0cm95XFx0XFx0PSB1ZHBfYWJvcnQsXFxubmV0L2lwdjQvdWRwLmMtMzE3NS19O1xcbi0tXFxubmV0L2lwdjYvcmF3LmM9MTIwNz1zdHJ1Y3QgcHJvdG8gcmF3djZfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY2L3Jhdy5jLTEyMzEtI2VuZGlmXFxubmV0L2lwdjYvcmF3LmM6MTIzMjpcXHQuZGlhZ19kZXN0cm95XFx0ICAgPSByYXdfYWJvcnQsXFxubmV0L2lwdjYvcmF3LmMtMTIzMy19O1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0yMjc2PXN0cnVjdCBwcm90byB0Y3B2Nl9wcm90ID0ge1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzI1LVxcdC5ub19hdXRvYmluZFxcdFxcdD0gdHJ1ZSxcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjIzMjY6XFx0LmRpYWdfZGVzdHJveVxcdFxcdD0gdGNwX2Fib3J0LFxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjMyNy19O1xcbi0tXFxubmV0L2lwdjYvdWRwLmM9MTkwOD1zdHJ1Y3QgcHJvdG8gdWRwdjZfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTE5NDAtXFx0LmlwdjZfcGluZm9fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHVkcDZfc29jaywgaW5ldDYpLFxcbm5ldC9pcHY2L3VkcC5jOjE5NDE6XFx0LmRpYWdfZGVzdHJveVxcdFxcdD0gdWRwX2Fib3J0LFxcbm5ldC9pcHY2L3VkcC5jLTE5NDItfTtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE0Nj12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X2luaXQodm9pZClcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE2Ni1cXHR0Y3BfcHJvdF9vdmVycmlkZS5yZWxlYXNlX2NiID0gdGNwX3JlbGVhc2VfY2Jfb3ZlcnJpZGU7XFxubmV0L21wdGNwL3N1YmZsb3cuYzoyMTY3OlxcdHRjcF9wcm90X292ZXJyaWRlLmRpYWdfZGVzdHJveSA9IHRjcF9hYm9ydF9vdmVycmlkZTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNjgtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTgwPXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfdjZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMjEzLVxcdHRjcHY2X3Byb3Rfb3ZlcnJpZGUucmVsZWFzZV9jYiA9IHRjcF9yZWxlYXNlX2NiX292ZXJyaWRlO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjIxNDpcXHR0Y3B2Nl9wcm90X292ZXJyaWRlLmRpYWdfZGVzdHJveSA9IHRjcF9hYm9ydF9vdmVycmlkZTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIyMTUtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMzoyMjowNy40NTM5Mjk4MjlaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTAxNTYyODI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipBbmFseXppbmcgYHRjcF9hYm9ydGAncyBTY29wZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYHRjcF9hYm9ydGAgaGVyZS4gTGV0J3Mgc2VlLi4uIGEgcXVpY2sgbWVudGFsIHNjYW4gcmVtaW5kcyBtZSB0aGF0IGl0J3Mgbm90ICpqdXN0KiBmb3IgYWJydXB0bHkgdGVhcmluZyBkb3duIGVzdGFibGlzaGVkIFRDUCBjb25uZWN0aW9ucy4gSSBzZWVtIHRvIHJlY2FsbCBpdCBhbHNvIGhhcyBhIGhhbmQgaW4gZGVhbGluZyB3aXRoIHNvY2tldHMgaW4gdGhlIGBUSU1FX1dBSVRgIHN0YXRlLCB3aGljaCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCdzIGEgY3JpdGljYWwgc3RhdGUgdG8gcHJvcGVybHkgaGFuZGxlLiBZZXAsIHRoZSBjb2RlIGNvbmZpcm1zIGl0OiBpdCBleHBsaWNpdGx5IGNoZWNrcyBmb3IgYHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9USU1FX1dBSVRgLCBhbmQgaWYgdGhhdCdzIHRoZSBjYXNlIGl0IGNhbGxzIHJlbGV2YW50IGZ1bmN0aW9ucyBzdWNoIGFzIGBpbmV0X3R3c2tfZGVzY2hlZHVsZV9wdXRgLiBUaGlzIGluZGljYXRlcyBhIGJyb2FkZXIgZnVuY3Rpb25hbGl0eSB0aGFuIHRoZSBuYW1lIG1pZ2h0IHN1Z2dlc3QuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBsaW5nZXJpbmcgcmVzb3VyY2VzIGFuZCB0aGUgbmVlZCBmb3IgY2xlYW51cC4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgc2VlIGhvdyBpdCBhbGwgd29ya3MuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgZm9yIGB0Y3BfYWJvcnRgIGRpcmVjdGx5IG5vdyB0byBiZSBzdXJlIG9mIG15IHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTA1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjI6MTIuNDY5NTYxMzA3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzUzNDQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgdGNwX2Fib3J0XFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcC5jPTUwODk9dm9pZCB0Y3BfZG9uZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy01MTE0LVxcbm5ldC9pcHY0L3RjcC5jOjUxMTU6aW50IHRjcF9hYm9ydChzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXFxubmV0L2lwdjQvdGNwLmMtNTExNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIyOjEyLjUxNzA5ODk5OVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDU2MjgyNzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGB0Y3AuY2AqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluLiBNeSBpbnRlcm5hbCByYWRhciBqdXN0IHBpbmdlZCBvbiBgdGNwLmNgLiBTb21ldGhpbmcncyBwcm9iYWJseSBoYXBwZW5pbmcgYXJvdW5kIGxpbmUgNTExNSB0aGF0IHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIEknbSBnb2luZyB0byBzdGFydCB0aGVyZSBhbmQgc2VlIHdoYXQganVtcHMgb3V0LiBJIGhhdmUgYSBmZWVsaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpcyBnb2luZyBvbiBpbiB0aGUgVENQIGltcGxlbWVudGF0aW9uIGFuZCBsaW5lIDUxMTUgZmVlbHMgbGlrZSBhIGdvb2Qgc3BvdCB0byBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSBoYXMgdG8gb2ZmZXIuIEknbSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZnVuY3Rpb24gb3IgYmxvY2sgYW5kIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIFRDUCBjb250ZXh0LiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTA3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjI6MTQuOTczMzk1ODcyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMjk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTE1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MTE1OlxcdGludCB0Y3BfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKVxcbjUxMTY6XFx0e1xcbjUxMTc6XFx0XFx0aW50IHN0YXRlID0gaW5ldF9za19zdGF0ZV9sb2FkKHNrKTtcXG41MTE4OlxcdFxcbjUxMTk6XFx0XFx0aWYgKHN0YXRlID09IFRDUF9ORVdfU1lOX1JFQ1YpIHtcXG41MTIwOlxcdFxcdFxcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSA9IGluZXRfcmVxc2soc2spO1xcbjUxMjE6XFx0XFxuNTEyMjpcXHRcXHRcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuNTEyMzpcXHRcXHRcXHRpbmV0X2Nza19yZXFza19xdWV1ZV9kcm9wKHJlcS1cXHUwMDNlcnNrX2xpc3RlbmVyLCByZXEpO1xcbjUxMjQ6XFx0XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuNTEyNTpcXHRcXHRcXHRyZXR1cm4gMDtcXG41MTI2OlxcdFxcdH1cXG41MTI3OlxcdFxcdGlmIChzdGF0ZSA9PSBUQ1BfVElNRV9XQUlUKSB7XFxuNTEyODpcXHRcXHRcXHRzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dyA9IGluZXRfdHdzayhzayk7XFxuNTEyOTpcXHRcXG41MTMwOlxcdFxcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2dHctXFx1MDAzZXR3X3JlZmNudCk7XFxuNTEzMTpcXHRcXHRcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuNTEzMjpcXHRcXHRcXHRpbmV0X3R3c2tfZGVzY2hlZHVsZV9wdXQodHcpO1xcbjUxMzM6XFx0XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuNTEzNDpcXHRcXHRcXHRyZXR1cm4gMDtcXG41MTM1OlxcdFxcdH1cXG41MTM2OlxcdFxcbjUxMzc6XFx0XFx0LyogQlBGIGNvbnRleHQgZW5zdXJlcyBzb2NrIGxvY2tpbmcuICovXFxuNTEzODpcXHRcXHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcXG41MTM5OlxcdFxcdFxcdC8qIERvbid0IHJhY2Ugd2l0aCB1c2Vyc3BhY2Ugc29ja2V0IGNsb3NlcyBzdWNoIGFzIHRjcF9jbG9zZS4gKi9cXG41MTQwOlxcdFxcdFxcdGxvY2tfc29jayhzayk7XFxuNTE0MTpcXHRcXG41MTQyOlxcdFxcdC8qIEF2b2lkIGNsb3NpbmcgdGhlIHNhbWUgc29ja2V0IHR3aWNlLiAqL1xcbjUxNDM6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHtcXG41MTQ0OlxcdFxcdFxcdGlmICghaGFzX2N1cnJlbnRfYnBmX2N0eCgpKVxcbjUxNDU6XFx0XFx0XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG41MTQ2OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbjUxNDc6XFx0XFx0fVxcbjUxNDg6XFx0XFxuNTE0OTpcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU4pIHtcXG41MTUwOlxcdFxcdFxcdHRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7XFxuNTE1MTpcXHRcXHRcXHRpbmV0X2Nza19saXN0ZW5fc3RvcChzayk7XFxuNTE1MjpcXHRcXHR9XFxuNTE1MzpcXHRcXG41MTU0OlxcdFxcdC8qIERvbid0IHJhY2Ugd2l0aCBCSCBzb2NrZXQgY2xvc2VzIHN1Y2ggYXMgaW5ldF9jc2tfbGlzdGVuX3N0b3AuICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIyOjE0Ljk3MzczMDIwMloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODQyOTI5MDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzIGFuZCBTYWZldHkgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgcGF0Y2ggZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGZvY3VzZXMgb24gbWVtb3J5IHNhZmV0eSBhbmQsIHNwZWNpZmljYWxseSwgd2hldGhlciBpdCBpbnRyb2R1Y2VzIGFueSBuZXcgS01TQU4gY29uY2VybnMuIEZpcnN0LCBJJ20gbm90aW5nIHRoZSBjb3JlIGNoYW5nZXM6IGBicGZfc29ja19kZXN0cm95YCBoYXMgYmVlbiB1cGRhdGVkIHRvIGhhbmRsZSBub24tZnVsbCBzb2NrZXRzIG1vcmUgZ3JhY2VmdWxseS4gSXQgYXZvaWRzIHRoZSBwcm9ibGVtYXRpYyBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIGFjY2VzcyBvbiBzb2NrZXRzIGxpa2UgYGluZXRfdGltZXdhaXRfc29ja2Agd2l0aCBhIGNoZWNrIHVzaW5nIGBza19mdWxsc29jaygpYC4gVGhpcyBpcyBnb29kLCBhcyBpdCBwcmV2ZW50cyBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24uIEl0IGFsc28gYWxsb3dzIHRoZSBkaXJlY3QgY2FsbCB0byBgc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7YC4gVGhlbiwgYGluZXRfY3NrX2xpc3Rlbl9zdG9wYCBoYXMgYmVlbiBhZGp1c3RlZCB0byBhdm9pZCBgY29uZF9yZXNjaGVkKClgIHdoZW4gcnVubmluZyB3aXRoaW4gYSBCUEYgY29udGV4dCwgd2hpY2ggaXMgYSBzZW5zaWJsZSBwcmVjYXV0aW9uIGZvciBhdG9taWMgb3IgUkNVIGNvbnRleHRzLiBGaW5hbGx5LCB0aGVyZSBhcmUgYWRkZWQgc2VsZnRlc3RzLCB3aGljaCwgb2YgY291cnNlLCBhcmUgYWx3YXlzIHdlbGNvbWUuXG5cbk5vdywgcmVnYXJkaW5nIG1lbW9yeSBzYWZldHksIEknbSBub3Qgc2VlaW5nIGFueSByZWQgZmxhZ3MuIFRoZXJlIGFyZW4ndCBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvbiB0aGUgaGVhcCBvciBzdGFjay4gTm8gb3BlcmF0aW9ucyB3aXRoIHVzZXJzcGFjZSAoY29weWluZywgZXRjKS4gSSdtIG5vdCBmaW5kaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgb3IgY29kZSB0aGF0IHVzZXMgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gY29uZGl0aW9uYWwgbG9naWMuIEluIGZhY3QsIHRoaXMgcGF0Y2ggKmltcHJvdmVzKiBtZW1vcnkgc2FmZXR5IGJ5IGd1YXJkaW5nIGFnYWluc3QgdGhlIHBvdGVudGlhbCBmb3IgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9mIGBzay1cdTAwM2Vza19wcm90b2NvbGAgaW4gdGhlIGNhc2Ugb2Ygbm9uLWZ1bGwgc29ja2V0cywgd2hpY2ggaXMgZ3JlYXQuIFRoZSBmaXggZm9yIGBjb25kX3Jlc2NoZWQoKWAgYXZvaWRzIGF0b21pYyBjb250ZXh0IGlzc3Vlcy4gSXQgYXBwZWFycyBzb3VuZC5cblxuSSd2ZSBnb25lIHRocm91Z2ggdGhlIGZvdXIgS01TQU4gY3JpdGVyaWE6XG4xLiBObyBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxuMi4gTm8gY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXG4zLiBObyBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24gd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHVzZWQuXG40LiBObyBib3VuZHMgY2hlY2tzIHRoYXQgbWlnaHQgYWxsb3cgcmVhZGluZyBiZXlvbmQgYnVmZmVyIGJvdW5kYXJpZXMuXG5UaGVyZWZvcmUsIEtNU0FOIGlzbid0IGEgY29uY2VybiBoZXJlLlxuXG5UbyBzdW1tYXJpemUsIHRoaXMgcGF0Y2ggaW1wcm92ZXMgc2FmZXR5IGJ5IGNvcnJlY3RseSBtYW5hZ2luZyBzb2NrZXQgZGVzdHJ1Y3Rpb24gYW5kIHNjaGVkdWxpbmcgd2l0aGluIEJQRiBjb250ZXh0cy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgS01TQU4tcmVsYXRlZCBpc3N1ZXMuIFRoZSBleGlzdGluZyBLQVNBTiwgTE9DS0RFUCwgYW5kIGRlYnVnZ2luZyBmYWNpbGl0aWVzIHdpbGwgY2F0Y2ggb3RoZXIgcG90ZW50aWFsIGlzc3VlcyAoZS5nLiwgVUFGLCByZWZlcmVuY2UgY291bnRpbmcsIGxvY2tpbmcpLlxuXG5UaGlzIHNob3VsZCBpbmZvcm0gYSBgc2V0LXJlc3VsdHNgIHRvb2wgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMTAsIk91dHB1dFRva2VucyI6MjA0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjI6MjEuODE2NjYyMzk3WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX3NvY2tfZGVzdHJveSgpYCB0byBzdXBwb3J0IG5vbi1mdWxsIHNvY2tldHMgKGUuZy4sIFRDUCBUSU1FX1dBSVQgc29ja2V0cykgYnkgZ3VhcmRpbmcgdGhlIGBzay1cXHUwMDNlc2tfcHJvdG9jb2xgIGNoZWNrIHdpdGggYHNrX2Z1bGxzb2NrKClgLCBhbmQgdXBkYXRlcyBgaW5ldF9jc2tfbGlzdGVuX3N0b3AoKWAgdG8gYnlwYXNzIGBjb25kX3Jlc2NoZWQoKWAgd2hlbiBydW5uaW5nIHdpdGhpbiBhIEJQRiBleGVjdXRpb24gY29udGV4dCB0byBwcmV2ZW50IHNsZWVwaW5nIGluIGF0b21pYy9SQ1UgY29udGV4dHMuXFxuXFxuVGhlc2UgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBjb3B5LXRvLXVzZXIgb3BlcmF0aW9ucywgb3IgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBwb3RlbnRpYWwgcmlza3MgcmVsYXRlZCB0byBzb2NrZXQgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgZXhlY3V0aW9uIGNvbnRleHQgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyBhbmQgZGVidWdnZXJzIChLQVNBTiBmb3IgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcywgTE9DS0RFUCAvIERFQlVHX0FUT01JQ19TTEVFUCBmb3Igc2xlZXBpbmcgaW4gYXRvbWljIGNvbnRleHQpLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX3NvY2tfZGVzdHJveSgpYCB0byBzdXBwb3J0IG5vbi1mdWxsIHNvY2tldHMgKGUuZy4sIFRDUCBUSU1FX1dBSVQgc29ja2V0cykgYnkgZ3VhcmRpbmcgdGhlIGBzay1cXHUwMDNlc2tfcHJvdG9jb2xgIGNoZWNrIHdpdGggYHNrX2Z1bGxzb2NrKClgLCBhbmQgdXBkYXRlcyBgaW5ldF9jc2tfbGlzdGVuX3N0b3AoKWAgdG8gYnlwYXNzIGBjb25kX3Jlc2NoZWQoKWAgd2hlbiBydW5uaW5nIHdpdGhpbiBhIEJQRiBleGVjdXRpb24gY29udGV4dCB0byBwcmV2ZW50IHNsZWVwaW5nIGluIGF0b21pYy9SQ1UgY29udGV4dHMuXFxuXFxuVGhlc2UgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBjb3B5LXRvLXVzZXIgb3BlcmF0aW9ucywgb3IgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBwb3RlbnRpYWwgcmlza3MgcmVsYXRlZCB0byBzb2NrZXQgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgZXhlY3V0aW9uIGNvbnRleHQgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyBhbmQgZGVidWdnZXJzIChLQVNBTiBmb3IgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcywgTE9DS0RFUCAvIERFQlVHX0FUT01JQ19TTEVFUCBmb3Igc2xlZXBpbmcgaW4gYXRvbWljIGNvbnRleHQpLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowzqz6n[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 13:19:41 +0000 UTC FinishedAt: 2026-09-10 13:22:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "15e2565f1c43771af0bc5324971cabaad79ac286", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "15e2565f1c43771af0bc5324971cabaad79ac286", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF", "INET" ], "series_id": "d9df2dc8-c122-426b-be13-58e48b2a4c8a" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_sock_destroy", "inet_csk_listen_stop" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-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+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc29ja19kZXN0cm95JiMzNDssCiAgICAmIzM0O2luZXRfY3NrX2xpc3Rlbl9zdG9wJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9zb2NrX2Rlc3Ryb3koKWAgdG8gc3VwcG9ydCBub24tZnVsbCBzb2NrZXRzIChlLmcuLCBUQ1AgVElNRV9XQUlUIHNvY2tldHMpIGJ5IGd1YXJkaW5nIHRoZSBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIGNoZWNrIHdpdGggYHNrX2Z1bGxzb2NrKClgLCBhbmQgdXBkYXRlcyBgaW5ldF9jc2tfbGlzdGVuX3N0b3AoKWAgdG8gYnlwYXNzIGBjb25kX3Jlc2NoZWQoKWAgd2hlbiBydW5uaW5nIHdpdGhpbiBhIEJQRiBleGVjdXRpb24gY29udGV4dCB0byBwcmV2ZW50IHNsZWVwaW5nIGluIGF0b21pYy9SQ1UgY29udGV4dHMuXG5cblRoZXNlIGNoYW5nZXMgZG8gbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgY29weS10by11c2VyIG9wZXJhdGlvbnMsIG9yIGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBBbnkgcG90ZW50aWFsIHJpc2tzIHJlbGF0ZWQgdG8gc29ja2V0IGxpZmV0aW1lLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIGV4ZWN1dGlvbiBjb250ZXh0IGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgYW5kIGRlYnVnZ2VycyAoS0FTQU4gZm9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMsIExPQ0tERVAgLyBERUJVR19BVE9NSUNfU0xFRVAgZm9yIHNsZWVwaW5nIGluIGF0b21pYyBjb250ZXh0KS4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBicGZfc29ja19kZXN0cm95KCkgQlBGIGtmdW5jIHRvIHBlcm1pdCBkZXN0cm95aW5nIG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBzb2NrZXRzKSB0aGF0IGltcGxlbWVudCBkaWFnX2Rlc3Ryb3ksIGFuZCBhZGp1c3RzIGluZXRfY3NrX2xpc3Rlbl9zdG9wKCkgdG8gYXZvaWQgY2FsbGluZyBjb25kX3Jlc2NoZWQoKSB3aGlsZSBleGVjdXRpbmcgaW4gYSBCUEYgY29udGV4dC4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBCUEYgc29ja2V0IGl0ZXJhdGlvbi9kZXN0cnVjdGlvbiBwYXRocyB0aGF0IHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM4OGQ5NTU4ODEzYWY2NDhmZjk0MmM2N2FmZTFiNjVkZDFjYmNkNTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxMzoyMDo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCA4NTEzMTY3YTg1OGE4Li5kOWM0YTEwOGRkYjVlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtMTI5MTEsOCAmIzQzOzEyOTExLDkgQEAgX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuICAqIEBzb2NrOiBQb2ludGVyIHRvIHNvY2tldCB0byBiZSBkZXN0cm95ZWRcbiAgKlxuICAqIFJldHVybjpcbi0gKiBPbiBlcnJvciwgbWF5IHJldHVybiBFUFJPVE9OT1NVUFBPUlQsIEVJTlZBTC5cbi0gKiBFUFJPVE9OT1NVUFBPUlQgaWYgcHJvdG9jb2wgc3BlY2lmaWMgZGVzdHJveSBoYW5kbGVyIGlzIG5vdCBzdXBwb3J0ZWQuXG4mIzQzOyAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIG9yIHdoYXRldmVyIHRoZSBwcm90b2NvbCBzcGVjaWZpY1xuJiM0MzsgKiBkZXN0cm95IGhhbmRsZXIgcmV0dXJucy5cbiYjNDM7ICogRU9QTk9UU1VQUCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC5cbiAgKiAwIG90aGVyd2lzZVxuICAqL1xuIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaylcbkBAIC0xMjkyNCw4ICYjNDM7MTI5MjUsMTIgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxuIFx0ICogU3VwcG9ydGluZyBwcm90b2NvbHMgd2lsbCBuZWVkIHRvIGFjcXVpcmUgc29jayBsb2NrIGluIHRoZSBCUEYgY29udGV4dFxuIFx0ICogcHJpb3IgdG8gaW52b2tpbmcgdGhpcyBrZnVuYy5cbiBcdCAqL1xuLVx0aWYgKCFzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveSB8fCAoc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRcdCAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKSlcbiYjNDM7XHRpZiAoIXNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95KVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRpZiAoc2tfZnVsbHNvY2soc2spIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdHJldHVybiBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY1xuaW5kZXggNjI1NzQ1OWJjZWUyNC4uNmEzMGYxMTM4NDU0NyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbkBAIC0xNTIwLDcgJiM0MzsxNTIwLDggQEAgdm9pZCBpbmV0X2Nza19saXN0ZW5fc3RvcChzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFx0XHRzb2NrX3B1dChjaGlsZCk7XG4gXG4tXHRcdGNvbmRfcmVzY2hlZCgpO1xuJiM0MztcdFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXG4mIzQzO1x0XHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuIFx0aWYgKHF1ZXVlLVx1MDAzZWZhc3RvcGVucS5yc2txX3JzdF9oZWFkKSB7XG4gXHRcdC8qIEZyZWUgYWxsIHRoZSByZXFzIHF1ZXVlZCBpbiByc2txX3JzdF9oZWFkLiAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmNcbmluZGV4IDljMTE5MzhmZTU5N2QuLjc4ZDY0MmEwMmJkYjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmNcbkBAIC0xLDQgJiM0MzsxLDUgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nwb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2VuZGlhbi5oXHUwMDNlXG4gXG5AQCAtMTEwLDYgJiM0MzsxMTEsMTIyIEBAIHN0YXRpYyB2b2lkIHRlc3RfdGNwX3NlcnZlcihzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpXG4gXHRcdGNsb3NlKHNlcnYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF90Y3BfbGlzdGVuX3BlbmRpbmcoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHNlcnYgPSAtMSwgY2xpZW4gPSAtMSwgYWNjZXB0X3NlcnYgPSAtMSwgbiwgc2Vydl9wb3J0O1xuJiM0MztcdHN0cnVjdCBwb2xsZmQgcGZkID0geyAuZXZlbnRzID0gUE9MTElOIH07XG4mIzQzO1x0Y2hhciBidWZbMV07XG4mIzQzO1xuJiM0MztcdHNlcnYgPSBzdGFydF9zZXJ2ZXIoQUZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBOVUxMLCAwLCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShzZXJ2LCAwLCBcJiMzNDtzdGFydF9zZXJ2ZXJcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdHNlcnZfcG9ydCA9IGdldF9zb2NrZXRfbG9jYWxfcG9ydChzZXJ2KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShzZXJ2X3BvcnQsIDAsIFwmIzM0O2dldF9zb2NrX2xvY2FsX3BvcnRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNlcnZfcG9ydCA9IChfX2JlMTYpc2Vydl9wb3J0O1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENvbm5lY3QgYnV0IG5ldmVyIGFjY2VwdCwgc28gdGhlIGNoaWxkIHNpdHMgaW4gdGhlIGFjY2VwdCBxdWV1ZVxuJiM0MztcdCAqIG9mIHRoZSBsaXN0ZW5lci4gV2FpdCB1bnRpbCBpdCYjMzk7cyBhY3R1YWxseSB0aGVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjbGllbiA9IGNvbm5lY3RfdG9fZmQoc2VydiwgMCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UoY2xpZW4sIDAsIFwmIzM0O2Nvbm5lY3RfdG9fZmRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdHBmZC5mZCA9IHNlcnY7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEocG9sbChcdTAwMjZwZmQsIDEsIC0xKSwgMSwgXCYjMzQ7cG9sbCBsaXN0ZW5lclwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIFJ1biBpdGVyYXRvciBwcm9ncmFtIHRoYXQgZGVzdHJveXMgc2VydmVyIHNvY2tldHMuICovXG4mIzQzO1x0c3RhcnRfaXRlcl9zb2NrZXRzKHNrZWwtXHUwMDNlcHJvZ3MuaXRlcl90Y3A2X3NlcnZlcik7XG4mIzQzO1xuJiM0MztcdGFjY2VwdF9zZXJ2ID0gYWNjZXB0KHNlcnYsIE5VTEwsIE5VTEwpO1xuJiM0MztcdGlmICghQVNTRVJUX0xUKGFjY2VwdF9zZXJ2LCAwLCBcJiMzNDthY2NlcHQgb24gZGVzdHJveWVkIGxpc3RlbmVyXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRBU1NFUlRfRVEoZXJybm8sIEVJTlZBTCwgXCYjMzQ7ZXJyb3IgY29kZSBvbiBkZXN0cm95ZWQgbGlzdGVuZXJcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgdW5hY2NlcHRlZCBjaGlsZCB3YXMgcmVzZXQgYWxvbmcgd2l0aCB0aGUgbGlzdGVuZXIuICovXG4mIzQzO1x0biA9IHJlY3YoY2xpZW4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xuJiM0MztcdGlmICghQVNTRVJUX0xUKG4sIDAsIFwmIzM0O2NsaWVudCByZWN2IG9uIHJlc2V0IGNoaWxkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRBU1NFUlRfRVEoZXJybm8sIEVDT05OUkVTRVQsIFwmIzM0O2Vycm9yIGNvZGUgb24gcmVzZXQgY2hpbGRcJiMzNDspO1xuJiM0MztcbiYjNDM7Y2xlYW51cDpcbiYjNDM7XHRpZiAoY2xpZW4gIT0gLTEpXG4mIzQzO1x0XHRjbG9zZShjbGllbik7XG4mIzQzO1x0aWYgKGFjY2VwdF9zZXJ2ICE9IC0xKVxuJiM0MztcdFx0Y2xvc2UoYWNjZXB0X3NlcnYpO1xuJiM0MztcdGlmIChzZXJ2ICE9IC0xKVxuJiM0MztcdFx0Y2xvc2Uoc2Vydik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfdGNwX3RpbWV3YWl0KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcbiYjNDM7e1xuJiM0MztcdGludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIGFjY2VwdF9zZXJ2ID0gLTEsIG47XG4mIzQzO1x0c3RydWN0IHRpbWV2YWwgdHYgPSB7fTtcbiYjNDM7XHRjaGFyIGJ1ZlsxXTtcbiYjNDM7XG4mIzQzO1x0c2VydiA9IHN0YXJ0X3NlcnZlcihBRl9JTkVUNiwgU09DS19TVFJFQU0sIE5VTEwsIDAsIDApO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKHNlcnYsIDAsIFwmIzM0O3N0YXJ0X3NlcnZlclwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGNsaWVuID0gY29ubmVjdF90b19mZChzZXJ2LCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShjbGllbiwgMCwgXCYjMzQ7Y29ubmVjdF90b19mZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGFjY2VwdF9zZXJ2ID0gYWNjZXB0KHNlcnYsIE5VTEwsIE5VTEwpO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKGFjY2VwdF9zZXJ2LCAwLCBcJiMzNDtzZXJ2IGFjY2VwdFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQWN0aXZlIGNsb3NlIGZyb20gdGhlIGNsaWVudCwgdGhlbiBjbG9zZSB0aGUgc2VydmVyIHNpZGUuIE9uY2VcbiYjNDM7XHQgKiByZWN2KCkgc2VlcyBFT0YgdGhlIHNlcnZlciBGSU4gaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCB0aGUgY2xpZW50XG4mIzQzO1x0ICogc29jayBpcyBpbiBUSU1FX1dBSVQuIEJsb2NrIHdpdGhvdXQgdGltZW91dCBzbyBhIGxvYWRlZCBDSSBib3hcbiYjNDM7XHQgKiBjYW4mIzM5O3QgcmFjZSB1cy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhzZXRzb2Nrb3B0KGNsaWVuLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgXHUwMDI2dHYsXG4mIzQzO1x0XHRcdFx0ICBzaXplb2YodHYpKSwgXCYjMzQ7Y2xlYXIgcmN2dGltZW9cJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdGlmICghQVNTRVJUX09LKHNodXRkb3duKGNsaWVuLCBTSFVUX1dSKSwgXCYjMzQ7Y2xpZW50IHNodXRkb3duXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYWtlIHN1cmUgdGhlIHNlcnZlciBoYXMgc2VlbiB0aGUgY2xpZW50IEZJTiBiZWZvcmUgaXQgY2xvc2VzLFxuJiM0MztcdCAqIHNvIHRoZSB0d28gRklOcyBuZXZlciBjcm9zcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRuID0gcmVjdihhY2NlcHRfc2VydiwgYnVmLCBzaXplb2YoYnVmKSwgMCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEobiwgMCwgXCYjMzQ7c2VydmVyIHJlY3YgRU9GXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0Y2xvc2UoYWNjZXB0X3NlcnYpO1xuJiM0MztcdGFjY2VwdF9zZXJ2ID0gLTE7XG4mIzQzO1xuJiM0MztcdC8qIGJsb2NrIHVudGlsIHJldHVybiBFT0YgKi9cbiYjNDM7XHRuID0gcmVjdihjbGllbiwgYnVmLCBzaXplb2YoYnVmKSwgMCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEobiwgMCwgXCYjMzQ7Y2xpZW50IHJlY3YgRU9GXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0LyogUnVuIGl0ZXJhdG9yIHByb2dyYW0gdGhhdCBkZXN0cm95cyB0aGUgdGltZXdhaXQgY2xpZW50IHNvY2suICovXG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZm91bmQgPSAwO1xuJiM0MztcdHN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLVx1MDAzZXByb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZm91bmQsIDEsIFwmIzM0O3RpbWV3YWl0IHNvY2sgZm91bmRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfT0soc2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZGVzdHJveV9lcnIsIFwmIzM0O2Rlc3Ryb3kgdGltZXdhaXQgc29ja1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBkZXN0cm95ZWQgdGltZXdhaXQgc29jayBtdXN0IGJlIGdvbmUuICovXG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZm91bmQgPSAwO1xuJiM0MztcdHN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLVx1MDAzZXByb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kLCAwLCBcJiMzNDt0aW1ld2FpdCBzb2NrIGRlc3Ryb3llZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdGlmIChjbGllbiAhPSAtMSlcbiYjNDM7XHRcdGNsb3NlKGNsaWVuKTtcbiYjNDM7XHRpZiAoYWNjZXB0X3NlcnYgIT0gLTEpXG4mIzQzO1x0XHRjbG9zZShhY2NlcHRfc2Vydik7XG4mIzQzO1x0aWYgKHNlcnYgIT0gLTEpXG4mIzQzO1x0XHRjbG9zZShzZXJ2KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB0ZXN0X3VkcF9jbGllbnQoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxuIHtcbiBcdGludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIG4gPSAwO1xuQEAgLTIwNCw2ICYjNDM7MzIxLDEwIEBAIHZvaWQgdGVzdF9zb2NrX2Rlc3Ryb3kodm9pZClcbiBcdFx0dGVzdF90Y3BfY2xpZW50KHNrZWwpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7dGNwX3NlcnZlclwmIzM0OykpXG4gXHRcdHRlc3RfdGNwX3NlcnZlcihza2VsKTtcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDt0Y3BfbGlzdGVuX3BlbmRpbmdcJiMzNDspKVxuJiM0MztcdFx0dGVzdF90Y3BfbGlzdGVuX3BlbmRpbmcoc2tlbCk7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7dGNwX3RpbWV3YWl0XCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3RfdGNwX3RpbWV3YWl0KHNrZWwpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7dWRwX2NsaWVudFwmIzM0OykpXG4gXHRcdHRlc3RfdWRwX2NsaWVudChza2VsKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3VkcF9zZXJ2ZXJcJiMzNDspKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcbmluZGV4IDllMGJmN2E1NGNlYzkuLjBhODg4NzU0MzIxOGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcbkBAIC03LDYgJiM0Mzs3LDggQEBcbiAjaW5jbHVkZSBcJiMzNDticGZfdHJhY2luZ19uZXQuaFwmIzM0O1xuIFxuIF9fYmUxNiBzZXJ2X3BvcnQgPSAwO1xuJiM0MztpbnQgdHdfZm91bmQgPSAwO1xuJiM0MztpbnQgdHdfZGVzdHJveV9lcnIgPSAwO1xuIFxuIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc2spIF9fa3N5bTtcbiBcbkBAIC0xMDAsNiAmIzQzOzEwMiwzNCBAQCBpbnQgaXRlcl90Y3A2X3NlcnZlcihzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7aXRlci90Y3BcJiMzNDspXG4mIzQzO2ludCBpdGVyX3RjcDZfdGltZXdhaXQoc3RydWN0IGJwZl9pdGVyX190Y3AgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tfY29tbW9uID0gY3R4LVx1MDAzZXNrX2NvbW1vbjtcbiYjNDM7XHRfX3U2NCAqdmFsO1xuJiM0MztcdGludCBrZXkgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXNrX2NvbW1vbilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoc2tfY29tbW9uLVx1MDAzZXNrY19mYW1pbHkgIT0gQUZfSU5FVDYpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFicGZfc2tjX3RvX3RjcF90aW1ld2FpdF9zb2NrKHNrX2NvbW1vbikpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ0Y3BfY29ubl9zb2NrZXRzLCBcdTAwMjZrZXkpO1xuJiM0MztcdGlmICghdmFsKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0LyogVGhlIHRpbWV3YWl0IHNvY2sgaW5oZXJpdHMgdGhlIGNvb2tpZSBvZiB0aGUgY2xvc2VkIGNsaWVudCBzb2NrLiAqL1xuJiM0MztcdGlmIChicGZfZ2V0X3NvY2tldF9jb29raWUoc2tfY29tbW9uKSAhPSAqdmFsKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHR3X2ZvdW5kJiM0MzsmIzQzOztcbiYjNDM7XHR0d19kZXN0cm95X2VyciA9IGJwZl9zb2NrX2Rlc3Ryb3koc2tfY29tbW9uKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiBcbiBTRUMoXCYjMzQ7aXRlci91ZHBcJiMzNDspXG4gaW50IGl0ZXJfdWRwNl9jbGllbnQoc3RydWN0IGJwZl9pdGVyX191ZHAgKmN0eClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NvY2tfZGVzdHJveSYjMzQ7LAogICAgJiMzNDtpbmV0X2Nza19saXN0ZW5fc3RvcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYnBmX3NvY2tfZGVzdHJveSgpIEJQRiBrZnVuYyB0byBwZXJtaXQgZGVzdHJveWluZyBub24tZnVsbCBzb2NrZXRzIChzdWNoIGFzIFRDUCBUSU1FX1dBSVQgc29ja2V0cykgdGhhdCBpbXBsZW1lbnQgZGlhZ19kZXN0cm95LCBhbmQgYWRqdXN0cyBpbmV0X2Nza19saXN0ZW5fc3RvcCgpIHRvIGF2b2lkIGNhbGxpbmcgY29uZF9yZXNjaGVkKCkgd2hpbGUgZXhlY3V0aW5nIGluIGEgQlBGIGNvbnRleHQuIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGIHNvY2tldCBpdGVyYXRpb24vZGVzdHJ1Y3Rpb24gcGF0aHMgdGhhdCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzODhkOTU1ODgxM2FmNjQ4ZmY5NDJjNjdhZmUxYjY1ZGQxY2JjZDU5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMTM6MjA6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDg1MTMxNjdhODU4YTguLmQ5YzRhMTA4ZGRiNWUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC0xMjkxMSw4ICYjNDM7MTI5MTEsOSBAQCBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7CiAgKiBAc29jazogUG9pbnRlciB0byBzb2NrZXQgdG8gYmUgZGVzdHJveWVkCiAgKgogICogUmV0dXJuOgotICogT24gZXJyb3IsIG1heSByZXR1cm4gRVBST1RPTk9TVVBQT1JULCBFSU5WQUwuCi0gKiBFUFJPVE9OT1NVUFBPUlQgaWYgcHJvdG9jb2wgc3BlY2lmaWMgZGVzdHJveSBoYW5kbGVyIGlzIG5vdCBzdXBwb3J0ZWQuCiYjNDM7ICogT24gZXJyb3IsIG1heSByZXR1cm4gRU9QTk9UU1VQUCwgb3Igd2hhdGV2ZXIgdGhlIHByb3RvY29sIHNwZWNpZmljCiYjNDM7ICogZGVzdHJveSBoYW5kbGVyIHJldHVybnMuCiYjNDM7ICogRU9QTk9UU1VQUCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC4KICAqIDAgb3RoZXJ3aXNlCiAgKi8KIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaykKQEAgLTEyOTI0LDggJiM0MzsxMjkyNSwxMiBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spCiAJICogU3VwcG9ydGluZyBwcm90b2NvbHMgd2lsbCBuZWVkIHRvIGFjcXVpcmUgc29jayBsb2NrIGluIHRoZSBCUEYgY29udGV4dAogCSAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuCiAJICovCi0JaWYgKCFzay0mZ3Q7c2tfcHJvdC0mZ3Q7ZGlhZ19kZXN0cm95IHx8IChzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgJmFtcDsmYW1wOwotCQkJCQkgICBzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApKQomIzQzOwlpZiAoIXNrLSZndDtza19wcm90LSZndDtkaWFnX2Rlc3Ryb3kpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWlmIChza19mdWxsc29jayhzaykgJmFtcDsmYW1wOwomIzQzOwkgICAgc2stJmd0O3NrX3Byb3RvY29sICE9IElQUFJPVE9fVENQICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrLSZndDtza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJcmV0dXJuIHNrLSZndDtza19wcm90LSZndDtkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwppbmRleCA2MjU3NDU5YmNlZTI0Li42YTMwZjExMzg0NTQ3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTE1MjAsNyAmIzQzOzE1MjAsOCBAQCB2b2lkIGluZXRfY3NrX2xpc3Rlbl9zdG9wKHN0cnVjdCBzb2NrICpzaykKIAkJbG9jYWxfYmhfZW5hYmxlKCk7CiAJCXNvY2tfcHV0KGNoaWxkKTsKIAotCQljb25kX3Jlc2NoZWQoKTsKJiM0MzsJCWlmICghaGFzX2N1cnJlbnRfYnBmX2N0eCgpKQomIzQzOwkJCWNvbmRfcmVzY2hlZCgpOwogCX0KIAlpZiAocXVldWUtJmd0O2Zhc3RvcGVucS5yc2txX3JzdF9oZWFkKSB7CiAJCS8qIEZyZWUgYWxsIHRoZSByZXFzIHF1ZXVlZCBpbiByc2txX3JzdF9oZWFkLiAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYwppbmRleCA5YzExOTM4ZmU1OTdkLi43OGQ2NDJhMDJiZGI2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYwpAQCAtMSw0ICYjNDM7MSw1IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDtwb2xsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwogI2luY2x1ZGUgJmx0O2JwZi9icGZfZW5kaWFuLmgmZ3Q7CiAKQEAgLTExMCw2ICYjNDM7MTExLDEyMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3RjcF9zZXJ2ZXIoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKQogCQljbG9zZShzZXJ2KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHRlc3RfdGNwX2xpc3Rlbl9wZW5kaW5nKHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbCkKJiM0Mzt7CiYjNDM7CWludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIGFjY2VwdF9zZXJ2ID0gLTEsIG4sIHNlcnZfcG9ydDsKJiM0MzsJc3RydWN0IHBvbGxmZCBwZmQgPSB7IC5ldmVudHMgPSBQT0xMSU4gfTsKJiM0MzsJY2hhciBidWZbMV07CiYjNDM7CiYjNDM7CXNlcnYgPSBzdGFydF9zZXJ2ZXIoQUZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBOVUxMLCAwLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0Uoc2VydiwgMCwgJiMzNDtzdGFydF9zZXJ2ZXImIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CXNlcnZfcG9ydCA9IGdldF9zb2NrZXRfbG9jYWxfcG9ydChzZXJ2KTsKJiM0MzsJaWYgKCFBU1NFUlRfR0Uoc2Vydl9wb3J0LCAwLCAmIzM0O2dldF9zb2NrX2xvY2FsX3BvcnQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7c2Vydl9wb3J0ID0gKF9fYmUxNilzZXJ2X3BvcnQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIENvbm5lY3QgYnV0IG5ldmVyIGFjY2VwdCwgc28gdGhlIGNoaWxkIHNpdHMgaW4gdGhlIGFjY2VwdCBxdWV1ZQomIzQzOwkgKiBvZiB0aGUgbGlzdGVuZXIuIFdhaXQgdW50aWwgaXQmIzM5O3MgYWN0dWFsbHkgdGhlcmUuCiYjNDM7CSAqLwomIzQzOwljbGllbiA9IGNvbm5lY3RfdG9fZmQoc2VydiwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGNsaWVuLCAwLCAmIzM0O2Nvbm5lY3RfdG9fZmQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CXBmZC5mZCA9IHNlcnY7CiYjNDM7CWlmICghQVNTRVJUX0VRKHBvbGwoJmFtcDtwZmQsIDEsIC0xKSwgMSwgJiMzNDtwb2xsIGxpc3RlbmVyJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKiBSdW4gaXRlcmF0b3IgcHJvZ3JhbSB0aGF0IGRlc3Ryb3lzIHNlcnZlciBzb2NrZXRzLiAqLwomIzQzOwlzdGFydF9pdGVyX3NvY2tldHMoc2tlbC0mZ3Q7cHJvZ3MuaXRlcl90Y3A2X3NlcnZlcik7CiYjNDM7CiYjNDM7CWFjY2VwdF9zZXJ2ID0gYWNjZXB0KHNlcnYsIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9MVChhY2NlcHRfc2VydiwgMCwgJiMzNDthY2NlcHQgb24gZGVzdHJveWVkIGxpc3RlbmVyJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlBU1NFUlRfRVEoZXJybm8sIEVJTlZBTCwgJiMzNDtlcnJvciBjb2RlIG9uIGRlc3Ryb3llZCBsaXN0ZW5lciYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogVGhlIHVuYWNjZXB0ZWQgY2hpbGQgd2FzIHJlc2V0IGFsb25nIHdpdGggdGhlIGxpc3RlbmVyLiAqLwomIzQzOwluID0gcmVjdihjbGllbiwgYnVmLCBzaXplb2YoYnVmKSwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0xUKG4sIDAsICYjMzQ7Y2xpZW50IHJlY3Ygb24gcmVzZXQgY2hpbGQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CUFTU0VSVF9FUShlcnJubywgRUNPTk5SRVNFVCwgJiMzNDtlcnJvciBjb2RlIG9uIHJlc2V0IGNoaWxkJiMzNDspOwomIzQzOwomIzQzO2NsZWFudXA6CiYjNDM7CWlmIChjbGllbiAhPSAtMSkKJiM0MzsJCWNsb3NlKGNsaWVuKTsKJiM0MzsJaWYgKGFjY2VwdF9zZXJ2ICE9IC0xKQomIzQzOwkJY2xvc2UoYWNjZXB0X3NlcnYpOwomIzQzOwlpZiAoc2VydiAhPSAtMSkKJiM0MzsJCWNsb3NlKHNlcnYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3RjcF90aW1ld2FpdChzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpCiYjNDM7ewomIzQzOwlpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBhY2NlcHRfc2VydiA9IC0xLCBuOwomIzQzOwlzdHJ1Y3QgdGltZXZhbCB0diA9IHt9OwomIzQzOwljaGFyIGJ1ZlsxXTsKJiM0MzsKJiM0MzsJc2VydiA9IHN0YXJ0X3NlcnZlcihBRl9JTkVUNiwgU09DS19TVFJFQU0sIE5VTEwsIDAsIDApOwomIzQzOwlpZiAoIUFTU0VSVF9HRShzZXJ2LCAwLCAmIzM0O3N0YXJ0X3NlcnZlciYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJY2xpZW4gPSBjb25uZWN0X3RvX2ZkKHNlcnYsIDApOwomIzQzOwlpZiAoIUFTU0VSVF9HRShjbGllbiwgMCwgJiMzNDtjb25uZWN0X3RvX2ZkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlhY2NlcHRfc2VydiA9IGFjY2VwdChzZXJ2LCBOVUxMLCBOVUxMKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoYWNjZXB0X3NlcnYsIDAsICYjMzQ7c2VydiBhY2NlcHQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEFjdGl2ZSBjbG9zZSBmcm9tIHRoZSBjbGllbnQsIHRoZW4gY2xvc2UgdGhlIHNlcnZlciBzaWRlLiBPbmNlCiYjNDM7CSAqIHJlY3YoKSBzZWVzIEVPRiB0aGUgc2VydmVyIEZJTiBoYXMgYmVlbiBwcm9jZXNzZWQgYW5kIHRoZSBjbGllbnQKJiM0MzsJICogc29jayBpcyBpbiBUSU1FX1dBSVQuIEJsb2NrIHdpdGhvdXQgdGltZW91dCBzbyBhIGxvYWRlZCBDSSBib3gKJiM0MzsJICogY2FuJiMzOTt0IHJhY2UgdXMuCiYjNDM7CSAqLwomIzQzOwlpZiAoIUFTU0VSVF9PSyhzZXRzb2Nrb3B0KGNsaWVuLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgJmFtcDt0diwKJiM0MzsJCQkJICBzaXplb2YodHYpKSwgJiMzNDtjbGVhciByY3Z0aW1lbyYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soc2h1dGRvd24oY2xpZW4sIFNIVVRfV1IpLCAmIzM0O2NsaWVudCBzaHV0ZG93biYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTWFrZSBzdXJlIHRoZSBzZXJ2ZXIgaGFzIHNlZW4gdGhlIGNsaWVudCBGSU4gYmVmb3JlIGl0IGNsb3NlcywKJiM0MzsJICogc28gdGhlIHR3byBGSU5zIG5ldmVyIGNyb3NzLgomIzQzOwkgKi8KJiM0MzsJbiA9IHJlY3YoYWNjZXB0X3NlcnYsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOwomIzQzOwlpZiAoIUFTU0VSVF9FUShuLCAwLCAmIzM0O3NlcnZlciByZWN2IEVPRiYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJY2xvc2UoYWNjZXB0X3NlcnYpOwomIzQzOwlhY2NlcHRfc2VydiA9IC0xOwomIzQzOwomIzQzOwkvKiBibG9jayB1bnRpbCByZXR1cm4gRU9GICovCiYjNDM7CW4gPSByZWN2KGNsaWVuLCBidWYsIHNpemVvZihidWYpLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVEobiwgMCwgJiMzNDtjbGllbnQgcmVjdiBFT0YmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIFJ1biBpdGVyYXRvciBwcm9ncmFtIHRoYXQgZGVzdHJveXMgdGhlIHRpbWV3YWl0IGNsaWVudCBzb2NrLiAqLwomIzQzOwlza2VsLSZndDtic3MtJmd0O3R3X2ZvdW5kID0gMDsKJiM0MzsJc3RhcnRfaXRlcl9zb2NrZXRzKHNrZWwtJmd0O3Byb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7CiYjNDM7CWlmICghQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7dHdfZm91bmQsIDEsICYjMzQ7dGltZXdhaXQgc29jayBmb3VuZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJQVNTRVJUX09LKHNrZWwtJmd0O2Jzcy0mZ3Q7dHdfZGVzdHJveV9lcnIsICYjMzQ7ZGVzdHJveSB0aW1ld2FpdCBzb2NrJiMzNDspOwomIzQzOwomIzQzOwkvKiBUaGUgZGVzdHJveWVkIHRpbWV3YWl0IHNvY2sgbXVzdCBiZSBnb25lLiAqLwomIzQzOwlza2VsLSZndDtic3MtJmd0O3R3X2ZvdW5kID0gMDsKJiM0MzsJc3RhcnRfaXRlcl9zb2NrZXRzKHNrZWwtJmd0O3Byb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3R3X2ZvdW5kLCAwLCAmIzM0O3RpbWV3YWl0IHNvY2sgZGVzdHJveWVkJiMzNDspOwomIzQzOwomIzQzO2NsZWFudXA6CiYjNDM7CWlmIChjbGllbiAhPSAtMSkKJiM0MzsJCWNsb3NlKGNsaWVuKTsKJiM0MzsJaWYgKGFjY2VwdF9zZXJ2ICE9IC0xKQomIzQzOwkJY2xvc2UoYWNjZXB0X3NlcnYpOwomIzQzOwlpZiAoc2VydiAhPSAtMSkKJiM0MzsJCWNsb3NlKHNlcnYpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHRlc3RfdWRwX2NsaWVudChzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpCiB7CiAJaW50IHNlcnYgPSAtMSwgY2xpZW4gPSAtMSwgbiA9IDA7CkBAIC0yMDQsNiAmIzQzOzMyMSwxMCBAQCB2b2lkIHRlc3Rfc29ja19kZXN0cm95KHZvaWQpCiAJCXRlc3RfdGNwX2NsaWVudChza2VsKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3RjcF9zZXJ2ZXImIzM0OykpCiAJCXRlc3RfdGNwX3NlcnZlcihza2VsKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt0Y3BfbGlzdGVuX3BlbmRpbmcmIzM0OykpCiYjNDM7CQl0ZXN0X3RjcF9saXN0ZW5fcGVuZGluZyhza2VsKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt0Y3BfdGltZXdhaXQmIzM0OykpCiYjNDM7CQl0ZXN0X3RjcF90aW1ld2FpdChza2VsKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3VkcF9jbGllbnQmIzM0OykpCiAJCXRlc3RfdWRwX2NsaWVudChza2VsKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3VkcF9zZXJ2ZXImIzM0OykpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jCmluZGV4IDllMGJmN2E1NGNlYzkuLjBhODg4NzU0MzIxOGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jCkBAIC03LDYgJiM0Mzs3LDggQEAKICNpbmNsdWRlICYjMzQ7YnBmX3RyYWNpbmdfbmV0LmgmIzM0OwogCiBfX2JlMTYgc2Vydl9wb3J0ID0gMDsKJiM0MztpbnQgdHdfZm91bmQgPSAwOwomIzQzO2ludCB0d19kZXN0cm95X2VyciA9IDA7CiAKIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc2spIF9fa3N5bTsKIApAQCAtMTAwLDYgJiM0MzsxMDIsMzQgQEAgaW50IGl0ZXJfdGNwNl9zZXJ2ZXIoc3RydWN0IGJwZl9pdGVyX190Y3AgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0O2l0ZXIvdGNwJiMzNDspCiYjNDM7aW50IGl0ZXJfdGNwNl90aW1ld2FpdChzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHNvY2tfY29tbW9uICpza19jb21tb24gPSBjdHgtJmd0O3NrX2NvbW1vbjsKJiM0MzsJX191NjQgKnZhbDsKJiM0MzsJaW50IGtleSA9IDA7CiYjNDM7CiYjNDM7CWlmICghc2tfY29tbW9uKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChza19jb21tb24tJmd0O3NrY19mYW1pbHkgIT0gQUZfSU5FVDYpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCFicGZfc2tjX3RvX3RjcF90aW1ld2FpdF9zb2NrKHNrX2NvbW1vbikpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3RjcF9jb25uX3NvY2tldHMsICZhbXA7a2V5KTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJLyogVGhlIHRpbWV3YWl0IHNvY2sgaW5oZXJpdHMgdGhlIGNvb2tpZSBvZiB0aGUgY2xvc2VkIGNsaWVudCBzb2NrLiAqLwomIzQzOwlpZiAoYnBmX2dldF9zb2NrZXRfY29va2llKHNrX2NvbW1vbikgIT0gKnZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl0d19mb3VuZCYjNDM7JiM0Mzs7CiYjNDM7CXR3X2Rlc3Ryb3lfZXJyID0gYnBmX3NvY2tfZGVzdHJveShza19jb21tb24pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiAKIFNFQygmIzM0O2l0ZXIvdWRwJiMzNDspCiBpbnQgaXRlcl91ZHA2X2NsaWVudChzdHJ1Y3QgYnBmX2l0ZXJfX3VkcCAqY3R4KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzI4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmsgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgd2hldGhlciBpdCBwcmVzZW50cyBhbnkgaW50ZXJlc3RpbmcgZnV6emluZyB0YXJnZXRzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMuIExldCYjMzk7cyBzZWUuLi4KCkluIGBuZXQvY29yZS9maWx0ZXIuY2AsIHRoZSBgYnBmX3NvY2tfZGVzdHJveWAgZnVuY3Rpb24gaGFzIGJlZW4gbW9kaWZpZWQuICBJdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIHNvbWUgZmluZS10dW5pbmcgcmVsYXRlZCB0byBob3cgc29ja2V0IGRlc3RydWN0aW9uIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggc2VlbXMgdG8gcmVsYXggdGhlIHJlcXVpcmVtZW50IHRoYXQgdGhlIHNvY2tldCBiZSBhICYjMzQ7ZnVsbHNvY2smIzM0OyBiZWZvcmUgYWxsb3dpbmcgYGRpYWdfZGVzdHJveWAgdG8gYmUgY2FsbGVkLiAgVGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGhhcyBjaGFuZ2VkLCBhbmQgaXQgbm93IHNlZW1zIHRvIGNvbnNpZGVyIGFsbG93aW5nIG5vbi1mdWxsc29jayBzb2NrZXRzIChsaWtlIGB0d19zb2NrYCBvciBgcmVxX3NvY2tgKSBpZiB0aGV5IGhhdmUgYSBgZGlhZ19kZXN0cm95YCBmdW5jdGlvbi4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpczogd2hhdCBpcyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlPyBDb3VsZCB0aGlzIGxlYWQgdG8gbmV3IGNvZGUgcGF0aHMgd2hlbiBkZWFsaW5nIHdpdGggY2VydGFpbiBzb2NrZXQgc3RhdGVzLCBsaWtlIHRpbWUtd2FpdCBzb2NrZXRzIG9yIHJlcXVlc3Qgc29ja2V0cz8gVGhlIHJldHVybiBjb2RlIGxvZ2ljIGlzIGFsc28gbW9kaWZpZWQsIHdoaWNoIEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQuCgpOZXh0LCBpbiBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2AsIHRoZSBwYXRjaCB0b3VjaGVzIGBpbmV0X2Nza19saXN0ZW5fc3RvcGAuIFRoZSBrZXkgY2hhbmdlIGlzIGFkZGluZyBhIGNoZWNrIGZvciB0aGUgQlBGIGNvbnRleHQgKGAhaGFzX2N1cnJlbnRfYnBmX2N0eCgpYCkgYmVmb3JlIGNhbGxpbmcgYGNvbmRfcmVzY2hlZCgpYC4gVGhpcyBpcyBpbXBvcnRhbnQsIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBpc3N1ZXMgd2hlbiBjYWxsZWQgZnJvbSBhIEJQRiBjb250ZXh0LiBDYWxsaW5nIGBjb25kX3Jlc2NoZWQoKWAgaW4gYW4gYXRvbWljIG9yIEJQRiBjb250ZXh0IGlzIGdlbmVyYWxseSBwcm9ibGVtYXRpYy4gSSBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kLgoKRmluYWxseSwgdGhlcmUgYXJlIHNvbWUgc2VsZnRlc3QgYWRkaXRpb25zLiBUaGlzIGNvdWxkIGJlIHVzZWZ1bC4gSXQmIzM5O3MgbGlrZWx5IHRoZXNlIHRlc3RzIHdpbGwgZ2l2ZSBtZSBzb21lIGluc2lnaHQgaW50byBob3cgdGhlc2UgY2hhbmdlcyBhcmUgaW50ZW5kZWQgdG8gZnVuY3Rpb24gYW5kIHBlcmhhcHMgcmV2ZWFsIHNvbWUgZWRnZSBjYXNlcy4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBzdGFydCBkaWdnaW5nIGluIHdpdGggc29tZSBncmVwcGluZyBhbmQgZmlsZSByZWFkaW5nLiBJIG5lZWQgdG8gZGV0ZXJtaW5lOiBXaGF0IGFyZSB0aGUgc3BlY2lmaWMgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMgaW4gdGhlIEJQRiBjb250ZXh0PyBXaGF0IHNvY2tldCBzdGF0ZXMgYXJlIGltcGFjdGVkIGJ5IHRoZXNlIG1vZGlmaWNhdGlvbnM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBjYW5kaWRhdGVzIGZvciBmdXp6aW5nIGJhc2VkIG9uIHRoZSBhbHRlcmVkIGNvZGUgcGF0aHMgb3IgcmV0dXJuIGNvZGVzPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBmb2N1cyBzeW1ib2xzIGFuZCByZWxhdGVkIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0byBiZXR0ZXIgYW5hbHl6ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc29ja19kZXN0cm95JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTEyOTAwPV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTAxLVxubmV0L2NvcmUvZmlsdGVyLmM6MTI5MDI6LyogYnBmX3NvY2tfZGVzdHJveTogRGVzdHJveSB0aGUgZ2l2ZW4gc29ja2V0IHdpdGggRUNPTk5BQk9SVEVEIGVycm9yIGNvZGUuXG5uZXQvY29yZS9maWx0ZXIuYy0xMjkwMy0gKlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTE4LSAqL1xubmV0L2NvcmUvZmlsdGVyLmM6MTI5MTk6X19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxubmV0L2NvcmUvZmlsdGVyLmMtMTI5MjAte1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyOTQxPUJURl9LRlVOQ1NfU1RBUlQoYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzKVxubmV0L2NvcmUvZmlsdGVyLmM6MTI5NDI6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zb2NrX2Rlc3Ryb3kpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk0My1CVEZfS0ZVTkNTX0VORChicGZfc2tfaXRlcl9rZnVuY19pZHMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmM9MTE9aW50IHR3X2Rlc3Ryb3lfZXJyID0gMDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jLTEyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmM6MTM6aW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzaykgX19rc3ltO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMtMTQtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmM9NTE9aW50IGl0ZXJfdGNwNl9jbGllbnQoc3RydWN0IGJwZl9pdGVyX190Y3AgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYy02OS1cdGlmIChzb2NrX2Nvb2tpZSA9PSAqdmFsKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmM6NzA6XHRcdGJwZl9zb2NrX2Rlc3Ryb3koc2tfY29tbW9uKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jLTcxLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jPTc2PWludCBpdGVyX3RjcDZfc2VydmVyKHN0cnVjdCBicGZfaXRlcl9fdGNwICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMtOTktXHRpZiAoc3JjcCA9PSBzZXJ2X3BvcnQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYzoxMDA6XHRcdGJwZl9zb2NrX2Rlc3Ryb3koc2tfY29tbW9uKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jLTEwMS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYz0xMDY9aW50IGl0ZXJfdGNwNl90aW1ld2FpdChzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jLTEyOC1cdHR3X2ZvdW5kJiM0MzsmIzQzOztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jOjEyOTpcdHR3X2Rlc3Ryb3lfZXJyID0gYnBmX3NvY2tfZGVzdHJveShza19jb21tb24pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMtMTMwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jPTEzNT1pbnQgaXRlcl91ZHA2X2NsaWVudChzdHJ1Y3QgYnBmX2l0ZXJfX3VkcCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jLTE1MC1cdGlmIChzb2NrX2Nvb2tpZSA9PSAqdmFsKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmM6MTUxOlx0XHRicGZfc29ja19kZXN0cm95KChzdHJ1Y3Qgc29ja19jb21tb24gKilzayk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYy0xNTItXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmM9MTU3PWludCBpdGVyX3VkcDZfc2VydmVyKHN0cnVjdCBicGZfaXRlcl9fdWRwICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMtMTY5LVx0aWYgKHNyY3AgPT0gc2Vydl9wb3J0KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmM6MTcwOlx0XHRicGZfc29ja19kZXN0cm95KChzdHJ1Y3Qgc29ja19jb21tb24gKilzayk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYy0xNzEtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nX2ZhaWwuYz05PWNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2dfZmFpbC5jLTEwLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nX2ZhaWwuYzoxMTppbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNrKSBfX2tzeW07XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2dfZmFpbC5jLTEyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nX2ZhaWwuYz0xMz1TRUMoXCYjMzQ7dHBfYnRmL3RjcF9kZXN0cm95X3NvY2tcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2dfZmFpbC5jOjE0Ol9fZmFpbHVyZSBfX21zZyhcJiMzNDtjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBicGZfc29ja19kZXN0cm95IGlzIG5vdCBhbGxvd2VkXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nX2ZhaWwuYy0xNS1pbnQgQlBGX1BST0codHJhY2VfdGNwX2Rlc3Ryb3lfc29jaywgc3RydWN0IHNvY2sgKnNrKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZ19mYWlsLmMtMTctXHQvKiBzaG91bGQgbm90IGxvYWQgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZ19mYWlsLmM6MTg6XHRicGZfc29ja19kZXN0cm95KChzdHJ1Y3Qgc29ja19jb21tb24gKilzayk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2dfZmFpbC5jLTE5LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2l0ZXJfYmF0Y2guYz03Nj1pbnQgaXRlcl90Y3BfZGVzdHJveShzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2l0ZXJfYmF0Y2guYy04Ny1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2l0ZXJfYmF0Y2guYzo4ODpcdGJwZl9zb2NrX2Rlc3Ryb3koc2tfY29tbW9uKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2l0ZXJfYmF0Y2guYy04OS1cdGJwZl9zZXFfd3JpdGUoY3R4LVx1MDAzZW1ldGEtXHUwMDNlc2VxLCBcdTAwMjZzb2NrX2Nvb2tpZSwgc2l6ZW9mKHNvY2tfY29va2llKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTM6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ2MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgQ29kZTogVW5kZXJzdGFuZGluZyBOZXR3b3JrIEZpbHRlcmluZyBhbmQgQ29ubmVjdGlvbiBNYW5hZ2VtZW50KioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbW9kaWZpY2F0aW9ucyB0aGF0IGhhdmUgYmVlbiBtYWRlLCBzbyBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0d28ga2V5IGZpbGVzLiBGaXJzdCwgSSYjMzk7bSBzdGFydGluZyB3aXRoIGBuZXQvY29yZS9maWx0ZXIuY2AuIEkga25vdyB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIHBhY2tldCBmaWx0ZXJpbmcgbG9naWMgcmVzaWRlcywgc28gSSYjMzk7bSBsb29raW5nIGZvciBjaGFuZ2VzIHRoYXQgd291bGQgYWZmZWN0IGhvdyBwYWNrZXRzIGFyZSBjbGFzc2lmaWVkLCBwcm9jZXNzZWQsIG9yIHBvdGVudGlhbGx5IGRyb3BwZWQuIEkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGFsdGVyYXRpb25zIGluIHRoZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGhhbmRsaW5nLCBhbnkgbmV3IGZpbHRlciBob29rcywgb3IgYW55IHVwZGF0ZXMgdG8gdGhlIGZpbHRlciBjaGFpbnMuIEkmIzM5O20gbG9va2luZyBmb3IgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZmlsdGVyaW5nIGxhbmRzY2FwZSBoYXMgY2hhbmdlZC4KCk5leHQsIEkmIzM5O2xsIG1vdmUgb3ZlciB0byBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2AuIFRoaXMgZmlsZSBpcyBjcnVjaWFsIGZvciBtYW5hZ2luZyBUQ1AvSVAgY29ubmVjdGlvbnMgaW4gdGhlIElQdjQgY29udGV4dC4gSSBhbnRpY2lwYXRlIGNoYW5nZXMgaGVyZSBtaWdodCByZWxhdGUgdG8gaG93IGNvbm5lY3Rpb25zIGFyZSBlc3RhYmxpc2hlZCwgbWFpbnRhaW5lZCwgb3IgdGVybWluYXRlZCwgcG90ZW50aWFsbHkgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgZmlsdGVyaW5nIHJ1bGVzIEkgZXhhbWluZWQgcHJldmlvdXNseS4gSSYjMzk7bGwgYmUgc2NydXRpbml6aW5nIHNvY2tldCBjcmVhdGlvbiwgY29ubmVjdGlvbiBhY2NlcHRhbmNlLCBhbmQgZGF0YSBmbG93IHRvIHNlZSBpZiBhbnkgbmV3IGZpbHRlcmluZyBjcml0ZXJpYSBvciBzZWN1cml0eSBtZWFzdXJlcyBoYXZlIGJlZW4gaW50ZWdyYXRlZCB3aXRoaW4gdGhpcyBwYXJ0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJdCYjMzk7cyBhIGtleSBzcG90IHRvIHNlZSBob3cgdGhlIGNvbm5lY3Rpb24gcHJvY2VzcyBpbnRlcmFjdHMgd2l0aCB0aGUgZmlsdGVyaW5nIG1lY2hhbmlzbXMuIFVsdGltYXRlbHksIEkmIzM5O20gZXhwZWN0aW5nIHRvIHVuY292ZXIgaG93IHRoZXNlIHNwZWNpZmljIG1vZGlmaWNhdGlvbnMgaW5mbHVlbmNlIHRoZSBuZXR3b3JrIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjkwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjkwNTpcdCAqIHByb3RvY29sIHNwZWNpZmljIHNvY2tldCBkZXN0cm95IGhhbmRsZXJzLlxuMTI5MDY6XHQgKlxuMTI5MDc6XHQgKiBUaGUgaGVscGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIEJQRiBjb250ZXh0cyB0aGF0IGhhdmUgYWNxdWlyZWQgdGhlIHNvY2tldFxuMTI5MDg6XHQgKiBsb2Nrcy5cbjEyOTA5Olx0ICpcbjEyOTEwOlx0ICogUGFyYW1ldGVyczpcbjEyOTExOlx0ICogQHNvY2s6IFBvaW50ZXIgdG8gc29ja2V0IHRvIGJlIGRlc3Ryb3llZFxuMTI5MTI6XHQgKlxuMTI5MTM6XHQgKiBSZXR1cm46XG4xMjkxNDpcdCAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIG9yIHdoYXRldmVyIHRoZSBwcm90b2NvbCBzcGVjaWZpY1xuMTI5MTU6XHQgKiBkZXN0cm95IGhhbmRsZXIgcmV0dXJucy5cbjEyOTE2Olx0ICogRU9QTk9UU1VQUCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC5cbjEyOTE3Olx0ICogMCBvdGhlcndpc2VcbjEyOTE4Olx0ICovXG4xMjkxOTpcdF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaylcbjEyOTIwOlx0e1xuMTI5MjE6XHRcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKXNvY2s7XG4xMjkyMjpcdFxuMTI5MjM6XHRcdC8qIFRoZSBsb2NraW5nIHNlbWFudGljcyB0aGF0IGFsbG93IGZvciBzeW5jaHJvbm91cyBleGVjdXRpb24gb2YgdGhlXG4xMjkyNDpcdFx0ICogZGVzdHJveSBoYW5kbGVycyBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIFRDUCBhbmQgVURQLlxuMTI5MjU6XHRcdCAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHRcbjEyOTI2Olx0XHQgKiBwcmlvciB0byBpbnZva2luZyB0aGlzIGtmdW5jLlxuMTI5Mjc6XHRcdCAqL1xuMTI5Mjg6XHRcdGlmICghc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3kpXG4xMjkyOTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMjkzMDpcdFxuMTI5MzE6XHRcdGlmIChza19mdWxsc29jayhzaykgXHUwMDI2XHUwMDI2XG4xMjkzMjpcdFx0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNlxuMTI5MzM6XHRcdCAgICBzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUClcbjEyOTM0Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjEyOTM1Olx0XG4xMjkzNjpcdFx0cmV0dXJuIHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95KHNrLCBFQ09OTkFCT1JURUQpO1xuMTI5Mzc6XHR9XG4xMjkzODpcdFxuMTI5Mzk6XHRfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuMTI5NDA6XHRcbjEyOTQxOlx0QlRGX0tGVU5DU19TVEFSVChicGZfc2tfaXRlcl9rZnVuY19pZHMpXG4xMjk0MjpcdEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc29ja19kZXN0cm95KVxuMTI5NDM6XHRCVEZfS0ZVTkNTX0VORChicGZfc2tfaXRlcl9rZnVuY19pZHMpXG4xMjk0NDpcdFxuMTI5NDU6XHRzdGF0aWMgaW50IHRyYWNpbmdfaXRlcl9maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG4xMjk0NjpcdHtcbjEyOTQ3Olx0XHRpZiAoYnRmX2lkX3NldDhfY29udGFpbnMoXHUwMDI2YnBmX3NrX2l0ZXJfa2Z1bmNfaWRzLCBrZnVuY19pZCkgXHUwMDI2XHUwMDI2XG4xMjk0ODpcdFx0ICAgIHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX0lURVIpXG4xMjk0OTpcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTk5CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgaW5ldF9jb25uZWN0aW9uX3NvY2suY2AqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMgcHJvYmxlbS4gTGV0JiMzOTtzIHB1bGwgdXAgdGhlIHNvdXJjZSBjb2RlIGZvciBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2AuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIHNlY3Rpb24gYXJvdW5kIGxpbmUgMTUwMCB0byAxNTQwLiBUaGF0IHJhbmdlIHVzdWFsbHkgY292ZXJzIFtpbnNlcnQgYXNzdW1wdGlvbiBhYm91dCB0aGUgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcyBsaWtlbHkgY292ZXJlZCBieSB0aGUgY29kZSB3aXRoaW4gdGhlIHNwZWNpZmllZCBsaW5lczsgZS5nLiwgJiMzNDtjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIHRlYXIgZG93biBsb2dpYywmIzM0OyBvciAmIzM0O2hhbmRsaW5nIG9mIHNwZWNpZmljIHNvY2tldCBvcHRpb25zLCYjMzQ7IG9yICYjMzQ7YSBwYXJ0aWN1bGFyIHF1ZXVpbmcgbWVjaGFuaXNtJiMzNDtdLiBJJiMzOTttIGhvcGluZyBJIGNhbiBwaW5wb2ludCBleGFjdGx5IHdoZXJlIHRoZSBbaW5zZXJ0IHlvdXIgaHlwb3RoZXNpcyBhYm91dCB0aGUgYnVnLCBvciB0aGUgZmVhdHVyZSB5b3UmIzM5O3JlIGxvb2tpbmcgZm9yXSBpcyBoYXBwZW5pbmcgb3IgaW1wbGVtZW50ZWQgd2l0aGluIHRoZSBUQ1AvSVAgc3RhY2suIFRoaXMgc2hvdWxkIHByb3ZpZGUgc29tZSB1c2VmdWwgY29udGV4dCBhbmQgYSBtb3JlIG5hcnJvdyBzZXQgb2YgY29kZSB0byBhbmFseXplLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTUwMDpcdFx0XHRcdFx0XHRSRUFEX09OQ0UobnNrLVx1MDAzZXNrX2RhdGFfcmVhZHkpKG5zayk7XG4xNTAxOlx0XHRcdFx0XHR9IGVsc2Uge1xuMTUwMjpcdFx0XHRcdFx0XHRfX05FVF9JTkNfU1RBVFMoc29ja19uZXQobnNrKSxcbjE1MDM6XHRcdFx0XHRcdFx0XHRcdExJTlVYX01JQl9UQ1BNSUdSQVRFUkVRRkFJTFVSRSk7XG4xNTA0Olx0XHRcdFx0XHRcdHJlcXNrX21pZ3JhdGVfcmVzZXQobnJlcSk7XG4xNTA1Olx0XHRcdFx0XHRcdF9fcmVxc2tfZnJlZShucmVxKTtcbjE1MDY6XHRcdFx0XHRcdH1cbjE1MDc6XHRcdFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTUwODpcdFxuMTUwOTpcdFx0XHRcdFx0LyogaW5ldF9jc2tfcmVxc2tfcXVldWVfYWRkKCkgaGFzIGFscmVhZHlcbjE1MTA6XHRcdFx0XHRcdCAqIGNhbGxlZCBpbmV0X2NoaWxkX2ZvcmdldCgpIG9uIGZhaWx1cmUgY2FzZS5cbjE1MTE6XHRcdFx0XHRcdCAqL1xuMTUxMjpcdFx0XHRcdFx0Z290byBza2lwX2NoaWxkX2ZvcmdldDtcbjE1MTM6XHRcdFx0XHR9XG4xNTE0Olx0XHRcdH1cbjE1MTU6XHRcbjE1MTY6XHRcdFx0aW5ldF9jaGlsZF9mb3JnZXQoc2ssIHJlcSwgY2hpbGQpO1xuMTUxNzpcdHNraXBfY2hpbGRfZm9yZ2V0OlxuMTUxODpcdFx0XHRyZXFza19wdXQocmVxKTtcbjE1MTk6XHRcdFx0YmhfdW5sb2NrX3NvY2soY2hpbGQpO1xuMTUyMDpcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbjE1MjE6XHRcdFx0c29ja19wdXQoY2hpbGQpO1xuMTUyMjpcdFxuMTUyMzpcdFx0XHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcbjE1MjQ6XHRcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjE1MjU6XHRcdH1cbjE1MjY6XHRcdGlmIChxdWV1ZS1cdTAwM2VmYXN0b3BlbnEucnNrcV9yc3RfaGVhZCkge1xuMTUyNzpcdFx0XHQvKiBGcmVlIGFsbCB0aGUgcmVxcyBxdWV1ZWQgaW4gcnNrcV9yc3RfaGVhZC4gKi9cbjE1Mjg6XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnF1ZXVlLVx1MDAzZWZhc3RvcGVucS5sb2NrKTtcbjE1Mjk6XHRcdFx0cmVxID0gcXVldWUtXHUwMDNlZmFzdG9wZW5xLnJza3FfcnN0X2hlYWQ7XG4xNTMwOlx0XHRcdHF1ZXVlLVx1MDAzZWZhc3RvcGVucS5yc2txX3JzdF9oZWFkID0gTlVMTDtcbjE1MzE6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cXVldWUtXHUwMDNlZmFzdG9wZW5xLmxvY2spO1xuMTUzMjpcdFx0XHR3aGlsZSAocmVxICE9IE5VTEwpIHtcbjE1MzM6XHRcdFx0XHRuZXh0ID0gcmVxLVx1MDAzZWRsX25leHQ7XG4xNTM0Olx0XHRcdFx0cmVxc2tfcHV0KHJlcSk7XG4xNTM1Olx0XHRcdFx0cmVxID0gbmV4dDtcbjE1MzY6XHRcdFx0fVxuMTUzNzpcdFx0fVxuMTUzODpcdFx0V0FSTl9PTl9PTkNFKHNrLVx1MDAzZXNrX2Fja19iYWNrbG9nKTtcbjE1Mzk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTM6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NzIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBicGZfc29ja19kZXN0cm95YCBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYGJwZl9zb2NrX2Rlc3Ryb3lgIGlzIGEgQlBGIGtmdW5jLCB3aGljaCBtZWFucyBpdCBjYW4gYmUgdXNlZCB3aXRoaW4gQlBGIGl0ZXJhdG9yIHByb2dyYW1zLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgYmVoYXZpb3Igb2YgdGhpcyBmdW5jdGlvbiB3aGVuIGNhbGxlZCBvbiBkaWZmZXJlbnQgc29ja2V0IHN0YXRlcyDigJMgcGFydGljdWxhcmx5IHRpbWV3YWl0IGFuZCBsaXN0ZW5pbmcgc29ja2V0cy4KCkZvciBhIHRpbWV3YWl0IHNvY2tldCwgdGhlIGNvZGUgbm93IGNoZWNrcyBgc2tfZnVsbHNvY2soc2spYC4gVGhpcyBtYWtlcyBzZW5zZSBiZWNhdXNlIGEgdGltZXdhaXQgc29ja2V0IGlzbiYjMzk7dCBhICYjMzQ7ZnVsbCYjMzQ7IHNvY2tldCAoaS5lLiwgYHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUYCBvciBgVENQX05FV19TWU5fUkVDVmApLiBQcmV2aW91c2x5LCB0aGVyZSB3YXMgYSBjaGVjayBvbiBgc2stJmd0O3NrX3Byb3RvY29sYCB3aGljaCBtaWdodCBub3QgYmUgdmFsaWQgb3IgcmVsaWFibGUgZm9yIG5vbi1mdWxsc29jayBzdGF0ZXMuIFNvLCBhZGRpbmcgdGhpcyBgc2tfZnVsbHNvY2soc2spYCBjaGVjayBzZWVtcyB0byBhbGxvdyBgZGlhZ19kZXN0cm95YCBvcGVyYXRpb25zIChsaWtlIHRob3NlIHVzZWQgYnkgdHdfc29jaykgdG8gcHJvY2VlZCBjb3JyZWN0bHkuIFVsdGltYXRlbHksIHRoaXMgY2hhbmdlIG1ha2VzIHNlbnNlIGJlY2F1c2UgaXQgbWVhbnMgdGhhdCB3ZSBjYW4gY29ycmVjdGx5IGRlc3Ryb3kgYSBzb2NrZXQgdXNpbmcgdGhlIGBicGZfc29ja19kZXN0cm95YCBldmVuIGlmIGl0IGlzIG5vdCBhIGZ1bGx5IGVzdGFibGlzaGVkIHNvY2tldC4KCkZvciBhIGxpc3RlbmluZyBzb2NrZXQsIHRoZSBmdW5jdGlvbiBgaW5ldF9jc2tfbGlzdGVuX3N0b3BgIGlzIGNyaXRpY2FsIHdoZW4gYGJwZl9zb2NrX2Rlc3Ryb3lgIGlzIGNhbGxlZC4gSXQgc2VlbXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBsaXN0ZW5pbmcgcHJvY2VzcyBpcyBzdG9wcGVkIHZpYSBgZGlhZ19kZXN0cm95YCAoc3BlY2lmaWNhbGx5LCBgdGNwX2RpYWdfZGVzdHJveWAgbGVhZHMgdG8gYHRjcF9hYm9ydGAgYW5kIGV2ZW50dWFsbHkgYGluZXRfY3NrX2xpc3Rlbl9zdG9wYCkuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGNvbmRfcmVzY2hlZCgpYCBpcyBpbnRlcmVzdGluZy4gVGhlIHByZXZpb3VzIGNvZGUgY291bGQgY2F1c2UgYSAmIzM0O3NjaGVkdWxpbmcgd2hpbGUgYXRvbWljJiMzNDsgZXJyb3IgaW4gYSBCUEYgaXRlcmF0b3IgY29udGV4dC4gSXQgc2VlbXMgdGhhdCB0aGUgY29uZGl0aW9uIGBpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSkgY29uZF9yZXNjaGVkKCk7YCB3YXMgYWRkZWQgdG8gZW5zdXJlIHRoYXQgd2Ugb25seSB5aWVsZCBpZiB3ZSYjMzk7cmUgKm5vdCogaW4gYSBCUEYgY29udGV4dCB0aGF0IHByb2hpYml0cyBzbGVlcGluZyBvciBtaWdyYXRpb24uCgpOb3csIGEga2V5IHF1ZXN0aW9uIGZvciBtZTogSXMgdGhpcyBjb2RlIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cz8gVGhlIGFuc3dlciBpcyB5ZXMuIFNpbmNlIEJQRiBhbmQgc29ja2V0IGRlc3RydWN0aW9uIHZpYSBCUEYgaXRlcmF0b3JzIChlLmcuLCBgQlBGX1BST0dfVFlQRV9UUkFDSU5HYCBvciBgQlBGX1RSQUNFX0lURVJgKSBhcmUgc3RhbmRhcmQsIGFzIHdlbGwgYXMgdGhlIGZhY3QgdGhhdCBzeXprYWxsZXIgZnV6emVzIEJQRiBhbmQgc29ja2V0IGl0ZXJhdG9ycywgdGhlcmUgaXMgYSBzdHJvbmcgcG9zc2liaWxpdHkgdGhhdCB0aGlzIG5ldyBjb2RlIHBhdGggY2FuIGJlIGhpdC4KClRoZXJlZm9yZSwgaXMgdGhpcyBjaGFuZ2Ugd29ydGggZnV6emluZz8gQWJzb2x1dGVseSwgYFdvcnRoRnV6emluZzogdHJ1ZWAuIFRoaXMgaXMgYmVjYXVzZSBpdCBtb2RpZmllcyB0aGUgZXhlY3V0YWJsZSBsb2dpYyB3aXRoaW4gY29yZSBzdWJzeXN0ZW1zOiBCUEYgYW5kIFRDUC9JUHY0IG5ldHdvcmtpbmcuIFNwZWNpZmljYWxseSwgaXQgY2hhbmdlcyB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBzb2NrZXQgZGVzdHJ1Y3Rpb24gb2NjdXJzIGFuZCB0aGUgc2NoZWR1bGVyIHlpZWxkIGJlaGF2aW9yIGluIGBpbmV0X2Nza19saXN0ZW5fc3RvcGAuIEkgbmVlZCB0byBub3cgY2hlY2sgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhbmQgdGhlIGZvY3VzIHN5bWJvbHMgcmVsYXRlZCB0byBib3RoIGBicGZfc29ja19kZXN0cm95YCBhbmQgYGluZXRfY3NrX2xpc3Rlbl9zdG9wYC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFyb3VuZCBgbmV0L2NvcmUvZmlsdGVyLmNgIGFuZCBzcGVjaWZpY2FsbHkgYEJQRmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19CUEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9NDQ9b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHNrbXNnLm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9za19zdG9yYWdlLm9cbm5ldC9jb3JlL01ha2VmaWxlLTQ3LWlmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9NYWtlZmlsZTo0ODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfa3NvY2sub1xubmV0L2NvcmUvTWFrZWZpbGUtNDktZW5kaWZcbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYz0yNzQ9QlRGX0tGVU5DU19FTkQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcbm5ldC9jb3JlL2JwZl9rc29jay5jLTI3NS1cbm5ldC9jb3JlL2JwZl9rc29jay5jOjI3NjojaWZkZWYgQ09ORklHX0JQRl9MU01cbm5ldC9jb3JlL2JwZl9rc29jay5jLTI3Ny1CVEZfSURfTElTVF9TSU5HTEUoYnBmX2xzbV9zb2NrZXRfc2VuZG1zZ19pZCwgZnVuYywgYnBmX2xzbV9zb2NrZXRfc2VuZG1zZylcbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYz0yODA9c3RhdGljIGludCBicGZfa3NvY2tfa2Z1bmNfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jLTI4Ny1cbm5ldC9jb3JlL2JwZl9rc29jay5jOjI4ODojaWZkZWYgQ09ORklHX0JQRl9MU01cbm5ldC9jb3JlL2JwZl9rc29jay5jLTI4OS1cdGlmIChwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00gXHUwMDI2XHUwMDI2XG4tLVxubmV0L2NvcmUvZGV2Lmg9MzgyPWludCBycHNfY3B1bWFza19ob3VzZWtlZXBpbmcoc3RydWN0IGNwdW1hc2sgKm1hc2spO1xubmV0L2NvcmUvZGV2LmgtMzgzLVxubmV0L2NvcmUvZGV2Lmg6Mzg0OiNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19ORVQpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcbm5ldC9jb3JlL2Rldi5oLTM4NS12b2lkIHhkcF9kb19jaGVja19mbHVzaGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NDUzMz1FWFBPUlRfU1lNQk9MX0dQTCh4ZHBfZG9fZmx1c2gpO1xubmV0L2NvcmUvZmlsdGVyLmMtNDUzNC1cbm5ldC9jb3JlL2ZpbHRlci5jOjQ1MzU6I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX05FVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxubmV0L2NvcmUvZmlsdGVyLmMtNDUzNi12b2lkIHhkcF9kb19jaGVja19mbHVzaGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcbi0tXG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jPTc0PUVYUE9SVF9TWU1CT0woc2tiX2Zsb3dfZGlzc2VjdG9yX2luaXQpO1xubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYy03NS1cbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmM6NzY6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYy03Ny1pbnQgZmxvd19kaXNzZWN0b3JfYnBmX3Byb2dfYXR0YWNoX2NoZWNrKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jLTEwNS19XG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jOjEwNjojZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jLTEwNy1cbi0tXG5uZXQvY29yZS9za21zZy5jPTU0NT1zdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za21zZy5jLTU3My1cbm5ldC9jb3JlL3NrbXNnLmM6NTc0OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcbm5ldC9jb3JlL3NrbXNnLmMtNTc1LVx0cHNvY2stXHUwMDNlaW5ncmVzc19ieXRlcyAmIzQzOz0gbGVuO1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTA1Nz1zdGF0aWMgdm9pZCBza19wc29ja193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMDczLVxubmV0L2NvcmUvc2ttc2cuYzoxMDc0OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcbm5ldC9jb3JlL3NrbXNnLmMtMTA3NS1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX3JlYWQoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jPTExOTM9c3RhdGljIHZvaWQgc2tfcHNvY2tfZG9uZV9zdHJwKHN0cnVjdCBza19wc29jayAqcHNvY2spXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMTk1LX1cbm5ldC9jb3JlL3NrbXNnLmM6MTE5NjojZW5kaWYgLyogQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSICovXG5uZXQvY29yZS9za21zZy5jLTExOTctXG4tLVxubmV0L2NvcmUvc29jay5jPTIzNDk9c3RhdGljIHZvaWQgX19za19kZXN0cnVjdChzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4tLVxubmV0L2NvcmUvc29jay5jLTIzNjYtXG5uZXQvY29yZS9zb2NrLmM6MjM2NzojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5uZXQvY29yZS9zb2NrLmMtMjM2OC1cdGJwZl9za19zdG9yYWdlX2ZyZWUoc2spO1xuLS1cbm5ldC9jb3JlL3NvY2suYz0yNDc5PXN0cnVjdCBzb2NrICpza19jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGdmcF90IHByaW9yaXR5LFxuLS1cbm5ldC9jb3JlL3NvY2suYy0yNDkzLVx0bmV3c2stXHUwMDNlc2tfcHJvdF9jcmVhdG9yID0gcHJvdDtcbm5ldC9jb3JlL3NvY2suYzoyNDk0OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC9jb3JlL3NvY2suYy0yNDk1LVx0UkNVX0lOSVRfUE9JTlRFUihuZXdzay1cdTAwM2Vza19icGZfc3RvcmFnZSwgTlVMTCk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xNDc3PXN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19saW5rX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKioqcHByb2csXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNDkxLVx0XHRicmVhaztcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ5MjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0OTMtXHRjYXNlIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUjpcbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYz0zNTI9c3RhdGljIGludCBwcm9jX2RvX3NrYl9kZWZlcl9tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0zNzQtXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzozNzU6I2lmZGVmIENPTkZJR19CUEZfSklUXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0zNzYtc3RhdGljIGludCBwcm9jX2RvaW50dmVjX21pbm1heF9icGZfZW5hYmxlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4tLVxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNDAxLVx0aWYgKHdyaXRlIFx1MDAyNlx1MDAyNiByZXQgXHUwMDI2XHUwMDI2IG1pbiA9PSBtYXgpXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzo0MDI6XHRcdHByX2luZm9fb25jZShcJiMzNDtDT05GSUdfQlBGX0pJVF9BTFdBWVNfT04gaXMgZW5hYmxlZCwgYnBmX2ppdF9lbmFibGUgaXMgcGVybWFuZW50bHkgc2V0IHRvIDEuXFxuXCYjMzQ7KTtcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTQwMy1cbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYz00MzA9c3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0X2NvcmVfdGFibGVbXSA9IHtcbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy00ODMtXHR9LFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6NDg0OiNpZmRlZiBDT05GSUdfQlBGX0pJVFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNDg1LVx0e1xuLS1cbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTQ5MC1cdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvaW50dmVjX21pbm1heF9icGZfZW5hYmxlLFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6NDkxOiMgaWZkZWYgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy00OTItXHRcdC5leHRyYTFcdFx0PSBTWVNDVExfT05FLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzYwMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50LCBhc3N1bWluZyBJJiMzOTttIHRoZSBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYGJwZl9zb2NrX2Rlc3Ryb3lgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AqKgoKT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgYGJwZl9zb2NrX2Rlc3Ryb3lgIGZ1bmN0aW9uIGFuZCBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBuZXQvY29yZS9maWx0ZXIuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHVuZGVyIHdoYXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MgKGAjaWZkZWZgKSBpdOKAmXMgaW5jbHVkZWQuIFRoaXMgaXMgbGlrZWx5IGEga2V5IGFzcGVjdCBvZiB0aGlzIGZ1bmN0aW9uLCBhcyBpdCBpcyBhIGxlc3MgZnJlcXVlbnRseSB1c2VkIGZ1bmN0aW9uLiBUaGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgd2lsbCB0ZWxsIG1lIHdoaWNoIGZlYXR1cmVzIG9yIGtlcm5lbCBjb25maWd1cmF0aW9ucyBlbmFibGUgb3IgZGlzYWJsZSB0aGUgZnVuY3Rpb25hbGl0eSBhc3NvY2lhdGVkIHdpdGggYGJwZl9zb2NrX2Rlc3Ryb3lgLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgY3JpdGljYWwgdG8gdHJvdWJsZXNob290aW5nLiBJdCB3aWxsIGhlbHAgbWUgc2VlIHdoaWNoIGtlcm5lbCBidWlsZHMgd2lsbCBpbmNsdWRlIHRoaXMgYW5kIHRoZXJlZm9yZSB3aGljaCBjb25maWd1cmF0aW9ucyBJIHNob3VsZCB0ZXN0IHdoZW4gSSBhbSB3b3JraW5nIG9uIHJlbGF0ZWQgY29kZS4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgaG93IGl04oCZcyBiZWluZyB1c2VkIGluIHRoZSBzb2NrZXQgQlBGIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZnwjaWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0zMTg9c3RhdGljIHUzMiBjb252ZXJ0X3NrYl9hY2Nlc3MoaW50IHNrYl9maWVsZCwgaW50IGRzdF9yZWcsIGludCBzcmNfcmVnLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTMzMy1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTMyX0lNTShCUEZfQU5ELCBkc3RfcmVnLCBQS1RfVFlQRV9NQVgpO1xubmV0L2NvcmUvZmlsdGVyLmM6MzM0OiNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTERcbm5ldC9jb3JlL2ZpbHRlci5jLTMzNS1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTMyX0lNTShCUEZfUlNILCBkc3RfcmVnLCA1KTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xNjgxPXN0YXRpYyBpbmxpbmUgaW50IF9fYnBmX3RyeV9tYWtlX3dyaXRhYmxlKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTY4My17XG5uZXQvY29yZS9maWx0ZXIuYzoxNjg0OiNpZmRlZiBDT05GSUdfREVCVUdfTkVUXG5uZXQvY29yZS9maWx0ZXIuYy0xNjg1LVx0LyogQXZvaWQgYSBzcGxhdCBpbiBwc2tiX21heV9wdWxsX3JlYXNvbigpICovXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MjIwNz1zdGF0aWMgaW50IF9fYnBmX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMjIxNS1cbm5ldC9jb3JlL2ZpbHRlci5jOjIyMTY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy0yMjE3LXN0YXRpYyBpbnQgYnBmX291dF9uZWlnaF92NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MjMxMz1zdGF0aWMgaW50IF9fYnBmX3JlZGlyZWN0X25laWdoX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMjMyMC1cbm5ldC9jb3JlL2ZpbHRlci5jOjIzMjE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXG5uZXQvY29yZS9maWx0ZXIuYy0yMzIyLXN0YXRpYyBpbnQgYnBmX291dF9uZWlnaF92NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MzE4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9tc2dfcG9wX2RhdGFfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzE5Mi1cbm5ldC9jb3JlL2ZpbHRlci5jOjMxOTM6I2lmZGVmIENPTkZJR19DR1JPVVBfTkVUX0NMQVNTSURcbm5ldC9jb3JlL2ZpbHRlci5jLTMxOTQtQlBGX0NBTExfMChicGZfZ2V0X2Nncm91cF9jbGFzc2lkX2N1cnIpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NDUzMz1FWFBPUlRfU1lNQk9MX0dQTCh4ZHBfZG9fZmx1c2gpO1xubmV0L2NvcmUvZmlsdGVyLmMtNDUzNC1cbm5ldC9jb3JlL2ZpbHRlci5jOjQ1MzU6I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX05FVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxubmV0L2NvcmUvZmlsdGVyLmMtNDUzNi12b2lkIHhkcF9kb19jaGVja19mbHVzaGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz01MTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl91bmRlcl9jZ3JvdXBfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNTE3OS1cbm5ldC9jb3JlL2ZpbHRlci5jOjUxODA6I2lmZGVmIENPTkZJR19TT0NLX0NHUk9VUF9EQVRBXG5uZXQvY29yZS9maWx0ZXIuYy01MTgxLXN0YXRpYyBpbmxpbmUgdTY0IF9fYnBmX3NrX2Nncm91cF9pZChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjIwMj1CUEZfQ0FMTF8zKGJwZl9iaW5kLCBzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuICosIGN0eCwgc3RydWN0IHNvY2thZGRyICosIGFkZHIsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjIwNC17XG5uZXQvY29yZS9maWx0ZXIuYzo2MjA1OiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtNjIwNi1cdHN0cnVjdCBzb2NrICpzayA9IGN0eC1cdTAwM2Vzaztcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02MjE4LVx0XHRyZXR1cm4gX19pbmV0X2JpbmQoc2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWFkZHIsIGFkZHJfbGVuLCBmbGFncyk7XG5uZXQvY29yZS9maWx0ZXIuYzo2MjE5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtNjIyMC1cdH0gZWxzZSBpZiAoYWRkci1cdTAwM2VzYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02MjM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2JpbmRfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjI0My1cbm5ldC9jb3JlL2ZpbHRlci5jOjYyNDQ6I2lmZGVmIENPTkZJR19YRlJNXG5uZXQvY29yZS9maWx0ZXIuYy02MjQ1LVxubmV0L2NvcmUvZmlsdGVyLmM6NjI0NjojaWYgKElTX0JVSUxUSU4oQ09ORklHX1hGUk1fSU5URVJGQUNFKSBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfREVCVUdfSU5GT19CVEYpKSB8fCBcXFxubmV0L2NvcmUvZmlsdGVyLmMtNjI0Ny0gICAgKElTX01PRFVMRShDT05GSUdfWEZSTV9JTlRFUkZBQ0UpIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTKSlcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02Mjg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9nZXRfeGZybV9zdGF0ZV9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02Mjk4LVxubmV0L2NvcmUvZmlsdGVyLmM6NjI5OTojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgfHwgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTYzMDAtc3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjMwNi1cbm5ldC9jb3JlL2ZpbHRlci5jOjYzMDc6I2lmIElTX0VOQUJMRUQoQ09ORklHX1ZMQU5fODAyMVEpXG5uZXQvY29yZS9maWx0ZXIuYy02MzA4LVx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikgXHUwMDI2XHUwMDI2IGlzX3ZsYW5fZGV2KGRldikpIHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02MzI5PXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnBmX2ZpYl92bGFuX2lucHV0X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTYzNDgtXG5uZXQvY29yZS9maWx0ZXIuYzo2MzQ5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxubmV0L2NvcmUvZmlsdGVyLmMtNjM1MC1zdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02NTAwLVxubmV0L2NvcmUvZmlsdGVyLmM6NjUwMTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTY1MDItc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjY3MT1CUEZfQ0FMTF80KGJwZl94ZHBfZmliX2xvb2t1cCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02NjgwLVx0c3dpdGNoIChwYXJhbXMtXHUwMDNlZmFtaWx5KSB7XG5uZXQvY29yZS9maWx0ZXIuYzo2NjgxOiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxubmV0L2NvcmUvZmlsdGVyLmMtNjY4Mi1cdGNhc2UgQUZfSU5FVDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02Njg1LSNlbmRpZlxubmV0L2NvcmUvZmlsdGVyLmM6NjY4NjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTY2ODctXHRjYXNlIEFGX0lORVQ2OlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTY3MDU9QlBGX0NBTExfNChicGZfc2tiX2ZpYl9sb29rdXAsIHN0cnVjdCBza19idWZmICosIHNrYixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02NzI0LVx0c3dpdGNoIChwYXJhbXMtXHUwMDNlZmFtaWx5KSB7XG5uZXQvY29yZS9maWx0ZXIuYzo2NzI1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxubmV0L2NvcmUvZmlsdGVyLmMtNjcyNi1cdGNhc2UgQUZfSU5FVDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02NzI5LSNlbmRpZlxubmV0L2NvcmUvZmlsdGVyLmM6NjczMDojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTY3MzEtXHRjYXNlIEFGX0lORVQ2OlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTY4NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX2NoZWNrX210dV9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02ODc3LVxubmV0L2NvcmUvZmlsdGVyLmM6Njg3ODojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcbm5ldC9jb3JlL2ZpbHRlci5jLTY4Nzktc3RhdGljIGludCBicGZfcHVzaF9zZWc2X2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHUzMiB0eXBlLCB2b2lkICpoZHIsIHUzMiBsZW4pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjkxMi1cbm5ldC9jb3JlL2ZpbHRlci5jOjY5MTM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0xXVFVOTkVMX0JQRilcbm5ldC9jb3JlL2ZpbHRlci5jLTY5MTQtc3RhdGljIGludCBicGZfcHVzaF9pcF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpoZHIsIHUzMiBsZW4sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjkyMT1CUEZfQ0FMTF80KGJwZl9sd3RfaW5fcHVzaF9lbmNhcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIHR5cGUsIHZvaWQgKiwgaGRyLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY5MjQtXHRzd2l0Y2ggKHR5cGUpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjY5MjU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXG5uZXQvY29yZS9maWx0ZXIuYy02OTI2LVx0Y2FzZSBCUEZfTFdUX0VOQ0FQX1NFRzY6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjkyOS0jZW5kaWZcbm5ldC9jb3JlL2ZpbHRlci5jOjY5MzA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0xXVFVOTkVMX0JQRilcbm5ldC9jb3JlL2ZpbHRlci5jLTY5MzEtXHRjYXNlIEJQRl9MV1RfRU5DQVBfSVA6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjkzOT1CUEZfQ0FMTF80KGJwZl9sd3RfeG1pdF9wdXNoX2VuY2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgdHlwZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02OTQyLVx0c3dpdGNoICh0eXBlKSB7XG5uZXQvY29yZS9maWx0ZXIuYzo2OTQzOiNpZiBJU19FTkFCTEVEKENPTkZJR19MV1RVTk5FTF9CUEYpXG5uZXQvY29yZS9maWx0ZXIuYy02OTQ0LVx0Y2FzZSBCUEZfTFdUX0VOQ0FQX0lQOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTY5NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3htaXRfcHVzaF9lbmNhcF9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02OTcxLVxubmV0L2NvcmUvZmlsdGVyLmM6Njk3MjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcbm5ldC9jb3JlL2ZpbHRlci5jLTY5NzMtQlBGX0NBTExfNChicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXMsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBvZmZzZXQsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzE1Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcxNjUtXG5uZXQvY29yZS9maWx0ZXIuYzo3MTY2OiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtNzE2Ny1zdGF0aWMgc3RydWN0IHNvY2sgKnNrX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzE4NS1cdFx0XHRcdFx0ICAgICAgIGRpZiwgc2RpZiwgTlVMTCk7XG5uZXQvY29yZS9maWx0ZXIuYzo3MTg2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtNzE4Ny1cdH0gZWxzZSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzgzOT1CUEZfQ0FMTF81KGJwZl90Y3BfY2hlY2tfc3luY29va2llLCBzdHJ1Y3Qgc29jayAqLCBzaywgdm9pZCAqLCBpcGgsIHUzMiwgaXBoX2xlbixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03ODQxLXtcbm5ldC9jb3JlL2ZpbHRlci5jOjc4NDI6I2lmZGVmIENPTkZJR19TWU5fQ09PS0lFU1xubmV0L2NvcmUvZmlsdGVyLmMtNzg0My1cdGludCByZXQ7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzg3NC1cbm5ldC9jb3JlL2ZpbHRlci5jOjc4NzU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy03ODc2LVx0Y2FzZSA2OlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTc5MTI9QlBGX0NBTExfNShicGZfdGNwX2dlbl9zeW5jb29raWUsIHN0cnVjdCBzb2NrICosIHNrLCB2b2lkICosIGlwaCwgdTMyLCBpcGhfbGVuLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTc5MTQte1xubmV0L2NvcmUvZmlsdGVyLmM6NzkxNTojaWZkZWYgQ09ORklHX1NZTl9DT09LSUVTXG5uZXQvY29yZS9maWx0ZXIuYy03OTE2LVx0dTMyIGNvb2tpZTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03OTQ0LVxubmV0L2NvcmUvZmlsdGVyLmM6Nzk0NTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTc5NDYtXHRjYXNlIDY6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODI3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2Jfc2V0X3RzdGFtcF9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04MjgwLVxubmV0L2NvcmUvZmlsdGVyLmM6ODI4MTojaWZkZWYgQ09ORklHX1NZTl9DT09LSUVTXG5uZXQvY29yZS9maWx0ZXIuYy04MjgyLUJQRl9DQUxMXzMoYnBmX3RjcF9yYXdfZ2VuX3N5bmNvb2tpZV9pcHY0LCBzdHJ1Y3QgaXBoZHIgKiwgaXBoLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTgzMDg9QlBGX0NBTExfMyhicGZfdGNwX3Jhd19nZW5fc3luY29va2llX2lwdjYsIHN0cnVjdCBpcHY2aGRyICosIGlwaCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04MzEwLXtcbm5ldC9jb3JlL2ZpbHRlci5jOjgzMTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy04MzEyLVx0Y29uc3QgdTE2IG1zc19jbGFtcCA9IElQVjZfTUlOX01UVSAtIHNpemVvZihzdHJ1Y3QgdGNwaGRyKSAtXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODM2MD1CUEZfQ0FMTF8yKGJwZl90Y3BfcmF3X2NoZWNrX3N5bmNvb2tpZV9pcHY2LCBzdHJ1Y3QgaXB2NmhkciAqLCBpcGgsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODM2Mi17XG5uZXQvY29yZS9maWx0ZXIuYzo4MzYzOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtODM2NC1cdGlmIChfX2Nvb2tpZV92Nl9jaGVjayhpcGgsIHRoKSBcdTAwM2UgMClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NDYzPXNvY2tfYWRkcl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg0ODUtXHRcdHJldHVybiBcdTAwMjZicGZfZXZlbnRfb3V0cHV0X2RhdGFfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYzo4NDg2OiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtODQ4Ny1cdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NTcyPWNnX3NrYl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg1ODgtXHRcdHJldHVybiBcdTAwMjZicGZfc2tiX2V2ZW50X291dHB1dF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg1ODk6I2lmZGVmIENPTkZJR19TT0NLX0NHUk9VUF9EQVRBXG5uZXQvY29yZS9maWx0ZXIuYy04NTkwLVx0Y2FzZSBCUEZfRlVOQ19za2JfY2dyb3VwX2lkOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg1OTgtI2VuZGlmXG5uZXQvY29yZS9maWx0ZXIuYzo4NTk5OiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtODYwMC1cdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NjIxPXRjX2Nsc19hY3RfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NzAzLVx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrX3N0b3JhZ2VfZGVsZXRlX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmM6ODcwNDojaWZkZWYgQ09ORklHX1hGUk1cbm5ldC9jb3JlL2ZpbHRlci5jLTg3MDUtXHRjYXNlIEJQRl9GVU5DX3NrYl9nZXRfeGZybV9zdGF0ZTpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NzA3LSNlbmRpZlxubmV0L2NvcmUvZmlsdGVyLmM6ODcwODojaWZkZWYgQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRFxubmV0L2NvcmUvZmlsdGVyLmMtODcwOS1cdGNhc2UgQlBGX0ZVTkNfc2tiX2Nncm91cF9jbGFzc2lkOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg3MTEtI2VuZGlmXG5uZXQvY29yZS9maWx0ZXIuYzo4NzEyOiNpZmRlZiBDT05GSUdfU09DS19DR1JPVVBfREFUQVxubmV0L2NvcmUvZmlsdGVyLmMtODcxMy1cdGNhc2UgQlBGX0ZVTkNfc2tiX2Nncm91cF9pZDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NzE3LSNlbmRpZlxubmV0L2NvcmUvZmlsdGVyLmM6ODcxODojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTg3MTktXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODc0MC1cdFx0cmV0dXJuIFx1MDAyNmJwZl9za2Jfc2V0X3RzdGFtcF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg3NDE6I2lmZGVmIENPTkZJR19TWU5fQ09PS0lFU1xubmV0L2NvcmUvZmlsdGVyLmMtODc0Mi1cdGNhc2UgQlBGX0ZVTkNfdGNwX3Jhd19nZW5fc3luY29va2llX2lwdjQ6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODc1OD14ZHBfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04Nzg2LVx0XHRyZXR1cm4gXHUwMDI2YnBmX3hkcF9jaGVja19tdHVfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYzo4Nzg3OiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtODc4OC1cdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3VkcDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04Nzk5LVx0XHRyZXR1cm4gXHUwMDI2YnBmX3RjcF9nZW5fc3luY29va2llX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmM6ODgwMDojaWZkZWYgQ09ORklHX1NZTl9DT09LSUVTXG5uZXQvY29yZS9maWx0ZXIuYy04ODAxLVx0Y2FzZSBCUEZfRlVOQ190Y3BfcmF3X2dlbl9zeW5jb29raWVfaXB2NDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04ODE0LVxubmV0L2NvcmUvZmlsdGVyLmM6ODgxNTojaWYgSVNfTU9EVUxFKENPTkZJR19ORl9DT05OVFJBQ0spIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTKVxubmV0L2NvcmUvZmlsdGVyLmMtODgxNi1cdC8qIFRoZSBuZl9jb25uX19faW5pdCB0eXBlIGlzIHVzZWQgaW4gdGhlIE5GX0NPTk5UUkFDSyBrZnVuY3MuIFRoZVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg4MzM9c29ja19vcHNfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04ODYxLVx0XHRyZXR1cm4gXHUwMDI2YnBmX2dldF9uZXRuc19jb29raWVfc29ja19vcHNfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYzo4ODYyOiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtODg2My1cdGNhc2UgQlBGX0ZVTkNfbG9hZF9oZHJfb3B0OlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg5MTU9c2tfc2tiX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODkzOS1cdFx0cmV0dXJuIFx1MDAyNmJwZl9za2JfZXZlbnRfb3V0cHV0X3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmM6ODk0MDojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTg5NDEtXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9OTA0ND1sd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtOTA0Ni1cdHN3aXRjaCAoZnVuY19pZCkge1xubmV0L2NvcmUvZmlsdGVyLmM6OTA0NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcbm5ldC9jb3JlL2ZpbHRlci5jLTkwNDgtXHRjYXNlIEJQRl9GVU5DX2x3dF9zZWc2X3N0b3JlX2J5dGVzOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTk5MjM9c3RhdGljIHN0cnVjdCBicGZfaW5zbiAqYnBmX2NvbnZlcnRfdHN0YW1wX3R5cGVfcmVhZChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnNpLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTk5MzMtXHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfQUxVMzJfSU1NKEJQRl9BTkQsIHZhbHVlX3JlZywgU0tCX1RTVEFNUF9UWVBFX01BU0spO1xubmV0L2NvcmUvZmlsdGVyLmM6OTkzNDojaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxEXG5uZXQvY29yZS9maWx0ZXIuYy05OTM1LVx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTMyX0lNTShCUEZfUlNILCB2YWx1ZV9yZWcsIFNLQl9UU1RBTVBfVFlQRV9SU0hJRlQpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTk5NDM9c3RhdGljIHN0cnVjdCBicGZfaW5zbiAqYnBmX2NvbnZlcnRfc2hpbmZvX2FjY2VzcyhfX3U4IGRzdF9yZWcsIF9fdTggc2tiX3JlZyxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy05OTQ2LVx0Lyogc2ktXHUwMDNlZHN0X3JlZyA9IHNrYl9zaGluZm8oU0tCKTsgKi9cbm5ldC9jb3JlL2ZpbHRlci5jOjk5NDc6I2lmZGVmIE5FVF9TS0JVRkZfREFUQV9VU0VTX09GRlNFVFxubmV0L2NvcmUvZmlsdGVyLmMtOTk0OC1cdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9GSUVMRF9TSVpFT0Yoc3RydWN0IHNrX2J1ZmYsIGVuZCksXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9OTk2ND1zdGF0aWMgc3RydWN0IGJwZl9pbnNuICpicGZfY29udmVydF90c3RhbXBfcmVhZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtOTk3MC1cbm5ldC9jb3JlL2ZpbHRlci5jOjk5NzE6I2lmZGVmIENPTkZJR19ORVRfWEdSRVNTXG5uZXQvY29yZS9maWx0ZXIuYy05OTcyLVx0LyogSWYgdGhlIHRzdGFtcF90eXBlIGlzIHJlYWQsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9OTk5OT1zdGF0aWMgc3RydWN0IGJwZl9pbnNuICpicGZfY29udmVydF90c3RhbXBfd3JpdGUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEwMDA1LVxubmV0L2NvcmUvZmlsdGVyLmM6MTAwMDY6I2lmZGVmIENPTkZJR19ORVRfWEdSRVNTXG5uZXQvY29yZS9maWx0ZXIuYy0xMDAwNy1cdC8qIElmIHRoZSB0c3RhbXBfdHlwZSBpcyByZWFkLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEwMDM3PXN0YXRpYyB1MzIgYnBmX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEwMTEyLVx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfQUxVMzJfSU1NKEJQRl9BTkQsIHNpLVx1MDAzZWRzdF9yZWcsIFBLVF9UWVBFX01BWCk7XG5uZXQvY29yZS9maWx0ZXIuYzoxMDExMzojaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxEXG5uZXQvY29yZS9maWx0ZXIuYy0xMDExNC1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTMyX0lNTShCUEZfUlNILCBzaS1cdTAwM2Vkc3RfcmVnLCA1KTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMDIxMC1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IF9fc2tfYnVmZiwgdGNfaW5kZXgpOlxubmV0L2NvcmUvZmlsdGVyLmM6MTAyMTE6I2lmZGVmIENPTkZJR19ORVRfU0NIRURcbm5ldC9jb3JlL2ZpbHRlci5jLTEwMjEyLVx0XHRpZiAodHlwZSA9PSBCUEZfV1JJVEUpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTAyMjktXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBfX3NrX2J1ZmYsIG5hcGlfaWQpOlxubmV0L2NvcmUvZmlsdGVyLmM6MTAyMzA6I2lmIGRlZmluZWQoQ09ORklHX05FVF9SWF9CVVNZX1BPTEwpXG5uZXQvY29yZS9maWx0ZXIuYy0xMDIzMS1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZXNyY19yZWcsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTAyNzYtXHQgICAgIG9mZnNldG9mKHN0cnVjdCBfX3NrX2J1ZmYsIHJlbW90ZV9pcDZbM10pOlxubmV0L2NvcmUvZmlsdGVyLmM6MTAyNzc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy0xMDI3OC1cdFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTAyOTYtXHQgICAgIG9mZnNldG9mKHN0cnVjdCBfX3NrX2J1ZmYsIGxvY2FsX2lwNlszXSk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMDI5NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTEwMjk4LVx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCBzb2NrX2NvbW1vbixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMDMyNS1cdFx0XHRcdFx0XHQgICAgIDIsIHRhcmdldF9zaXplKSk7XG5uZXQvY29yZS9maWx0ZXIuYzoxMDMyNjojaWZuZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRFxubmV0L2NvcmUvZmlsdGVyLmMtMTAzMjctXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFUzMl9JTU0oQlBGX0xTSCwgc2ktXHUwMDNlZHN0X3JlZywgMTYpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEwNDAzPXUzMiBicGZfc29ja19jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMDQ5Mi1cdGNhc2UgYnBmX2N0eF9yYW5nZV90aWxsKHN0cnVjdCBicGZfc29jaywgc3JjX2lwNlswXSwgc3JjX2lwNlszXSk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMDQ5MzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTEwNDk0LVx0XHRvZmYgPSBzaS1cdTAwM2VvZmY7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTA1MTAtXHRjYXNlIGJwZl9jdHhfcmFuZ2VfdGlsbChzdHJ1Y3QgYnBmX3NvY2ssIGRzdF9pcDZbMF0sIGRzdF9pcDZbM10pOlxubmV0L2NvcmUvZmlsdGVyLmM6MTA1MTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy0xMDUxMi1cdFx0b2ZmID0gc2ktXHUwMDNlb2ZmO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEwNTU2LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2ssIHJ4X3F1ZXVlX21hcHBpbmcpOlxubmV0L2NvcmUvZmlsdGVyLmM6MTA1NTc6I2lmZGVmIENPTkZJR19TT0NLX1JYX1FVRVVFX01BUFBJTkdcbm5ldC9jb3JlL2ZpbHRlci5jLTEwNTU4LVx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMDgxNT1zdGF0aWMgdTMyIHNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExMDIwLVx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCByZW1vdGVfaXA2WzNdKTpcbm5ldC9jb3JlL2ZpbHRlci5jOjExMDIxOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtMTEwMjItXHRcdEJVSUxEX0JVR19PTihzaXplb2ZfZmllbGQoc3RydWN0IHNvY2tfY29tbW9uLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExMDQxLVx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCBsb2NhbF9pcDZbM10pOlxubmV0L2NvcmUvZmlsdGVyLmM6MTEwNDI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy0xMTA0My1cdFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTEwNjktXHRcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc29ja19jb21tb24sIHNrY19kcG9ydCkpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTEwNzA6I2lmbmRlZiBfX0JJR19FTkRJQU5fQklURklFTERcbm5ldC9jb3JlL2ZpbHRlci5jLTExMDcxLVx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfQUxVMzJfSU1NKEJQRl9MU0gsIHNpLVx1MDAzZWRzdF9yZWcsIDE2KTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMTM1MD1zdGF0aWMgdTMyIHNrX21zZ19jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTM1NS1cdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmO1xubmV0L2NvcmUvZmlsdGVyLmM6MTEzNTY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy0xMTM1Ny1cdGludCBvZmY7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE0MTAtXHQgICAgIG9mZnNldG9mKHN0cnVjdCBza19tc2dfbWQsIHJlbW90ZV9pcDZbM10pOlxubmV0L2NvcmUvZmlsdGVyLmM6MTE0MTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy0xMTQxMi1cdFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE0MzEtXHQgICAgIG9mZnNldG9mKHN0cnVjdCBza19tc2dfbWQsIGxvY2FsX2lwNlszXSk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMTQzMjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTExNDMzLVx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCBzb2NrX2NvbW1vbixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTQ1OS1cdFx0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBzb2NrX2NvbW1vbiwgc2tjX2Rwb3J0KSk7XG5uZXQvY29yZS9maWx0ZXIuYzoxMTQ2MDojaWZuZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRFxubmV0L2NvcmUvZmlsdGVyLmMtMTE0NjEtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9BTFUzMl9JTU0oQlBGX0xTSCwgc2ktXHUwMDNlZHN0X3JlZywgMTYpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTExNjU1PWludCBza19nZXRfZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IGxlbilcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTY5Ny1cbm5ldC9jb3JlL2ZpbHRlci5jOjExNjk4OiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtMTE2OTktc3RhdGljIHZvaWQgYnBmX2luaXRfcmV1c2Vwb3J0X2tlcm4oc3RydWN0IHNrX3JldXNlcG9ydF9rZXJuICpyZXVzZV9rZXJuLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyMDc2PXN0YXRpYyB1MzIgc2tfbG9va3VwX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTE1LVx0XHRcdFx0cmVtb3RlX2lwNlswXSwgcmVtb3RlX2lwNlszXSk6IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTE2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtMTIxMTctXHRcdGludCBvZmYgPSBzaS1cdTAwM2VvZmY7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIxMzEtXHRcdFx0XHRsb2NhbF9pcDZbMF0sIGxvY2FsX2lwNlszXSk6IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTMyOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtMTIxMzMtXHRcdGludCBvZmYgPSBzaS1cdTAwM2VvZmY7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTIyMzQ9QlBGX0NBTExfMShicGZfc2tjX3RvX3RjcF90aW1ld2FpdF9zb2NrLCBzdHJ1Y3Qgc29jayAqLCBzaylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI0MS1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjQyOiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyNDMtXHRpZiAoc2sgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3Byb3QgPT0gXHUwMDI2dGNwX3Byb3QgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9USU1FX1dBSVQpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIyNDYtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjI0NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjQ4LVx0aWYgKHNrIFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19wcm90ID09IFx1MDAyNnRjcHY2X3Byb3QgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9USU1FX1dBSVQpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTIyNjM9QlBGX0NBTExfMShicGZfc2tjX3RvX3RjcF9yZXF1ZXN0X3NvY2ssIHN0cnVjdCBzb2NrICosIHNrKVxubmV0L2NvcmUvZmlsdGVyLmMtMTIyNjQte1xubmV0L2NvcmUvZmlsdGVyLmM6MTIyNjU6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI2Ni1cdGlmIChzayBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfcHJvdCA9PSBcdTAwMjZ0Y3BfcHJvdCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX05FV19TWU5fUkVDVilcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI2OS1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjcwOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtMTIyNzEtXHRpZiAoc2sgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3Byb3QgPT0gXHUwMDI2dGNwdjZfcHJvdCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX05FV19TWU5fUkVDVilcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjUwND1fX2JwZl9rZnVuYyBpbnQgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2soc3RydWN0IF9fc2tfYnVmZiAqcywgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTA2LXtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNTA3OiNpZiBJU19FTkFCTEVEKENPTkZJR19TWU5fQ09PS0lFUylcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTA4LVx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKXM7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI1MzItXHRcdGJyZWFrO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI1MzM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjUzNC1cdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTI3MzM9X19icGZfa2Z1bmMgaW50IGJwZl9pY21wX3NlbmQoc3RydWN0IF9fc2tfYnVmZiAqc2tiX2N0eCwgaW50IHR5cGUsIGludCBjb2RlKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzQ2LVx0c3dpdGNoIChza2ItXHUwMDNlcHJvdG9jb2wpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNzQ3OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxubmV0L2NvcmUvZmlsdGVyLmMtMTI3NDgtXHRjYXNlIGh0b25zKEVUSF9QX0lQKToge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzY2LSNlbmRpZlxubmV0L2NvcmUvZmlsdGVyLmM6MTI3Njc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjc2OC1cdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTM6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxNTkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBicGZfc29ja19kZXN0cm95IFJlZ2lzdHJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBob3cgYGJwZl9zb2NrX2Rlc3Ryb3lgIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBpdHMgcmVnaXN0cmF0aW9uLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgaXQmIzM5O3MgcmVnaXN0ZXJlZCB0aHJvdWdoIEJURiBrZnVuY3MsIGFuZCB0aGUgbG9jYXRpb24gcG9pbnRlZCB0byBpcyBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBhIGNvbW1vbiBwbGFjZSBmb3IgbmV0d29yay1yZWxhdGVkIEJQRiBob29rcy4KClNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCB0aGUgcmVnaXN0cmF0aW9uIHVzZXMgYEJURl9LRlVOQ1NfU1RBUlQoYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzKWAgYW5kIHRoYXQgYGJwZl9zb2NrX2Rlc3Ryb3lgIGl0c2VsZiBpcyBsaW5rZWQgdmlhIGBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfZGVzdHJveSlgLiBUaGlzIGlzIHN0YW5kYXJkIEJURi1iYXNlZCBmdW5jdGlvbiByZWdpc3RyYXRpb247IHRoZSBgQlRGX0lEX0ZMQUdTYCBtYWNybyBjbGVhcmx5IGFzc29jaWF0ZXMgdGhlIGZ1bmN0aW9uIHdpdGggYW4gSUQgdGhhdCB0aGUgQlBGIHZlcmlmaWVyIG9yIG90aGVyIHBhcnRzIG9mIHRoZSBCUEYgaW5mcmFzdHJ1Y3R1cmUgd2lsbCB1c2UuCgpOb3csIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYGJwZl9za19pdGVyX2tmdW5jX2lkc2Agd2l0aGluIHRoaXMgZmlsZS4gSSBuZWVkIHRvIHRyYWNlIHdoZXJlIHRoaXMgcGFydGljdWxhciBzdHJ1Y3R1cmUsIGBicGZfc2tfaXRlcl9rZnVuY19pZHNgLCBpcyAqdXNlZCogaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhhdCB3aWxsIGlsbHVtaW5hdGUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgYGJwZl9zb2NrX2Rlc3Ryb3lgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHNvY2tldCBpdGVyYXRpb24gYW5kIEJQRiBwcm9ncmFtIGludGVyYWN0aW9uIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmsgc3RhY2suIFVuZGVyc3RhbmRpbmcgdGhlIHVzYWdlIGNvbnRleHQgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIHJvbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za19pdGVyX2tmdW5jX2lkcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0xMjkzOT1fX2JwZl9rZnVuY19lbmRfZGVmcygpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTI5NDAtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjk0MTpCVEZfS0ZVTkNTX1NUQVJUKGJwZl9za19pdGVyX2tmdW5jX2lkcylcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTQyLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfc29ja19kZXN0cm95KVxubmV0L2NvcmUvZmlsdGVyLmM6MTI5NDM6QlRGX0tGVU5DU19FTkQoYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzKVxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NDQtXG5uZXQvY29yZS9maWx0ZXIuYz0xMjk0NT1zdGF0aWMgaW50IHRyYWNpbmdfaXRlcl9maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk0Ni17XG5uZXQvY29yZS9maWx0ZXIuYzoxMjk0NzpcdGlmIChidGZfaWRfc2V0OF9jb250YWlucyhcdTAwMjZicGZfc2tfaXRlcl9rZnVuY19pZHMsIGtmdW5jX2lkKSBcdTAwMjZcdTAwMjZcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTQ4LVx0ICAgIHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX0lURVIpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTI5NTM9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9za19pdGVyX2tmdW5jX3NldCA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTU0LVx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG5uZXQvY29yZS9maWx0ZXIuYzoxMjk1NTpcdC5zZXQgICA9IFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX2lkcyxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTU2LVx0LmZpbHRlciA9IHRyYWNpbmdfaXRlcl9maWx0ZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDQ5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBmdW5jdGlvbjoKCioqRmluZGluZyB0aGUgUmVnaXN0cmF0aW9uIG9mIGBicGZfc2tfaXRlcl9rZnVuY19zZXRgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBicGZfc2tfaXRlcl9rZnVuY19zZXRgIGlzIGFjdHVhbGx5IGRlZmluZWQsIG9yIGF0IGxlYXN0IGhvdyBpdCYjMzk7cyBicm91Z2h0IGludG8gdGhlIHN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdHJhY2UgaXRzIHJlZ2lzdHJhdGlvbi4gV2hlcmUgZG9lcyB0aGUga2VybmVsIGtub3cgYWJvdXQgdGhpcyB0aGluZz8gSSBuZWVkIHRvIGZpbmQgdGhlIHBvaW50IHdoZXJlIGl0JiMzOTtzIGhvb2tlZCBpbnRvIHRoZSBCUEYgc3Vic3lzdGVtLCBvciBtYXliZSBldmVuIGp1c3QgZGVjbGFyZWQgYXMgYSBrbm93biBrZXJuZWwgZnVuY3Rpb24uIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UsIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggdGhlIEJQRi1yZWxhdGVkIGRpcmVjdG9yaWVzLCB0byBmaW5kIHRoZSByZWdpc3RyYXRpb24gcG9pbnQuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHBhcnQgb2YgdGhlIEJQRiBpdGVyYXRvciBmdW5jdGlvbmFsaXR5LCBzbyB0aGF0IG5hcnJvd3MgdGhlIHNlYXJjaCBzb21ld2hhdC4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za19pdGVyX2tmdW5jX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0xMjk0NT1zdGF0aWMgaW50IHRyYWNpbmdfaXRlcl9maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NTItXG5uZXQvY29yZS9maWx0ZXIuYzoxMjk1MzpzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX3NrX2l0ZXJfa2Z1bmNfc2V0ID0ge1xubmV0L2NvcmUvZmlsdGVyLmMtMTI5NTQtXHQub3duZXIgPSBUSElTX01PRFVMRSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjk1OT1zdGF0aWMgaW50IGluaXRfc3Vic3lzdGVtKHZvaWQpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk2MC17XG5uZXQvY29yZS9maWx0ZXIuYzoxMjk2MTpcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2YnBmX3NrX2l0ZXJfa2Z1bmNfc2V0KTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTYyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTM6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1MjIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2wgTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgYSBmZXcga2VybmVsIGNvbmZpZ3VyYXRpb25zIOKAkyBzcGVjaWZpY2FsbHkgYEJQRl9TWVNDQUxMYCBhbmQgYERFQlVHX0lORk9fQlRGYC4gSSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgdG8gY2hlY2sgYWxsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyByZXF1aXJlZCBmb3IgQlBGIGtmdW5jcywgQlBGIGl0ZXJhdG9ycywgYW5kIHRoZSBgaW5ldGAgc3RhY2suIFNvLCB0aGUgYmFzZSByZXF1aXJlbWVudHMgYXJlIGBDT05GSUdfQlBGX1NZU0NBTExgLCBgQ09ORklHX0RFQlVHX0lORk9fQlRGYCwgYW5kIGBDT05GSUdfSU5FVGAuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IGBpbmV0X2Nza19saXN0ZW5fc3RvcGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0JiMzOTtzIGFjdHVhbGx5IGNvbXBpbGVkLiBBaCwgcmlnaHQsIGl0JiMzOTtzIGluIGBuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jYCwgd2hpY2ggaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX0lORVRgIGlzIGVuYWJsZWQuIE1ha2VzIHNlbnNlLgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgcGF0Y2guIFRoZSBrZXkgc3ltYm9scyBtb2RpZmllZCBzZWVtIHRvIGJlOgoxLiAgYGJwZl9zb2NrX2Rlc3Ryb3lgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AKMi4gIGBpbmV0X2Nza19saXN0ZW5fc3RvcGAgaW4gYG5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNgCgpJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaG93IHdpZGVzcHJlYWQgdGhlc2UgZnVuY3Rpb25zIGFyZS4gYGJwZl9zb2NrX2Rlc3Ryb3lgPyBEZWZpbml0ZWx5IG5vdCB1YmlxdWl0b3VzLiBJdCYjMzk7cyBhIHZlcnkgc3BlY2lmaWMga2Z1bmMgY2FsbGVkIHdoZW4gQlBGIGl0ZXJhdG9ycyBhcmUgdXNlZCB0byBkZXN0cm95IHNvY2tldHMuIFdoYXQgYWJvdXQgYGluZXRfY3NrX2xpc3Rlbl9zdG9wYD8gT2theSwgdGhhdCYjMzk7cyBjYWxsZWQgd2hlbiBhIGxpc3RlbmluZyBjb25uZWN0aW9uIHNvY2tldCBzdG9wcyBsaXN0ZW5pbmc7IHRoaW5ncyBsaWtlIGB0Y3BfY2xvc2VgIG9uIGEgbGlzdGVuaW5nIHNvY2tldCBvciBgdGNwX2Fib3J0YCBhbmQgYHRjcF9kaWFnX2Rlc3Ryb3lgLiBJcyBpdCB1YmlxdWl0b3VzPyBObywgaXQmIzM5O3Mgc3BlY2lmaWMgdG8gc3RvcHBpbmcvY2xvc2luZyBhIGxpc3RlbmluZyBzb2NrZXQgYW5kIGFib3J0aW5nIGl0cyBwZW5kaW5nIGNvbm5lY3Rpb24gcXVldWUuCgpGaW5hbGx5LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgcHVycG9zZSBvZiBgaGFzX2N1cnJlbnRfYnBmX2N0eCgpYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFzX2N1cnJlbnRfYnBmX2N0eCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTMyMDE9c3RhdGljIGlubGluZSBib29sIHVucHJpdmlsZWdlZF9lYnBmX2VuYWJsZWQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTMyMTAtICovXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjMyMTE6c3RhdGljIGlubGluZSBib29sIGhhc19jdXJyZW50X2JwZl9jdHgodm9pZClcbmluY2x1ZGUvbGludXgvYnBmLmgtMzIxMi17XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD0zNTMxPXN0YXRpYyBpbmxpbmUgYm9vbCB1bnByaXZpbGVnZWRfZWJwZl9lbmFibGVkKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0zNTM1LVxuaW5jbHVkZS9saW51eC9icGYuaDozNTM2OnN0YXRpYyBpbmxpbmUgYm9vbCBoYXNfY3VycmVudF9icGZfY3R4KHZvaWQpXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM1Mzcte1xuLS1cbm5ldC9jb3JlL3NvY2suYz0xMTQ0PXZvaWQgc29ja29wdF9sb2NrX3NvY2soc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NvY2suYy0xMTQ5LVx0ICovXG5uZXQvY29yZS9zb2NrLmM6MTE1MDpcdGlmIChoYXNfY3VycmVudF9icGZfY3R4KCkpXG5uZXQvY29yZS9zb2NrLmMtMTE1MS1cdFx0cmV0dXJuO1xuLS1cbm5ldC9jb3JlL3NvY2suYz0xMTU3PXZvaWQgc29ja29wdF9yZWxlYXNlX3NvY2soc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29jay5jLTExNTgte1xubmV0L2NvcmUvc29jay5jOjExNTk6XHRpZiAoaGFzX2N1cnJlbnRfYnBmX2N0eCgpKVxubmV0L2NvcmUvc29jay5jLTExNjAtXHRcdHJldHVybjtcbi0tXG5uZXQvY29yZS9zb2NrLmM9MTE2Nj1ib29sIHNvY2tvcHRfbnNfY2FwYWJsZShzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKVxubmV0L2NvcmUvc29jay5jLTExNjcte1xubmV0L2NvcmUvc29jay5jOjExNjg6XHRyZXR1cm4gaGFzX2N1cnJlbnRfYnBmX2N0eCgpIHx8IG5zX2NhcGFibGUobnMsIGNhcCk7XG5uZXQvY29yZS9zb2NrLmMtMTE2OS19XG4tLVxubmV0L2NvcmUvc29jay5jPTExNzI9Ym9vbCBzb2Nrb3B0X2NhcGFibGUoaW50IGNhcClcbm5ldC9jb3JlL3NvY2suYy0xMTczLXtcbm5ldC9jb3JlL3NvY2suYzoxMTc0Olx0cmV0dXJuIGhhc19jdXJyZW50X2JwZl9jdHgoKSB8fCBjYXBhYmxlKGNhcCk7XG5uZXQvY29yZS9zb2NrLmMtMTE3NS19XG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xNDY2PXZvaWQgaW5ldF9jc2tfbGlzdGVuX3N0b3Aoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTUyMi1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTUyMzpcdFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE1MjQtXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4tLVxubmV0L2lwdjQvdGNwLmM9MzgzNz1pbnQgZG9fdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTM4NjAtXHRcdHNvY2tvcHRfbG9ja19zb2NrKHNrKTtcbm5ldC9pcHY0L3RjcC5jOjM4NjE6XHRcdGVyciA9IHRjcF9zZXRfY29uZ2VzdGlvbl9jb250cm9sKHNrLCBuYW1lLCAhaGFzX2N1cnJlbnRfYnBmX2N0eCgpLFxubmV0L2lwdjQvdGNwLmMtMzg2Mi1cdFx0XHRcdFx0XHQgc29ja29wdF9uc19jYXBhYmxlKHNvY2tfbmV0KHNrKS1cdTAwM2V1c2VyX25zLFxuLS1cbm5ldC9pcHY0L3RjcC5jPTUxMTU9aW50IHRjcF9hYm9ydChzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXG4tLVxubmV0L2lwdjQvdGNwLmMtNTEzNy1cdC8qIEJQRiBjb250ZXh0IGVuc3VyZXMgc29jayBsb2NraW5nLiAqL1xubmV0L2lwdjQvdGNwLmM6NTEzODpcdGlmICghaGFzX2N1cnJlbnRfYnBmX2N0eCgpKVxubmV0L2lwdjQvdGNwLmMtNTEzOS1cdFx0LyogRG9uJiMzOTt0IHJhY2Ugd2l0aCB1c2Vyc3BhY2Ugc29ja2V0IGNsb3NlcyBzdWNoIGFzIHRjcF9jbG9zZS4gKi9cbi0tXG5uZXQvaXB2NC90Y3AuYy01MTQzLVx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkge1xubmV0L2lwdjQvdGNwLmM6NTE0NDpcdFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXG5uZXQvaXB2NC90Y3AuYy01MTQ1LVx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4tLVxubmV0L2lwdjQvdGNwLmMtNTE2My1cdGxvY2FsX2JoX2VuYWJsZSgpO1xubmV0L2lwdjQvdGNwLmM6NTE2NDpcdGlmICghaGFzX2N1cnJlbnRfYnBmX2N0eCgpKVxubmV0L2lwdjQvdGNwLmMtNTE2NS1cdFx0cmVsZWFzZV9zb2NrKHNrKTtcbi0tXG5uZXQvaXB2NC91ZHAuYz0zMTIxPWludCB1ZHBfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKVxubmV0L2lwdjQvdWRwLmMtMzEyMi17XG5uZXQvaXB2NC91ZHAuYzozMTIzOlx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXG5uZXQvaXB2NC91ZHAuYy0zMTI0LVx0XHRsb2NrX3NvY2soc2spO1xuLS1cbm5ldC9pcHY0L3VkcC5jLTMxMzYtb3V0OlxubmV0L2lwdjQvdWRwLmM6MzEzNzpcdGlmICghaGFzX2N1cnJlbnRfYnBmX2N0eCgpKVxubmV0L2lwdjQvdWRwLmMtMzEzOC1cdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTM6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU0OTcKCQkJCQkJCW91dHB1dDogMTU0CgkJCQkJCQl0aG91Z2h0czogMzEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIGV2ZXJ5dGhpbmcgYXBwZWFycyB0byBiZSBpbiBvcmRlciBoZXJlLiBUaGUgY2hhbmdlcyBhcmUgc3RyYWlnaHRmb3J3YXJkIGFuZCBpbnRlcm5hbGx5IGNvbnNpc3RlbnQuIExldCYjMzk7cyBydW4gdGhyb3VnaCBpdCBvbmUgbGFzdCB0aW1lIHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCkZpcnN0LCB0aGUgY29yZSBtb2RpZmljYXRpb25zIGFyZSBjbGVhcjogd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgYnBmX3NvY2tfZGVzdHJveWAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCBhbmQgYGluZXRfY3NrX2xpc3Rlbl9zdG9wYCBpbiBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2AuIFRoYXQmIzM5O3MgdGhlIGhlYXJ0IG9mIGl0LiBUaGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBmbGFnIGlzIHNldCwgd2hpY2ggaXMgYSBnb29kIGluZGljYXRvciwgYW5kIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZSBwcmVjaXNlbHkgdGhvc2U6IGBicGZfc29ja19kZXN0cm95YCBhbmQgYGluZXRfY3NrX2xpc3Rlbl9zdG9wYC4KClRoZW4sIHdlIGhhdmUgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zOiBgQlBGX1NZU0NBTExgLCBgREVCVUdfSU5GT19CVEZgLCBhbmQgYElORVRgLiBUaGlzIG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgY29udGV4dCBvZiBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBCUEYgaW50ZXJhY3Rpb25zLiBMZXQgbWUgcXVpY2tseSBzY2FuIGZvciBhbnkgb3RoZXIgdG91Y2hlZCBmdW5jdGlvbnM7IE5vcGUsIGp1c3QgdGhvc2UgdHdvIOKAkyBgYnBmX3NvY2tfZGVzdHJveWAgYW5kIGBpbmV0X2Nza19saXN0ZW5fc3RvcGAuIEdvb2QuIEFuZCB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5IGNoYW5nZXMgYXJlIGp1c3QgdGVzdC1yZWxhdGVkLCBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhlcmUuCgpOb3csIHRvIHNvbGlkaWZ5IHRoZSByZWFzb25pbmc6IFRoZSBwYXRjaCYjMzk7cyBwdXJwb3NlIGlzIHRvIGFsbG93IGBicGZfc29ja19kZXN0cm95KClgIHRvIGhhbmRsZSBub24tZnVsbCBzb2NrZXRzLCBsaWtlIHRob3NlIGluIFRJTUVfV0FJVCBzdGF0ZSwgdXNpbmcgYGRpYWdfZGVzdHJveWAgY2FsbGJhY2tzLiBBbmQgd2l0aCBgaW5ldF9jc2tfbGlzdGVuX3N0b3AoKWAsIHdlJiMzOTtyZSBieXBhc3NpbmcgYGNvbmRfcmVzY2hlZCgpYCB3aGVuIGl0JiMzOTtzIHJ1bm5pbmcgaW4gYSBCUEYgY29udGV4dCB2aWEgYGhhc19jdXJyZW50X2JwZl9jdHgoKWAuIE1ha2VzIHNlbnNlLCBjb25zaWRlcmluZyB0aGUgc29ja2V0IGxpZmVjeWNsZSBhbmQgQlBGIGtmdW5jIGV4ZWN1dGlvbiBwYXRocyBhY2Nlc3NlZCB2aWEgQlBGIGl0ZXJhdG9yIHByb2dyYW1zIGFuZCBzb2NrZXQgc3lzY2FsbHMgdGhhdCB0aGVzZSBjaGFuZ2VzIG1vZGlmeS4KCkFscmlnaHQsIHRoYXQmIzM5O3MgdGhvcm91Z2guIEkmIzM5O20gc2F0aXNmaWVkLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9zb2NrX2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7aW5ldF9jc2tfbGlzdGVuX3N0b3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJwZl9zb2NrX2Rlc3Ryb3koKSBCUEYga2Z1bmMgdG8gcGVybWl0IGRlc3Ryb3lpbmcgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIHNvY2tldHMpIHRoYXQgaW1wbGVtZW50IGRpYWdfZGVzdHJveSwgYW5kIGFkanVzdHMgaW5ldF9jc2tfbGlzdGVuX3N0b3AoKSB0byBhdm9pZCBjYWxsaW5nIGNvbmRfcmVzY2hlZCgpIHdoaWxlIGV4ZWN1dGluZyBpbiBhIEJQRiBjb250ZXh0LiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIEJQRiBzb2NrZXQgaXRlcmF0aW9uL2Rlc3RydWN0aW9uIHBhdGhzIHRoYXQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NvY2tfZGVzdHJveSYjMzQ7LAogICAgJiMzNDtpbmV0X2Nza19saXN0ZW5fc3RvcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYnBmX3NvY2tfZGVzdHJveSgpIEJQRiBrZnVuYyB0byBwZXJtaXQgZGVzdHJveWluZyBub24tZnVsbCBzb2NrZXRzIChzdWNoIGFzIFRDUCBUSU1FX1dBSVQgc29ja2V0cykgdGhhdCBpbXBsZW1lbnQgZGlhZ19kZXN0cm95LCBhbmQgYWRqdXN0cyBpbmV0X2Nza19saXN0ZW5fc3RvcCgpIHRvIGF2b2lkIGNhbGxpbmcgY29uZF9yZXNjaGVkKCkgd2hpbGUgZXhlY3V0aW5nIGluIGEgQlBGIGNvbnRleHQuIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGIHNvY2tldCBpdGVyYXRpb24vZGVzdHJ1Y3Rpb24gcGF0aHMgdGhhdCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTM6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYnBmX3NvY2tfZGVzdHJveSgpYCB0byBzdXBwb3J0IG5vbi1mdWxsIHNvY2tldHMgKGUuZy4sIFRDUCBUSU1FX1dBSVQgc29ja2V0cykgYnkgZ3VhcmRpbmcgdGhlIGBzay1cdTAwM2Vza19wcm90b2NvbGAgY2hlY2sgd2l0aCBgc2tfZnVsbHNvY2soKWAsIGFuZCB1cGRhdGVzIGBpbmV0X2Nza19saXN0ZW5fc3RvcCgpYCB0byBieXBhc3MgYGNvbmRfcmVzY2hlZCgpYCB3aGVuIHJ1bm5pbmcgd2l0aGluIGEgQlBGIGV4ZWN1dGlvbiBjb250ZXh0IHRvIHByZXZlbnQgc2xlZXBpbmcgaW4gYXRvbWljL1JDVSBjb250ZXh0cy5cblxuVGhlc2UgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBjb3B5LXRvLXVzZXIgb3BlcmF0aW9ucywgb3IgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBwb3RlbnRpYWwgcmlza3MgcmVsYXRlZCB0byBzb2NrZXQgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgZXhlY3V0aW9uIGNvbnRleHQgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyBhbmQgZGVidWdnZXJzIChLQVNBTiBmb3IgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcywgTE9DS0RFUCAvIERFQlVHX0FUT01JQ19TTEVFUCBmb3Igc2xlZXBpbmcgaW4gYXRvbWljIGNvbnRleHQpLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM4OGQ5NTU4ODEzYWY2NDhmZjk0MmM2N2FmZTFiNjVkZDFjYmNkNTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAxMzoyMDo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggODUxMzE2N2E4NThhOC4uZDljNGExMDhkZGI1ZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmMKQEAgLTEyOTExLDggJiM0MzsxMjkxMSw5IEBAIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTsKICAqIEBzb2NrOiBQb2ludGVyIHRvIHNvY2tldCB0byBiZSBkZXN0cm95ZWQKICAqCiAgKiBSZXR1cm46Ci0gKiBPbiBlcnJvciwgbWF5IHJldHVybiBFUFJPVE9OT1NVUFBPUlQsIEVJTlZBTC4KLSAqIEVQUk9UT05PU1VQUE9SVCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC4KJiM0MzsgKiBPbiBlcnJvciwgbWF5IHJldHVybiBFT1BOT1RTVVBQLCBvciB3aGF0ZXZlciB0aGUgcHJvdG9jb2wgc3BlY2lmaWMKJiM0MzsgKiBkZXN0cm95IGhhbmRsZXIgcmV0dXJucy4KJiM0MzsgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLgogICogMCBvdGhlcndpc2UKICAqLwogX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKQpAQCAtMTI5MjQsOCAmIzQzOzEyOTI1LDEyIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaykKIAkgKiBTdXBwb3J0aW5nIHByb3RvY29scyB3aWxsIG5lZWQgdG8gYWNxdWlyZSBzb2NrIGxvY2sgaW4gdGhlIEJQRiBjb250ZXh0CiAJICogcHJpb3IgdG8gaW52b2tpbmcgdGhpcyBrZnVuYy4KIAkgKi8KLQlpZiAoIXNrLSZndDtza19wcm90LSZndDtkaWFnX2Rlc3Ryb3kgfHwgKHNrLSZndDtza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCAmYW1wOyZhbXA7Ci0JCQkJCSAgIHNrLSZndDtza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUCkpCiYjNDM7CWlmICghc2stJmd0O3NrX3Byb3QtJmd0O2RpYWdfZGVzdHJveSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJaWYgKHNrX2Z1bGxzb2NrKHNrKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgJmFtcDsmYW1wOwomIzQzOwkgICAgc2stJmd0O3NrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlyZXR1cm4gc2stJmd0O3NrX3Byb3QtJmd0O2RpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCmluZGV4IDYyNTc0NTliY2VlMjQuLjZhMzBmMTEzODQ1NDcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwpAQCAtMTUyMCw3ICYjNDM7MTUyMCw4IEBAIHZvaWQgaW5ldF9jc2tfbGlzdGVuX3N0b3Aoc3RydWN0IHNvY2sgKnNrKQogCQlsb2NhbF9iaF9lbmFibGUoKTsKIAkJc29ja19wdXQoY2hpbGQpOwogCi0JCWNvbmRfcmVzY2hlZCgpOwomIzQzOwkJaWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpCiYjNDM7CQkJY29uZF9yZXNjaGVkKCk7CiAJfQogCWlmIChxdWV1ZS0mZ3Q7ZmFzdG9wZW5xLnJza3FfcnN0X2hlYWQpIHsKIAkJLyogRnJlZSBhbGwgdGhlIHJlcXMgcXVldWVkIGluIHJza3FfcnN0X2hlYWQuICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jCmluZGV4IDljMTE5MzhmZTU5N2QuLjc4ZDY0MmEwMmJkYjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jCkBAIC0xLDQgJiM0MzsxLDUgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O3BvbGwuaCZndDsKICNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YnBmL2JwZl9lbmRpYW4uaCZndDsKIApAQCAtMTEwLDYgJiM0MzsxMTEsMTIyIEBAIHN0YXRpYyB2b2lkIHRlc3RfdGNwX3NlcnZlcihzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpCiAJCWNsb3NlKHNlcnYpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdGVzdF90Y3BfbGlzdGVuX3BlbmRpbmcoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKQomIzQzO3sKJiM0MzsJaW50IHNlcnYgPSAtMSwgY2xpZW4gPSAtMSwgYWNjZXB0X3NlcnYgPSAtMSwgbiwgc2Vydl9wb3J0OwomIzQzOwlzdHJ1Y3QgcG9sbGZkIHBmZCA9IHsgLmV2ZW50cyA9IFBPTExJTiB9OwomIzQzOwljaGFyIGJ1ZlsxXTsKJiM0MzsKJiM0MzsJc2VydiA9IHN0YXJ0X3NlcnZlcihBRl9JTkVUNiwgU09DS19TVFJFQU0sIE5VTEwsIDAsIDApOwomIzQzOwlpZiAoIUFTU0VSVF9HRShzZXJ2LCAwLCAmIzM0O3N0YXJ0X3NlcnZlciYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJc2Vydl9wb3J0ID0gZ2V0X3NvY2tldF9sb2NhbF9wb3J0KHNlcnYpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShzZXJ2X3BvcnQsIDAsICYjMzQ7Z2V0X3NvY2tfbG9jYWxfcG9ydCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtzZXJ2X3BvcnQgPSAoX19iZTE2KXNlcnZfcG9ydDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQ29ubmVjdCBidXQgbmV2ZXIgYWNjZXB0LCBzbyB0aGUgY2hpbGQgc2l0cyBpbiB0aGUgYWNjZXB0IHF1ZXVlCiYjNDM7CSAqIG9mIHRoZSBsaXN0ZW5lci4gV2FpdCB1bnRpbCBpdCYjMzk7cyBhY3R1YWxseSB0aGVyZS4KJiM0MzsJICovCiYjNDM7CWNsaWVuID0gY29ubmVjdF90b19mZChzZXJ2LCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoY2xpZW4sIDAsICYjMzQ7Y29ubmVjdF90b19mZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJcGZkLmZkID0gc2VydjsKJiM0MzsJaWYgKCFBU1NFUlRfRVEocG9sbCgmYW1wO3BmZCwgMSwgLTEpLCAxLCAmIzM0O3BvbGwgbGlzdGVuZXImIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIFJ1biBpdGVyYXRvciBwcm9ncmFtIHRoYXQgZGVzdHJveXMgc2VydmVyIHNvY2tldHMuICovCiYjNDM7CXN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLSZndDtwcm9ncy5pdGVyX3RjcDZfc2VydmVyKTsKJiM0MzsKJiM0MzsJYWNjZXB0X3NlcnYgPSBhY2NlcHQoc2VydiwgTlVMTCwgTlVMTCk7CiYjNDM7CWlmICghQVNTRVJUX0xUKGFjY2VwdF9zZXJ2LCAwLCAmIzM0O2FjY2VwdCBvbiBkZXN0cm95ZWQgbGlzdGVuZXImIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CUFTU0VSVF9FUShlcnJubywgRUlOVkFMLCAmIzM0O2Vycm9yIGNvZGUgb24gZGVzdHJveWVkIGxpc3RlbmVyJiMzNDspOwomIzQzOwomIzQzOwkvKiBUaGUgdW5hY2NlcHRlZCBjaGlsZCB3YXMgcmVzZXQgYWxvbmcgd2l0aCB0aGUgbGlzdGVuZXIuICovCiYjNDM7CW4gPSByZWN2KGNsaWVuLCBidWYsIHNpemVvZihidWYpLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfTFQobiwgMCwgJiMzNDtjbGllbnQgcmVjdiBvbiByZXNldCBjaGlsZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJQVNTRVJUX0VRKGVycm5vLCBFQ09OTlJFU0VULCAmIzM0O2Vycm9yIGNvZGUgb24gcmVzZXQgY2hpbGQmIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKGNsaWVuICE9IC0xKQomIzQzOwkJY2xvc2UoY2xpZW4pOwomIzQzOwlpZiAoYWNjZXB0X3NlcnYgIT0gLTEpCiYjNDM7CQljbG9zZShhY2NlcHRfc2Vydik7CiYjNDM7CWlmIChzZXJ2ICE9IC0xKQomIzQzOwkJY2xvc2Uoc2Vydik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfdGNwX3RpbWV3YWl0KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbCkKJiM0Mzt7CiYjNDM7CWludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIGFjY2VwdF9zZXJ2ID0gLTEsIG47CiYjNDM7CXN0cnVjdCB0aW1ldmFsIHR2ID0ge307CiYjNDM7CWNoYXIgYnVmWzFdOwomIzQzOwomIzQzOwlzZXJ2ID0gc3RhcnRfc2VydmVyKEFGX0lORVQ2LCBTT0NLX1NUUkVBTSwgTlVMTCwgMCwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKHNlcnYsIDAsICYjMzQ7c3RhcnRfc2VydmVyJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwljbGllbiA9IGNvbm5lY3RfdG9fZmQoc2VydiwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGNsaWVuLCAwLCAmIzM0O2Nvbm5lY3RfdG9fZmQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWFjY2VwdF9zZXJ2ID0gYWNjZXB0KHNlcnYsIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShhY2NlcHRfc2VydiwgMCwgJiMzNDtzZXJ2IGFjY2VwdCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQWN0aXZlIGNsb3NlIGZyb20gdGhlIGNsaWVudCwgdGhlbiBjbG9zZSB0aGUgc2VydmVyIHNpZGUuIE9uY2UKJiM0MzsJICogcmVjdigpIHNlZXMgRU9GIHRoZSBzZXJ2ZXIgRklOIGhhcyBiZWVuIHByb2Nlc3NlZCBhbmQgdGhlIGNsaWVudAomIzQzOwkgKiBzb2NrIGlzIGluIFRJTUVfV0FJVC4gQmxvY2sgd2l0aG91dCB0aW1lb3V0IHNvIGEgbG9hZGVkIENJIGJveAomIzQzOwkgKiBjYW4mIzM5O3QgcmFjZSB1cy4KJiM0MzsJICovCiYjNDM7CWlmICghQVNTRVJUX09LKHNldHNvY2tvcHQoY2xpZW4sIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCAmYW1wO3R2LAomIzQzOwkJCQkgIHNpemVvZih0dikpLCAmIzM0O2NsZWFyIHJjdnRpbWVvJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhzaHV0ZG93bihjbGllbiwgU0hVVF9XUiksICYjMzQ7Y2xpZW50IHNodXRkb3duJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYWtlIHN1cmUgdGhlIHNlcnZlciBoYXMgc2VlbiB0aGUgY2xpZW50IEZJTiBiZWZvcmUgaXQgY2xvc2VzLAomIzQzOwkgKiBzbyB0aGUgdHdvIEZJTnMgbmV2ZXIgY3Jvc3MuCiYjNDM7CSAqLwomIzQzOwluID0gcmVjdihhY2NlcHRfc2VydiwgYnVmLCBzaXplb2YoYnVmKSwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0VRKG4sIDAsICYjMzQ7c2VydmVyIHJlY3YgRU9GJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwljbG9zZShhY2NlcHRfc2Vydik7CiYjNDM7CWFjY2VwdF9zZXJ2ID0gLTE7CiYjNDM7CiYjNDM7CS8qIGJsb2NrIHVudGlsIHJldHVybiBFT0YgKi8KJiM0MzsJbiA9IHJlY3YoY2xpZW4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOwomIzQzOwlpZiAoIUFTU0VSVF9FUShuLCAwLCAmIzM0O2NsaWVudCByZWN2IEVPRiYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogUnVuIGl0ZXJhdG9yIHByb2dyYW0gdGhhdCBkZXN0cm95cyB0aGUgdGltZXdhaXQgY2xpZW50IHNvY2suICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7dHdfZm91bmQgPSAwOwomIzQzOwlzdGFydF9pdGVyX3NvY2tldHMoc2tlbC0mZ3Q7cHJvZ3MuaXRlcl90Y3A2X3RpbWV3YWl0KTsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDt0d19mb3VuZCwgMSwgJiMzNDt0aW1ld2FpdCBzb2NrIGZvdW5kJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlBU1NFUlRfT0soc2tlbC0mZ3Q7YnNzLSZndDt0d19kZXN0cm95X2VyciwgJiMzNDtkZXN0cm95IHRpbWV3YWl0IHNvY2smIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIFRoZSBkZXN0cm95ZWQgdGltZXdhaXQgc29jayBtdXN0IGJlIGdvbmUuICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7dHdfZm91bmQgPSAwOwomIzQzOwlzdGFydF9pdGVyX3NvY2tldHMoc2tlbC0mZ3Q7cHJvZ3MuaXRlcl90Y3A2X3RpbWV3YWl0KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7dHdfZm91bmQsIDAsICYjMzQ7dGltZXdhaXQgc29jayBkZXN0cm95ZWQmIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKGNsaWVuICE9IC0xKQomIzQzOwkJY2xvc2UoY2xpZW4pOwomIzQzOwlpZiAoYWNjZXB0X3NlcnYgIT0gLTEpCiYjNDM7CQljbG9zZShhY2NlcHRfc2Vydik7CiYjNDM7CWlmIChzZXJ2ICE9IC0xKQomIzQzOwkJY2xvc2Uoc2Vydik7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdGVzdF91ZHBfY2xpZW50KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbCkKIHsKIAlpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBuID0gMDsKQEAgLTIwNCw2ICYjNDM7MzIxLDEwIEBAIHZvaWQgdGVzdF9zb2NrX2Rlc3Ryb3kodm9pZCkKIAkJdGVzdF90Y3BfY2xpZW50KHNrZWwpOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7dGNwX3NlcnZlciYjMzQ7KSkKIAkJdGVzdF90Y3Bfc2VydmVyKHNrZWwpOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3RjcF9saXN0ZW5fcGVuZGluZyYjMzQ7KSkKJiM0MzsJCXRlc3RfdGNwX2xpc3Rlbl9wZW5kaW5nKHNrZWwpOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3RjcF90aW1ld2FpdCYjMzQ7KSkKJiM0MzsJCXRlc3RfdGNwX3RpbWV3YWl0KHNrZWwpOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7dWRwX2NsaWVudCYjMzQ7KSkKIAkJdGVzdF91ZHBfY2xpZW50KHNrZWwpOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7dWRwX3NlcnZlciYjMzQ7KSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMKaW5kZXggOWUwYmY3YTU0Y2VjOS4uMGE4ODg3NTQzMjE4YSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMKQEAgLTcsNiAmIzQzOzcsOCBAQAogI2luY2x1ZGUgJiMzNDticGZfdHJhY2luZ19uZXQuaCYjMzQ7CiAKIF9fYmUxNiBzZXJ2X3BvcnQgPSAwOwomIzQzO2ludCB0d19mb3VuZCA9IDA7CiYjNDM7aW50IHR3X2Rlc3Ryb3lfZXJyID0gMDsKIAogaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzaykgX19rc3ltOwogCkBAIC0xMDAsNiAmIzQzOzEwMiwzNCBAQCBpbnQgaXRlcl90Y3A2X3NlcnZlcihzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7aXRlci90Y3AmIzM0OykKJiM0MztpbnQgaXRlcl90Y3A2X3RpbWV3YWl0KHN0cnVjdCBicGZfaXRlcl9fdGNwICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja19jb21tb24gKnNrX2NvbW1vbiA9IGN0eC0mZ3Q7c2tfY29tbW9uOwomIzQzOwlfX3U2NCAqdmFsOwomIzQzOwlpbnQga2V5ID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFza19jb21tb24pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHNrX2NvbW1vbi0mZ3Q7c2tjX2ZhbWlseSAhPSBBRl9JTkVUNikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoIWJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2soc2tfY29tbW9uKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7dGNwX2Nvbm5fc29ja2V0cywgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwkvKiBUaGUgdGltZXdhaXQgc29jayBpbmhlcml0cyB0aGUgY29va2llIG9mIHRoZSBjbG9zZWQgY2xpZW50IHNvY2suICovCiYjNDM7CWlmIChicGZfZ2V0X3NvY2tldF9jb29raWUoc2tfY29tbW9uKSAhPSAqdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXR3X2ZvdW5kJiM0MzsmIzQzOzsKJiM0MzsJdHdfZGVzdHJveV9lcnIgPSBicGZfc29ja19kZXN0cm95KHNrX2NvbW1vbik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KIAogU0VDKCYjMzQ7aXRlci91ZHAmIzM0OykKIGludCBpdGVyX3VkcDZfY2xpZW50KHN0cnVjdCBicGZfaXRlcl9fdWRwICpjdHgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTQwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyB0aGF0IHdhcnJhbnQgS01TQU4gb3IgaWYgc3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUCB3aWxsIGN1dCBpdC4KCkZpcnN0LCBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBkaWZmLiBTcGVjaWZpY2FsbHksIHRoaXMgY2hhbmdlIGluIGBuZXQvY29yZS9maWx0ZXIuY2Agd2l0aGluIHRoZSBgYnBmX3NvY2tfZGVzdHJveWAgZnVuY3Rpb24uIEhtbSwgaXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSByZW1vdmVkIGEgY2hlY2sgYW5kIGFkZGVkIGEgbmV3IG9uZToKCmBgYGMKLQlpZiAoIXNrLSZndDtza19wcm90LSZndDtkaWFnX2Rlc3Ryb3kgfHwgKHNrLSZndDtza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCAmYW1wOyZhbXA7Ci0JCQkJCSAgIHNrLSZndDtza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUCkpCiYjNDM7CWlmICghc2stJmd0O3NrX3Byb3QtJmd0O2RpYWdfZGVzdHJveSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJaWYgKHNrX2Z1bGxzb2NrKHNrKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgJmFtcDsmYW1wOwomIzQzOwkgICAgc2stJmd0O3NrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlyZXR1cm4gc2stJmd0O3NrX3Byb3QtJmd0O2RpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTsKYGBgCgpQcmV2aW91c2x5LCBgc2stJmd0O3NrX3Byb3RvY29sYCB3YXMgYmVpbmcgYWNjZXNzZWQgb24gYW55IGBzb2NrX2NvbW1vbmAgc3RydWN0dXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2FpdCBhIHNlY29uZCwgaXNuJiMzOTt0IGBzay0mZ3Q7c2tfcHJvdG9jb2xgIHBvc3NpYmx5IHVuaW5pdGlhbGl6ZWQgaW4gY2VydGFpbiBgc29ja19jb21tb25gIHNjZW5hcmlvcz8gU3BlY2lmaWNhbGx5LCBmb3Igc29tZXRoaW5nIGxpa2UgYHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2tgLCB3aGljaCBpc24mIzM5O3QgYSBmdWxsIHNvY2tldCwgYWNjZXNzaW5nIGBza19wcm90b2NvbGAgZGlyZWN0bHkgY291bGQgYmUgZGFuZ2Vyb3VzLgoKSSYjMzk7bSB0aGlua2luZywgaXNuJiMzOTt0IGBzdHJ1Y3Qgc29ja19jb21tb25gIHN1cHBvc2VkIHRvIGhvbGQgc29tZSBvZiB0aGlzIGVzc2VudGlhbCBpbmZvIGxpa2UgYHNrY19wcm90YCBvciBgc2tjX2ZhbWlseWA/IEkmIzM5O20gZ2V0dGluZyBhIGxpdHRsZSBmdXp6eSBoZXJlLiBEaWQgdGhleSBndWFyZCB0aGF0IGFjY2VzcyB3aXRoIHRoZSBgc2tfZnVsbHNvY2soc2spYCBjaGVjaz8gQWhhLCB0aGF0JiMzOTtzIGl0ISBJZiB3ZSBvbmx5IGNoZWNrIGBza19wcm90b2NvbGAgd2hlbiBgc2tfZnVsbHNvY2tgIHJldHVybnMgdHJ1ZSwgaXQmIzM5O3Mgc2FmZXIuIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoaXMgc3RyYWlnaHQ6IEkgbmVlZCB0byBjaGVjayBob3cgYHNrX2Z1bGxzb2NrYCBpcyBkZWZpbmVkLiBJIHNob3VsZCBhbHNvIGNoZWNrIHdoaWNoIGZpZWxkcyBhcmUgYWN0dWFsbHkgZGVmaW5lZCBpbiBgc29ja19jb21tb25gIHZlcnN1cyBgc29ja2AsIGluIGdlbmVyYWwuCgpPa2F5LCB0aW1lIHRvIGdyZXAgZm9yIGBza19mdWxsc29ja2Agb3IgZ28gZGlyZWN0bHkgdG8gYGluY2x1ZGUvbmV0L3NvY2suaGAuIEkmIzM5O2xsIGdldCB0aGUgZGV0YWlscyBiZWZvcmUgYXNzdW1pbmcgYW55dGhpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX2Z1bGxzb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2Nsc19jZ3JvdXAuaD01Mz1zdGF0aWMgaW5saW5lIHUzMiB0YXNrX2dldF9jbGFzc2lkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9uZXQvY2xzX2Nncm91cC5oLTY5LVx0XHQvKiBJZiB0aGVyZSBpcyBhbiBzb2NrX2Nncm91cF9jbGFzc2lkIHdlJiMzOTtsbCB1c2UgdGhhdC4gKi9cbmluY2x1ZGUvbmV0L2Nsc19jZ3JvdXAuaDo3MDpcdFx0aWYgKCFzayB8fCAhc2tfZnVsbHNvY2soc2spKVxuaW5jbHVkZS9uZXQvY2xzX2Nncm91cC5oLTcxLVx0XHRcdHJldHVybiAwO1xuLS1cbmluY2x1ZGUvbmV0L2luZXQ2X2hhc2h0YWJsZXMuaD0xMDY9c3RydWN0IHNvY2sgKmluZXQ2X3N0ZWFsX3NvY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZG9mZixcbi0tXG5pbmNsdWRlL25ldC9pbmV0Nl9oYXNodGFibGVzLmgtMTE3LVxuaW5jbHVkZS9uZXQvaW5ldDZfaGFzaHRhYmxlcy5oOjExODpcdGlmICghcHJlZmV0Y2hlZCB8fCAhc2tfZnVsbHNvY2soc2spKVxuaW5jbHVkZS9uZXQvaW5ldDZfaGFzaHRhYmxlcy5oLTExOS1cdFx0cmV0dXJuIHNrO1xuLS1cbmluY2x1ZGUvbmV0L2luZXRfaGFzaHRhYmxlcy5oPTQ0Nj1zdHJ1Y3Qgc29jayAqaW5ldF9zdGVhbF9zb2NrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGRvZmYsXG4tLVxuaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmgtNDU3LVxuaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmg6NDU4Olx0aWYgKCFwcmVmZXRjaGVkIHx8ICFza19mdWxsc29jayhzaykpXG5pbmNsdWRlL25ldC9pbmV0X2hhc2h0YWJsZXMuaC00NTktXHRcdHJldHVybiBzaztcbi0tXG5pbmNsdWRlL25ldC9pcC5oPTUzND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9za2JfZHN0X210dShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxuaW5jbHVkZS9uZXQvaXAuaC01MzktXG5pbmNsdWRlL25ldC9pcC5oOjU0MDpcdGlmICghc2sgfHwgIXNrX2Z1bGxzb2NrKHNrKSB8fCBpcF9za191c2VfcG10dShzaykpIHtcbmluY2x1ZGUvbmV0L2lwLmgtNTQxLVx0XHRib29sIGZvcndhcmRpbmcgPSBJUENCKHNrYiktXHUwMDNlZmxhZ3MgXHUwMDI2IElQU0tCX0ZPUldBUkRFRDtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5oPTIyPXN0YXRpYyBpbmxpbmUgYm9vbCBuZnRfZmliX2Nhbl9za2lwKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZnRfZmliLmgtMzYtXHRzayA9IHBrdC1cdTAwM2Vza2ItXHUwMDNlc2s7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5oOjM3Olx0aWYgKHNrIFx1MDAyNlx1MDAyNiBza19mdWxsc29jayhzaykpXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5oLTM4LVx0ICAgICAgIHJldHVybiBzay1cdTAwM2Vza19yeF9kc3RfaWZpbmRleCA9PSBpbmRldi1cdTAwM2VpZmluZGV4O1xuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0zMDE2PXNrYl9za19pc19wcmVmZXRjaGVkKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9uZXQvc29jay5oLTMwMjctICovXG5pbmNsdWRlL25ldC9zb2NrLmg6MzAyODpzdGF0aWMgaW5saW5lIGJvb2wgc2tfZnVsbHNvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuaW5jbHVkZS9uZXQvc29jay5oLTMwMjkte1xuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0zMDM0PXNrX2lzX3JlZmNvdW50ZWQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaC0zMDM2LVx0LyogT25seSBmdWxsIHNvY2tldHMgaGF2ZSBzay1cdTAwM2Vza19mbGFncy4gKi9cbmluY2x1ZGUvbmV0L3NvY2suaDozMDM3Olx0cmV0dXJuICFza19mdWxsc29jayhzaykgfHwgIXNvY2tfZmxhZyhzaywgU09DS19SQ1VfRlJFRSk7XG5pbmNsdWRlL25ldC9zb2NrLmgtMzAzOC19XG4tLVxuaW5jbHVkZS9uZXQvc29jay5oPTMwNDE9c2tfcmVxdWVzdHNfd2lmaV9zdGF0dXMoc3RydWN0IHNvY2sgKnNrKVxuaW5jbHVkZS9uZXQvc29jay5oLTMwNDIte1xuaW5jbHVkZS9uZXQvc29jay5oOjMwNDM6XHRyZXR1cm4gc2sgXHUwMDI2XHUwMDI2IHNrX2Z1bGxzb2NrKHNrKSBcdTAwMjZcdTAwMjYgc29ja19mbGFnKHNrLCBTT0NLX1dJRklfU1RBVFVTKTtcbmluY2x1ZGUvbmV0L3NvY2suaC0zMDQ0LX1cbi0tXG5pbmNsdWRlL25ldC9zb2NrLmg9MzExNj1zdGF0aWMgaW5saW5lIHZvaWQgc2tfcGFjaW5nX3NoaWZ0X3VwZGF0ZShzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXG5pbmNsdWRlL25ldC9zb2NrLmgtMzExNy17XG5pbmNsdWRlL25ldC9zb2NrLmg6MzExODpcdGlmICghc2sgfHwgIXNrX2Z1bGxzb2NrKHNrKSB8fCBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcGFjaW5nX3NoaWZ0KSA9PSB2YWwpXG5pbmNsdWRlL25ldC9zb2NrLmgtMzExOS1cdFx0cmV0dXJuO1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oPTI4OTQ9c3RhdGljIGlubGluZSBpbnQgdGNwX2NhbGxfYnBmKHN0cnVjdCBzb2NrICpzaywgaW50IG9wLCB1MzIgbmFyZ3MsIHUzMiAqYXJncylcbi0tXG5pbmNsdWRlL25ldC90Y3AuaC0yODk5LVx0bWVtc2V0KFx1MDAyNnNvY2tfb3BzLCAwLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sIHRlbXApKTtcbmluY2x1ZGUvbmV0L3RjcC5oOjI5MDA6XHRpZiAoc2tfZnVsbHNvY2soc2spKSB7XG5pbmNsdWRlL25ldC90Y3AuaC0yOTAxLVx0XHRzb2NrX29wcy5pc19mdWxsc29jayA9IDE7XG4tLVxuaW5jbHVkZS9uZXQvdGxzLmg9MzYwPXN0YXRpYyBpbmxpbmUgYm9vbCB0bHNfaXNfc2tiX3R4X2RldmljZV9vZmZsb2FkZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL25ldC90bHMuaC0zNjQtXG5pbmNsdWRlL25ldC90bHMuaDozNjU6XHRyZXR1cm4gc2sgXHUwMDI2XHUwMDI2IHNrX2Z1bGxzb2NrKHNrKSBcdTAwMjZcdTAwMjZcbmluY2x1ZGUvbmV0L3Rscy5oLTM2Ni1cdCAgICAgICAoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZzay1cdTAwM2Vza192YWxpZGF0ZV94bWl0X3NrYikgPT1cbi0tXG5pbmNsdWRlL25ldC90bHMuaD01MDg9c3RhdGljIGlubGluZSBib29sIHRsc19pc19za19yeF9kZXZpY2Vfb2ZmbG9hZGVkKHN0cnVjdCBzb2NrICpzaylcbmluY2x1ZGUvbmV0L3Rscy5oLTUwOS17XG5pbmNsdWRlL25ldC90bHMuaDo1MTA6XHRpZiAoIXNrX2Z1bGxzb2NrKHNrKSB8fFxuaW5jbHVkZS9uZXQvdGxzLmgtNTExLVx0ICAgIHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2c2stXHUwMDNlc2tfZGVzdHJ1Y3QpICE9IHRsc19kZXZpY2Vfc2tfZGVzdHJ1Y3QpXG4tLVxuaW5jbHVkZS9uZXQveGZybS5oPTEzOTM9c3RhdGljIGlubGluZSBpbnQgeGZybV9za19jbG9uZV9wb2xpY3koc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqb3NrKVxuaW5jbHVkZS9uZXQveGZybS5oLTEzOTQte1xuaW5jbHVkZS9uZXQveGZybS5oOjEzOTU6XHRpZiAoIXNrX2Z1bGxzb2NrKG9zaykpXG5pbmNsdWRlL25ldC94ZnJtLmgtMTM5Ni1cdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczODEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgYnBmX3NvY2tfZGVzdHJveWAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIGBicGZfc29ja19kZXN0cm95YCBmdW5jdGlvbi4uLiB0aGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgd2hlbiBpdCBjb21lcyB0byBjbGVhbmluZyB1cCBCUEYtcmVsYXRlZCByZXNvdXJjZXMgdGllZCB0byBhIHNvY2tldC4gR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIG1lbW9yeSBsZWFrcyBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBpbiB0aGlzIGFyZWEsIG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byByZXZpc2l0IHRoYXQgc2VjdGlvbiBvZiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBJIG5lZWQgdG8gZW5zdXJlIGFsbCByZXNvdXJjZXMgYWxsb2NhdGVkIGZvciB0aGUgQlBGIHByb2dyYW0gYXNzb2NpYXRlZCB3aXRoIGEgc29ja2V0IGFyZSBwcm9wZXJseSBmcmVlZCBkdXJpbmcgc29ja2V0IGRlc3RydWN0aW9uLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMg4oCTIGFyZSB0aGVyZSBhbnkgc2NlbmFyaW9zIHdoZXJlIGFub3RoZXIgdGhyZWFkIG1pZ2h0IGJlIGFjY2Vzc2luZyB0aGUgQlBGIHByb2dyYW0gd2hpbGUgd2UmIzM5O3JlIHRyeWluZyB0byB0ZWFyIGl0IGRvd24/IEFsc28sIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIHJlZmVyZW5jZSBjb3VudHMgYXJlIGhhbmRsZWQgbWV0aWN1bG91c2x5OyBhIHNpbmdsZSBtaXNzZWQgZGVjcmVtZW50IGNvdWxkIGJlIGEgdGlja2luZyB0aW1lIGJvbWIuIEnigJlsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSwgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIHJlc291cmNlLXJlbGF0ZWQgaXNzdWVzPyBBbnkgc3BvdHMgd2hlcmUgYSBwcm9ncmFtIG1pZ2h0IGJlIHVzZWQgYWZ0ZXIgaXQgaXMgZnJlZWQuIEFuZCBJIGhhdmUgdG8ga2VlcCBpbiBtaW5kLCBvZiBjb3Vyc2UsIHRoZSBpbXBsaWNhdGlvbnMgb2YgY2hhbmdlcyBoZXJlIG9uIG90aGVyIHN5c3RlbXMsIHNvIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI5MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI5MTA6XHQgKiBQYXJhbWV0ZXJzOlxuMTI5MTE6XHQgKiBAc29jazogUG9pbnRlciB0byBzb2NrZXQgdG8gYmUgZGVzdHJveWVkXG4xMjkxMjpcdCAqXG4xMjkxMzpcdCAqIFJldHVybjpcbjEyOTE0Olx0ICogT24gZXJyb3IsIG1heSByZXR1cm4gRU9QTk9UU1VQUCwgb3Igd2hhdGV2ZXIgdGhlIHByb3RvY29sIHNwZWNpZmljXG4xMjkxNTpcdCAqIGRlc3Ryb3kgaGFuZGxlciByZXR1cm5zLlxuMTI5MTY6XHQgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxuMTI5MTc6XHQgKiAwIG90aGVyd2lzZVxuMTI5MTg6XHQgKi9cbjEyOTE5Olx0X19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxuMTI5MjA6XHR7XG4xMjkyMTpcdFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopc29jaztcbjEyOTIyOlx0XG4xMjkyMzpcdFx0LyogVGhlIGxvY2tpbmcgc2VtYW50aWNzIHRoYXQgYWxsb3cgZm9yIHN5bmNocm9ub3VzIGV4ZWN1dGlvbiBvZiB0aGVcbjEyOTI0Olx0XHQgKiBkZXN0cm95IGhhbmRsZXJzIGFyZSBvbmx5IHN1cHBvcnRlZCBmb3IgVENQIGFuZCBVRFAuXG4xMjkyNTpcdFx0ICogU3VwcG9ydGluZyBwcm90b2NvbHMgd2lsbCBuZWVkIHRvIGFjcXVpcmUgc29jayBsb2NrIGluIHRoZSBCUEYgY29udGV4dFxuMTI5MjY6XHRcdCAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuXG4xMjkyNzpcdFx0ICovXG4xMjkyODpcdFx0aWYgKCFzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveSlcbjEyOTI5Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjEyOTMwOlx0XG4xMjkzMTpcdFx0aWYgKHNrX2Z1bGxzb2NrKHNrKSBcdTAwMjZcdTAwMjZcbjEyOTMyOlx0XHQgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG4xMjkzMzpcdFx0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxuMTI5MzQ6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTI5MzU6XHRcbjEyOTM2Olx0XHRyZXR1cm4gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7XG4xMjkzNzpcdH1cbjEyOTM4Olx0XG4xMjkzOTpcdF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG4xMjk0MDpcdFxuMTI5NDE6XHRCVEZfS0ZVTkNTX1NUQVJUKGJwZl9za19pdGVyX2tmdW5jX2lkcylcbjEyOTQyOlx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zb2NrX2Rlc3Ryb3kpXG4xMjk0MzpcdEJURl9LRlVOQ1NfRU5EKGJwZl9za19pdGVyX2tmdW5jX2lkcylcbjEyOTQ0Olx0XG4xMjk0NTpcdHN0YXRpYyBpbnQgdHJhY2luZ19pdGVyX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbjEyOTQ2Olx0e1xuMTI5NDc6XHRcdGlmIChidGZfaWRfc2V0OF9jb250YWlucyhcdTAwMjZicGZfc2tfaXRlcl9rZnVuY19pZHMsIGtmdW5jX2lkKSBcdTAwMjZcdTAwMjZcbjEyOTQ4Olx0XHQgICAgcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfSVRFUilcbjEyOTQ5Olx0XHRcdHJldHVybiAtRUFDQ0VTO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Mzk4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBpbmV0X2Nvbm5lY3Rpb25fc29jay5jYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIG9uIGBuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jYC4gU3BlY2lmaWNhbGx5LCBJIHRoaW5rIHRoZSBhY3Rpb24gaXMgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDE1MjAuIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIHRoZSBzeW1wdG9tcyBJJiMzOTttIHNlZWluZy4gSSYjMzk7bGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cgYXJvdW5kIHRoYXQgYXJlYSBvZiB0aGUgY29kZS4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1MDA6XHRcdFx0XHRcdFx0UkVBRF9PTkNFKG5zay1cdTAwM2Vza19kYXRhX3JlYWR5KShuc2spO1xuMTUwMTpcdFx0XHRcdFx0fSBlbHNlIHtcbjE1MDI6XHRcdFx0XHRcdFx0X19ORVRfSU5DX1NUQVRTKHNvY2tfbmV0KG5zayksXG4xNTAzOlx0XHRcdFx0XHRcdFx0XHRMSU5VWF9NSUJfVENQTUlHUkFURVJFUUZBSUxVUkUpO1xuMTUwNDpcdFx0XHRcdFx0XHRyZXFza19taWdyYXRlX3Jlc2V0KG5yZXEpO1xuMTUwNTpcdFx0XHRcdFx0XHRfX3JlcXNrX2ZyZWUobnJlcSk7XG4xNTA2Olx0XHRcdFx0XHR9XG4xNTA3Olx0XHRcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjE1MDg6XHRcbjE1MDk6XHRcdFx0XHRcdC8qIGluZXRfY3NrX3JlcXNrX3F1ZXVlX2FkZCgpIGhhcyBhbHJlYWR5XG4xNTEwOlx0XHRcdFx0XHQgKiBjYWxsZWQgaW5ldF9jaGlsZF9mb3JnZXQoKSBvbiBmYWlsdXJlIGNhc2UuXG4xNTExOlx0XHRcdFx0XHQgKi9cbjE1MTI6XHRcdFx0XHRcdGdvdG8gc2tpcF9jaGlsZF9mb3JnZXQ7XG4xNTEzOlx0XHRcdFx0fVxuMTUxNDpcdFx0XHR9XG4xNTE1Olx0XG4xNTE2Olx0XHRcdGluZXRfY2hpbGRfZm9yZ2V0KHNrLCByZXEsIGNoaWxkKTtcbjE1MTc6XHRza2lwX2NoaWxkX2ZvcmdldDpcbjE1MTg6XHRcdFx0cmVxc2tfcHV0KHJlcSk7XG4xNTE5Olx0XHRcdGJoX3VubG9ja19zb2NrKGNoaWxkKTtcbjE1MjA6XHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4xNTIxOlx0XHRcdHNvY2tfcHV0KGNoaWxkKTtcbjE1MjI6XHRcbjE1MjM6XHRcdFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXG4xNTI0Olx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4xNTI1Olx0XHR9XG4xNTI2Olx0XHRpZiAocXVldWUtXHUwMDNlZmFzdG9wZW5xLnJza3FfcnN0X2hlYWQpIHtcbjE1Mjc6XHRcdFx0LyogRnJlZSBhbGwgdGhlIHJlcXMgcXVldWVkIGluIHJza3FfcnN0X2hlYWQuICovXG4xNTI4Olx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZxdWV1ZS1cdTAwM2VmYXN0b3BlbnEubG9jayk7XG4xNTI5Olx0XHRcdHJlcSA9IHF1ZXVlLVx1MDAzZWZhc3RvcGVucS5yc2txX3JzdF9oZWFkO1xuMTUzMDpcdFx0XHRxdWV1ZS1cdTAwM2VmYXN0b3BlbnEucnNrcV9yc3RfaGVhZCA9IE5VTEw7XG4xNTMxOlx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnF1ZXVlLVx1MDAzZWZhc3RvcGVucS5sb2NrKTtcbjE1MzI6XHRcdFx0d2hpbGUgKHJlcSAhPSBOVUxMKSB7XG4xNTMzOlx0XHRcdFx0bmV4dCA9IHJlcS1cdTAwM2VkbF9uZXh0O1xuMTUzNDpcdFx0XHRcdHJlcXNrX3B1dChyZXEpO1xuMTUzNTpcdFx0XHRcdHJlcSA9IG5leHQ7XG4xNTM2Olx0XHRcdH1cbjE1Mzc6XHRcdH1cbjE1Mzg6XHRcdFdBUk5fT05fT05DRShzay1cdTAwM2Vza19hY2tfYmFja2xvZyk7XG4xNTM5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTk1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgYW5kIFNvY2tldCBMaWZlY3ljbGUgSW50ZXJhY3Rpb25zKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEkgc2VlIHRoYXQgYGluZXRfY3NrX2xpc3Rlbl9zdG9wYCBoYXMgdGhpcyBjb25kaXRpb25hbCBgaWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpIGNvbmRfcmVzY2hlZCgpO2AuIFRoZSByYXRpb25hbGUgaXMgcHJldHR5IGNsZWFyOiB3aGVuIGBicGZfc29ja19kZXN0cm95YCBpcyBpbnZva2VkIGZyb20gd2l0aGluIGEgQlBGIHByb2dyYW0sIGVzcGVjaWFsbHkgdGhyb3VnaCBpdGVyYXRvcnMsIGl0IGNhbiBiZSBydW5uaW5nIHVuZGVyIGFuIFJDVSByZWFkIGxvY2sgb3IgaW4gYSBub24tcHJlZW1wdGlibGUgY29udGV4dC4gQ2FsbGluZyBgY29uZF9yZXNjaGVkKClgIGluIHRoYXQgc2NlbmFyaW8gaXMgYSByZWNpcGUgZm9yIGRpc2FzdGVyIOKAkyBjbGFzc2ljIGBtaWdodF9zbGVlcCgpYCBhbmQgJiMzNDtzY2hlZHVsaW5nIHdoaWxlIGF0b21pYyYjMzQ7IHdhcm5pbmdzLCBvciBwb3RlbnRpYWxseSBSQ1UtcmVsYXRlZCBwcm9ibGVtcy4gU3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhbmQgbG9ja2RlcCB3b3VsZCBlYXNpbHkgY2F0Y2ggdGhvc2Ugc2NoZWR1bGVyLCBjb25jdXJyZW5jeSwgYW5kIFJDVSBpc3N1ZXMuIFRoYXQgbWFrZXMgc2Vuc2UuCgpOb3csIHRoZSBjaGFuZ2VzIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgYXJlIG1vcmUgaW50ZXJlc3RpbmcuIGBicGZfc29ja19kZXN0cm95YCBpcyBjbGVhcmx5IGJlaW5nIHVwZGF0ZWQgdG8gaGFuZGxlIG5vbi1mdWxsIHNvY2tldHMsIGxpa2UgYGluZXRfdGltZXdhaXRfc29ja2Agb3IgYHJlcXVlc3Rfc29ja2AuIFRoZSBjb2RlIG5vdyBjaGVja3MgYHNrX2Z1bGxzb2NrKHNrKWAgYmVmb3JlIGFjY2Vzc2luZyBgc2stJmd0O3NrX3Byb3RvY29sYC4gSG1tLCB3aHk/IEFoLCBmb3IgdGltZXdhaXQgc29ja2V0cywgYHNrX2NvbW1vbmAgaXMgZW1iZWRkZWQsIGJ1dCB0aGUgYGluZXRfdGltZXdhaXRfc29ja2Agc3RydWN0dXJlIGRvZXNu4oCZdCBoYXZlIHRoZSBmdWxsIGBzdHJ1Y3Qgc29ja2AgZmllbGRzIGxpa2UgYHNrX3Byb3RvY29sYCBhdCB0aGUgc2FtZSBvZmZzZXRzLiBSaWdodCwgSSByZW1lbWJlciBub3chIEluIGBzdHJ1Y3Qgc29ja19jb21tb25gLCB3ZSBoYXZlIGBza2NfcHJvdGAsIGJ1dCB0aGUgZnVsbCBgc2tfcHJvdG9jb2xgIGxpdmVzIGluIGBzdHJ1Y3Qgc29ja2AsIG5vdCBgc29ja19jb21tb25gLiBTbywgYGluZXRfdGltZXdhaXRfc29ja2AgbWlnaHQgYmUgdXNpbmcgYHR3X3Byb3RgIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQgd2l0aGluIHRoZSBgc2tjX3Byb3RgLiBJZiBgYnBmX3NvY2tfZGVzdHJveWAgd2VyZSB0byB0YWtlIGEgYHNvY2tfY29tbW9uYCBwb2ludGVyIGFuZCBibGluZGx5IGNhc3QgaXQgdG8gYHN0cnVjdCBzb2NrICpgLCBhY2Nlc3NpbmcgYHNrLSZndDtza19wcm90b2NvbGAgb24gYW4gYGluZXRfdGltZXdhaXRfc29ja2Agd291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQsIG9yLCBhdCBiZXN0LCBhIHJlYWQgZnJvbSB0aGUgd3Jvbmcgb2Zmc2V0LiBUaGF0IHdvdWxkIGJlIG1lc3N5LiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGxheW91dCBvZiBgc3RydWN0IGluZXRfdGltZXdhaXRfc29ja2AgdmVyc3VzIGBzdHJ1Y3Qgc29ja2AganVzdCB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaD0yNj1zdHJ1Y3QgaW5ldF9iaW5kX2J1Y2tldDtcbi0tXG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaC0zMi0gKi9cbmluY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oOjMzOnN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sge1xuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgtMzQtXHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDIyNwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gZ3JhYiBgaW5ldF90aW1ld2FpdF9zb2NrLmhgIGFuZCBmb2N1cyBvbiBsaW5lcyAzMC03MC4gSSBrbm93IHRoaXMgaGVhZGVyIGZpbGUsIHNvIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgY29yZSBkZWZpbml0aW9ucyByZWxhdGVkIHRvIHRoZSBUQ1AgVElNRS1XQUlUIHN0YXRlIGZvciBJUHY0IGFuZCBJUHY2IHNvY2tldHMuIE15IGdvYWwgaGVyZSBpcyB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBwb3NzaWJseSBpZGVudGlmeSBhbnkgcmVsZXZhbnQgcGFyYW1ldGVycyBvciBtYWNyb3MgdGhhdCBtaWdodCBiZSBpbiBteSBjdXJyZW50IGxpbmUgb2YgdGhpbmtpbmcgb3IgcHJvYmxlbS1zb2x2aW5nIHRoYXQgSSBhbSBkb2luZy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgdGhlIGB0d19zb2NrYCBzdHJ1Y3R1cmUgaXRzZWxmLCBhbnkgcmVsYXRlZCBmbGFncywgb3IgZnVuY3Rpb25zIHRoYXQgb3BlcmF0ZSBvbiBUSU1FLVdBSVQgc29ja2V0cy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgdGhlIHRpbWVyIHN0cnVjdHVyZXMgdXNlZCBmb3IgdGhlIDJNU0wgdGltZW91dCBwZXJpb2QsIGFueSByZWZlcmVuY2VzIHRvIGNvbm5lY3Rpb24gc3RhdGUgdHJhbnNpdGlvbnMsIGFuZCBob3cgdGhlIGtlcm5lbCB0cmFja3MgdGhlc2Ugc29ja2V0cyBmb3IgY2xlYW51cC4gSeKAmWxsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHVudXN1YWwgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvciBvcHRpbWl6YXRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBvZiBUQ1AgY29ubmVjdGlvbnMsIHRvby4gVGltZSB0byBnZXQgc3RhcnRlZCBhbmQgZ2V0IHRob3NlIG1lbnRhbCBnZWFycyB0dXJuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzMDpcdCAqIHByb2JsZW1zIG9mIHNvY2tldHMgaW4gc3VjaCBhIHN0YXRlIG9uIGhlYXZpbHkgbG9hZGVkIHNlcnZlcnMsIGJ1dFxuICAzMTpcdCAqIHdpdGhvdXQgdmlvbGF0aW5nIHRoZSBwcm90b2NvbCBzcGVjaWZpY2F0aW9uLlxuICAzMjpcdCAqL1xuICAzMzpcdHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sge1xuICAzNDpcdFx0LypcbiAgMzU6XHRcdCAqIE5vdyBzdHJ1Y3Qgc29jayBhbHNvIHVzZXMgc29ja19jb21tb24sIHNvIHBsZWFzZSBqdXN0XG4gIDM2Olx0XHQgKiBkb24mIzM5O3QgYWRkIG5vdGhpbmcgYmVmb3JlIHRoaXMgZmlyc3QgbWVtYmVyIChfX3R3X2NvbW1vbikgLS1hY21lXG4gIDM3Olx0XHQgKi9cbiAgMzg6XHRcdHN0cnVjdCBzb2NrX2NvbW1vblx0X190d19jb21tb247XG4gIDM5Olx0I2RlZmluZSB0d19mYW1pbHlcdFx0X190d19jb21tb24uc2tjX2ZhbWlseVxuICA0MDpcdCNkZWZpbmUgdHdfc3RhdGVcdFx0X190d19jb21tb24uc2tjX3N0YXRlXG4gIDQxOlx0I2RlZmluZSB0d19yZXVzZVx0XHRfX3R3X2NvbW1vbi5za2NfcmV1c2VcbiAgNDI6XHQjZGVmaW5lIHR3X3JldXNlcG9ydFx0XHRfX3R3X2NvbW1vbi5za2NfcmV1c2Vwb3J0XG4gIDQzOlx0I2RlZmluZSB0d19pcHY2b25seVx0XHRfX3R3X2NvbW1vbi5za2NfaXB2Nm9ubHlcbiAgNDQ6XHQjZGVmaW5lIHR3X2JvdW5kX2Rldl9pZlx0XHRfX3R3X2NvbW1vbi5za2NfYm91bmRfZGV2X2lmXG4gIDQ1Olx0I2RlZmluZSB0d19ub2RlXHRcdFx0X190d19jb21tb24uc2tjX251bGxzX25vZGVcbiAgNDY6XHQjZGVmaW5lIHR3X2JpbmRfbm9kZVx0XHRfX3R3X2NvbW1vbi5za2NfYmluZF9ub2RlXG4gIDQ3Olx0I2RlZmluZSB0d19yZWZjbnRcdFx0X190d19jb21tb24uc2tjX3JlZmNudFxuICA0ODpcdCNkZWZpbmUgdHdfdHhfcXVldWVfbWFwcGluZ1x0X190d19jb21tb24uc2tjX3R4X3F1ZXVlX21hcHBpbmdcbiAgNDk6XHQjZGVmaW5lIHR3X3J4X3F1ZXVlX21hcHBpbmdcdF9fdHdfY29tbW9uLnNrY19yeF9xdWV1ZV9tYXBwaW5nXG4gIDUwOlx0I2RlZmluZSB0d19oYXNoXHRcdFx0X190d19jb21tb24uc2tjX2hhc2hcbiAgNTE6XHQjZGVmaW5lIHR3X3Byb3RcdFx0XHRfX3R3X2NvbW1vbi5za2NfcHJvdFxuICA1MjpcdCNkZWZpbmUgdHdfbmV0XHRcdFx0X190d19jb21tb24uc2tjX25ldFxuICA1MzpcdCNkZWZpbmUgdHdfZGFkZHIgICAgICAgIFx0X190d19jb21tb24uc2tjX2RhZGRyXG4gIDU0Olx0I2RlZmluZSB0d192Nl9kYWRkclx0XHRfX3R3X2NvbW1vbi5za2NfdjZfZGFkZHJcbiAgNTU6XHQjZGVmaW5lIHR3X3Jjdl9zYWRkciAgICBcdF9fdHdfY29tbW9uLnNrY19yY3Zfc2FkZHJcbiAgNTY6XHQjZGVmaW5lIHR3X3Y2X3Jjdl9zYWRkciAgICBcdF9fdHdfY29tbW9uLnNrY192Nl9yY3Zfc2FkZHJcbiAgNTc6XHQjZGVmaW5lIHR3X2Rwb3J0XHRcdF9fdHdfY29tbW9uLnNrY19kcG9ydFxuICA1ODpcdCNkZWZpbmUgdHdfbnVtXHRcdFx0X190d19jb21tb24uc2tjX251bVxuICA1OTpcdCNkZWZpbmUgdHdfY29va2llXHRcdF9fdHdfY29tbW9uLnNrY19jb29raWVcbiAgNjA6XHQjZGVmaW5lIHR3X2RyXHRcdFx0X190d19jb21tb24uc2tjX3R3X2RyXG4gIDYxOlx0XG4gIDYyOlx0XHRfX3UzMlx0XHRcdHR3X21hcms7XG4gIDYzOlx0XHR1bnNpZ25lZCBjaGFyXHRcdHR3X3N1YnN0YXRlO1xuICA2NDpcdFx0dW5zaWduZWQgY2hhclx0XHR0d19yY3Zfd3NjYWxlO1xuICA2NTpcdFxuICA2NjpcdFx0LyogU29ja2V0IGRlbXVsdGlwbGV4IGNvbXBhcmlzb25zIG9uIGluY29taW5nIHBhY2tldHMuICovXG4gIDY3Olx0XHQvKiB0aGVzZSB0aHJlZSBhcmUgaW4gaW5ldF9zb2NrICovXG4gIDY4Olx0XHRfX2JlMTZcdFx0XHR0d19zcG9ydDtcbiAgNjk6XHRcdC8qIEFuZCB0aGVzZSBhcmUgb3Vycy4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMDYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMga2VybmVsIGNvZGUgYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGEgZml4LiBJdCBzZWVtcyBsaWtlIHRoZSBpc3N1ZSBpcyByb290ZWQgaW4gaG93IGBzdHJ1Y3Qgc29ja2AgYW5kIGBpbmV0X3RpbWV3YWl0X3NvY2tgIGFyZSByZWxhdGVkLCBhbmQgc3BlY2lmaWNhbGx5LCBob3cgYHNrX3Byb3RvY29sYCBpcyBhY2Nlc3NlZC4gSSBzZWUgdGhhdCBgc2tfcHJvdG9jb2xgIHdpdGhpbiBgc3RydWN0IHNvY2tgIGlzIGxvY2F0ZWQgYXQgYW4gb2Zmc2V0IGFmdGVyIGBzb2NrX2NvbW1vbmAuIFRoZSBwcm9ibGVtLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRoYXQgd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgYHRpbWV3YWl0YCBzb2NrZXQsIHdoaWNoIHVzZXMgYGluZXRfdGltZXdhaXRfc29ja2AsIGFjY2Vzc2luZyBgc2stJmd0O3NrX3Byb3RvY29sYCBpbiBhIGZ1bmN0aW9uIGxpa2UgYGJwZl9zb2NrX2Rlc3Ryb3lgIGNvdWxkIGJlIHByb2JsZW1hdGljLiBFc3NlbnRpYWxseSwgd2Ugd2VyZSBwb3RlbnRpYWxseSByZWFkaW5nIGZyb20gYW4gaW5jb3JyZWN0IG1lbW9yeSBsb2NhdGlvbiBiZWNhdXNlIHRoZSBvZmZzZXQgZm9yIGBza19wcm90b2NvbGAgbWlnaHQgYmUgZGlmZmVyZW50IGluIHRoZSBgaW5ldF90aW1ld2FpdF9zb2NrYCBzdHJ1Y3R1cmUgKG9yIGV2ZW4gb3V0LW9mLWJvdW5kcyBpZiB0aGUgc3RydWN0dXJlIGlzIHNtYWxsZXIpLgoKVGhlIGZpeCBpbnZvbHZlcyBhZGRpbmcgYSBjaGVjazogYGlmIChza19mdWxsc29jayhzaykgJmFtcDsmYW1wOyBzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgJmFtcDsmYW1wOyBzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApYC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBza19mdWxsc29ja2Agd2lsbCByZXR1cm4gYGZhbHNlYCBpZiB0aGUgc29ja2V0IGlzbiYjMzk7dCBhICYjMzQ7ZnVsbHNvY2ssJiMzNDsgd2hpY2ggaW5jbHVkZXMgdGltZXdhaXQgc29ja2V0cywgc28gdGhhdCBpZiBpdCBpcyBhIHRpbWV3YWl0IHNvY2tldCB3ZSBkb24mIzM5O3QgYWNjZXNzIHNrX3Byb3RvY29sIGluIGJwZl9zb2NrX2Rlc3Ryb3kuIEFuZCwgaW4gdGhlIGNhc2Ugb2YgYSBmdWxsIHNvY2tldCwgd2Ugb25seSBwcm9jZWVkIGlmIHRoZSBwcm90b2NvbCBpc24mIzM5O3QgVENQIG9yIFVEUC4gSSB0aGluayB0aGlzIHByZXZlbnRzIHVzIGZyb20gYWNjaWRlbnRhbGx5IHJlYWRpbmcgZnJvbSBhbiBpbmNvcnJlY3QgbWVtb3J5IGxvY2F0aW9uIG9uIHRoZXNlIHNwZWNpYWxpemVkIGB0aW1ld2FpdGAgc29ja2V0cy4KCkkgYW0gYWxzbyBzZWVpbmcgdGhhdCB0aGUgYGluZXRfdHdza19kaWFnX2Rlc3Ryb3lgIGZ1bmN0aW9uIGlzIGxpbmtlZCB0byB2aWEgYHRjcF90d3NrX3Byb3QuZGlhZ19kZXN0cm95YCBvciBgdGNwX3Byb3QuZGlhZ19kZXN0cm95YC4gVGhpcyBtaWdodCBiZSByZWxhdGVkIHRvIHRoZSBvcmlnaW5hbCBpc3N1ZS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYHRjcF90d3NrX3Byb3RgIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTM6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfdHdza19wcm90JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5OTgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYHRjcF9wcm90YCBhbmQgYGRpYWdfZGVzdHJveWAqKgoKT2theSwgdGltZSB0byB0YWtlIGEgbG9vayBhdCBgdGNwX3Byb3RgIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBgZGlhZ19kZXN0cm95YC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gaG93IHdlIGhhbmRsZSB0ZWFyZG93biBhbmQgY2xlYW51cCBvZiBUQ1AgcHJvdG9jb2wtc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGR1cmluZyB0aGUgZGlhZ25vc3RpYyBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGNvbXBvbmVudHMgaW50ZXJhY3QsIHNwZWNpZmljYWxseSB0byBlbnN1cmUgcHJvcGVyIHJlc291cmNlIGRlYWxsb2NhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgY29kZSBwYXRoLCBwcm9iYWJseSBzdGFydGluZyB3aXRoIHdoZXJlIGB0Y3BfcHJvdGAgaXMgaW5pdGlhbGl6ZWQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBkaWFnbm9zdGljIGZyYW1ld29yay4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgbWVtb3J5IGxlYWtzLCBvciBhbnkgb3RoZXIgaXNzdWVzIHRoYXQgY291bGQgYXJpc2Ugd2hlbiBkaWFnbm9zdGljcyBhcmUgZW5hYmxlZCBhbmQgZGlzYWJsZWQsIGFuZCBjb25uZWN0aW9ucyBhcmUgZXN0YWJsaXNoZWQgYW5kIHRvcm4gZG93bi4gRXNzZW50aWFsbHksIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB3ZSYjMzk7cmUgcHJvcGVybHkgY2xlYW5pbmcgdXAgYWZ0ZXIgb3Vyc2VsdmVzIHdoZW4gZGlhZ25vc3RpY3MgYXJlIGludm9sdmVkIHdpdGggdGhlIFRDUCBwcm90b2NvbC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTM6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFwuZGlhZ19kZXN0cm95JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9yYXcuYz05NDg9c3RydWN0IHByb3RvIHJhd19wcm90ID0ge1xuLS1cbm5ldC9pcHY0L3Jhdy5jLTk3Mi0jZW5kaWZcbm5ldC9pcHY0L3Jhdy5jOjk3MzpcdC5kaWFnX2Rlc3Ryb3lcdCAgID0gcmF3X2Fib3J0LFxubmV0L2lwdjQvcmF3LmMtOTc0LX07XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz0zMzQ4PXN0cnVjdCBwcm90byB0Y3BfcHJvdCA9IHtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTMzOTYtXHQubm9fYXV0b2JpbmRcdFx0PSB0cnVlLFxubmV0L2lwdjQvdGNwX2lwdjQuYzozMzk3Olx0LmRpYWdfZGVzdHJveVx0XHQ9IHRjcF9hYm9ydCxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM5OC19O1xuLS1cbm5ldC9pcHY0L3VkcC5jPTMxNDM9c3RydWN0IHByb3RvIHVkcF9wcm90ID0ge1xuLS1cbm5ldC9pcHY0L3VkcC5jLTMxNzMtXHQub2JqX3NpemVcdFx0PSBzaXplb2Yoc3RydWN0IHVkcF9zb2NrKSxcbm5ldC9pcHY0L3VkcC5jOjMxNzQ6XHQuZGlhZ19kZXN0cm95XHRcdD0gdWRwX2Fib3J0LFxubmV0L2lwdjQvdWRwLmMtMzE3NS19O1xuLS1cbm5ldC9pcHY2L3Jhdy5jPTEyMDc9c3RydWN0IHByb3RvIHJhd3Y2X3Byb3QgPSB7XG4tLVxubmV0L2lwdjYvcmF3LmMtMTIzMS0jZW5kaWZcbm5ldC9pcHY2L3Jhdy5jOjEyMzI6XHQuZGlhZ19kZXN0cm95XHQgICA9IHJhd19hYm9ydCxcbm5ldC9pcHY2L3Jhdy5jLTEyMzMtfTtcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jPTIyNzY9c3RydWN0IHByb3RvIHRjcHY2X3Byb3QgPSB7XG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzI1LVx0Lm5vX2F1dG9iaW5kXHRcdD0gdHJ1ZSxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MjMyNjpcdC5kaWFnX2Rlc3Ryb3lcdFx0PSB0Y3BfYWJvcnQsXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIzMjctfTtcbi0tXG5uZXQvaXB2Ni91ZHAuYz0xOTA4PXN0cnVjdCBwcm90byB1ZHB2Nl9wcm90ID0ge1xuLS1cbm5ldC9pcHY2L3VkcC5jLTE5NDAtXHQuaXB2Nl9waW5mb19vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdWRwNl9zb2NrLCBpbmV0NiksXG5uZXQvaXB2Ni91ZHAuYzoxOTQxOlx0LmRpYWdfZGVzdHJveVx0XHQ9IHVkcF9hYm9ydCxcbm5ldC9pcHY2L3VkcC5jLTE5NDItfTtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIxNDY9dm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd19pbml0KHZvaWQpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTY2LVx0dGNwX3Byb3Rfb3ZlcnJpZGUucmVsZWFzZV9jYiA9IHRjcF9yZWxlYXNlX2NiX292ZXJyaWRlO1xubmV0L21wdGNwL3N1YmZsb3cuYzoyMTY3Olx0dGNwX3Byb3Rfb3ZlcnJpZGUuZGlhZ19kZXN0cm95ID0gdGNwX2Fib3J0X292ZXJyaWRlO1xubmV0L21wdGNwL3N1YmZsb3cuYy0yMTY4LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIxODA9dm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd192Nl9pbml0KHZvaWQpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0yMjEzLVx0dGNwdjZfcHJvdF9vdmVycmlkZS5yZWxlYXNlX2NiID0gdGNwX3JlbGVhc2VfY2Jfb3ZlcnJpZGU7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIyMTQ6XHR0Y3B2Nl9wcm90X292ZXJyaWRlLmRpYWdfZGVzdHJveSA9IHRjcF9hYm9ydF9vdmVycmlkZTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjIxNS0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTA1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipBbmFseXppbmcgYHRjcF9hYm9ydGAmIzM5O3MgU2NvcGUqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYHRjcF9hYm9ydGAgaGVyZS4gTGV0JiMzOTtzIHNlZS4uLiBhIHF1aWNrIG1lbnRhbCBzY2FuIHJlbWluZHMgbWUgdGhhdCBpdCYjMzk7cyBub3QgKmp1c3QqIGZvciBhYnJ1cHRseSB0ZWFyaW5nIGRvd24gZXN0YWJsaXNoZWQgVENQIGNvbm5lY3Rpb25zLiBJIHNlZW0gdG8gcmVjYWxsIGl0IGFsc28gaGFzIGEgaGFuZCBpbiBkZWFsaW5nIHdpdGggc29ja2V0cyBpbiB0aGUgYFRJTUVfV0FJVGAgc3RhdGUsIHdoaWNoIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0JiMzOTtzIGEgY3JpdGljYWwgc3RhdGUgdG8gcHJvcGVybHkgaGFuZGxlLiBZZXAsIHRoZSBjb2RlIGNvbmZpcm1zIGl0OiBpdCBleHBsaWNpdGx5IGNoZWNrcyBmb3IgYHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUYCwgYW5kIGlmIHRoYXQmIzM5O3MgdGhlIGNhc2UgaXQgY2FsbHMgcmVsZXZhbnQgZnVuY3Rpb25zIHN1Y2ggYXMgYGluZXRfdHdza19kZXNjaGVkdWxlX3B1dGAuIFRoaXMgaW5kaWNhdGVzIGEgYnJvYWRlciBmdW5jdGlvbmFsaXR5IHRoYW4gdGhlIG5hbWUgbWlnaHQgc3VnZ2VzdC4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIGxpbmdlcmluZyByZXNvdXJjZXMgYW5kIHRoZSBuZWVkIGZvciBjbGVhbnVwLiBUaW1lIHRvIGRpdmUgZGVlcGVyIGFuZCBzZWUgaG93IGl0IGFsbCB3b3Jrcy4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgZm9yIGB0Y3BfYWJvcnRgIGRpcmVjdGx5IG5vdyB0byBiZSBzdXJlIG9mIG15IHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB0Y3BfYWJvcnRcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmM9NTA4OT12b2lkIHRjcF9kb25lKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3AuYy01MTE0LVxubmV0L2lwdjQvdGNwLmM6NTExNTppbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycilcbm5ldC9pcHY0L3RjcC5jLTUxMTYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUwNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHRjcC5jYCoqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbi4gTXkgaW50ZXJuYWwgcmFkYXIganVzdCBwaW5nZWQgb24gYHRjcC5jYC4gU29tZXRoaW5nJiMzOTtzIHByb2JhYmx5IGhhcHBlbmluZyBhcm91bmQgbGluZSA1MTE1IHRoYXQgd2FycmFudHMgYSBjbG9zZXIgbG9vay4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB0aGVyZSBhbmQgc2VlIHdoYXQganVtcHMgb3V0LiBJIGhhdmUgYSBmZWVsaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpcyBnb2luZyBvbiBpbiB0aGUgVENQIGltcGxlbWVudGF0aW9uIGFuZCBsaW5lIDUxMTUgZmVlbHMgbGlrZSBhIGdvb2Qgc3BvdCB0byBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgaGFzIHRvIG9mZmVyLiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSByZWxldmFudCBmdW5jdGlvbiBvciBibG9jayBhbmQgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgVENQIGNvbnRleHQuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEzOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUxMTU6XHRpbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycilcbjUxMTY6XHR7XG41MTE3Olx0XHRpbnQgc3RhdGUgPSBpbmV0X3NrX3N0YXRlX2xvYWQoc2spO1xuNTExODpcdFxuNTExOTpcdFx0aWYgKHN0YXRlID09IFRDUF9ORVdfU1lOX1JFQ1YpIHtcbjUxMjA6XHRcdFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxID0gaW5ldF9yZXFzayhzayk7XG41MTIxOlx0XG41MTIyOlx0XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbjUxMjM6XHRcdFx0aW5ldF9jc2tfcmVxc2tfcXVldWVfZHJvcChyZXEtXHUwMDNlcnNrX2xpc3RlbmVyLCByZXEpO1xuNTEyNDpcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbjUxMjU6XHRcdFx0cmV0dXJuIDA7XG41MTI2Olx0XHR9XG41MTI3Olx0XHRpZiAoc3RhdGUgPT0gVENQX1RJTUVfV0FJVCkge1xuNTEyODpcdFx0XHRzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dyA9IGluZXRfdHdzayhzayk7XG41MTI5Olx0XG41MTMwOlx0XHRcdHJlZmNvdW50X2luYyhcdTAwMjZ0dy1cdTAwM2V0d19yZWZjbnQpO1xuNTEzMTpcdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG41MTMyOlx0XHRcdGluZXRfdHdza19kZXNjaGVkdWxlX3B1dCh0dyk7XG41MTMzOlx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuNTEzNDpcdFx0XHRyZXR1cm4gMDtcbjUxMzU6XHRcdH1cbjUxMzY6XHRcbjUxMzc6XHRcdC8qIEJQRiBjb250ZXh0IGVuc3VyZXMgc29jayBsb2NraW5nLiAqL1xuNTEzODpcdFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXG41MTM5Olx0XHRcdC8qIERvbiYjMzk7dCByYWNlIHdpdGggdXNlcnNwYWNlIHNvY2tldCBjbG9zZXMgc3VjaCBhcyB0Y3BfY2xvc2UuICovXG41MTQwOlx0XHRcdGxvY2tfc29jayhzayk7XG41MTQxOlx0XG41MTQyOlx0XHQvKiBBdm9pZCBjbG9zaW5nIHRoZSBzYW1lIHNvY2tldCB0d2ljZS4gKi9cbjUxNDM6XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHtcbjUxNDQ6XHRcdFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXG41MTQ1Olx0XHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbjUxNDY6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG41MTQ3Olx0XHR9XG41MTQ4Olx0XG41MTQ5Olx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTikge1xuNTE1MDpcdFx0XHR0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpO1xuNTE1MTpcdFx0XHRpbmV0X2Nza19saXN0ZW5fc3RvcChzayk7XG41MTUyOlx0XHR9XG41MTUzOlx0XG41MTU0Olx0XHQvKiBEb24mIzM5O3QgcmFjZSB3aXRoIEJIIHNvY2tldCBjbG9zZXMgc3VjaCBhcyBpbmV0X2Nza19saXN0ZW5fc3RvcC4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzMTAKCQkJCQkJCW91dHB1dDogMjA0CgkJCQkJCQl0aG91Z2h0czogODQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzIGFuZCBTYWZldHkgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgZm9jdXNlcyBvbiBtZW1vcnkgc2FmZXR5IGFuZCwgc3BlY2lmaWNhbGx5LCB3aGV0aGVyIGl0IGludHJvZHVjZXMgYW55IG5ldyBLTVNBTiBjb25jZXJucy4gRmlyc3QsIEkmIzM5O20gbm90aW5nIHRoZSBjb3JlIGNoYW5nZXM6IGBicGZfc29ja19kZXN0cm95YCBoYXMgYmVlbiB1cGRhdGVkIHRvIGhhbmRsZSBub24tZnVsbCBzb2NrZXRzIG1vcmUgZ3JhY2VmdWxseS4gSXQgYXZvaWRzIHRoZSBwcm9ibGVtYXRpYyBgc2stJmd0O3NrX3Byb3RvY29sYCBhY2Nlc3Mgb24gc29ja2V0cyBsaWtlIGBpbmV0X3RpbWV3YWl0X3NvY2tgIHdpdGggYSBjaGVjayB1c2luZyBgc2tfZnVsbHNvY2soKWAuIFRoaXMgaXMgZ29vZCwgYXMgaXQgcHJldmVudHMgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLiBJdCBhbHNvIGFsbG93cyB0aGUgZGlyZWN0IGNhbGwgdG8gYHNrLSZndDtza19wcm90LSZndDtkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7YC4gVGhlbiwgYGluZXRfY3NrX2xpc3Rlbl9zdG9wYCBoYXMgYmVlbiBhZGp1c3RlZCB0byBhdm9pZCBgY29uZF9yZXNjaGVkKClgIHdoZW4gcnVubmluZyB3aXRoaW4gYSBCUEYgY29udGV4dCwgd2hpY2ggaXMgYSBzZW5zaWJsZSBwcmVjYXV0aW9uIGZvciBhdG9taWMgb3IgUkNVIGNvbnRleHRzLiBGaW5hbGx5LCB0aGVyZSBhcmUgYWRkZWQgc2VsZnRlc3RzLCB3aGljaCwgb2YgY291cnNlLCBhcmUgYWx3YXlzIHdlbGNvbWUuCgpOb3csIHJlZ2FyZGluZyBtZW1vcnkgc2FmZXR5LCBJJiMzOTttIG5vdCBzZWVpbmcgYW55IHJlZCBmbGFncy4gVGhlcmUgYXJlbiYjMzk7dCBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvbiB0aGUgaGVhcCBvciBzdGFjay4gTm8gb3BlcmF0aW9ucyB3aXRoIHVzZXJzcGFjZSAoY29weWluZywgZXRjKS4gSSYjMzk7bSBub3QgZmluZGluZyBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMsIG9yIGNvZGUgdGhhdCB1c2VzIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbmRpdGlvbmFsIGxvZ2ljLiBJbiBmYWN0LCB0aGlzIHBhdGNoICppbXByb3ZlcyogbWVtb3J5IHNhZmV0eSBieSBndWFyZGluZyBhZ2FpbnN0IHRoZSBwb3RlbnRpYWwgZm9yIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvZiBgc2stJmd0O3NrX3Byb3RvY29sYCBpbiB0aGUgY2FzZSBvZiBub24tZnVsbCBzb2NrZXRzLCB3aGljaCBpcyBncmVhdC4gVGhlIGZpeCBmb3IgYGNvbmRfcmVzY2hlZCgpYCBhdm9pZHMgYXRvbWljIGNvbnRleHQgaXNzdWVzLiBJdCBhcHBlYXJzIHNvdW5kLgoKSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoZSBmb3VyIEtNU0FOIGNyaXRlcmlhOgoxLiBObyBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLgoyLiBObyBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4KMy4gTm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSB1c2VkLgo0LiBObyBib3VuZHMgY2hlY2tzIHRoYXQgbWlnaHQgYWxsb3cgcmVhZGluZyBiZXlvbmQgYnVmZmVyIGJvdW5kYXJpZXMuClRoZXJlZm9yZSwgS01TQU4gaXNuJiMzOTt0IGEgY29uY2VybiBoZXJlLgoKVG8gc3VtbWFyaXplLCB0aGlzIHBhdGNoIGltcHJvdmVzIHNhZmV0eSBieSBjb3JyZWN0bHkgbWFuYWdpbmcgc29ja2V0IGRlc3RydWN0aW9uIGFuZCBzY2hlZHVsaW5nIHdpdGhpbiBCUEYgY29udGV4dHMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IEtNU0FOLXJlbGF0ZWQgaXNzdWVzLiBUaGUgZXhpc3RpbmcgS0FTQU4sIExPQ0tERVAsIGFuZCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyB3aWxsIGNhdGNoIG90aGVyIHBvdGVudGlhbCBpc3N1ZXMgKGUuZy4sIFVBRiwgcmVmZXJlbmNlIGNvdW50aW5nLCBsb2NraW5nKS4KClRoaXMgc2hvdWxkIGluZm9ybSBhIGBzZXQtcmVzdWx0c2AgdG9vbCBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYnBmX3NvY2tfZGVzdHJveSgpYCB0byBzdXBwb3J0IG5vbi1mdWxsIHNvY2tldHMgKGUuZy4sIFRDUCBUSU1FX1dBSVQgc29ja2V0cykgYnkgZ3VhcmRpbmcgdGhlIGBzay1cdTAwM2Vza19wcm90b2NvbGAgY2hlY2sgd2l0aCBgc2tfZnVsbHNvY2soKWAsIGFuZCB1cGRhdGVzIGBpbmV0X2Nza19saXN0ZW5fc3RvcCgpYCB0byBieXBhc3MgYGNvbmRfcmVzY2hlZCgpYCB3aGVuIHJ1bm5pbmcgd2l0aGluIGEgQlBGIGV4ZWN1dGlvbiBjb250ZXh0IHRvIHByZXZlbnQgc2xlZXBpbmcgaW4gYXRvbWljL1JDVSBjb250ZXh0cy5cblxuVGhlc2UgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBjb3B5LXRvLXVzZXIgb3BlcmF0aW9ucywgb3IgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBwb3RlbnRpYWwgcmlza3MgcmVsYXRlZCB0byBzb2NrZXQgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgZXhlY3V0aW9uIGNvbnRleHQgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyBhbmQgZGVidWdnZXJzIChLQVNBTiBmb3IgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcywgTE9DS0RFUCAvIERFQlVHX0FUT01JQ19TTEVFUCBmb3Igc2xlZXBpbmcgaW4gYXRvbWljIGNvbnRleHQpLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfc29ja19kZXN0cm95KClgIHRvIHN1cHBvcnQgbm9uLWZ1bGwgc29ja2V0cyAoZS5nLiwgVENQIFRJTUVfV0FJVCBzb2NrZXRzKSBieSBndWFyZGluZyB0aGUgYHNrLVx1MDAzZXNrX3Byb3RvY29sYCBjaGVjayB3aXRoIGBza19mdWxsc29jaygpYCwgYW5kIHVwZGF0ZXMgYGluZXRfY3NrX2xpc3Rlbl9zdG9wKClgIHRvIGJ5cGFzcyBgY29uZF9yZXNjaGVkKClgIHdoZW4gcnVubmluZyB3aXRoaW4gYSBCUEYgZXhlY3V0aW9uIGNvbnRleHQgdG8gcHJldmVudCBzbGVlcGluZyBpbiBhdG9taWMvUkNVIGNvbnRleHRzLlxuXG5UaGVzZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IGNvcHktdG8tdXNlciBvcGVyYXRpb25zLCBvciBpbnRyb2R1Y2UgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQW55IHBvdGVudGlhbCByaXNrcyByZWxhdGVkIHRvIHNvY2tldCBsaWZldGltZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBleGVjdXRpb24gY29udGV4dCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCBkZWJ1Z2dlcnMgKEtBU0FOIGZvciB1c2UtYWZ0ZXItZnJlZS9vdXQtb2YtYm91bmRzLCBMT0NLREVQIC8gREVCVUdfQVRPTUlDX1NMRUVQIGZvciBzbGVlcGluZyBpbiBhdG9taWMgY29udGV4dCkuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMzoyMDo1MS4zOTQzNzkzNzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDQyMjMxMjAwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc29ja19kZXN0cm95XCIsXG4gICAgXCJpbmV0X2Nza19saXN0ZW5fc3RvcFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9zb2NrX2Rlc3Ryb3koKWAgdG8gc3VwcG9ydCBub24tZnVsbCBzb2NrZXRzIChlLmcuLCBUQ1AgVElNRV9XQUlUIHNvY2tldHMpIGJ5IGd1YXJkaW5nIHRoZSBgc2stXFx1MDAzZXNrX3Byb3RvY29sYCBjaGVjayB3aXRoIGBza19mdWxsc29jaygpYCwgYW5kIHVwZGF0ZXMgYGluZXRfY3NrX2xpc3Rlbl9zdG9wKClgIHRvIGJ5cGFzcyBgY29uZF9yZXNjaGVkKClgIHdoZW4gcnVubmluZyB3aXRoaW4gYSBCUEYgZXhlY3V0aW9uIGNvbnRleHQgdG8gcHJldmVudCBzbGVlcGluZyBpbiBhdG9taWMvUkNVIGNvbnRleHRzLlxcblxcblRoZXNlIGNoYW5nZXMgZG8gbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgY29weS10by11c2VyIG9wZXJhdGlvbnMsIG9yIGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBBbnkgcG90ZW50aWFsIHJpc2tzIHJlbGF0ZWQgdG8gc29ja2V0IGxpZmV0aW1lLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIGV4ZWN1dGlvbiBjb250ZXh0IGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgYW5kIGRlYnVnZ2VycyAoS0FTQU4gZm9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMsIExPQ0tERVAgLyBERUJVR19BVE9NSUNfU0xFRVAgZm9yIHNsZWVwaW5nIGluIGF0b21pYyBjb250ZXh0KS4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJwZl9zb2NrX2Rlc3Ryb3koKSBCUEYga2Z1bmMgdG8gcGVybWl0IGRlc3Ryb3lpbmcgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIHNvY2tldHMpIHRoYXQgaW1wbGVtZW50IGRpYWdfZGVzdHJveSwgYW5kIGFkanVzdHMgaW5ldF9jc2tfbGlzdGVuX3N0b3AoKSB0byBhdm9pZCBjYWxsaW5nIGNvbmRfcmVzY2hlZCgpIHdoaWxlIGV4ZWN1dGluZyBpbiBhIEJQRiBjb250ZXh0LiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIEJQRiBzb2NrZXQgaXRlcmF0aW9uL2Rlc3RydWN0aW9uIHBhdGhzIHRoYXQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMzoyMDo1MS4zOTQzODQwMjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1ODE2NDkzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM4OGQ5NTU4ODEzYWY2NDhmZjk0MmM2N2FmZTFiNjVkZDFjYmNkNTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMTAgMTM6MjA6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IDg1MTMxNjdhODU4YTguLmQ5YzRhMTA4ZGRiNWUgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xcbkBAIC0xMjkxMSw4ICsxMjkxMSw5IEBAIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG4gICogQHNvY2s6IFBvaW50ZXIgdG8gc29ja2V0IHRvIGJlIGRlc3Ryb3llZFxcbiAgKlxcbiAgKiBSZXR1cm46XFxuLSAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVQUk9UT05PU1VQUE9SVCwgRUlOVkFMLlxcbi0gKiBFUFJPVE9OT1NVUFBPUlQgaWYgcHJvdG9jb2wgc3BlY2lmaWMgZGVzdHJveSBoYW5kbGVyIGlzIG5vdCBzdXBwb3J0ZWQuXFxuKyAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIG9yIHdoYXRldmVyIHRoZSBwcm90b2NvbCBzcGVjaWZpY1xcbisgKiBkZXN0cm95IGhhbmRsZXIgcmV0dXJucy5cXG4rICogRU9QTk9UU1VQUCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC5cXG4gICogMCBvdGhlcndpc2VcXG4gICovXFxuIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaylcXG5AQCAtMTI5MjQsOCArMTI5MjUsMTIgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxcbiBcXHQgKiBTdXBwb3J0aW5nIHByb3RvY29scyB3aWxsIG5lZWQgdG8gYWNxdWlyZSBzb2NrIGxvY2sgaW4gdGhlIEJQRiBjb250ZXh0XFxuIFxcdCAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuXFxuIFxcdCAqL1xcbi1cXHRpZiAoIXNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VkaWFnX2Rlc3Ryb3kgfHwgKHNrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHRcXHRcXHQgICBzay1cXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApKVxcbitcXHRpZiAoIXNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VkaWFnX2Rlc3Ryb3kpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGlmIChza19mdWxsc29jayhzaykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHNrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2stXFx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbiBcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcXG5pbmRleCA2MjU3NDU5YmNlZTI0Li42YTMwZjExMzg0NTQ3IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcXG4rKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXFxuQEAgLTE1MjAsNyArMTUyMCw4IEBAIHZvaWQgaW5ldF9jc2tfbGlzdGVuX3N0b3Aoc3RydWN0IHNvY2sgKnNrKVxcbiBcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gXFx0XFx0c29ja19wdXQoY2hpbGQpO1xcbiBcXG4tXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuK1xcdFxcdGlmICghaGFzX2N1cnJlbnRfYnBmX2N0eCgpKVxcbitcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gXFx0fVxcbiBcXHRpZiAocXVldWUtXFx1MDAzZWZhc3RvcGVucS5yc2txX3JzdF9oZWFkKSB7XFxuIFxcdFxcdC8qIEZyZWUgYWxsIHRoZSByZXFzIHF1ZXVlZCBpbiByc2txX3JzdF9oZWFkLiAqL1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXFxuaW5kZXggOWMxMTkzOGZlNTk3ZC4uNzhkNjQyYTAyYmRiNiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXFxuQEAgLTEsNCArMSw1IEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2Nwb2xsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2VuZGlhbi5oXFx1MDAzZVxcbiBcXG5AQCAtMTEwLDYgKzExMSwxMjIgQEAgc3RhdGljIHZvaWQgdGVzdF90Y3Bfc2VydmVyKHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcXG4gXFx0XFx0Y2xvc2Uoc2Vydik7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHRlc3RfdGNwX2xpc3Rlbl9wZW5kaW5nKHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcXG4re1xcbitcXHRpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBhY2NlcHRfc2VydiA9IC0xLCBuLCBzZXJ2X3BvcnQ7XFxuK1xcdHN0cnVjdCBwb2xsZmQgcGZkID0geyAuZXZlbnRzID0gUE9MTElOIH07XFxuK1xcdGNoYXIgYnVmWzFdO1xcbitcXG4rXFx0c2VydiA9IHN0YXJ0X3NlcnZlcihBRl9JTkVUNiwgU09DS19TVFJFQU0sIE5VTEwsIDAsIDApO1xcbitcXHRpZiAoIUFTU0VSVF9HRShzZXJ2LCAwLCBcXFwic3RhcnRfc2VydmVyXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0c2Vydl9wb3J0ID0gZ2V0X3NvY2tldF9sb2NhbF9wb3J0KHNlcnYpO1xcbitcXHRpZiAoIUFTU0VSVF9HRShzZXJ2X3BvcnQsIDAsIFxcXCJnZXRfc29ja19sb2NhbF9wb3J0XFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VzZXJ2X3BvcnQgPSAoX19iZTE2KXNlcnZfcG9ydDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIENvbm5lY3QgYnV0IG5ldmVyIGFjY2VwdCwgc28gdGhlIGNoaWxkIHNpdHMgaW4gdGhlIGFjY2VwdCBxdWV1ZVxcbitcXHQgKiBvZiB0aGUgbGlzdGVuZXIuIFdhaXQgdW50aWwgaXQncyBhY3R1YWxseSB0aGVyZS5cXG4rXFx0ICovXFxuK1xcdGNsaWVuID0gY29ubmVjdF90b19mZChzZXJ2LCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UoY2xpZW4sIDAsIFxcXCJjb25uZWN0X3RvX2ZkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0cGZkLmZkID0gc2VydjtcXG4rXFx0aWYgKCFBU1NFUlRfRVEocG9sbChcXHUwMDI2cGZkLCAxLCAtMSksIDEsIFxcXCJwb2xsIGxpc3RlbmVyXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIFJ1biBpdGVyYXRvciBwcm9ncmFtIHRoYXQgZGVzdHJveXMgc2VydmVyIHNvY2tldHMuICovXFxuK1xcdHN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLVxcdTAwM2Vwcm9ncy5pdGVyX3RjcDZfc2VydmVyKTtcXG4rXFxuK1xcdGFjY2VwdF9zZXJ2ID0gYWNjZXB0KHNlcnYsIE5VTEwsIE5VTEwpO1xcbitcXHRpZiAoIUFTU0VSVF9MVChhY2NlcHRfc2VydiwgMCwgXFxcImFjY2VwdCBvbiBkZXN0cm95ZWQgbGlzdGVuZXJcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRBU1NFUlRfRVEoZXJybm8sIEVJTlZBTCwgXFxcImVycm9yIGNvZGUgb24gZGVzdHJveWVkIGxpc3RlbmVyXFxcIik7XFxuK1xcbitcXHQvKiBUaGUgdW5hY2NlcHRlZCBjaGlsZCB3YXMgcmVzZXQgYWxvbmcgd2l0aCB0aGUgbGlzdGVuZXIuICovXFxuK1xcdG4gPSByZWN2KGNsaWVuLCBidWYsIHNpemVvZihidWYpLCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfTFQobiwgMCwgXFxcImNsaWVudCByZWN2IG9uIHJlc2V0IGNoaWxkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0QVNTRVJUX0VRKGVycm5vLCBFQ09OTlJFU0VULCBcXFwiZXJyb3IgY29kZSBvbiByZXNldCBjaGlsZFxcXCIpO1xcbitcXG4rY2xlYW51cDpcXG4rXFx0aWYgKGNsaWVuICE9IC0xKVxcbitcXHRcXHRjbG9zZShjbGllbik7XFxuK1xcdGlmIChhY2NlcHRfc2VydiAhPSAtMSlcXG4rXFx0XFx0Y2xvc2UoYWNjZXB0X3NlcnYpO1xcbitcXHRpZiAoc2VydiAhPSAtMSlcXG4rXFx0XFx0Y2xvc2Uoc2Vydik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3RfdGNwX3RpbWV3YWl0KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcXG4re1xcbitcXHRpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBhY2NlcHRfc2VydiA9IC0xLCBuO1xcbitcXHRzdHJ1Y3QgdGltZXZhbCB0diA9IHt9O1xcbitcXHRjaGFyIGJ1ZlsxXTtcXG4rXFxuK1xcdHNlcnYgPSBzdGFydF9zZXJ2ZXIoQUZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBOVUxMLCAwLCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0Uoc2VydiwgMCwgXFxcInN0YXJ0X3NlcnZlclxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRjbGllbiA9IGNvbm5lY3RfdG9fZmQoc2VydiwgMCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKGNsaWVuLCAwLCBcXFwiY29ubmVjdF90b19mZFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRhY2NlcHRfc2VydiA9IGFjY2VwdChzZXJ2LCBOVUxMLCBOVUxMKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UoYWNjZXB0X3NlcnYsIDAsIFxcXCJzZXJ2IGFjY2VwdFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBY3RpdmUgY2xvc2UgZnJvbSB0aGUgY2xpZW50LCB0aGVuIGNsb3NlIHRoZSBzZXJ2ZXIgc2lkZS4gT25jZVxcbitcXHQgKiByZWN2KCkgc2VlcyBFT0YgdGhlIHNlcnZlciBGSU4gaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCB0aGUgY2xpZW50XFxuK1xcdCAqIHNvY2sgaXMgaW4gVElNRV9XQUlULiBCbG9jayB3aXRob3V0IHRpbWVvdXQgc28gYSBsb2FkZWQgQ0kgYm94XFxuK1xcdCAqIGNhbid0IHJhY2UgdXMuXFxuK1xcdCAqL1xcbitcXHRpZiAoIUFTU0VSVF9PSyhzZXRzb2Nrb3B0KGNsaWVuLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgXFx1MDAyNnR2LFxcbitcXHRcXHRcXHRcXHQgIHNpemVvZih0dikpLCBcXFwiY2xlYXIgcmN2dGltZW9cXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhzaHV0ZG93bihjbGllbiwgU0hVVF9XUiksIFxcXCJjbGllbnQgc2h1dGRvd25cXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTWFrZSBzdXJlIHRoZSBzZXJ2ZXIgaGFzIHNlZW4gdGhlIGNsaWVudCBGSU4gYmVmb3JlIGl0IGNsb3NlcyxcXG4rXFx0ICogc28gdGhlIHR3byBGSU5zIG5ldmVyIGNyb3NzLlxcbitcXHQgKi9cXG4rXFx0biA9IHJlY3YoYWNjZXB0X3NlcnYsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xcbitcXHRpZiAoIUFTU0VSVF9FUShuLCAwLCBcXFwic2VydmVyIHJlY3YgRU9GXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGNsb3NlKGFjY2VwdF9zZXJ2KTtcXG4rXFx0YWNjZXB0X3NlcnYgPSAtMTtcXG4rXFxuK1xcdC8qIGJsb2NrIHVudGlsIHJldHVybiBFT0YgKi9cXG4rXFx0biA9IHJlY3YoY2xpZW4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xcbitcXHRpZiAoIUFTU0VSVF9FUShuLCAwLCBcXFwiY2xpZW50IHJlY3YgRU9GXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIFJ1biBpdGVyYXRvciBwcm9ncmFtIHRoYXQgZGVzdHJveXMgdGhlIHRpbWV3YWl0IGNsaWVudCBzb2NrLiAqL1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXR3X2ZvdW5kID0gMDtcXG4rXFx0c3RhcnRfaXRlcl9zb2NrZXRzKHNrZWwtXFx1MDAzZXByb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7XFxuK1xcdGlmICghQVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldHdfZm91bmQsIDEsIFxcXCJ0aW1ld2FpdCBzb2NrIGZvdW5kXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdEFTU0VSVF9PSyhza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXR3X2Rlc3Ryb3lfZXJyLCBcXFwiZGVzdHJveSB0aW1ld2FpdCBzb2NrXFxcIik7XFxuK1xcbitcXHQvKiBUaGUgZGVzdHJveWVkIHRpbWV3YWl0IHNvY2sgbXVzdCBiZSBnb25lLiAqL1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXR3X2ZvdW5kID0gMDtcXG4rXFx0c3RhcnRfaXRlcl9zb2NrZXRzKHNrZWwtXFx1MDAzZXByb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXR3X2ZvdW5kLCAwLCBcXFwidGltZXdhaXQgc29jayBkZXN0cm95ZWRcXFwiKTtcXG4rXFxuK2NsZWFudXA6XFxuK1xcdGlmIChjbGllbiAhPSAtMSlcXG4rXFx0XFx0Y2xvc2UoY2xpZW4pO1xcbitcXHRpZiAoYWNjZXB0X3NlcnYgIT0gLTEpXFxuK1xcdFxcdGNsb3NlKGFjY2VwdF9zZXJ2KTtcXG4rXFx0aWYgKHNlcnYgIT0gLTEpXFxuK1xcdFxcdGNsb3NlKHNlcnYpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCB0ZXN0X3VkcF9jbGllbnQoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxcbiB7XFxuIFxcdGludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIG4gPSAwO1xcbkBAIC0yMDQsNiArMzIxLDEwIEBAIHZvaWQgdGVzdF9zb2NrX2Rlc3Ryb3kodm9pZClcXG4gXFx0XFx0dGVzdF90Y3BfY2xpZW50KHNrZWwpO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwidGNwX3NlcnZlclxcXCIpKVxcbiBcXHRcXHR0ZXN0X3RjcF9zZXJ2ZXIoc2tlbCk7XFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJ0Y3BfbGlzdGVuX3BlbmRpbmdcXFwiKSlcXG4rXFx0XFx0dGVzdF90Y3BfbGlzdGVuX3BlbmRpbmcoc2tlbCk7XFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJ0Y3BfdGltZXdhaXRcXFwiKSlcXG4rXFx0XFx0dGVzdF90Y3BfdGltZXdhaXQoc2tlbCk7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJ1ZHBfY2xpZW50XFxcIikpXFxuIFxcdFxcdHRlc3RfdWRwX2NsaWVudChza2VsKTtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInVkcF9zZXJ2ZXJcXFwiKSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuY1xcbmluZGV4IDllMGJmN2E1NGNlYzkuLjBhODg4NzU0MzIxOGEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuY1xcbkBAIC03LDYgKzcsOCBAQFxcbiAjaW5jbHVkZSBcXFwiYnBmX3RyYWNpbmdfbmV0LmhcXFwiXFxuIFxcbiBfX2JlMTYgc2Vydl9wb3J0ID0gMDtcXG4raW50IHR3X2ZvdW5kID0gMDtcXG4raW50IHR3X2Rlc3Ryb3lfZXJyID0gMDtcXG4gXFxuIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc2spIF9fa3N5bTtcXG4gXFxuQEAgLTEwMCw2ICsxMDIsMzQgQEAgaW50IGl0ZXJfdGNwNl9zZXJ2ZXIoc3RydWN0IGJwZl9pdGVyX190Y3AgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwiaXRlci90Y3BcXFwiKVxcbitpbnQgaXRlcl90Y3A2X3RpbWV3YWl0KHN0cnVjdCBicGZfaXRlcl9fdGNwICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IHNvY2tfY29tbW9uICpza19jb21tb24gPSBjdHgtXFx1MDAzZXNrX2NvbW1vbjtcXG4rXFx0X191NjQgKnZhbDtcXG4rXFx0aW50IGtleSA9IDA7XFxuK1xcbitcXHRpZiAoIXNrX2NvbW1vbilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoc2tfY29tbW9uLVxcdTAwM2Vza2NfZmFtaWx5ICE9IEFGX0lORVQ2KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmICghYnBmX3NrY190b190Y3BfdGltZXdhaXRfc29jayhza19jb21tb24pKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNnRjcF9jb25uX3NvY2tldHMsIFxcdTAwMjZrZXkpO1xcbitcXHRpZiAoIXZhbClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdC8qIFRoZSB0aW1ld2FpdCBzb2NrIGluaGVyaXRzIHRoZSBjb29raWUgb2YgdGhlIGNsb3NlZCBjbGllbnQgc29jay4gKi9cXG4rXFx0aWYgKGJwZl9nZXRfc29ja2V0X2Nvb2tpZShza19jb21tb24pICE9ICp2YWwpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0dHdfZm91bmQrKztcXG4rXFx0dHdfZGVzdHJveV9lcnIgPSBicGZfc29ja19kZXN0cm95KHNrX2NvbW1vbik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbiBcXG4gU0VDKFxcXCJpdGVyL3VkcFxcXCIpXFxuIGludCBpdGVyX3VkcDZfY2xpZW50KHN0cnVjdCBicGZfaXRlcl9fdWRwICpjdHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIwOjUxLjk1MzMwNzAxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NDYwNzkzNjQyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc29ja19kZXN0cm95XCIsXG4gICAgXCJpbmV0X2Nza19saXN0ZW5fc3RvcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBicGZfc29ja19kZXN0cm95KCkgQlBGIGtmdW5jIHRvIHBlcm1pdCBkZXN0cm95aW5nIG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBzb2NrZXRzKSB0aGF0IGltcGxlbWVudCBkaWFnX2Rlc3Ryb3ksIGFuZCBhZGp1c3RzIGluZXRfY3NrX2xpc3Rlbl9zdG9wKCkgdG8gYXZvaWQgY2FsbGluZyBjb25kX3Jlc2NoZWQoKSB3aGlsZSBleGVjdXRpbmcgaW4gYSBCUEYgY29udGV4dC4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBCUEYgc29ja2V0IGl0ZXJhdGlvbi9kZXN0cnVjdGlvbiBwYXRocyB0aGF0IHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzODhkOTU1ODgxM2FmNjQ4ZmY5NDJjNjdhZmUxYjY1ZGQxY2JjZDU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTM6MjA6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCA4NTEzMTY3YTg1OGE4Li5kOWM0YTEwOGRkYjVlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtMTI5MTEsOCArMTI5MTEsOSBAQCBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4gICogQHNvY2s6IFBvaW50ZXIgdG8gc29ja2V0IHRvIGJlIGRlc3Ryb3llZFxuICAqXG4gICogUmV0dXJuOlxuLSAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVQUk9UT05PU1VQUE9SVCwgRUlOVkFMLlxuLSAqIEVQUk9UT05PU1VQUE9SVCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC5cbisgKiBPbiBlcnJvciwgbWF5IHJldHVybiBFT1BOT1RTVVBQLCBvciB3aGF0ZXZlciB0aGUgcHJvdG9jb2wgc3BlY2lmaWNcbisgKiBkZXN0cm95IGhhbmRsZXIgcmV0dXJucy5cbisgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxuICAqIDAgb3RoZXJ3aXNlXG4gICovXG4gX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxuQEAgLTEyOTI0LDggKzEyOTI1LDEyIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaylcbiBcdCAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHRcbiBcdCAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuXG4gXHQgKi9cbi1cdGlmICghc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3kgfHwgKHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0XHQgICBzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUCkpXG4rXHRpZiAoIXNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95KVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRpZiAoc2tfZnVsbHNvY2soc2spIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4gXHRyZXR1cm4gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbmluZGV4IDYyNTc0NTliY2VlMjQuLjZhMzBmMTEzODQ1NDcgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG4rKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG5AQCAtMTUyMCw3ICsxNTIwLDggQEAgdm9pZCBpbmV0X2Nza19saXN0ZW5fc3RvcChzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFx0XHRzb2NrX3B1dChjaGlsZCk7XG4gXG4tXHRcdGNvbmRfcmVzY2hlZCgpO1xuK1x0XHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcbitcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdH1cbiBcdGlmIChxdWV1ZS1cdTAwM2VmYXN0b3BlbnEucnNrcV9yc3RfaGVhZCkge1xuIFx0XHQvKiBGcmVlIGFsbCB0aGUgcmVxcyBxdWV1ZWQgaW4gcnNrcV9yc3RfaGVhZC4gKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXG5pbmRleCA5YzExOTM4ZmU1OTdkLi43OGQ2NDJhMDJiZGI2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXG5AQCAtMSw0ICsxLDUgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2JwZi9icGZfZW5kaWFuLmhcdTAwM2VcbiBcbkBAIC0xMTAsNiArMTExLDEyMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3RjcF9zZXJ2ZXIoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxuIFx0XHRjbG9zZShzZXJ2KTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdGVzdF90Y3BfbGlzdGVuX3BlbmRpbmcoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxuK3tcbitcdGludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIGFjY2VwdF9zZXJ2ID0gLTEsIG4sIHNlcnZfcG9ydDtcbitcdHN0cnVjdCBwb2xsZmQgcGZkID0geyAuZXZlbnRzID0gUE9MTElOIH07XG4rXHRjaGFyIGJ1ZlsxXTtcbitcbitcdHNlcnYgPSBzdGFydF9zZXJ2ZXIoQUZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBOVUxMLCAwLCAwKTtcbitcdGlmICghQVNTRVJUX0dFKHNlcnYsIDAsIFwic3RhcnRfc2VydmVyXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRzZXJ2X3BvcnQgPSBnZXRfc29ja2V0X2xvY2FsX3BvcnQoc2Vydik7XG4rXHRpZiAoIUFTU0VSVF9HRShzZXJ2X3BvcnQsIDAsIFwiZ2V0X3NvY2tfbG9jYWxfcG9ydFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlc2Vydl9wb3J0ID0gKF9fYmUxNilzZXJ2X3BvcnQ7XG4rXG4rXHQvKlxuK1x0ICogQ29ubmVjdCBidXQgbmV2ZXIgYWNjZXB0LCBzbyB0aGUgY2hpbGQgc2l0cyBpbiB0aGUgYWNjZXB0IHF1ZXVlXG4rXHQgKiBvZiB0aGUgbGlzdGVuZXIuIFdhaXQgdW50aWwgaXQncyBhY3R1YWxseSB0aGVyZS5cbitcdCAqL1xuK1x0Y2xpZW4gPSBjb25uZWN0X3RvX2ZkKHNlcnYsIDApO1xuK1x0aWYgKCFBU1NFUlRfR0UoY2xpZW4sIDAsIFwiY29ubmVjdF90b19mZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0cGZkLmZkID0gc2VydjtcbitcdGlmICghQVNTRVJUX0VRKHBvbGwoXHUwMDI2cGZkLCAxLCAtMSksIDEsIFwicG9sbCBsaXN0ZW5lclwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LyogUnVuIGl0ZXJhdG9yIHByb2dyYW0gdGhhdCBkZXN0cm95cyBzZXJ2ZXIgc29ja2V0cy4gKi9cbitcdHN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLVx1MDAzZXByb2dzLml0ZXJfdGNwNl9zZXJ2ZXIpO1xuK1xuK1x0YWNjZXB0X3NlcnYgPSBhY2NlcHQoc2VydiwgTlVMTCwgTlVMTCk7XG4rXHRpZiAoIUFTU0VSVF9MVChhY2NlcHRfc2VydiwgMCwgXCJhY2NlcHQgb24gZGVzdHJveWVkIGxpc3RlbmVyXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVJTlZBTCwgXCJlcnJvciBjb2RlIG9uIGRlc3Ryb3llZCBsaXN0ZW5lclwiKTtcbitcbitcdC8qIFRoZSB1bmFjY2VwdGVkIGNoaWxkIHdhcyByZXNldCBhbG9uZyB3aXRoIHRoZSBsaXN0ZW5lci4gKi9cbitcdG4gPSByZWN2KGNsaWVuLCBidWYsIHNpemVvZihidWYpLCAwKTtcbitcdGlmICghQVNTRVJUX0xUKG4sIDAsIFwiY2xpZW50IHJlY3Ygb24gcmVzZXQgY2hpbGRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdEFTU0VSVF9FUShlcnJubywgRUNPTk5SRVNFVCwgXCJlcnJvciBjb2RlIG9uIHJlc2V0IGNoaWxkXCIpO1xuK1xuK2NsZWFudXA6XG4rXHRpZiAoY2xpZW4gIT0gLTEpXG4rXHRcdGNsb3NlKGNsaWVuKTtcbitcdGlmIChhY2NlcHRfc2VydiAhPSAtMSlcbitcdFx0Y2xvc2UoYWNjZXB0X3NlcnYpO1xuK1x0aWYgKHNlcnYgIT0gLTEpXG4rXHRcdGNsb3NlKHNlcnYpO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X3RjcF90aW1ld2FpdChzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpXG4re1xuK1x0aW50IHNlcnYgPSAtMSwgY2xpZW4gPSAtMSwgYWNjZXB0X3NlcnYgPSAtMSwgbjtcbitcdHN0cnVjdCB0aW1ldmFsIHR2ID0ge307XG4rXHRjaGFyIGJ1ZlsxXTtcbitcbitcdHNlcnYgPSBzdGFydF9zZXJ2ZXIoQUZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBOVUxMLCAwLCAwKTtcbitcdGlmICghQVNTRVJUX0dFKHNlcnYsIDAsIFwic3RhcnRfc2VydmVyXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRjbGllbiA9IGNvbm5lY3RfdG9fZmQoc2VydiwgMCk7XG4rXHRpZiAoIUFTU0VSVF9HRShjbGllbiwgMCwgXCJjb25uZWN0X3RvX2ZkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRhY2NlcHRfc2VydiA9IGFjY2VwdChzZXJ2LCBOVUxMLCBOVUxMKTtcbitcdGlmICghQVNTRVJUX0dFKGFjY2VwdF9zZXJ2LCAwLCBcInNlcnYgYWNjZXB0XCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKlxuK1x0ICogQWN0aXZlIGNsb3NlIGZyb20gdGhlIGNsaWVudCwgdGhlbiBjbG9zZSB0aGUgc2VydmVyIHNpZGUuIE9uY2VcbitcdCAqIHJlY3YoKSBzZWVzIEVPRiB0aGUgc2VydmVyIEZJTiBoYXMgYmVlbiBwcm9jZXNzZWQgYW5kIHRoZSBjbGllbnRcbitcdCAqIHNvY2sgaXMgaW4gVElNRV9XQUlULiBCbG9jayB3aXRob3V0IHRpbWVvdXQgc28gYSBsb2FkZWQgQ0kgYm94XG4rXHQgKiBjYW4ndCByYWNlIHVzLlxuK1x0ICovXG4rXHRpZiAoIUFTU0VSVF9PSyhzZXRzb2Nrb3B0KGNsaWVuLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgXHUwMDI2dHYsXG4rXHRcdFx0XHQgIHNpemVvZih0dikpLCBcImNsZWFyIHJjdnRpbWVvXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRpZiAoIUFTU0VSVF9PSyhzaHV0ZG93bihjbGllbiwgU0hVVF9XUiksIFwiY2xpZW50IHNodXRkb3duXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKlxuK1x0ICogTWFrZSBzdXJlIHRoZSBzZXJ2ZXIgaGFzIHNlZW4gdGhlIGNsaWVudCBGSU4gYmVmb3JlIGl0IGNsb3NlcyxcbitcdCAqIHNvIHRoZSB0d28gRklOcyBuZXZlciBjcm9zcy5cbitcdCAqL1xuK1x0biA9IHJlY3YoYWNjZXB0X3NlcnYsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xuK1x0aWYgKCFBU1NFUlRfRVEobiwgMCwgXCJzZXJ2ZXIgcmVjdiBFT0ZcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGNsb3NlKGFjY2VwdF9zZXJ2KTtcbitcdGFjY2VwdF9zZXJ2ID0gLTE7XG4rXG4rXHQvKiBibG9jayB1bnRpbCByZXR1cm4gRU9GICovXG4rXHRuID0gcmVjdihjbGllbiwgYnVmLCBzaXplb2YoYnVmKSwgMCk7XG4rXHRpZiAoIUFTU0VSVF9FUShuLCAwLCBcImNsaWVudCByZWN2IEVPRlwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LyogUnVuIGl0ZXJhdG9yIHByb2dyYW0gdGhhdCBkZXN0cm95cyB0aGUgdGltZXdhaXQgY2xpZW50IHNvY2suICovXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0d19mb3VuZCA9IDA7XG4rXHRzdGFydF9pdGVyX3NvY2tldHMoc2tlbC1cdTAwM2Vwcm9ncy5pdGVyX3RjcDZfdGltZXdhaXQpO1xuK1x0aWYgKCFBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZm91bmQsIDEsIFwidGltZXdhaXQgc29jayBmb3VuZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0QVNTRVJUX09LKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2Rlc3Ryb3lfZXJyLCBcImRlc3Ryb3kgdGltZXdhaXQgc29ja1wiKTtcbitcbitcdC8qIFRoZSBkZXN0cm95ZWQgdGltZXdhaXQgc29jayBtdXN0IGJlIGdvbmUuICovXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0d19mb3VuZCA9IDA7XG4rXHRzdGFydF9pdGVyX3NvY2tldHMoc2tlbC1cdTAwM2Vwcm9ncy5pdGVyX3RjcDZfdGltZXdhaXQpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kLCAwLCBcInRpbWV3YWl0IHNvY2sgZGVzdHJveWVkXCIpO1xuK1xuK2NsZWFudXA6XG4rXHRpZiAoY2xpZW4gIT0gLTEpXG4rXHRcdGNsb3NlKGNsaWVuKTtcbitcdGlmIChhY2NlcHRfc2VydiAhPSAtMSlcbitcdFx0Y2xvc2UoYWNjZXB0X3NlcnYpO1xuK1x0aWYgKHNlcnYgIT0gLTEpXG4rXHRcdGNsb3NlKHNlcnYpO1xuK31cbitcbiBzdGF0aWMgdm9pZCB0ZXN0X3VkcF9jbGllbnQoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxuIHtcbiBcdGludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIG4gPSAwO1xuQEAgLTIwNCw2ICszMjEsMTAgQEAgdm9pZCB0ZXN0X3NvY2tfZGVzdHJveSh2b2lkKVxuIFx0XHR0ZXN0X3RjcF9jbGllbnQoc2tlbCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInRjcF9zZXJ2ZXJcIikpXG4gXHRcdHRlc3RfdGNwX3NlcnZlcihza2VsKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidGNwX2xpc3Rlbl9wZW5kaW5nXCIpKVxuK1x0XHR0ZXN0X3RjcF9saXN0ZW5fcGVuZGluZyhza2VsKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidGNwX3RpbWV3YWl0XCIpKVxuK1x0XHR0ZXN0X3RjcF90aW1ld2FpdChza2VsKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidWRwX2NsaWVudFwiKSlcbiBcdFx0dGVzdF91ZHBfY2xpZW50KHNrZWwpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ1ZHBfc2VydmVyXCIpKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcbmluZGV4IDllMGJmN2E1NGNlYzkuLjBhODg4NzU0MzIxOGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcbkBAIC03LDYgKzcsOCBAQFxuICNpbmNsdWRlIFwiYnBmX3RyYWNpbmdfbmV0LmhcIlxuIFxuIF9fYmUxNiBzZXJ2X3BvcnQgPSAwO1xuK2ludCB0d19mb3VuZCA9IDA7XG4raW50IHR3X2Rlc3Ryb3lfZXJyID0gMDtcbiBcbiBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNrKSBfX2tzeW07XG4gXG5AQCAtMTAwLDYgKzEwMiwzNCBAQCBpbnQgaXRlcl90Y3A2X3NlcnZlcihzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcIml0ZXIvdGNwXCIpXG4raW50IGl0ZXJfdGNwNl90aW1ld2FpdChzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxuK3tcbitcdHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tfY29tbW9uID0gY3R4LVx1MDAzZXNrX2NvbW1vbjtcbitcdF9fdTY0ICp2YWw7XG4rXHRpbnQga2V5ID0gMDtcbitcbitcdGlmICghc2tfY29tbW9uKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChza19jb21tb24tXHUwMDNlc2tjX2ZhbWlseSAhPSBBRl9JTkVUNilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoIWJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2soc2tfY29tbW9uKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRjcF9jb25uX3NvY2tldHMsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXHQvKiBUaGUgdGltZXdhaXQgc29jayBpbmhlcml0cyB0aGUgY29va2llIG9mIHRoZSBjbG9zZWQgY2xpZW50IHNvY2suICovXG4rXHRpZiAoYnBmX2dldF9zb2NrZXRfY29va2llKHNrX2NvbW1vbikgIT0gKnZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHR0d19mb3VuZCsrO1xuK1x0dHdfZGVzdHJveV9lcnIgPSBicGZfc29ja19kZXN0cm95KHNrX2NvbW1vbik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4gXG4gU0VDKFwiaXRlci91ZHBcIilcbiBpbnQgaXRlcl91ZHA2X2NsaWVudChzdHJ1Y3QgYnBmX2l0ZXJfX3VkcCAqY3R4KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjA6NTEuOTUzMzA4NDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzY4NzE0NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmsgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHdoZXRoZXIgaXQgcHJlc2VudHMgYW55IGludGVyZXN0aW5nIGZ1enppbmcgdGFyZ2V0cy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLiBMZXQncyBzZWUuLi5cblxuSW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgdGhlIGBicGZfc29ja19kZXN0cm95YCBmdW5jdGlvbiBoYXMgYmVlbiBtb2RpZmllZC4gIEl0IGxvb2tzIGxpa2UgdGhlcmUncyBzb21lIGZpbmUtdHVuaW5nIHJlbGF0ZWQgdG8gaG93IHNvY2tldCBkZXN0cnVjdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIHNlZW1zIHRvIHJlbGF4IHRoZSByZXF1aXJlbWVudCB0aGF0IHRoZSBzb2NrZXQgYmUgYSBcImZ1bGxzb2NrXCIgYmVmb3JlIGFsbG93aW5nIGBkaWFnX2Rlc3Ryb3lgIHRvIGJlIGNhbGxlZC4gIFRoZSBjb25kaXRpb25hbCBsb2dpYyBoYXMgY2hhbmdlZCwgYW5kIGl0IG5vdyBzZWVtcyB0byBjb25zaWRlciBhbGxvd2luZyBub24tZnVsbHNvY2sgc29ja2V0cyAobGlrZSBgdHdfc29ja2Agb3IgYHJlcV9zb2NrYCkgaWYgdGhleSBoYXZlIGEgYGRpYWdfZGVzdHJveWAgZnVuY3Rpb24uIE15IGluaXRpYWwgcXVlc3Rpb24gaXM6IHdoYXQgaXMgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZT8gQ291bGQgdGhpcyBsZWFkIHRvIG5ldyBjb2RlIHBhdGhzIHdoZW4gZGVhbGluZyB3aXRoIGNlcnRhaW4gc29ja2V0IHN0YXRlcywgbGlrZSB0aW1lLXdhaXQgc29ja2V0cyBvciByZXF1ZXN0IHNvY2tldHM/IFRoZSByZXR1cm4gY29kZSBsb2dpYyBpcyBhbHNvIG1vZGlmaWVkLCB3aGljaCBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kLlxuXG5OZXh0LCBpbiBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2AsIHRoZSBwYXRjaCB0b3VjaGVzIGBpbmV0X2Nza19saXN0ZW5fc3RvcGAuIFRoZSBrZXkgY2hhbmdlIGlzIGFkZGluZyBhIGNoZWNrIGZvciB0aGUgQlBGIGNvbnRleHQgKGAhaGFzX2N1cnJlbnRfYnBmX2N0eCgpYCkgYmVmb3JlIGNhbGxpbmcgYGNvbmRfcmVzY2hlZCgpYC4gVGhpcyBpcyBpbXBvcnRhbnQsIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBpc3N1ZXMgd2hlbiBjYWxsZWQgZnJvbSBhIEJQRiBjb250ZXh0LiBDYWxsaW5nIGBjb25kX3Jlc2NoZWQoKWAgaW4gYW4gYXRvbWljIG9yIEJQRiBjb250ZXh0IGlzIGdlbmVyYWxseSBwcm9ibGVtYXRpYy4gSSBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kLlxuXG5GaW5hbGx5LCB0aGVyZSBhcmUgc29tZSBzZWxmdGVzdCBhZGRpdGlvbnMuIFRoaXMgY291bGQgYmUgdXNlZnVsLiBJdCdzIGxpa2VseSB0aGVzZSB0ZXN0cyB3aWxsIGdpdmUgbWUgc29tZSBpbnNpZ2h0IGludG8gaG93IHRoZXNlIGNoYW5nZXMgYXJlIGludGVuZGVkIHRvIGZ1bmN0aW9uIGFuZCBwZXJoYXBzIHJldmVhbCBzb21lIGVkZ2UgY2FzZXMuXG5cbk5vdywgSSdtIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW4gd2l0aCBzb21lIGdyZXBwaW5nIGFuZCBmaWxlIHJlYWRpbmcuIEkgbmVlZCB0byBkZXRlcm1pbmU6IFdoYXQgYXJlIHRoZSBzcGVjaWZpYyBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBpbiB0aGUgQlBGIGNvbnRleHQ/IFdoYXQgc29ja2V0IHN0YXRlcyBhcmUgaW1wYWN0ZWQgYnkgdGhlc2UgbW9kaWZpY2F0aW9ucz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcgYmFzZWQgb24gdGhlIGFsdGVyZWQgY29kZSBwYXRocyBvciByZXR1cm4gY29kZXM/IEknbGwgYmUgbG9va2luZyBmb3IgZm9jdXMgc3ltYm9scyBhbmQgcmVsYXRlZCBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gYmV0dGVyIGFuYWx5emUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MjgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMzoyMDo1Ny43MjIwMjQ3NDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MjAwOTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc29ja19kZXN0cm95XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTEyOTAwPV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjkwMS1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjkwMjovKiBicGZfc29ja19kZXN0cm95OiBEZXN0cm95IHRoZSBnaXZlbiBzb2NrZXQgd2l0aCBFQ09OTkFCT1JURUQgZXJyb3IgY29kZS5cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjkwMy0gKlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5MTgtICovXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI5MTk6X19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTIwLXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyOTQxPUJURl9LRlVOQ1NfU1RBUlQoYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzKVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTQyOkJURl9JRF9GTEFHUyhmdW5jLCBicGZfc29ja19kZXN0cm95KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTQzLUJURl9LRlVOQ1NfRU5EKGJwZl9za19pdGVyX2tmdW5jX2lkcylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jPTExPWludCB0d19kZXN0cm95X2VyciA9IDA7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMtMTItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmM6MTM6aW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzaykgX19rc3ltO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jLTE0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmM9NTE9aW50IGl0ZXJfdGNwNl9jbGllbnQoc3RydWN0IGJwZl9pdGVyX190Y3AgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jLTY5LVxcdGlmIChzb2NrX2Nvb2tpZSA9PSAqdmFsKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jOjcwOlxcdFxcdGJwZl9zb2NrX2Rlc3Ryb3koc2tfY29tbW9uKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYy03MS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jPTc2PWludCBpdGVyX3RjcDZfc2VydmVyKHN0cnVjdCBicGZfaXRlcl9fdGNwICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYy05OS1cXHRpZiAoc3JjcCA9PSBzZXJ2X3BvcnQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmM6MTAwOlxcdFxcdGJwZl9zb2NrX2Rlc3Ryb3koc2tfY29tbW9uKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYy0xMDEtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYz0xMDY9aW50IGl0ZXJfdGNwNl90aW1ld2FpdChzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMtMTI4LVxcdHR3X2ZvdW5kKys7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmM6MTI5OlxcdHR3X2Rlc3Ryb3lfZXJyID0gYnBmX3NvY2tfZGVzdHJveShza19jb21tb24pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jLTEzMC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jPTEzNT1pbnQgaXRlcl91ZHA2X2NsaWVudChzdHJ1Y3QgYnBmX2l0ZXJfX3VkcCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMtMTUwLVxcdGlmIChzb2NrX2Nvb2tpZSA9PSAqdmFsKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jOjE1MTpcXHRcXHRicGZfc29ja19kZXN0cm95KChzdHJ1Y3Qgc29ja19jb21tb24gKilzayk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMtMTUyLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmM9MTU3PWludCBpdGVyX3VkcDZfc2VydmVyKHN0cnVjdCBicGZfaXRlcl9fdWRwICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYy0xNjktXFx0aWYgKHNyY3AgPT0gc2Vydl9wb3J0KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jOjE3MDpcXHRcXHRicGZfc29ja19kZXN0cm95KChzdHJ1Y3Qgc29ja19jb21tb24gKilzayk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMtMTcxLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nX2ZhaWwuYz05PWNoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZ19mYWlsLmMtMTAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nX2ZhaWwuYzoxMTppbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNrKSBfX2tzeW07XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nX2ZhaWwuYy0xMi1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2dfZmFpbC5jPTEzPVNFQyhcXFwidHBfYnRmL3RjcF9kZXN0cm95X3NvY2tcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZ19mYWlsLmM6MTQ6X19mYWlsdXJlIF9fbXNnKFxcXCJjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBicGZfc29ja19kZXN0cm95IGlzIG5vdCBhbGxvd2VkXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2dfZmFpbC5jLTE1LWludCBCUEZfUFJPRyh0cmFjZV90Y3BfZGVzdHJveV9zb2NrLCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2dfZmFpbC5jLTE3LVxcdC8qIHNob3VsZCBub3QgbG9hZCAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZ19mYWlsLmM6MTg6XFx0YnBmX3NvY2tfZGVzdHJveSgoc3RydWN0IHNvY2tfY29tbW9uICopc2spO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZ19mYWlsLmMtMTktXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19pdGVyX2JhdGNoLmM9NzY9aW50IGl0ZXJfdGNwX2Rlc3Ryb3koc3RydWN0IGJwZl9pdGVyX190Y3AgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2l0ZXJfYmF0Y2guYy04Ny1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19pdGVyX2JhdGNoLmM6ODg6XFx0YnBmX3NvY2tfZGVzdHJveShza19jb21tb24pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2l0ZXJfYmF0Y2guYy04OS1cXHRicGZfc2VxX3dyaXRlKGN0eC1cXHUwMDNlbWV0YS1cXHUwMDNlc2VxLCBcXHUwMDI2c29ja19jb29raWUsIHNpemVvZihzb2NrX2Nvb2tpZSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMzoyMDo1OS4zOTQwMzg5MjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODMzNjM5NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgQ29kZTogVW5kZXJzdGFuZGluZyBOZXR3b3JrIEZpbHRlcmluZyBhbmQgQ29ubmVjdGlvbiBNYW5hZ2VtZW50KipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtb2RpZmljYXRpb25zIHRoYXQgaGF2ZSBiZWVuIG1hZGUsIHNvIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdHdvIGtleSBmaWxlcy4gRmlyc3QsIEknbSBzdGFydGluZyB3aXRoIGBuZXQvY29yZS9maWx0ZXIuY2AuIEkga25vdyB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIHBhY2tldCBmaWx0ZXJpbmcgbG9naWMgcmVzaWRlcywgc28gSSdtIGxvb2tpbmcgZm9yIGNoYW5nZXMgdGhhdCB3b3VsZCBhZmZlY3QgaG93IHBhY2tldHMgYXJlIGNsYXNzaWZpZWQsIHByb2Nlc3NlZCwgb3IgcG90ZW50aWFsbHkgZHJvcHBlZC4gSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBhbHRlcmF0aW9ucyBpbiB0aGUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBoYW5kbGluZywgYW55IG5ldyBmaWx0ZXIgaG9va3MsIG9yIGFueSB1cGRhdGVzIHRvIHRoZSBmaWx0ZXIgY2hhaW5zLiBJJ20gbG9va2luZyBmb3IgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZmlsdGVyaW5nIGxhbmRzY2FwZSBoYXMgY2hhbmdlZC5cblxuTmV4dCwgSSdsbCBtb3ZlIG92ZXIgdG8gYG5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNgLiBUaGlzIGZpbGUgaXMgY3J1Y2lhbCBmb3IgbWFuYWdpbmcgVENQL0lQIGNvbm5lY3Rpb25zIGluIHRoZSBJUHY0IGNvbnRleHQuIEkgYW50aWNpcGF0ZSBjaGFuZ2VzIGhlcmUgbWlnaHQgcmVsYXRlIHRvIGhvdyBjb25uZWN0aW9ucyBhcmUgZXN0YWJsaXNoZWQsIG1haW50YWluZWQsIG9yIHRlcm1pbmF0ZWQsIHBvdGVudGlhbGx5IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGZpbHRlcmluZyBydWxlcyBJIGV4YW1pbmVkIHByZXZpb3VzbHkuIEknbGwgYmUgc2NydXRpbml6aW5nIHNvY2tldCBjcmVhdGlvbiwgY29ubmVjdGlvbiBhY2NlcHRhbmNlLCBhbmQgZGF0YSBmbG93IHRvIHNlZSBpZiBhbnkgbmV3IGZpbHRlcmluZyBjcml0ZXJpYSBvciBzZWN1cml0eSBtZWFzdXJlcyBoYXZlIGJlZW4gaW50ZWdyYXRlZCB3aXRoaW4gdGhpcyBwYXJ0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJdCdzIGEga2V5IHNwb3QgdG8gc2VlIGhvdyB0aGUgY29ubmVjdGlvbiBwcm9jZXNzIGludGVyYWN0cyB3aXRoIHRoZSBmaWx0ZXJpbmcgbWVjaGFuaXNtcy4gVWx0aW1hdGVseSwgSSdtIGV4cGVjdGluZyB0byB1bmNvdmVyIGhvdyB0aGVzZSBzcGVjaWZpYyBtb2RpZmljYXRpb25zIGluZmx1ZW5jZSB0aGUgbmV0d29yayBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ2MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIxOjA0LjIyNzY4MDQ0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg4MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOTA1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjkwNTpcXHQgKiBwcm90b2NvbCBzcGVjaWZpYyBzb2NrZXQgZGVzdHJveSBoYW5kbGVycy5cXG4xMjkwNjpcXHQgKlxcbjEyOTA3OlxcdCAqIFRoZSBoZWxwZXIgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gQlBGIGNvbnRleHRzIHRoYXQgaGF2ZSBhY3F1aXJlZCB0aGUgc29ja2V0XFxuMTI5MDg6XFx0ICogbG9ja3MuXFxuMTI5MDk6XFx0ICpcXG4xMjkxMDpcXHQgKiBQYXJhbWV0ZXJzOlxcbjEyOTExOlxcdCAqIEBzb2NrOiBQb2ludGVyIHRvIHNvY2tldCB0byBiZSBkZXN0cm95ZWRcXG4xMjkxMjpcXHQgKlxcbjEyOTEzOlxcdCAqIFJldHVybjpcXG4xMjkxNDpcXHQgKiBPbiBlcnJvciwgbWF5IHJldHVybiBFT1BOT1RTVVBQLCBvciB3aGF0ZXZlciB0aGUgcHJvdG9jb2wgc3BlY2lmaWNcXG4xMjkxNTpcXHQgKiBkZXN0cm95IGhhbmRsZXIgcmV0dXJucy5cXG4xMjkxNjpcXHQgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxcbjEyOTE3OlxcdCAqIDAgb3RoZXJ3aXNlXFxuMTI5MTg6XFx0ICovXFxuMTI5MTk6XFx0X19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxcbjEyOTIwOlxcdHtcXG4xMjkyMTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKilzb2NrO1xcbjEyOTIyOlxcdFxcbjEyOTIzOlxcdFxcdC8qIFRoZSBsb2NraW5nIHNlbWFudGljcyB0aGF0IGFsbG93IGZvciBzeW5jaHJvbm91cyBleGVjdXRpb24gb2YgdGhlXFxuMTI5MjQ6XFx0XFx0ICogZGVzdHJveSBoYW5kbGVycyBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIFRDUCBhbmQgVURQLlxcbjEyOTI1OlxcdFxcdCAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHRcXG4xMjkyNjpcXHRcXHQgKiBwcmlvciB0byBpbnZva2luZyB0aGlzIGtmdW5jLlxcbjEyOTI3OlxcdFxcdCAqL1xcbjEyOTI4OlxcdFxcdGlmICghc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveSlcXG4xMjkyOTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTI5MzA6XFx0XFxuMTI5MzE6XFx0XFx0aWYgKHNrX2Z1bGxzb2NrKHNrKSBcXHUwMDI2XFx1MDAyNlxcbjEyOTMyOlxcdFxcdCAgICBzay1cXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXFx1MDAyNlxcdTAwMjZcXG4xMjkzMzpcXHRcXHQgICAgc2stXFx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxcbjEyOTM0OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMjkzNTpcXHRcXG4xMjkzNjpcXHRcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcXG4xMjkzNzpcXHR9XFxuMTI5Mzg6XFx0XFxuMTI5Mzk6XFx0X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG4xMjk0MDpcXHRcXG4xMjk0MTpcXHRCVEZfS0ZVTkNTX1NUQVJUKGJwZl9za19pdGVyX2tmdW5jX2lkcylcXG4xMjk0MjpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfZGVzdHJveSlcXG4xMjk0MzpcXHRCVEZfS0ZVTkNTX0VORChicGZfc2tfaXRlcl9rZnVuY19pZHMpXFxuMTI5NDQ6XFx0XFxuMTI5NDU6XFx0c3RhdGljIGludCB0cmFjaW5nX2l0ZXJfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxcbjEyOTQ2OlxcdHtcXG4xMjk0NzpcXHRcXHRpZiAoYnRmX2lkX3NldDhfY29udGFpbnMoXFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX2lkcywga2Z1bmNfaWQpIFxcdTAwMjZcXHUwMDI2XFxuMTI5NDg6XFx0XFx0ICAgIHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9JVEVSKVxcbjEyOTQ5OlxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMzoyMTowNC4yMjgyNzEyN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NTQ4Mzk2MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGluZXRfY29ubmVjdGlvbl9zb2NrLmNgKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMgcHJvYmxlbS4gTGV0J3MgcHVsbCB1cCB0aGUgc291cmNlIGNvZGUgZm9yIGBuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jYC4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIHRoZSBzZWN0aW9uIGFyb3VuZCBsaW5lIDE1MDAgdG8gMTU0MC4gVGhhdCByYW5nZSB1c3VhbGx5IGNvdmVycyBbaW5zZXJ0IGFzc3VtcHRpb24gYWJvdXQgdGhlIGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgbGlrZWx5IGNvdmVyZWQgYnkgdGhlIGNvZGUgd2l0aGluIHRoZSBzcGVjaWZpZWQgbGluZXM7IGUuZy4sIFwiY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCB0ZWFyIGRvd24gbG9naWMsXCIgb3IgXCJoYW5kbGluZyBvZiBzcGVjaWZpYyBzb2NrZXQgb3B0aW9ucyxcIiBvciBcImEgcGFydGljdWxhciBxdWV1aW5nIG1lY2hhbmlzbVwiXS4gSSdtIGhvcGluZyBJIGNhbiBwaW5wb2ludCBleGFjdGx5IHdoZXJlIHRoZSBbaW5zZXJ0IHlvdXIgaHlwb3RoZXNpcyBhYm91dCB0aGUgYnVnLCBvciB0aGUgZmVhdHVyZSB5b3UncmUgbG9va2luZyBmb3JdIGlzIGhhcHBlbmluZyBvciBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIFRDUC9JUCBzdGFjay4gVGhpcyBzaG91bGQgcHJvdmlkZSBzb21lIHVzZWZ1bCBjb250ZXh0IGFuZCBhIG1vcmUgbmFycm93IHNldCBvZiBjb2RlIHRvIGFuYWx5emUuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU5OSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjE6MDYuOTgzMTEyOTc2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTUwMDpcXHRcXHRcXHRcXHRcXHRcXHRSRUFEX09OQ0UobnNrLVxcdTAwM2Vza19kYXRhX3JlYWR5KShuc2spO1xcbjE1MDE6XFx0XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4xNTAyOlxcdFxcdFxcdFxcdFxcdFxcdF9fTkVUX0lOQ19TVEFUUyhzb2NrX25ldChuc2spLFxcbjE1MDM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0TElOVVhfTUlCX1RDUE1JR1JBVEVSRVFGQUlMVVJFKTtcXG4xNTA0OlxcdFxcdFxcdFxcdFxcdFxcdHJlcXNrX21pZ3JhdGVfcmVzZXQobnJlcSk7XFxuMTUwNTpcXHRcXHRcXHRcXHRcXHRcXHRfX3JlcXNrX2ZyZWUobnJlcSk7XFxuMTUwNjpcXHRcXHRcXHRcXHRcXHR9XFxuMTUwNzpcXHRcXHRcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xNTA4OlxcdFxcbjE1MDk6XFx0XFx0XFx0XFx0XFx0LyogaW5ldF9jc2tfcmVxc2tfcXVldWVfYWRkKCkgaGFzIGFscmVhZHlcXG4xNTEwOlxcdFxcdFxcdFxcdFxcdCAqIGNhbGxlZCBpbmV0X2NoaWxkX2ZvcmdldCgpIG9uIGZhaWx1cmUgY2FzZS5cXG4xNTExOlxcdFxcdFxcdFxcdFxcdCAqL1xcbjE1MTI6XFx0XFx0XFx0XFx0XFx0Z290byBza2lwX2NoaWxkX2ZvcmdldDtcXG4xNTEzOlxcdFxcdFxcdFxcdH1cXG4xNTE0OlxcdFxcdFxcdH1cXG4xNTE1OlxcdFxcbjE1MTY6XFx0XFx0XFx0aW5ldF9jaGlsZF9mb3JnZXQoc2ssIHJlcSwgY2hpbGQpO1xcbjE1MTc6XFx0c2tpcF9jaGlsZF9mb3JnZXQ6XFxuMTUxODpcXHRcXHRcXHRyZXFza19wdXQocmVxKTtcXG4xNTE5OlxcdFxcdFxcdGJoX3VubG9ja19zb2NrKGNoaWxkKTtcXG4xNTIwOlxcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbjE1MjE6XFx0XFx0XFx0c29ja19wdXQoY2hpbGQpO1xcbjE1MjI6XFx0XFxuMTUyMzpcXHRcXHRcXHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcXG4xNTI0OlxcdFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjE1MjU6XFx0XFx0fVxcbjE1MjY6XFx0XFx0aWYgKHF1ZXVlLVxcdTAwM2VmYXN0b3BlbnEucnNrcV9yc3RfaGVhZCkge1xcbjE1Mjc6XFx0XFx0XFx0LyogRnJlZSBhbGwgdGhlIHJlcXMgcXVldWVkIGluIHJza3FfcnN0X2hlYWQuICovXFxuMTUyODpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnF1ZXVlLVxcdTAwM2VmYXN0b3BlbnEubG9jayk7XFxuMTUyOTpcXHRcXHRcXHRyZXEgPSBxdWV1ZS1cXHUwMDNlZmFzdG9wZW5xLnJza3FfcnN0X2hlYWQ7XFxuMTUzMDpcXHRcXHRcXHRxdWV1ZS1cXHUwMDNlZmFzdG9wZW5xLnJza3FfcnN0X2hlYWQgPSBOVUxMO1xcbjE1MzE6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnF1ZXVlLVxcdTAwM2VmYXN0b3BlbnEubG9jayk7XFxuMTUzMjpcXHRcXHRcXHR3aGlsZSAocmVxICE9IE5VTEwpIHtcXG4xNTMzOlxcdFxcdFxcdFxcdG5leHQgPSByZXEtXFx1MDAzZWRsX25leHQ7XFxuMTUzNDpcXHRcXHRcXHRcXHRyZXFza19wdXQocmVxKTtcXG4xNTM1OlxcdFxcdFxcdFxcdHJlcSA9IG5leHQ7XFxuMTUzNjpcXHRcXHRcXHR9XFxuMTUzNzpcXHRcXHR9XFxuMTUzODpcXHRcXHRXQVJOX09OX09OQ0Uoc2stXFx1MDAzZXNrX2Fja19iYWNrbG9nKTtcXG4xNTM5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjE6MDYuOTgzMjE1MDY2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjAzMzMwODc4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGJwZl9zb2NrX2Rlc3Ryb3lgIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYGJwZl9zb2NrX2Rlc3Ryb3lgIGlzIGEgQlBGIGtmdW5jLCB3aGljaCBtZWFucyBpdCBjYW4gYmUgdXNlZCB3aXRoaW4gQlBGIGl0ZXJhdG9yIHByb2dyYW1zLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgYmVoYXZpb3Igb2YgdGhpcyBmdW5jdGlvbiB3aGVuIGNhbGxlZCBvbiBkaWZmZXJlbnQgc29ja2V0IHN0YXRlcyDigJMgcGFydGljdWxhcmx5IHRpbWV3YWl0IGFuZCBsaXN0ZW5pbmcgc29ja2V0cy5cblxuRm9yIGEgdGltZXdhaXQgc29ja2V0LCB0aGUgY29kZSBub3cgY2hlY2tzIGBza19mdWxsc29jayhzaylgLiBUaGlzIG1ha2VzIHNlbnNlIGJlY2F1c2UgYSB0aW1ld2FpdCBzb2NrZXQgaXNuJ3QgYSBcImZ1bGxcIiBzb2NrZXQgKGkuZS4sIGBzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUYCBvciBgVENQX05FV19TWU5fUkVDVmApLiBQcmV2aW91c2x5LCB0aGVyZSB3YXMgYSBjaGVjayBvbiBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIHdoaWNoIG1pZ2h0IG5vdCBiZSB2YWxpZCBvciByZWxpYWJsZSBmb3Igbm9uLWZ1bGxzb2NrIHN0YXRlcy4gU28sIGFkZGluZyB0aGlzIGBza19mdWxsc29jayhzaylgIGNoZWNrIHNlZW1zIHRvIGFsbG93IGBkaWFnX2Rlc3Ryb3lgIG9wZXJhdGlvbnMgKGxpa2UgdGhvc2UgdXNlZCBieSB0d19zb2NrKSB0byBwcm9jZWVkIGNvcnJlY3RseS4gVWx0aW1hdGVseSwgdGhpcyBjaGFuZ2UgbWFrZXMgc2Vuc2UgYmVjYXVzZSBpdCBtZWFucyB0aGF0IHdlIGNhbiBjb3JyZWN0bHkgZGVzdHJveSBhIHNvY2tldCB1c2luZyB0aGUgYGJwZl9zb2NrX2Rlc3Ryb3lgIGV2ZW4gaWYgaXQgaXMgbm90IGEgZnVsbHkgZXN0YWJsaXNoZWQgc29ja2V0LlxuXG5Gb3IgYSBsaXN0ZW5pbmcgc29ja2V0LCB0aGUgZnVuY3Rpb24gYGluZXRfY3NrX2xpc3Rlbl9zdG9wYCBpcyBjcml0aWNhbCB3aGVuIGBicGZfc29ja19kZXN0cm95YCBpcyBjYWxsZWQuIEl0IHNlZW1zIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgbGlzdGVuaW5nIHByb2Nlc3MgaXMgc3RvcHBlZCB2aWEgYGRpYWdfZGVzdHJveWAgKHNwZWNpZmljYWxseSwgYHRjcF9kaWFnX2Rlc3Ryb3lgIGxlYWRzIHRvIGB0Y3BfYWJvcnRgIGFuZCBldmVudHVhbGx5IGBpbmV0X2Nza19saXN0ZW5fc3RvcGApLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBjb25kX3Jlc2NoZWQoKWAgaXMgaW50ZXJlc3RpbmcuIFRoZSBwcmV2aW91cyBjb2RlIGNvdWxkIGNhdXNlIGEgXCJzY2hlZHVsaW5nIHdoaWxlIGF0b21pY1wiIGVycm9yIGluIGEgQlBGIGl0ZXJhdG9yIGNvbnRleHQuIEl0IHNlZW1zIHRoYXQgdGhlIGNvbmRpdGlvbiBgaWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpIGNvbmRfcmVzY2hlZCgpO2Agd2FzIGFkZGVkIHRvIGVuc3VyZSB0aGF0IHdlIG9ubHkgeWllbGQgaWYgd2UncmUgKm5vdCogaW4gYSBCUEYgY29udGV4dCB0aGF0IHByb2hpYml0cyBzbGVlcGluZyBvciBtaWdyYXRpb24uXG5cbk5vdywgYSBrZXkgcXVlc3Rpb24gZm9yIG1lOiBJcyB0aGlzIGNvZGUgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzPyBUaGUgYW5zd2VyIGlzIHllcy4gU2luY2UgQlBGIGFuZCBzb2NrZXQgZGVzdHJ1Y3Rpb24gdmlhIEJQRiBpdGVyYXRvcnMgKGUuZy4sIGBCUEZfUFJPR19UWVBFX1RSQUNJTkdgIG9yIGBCUEZfVFJBQ0VfSVRFUmApIGFyZSBzdGFuZGFyZCwgYXMgd2VsbCBhcyB0aGUgZmFjdCB0aGF0IHN5emthbGxlciBmdXp6ZXMgQlBGIGFuZCBzb2NrZXQgaXRlcmF0b3JzLCB0aGVyZSBpcyBhIHN0cm9uZyBwb3NzaWJpbGl0eSB0aGF0IHRoaXMgbmV3IGNvZGUgcGF0aCBjYW4gYmUgaGl0LlxuXG5UaGVyZWZvcmUsIGlzIHRoaXMgY2hhbmdlIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHksIGBXb3J0aEZ1enppbmc6IHRydWVgLiBUaGlzIGlzIGJlY2F1c2UgaXQgbW9kaWZpZXMgdGhlIGV4ZWN1dGFibGUgbG9naWMgd2l0aGluIGNvcmUgc3Vic3lzdGVtczogQlBGIGFuZCBUQ1AvSVB2NCBuZXR3b3JraW5nLiBTcGVjaWZpY2FsbHksIGl0IGNoYW5nZXMgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggc29ja2V0IGRlc3RydWN0aW9uIG9jY3VycyBhbmQgdGhlIHNjaGVkdWxlciB5aWVsZCBiZWhhdmlvciBpbiBgaW5ldF9jc2tfbGlzdGVuX3N0b3BgLiBJIG5lZWQgdG8gbm93IGNoZWNrIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYW5kIHRoZSBmb2N1cyBzeW1ib2xzIHJlbGF0ZWQgdG8gYm90aCBgYnBmX3NvY2tfZGVzdHJveWAgYW5kIGBpbmV0X2Nza19saXN0ZW5fc3RvcGAuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFyb3VuZCBgbmV0L2NvcmUvZmlsdGVyLmNgIGFuZCBzcGVjaWZpY2FsbHkgYEJQRmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDcyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjE6MTMuMDE2NTI2OTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMzQxNDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19CUEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTQ0PW9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICs9IHNrbXNnLm9cXG5uZXQvY29yZS9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHNvY2tfbWFwLm9cXG5uZXQvY29yZS9NYWtlZmlsZTo0NjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9za19zdG9yYWdlLm9cXG5uZXQvY29yZS9NYWtlZmlsZS00Ny1pZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL01ha2VmaWxlOjQ4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2tzb2NrLm9cXG5uZXQvY29yZS9NYWtlZmlsZS00OS1lbmRpZlxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM9Mjc0PUJURl9LRlVOQ1NfRU5EKGtzb2NrX2tmdW5jX2J0Zl9pZHMpXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjc1LVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjI3NjojaWZkZWYgQ09ORklHX0JQRl9MU01cXG5uZXQvY29yZS9icGZfa3NvY2suYy0yNzctQlRGX0lEX0xJU1RfU0lOR0xFKGJwZl9sc21fc29ja2V0X3NlbmRtc2dfaWQsIGZ1bmMsIGJwZl9sc21fc29ja2V0X3NlbmRtc2cpXFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYz0yODA9c3RhdGljIGludCBicGZfa3NvY2tfa2Z1bmNfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjg3LVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjI4ODojaWZkZWYgQ09ORklHX0JQRl9MU01cXG5uZXQvY29yZS9icGZfa3NvY2suYy0yODktXFx0aWYgKHByb2ctXFx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00gXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9jb3JlL2Rldi5oPTM4Mj1pbnQgcnBzX2NwdW1hc2tfaG91c2VrZWVwaW5nKHN0cnVjdCBjcHVtYXNrICptYXNrKTtcXG5uZXQvY29yZS9kZXYuaC0zODMtXFxubmV0L2NvcmUvZGV2Lmg6Mzg0OiNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19ORVQpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxcbm5ldC9jb3JlL2Rldi5oLTM4NS12b2lkIHhkcF9kb19jaGVja19mbHVzaGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz00NTMzPUVYUE9SVF9TWU1CT0xfR1BMKHhkcF9kb19mbHVzaCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNDUzNC1cXG5uZXQvY29yZS9maWx0ZXIuYzo0NTM1OiNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19ORVQpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ1MzYtdm9pZCB4ZHBfZG9fY2hlY2tfZmx1c2hlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuLS1cXG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jPTc0PUVYUE9SVF9TWU1CT0woc2tiX2Zsb3dfZGlzc2VjdG9yX2luaXQpO1xcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmMtNzUtXFxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYzo3NjojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYy03Ny1pbnQgZmxvd19kaXNzZWN0b3JfYnBmX3Byb2dfYXR0YWNoX2NoZWNrKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmMtMTA1LX1cXG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jOjEwNjojZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXFxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYy0xMDctXFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTU0NT1zdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNTczLVxcbm5ldC9jb3JlL3NrbXNnLmM6NTc0OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcXG5uZXQvY29yZS9za21zZy5jLTU3NS1cXHRwc29jay1cXHUwMDNlaW5ncmVzc19ieXRlcyArPSBsZW47XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTEwNTc9c3RhdGljIHZvaWQgc2tfcHNvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMDczLVxcbm5ldC9jb3JlL3NrbXNnLmM6MTA3NDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXFxubmV0L2NvcmUvc2ttc2cuYy0xMDc1LXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfcmVhZChzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMTkzPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX2RvbmVfc3RycChzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMTk1LX1cXG5uZXQvY29yZS9za21zZy5jOjExOTY6I2VuZGlmIC8qIENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUiAqL1xcbm5ldC9jb3JlL3NrbXNnLmMtMTE5Ny1cXG4tLVxcbm5ldC9jb3JlL3NvY2suYz0yMzQ5PXN0YXRpYyB2b2lkIF9fc2tfZGVzdHJ1Y3Qoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbi0tXFxubmV0L2NvcmUvc29jay5jLTIzNjYtXFxubmV0L2NvcmUvc29jay5jOjIzNjc6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm5ldC9jb3JlL3NvY2suYy0yMzY4LVxcdGJwZl9za19zdG9yYWdlX2ZyZWUoc2spO1xcbi0tXFxubmV0L2NvcmUvc29jay5jPTI0Nzk9c3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtMjQ5My1cXHRuZXdzay1cXHUwMDNlc2tfcHJvdF9jcmVhdG9yID0gcHJvdDtcXG5uZXQvY29yZS9zb2NrLmM6MjQ5NDojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2NvcmUvc29jay5jLTI0OTUtXFx0UkNVX0lOSVRfUE9JTlRFUihuZXdzay1cXHUwMDNlc2tfYnBmX3N0b3JhZ2UsIE5VTEwpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xNDc3PXN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19saW5rX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKioqcHByb2csXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0OTEtXFx0XFx0YnJlYWs7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxNDkyOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0OTMtXFx0Y2FzZSBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVI6XFxuLS1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYz0zNTI9c3RhdGljIGludCBwcm9jX2RvX3NrYl9kZWZlcl9tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4tLVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTM3NC1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzozNzU6I2lmZGVmIENPTkZJR19CUEZfSklUXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMzc2LXN0YXRpYyBpbnQgcHJvY19kb2ludHZlY19taW5tYXhfYnBmX2VuYWJsZShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbi0tXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNDAxLVxcdGlmICh3cml0ZSBcXHUwMDI2XFx1MDAyNiByZXQgXFx1MDAyNlxcdTAwMjYgbWluID09IG1heClcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzo0MDI6XFx0XFx0cHJfaW5mb19vbmNlKFxcXCJDT05GSUdfQlBGX0pJVF9BTFdBWVNfT04gaXMgZW5hYmxlZCwgYnBmX2ppdF9lbmFibGUgaXMgcGVybWFuZW50bHkgc2V0IHRvIDEuXFxcXG5cXFwiKTtcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy00MDMtXFxuLS1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYz00MzA9c3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0X2NvcmVfdGFibGVbXSA9IHtcXG4tLVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTQ4My1cXHR9LFxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjQ4NDojaWZkZWYgQ09ORklHX0JQRl9KSVRcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy00ODUtXFx0e1xcbi0tXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNDkwLVxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHByb2NfZG9pbnR2ZWNfbWlubWF4X2JwZl9lbmFibGUsXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6NDkxOiMgaWZkZWYgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNDkyLVxcdFxcdC5leHRyYTFcXHRcXHQ9IFNZU0NUTF9PTkUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIxOjEzLjA4Njg3NDU0NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDYxMTYwNjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQsIGFzc3VtaW5nIEknbSB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYGJwZl9zb2NrX2Rlc3Ryb3lgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBgYnBmX3NvY2tfZGVzdHJveWAgZnVuY3Rpb24gYW5kIGhvdyBpdCdzIGludGVncmF0ZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB1bmRlciB3aGF0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzIChgI2lmZGVmYCkgaXTigJlzIGluY2x1ZGVkLiBUaGlzIGlzIGxpa2VseSBhIGtleSBhc3BlY3Qgb2YgdGhpcyBmdW5jdGlvbiwgYXMgaXQgaXMgYSBsZXNzIGZyZXF1ZW50bHkgdXNlZCBmdW5jdGlvbi4gVGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHdpbGwgdGVsbCBtZSB3aGljaCBmZWF0dXJlcyBvciBrZXJuZWwgY29uZmlndXJhdGlvbnMgZW5hYmxlIG9yIGRpc2FibGUgdGhlIGZ1bmN0aW9uYWxpdHkgYXNzb2NpYXRlZCB3aXRoIGBicGZfc29ja19kZXN0cm95YC4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzIGNyaXRpY2FsIHRvIHRyb3VibGVzaG9vdGluZy4gSXQgd2lsbCBoZWxwIG1lIHNlZSB3aGljaCBrZXJuZWwgYnVpbGRzIHdpbGwgaW5jbHVkZSB0aGlzIGFuZCB0aGVyZWZvcmUgd2hpY2ggY29uZmlndXJhdGlvbnMgSSBzaG91bGQgdGVzdCB3aGVuIEkgYW0gd29ya2luZyBvbiByZWxhdGVkIGNvZGUuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIGhvdyBpdOKAmXMgYmVpbmcgdXNlZCBpbiB0aGUgc29ja2V0IEJQRiBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYwMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIxOjE2LjU0ODAzNzg0M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczOTAzMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmfCNpZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0zMTg9c3RhdGljIHUzMiBjb252ZXJ0X3NrYl9hY2Nlc3MoaW50IHNrYl9maWVsZCwgaW50IGRzdF9yZWcsIGludCBzcmNfcmVnLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzMzLVxcdFxcdCppbnNuKysgPSBCUEZfQUxVMzJfSU1NKEJQRl9BTkQsIGRzdF9yZWcsIFBLVF9UWVBFX01BWCk7XFxubmV0L2NvcmUvZmlsdGVyLmM6MzM0OiNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTERcXG5uZXQvY29yZS9maWx0ZXIuYy0zMzUtXFx0XFx0Kmluc24rKyA9IEJQRl9BTFUzMl9JTU0oQlBGX1JTSCwgZHN0X3JlZywgNSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xNjgxPXN0YXRpYyBpbmxpbmUgaW50IF9fYnBmX3RyeV9tYWtlX3dyaXRhYmxlKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xNjgzLXtcXG5uZXQvY29yZS9maWx0ZXIuYzoxNjg0OiNpZmRlZiBDT05GSUdfREVCVUdfTkVUXFxubmV0L2NvcmUvZmlsdGVyLmMtMTY4NS1cXHQvKiBBdm9pZCBhIHNwbGF0IGluIHBza2JfbWF5X3B1bGxfcmVhc29uKCkgKi9cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTIyMDc9c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjIxNS1cXG5uZXQvY29yZS9maWx0ZXIuYzoyMjE2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTIyMTctc3RhdGljIGludCBicGZfb3V0X25laWdoX3Y2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTIzMTM9c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9uZWlnaF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjMyMC1cXG5uZXQvY29yZS9maWx0ZXIuYzoyMzIxOiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTIzMjItc3RhdGljIGludCBicGZfb3V0X25laWdoX3Y0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTMxODM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbXNnX3BvcF9kYXRhX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzE5Mi1cXG5uZXQvY29yZS9maWx0ZXIuYzozMTkzOiNpZmRlZiBDT05GSUdfQ0dST1VQX05FVF9DTEFTU0lEXFxubmV0L2NvcmUvZmlsdGVyLmMtMzE5NC1CUEZfQ0FMTF8wKGJwZl9nZXRfY2dyb3VwX2NsYXNzaWRfY3VycilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTQ1MzM9RVhQT1JUX1NZTUJPTF9HUEwoeGRwX2RvX2ZsdXNoKTtcXG5uZXQvY29yZS9maWx0ZXIuYy00NTM0LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjQ1MzU6I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX05FVCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpXFxubmV0L2NvcmUvZmlsdGVyLmMtNDUzNi12b2lkIHhkcF9kb19jaGVja19mbHVzaGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTUxNzE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX3VuZGVyX2Nncm91cF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTUxNzktXFxubmV0L2NvcmUvZmlsdGVyLmM6NTE4MDojaWZkZWYgQ09ORklHX1NPQ0tfQ0dST1VQX0RBVEFcXG5uZXQvY29yZS9maWx0ZXIuYy01MTgxLXN0YXRpYyBpbmxpbmUgdTY0IF9fYnBmX3NrX2Nncm91cF9pZChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02MjAyPUJQRl9DQUxMXzMoYnBmX2JpbmQsIHN0cnVjdCBicGZfc29ja19hZGRyX2tlcm4gKiwgY3R4LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgYWRkcixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMDQte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjYyMDU6I2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmMtNjIwNi1cXHRzdHJ1Y3Qgc29jayAqc2sgPSBjdHgtXFx1MDAzZXNrO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjIxOC1cXHRcXHRyZXR1cm4gX19pbmV0X2JpbmQoc2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWFkZHIsIGFkZHJfbGVuLCBmbGFncyk7XFxubmV0L2NvcmUvZmlsdGVyLmM6NjIxOTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy02MjIwLVxcdH0gZWxzZSBpZiAoYWRkci1cXHUwMDNlc2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02MjM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2JpbmRfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02MjQzLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjYyNDQ6I2lmZGVmIENPTkZJR19YRlJNXFxubmV0L2NvcmUvZmlsdGVyLmMtNjI0NS1cXG5uZXQvY29yZS9maWx0ZXIuYzo2MjQ2OiNpZiAoSVNfQlVJTFRJTihDT05GSUdfWEZSTV9JTlRFUkZBQ0UpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSkgfHwgXFxcXFxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyNDctICAgIChJU19NT0RVTEUoQ09ORklHX1hGUk1fSU5URVJGQUNFKSBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTKSlcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTYyODc9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2dldF94ZnJtX3N0YXRlX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjI5OC1cXG5uZXQvY29yZS9maWx0ZXIuYzo2Mjk5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKSB8fCBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYzMDAtc3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02MzA2LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjYzMDc6I2lmIElTX0VOQUJMRUQoQ09ORklHX1ZMQU5fODAyMVEpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjMwOC1cXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikgXFx1MDAyNlxcdTAwMjYgaXNfdmxhbl9kZXYoZGV2KSkge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjMyOT1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJwZl9maWJfdmxhbl9pbnB1dF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYzNDgtXFxubmV0L2NvcmUvZmlsdGVyLmM6NjM0OTojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcXG5uZXQvY29yZS9maWx0ZXIuYy02MzUwLXN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjUwMC1cXG5uZXQvY29yZS9maWx0ZXIuYzo2NTAxOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY1MDItc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02NjcxPUJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjY4MC1cXHRzd2l0Y2ggKHBhcmFtcy1cXHUwMDNlZmFtaWx5KSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6NjY4MTojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcXG5uZXQvY29yZS9maWx0ZXIuYy02NjgyLVxcdGNhc2UgQUZfSU5FVDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY2ODUtI2VuZGlmXFxubmV0L2NvcmUvZmlsdGVyLmM6NjY4NjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy02Njg3LVxcdGNhc2UgQUZfSU5FVDY6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02NzA1PUJQRl9DQUxMXzQoYnBmX3NrYl9maWJfbG9va3VwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02NzI0LVxcdHN3aXRjaCAocGFyYW1zLVxcdTAwM2VmYW1pbHkpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzo2NzI1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY3MjYtXFx0Y2FzZSBBRl9JTkVUOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjcyOS0jZW5kaWZcXG5uZXQvY29yZS9maWx0ZXIuYzo2NzMwOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY3MzEtXFx0Y2FzZSBBRl9JTkVUNjpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTY4NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX2NoZWNrX210dV9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY4NzctXFxubmV0L2NvcmUvZmlsdGVyLmM6Njg3ODojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy02ODc5LXN0YXRpYyBpbnQgYnBmX3B1c2hfc2VnNl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgdHlwZSwgdm9pZCAqaGRyLCB1MzIgbGVuKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjkxMi1cXG5uZXQvY29yZS9maWx0ZXIuYzo2OTEzOiNpZiBJU19FTkFCTEVEKENPTkZJR19MV1RVTk5FTF9CUEYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjkxNC1zdGF0aWMgaW50IGJwZl9wdXNoX2lwX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmhkciwgdTMyIGxlbixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTY5MjE9QlBGX0NBTExfNChicGZfbHd0X2luX3B1c2hfZW5jYXAsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCB0eXBlLCB2b2lkICosIGhkcixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY5MjQtXFx0c3dpdGNoICh0eXBlKSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6NjkyNTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy02OTI2LVxcdGNhc2UgQlBGX0xXVF9FTkNBUF9TRUc2Olxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjkyOS0jZW5kaWZcXG5uZXQvY29yZS9maWx0ZXIuYzo2OTMwOiNpZiBJU19FTkFCTEVEKENPTkZJR19MV1RVTk5FTF9CUEYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjkzMS1cXHRjYXNlIEJQRl9MV1RfRU5DQVBfSVA6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02OTM5PUJQRl9DQUxMXzQoYnBmX2x3dF94bWl0X3B1c2hfZW5jYXAsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCB0eXBlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjk0Mi1cXHRzd2l0Y2ggKHR5cGUpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzo2OTQzOiNpZiBJU19FTkFCTEVEKENPTkZJR19MV1RVTk5FTF9CUEYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjk0NC1cXHRjYXNlIEJQRl9MV1RfRU5DQVBfSVA6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02OTYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF94bWl0X3B1c2hfZW5jYXBfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02OTcxLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjY5NzI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjk3My1CUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlcywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG9mZnNldCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcxNTY9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3NlZzZfYWRqdXN0X3NyaF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNjUtXFxubmV0L2NvcmUvZmlsdGVyLmM6NzE2NjojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy03MTY3LXN0YXRpYyBzdHJ1Y3Qgc29jayAqc2tfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxODUtXFx0XFx0XFx0XFx0XFx0ICAgICAgIGRpZiwgc2RpZiwgTlVMTCk7XFxubmV0L2NvcmUvZmlsdGVyLmM6NzE4NjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy03MTg3LVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03ODM5PUJQRl9DQUxMXzUoYnBmX3RjcF9jaGVja19zeW5jb29raWUsIHN0cnVjdCBzb2NrICosIHNrLCB2b2lkICosIGlwaCwgdTMyLCBpcGhfbGVuLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzg0MS17XFxubmV0L2NvcmUvZmlsdGVyLmM6Nzg0MjojaWZkZWYgQ09ORklHX1NZTl9DT09LSUVTXFxubmV0L2NvcmUvZmlsdGVyLmMtNzg0My1cXHRpbnQgcmV0O1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzg3NC1cXG5uZXQvY29yZS9maWx0ZXIuYzo3ODc1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTc4NzYtXFx0Y2FzZSA2Olxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzkxMj1CUEZfQ0FMTF81KGJwZl90Y3BfZ2VuX3N5bmNvb2tpZSwgc3RydWN0IHNvY2sgKiwgc2ssIHZvaWQgKiwgaXBoLCB1MzIsIGlwaF9sZW4sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03OTE0LXtcXG5uZXQvY29yZS9maWx0ZXIuYzo3OTE1OiNpZmRlZiBDT05GSUdfU1lOX0NPT0tJRVNcXG5uZXQvY29yZS9maWx0ZXIuYy03OTE2LVxcdHUzMiBjb29raWU7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03OTQ0LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjc5NDU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNzk0Ni1cXHRjYXNlIDY6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04MjcyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9zZXRfdHN0YW1wX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODI4MC1cXG5uZXQvY29yZS9maWx0ZXIuYzo4MjgxOiNpZmRlZiBDT05GSUdfU1lOX0NPT0tJRVNcXG5uZXQvY29yZS9maWx0ZXIuYy04MjgyLUJQRl9DQUxMXzMoYnBmX3RjcF9yYXdfZ2VuX3N5bmNvb2tpZV9pcHY0LCBzdHJ1Y3QgaXBoZHIgKiwgaXBoLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODMwOD1CUEZfQ0FMTF8zKGJwZl90Y3BfcmF3X2dlbl9zeW5jb29raWVfaXB2Niwgc3RydWN0IGlwdjZoZHIgKiwgaXBoLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODMxMC17XFxubmV0L2NvcmUvZmlsdGVyLmM6ODMxMTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy04MzEyLVxcdGNvbnN0IHUxNiBtc3NfY2xhbXAgPSBJUFY2X01JTl9NVFUgLSBzaXplb2Yoc3RydWN0IHRjcGhkcikgLVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODM2MD1CUEZfQ0FMTF8yKGJwZl90Y3BfcmF3X2NoZWNrX3N5bmNvb2tpZV9pcHY2LCBzdHJ1Y3QgaXB2NmhkciAqLCBpcGgsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04MzYyLXtcXG5uZXQvY29yZS9maWx0ZXIuYzo4MzYzOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTgzNjQtXFx0aWYgKF9fY29va2llX3Y2X2NoZWNrKGlwaCwgdGgpIFxcdTAwM2UgMClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg0NjM9c29ja19hZGRyX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04NDg1LVxcdFxcdHJldHVybiBcXHUwMDI2YnBmX2V2ZW50X291dHB1dF9kYXRhX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg0ODY6I2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmMtODQ4Ny1cXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04NTcyPWNnX3NrYl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODU4OC1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za2JfZXZlbnRfb3V0cHV0X3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg1ODk6I2lmZGVmIENPTkZJR19TT0NLX0NHUk9VUF9EQVRBXFxubmV0L2NvcmUvZmlsdGVyLmMtODU5MC1cXHRjYXNlIEJQRl9GVU5DX3NrYl9jZ3JvdXBfaWQ6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04NTk4LSNlbmRpZlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg1OTk6I2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmMtODYwMC1cXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04NjIxPXRjX2Nsc19hY3RfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3MDMtXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tfc3RvcmFnZV9kZWxldGVfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmM6ODcwNDojaWZkZWYgQ09ORklHX1hGUk1cXG5uZXQvY29yZS9maWx0ZXIuYy04NzA1LVxcdGNhc2UgQlBGX0ZVTkNfc2tiX2dldF94ZnJtX3N0YXRlOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODcwNy0jZW5kaWZcXG5uZXQvY29yZS9maWx0ZXIuYzo4NzA4OiNpZmRlZiBDT05GSUdfQ0dST1VQX05FVF9DTEFTU0lEXFxubmV0L2NvcmUvZmlsdGVyLmMtODcwOS1cXHRjYXNlIEJQRl9GVU5DX3NrYl9jZ3JvdXBfY2xhc3NpZDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3MTEtI2VuZGlmXFxubmV0L2NvcmUvZmlsdGVyLmM6ODcxMjojaWZkZWYgQ09ORklHX1NPQ0tfQ0dST1VQX0RBVEFcXG5uZXQvY29yZS9maWx0ZXIuYy04NzEzLVxcdGNhc2UgQlBGX0ZVTkNfc2tiX2Nncm91cF9pZDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3MTctI2VuZGlmXFxubmV0L2NvcmUvZmlsdGVyLmM6ODcxODojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy04NzE5LVxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3NDAtXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tiX3NldF90c3RhbXBfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmM6ODc0MTojaWZkZWYgQ09ORklHX1NZTl9DT09LSUVTXFxubmV0L2NvcmUvZmlsdGVyLmMtODc0Mi1cXHRjYXNlIEJQRl9GVU5DX3RjcF9yYXdfZ2VuX3N5bmNvb2tpZV9pcHY0Olxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODc1OD14ZHBfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3ODYtXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfeGRwX2NoZWNrX210dV9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4Nzg3OiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3ODgtXFx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdWRwOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODc5OS1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl90Y3BfZ2VuX3N5bmNvb2tpZV9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4ODAwOiNpZmRlZiBDT05GSUdfU1lOX0NPT0tJRVNcXG5uZXQvY29yZS9maWx0ZXIuYy04ODAxLVxcdGNhc2UgQlBGX0ZVTkNfdGNwX3Jhd19nZW5fc3luY29va2llX2lwdjQ6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04ODE0LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjg4MTU6I2lmIElTX01PRFVMRShDT05GSUdfTkZfQ09OTlRSQUNLKSBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg4MTYtXFx0LyogVGhlIG5mX2Nvbm5fX19pbml0IHR5cGUgaXMgdXNlZCBpbiB0aGUgTkZfQ09OTlRSQUNLIGtmdW5jcy4gVGhlXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04ODMzPXNvY2tfb3BzX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04ODYxLVxcdFxcdHJldHVybiBcXHUwMDI2YnBmX2dldF9uZXRuc19jb29raWVfc29ja19vcHNfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmM6ODg2MjojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy04ODYzLVxcdGNhc2UgQlBGX0ZVTkNfbG9hZF9oZHJfb3B0Olxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODkxNT1za19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg5MzktXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tiX2V2ZW50X291dHB1dF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4OTQwOiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTg5NDEtXFx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9OTA0ND1sd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy05MDQ2LVxcdHN3aXRjaCAoZnVuY19pZCkge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjkwNDc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXFxubmV0L2NvcmUvZmlsdGVyLmMtOTA0OC1cXHRjYXNlIEJQRl9GVU5DX2x3dF9zZWc2X3N0b3JlX2J5dGVzOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9OTkyMz1zdGF0aWMgc3RydWN0IGJwZl9pbnNuICpicGZfY29udmVydF90c3RhbXBfdHlwZV9yZWFkKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqc2ksXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy05OTMzLVxcdCppbnNuKysgPSBCUEZfQUxVMzJfSU1NKEJQRl9BTkQsIHZhbHVlX3JlZywgU0tCX1RTVEFNUF9UWVBFX01BU0spO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjk5MzQ6I2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRFxcbm5ldC9jb3JlL2ZpbHRlci5jLTk5MzUtXFx0Kmluc24rKyA9IEJQRl9BTFUzMl9JTU0oQlBGX1JTSCwgdmFsdWVfcmVnLCBTS0JfVFNUQU1QX1RZUEVfUlNISUZUKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTk5NDM9c3RhdGljIHN0cnVjdCBicGZfaW5zbiAqYnBmX2NvbnZlcnRfc2hpbmZvX2FjY2VzcyhfX3U4IGRzdF9yZWcsIF9fdTggc2tiX3JlZyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTk5NDYtXFx0Lyogc2ktXFx1MDAzZWRzdF9yZWcgPSBza2Jfc2hpbmZvKFNLQik7ICovXFxubmV0L2NvcmUvZmlsdGVyLmM6OTk0NzojaWZkZWYgTkVUX1NLQlVGRl9EQVRBX1VTRVNfT0ZGU0VUXFxubmV0L2NvcmUvZmlsdGVyLmMtOTk0OC1cXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX0ZJRUxEX1NJWkVPRihzdHJ1Y3Qgc2tfYnVmZiwgZW5kKSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTk5NjQ9c3RhdGljIHN0cnVjdCBicGZfaW5zbiAqYnBmX2NvbnZlcnRfdHN0YW1wX3JlYWQoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtOTk3MC1cXG5uZXQvY29yZS9maWx0ZXIuYzo5OTcxOiNpZmRlZiBDT05GSUdfTkVUX1hHUkVTU1xcbm5ldC9jb3JlL2ZpbHRlci5jLTk5NzItXFx0LyogSWYgdGhlIHRzdGFtcF90eXBlIGlzIHJlYWQsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz05OTk5PXN0YXRpYyBzdHJ1Y3QgYnBmX2luc24gKmJwZl9jb252ZXJ0X3RzdGFtcF93cml0ZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMDAwNS1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMDAwNjojaWZkZWYgQ09ORklHX05FVF9YR1JFU1NcXG5uZXQvY29yZS9maWx0ZXIuYy0xMDAwNy1cXHQvKiBJZiB0aGUgdHN0YW1wX3R5cGUgaXMgcmVhZCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEwMDM3PXN0YXRpYyB1MzIgYnBmX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTAxMTItXFx0XFx0Kmluc24rKyA9IEJQRl9BTFUzMl9JTU0oQlBGX0FORCwgc2ktXFx1MDAzZWRzdF9yZWcsIFBLVF9UWVBFX01BWCk7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTAxMTM6I2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwMTE0LVxcdFxcdCppbnNuKysgPSBCUEZfQUxVMzJfSU1NKEJQRl9SU0gsIHNpLVxcdTAwM2Vkc3RfcmVnLCA1KTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwMjEwLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IF9fc2tfYnVmZiwgdGNfaW5kZXgpOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjEwMjExOiNpZmRlZiBDT05GSUdfTkVUX1NDSEVEXFxubmV0L2NvcmUvZmlsdGVyLmMtMTAyMTItXFx0XFx0aWYgKHR5cGUgPT0gQlBGX1dSSVRFKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTAyMjktXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgX19za19idWZmLCBuYXBpX2lkKTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMDIzMDojaWYgZGVmaW5lZChDT05GSUdfTkVUX1JYX0JVU1lfUE9MTClcXG5uZXQvY29yZS9maWx0ZXIuYy0xMDIzMS1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwMjc2LVxcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IF9fc2tfYnVmZiwgcmVtb3RlX2lwNlszXSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTAyNzc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTAyNzgtXFx0XFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMDI5Ni1cXHQgICAgIG9mZnNldG9mKHN0cnVjdCBfX3NrX2J1ZmYsIGxvY2FsX2lwNlszXSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTAyOTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTAyOTgtXFx0XFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMDMyNS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIDIsIHRhcmdldF9zaXplKSk7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTAzMjY6I2lmbmRlZiBfX0JJR19FTkRJQU5fQklURklFTERcXG5uZXQvY29yZS9maWx0ZXIuYy0xMDMyNy1cXHRcXHQqaW5zbisrID0gQlBGX0FMVTMyX0lNTShCUEZfTFNILCBzaS1cXHUwMDNlZHN0X3JlZywgMTYpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTA0MDM9dTMyIGJwZl9zb2NrX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTA0OTItXFx0Y2FzZSBicGZfY3R4X3JhbmdlX3RpbGwoc3RydWN0IGJwZl9zb2NrLCBzcmNfaXA2WzBdLCBzcmNfaXA2WzNdKTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMDQ5MzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy0xMDQ5NC1cXHRcXHRvZmYgPSBzaS1cXHUwMDNlb2ZmO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTA1MTAtXFx0Y2FzZSBicGZfY3R4X3JhbmdlX3RpbGwoc3RydWN0IGJwZl9zb2NrLCBkc3RfaXA2WzBdLCBkc3RfaXA2WzNdKTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMDUxMTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy0xMDUxMi1cXHRcXHRvZmYgPSBzaS1cXHUwMDNlb2ZmO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTA1NTYtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2ssIHJ4X3F1ZXVlX21hcHBpbmcpOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjEwNTU3OiNpZmRlZiBDT05GSUdfU09DS19SWF9RVUVVRV9NQVBQSU5HXFxubmV0L2NvcmUvZmlsdGVyLmMtMTA1NTgtXFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTA4MTU9c3RhdGljIHUzMiBzb2NrX29wc19jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExMDIwLVxcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgcmVtb3RlX2lwNlszXSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTEwMjE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTEwMjItXFx0XFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTA0MS1cXHQgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIGxvY2FsX2lwNlszXSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTEwNDI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTEwNDMtXFx0XFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTA2OS1cXHRcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc29ja19jb21tb24sIHNrY19kcG9ydCkpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjExMDcwOiNpZm5kZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxEXFxubmV0L2NvcmUvZmlsdGVyLmMtMTEwNzEtXFx0XFx0Kmluc24rKyA9IEJQRl9BTFUzMl9JTU0oQlBGX0xTSCwgc2ktXFx1MDAzZWRzdF9yZWcsIDE2KTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTExMzUwPXN0YXRpYyB1MzIgc2tfbXNnX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTEzNTUtXFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTEzNTY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTEzNTctXFx0aW50IG9mZjtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNDEwLVxcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IHNrX21zZ19tZCwgcmVtb3RlX2lwNlszXSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE0MTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE0MTItXFx0XFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTQzMS1cXHQgICAgIG9mZnNldG9mKHN0cnVjdCBza19tc2dfbWQsIGxvY2FsX2lwNlszXSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE0MzI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE0MzMtXFx0XFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTQ1OS1cXHRcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc29ja19jb21tb24sIHNrY19kcG9ydCkpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjExNDYwOiNpZm5kZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxEXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE0NjEtXFx0XFx0Kmluc24rKyA9IEJQRl9BTFUzMl9JTU0oQlBGX0xTSCwgc2ktXFx1MDAzZWRzdF9yZWcsIDE2KTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTExNjU1PWludCBza19nZXRfZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IGxlbilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNjk3LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExNjk4OiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNjk5LXN0YXRpYyB2b2lkIGJwZl9pbml0X3JldXNlcG9ydF9rZXJuKHN0cnVjdCBza19yZXVzZXBvcnRfa2VybiAqcmV1c2Vfa2VybixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMDc2PXN0YXRpYyB1MzIgc2tfbG9va3VwX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxMTUtXFx0XFx0XFx0XFx0cmVtb3RlX2lwNlswXSwgcmVtb3RlX2lwNlszXSk6IHtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjExNjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjExNy1cXHRcXHRpbnQgb2ZmID0gc2ktXFx1MDAzZW9mZjtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTMxLVxcdFxcdFxcdFxcdGxvY2FsX2lwNlswXSwgbG9jYWxfaXA2WzNdKToge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTMyOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTMzLVxcdFxcdGludCBvZmYgPSBzaS1cXHUwMDNlb2ZmO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTIyMzQ9QlBGX0NBTExfMShicGZfc2tjX3RvX3RjcF90aW1ld2FpdF9zb2NrLCBzdHJ1Y3Qgc29jayAqLCBzaylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjQxLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjQyOiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjQzLVxcdGlmIChzayBcXHUwMDI2XFx1MDAyNiBzay1cXHUwMDNlc2tfcHJvdCA9PSBcXHUwMDI2dGNwX3Byb3QgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9USU1FX1dBSVQpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI0Ni1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjI0NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI0OC1cXHRpZiAoc2sgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3Byb3QgPT0gXFx1MDAyNnRjcHY2X3Byb3QgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9USU1FX1dBSVQpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjI2Mz1CUEZfQ0FMTF8xKGJwZl9za2NfdG9fdGNwX3JlcXVlc3Rfc29jaywgc3RydWN0IHNvY2sgKiwgc2spXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyNjQte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjY1OiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjY2LVxcdGlmIChzayBcXHUwMDI2XFx1MDAyNiBzay1cXHUwMDNlc2tfcHJvdCA9PSBcXHUwMDI2dGNwX3Byb3QgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9ORVdfU1lOX1JFQ1YpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI2OS1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjI3MDojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI3MS1cXHRpZiAoc2sgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3Byb3QgPT0gXFx1MDAyNnRjcHY2X3Byb3QgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9ORVdfU1lOX1JFQ1YpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjUwND1fX2JwZl9rZnVuYyBpbnQgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2soc3RydWN0IF9fc2tfYnVmZiAqcywgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI1MDYte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNTA3OiNpZiBJU19FTkFCTEVEKENPTkZJR19TWU5fQ09PS0lFUylcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjUwOC1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopcztcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTMyLVxcdFxcdGJyZWFrO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNTMzOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTM0LVxcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjczMz1fX2JwZl9rZnVuYyBpbnQgYnBmX2ljbXBfc2VuZChzdHJ1Y3QgX19za19idWZmICpza2JfY3R4LCBpbnQgdHlwZSwgaW50IGNvZGUpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjc0Ni1cXHRzd2l0Y2ggKHNrYi1cXHUwMDNlcHJvdG9jb2wpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjc0NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjc0OC1cXHRjYXNlIGh0b25zKEVUSF9QX0lQKToge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI3NjYtI2VuZGlmXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI3Njc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI3NjgtXFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KToge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMzoyMToxNi41OTU0MzE2NjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk2NDUxNDE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGJwZl9zb2NrX2Rlc3Ryb3kgUmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBob3cgYGJwZl9zb2NrX2Rlc3Ryb3lgIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBpdHMgcmVnaXN0cmF0aW9uLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgaXQncyByZWdpc3RlcmVkIHRocm91Z2ggQlRGIGtmdW5jcywgYW5kIHRoZSBsb2NhdGlvbiBwb2ludGVkIHRvIGlzIGBuZXQvY29yZS9maWx0ZXIuY2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgYSBjb21tb24gcGxhY2UgZm9yIG5ldHdvcmstcmVsYXRlZCBCUEYgaG9va3MuXG5cblNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCB0aGUgcmVnaXN0cmF0aW9uIHVzZXMgYEJURl9LRlVOQ1NfU1RBUlQoYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzKWAgYW5kIHRoYXQgYGJwZl9zb2NrX2Rlc3Ryb3lgIGl0c2VsZiBpcyBsaW5rZWQgdmlhIGBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfZGVzdHJveSlgLiBUaGlzIGlzIHN0YW5kYXJkIEJURi1iYXNlZCBmdW5jdGlvbiByZWdpc3RyYXRpb247IHRoZSBgQlRGX0lEX0ZMQUdTYCBtYWNybyBjbGVhcmx5IGFzc29jaWF0ZXMgdGhlIGZ1bmN0aW9uIHdpdGggYW4gSUQgdGhhdCB0aGUgQlBGIHZlcmlmaWVyIG9yIG90aGVyIHBhcnRzIG9mIHRoZSBCUEYgaW5mcmFzdHJ1Y3R1cmUgd2lsbCB1c2UuXG5cbk5vdywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzYCB3aXRoaW4gdGhpcyBmaWxlLiBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIHN0cnVjdHVyZSwgYGJwZl9za19pdGVyX2tmdW5jX2lkc2AsIGlzICp1c2VkKiBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGF0IHdpbGwgaWxsdW1pbmF0ZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgYnBmX3NvY2tfZGVzdHJveWAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2Ygc29ja2V0IGl0ZXJhdGlvbiBhbmQgQlBGIHByb2dyYW0gaW50ZXJhY3Rpb24gd2l0aGluIHRoZSBrZXJuZWwncyBuZXR3b3JrIHN0YWNrLiBVbmRlcnN0YW5kaW5nIHRoZSB1c2FnZSBjb250ZXh0IGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbidzIHJvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTU5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIxOjE5LjU1OTk0ODQxNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3OTYxODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0xMjkzOT1fX2JwZl9rZnVuY19lbmRfZGVmcygpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTQwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTQxOkJURl9LRlVOQ1NfU1RBUlQoYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTQyLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfc29ja19kZXN0cm95KVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTQzOkJURl9LRlVOQ1NfRU5EKGJwZl9za19pdGVyX2tmdW5jX2lkcylcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk0NC1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjk0NT1zdGF0aWMgaW50IHRyYWNpbmdfaXRlcl9maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NDYte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTQ3OlxcdGlmIChidGZfaWRfc2V0OF9jb250YWlucyhcXHUwMDI2YnBmX3NrX2l0ZXJfa2Z1bmNfaWRzLCBrZnVuY19pZCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk0OC1cXHQgICAgcHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgIT0gQlBGX1RSQUNFX0lURVIpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjk1Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX3NrX2l0ZXJfa2Z1bmNfc2V0ID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTU0LVxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTU1OlxcdC5zZXQgICA9IFxcdTAwMjZicGZfc2tfaXRlcl9rZnVuY19pZHMsXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NTYtXFx0LmZpbHRlciA9IHRyYWNpbmdfaXRlcl9maWx0ZXIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIxOjE5LjYwNTc0OTQ2NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjI1MjU4MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBmdW5jdGlvbjpcblxuKipGaW5kaW5nIHRoZSBSZWdpc3RyYXRpb24gb2YgYGJwZl9za19pdGVyX2tmdW5jX3NldGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgYnBmX3NrX2l0ZXJfa2Z1bmNfc2V0YCBpcyBhY3R1YWxseSBkZWZpbmVkLCBvciBhdCBsZWFzdCBob3cgaXQncyBicm91Z2h0IGludG8gdGhlIHN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdHJhY2UgaXRzIHJlZ2lzdHJhdGlvbi4gV2hlcmUgZG9lcyB0aGUga2VybmVsIGtub3cgYWJvdXQgdGhpcyB0aGluZz8gSSBuZWVkIHRvIGZpbmQgdGhlIHBvaW50IHdoZXJlIGl0J3MgaG9va2VkIGludG8gdGhlIEJQRiBzdWJzeXN0ZW0sIG9yIG1heWJlIGV2ZW4ganVzdCBkZWNsYXJlZCBhcyBhIGtub3duIGtlcm5lbCBmdW5jdGlvbi4gSSdtIHRoaW5raW5nIEknbGwgbmVlZCB0byBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UsIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggdGhlIEJQRi1yZWxhdGVkIGRpcmVjdG9yaWVzLCB0byBmaW5kIHRoZSByZWdpc3RyYXRpb24gcG9pbnQuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHBhcnQgb2YgdGhlIEJQRiBpdGVyYXRvciBmdW5jdGlvbmFsaXR5LCBzbyB0aGF0IG5hcnJvd3MgdGhlIHNlYXJjaCBzb21ld2hhdC4gTGV0J3Mgc3RhcnQgZGlnZ2luZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjMwNDksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMzoyMToyMy44MzEwMTA5ODNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTg4NDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9za19pdGVyX2tmdW5jX3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9MTI5NDU9c3RhdGljIGludCB0cmFjaW5nX2l0ZXJfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NTItXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI5NTM6c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9za19pdGVyX2tmdW5jX3NldCA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk1NC1cXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyOTU5PXN0YXRpYyBpbnQgaW5pdF9zdWJzeXN0ZW0odm9pZClcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk2MC17XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI5NjE6XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcXHUwMDI2YnBmX3NrX2l0ZXJfa2Z1bmNfc2V0KTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk2Mi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIxOjIzLjg3ODIwNjI0NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1Nzk5ODcwNzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgU3ltYm9sIE1vZGlmaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBhIGZldyBrZXJuZWwgY29uZmlndXJhdGlvbnMg4oCTIHNwZWNpZmljYWxseSBgQlBGX1NZU0NBTExgIGFuZCBgREVCVUdfSU5GT19CVEZgLiBJIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIGZvciBCUEYga2Z1bmNzLCBCUEYgaXRlcmF0b3JzLCBhbmQgdGhlIGBpbmV0YCBzdGFjay4gU28sIHRoZSBiYXNlIHJlcXVpcmVtZW50cyBhcmUgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfREVCVUdfSU5GT19CVEZgLCBhbmQgYENPTkZJR19JTkVUYC5cblxuTm93LCBsZXQncyBsb29rIGF0IGBpbmV0X2Nza19saXN0ZW5fc3RvcGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0J3MgYWN0dWFsbHkgY29tcGlsZWQuIEFoLCByaWdodCwgaXQncyBpbiBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2AsIHdoaWNoIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19JTkVUYCBpcyBlbmFibGVkLiBNYWtlcyBzZW5zZS5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgcGF0Y2guIFRoZSBrZXkgc3ltYm9scyBtb2RpZmllZCBzZWVtIHRvIGJlOlxuMS4gIGBicGZfc29ja19kZXN0cm95YCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgXG4yLiAgYGluZXRfY3NrX2xpc3Rlbl9zdG9wYCBpbiBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2BcblxuSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGhvdyB3aWRlc3ByZWFkIHRoZXNlIGZ1bmN0aW9ucyBhcmUuIGBicGZfc29ja19kZXN0cm95YD8gRGVmaW5pdGVseSBub3QgdWJpcXVpdG91cy4gSXQncyBhIHZlcnkgc3BlY2lmaWMga2Z1bmMgY2FsbGVkIHdoZW4gQlBGIGl0ZXJhdG9ycyBhcmUgdXNlZCB0byBkZXN0cm95IHNvY2tldHMuIFdoYXQgYWJvdXQgYGluZXRfY3NrX2xpc3Rlbl9zdG9wYD8gT2theSwgdGhhdCdzIGNhbGxlZCB3aGVuIGEgbGlzdGVuaW5nIGNvbm5lY3Rpb24gc29ja2V0IHN0b3BzIGxpc3RlbmluZzsgdGhpbmdzIGxpa2UgYHRjcF9jbG9zZWAgb24gYSBsaXN0ZW5pbmcgc29ja2V0IG9yIGB0Y3BfYWJvcnRgIGFuZCBgdGNwX2RpYWdfZGVzdHJveWAuIElzIGl0IHViaXF1aXRvdXM/IE5vLCBpdCdzIHNwZWNpZmljIHRvIHN0b3BwaW5nL2Nsb3NpbmcgYSBsaXN0ZW5pbmcgc29ja2V0IGFuZCBhYm9ydGluZyBpdHMgcGVuZGluZyBjb25uZWN0aW9uIHF1ZXVlLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgcHVycG9zZSBvZiBgaGFzX2N1cnJlbnRfYnBmX2N0eCgpYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1MjIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjE6MjkuNjc4MDc5NTM3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEzNjkyNTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhc19jdXJyZW50X2JwZl9jdHhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0zMjAxPXN0YXRpYyBpbmxpbmUgYm9vbCB1bnByaXZpbGVnZWRfZWJwZl9lbmFibGVkKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTMyMTAtICovXFxuaW5jbHVkZS9saW51eC9icGYuaDozMjExOnN0YXRpYyBpbmxpbmUgYm9vbCBoYXNfY3VycmVudF9icGZfY3R4KHZvaWQpXFxuaW5jbHVkZS9saW51eC9icGYuaC0zMjEyLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9MzUzMT1zdGF0aWMgaW5saW5lIGJvb2wgdW5wcml2aWxlZ2VkX2VicGZfZW5hYmxlZCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNTM1LVxcbmluY2x1ZGUvbGludXgvYnBmLmg6MzUzNjpzdGF0aWMgaW5saW5lIGJvb2wgaGFzX2N1cnJlbnRfYnBmX2N0eCh2b2lkKVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzUzNy17XFxuLS1cXG5uZXQvY29yZS9zb2NrLmM9MTE0ND12b2lkIHNvY2tvcHRfbG9ja19zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9jb3JlL3NvY2suYy0xMTQ5LVxcdCAqL1xcbm5ldC9jb3JlL3NvY2suYzoxMTUwOlxcdGlmIChoYXNfY3VycmVudF9icGZfY3R4KCkpXFxubmV0L2NvcmUvc29jay5jLTExNTEtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2NvcmUvc29jay5jPTExNTc9dm9pZCBzb2Nrb3B0X3JlbGVhc2Vfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc29jay5jLTExNTgte1xcbm5ldC9jb3JlL3NvY2suYzoxMTU5OlxcdGlmIChoYXNfY3VycmVudF9icGZfY3R4KCkpXFxubmV0L2NvcmUvc29jay5jLTExNjAtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2NvcmUvc29jay5jPTExNjY9Ym9vbCBzb2Nrb3B0X25zX2NhcGFibGUoc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucywgaW50IGNhcClcXG5uZXQvY29yZS9zb2NrLmMtMTE2Ny17XFxubmV0L2NvcmUvc29jay5jOjExNjg6XFx0cmV0dXJuIGhhc19jdXJyZW50X2JwZl9jdHgoKSB8fCBuc19jYXBhYmxlKG5zLCBjYXApO1xcbm5ldC9jb3JlL3NvY2suYy0xMTY5LX1cXG4tLVxcbm5ldC9jb3JlL3NvY2suYz0xMTcyPWJvb2wgc29ja29wdF9jYXBhYmxlKGludCBjYXApXFxubmV0L2NvcmUvc29jay5jLTExNzMte1xcbm5ldC9jb3JlL3NvY2suYzoxMTc0OlxcdHJldHVybiBoYXNfY3VycmVudF9icGZfY3R4KCkgfHwgY2FwYWJsZShjYXApO1xcbm5ldC9jb3JlL3NvY2suYy0xMTc1LX1cXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTQ2Nj12b2lkIGluZXRfY3NrX2xpc3Rlbl9zdG9wKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTUyMi1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjE1MjM6XFx0XFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNTI0LVxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxubmV0L2lwdjQvdGNwLmM9MzgzNz1pbnQgZG9fdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMzg2MC1cXHRcXHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XFxubmV0L2lwdjQvdGNwLmM6Mzg2MTpcXHRcXHRlcnIgPSB0Y3Bfc2V0X2Nvbmdlc3Rpb25fY29udHJvbChzaywgbmFtZSwgIWhhc19jdXJyZW50X2JwZl9jdHgoKSxcXG5uZXQvaXB2NC90Y3AuYy0zODYyLVxcdFxcdFxcdFxcdFxcdFxcdCBzb2Nrb3B0X25zX2NhcGFibGUoc29ja19uZXQoc2spLVxcdTAwM2V1c2VyX25zLFxcbi0tXFxubmV0L2lwdjQvdGNwLmM9NTExNT1pbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycilcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTUxMzctXFx0LyogQlBGIGNvbnRleHQgZW5zdXJlcyBzb2NrIGxvY2tpbmcuICovXFxubmV0L2lwdjQvdGNwLmM6NTEzODpcXHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcXG5uZXQvaXB2NC90Y3AuYy01MTM5LVxcdFxcdC8qIERvbid0IHJhY2Ugd2l0aCB1c2Vyc3BhY2Ugc29ja2V0IGNsb3NlcyBzdWNoIGFzIHRjcF9jbG9zZS4gKi9cXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTUxNDMtXFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHtcXG5uZXQvaXB2NC90Y3AuYzo1MTQ0OlxcdFxcdGlmICghaGFzX2N1cnJlbnRfYnBmX2N0eCgpKVxcbm5ldC9pcHY0L3RjcC5jLTUxNDUtXFx0XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTUxNjMtXFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxubmV0L2lwdjQvdGNwLmM6NTE2NDpcXHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcXG5uZXQvaXB2NC90Y3AuYy01MTY1LVxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0zMTIxPWludCB1ZHBfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKVxcbm5ldC9pcHY0L3VkcC5jLTMxMjIte1xcbm5ldC9pcHY0L3VkcC5jOjMxMjM6XFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXFxubmV0L2lwdjQvdWRwLmMtMzEyNC1cXHRcXHRsb2NrX3NvY2soc2spO1xcbi0tXFxubmV0L2lwdjQvdWRwLmMtMzEzNi1vdXQ6XFxubmV0L2lwdjQvdWRwLmM6MzEzNzpcXHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcXG5uZXQvaXB2NC91ZHAuYy0zMTM4LVxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIxOjMxLjM5MTc3OTAyMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDkyNzY1NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgZXZlcnl0aGluZyBhcHBlYXJzIHRvIGJlIGluIG9yZGVyIGhlcmUuIFRoZSBjaGFuZ2VzIGFyZSBzdHJhaWdodGZvcndhcmQgYW5kIGludGVybmFsbHkgY29uc2lzdGVudC4gTGV0J3MgcnVuIHRocm91Z2ggaXQgb25lIGxhc3QgdGltZSB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cbkZpcnN0LCB0aGUgY29yZSBtb2RpZmljYXRpb25zIGFyZSBjbGVhcjogd2UncmUgZGVhbGluZyB3aXRoIGBicGZfc29ja19kZXN0cm95YCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIGFuZCBgaW5ldF9jc2tfbGlzdGVuX3N0b3BgIGluIGBuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jYC4gVGhhdCdzIHRoZSBoZWFydCBvZiBpdC4gVGhlIFwiV29ydGhGdXp6aW5nXCIgZmxhZyBpcyBzZXQsIHdoaWNoIGlzIGEgZ29vZCBpbmRpY2F0b3IsIGFuZCB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmUgcHJlY2lzZWx5IHRob3NlOiBgYnBmX3NvY2tfZGVzdHJveWAgYW5kIGBpbmV0X2Nza19saXN0ZW5fc3RvcGAuXG5cblRoZW4sIHdlIGhhdmUgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zOiBgQlBGX1NZU0NBTExgLCBgREVCVUdfSU5GT19CVEZgLCBhbmQgYElORVRgLiBUaGlzIG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgY29udGV4dCBvZiBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBCUEYgaW50ZXJhY3Rpb25zLiBMZXQgbWUgcXVpY2tseSBzY2FuIGZvciBhbnkgb3RoZXIgdG91Y2hlZCBmdW5jdGlvbnM7IE5vcGUsIGp1c3QgdGhvc2UgdHdvIOKAkyBgYnBmX3NvY2tfZGVzdHJveWAgYW5kIGBpbmV0X2Nza19saXN0ZW5fc3RvcGAuIEdvb2QuIEFuZCB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5IGNoYW5nZXMgYXJlIGp1c3QgdGVzdC1yZWxhdGVkLCBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhlcmUuXG5cbk5vdywgdG8gc29saWRpZnkgdGhlIHJlYXNvbmluZzogVGhlIHBhdGNoJ3MgcHVycG9zZSBpcyB0byBhbGxvdyBgYnBmX3NvY2tfZGVzdHJveSgpYCB0byBoYW5kbGUgbm9uLWZ1bGwgc29ja2V0cywgbGlrZSB0aG9zZSBpbiBUSU1FX1dBSVQgc3RhdGUsIHVzaW5nIGBkaWFnX2Rlc3Ryb3lgIGNhbGxiYWNrcy4gQW5kIHdpdGggYGluZXRfY3NrX2xpc3Rlbl9zdG9wKClgLCB3ZSdyZSBieXBhc3NpbmcgYGNvbmRfcmVzY2hlZCgpYCB3aGVuIGl0J3MgcnVubmluZyBpbiBhIEJQRiBjb250ZXh0IHZpYSBgaGFzX2N1cnJlbnRfYnBmX2N0eCgpYC4gTWFrZXMgc2Vuc2UsIGNvbnNpZGVyaW5nIHRoZSBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBCUEYga2Z1bmMgZXhlY3V0aW9uIHBhdGhzIGFjY2Vzc2VkIHZpYSBCUEYgaXRlcmF0b3IgcHJvZ3JhbXMgYW5kIHNvY2tldCBzeXNjYWxscyB0aGF0IHRoZXNlIGNoYW5nZXMgbW9kaWZ5LlxuXG5BbHJpZ2h0LCB0aGF0J3MgdGhvcm91Z2guIEknbSBzYXRpc2ZpZWQuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU0OTcsIk91dHB1dFRva2VucyI6MTU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIxOjM2LjQ4NDU0ODMzMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NjkxODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc29ja19kZXN0cm95XCIsXG4gICAgXCJpbmV0X2Nza19saXN0ZW5fc3RvcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBicGZfc29ja19kZXN0cm95KCkgQlBGIGtmdW5jIHRvIHBlcm1pdCBkZXN0cm95aW5nIG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBzb2NrZXRzKSB0aGF0IGltcGxlbWVudCBkaWFnX2Rlc3Ryb3ksIGFuZCBhZGp1c3RzIGluZXRfY3NrX2xpc3Rlbl9zdG9wKCkgdG8gYXZvaWQgY2FsbGluZyBjb25kX3Jlc2NoZWQoKSB3aGlsZSBleGVjdXRpbmcgaW4gYSBCUEYgY29udGV4dC4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBCUEYgc29ja2V0IGl0ZXJhdGlvbi9kZXN0cnVjdGlvbiBwYXRocyB0aGF0IHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc29ja19kZXN0cm95XCIsXG4gICAgXCJpbmV0X2Nza19saXN0ZW5fc3RvcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBicGZfc29ja19kZXN0cm95KCkgQlBGIGtmdW5jIHRvIHBlcm1pdCBkZXN0cm95aW5nIG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBzb2NrZXRzKSB0aGF0IGltcGxlbWVudCBkaWFnX2Rlc3Ryb3ksIGFuZCBhZGp1c3RzIGluZXRfY3NrX2xpc3Rlbl9zdG9wKCkgdG8gYXZvaWQgY2FsbGluZyBjb25kX3Jlc2NoZWQoKSB3aGlsZSBleGVjdXRpbmcgaW4gYSBCUEYgY29udGV4dC4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBCUEYgc29ja2V0IGl0ZXJhdGlvbi9kZXN0cnVjdGlvbiBwYXRocyB0aGF0IHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjE6MzYuNTYxMjQ3OTE0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTI1NTQzNDc4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIxOjM2LjU2MTk3NTgzNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ1MjU0NzAyNTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX3NvY2tfZGVzdHJveSgpYCB0byBzdXBwb3J0IG5vbi1mdWxsIHNvY2tldHMgKGUuZy4sIFRDUCBUSU1FX1dBSVQgc29ja2V0cykgYnkgZ3VhcmRpbmcgdGhlIGBzay1cXHUwMDNlc2tfcHJvdG9jb2xgIGNoZWNrIHdpdGggYHNrX2Z1bGxzb2NrKClgLCBhbmQgdXBkYXRlcyBgaW5ldF9jc2tfbGlzdGVuX3N0b3AoKWAgdG8gYnlwYXNzIGBjb25kX3Jlc2NoZWQoKWAgd2hlbiBydW5uaW5nIHdpdGhpbiBhIEJQRiBleGVjdXRpb24gY29udGV4dCB0byBwcmV2ZW50IHNsZWVwaW5nIGluIGF0b21pYy9SQ1UgY29udGV4dHMuXFxuXFxuVGhlc2UgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBjb3B5LXRvLXVzZXIgb3BlcmF0aW9ucywgb3IgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBwb3RlbnRpYWwgcmlza3MgcmVsYXRlZCB0byBzb2NrZXQgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgZXhlY3V0aW9uIGNvbnRleHQgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyBhbmQgZGVidWdnZXJzIChLQVNBTiBmb3IgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcywgTE9DS0RFUCAvIERFQlVHX0FUT01JQ19TTEVFUCBmb3Igc2xlZXBpbmcgaW4gYXRvbWljIGNvbnRleHQpLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzODhkOTU1ODgxM2FmNjQ4ZmY5NDJjNjdhZmUxYjY1ZGQxY2JjZDU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTM6MjA6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCA4NTEzMTY3YTg1OGE4Li5kOWM0YTEwOGRkYjVlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtMTI5MTEsOCArMTI5MTEsOSBAQCBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4gICogQHNvY2s6IFBvaW50ZXIgdG8gc29ja2V0IHRvIGJlIGRlc3Ryb3llZFxuICAqXG4gICogUmV0dXJuOlxuLSAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVQUk9UT05PU1VQUE9SVCwgRUlOVkFMLlxuLSAqIEVQUk9UT05PU1VQUE9SVCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC5cbisgKiBPbiBlcnJvciwgbWF5IHJldHVybiBFT1BOT1RTVVBQLCBvciB3aGF0ZXZlciB0aGUgcHJvdG9jb2wgc3BlY2lmaWNcbisgKiBkZXN0cm95IGhhbmRsZXIgcmV0dXJucy5cbisgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxuICAqIDAgb3RoZXJ3aXNlXG4gICovXG4gX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxuQEAgLTEyOTI0LDggKzEyOTI1LDEyIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaylcbiBcdCAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHRcbiBcdCAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuXG4gXHQgKi9cbi1cdGlmICghc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3kgfHwgKHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0XHQgICBzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUCkpXG4rXHRpZiAoIXNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95KVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRpZiAoc2tfZnVsbHNvY2soc2spIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4gXHRyZXR1cm4gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbmluZGV4IDYyNTc0NTliY2VlMjQuLjZhMzBmMTEzODQ1NDcgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG4rKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG5AQCAtMTUyMCw3ICsxNTIwLDggQEAgdm9pZCBpbmV0X2Nza19saXN0ZW5fc3RvcChzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFx0XHRzb2NrX3B1dChjaGlsZCk7XG4gXG4tXHRcdGNvbmRfcmVzY2hlZCgpO1xuK1x0XHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcbitcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdH1cbiBcdGlmIChxdWV1ZS1cdTAwM2VmYXN0b3BlbnEucnNrcV9yc3RfaGVhZCkge1xuIFx0XHQvKiBGcmVlIGFsbCB0aGUgcmVxcyBxdWV1ZWQgaW4gcnNrcV9yc3RfaGVhZC4gKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXG5pbmRleCA5YzExOTM4ZmU1OTdkLi43OGQ2NDJhMDJiZGI2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXG5AQCAtMSw0ICsxLDUgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2JwZi9icGZfZW5kaWFuLmhcdTAwM2VcbiBcbkBAIC0xMTAsNiArMTExLDEyMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3RjcF9zZXJ2ZXIoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxuIFx0XHRjbG9zZShzZXJ2KTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdGVzdF90Y3BfbGlzdGVuX3BlbmRpbmcoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxuK3tcbitcdGludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIGFjY2VwdF9zZXJ2ID0gLTEsIG4sIHNlcnZfcG9ydDtcbitcdHN0cnVjdCBwb2xsZmQgcGZkID0geyAuZXZlbnRzID0gUE9MTElOIH07XG4rXHRjaGFyIGJ1ZlsxXTtcbitcbitcdHNlcnYgPSBzdGFydF9zZXJ2ZXIoQUZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBOVUxMLCAwLCAwKTtcbitcdGlmICghQVNTRVJUX0dFKHNlcnYsIDAsIFwic3RhcnRfc2VydmVyXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRzZXJ2X3BvcnQgPSBnZXRfc29ja2V0X2xvY2FsX3BvcnQoc2Vydik7XG4rXHRpZiAoIUFTU0VSVF9HRShzZXJ2X3BvcnQsIDAsIFwiZ2V0X3NvY2tfbG9jYWxfcG9ydFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlc2Vydl9wb3J0ID0gKF9fYmUxNilzZXJ2X3BvcnQ7XG4rXG4rXHQvKlxuK1x0ICogQ29ubmVjdCBidXQgbmV2ZXIgYWNjZXB0LCBzbyB0aGUgY2hpbGQgc2l0cyBpbiB0aGUgYWNjZXB0IHF1ZXVlXG4rXHQgKiBvZiB0aGUgbGlzdGVuZXIuIFdhaXQgdW50aWwgaXQncyBhY3R1YWxseSB0aGVyZS5cbitcdCAqL1xuK1x0Y2xpZW4gPSBjb25uZWN0X3RvX2ZkKHNlcnYsIDApO1xuK1x0aWYgKCFBU1NFUlRfR0UoY2xpZW4sIDAsIFwiY29ubmVjdF90b19mZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0cGZkLmZkID0gc2VydjtcbitcdGlmICghQVNTRVJUX0VRKHBvbGwoXHUwMDI2cGZkLCAxLCAtMSksIDEsIFwicG9sbCBsaXN0ZW5lclwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LyogUnVuIGl0ZXJhdG9yIHByb2dyYW0gdGhhdCBkZXN0cm95cyBzZXJ2ZXIgc29ja2V0cy4gKi9cbitcdHN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLVx1MDAzZXByb2dzLml0ZXJfdGNwNl9zZXJ2ZXIpO1xuK1xuK1x0YWNjZXB0X3NlcnYgPSBhY2NlcHQoc2VydiwgTlVMTCwgTlVMTCk7XG4rXHRpZiAoIUFTU0VSVF9MVChhY2NlcHRfc2VydiwgMCwgXCJhY2NlcHQgb24gZGVzdHJveWVkIGxpc3RlbmVyXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRBU1NFUlRfRVEoZXJybm8sIEVJTlZBTCwgXCJlcnJvciBjb2RlIG9uIGRlc3Ryb3llZCBsaXN0ZW5lclwiKTtcbitcbitcdC8qIFRoZSB1bmFjY2VwdGVkIGNoaWxkIHdhcyByZXNldCBhbG9uZyB3aXRoIHRoZSBsaXN0ZW5lci4gKi9cbitcdG4gPSByZWN2KGNsaWVuLCBidWYsIHNpemVvZihidWYpLCAwKTtcbitcdGlmICghQVNTRVJUX0xUKG4sIDAsIFwiY2xpZW50IHJlY3Ygb24gcmVzZXQgY2hpbGRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdEFTU0VSVF9FUShlcnJubywgRUNPTk5SRVNFVCwgXCJlcnJvciBjb2RlIG9uIHJlc2V0IGNoaWxkXCIpO1xuK1xuK2NsZWFudXA6XG4rXHRpZiAoY2xpZW4gIT0gLTEpXG4rXHRcdGNsb3NlKGNsaWVuKTtcbitcdGlmIChhY2NlcHRfc2VydiAhPSAtMSlcbitcdFx0Y2xvc2UoYWNjZXB0X3NlcnYpO1xuK1x0aWYgKHNlcnYgIT0gLTEpXG4rXHRcdGNsb3NlKHNlcnYpO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X3RjcF90aW1ld2FpdChzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpXG4re1xuK1x0aW50IHNlcnYgPSAtMSwgY2xpZW4gPSAtMSwgYWNjZXB0X3NlcnYgPSAtMSwgbjtcbitcdHN0cnVjdCB0aW1ldmFsIHR2ID0ge307XG4rXHRjaGFyIGJ1ZlsxXTtcbitcbitcdHNlcnYgPSBzdGFydF9zZXJ2ZXIoQUZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBOVUxMLCAwLCAwKTtcbitcdGlmICghQVNTRVJUX0dFKHNlcnYsIDAsIFwic3RhcnRfc2VydmVyXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRjbGllbiA9IGNvbm5lY3RfdG9fZmQoc2VydiwgMCk7XG4rXHRpZiAoIUFTU0VSVF9HRShjbGllbiwgMCwgXCJjb25uZWN0X3RvX2ZkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRhY2NlcHRfc2VydiA9IGFjY2VwdChzZXJ2LCBOVUxMLCBOVUxMKTtcbitcdGlmICghQVNTRVJUX0dFKGFjY2VwdF9zZXJ2LCAwLCBcInNlcnYgYWNjZXB0XCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKlxuK1x0ICogQWN0aXZlIGNsb3NlIGZyb20gdGhlIGNsaWVudCwgdGhlbiBjbG9zZSB0aGUgc2VydmVyIHNpZGUuIE9uY2VcbitcdCAqIHJlY3YoKSBzZWVzIEVPRiB0aGUgc2VydmVyIEZJTiBoYXMgYmVlbiBwcm9jZXNzZWQgYW5kIHRoZSBjbGllbnRcbitcdCAqIHNvY2sgaXMgaW4gVElNRV9XQUlULiBCbG9jayB3aXRob3V0IHRpbWVvdXQgc28gYSBsb2FkZWQgQ0kgYm94XG4rXHQgKiBjYW4ndCByYWNlIHVzLlxuK1x0ICovXG4rXHRpZiAoIUFTU0VSVF9PSyhzZXRzb2Nrb3B0KGNsaWVuLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgXHUwMDI2dHYsXG4rXHRcdFx0XHQgIHNpemVvZih0dikpLCBcImNsZWFyIHJjdnRpbWVvXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRpZiAoIUFTU0VSVF9PSyhzaHV0ZG93bihjbGllbiwgU0hVVF9XUiksIFwiY2xpZW50IHNodXRkb3duXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKlxuK1x0ICogTWFrZSBzdXJlIHRoZSBzZXJ2ZXIgaGFzIHNlZW4gdGhlIGNsaWVudCBGSU4gYmVmb3JlIGl0IGNsb3NlcyxcbitcdCAqIHNvIHRoZSB0d28gRklOcyBuZXZlciBjcm9zcy5cbitcdCAqL1xuK1x0biA9IHJlY3YoYWNjZXB0X3NlcnYsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xuK1x0aWYgKCFBU1NFUlRfRVEobiwgMCwgXCJzZXJ2ZXIgcmVjdiBFT0ZcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGNsb3NlKGFjY2VwdF9zZXJ2KTtcbitcdGFjY2VwdF9zZXJ2ID0gLTE7XG4rXG4rXHQvKiBibG9jayB1bnRpbCByZXR1cm4gRU9GICovXG4rXHRuID0gcmVjdihjbGllbiwgYnVmLCBzaXplb2YoYnVmKSwgMCk7XG4rXHRpZiAoIUFTU0VSVF9FUShuLCAwLCBcImNsaWVudCByZWN2IEVPRlwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LyogUnVuIGl0ZXJhdG9yIHByb2dyYW0gdGhhdCBkZXN0cm95cyB0aGUgdGltZXdhaXQgY2xpZW50IHNvY2suICovXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0d19mb3VuZCA9IDA7XG4rXHRzdGFydF9pdGVyX3NvY2tldHMoc2tlbC1cdTAwM2Vwcm9ncy5pdGVyX3RjcDZfdGltZXdhaXQpO1xuK1x0aWYgKCFBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZm91bmQsIDEsIFwidGltZXdhaXQgc29jayBmb3VuZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0QVNTRVJUX09LKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2Rlc3Ryb3lfZXJyLCBcImRlc3Ryb3kgdGltZXdhaXQgc29ja1wiKTtcbitcbitcdC8qIFRoZSBkZXN0cm95ZWQgdGltZXdhaXQgc29jayBtdXN0IGJlIGdvbmUuICovXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0d19mb3VuZCA9IDA7XG4rXHRzdGFydF9pdGVyX3NvY2tldHMoc2tlbC1cdTAwM2Vwcm9ncy5pdGVyX3RjcDZfdGltZXdhaXQpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kLCAwLCBcInRpbWV3YWl0IHNvY2sgZGVzdHJveWVkXCIpO1xuK1xuK2NsZWFudXA6XG4rXHRpZiAoY2xpZW4gIT0gLTEpXG4rXHRcdGNsb3NlKGNsaWVuKTtcbitcdGlmIChhY2NlcHRfc2VydiAhPSAtMSlcbitcdFx0Y2xvc2UoYWNjZXB0X3NlcnYpO1xuK1x0aWYgKHNlcnYgIT0gLTEpXG4rXHRcdGNsb3NlKHNlcnYpO1xuK31cbitcbiBzdGF0aWMgdm9pZCB0ZXN0X3VkcF9jbGllbnQoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxuIHtcbiBcdGludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIG4gPSAwO1xuQEAgLTIwNCw2ICszMjEsMTAgQEAgdm9pZCB0ZXN0X3NvY2tfZGVzdHJveSh2b2lkKVxuIFx0XHR0ZXN0X3RjcF9jbGllbnQoc2tlbCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInRjcF9zZXJ2ZXJcIikpXG4gXHRcdHRlc3RfdGNwX3NlcnZlcihza2VsKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidGNwX2xpc3Rlbl9wZW5kaW5nXCIpKVxuK1x0XHR0ZXN0X3RjcF9saXN0ZW5fcGVuZGluZyhza2VsKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidGNwX3RpbWV3YWl0XCIpKVxuK1x0XHR0ZXN0X3RjcF90aW1ld2FpdChza2VsKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidWRwX2NsaWVudFwiKSlcbiBcdFx0dGVzdF91ZHBfY2xpZW50KHNrZWwpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ1ZHBfc2VydmVyXCIpKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcbmluZGV4IDllMGJmN2E1NGNlYzkuLjBhODg4NzU0MzIxOGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcbkBAIC03LDYgKzcsOCBAQFxuICNpbmNsdWRlIFwiYnBmX3RyYWNpbmdfbmV0LmhcIlxuIFxuIF9fYmUxNiBzZXJ2X3BvcnQgPSAwO1xuK2ludCB0d19mb3VuZCA9IDA7XG4raW50IHR3X2Rlc3Ryb3lfZXJyID0gMDtcbiBcbiBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNrKSBfX2tzeW07XG4gXG5AQCAtMTAwLDYgKzEwMiwzNCBAQCBpbnQgaXRlcl90Y3A2X3NlcnZlcihzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcIml0ZXIvdGNwXCIpXG4raW50IGl0ZXJfdGNwNl90aW1ld2FpdChzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxuK3tcbitcdHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tfY29tbW9uID0gY3R4LVx1MDAzZXNrX2NvbW1vbjtcbitcdF9fdTY0ICp2YWw7XG4rXHRpbnQga2V5ID0gMDtcbitcbitcdGlmICghc2tfY29tbW9uKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChza19jb21tb24tXHUwMDNlc2tjX2ZhbWlseSAhPSBBRl9JTkVUNilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoIWJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2soc2tfY29tbW9uKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRjcF9jb25uX3NvY2tldHMsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXHQvKiBUaGUgdGltZXdhaXQgc29jayBpbmhlcml0cyB0aGUgY29va2llIG9mIHRoZSBjbG9zZWQgY2xpZW50IHNvY2suICovXG4rXHRpZiAoYnBmX2dldF9zb2NrZXRfY29va2llKHNrX2NvbW1vbikgIT0gKnZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHR0d19mb3VuZCsrO1xuK1x0dHdfZGVzdHJveV9lcnIgPSBicGZfc29ja19kZXN0cm95KHNrX2NvbW1vbik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4gXG4gU0VDKFwiaXRlci91ZHBcIilcbiBpbnQgaXRlcl91ZHA2X2NsaWVudChzdHJ1Y3QgYnBmX2l0ZXJfX3VkcCAqY3R4KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjE6MzYuNTYxOTc3MTI1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4MzIwNTk1NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIHRoYXQgd2FycmFudCBLTVNBTiBvciBpZiBzdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQIHdpbGwgY3V0IGl0LlxuXG5GaXJzdCwgSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgZGlmZi4gU3BlY2lmaWNhbGx5LCB0aGlzIGNoYW5nZSBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHdpdGhpbiB0aGUgYGJwZl9zb2NrX2Rlc3Ryb3lgIGZ1bmN0aW9uLiBIbW0sIGl0IGxvb2tzIGxpa2UgdGhleSd2ZSByZW1vdmVkIGEgY2hlY2sgYW5kIGFkZGVkIGEgbmV3IG9uZTpcblxuYGBgY1xuLVx0aWYgKCFzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveSB8fCAoc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRcdCAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKSlcbitcdGlmICghc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3kpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGlmIChza19mdWxsc29jayhzaykgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdHJldHVybiBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcbmBgYFxuXG5QcmV2aW91c2x5LCBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIHdhcyBiZWluZyBhY2Nlc3NlZCBvbiBhbnkgYHNvY2tfY29tbW9uYCBzdHJ1Y3R1cmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3YWl0IGEgc2Vjb25kLCBpc24ndCBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIHBvc3NpYmx5IHVuaW5pdGlhbGl6ZWQgaW4gY2VydGFpbiBgc29ja19jb21tb25gIHNjZW5hcmlvcz8gU3BlY2lmaWNhbGx5LCBmb3Igc29tZXRoaW5nIGxpa2UgYHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2tgLCB3aGljaCBpc24ndCBhIGZ1bGwgc29ja2V0LCBhY2Nlc3NpbmcgYHNrX3Byb3RvY29sYCBkaXJlY3RseSBjb3VsZCBiZSBkYW5nZXJvdXMuXG5cbkknbSB0aGlua2luZywgaXNuJ3QgYHN0cnVjdCBzb2NrX2NvbW1vbmAgc3VwcG9zZWQgdG8gaG9sZCBzb21lIG9mIHRoaXMgZXNzZW50aWFsIGluZm8gbGlrZSBgc2tjX3Byb3RgIG9yIGBza2NfZmFtaWx5YD8gSSdtIGdldHRpbmcgYSBsaXR0bGUgZnV6enkgaGVyZS4gRGlkIHRoZXkgZ3VhcmQgdGhhdCBhY2Nlc3Mgd2l0aCB0aGUgYHNrX2Z1bGxzb2NrKHNrKWAgY2hlY2s/IEFoYSwgdGhhdCdzIGl0ISBJZiB3ZSBvbmx5IGNoZWNrIGBza19wcm90b2NvbGAgd2hlbiBgc2tfZnVsbHNvY2tgIHJldHVybnMgdHJ1ZSwgaXQncyBzYWZlci4gTGV0J3MgbWFrZSBzdXJlIEkndmUgZ290IHRoaXMgc3RyYWlnaHQ6IEkgbmVlZCB0byBjaGVjayBob3cgYHNrX2Z1bGxzb2NrYCBpcyBkZWZpbmVkLiBJIHNob3VsZCBhbHNvIGNoZWNrIHdoaWNoIGZpZWxkcyBhcmUgYWN0dWFsbHkgZGVmaW5lZCBpbiBgc29ja19jb21tb25gIHZlcnN1cyBgc29ja2AsIGluIGdlbmVyYWwuXG5cbk9rYXksIHRpbWUgdG8gZ3JlcCBmb3IgYHNrX2Z1bGxzb2NrYCBvciBnbyBkaXJlY3RseSB0byBgaW5jbHVkZS9uZXQvc29jay5oYC4gSSdsbCBnZXQgdGhlIGRldGFpbHMgYmVmb3JlIGFzc3VtaW5nIGFueXRoaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTQwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjE6NDIuMzk0MDM5NDRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MzQ3MDczNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19mdWxsc29ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvY2xzX2Nncm91cC5oPTUzPXN0YXRpYyBpbmxpbmUgdTMyIHRhc2tfZ2V0X2NsYXNzaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbmV0L2Nsc19jZ3JvdXAuaC02OS1cXHRcXHQvKiBJZiB0aGVyZSBpcyBhbiBzb2NrX2Nncm91cF9jbGFzc2lkIHdlJ2xsIHVzZSB0aGF0LiAqL1xcbmluY2x1ZGUvbmV0L2Nsc19jZ3JvdXAuaDo3MDpcXHRcXHRpZiAoIXNrIHx8ICFza19mdWxsc29jayhzaykpXFxuaW5jbHVkZS9uZXQvY2xzX2Nncm91cC5oLTcxLVxcdFxcdFxcdHJldHVybiAwO1xcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldDZfaGFzaHRhYmxlcy5oPTEwNj1zdHJ1Y3Qgc29jayAqaW5ldDZfc3RlYWxfc29jayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBkb2ZmLFxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldDZfaGFzaHRhYmxlcy5oLTExNy1cXG5pbmNsdWRlL25ldC9pbmV0Nl9oYXNodGFibGVzLmg6MTE4OlxcdGlmICghcHJlZmV0Y2hlZCB8fCAhc2tfZnVsbHNvY2soc2spKVxcbmluY2x1ZGUvbmV0L2luZXQ2X2hhc2h0YWJsZXMuaC0xMTktXFx0XFx0cmV0dXJuIHNrO1xcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmg9NDQ2PXN0cnVjdCBzb2NrICppbmV0X3N0ZWFsX3NvY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZG9mZixcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRfaGFzaHRhYmxlcy5oLTQ1Ny1cXG5pbmNsdWRlL25ldC9pbmV0X2hhc2h0YWJsZXMuaDo0NTg6XFx0aWYgKCFwcmVmZXRjaGVkIHx8ICFza19mdWxsc29jayhzaykpXFxuaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmgtNDU5LVxcdFxcdHJldHVybiBzaztcXG4tLVxcbmluY2x1ZGUvbmV0L2lwLmg9NTM0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3NrYl9kc3RfbXR1KHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbmluY2x1ZGUvbmV0L2lwLmgtNTM5LVxcbmluY2x1ZGUvbmV0L2lwLmg6NTQwOlxcdGlmICghc2sgfHwgIXNrX2Z1bGxzb2NrKHNrKSB8fCBpcF9za191c2VfcG10dShzaykpIHtcXG5pbmNsdWRlL25ldC9pcC5oLTU0MS1cXHRcXHRib29sIGZvcndhcmRpbmcgPSBJUENCKHNrYiktXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBTS0JfRk9SV0FSREVEO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mdF9maWIuaD0yMj1zdGF0aWMgaW5saW5lIGJvb2wgbmZ0X2ZpYl9jYW5fc2tpcChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZnRfZmliLmgtMzYtXFx0c2sgPSBwa3QtXFx1MDAzZXNrYi1cXHUwMDNlc2s7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mdF9maWIuaDozNzpcXHRpZiAoc2sgXFx1MDAyNlxcdTAwMjYgc2tfZnVsbHNvY2soc2spKVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZnRfZmliLmgtMzgtXFx0ICAgICAgIHJldHVybiBzay1cXHUwMDNlc2tfcnhfZHN0X2lmaW5kZXggPT0gaW5kZXYtXFx1MDAzZWlmaW5kZXg7XFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmg9MzAxNj1za2Jfc2tfaXNfcHJlZmV0Y2hlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oLTMwMjctICovXFxuaW5jbHVkZS9uZXQvc29jay5oOjMwMjg6c3RhdGljIGlubGluZSBib29sIHNrX2Z1bGxzb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5pbmNsdWRlL25ldC9zb2NrLmgtMzAyOS17XFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmg9MzAzND1za19pc19yZWZjb3VudGVkKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaC0zMDM2LVxcdC8qIE9ubHkgZnVsbCBzb2NrZXRzIGhhdmUgc2stXFx1MDAzZXNrX2ZsYWdzLiAqL1xcbmluY2x1ZGUvbmV0L3NvY2suaDozMDM3OlxcdHJldHVybiAhc2tfZnVsbHNvY2soc2spIHx8ICFzb2NrX2ZsYWcoc2ssIFNPQ0tfUkNVX0ZSRUUpO1xcbmluY2x1ZGUvbmV0L3NvY2suaC0zMDM4LX1cXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaD0zMDQxPXNrX3JlcXVlc3RzX3dpZmlfc3RhdHVzKHN0cnVjdCBzb2NrICpzaylcXG5pbmNsdWRlL25ldC9zb2NrLmgtMzA0Mi17XFxuaW5jbHVkZS9uZXQvc29jay5oOjMwNDM6XFx0cmV0dXJuIHNrIFxcdTAwMjZcXHUwMDI2IHNrX2Z1bGxzb2NrKHNrKSBcXHUwMDI2XFx1MDAyNiBzb2NrX2ZsYWcoc2ssIFNPQ0tfV0lGSV9TVEFUVVMpO1xcbmluY2x1ZGUvbmV0L3NvY2suaC0zMDQ0LX1cXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaD0zMTE2PXN0YXRpYyBpbmxpbmUgdm9pZCBza19wYWNpbmdfc2hpZnRfdXBkYXRlKHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcXG5pbmNsdWRlL25ldC9zb2NrLmgtMzExNy17XFxuaW5jbHVkZS9uZXQvc29jay5oOjMxMTg6XFx0aWYgKCFzayB8fCAhc2tfZnVsbHNvY2soc2spIHx8IFJFQURfT05DRShzay1cXHUwMDNlc2tfcGFjaW5nX3NoaWZ0KSA9PSB2YWwpXFxuaW5jbHVkZS9uZXQvc29jay5oLTMxMTktXFx0XFx0cmV0dXJuO1xcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmg9Mjg5ND1zdGF0aWMgaW5saW5lIGludCB0Y3BfY2FsbF9icGYoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3AsIHUzMiBuYXJncywgdTMyICphcmdzKVxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmgtMjg5OS1cXHRtZW1zZXQoXFx1MDAyNnNvY2tfb3BzLCAwLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sIHRlbXApKTtcXG5pbmNsdWRlL25ldC90Y3AuaDoyOTAwOlxcdGlmIChza19mdWxsc29jayhzaykpIHtcXG5pbmNsdWRlL25ldC90Y3AuaC0yOTAxLVxcdFxcdHNvY2tfb3BzLmlzX2Z1bGxzb2NrID0gMTtcXG4tLVxcbmluY2x1ZGUvbmV0L3Rscy5oPTM2MD1zdGF0aWMgaW5saW5lIGJvb2wgdGxzX2lzX3NrYl90eF9kZXZpY2Vfb2ZmbG9hZGVkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL25ldC90bHMuaC0zNjQtXFxuaW5jbHVkZS9uZXQvdGxzLmg6MzY1OlxcdHJldHVybiBzayBcXHUwMDI2XFx1MDAyNiBza19mdWxsc29jayhzaykgXFx1MDAyNlxcdTAwMjZcXG5pbmNsdWRlL25ldC90bHMuaC0zNjYtXFx0ICAgICAgIChzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZzay1cXHUwMDNlc2tfdmFsaWRhdGVfeG1pdF9za2IpID09XFxuLS1cXG5pbmNsdWRlL25ldC90bHMuaD01MDg9c3RhdGljIGlubGluZSBib29sIHRsc19pc19za19yeF9kZXZpY2Vfb2ZmbG9hZGVkKHN0cnVjdCBzb2NrICpzaylcXG5pbmNsdWRlL25ldC90bHMuaC01MDkte1xcbmluY2x1ZGUvbmV0L3Rscy5oOjUxMDpcXHRpZiAoIXNrX2Z1bGxzb2NrKHNrKSB8fFxcbmluY2x1ZGUvbmV0L3Rscy5oLTUxMS1cXHQgICAgc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2c2stXFx1MDAzZXNrX2Rlc3RydWN0KSAhPSB0bHNfZGV2aWNlX3NrX2Rlc3RydWN0KVxcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oPTEzOTM9c3RhdGljIGlubGluZSBpbnQgeGZybV9za19jbG9uZV9wb2xpY3koc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqb3NrKVxcbmluY2x1ZGUvbmV0L3hmcm0uaC0xMzk0LXtcXG5pbmNsdWRlL25ldC94ZnJtLmg6MTM5NTpcXHRpZiAoIXNrX2Z1bGxzb2NrKG9zaykpXFxuaW5jbHVkZS9uZXQveGZybS5oLTEzOTYtXFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIxOjQyLjY1NzUxNjk5NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzcyNTkxNTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgYnBmX3NvY2tfZGVzdHJveWAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUgYGJwZl9zb2NrX2Rlc3Ryb3lgIGZ1bmN0aW9uLi4uIHRoYXQncyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkIHdoZW4gaXQgY29tZXMgdG8gY2xlYW5pbmcgdXAgQlBGLXJlbGF0ZWQgcmVzb3VyY2VzIHRpZWQgdG8gYSBzb2NrZXQuIEdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBtZW1vcnkgbGVha3MgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgaW4gdGhpcyBhcmVhLCBteSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gcmV2aXNpdCB0aGF0IHNlY3Rpb24gb2YgYG5ldC9jb3JlL2ZpbHRlci5jYC4gSSBuZWVkIHRvIGVuc3VyZSBhbGwgcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgdGhlIEJQRiBwcm9ncmFtIGFzc29jaWF0ZWQgd2l0aCBhIHNvY2tldCBhcmUgcHJvcGVybHkgZnJlZWQgZHVyaW5nIHNvY2tldCBkZXN0cnVjdGlvbi4gSSdtIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMg4oCTIGFyZSB0aGVyZSBhbnkgc2NlbmFyaW9zIHdoZXJlIGFub3RoZXIgdGhyZWFkIG1pZ2h0IGJlIGFjY2Vzc2luZyB0aGUgQlBGIHByb2dyYW0gd2hpbGUgd2UncmUgdHJ5aW5nIHRvIHRlYXIgaXQgZG93bj8gQWxzbywgSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgcmVmZXJlbmNlIGNvdW50cyBhcmUgaGFuZGxlZCBtZXRpY3Vsb3VzbHk7IGEgc2luZ2xlIG1pc3NlZCBkZWNyZW1lbnQgY291bGQgYmUgYSB0aWNraW5nIHRpbWUgYm9tYi4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlLCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCBtZW1vcnkgbGVha3Mgb3IgcmVzb3VyY2UtcmVsYXRlZCBpc3N1ZXM/IEFueSBzcG90cyB3aGVyZSBhIHByb2dyYW0gbWlnaHQgYmUgdXNlZCBhZnRlciBpdCBpcyBmcmVlZC4gQW5kIEkgaGF2ZSB0byBrZWVwIGluIG1pbmQsIG9mIGNvdXJzZSwgdGhlIGltcGxpY2F0aW9ucyBvZiBjaGFuZ2VzIGhlcmUgb24gb3RoZXIgc3lzdGVtcywgc28gdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczODEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMzoyMTo0NS4wMzAxMTA2MjhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYyOTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOTEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjkxMDpcXHQgKiBQYXJhbWV0ZXJzOlxcbjEyOTExOlxcdCAqIEBzb2NrOiBQb2ludGVyIHRvIHNvY2tldCB0byBiZSBkZXN0cm95ZWRcXG4xMjkxMjpcXHQgKlxcbjEyOTEzOlxcdCAqIFJldHVybjpcXG4xMjkxNDpcXHQgKiBPbiBlcnJvciwgbWF5IHJldHVybiBFT1BOT1RTVVBQLCBvciB3aGF0ZXZlciB0aGUgcHJvdG9jb2wgc3BlY2lmaWNcXG4xMjkxNTpcXHQgKiBkZXN0cm95IGhhbmRsZXIgcmV0dXJucy5cXG4xMjkxNjpcXHQgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxcbjEyOTE3OlxcdCAqIDAgb3RoZXJ3aXNlXFxuMTI5MTg6XFx0ICovXFxuMTI5MTk6XFx0X19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxcbjEyOTIwOlxcdHtcXG4xMjkyMTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKilzb2NrO1xcbjEyOTIyOlxcdFxcbjEyOTIzOlxcdFxcdC8qIFRoZSBsb2NraW5nIHNlbWFudGljcyB0aGF0IGFsbG93IGZvciBzeW5jaHJvbm91cyBleGVjdXRpb24gb2YgdGhlXFxuMTI5MjQ6XFx0XFx0ICogZGVzdHJveSBoYW5kbGVycyBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIFRDUCBhbmQgVURQLlxcbjEyOTI1OlxcdFxcdCAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHRcXG4xMjkyNjpcXHRcXHQgKiBwcmlvciB0byBpbnZva2luZyB0aGlzIGtmdW5jLlxcbjEyOTI3OlxcdFxcdCAqL1xcbjEyOTI4OlxcdFxcdGlmICghc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveSlcXG4xMjkyOTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTI5MzA6XFx0XFxuMTI5MzE6XFx0XFx0aWYgKHNrX2Z1bGxzb2NrKHNrKSBcXHUwMDI2XFx1MDAyNlxcbjEyOTMyOlxcdFxcdCAgICBzay1cXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXFx1MDAyNlxcdTAwMjZcXG4xMjkzMzpcXHRcXHQgICAgc2stXFx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxcbjEyOTM0OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMjkzNTpcXHRcXG4xMjkzNjpcXHRcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcXG4xMjkzNzpcXHR9XFxuMTI5Mzg6XFx0XFxuMTI5Mzk6XFx0X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG4xMjk0MDpcXHRcXG4xMjk0MTpcXHRCVEZfS0ZVTkNTX1NUQVJUKGJwZl9za19pdGVyX2tmdW5jX2lkcylcXG4xMjk0MjpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfZGVzdHJveSlcXG4xMjk0MzpcXHRCVEZfS0ZVTkNTX0VORChicGZfc2tfaXRlcl9rZnVuY19pZHMpXFxuMTI5NDQ6XFx0XFxuMTI5NDU6XFx0c3RhdGljIGludCB0cmFjaW5nX2l0ZXJfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxcbjEyOTQ2OlxcdHtcXG4xMjk0NzpcXHRcXHRpZiAoYnRmX2lkX3NldDhfY29udGFpbnMoXFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX2lkcywga2Z1bmNfaWQpIFxcdTAwMjZcXHUwMDI2XFxuMTI5NDg6XFx0XFx0ICAgIHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9JVEVSKVxcbjEyOTQ5OlxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMzoyMTo0NS4wMzA0NzU1OThaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA1MTUzNTEyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBpbmV0X2Nvbm5lY3Rpb25fc29jay5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gemVybyBpbiBvbiBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2AuIFNwZWNpZmljYWxseSwgSSB0aGluayB0aGUgYWN0aW9uIGlzIGhhcHBlbmluZyBhcm91bmQgbGluZSAxNTIwLiBUaGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGUgc3ltcHRvbXMgSSdtIHNlZWluZy4gSSdsbCBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxvdyBhcm91bmQgdGhhdCBhcmVhIG9mIHRoZSBjb2RlLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mzk4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMzoyMTo1MC4wODIwMTMwMzdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTUwMDpcXHRcXHRcXHRcXHRcXHRcXHRSRUFEX09OQ0UobnNrLVxcdTAwM2Vza19kYXRhX3JlYWR5KShuc2spO1xcbjE1MDE6XFx0XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4xNTAyOlxcdFxcdFxcdFxcdFxcdFxcdF9fTkVUX0lOQ19TVEFUUyhzb2NrX25ldChuc2spLFxcbjE1MDM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0TElOVVhfTUlCX1RDUE1JR1JBVEVSRVFGQUlMVVJFKTtcXG4xNTA0OlxcdFxcdFxcdFxcdFxcdFxcdHJlcXNrX21pZ3JhdGVfcmVzZXQobnJlcSk7XFxuMTUwNTpcXHRcXHRcXHRcXHRcXHRcXHRfX3JlcXNrX2ZyZWUobnJlcSk7XFxuMTUwNjpcXHRcXHRcXHRcXHRcXHR9XFxuMTUwNzpcXHRcXHRcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xNTA4OlxcdFxcbjE1MDk6XFx0XFx0XFx0XFx0XFx0LyogaW5ldF9jc2tfcmVxc2tfcXVldWVfYWRkKCkgaGFzIGFscmVhZHlcXG4xNTEwOlxcdFxcdFxcdFxcdFxcdCAqIGNhbGxlZCBpbmV0X2NoaWxkX2ZvcmdldCgpIG9uIGZhaWx1cmUgY2FzZS5cXG4xNTExOlxcdFxcdFxcdFxcdFxcdCAqL1xcbjE1MTI6XFx0XFx0XFx0XFx0XFx0Z290byBza2lwX2NoaWxkX2ZvcmdldDtcXG4xNTEzOlxcdFxcdFxcdFxcdH1cXG4xNTE0OlxcdFxcdFxcdH1cXG4xNTE1OlxcdFxcbjE1MTY6XFx0XFx0XFx0aW5ldF9jaGlsZF9mb3JnZXQoc2ssIHJlcSwgY2hpbGQpO1xcbjE1MTc6XFx0c2tpcF9jaGlsZF9mb3JnZXQ6XFxuMTUxODpcXHRcXHRcXHRyZXFza19wdXQocmVxKTtcXG4xNTE5OlxcdFxcdFxcdGJoX3VubG9ja19zb2NrKGNoaWxkKTtcXG4xNTIwOlxcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbjE1MjE6XFx0XFx0XFx0c29ja19wdXQoY2hpbGQpO1xcbjE1MjI6XFx0XFxuMTUyMzpcXHRcXHRcXHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcXG4xNTI0OlxcdFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjE1MjU6XFx0XFx0fVxcbjE1MjY6XFx0XFx0aWYgKHF1ZXVlLVxcdTAwM2VmYXN0b3BlbnEucnNrcV9yc3RfaGVhZCkge1xcbjE1Mjc6XFx0XFx0XFx0LyogRnJlZSBhbGwgdGhlIHJlcXMgcXVldWVkIGluIHJza3FfcnN0X2hlYWQuICovXFxuMTUyODpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnF1ZXVlLVxcdTAwM2VmYXN0b3BlbnEubG9jayk7XFxuMTUyOTpcXHRcXHRcXHRyZXEgPSBxdWV1ZS1cXHUwMDNlZmFzdG9wZW5xLnJza3FfcnN0X2hlYWQ7XFxuMTUzMDpcXHRcXHRcXHRxdWV1ZS1cXHUwMDNlZmFzdG9wZW5xLnJza3FfcnN0X2hlYWQgPSBOVUxMO1xcbjE1MzE6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnF1ZXVlLVxcdTAwM2VmYXN0b3BlbnEubG9jayk7XFxuMTUzMjpcXHRcXHRcXHR3aGlsZSAocmVxICE9IE5VTEwpIHtcXG4xNTMzOlxcdFxcdFxcdFxcdG5leHQgPSByZXEtXFx1MDAzZWRsX25leHQ7XFxuMTUzNDpcXHRcXHRcXHRcXHRyZXFza19wdXQocmVxKTtcXG4xNTM1OlxcdFxcdFxcdFxcdHJlcSA9IG5leHQ7XFxuMTUzNjpcXHRcXHRcXHR9XFxuMTUzNzpcXHRcXHR9XFxuMTUzODpcXHRcXHRXQVJOX09OX09OQ0Uoc2stXFx1MDAzZXNrX2Fja19iYWNrbG9nKTtcXG4xNTM5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjE6NTAuMDgyMTQ4NzE3WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3MjUyMTkyNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBhbmQgU29ja2V0IExpZmVjeWNsZSBJbnRlcmFjdGlvbnMqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBpbmV0X2Nza19saXN0ZW5fc3RvcGAgaGFzIHRoaXMgY29uZGl0aW9uYWwgYGlmICghaGFzX2N1cnJlbnRfYnBmX2N0eCgpKSBjb25kX3Jlc2NoZWQoKTtgLiBUaGUgcmF0aW9uYWxlIGlzIHByZXR0eSBjbGVhcjogd2hlbiBgYnBmX3NvY2tfZGVzdHJveWAgaXMgaW52b2tlZCBmcm9tIHdpdGhpbiBhIEJQRiBwcm9ncmFtLCBlc3BlY2lhbGx5IHRocm91Z2ggaXRlcmF0b3JzLCBpdCBjYW4gYmUgcnVubmluZyB1bmRlciBhbiBSQ1UgcmVhZCBsb2NrIG9yIGluIGEgbm9uLXByZWVtcHRpYmxlIGNvbnRleHQuIENhbGxpbmcgYGNvbmRfcmVzY2hlZCgpYCBpbiB0aGF0IHNjZW5hcmlvIGlzIGEgcmVjaXBlIGZvciBkaXNhc3RlciDigJMgY2xhc3NpYyBgbWlnaHRfc2xlZXAoKWAgYW5kIFwic2NoZWR1bGluZyB3aGlsZSBhdG9taWNcIiB3YXJuaW5ncywgb3IgcG90ZW50aWFsbHkgUkNVLXJlbGF0ZWQgcHJvYmxlbXMuIFN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYW5kIGxvY2tkZXAgd291bGQgZWFzaWx5IGNhdGNoIHRob3NlIHNjaGVkdWxlciwgY29uY3VycmVuY3ksIGFuZCBSQ1UgaXNzdWVzLiBUaGF0IG1ha2VzIHNlbnNlLlxuXG5Ob3csIHRoZSBjaGFuZ2VzIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgYXJlIG1vcmUgaW50ZXJlc3RpbmcuIGBicGZfc29ja19kZXN0cm95YCBpcyBjbGVhcmx5IGJlaW5nIHVwZGF0ZWQgdG8gaGFuZGxlIG5vbi1mdWxsIHNvY2tldHMsIGxpa2UgYGluZXRfdGltZXdhaXRfc29ja2Agb3IgYHJlcXVlc3Rfc29ja2AuIFRoZSBjb2RlIG5vdyBjaGVja3MgYHNrX2Z1bGxzb2NrKHNrKWAgYmVmb3JlIGFjY2Vzc2luZyBgc2stXHUwMDNlc2tfcHJvdG9jb2xgLiBIbW0sIHdoeT8gQWgsIGZvciB0aW1ld2FpdCBzb2NrZXRzLCBgc2tfY29tbW9uYCBpcyBlbWJlZGRlZCwgYnV0IHRoZSBgaW5ldF90aW1ld2FpdF9zb2NrYCBzdHJ1Y3R1cmUgZG9lc27igJl0IGhhdmUgdGhlIGZ1bGwgYHN0cnVjdCBzb2NrYCBmaWVsZHMgbGlrZSBgc2tfcHJvdG9jb2xgIGF0IHRoZSBzYW1lIG9mZnNldHMuIFJpZ2h0LCBJIHJlbWVtYmVyIG5vdyEgSW4gYHN0cnVjdCBzb2NrX2NvbW1vbmAsIHdlIGhhdmUgYHNrY19wcm90YCwgYnV0IHRoZSBmdWxsIGBza19wcm90b2NvbGAgbGl2ZXMgaW4gYHN0cnVjdCBzb2NrYCwgbm90IGBzb2NrX2NvbW1vbmAuIFNvLCBgaW5ldF90aW1ld2FpdF9zb2NrYCBtaWdodCBiZSB1c2luZyBgdHdfcHJvdGAgb3Igc29tZXRoaW5nIGxpa2UgdGhhdCB3aXRoaW4gdGhlIGBza2NfcHJvdGAuIElmIGBicGZfc29ja19kZXN0cm95YCB3ZXJlIHRvIHRha2UgYSBgc29ja19jb21tb25gIHBvaW50ZXIgYW5kIGJsaW5kbHkgY2FzdCBpdCB0byBgc3RydWN0IHNvY2sgKmAsIGFjY2Vzc2luZyBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIG9uIGFuIGBpbmV0X3RpbWV3YWl0X3NvY2tgIHdvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBvciwgYXQgYmVzdCwgYSByZWFkIGZyb20gdGhlIHdyb25nIG9mZnNldC4gVGhhdCB3b3VsZCBiZSBtZXNzeS4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBsYXlvdXQgb2YgYHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2tgIHZlcnN1cyBgc3RydWN0IHNvY2tgIGp1c3QgdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE5NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIxOjU0LjgwNzM3MDQ4MloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0NTk4OTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oPTI2PXN0cnVjdCBpbmV0X2JpbmRfYnVja2V0O1xcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgtMzItICovXFxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmg6MzM6c3RydWN0IGluZXRfdGltZXdhaXRfc29jayB7XFxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgtMzQtXFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjE6NTUuMDExOTc1MjQyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2NDYzNDY0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gZ3JhYiBgaW5ldF90aW1ld2FpdF9zb2NrLmhgIGFuZCBmb2N1cyBvbiBsaW5lcyAzMC03MC4gSSBrbm93IHRoaXMgaGVhZGVyIGZpbGUsIHNvIEknbSBleHBlY3RpbmcgdG8gZmluZCBjb3JlIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gdGhlIFRDUCBUSU1FLVdBSVQgc3RhdGUgZm9yIElQdjQgYW5kIElQdjYgc29ja2V0cy4gTXkgZ29hbCBoZXJlIGlzIHRvIHF1aWNrbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHBvc3NpYmx5IGlkZW50aWZ5IGFueSByZWxldmFudCBwYXJhbWV0ZXJzIG9yIG1hY3JvcyB0aGF0IG1pZ2h0IGJlIGluIG15IGN1cnJlbnQgbGluZSBvZiB0aGlua2luZyBvciBwcm9ibGVtLXNvbHZpbmcgdGhhdCBJIGFtIGRvaW5nLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHRoZSBgdHdfc29ja2Agc3RydWN0dXJlIGl0c2VsZiwgYW55IHJlbGF0ZWQgZmxhZ3MsIG9yIGZ1bmN0aW9ucyB0aGF0IG9wZXJhdGUgb24gVElNRS1XQUlUIHNvY2tldHMuIFNwZWNpZmljYWxseSwgSSdtIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgdGhlIHRpbWVyIHN0cnVjdHVyZXMgdXNlZCBmb3IgdGhlIDJNU0wgdGltZW91dCBwZXJpb2QsIGFueSByZWZlcmVuY2VzIHRvIGNvbm5lY3Rpb24gc3RhdGUgdHJhbnNpdGlvbnMsIGFuZCBob3cgdGhlIGtlcm5lbCB0cmFja3MgdGhlc2Ugc29ja2V0cyBmb3IgY2xlYW51cC4gSeKAmWxsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHVudXN1YWwgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvciBvcHRpbWl6YXRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBvZiBUQ1AgY29ubmVjdGlvbnMsIHRvby4gVGltZSB0byBnZXQgc3RhcnRlZCBhbmQgZ2V0IHRob3NlIG1lbnRhbCBnZWFycyB0dXJuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIyNywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIyOjAwLjY1ODMyNDM4N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHQgKiBwcm9ibGVtcyBvZiBzb2NrZXRzIGluIHN1Y2ggYSBzdGF0ZSBvbiBoZWF2aWx5IGxvYWRlZCBzZXJ2ZXJzLCBidXRcXG4gIDMxOlxcdCAqIHdpdGhvdXQgdmlvbGF0aW5nIHRoZSBwcm90b2NvbCBzcGVjaWZpY2F0aW9uLlxcbiAgMzI6XFx0ICovXFxuICAzMzpcXHRzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrIHtcXG4gIDM0OlxcdFxcdC8qXFxuICAzNTpcXHRcXHQgKiBOb3cgc3RydWN0IHNvY2sgYWxzbyB1c2VzIHNvY2tfY29tbW9uLCBzbyBwbGVhc2UganVzdFxcbiAgMzY6XFx0XFx0ICogZG9uJ3QgYWRkIG5vdGhpbmcgYmVmb3JlIHRoaXMgZmlyc3QgbWVtYmVyIChfX3R3X2NvbW1vbikgLS1hY21lXFxuICAzNzpcXHRcXHQgKi9cXG4gIDM4OlxcdFxcdHN0cnVjdCBzb2NrX2NvbW1vblxcdF9fdHdfY29tbW9uO1xcbiAgMzk6XFx0I2RlZmluZSB0d19mYW1pbHlcXHRcXHRfX3R3X2NvbW1vbi5za2NfZmFtaWx5XFxuICA0MDpcXHQjZGVmaW5lIHR3X3N0YXRlXFx0XFx0X190d19jb21tb24uc2tjX3N0YXRlXFxuICA0MTpcXHQjZGVmaW5lIHR3X3JldXNlXFx0XFx0X190d19jb21tb24uc2tjX3JldXNlXFxuICA0MjpcXHQjZGVmaW5lIHR3X3JldXNlcG9ydFxcdFxcdF9fdHdfY29tbW9uLnNrY19yZXVzZXBvcnRcXG4gIDQzOlxcdCNkZWZpbmUgdHdfaXB2Nm9ubHlcXHRcXHRfX3R3X2NvbW1vbi5za2NfaXB2Nm9ubHlcXG4gIDQ0OlxcdCNkZWZpbmUgdHdfYm91bmRfZGV2X2lmXFx0XFx0X190d19jb21tb24uc2tjX2JvdW5kX2Rldl9pZlxcbiAgNDU6XFx0I2RlZmluZSB0d19ub2RlXFx0XFx0XFx0X190d19jb21tb24uc2tjX251bGxzX25vZGVcXG4gIDQ2OlxcdCNkZWZpbmUgdHdfYmluZF9ub2RlXFx0XFx0X190d19jb21tb24uc2tjX2JpbmRfbm9kZVxcbiAgNDc6XFx0I2RlZmluZSB0d19yZWZjbnRcXHRcXHRfX3R3X2NvbW1vbi5za2NfcmVmY250XFxuICA0ODpcXHQjZGVmaW5lIHR3X3R4X3F1ZXVlX21hcHBpbmdcXHRfX3R3X2NvbW1vbi5za2NfdHhfcXVldWVfbWFwcGluZ1xcbiAgNDk6XFx0I2RlZmluZSB0d19yeF9xdWV1ZV9tYXBwaW5nXFx0X190d19jb21tb24uc2tjX3J4X3F1ZXVlX21hcHBpbmdcXG4gIDUwOlxcdCNkZWZpbmUgdHdfaGFzaFxcdFxcdFxcdF9fdHdfY29tbW9uLnNrY19oYXNoXFxuICA1MTpcXHQjZGVmaW5lIHR3X3Byb3RcXHRcXHRcXHRfX3R3X2NvbW1vbi5za2NfcHJvdFxcbiAgNTI6XFx0I2RlZmluZSB0d19uZXRcXHRcXHRcXHRfX3R3X2NvbW1vbi5za2NfbmV0XFxuICA1MzpcXHQjZGVmaW5lIHR3X2RhZGRyICAgICAgICBcXHRfX3R3X2NvbW1vbi5za2NfZGFkZHJcXG4gIDU0OlxcdCNkZWZpbmUgdHdfdjZfZGFkZHJcXHRcXHRfX3R3X2NvbW1vbi5za2NfdjZfZGFkZHJcXG4gIDU1OlxcdCNkZWZpbmUgdHdfcmN2X3NhZGRyICAgIFxcdF9fdHdfY29tbW9uLnNrY19yY3Zfc2FkZHJcXG4gIDU2OlxcdCNkZWZpbmUgdHdfdjZfcmN2X3NhZGRyICAgIFxcdF9fdHdfY29tbW9uLnNrY192Nl9yY3Zfc2FkZHJcXG4gIDU3OlxcdCNkZWZpbmUgdHdfZHBvcnRcXHRcXHRfX3R3X2NvbW1vbi5za2NfZHBvcnRcXG4gIDU4OlxcdCNkZWZpbmUgdHdfbnVtXFx0XFx0XFx0X190d19jb21tb24uc2tjX251bVxcbiAgNTk6XFx0I2RlZmluZSB0d19jb29raWVcXHRcXHRfX3R3X2NvbW1vbi5za2NfY29va2llXFxuICA2MDpcXHQjZGVmaW5lIHR3X2RyXFx0XFx0XFx0X190d19jb21tb24uc2tjX3R3X2RyXFxuICA2MTpcXHRcXG4gIDYyOlxcdFxcdF9fdTMyXFx0XFx0XFx0dHdfbWFyaztcXG4gIDYzOlxcdFxcdHVuc2lnbmVkIGNoYXJcXHRcXHR0d19zdWJzdGF0ZTtcXG4gIDY0OlxcdFxcdHVuc2lnbmVkIGNoYXJcXHRcXHR0d19yY3Zfd3NjYWxlO1xcbiAgNjU6XFx0XFxuICA2NjpcXHRcXHQvKiBTb2NrZXQgZGVtdWx0aXBsZXggY29tcGFyaXNvbnMgb24gaW5jb21pbmcgcGFja2V0cy4gKi9cXG4gIDY3OlxcdFxcdC8qIHRoZXNlIHRocmVlIGFyZSBpbiBpbmV0X3NvY2sgKi9cXG4gIDY4OlxcdFxcdF9fYmUxNlxcdFxcdFxcdHR3X3Nwb3J0O1xcbiAgNjk6XFx0XFx0LyogQW5kIHRoZXNlIGFyZSBvdXJzLiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMzoyMjowMC42NTgzOTM0NjdaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ5MDQyNTYzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgQnVnIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMga2VybmVsIGNvZGUgYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGEgZml4LiBJdCBzZWVtcyBsaWtlIHRoZSBpc3N1ZSBpcyByb290ZWQgaW4gaG93IGBzdHJ1Y3Qgc29ja2AgYW5kIGBpbmV0X3RpbWV3YWl0X3NvY2tgIGFyZSByZWxhdGVkLCBhbmQgc3BlY2lmaWNhbGx5LCBob3cgYHNrX3Byb3RvY29sYCBpcyBhY2Nlc3NlZC4gSSBzZWUgdGhhdCBgc2tfcHJvdG9jb2xgIHdpdGhpbiBgc3RydWN0IHNvY2tgIGlzIGxvY2F0ZWQgYXQgYW4gb2Zmc2V0IGFmdGVyIGBzb2NrX2NvbW1vbmAuIFRoZSBwcm9ibGVtLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRoYXQgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBgdGltZXdhaXRgIHNvY2tldCwgd2hpY2ggdXNlcyBgaW5ldF90aW1ld2FpdF9zb2NrYCwgYWNjZXNzaW5nIGBzay1cdTAwM2Vza19wcm90b2NvbGAgaW4gYSBmdW5jdGlvbiBsaWtlIGBicGZfc29ja19kZXN0cm95YCBjb3VsZCBiZSBwcm9ibGVtYXRpYy4gRXNzZW50aWFsbHksIHdlIHdlcmUgcG90ZW50aWFsbHkgcmVhZGluZyBmcm9tIGFuIGluY29ycmVjdCBtZW1vcnkgbG9jYXRpb24gYmVjYXVzZSB0aGUgb2Zmc2V0IGZvciBgc2tfcHJvdG9jb2xgIG1pZ2h0IGJlIGRpZmZlcmVudCBpbiB0aGUgYGluZXRfdGltZXdhaXRfc29ja2Agc3RydWN0dXJlIChvciBldmVuIG91dC1vZi1ib3VuZHMgaWYgdGhlIHN0cnVjdHVyZSBpcyBzbWFsbGVyKS5cblxuVGhlIGZpeCBpbnZvbHZlcyBhZGRpbmcgYSBjaGVjazogYGlmIChza19mdWxsc29jayhzaykgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUClgLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYHNrX2Z1bGxzb2NrYCB3aWxsIHJldHVybiBgZmFsc2VgIGlmIHRoZSBzb2NrZXQgaXNuJ3QgYSBcImZ1bGxzb2NrLFwiIHdoaWNoIGluY2x1ZGVzIHRpbWV3YWl0IHNvY2tldHMsIHNvIHRoYXQgaWYgaXQgaXMgYSB0aW1ld2FpdCBzb2NrZXQgd2UgZG9uJ3QgYWNjZXNzIHNrX3Byb3RvY29sIGluIGJwZl9zb2NrX2Rlc3Ryb3kuIEFuZCwgaW4gdGhlIGNhc2Ugb2YgYSBmdWxsIHNvY2tldCwgd2Ugb25seSBwcm9jZWVkIGlmIHRoZSBwcm90b2NvbCBpc24ndCBUQ1Agb3IgVURQLiBJIHRoaW5rIHRoaXMgcHJldmVudHMgdXMgZnJvbSBhY2NpZGVudGFsbHkgcmVhZGluZyBmcm9tIGFuIGluY29ycmVjdCBtZW1vcnkgbG9jYXRpb24gb24gdGhlc2Ugc3BlY2lhbGl6ZWQgYHRpbWV3YWl0YCBzb2NrZXRzLlxuXG5JIGFtIGFsc28gc2VlaW5nIHRoYXQgdGhlIGBpbmV0X3R3c2tfZGlhZ19kZXN0cm95YCBmdW5jdGlvbiBpcyBsaW5rZWQgdG8gdmlhIGB0Y3BfdHdza19wcm90LmRpYWdfZGVzdHJveWAgb3IgYHRjcF9wcm90LmRpYWdfZGVzdHJveWAuIFRoaXMgbWlnaHQgYmUgcmVsYXRlZCB0byB0aGUgb3JpZ2luYWwgaXNzdWUuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYHRjcF90d3NrX3Byb3RgIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMDYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMzoyMjowNS4xNDg4MjIxODhaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMzQ0NjY3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfdHdza19wcm90XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjI6MDUuMjAyMTc1NjM1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxODQyODIyNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGB0Y3BfcHJvdGAgYW5kIGBkaWFnX2Rlc3Ryb3lgKipcblxuT2theSwgdGltZSB0byB0YWtlIGEgbG9vayBhdCBgdGNwX3Byb3RgIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBgZGlhZ19kZXN0cm95YC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gaG93IHdlIGhhbmRsZSB0ZWFyZG93biBhbmQgY2xlYW51cCBvZiBUQ1AgcHJvdG9jb2wtc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGR1cmluZyB0aGUgZGlhZ25vc3RpYyBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGNvbXBvbmVudHMgaW50ZXJhY3QsIHNwZWNpZmljYWxseSB0byBlbnN1cmUgcHJvcGVyIHJlc291cmNlIGRlYWxsb2NhdGlvbi4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjb2RlIHBhdGgsIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggd2hlcmUgYHRjcF9wcm90YCBpcyBpbml0aWFsaXplZCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhlIGRpYWdub3N0aWMgZnJhbWV3b3JrLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG1lbW9yeSBsZWFrcywgb3IgYW55IG90aGVyIGlzc3VlcyB0aGF0IGNvdWxkIGFyaXNlIHdoZW4gZGlhZ25vc3RpY3MgYXJlIGVuYWJsZWQgYW5kIGRpc2FibGVkLCBhbmQgY29ubmVjdGlvbnMgYXJlIGVzdGFibGlzaGVkIGFuZCB0b3JuIGRvd24uIEVzc2VudGlhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UncmUgcHJvcGVybHkgY2xlYW5pbmcgdXAgYWZ0ZXIgb3Vyc2VsdmVzIHdoZW4gZGlhZ25vc3RpY3MgYXJlIGludm9sdmVkIHdpdGggdGhlIFRDUCBwcm90b2NvbC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk5OCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIyOjA3LjM4NjQ2MDM1NloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc0NjQ5MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXFxcXC5kaWFnX2Rlc3Ryb3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9yYXcuYz05NDg9c3RydWN0IHByb3RvIHJhd19wcm90ID0ge1xcbi0tXFxubmV0L2lwdjQvcmF3LmMtOTcyLSNlbmRpZlxcbm5ldC9pcHY0L3Jhdy5jOjk3MzpcXHQuZGlhZ19kZXN0cm95XFx0ICAgPSByYXdfYWJvcnQsXFxubmV0L2lwdjQvcmF3LmMtOTc0LX07XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTMzNDg9c3RydWN0IHByb3RvIHRjcF9wcm90ID0ge1xcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzk2LVxcdC5ub19hdXRvYmluZFxcdFxcdD0gdHJ1ZSxcXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjMzOTc6XFx0LmRpYWdfZGVzdHJveVxcdFxcdD0gdGNwX2Fib3J0LFxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM5OC19O1xcbi0tXFxubmV0L2lwdjQvdWRwLmM9MzE0Mz1zdHJ1Y3QgcHJvdG8gdWRwX3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0zMTczLVxcdC5vYmpfc2l6ZVxcdFxcdD0gc2l6ZW9mKHN0cnVjdCB1ZHBfc29jayksXFxubmV0L2lwdjQvdWRwLmM6MzE3NDpcXHQuZGlhZ19kZXN0cm95XFx0XFx0PSB1ZHBfYWJvcnQsXFxubmV0L2lwdjQvdWRwLmMtMzE3NS19O1xcbi0tXFxubmV0L2lwdjYvcmF3LmM9MTIwNz1zdHJ1Y3QgcHJvdG8gcmF3djZfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY2L3Jhdy5jLTEyMzEtI2VuZGlmXFxubmV0L2lwdjYvcmF3LmM6MTIzMjpcXHQuZGlhZ19kZXN0cm95XFx0ICAgPSByYXdfYWJvcnQsXFxubmV0L2lwdjYvcmF3LmMtMTIzMy19O1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0yMjc2PXN0cnVjdCBwcm90byB0Y3B2Nl9wcm90ID0ge1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzI1LVxcdC5ub19hdXRvYmluZFxcdFxcdD0gdHJ1ZSxcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjIzMjY6XFx0LmRpYWdfZGVzdHJveVxcdFxcdD0gdGNwX2Fib3J0LFxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjMyNy19O1xcbi0tXFxubmV0L2lwdjYvdWRwLmM9MTkwOD1zdHJ1Y3QgcHJvdG8gdWRwdjZfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTE5NDAtXFx0LmlwdjZfcGluZm9fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHVkcDZfc29jaywgaW5ldDYpLFxcbm5ldC9pcHY2L3VkcC5jOjE5NDE6XFx0LmRpYWdfZGVzdHJveVxcdFxcdD0gdWRwX2Fib3J0LFxcbm5ldC9pcHY2L3VkcC5jLTE5NDItfTtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE0Nj12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X2luaXQodm9pZClcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE2Ni1cXHR0Y3BfcHJvdF9vdmVycmlkZS5yZWxlYXNlX2NiID0gdGNwX3JlbGVhc2VfY2Jfb3ZlcnJpZGU7XFxubmV0L21wdGNwL3N1YmZsb3cuYzoyMTY3OlxcdHRjcF9wcm90X292ZXJyaWRlLmRpYWdfZGVzdHJveSA9IHRjcF9hYm9ydF9vdmVycmlkZTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNjgtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTgwPXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfdjZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMjEzLVxcdHRjcHY2X3Byb3Rfb3ZlcnJpZGUucmVsZWFzZV9jYiA9IHRjcF9yZWxlYXNlX2NiX292ZXJyaWRlO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjIxNDpcXHR0Y3B2Nl9wcm90X292ZXJyaWRlLmRpYWdfZGVzdHJveSA9IHRjcF9hYm9ydF9vdmVycmlkZTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIyMTUtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMzoyMjowNy40NTM5Mjk4MjlaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTAxNTYyODI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipBbmFseXppbmcgYHRjcF9hYm9ydGAncyBTY29wZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYHRjcF9hYm9ydGAgaGVyZS4gTGV0J3Mgc2VlLi4uIGEgcXVpY2sgbWVudGFsIHNjYW4gcmVtaW5kcyBtZSB0aGF0IGl0J3Mgbm90ICpqdXN0KiBmb3IgYWJydXB0bHkgdGVhcmluZyBkb3duIGVzdGFibGlzaGVkIFRDUCBjb25uZWN0aW9ucy4gSSBzZWVtIHRvIHJlY2FsbCBpdCBhbHNvIGhhcyBhIGhhbmQgaW4gZGVhbGluZyB3aXRoIHNvY2tldHMgaW4gdGhlIGBUSU1FX1dBSVRgIHN0YXRlLCB3aGljaCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCdzIGEgY3JpdGljYWwgc3RhdGUgdG8gcHJvcGVybHkgaGFuZGxlLiBZZXAsIHRoZSBjb2RlIGNvbmZpcm1zIGl0OiBpdCBleHBsaWNpdGx5IGNoZWNrcyBmb3IgYHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9USU1FX1dBSVRgLCBhbmQgaWYgdGhhdCdzIHRoZSBjYXNlIGl0IGNhbGxzIHJlbGV2YW50IGZ1bmN0aW9ucyBzdWNoIGFzIGBpbmV0X3R3c2tfZGVzY2hlZHVsZV9wdXRgLiBUaGlzIGluZGljYXRlcyBhIGJyb2FkZXIgZnVuY3Rpb25hbGl0eSB0aGFuIHRoZSBuYW1lIG1pZ2h0IHN1Z2dlc3QuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBsaW5nZXJpbmcgcmVzb3VyY2VzIGFuZCB0aGUgbmVlZCBmb3IgY2xlYW51cC4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgc2VlIGhvdyBpdCBhbGwgd29ya3MuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgZm9yIGB0Y3BfYWJvcnRgIGRpcmVjdGx5IG5vdyB0byBiZSBzdXJlIG9mIG15IHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTA1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjI6MTIuNDY5NTYxMzA3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzUzNDQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgdGNwX2Fib3J0XFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcC5jPTUwODk9dm9pZCB0Y3BfZG9uZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy01MTE0LVxcbm5ldC9pcHY0L3RjcC5jOjUxMTU6aW50IHRjcF9hYm9ydChzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXFxubmV0L2lwdjQvdGNwLmMtNTExNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIyOjEyLjUxNzA5ODk5OVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDU2MjgyNzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGB0Y3AuY2AqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluLiBNeSBpbnRlcm5hbCByYWRhciBqdXN0IHBpbmdlZCBvbiBgdGNwLmNgLiBTb21ldGhpbmcncyBwcm9iYWJseSBoYXBwZW5pbmcgYXJvdW5kIGxpbmUgNTExNSB0aGF0IHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIEknbSBnb2luZyB0byBzdGFydCB0aGVyZSBhbmQgc2VlIHdoYXQganVtcHMgb3V0LiBJIGhhdmUgYSBmZWVsaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpcyBnb2luZyBvbiBpbiB0aGUgVENQIGltcGxlbWVudGF0aW9uIGFuZCBsaW5lIDUxMTUgZmVlbHMgbGlrZSBhIGdvb2Qgc3BvdCB0byBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSBoYXMgdG8gb2ZmZXIuIEknbSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZnVuY3Rpb24gb3IgYmxvY2sgYW5kIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIFRDUCBjb250ZXh0LiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTA3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjI6MTQuOTczMzk1ODcyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMjk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTE1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MTE1OlxcdGludCB0Y3BfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKVxcbjUxMTY6XFx0e1xcbjUxMTc6XFx0XFx0aW50IHN0YXRlID0gaW5ldF9za19zdGF0ZV9sb2FkKHNrKTtcXG41MTE4OlxcdFxcbjUxMTk6XFx0XFx0aWYgKHN0YXRlID09IFRDUF9ORVdfU1lOX1JFQ1YpIHtcXG41MTIwOlxcdFxcdFxcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSA9IGluZXRfcmVxc2soc2spO1xcbjUxMjE6XFx0XFxuNTEyMjpcXHRcXHRcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuNTEyMzpcXHRcXHRcXHRpbmV0X2Nza19yZXFza19xdWV1ZV9kcm9wKHJlcS1cXHUwMDNlcnNrX2xpc3RlbmVyLCByZXEpO1xcbjUxMjQ6XFx0XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuNTEyNTpcXHRcXHRcXHRyZXR1cm4gMDtcXG41MTI2OlxcdFxcdH1cXG41MTI3OlxcdFxcdGlmIChzdGF0ZSA9PSBUQ1BfVElNRV9XQUlUKSB7XFxuNTEyODpcXHRcXHRcXHRzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dyA9IGluZXRfdHdzayhzayk7XFxuNTEyOTpcXHRcXG41MTMwOlxcdFxcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2dHctXFx1MDAzZXR3X3JlZmNudCk7XFxuNTEzMTpcXHRcXHRcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuNTEzMjpcXHRcXHRcXHRpbmV0X3R3c2tfZGVzY2hlZHVsZV9wdXQodHcpO1xcbjUxMzM6XFx0XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuNTEzNDpcXHRcXHRcXHRyZXR1cm4gMDtcXG41MTM1OlxcdFxcdH1cXG41MTM2OlxcdFxcbjUxMzc6XFx0XFx0LyogQlBGIGNvbnRleHQgZW5zdXJlcyBzb2NrIGxvY2tpbmcuICovXFxuNTEzODpcXHRcXHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcXG41MTM5OlxcdFxcdFxcdC8qIERvbid0IHJhY2Ugd2l0aCB1c2Vyc3BhY2Ugc29ja2V0IGNsb3NlcyBzdWNoIGFzIHRjcF9jbG9zZS4gKi9cXG41MTQwOlxcdFxcdFxcdGxvY2tfc29jayhzayk7XFxuNTE0MTpcXHRcXG41MTQyOlxcdFxcdC8qIEF2b2lkIGNsb3NpbmcgdGhlIHNhbWUgc29ja2V0IHR3aWNlLiAqL1xcbjUxNDM6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHtcXG41MTQ0OlxcdFxcdFxcdGlmICghaGFzX2N1cnJlbnRfYnBmX2N0eCgpKVxcbjUxNDU6XFx0XFx0XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG41MTQ2OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbjUxNDc6XFx0XFx0fVxcbjUxNDg6XFx0XFxuNTE0OTpcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU4pIHtcXG41MTUwOlxcdFxcdFxcdHRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7XFxuNTE1MTpcXHRcXHRcXHRpbmV0X2Nza19saXN0ZW5fc3RvcChzayk7XFxuNTE1MjpcXHRcXHR9XFxuNTE1MzpcXHRcXG41MTU0OlxcdFxcdC8qIERvbid0IHJhY2Ugd2l0aCBCSCBzb2NrZXQgY2xvc2VzIHN1Y2ggYXMgaW5ldF9jc2tfbGlzdGVuX3N0b3AuICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEzOjIyOjE0Ljk3MzczMDIwMloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODQyOTI5MDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzIGFuZCBTYWZldHkgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgcGF0Y2ggZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGZvY3VzZXMgb24gbWVtb3J5IHNhZmV0eSBhbmQsIHNwZWNpZmljYWxseSwgd2hldGhlciBpdCBpbnRyb2R1Y2VzIGFueSBuZXcgS01TQU4gY29uY2VybnMuIEZpcnN0LCBJJ20gbm90aW5nIHRoZSBjb3JlIGNoYW5nZXM6IGBicGZfc29ja19kZXN0cm95YCBoYXMgYmVlbiB1cGRhdGVkIHRvIGhhbmRsZSBub24tZnVsbCBzb2NrZXRzIG1vcmUgZ3JhY2VmdWxseS4gSXQgYXZvaWRzIHRoZSBwcm9ibGVtYXRpYyBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIGFjY2VzcyBvbiBzb2NrZXRzIGxpa2UgYGluZXRfdGltZXdhaXRfc29ja2Agd2l0aCBhIGNoZWNrIHVzaW5nIGBza19mdWxsc29jaygpYC4gVGhpcyBpcyBnb29kLCBhcyBpdCBwcmV2ZW50cyBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24uIEl0IGFsc28gYWxsb3dzIHRoZSBkaXJlY3QgY2FsbCB0byBgc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7YC4gVGhlbiwgYGluZXRfY3NrX2xpc3Rlbl9zdG9wYCBoYXMgYmVlbiBhZGp1c3RlZCB0byBhdm9pZCBgY29uZF9yZXNjaGVkKClgIHdoZW4gcnVubmluZyB3aXRoaW4gYSBCUEYgY29udGV4dCwgd2hpY2ggaXMgYSBzZW5zaWJsZSBwcmVjYXV0aW9uIGZvciBhdG9taWMgb3IgUkNVIGNvbnRleHRzLiBGaW5hbGx5LCB0aGVyZSBhcmUgYWRkZWQgc2VsZnRlc3RzLCB3aGljaCwgb2YgY291cnNlLCBhcmUgYWx3YXlzIHdlbGNvbWUuXG5cbk5vdywgcmVnYXJkaW5nIG1lbW9yeSBzYWZldHksIEknbSBub3Qgc2VlaW5nIGFueSByZWQgZmxhZ3MuIFRoZXJlIGFyZW4ndCBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvbiB0aGUgaGVhcCBvciBzdGFjay4gTm8gb3BlcmF0aW9ucyB3aXRoIHVzZXJzcGFjZSAoY29weWluZywgZXRjKS4gSSdtIG5vdCBmaW5kaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgb3IgY29kZSB0aGF0IHVzZXMgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gY29uZGl0aW9uYWwgbG9naWMuIEluIGZhY3QsIHRoaXMgcGF0Y2ggKmltcHJvdmVzKiBtZW1vcnkgc2FmZXR5IGJ5IGd1YXJkaW5nIGFnYWluc3QgdGhlIHBvdGVudGlhbCBmb3IgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9mIGBzay1cdTAwM2Vza19wcm90b2NvbGAgaW4gdGhlIGNhc2Ugb2Ygbm9uLWZ1bGwgc29ja2V0cywgd2hpY2ggaXMgZ3JlYXQuIFRoZSBmaXggZm9yIGBjb25kX3Jlc2NoZWQoKWAgYXZvaWRzIGF0b21pYyBjb250ZXh0IGlzc3Vlcy4gSXQgYXBwZWFycyBzb3VuZC5cblxuSSd2ZSBnb25lIHRocm91Z2ggdGhlIGZvdXIgS01TQU4gY3JpdGVyaWE6XG4xLiBObyBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxuMi4gTm8gY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXG4zLiBObyBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24gd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHVzZWQuXG40LiBObyBib3VuZHMgY2hlY2tzIHRoYXQgbWlnaHQgYWxsb3cgcmVhZGluZyBiZXlvbmQgYnVmZmVyIGJvdW5kYXJpZXMuXG5UaGVyZWZvcmUsIEtNU0FOIGlzbid0IGEgY29uY2VybiBoZXJlLlxuXG5UbyBzdW1tYXJpemUsIHRoaXMgcGF0Y2ggaW1wcm92ZXMgc2FmZXR5IGJ5IGNvcnJlY3RseSBtYW5hZ2luZyBzb2NrZXQgZGVzdHJ1Y3Rpb24gYW5kIHNjaGVkdWxpbmcgd2l0aGluIEJQRiBjb250ZXh0cy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgS01TQU4tcmVsYXRlZCBpc3N1ZXMuIFRoZSBleGlzdGluZyBLQVNBTiwgTE9DS0RFUCwgYW5kIGRlYnVnZ2luZyBmYWNpbGl0aWVzIHdpbGwgY2F0Y2ggb3RoZXIgcG90ZW50aWFsIGlzc3VlcyAoZS5nLiwgVUFGLCByZWZlcmVuY2UgY291bnRpbmcsIGxvY2tpbmcpLlxuXG5UaGlzIHNob3VsZCBpbmZvcm0gYSBgc2V0LXJlc3VsdHNgIHRvb2wgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMTAsIk91dHB1dFRva2VucyI6MjA0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTM6MjI6MjEuODE2NjYyMzk3WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX3NvY2tfZGVzdHJveSgpYCB0byBzdXBwb3J0IG5vbi1mdWxsIHNvY2tldHMgKGUuZy4sIFRDUCBUSU1FX1dBSVQgc29ja2V0cykgYnkgZ3VhcmRpbmcgdGhlIGBzay1cXHUwMDNlc2tfcHJvdG9jb2xgIGNoZWNrIHdpdGggYHNrX2Z1bGxzb2NrKClgLCBhbmQgdXBkYXRlcyBgaW5ldF9jc2tfbGlzdGVuX3N0b3AoKWAgdG8gYnlwYXNzIGBjb25kX3Jlc2NoZWQoKWAgd2hlbiBydW5uaW5nIHdpdGhpbiBhIEJQRiBleGVjdXRpb24gY29udGV4dCB0byBwcmV2ZW50IHNsZWVwaW5nIGluIGF0b21pYy9SQ1UgY29udGV4dHMuXFxuXFxuVGhlc2UgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBjb3B5LXRvLXVzZXIgb3BlcmF0aW9ucywgb3IgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBwb3RlbnRpYWwgcmlza3MgcmVsYXRlZCB0byBzb2NrZXQgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgZXhlY3V0aW9uIGNvbnRleHQgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyBhbmQgZGVidWdnZXJzIChLQVNBTiBmb3IgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcywgTE9DS0RFUCAvIERFQlVHX0FUT01JQ19TTEVFUCBmb3Igc2xlZXBpbmcgaW4gYXRvbWljIGNvbnRleHQpLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX3NvY2tfZGVzdHJveSgpYCB0byBzdXBwb3J0IG5vbi1mdWxsIHNvY2tldHMgKGUuZy4sIFRDUCBUSU1FX1dBSVQgc29ja2V0cykgYnkgZ3VhcmRpbmcgdGhlIGBzay1cXHUwMDNlc2tfcHJvdG9jb2xgIGNoZWNrIHdpdGggYHNrX2Z1bGxzb2NrKClgLCBhbmQgdXBkYXRlcyBgaW5ldF9jc2tfbGlzdGVuX3N0b3AoKWAgdG8gYnlwYXNzIGBjb25kX3Jlc2NoZWQoKWAgd2hlbiBydW5uaW5nIHdpdGhpbiBhIEJQRiBleGVjdXRpb24gY29udGV4dCB0byBwcmV2ZW50IHNsZWVwaW5nIGluIGF0b21pYy9SQ1UgY29udGV4dHMuXFxuXFxuVGhlc2UgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBjb3B5LXRvLXVzZXIgb3BlcmF0aW9ucywgb3IgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBwb3RlbnRpYWwgcmlza3MgcmVsYXRlZCB0byBzb2NrZXQgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgZXhlY3V0aW9uIGNvbnRleHQgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyBhbmQgZGVidWdnZXJzIChLQVNBTiBmb3IgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcywgTE9DS0RFUCAvIERFQlVHX0FUT01JQ19TTEVFUCBmb3Igc2xlZXBpbmcgaW4gYXRvbWljIGNvbnRleHQpLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowzqz6n[1] Phase: Succeeded StartedAt: 2026-09-10 13:22:33 +0000 UTC FinishedAt: 2026-09-10 13:22:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqz6n[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-10 13:22:33 +0000 UTC FinishedAt: 2026-09-10 13:22:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqz6n[2] Phase: Succeeded StartedAt: 2026-09-10 13:22:33 +0000 UTC FinishedAt: 2026-09-10 17:02:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-10 13:22:33 +0000 UTC FinishedAt: 2026-09-10 17:02:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-10 13:22:33 +0000 UTC FinishedAt: 2026-09-10 13:22:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-10 13:22:33 +0000 UTC FinishedAt: 2026-09-10 13:22:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowzqz6n/series-workflowzqz6n-convert-artifact-2340450487/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-10 13:22:43 +0000 UTC FinishedAt: 2026-09-10 13:39:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-10 13:22:43 +0000 UTC FinishedAt: 2026-09-10 13:39:34 +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:*e384afeb-a8f1-49b6-ac60-614d9d48e075,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-workflowzqz6n/series-workflowzqz6n-convert-artifact-2340450487/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": "9a40e032-553c-4cd9-bd78-3f2f4f616ccc", "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-workflowzqz6n/series-workflowzqz6n-build-action-3030765581/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-10 13:22:43 +0000 UTC FinishedAt: 2026-09-10 13:39:24 +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:*e384afeb-a8f1-49b6-ac60-614d9d48e075,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-workflowzqz6n/series-workflowzqz6n-convert-artifact-2340450487/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": "9a40e032-553c-4cd9-bd78-3f2f4f616ccc", "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-workflowzqz6n/series-workflowzqz6n-build-action-3030765581/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-10 13:39:34 +0000 UTC FinishedAt: 2026-09-10 13:39:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-10 13:39:34 +0000 UTC FinishedAt: 2026-09-10 13:39:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-10 13:39:34 +0000 UTC FinishedAt: 2026-09-10 13:39:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-10 13:39:34 +0000 UTC FinishedAt: 2026-09-10 13:39:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowzqz6n/series-workflowzqz6n-convert-artifact-159402982/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-10 13:39:44 +0000 UTC FinishedAt: 2026-09-10 13:41:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-10 13:39:44 +0000 UTC FinishedAt: 2026-09-10 13:41:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9a40e032-553c-4cd9-bd78-3f2f4f616ccc,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-workflowzqz6n/series-workflowzqz6n-build-action-3030765581/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-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-10 13:41:52 +0000 UTC FinishedAt: 2026-09-10 13:41:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-10 13:41:52 +0000 UTC FinishedAt: 2026-09-10 13:41:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-10 13:41:52 +0000 UTC FinishedAt: 2026-09-10 13:58:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-10 13:41:52 +0000 UTC FinishedAt: 2026-09-10 13:58:46 +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:*e384afeb-a8f1-49b6-ac60-614d9d48e075,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-workflowzqz6n/series-workflowzqz6n-convert-artifact-159402982/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": "d6e37c27-9116-4355-a603-e73074a1d781", "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-workflowzqz6n/series-workflowzqz6n-build-action-4200137130/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-10 13:41:52 +0000 UTC FinishedAt: 2026-09-10 13:58:36 +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:*e384afeb-a8f1-49b6-ac60-614d9d48e075,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-workflowzqz6n/series-workflowzqz6n-convert-artifact-159402982/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": "d6e37c27-9116-4355-a603-e73074a1d781", "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-workflowzqz6n/series-workflowzqz6n-build-action-4200137130/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-10 13:58:46 +0000 UTC FinishedAt: 2026-09-10 13:58:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-10 13:58:46 +0000 UTC FinishedAt: 2026-09-10 13:58:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-10 13:58:46 +0000 UTC FinishedAt: 2026-09-10 14:00:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-10 13:58:46 +0000 UTC FinishedAt: 2026-09-10 14:00:34 +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:*d6e37c27-9116-4355-a603-e73074a1d781,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-workflowzqz6n/series-workflowzqz6n-build-action-4200137130/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-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-10 14:00:44 +0000 UTC FinishedAt: 2026-09-10 17:02:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-10 14:00:44 +0000 UTC FinishedAt: 2026-09-10 17:02:07 +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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"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:*9a40e032-553c-4cd9-bd78-3f2f4f616ccc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d6e37c27-9116-4355-a603-e73074a1d781,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-workflowzqz6n/series-workflowzqz6n-build-action-3030765581/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-workflowzqz6n/series-workflowzqz6n-build-action-4200137130/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-10 14:00:44 +0000 UTC FinishedAt: 2026-09-10 14:00:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-10 14:00:44 +0000 UTC FinishedAt: 2026-09-10 14:00: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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"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-workflowzqz6n/series-workflowzqz6n-convert-artifact-2410703147/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-10 14:00:44 +0000 UTC FinishedAt: 2026-09-10 14:00:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-10 14:00:44 +0000 UTC FinishedAt: 2026-09-10 14:00:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-10 14:00:44 +0000 UTC FinishedAt: 2026-09-10 14:00:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-10 14:00:54 +0000 UTC FinishedAt: 2026-09-10 17:02:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqz6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","inet_csk_listen_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","INET"],"series_id":"d9df2dc8-c122-426b-be13-58e48b2a4c8a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-10 14:00:54 +0000 UTC FinishedAt: 2026-09-10 17:01:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9a40e032-553c-4cd9-bd78-3f2f4f616ccc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d6e37c27-9116-4355-a603-e73074a1d781,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-workflowzqz6n/series-workflowzqz6n-build-action-3030765581/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-workflowzqz6n/series-workflowzqz6n-build-action-4200137130/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-workflowzqz6n/series-workflowzqz6n-convert-artifact-2410703147/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,}