Name: series-workflowzmgvk Phase: Succeeded StartedAt: 2026-08-25 13:24:18 +0000 UTC FinishedAt: 2026-08-25 17:49:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmgvk[0] Phase: Succeeded StartedAt: 2026-08-25 13:24:18 +0000 UTC FinishedAt: 2026-08-25 14:07:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmgvk[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 13:24:18 +0000 UTC FinishedAt: 2026-08-25 14:07:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS", "DAMON_RECLAIM", "DAMON_LRU_SORT", "DAMON_STAT", "DAMON_DEBUG_SANITY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS", "DAMON_RECLAIM", "DAMON_LRU_SORT", "DAMON_STAT", "DAMON_DEBUG_SANITY" ], "series_id": "53dbd309-f70d-4e7f-bd0b-0a12e3f2a656" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_commit_ctx", "damon_start", "damon_new_scheme", "damon_set_regions" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9SRUNMQUlNJiMzNDssCiAgICAmIzM0O0RBTU9OX0xSVV9TT1JUJiMzNDssCiAgICAmIzM0O0RBTU9OX1NUQVQmIzM0OywKICAgICYjMzQ7REFNT05fREVCVUdfU0FOSVRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fY29tbWl0X2N0eCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zdGFydCYjMzQ7LAogICAgJiMzNDtkYW1vbl9uZXdfc2NoZW1lJiMzNDssCiAgICAmIzM0O2RhbW9uX3NldF9yZWdpb25zJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIHRyYWNraW5nIG9mIHRoZSBEQU1PUyAoREFNT04tYmFzZWQgT3BlcmF0aW9uIFNjaGVtZXMpIHF1b3RhIHdhbGsgcG9zaXRpb24sIHJlcGxhY2luZyBgY2hhcmdlX3RhcmdldF9mcm9tYCBhbmQgYGNoYXJnZV9hZGRyX2Zyb21gIHdpdGggYHdhbGtfdGFyZ2V0X2Zyb21gIGFuZCBgd2Fsa19hZGRyX2Zyb21gLiBUaGVzZSBuZXcgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIE5VTEwgYW5kIDAgaW4gYGRhbW9zX3F1b3RhX2luaXQoKWAuIFRoZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGludGVybmFsIGtlcm5lbCBjb250cm9sIGZsb3cgYW5kIHJlZ2lvbiBpdGVyYXRpb24gbG9naWMuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgb2YgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIHRvIHRyYWNrIHRoZSB3YWxraW5nIHBvc2l0aW9uIG9mIERBTU9TIChEQU1PTi1iYXNlZCBPcGVyYXRpb24gU2NoZW1lcykgcXVvdGFzLiBJdCByZW5hbWVzIHRoZSB0cmFja2luZyB2YXJpYWJsZXMgYW5kIGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIGhhbmRsZSBza2lwcGluZyB3YWxrZWQgcmVnaW9ucyBhbmQgcm90YXRpbmcgdGFyZ2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHN5c2ZzIG9yIGtlcm5lbCBBUElzLCBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ3YmY1Y2NmM2FmOWQyM2RhNTA4YjUzMzM5MGE2NzM0NGVhOTcyNjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxMzozOTowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbmluZGV4IDBjOGI3ZGRlZjlhYmIuLjVlMDc1NWViYWQ3NTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuQEAgLTI5Niw4ICYjNDM7Mjk2LDEwIEBAIHN0cnVjdCBkYW1vc19xdW90YSB7XG4gXHQvKiBGb3IgY2hhcmdpbmcgdGhlIHF1b3RhICovXG4gXHR1bnNpZ25lZCBsb25nIGNoYXJnZWRfc3o7XG4gXHR1bnNpZ25lZCBsb25nIGNoYXJnZWRfZnJvbTtcbi1cdHN0cnVjdCBkYW1vbl90YXJnZXQgKmNoYXJnZV90YXJnZXRfZnJvbTtcbi1cdHVuc2lnbmVkIGxvbmcgY2hhcmdlX2FkZHJfZnJvbTtcbiYjNDM7XG4mIzQzO1x0LyogRm9yIHRyYWNraW5nIHRoZSBEQU1PUyB3YWxrIHBvc2l0aW9uIChyb3RhdGluZyBjdXJzb3IpICovXG4mIzQzO1x0c3RydWN0IGRhbW9uX3RhcmdldCAqd2Fsa190YXJnZXRfZnJvbTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHdhbGtfYWRkcl9mcm9tO1xuIFxuIFx0LyogRm9yIHByaW9yaXRpemF0aW9uICovXG4gXHR1bnNpZ25lZCBpbnQgbWluX3Njb3JlO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggNjQ0ZGFmNWExNjU2MC4uYmJkYjUzMDUxM2ExOCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jXG5AQCAtNDA0LDYgJiM0Mzs0MDQsNTIgQEAgc3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdHJldHVybiBsaXN0X2lzX2xhc3QoXHUwMDI2ci1cdTAwM2VsaXN0LCBcdTAwMjZ0LVx1MDAzZXJlZ2lvbnNfbGlzdCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBkYW1vc19jb21wbGV0ZWx5X3dhbGtlZChzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqICYjMzk7XHUwMDNlPSYjMzk7IGluc3RlYWQgb2YgJiMzOTs9PSYjMzk7LCBiZWNhdXNlIHRoZSByZWdpb24gc2V0IG9mIEB0IGNvdWxkIGhhdmUgYmVlblxuJiM0MztcdCAqIHNocnVua2VuIGJ5IGRhbW9uX3NldF9yZWdpb25zKCkgYWZ0ZXIgdGhlIGN1cnNvciB3YXMgc2F2ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIHMtXHUwMDNlcXVvdGEud2Fsa190YXJnZXRfZnJvbSA9PSB0IFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0cy1cdTAwM2VxdW90YS53YWxrX2FkZHJfZnJvbSBcdTAwM2U9IGRhbW9uX2xhc3RfcmVnaW9uKHQpLVx1MDAzZWFyLmVuZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBkYW1vbl90YXJnZXQgKmRhbW9uX25leHRfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4mIzQzO1x0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9IFx1MDAyNmMtXHUwMDNlYWRhcHRpdmVfdGFyZ2V0cztcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpzdGFydCA9IHQ7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3RhcmdldCAqbmV4dCA9IHQ7XG4mIzQzO1xuJiM0MztcdHdoaWxlICh0cnVlKSB7XG4mIzQzO1x0XHRpZiAobGlzdF9pc19sYXN0KFx1MDAyNm5leHQtXHUwMDNlbGlzdCwgaGVhZCkpXG4mIzQzO1x0XHRcdG5leHQgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBkYW1vbl90YXJnZXQsIGxpc3QpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRuZXh0ID0gbGlzdF9uZXh0X2VudHJ5KG5leHQsIGxpc3QpO1xuJiM0MztcbiYjNDM7XHRcdGlmICghYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIHx8IGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZChuZXh0KSlcbiYjNDM7XHRcdFx0cmV0dXJuIG5leHQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5leHQgPT0gc3RhcnQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZGFtb3NfcmVwbGFjZV9pbnZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuJiM0MztcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vcyAqcztcbiYjNDM7XG4mIzQzO1x0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbiYjNDM7XHRcdGlmIChzLVx1MDAzZXF1b3RhLndhbGtfdGFyZ2V0X2Zyb20gIT0gdClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0cy1cdTAwM2VxdW90YS53YWxrX3RhcmdldF9mcm9tID0gZGFtb25fbmV4dF92YWxpZF90YXJnZXQodCwgYyk7XG4mIzQzO1x0XHRzLVx1MDAzZXF1b3RhLndhbGtfYWRkcl9mcm9tID0gMDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogZGFtb25fcHJvYmVfaGl0c193c3VtKCkgLSBSZXR1cm5zIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIG9mIGEgcmVnaW9uLlxuICAqIEByOlx0XHRyZWdpb24gdG8gZ2V0IHRoZSB3ZWlnaHRlZCBzdW0gb2YuXG5AQCAtNjczLDggJiM0Mzs3MTksOCBAQCBzdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhICpkYW1vc19xdW90YV9pbml0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXG4gXHRxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX25zID0gMDtcbiBcdHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogPSAwO1xuIFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tID0gMDtcbi1cdHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG4tXHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbiYjNDM7XHRxdW90YS1cdTAwM2V3YWxrX3RhcmdldF9mcm9tID0gTlVMTDtcbiYjNDM7XHRxdW90YS1cdTAwM2V3YWxrX2FkZHJfZnJvbSA9IDA7XG4gXHRxdW90YS1cdTAwM2Vlc3pfYnAgPSAwO1xuIFx0cmV0dXJuIHF1b3RhO1xuIH1cbkBAIC0xNjI4LDkgJiM0MzsxNjc0LDkgQEAgc3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0cyhcbiBcbiBcdFx0XHRkYW1vbl9kZXN0cm95X3RhcmdldChkc3RfdGFyZ2V0LCBkc3QpO1xuIFx0XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBkc3QpIHtcbi1cdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9PSBkc3RfdGFyZ2V0KSB7XG4tXHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbi1cdFx0XHRcdFx0cy1cdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tID0gMDtcbiYjNDM7XHRcdFx0XHRpZiAocy1cdTAwM2VxdW90YS53YWxrX3RhcmdldF9mcm9tID09IGRzdF90YXJnZXQpIHtcbiYjNDM7XHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEud2Fsa190YXJnZXRfZnJvbSA9IE5VTEw7XG4mIzQzO1x0XHRcdFx0XHRzLVx1MDAzZXF1b3RhLndhbGtfYWRkcl9mcm9tID0gMDtcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cbkBAIC0yMzEyLDY0ICYjNDM7MjM1OCw1NCBAQCBzdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiB9XG4gXG4gLypcbi0gKiBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKCkgLSBDaGVjayBpZiB0aGUgZ2l2ZW4gcmVnaW9uIG9yIHN0YXJ0aW5nIHBhcnQgb2Zcbi0gKiBpdCBpcyBhbHJlYWR5IGNoYXJnZWQgZm9yIHRoZSBEQU1PUyBxdW90YS5cbiYjNDM7ICogZGFtb3Nfc2tpcF93YWxrZWRfcmVnaW9uKCkgLSBDaGVjayBpZiB0aGUgZ2l2ZW4gcmVnaW9uIG9yIHN0YXJ0aW5nIHBhcnQgb2ZcbiYjNDM7ICogaXQgaXMgYWxyZWFkeSB3YWxrZWQgZm9yIHRoZSBEQU1PUyBxdW90YS5cbiAgKiBAdDpcdFRoZSB0YXJnZXQgb2YgdGhlIHJlZ2lvbi5cbi0gKiBAcnA6XHRUaGUgcG9pbnRlciB0byB0aGUgcmVnaW9uLlxuJiM0MzsgKiBAcjpcdFRoZSBwb2ludGVyIHRvIHRoZSByZWdpb24uXG4gICogQHM6XHRUaGUgc2NoZW1lIHRvIGJlIGFwcGxpZWQuXG4gICogQG1pbl9yZWdpb25fc3o6XHRtaW5pbXVtIHJlZ2lvbiBzaXplLlxuICAqXG4tICogSWYgYSBxdW90YSBvZiBhIHNjaGVtZSBoYXMgZXhjZWVkZWQgaW4gYSBxdW90YSBjaGFyZ2Ugd2luZG93LCB0aGUgc2NoZW1lJiMzOTtzXG4tICogYWN0aW9uIHdvdWxkIGFwcGxpZWQgdG8gb25seSBhIHBhcnQgb2YgdGhlIHRhcmdldCBhY2Nlc3MgcGF0dGVybiBmdWxmaWxsaW5nXG4tICogcmVnaW9ucy4gIFRvIGF2b2lkIGFwcGx5aW5nIHRoZSBzY2hlbWUgYWN0aW9uIHRvIG9ubHkgYWxyZWFkeSBhcHBsaWVkXG4tICogcmVnaW9ucywgREFNT04gc2tpcHMgYXBwbHlpbmcgdGhlIHNjaGVtZSBhY3Rpb24gdG8gdGhlIHJlZ2lvbnMgdGhhdCBjaGFyZ2VkXG4tICogaW4gdGhlIHByZXZpb3VzIGNoYXJnZSB3aW5kb3cuXG4tICpcbi0gKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBhIGdpdmVuIHJlZ2lvbiBzaG91bGQgYmUgc2tpcHBlZCBvciBub3QgZm9yIHRoZVxuLSAqIHJlYXNvbi4gIElmIG9ubHkgdGhlIHN0YXJ0aW5nIHBhcnQgb2YgdGhlIHJlZ2lvbiBoYXMgcHJldmlvdXNseSBjaGFyZ2VkLFxuLSAqIHRoaXMgZnVuY3Rpb24gc3BsaXRzIHRoZSByZWdpb24gaW50byB0d28gc28gdGhhdCB0aGUgc2Vjb25kIG9uZSBjb3ZlcnMgdGhlXG4tICogYXJlYSB0aGF0IG5vdCBjaGFyZ2VkIGluIHRoZSBwcmV2aW91cyBjaGFyZ2Ugd2lkbm93LCBhbmQgcmV0dXJuIHRydWUuICBUaGVcbi0gKiBjYWxsZXIgY2FuIHNlZSB0aGUgc2Vjb25kIG9uZSBvbiB0aGUgbmV4dCBpdGVyYXRpb24gb2YgdGhlIHJlZ2lvbiB3YWxrLlxuLSAqIE5vdGUgdGhhdCB0aGlzIG1lYW5zIHRoZSBjYWxsZXIgc2hvdWxkIHVzZSBkYW1vbl9mb3JfZWFjaF9yZWdpb24oKSBpbnN0ZWFkXG4tICogb2YgZGFtb25fZm9yX2VhY2hfcmVnaW9uX3NhZmUoKS4gIElmIGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9zYWZlKCkgaXMgdXNlZCxcbi0gKiB0aGUgc2Vjb25kIHJlZ2lvbiB3aWxsIGp1c3QgYmUgaWdub3JlZC5cbiYjNDM7ICogV2hlbiBhIHF1b3RhIGlzIGNvbmZpZ3VyZWQsIERBTU9OIHJlY29yZHMgaG93IGZhciBpdCBoYXMgd2Fsa2VkIHNvIHRoYXRcbiYjNDM7ICogc3Vic2VxdWVudCBxdW90YSB3aW5kb3dzIGNvbnRpbnVlIGZyb20gdGhhdCBwb2ludCBpbnN0ZWFkIG9mIHJlLWFwcGx5aW5nIHRoZVxuJiM0MzsgKiBzYW1lIHJlZ2lvbnMuICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBmb3IgcmVnaW9ucyB0aGF0IGFyZSBiZWZvcmUgdGhlXG4mIzQzOyAqIHJlY29yZGVkIGN1cnNvciBhbmQgdGhlcmVmb3JlIHNob3VsZCBiZSBza2lwcGVkLiAgSWYgb25seSB0aGUgc3RhcnRpbmcgcGFydFxuJiM0MzsgKiBoYXMgYmVlbiB3YWxrZWQsIHRoZSByZWdpb24gaXMgc3BsaXQgc28gdGhhdCB0aGUgcmVtYWluaW5nIHBhcnQgY2FuIGJlXG4mIzQzOyAqIHZpc2l0ZWQuXG4gICpcbiAgKiBSZXR1cm46IHRydWUgaWYgdGhlIHJlZ2lvbiBzaG91bGQgYmUgc2tpcHBlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAqL1xuLXN0YXRpYyBib29sIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiYjNDM7c3RhdGljIGJvb2wgZGFtb3Nfc2tpcF93YWxrZWRfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcbiBcdFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxuIHtcbiBcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuIFx0dW5zaWduZWQgbG9uZyBzel90b19za2lwO1xuIFxuLVx0LyogU2tpcCBwcmV2aW91c2x5IGNoYXJnZWQgcmVnaW9ucyAqL1xuLVx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSkge1xuLVx0XHRpZiAodCAhPSBxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20pXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXHRcdGlmIChyID09IGRhbW9uX2xhc3RfcmVnaW9uKHQpKSB7XG4tXHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbi1cdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbiYjNDM7XHRpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIFNraXAgcHJldmlvdXNseSB3YWxrZWQgcmVnaW9ucyAqL1xuJiM0MztcdGlmIChxdW90YS1cdTAwM2V3YWxrX3RhcmdldF9mcm9tKSB7XG4mIzQzO1x0XHRpZiAodCAhPSBxdW90YS1cdTAwM2V3YWxrX3RhcmdldF9mcm9tKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuLVx0XHR9XG4tXHRcdGlmIChxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0ci1cdTAwM2Vhci5lbmQgXHUwMDNjPSBxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tKVxuJiM0MztcdFx0aWYgKHF1b3RhLVx1MDAzZXdhbGtfYWRkcl9mcm9tIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdHItXHUwMDNlYXIuZW5kIFx1MDAzYz0gcXVvdGEtXHUwMDNld2Fsa19hZGRyX2Zyb20pXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRcdGlmIChxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIFx1MDAyNlx1MDAyNiByLVx1MDAzZWFyLnN0YXJ0IFx1MDAzY1xuLVx0XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSkge1xuLVx0XHRcdHN6X3RvX3NraXAgPSBBTElHTl9ET1dOKHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gLVxuJiM0MztcdFx0aWYgKHF1b3RhLVx1MDAzZXdhbGtfYWRkcl9mcm9tIFx1MDAyNlx1MDAyNiByLVx1MDAzZWFyLnN0YXJ0IFx1MDAzY1xuJiM0MztcdFx0XHRcdHF1b3RhLVx1MDAzZXdhbGtfYWRkcl9mcm9tKSB7XG4mIzQzO1x0XHRcdHN6X3RvX3NraXAgPSBBTElHTl9ET1dOKHF1b3RhLVx1MDAzZXdhbGtfYWRkcl9mcm9tIC1cbiBcdFx0XHRcdFx0ci1cdTAwM2Vhci5zdGFydCwgbWluX3JlZ2lvbl9zeik7XG4gXHRcdFx0aWYgKCFzel90b19za2lwKSB7XG4tXHRcdFx0XHRpZiAoZGFtb25fc3pfcmVnaW9uKHIpIFx1MDAzYz0gbWluX3JlZ2lvbl9zeilcbiYjNDM7XHRcdFx0XHRpZiAoZGFtb25fc3pfcmVnaW9uKHIpIFx1MDAzYz0gbWluX3JlZ2lvbl9zeikge1xuJiM0MztcdFx0XHRcdFx0cXVvdGEtXHUwMDNld2Fsa19hZGRyX2Zyb20gPSByLVx1MDAzZWFyLmVuZDtcbiBcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHRcdFx0fVxuIFx0XHRcdFx0c3pfdG9fc2tpcCA9IG1pbl9yZWdpb25fc3o7XG4gXHRcdFx0fVxuIFx0XHRcdGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBzel90b19za2lwKTtcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0fVxuLVx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xuLVx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbiBcdH1cbiBcdHJldHVybiBmYWxzZTtcbiB9XG5AQCAtMjYyNywxMCAmIzQzOzI2NjMsNiBAQCBzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdFx0cXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9ucyAmIzQzOz0gdGltZXNwZWM2NF90b19ucyhcdTAwMjZlbmQpIC1cbiBcdFx0XHR0aW1lc3BlYzY0X3RvX25zKFx1MDAyNmJlZ2luKTtcbiBcdFx0ZGFtb3NfY2hhcmdlX3F1b3RhKHF1b3RhLCBzeiwgc3pfYXBwbGllZCk7XG4tXHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKSB7XG4tXHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gdDtcbi1cdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gci1cdTAwM2Vhci5lbmQ7XG4tXHRcdH1cbiBcdH1cbiBcdGlmIChzLVx1MDAzZWFjdGlvbiAhPSBEQU1PU19TVEFUKVxuIFx0XHRyLVx1MDAzZWFnZSA9IDA7XG5AQCAtMjYzOSw4ICYjNDM7MjY3MSwxOSBAQCBzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdGRhbW9zX3VwZGF0ZV9zdGF0KHMsIHN6LCBzel9hcHBsaWVkLCBzel9vcHNfZmlsdGVyX3Bhc3NlZCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi1cdFx0XHRcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9zX3dhbGtfbWF5YmVfcm90YXRlKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBkYW1vcyAqcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuJiM0MztcbiYjNDM7XHRpZiAoZGFtb3NfY29tcGxldGVseV93YWxrZWQocywgdCkpIHtcbiYjNDM7XHRcdHF1b3RhLVx1MDAzZXdhbGtfdGFyZ2V0X2Zyb20gPSBkYW1vbl9uZXh0X3ZhbGlkX3RhcmdldCh0LCBjKTtcbiYjNDM7XHRcdHF1b3RhLVx1MDAzZXdhbGtfYWRkcl9mcm9tID0gMDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG4ge1xuIFx0c3RydWN0IGRhbW9zICpzO1xuQEAgLTI2NTgsMTggJiM0MzsyNzAxLDMxIEBAIHN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbiBcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmIChkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHQsIHIsIHMsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG4tXHRcdFx0Y29udGludWU7XG4tXG4gXHRcdGlmIChzLVx1MDAzZW1heF9ucl9zbmFwc2hvdHMgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHRzLVx1MDAzZW1heF9ucl9zbmFwc2hvdHMgXHUwMDNjPSBzLVx1MDAzZXN0YXQubnJfc25hcHNob3RzKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFNraXAgcmVnaW9ucyBiZWZvcmUgdGhlIGN1cnNvci4gIElmIHRoZSBza2lwIG1ha2VzIHRoZSBjdXJzb3JcbiYjNDM7XHRcdCAqIHJlYWNoIHRoZSBlbmQgb2YgdGhpcyB0YXJnZXQsIHJvdGF0ZSB0byB0aGUgbmV4dCB2YWxpZCB0YXJnZXRcbiYjNDM7XHRcdCAqIGJlZm9yZSBjb250aW51aW5nIHdpdGggdGhlIG5leHQgcmVnaW9uL3NjaGVtZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbih0LCByLCBzLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKSB7XG4mIzQzO1x0XHRcdGRhbW9zX3dhbGtfbWF5YmVfcm90YXRlKGMsIHQsIHMpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGlmIChkYW1vc192YWxpZF90YXJnZXQoYywgciwgcykpXG4gXHRcdFx0ZGFtb3NfYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMpO1xuIFxuIFx0XHRpZiAoZGFtb25faXNfbGFzdF9yZWdpb24ociwgdCkpXG4gXHRcdFx0cy1cdTAwM2VzdGF0Lm5yX3NuYXBzaG90cyYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpIHtcbiYjNDM7XHRcdFx0cXVvdGEtXHUwMDNld2Fsa190YXJnZXRfZnJvbSA9IHQ7XG4mIzQzO1x0XHRcdHF1b3RhLVx1MDAzZXdhbGtfYWRkcl9mcm9tID0gci1cdTAwM2Vhci5lbmQ7XG4mIzQzO1x0XHRcdGRhbW9zX3dhbGtfbWF5YmVfcm90YXRlKGMsIHQsIHMpO1xuJiM0MztcdFx0fVxuIFx0fVxuIH1cbiBcbkBAIC0zMjQxLDggJiM0MzszMjk3LDEwIEBAIHN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuIFx0bWF4X3JlZ2lvbl9zeiA9IGRhbW9uX3JlZ2lvbl9zel9saW1pdChjKTtcbiBcdG11dGV4X2xvY2soXHUwMDI2Yy1cdTAwM2V3YWxrX2NvbnRyb2xfbG9jayk7XG4gXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xuLVx0XHRpZiAoYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIFx1MDAyNlx1MDAyNiBjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2UpXG4mIzQzO1x0XHRpZiAoYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIFx1MDAyNlx1MDAyNiBjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2UpIHtcbiYjNDM7XHRcdFx0ZGFtb3NfcmVwbGFjZV9pbnZhbGlkX3RhcmdldChjLCB0KTtcbiBcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiBcdFx0ZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opO1xuIFx0fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjI3bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fUkVDTEFJTSYjMzQ7LAogICAgJiMzNDtEQU1PTl9MUlVfU09SVCYjMzQ7LAogICAgJiMzNDtEQU1PTl9TVEFUJiMzNDssCiAgICAmIzM0O0RBTU9OX0RFQlVHX1NBTklUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX2NvbW1pdF9jdHgmIzM0OywKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAgICYjMzQ7ZGFtb25fbmV3X3NjaGVtZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9zZXRfcmVnaW9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBsb2dpYyBvZiBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcikgdG8gdHJhY2sgdGhlIHdhbGtpbmcgcG9zaXRpb24gb2YgREFNT1MgKERBTU9OLWJhc2VkIE9wZXJhdGlvbiBTY2hlbWVzKSBxdW90YXMuIEl0IHJlbmFtZXMgdGhlIHRyYWNraW5nIHZhcmlhYmxlcyBhbmQgaW50cm9kdWNlcyBuZXcgbG9naWMgdG8gaGFuZGxlIHNraXBwaW5nIHdhbGtlZCByZWdpb25zIGFuZCByb3RhdGluZyB0YXJnZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgc3lzZnMgb3Iga2VybmVsIEFQSXMsIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDdiZjVjY2YzYWY5ZDIzZGE1MDhiNTMzMzkwYTY3MzQ0ZWE5NzI2NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDEzOjM5OjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCmluZGV4IDBjOGI3ZGRlZjlhYmIuLjVlMDc1NWViYWQ3NTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKQEAgLTI5Niw4ICYjNDM7Mjk2LDEwIEBAIHN0cnVjdCBkYW1vc19xdW90YSB7CiAJLyogRm9yIGNoYXJnaW5nIHRoZSBxdW90YSAqLwogCXVuc2lnbmVkIGxvbmcgY2hhcmdlZF9zejsKIAl1bnNpZ25lZCBsb25nIGNoYXJnZWRfZnJvbTsKLQlzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpjaGFyZ2VfdGFyZ2V0X2Zyb207Ci0JdW5zaWduZWQgbG9uZyBjaGFyZ2VfYWRkcl9mcm9tOwomIzQzOwomIzQzOwkvKiBGb3IgdHJhY2tpbmcgdGhlIERBTU9TIHdhbGsgcG9zaXRpb24gKHJvdGF0aW5nIGN1cnNvcikgKi8KJiM0MzsJc3RydWN0IGRhbW9uX3RhcmdldCAqd2Fsa190YXJnZXRfZnJvbTsKJiM0MzsJdW5zaWduZWQgbG9uZyB3YWxrX2FkZHJfZnJvbTsKIAogCS8qIEZvciBwcmlvcml0aXphdGlvbiAqLwogCXVuc2lnbmVkIGludCBtaW5fc2NvcmU7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggNjQ0ZGFmNWExNjU2MC4uYmJkYjUzMDUxM2ExOCAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtNDA0LDYgJiM0Mzs0MDQsNTIgQEAgc3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKIAlyZXR1cm4gbGlzdF9pc19sYXN0KCZhbXA7ci0mZ3Q7bGlzdCwgJmFtcDt0LSZndDtyZWdpb25zX2xpc3QpOwogfQogCiYjNDM7c3RhdGljIGJvb2wgZGFtb3NfY29tcGxldGVseV93YWxrZWQoc3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogJiMzOTsmZ3Q7PSYjMzk7IGluc3RlYWQgb2YgJiMzOTs9PSYjMzk7LCBiZWNhdXNlIHRoZSByZWdpb24gc2V0IG9mIEB0IGNvdWxkIGhhdmUgYmVlbgomIzQzOwkgKiBzaHJ1bmtlbiBieSBkYW1vbl9zZXRfcmVnaW9ucygpIGFmdGVyIHRoZSBjdXJzb3Igd2FzIHNhdmVkLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIHMtJmd0O3F1b3RhLndhbGtfdGFyZ2V0X2Zyb20gPT0gdCAmYW1wOyZhbXA7CiYjNDM7CQlzLSZndDtxdW90YS53YWxrX2FkZHJfZnJvbSAmZ3Q7PSBkYW1vbl9sYXN0X3JlZ2lvbih0KS0mZ3Q7YXIuZW5kOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbmV4dF92YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKJiM0MzsJCXN0cnVjdCBkYW1vbl9jdHggKmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJmFtcDtjLSZndDthZGFwdGl2ZV90YXJnZXRzOwomIzQzOwlzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpzdGFydCA9IHQ7CiYjNDM7CXN0cnVjdCBkYW1vbl90YXJnZXQgKm5leHQgPSB0OwomIzQzOwomIzQzOwl3aGlsZSAodHJ1ZSkgewomIzQzOwkJaWYgKGxpc3RfaXNfbGFzdCgmYW1wO25leHQtJmd0O2xpc3QsIGhlYWQpKQomIzQzOwkJCW5leHQgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBkYW1vbl90YXJnZXQsIGxpc3QpOwomIzQzOwkJZWxzZQomIzQzOwkJCW5leHQgPSBsaXN0X25leHRfZW50cnkobmV4dCwgbGlzdCk7CiYjNDM7CiYjNDM7CQlpZiAoIWMtJmd0O29wcy50YXJnZXRfdmFsaWQgfHwgYy0mZ3Q7b3BzLnRhcmdldF92YWxpZChuZXh0KSkKJiM0MzsJCQlyZXR1cm4gbmV4dDsKJiM0MzsKJiM0MzsJCWlmIChuZXh0ID09IHN0YXJ0KQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkYW1vc19yZXBsYWNlX2ludmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsCiYjNDM7CQlzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9zICpzOwomIzQzOwomIzQzOwlkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykgewomIzQzOwkJaWYgKHMtJmd0O3F1b3RhLndhbGtfdGFyZ2V0X2Zyb20gIT0gdCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXMtJmd0O3F1b3RhLndhbGtfdGFyZ2V0X2Zyb20gPSBkYW1vbl9uZXh0X3ZhbGlkX3RhcmdldCh0LCBjKTsKJiM0MzsJCXMtJmd0O3F1b3RhLndhbGtfYWRkcl9mcm9tID0gMDsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qKgogICogZGFtb25fcHJvYmVfaGl0c193c3VtKCkgLSBSZXR1cm5zIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIG9mIGEgcmVnaW9uLgogICogQHI6CQlyZWdpb24gdG8gZ2V0IHRoZSB3ZWlnaHRlZCBzdW0gb2YuCkBAIC02NzMsOCAmIzQzOzcxOSw4IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRhbW9zX3F1b3RhX2luaXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSkKIAlxdW90YS0mZ3Q7dG90YWxfY2hhcmdlZF9ucyA9IDA7CiAJcXVvdGEtJmd0O2NoYXJnZWRfc3ogPSAwOwogCXF1b3RhLSZndDtjaGFyZ2VkX2Zyb20gPSAwOwotCXF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMOwotCXF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tID0gMDsKJiM0MzsJcXVvdGEtJmd0O3dhbGtfdGFyZ2V0X2Zyb20gPSBOVUxMOwomIzQzOwlxdW90YS0mZ3Q7d2Fsa19hZGRyX2Zyb20gPSAwOwogCXF1b3RhLSZndDtlc3pfYnAgPSAwOwogCXJldHVybiBxdW90YTsKIH0KQEAgLTE2MjgsOSAmIzQzOzE2NzQsOSBAQCBzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRzKAogCiAJCQlkYW1vbl9kZXN0cm95X3RhcmdldChkc3RfdGFyZ2V0LCBkc3QpOwogCQkJZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGRzdCkgewotCQkJCWlmIChzLSZndDtxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPT0gZHN0X3RhcmdldCkgewotCQkJCQlzLSZndDtxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMOwotCQkJCQlzLSZndDtxdW90YS5jaGFyZ2VfYWRkcl9mcm9tID0gMDsKJiM0MzsJCQkJaWYgKHMtJmd0O3F1b3RhLndhbGtfdGFyZ2V0X2Zyb20gPT0gZHN0X3RhcmdldCkgewomIzQzOwkJCQkJcy0mZ3Q7cXVvdGEud2Fsa190YXJnZXRfZnJvbSA9IE5VTEw7CiYjNDM7CQkJCQlzLSZndDtxdW90YS53YWxrX2FkZHJfZnJvbSA9IDA7CiAJCQkJfQogCQkJfQogCQl9CkBAIC0yMzEyLDY0ICYjNDM7MjM1OCw1NCBAQCBzdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKIH0KIAogLyoKLSAqIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oKSAtIENoZWNrIGlmIHRoZSBnaXZlbiByZWdpb24gb3Igc3RhcnRpbmcgcGFydCBvZgotICogaXQgaXMgYWxyZWFkeSBjaGFyZ2VkIGZvciB0aGUgREFNT1MgcXVvdGEuCiYjNDM7ICogZGFtb3Nfc2tpcF93YWxrZWRfcmVnaW9uKCkgLSBDaGVjayBpZiB0aGUgZ2l2ZW4gcmVnaW9uIG9yIHN0YXJ0aW5nIHBhcnQgb2YKJiM0MzsgKiBpdCBpcyBhbHJlYWR5IHdhbGtlZCBmb3IgdGhlIERBTU9TIHF1b3RhLgogICogQHQ6CVRoZSB0YXJnZXQgb2YgdGhlIHJlZ2lvbi4KLSAqIEBycDoJVGhlIHBvaW50ZXIgdG8gdGhlIHJlZ2lvbi4KJiM0MzsgKiBAcjoJVGhlIHBvaW50ZXIgdG8gdGhlIHJlZ2lvbi4KICAqIEBzOglUaGUgc2NoZW1lIHRvIGJlIGFwcGxpZWQuCiAgKiBAbWluX3JlZ2lvbl9zejoJbWluaW11bSByZWdpb24gc2l6ZS4KICAqCi0gKiBJZiBhIHF1b3RhIG9mIGEgc2NoZW1lIGhhcyBleGNlZWRlZCBpbiBhIHF1b3RhIGNoYXJnZSB3aW5kb3csIHRoZSBzY2hlbWUmIzM5O3MKLSAqIGFjdGlvbiB3b3VsZCBhcHBsaWVkIHRvIG9ubHkgYSBwYXJ0IG9mIHRoZSB0YXJnZXQgYWNjZXNzIHBhdHRlcm4gZnVsZmlsbGluZwotICogcmVnaW9ucy4gIFRvIGF2b2lkIGFwcGx5aW5nIHRoZSBzY2hlbWUgYWN0aW9uIHRvIG9ubHkgYWxyZWFkeSBhcHBsaWVkCi0gKiByZWdpb25zLCBEQU1PTiBza2lwcyBhcHBseWluZyB0aGUgc2NoZW1lIGFjdGlvbiB0byB0aGUgcmVnaW9ucyB0aGF0IGNoYXJnZWQKLSAqIGluIHRoZSBwcmV2aW91cyBjaGFyZ2Ugd2luZG93LgotICoKLSAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGEgZ2l2ZW4gcmVnaW9uIHNob3VsZCBiZSBza2lwcGVkIG9yIG5vdCBmb3IgdGhlCi0gKiByZWFzb24uICBJZiBvbmx5IHRoZSBzdGFydGluZyBwYXJ0IG9mIHRoZSByZWdpb24gaGFzIHByZXZpb3VzbHkgY2hhcmdlZCwKLSAqIHRoaXMgZnVuY3Rpb24gc3BsaXRzIHRoZSByZWdpb24gaW50byB0d28gc28gdGhhdCB0aGUgc2Vjb25kIG9uZSBjb3ZlcnMgdGhlCi0gKiBhcmVhIHRoYXQgbm90IGNoYXJnZWQgaW4gdGhlIHByZXZpb3VzIGNoYXJnZSB3aWRub3csIGFuZCByZXR1cm4gdHJ1ZS4gIFRoZQotICogY2FsbGVyIGNhbiBzZWUgdGhlIHNlY29uZCBvbmUgb24gdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSByZWdpb24gd2Fsay4KLSAqIE5vdGUgdGhhdCB0aGlzIG1lYW5zIHRoZSBjYWxsZXIgc2hvdWxkIHVzZSBkYW1vbl9mb3JfZWFjaF9yZWdpb24oKSBpbnN0ZWFkCi0gKiBvZiBkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZSgpLiAgSWYgZGFtb25fZm9yX2VhY2hfcmVnaW9uX3NhZmUoKSBpcyB1c2VkLAotICogdGhlIHNlY29uZCByZWdpb24gd2lsbCBqdXN0IGJlIGlnbm9yZWQuCiYjNDM7ICogV2hlbiBhIHF1b3RhIGlzIGNvbmZpZ3VyZWQsIERBTU9OIHJlY29yZHMgaG93IGZhciBpdCBoYXMgd2Fsa2VkIHNvIHRoYXQKJiM0MzsgKiBzdWJzZXF1ZW50IHF1b3RhIHdpbmRvd3MgY29udGludWUgZnJvbSB0aGF0IHBvaW50IGluc3RlYWQgb2YgcmUtYXBwbHlpbmcgdGhlCiYjNDM7ICogc2FtZSByZWdpb25zLiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgZm9yIHJlZ2lvbnMgdGhhdCBhcmUgYmVmb3JlIHRoZQomIzQzOyAqIHJlY29yZGVkIGN1cnNvciBhbmQgdGhlcmVmb3JlIHNob3VsZCBiZSBza2lwcGVkLiAgSWYgb25seSB0aGUgc3RhcnRpbmcgcGFydAomIzQzOyAqIGhhcyBiZWVuIHdhbGtlZCwgdGhlIHJlZ2lvbiBpcyBzcGxpdCBzbyB0aGF0IHRoZSByZW1haW5pbmcgcGFydCBjYW4gYmUKJiM0MzsgKiB2aXNpdGVkLgogICoKICAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcmVnaW9uIHNob3VsZCBiZSBza2lwcGVkLCBmYWxzZSBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBib29sIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKJiM0MztzdGF0aWMgYm9vbCBkYW1vc19za2lwX3dhbGtlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKIAkJc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLAogCQl1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opCiB7CiAJc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9ICZhbXA7cy0mZ3Q7cXVvdGE7CiAJdW5zaWduZWQgbG9uZyBzel90b19za2lwOwogCi0JLyogU2tpcCBwcmV2aW91c2x5IGNoYXJnZWQgcmVnaW9ucyAqLwotCWlmIChxdW90YS0mZ3Q7Y2hhcmdlX3RhcmdldF9mcm9tKSB7Ci0JCWlmICh0ICE9IHF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb20pCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJaWYgKHIgPT0gZGFtb25fbGFzdF9yZWdpb24odCkpIHsKLQkJCXF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMOwotCQkJcXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20gPSAwOwomIzQzOwlpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIFNraXAgcHJldmlvdXNseSB3YWxrZWQgcmVnaW9ucyAqLwomIzQzOwlpZiAocXVvdGEtJmd0O3dhbGtfdGFyZ2V0X2Zyb20pIHsKJiM0MzsJCWlmICh0ICE9IHF1b3RhLSZndDt3YWxrX3RhcmdldF9mcm9tKQogCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJaWYgKHF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tICZhbXA7JmFtcDsKLQkJCQlyLSZndDthci5lbmQgJmx0Oz0gcXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20pCiYjNDM7CQlpZiAocXVvdGEtJmd0O3dhbGtfYWRkcl9mcm9tICZhbXA7JmFtcDsKJiM0MzsJCQkJci0mZ3Q7YXIuZW5kICZsdDs9IHF1b3RhLSZndDt3YWxrX2FkZHJfZnJvbSkKIAkJCXJldHVybiB0cnVlOwogCi0JCWlmIChxdW90YS0mZ3Q7Y2hhcmdlX2FkZHJfZnJvbSAmYW1wOyZhbXA7IHItJmd0O2FyLnN0YXJ0ICZsdDsKLQkJCQlxdW90YS0mZ3Q7Y2hhcmdlX2FkZHJfZnJvbSkgewotCQkJc3pfdG9fc2tpcCA9IEFMSUdOX0RPV04ocXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20gLQomIzQzOwkJaWYgKHF1b3RhLSZndDt3YWxrX2FkZHJfZnJvbSAmYW1wOyZhbXA7IHItJmd0O2FyLnN0YXJ0ICZsdDsKJiM0MzsJCQkJcXVvdGEtJmd0O3dhbGtfYWRkcl9mcm9tKSB7CiYjNDM7CQkJc3pfdG9fc2tpcCA9IEFMSUdOX0RPV04ocXVvdGEtJmd0O3dhbGtfYWRkcl9mcm9tIC0KIAkJCQkJci0mZ3Q7YXIuc3RhcnQsIG1pbl9yZWdpb25fc3opOwogCQkJaWYgKCFzel90b19za2lwKSB7Ci0JCQkJaWYgKGRhbW9uX3N6X3JlZ2lvbihyKSAmbHQ7PSBtaW5fcmVnaW9uX3N6KQomIzQzOwkJCQlpZiAoZGFtb25fc3pfcmVnaW9uKHIpICZsdDs9IG1pbl9yZWdpb25fc3opIHsKJiM0MzsJCQkJCXF1b3RhLSZndDt3YWxrX2FkZHJfZnJvbSA9IHItJmd0O2FyLmVuZDsKIAkJCQkJcmV0dXJuIHRydWU7CiYjNDM7CQkJCX0KIAkJCQlzel90b19za2lwID0gbWluX3JlZ2lvbl9zejsKIAkJCX0KIAkJCWRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBzel90b19za2lwKTsKIAkJCXJldHVybiB0cnVlOwogCQl9Ci0JCXF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMOwotCQlxdW90YS0mZ3Q7Y2hhcmdlX2FkZHJfZnJvbSA9IDA7CiAJfQogCXJldHVybiBmYWxzZTsKIH0KQEAgLTI2MjcsMTAgJiM0MzsyNjYzLDYgQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJCXF1b3RhLSZndDt0b3RhbF9jaGFyZ2VkX25zICYjNDM7PSB0aW1lc3BlYzY0X3RvX25zKCZhbXA7ZW5kKSAtCiAJCQl0aW1lc3BlYzY0X3RvX25zKCZhbXA7YmVnaW4pOwogCQlkYW1vc19jaGFyZ2VfcXVvdGEocXVvdGEsIHN6LCBzel9hcHBsaWVkKTsKLQkJaWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtJmd0O21pbl9yZWdpb25fc3opKSB7Ci0JCQlxdW90YS0mZ3Q7Y2hhcmdlX3RhcmdldF9mcm9tID0gdDsKLQkJCXF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tID0gci0mZ3Q7YXIuZW5kOwotCQl9CiAJfQogCWlmIChzLSZndDthY3Rpb24gIT0gREFNT1NfU1RBVCkKIAkJci0mZ3Q7YWdlID0gMDsKQEAgLTI2MzksOCAmIzQzOzI2NzEsMTkgQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJZGFtb3NfdXBkYXRlX3N0YXQocywgc3osIHN6X2FwcGxpZWQsIHN6X29wc19maWx0ZXJfcGFzc2VkKTsKIH0KIAotc3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLAotCQkJCSAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiYjNDM7c3RhdGljIHZvaWQgZGFtb3Nfd2Fsa19tYXliZV9yb3RhdGUoc3RydWN0IGRhbW9uX2N0eCAqYywKJiM0MzsJCQkJICAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgZGFtb3MgKnMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gJmFtcDtzLSZndDtxdW90YTsKJiM0MzsKJiM0MzsJaWYgKGRhbW9zX2NvbXBsZXRlbHlfd2Fsa2VkKHMsIHQpKSB7CiYjNDM7CQlxdW90YS0mZ3Q7d2Fsa190YXJnZXRfZnJvbSA9IGRhbW9uX25leHRfdmFsaWRfdGFyZ2V0KHQsIGMpOwomIzQzOwkJcXVvdGEtJmd0O3dhbGtfYWRkcl9mcm9tID0gMDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJCQkJICAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcikKIHsKIAlzdHJ1Y3QgZGFtb3MgKnM7CkBAIC0yNjU4LDE4ICYjNDM7MjcwMSwzMSBAQCBzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsCiAJCWlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLSZndDttaW5fcmVnaW9uX3N6KSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHQsIHIsIHMsIGMtJmd0O21pbl9yZWdpb25fc3opKQotCQkJY29udGludWU7Ci0KIAkJaWYgKHMtJmd0O21heF9ucl9zbmFwc2hvdHMgJmFtcDsmYW1wOwogCQkJCXMtJmd0O21heF9ucl9zbmFwc2hvdHMgJmx0Oz0gcy0mZ3Q7c3RhdC5ucl9zbmFwc2hvdHMpCiAJCQljb250aW51ZTsKIAomIzQzOwkJLyoKJiM0MzsJCSAqIFNraXAgcmVnaW9ucyBiZWZvcmUgdGhlIGN1cnNvci4gIElmIHRoZSBza2lwIG1ha2VzIHRoZSBjdXJzb3IKJiM0MzsJCSAqIHJlYWNoIHRoZSBlbmQgb2YgdGhpcyB0YXJnZXQsIHJvdGF0ZSB0byB0aGUgbmV4dCB2YWxpZCB0YXJnZXQKJiM0MzsJCSAqIGJlZm9yZSBjb250aW51aW5nIHdpdGggdGhlIG5leHQgcmVnaW9uL3NjaGVtZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbih0LCByLCBzLCBjLSZndDttaW5fcmVnaW9uX3N6KSkgewomIzQzOwkJCWRhbW9zX3dhbGtfbWF5YmVfcm90YXRlKGMsIHQsIHMpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwogCQlpZiAoZGFtb3NfdmFsaWRfdGFyZ2V0KGMsIHIsIHMpKQogCQkJZGFtb3NfYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMpOwogCiAJCWlmIChkYW1vbl9pc19sYXN0X3JlZ2lvbihyLCB0KSkKIAkJCXMtJmd0O3N0YXQubnJfc25hcHNob3RzJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCWlmIChkYW1vc19xdW90YV9pc19zZXQocXVvdGEpKSB7CiYjNDM7CQkJcXVvdGEtJmd0O3dhbGtfdGFyZ2V0X2Zyb20gPSB0OwomIzQzOwkJCXF1b3RhLSZndDt3YWxrX2FkZHJfZnJvbSA9IHItJmd0O2FyLmVuZDsKJiM0MzsJCQlkYW1vc193YWxrX21heWJlX3JvdGF0ZShjLCB0LCBzKTsKJiM0MzsJCX0KIAl9CiB9CiAKQEAgLTMyNDEsOCAmIzQzOzMyOTcsMTAgQEAgc3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpCiAJbWF4X3JlZ2lvbl9zeiA9IGRhbW9uX3JlZ2lvbl9zel9saW1pdChjKTsKIAltdXRleF9sb2NrKCZhbXA7Yy0mZ3Q7d2Fsa19jb250cm9sX2xvY2spOwogCWRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7Ci0JCWlmIChjLSZndDtvcHMudGFyZ2V0X3ZhbGlkICZhbXA7JmFtcDsgYy0mZ3Q7b3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZSkKJiM0MzsJCWlmIChjLSZndDtvcHMudGFyZ2V0X3ZhbGlkICZhbXA7JmFtcDsgYy0mZ3Q7b3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZSkgewomIzQzOwkJCWRhbW9zX3JlcGxhY2VfaW52YWxpZF90YXJnZXQoYywgdCk7CiAJCQljb250aW51ZTsKJiM0MzsJCX0KIAkJZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTgxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFBhdGNoIFJldmlldyAmYW1wOyBGdXp6aW5nIEZlYXNpYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBEQU1PTiBjb3JlLCBzcGVjaWZpY2FsbHkgdGhlIHF1b3RhIHdhbGtpbmcgbG9naWMgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJdCYjMzk7cyBhIHByZXR0eSB0YXJnZXRlZCBtb2RpZmljYXRpb24sIHJlbmFtaW5nIGEgY291cGxlIG9mIHZhcmlhYmxlcyAoYGNoYXJnZV90YXJnZXRfZnJvbWAgYW5kIGBjaGFyZ2VfYWRkcl9mcm9tYCBiZWNvbWluZyBgd2Fsa190YXJnZXRfZnJvbWAgYW5kIGB3YWxrX2FkZHJfZnJvbWApIGFuZCBpbnRyb2R1Y2luZyBhIGZldyBuZXcgZnVuY3Rpb25zLiBUaGVzZSBhZGRpdGlvbnMsIGBkYW1vc19jb21wbGV0ZWx5X3dhbGtlZGAsIGBkYW1vbl9uZXh0X3ZhbGlkX3RhcmdldGAsIGBkYW1vc19yZXBsYWNlX2ludmFsaWRfdGFyZ2V0YCwgYGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbmAsIGFuZCBgZGFtb3Nfd2Fsa19tYXliZV9yb3RhdGVgLCBzdHJvbmdseSBzdWdnZXN0IGEgbW9yZSBudWFuY2VkIGFwcHJvYWNoIHRvIHRyYWNraW5nIGFuZCBtYW5hZ2luZyBEQU1PUyB3YWxraW5nLiBUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBkYW1vbl9kb19hcHBseV9zY2hlbWVzYCBhbmQgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AsIHdoaWNoIGFyZSBrZXkgYXBwbGljYXRpb24gcG9pbnRzLgoKVGhlIGJpZyBxdWVzdGlvbiBub3cgaXMsICYjMzQ7SXMgdGhpcyBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZT8mIzM0OyBHaXZlbiBEQU1PTiYjMzk7cyByb2xlIGFzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyAmIzM0O1llcy4mIzM0OyBJdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIHN5c2ZzIGFuZCBrZXJuZWwgQVBJcywgd2hpY2ggcHJlc2VudHMgYSBnb29kIGF0dGFjayBzdXJmYWNlLgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgd2VpcmQgY29uZmlnIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IG1ha2UgdGhpcyBwYXRjaCBsZXNzIGludGVyZXN0aW5nIGZvciBmdXp6aW5nLiBJJiMzOTtsbCBzZWFyY2ggYG1tL2RhbW9uL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIERBTU9OIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGUgbW9kaWZpZWQgY29kZSBwYXRocy4gR290dGEgY292ZXIgYWxsIHRoZSBiYXNlcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MDQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGNvbmNpc2Ugc3VtbWFyeSBmb3IgYW4gZXhwZXJ0OgoKKipEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBDb3JlIExvZ2ljIFJldmlldyoqCgpSaWdodCwgaXQmIzM5O3MgdGltZSB0byBlbmFibGUgREFNT04sIHNwZWNpZmljYWxseSB3aXRoIHRoZSBgVkFERFJgLCBgUEFERFJgLCBgU1lTRlNgLCBgUkVDTEFJTWAsIGBMUlVfU09SVGAsIGFuZCBgU1RBVGAgb3B0aW9ucy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBJIGtub3cgdGhlc2UgZmVhdHVyZXMgYXJlIGRlc2lnbmVkIHRvIHByb3ZpZGUgaW4tZGVwdGggbW9uaXRvcmluZyBhbmQgcG90ZW50aWFsIG9wdGltaXphdGlvbiBjYXBhYmlsaXRpZXMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHN1c3BlY3QgZW5hYmxpbmcgYWxsIG9mIHRoZW0gYXQgb25jZSBtaWdodCBiZSBhIGJpdCB2ZXJib3NlIGZvciBpbml0aWFsIHRlc3RpbmcuIEkmIzM5O2xsIG5lZWQgdG8gdGFpbG9yIHRoZW0gdG8gdGhlIHNwZWNpZmljIHNjZW5hcmlvLgoKQmVmb3JlIEkgZGl2ZSBkZWVwZXIgaW50byBleHBlcmltZW50YXRpb24sIEkgbmVlZCB0byBjaGVjayB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiBpbiBgbW0vZGFtb24vY29yZS5jYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbiBjYWxscywgYW55IGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBvdmVyYWxsIGNvbnRyb2wgZmxvdyBvZiBEQU1PTi4gVGhpcyB3aWxsIGhlbHAgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBhY3RzLCBkZXBlbmRlbmNpZXMsIGFuZCBjb25maWd1cmF0aW9uIG51YW5jZXMuIFRoaXMgYXBwcm9hY2ggd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IGRpYWdub3NlIHByb2JsZW1zIGFuZCBvcHRpbWl6ZSBEQU1PTiB1c2FnZS4gSXQgd2lsbCBhbHNvIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgZWFjaCBvcHRpb24gaW50ZXJhY3RzIHdpdGggdGhlIG90aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMuKiBkYW1vc193YWxrX21heWJlX3JvdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MjYwOD1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjY3My1cbm1tL2RhbW9uL2NvcmUuYzoyNjc0OnN0YXRpYyB2b2lkIGRhbW9zX3dhbGtfbWF5YmVfcm90YXRlKHN0cnVjdCBkYW1vbl9jdHggKmMsXG5tbS9kYW1vbi9jb3JlLmMtMjY3NS1cdFx0XHRcdCAgICBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NzQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gUGF0Y2gqKgoKT2theSwgbGV0IG1lIGJyZWFrIGRvd24gdGhpcyBEQU1PTiBwYXRjaC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgaW50cm9kdWNpbmcgc29tZSBuZXcgc3RhdGljIGhlbHBlciBmdW5jdGlvbnM6IGBkYW1vc19jb21wbGV0ZWx5X3dhbGtlZGAsIGBkYW1vbl9uZXh0X3ZhbGlkX3RhcmdldGAsIGBkYW1vc19yZXBsYWNlX2ludmFsaWRfdGFyZ2V0YCwgYGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbmAsIGFuZCBgZGFtb3Nfd2Fsa19tYXliZV9yb3RhdGVgLiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBvcmdhbml6YXRpb25hbCBhcHByb2FjaCBmb3IgdGhlc2UgdHlwZXMgb2YgbG93LWxldmVsIHJvdXRpbmVzLgoKTm93LCB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGlzIGhvdyB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSAqdXNlZCouIGBkYW1vbl9kb19hcHBseV9zY2hlbWVzYCBzZWVtcyB0byBsZXZlcmFnZSBgZGFtb3Nfc2tpcF93YWxrZWRfcmVnaW9uYCBhbmQgYGRhbW9zX3dhbGtfbWF5YmVfcm90YXRlYC4gVGhhdCBzdWdnZXN0cyBzb21lIG9wdGltaXphdGlvbiBvciByb3RhdGlvbiBzdHJhdGVneSBkdXJpbmcgc2NoZW1lIGFwcGxpY2F0aW9uLiBBbmQgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgY2FsbHMgYGRhbW9zX3JlcGxhY2VfaW52YWxpZF90YXJnZXRgLCB3aGljaCBoaW50cyBhdCBoYW5kbGluZyBpbnZhbGlkIHRhcmdldCByZWdpb25zIHdpdGhpbiB0aGUga2VybmVsIGRhZW1vbiBjb250ZXh0LiBgZGFtb25fY29tbWl0X3RhcmdldHNgIGlzIGFsc28gbGlzdGVkIGFzIG1vZGlmaWVkLgoKR2l2ZW4gdGhpcywgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBhbmQgYGRhbW9uX2NvbW1pdF90YXJnZXRzYC4gVGhlc2UgYXJlIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBkaXJlY3RseSBpbXBhY3RlZCBhbmQgYXJlIHRoZSBsaWtlbHkgYXJlYXMgb2YgdGhlIHBhdGNoIHRoYXQgaW50cm9kdWNlIHNpZ25pZmljYW50IGJlaGF2aW9yIGNoYW5nZXMuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaWYgdGhlc2UgYXJlIHRoZSAqdHJ1ZSoga2V5IGZvY2FsIHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPy4qIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzI1OT1zdGF0aWMgdm9pZCBkYW1vc190cmFjZV9zdGF0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzI3NC1cbm1tL2RhbW9uL2NvcmUuYzozMjc1OnN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxubW0vZGFtb24vY29yZS5jLTMyNzYte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zODEwPXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zODgyLVx0XHQvKlxubW0vZGFtb24vY29yZS5jOjM4ODM6XHRcdCAqIGRvIGtkYW1vbmRfY2FsbCgpIGFuZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoKSBhZnRlclxubW0vZGFtb24vY29yZS5jLTM4ODQtXHRcdCAqIGtkYW1vbmRfbWVyZ2VfcmVnaW9ucygpIGlmIHBvc3NpYmxlLCB0byByZWR1Y2Ugb3ZlcmhlYWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzAzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKlN0YXRpYyBGdW5jdGlvbiBDb251bmRydW0qKgoKT2theSwgc28gYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGZpbmUsIEkgY2FuIHdvcmsgd2l0aCB0aGF0LiBCdXQgbm93IEkgbmVlZCB0byByZWFsbHkgY29uc2lkZXIgYGRhbW9uX2NvbW1pdF90YXJnZXRzYC4gSXMgdGhhdCBhbHNvIHN0YXRpYz8gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSwgYmVjYXVzZSB0aGUgYW5zd2VyIHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgaG93IEkgcHJvY2VlZC4gSWYgaXQmIzM5O3Mgc3RhdGljLCBpdCBpbnRyb2R1Y2VzIGEgd2hvbGUgZGlmZmVyZW50IHNldCBvZiBjb25zaWRlcmF0aW9ucyBhYm91dCBzY29wZSBhbmQgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3Vlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMuIEdvdHRhIGRpZyBkZWVwZXIgaW50byB0aGF0IG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8uKiBkYW1vbl9jb21taXRfdGFyZ2V0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTYzND1zdGF0aWMgdm9pZCBkYW1vbl9yZXZlcnRfdGFyZ2V0X2NvbW1pdHMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNjQ5LVxubW0vZGFtb24vY29yZS5jOjE2NTA6c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0cyhcbm1tL2RhbW9uL2NvcmUuYy0xNjUxLVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTc5Nz1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTgyNS1cdFx0cmV0dXJuIGVycjtcbm1tL2RhbW9uL2NvcmUuYzoxODI2Olx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldHMoZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTE4MjctXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTI5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIE5vbi1TdGF0aWMgRGVwZW5kZW5jaWVzIG9uIGBkYW1vbl9jb21taXRfdGFyZ2V0c2AqKgoKUmlnaHQsIHNvIGBkYW1vbl9jb21taXRfdGFyZ2V0c2AgaXMgYSBzdGF0aWMgdmFyaWFibGUsIHdoaWNoIGxpbWl0cyBpdHMgZGlyZWN0IHNjb3BlIGFuZCBwb3RlbnRpYWwgZm9yIGV4dGVybmFsIG1hbmlwdWxhdGlvbi4gVGhhdCYjMzk7cyBnb29kIGZyb20gYSBkZXNpZ24gcGVyc3BlY3RpdmUsIGdlbmVyYWxseSwgYnV0IGl0IGFsc28gbWVhbnMgSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2hlbiByZWFzb25pbmcgYWJvdXQgaXRzIGltcGFjdCBhY3Jvc3MgdGhlIGxhcmdlciBzeXN0ZW0uCgpOb3csIG15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgd2hpY2ggKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucyB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AgYWN0dWFsbHkgKmludGVyYWN0KiB3aXRoIGl0LCBldmVuIGluZGlyZWN0bHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGllY2VzIG9mIHRoZSBhcmNoaXRlY3R1cmUgbWlnaHQgZGVwZW5kIG9uIGl0cyB2YWx1ZSwgb3IgbWlnaHQgbWFuaXB1bGF0ZSBzb21ldGhpbmcgdGhhdCB0aGVuIHJlbGllcyBvbiB0aGF0IHZhbHVlLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBpbnRlcm5hbCBzdGF0ZSwgYW5kIEkgd2FudCBhIGZ1bGwgcGljdHVyZSBvZiBpdHMgcm9sZS4gVGhpcyBpcyBjcml0aWNhbCBmb3IgYXNzZXNzaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IGNoYW5nZXMgb3IgZGVidWdnaW5nIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBEQU1PTiYjMzk7cyBjb3JlIGNvbW1pdCB0YXJnZXQgYmVoYXZpb3IuIFRoaXMgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0IGRyaWxsaW5nIGludG8gaXRzIHVzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBkYW1vbl9jb21taXRfY3R4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0xODU1PXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfdGVzdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xODgzLSAqL1xubW0vZGFtb24vY29yZS5jOjE4ODQ6aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTg4NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZzoKCioqRXhhbWluaW5nIERBTU9OIEluaXRpYWxpemF0aW9uIGFuZCBDb250ZXh0cyoqCgpPa2F5LCBzbyBgZGFtb25fY29tbWl0X2N0eGAgaXMgZXhwb3J0ZWQg4oCTIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCwgYW5kIHRoYXQgY2VydGFpbmx5IGFmZmVjdHMgaG93IGl0IG1pZ2h0IGJlIHVzZWQgYW5kIGFjY2Vzc2VkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCB0aGVuIHN3aW5ncyB0byBga2RhbW9uZF9mbmAuIEhtbSwgaXQmIzM5O3MgZGVmaW5lZCBhcyBzdGF0aWMuIFRoYXQmIzM5O3MgYSBrZXkgZGlzdGluY3Rpb24gYW5kIHJhaXNlcyB0aGUgcXVlc3Rpb24gb2YgaXRzIHNjb3BlIGFuZCB2aXNpYmlsaXR5IGNvbXBhcmVkIHRvIHRoZSBleHBvcnRlZCBgZGFtb25fY29tbWl0X2N0eGAuIEl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZWlyIHJlbGF0aW9uc2hpcCwgaWYgYW55LiAKClRoZSBjb3JlIHF1ZXN0aW9uIHRoYXQgYXJpc2VzIGlzLCBob3cgaXMgREFNT04gYWN0dWFsbHkgbGF1bmNoZWQgb3IgaW5pdGlhbGl6ZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuIEhvdyBkb2VzIHRoZSBzeXN0ZW0gYnJpbmcgREFNT04gaW50byBvcGVyYXRpb24/IElzIGBkYW1vbl9jb21taXRfY3R4YCBwYXJ0IG9mIHRoYXQgaW5pdGlhbGl6YXRpb24/IElzIGl0IHVzZWQgYWZ0ZXI/IEtub3dpbmcgaG93IGl04oCZcyBzdGFydGVkIHdpbGwgaWxsdW1pbmF0ZSBob3cgdGhlc2Ugc2VlbWluZ2x5IGluZGVwZW5kZW50IGNvbXBvbmVudHMgaW50ZXJhY3QgYW5kIHRoZWlyIG92ZXJhbGwgcm9sZSBpbiB0aGUgREFNT04gYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIHRvIGFuc3dlciB0aGlzIHByb3Blcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IGRhbW9uX3N0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0yMDAzPXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjAxOS0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMDIwOmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxubW0vZGFtb24vY29yZS5jLTIwMjEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTQ2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkluaXRpYWwgQXNzZXNzbWVudCBhbmQgRGlyZWN0aW9uKioKCk9rYXksIHNvIGBkYW1vbl9zdGFydGAgaXMgZmxhZ2dlZCBhcyBiZWluZyBleHBvcnRlZC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSB0aGUgZW50cnkgcG9pbnQgZm9yIHNvbWUgY3JpdGljYWwgZGFlbW9uIG9yIHNlcnZpY2UuIE15IG5leHQgc3RlcCwgaW5zdGluY3RpdmVseSwgaXMgdG8gbG9vayBmb3IgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUsIHNvbWV0aGluZyBsaWtlIGBkYW1vc19xdW90YV9pbml0YCwgb3IgYSBmdW5jdGlvbiB3aXRoIGEgdmVyeSBzaW1pbGFyIG5hbWluZyBjb252ZW50aW9uLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgc2V0dXAgYW5kIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBiZWluZyBsb2FkZWQgb3Igc2V0LiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGxvZ2ljIHN0YXJ0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteLiogZGFtb3NfcXVvdGFfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMzkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipTdGF0aWMgVmFyaWFibGVzIGFuZCBTY2hlbWUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCBteSBtaW5kIGltbWVkaWF0ZWx5IGxhdGNoZXMgb250byBgZGFtb3NfcXVvdGFfaW5pdGAuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgZGVjbGFyZWQgYXMgYHN0YXRpY2AgaXMgYSBmbGFzaGluZyByZWQgbGlnaHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gQSBzdGF0aWMgdmFyaWFibGUgbWVhbnMgaXQgcmV0YWlucyBpdHMgdmFsdWUgYmV0d2VlbiBmdW5jdGlvbiBjYWxscy4gVGhpcyBhZmZlY3RzIHNjb3BpbmcsIG9mIGNvdXJzZSwgYnV0IGZvciB0aGUgbGlmZSBvZiBtZSwgSSBjYW4mIzM5O3QgcXVpdGUgc2VlIHRoZSBzcGVjaWZpYyBudWFuY2Ugb2YgaG93IHRoaXMgaXMgYWxsIGludGVycGxheWluZywgYW5kIHNvIEkgaGF2ZSB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzbiYjMzk7dCBhIGx1cmtpbmcgY29uY3VycmVuY3kgaXNzdWUgZG93biB0aGUgbGluZSwgb3IgcGVyaGFwcyBoYXMgc29tZSB1bmV4cGVjdGVkIGluaXRpYWxpemF0aW9uIGJlaGF2aW9yLgoKVGhlbiwgbXkgYXR0ZW50aW9uIHNoaWZ0cyB0byBgZGFtb25fbmV3X3NjaGVtZWAuIEkmIzM5O20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgKmhvdyogdGhpcyBpcyBnZXR0aW5nIGluaXRpYWxpemVkLCBhbmQgaWYgaXQmIzM5O3MgZGVwZW5kZW50IG9uIGBkYW1vc19xdW90YV9pbml0YCBpbiBzb21lIHdheS4gSXMgdGhlcmUgYSBkZWZpbmVkIG9yZGVyPyBIb3cgaXMgdGhlIHNjaGVtZSBuZXdlZD8gSXMgYGRhbW9uX25ld19zY2hlbWVgIGFsc28gc3RhdGljPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSB2YXJpYWJsZSBpbml0aWFsaXphdGlvbj8gSSBoYXZlIHRvIHN0YXJ0IG1hcHBpbmcgb3V0IHRoZSBkZXBlbmRlbmNpZXMuIFRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZXNlIHR3byBpcyB0aGUgbmV4dCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0cnVjdCBkYW1vcyBcXCpkYW1vbl9uZXdfc2NoZW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz03MTU9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSAqZGFtb3NfcXVvdGFfaW5pdChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03MjctXG5tbS9kYW1vbi9jb3JlLmM6NzI4OnN0cnVjdCBkYW1vcyAqZGFtb25fbmV3X3NjaGVtZShzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gKnBhdHRlcm4sXG5tbS9kYW1vbi9jb3JlLmMtNzI5LVx0XHRcdGVudW0gZGFtb3NfYWN0aW9uIGFjdGlvbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU2OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nOgoKKipGb2N1c2luZyBvbiB0aGUgRGFtb24gQ29kZSoqCgpPa2F5LCBzbyBgZGFtb25fbmV3X3NjaGVtZWAgaXMgbm93IG9mZmljaWFsbHkgZXhwb3J0ZWQsIHdoaWNoIGlzIGdyZWF0LiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIGl0IGEga2V5IHN5bWJvbCB0byB0cmFjay4gSSBuZWVkIHRvIGtlZXAgdGhhdCBvbmUgaW4gbWluZC4gSXQgdGVsbHMgbWUgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYSBuZXcgc2NoZW1lIHdpbGwgYmUgYXZhaWxhYmxlIGZvciBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIHRvIHVzZSwgYW5kIGluZGljYXRlcyB0aGUgZmVhdHVyZSBpcyByZWFjaGluZyBtYXR1cml0eS4KCkkmIzM5O20gdGhpbmtpbmcgdGhhdCBmb2N1c2luZyBvbiBhIGZldyBvdGhlciBrZXkgZnVuY3Rpb25zIGlzIHByb2JhYmx5IHRoZSBiZXN0IGFwcHJvYWNoIGF0IHRoaXMgc3RhZ2UuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBgZGFtb25fY29tbWl0X2N0eGAsIGBkYW1vbl9zdGFydGAsIGFuZCBgZGFtb25fbmV3X3NjaGVtZWAuIFRob3NlIHNlZW0gbGlrZSB0aGUgY29yZSBvZiB3aGF0ZXZlciBEYW1vbiBpcyBkb2luZyByaWdodCBub3cuIFRoZXkmIzM5O2xsIGdpdmUgbWUgYSBzdHJvbmcgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBmbG93IGFuZCBmdW5jdGlvbmFsaXR5LgoKSSBzaG91bGQgYWxzbyBpbmNsdWRlIGBkYW1vbl9zZXRfcmVnaW9uc2AgYXMgYSBwb3RlbnRpYWwgYXJlYSBvZiBpbnRlcmVzdC4gRGVwZW5kaW5nIG9uIGhvdyB0aGUgbmV3IHNjaGVtZSBpbnRlcmFjdHMgd2l0aCByZWdpb25zLCBpdCBjb3VsZCBiZSB2ZXJ5IHJlbGV2YW50IHRvIHRoZSBjaGFuZ2VzLiBJJiMzOTtsbCBmbGFnIGl0IGZvciBub3csIGFuZCBzZWUgaWYgaXQgZW1lcmdlcyBhcyBhIGNyaXRpY2FsIHBpZWNlIHdoZW4gbG9va2luZyBhdCB0aGUgb3RoZXIgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IGRhbW9uX3NldF9yZWdpb25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz00OTE9c3RhdGljIGludCBkYW1vbl9maWxsX3JlZ2lvbnNfaG9sZXMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqZmlyc3QsXG4tLVxubW0vZGFtb24vY29yZS5jLTUyMy0gKi9cbm1tL2RhbW9uL2NvcmUuYzo1MjQ6aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG5tbS9kYW1vbi9jb3JlLmMtNTI1LVx0XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDE4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgYGRhbW9uX3NldF9yZWdpb25zYCoqCgpPa2F5LCBzbyBgZGFtb25fc2V0X3JlZ2lvbnNgIGlzIGV4cG9ydGVkLCB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGEgZ29vZCBmb2NhbCBwb2ludCBmb3IgYW5hbHlzaXMuIEFuZCBpdCBsb29rcyBsaWtlIEkmIzM5O3ZlIGZvdW5kIGEgc29saWQgYW5jaG9yIHBvaW50LiBUaGUgcGF0Y2ggZGVzY3JpcHRpb24gcmVmZXJlbmNpbmcgYGRhbW9zX2NvbXBsZXRlbHlfd2Fsa2VkYCBtZW50aW9ucyBgZGFtb25fc2V0X3JlZ2lvbnMoKWAgZGlyZWN0bHksIHNwZWNpZmljYWxseSB0aGUgbnVhbmNlIG9mIHRoZSBmdW5jdGlvbiBwb3RlbnRpYWxseSBzaHJpbmtpbmcgYSByZWdpb24gc2V0IGFmdGVyIGEgY3Vyc29yIGlzIHNhdmVkOgoKYGBgYwoJLyoKCSAqICYjMzk7Jmd0Oz0mIzM5OyBpbnN0ZWFkIG9mICYjMzk7PT0mIzM5OywgYmVjYXVzZSB0aGUgcmVnaW9uIHNldCBvZiBAdCBjb3VsZCBoYXZlIGJlZW4KCSAqIHNocnVua2VuIGJ5IGRhbW9uX3NldF9yZWdpb25zKCkgYWZ0ZXIgdGhlIGN1cnNvciB3YXMgc2F2ZWQuCgkgKi8KYGBgCgpUaGF0IGRlZmluaXRlbHkgbWFrZXMgaXQgYSByZWxldmFudCBzeW1ib2wgdG8gZm9jdXMgb24uIFNvLCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZCBmb3IgdGhpcyB0aGluZyB0byBiZSB1c2VmdWw/IEkgbmVlZCB0byBjaGVjayBmb3IgYERBTU9OYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1NZU0ZTYCwgYERBTU9OX1JFQ0xBSU1gLCBhbmQgYERBTU9OX0xSVV9TT1JUYC4gVGhvc2UgYXJlIHRoZSBjb3JlIGNvbmZpZ3MgSSYjMzk7bSBhbHJlYWR5IGF3YXJlIG9mLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcGVydGluZW50IGNvbmZpZ3MgbHVya2luZyBpbiB0aGUgYmFja2dyb3VuZC4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTQtXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTYtXHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTQtXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWctMTYtXHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0yNS1cbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctMjctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNDYtXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNTUtXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcbm1tL2RhbW9uL0tjb25maWctNjktXHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNzUtXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctODctXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXG5tbS9kYW1vbi9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctOTktXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcbm1tL2RhbW9uL0tjb25maWctMTAxLVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMDctXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZy0xMDktXHRib29sIFwmIzM0O0J1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyB0aGUgREFNT04gQ29kZWJhc2UqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgREFNT04gaW1wbGVtZW50YXRpb24uIFRoZSBjb3JlIGZ1bmN0aW9uYWxpdHksIGFzIEkgcmVjYWxsIGZyb20gcHJldmlvdXMgd29yaywgc2hvdWxkIGJlIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gTWFrZXMgc2Vuc2UsIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIGFueSBtZW1vcnkgbW9uaXRvcmluZyBhbmQgYWRhcHRhdGlvbiB3b3VsZCBsaWtlbHkgcmVzaWRlLiBGaXJzdCwgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoYXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gc3VwcG9ydHMgaXQuIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGBDT05GSUdfREFNT05gIGlzIGFjdHVhbGx5IGRlZmluZWQuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZSBgbW0vZGFtb24vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBKdXN0IG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIGJ1aWxkIGVudmlyb25tZW50LiBUaGlzIGtpbmQgb2YgdXBmcm9udCBjaGVja2luZyBpcyBjcnVjaWFsIGZvciBhdm9pZGluZyB3aWxkIGdvb3NlIGNoYXNlcyBsYXRlciBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0b2JqLXlcdFx0XHRcdDo9IGNvcmUub1xuICAgNDpcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gdmFkZHIub1xuICAgNTpcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gcGFkZHIub1xuICAgNjpcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcdCYjNDM7PSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xuICAgNzpcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXG4gICA4Olx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xuICAgOTpcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjgwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqTWFrZWZpbGUgQW5hbHlzaXM6IE1vZHVsZSBDb21waWxhdGlvbiBUcmlnZ2VyKioKCk9rYXksIHNvIGBvYmoteSA6PSBjb3JlLm9gIGluIHRoaXMgY29udGV4dCBjbGVhcmx5IGluZGljYXRlcyB0aGF0IGBjb3JlLm9gIGlzIHNsYXRlZCBmb3IgY29tcGlsYXRpb24gaWYgaXRzIGRpcmVjdG9yeSBpcyBlbnRlcmVkIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIGhvdyB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBgb2JqLXlgIHZhcmlhYmxlLCB3b3Jrcy4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byB0aGUgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgYW5kIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGxpbmtpbmcgcHJvY2VkdXJlcy4gSSB3YW50IHRvIHNlZSAqaG93KiB0aGlzIGBjb3JlLm9gIGZpbGUgaXMgdWx0aW1hdGVseSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBUaGlzIHdpbGwgY29uZmlybSB0aGUgY29tcGlsYXRpb24gYmVoYXZpb3IuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIHBpY3R1cmUgd2lsbCByZWluZm9yY2UgaG93IHRoaXMgYnVpbGRzIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMzU9b2JqLSQoQ09ORklHX0RFQlVHX1BBR0VfUkVGKSAmIzQzOz0gZGVidWdfcGFnZV9yZWYub1xubW0vTWFrZWZpbGU6MTM2Om9iai0kKENPTkZJR19EQU1PTikgJiM0Mzs9IGRhbW9uL1xubW0vTWFrZWZpbGUtMTM3LW9iai0kKENPTkZJR19IQVJERU5FRF9VU0VSQ09QWSkgJiM0Mzs9IHVzZXJjb3B5Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NzUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gTW9kdWxlIFZ1bG5lcmFiaWxpdHkgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGBDT05GSUdfREFNT05gIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBoZXJlLiBUaGF0JiMzOTtzIHRoZSBnYXRla2VlcGVyLiBUaGUgcGF0Y2ggaXRzZWxmIHNlZW1zIHRvIGJlIGRpZ2dpbmcgaW50byBgbW0vZGFtb24vY29yZS5jYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZSBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIERBTU9OIGxvZ2ljIGxpdmVzIGFuZCBnZXRzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19EQU1PTmAgaXMgb24uIFRoaXMgaW5kaWNhdGVzIGNoYW5nZXMgdG8gc2NoZW1lIGFwcGxpY2F0aW9uIGFuZCBxdW90YSBtYW5hZ2VtZW50IOKAkyBqdWljeSB0YXJnZXRzIGZvciBwb3RlbnRpYWwgZnV6emluZy4gVGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlIGFuZCB3b3J0aCB0aGUgdGltZS4KCk15IGluaXRpYWwgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2Ugc3ltYm9sczogYGRhbW9uX2NvbW1pdF9jdHhgLCBgZGFtb25fc3RhcnRgLCBgZGFtb25fbmV3X3NjaGVtZWAsIGFuZCBgZGFtb25fc2V0X3JlZ2lvbnNgLiBUaG9zZSBmZWVsIGxpa2UgdGhlIGxvZ2ljYWwgZW50cnkgcG9pbnRzIG9yIGNyaXRpY2FsIGZ1bmN0aW9ucyB3aGVyZSB0aGUgbmV3IGNoYW5nZXMgd2lsbCBiZSBleHByZXNzZWQsIGFuZCBkYXRhIGZsb3cgb3IgY29udHJvbCBsb2dpYyBjb3VsZCBiZSBwcm9ibGVtYXRpYy4KCk9mIGNvdXJzZSwgSSBuZWVkIHRvIGtlZXAgdGhlIHZhcmlvdXMgY29uZmlndXJhdGlvbiBvcHRpb25zIGluIG1pbmQgYXMgSSBidWlsZCB0aGUgZnV6emluZyBzZXR1cDogYERBTU9OYCwgb2J2aW91c2x5LCBidXQgYWxzbyBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBgREFNT05fU1lTRlNgLCBgREFNT05fUkVDTEFJTWAsIGFuZCBgREFNT05fTFJVX1NPUlRgLiBUaG9zZSB3aWxsIGxpa2VseSBhbHRlciB0aGUgY29kZSBwYXRocyBhbmQgdGhlcmVmb3JlIGFmZmVjdCB0aGUga2luZHMgb2YgY3Jhc2hlcyB0aGF0IGNhbiBiZSByZXZlYWxlZC4gVGhlIGNvbmZpZ3VyYXRpb25zIG1heSBhbHNvIGFmZmVjdCB0aGUgaW5wdXRzIHRoYXQgbXVzdCBiZSBnZW5lcmF0ZWQgZm9yIHRoZSB0ZXN0IGNhc2VzLgoKT25lIG1vcmUgdGhpbmc6IEkgc2hvdWxkIHZlcmlmeSB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucyBmcm9tIGBtbS9kYW1vbi9jb3JlLmNgIHRoYXQgbG9vayByZWxldmFudCBhbmQgbWlnaHQgYmUgbWlzc2VkIGF0IGEgZmlyc3QgZ2xhbmNlLiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgbm8gb3RoZXIgZnVuY3Rpb25zIGFyZSB1c2VkIGluIGFkZGl0aW9uIHRvIHRoZSBrZXkgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15FWFBPUlRfU1lNQk9MX0dQTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTU1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYEVYUE9SVF9TWU1CT0xfR1BMYCBQbGFjZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIGBFWFBPUlRfU1lNQk9MX0dQTGAgaXMgYmVpbmcgdXNlZCwgb3IgcGVyaGFwcyBkZWZpbmVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBJIG5lZWQgdG8gYmUgZmxleGlibGUgaW4gaG93IEkgc2VhcmNoIGZvciBpdC4gSSBjYW4mIzM5O3QganVzdCBhc3N1bWUgaXQmIzM5O3MgY2xlYW5seSBkZWZpbmVkIG9yIHVzZWQgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBJIGNhbiByZWx5IG9uIGl0IGJlaW5nIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBpdCBtaWdodCBiZSBvbiB0aGUgc2FtZSBsaW5lIGFzIG90aGVyIGNvZGUgZWxlbWVudHMgb3IgZXZlbiBlbWJlZGRlZCB3aXRoaW4gc29tZSBzb3J0IG9mIG1hY3JvLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoYXQgdGhlIHBhcnNlciBtaWdodCBpbnRlcnByZXQgaXQgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIGNvbnRleHQuIEkgbmVlZCB0byBhY2NvdW50IGZvciBib3RoIHNjZW5hcmlvcywgdGhlIGNsZWFuZXIgY2FzZSB3aGVyZSBpdCYjMzk7cyBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUsIGFuZCB0aGUgbGVzcyBjbGVhbiBvbmUgd2hlcmUgaXQgbWlnaHQgYmUgbWl4ZWQgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTF9HUEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgxOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipUaGUgRGVidWdnaW5nIERhbmNlOiBBIFF1aWNrIE1lbnRhbCBXaGlybHdpbmQqKgoKSG1tLCBJJiMzOTttIHN0dWNrLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBtaXNzaW5nLCBvciB3aGVyZSBpdCYjMzk7cyBnb2luZyB3cm9uZy4gSXQmIzM5O3MgdGhhdCBmYW1pbGlhciBmZWVsaW5nLCB0aGUgb25lIHRoYXQgbWFrZXMgbWUgZ28gb3ZlciB0aGluZ3MgSSYjMzk7dmUgY2hlY2tlZCBhIGRvemVuIHRpbWVzIGFscmVhZHkuIFRoZW4sICpib29tKiwgdGhlIGxpdHRsZSBsaWdodG5pbmcgYm9sdCBvZiBhbiBpZGVhIGZsYXNoZXM6IFdhaXQgYSBzZWNvbmQsIGNvdWxkIGl0IGJlIGEgdmlzaWJpbGl0eSBpc3N1ZT8gQXJlIHdlIHN1cmUgdGhlIHN5bWJvbCBpcyBhY3R1YWxseS4uLiBleHBvcnRlZD8gTWF5YmUgSSBqdXN0IG1pc3NlZCBzb21ldGhpbmcgb2J2aW91cywgcmlnaHQ/IExldCBtZSBjb25zaWRlciBgRVhQT1JUX1NZTUJPTGAuIEl0JiMzOTtzIGEga2V5IHRhY3RpYyB3aGVuIGRlYWxpbmcgd2l0aCB0aGVzZSBzb3J0cyBvZiBpc3N1ZXM7IGFuIGVhc3kgdGhpbmcgdG8gbWlzcyBidXQgYWxzbyBhIGNsYXNzaWMgY3VscHJpdC4gQWx3YXlzIHdvcnRoIGEgZG91YmxlLWNoZWNrLiBPa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDUzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBTeW1ib2wgVmlzaWJpbGl0eSBJc3N1ZSBpbiBEQU1PTioqCgpIbW0sIHdhaXQgYSBtaW51dGUuLi4gSSYjMzk7bSBsb29raW5nIGF0IGBtbS9kYW1vbi9jb3JlLmNgLCBhbmQgaXQgZG9lc24mIzM5O3Qgc2VlbSB0byBoYXZlIGFueSBgRVhQT1JUX1NZTUJPTGAgbWFjcm8gZGVmaW5lZCBmb3IgaXQ/IFRoYXQmIzM5O3MgdW51c3VhbCwgYW5kIGRlZmluaXRlbHkgd2FycmFudHMgYSBjbG9zZXIgbG9vay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGBkYW1vbl9zdGFydGAgKG9yIGFueSBvdGhlciBmdW5jdGlvbnMgZm9yIHRoYXQgbWF0dGVyKSB3aXRoaW4gdGhhdCBmaWxlIHdvdWxkIGJlIHZpc2libGUvYWNjZXNzaWJsZSB0byBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGlmIHRoZXJlJiMzOTtzIG5vIGV4cGxpY2l0IGV4cG9ydC4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgbWFpbnRlbmFuY2UgaXNzdWUgZG93biB0aGUgbGluZSBpZiB0aGVyZSBhcmUgZnVuY3Rpb25zIGFzc3VtZWQgdG8gYmUgcHJpdmF0ZS4KClJpZ2h0LCBsZXQgbWUgZG91YmxlLWNoZWNrLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhyb3VnaCBgbW0vZGFtb24vY29yZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGxvb2sgZm9yIHRoZSBgZGFtb25fc3RhcnRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkIGFuZCBob3cuIElmIGl0JiMzOTtzIHVzZWQgZWxzZXdoZXJlLCB0aGVuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pc20gbWFraW5nIGl0IHZpc2libGUsIGJlY2F1c2UgKnNvbWV0aGluZyogbXVzdCBiZSBtYWtpbmcgdGhpcyBhY2Nlc3NpYmxlLiBJJiMzOTttIGFzc3VtaW5nIHRoZXJlJiMzOTtzIG5vIGRpcmVjdCBleHBvcnQsIHNvIHdoYXQgYXJlIHRoZSBhbHRlcm5hdGl2ZXM/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3N0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0xMDU5PXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEwODQtICogSW4gZGV0YWlsLCBhbGwgREFNT04gQVBJIGNhbGxlcnMgZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBpbml0aWFsXG5tbS9kYW1vbi9jb3JlLmM6MTA4NTogKiBzZXR1cCBvZiBkYW1vbl9jdHggYmVmb3JlIGNhbGxpbmcgZGFtb25fc3RhcnQoKS4gIFNvbWUgb2YgdGhlIEFQSSBjYWxsZXJzXG5tbS9kYW1vbi9jb3JlLmMtMTA4Ni0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVx1MDAzZSBkYW1vbl9jb21taXQoKSBmb3Jcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTk3MT1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XG4tLVxubW0vZGFtb24vY29yZS5jLTE5NzMtLypcbm1tL2RhbW9uL2NvcmUuYzoxOTc0OiAqIF9fZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyBtb25pdG9yaW5nIHdpdGggZ2l2ZW4gY29udGV4dC5cbm1tL2RhbW9uL2NvcmUuYy0xOTc1LSAqIEBjdHg6XHRtb25pdG9yaW5nIGNvbnRleHRcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTk4MC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxOTgxOnN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtMTk4Mi17XG4tLVxubW0vZGFtb24vY29yZS5jPTIwMDM9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDA1LS8qKlxubW0vZGFtb24vY29yZS5jOjIwMDY6ICogZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyB0aGUgbW9uaXRvcmluZ3MgZm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgY29udGV4dHMuXG5tbS9kYW1vbi9jb3JlLmMtMjAwNy0gKiBAY3R4czpcdGFuIGFycmF5IG9mIHRoZSBwb2ludGVycyBmb3IgY29udGV4dHMgdG8gc3RhcnQgbW9uaXRvcmluZ1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDE0LSAqIEBleGNsdXNpdmUgaXMgdHJ1ZSBhbmQgYSBncm91cCBvZiB0aHJlYWRzIHRoYXQgY3JlYXRlZCBieSBvdGhlclxubW0vZGFtb24vY29yZS5jOjIwMTU6ICogJiMzOTtkYW1vbl9zdGFydCgpJiMzOTsgY2FsbCBpcyBjdXJyZW50bHkgcnVubmluZywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgYnV0XG5tbS9kYW1vbi9jb3JlLmMtMjAxNi0gKiByZXR1cm5zIC1FQlVTWS5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjAxOS0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMDIwOmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxubW0vZGFtb24vY29yZS5jLTIwMjEte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDQ1LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfY3R4czsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL2NvcmUuYzoyMDQ2Olx0XHRlcnIgPSBfX2RhbW9uX3N0YXJ0KGN0eHNbaV0pO1xubW0vZGFtb24vY29yZS5jLTIwNDctXHRcdGlmIChlcnIpXG4tLVxubW0vZGFtb24vY29yZS5jPTIxMTY9aW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjE0My0gKlxubW0vZGFtb24vY29yZS5jOjIxNDQ6ICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGVcbm1tL2RhbW9uL2NvcmUuYy0yMTQ1LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMTUyPWludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjE5OC0gKlxubW0vZGFtb24vY29yZS5jOjIxOTk6ICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGVcbm1tL2RhbW9uL2NvcmUuYy0yMjAwLSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI4MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBEQU1PTiYjMzk7cyBTeW1ib2wgRXhwb3J0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIERBTU9OIGNvZGUgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBtbS9kYW1vbi9jb3JlLmNgIGlzbiYjMzk7dCBhIG1vZHVsZSwgaXQmIzM5O3MgYmFrZWQgcmlnaHQgaW50byB0aGUga2VybmVsLiBSaWdodCwgSSByZW1lbWJlciB0aGF0IGBtbS9kYW1vbi9NYWtlZmlsZWAgdXNlcyBgb2JqLXkgOj0gY29yZS5vYCwgd2hpY2ggY29uZmlybXMgaXQuIFNvLCBhcyBsb25nIGFzIGBDT05GSUdfREFNT05gIGlzIG9uLCBpdCYjMzk7cyBhbHdheXMgYnVpbHQtaW4uCgpUaGUgaW1wbGljYXRpb25zIGFyZSB0aGF0LCBpZiBpdCYjMzk7cyBhbGwgYnVpbHQtaW4sIGFuZCBvbmx5IG90aGVyIGJ1aWx0LWluIGNvZGUgdXNlcyBpdCwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgZXhwb3J0ZWQgc3ltYm9scy4gQnV0IGhvbGQgb24sIGlzbiYjMzk7dCBgZGFtb25fc3RhcnRgIHVzZWQgYnkgYG1tL2RhbW9uL3N5c2ZzLmNgLCBhbmQgaXNuJiMzOTt0ICp0aGF0KiBhIG1vZHVsZT8gTGV0JiMzOTtzIHZlcmlmeSB0aGF0LgoKWWVwLCBsb29raW5nIGF0IGBvYmotJChDT05GSUdfREFNT05fU1lTRlMpICYjNDM7PSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub2AsIGFuZCBzZWVpbmcgdGhhdCBgQ09ORklHX0RBTU9OX1NZU0ZTYCBpcyBhIGJvb2xlYW4sIHRoYXQgbWVhbnMgYHN5c2ZzLmNgIGlzIGFsc28gYnVpbHQtaW4uIE9rYXksIG5vIGBFWFBPUlRfU1lNQk9MYCBpcyBuZWVkZWQgdGhlbi4gSSBhbSBjb25maWRlbnQuCgpTbywgZnJvbSB3aGF0IEkmIzM5O3ZlIHNlZW4sIGBkYW1vbl9zdGFydGAsIGBkYW1vbl9jb21taXRfY3R4YCwgYGRhbW9uX25ld19zY2hlbWVgLCBhbmQgYGRhbW9uX3NldF9yZWdpb25zYCBhcmUgYWxsIGdsb2JhbCBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AuIFRoZXNlIHdvdWxkIGJlIGdvb2QgY2FuZGlkYXRlcyBmb3IgaW5jbHVzaW9uIGluIGBGb2N1c1N5bWJvbHNgLgoKSnVzdCB0byBiZSB0aG9yb3VnaCwgSSB3aWxsIGRvdWJsZS1jaGVjayBgZGFtb25fbmV3X3NjaGVtZWAgYW5kIGBkYW1vbl9zZXRfcmVnaW9uc2AgYWdhaW4gdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGJlZm9yZSBnb2luZyBhbnkgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fbmV3X3NjaGVtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9NzE1PXN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRhbW9zX3F1b3RhX2luaXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzI3LVxubW0vZGFtb24vY29yZS5jOjcyODpzdHJ1Y3QgZGFtb3MgKmRhbW9uX25ld19zY2hlbWUoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLFxubW0vZGFtb24vY29yZS5jLTcyOS1cdFx0XHRlbnVtIGRhbW9zX2FjdGlvbiBhY3Rpb24sXG4tLVxubW0vZGFtb24vY29yZS5jPTE1MTc9c3RhdGljIGludCBkYW1vbl9jb21taXRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTUzNS1cdFx0XHRjb250aW51ZTtcbm1tL2RhbW9uL2NvcmUuYzoxNTM2Olx0XHRuZXdfc2NoZW1lID0gZGFtb25fbmV3X3NjaGVtZShcdTAwMjZzcmNfc2NoZW1lLVx1MDAzZXBhdHRlcm4sXG5tbS9kYW1vbi9jb3JlLmMtMTUzNy1cdFx0XHRcdHNyY19zY2hlbWUtXHUwMDNlYWN0aW9uLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE5OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipBc3Nlc3NpbmcgdGhlIFNjb3BlIG9mIGBkYW1vbl9uZXdfc2NoZW1lYCBhbmQgYGRhbW9uX3NldF9yZWdpb25zYCoqCgpBbHJpZ2h0LCBzbyB0aGUgY29kZSBjbGVhcmx5IGRlZmluZXMgYGRhbW9uX25ld19zY2hlbWVgIGFzIGEgZ2xvYmFsIGZ1bmN0aW9uLiBObyBzdXJwcmlzZXMgdGhlcmUuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTm93LCB0aGUgbW9yZSBpbnRlcmVzdGluZyBxdWVzdGlvbiBpcyBhYm91dCBgZGFtb25fc2V0X3JlZ2lvbnNgLiBJcyBpdCBhbHNvIGdsb2JhbCwgb3IgaXMgaXQgYm91bmQgdG8gYSBwYXJ0aWN1bGFyIHN0cnVjdHVyZSwgbWF5YmUgYSBjbGFzcyBvciBuYW1lc3BhY2U/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB3aGVyZSBpdCYjMzk7cyB1c2VkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIERBTU9OIGltcGxlbWVudGF0aW9uLiBJdHMgc2NvcGluZyBjb3VsZCBhZmZlY3QgdGhyZWFkIHNhZmV0eSwgcmVlbnRyYW5jeSwgYW5kIGV2ZW4gaG93IGVhc2lseSB3ZSBjYW4gcmVmYWN0b3IgdGhpcyB0aGluZyBkb3duIHRoZSBsaW5lLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlYmFzZSB0byBjb25maXJtIGl0cyBkZWNsYXJhdGlvbiBhbmQgdXNhZ2UgcGF0dGVybnMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyBzY29wZS4gSXMgdGhpcyBhIHBvaW50IG9mIGNvbnRlbnRpb24gd2l0aCBvdXIgbG9ja2luZyBzY2hlbWU/IEkgbmVlZCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zZXRfcmVnaW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9NDA3PXN0YXRpYyBib29sIGRhbW9zX2NvbXBsZXRlbHlfd2Fsa2VkKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDEwLVx0ICogJiMzOTtcdTAwM2U9JiMzOTsgaW5zdGVhZCBvZiAmIzM5Oz09JiMzOTssIGJlY2F1c2UgdGhlIHJlZ2lvbiBzZXQgb2YgQHQgY291bGQgaGF2ZSBiZWVuXG5tbS9kYW1vbi9jb3JlLmM6NDExOlx0ICogc2hydW5rZW4gYnkgZGFtb25fc2V0X3JlZ2lvbnMoKSBhZnRlciB0aGUgY3Vyc29yIHdhcyBzYXZlZC5cbm1tL2RhbW9uL2NvcmUuYy00MTItXHQgKi9cbi0tXG5tbS9kYW1vbi9jb3JlLmM9NDkxPXN0YXRpYyBpbnQgZGFtb25fZmlsbF9yZWdpb25zX2hvbGVzKHN0cnVjdCBkYW1vbl9yZWdpb24gKmZpcnN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy01MTItLypcbm1tL2RhbW9uL2NvcmUuYzo1MTM6ICogZGFtb25fc2V0X3JlZ2lvbnMoKSAtIFNldCByZWdpb25zIG9mIGEgdGFyZ2V0IGZvciBnaXZlbiBhZGRyZXNzIHJhbmdlcy5cbm1tL2RhbW9uL2NvcmUuYy01MTQtICogQHQ6XHRcdHRoZSBnaXZlbiB0YXJnZXQuXG4tLVxubW0vZGFtb24vY29yZS5jLTUyMy0gKi9cbm1tL2RhbW9uL2NvcmUuYzo1MjQ6aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG5tbS9kYW1vbi9jb3JlLmMtNTI1LVx0XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG4tLVxubW0vZGFtb24vY29yZS5jPTE1NzI9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNjAxLVx0cmFuZ2VzW2kmIzQzOyYjNDM7XS5lbmQgPSBkYW1vbl9sYXN0X3JlZ2lvbihzcmMpLVx1MDAzZWFyLmVuZDtcbm1tL2RhbW9uL2NvcmUuYzoxNjAyOlx0ZXJyID0gZGFtb25fc2V0X3JlZ2lvbnMoZHN0LCByYW5nZXMsIGksIHNyY19taW5fcmVnaW9uX3N6KTtcbm1tL2RhbW9uL2NvcmUuYy0xNjAzLVx0a3ZmcmVlKHJhbmdlcyk7XG4tLVxubW0vZGFtb24vY29yZS5jPTQwNDA9aW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy00MDUxLVx0YWRkcl9yYW5nZS5lbmQgPSAqZW5kO1xubW0vZGFtb24vY29yZS5jOjQwNTI6XHRyZXR1cm4gZGFtb25fc2V0X3JlZ2lvbnModCwgXHUwMDI2YWRkcl9yYW5nZSwgMSwgbWluX3JlZ2lvbl9zeik7XG5tbS9kYW1vbi9jb3JlLmMtNDA1My19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDQxCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gTW9kdWxlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIERBTU9OIGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMgdGhhdCBgZGFtb25fc2V0X3JlZ2lvbnNgIGlzIGRlZmluaXRlbHkgYSBnbG9iYWwgZnVuY3Rpb24uIFdlIG5lZWQgdG8gYmUgYXdhcmUgb2YgaG93IHRoYXQgbWlnaHQgaW1wYWN0IHRoZSBzeXN0ZW0uCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUga2V5IHN5bWJvbHMgcmVsYXRlZCB0byB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBJJiMzOTt2ZSBnb3QgYGRhbW9uX2NvbW1pdF9jdHhgLCBgZGFtb25fc3RhcnRgLCBgZGFtb25fbmV3X3NjaGVtZWAsIGFuZCBvZiBjb3Vyc2UsIGBkYW1vbl9zZXRfcmVnaW9uc2AgYXMgdGhlIGZvY2FsIHBvaW50cyBoZXJlLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBpbnRlcmFjdCBpcyBnb2luZyB0byBiZSBjcnVjaWFsIGZvciBhIGRlZXAgZGl2ZS4KCkFuZCBpdCBsb29rcyBsaWtlIHdlIGhhdmUgYSBzZXQgb2YgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBgREFNT05gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBgREFNT05fU1lTRlNgLCBgREFNT05fUkVDTEFJTWAsIGBEQU1PTl9MUlVfU09SVGAsIGFuZCBgREFNT05fU1RBVGAuIFRoZXNlIGFyZSBvYnZpb3VzbHkgZXNzZW50aWFsIGZvciBjb250cm9sbGluZyB0aGUgYmVoYXZpb3Igb2YgdGhlIG1vZHVsZS4KCkkgc2hvdWxkIHByb2JhYmx5IGRvIGEgcXVpY2sgc2NhbiB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50LiBJdCYjMzk7cyBlYXN5IHRvIG92ZXJsb29rIHRoaW5ncyBpbiB0aGVzZSBraW5kcyBvZiBzZXR1cHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTQtXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTYtXHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTQtXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWctMTYtXHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0yNS1cbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctMjctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNDYtXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNTUtXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcbm1tL2RhbW9uL0tjb25maWctNjktXHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNzUtXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctODctXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXG5tbS9kYW1vbi9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctOTktXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcbm1tL2RhbW9uL0tjb25maWctMTAxLVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMDctXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZy0xMDktXHRib29sIFwmIzM0O0J1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxOTkKCQkJCQkJCW91dHB1dDogMjA4CgkJCQkJCQl0aG91Z2h0czogMTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqREFNT04gRnV6emluZyBTdHJhdGVneTogRXhwYW5kaW5nIHRoZSBTY29wZSoqCgpBbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaXMgZXhwYW5kaW5nIHRvIGluY2x1ZGUgYERBTU9OX0RFQlVHX1NBTklUWWAgYW5kIGBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVGAuIE1ha2VzIHNlbnNlLiBUaGlzIGlzIGFib3V0IGJlaW5nIGNvbXByZWhlbnNpdmUgaW4gdGhlIGZ1enppbmcgc3RyYXRlZ3kgZm9yIERBTU9OLgoKVGhlIGNvcmUgb2YgdGhlIG1hdHRlciBpcyB0aGF0IHRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgREFNT04mIzM5O3MgYmVoYXZpb3IgaW4gaG93IGl0IGhhbmRsZXMgREFNT1MgcXVvdGFzIOKAkyBzcGVjaWZpY2FsbHksIHRyYWNraW5nIHdoZXJlIHRoZSB3YWxrZXIgaXMgd2l0aGluIHRoZXNlIHF1b3Rhcy4gVGhleSYjMzk7cmUgcmVuYW1pbmcgdmFyaWFibGVzIGFuZCBpbnRyb2R1Y2luZyBuZXcgY29udHJvbCBmbG93IGZvciBza2lwcGluZyB3YWxrZWQgcmVnaW9ucyBhbmQgcm90YXRpbmcgdGFyZ2V0cy4gVGhhdCYjMzk7cyBhIGNvcmUgbW9kaWZpY2F0aW9uIG9mIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCYjMzk7cyBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgc3lzZnMgYW5kIGtlcm5lbCBBUElzLCBzbyBpdCAqYWJzb2x1dGVseSogd2FycmFudHMgZnV6emluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIHBlcmZvcm1hbmNlIHR3ZWFrLiBJZiBpdCYjMzk7cyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlLCBhbmQgY2hhbmdlcyBjb3JlIERBTU9OIGJlaGF2aW91ciwgdGhlbiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgc3lzdGVtIGlzIHN0YWJsZS4KCkkmIzM5O20gdGhpbmtpbmcsIGZvciBzaW1wbGljaXR5LCB3ZSYjMzk7bGwgbGFiZWwgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSBhcyBgc2V0LXJlc3VsdHNgLiBJdCYjMzk7cyBhIGNsZWFyLCBjb25jaXNlIHdheSB0byByZWZlciB0byB0aGUgZnV6emluZyBmb2N1cy4gSSBrbm93IHdoYXQmIzM5O3MgZ29pbmcgb24gbm93OyB0aGlzIGlzIG1vcmUgdGhhbiBqdXN0IGEgbWlub3IgdHdlYWsuIEl0JiMzOTtzIGFib3V0IGVuc3VyaW5nIERBTU9OLCBhdCB0aGlzIHJldmlzZWQgbGV2ZWwsIGlzIHJvYnVzdCBhbmQgc2VjdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fUkVDTEFJTSYjMzQ7LAogICAgJiMzNDtEQU1PTl9MUlVfU09SVCYjMzQ7LAogICAgJiMzNDtEQU1PTl9TVEFUJiMzNDssCiAgICAmIzM0O0RBTU9OX0RFQlVHX1NBTklUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX2NvbW1pdF9jdHgmIzM0OywKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAgICYjMzQ7ZGFtb25fbmV3X3NjaGVtZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9zZXRfcmVnaW9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBsb2dpYyBvZiBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcikgdG8gdHJhY2sgdGhlIHdhbGtpbmcgcG9zaXRpb24gb2YgREFNT1MgKERBTU9OLWJhc2VkIE9wZXJhdGlvbiBTY2hlbWVzKSBxdW90YXMuIEl0IHJlbmFtZXMgdGhlIHRyYWNraW5nIHZhcmlhYmxlcyBhbmQgaW50cm9kdWNlcyBuZXcgbG9naWMgdG8gaGFuZGxlIHNraXBwaW5nIHdhbGtlZCByZWdpb25zIGFuZCByb3RhdGluZyB0YXJnZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgc3lzZnMgb3Iga2VybmVsIEFQSXMsIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9SRUNMQUlNJiMzNDssCiAgICAmIzM0O0RBTU9OX0xSVV9TT1JUJiMzNDssCiAgICAmIzM0O0RBTU9OX1NUQVQmIzM0OywKICAgICYjMzQ7REFNT05fREVCVUdfU0FOSVRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fY29tbWl0X2N0eCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zdGFydCYjMzQ7LAogICAgJiMzNDtkYW1vbl9uZXdfc2NoZW1lJiMzNDssCiAgICAmIzM0O2RhbW9uX3NldF9yZWdpb25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSB0byB0cmFjayB0aGUgd2Fsa2luZyBwb3NpdGlvbiBvZiBEQU1PUyAoREFNT04tYmFzZWQgT3BlcmF0aW9uIFNjaGVtZXMpIHF1b3Rhcy4gSXQgcmVuYW1lcyB0aGUgdHJhY2tpbmcgdmFyaWFibGVzIGFuZCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBoYW5kbGUgc2tpcHBpbmcgd2Fsa2VkIHJlZ2lvbnMgYW5kIHJvdGF0aW5nIHRhcmdldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBzeXNmcyBvciBrZXJuZWwgQVBJcywgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6MDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIHRyYWNraW5nIG9mIHRoZSBEQU1PUyAoREFNT04tYmFzZWQgT3BlcmF0aW9uIFNjaGVtZXMpIHF1b3RhIHdhbGsgcG9zaXRpb24sIHJlcGxhY2luZyBgY2hhcmdlX3RhcmdldF9mcm9tYCBhbmQgYGNoYXJnZV9hZGRyX2Zyb21gIHdpdGggYHdhbGtfdGFyZ2V0X2Zyb21gIGFuZCBgd2Fsa19hZGRyX2Zyb21gLiBUaGVzZSBuZXcgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIE5VTEwgYW5kIDAgaW4gYGRhbW9zX3F1b3RhX2luaXQoKWAuIFRoZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGludGVybmFsIGtlcm5lbCBjb250cm9sIGZsb3cgYW5kIHJlZ2lvbiBpdGVyYXRpb24gbG9naWMuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDdiZjVjY2YzYWY5ZDIzZGE1MDhiNTMzMzkwYTY3MzQ0ZWE5NzI2NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDEzOjM5OjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCmluZGV4IDBjOGI3ZGRlZjlhYmIuLjVlMDc1NWViYWQ3NTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKQEAgLTI5Niw4ICYjNDM7Mjk2LDEwIEBAIHN0cnVjdCBkYW1vc19xdW90YSB7CiAJLyogRm9yIGNoYXJnaW5nIHRoZSBxdW90YSAqLwogCXVuc2lnbmVkIGxvbmcgY2hhcmdlZF9zejsKIAl1bnNpZ25lZCBsb25nIGNoYXJnZWRfZnJvbTsKLQlzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpjaGFyZ2VfdGFyZ2V0X2Zyb207Ci0JdW5zaWduZWQgbG9uZyBjaGFyZ2VfYWRkcl9mcm9tOwomIzQzOwomIzQzOwkvKiBGb3IgdHJhY2tpbmcgdGhlIERBTU9TIHdhbGsgcG9zaXRpb24gKHJvdGF0aW5nIGN1cnNvcikgKi8KJiM0MzsJc3RydWN0IGRhbW9uX3RhcmdldCAqd2Fsa190YXJnZXRfZnJvbTsKJiM0MzsJdW5zaWduZWQgbG9uZyB3YWxrX2FkZHJfZnJvbTsKIAogCS8qIEZvciBwcmlvcml0aXphdGlvbiAqLwogCXVuc2lnbmVkIGludCBtaW5fc2NvcmU7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggNjQ0ZGFmNWExNjU2MC4uYmJkYjUzMDUxM2ExOCAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtNDA0LDYgJiM0Mzs0MDQsNTIgQEAgc3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKIAlyZXR1cm4gbGlzdF9pc19sYXN0KCZhbXA7ci0mZ3Q7bGlzdCwgJmFtcDt0LSZndDtyZWdpb25zX2xpc3QpOwogfQogCiYjNDM7c3RhdGljIGJvb2wgZGFtb3NfY29tcGxldGVseV93YWxrZWQoc3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogJiMzOTsmZ3Q7PSYjMzk7IGluc3RlYWQgb2YgJiMzOTs9PSYjMzk7LCBiZWNhdXNlIHRoZSByZWdpb24gc2V0IG9mIEB0IGNvdWxkIGhhdmUgYmVlbgomIzQzOwkgKiBzaHJ1bmtlbiBieSBkYW1vbl9zZXRfcmVnaW9ucygpIGFmdGVyIHRoZSBjdXJzb3Igd2FzIHNhdmVkLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIHMtJmd0O3F1b3RhLndhbGtfdGFyZ2V0X2Zyb20gPT0gdCAmYW1wOyZhbXA7CiYjNDM7CQlzLSZndDtxdW90YS53YWxrX2FkZHJfZnJvbSAmZ3Q7PSBkYW1vbl9sYXN0X3JlZ2lvbih0KS0mZ3Q7YXIuZW5kOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbmV4dF92YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKJiM0MzsJCXN0cnVjdCBkYW1vbl9jdHggKmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJmFtcDtjLSZndDthZGFwdGl2ZV90YXJnZXRzOwomIzQzOwlzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpzdGFydCA9IHQ7CiYjNDM7CXN0cnVjdCBkYW1vbl90YXJnZXQgKm5leHQgPSB0OwomIzQzOwomIzQzOwl3aGlsZSAodHJ1ZSkgewomIzQzOwkJaWYgKGxpc3RfaXNfbGFzdCgmYW1wO25leHQtJmd0O2xpc3QsIGhlYWQpKQomIzQzOwkJCW5leHQgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBkYW1vbl90YXJnZXQsIGxpc3QpOwomIzQzOwkJZWxzZQomIzQzOwkJCW5leHQgPSBsaXN0X25leHRfZW50cnkobmV4dCwgbGlzdCk7CiYjNDM7CiYjNDM7CQlpZiAoIWMtJmd0O29wcy50YXJnZXRfdmFsaWQgfHwgYy0mZ3Q7b3BzLnRhcmdldF92YWxpZChuZXh0KSkKJiM0MzsJCQlyZXR1cm4gbmV4dDsKJiM0MzsKJiM0MzsJCWlmIChuZXh0ID09IHN0YXJ0KQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkYW1vc19yZXBsYWNlX2ludmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsCiYjNDM7CQlzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9zICpzOwomIzQzOwomIzQzOwlkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykgewomIzQzOwkJaWYgKHMtJmd0O3F1b3RhLndhbGtfdGFyZ2V0X2Zyb20gIT0gdCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXMtJmd0O3F1b3RhLndhbGtfdGFyZ2V0X2Zyb20gPSBkYW1vbl9uZXh0X3ZhbGlkX3RhcmdldCh0LCBjKTsKJiM0MzsJCXMtJmd0O3F1b3RhLndhbGtfYWRkcl9mcm9tID0gMDsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qKgogICogZGFtb25fcHJvYmVfaGl0c193c3VtKCkgLSBSZXR1cm5zIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIG9mIGEgcmVnaW9uLgogICogQHI6CQlyZWdpb24gdG8gZ2V0IHRoZSB3ZWlnaHRlZCBzdW0gb2YuCkBAIC02NzMsOCAmIzQzOzcxOSw4IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRhbW9zX3F1b3RhX2luaXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSkKIAlxdW90YS0mZ3Q7dG90YWxfY2hhcmdlZF9ucyA9IDA7CiAJcXVvdGEtJmd0O2NoYXJnZWRfc3ogPSAwOwogCXF1b3RhLSZndDtjaGFyZ2VkX2Zyb20gPSAwOwotCXF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMOwotCXF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tID0gMDsKJiM0MzsJcXVvdGEtJmd0O3dhbGtfdGFyZ2V0X2Zyb20gPSBOVUxMOwomIzQzOwlxdW90YS0mZ3Q7d2Fsa19hZGRyX2Zyb20gPSAwOwogCXF1b3RhLSZndDtlc3pfYnAgPSAwOwogCXJldHVybiBxdW90YTsKIH0KQEAgLTE2MjgsOSAmIzQzOzE2NzQsOSBAQCBzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRzKAogCiAJCQlkYW1vbl9kZXN0cm95X3RhcmdldChkc3RfdGFyZ2V0LCBkc3QpOwogCQkJZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGRzdCkgewotCQkJCWlmIChzLSZndDtxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPT0gZHN0X3RhcmdldCkgewotCQkJCQlzLSZndDtxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMOwotCQkJCQlzLSZndDtxdW90YS5jaGFyZ2VfYWRkcl9mcm9tID0gMDsKJiM0MzsJCQkJaWYgKHMtJmd0O3F1b3RhLndhbGtfdGFyZ2V0X2Zyb20gPT0gZHN0X3RhcmdldCkgewomIzQzOwkJCQkJcy0mZ3Q7cXVvdGEud2Fsa190YXJnZXRfZnJvbSA9IE5VTEw7CiYjNDM7CQkJCQlzLSZndDtxdW90YS53YWxrX2FkZHJfZnJvbSA9IDA7CiAJCQkJfQogCQkJfQogCQl9CkBAIC0yMzEyLDY0ICYjNDM7MjM1OCw1NCBAQCBzdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKIH0KIAogLyoKLSAqIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oKSAtIENoZWNrIGlmIHRoZSBnaXZlbiByZWdpb24gb3Igc3RhcnRpbmcgcGFydCBvZgotICogaXQgaXMgYWxyZWFkeSBjaGFyZ2VkIGZvciB0aGUgREFNT1MgcXVvdGEuCiYjNDM7ICogZGFtb3Nfc2tpcF93YWxrZWRfcmVnaW9uKCkgLSBDaGVjayBpZiB0aGUgZ2l2ZW4gcmVnaW9uIG9yIHN0YXJ0aW5nIHBhcnQgb2YKJiM0MzsgKiBpdCBpcyBhbHJlYWR5IHdhbGtlZCBmb3IgdGhlIERBTU9TIHF1b3RhLgogICogQHQ6CVRoZSB0YXJnZXQgb2YgdGhlIHJlZ2lvbi4KLSAqIEBycDoJVGhlIHBvaW50ZXIgdG8gdGhlIHJlZ2lvbi4KJiM0MzsgKiBAcjoJVGhlIHBvaW50ZXIgdG8gdGhlIHJlZ2lvbi4KICAqIEBzOglUaGUgc2NoZW1lIHRvIGJlIGFwcGxpZWQuCiAgKiBAbWluX3JlZ2lvbl9zejoJbWluaW11bSByZWdpb24gc2l6ZS4KICAqCi0gKiBJZiBhIHF1b3RhIG9mIGEgc2NoZW1lIGhhcyBleGNlZWRlZCBpbiBhIHF1b3RhIGNoYXJnZSB3aW5kb3csIHRoZSBzY2hlbWUmIzM5O3MKLSAqIGFjdGlvbiB3b3VsZCBhcHBsaWVkIHRvIG9ubHkgYSBwYXJ0IG9mIHRoZSB0YXJnZXQgYWNjZXNzIHBhdHRlcm4gZnVsZmlsbGluZwotICogcmVnaW9ucy4gIFRvIGF2b2lkIGFwcGx5aW5nIHRoZSBzY2hlbWUgYWN0aW9uIHRvIG9ubHkgYWxyZWFkeSBhcHBsaWVkCi0gKiByZWdpb25zLCBEQU1PTiBza2lwcyBhcHBseWluZyB0aGUgc2NoZW1lIGFjdGlvbiB0byB0aGUgcmVnaW9ucyB0aGF0IGNoYXJnZWQKLSAqIGluIHRoZSBwcmV2aW91cyBjaGFyZ2Ugd2luZG93LgotICoKLSAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGEgZ2l2ZW4gcmVnaW9uIHNob3VsZCBiZSBza2lwcGVkIG9yIG5vdCBmb3IgdGhlCi0gKiByZWFzb24uICBJZiBvbmx5IHRoZSBzdGFydGluZyBwYXJ0IG9mIHRoZSByZWdpb24gaGFzIHByZXZpb3VzbHkgY2hhcmdlZCwKLSAqIHRoaXMgZnVuY3Rpb24gc3BsaXRzIHRoZSByZWdpb24gaW50byB0d28gc28gdGhhdCB0aGUgc2Vjb25kIG9uZSBjb3ZlcnMgdGhlCi0gKiBhcmVhIHRoYXQgbm90IGNoYXJnZWQgaW4gdGhlIHByZXZpb3VzIGNoYXJnZSB3aWRub3csIGFuZCByZXR1cm4gdHJ1ZS4gIFRoZQotICogY2FsbGVyIGNhbiBzZWUgdGhlIHNlY29uZCBvbmUgb24gdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSByZWdpb24gd2Fsay4KLSAqIE5vdGUgdGhhdCB0aGlzIG1lYW5zIHRoZSBjYWxsZXIgc2hvdWxkIHVzZSBkYW1vbl9mb3JfZWFjaF9yZWdpb24oKSBpbnN0ZWFkCi0gKiBvZiBkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZSgpLiAgSWYgZGFtb25fZm9yX2VhY2hfcmVnaW9uX3NhZmUoKSBpcyB1c2VkLAotICogdGhlIHNlY29uZCByZWdpb24gd2lsbCBqdXN0IGJlIGlnbm9yZWQuCiYjNDM7ICogV2hlbiBhIHF1b3RhIGlzIGNvbmZpZ3VyZWQsIERBTU9OIHJlY29yZHMgaG93IGZhciBpdCBoYXMgd2Fsa2VkIHNvIHRoYXQKJiM0MzsgKiBzdWJzZXF1ZW50IHF1b3RhIHdpbmRvd3MgY29udGludWUgZnJvbSB0aGF0IHBvaW50IGluc3RlYWQgb2YgcmUtYXBwbHlpbmcgdGhlCiYjNDM7ICogc2FtZSByZWdpb25zLiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgZm9yIHJlZ2lvbnMgdGhhdCBhcmUgYmVmb3JlIHRoZQomIzQzOyAqIHJlY29yZGVkIGN1cnNvciBhbmQgdGhlcmVmb3JlIHNob3VsZCBiZSBza2lwcGVkLiAgSWYgb25seSB0aGUgc3RhcnRpbmcgcGFydAomIzQzOyAqIGhhcyBiZWVuIHdhbGtlZCwgdGhlIHJlZ2lvbiBpcyBzcGxpdCBzbyB0aGF0IHRoZSByZW1haW5pbmcgcGFydCBjYW4gYmUKJiM0MzsgKiB2aXNpdGVkLgogICoKICAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcmVnaW9uIHNob3VsZCBiZSBza2lwcGVkLCBmYWxzZSBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBib29sIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKJiM0MztzdGF0aWMgYm9vbCBkYW1vc19za2lwX3dhbGtlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKIAkJc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLAogCQl1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opCiB7CiAJc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9ICZhbXA7cy0mZ3Q7cXVvdGE7CiAJdW5zaWduZWQgbG9uZyBzel90b19za2lwOwogCi0JLyogU2tpcCBwcmV2aW91c2x5IGNoYXJnZWQgcmVnaW9ucyAqLwotCWlmIChxdW90YS0mZ3Q7Y2hhcmdlX3RhcmdldF9mcm9tKSB7Ci0JCWlmICh0ICE9IHF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb20pCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJaWYgKHIgPT0gZGFtb25fbGFzdF9yZWdpb24odCkpIHsKLQkJCXF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMOwotCQkJcXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20gPSAwOwomIzQzOwlpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIFNraXAgcHJldmlvdXNseSB3YWxrZWQgcmVnaW9ucyAqLwomIzQzOwlpZiAocXVvdGEtJmd0O3dhbGtfdGFyZ2V0X2Zyb20pIHsKJiM0MzsJCWlmICh0ICE9IHF1b3RhLSZndDt3YWxrX3RhcmdldF9mcm9tKQogCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJaWYgKHF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tICZhbXA7JmFtcDsKLQkJCQlyLSZndDthci5lbmQgJmx0Oz0gcXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20pCiYjNDM7CQlpZiAocXVvdGEtJmd0O3dhbGtfYWRkcl9mcm9tICZhbXA7JmFtcDsKJiM0MzsJCQkJci0mZ3Q7YXIuZW5kICZsdDs9IHF1b3RhLSZndDt3YWxrX2FkZHJfZnJvbSkKIAkJCXJldHVybiB0cnVlOwogCi0JCWlmIChxdW90YS0mZ3Q7Y2hhcmdlX2FkZHJfZnJvbSAmYW1wOyZhbXA7IHItJmd0O2FyLnN0YXJ0ICZsdDsKLQkJCQlxdW90YS0mZ3Q7Y2hhcmdlX2FkZHJfZnJvbSkgewotCQkJc3pfdG9fc2tpcCA9IEFMSUdOX0RPV04ocXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20gLQomIzQzOwkJaWYgKHF1b3RhLSZndDt3YWxrX2FkZHJfZnJvbSAmYW1wOyZhbXA7IHItJmd0O2FyLnN0YXJ0ICZsdDsKJiM0MzsJCQkJcXVvdGEtJmd0O3dhbGtfYWRkcl9mcm9tKSB7CiYjNDM7CQkJc3pfdG9fc2tpcCA9IEFMSUdOX0RPV04ocXVvdGEtJmd0O3dhbGtfYWRkcl9mcm9tIC0KIAkJCQkJci0mZ3Q7YXIuc3RhcnQsIG1pbl9yZWdpb25fc3opOwogCQkJaWYgKCFzel90b19za2lwKSB7Ci0JCQkJaWYgKGRhbW9uX3N6X3JlZ2lvbihyKSAmbHQ7PSBtaW5fcmVnaW9uX3N6KQomIzQzOwkJCQlpZiAoZGFtb25fc3pfcmVnaW9uKHIpICZsdDs9IG1pbl9yZWdpb25fc3opIHsKJiM0MzsJCQkJCXF1b3RhLSZndDt3YWxrX2FkZHJfZnJvbSA9IHItJmd0O2FyLmVuZDsKIAkJCQkJcmV0dXJuIHRydWU7CiYjNDM7CQkJCX0KIAkJCQlzel90b19za2lwID0gbWluX3JlZ2lvbl9zejsKIAkJCX0KIAkJCWRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBzel90b19za2lwKTsKIAkJCXJldHVybiB0cnVlOwogCQl9Ci0JCXF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMOwotCQlxdW90YS0mZ3Q7Y2hhcmdlX2FkZHJfZnJvbSA9IDA7CiAJfQogCXJldHVybiBmYWxzZTsKIH0KQEAgLTI2MjcsMTAgJiM0MzsyNjYzLDYgQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJCXF1b3RhLSZndDt0b3RhbF9jaGFyZ2VkX25zICYjNDM7PSB0aW1lc3BlYzY0X3RvX25zKCZhbXA7ZW5kKSAtCiAJCQl0aW1lc3BlYzY0X3RvX25zKCZhbXA7YmVnaW4pOwogCQlkYW1vc19jaGFyZ2VfcXVvdGEocXVvdGEsIHN6LCBzel9hcHBsaWVkKTsKLQkJaWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtJmd0O21pbl9yZWdpb25fc3opKSB7Ci0JCQlxdW90YS0mZ3Q7Y2hhcmdlX3RhcmdldF9mcm9tID0gdDsKLQkJCXF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tID0gci0mZ3Q7YXIuZW5kOwotCQl9CiAJfQogCWlmIChzLSZndDthY3Rpb24gIT0gREFNT1NfU1RBVCkKIAkJci0mZ3Q7YWdlID0gMDsKQEAgLTI2MzksOCAmIzQzOzI2NzEsMTkgQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJZGFtb3NfdXBkYXRlX3N0YXQocywgc3osIHN6X2FwcGxpZWQsIHN6X29wc19maWx0ZXJfcGFzc2VkKTsKIH0KIAotc3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLAotCQkJCSAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiYjNDM7c3RhdGljIHZvaWQgZGFtb3Nfd2Fsa19tYXliZV9yb3RhdGUoc3RydWN0IGRhbW9uX2N0eCAqYywKJiM0MzsJCQkJICAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgZGFtb3MgKnMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gJmFtcDtzLSZndDtxdW90YTsKJiM0MzsKJiM0MzsJaWYgKGRhbW9zX2NvbXBsZXRlbHlfd2Fsa2VkKHMsIHQpKSB7CiYjNDM7CQlxdW90YS0mZ3Q7d2Fsa190YXJnZXRfZnJvbSA9IGRhbW9uX25leHRfdmFsaWRfdGFyZ2V0KHQsIGMpOwomIzQzOwkJcXVvdGEtJmd0O3dhbGtfYWRkcl9mcm9tID0gMDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJCQkJICAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcikKIHsKIAlzdHJ1Y3QgZGFtb3MgKnM7CkBAIC0yNjU4LDE4ICYjNDM7MjcwMSwzMSBAQCBzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsCiAJCWlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLSZndDttaW5fcmVnaW9uX3N6KSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHQsIHIsIHMsIGMtJmd0O21pbl9yZWdpb25fc3opKQotCQkJY29udGludWU7Ci0KIAkJaWYgKHMtJmd0O21heF9ucl9zbmFwc2hvdHMgJmFtcDsmYW1wOwogCQkJCXMtJmd0O21heF9ucl9zbmFwc2hvdHMgJmx0Oz0gcy0mZ3Q7c3RhdC5ucl9zbmFwc2hvdHMpCiAJCQljb250aW51ZTsKIAomIzQzOwkJLyoKJiM0MzsJCSAqIFNraXAgcmVnaW9ucyBiZWZvcmUgdGhlIGN1cnNvci4gIElmIHRoZSBza2lwIG1ha2VzIHRoZSBjdXJzb3IKJiM0MzsJCSAqIHJlYWNoIHRoZSBlbmQgb2YgdGhpcyB0YXJnZXQsIHJvdGF0ZSB0byB0aGUgbmV4dCB2YWxpZCB0YXJnZXQKJiM0MzsJCSAqIGJlZm9yZSBjb250aW51aW5nIHdpdGggdGhlIG5leHQgcmVnaW9uL3NjaGVtZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbih0LCByLCBzLCBjLSZndDttaW5fcmVnaW9uX3N6KSkgewomIzQzOwkJCWRhbW9zX3dhbGtfbWF5YmVfcm90YXRlKGMsIHQsIHMpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwogCQlpZiAoZGFtb3NfdmFsaWRfdGFyZ2V0KGMsIHIsIHMpKQogCQkJZGFtb3NfYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMpOwogCiAJCWlmIChkYW1vbl9pc19sYXN0X3JlZ2lvbihyLCB0KSkKIAkJCXMtJmd0O3N0YXQubnJfc25hcHNob3RzJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCWlmIChkYW1vc19xdW90YV9pc19zZXQocXVvdGEpKSB7CiYjNDM7CQkJcXVvdGEtJmd0O3dhbGtfdGFyZ2V0X2Zyb20gPSB0OwomIzQzOwkJCXF1b3RhLSZndDt3YWxrX2FkZHJfZnJvbSA9IHItJmd0O2FyLmVuZDsKJiM0MzsJCQlkYW1vc193YWxrX21heWJlX3JvdGF0ZShjLCB0LCBzKTsKJiM0MzsJCX0KIAl9CiB9CiAKQEAgLTMyNDEsOCAmIzQzOzMyOTcsMTAgQEAgc3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpCiAJbWF4X3JlZ2lvbl9zeiA9IGRhbW9uX3JlZ2lvbl9zel9saW1pdChjKTsKIAltdXRleF9sb2NrKCZhbXA7Yy0mZ3Q7d2Fsa19jb250cm9sX2xvY2spOwogCWRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7Ci0JCWlmIChjLSZndDtvcHMudGFyZ2V0X3ZhbGlkICZhbXA7JmFtcDsgYy0mZ3Q7b3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZSkKJiM0MzsJCWlmIChjLSZndDtvcHMudGFyZ2V0X3ZhbGlkICZhbXA7JmFtcDsgYy0mZ3Q7b3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZSkgewomIzQzOwkJCWRhbW9zX3JlcGxhY2VfaW52YWxpZF90YXJnZXQoYywgdCk7CiAJCQljb250aW51ZTsKJiM0MzsJCX0KIAkJZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE3OAoJCQkJCQkJb3V0cHV0OiAxODMKCQkJCQkJCXRob3VnaHRzOiA4NTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gUGF0Y2ggUmV2aWV3OiBObyBLTVNBTiBOZWVkZWQqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIERhdGEgQWNjZXNzIE1vbml0b3IgKERBTU9OKSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgREFNT04tYmFzZWQgT3BlcmF0aW9uIFNjaGVtZXMgKERBTU9TKSBwYXJ0LiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIHRocnVzdCBpcyByZWZhY3RvcmluZyBob3cgREFNT1Mga2VlcHMgdHJhY2sgb2YgaXRzIHF1b3RhIHdhbGsgcG9zaXRpb24gZHVyaW5nIGl0cyBhbmFseXNpcy4gVGhlIGtleSBjaGFuZ2UgaXMgdGhlIHJlbmFtaW5nIG9mIGBjaGFyZ2VfdGFyZ2V0X2Zyb21gIGFuZCBgY2hhcmdlX2FkZHJfZnJvbWAgdG8gYHdhbGtfdGFyZ2V0X2Zyb21gIGFuZCBgd2Fsa19hZGRyX2Zyb21gLCBhbG9uZyB3aXRoIGEgZmV3IHN1cHBvcnRpbmcgZnVuY3Rpb25zIGxpa2UgYGRhbW9zX2NvbXBsZXRlbHlfd2Fsa2VkYCwgYGRhbW9uX25leHRfdmFsaWRfdGFyZ2V0YCwgYGRhbW9zX3JlcGxhY2VfaW52YWxpZF90YXJnZXRgLCBgZGFtb3Nfc2tpcF93YWxrZWRfcmVnaW9uYCwgYW5kIGBkYW1vc193YWxrX21heWJlX3JvdGF0ZWAuCgpMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZ1cnRoZXIuIFRoZSBgc3RydWN0IGRhbW9zX3F1b3RhYCBub3cgaGFzIHRoZXNlIG5ldyBgd2Fsa19gIGZpZWxkcywgYW5kIHRoZSBgZGFtb3NfcXVvdGFfaW5pdGAgZnVuY3Rpb24gY29ycmVjdGx5IGluaXRpYWxpemVzIHRoZW0gdG8gYE5VTExgIGFuZCBgMGAsIHJlc3BlY3RpdmVseS4gR29vZC4gSSBhbHNvIHNlZSB0aGF0IGBkYW1vbl9jb21taXRfdGFyZ2V0c2AgaXMgdXBkYXRlZCB0byByZXNldCB0aGVtIGlmIHRoZSB0YXJnZXQgaXMgZGVzdHJveWVkLCBhbmQgYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbmAgYW5kIHVwZGF0ZWQgYXMgd2VsbC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgb2xkIHZhbHVlcyBhcmVuJiMzOTt0IHVzZWQsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBkZXNpZ24gY2hhbmdlcyBwcmV2ZW50IHRoaXMuIGBkYW1vc19hcHBseV9zY2hlbWVgIG5vIGxvbmdlciBzZXRzIHRoZSBvbGQgYGNoYXJnZV9gIGZpZWxkcywgYW5kIGBkYW1vbl9kb19hcHBseV9zY2hlbWVzYCBub3cgc2V0cyB0aGUgbmV3IGB3YWxrX2AgZmllbGRzIGFuZCBjYWxscyBgZGFtb3Nfd2Fsa19tYXliZV9yb3RhdGVgLiBDcnVjaWFsbHksIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGNhbGxzIGBkYW1vc19yZXBsYWNlX2ludmFsaWRfdGFyZ2V0YCBpZiBhIHRhcmdldCBpcyBpbnZhbGlkLCBzbyB0aGlzIHNob3VsZCBwcmV2ZW50IHRoZSB1c2Ugb2YgaW52YWxpZCB0YXJnZXRzLgoKTXkgaW5pdGlhbCBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeS4gQXJlIHdlIGNyZWF0aW5nIG9wcG9ydHVuaXRpZXMgZm9yIEtBU0FOIHRvIG1pc3MgYSBidWcgaGVyZT8gTGV0JiMzOTtzIGJlIGV4cGxpY2l0LCB0aGVzZSBuZXcgZmllbGRzIGFyZSBpbml0aWFsaXplZCBpbiBgZGFtb3NfcXVvdGFfaW5pdGAgdG8gTlVMTCBhbmQgMCwgd2hpY2ggYXJlIHZhbGlkIHZhbHVlcyBmb3IgcG9pbnRlcnMgYW5kIHVuc2lnbmVkIGxvbmdzLiBXZSYjMzk7cmUgbm90IGFsbG9jYXRpbmcgYW55IG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbmQgc2VuZGluZyB0aGVtIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIGFueSBvZiB0aGUgdXNlci1mYWNpbmcgaW50ZXJmYWNlcyBsaWtlIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rLCBvciBpb2N0bC4gVGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW50ZXJuYWwgdG8gdGhlIERBTU9OIGtlcm5lbCBzdGF0ZSBtYWNoaW5lLCB3aGljaCBpcyBnb29kLiBUaGUgcG90ZW50aWFsIGJ1Z3MgYXJlIGxpbWl0ZWQgdG8gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zIGlmLCBzYXksIGB3YWxrX3RhcmdldF9mcm9tYCBwb2ludHMgdG8gYSBmcmVlZCB0YXJnZXQuIEJ1dCBgZGFtb25fY29tbWl0X3RhcmdldHNgIGFwcGVhcnMgdG8gcHJldmVudCB0aGlzIGFuZCBgZGFtb3NfcmVwbGFjZV9pbnZhbGlkX3RhcmdldGAgYXBwZWFycyB0byBoYW5kbGUgaW52YWxpZCB0YXJnZXRzLiBLQVNBTiBzaG91bGQgYmUgYWJsZSB0byBjYXRjaCBhbGwgb2YgdGhlc2UgdHlwZXMgb2YgaXNzdWVzLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB3aGV0aGVyIGBzdHJ1Y3QgZGFtb3NfcXVvdGFgIG9yIGBzdHJ1Y3QgZGFtb3NgIGl0c2VsZiBpcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIERBTU9OIGV4cG9zZXMgc3RhdHMgdmlhIHN5c2ZzLCBidXQgaXQgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGR1bXAgdGhlIHJhdyBzdHJ1Y3QgdG8gdXNlcnNwYWNlLiBFdmVuIGlmIGl0IGRpZCwgdGhlIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQsIHNvIHRoYXQgd291bGRuJiMzOTt0IGJlIGEgcHJvYmxlbS4KClRoZXJlZm9yZSwgYWZ0ZXIgdGhpcyByZXZpZXcsIGl0JiMzOTtzIG15IGp1ZGdtZW50IHRoYXQgdGhpcyBwYXRjaCBkb2VzICpub3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCB3YXJyYW50IEtNU0FOLiBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBwb3RlbnRpYWwgcHJvYmxlbXMuIExldCYjMzk7cyBkb3VibGUgY2hlY2sgYGRhbW9zX3F1b3RhX2luaXRgIGFzIHdlbGw6CgpgYGBjCnN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRhbW9zX3F1b3RhX2luaXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSkKewoJcXVvdGEtJmd0O21zID0gMDsKCXF1b3RhLSZndDtzeiA9IDA7CglxdW90YS0mZ3Q7cmVzZXRfaW50ZXJ2YWwgPSAwOwoJcXVvdGEtJmd0O3dlaWdodF9zeiA9IDA7CglxdW90YS0mZ3Q7d2VpZ2h0X25yX2FjY2Vzc2VzID0gMDsKCXF1b3RhLSZndDt3ZWlnaHRfYWdlID0gMDsKCXF1b3RhLSZndDt0b3RhbF9jaGFyZ2VkX3N6ID0gMDsKCXF1b3RhLSZndDt0b3RhbF9jaGFyZ2VkX25zID0gMDsKCXF1b3RhLSZndDtjaGFyZ2VkX3N6ID0gMDsKCXF1b3RhLSZndDtjaGFyZ2VkX2Zyb20gPSAwOwoJcXVvdGEtJmd0O3dhbGtfdGFyZ2V0X2Zyb20gPSBOVUxMOwoJcXVvdGEtJmd0O3dhbGtfYWRkcl9mcm9tID0gMDsKCXF1b3RhLSZndDtlc3pfYnAgPSAwOwoJcmV0dXJuIHF1b3RhOwp9CmBgYAoKWWVwLCBldmVyeXRoaW5nIGlzIGV4cGxpY2l0bHkgemVyb2VkIG91dCBvciBOVUxMZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBoZXJlLiBTbywgSSB3aWxsIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCB0cmFja2luZyBvZiB0aGUgREFNT1MgKERBTU9OLWJhc2VkIE9wZXJhdGlvbiBTY2hlbWVzKSBxdW90YSB3YWxrIHBvc2l0aW9uLCByZXBsYWNpbmcgYGNoYXJnZV90YXJnZXRfZnJvbWAgYW5kIGBjaGFyZ2VfYWRkcl9mcm9tYCB3aXRoIGB3YWxrX3RhcmdldF9mcm9tYCBhbmQgYHdhbGtfYWRkcl9mcm9tYC4gVGhlc2UgbmV3IGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBOVUxMIGFuZCAwIGluIGBkYW1vc19xdW90YV9pbml0KClgLiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBpbnRlcm5hbCBrZXJuZWwgY29udHJvbCBmbG93IGFuZCByZWdpb24gaXRlcmF0aW9uIGxvZ2ljLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgdHJhY2tpbmcgb2YgdGhlIERBTU9TIChEQU1PTi1iYXNlZCBPcGVyYXRpb24gU2NoZW1lcykgcXVvdGEgd2FsayBwb3NpdGlvbiwgcmVwbGFjaW5nIGBjaGFyZ2VfdGFyZ2V0X2Zyb21gIGFuZCBgY2hhcmdlX2FkZHJfZnJvbWAgd2l0aCBgd2Fsa190YXJnZXRfZnJvbWAgYW5kIGB3YWxrX2FkZHJfZnJvbWAuIFRoZXNlIG5ldyBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gTlVMTCBhbmQgMCBpbiBgZGFtb3NfcXVvdGFfaW5pdCgpYC4gVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaW50ZXJuYWwga2VybmVsIGNvbnRyb2wgZmxvdyBhbmQgcmVnaW9uIGl0ZXJhdGlvbiBsb2dpYy4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzozOTowNi41ODc0Mjk0OTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY2MzE4NzA0MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9SRUNMQUlNXCIsXG4gICAgXCJEQU1PTl9MUlVfU09SVFwiLFxuICAgIFwiREFNT05fU1RBVFwiLFxuICAgIFwiREFNT05fREVCVUdfU0FOSVRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fY29tbWl0X2N0eFwiLFxuICAgIFwiZGFtb25fc3RhcnRcIixcbiAgICBcImRhbW9uX25ld19zY2hlbWVcIixcbiAgICBcImRhbW9uX3NldF9yZWdpb25zXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgdHJhY2tpbmcgb2YgdGhlIERBTU9TIChEQU1PTi1iYXNlZCBPcGVyYXRpb24gU2NoZW1lcykgcXVvdGEgd2FsayBwb3NpdGlvbiwgcmVwbGFjaW5nIGBjaGFyZ2VfdGFyZ2V0X2Zyb21gIGFuZCBgY2hhcmdlX2FkZHJfZnJvbWAgd2l0aCBgd2Fsa190YXJnZXRfZnJvbWAgYW5kIGB3YWxrX2FkZHJfZnJvbWAuIFRoZXNlIG5ldyBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gTlVMTCBhbmQgMCBpbiBgZGFtb3NfcXVvdGFfaW5pdCgpYC4gVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaW50ZXJuYWwga2VybmVsIGNvbnRyb2wgZmxvdyBhbmQgcmVnaW9uIGl0ZXJhdGlvbiBsb2dpYy4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSB0byB0cmFjayB0aGUgd2Fsa2luZyBwb3NpdGlvbiBvZiBEQU1PUyAoREFNT04tYmFzZWQgT3BlcmF0aW9uIFNjaGVtZXMpIHF1b3Rhcy4gSXQgcmVuYW1lcyB0aGUgdHJhY2tpbmcgdmFyaWFibGVzIGFuZCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBoYW5kbGUgc2tpcHBpbmcgd2Fsa2VkIHJlZ2lvbnMgYW5kIHJvdGF0aW5nIHRhcmdldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBzeXNmcyBvciBrZXJuZWwgQVBJcywgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjM5OjA2LjU4NzQzNTY0NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzNzE3ODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDdiZjVjY2YzYWY5ZDIzZGE1MDhiNTMzMzkwYTY3MzQ0ZWE5NzI2NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxMzozOTowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG5pbmRleCAwYzhiN2RkZWY5YWJiLi41ZTA3NTVlYmFkNzUwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbkBAIC0yOTYsOCArMjk2LDEwIEBAIHN0cnVjdCBkYW1vc19xdW90YSB7XFxuIFxcdC8qIEZvciBjaGFyZ2luZyB0aGUgcXVvdGEgKi9cXG4gXFx0dW5zaWduZWQgbG9uZyBjaGFyZ2VkX3N6O1xcbiBcXHR1bnNpZ25lZCBsb25nIGNoYXJnZWRfZnJvbTtcXG4tXFx0c3RydWN0IGRhbW9uX3RhcmdldCAqY2hhcmdlX3RhcmdldF9mcm9tO1xcbi1cXHR1bnNpZ25lZCBsb25nIGNoYXJnZV9hZGRyX2Zyb207XFxuK1xcbitcXHQvKiBGb3IgdHJhY2tpbmcgdGhlIERBTU9TIHdhbGsgcG9zaXRpb24gKHJvdGF0aW5nIGN1cnNvcikgKi9cXG4rXFx0c3RydWN0IGRhbW9uX3RhcmdldCAqd2Fsa190YXJnZXRfZnJvbTtcXG4rXFx0dW5zaWduZWQgbG9uZyB3YWxrX2FkZHJfZnJvbTtcXG4gXFxuIFxcdC8qIEZvciBwcmlvcml0aXphdGlvbiAqL1xcbiBcXHR1bnNpZ25lZCBpbnQgbWluX3Njb3JlO1xcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcXG5pbmRleCA2NDRkYWY1YTE2NTYwLi5iYmRiNTMwNTEzYTE4IDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xcbkBAIC00MDQsNiArNDA0LDUyIEBAIHN0YXRpYyBib29sIGRhbW9uX2lzX2xhc3RfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuIFxcdHJldHVybiBsaXN0X2lzX2xhc3QoXFx1MDAyNnItXFx1MDAzZWxpc3QsIFxcdTAwMjZ0LVxcdTAwM2VyZWdpb25zX2xpc3QpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBkYW1vc19jb21wbGV0ZWx5X3dhbGtlZChzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogJ1xcdTAwM2U9JyBpbnN0ZWFkIG9mICc9PScsIGJlY2F1c2UgdGhlIHJlZ2lvbiBzZXQgb2YgQHQgY291bGQgaGF2ZSBiZWVuXFxuK1xcdCAqIHNocnVua2VuIGJ5IGRhbW9uX3NldF9yZWdpb25zKCkgYWZ0ZXIgdGhlIGN1cnNvciB3YXMgc2F2ZWQuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gcy1cXHUwMDNlcXVvdGEud2Fsa190YXJnZXRfZnJvbSA9PSB0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdHMtXFx1MDAzZXF1b3RhLndhbGtfYWRkcl9mcm9tIFxcdTAwM2U9IGRhbW9uX2xhc3RfcmVnaW9uKHQpLVxcdTAwM2Vhci5lbmQ7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkYW1vbl9uZXh0X3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbitcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbit7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSBcXHUwMDI2Yy1cXHUwMDNlYWRhcHRpdmVfdGFyZ2V0cztcXG4rXFx0c3RydWN0IGRhbW9uX3RhcmdldCAqc3RhcnQgPSB0O1xcbitcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpuZXh0ID0gdDtcXG4rXFxuK1xcdHdoaWxlICh0cnVlKSB7XFxuK1xcdFxcdGlmIChsaXN0X2lzX2xhc3QoXFx1MDAyNm5leHQtXFx1MDAzZWxpc3QsIGhlYWQpKVxcbitcXHRcXHRcXHRuZXh0ID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0LCBsaXN0KTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRuZXh0ID0gbGlzdF9uZXh0X2VudHJ5KG5leHQsIGxpc3QpO1xcbitcXG4rXFx0XFx0aWYgKCFjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIHx8IGMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQobmV4dCkpXFxuK1xcdFxcdFxcdHJldHVybiBuZXh0O1xcbitcXG4rXFx0XFx0aWYgKG5leHQgPT0gc3RhcnQpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBkYW1vc19yZXBsYWNlX2ludmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuK1xcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9zICpzO1xcbitcXG4rXFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG4rXFx0XFx0aWYgKHMtXFx1MDAzZXF1b3RhLndhbGtfdGFyZ2V0X2Zyb20gIT0gdClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRzLVxcdTAwM2VxdW90YS53YWxrX3RhcmdldF9mcm9tID0gZGFtb25fbmV4dF92YWxpZF90YXJnZXQodCwgYyk7XFxuK1xcdFxcdHMtXFx1MDAzZXF1b3RhLndhbGtfYWRkcl9mcm9tID0gMDtcXG4rXFx0fVxcbit9XFxuK1xcbiAvKipcXG4gICogZGFtb25fcHJvYmVfaGl0c193c3VtKCkgLSBSZXR1cm5zIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIG9mIGEgcmVnaW9uLlxcbiAgKiBAcjpcXHRcXHRyZWdpb24gdG8gZ2V0IHRoZSB3ZWlnaHRlZCBzdW0gb2YuXFxuQEAgLTY3Myw4ICs3MTksOCBAQCBzdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhICpkYW1vc19xdW90YV9pbml0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxuIFxcdHF1b3RhLVxcdTAwM2V0b3RhbF9jaGFyZ2VkX25zID0gMDtcXG4gXFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogPSAwO1xcbiBcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tID0gMDtcXG4tXFx0cXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XFxuLVxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG4rXFx0cXVvdGEtXFx1MDAzZXdhbGtfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbitcXHRxdW90YS1cXHUwMDNld2Fsa19hZGRyX2Zyb20gPSAwO1xcbiBcXHRxdW90YS1cXHUwMDNlZXN6X2JwID0gMDtcXG4gXFx0cmV0dXJuIHF1b3RhO1xcbiB9XFxuQEAgLTE2MjgsOSArMTY3NCw5IEBAIHN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldHMoXFxuIFxcbiBcXHRcXHRcXHRkYW1vbl9kZXN0cm95X3RhcmdldChkc3RfdGFyZ2V0LCBkc3QpO1xcbiBcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgZHN0KSB7XFxuLVxcdFxcdFxcdFxcdGlmIChzLVxcdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPT0gZHN0X3RhcmdldCkge1xcbi1cXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbi1cXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG4rXFx0XFx0XFx0XFx0aWYgKHMtXFx1MDAzZXF1b3RhLndhbGtfdGFyZ2V0X2Zyb20gPT0gZHN0X3RhcmdldCkge1xcbitcXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VxdW90YS53YWxrX3RhcmdldF9mcm9tID0gTlVMTDtcXG4rXFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNlcXVvdGEud2Fsa19hZGRyX2Zyb20gPSAwO1xcbiBcXHRcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbkBAIC0yMzEyLDY0ICsyMzU4LDU0IEBAIHN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbiB9XFxuIFxcbiAvKlxcbi0gKiBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKCkgLSBDaGVjayBpZiB0aGUgZ2l2ZW4gcmVnaW9uIG9yIHN0YXJ0aW5nIHBhcnQgb2ZcXG4tICogaXQgaXMgYWxyZWFkeSBjaGFyZ2VkIGZvciB0aGUgREFNT1MgcXVvdGEuXFxuKyAqIGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbigpIC0gQ2hlY2sgaWYgdGhlIGdpdmVuIHJlZ2lvbiBvciBzdGFydGluZyBwYXJ0IG9mXFxuKyAqIGl0IGlzIGFscmVhZHkgd2Fsa2VkIGZvciB0aGUgREFNT1MgcXVvdGEuXFxuICAqIEB0OlxcdFRoZSB0YXJnZXQgb2YgdGhlIHJlZ2lvbi5cXG4tICogQHJwOlxcdFRoZSBwb2ludGVyIHRvIHRoZSByZWdpb24uXFxuKyAqIEByOlxcdFRoZSBwb2ludGVyIHRvIHRoZSByZWdpb24uXFxuICAqIEBzOlxcdFRoZSBzY2hlbWUgdG8gYmUgYXBwbGllZC5cXG4gICogQG1pbl9yZWdpb25fc3o6XFx0bWluaW11bSByZWdpb24gc2l6ZS5cXG4gICpcXG4tICogSWYgYSBxdW90YSBvZiBhIHNjaGVtZSBoYXMgZXhjZWVkZWQgaW4gYSBxdW90YSBjaGFyZ2Ugd2luZG93LCB0aGUgc2NoZW1lJ3NcXG4tICogYWN0aW9uIHdvdWxkIGFwcGxpZWQgdG8gb25seSBhIHBhcnQgb2YgdGhlIHRhcmdldCBhY2Nlc3MgcGF0dGVybiBmdWxmaWxsaW5nXFxuLSAqIHJlZ2lvbnMuICBUbyBhdm9pZCBhcHBseWluZyB0aGUgc2NoZW1lIGFjdGlvbiB0byBvbmx5IGFscmVhZHkgYXBwbGllZFxcbi0gKiByZWdpb25zLCBEQU1PTiBza2lwcyBhcHBseWluZyB0aGUgc2NoZW1lIGFjdGlvbiB0byB0aGUgcmVnaW9ucyB0aGF0IGNoYXJnZWRcXG4tICogaW4gdGhlIHByZXZpb3VzIGNoYXJnZSB3aW5kb3cuXFxuLSAqXFxuLSAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGEgZ2l2ZW4gcmVnaW9uIHNob3VsZCBiZSBza2lwcGVkIG9yIG5vdCBmb3IgdGhlXFxuLSAqIHJlYXNvbi4gIElmIG9ubHkgdGhlIHN0YXJ0aW5nIHBhcnQgb2YgdGhlIHJlZ2lvbiBoYXMgcHJldmlvdXNseSBjaGFyZ2VkLFxcbi0gKiB0aGlzIGZ1bmN0aW9uIHNwbGl0cyB0aGUgcmVnaW9uIGludG8gdHdvIHNvIHRoYXQgdGhlIHNlY29uZCBvbmUgY292ZXJzIHRoZVxcbi0gKiBhcmVhIHRoYXQgbm90IGNoYXJnZWQgaW4gdGhlIHByZXZpb3VzIGNoYXJnZSB3aWRub3csIGFuZCByZXR1cm4gdHJ1ZS4gIFRoZVxcbi0gKiBjYWxsZXIgY2FuIHNlZSB0aGUgc2Vjb25kIG9uZSBvbiB0aGUgbmV4dCBpdGVyYXRpb24gb2YgdGhlIHJlZ2lvbiB3YWxrLlxcbi0gKiBOb3RlIHRoYXQgdGhpcyBtZWFucyB0aGUgY2FsbGVyIHNob3VsZCB1c2UgZGFtb25fZm9yX2VhY2hfcmVnaW9uKCkgaW5zdGVhZFxcbi0gKiBvZiBkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZSgpLiAgSWYgZGFtb25fZm9yX2VhY2hfcmVnaW9uX3NhZmUoKSBpcyB1c2VkLFxcbi0gKiB0aGUgc2Vjb25kIHJlZ2lvbiB3aWxsIGp1c3QgYmUgaWdub3JlZC5cXG4rICogV2hlbiBhIHF1b3RhIGlzIGNvbmZpZ3VyZWQsIERBTU9OIHJlY29yZHMgaG93IGZhciBpdCBoYXMgd2Fsa2VkIHNvIHRoYXRcXG4rICogc3Vic2VxdWVudCBxdW90YSB3aW5kb3dzIGNvbnRpbnVlIGZyb20gdGhhdCBwb2ludCBpbnN0ZWFkIG9mIHJlLWFwcGx5aW5nIHRoZVxcbisgKiBzYW1lIHJlZ2lvbnMuICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBmb3IgcmVnaW9ucyB0aGF0IGFyZSBiZWZvcmUgdGhlXFxuKyAqIHJlY29yZGVkIGN1cnNvciBhbmQgdGhlcmVmb3JlIHNob3VsZCBiZSBza2lwcGVkLiAgSWYgb25seSB0aGUgc3RhcnRpbmcgcGFydFxcbisgKiBoYXMgYmVlbiB3YWxrZWQsIHRoZSByZWdpb24gaXMgc3BsaXQgc28gdGhhdCB0aGUgcmVtYWluaW5nIHBhcnQgY2FuIGJlXFxuKyAqIHZpc2l0ZWQuXFxuICAqXFxuICAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcmVnaW9uIHNob3VsZCBiZSBza2lwcGVkLCBmYWxzZSBvdGhlcndpc2UuXFxuICAqL1xcbi1zdGF0aWMgYm9vbCBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuK3N0YXRpYyBib29sIGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbiBcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4ge1xcbiBcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXFx1MDAyNnMtXFx1MDAzZXF1b3RhO1xcbiBcXHR1bnNpZ25lZCBsb25nIHN6X3RvX3NraXA7XFxuIFxcbi1cXHQvKiBTa2lwIHByZXZpb3VzbHkgY2hhcmdlZCByZWdpb25zICovXFxuLVxcdGlmIChxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKSB7XFxuLVxcdFxcdGlmICh0ICE9IHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20pXFxuLVxcdFxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHRcXHRpZiAociA9PSBkYW1vbl9sYXN0X3JlZ2lvbih0KSkge1xcbi1cXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcXG4tXFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSAwO1xcbitcXHRpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdC8qIFNraXAgcHJldmlvdXNseSB3YWxrZWQgcmVnaW9ucyAqL1xcbitcXHRpZiAocXVvdGEtXFx1MDAzZXdhbGtfdGFyZ2V0X2Zyb20pIHtcXG4rXFx0XFx0aWYgKHQgIT0gcXVvdGEtXFx1MDAzZXdhbGtfdGFyZ2V0X2Zyb20pXFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGlmIChxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHRcXHRyLVxcdTAwM2Vhci5lbmQgXFx1MDAzYz0gcXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20pXFxuK1xcdFxcdGlmIChxdW90YS1cXHUwMDNld2Fsa19hZGRyX2Zyb20gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuZW5kIFxcdTAwM2M9IHF1b3RhLVxcdTAwM2V3YWxrX2FkZHJfZnJvbSlcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbi1cXHRcXHRpZiAocXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gXFx1MDAyNlxcdTAwMjYgci1cXHUwMDNlYXIuc3RhcnQgXFx1MDAzY1xcbi1cXHRcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSkge1xcbi1cXHRcXHRcXHRzel90b19za2lwID0gQUxJR05fRE9XTihxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSAtXFxuK1xcdFxcdGlmIChxdW90YS1cXHUwMDNld2Fsa19hZGRyX2Zyb20gXFx1MDAyNlxcdTAwMjYgci1cXHUwMDNlYXIuc3RhcnQgXFx1MDAzY1xcbitcXHRcXHRcXHRcXHRxdW90YS1cXHUwMDNld2Fsa19hZGRyX2Zyb20pIHtcXG4rXFx0XFx0XFx0c3pfdG9fc2tpcCA9IEFMSUdOX0RPV04ocXVvdGEtXFx1MDAzZXdhbGtfYWRkcl9mcm9tIC1cXG4gXFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuc3RhcnQsIG1pbl9yZWdpb25fc3opO1xcbiBcXHRcXHRcXHRpZiAoIXN6X3RvX3NraXApIHtcXG4tXFx0XFx0XFx0XFx0aWYgKGRhbW9uX3N6X3JlZ2lvbihyKSBcXHUwMDNjPSBtaW5fcmVnaW9uX3N6KVxcbitcXHRcXHRcXHRcXHRpZiAoZGFtb25fc3pfcmVnaW9uKHIpIFxcdTAwM2M9IG1pbl9yZWdpb25fc3opIHtcXG4rXFx0XFx0XFx0XFx0XFx0cXVvdGEtXFx1MDAzZXdhbGtfYWRkcl9mcm9tID0gci1cXHUwMDNlYXIuZW5kO1xcbiBcXHRcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRcXHRzel90b19za2lwID0gbWluX3JlZ2lvbl9zejtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3pfdG9fc2tpcCk7XFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbi1cXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuQEAgLTI2MjcsMTAgKzI2NjMsNiBAQCBzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4gXFx0XFx0cXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfbnMgKz0gdGltZXNwZWM2NF90b19ucyhcXHUwMDI2ZW5kKSAtXFxuIFxcdFxcdFxcdHRpbWVzcGVjNjRfdG9fbnMoXFx1MDAyNmJlZ2luKTtcXG4gXFx0XFx0ZGFtb3NfY2hhcmdlX3F1b3RhKHF1b3RhLCBzeiwgc3pfYXBwbGllZCk7XFxuLVxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSkge1xcbi1cXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gdDtcXG4tXFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSByLVxcdTAwM2Vhci5lbmQ7XFxuLVxcdFxcdH1cXG4gXFx0fVxcbiBcXHRpZiAocy1cXHUwMDNlYWN0aW9uICE9IERBTU9TX1NUQVQpXFxuIFxcdFxcdHItXFx1MDAzZWFnZSA9IDA7XFxuQEAgLTI2MzksOCArMjY3MSwxOSBAQCBzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4gXFx0ZGFtb3NfdXBkYXRlX3N0YXQocywgc3osIHN6X2FwcGxpZWQsIHN6X29wc19maWx0ZXJfcGFzc2VkKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbitzdGF0aWMgdm9pZCBkYW1vc193YWxrX21heWJlX3JvdGF0ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkYW1vcyAqcylcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXFx1MDAyNnMtXFx1MDAzZXF1b3RhO1xcbitcXG4rXFx0aWYgKGRhbW9zX2NvbXBsZXRlbHlfd2Fsa2VkKHMsIHQpKSB7XFxuK1xcdFxcdHF1b3RhLVxcdTAwM2V3YWxrX3RhcmdldF9mcm9tID0gZGFtb25fbmV4dF92YWxpZF90YXJnZXQodCwgYyk7XFxuK1xcdFxcdHF1b3RhLVxcdTAwM2V3YWxrX2FkZHJfZnJvbSA9IDA7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbiB7XFxuIFxcdHN0cnVjdCBkYW1vcyAqcztcXG5AQCAtMjY1OCwxOCArMjcwMSwzMSBAQCBzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuIFxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRpZiAoZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbih0LCByLCBzLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcbiBcXHRcXHRpZiAocy1cXHUwMDNlbWF4X25yX3NuYXBzaG90cyBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHRcXHRzLVxcdTAwM2VtYXhfbnJfc25hcHNob3RzIFxcdTAwM2M9IHMtXFx1MDAzZXN0YXQubnJfc25hcHNob3RzKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFNraXAgcmVnaW9ucyBiZWZvcmUgdGhlIGN1cnNvci4gIElmIHRoZSBza2lwIG1ha2VzIHRoZSBjdXJzb3JcXG4rXFx0XFx0ICogcmVhY2ggdGhlIGVuZCBvZiB0aGlzIHRhcmdldCwgcm90YXRlIHRvIHRoZSBuZXh0IHZhbGlkIHRhcmdldFxcbitcXHRcXHQgKiBiZWZvcmUgY29udGludWluZyB3aXRoIHRoZSBuZXh0IHJlZ2lvbi9zY2hlbWUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoZGFtb3Nfc2tpcF93YWxrZWRfcmVnaW9uKHQsIHIsIHMsIGMtXFx1MDAzZW1pbl9yZWdpb25fc3opKSB7XFxuK1xcdFxcdFxcdGRhbW9zX3dhbGtfbWF5YmVfcm90YXRlKGMsIHQsIHMpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0aWYgKGRhbW9zX3ZhbGlkX3RhcmdldChjLCByLCBzKSlcXG4gXFx0XFx0XFx0ZGFtb3NfYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMpO1xcbiBcXG4gXFx0XFx0aWYgKGRhbW9uX2lzX2xhc3RfcmVnaW9uKHIsIHQpKVxcbiBcXHRcXHRcXHRzLVxcdTAwM2VzdGF0Lm5yX3NuYXBzaG90cysrO1xcbitcXG4rXFx0XFx0aWYgKGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpIHtcXG4rXFx0XFx0XFx0cXVvdGEtXFx1MDAzZXdhbGtfdGFyZ2V0X2Zyb20gPSB0O1xcbitcXHRcXHRcXHRxdW90YS1cXHUwMDNld2Fsa19hZGRyX2Zyb20gPSByLVxcdTAwM2Vhci5lbmQ7XFxuK1xcdFxcdFxcdGRhbW9zX3dhbGtfbWF5YmVfcm90YXRlKGMsIHQsIHMpO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMzI0MSw4ICszMjk3LDEwIEBAIHN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbiBcXHRtYXhfcmVnaW9uX3N6ID0gZGFtb25fcmVnaW9uX3N6X2xpbWl0KGMpO1xcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZjLVxcdTAwM2V3YWxrX2NvbnRyb2xfbG9jayk7XFxuIFxcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XFxuLVxcdFxcdGlmIChjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIFxcdTAwMjZcXHUwMDI2IGMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2UpXFxuK1xcdFxcdGlmIChjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIFxcdTAwMjZcXHUwMDI2IGMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2UpIHtcXG4rXFx0XFx0XFx0ZGFtb3NfcmVwbGFjZV9pbnZhbGlkX3RhcmdldChjLCB0KTtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4gXFx0XFx0ZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzozOTowNy4wODIwOTc4MTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNjUxODAzOTkwMDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9SRUNMQUlNXCIsXG4gICAgXCJEQU1PTl9MUlVfU09SVFwiLFxuICAgIFwiREFNT05fU1RBVFwiLFxuICAgIFwiREFNT05fREVCVUdfU0FOSVRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fY29tbWl0X2N0eFwiLFxuICAgIFwiZGFtb25fc3RhcnRcIixcbiAgICBcImRhbW9uX25ld19zY2hlbWVcIixcbiAgICBcImRhbW9uX3NldF9yZWdpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgb2YgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIHRvIHRyYWNrIHRoZSB3YWxraW5nIHBvc2l0aW9uIG9mIERBTU9TIChEQU1PTi1iYXNlZCBPcGVyYXRpb24gU2NoZW1lcykgcXVvdGFzLiBJdCByZW5hbWVzIHRoZSB0cmFja2luZyB2YXJpYWJsZXMgYW5kIGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIGhhbmRsZSBza2lwcGluZyB3YWxrZWQgcmVnaW9ucyBhbmQgcm90YXRpbmcgdGFyZ2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHN5c2ZzIG9yIGtlcm5lbCBBUElzLCBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDdiZjVjY2YzYWY5ZDIzZGE1MDhiNTMzMzkwYTY3MzQ0ZWE5NzI2NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDEzOjM5OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5pbmRleCAwYzhiN2RkZWY5YWJiLi41ZTA3NTVlYmFkNzUwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbkBAIC0yOTYsOCArMjk2LDEwIEBAIHN0cnVjdCBkYW1vc19xdW90YSB7XG4gXHQvKiBGb3IgY2hhcmdpbmcgdGhlIHF1b3RhICovXG4gXHR1bnNpZ25lZCBsb25nIGNoYXJnZWRfc3o7XG4gXHR1bnNpZ25lZCBsb25nIGNoYXJnZWRfZnJvbTtcbi1cdHN0cnVjdCBkYW1vbl90YXJnZXQgKmNoYXJnZV90YXJnZXRfZnJvbTtcbi1cdHVuc2lnbmVkIGxvbmcgY2hhcmdlX2FkZHJfZnJvbTtcbitcbitcdC8qIEZvciB0cmFja2luZyB0aGUgREFNT1Mgd2FsayBwb3NpdGlvbiAocm90YXRpbmcgY3Vyc29yKSAqL1xuK1x0c3RydWN0IGRhbW9uX3RhcmdldCAqd2Fsa190YXJnZXRfZnJvbTtcbitcdHVuc2lnbmVkIGxvbmcgd2Fsa19hZGRyX2Zyb207XG4gXG4gXHQvKiBGb3IgcHJpb3JpdGl6YXRpb24gKi9cbiBcdHVuc2lnbmVkIGludCBtaW5fc2NvcmU7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA2NDRkYWY1YTE2NTYwLi5iYmRiNTMwNTEzYTE4IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC00MDQsNiArNDA0LDUyIEBAIHN0YXRpYyBib29sIGRhbW9uX2lzX2xhc3RfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4gXHRyZXR1cm4gbGlzdF9pc19sYXN0KFx1MDAyNnItXHUwMDNlbGlzdCwgXHUwMDI2dC1cdTAwM2VyZWdpb25zX2xpc3QpO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBkYW1vc19jb21wbGV0ZWx5X3dhbGtlZChzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG4re1xuK1x0LypcbitcdCAqICdcdTAwM2U9JyBpbnN0ZWFkIG9mICc9PScsIGJlY2F1c2UgdGhlIHJlZ2lvbiBzZXQgb2YgQHQgY291bGQgaGF2ZSBiZWVuXG4rXHQgKiBzaHJ1bmtlbiBieSBkYW1vbl9zZXRfcmVnaW9ucygpIGFmdGVyIHRoZSBjdXJzb3Igd2FzIHNhdmVkLlxuK1x0ICovXG4rXHRyZXR1cm4gcy1cdTAwM2VxdW90YS53YWxrX3RhcmdldF9mcm9tID09IHQgXHUwMDI2XHUwMDI2XG4rXHRcdHMtXHUwMDNlcXVvdGEud2Fsa19hZGRyX2Zyb20gXHUwMDNlPSBkYW1vbl9sYXN0X3JlZ2lvbih0KS1cdTAwM2Vhci5lbmQ7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkYW1vbl9uZXh0X3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuK1x0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuK3tcbitcdHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSBcdTAwMjZjLVx1MDAzZWFkYXB0aXZlX3RhcmdldHM7XG4rXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpzdGFydCA9IHQ7XG4rXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpuZXh0ID0gdDtcbitcbitcdHdoaWxlICh0cnVlKSB7XG4rXHRcdGlmIChsaXN0X2lzX2xhc3QoXHUwMDI2bmV4dC1cdTAwM2VsaXN0LCBoZWFkKSlcbitcdFx0XHRuZXh0ID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0LCBsaXN0KTtcbitcdFx0ZWxzZVxuK1x0XHRcdG5leHQgPSBsaXN0X25leHRfZW50cnkobmV4dCwgbGlzdCk7XG4rXG4rXHRcdGlmICghYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIHx8IGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZChuZXh0KSlcbitcdFx0XHRyZXR1cm4gbmV4dDtcbitcbitcdFx0aWYgKG5leHQgPT0gc3RhcnQpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIHZvaWQgZGFtb3NfcmVwbGFjZV9pbnZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuK1x0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxuK3tcbitcdHN0cnVjdCBkYW1vcyAqcztcbitcbitcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XG4rXHRcdGlmIChzLVx1MDAzZXF1b3RhLndhbGtfdGFyZ2V0X2Zyb20gIT0gdClcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0cy1cdTAwM2VxdW90YS53YWxrX3RhcmdldF9mcm9tID0gZGFtb25fbmV4dF92YWxpZF90YXJnZXQodCwgYyk7XG4rXHRcdHMtXHUwMDNlcXVvdGEud2Fsa19hZGRyX2Zyb20gPSAwO1xuK1x0fVxuK31cbitcbiAvKipcbiAgKiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oKSAtIFJldHVybnMgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gb2YgYSByZWdpb24uXG4gICogQHI6XHRcdHJlZ2lvbiB0byBnZXQgdGhlIHdlaWdodGVkIHN1bSBvZi5cbkBAIC02NzMsOCArNzE5LDggQEAgc3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSAqZGFtb3NfcXVvdGFfaW5pdChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxuIFx0cXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9ucyA9IDA7XG4gXHRxdW90YS1cdTAwM2VjaGFyZ2VkX3N6ID0gMDtcbiBcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSA9IDA7XG4tXHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xuLVx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4rXHRxdW90YS1cdTAwM2V3YWxrX3RhcmdldF9mcm9tID0gTlVMTDtcbitcdHF1b3RhLVx1MDAzZXdhbGtfYWRkcl9mcm9tID0gMDtcbiBcdHF1b3RhLVx1MDAzZWVzel9icCA9IDA7XG4gXHRyZXR1cm4gcXVvdGE7XG4gfVxuQEAgLTE2MjgsOSArMTY3NCw5IEBAIHN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldHMoXG4gXG4gXHRcdFx0ZGFtb25fZGVzdHJveV90YXJnZXQoZHN0X3RhcmdldCwgZHN0KTtcbiBcdFx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgZHN0KSB7XG4tXHRcdFx0XHRpZiAocy1cdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPT0gZHN0X3RhcmdldCkge1xuLVx0XHRcdFx0XHRzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG4tXHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4rXHRcdFx0XHRpZiAocy1cdTAwM2VxdW90YS53YWxrX3RhcmdldF9mcm9tID09IGRzdF90YXJnZXQpIHtcbitcdFx0XHRcdFx0cy1cdTAwM2VxdW90YS53YWxrX3RhcmdldF9mcm9tID0gTlVMTDtcbitcdFx0XHRcdFx0cy1cdTAwM2VxdW90YS53YWxrX2FkZHJfZnJvbSA9IDA7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG5AQCAtMjMxMiw2NCArMjM1OCw1NCBAQCBzdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiB9XG4gXG4gLypcbi0gKiBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKCkgLSBDaGVjayBpZiB0aGUgZ2l2ZW4gcmVnaW9uIG9yIHN0YXJ0aW5nIHBhcnQgb2Zcbi0gKiBpdCBpcyBhbHJlYWR5IGNoYXJnZWQgZm9yIHRoZSBEQU1PUyBxdW90YS5cbisgKiBkYW1vc19za2lwX3dhbGtlZF9yZWdpb24oKSAtIENoZWNrIGlmIHRoZSBnaXZlbiByZWdpb24gb3Igc3RhcnRpbmcgcGFydCBvZlxuKyAqIGl0IGlzIGFscmVhZHkgd2Fsa2VkIGZvciB0aGUgREFNT1MgcXVvdGEuXG4gICogQHQ6XHRUaGUgdGFyZ2V0IG9mIHRoZSByZWdpb24uXG4tICogQHJwOlx0VGhlIHBvaW50ZXIgdG8gdGhlIHJlZ2lvbi5cbisgKiBAcjpcdFRoZSBwb2ludGVyIHRvIHRoZSByZWdpb24uXG4gICogQHM6XHRUaGUgc2NoZW1lIHRvIGJlIGFwcGxpZWQuXG4gICogQG1pbl9yZWdpb25fc3o6XHRtaW5pbXVtIHJlZ2lvbiBzaXplLlxuICAqXG4tICogSWYgYSBxdW90YSBvZiBhIHNjaGVtZSBoYXMgZXhjZWVkZWQgaW4gYSBxdW90YSBjaGFyZ2Ugd2luZG93LCB0aGUgc2NoZW1lJ3Ncbi0gKiBhY3Rpb24gd291bGQgYXBwbGllZCB0byBvbmx5IGEgcGFydCBvZiB0aGUgdGFyZ2V0IGFjY2VzcyBwYXR0ZXJuIGZ1bGZpbGxpbmdcbi0gKiByZWdpb25zLiAgVG8gYXZvaWQgYXBwbHlpbmcgdGhlIHNjaGVtZSBhY3Rpb24gdG8gb25seSBhbHJlYWR5IGFwcGxpZWRcbi0gKiByZWdpb25zLCBEQU1PTiBza2lwcyBhcHBseWluZyB0aGUgc2NoZW1lIGFjdGlvbiB0byB0aGUgcmVnaW9ucyB0aGF0IGNoYXJnZWRcbi0gKiBpbiB0aGUgcHJldmlvdXMgY2hhcmdlIHdpbmRvdy5cbi0gKlxuLSAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGEgZ2l2ZW4gcmVnaW9uIHNob3VsZCBiZSBza2lwcGVkIG9yIG5vdCBmb3IgdGhlXG4tICogcmVhc29uLiAgSWYgb25seSB0aGUgc3RhcnRpbmcgcGFydCBvZiB0aGUgcmVnaW9uIGhhcyBwcmV2aW91c2x5IGNoYXJnZWQsXG4tICogdGhpcyBmdW5jdGlvbiBzcGxpdHMgdGhlIHJlZ2lvbiBpbnRvIHR3byBzbyB0aGF0IHRoZSBzZWNvbmQgb25lIGNvdmVycyB0aGVcbi0gKiBhcmVhIHRoYXQgbm90IGNoYXJnZWQgaW4gdGhlIHByZXZpb3VzIGNoYXJnZSB3aWRub3csIGFuZCByZXR1cm4gdHJ1ZS4gIFRoZVxuLSAqIGNhbGxlciBjYW4gc2VlIHRoZSBzZWNvbmQgb25lIG9uIHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgcmVnaW9uIHdhbGsuXG4tICogTm90ZSB0aGF0IHRoaXMgbWVhbnMgdGhlIGNhbGxlciBzaG91bGQgdXNlIGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbigpIGluc3RlYWRcbi0gKiBvZiBkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZSgpLiAgSWYgZGFtb25fZm9yX2VhY2hfcmVnaW9uX3NhZmUoKSBpcyB1c2VkLFxuLSAqIHRoZSBzZWNvbmQgcmVnaW9uIHdpbGwganVzdCBiZSBpZ25vcmVkLlxuKyAqIFdoZW4gYSBxdW90YSBpcyBjb25maWd1cmVkLCBEQU1PTiByZWNvcmRzIGhvdyBmYXIgaXQgaGFzIHdhbGtlZCBzbyB0aGF0XG4rICogc3Vic2VxdWVudCBxdW90YSB3aW5kb3dzIGNvbnRpbnVlIGZyb20gdGhhdCBwb2ludCBpbnN0ZWFkIG9mIHJlLWFwcGx5aW5nIHRoZVxuKyAqIHNhbWUgcmVnaW9ucy4gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGZvciByZWdpb25zIHRoYXQgYXJlIGJlZm9yZSB0aGVcbisgKiByZWNvcmRlZCBjdXJzb3IgYW5kIHRoZXJlZm9yZSBzaG91bGQgYmUgc2tpcHBlZC4gIElmIG9ubHkgdGhlIHN0YXJ0aW5nIHBhcnRcbisgKiBoYXMgYmVlbiB3YWxrZWQsIHRoZSByZWdpb24gaXMgc3BsaXQgc28gdGhhdCB0aGUgcmVtYWluaW5nIHBhcnQgY2FuIGJlXG4rICogdmlzaXRlZC5cbiAgKlxuICAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcmVnaW9uIHNob3VsZCBiZSBza2lwcGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICovXG4tc3RhdGljIGJvb2wgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuK3N0YXRpYyBib29sIGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXG4gXHRcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcbiB7XG4gXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXHUwMDI2cy1cdTAwM2VxdW90YTtcbiBcdHVuc2lnbmVkIGxvbmcgc3pfdG9fc2tpcDtcbiBcbi1cdC8qIFNraXAgcHJldmlvdXNseSBjaGFyZ2VkIHJlZ2lvbnMgKi9cbi1cdGlmIChxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20pIHtcbi1cdFx0aWYgKHQgIT0gcXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKVxuLVx0XHRcdHJldHVybiB0cnVlO1xuLVx0XHRpZiAociA9PSBkYW1vbl9sYXN0X3JlZ2lvbih0KSkge1xuLVx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG4tXHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4rXHRpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qIFNraXAgcHJldmlvdXNseSB3YWxrZWQgcmVnaW9ucyAqL1xuK1x0aWYgKHF1b3RhLVx1MDAzZXdhbGtfdGFyZ2V0X2Zyb20pIHtcbitcdFx0aWYgKHQgIT0gcXVvdGEtXHUwMDNld2Fsa190YXJnZXRfZnJvbSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cdFx0fVxuLVx0XHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdHItXHUwMDNlYXIuZW5kIFx1MDAzYz0gcXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSlcbitcdFx0aWYgKHF1b3RhLVx1MDAzZXdhbGtfYWRkcl9mcm9tIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0ci1cdTAwM2Vhci5lbmQgXHUwMDNjPSBxdW90YS1cdTAwM2V3YWxrX2FkZHJfZnJvbSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdFx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gXHUwMDI2XHUwMDI2IHItXHUwMDNlYXIuc3RhcnQgXHUwMDNjXG4tXHRcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tKSB7XG4tXHRcdFx0c3pfdG9fc2tpcCA9IEFMSUdOX0RPV04ocXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSAtXG4rXHRcdGlmIChxdW90YS1cdTAwM2V3YWxrX2FkZHJfZnJvbSBcdTAwMjZcdTAwMjYgci1cdTAwM2Vhci5zdGFydCBcdTAwM2NcbitcdFx0XHRcdHF1b3RhLVx1MDAzZXdhbGtfYWRkcl9mcm9tKSB7XG4rXHRcdFx0c3pfdG9fc2tpcCA9IEFMSUdOX0RPV04ocXVvdGEtXHUwMDNld2Fsa19hZGRyX2Zyb20gLVxuIFx0XHRcdFx0XHRyLVx1MDAzZWFyLnN0YXJ0LCBtaW5fcmVnaW9uX3N6KTtcbiBcdFx0XHRpZiAoIXN6X3RvX3NraXApIHtcbi1cdFx0XHRcdGlmIChkYW1vbl9zel9yZWdpb24ocikgXHUwMDNjPSBtaW5fcmVnaW9uX3N6KVxuK1x0XHRcdFx0aWYgKGRhbW9uX3N6X3JlZ2lvbihyKSBcdTAwM2M9IG1pbl9yZWdpb25fc3opIHtcbitcdFx0XHRcdFx0cXVvdGEtXHUwMDNld2Fsa19hZGRyX2Zyb20gPSByLVx1MDAzZWFyLmVuZDtcbiBcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdFx0XHR9XG4gXHRcdFx0XHRzel90b19za2lwID0gbWluX3JlZ2lvbl9zejtcbiBcdFx0XHR9XG4gXHRcdFx0ZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6X3RvX3NraXApO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHR9XG4tXHRcdHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG4tXHRcdHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSAwO1xuIFx0fVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbkBAIC0yNjI3LDEwICsyNjYzLDYgQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRcdHF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfbnMgKz0gdGltZXNwZWM2NF90b19ucyhcdTAwMjZlbmQpIC1cbiBcdFx0XHR0aW1lc3BlYzY0X3RvX25zKFx1MDAyNmJlZ2luKTtcbiBcdFx0ZGFtb3NfY2hhcmdlX3F1b3RhKHF1b3RhLCBzeiwgc3pfYXBwbGllZCk7XG4tXHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKSB7XG4tXHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gdDtcbi1cdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gci1cdTAwM2Vhci5lbmQ7XG4tXHRcdH1cbiBcdH1cbiBcdGlmIChzLVx1MDAzZWFjdGlvbiAhPSBEQU1PU19TVEFUKVxuIFx0XHRyLVx1MDAzZWFnZSA9IDA7XG5AQCAtMjYzOSw4ICsyNjcxLDE5IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIFx0ZGFtb3NfdXBkYXRlX3N0YXQocywgc3osIHN6X2FwcGxpZWQsIHN6X29wc19maWx0ZXJfcGFzc2VkKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuLVx0XHRcdFx0ICAgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbitzdGF0aWMgdm9pZCBkYW1vc193YWxrX21heWJlX3JvdGF0ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4rXHRcdFx0XHQgICAgc3RydWN0IGRhbW9zICpzKVxuK3tcbitcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuK1xuK1x0aWYgKGRhbW9zX2NvbXBsZXRlbHlfd2Fsa2VkKHMsIHQpKSB7XG4rXHRcdHF1b3RhLVx1MDAzZXdhbGtfdGFyZ2V0X2Zyb20gPSBkYW1vbl9uZXh0X3ZhbGlkX3RhcmdldCh0LCBjKTtcbitcdFx0cXVvdGEtXHUwMDNld2Fsa19hZGRyX2Zyb20gPSAwO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuIHtcbiBcdHN0cnVjdCBkYW1vcyAqcztcbkBAIC0yNjU4LDE4ICsyNzAxLDMxIEBAIHN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbiBcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmIChkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHQsIHIsIHMsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG4tXHRcdFx0Y29udGludWU7XG4tXG4gXHRcdGlmIChzLVx1MDAzZW1heF9ucl9zbmFwc2hvdHMgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHRzLVx1MDAzZW1heF9ucl9zbmFwc2hvdHMgXHUwMDNjPSBzLVx1MDAzZXN0YXQubnJfc25hcHNob3RzKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHQvKlxuK1x0XHQgKiBTa2lwIHJlZ2lvbnMgYmVmb3JlIHRoZSBjdXJzb3IuICBJZiB0aGUgc2tpcCBtYWtlcyB0aGUgY3Vyc29yXG4rXHRcdCAqIHJlYWNoIHRoZSBlbmQgb2YgdGhpcyB0YXJnZXQsIHJvdGF0ZSB0byB0aGUgbmV4dCB2YWxpZCB0YXJnZXRcbitcdFx0ICogYmVmb3JlIGNvbnRpbnVpbmcgd2l0aCB0aGUgbmV4dCByZWdpb24vc2NoZW1lLlxuK1x0XHQgKi9cbitcdFx0aWYgKGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbih0LCByLCBzLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKSB7XG4rXHRcdFx0ZGFtb3Nfd2Fsa19tYXliZV9yb3RhdGUoYywgdCwgcyk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbiBcdFx0aWYgKGRhbW9zX3ZhbGlkX3RhcmdldChjLCByLCBzKSlcbiBcdFx0XHRkYW1vc19hcHBseV9zY2hlbWUoYywgdCwgciwgcyk7XG4gXG4gXHRcdGlmIChkYW1vbl9pc19sYXN0X3JlZ2lvbihyLCB0KSlcbiBcdFx0XHRzLVx1MDAzZXN0YXQubnJfc25hcHNob3RzKys7XG4rXG4rXHRcdGlmIChkYW1vc19xdW90YV9pc19zZXQocXVvdGEpKSB7XG4rXHRcdFx0cXVvdGEtXHUwMDNld2Fsa190YXJnZXRfZnJvbSA9IHQ7XG4rXHRcdFx0cXVvdGEtXHUwMDNld2Fsa19hZGRyX2Zyb20gPSByLVx1MDAzZWFyLmVuZDtcbitcdFx0XHRkYW1vc193YWxrX21heWJlX3JvdGF0ZShjLCB0LCBzKTtcbitcdFx0fVxuIFx0fVxuIH1cbiBcbkBAIC0zMjQxLDggKzMyOTcsMTAgQEAgc3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4gXHRtYXhfcmVnaW9uX3N6ID0gZGFtb25fcmVnaW9uX3N6X2xpbWl0KGMpO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZjLVx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcbiBcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XG4tXHRcdGlmIChjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQgXHUwMDI2XHUwMDI2IGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZSlcbitcdFx0aWYgKGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcdTAwMjZcdTAwMjYgYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKSB7XG4rXHRcdFx0ZGFtb3NfcmVwbGFjZV9pbnZhbGlkX3RhcmdldChjLCB0KTtcbiBcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuIFx0XHRkYW1vc19hcHBseV90YXJnZXQoYywgdCwgbWF4X3JlZ2lvbl9zeik7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzozOTowNy4wODIxMDE1NzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDE4NTUzODc4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBQYXRjaCBSZXZpZXcgXHUwMDI2IEZ1enppbmcgRmVhc2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBEQU1PTiBjb3JlLCBzcGVjaWZpY2FsbHkgdGhlIHF1b3RhIHdhbGtpbmcgbG9naWMgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJdCdzIGEgcHJldHR5IHRhcmdldGVkIG1vZGlmaWNhdGlvbiwgcmVuYW1pbmcgYSBjb3VwbGUgb2YgdmFyaWFibGVzIChgY2hhcmdlX3RhcmdldF9mcm9tYCBhbmQgYGNoYXJnZV9hZGRyX2Zyb21gIGJlY29taW5nIGB3YWxrX3RhcmdldF9mcm9tYCBhbmQgYHdhbGtfYWRkcl9mcm9tYCkgYW5kIGludHJvZHVjaW5nIGEgZmV3IG5ldyBmdW5jdGlvbnMuIFRoZXNlIGFkZGl0aW9ucywgYGRhbW9zX2NvbXBsZXRlbHlfd2Fsa2VkYCwgYGRhbW9uX25leHRfdmFsaWRfdGFyZ2V0YCwgYGRhbW9zX3JlcGxhY2VfaW52YWxpZF90YXJnZXRgLCBgZGFtb3Nfc2tpcF93YWxrZWRfcmVnaW9uYCwgYW5kIGBkYW1vc193YWxrX21heWJlX3JvdGF0ZWAsIHN0cm9uZ2x5IHN1Z2dlc3QgYSBtb3JlIG51YW5jZWQgYXBwcm9hY2ggdG8gdHJhY2tpbmcgYW5kIG1hbmFnaW5nIERBTU9TIHdhbGtpbmcuIFRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgIGFuZCBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCwgd2hpY2ggYXJlIGtleSBhcHBsaWNhdGlvbiBwb2ludHMuXG5cblRoZSBiaWcgcXVlc3Rpb24gbm93IGlzLCBcIklzIHRoaXMgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmU/XCIgR2l2ZW4gREFNT04ncyByb2xlIGFzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyBcIlllcy5cIiBJdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggc3lzZnMgYW5kIGtlcm5lbCBBUElzLCB3aGljaCBwcmVzZW50cyBhIGdvb2QgYXR0YWNrIHN1cmZhY2UuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSB3ZWlyZCBjb25maWcgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgbWFrZSB0aGlzIHBhdGNoIGxlc3MgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuIEknbGwgc2VhcmNoIGBtbS9kYW1vbi9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBEQU1PTiBjb25maWd1cmF0aW9ucyByZXF1aXJlZCB0byBlbmFibGUgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMuIEdvdHRhIGNvdmVyIGFsbCB0aGUgYmFzZXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxODEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzozOToxNy4yNjc2NDM5MTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA5MzY5MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxubW0vZGFtb24vS2NvbmZpZy00LVxcbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWctNjktXFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWctODktXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTA5LVxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzozOToxNy4zMjg1ODU1MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyODg2ODAzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGNvbmNpc2Ugc3VtbWFyeSBmb3IgYW4gZXhwZXJ0OlxuXG4qKkRBTU9OIENvbmZpZ3VyYXRpb24gYW5kIENvcmUgTG9naWMgUmV2aWV3KipcblxuUmlnaHQsIGl0J3MgdGltZSB0byBlbmFibGUgREFNT04sIHNwZWNpZmljYWxseSB3aXRoIHRoZSBgVkFERFJgLCBgUEFERFJgLCBgU1lTRlNgLCBgUkVDTEFJTWAsIGBMUlVfU09SVGAsIGFuZCBgU1RBVGAgb3B0aW9ucy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIEkga25vdyB0aGVzZSBmZWF0dXJlcyBhcmUgZGVzaWduZWQgdG8gcHJvdmlkZSBpbi1kZXB0aCBtb25pdG9yaW5nIGFuZCBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIGNhcGFiaWxpdGllcyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQuIEkgc3VzcGVjdCBlbmFibGluZyBhbGwgb2YgdGhlbSBhdCBvbmNlIG1pZ2h0IGJlIGEgYml0IHZlcmJvc2UgZm9yIGluaXRpYWwgdGVzdGluZy4gSSdsbCBuZWVkIHRvIHRhaWxvciB0aGVtIHRvIHRoZSBzcGVjaWZpYyBzY2VuYXJpby5cblxuQmVmb3JlIEkgZGl2ZSBkZWVwZXIgaW50byBleHBlcmltZW50YXRpb24sIEkgbmVlZCB0byBjaGVjayB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiBpbiBgbW0vZGFtb24vY29yZS5jYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbiBjYWxscywgYW55IGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBvdmVyYWxsIGNvbnRyb2wgZmxvdyBvZiBEQU1PTi4gVGhpcyB3aWxsIGhlbHAgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBhY3RzLCBkZXBlbmRlbmNpZXMsIGFuZCBjb25maWd1cmF0aW9uIG51YW5jZXMuIFRoaXMgYXBwcm9hY2ggd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IGRpYWdub3NlIHByb2JsZW1zIGFuZCBvcHRpbWl6ZSBEQU1PTiB1c2FnZS4gSXQgd2lsbCBhbHNvIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgZWFjaCBvcHRpb24gaW50ZXJhY3RzIHdpdGggdGhlIG90aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTA0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6Mzk6MjEuNjE3MjY4NTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY1MTE2MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYy4qIGRhbW9zX3dhbGtfbWF5YmVfcm90YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MjYwOD1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNjczLVxcbm1tL2RhbW9uL2NvcmUuYzoyNjc0OnN0YXRpYyB2b2lkIGRhbW9zX3dhbGtfbWF5YmVfcm90YXRlKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxubW0vZGFtb24vY29yZS5jLTI2NzUtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjM5OjIxLjcwMzc4NTE1M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzODI2MTMyNzkxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEQU1PTiBQYXRjaCoqXG5cbk9rYXksIGxldCBtZSBicmVhayBkb3duIHRoaXMgREFNT04gcGF0Y2guIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0J3MgaW50cm9kdWNpbmcgc29tZSBuZXcgc3RhdGljIGhlbHBlciBmdW5jdGlvbnM6IGBkYW1vc19jb21wbGV0ZWx5X3dhbGtlZGAsIGBkYW1vbl9uZXh0X3ZhbGlkX3RhcmdldGAsIGBkYW1vc19yZXBsYWNlX2ludmFsaWRfdGFyZ2V0YCwgYGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbmAsIGFuZCBgZGFtb3Nfd2Fsa19tYXliZV9yb3RhdGVgLiBUaGF0J3MgYSByZWFzb25hYmxlIG9yZ2FuaXphdGlvbmFsIGFwcHJvYWNoIGZvciB0aGVzZSB0eXBlcyBvZiBsb3ctbGV2ZWwgcm91dGluZXMuXG5cbk5vdywgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyBpcyBob3cgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgKnVzZWQqLiBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2Agc2VlbXMgdG8gbGV2ZXJhZ2UgYGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbmAgYW5kIGBkYW1vc193YWxrX21heWJlX3JvdGF0ZWAuIFRoYXQgc3VnZ2VzdHMgc29tZSBvcHRpbWl6YXRpb24gb3Igcm90YXRpb24gc3RyYXRlZ3kgZHVyaW5nIHNjaGVtZSBhcHBsaWNhdGlvbi4gQW5kIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGNhbGxzIGBkYW1vc19yZXBsYWNlX2ludmFsaWRfdGFyZ2V0YCwgd2hpY2ggaGludHMgYXQgaGFuZGxpbmcgaW52YWxpZCB0YXJnZXQgcmVnaW9ucyB3aXRoaW4gdGhlIGtlcm5lbCBkYWVtb24gY29udGV4dC4gYGRhbW9uX2NvbW1pdF90YXJnZXRzYCBpcyBhbHNvIGxpc3RlZCBhcyBtb2RpZmllZC5cblxuR2l2ZW4gdGhpcywgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBhbmQgYGRhbW9uX2NvbW1pdF90YXJnZXRzYC4gVGhlc2UgYXJlIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBkaXJlY3RseSBpbXBhY3RlZCBhbmQgYXJlIHRoZSBsaWtlbHkgYXJlYXMgb2YgdGhlIHBhdGNoIHRoYXQgaW50cm9kdWNlIHNpZ25pZmljYW50IGJlaGF2aW9yIGNoYW5nZXMuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaWYgdGhlc2UgYXJlIHRoZSAqdHJ1ZSoga2V5IGZvY2FsIHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk3NCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MTozOS45NjUxMTYxNzRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2MzQ0MDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/Lioga2RhbW9uZF9hcHBseV9zY2hlbWVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MzI1OT1zdGF0aWMgdm9pZCBkYW1vc190cmFjZV9zdGF0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjc0LVxcbm1tL2RhbW9uL2NvcmUuYzozMjc1OnN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbm1tL2RhbW9uL2NvcmUuYy0zMjc2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zODEwPXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM4ODItXFx0XFx0LypcXG5tbS9kYW1vbi9jb3JlLmM6Mzg4MzpcXHRcXHQgKiBkbyBrZGFtb25kX2NhbGwoKSBhbmQga2RhbW9uZF9hcHBseV9zY2hlbWVzKCkgYWZ0ZXJcXG5tbS9kYW1vbi9jb3JlLmMtMzg4NC1cXHRcXHQgKiBrZGFtb25kX21lcmdlX3JlZ2lvbnMoKSBpZiBwb3NzaWJsZSwgdG8gcmVkdWNlIG92ZXJoZWFkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQxOjQwLjQzMTQ2NTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDAzODk1MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipTdGF0aWMgRnVuY3Rpb24gQ29udW5kcnVtKipcblxuT2theSwgc28gYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGZpbmUsIEkgY2FuIHdvcmsgd2l0aCB0aGF0LiBCdXQgbm93IEkgbmVlZCB0byByZWFsbHkgY29uc2lkZXIgYGRhbW9uX2NvbW1pdF90YXJnZXRzYC4gSXMgdGhhdCBhbHNvIHN0YXRpYz8gVGhhdCdzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLCBiZWNhdXNlIHRoZSBhbnN3ZXIgd2lsbCBoZWF2aWx5IGluZmx1ZW5jZSBob3cgSSBwcm9jZWVkLiBJZiBpdCdzIHN0YXRpYywgaXQgaW50cm9kdWNlcyBhIHdob2xlIGRpZmZlcmVudCBzZXQgb2YgY29uc2lkZXJhdGlvbnMgYWJvdXQgc2NvcGUgYW5kIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaW1wbGljYXRpb25zLiBHb3R0YSBkaWcgZGVlcGVyIGludG8gdGhhdCBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MDMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MTo0My44MzUzNjI0NjRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MzY3OTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/LiogZGFtb25fY29tbWl0X3RhcmdldHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xNjM0PXN0YXRpYyB2b2lkIGRhbW9uX3JldmVydF90YXJnZXRfY29tbWl0cyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTY0OS1cXG5tbS9kYW1vbi9jb3JlLmM6MTY1MDpzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRzKFxcbm1tL2RhbW9uL2NvcmUuYy0xNjUxLVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTE3OTc9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTgyNS1cXHRcXHRyZXR1cm4gZXJyO1xcbm1tL2RhbW9uL2NvcmUuYzoxODI2OlxcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXRzKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTgyNy1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MTo0My45MzE3MzczNjdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ3ODI0MjgwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIE5vbi1TdGF0aWMgRGVwZW5kZW5jaWVzIG9uIGBkYW1vbl9jb21taXRfdGFyZ2V0c2AqKlxuXG5SaWdodCwgc28gYGRhbW9uX2NvbW1pdF90YXJnZXRzYCBpcyBhIHN0YXRpYyB2YXJpYWJsZSwgd2hpY2ggbGltaXRzIGl0cyBkaXJlY3Qgc2NvcGUgYW5kIHBvdGVudGlhbCBmb3IgZXh0ZXJuYWwgbWFuaXB1bGF0aW9uLiBUaGF0J3MgZ29vZCBmcm9tIGEgZGVzaWduIHBlcnNwZWN0aXZlLCBnZW5lcmFsbHksIGJ1dCBpdCBhbHNvIG1lYW5zIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdoZW4gcmVhc29uaW5nIGFib3V0IGl0cyBpbXBhY3QgYWNyb3NzIHRoZSBsYXJnZXIgc3lzdGVtLlxuXG5Ob3csIG15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgd2hpY2ggKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucyB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AgYWN0dWFsbHkgKmludGVyYWN0KiB3aXRoIGl0LCBldmVuIGluZGlyZWN0bHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGllY2VzIG9mIHRoZSBhcmNoaXRlY3R1cmUgbWlnaHQgZGVwZW5kIG9uIGl0cyB2YWx1ZSwgb3IgbWlnaHQgbWFuaXB1bGF0ZSBzb21ldGhpbmcgdGhhdCB0aGVuIHJlbGllcyBvbiB0aGF0IHZhbHVlLiBJdCdzIGEga2V5IHBpZWNlIG9mIGludGVybmFsIHN0YXRlLCBhbmQgSSB3YW50IGEgZnVsbCBwaWN0dXJlIG9mIGl0cyByb2xlLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBhc3Nlc3NpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hhbmdlcyBvciBkZWJ1Z2dpbmcgYW55IGlzc3VlcyByZWxhdGVkIHRvIERBTU9OJ3MgY29yZSBjb21taXQgdGFyZ2V0IGJlaGF2aW9yLiBUaGlzIGlzIHRoZSBwbGFjZSB0byBzdGFydCBkcmlsbGluZyBpbnRvIGl0cyB1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMjksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MTo0OC40MDk5ODIyMzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDY5MzU2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IGRhbW9uX2NvbW1pdF9jdHhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xODU1PXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfdGVzdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4ODMtICovXFxubW0vZGFtb24vY29yZS5jOjE4ODQ6aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTE4ODUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MTo0OC41MTQ2ODA3NTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY4NzYzNTMyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nOlxuXG4qKkV4YW1pbmluZyBEQU1PTiBJbml0aWFsaXphdGlvbiBhbmQgQ29udGV4dHMqKlxuXG5Pa2F5LCBzbyBgZGFtb25fY29tbWl0X2N0eGAgaXMgZXhwb3J0ZWQg4oCTIHRoYXQncyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhhdCBjZXJ0YWlubHkgYWZmZWN0cyBob3cgaXQgbWlnaHQgYmUgdXNlZCBhbmQgYWNjZXNzZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IHRoZW4gc3dpbmdzIHRvIGBrZGFtb25kX2ZuYC4gSG1tLCBpdCdzIGRlZmluZWQgYXMgc3RhdGljLiBUaGF0J3MgYSBrZXkgZGlzdGluY3Rpb24gYW5kIHJhaXNlcyB0aGUgcXVlc3Rpb24gb2YgaXRzIHNjb3BlIGFuZCB2aXNpYmlsaXR5IGNvbXBhcmVkIHRvIHRoZSBleHBvcnRlZCBgZGFtb25fY29tbWl0X2N0eGAuIEl0J3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlaXIgcmVsYXRpb25zaGlwLCBpZiBhbnkuIFxuXG5UaGUgY29yZSBxdWVzdGlvbiB0aGF0IGFyaXNlcyBpcywgaG93IGlzIERBTU9OIGFjdHVhbGx5IGxhdW5jaGVkIG9yIGluaXRpYWxpemVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LiBIb3cgZG9lcyB0aGUgc3lzdGVtIGJyaW5nIERBTU9OIGludG8gb3BlcmF0aW9uPyBJcyBgZGFtb25fY29tbWl0X2N0eGAgcGFydCBvZiB0aGF0IGluaXRpYWxpemF0aW9uPyBJcyBpdCB1c2VkIGFmdGVyPyBLbm93aW5nIGhvdyBpdOKAmXMgc3RhcnRlZCB3aWxsIGlsbHVtaW5hdGUgaG93IHRoZXNlIHNlZW1pbmdseSBpbmRlcGVuZGVudCBjb21wb25lbnRzIGludGVyYWN0IGFuZCB0aGVpciBvdmVyYWxsIHJvbGUgaW4gdGhlIERBTU9OIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSB0byBhbnN3ZXIgdGhpcyBwcm9wZXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU0MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQxOjUzLjIwMjMxOTE1OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4MjY5MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgZGFtb25fc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yMDAzPXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDE5LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMDIwOmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxcbm1tL2RhbW9uL2NvcmUuYy0yMDIxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDE6NTMuMzEwNTkyNDMxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDgxMzIyODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBhbmQgRGlyZWN0aW9uKipcblxuT2theSwgc28gYGRhbW9uX3N0YXJ0YCBpcyBmbGFnZ2VkIGFzIGJlaW5nIGV4cG9ydGVkLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IHRoZSBlbnRyeSBwb2ludCBmb3Igc29tZSBjcml0aWNhbCBkYWVtb24gb3Igc2VydmljZS4gTXkgbmV4dCBzdGVwLCBpbnN0aW5jdGl2ZWx5LCBpcyB0byBsb29rIGZvciB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSwgc29tZXRoaW5nIGxpa2UgYGRhbW9zX3F1b3RhX2luaXRgLCBvciBhIGZ1bmN0aW9uIHdpdGggYSB2ZXJ5IHNpbWlsYXIgbmFtaW5nIGNvbnZlbnRpb24uIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIHNldHVwIGFuZCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYmVpbmcgbG9hZGVkIG9yIHNldC4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIGxvZ2ljIHN0YXJ0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk0NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQxOjU2Ljg1ODcyODY2NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQzNDM2ODQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4uKiBkYW1vc19xdW90YV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDE6NTYuOTMzMDgwMDlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ1ODIxNDUxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqU3RhdGljIFZhcmlhYmxlcyBhbmQgU2NoZW1lIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIG15IG1pbmQgaW1tZWRpYXRlbHkgbGF0Y2hlcyBvbnRvIGBkYW1vc19xdW90YV9pbml0YC4gVGhlIGZhY3QgdGhhdCBpdCdzIGRlY2xhcmVkIGFzIGBzdGF0aWNgIGlzIGEgZmxhc2hpbmcgcmVkIGxpZ2h0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIEEgc3RhdGljIHZhcmlhYmxlIG1lYW5zIGl0IHJldGFpbnMgaXRzIHZhbHVlIGJldHdlZW4gZnVuY3Rpb24gY2FsbHMuIFRoaXMgYWZmZWN0cyBzY29waW5nLCBvZiBjb3Vyc2UsIGJ1dCBmb3IgdGhlIGxpZmUgb2YgbWUsIEkgY2FuJ3QgcXVpdGUgc2VlIHRoZSBzcGVjaWZpYyBudWFuY2Ugb2YgaG93IHRoaXMgaXMgYWxsIGludGVycGxheWluZywgYW5kIHNvIEkgaGF2ZSB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzbid0IGEgbHVya2luZyBjb25jdXJyZW5jeSBpc3N1ZSBkb3duIHRoZSBsaW5lLCBvciBwZXJoYXBzIGhhcyBzb21lIHVuZXhwZWN0ZWQgaW5pdGlhbGl6YXRpb24gYmVoYXZpb3IuXG5cblRoZW4sIG15IGF0dGVudGlvbiBzaGlmdHMgdG8gYGRhbW9uX25ld19zY2hlbWVgLiBJJ20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgKmhvdyogdGhpcyBpcyBnZXR0aW5nIGluaXRpYWxpemVkLCBhbmQgaWYgaXQncyBkZXBlbmRlbnQgb24gYGRhbW9zX3F1b3RhX2luaXRgIGluIHNvbWUgd2F5LiBJcyB0aGVyZSBhIGRlZmluZWQgb3JkZXI/IEhvdyBpcyB0aGUgc2NoZW1lIG5ld2VkPyBJcyBgZGFtb25fbmV3X3NjaGVtZWAgYWxzbyBzdGF0aWM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uPyBJIGhhdmUgdG8gc3RhcnQgbWFwcGluZyBvdXQgdGhlIGRlcGVuZGVuY2llcy4gVGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvIGlzIHRoZSBuZXh0IHRoaW5nIEknbSBnb2luZyB0byBmb2xsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MjowMS4zOTEyOTc0NzZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2OTk1OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdHJ1Y3QgZGFtb3MgXFxcXCpkYW1vbl9uZXdfc2NoZW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9NzE1PXN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRhbW9zX3F1b3RhX2luaXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03MjctXFxubW0vZGFtb24vY29yZS5jOjcyODpzdHJ1Y3QgZGFtb3MgKmRhbW9uX25ld19zY2hlbWUoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLFxcbm1tL2RhbW9uL2NvcmUuYy03MjktXFx0XFx0XFx0ZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MjowMS40NzgyOTk5MDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwODc1ODg4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nOlxuXG4qKkZvY3VzaW5nIG9uIHRoZSBEYW1vbiBDb2RlKipcblxuT2theSwgc28gYGRhbW9uX25ld19zY2hlbWVgIGlzIG5vdyBvZmZpY2lhbGx5IGV4cG9ydGVkLCB3aGljaCBpcyBncmVhdC4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBpdCBhIGtleSBzeW1ib2wgdG8gdHJhY2suIEkgbmVlZCB0byBrZWVwIHRoYXQgb25lIGluIG1pbmQuIEl0IHRlbGxzIG1lIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGEgbmV3IHNjaGVtZSB3aWxsIGJlIGF2YWlsYWJsZSBmb3Igb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSB0byB1c2UsIGFuZCBpbmRpY2F0ZXMgdGhlIGZlYXR1cmUgaXMgcmVhY2hpbmcgbWF0dXJpdHkuXG5cbkknbSB0aGlua2luZyB0aGF0IGZvY3VzaW5nIG9uIGEgZmV3IG90aGVyIGtleSBmdW5jdGlvbnMgaXMgcHJvYmFibHkgdGhlIGJlc3QgYXBwcm9hY2ggYXQgdGhpcyBzdGFnZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGBkYW1vbl9jb21taXRfY3R4YCwgYGRhbW9uX3N0YXJ0YCwgYW5kIGBkYW1vbl9uZXdfc2NoZW1lYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIG9mIHdoYXRldmVyIERhbW9uIGlzIGRvaW5nIHJpZ2h0IG5vdy4gVGhleSdsbCBnaXZlIG1lIGEgc3Ryb25nIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgZmxvdyBhbmQgZnVuY3Rpb25hbGl0eS5cblxuSSBzaG91bGQgYWxzbyBpbmNsdWRlIGBkYW1vbl9zZXRfcmVnaW9uc2AgYXMgYSBwb3RlbnRpYWwgYXJlYSBvZiBpbnRlcmVzdC4gRGVwZW5kaW5nIG9uIGhvdyB0aGUgbmV3IHNjaGVtZSBpbnRlcmFjdHMgd2l0aCByZWdpb25zLCBpdCBjb3VsZCBiZSB2ZXJ5IHJlbGV2YW50IHRvIHRoZSBjaGFuZ2VzLiBJJ2xsIGZsYWcgaXQgZm9yIG5vdywgYW5kIHNlZSBpZiBpdCBlbWVyZ2VzIGFzIGEgY3JpdGljYWwgcGllY2Ugd2hlbiBsb29raW5nIGF0IHRoZSBvdGhlciBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MjowNS4xODcwNjIwODFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzOTM3OTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgZGFtb25fc2V0X3JlZ2lvbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz00OTE9c3RhdGljIGludCBkYW1vbl9maWxsX3JlZ2lvbnNfaG9sZXMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqZmlyc3QsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNTIzLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo1MjQ6aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXFxubW0vZGFtb24vY29yZS5jLTUyNS1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQyOjA1LjI0MTAwNzk4N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzA3NzA1NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgYGRhbW9uX3NldF9yZWdpb25zYCoqXG5cbk9rYXksIHNvIGBkYW1vbl9zZXRfcmVnaW9uc2AgaXMgZXhwb3J0ZWQsIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBmdW5jdGlvbiBpcyBhIGdvb2QgZm9jYWwgcG9pbnQgZm9yIGFuYWx5c2lzLiBBbmQgaXQgbG9va3MgbGlrZSBJJ3ZlIGZvdW5kIGEgc29saWQgYW5jaG9yIHBvaW50LiBUaGUgcGF0Y2ggZGVzY3JpcHRpb24gcmVmZXJlbmNpbmcgYGRhbW9zX2NvbXBsZXRlbHlfd2Fsa2VkYCBtZW50aW9ucyBgZGFtb25fc2V0X3JlZ2lvbnMoKWAgZGlyZWN0bHksIHNwZWNpZmljYWxseSB0aGUgbnVhbmNlIG9mIHRoZSBmdW5jdGlvbiBwb3RlbnRpYWxseSBzaHJpbmtpbmcgYSByZWdpb24gc2V0IGFmdGVyIGEgY3Vyc29yIGlzIHNhdmVkOlxuXG5gYGBjXG5cdC8qXG5cdCAqICdcdTAwM2U9JyBpbnN0ZWFkIG9mICc9PScsIGJlY2F1c2UgdGhlIHJlZ2lvbiBzZXQgb2YgQHQgY291bGQgaGF2ZSBiZWVuXG5cdCAqIHNocnVua2VuIGJ5IGRhbW9uX3NldF9yZWdpb25zKCkgYWZ0ZXIgdGhlIGN1cnNvciB3YXMgc2F2ZWQuXG5cdCAqL1xuYGBgXG5cblRoYXQgZGVmaW5pdGVseSBtYWtlcyBpdCBhIHJlbGV2YW50IHN5bWJvbCB0byBmb2N1cyBvbi4gU28sIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkIGZvciB0aGlzIHRoaW5nIHRvIGJlIHVzZWZ1bD8gSSBuZWVkIHRvIGNoZWNrIGZvciBgREFNT05gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBgREFNT05fU1lTRlNgLCBgREFNT05fUkVDTEFJTWAsIGFuZCBgREFNT05fTFJVX1NPUlRgLiBUaG9zZSBhcmUgdGhlIGNvcmUgY29uZmlncyBJJ20gYWxyZWFkeSBhd2FyZSBvZi4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcGVydGluZW50IGNvbmZpZ3MgbHVya2luZyBpbiB0aGUgYmFja2dyb3VuZC4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDE4LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQyOjEwLjk0ODcxNjI5OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzMTExNzQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy02LVxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTQtXFxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vS2NvbmZpZy0xNi1cXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMjUtXFxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctMjctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMzctXFxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNDYtXFxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxcbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNjctXFxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNzUtXFxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNzctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMDctXFxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMTUtXFxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxubW0vZGFtb24vS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDI6MTMuMDc5ODM4NTI5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDM5MTk3OTY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgdGhlIERBTU9OIENvZGViYXNlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgREFNT04gaW1wbGVtZW50YXRpb24uIFRoZSBjb3JlIGZ1bmN0aW9uYWxpdHksIGFzIEkgcmVjYWxsIGZyb20gcHJldmlvdXMgd29yaywgc2hvdWxkIGJlIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gTWFrZXMgc2Vuc2UsIHRoYXQncyB3aGVyZSB0aGUgaGVhcnQgb2YgYW55IG1lbW9yeSBtb25pdG9yaW5nIGFuZCBhZGFwdGF0aW9uIHdvdWxkIGxpa2VseSByZXNpZGUuIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBzdXBwb3J0cyBpdC4gTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgYENPTkZJR19EQU1PTmAgaXMgYWN0dWFsbHkgZGVmaW5lZC4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgYG1tL2RhbW9uL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gSnVzdCBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBidWlsZCBlbnZpcm9ubWVudC4gVGhpcyBraW5kIG9mIHVwZnJvbnQgY2hlY2tpbmcgaXMgY3J1Y2lhbCBmb3IgYXZvaWRpbmcgd2lsZCBnb29zZSBjaGFzZXMgbGF0ZXIgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjI4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDg6MDMuNDcxODIxNjM1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdFxcbiAgIDM6XFx0b2JqLXlcXHRcXHRcXHRcXHQ6PSBjb3JlLm9cXG4gICA0OlxcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcXHQrPSBvcHMtY29tbW9uLm8gdmFkZHIub1xcbiAgIDU6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVxcdCs9IG9wcy1jb21tb24ubyBwYWRkci5vXFxuICAgNjpcXHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXFx0Kz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXFxuICAgODpcXHRvYmotJChDT05GSUdfREFNT05fTFJVX1NPUlQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBscnVfc29ydC5vXFxuICAgOTpcXHRvYmotJChDT05GSUdfREFNT05fU1RBVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0ODowMy40NzE4ODgxMDVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzNzQzMjYwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqTWFrZWZpbGUgQW5hbHlzaXM6IE1vZHVsZSBDb21waWxhdGlvbiBUcmlnZ2VyKipcblxuT2theSwgc28gYG9iai15IDo9IGNvcmUub2AgaW4gdGhpcyBjb250ZXh0IGNsZWFybHkgaW5kaWNhdGVzIHRoYXQgYGNvcmUub2AgaXMgc2xhdGVkIGZvciBjb21waWxhdGlvbiBpZiBpdHMgZGlyZWN0b3J5IGlzIGVudGVyZWQgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLiBJdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiBob3cgdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBgb2JqLXlgIHZhcmlhYmxlLCB3b3Jrcy4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byB0aGUgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgYW5kIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGxpbmtpbmcgcHJvY2VkdXJlcy4gSSB3YW50IHRvIHNlZSAqaG93KiB0aGlzIGBjb3JlLm9gIGZpbGUgaXMgdWx0aW1hdGVseSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBUaGlzIHdpbGwgY29uZmlybSB0aGUgY29tcGlsYXRpb24gYmVoYXZpb3IuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIHBpY3R1cmUgd2lsbCByZWluZm9yY2UgaG93IHRoaXMgYnVpbGRzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2ODAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQ4OjA3LjAwOTMyMzg3MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM3MTE3NzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTEzNT1vYmotJChDT05GSUdfREVCVUdfUEFHRV9SRUYpICs9IGRlYnVnX3BhZ2VfcmVmLm9cXG5tbS9NYWtlZmlsZToxMzY6b2JqLSQoQ09ORklHX0RBTU9OKSArPSBkYW1vbi9cXG5tbS9NYWtlZmlsZS0xMzctb2JqLSQoQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZKSArPSB1c2VyY29weS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQ4OjA3LjM0NjQ0OTgyNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Mzg1MDE0NjU4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBNb2R1bGUgVnVsbmVyYWJpbGl0eSBBc3Nlc3NtZW50KipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBgQ09ORklHX0RBTU9OYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZS4gVGhhdCdzIHRoZSBnYXRla2VlcGVyLiBUaGUgcGF0Y2ggaXRzZWxmIHNlZW1zIHRvIGJlIGRpZ2dpbmcgaW50byBgbW0vZGFtb24vY29yZS5jYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZSBzaW5jZSB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgREFNT04gbG9naWMgbGl2ZXMgYW5kIGdldHMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0RBTU9OYCBpcyBvbi4gVGhpcyBpbmRpY2F0ZXMgY2hhbmdlcyB0byBzY2hlbWUgYXBwbGljYXRpb24gYW5kIHF1b3RhIG1hbmFnZW1lbnQg4oCTIGp1aWN5IHRhcmdldHMgZm9yIHBvdGVudGlhbCBmdXp6aW5nLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUgYW5kIHdvcnRoIHRoZSB0aW1lLlxuXG5NeSBpbml0aWFsIGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlIHN5bWJvbHM6IGBkYW1vbl9jb21taXRfY3R4YCwgYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX25ld19zY2hlbWVgLCBhbmQgYGRhbW9uX3NldF9yZWdpb25zYC4gVGhvc2UgZmVlbCBsaWtlIHRoZSBsb2dpY2FsIGVudHJ5IHBvaW50cyBvciBjcml0aWNhbCBmdW5jdGlvbnMgd2hlcmUgdGhlIG5ldyBjaGFuZ2VzIHdpbGwgYmUgZXhwcmVzc2VkLCBhbmQgZGF0YSBmbG93IG9yIGNvbnRyb2wgbG9naWMgY291bGQgYmUgcHJvYmxlbWF0aWMuXG5cbk9mIGNvdXJzZSwgSSBuZWVkIHRvIGtlZXAgdGhlIHZhcmlvdXMgY29uZmlndXJhdGlvbiBvcHRpb25zIGluIG1pbmQgYXMgSSBidWlsZCB0aGUgZnV6emluZyBzZXR1cDogYERBTU9OYCwgb2J2aW91c2x5LCBidXQgYWxzbyBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBgREFNT05fU1lTRlNgLCBgREFNT05fUkVDTEFJTWAsIGFuZCBgREFNT05fTFJVX1NPUlRgLiBUaG9zZSB3aWxsIGxpa2VseSBhbHRlciB0aGUgY29kZSBwYXRocyBhbmQgdGhlcmVmb3JlIGFmZmVjdCB0aGUga2luZHMgb2YgY3Jhc2hlcyB0aGF0IGNhbiBiZSByZXZlYWxlZC4gVGhlIGNvbmZpZ3VyYXRpb25zIG1heSBhbHNvIGFmZmVjdCB0aGUgaW5wdXRzIHRoYXQgbXVzdCBiZSBnZW5lcmF0ZWQgZm9yIHRoZSB0ZXN0IGNhc2VzLlxuXG5PbmUgbW9yZSB0aGluZzogSSBzaG91bGQgdmVyaWZ5IHRoYXQgdGhlcmUgYXJlbid0IGFueSBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMgZnJvbSBgbW0vZGFtb24vY29yZS5jYCB0aGF0IGxvb2sgcmVsZXZhbnQgYW5kIG1pZ2h0IGJlIG1pc3NlZCBhdCBhIGZpcnN0IGdsYW5jZS4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IG5vIG90aGVyIGZ1bmN0aW9ucyBhcmUgdXNlZCBpbiBhZGRpdGlvbiB0byB0aGUga2V5IGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NzUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDk6MjEuMTk2NTk5Mjk0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTY3MTkyNzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5FWFBPUlRfU1lNQk9MX0dQTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQ5OjIxLjYxMzMyODI0M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTAwNDk1MzczMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBFWFBPUlRfU1lNQk9MX0dQTGAgUGxhY2VtZW50KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYEVYUE9SVF9TWU1CT0xfR1BMYCBpcyBiZWluZyB1c2VkLCBvciBwZXJoYXBzIGRlZmluZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IEkgbmVlZCB0byBiZSBmbGV4aWJsZSBpbiBob3cgSSBzZWFyY2ggZm9yIGl0LiBJIGNhbid0IGp1c3QgYXNzdW1lIGl0J3MgY2xlYW5seSBkZWZpbmVkIG9yIHVzZWQgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBJIGNhbiByZWx5IG9uIGl0IGJlaW5nIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLiBJdCdzIGxpa2VseSB0aGF0IGl0IG1pZ2h0IGJlIG9uIHRoZSBzYW1lIGxpbmUgYXMgb3RoZXIgY29kZSBlbGVtZW50cyBvciBldmVuIGVtYmVkZGVkIHdpdGhpbiBzb21lIHNvcnQgb2YgbWFjcm8uIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCB0aGUgcGFyc2VyIG1pZ2h0IGludGVycHJldCBpdCBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gY29udGV4dC4gSSBuZWVkIHRvIGFjY291bnQgZm9yIGJvdGggc2NlbmFyaW9zLCB0aGUgY2xlYW5lciBjYXNlIHdoZXJlIGl0J3MgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLCBhbmQgdGhlIGxlc3MgY2xlYW4gb25lIHdoZXJlIGl0IG1pZ2h0IGJlIG1peGVkIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU1NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjUxOjUxLjY2Mjg2ODI5MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMzMDAzMzU1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MX0dQTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjUxOjUxLjk5NTg3ODQyN1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjU4MzExMDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqVGhlIERlYnVnZ2luZyBEYW5jZTogQSBRdWljayBNZW50YWwgV2hpcmx3aW5kKipcblxuSG1tLCBJJ20gc3R1Y2ssIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgbWlzc2luZywgb3Igd2hlcmUgaXQncyBnb2luZyB3cm9uZy4gSXQncyB0aGF0IGZhbWlsaWFyIGZlZWxpbmcsIHRoZSBvbmUgdGhhdCBtYWtlcyBtZSBnbyBvdmVyIHRoaW5ncyBJJ3ZlIGNoZWNrZWQgYSBkb3plbiB0aW1lcyBhbHJlYWR5LiBUaGVuLCAqYm9vbSosIHRoZSBsaXR0bGUgbGlnaHRuaW5nIGJvbHQgb2YgYW4gaWRlYSBmbGFzaGVzOiBXYWl0IGEgc2Vjb25kLCBjb3VsZCBpdCBiZSBhIHZpc2liaWxpdHkgaXNzdWU/IEFyZSB3ZSBzdXJlIHRoZSBzeW1ib2wgaXMgYWN0dWFsbHkuLi4gZXhwb3J0ZWQ/IE1heWJlIEkganVzdCBtaXNzZWQgc29tZXRoaW5nIG9idmlvdXMsIHJpZ2h0PyBMZXQgbWUgY29uc2lkZXIgYEVYUE9SVF9TWU1CT0xgLiBJdCdzIGEga2V5IHRhY3RpYyB3aGVuIGRlYWxpbmcgd2l0aCB0aGVzZSBzb3J0cyBvZiBpc3N1ZXM7IGFuIGVhc3kgdGhpbmcgdG8gbWlzcyBidXQgYWxzbyBhIGNsYXNzaWMgY3VscHJpdC4gQWx3YXlzIHdvcnRoIGEgZG91YmxlLWNoZWNrLiBPa2F5LCBsZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MTgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjUxOjU1LjY1NDE5MjEwNloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxNDYxMTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo1MTo1NS42OTgzNDI5MzNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUxNzMzMzY4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBTeW1ib2wgVmlzaWJpbGl0eSBJc3N1ZSBpbiBEQU1PTioqXG5cbkhtbSwgd2FpdCBhIG1pbnV0ZS4uLiBJJ20gbG9va2luZyBhdCBgbW0vZGFtb24vY29yZS5jYCwgYW5kIGl0IGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGFueSBgRVhQT1JUX1NZTUJPTGAgbWFjcm8gZGVmaW5lZCBmb3IgaXQ/IFRoYXQncyB1bnVzdWFsLCBhbmQgZGVmaW5pdGVseSB3YXJyYW50cyBhIGNsb3NlciBsb29rLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgYGRhbW9uX3N0YXJ0YCAob3IgYW55IG90aGVyIGZ1bmN0aW9ucyBmb3IgdGhhdCBtYXR0ZXIpIHdpdGhpbiB0aGF0IGZpbGUgd291bGQgYmUgdmlzaWJsZS9hY2Nlc3NpYmxlIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgaWYgdGhlcmUncyBubyBleHBsaWNpdCBleHBvcnQuIFRoaXMgY291bGQgbGVhZCB0byBhIG1haW50ZW5hbmNlIGlzc3VlIGRvd24gdGhlIGxpbmUgaWYgdGhlcmUgYXJlIGZ1bmN0aW9ucyBhc3N1bWVkIHRvIGJlIHByaXZhdGUuXG5cblJpZ2h0LCBsZXQgbWUgZG91YmxlLWNoZWNrLiBJJ20gZ29pbmcgdG8gc2NhbiB0aHJvdWdoIGBtbS9kYW1vbi9jb3JlLmNgIGFuZCBzcGVjaWZpY2FsbHkgbG9vayBmb3IgdGhlIGBkYW1vbl9zdGFydGAgZnVuY3Rpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0J3MgYmVpbmcgdXNlZCBhbmQgaG93LiBJZiBpdCdzIHVzZWQgZWxzZXdoZXJlLCB0aGVuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pc20gbWFraW5nIGl0IHZpc2libGUsIGJlY2F1c2UgKnNvbWV0aGluZyogbXVzdCBiZSBtYWtpbmcgdGhpcyBhY2Nlc3NpYmxlLiBJJ20gYXNzdW1pbmcgdGhlcmUncyBubyBkaXJlY3QgZXhwb3J0LCBzbyB3aGF0IGFyZSB0aGUgYWx0ZXJuYXRpdmVzP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA1MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjUyOjAxLjIxNTY3ODc2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTcxOTE3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTEwNTk9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDg0LSAqIEluIGRldGFpbCwgYWxsIERBTU9OIEFQSSBjYWxsZXJzIGRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiBmb3IgaW5pdGlhbFxcbm1tL2RhbW9uL2NvcmUuYzoxMDg1OiAqIHNldHVwIG9mIGRhbW9uX2N0eCBiZWZvcmUgY2FsbGluZyBkYW1vbl9zdGFydCgpLiAgU29tZSBvZiB0aGUgQVBJIGNhbGxlcnNcXG5tbS9kYW1vbi9jb3JlLmMtMTA4Ni0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVxcdTAwM2UgZGFtb25fY29tbWl0KCkgZm9yXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTk3MT1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTk3My0vKlxcbm1tL2RhbW9uL2NvcmUuYzoxOTc0OiAqIF9fZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyBtb25pdG9yaW5nIHdpdGggZ2l2ZW4gY29udGV4dC5cXG5tbS9kYW1vbi9jb3JlLmMtMTk3NS0gKiBAY3R4OlxcdG1vbml0b3JpbmcgY29udGV4dFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE5ODAtICovXFxubW0vZGFtb24vY29yZS5jOjE5ODE6c3RhdGljIGludCBfX2RhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtMTk4Mi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjAwMz1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYyk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjAwNS0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MjAwNjogKiBkYW1vbl9zdGFydCgpIC0gU3RhcnRzIHRoZSBtb25pdG9yaW5ncyBmb3IgYSBnaXZlbiBncm91cCBvZiBjb250ZXh0cy5cXG5tbS9kYW1vbi9jb3JlLmMtMjAwNy0gKiBAY3R4czpcXHRhbiBhcnJheSBvZiB0aGUgcG9pbnRlcnMgZm9yIGNvbnRleHRzIHRvIHN0YXJ0IG1vbml0b3JpbmdcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDE0LSAqIEBleGNsdXNpdmUgaXMgdHJ1ZSBhbmQgYSBncm91cCBvZiB0aHJlYWRzIHRoYXQgY3JlYXRlZCBieSBvdGhlclxcbm1tL2RhbW9uL2NvcmUuYzoyMDE1OiAqICdkYW1vbl9zdGFydCgpJyBjYWxsIGlzIGN1cnJlbnRseSBydW5uaW5nLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBidXRcXG5tbS9kYW1vbi9jb3JlLmMtMjAxNi0gKiByZXR1cm5zIC1FQlVTWS5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDE5LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMDIwOmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxcbm1tL2RhbW9uL2NvcmUuYy0yMDIxLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDQ1LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9jdHhzOyBpKyspIHtcXG5tbS9kYW1vbi9jb3JlLmM6MjA0NjpcXHRcXHRlcnIgPSBfX2RhbW9uX3N0YXJ0KGN0eHNbaV0pO1xcbm1tL2RhbW9uL2NvcmUuYy0yMDQ3LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjExNj1pbnQgZGFtb25fa2RhbW9uZF9waWQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxNDMtICpcXG5tbS9kYW1vbi9jb3JlLmM6MjE0NDogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgZGFtb25fc3RhcnQoKSB3aXRoIHRoZVxcbm1tL2RhbW9uL2NvcmUuYy0yMTQ1LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIxNTI9aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxOTgtICpcXG5tbS9kYW1vbi9jb3JlLmM6MjE5OTogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgZGFtb25fc3RhcnQoKSB3aXRoIHRoZVxcbm1tL2RhbW9uL2NvcmUuYy0yMjAwLSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo1MjowMS4yNjE0MDMxOTdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE5Mzk0MTIzODQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIERBTU9OJ3MgU3ltYm9sIEV4cG9ydCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgREFNT04gY29kZSBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYG1tL2RhbW9uL2NvcmUuY2AgaXNuJ3QgYSBtb2R1bGUsIGl0J3MgYmFrZWQgcmlnaHQgaW50byB0aGUga2VybmVsLiBSaWdodCwgSSByZW1lbWJlciB0aGF0IGBtbS9kYW1vbi9NYWtlZmlsZWAgdXNlcyBgb2JqLXkgOj0gY29yZS5vYCwgd2hpY2ggY29uZmlybXMgaXQuIFNvLCBhcyBsb25nIGFzIGBDT05GSUdfREFNT05gIGlzIG9uLCBpdCdzIGFsd2F5cyBidWlsdC1pbi5cblxuVGhlIGltcGxpY2F0aW9ucyBhcmUgdGhhdCwgaWYgaXQncyBhbGwgYnVpbHQtaW4sIGFuZCBvbmx5IG90aGVyIGJ1aWx0LWluIGNvZGUgdXNlcyBpdCwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgZXhwb3J0ZWQgc3ltYm9scy4gQnV0IGhvbGQgb24sIGlzbid0IGBkYW1vbl9zdGFydGAgdXNlZCBieSBgbW0vZGFtb24vc3lzZnMuY2AsIGFuZCBpc24ndCAqdGhhdCogYSBtb2R1bGU/IExldCdzIHZlcmlmeSB0aGF0LlxuXG5ZZXAsIGxvb2tpbmcgYXQgYG9iai0kKENPTkZJR19EQU1PTl9TWVNGUykgKz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9gLCBhbmQgc2VlaW5nIHRoYXQgYENPTkZJR19EQU1PTl9TWVNGU2AgaXMgYSBib29sZWFuLCB0aGF0IG1lYW5zIGBzeXNmcy5jYCBpcyBhbHNvIGJ1aWx0LWluLiBPa2F5LCBubyBgRVhQT1JUX1NZTUJPTGAgaXMgbmVlZGVkIHRoZW4uIEkgYW0gY29uZmlkZW50LlxuXG5TbywgZnJvbSB3aGF0IEkndmUgc2VlbiwgYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX2NvbW1pdF9jdHhgLCBgZGFtb25fbmV3X3NjaGVtZWAsIGFuZCBgZGFtb25fc2V0X3JlZ2lvbnNgIGFyZSBhbGwgZ2xvYmFsIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gVGhlc2Ugd291bGQgYmUgZ29vZCBjYW5kaWRhdGVzIGZvciBpbmNsdXNpb24gaW4gYEZvY3VzU3ltYm9sc2AuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgd2lsbCBkb3VibGUtY2hlY2sgYGRhbW9uX25ld19zY2hlbWVgIGFuZCBgZGFtb25fc2V0X3JlZ2lvbnNgIGFnYWluIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBiZWZvcmUgZ29pbmcgYW55IGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjgyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjU1OjQwLjY1NTUzMDAxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODI1MzE5NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fbmV3X3NjaGVtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTcxNT1zdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhICpkYW1vc19xdW90YV9pbml0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzI3LVxcbm1tL2RhbW9uL2NvcmUuYzo3Mjg6c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcXG5tbS9kYW1vbi9jb3JlLmMtNzI5LVxcdFxcdFxcdGVudW0gZGFtb3NfYWN0aW9uIGFjdGlvbixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNTE3PXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTUzNS1cXHRcXHRcXHRjb250aW51ZTtcXG5tbS9kYW1vbi9jb3JlLmM6MTUzNjpcXHRcXHRuZXdfc2NoZW1lID0gZGFtb25fbmV3X3NjaGVtZShcXHUwMDI2c3JjX3NjaGVtZS1cXHUwMDNlcGF0dGVybixcXG5tbS9kYW1vbi9jb3JlLmMtMTUzNy1cXHRcXHRcXHRcXHRzcmNfc2NoZW1lLVxcdTAwM2VhY3Rpb24sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjU1OjQxLjEzODA2Nzk2NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTE3MTM1NDY3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkFzc2Vzc2luZyB0aGUgU2NvcGUgb2YgYGRhbW9uX25ld19zY2hlbWVgIGFuZCBgZGFtb25fc2V0X3JlZ2lvbnNgKipcblxuQWxyaWdodCwgc28gdGhlIGNvZGUgY2xlYXJseSBkZWZpbmVzIGBkYW1vbl9uZXdfc2NoZW1lYCBhcyBhIGdsb2JhbCBmdW5jdGlvbi4gTm8gc3VycHJpc2VzIHRoZXJlLiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTm93LCB0aGUgbW9yZSBpbnRlcmVzdGluZyBxdWVzdGlvbiBpcyBhYm91dCBgZGFtb25fc2V0X3JlZ2lvbnNgLiBJcyBpdCBhbHNvIGdsb2JhbCwgb3IgaXMgaXQgYm91bmQgdG8gYSBwYXJ0aWN1bGFyIHN0cnVjdHVyZSwgbWF5YmUgYSBjbGFzcyBvciBuYW1lc3BhY2U/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB3aGVyZSBpdCdzIHVzZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgREFNT04gaW1wbGVtZW50YXRpb24uIEl0cyBzY29waW5nIGNvdWxkIGFmZmVjdCB0aHJlYWQgc2FmZXR5LCByZWVudHJhbmN5LCBhbmQgZXZlbiBob3cgZWFzaWx5IHdlIGNhbiByZWZhY3RvciB0aGlzIHRoaW5nIGRvd24gdGhlIGxpbmUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29kZWJhc2UgdG8gY29uZmlybSBpdHMgZGVjbGFyYXRpb24gYW5kIHVzYWdlIHBhdHRlcm5zIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdHMgc2NvcGUuIElzIHRoaXMgYSBwb2ludCBvZiBjb250ZW50aW9uIHdpdGggb3VyIGxvY2tpbmcgc2NoZW1lPyBJIG5lZWQgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxOTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo1NzozMi44NTE2MTc1NjRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NzcwODA4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zZXRfcmVnaW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTQwNz1zdGF0aWMgYm9vbCBkYW1vc19jb21wbGV0ZWx5X3dhbGtlZChzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDEwLVxcdCAqICdcXHUwMDNlPScgaW5zdGVhZCBvZiAnPT0nLCBiZWNhdXNlIHRoZSByZWdpb24gc2V0IG9mIEB0IGNvdWxkIGhhdmUgYmVlblxcbm1tL2RhbW9uL2NvcmUuYzo0MTE6XFx0ICogc2hydW5rZW4gYnkgZGFtb25fc2V0X3JlZ2lvbnMoKSBhZnRlciB0aGUgY3Vyc29yIHdhcyBzYXZlZC5cXG5tbS9kYW1vbi9jb3JlLmMtNDEyLVxcdCAqL1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTQ5MT1zdGF0aWMgaW50IGRhbW9uX2ZpbGxfcmVnaW9uc19ob2xlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy01MTItLypcXG5tbS9kYW1vbi9jb3JlLmM6NTEzOiAqIGRhbW9uX3NldF9yZWdpb25zKCkgLSBTZXQgcmVnaW9ucyBvZiBhIHRhcmdldCBmb3IgZ2l2ZW4gYWRkcmVzcyByYW5nZXMuXFxubW0vZGFtb24vY29yZS5jLTUxNC0gKiBAdDpcXHRcXHR0aGUgZ2l2ZW4gdGFyZ2V0Llxcbi0tXFxubW0vZGFtb24vY29yZS5jLTUyMy0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NTI0OmludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxcbm1tL2RhbW9uL2NvcmUuYy01MjUtXFx0XFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTE1NzI9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE2MDEtXFx0cmFuZ2VzW2krK10uZW5kID0gZGFtb25fbGFzdF9yZWdpb24oc3JjKS1cXHUwMDNlYXIuZW5kO1xcbm1tL2RhbW9uL2NvcmUuYzoxNjAyOlxcdGVyciA9IGRhbW9uX3NldF9yZWdpb25zKGRzdCwgcmFuZ2VzLCBpLCBzcmNfbWluX3JlZ2lvbl9zeik7XFxubW0vZGFtb24vY29yZS5jLTE2MDMtXFx0a3ZmcmVlKHJhbmdlcyk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NDA0MD1pbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDA1MS1cXHRhZGRyX3JhbmdlLmVuZCA9ICplbmQ7XFxubW0vZGFtb24vY29yZS5jOjQwNTI6XFx0cmV0dXJuIGRhbW9uX3NldF9yZWdpb25zKHQsIFxcdTAwMjZhZGRyX3JhbmdlLCAxLCBtaW5fcmVnaW9uX3N6KTtcXG5tbS9kYW1vbi9jb3JlLmMtNDA1My19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjU3OjMzLjMzOTMyOTAyN1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzMxNDU4MTMxMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBEQU1PTiBNb2R1bGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIERBTU9OIGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMgdGhhdCBgZGFtb25fc2V0X3JlZ2lvbnNgIGlzIGRlZmluaXRlbHkgYSBnbG9iYWwgZnVuY3Rpb24uIFdlIG5lZWQgdG8gYmUgYXdhcmUgb2YgaG93IHRoYXQgbWlnaHQgaW1wYWN0IHRoZSBzeXN0ZW0uXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gSSd2ZSBnb3QgYGRhbW9uX2NvbW1pdF9jdHhgLCBgZGFtb25fc3RhcnRgLCBgZGFtb25fbmV3X3NjaGVtZWAsIGFuZCBvZiBjb3Vyc2UsIGBkYW1vbl9zZXRfcmVnaW9uc2AgYXMgdGhlIGZvY2FsIHBvaW50cyBoZXJlLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBpbnRlcmFjdCBpcyBnb2luZyB0byBiZSBjcnVjaWFsIGZvciBhIGRlZXAgZGl2ZS5cblxuQW5kIGl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIHNldCBvZiByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGBEQU1PTmAsIGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9SRUNMQUlNYCwgYERBTU9OX0xSVV9TT1JUYCwgYW5kIGBEQU1PTl9TVEFUYC4gVGhlc2UgYXJlIG9idmlvdXNseSBlc3NlbnRpYWwgZm9yIGNvbnRyb2xsaW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgbW9kdWxlLlxuXG5JIHNob3VsZCBwcm9iYWJseSBkbyBhIHF1aWNrIHNjYW4gdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50LiBJdCdzIGVhc3kgdG8gb3Zlcmxvb2sgdGhpbmdzIGluIHRoZXNlIGtpbmRzIG9mIHNldHVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwNDEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6MDM6MDYuNDg1MTQ2MzE4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODQ2ODA2Njk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxubW0vZGFtb24vS2NvbmZpZy00LVxcbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWctNjktXFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWctODktXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTA5LVxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDowMzowOS4zMzE5NTk5NDdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA5NDc3NDYzMTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRBTU9OIEZ1enppbmcgU3RyYXRlZ3k6IEV4cGFuZGluZyB0aGUgU2NvcGUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaXMgZXhwYW5kaW5nIHRvIGluY2x1ZGUgYERBTU9OX0RFQlVHX1NBTklUWWAgYW5kIGBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVGAuIE1ha2VzIHNlbnNlLiBUaGlzIGlzIGFib3V0IGJlaW5nIGNvbXByZWhlbnNpdmUgaW4gdGhlIGZ1enppbmcgc3RyYXRlZ3kgZm9yIERBTU9OLlxuXG5UaGUgY29yZSBvZiB0aGUgbWF0dGVyIGlzIHRoYXQgdGhpcyBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyBEQU1PTidzIGJlaGF2aW9yIGluIGhvdyBpdCBoYW5kbGVzIERBTU9TIHF1b3RhcyDigJMgc3BlY2lmaWNhbGx5LCB0cmFja2luZyB3aGVyZSB0aGUgd2Fsa2VyIGlzIHdpdGhpbiB0aGVzZSBxdW90YXMuIFRoZXkncmUgcmVuYW1pbmcgdmFyaWFibGVzIGFuZCBpbnRyb2R1Y2luZyBuZXcgY29udHJvbCBmbG93IGZvciBza2lwcGluZyB3YWxrZWQgcmVnaW9ucyBhbmQgcm90YXRpbmcgdGFyZ2V0cy4gVGhhdCdzIGEgY29yZSBtb2RpZmljYXRpb24gb2YgbWVtb3J5IG1hbmFnZW1lbnQuIEl0J3MgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHN5c2ZzIGFuZCBrZXJuZWwgQVBJcywgc28gaXQgKmFic29sdXRlbHkqIHdhcnJhbnRzIGZ1enppbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSBwZXJmb3JtYW5jZSB0d2Vhay4gSWYgaXQncyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlLCBhbmQgY2hhbmdlcyBjb3JlIERBTU9OIGJlaGF2aW91ciwgdGhlbiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgc3lzdGVtIGlzIHN0YWJsZS5cblxuSSdtIHRoaW5raW5nLCBmb3Igc2ltcGxpY2l0eSwgd2UnbGwgbGFiZWwgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSBhcyBgc2V0LXJlc3VsdHNgLiBJdCdzIGEgY2xlYXIsIGNvbmNpc2Ugd2F5IHRvIHJlZmVyIHRvIHRoZSBmdXp6aW5nIGZvY3VzLiBJIGtub3cgd2hhdCdzIGdvaW5nIG9uIG5vdzsgdGhpcyBpcyBtb3JlIHRoYW4ganVzdCBhIG1pbm9yIHR3ZWFrLiBJdCdzIGFib3V0IGVuc3VyaW5nIERBTU9OLCBhdCB0aGlzIHJldmlzZWQgbGV2ZWwsIGlzIHJvYnVzdCBhbmQgc2VjdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzE5OSwiT3V0cHV0VG9rZW5zIjoyMDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6MDY6MzguODA5NDI2MDVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjY1OTEwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIixcbiAgICBcIkRBTU9OX0xSVV9TT1JUXCIsXG4gICAgXCJEQU1PTl9TVEFUXCIsXG4gICAgXCJEQU1PTl9ERUJVR19TQU5JVFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9jb21taXRfY3R4XCIsXG4gICAgXCJkYW1vbl9zdGFydFwiLFxuICAgIFwiZGFtb25fbmV3X3NjaGVtZVwiLFxuICAgIFwiZGFtb25fc2V0X3JlZ2lvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBsb2dpYyBvZiBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcikgdG8gdHJhY2sgdGhlIHdhbGtpbmcgcG9zaXRpb24gb2YgREFNT1MgKERBTU9OLWJhc2VkIE9wZXJhdGlvbiBTY2hlbWVzKSBxdW90YXMuIEl0IHJlbmFtZXMgdGhlIHRyYWNraW5nIHZhcmlhYmxlcyBhbmQgaW50cm9kdWNlcyBuZXcgbG9naWMgdG8gaGFuZGxlIHNraXBwaW5nIHdhbGtlZCByZWdpb25zIGFuZCByb3RhdGluZyB0YXJnZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgc3lzZnMgb3Iga2VybmVsIEFQSXMsIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9SRUNMQUlNXCIsXG4gICAgXCJEQU1PTl9MUlVfU09SVFwiLFxuICAgIFwiREFNT05fU1RBVFwiLFxuICAgIFwiREFNT05fREVCVUdfU0FOSVRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fY29tbWl0X2N0eFwiLFxuICAgIFwiZGFtb25fc3RhcnRcIixcbiAgICBcImRhbW9uX25ld19zY2hlbWVcIixcbiAgICBcImRhbW9uX3NldF9yZWdpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgb2YgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIHRvIHRyYWNrIHRoZSB3YWxraW5nIHBvc2l0aW9uIG9mIERBTU9TIChEQU1PTi1iYXNlZCBPcGVyYXRpb24gU2NoZW1lcykgcXVvdGFzLiBJdCByZW5hbWVzIHRoZSB0cmFja2luZyB2YXJpYWJsZXMgYW5kIGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIGhhbmRsZSBza2lwcGluZyB3YWxrZWQgcmVnaW9ucyBhbmQgcm90YXRpbmcgdGFyZ2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHN5c2ZzIG9yIGtlcm5lbCBBUElzLCBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6MDY6MzguODg2MDkxNTk1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAyMDAzMjI2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjA2OjM4Ljg4NjYwMzQwNVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDAxOTUxNzUzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIHRyYWNraW5nIG9mIHRoZSBEQU1PUyAoREFNT04tYmFzZWQgT3BlcmF0aW9uIFNjaGVtZXMpIHF1b3RhIHdhbGsgcG9zaXRpb24sIHJlcGxhY2luZyBgY2hhcmdlX3RhcmdldF9mcm9tYCBhbmQgYGNoYXJnZV9hZGRyX2Zyb21gIHdpdGggYHdhbGtfdGFyZ2V0X2Zyb21gIGFuZCBgd2Fsa19hZGRyX2Zyb21gLiBUaGVzZSBuZXcgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIE5VTEwgYW5kIDAgaW4gYGRhbW9zX3F1b3RhX2luaXQoKWAuIFRoZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGludGVybmFsIGtlcm5lbCBjb250cm9sIGZsb3cgYW5kIHJlZ2lvbiBpdGVyYXRpb24gbG9naWMuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0N2JmNWNjZjNhZjlkMjNkYTUwOGI1MzMzOTBhNjczNDRlYTk3MjY2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTM6Mzk6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbmluZGV4IDBjOGI3ZGRlZjlhYmIuLjVlMDc1NWViYWQ3NTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuQEAgLTI5Niw4ICsyOTYsMTAgQEAgc3RydWN0IGRhbW9zX3F1b3RhIHtcbiBcdC8qIEZvciBjaGFyZ2luZyB0aGUgcXVvdGEgKi9cbiBcdHVuc2lnbmVkIGxvbmcgY2hhcmdlZF9zejtcbiBcdHVuc2lnbmVkIGxvbmcgY2hhcmdlZF9mcm9tO1xuLVx0c3RydWN0IGRhbW9uX3RhcmdldCAqY2hhcmdlX3RhcmdldF9mcm9tO1xuLVx0dW5zaWduZWQgbG9uZyBjaGFyZ2VfYWRkcl9mcm9tO1xuK1xuK1x0LyogRm9yIHRyYWNraW5nIHRoZSBEQU1PUyB3YWxrIHBvc2l0aW9uIChyb3RhdGluZyBjdXJzb3IpICovXG4rXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp3YWxrX3RhcmdldF9mcm9tO1xuK1x0dW5zaWduZWQgbG9uZyB3YWxrX2FkZHJfZnJvbTtcbiBcbiBcdC8qIEZvciBwcmlvcml0aXphdGlvbiAqL1xuIFx0dW5zaWduZWQgaW50IG1pbl9zY29yZTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjAuLmJiZGI1MzA1MTNhMTggMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTQwNCw2ICs0MDQsNTIgQEAgc3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdHJldHVybiBsaXN0X2lzX2xhc3QoXHUwMDI2ci1cdTAwM2VsaXN0LCBcdTAwMjZ0LVx1MDAzZXJlZ2lvbnNfbGlzdCk7XG4gfVxuIFxuK3N0YXRpYyBib29sIGRhbW9zX2NvbXBsZXRlbHlfd2Fsa2VkKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbit7XG4rXHQvKlxuK1x0ICogJ1x1MDAzZT0nIGluc3RlYWQgb2YgJz09JywgYmVjYXVzZSB0aGUgcmVnaW9uIHNldCBvZiBAdCBjb3VsZCBoYXZlIGJlZW5cbitcdCAqIHNocnVua2VuIGJ5IGRhbW9uX3NldF9yZWdpb25zKCkgYWZ0ZXIgdGhlIGN1cnNvciB3YXMgc2F2ZWQuXG4rXHQgKi9cbitcdHJldHVybiBzLVx1MDAzZXF1b3RhLndhbGtfdGFyZ2V0X2Zyb20gPT0gdCBcdTAwMjZcdTAwMjZcbitcdFx0cy1cdTAwM2VxdW90YS53YWxrX2FkZHJfZnJvbSBcdTAwM2U9IGRhbW9uX2xhc3RfcmVnaW9uKHQpLVx1MDAzZWFyLmVuZDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBkYW1vbl90YXJnZXQgKmRhbW9uX25leHRfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4rXHRcdHN0cnVjdCBkYW1vbl9jdHggKmMpXG4re1xuK1x0c3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9IFx1MDAyNmMtXHUwMDNlYWRhcHRpdmVfdGFyZ2V0cztcbitcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnN0YXJ0ID0gdDtcbitcdHN0cnVjdCBkYW1vbl90YXJnZXQgKm5leHQgPSB0O1xuK1xuK1x0d2hpbGUgKHRydWUpIHtcbitcdFx0aWYgKGxpc3RfaXNfbGFzdChcdTAwMjZuZXh0LVx1MDAzZWxpc3QsIGhlYWQpKVxuK1x0XHRcdG5leHQgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBkYW1vbl90YXJnZXQsIGxpc3QpO1xuK1x0XHRlbHNlXG4rXHRcdFx0bmV4dCA9IGxpc3RfbmV4dF9lbnRyeShuZXh0LCBsaXN0KTtcbitcbitcdFx0aWYgKCFjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQgfHwgYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKG5leHQpKVxuK1x0XHRcdHJldHVybiBuZXh0O1xuK1xuK1x0XHRpZiAobmV4dCA9PSBzdGFydClcbitcdFx0XHRicmVhaztcbitcdH1cbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgdm9pZCBkYW1vc19yZXBsYWNlX2ludmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsXG4rXHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG4re1xuK1x0c3RydWN0IGRhbW9zICpzO1xuK1xuK1x0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbitcdFx0aWYgKHMtXHUwMDNlcXVvdGEud2Fsa190YXJnZXRfZnJvbSAhPSB0KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRzLVx1MDAzZXF1b3RhLndhbGtfdGFyZ2V0X2Zyb20gPSBkYW1vbl9uZXh0X3ZhbGlkX3RhcmdldCh0LCBjKTtcbitcdFx0cy1cdTAwM2VxdW90YS53YWxrX2FkZHJfZnJvbSA9IDA7XG4rXHR9XG4rfVxuK1xuIC8qKlxuICAqIGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpIC0gUmV0dXJucyBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiBhIHJlZ2lvbi5cbiAgKiBAcjpcdFx0cmVnaW9uIHRvIGdldCB0aGUgd2VpZ2h0ZWQgc3VtIG9mLlxuQEAgLTY3Myw4ICs3MTksOCBAQCBzdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhICpkYW1vc19xdW90YV9pbml0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXG4gXHRxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX25zID0gMDtcbiBcdHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogPSAwO1xuIFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tID0gMDtcbi1cdHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG4tXHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbitcdHF1b3RhLVx1MDAzZXdhbGtfdGFyZ2V0X2Zyb20gPSBOVUxMO1xuK1x0cXVvdGEtXHUwMDNld2Fsa19hZGRyX2Zyb20gPSAwO1xuIFx0cXVvdGEtXHUwMDNlZXN6X2JwID0gMDtcbiBcdHJldHVybiBxdW90YTtcbiB9XG5AQCAtMTYyOCw5ICsxNjc0LDkgQEAgc3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0cyhcbiBcbiBcdFx0XHRkYW1vbl9kZXN0cm95X3RhcmdldChkc3RfdGFyZ2V0LCBkc3QpO1xuIFx0XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBkc3QpIHtcbi1cdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9PSBkc3RfdGFyZ2V0KSB7XG4tXHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbi1cdFx0XHRcdFx0cy1cdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tID0gMDtcbitcdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLndhbGtfdGFyZ2V0X2Zyb20gPT0gZHN0X3RhcmdldCkge1xuK1x0XHRcdFx0XHRzLVx1MDAzZXF1b3RhLndhbGtfdGFyZ2V0X2Zyb20gPSBOVUxMO1xuK1x0XHRcdFx0XHRzLVx1MDAzZXF1b3RhLndhbGtfYWRkcl9mcm9tID0gMDtcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cbkBAIC0yMzEyLDY0ICsyMzU4LDU0IEBAIHN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIH1cbiBcbiAvKlxuLSAqIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oKSAtIENoZWNrIGlmIHRoZSBnaXZlbiByZWdpb24gb3Igc3RhcnRpbmcgcGFydCBvZlxuLSAqIGl0IGlzIGFscmVhZHkgY2hhcmdlZCBmb3IgdGhlIERBTU9TIHF1b3RhLlxuKyAqIGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbigpIC0gQ2hlY2sgaWYgdGhlIGdpdmVuIHJlZ2lvbiBvciBzdGFydGluZyBwYXJ0IG9mXG4rICogaXQgaXMgYWxyZWFkeSB3YWxrZWQgZm9yIHRoZSBEQU1PUyBxdW90YS5cbiAgKiBAdDpcdFRoZSB0YXJnZXQgb2YgdGhlIHJlZ2lvbi5cbi0gKiBAcnA6XHRUaGUgcG9pbnRlciB0byB0aGUgcmVnaW9uLlxuKyAqIEByOlx0VGhlIHBvaW50ZXIgdG8gdGhlIHJlZ2lvbi5cbiAgKiBAczpcdFRoZSBzY2hlbWUgdG8gYmUgYXBwbGllZC5cbiAgKiBAbWluX3JlZ2lvbl9zejpcdG1pbmltdW0gcmVnaW9uIHNpemUuXG4gICpcbi0gKiBJZiBhIHF1b3RhIG9mIGEgc2NoZW1lIGhhcyBleGNlZWRlZCBpbiBhIHF1b3RhIGNoYXJnZSB3aW5kb3csIHRoZSBzY2hlbWUnc1xuLSAqIGFjdGlvbiB3b3VsZCBhcHBsaWVkIHRvIG9ubHkgYSBwYXJ0IG9mIHRoZSB0YXJnZXQgYWNjZXNzIHBhdHRlcm4gZnVsZmlsbGluZ1xuLSAqIHJlZ2lvbnMuICBUbyBhdm9pZCBhcHBseWluZyB0aGUgc2NoZW1lIGFjdGlvbiB0byBvbmx5IGFscmVhZHkgYXBwbGllZFxuLSAqIHJlZ2lvbnMsIERBTU9OIHNraXBzIGFwcGx5aW5nIHRoZSBzY2hlbWUgYWN0aW9uIHRvIHRoZSByZWdpb25zIHRoYXQgY2hhcmdlZFxuLSAqIGluIHRoZSBwcmV2aW91cyBjaGFyZ2Ugd2luZG93LlxuLSAqXG4tICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgYSBnaXZlbiByZWdpb24gc2hvdWxkIGJlIHNraXBwZWQgb3Igbm90IGZvciB0aGVcbi0gKiByZWFzb24uICBJZiBvbmx5IHRoZSBzdGFydGluZyBwYXJ0IG9mIHRoZSByZWdpb24gaGFzIHByZXZpb3VzbHkgY2hhcmdlZCxcbi0gKiB0aGlzIGZ1bmN0aW9uIHNwbGl0cyB0aGUgcmVnaW9uIGludG8gdHdvIHNvIHRoYXQgdGhlIHNlY29uZCBvbmUgY292ZXJzIHRoZVxuLSAqIGFyZWEgdGhhdCBub3QgY2hhcmdlZCBpbiB0aGUgcHJldmlvdXMgY2hhcmdlIHdpZG5vdywgYW5kIHJldHVybiB0cnVlLiAgVGhlXG4tICogY2FsbGVyIGNhbiBzZWUgdGhlIHNlY29uZCBvbmUgb24gdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSByZWdpb24gd2Fsay5cbi0gKiBOb3RlIHRoYXQgdGhpcyBtZWFucyB0aGUgY2FsbGVyIHNob3VsZCB1c2UgZGFtb25fZm9yX2VhY2hfcmVnaW9uKCkgaW5zdGVhZFxuLSAqIG9mIGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9zYWZlKCkuICBJZiBkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZSgpIGlzIHVzZWQsXG4tICogdGhlIHNlY29uZCByZWdpb24gd2lsbCBqdXN0IGJlIGlnbm9yZWQuXG4rICogV2hlbiBhIHF1b3RhIGlzIGNvbmZpZ3VyZWQsIERBTU9OIHJlY29yZHMgaG93IGZhciBpdCBoYXMgd2Fsa2VkIHNvIHRoYXRcbisgKiBzdWJzZXF1ZW50IHF1b3RhIHdpbmRvd3MgY29udGludWUgZnJvbSB0aGF0IHBvaW50IGluc3RlYWQgb2YgcmUtYXBwbHlpbmcgdGhlXG4rICogc2FtZSByZWdpb25zLiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgZm9yIHJlZ2lvbnMgdGhhdCBhcmUgYmVmb3JlIHRoZVxuKyAqIHJlY29yZGVkIGN1cnNvciBhbmQgdGhlcmVmb3JlIHNob3VsZCBiZSBza2lwcGVkLiAgSWYgb25seSB0aGUgc3RhcnRpbmcgcGFydFxuKyAqIGhhcyBiZWVuIHdhbGtlZCwgdGhlIHJlZ2lvbiBpcyBzcGxpdCBzbyB0aGF0IHRoZSByZW1haW5pbmcgcGFydCBjYW4gYmVcbisgKiB2aXNpdGVkLlxuICAqXG4gICogUmV0dXJuOiB0cnVlIGlmIHRoZSByZWdpb24gc2hvdWxkIGJlIHNraXBwZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgKi9cbi1zdGF0aWMgYm9vbCBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4rc3RhdGljIGJvb2wgZGFtb3Nfc2tpcF93YWxrZWRfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcbiBcdFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxuIHtcbiBcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuIFx0dW5zaWduZWQgbG9uZyBzel90b19za2lwO1xuIFxuLVx0LyogU2tpcCBwcmV2aW91c2x5IGNoYXJnZWQgcmVnaW9ucyAqL1xuLVx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSkge1xuLVx0XHRpZiAodCAhPSBxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20pXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXHRcdGlmIChyID09IGRhbW9uX2xhc3RfcmVnaW9uKHQpKSB7XG4tXHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbi1cdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbitcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LyogU2tpcCBwcmV2aW91c2x5IHdhbGtlZCByZWdpb25zICovXG4rXHRpZiAocXVvdGEtXHUwMDNld2Fsa190YXJnZXRfZnJvbSkge1xuK1x0XHRpZiAodCAhPSBxdW90YS1cdTAwM2V3YWxrX3RhcmdldF9mcm9tKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuLVx0XHR9XG4tXHRcdGlmIChxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0ci1cdTAwM2Vhci5lbmQgXHUwMDNjPSBxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tKVxuK1x0XHRpZiAocXVvdGEtXHUwMDNld2Fsa19hZGRyX2Zyb20gXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHRyLVx1MDAzZWFyLmVuZCBcdTAwM2M9IHF1b3RhLVx1MDAzZXdhbGtfYWRkcl9mcm9tKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFxuLVx0XHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSBcdTAwMjZcdTAwMjYgci1cdTAwM2Vhci5zdGFydCBcdTAwM2Ncbi1cdFx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20pIHtcbi1cdFx0XHRzel90b19za2lwID0gQUxJR05fRE9XTihxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIC1cbitcdFx0aWYgKHF1b3RhLVx1MDAzZXdhbGtfYWRkcl9mcm9tIFx1MDAyNlx1MDAyNiByLVx1MDAzZWFyLnN0YXJ0IFx1MDAzY1xuK1x0XHRcdFx0cXVvdGEtXHUwMDNld2Fsa19hZGRyX2Zyb20pIHtcbitcdFx0XHRzel90b19za2lwID0gQUxJR05fRE9XTihxdW90YS1cdTAwM2V3YWxrX2FkZHJfZnJvbSAtXG4gXHRcdFx0XHRcdHItXHUwMDNlYXIuc3RhcnQsIG1pbl9yZWdpb25fc3opO1xuIFx0XHRcdGlmICghc3pfdG9fc2tpcCkge1xuLVx0XHRcdFx0aWYgKGRhbW9uX3N6X3JlZ2lvbihyKSBcdTAwM2M9IG1pbl9yZWdpb25fc3opXG4rXHRcdFx0XHRpZiAoZGFtb25fc3pfcmVnaW9uKHIpIFx1MDAzYz0gbWluX3JlZ2lvbl9zeikge1xuK1x0XHRcdFx0XHRxdW90YS1cdTAwM2V3YWxrX2FkZHJfZnJvbSA9IHItXHUwMDNlYXIuZW5kO1xuIFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0XHRcdH1cbiBcdFx0XHRcdHN6X3RvX3NraXAgPSBtaW5fcmVnaW9uX3N6O1xuIFx0XHRcdH1cbiBcdFx0XHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3pfdG9fc2tpcCk7XG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdH1cbi1cdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbi1cdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4gXHR9XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTI2MjcsMTAgKzI2NjMsNiBAQCBzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdFx0cXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9ucyArPSB0aW1lc3BlYzY0X3RvX25zKFx1MDAyNmVuZCkgLVxuIFx0XHRcdHRpbWVzcGVjNjRfdG9fbnMoXHUwMDI2YmVnaW4pO1xuIFx0XHRkYW1vc19jaGFyZ2VfcXVvdGEocXVvdGEsIHN6LCBzel9hcHBsaWVkKTtcbi1cdFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpIHtcbi1cdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSB0O1xuLVx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSByLVx1MDAzZWFyLmVuZDtcbi1cdFx0fVxuIFx0fVxuIFx0aWYgKHMtXHUwMDNlYWN0aW9uICE9IERBTU9TX1NUQVQpXG4gXHRcdHItXHUwMDNlYWdlID0gMDtcbkBAIC0yNjM5LDggKzI2NzEsMTkgQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRkYW1vc191cGRhdGVfc3RhdChzLCBzeiwgc3pfYXBwbGllZCwgc3pfb3BzX2ZpbHRlcl9wYXNzZWQpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tXHRcdFx0XHQgICBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuK3N0YXRpYyB2b2lkIGRhbW9zX3dhbGtfbWF5YmVfcm90YXRlKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4rXHRcdFx0XHQgICAgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbitcdFx0XHRcdCAgICBzdHJ1Y3QgZGFtb3MgKnMpXG4re1xuK1x0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4rXG4rXHRpZiAoZGFtb3NfY29tcGxldGVseV93YWxrZWQocywgdCkpIHtcbitcdFx0cXVvdGEtXHUwMDNld2Fsa190YXJnZXRfZnJvbSA9IGRhbW9uX25leHRfdmFsaWRfdGFyZ2V0KHQsIGMpO1xuK1x0XHRxdW90YS1cdTAwM2V3YWxrX2FkZHJfZnJvbSA9IDA7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG4ge1xuIFx0c3RydWN0IGRhbW9zICpzO1xuQEAgLTI2NTgsMTggKzI3MDEsMzEgQEAgc3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuIFx0XHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0aWYgKGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24odCwgciwgcywgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbiBcdFx0aWYgKHMtXHUwMDNlbWF4X25yX3NuYXBzaG90cyBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdHMtXHUwMDNlbWF4X25yX3NuYXBzaG90cyBcdTAwM2M9IHMtXHUwMDNlc3RhdC5ucl9zbmFwc2hvdHMpXG4gXHRcdFx0Y29udGludWU7XG4gXG4rXHRcdC8qXG4rXHRcdCAqIFNraXAgcmVnaW9ucyBiZWZvcmUgdGhlIGN1cnNvci4gIElmIHRoZSBza2lwIG1ha2VzIHRoZSBjdXJzb3JcbitcdFx0ICogcmVhY2ggdGhlIGVuZCBvZiB0aGlzIHRhcmdldCwgcm90YXRlIHRvIHRoZSBuZXh0IHZhbGlkIHRhcmdldFxuK1x0XHQgKiBiZWZvcmUgY29udGludWluZyB3aXRoIHRoZSBuZXh0IHJlZ2lvbi9zY2hlbWUuXG4rXHRcdCAqL1xuK1x0XHRpZiAoZGFtb3Nfc2tpcF93YWxrZWRfcmVnaW9uKHQsIHIsIHMsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpIHtcbitcdFx0XHRkYW1vc193YWxrX21heWJlX3JvdGF0ZShjLCB0LCBzKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuIFx0XHRpZiAoZGFtb3NfdmFsaWRfdGFyZ2V0KGMsIHIsIHMpKVxuIFx0XHRcdGRhbW9zX2FwcGx5X3NjaGVtZShjLCB0LCByLCBzKTtcbiBcbiBcdFx0aWYgKGRhbW9uX2lzX2xhc3RfcmVnaW9uKHIsIHQpKVxuIFx0XHRcdHMtXHUwMDNlc3RhdC5ucl9zbmFwc2hvdHMrKztcbitcbitcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpIHtcbitcdFx0XHRxdW90YS1cdTAwM2V3YWxrX3RhcmdldF9mcm9tID0gdDtcbitcdFx0XHRxdW90YS1cdTAwM2V3YWxrX2FkZHJfZnJvbSA9IHItXHUwMDNlYXIuZW5kO1xuK1x0XHRcdGRhbW9zX3dhbGtfbWF5YmVfcm90YXRlKGMsIHQsIHMpO1xuK1x0XHR9XG4gXHR9XG4gfVxuIFxuQEAgLTMyNDEsOCArMzI5NywxMCBAQCBzdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcbiBcdG1heF9yZWdpb25fc3ogPSBkYW1vbl9yZWdpb25fc3pfbGltaXQoYyk7XG4gXHRtdXRleF9sb2NrKFx1MDAyNmMtXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xuIFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcbi1cdFx0aWYgKGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcdTAwMjZcdTAwMjYgYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKVxuK1x0XHRpZiAoYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIFx1MDAyNlx1MDAyNiBjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2UpIHtcbitcdFx0XHRkYW1vc19yZXBsYWNlX2ludmFsaWRfdGFyZ2V0KGMsIHQpO1xuIFx0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4gXHRcdGRhbW9zX2FwcGx5X3RhcmdldChjLCB0LCBtYXhfcmVnaW9uX3N6KTtcbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjA2OjM4Ljg4NjYwNDIyNVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDAxOTUwMDA4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBQYXRjaCBSZXZpZXc6IE5vIEtNU0FOIE5lZWRlZCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBEYXRhIEFjY2VzcyBNb25pdG9yIChEQU1PTikgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIERBTU9OLWJhc2VkIE9wZXJhdGlvbiBTY2hlbWVzIChEQU1PUykgcGFydC4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiB0aHJ1c3QgaXMgcmVmYWN0b3JpbmcgaG93IERBTU9TIGtlZXBzIHRyYWNrIG9mIGl0cyBxdW90YSB3YWxrIHBvc2l0aW9uIGR1cmluZyBpdHMgYW5hbHlzaXMuIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSByZW5hbWluZyBvZiBgY2hhcmdlX3RhcmdldF9mcm9tYCBhbmQgYGNoYXJnZV9hZGRyX2Zyb21gIHRvIGB3YWxrX3RhcmdldF9mcm9tYCBhbmQgYHdhbGtfYWRkcl9mcm9tYCwgYWxvbmcgd2l0aCBhIGZldyBzdXBwb3J0aW5nIGZ1bmN0aW9ucyBsaWtlIGBkYW1vc19jb21wbGV0ZWx5X3dhbGtlZGAsIGBkYW1vbl9uZXh0X3ZhbGlkX3RhcmdldGAsIGBkYW1vc19yZXBsYWNlX2ludmFsaWRfdGFyZ2V0YCwgYGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbmAsIGFuZCBgZGFtb3Nfd2Fsa19tYXliZV9yb3RhdGVgLlxuXG5MZXQncyBicmVhayB0aGlzIGRvd24gZnVydGhlci4gVGhlIGBzdHJ1Y3QgZGFtb3NfcXVvdGFgIG5vdyBoYXMgdGhlc2UgbmV3IGB3YWxrX2AgZmllbGRzLCBhbmQgdGhlIGBkYW1vc19xdW90YV9pbml0YCBmdW5jdGlvbiBjb3JyZWN0bHkgaW5pdGlhbGl6ZXMgdGhlbSB0byBgTlVMTGAgYW5kIGAwYCwgcmVzcGVjdGl2ZWx5LiBHb29kLiBJIGFsc28gc2VlIHRoYXQgYGRhbW9uX2NvbW1pdF90YXJnZXRzYCBpcyB1cGRhdGVkIHRvIHJlc2V0IHRoZW0gaWYgdGhlIHRhcmdldCBpcyBkZXN0cm95ZWQsIGFuZCBgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbmAgaGFzIGJlZW4gcmVuYW1lZCB0byBgZGFtb3Nfc2tpcF93YWxrZWRfcmVnaW9uYCBhbmQgdXBkYXRlZCBhcyB3ZWxsLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBvbGQgdmFsdWVzIGFyZW4ndCB1c2VkLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgZGVzaWduIGNoYW5nZXMgcHJldmVudCB0aGlzLiBgZGFtb3NfYXBwbHlfc2NoZW1lYCBubyBsb25nZXIgc2V0cyB0aGUgb2xkIGBjaGFyZ2VfYCBmaWVsZHMsIGFuZCBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2Agbm93IHNldHMgdGhlIG5ldyBgd2Fsa19gIGZpZWxkcyBhbmQgY2FsbHMgYGRhbW9zX3dhbGtfbWF5YmVfcm90YXRlYC4gQ3J1Y2lhbGx5LCBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBjYWxscyBgZGFtb3NfcmVwbGFjZV9pbnZhbGlkX3RhcmdldGAgaWYgYSB0YXJnZXQgaXMgaW52YWxpZCwgc28gdGhpcyBzaG91bGQgcHJldmVudCB0aGUgdXNlIG9mIGludmFsaWQgdGFyZ2V0cy5cblxuTXkgaW5pdGlhbCBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeS4gQXJlIHdlIGNyZWF0aW5nIG9wcG9ydHVuaXRpZXMgZm9yIEtBU0FOIHRvIG1pc3MgYSBidWcgaGVyZT8gTGV0J3MgYmUgZXhwbGljaXQsIHRoZXNlIG5ldyBmaWVsZHMgYXJlIGluaXRpYWxpemVkIGluIGBkYW1vc19xdW90YV9pbml0YCB0byBOVUxMIGFuZCAwLCB3aGljaCBhcmUgdmFsaWQgdmFsdWVzIGZvciBwb2ludGVycyBhbmQgdW5zaWduZWQgbG9uZ3MuIFdlJ3JlIG5vdCBhbGxvY2F0aW5nIGFueSBuZXcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYW5kIHNlbmRpbmcgdGhlbSB0byB1c2VyIHNwYWNlLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBhbnkgb2YgdGhlIHVzZXItZmFjaW5nIGludGVyZmFjZXMgbGlrZSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluaywgb3IgaW9jdGwuIFRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIGludGVybmFsIHRvIHRoZSBEQU1PTiBrZXJuZWwgc3RhdGUgbWFjaGluZSwgd2hpY2ggaXMgZ29vZC4gVGhlIHBvdGVudGlhbCBidWdzIGFyZSBsaW1pdGVkIHRvIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBpZiwgc2F5LCBgd2Fsa190YXJnZXRfZnJvbWAgcG9pbnRzIHRvIGEgZnJlZWQgdGFyZ2V0LiBCdXQgYGRhbW9uX2NvbW1pdF90YXJnZXRzYCBhcHBlYXJzIHRvIHByZXZlbnQgdGhpcyBhbmQgYGRhbW9zX3JlcGxhY2VfaW52YWxpZF90YXJnZXRgIGFwcGVhcnMgdG8gaGFuZGxlIGludmFsaWQgdGFyZ2V0cy4gS0FTQU4gc2hvdWxkIGJlIGFibGUgdG8gY2F0Y2ggYWxsIG9mIHRoZXNlIHR5cGVzIG9mIGlzc3Vlcy5cblxuTm93LCBsZXQncyBjb25maXJtIHdoZXRoZXIgYHN0cnVjdCBkYW1vc19xdW90YWAgb3IgYHN0cnVjdCBkYW1vc2AgaXRzZWxmIGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gREFNT04gZXhwb3NlcyBzdGF0cyB2aWEgc3lzZnMsIGJ1dCBpdCBkb2Vzbid0IGFwcGVhciB0byBkdW1wIHRoZSByYXcgc3RydWN0IHRvIHVzZXJzcGFjZS4gRXZlbiBpZiBpdCBkaWQsIHRoZSBmaWVsZHMgYXJlIGluaXRpYWxpemVkLCBzbyB0aGF0IHdvdWxkbid0IGJlIGEgcHJvYmxlbS5cblxuVGhlcmVmb3JlLCBhZnRlciB0aGlzIHJldmlldywgaXQncyBteSBqdWRnbWVudCB0aGF0IHRoaXMgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgd2FycmFudCBLTVNBTi4gS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgcG90ZW50aWFsIHByb2JsZW1zLiBMZXQncyBkb3VibGUgY2hlY2sgYGRhbW9zX3F1b3RhX2luaXRgIGFzIHdlbGw6XG5cbmBgYGNcbnN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRhbW9zX3F1b3RhX2luaXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcbntcblx0cXVvdGEtXHUwMDNlbXMgPSAwO1xuXHRxdW90YS1cdTAwM2VzeiA9IDA7XG5cdHF1b3RhLVx1MDAzZXJlc2V0X2ludGVydmFsID0gMDtcblx0cXVvdGEtXHUwMDNld2VpZ2h0X3N6ID0gMDtcblx0cXVvdGEtXHUwMDNld2VpZ2h0X25yX2FjY2Vzc2VzID0gMDtcblx0cXVvdGEtXHUwMDNld2VpZ2h0X2FnZSA9IDA7XG5cdHF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogPSAwO1xuXHRxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX25zID0gMDtcblx0cXVvdGEtXHUwMDNlY2hhcmdlZF9zeiA9IDA7XG5cdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSA9IDA7XG5cdHF1b3RhLVx1MDAzZXdhbGtfdGFyZ2V0X2Zyb20gPSBOVUxMO1xuXHRxdW90YS1cdTAwM2V3YWxrX2FkZHJfZnJvbSA9IDA7XG5cdHF1b3RhLVx1MDAzZWVzel9icCA9IDA7XG5cdHJldHVybiBxdW90YTtcbn1cbmBgYFxuXG5ZZXAsIGV2ZXJ5dGhpbmcgaXMgZXhwbGljaXRseSB6ZXJvZWQgb3V0IG9yIE5VTExlZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGhlcmUuIFNvLCBJIHdpbGwgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE3OCwiT3V0cHV0VG9rZW5zIjoxODMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDowNjo1Mi45MDYxMDY2MjNaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCB0cmFja2luZyBvZiB0aGUgREFNT1MgKERBTU9OLWJhc2VkIE9wZXJhdGlvbiBTY2hlbWVzKSBxdW90YSB3YWxrIHBvc2l0aW9uLCByZXBsYWNpbmcgYGNoYXJnZV90YXJnZXRfZnJvbWAgYW5kIGBjaGFyZ2VfYWRkcl9mcm9tYCB3aXRoIGB3YWxrX3RhcmdldF9mcm9tYCBhbmQgYHdhbGtfYWRkcl9mcm9tYC4gVGhlc2UgbmV3IGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBOVUxMIGFuZCAwIGluIGBkYW1vc19xdW90YV9pbml0KClgLiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBpbnRlcm5hbCBrZXJuZWwgY29udHJvbCBmbG93IGFuZCByZWdpb24gaXRlcmF0aW9uIGxvZ2ljLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIHRyYWNraW5nIG9mIHRoZSBEQU1PUyAoREFNT04tYmFzZWQgT3BlcmF0aW9uIFNjaGVtZXMpIHF1b3RhIHdhbGsgcG9zaXRpb24sIHJlcGxhY2luZyBgY2hhcmdlX3RhcmdldF9mcm9tYCBhbmQgYGNoYXJnZV9hZGRyX2Zyb21gIHdpdGggYHdhbGtfdGFyZ2V0X2Zyb21gIGFuZCBgd2Fsa19hZGRyX2Zyb21gLiBUaGVzZSBuZXcgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIE5VTEwgYW5kIDAgaW4gYGRhbW9zX3F1b3RhX2luaXQoKWAuIFRoZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGludGVybmFsIGtlcm5lbCBjb250cm9sIGZsb3cgYW5kIHJlZ2lvbiBpdGVyYXRpb24gbG9naWMuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowzmgvk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 13:24:18 +0000 UTC FinishedAt: 2026-08-25 14:06:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS", "DAMON_RECLAIM", "DAMON_LRU_SORT", "DAMON_STAT", "DAMON_DEBUG_SANITY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS", "DAMON_RECLAIM", "DAMON_LRU_SORT", "DAMON_STAT", "DAMON_DEBUG_SANITY" ], "series_id": "53dbd309-f70d-4e7f-bd0b-0a12e3f2a656" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_commit_ctx", "damon_start", "damon_new_scheme", "damon_set_regions" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9SRUNMQUlNJiMzNDssCiAgICAmIzM0O0RBTU9OX0xSVV9TT1JUJiMzNDssCiAgICAmIzM0O0RBTU9OX1NUQVQmIzM0OywKICAgICYjMzQ7REFNT05fREVCVUdfU0FOSVRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fY29tbWl0X2N0eCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zdGFydCYjMzQ7LAogICAgJiMzNDtkYW1vbl9uZXdfc2NoZW1lJiMzNDssCiAgICAmIzM0O2RhbW9uX3NldF9yZWdpb25zJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIHRyYWNraW5nIG9mIHRoZSBEQU1PUyAoREFNT04tYmFzZWQgT3BlcmF0aW9uIFNjaGVtZXMpIHF1b3RhIHdhbGsgcG9zaXRpb24sIHJlcGxhY2luZyBgY2hhcmdlX3RhcmdldF9mcm9tYCBhbmQgYGNoYXJnZV9hZGRyX2Zyb21gIHdpdGggYHdhbGtfdGFyZ2V0X2Zyb21gIGFuZCBgd2Fsa19hZGRyX2Zyb21gLiBUaGVzZSBuZXcgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIE5VTEwgYW5kIDAgaW4gYGRhbW9zX3F1b3RhX2luaXQoKWAuIFRoZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGludGVybmFsIGtlcm5lbCBjb250cm9sIGZsb3cgYW5kIHJlZ2lvbiBpdGVyYXRpb24gbG9naWMuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgb2YgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIHRvIHRyYWNrIHRoZSB3YWxraW5nIHBvc2l0aW9uIG9mIERBTU9TIChEQU1PTi1iYXNlZCBPcGVyYXRpb24gU2NoZW1lcykgcXVvdGFzLiBJdCByZW5hbWVzIHRoZSB0cmFja2luZyB2YXJpYWJsZXMgYW5kIGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIGhhbmRsZSBza2lwcGluZyB3YWxrZWQgcmVnaW9ucyBhbmQgcm90YXRpbmcgdGFyZ2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHN5c2ZzIG9yIGtlcm5lbCBBUElzLCBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ3YmY1Y2NmM2FmOWQyM2RhNTA4YjUzMzM5MGE2NzM0NGVhOTcyNjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxMzozOTowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbmluZGV4IDBjOGI3ZGRlZjlhYmIuLjVlMDc1NWViYWQ3NTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuQEAgLTI5Niw4ICYjNDM7Mjk2LDEwIEBAIHN0cnVjdCBkYW1vc19xdW90YSB7XG4gXHQvKiBGb3IgY2hhcmdpbmcgdGhlIHF1b3RhICovXG4gXHR1bnNpZ25lZCBsb25nIGNoYXJnZWRfc3o7XG4gXHR1bnNpZ25lZCBsb25nIGNoYXJnZWRfZnJvbTtcbi1cdHN0cnVjdCBkYW1vbl90YXJnZXQgKmNoYXJnZV90YXJnZXRfZnJvbTtcbi1cdHVuc2lnbmVkIGxvbmcgY2hhcmdlX2FkZHJfZnJvbTtcbiYjNDM7XG4mIzQzO1x0LyogRm9yIHRyYWNraW5nIHRoZSBEQU1PUyB3YWxrIHBvc2l0aW9uIChyb3RhdGluZyBjdXJzb3IpICovXG4mIzQzO1x0c3RydWN0IGRhbW9uX3RhcmdldCAqd2Fsa190YXJnZXRfZnJvbTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHdhbGtfYWRkcl9mcm9tO1xuIFxuIFx0LyogRm9yIHByaW9yaXRpemF0aW9uICovXG4gXHR1bnNpZ25lZCBpbnQgbWluX3Njb3JlO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggNjQ0ZGFmNWExNjU2MC4uYmJkYjUzMDUxM2ExOCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jXG5AQCAtNDA0LDYgJiM0Mzs0MDQsNTIgQEAgc3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdHJldHVybiBsaXN0X2lzX2xhc3QoXHUwMDI2ci1cdTAwM2VsaXN0LCBcdTAwMjZ0LVx1MDAzZXJlZ2lvbnNfbGlzdCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBkYW1vc19jb21wbGV0ZWx5X3dhbGtlZChzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqICYjMzk7XHUwMDNlPSYjMzk7IGluc3RlYWQgb2YgJiMzOTs9PSYjMzk7LCBiZWNhdXNlIHRoZSByZWdpb24gc2V0IG9mIEB0IGNvdWxkIGhhdmUgYmVlblxuJiM0MztcdCAqIHNocnVua2VuIGJ5IGRhbW9uX3NldF9yZWdpb25zKCkgYWZ0ZXIgdGhlIGN1cnNvciB3YXMgc2F2ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIHMtXHUwMDNlcXVvdGEud2Fsa190YXJnZXRfZnJvbSA9PSB0IFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0cy1cdTAwM2VxdW90YS53YWxrX2FkZHJfZnJvbSBcdTAwM2U9IGRhbW9uX2xhc3RfcmVnaW9uKHQpLVx1MDAzZWFyLmVuZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBkYW1vbl90YXJnZXQgKmRhbW9uX25leHRfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4mIzQzO1x0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9IFx1MDAyNmMtXHUwMDNlYWRhcHRpdmVfdGFyZ2V0cztcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpzdGFydCA9IHQ7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3RhcmdldCAqbmV4dCA9IHQ7XG4mIzQzO1xuJiM0MztcdHdoaWxlICh0cnVlKSB7XG4mIzQzO1x0XHRpZiAobGlzdF9pc19sYXN0KFx1MDAyNm5leHQtXHUwMDNlbGlzdCwgaGVhZCkpXG4mIzQzO1x0XHRcdG5leHQgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBkYW1vbl90YXJnZXQsIGxpc3QpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRuZXh0ID0gbGlzdF9uZXh0X2VudHJ5KG5leHQsIGxpc3QpO1xuJiM0MztcbiYjNDM7XHRcdGlmICghYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIHx8IGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZChuZXh0KSlcbiYjNDM7XHRcdFx0cmV0dXJuIG5leHQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5leHQgPT0gc3RhcnQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZGFtb3NfcmVwbGFjZV9pbnZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuJiM0MztcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vcyAqcztcbiYjNDM7XG4mIzQzO1x0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbiYjNDM7XHRcdGlmIChzLVx1MDAzZXF1b3RhLndhbGtfdGFyZ2V0X2Zyb20gIT0gdClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0cy1cdTAwM2VxdW90YS53YWxrX3RhcmdldF9mcm9tID0gZGFtb25fbmV4dF92YWxpZF90YXJnZXQodCwgYyk7XG4mIzQzO1x0XHRzLVx1MDAzZXF1b3RhLndhbGtfYWRkcl9mcm9tID0gMDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogZGFtb25fcHJvYmVfaGl0c193c3VtKCkgLSBSZXR1cm5zIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIG9mIGEgcmVnaW9uLlxuICAqIEByOlx0XHRyZWdpb24gdG8gZ2V0IHRoZSB3ZWlnaHRlZCBzdW0gb2YuXG5AQCAtNjczLDggJiM0Mzs3MTksOCBAQCBzdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhICpkYW1vc19xdW90YV9pbml0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXG4gXHRxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX25zID0gMDtcbiBcdHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogPSAwO1xuIFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tID0gMDtcbi1cdHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG4tXHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbiYjNDM7XHRxdW90YS1cdTAwM2V3YWxrX3RhcmdldF9mcm9tID0gTlVMTDtcbiYjNDM7XHRxdW90YS1cdTAwM2V3YWxrX2FkZHJfZnJvbSA9IDA7XG4gXHRxdW90YS1cdTAwM2Vlc3pfYnAgPSAwO1xuIFx0cmV0dXJuIHF1b3RhO1xuIH1cbkBAIC0xNjI4LDkgJiM0MzsxNjc0LDkgQEAgc3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0cyhcbiBcbiBcdFx0XHRkYW1vbl9kZXN0cm95X3RhcmdldChkc3RfdGFyZ2V0LCBkc3QpO1xuIFx0XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBkc3QpIHtcbi1cdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9PSBkc3RfdGFyZ2V0KSB7XG4tXHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbi1cdFx0XHRcdFx0cy1cdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tID0gMDtcbiYjNDM7XHRcdFx0XHRpZiAocy1cdTAwM2VxdW90YS53YWxrX3RhcmdldF9mcm9tID09IGRzdF90YXJnZXQpIHtcbiYjNDM7XHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEud2Fsa190YXJnZXRfZnJvbSA9IE5VTEw7XG4mIzQzO1x0XHRcdFx0XHRzLVx1MDAzZXF1b3RhLndhbGtfYWRkcl9mcm9tID0gMDtcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cbkBAIC0yMzEyLDY0ICYjNDM7MjM1OCw1NCBAQCBzdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiB9XG4gXG4gLypcbi0gKiBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKCkgLSBDaGVjayBpZiB0aGUgZ2l2ZW4gcmVnaW9uIG9yIHN0YXJ0aW5nIHBhcnQgb2Zcbi0gKiBpdCBpcyBhbHJlYWR5IGNoYXJnZWQgZm9yIHRoZSBEQU1PUyBxdW90YS5cbiYjNDM7ICogZGFtb3Nfc2tpcF93YWxrZWRfcmVnaW9uKCkgLSBDaGVjayBpZiB0aGUgZ2l2ZW4gcmVnaW9uIG9yIHN0YXJ0aW5nIHBhcnQgb2ZcbiYjNDM7ICogaXQgaXMgYWxyZWFkeSB3YWxrZWQgZm9yIHRoZSBEQU1PUyBxdW90YS5cbiAgKiBAdDpcdFRoZSB0YXJnZXQgb2YgdGhlIHJlZ2lvbi5cbi0gKiBAcnA6XHRUaGUgcG9pbnRlciB0byB0aGUgcmVnaW9uLlxuJiM0MzsgKiBAcjpcdFRoZSBwb2ludGVyIHRvIHRoZSByZWdpb24uXG4gICogQHM6XHRUaGUgc2NoZW1lIHRvIGJlIGFwcGxpZWQuXG4gICogQG1pbl9yZWdpb25fc3o6XHRtaW5pbXVtIHJlZ2lvbiBzaXplLlxuICAqXG4tICogSWYgYSBxdW90YSBvZiBhIHNjaGVtZSBoYXMgZXhjZWVkZWQgaW4gYSBxdW90YSBjaGFyZ2Ugd2luZG93LCB0aGUgc2NoZW1lJiMzOTtzXG4tICogYWN0aW9uIHdvdWxkIGFwcGxpZWQgdG8gb25seSBhIHBhcnQgb2YgdGhlIHRhcmdldCBhY2Nlc3MgcGF0dGVybiBmdWxmaWxsaW5nXG4tICogcmVnaW9ucy4gIFRvIGF2b2lkIGFwcGx5aW5nIHRoZSBzY2hlbWUgYWN0aW9uIHRvIG9ubHkgYWxyZWFkeSBhcHBsaWVkXG4tICogcmVnaW9ucywgREFNT04gc2tpcHMgYXBwbHlpbmcgdGhlIHNjaGVtZSBhY3Rpb24gdG8gdGhlIHJlZ2lvbnMgdGhhdCBjaGFyZ2VkXG4tICogaW4gdGhlIHByZXZpb3VzIGNoYXJnZSB3aW5kb3cuXG4tICpcbi0gKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBhIGdpdmVuIHJlZ2lvbiBzaG91bGQgYmUgc2tpcHBlZCBvciBub3QgZm9yIHRoZVxuLSAqIHJlYXNvbi4gIElmIG9ubHkgdGhlIHN0YXJ0aW5nIHBhcnQgb2YgdGhlIHJlZ2lvbiBoYXMgcHJldmlvdXNseSBjaGFyZ2VkLFxuLSAqIHRoaXMgZnVuY3Rpb24gc3BsaXRzIHRoZSByZWdpb24gaW50byB0d28gc28gdGhhdCB0aGUgc2Vjb25kIG9uZSBjb3ZlcnMgdGhlXG4tICogYXJlYSB0aGF0IG5vdCBjaGFyZ2VkIGluIHRoZSBwcmV2aW91cyBjaGFyZ2Ugd2lkbm93LCBhbmQgcmV0dXJuIHRydWUuICBUaGVcbi0gKiBjYWxsZXIgY2FuIHNlZSB0aGUgc2Vjb25kIG9uZSBvbiB0aGUgbmV4dCBpdGVyYXRpb24gb2YgdGhlIHJlZ2lvbiB3YWxrLlxuLSAqIE5vdGUgdGhhdCB0aGlzIG1lYW5zIHRoZSBjYWxsZXIgc2hvdWxkIHVzZSBkYW1vbl9mb3JfZWFjaF9yZWdpb24oKSBpbnN0ZWFkXG4tICogb2YgZGFtb25fZm9yX2VhY2hfcmVnaW9uX3NhZmUoKS4gIElmIGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9zYWZlKCkgaXMgdXNlZCxcbi0gKiB0aGUgc2Vjb25kIHJlZ2lvbiB3aWxsIGp1c3QgYmUgaWdub3JlZC5cbiYjNDM7ICogV2hlbiBhIHF1b3RhIGlzIGNvbmZpZ3VyZWQsIERBTU9OIHJlY29yZHMgaG93IGZhciBpdCBoYXMgd2Fsa2VkIHNvIHRoYXRcbiYjNDM7ICogc3Vic2VxdWVudCBxdW90YSB3aW5kb3dzIGNvbnRpbnVlIGZyb20gdGhhdCBwb2ludCBpbnN0ZWFkIG9mIHJlLWFwcGx5aW5nIHRoZVxuJiM0MzsgKiBzYW1lIHJlZ2lvbnMuICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBmb3IgcmVnaW9ucyB0aGF0IGFyZSBiZWZvcmUgdGhlXG4mIzQzOyAqIHJlY29yZGVkIGN1cnNvciBhbmQgdGhlcmVmb3JlIHNob3VsZCBiZSBza2lwcGVkLiAgSWYgb25seSB0aGUgc3RhcnRpbmcgcGFydFxuJiM0MzsgKiBoYXMgYmVlbiB3YWxrZWQsIHRoZSByZWdpb24gaXMgc3BsaXQgc28gdGhhdCB0aGUgcmVtYWluaW5nIHBhcnQgY2FuIGJlXG4mIzQzOyAqIHZpc2l0ZWQuXG4gICpcbiAgKiBSZXR1cm46IHRydWUgaWYgdGhlIHJlZ2lvbiBzaG91bGQgYmUgc2tpcHBlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAqL1xuLXN0YXRpYyBib29sIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiYjNDM7c3RhdGljIGJvb2wgZGFtb3Nfc2tpcF93YWxrZWRfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcbiBcdFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxuIHtcbiBcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuIFx0dW5zaWduZWQgbG9uZyBzel90b19za2lwO1xuIFxuLVx0LyogU2tpcCBwcmV2aW91c2x5IGNoYXJnZWQgcmVnaW9ucyAqL1xuLVx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSkge1xuLVx0XHRpZiAodCAhPSBxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20pXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXHRcdGlmIChyID09IGRhbW9uX2xhc3RfcmVnaW9uKHQpKSB7XG4tXHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbi1cdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbiYjNDM7XHRpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIFNraXAgcHJldmlvdXNseSB3YWxrZWQgcmVnaW9ucyAqL1xuJiM0MztcdGlmIChxdW90YS1cdTAwM2V3YWxrX3RhcmdldF9mcm9tKSB7XG4mIzQzO1x0XHRpZiAodCAhPSBxdW90YS1cdTAwM2V3YWxrX3RhcmdldF9mcm9tKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuLVx0XHR9XG4tXHRcdGlmIChxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0ci1cdTAwM2Vhci5lbmQgXHUwMDNjPSBxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tKVxuJiM0MztcdFx0aWYgKHF1b3RhLVx1MDAzZXdhbGtfYWRkcl9mcm9tIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdHItXHUwMDNlYXIuZW5kIFx1MDAzYz0gcXVvdGEtXHUwMDNld2Fsa19hZGRyX2Zyb20pXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRcdGlmIChxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIFx1MDAyNlx1MDAyNiByLVx1MDAzZWFyLnN0YXJ0IFx1MDAzY1xuLVx0XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSkge1xuLVx0XHRcdHN6X3RvX3NraXAgPSBBTElHTl9ET1dOKHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gLVxuJiM0MztcdFx0aWYgKHF1b3RhLVx1MDAzZXdhbGtfYWRkcl9mcm9tIFx1MDAyNlx1MDAyNiByLVx1MDAzZWFyLnN0YXJ0IFx1MDAzY1xuJiM0MztcdFx0XHRcdHF1b3RhLVx1MDAzZXdhbGtfYWRkcl9mcm9tKSB7XG4mIzQzO1x0XHRcdHN6X3RvX3NraXAgPSBBTElHTl9ET1dOKHF1b3RhLVx1MDAzZXdhbGtfYWRkcl9mcm9tIC1cbiBcdFx0XHRcdFx0ci1cdTAwM2Vhci5zdGFydCwgbWluX3JlZ2lvbl9zeik7XG4gXHRcdFx0aWYgKCFzel90b19za2lwKSB7XG4tXHRcdFx0XHRpZiAoZGFtb25fc3pfcmVnaW9uKHIpIFx1MDAzYz0gbWluX3JlZ2lvbl9zeilcbiYjNDM7XHRcdFx0XHRpZiAoZGFtb25fc3pfcmVnaW9uKHIpIFx1MDAzYz0gbWluX3JlZ2lvbl9zeikge1xuJiM0MztcdFx0XHRcdFx0cXVvdGEtXHUwMDNld2Fsa19hZGRyX2Zyb20gPSByLVx1MDAzZWFyLmVuZDtcbiBcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHRcdFx0fVxuIFx0XHRcdFx0c3pfdG9fc2tpcCA9IG1pbl9yZWdpb25fc3o7XG4gXHRcdFx0fVxuIFx0XHRcdGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBzel90b19za2lwKTtcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0fVxuLVx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xuLVx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbiBcdH1cbiBcdHJldHVybiBmYWxzZTtcbiB9XG5AQCAtMjYyNywxMCAmIzQzOzI2NjMsNiBAQCBzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdFx0cXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9ucyAmIzQzOz0gdGltZXNwZWM2NF90b19ucyhcdTAwMjZlbmQpIC1cbiBcdFx0XHR0aW1lc3BlYzY0X3RvX25zKFx1MDAyNmJlZ2luKTtcbiBcdFx0ZGFtb3NfY2hhcmdlX3F1b3RhKHF1b3RhLCBzeiwgc3pfYXBwbGllZCk7XG4tXHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKSB7XG4tXHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gdDtcbi1cdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gci1cdTAwM2Vhci5lbmQ7XG4tXHRcdH1cbiBcdH1cbiBcdGlmIChzLVx1MDAzZWFjdGlvbiAhPSBEQU1PU19TVEFUKVxuIFx0XHRyLVx1MDAzZWFnZSA9IDA7XG5AQCAtMjYzOSw4ICYjNDM7MjY3MSwxOSBAQCBzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdGRhbW9zX3VwZGF0ZV9zdGF0KHMsIHN6LCBzel9hcHBsaWVkLCBzel9vcHNfZmlsdGVyX3Bhc3NlZCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi1cdFx0XHRcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9zX3dhbGtfbWF5YmVfcm90YXRlKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBkYW1vcyAqcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuJiM0MztcbiYjNDM7XHRpZiAoZGFtb3NfY29tcGxldGVseV93YWxrZWQocywgdCkpIHtcbiYjNDM7XHRcdHF1b3RhLVx1MDAzZXdhbGtfdGFyZ2V0X2Zyb20gPSBkYW1vbl9uZXh0X3ZhbGlkX3RhcmdldCh0LCBjKTtcbiYjNDM7XHRcdHF1b3RhLVx1MDAzZXdhbGtfYWRkcl9mcm9tID0gMDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG4ge1xuIFx0c3RydWN0IGRhbW9zICpzO1xuQEAgLTI2NTgsMTggJiM0MzsyNzAxLDMxIEBAIHN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbiBcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmIChkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHQsIHIsIHMsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG4tXHRcdFx0Y29udGludWU7XG4tXG4gXHRcdGlmIChzLVx1MDAzZW1heF9ucl9zbmFwc2hvdHMgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHRzLVx1MDAzZW1heF9ucl9zbmFwc2hvdHMgXHUwMDNjPSBzLVx1MDAzZXN0YXQubnJfc25hcHNob3RzKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFNraXAgcmVnaW9ucyBiZWZvcmUgdGhlIGN1cnNvci4gIElmIHRoZSBza2lwIG1ha2VzIHRoZSBjdXJzb3JcbiYjNDM7XHRcdCAqIHJlYWNoIHRoZSBlbmQgb2YgdGhpcyB0YXJnZXQsIHJvdGF0ZSB0byB0aGUgbmV4dCB2YWxpZCB0YXJnZXRcbiYjNDM7XHRcdCAqIGJlZm9yZSBjb250aW51aW5nIHdpdGggdGhlIG5leHQgcmVnaW9uL3NjaGVtZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbih0LCByLCBzLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKSB7XG4mIzQzO1x0XHRcdGRhbW9zX3dhbGtfbWF5YmVfcm90YXRlKGMsIHQsIHMpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGlmIChkYW1vc192YWxpZF90YXJnZXQoYywgciwgcykpXG4gXHRcdFx0ZGFtb3NfYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMpO1xuIFxuIFx0XHRpZiAoZGFtb25faXNfbGFzdF9yZWdpb24ociwgdCkpXG4gXHRcdFx0cy1cdTAwM2VzdGF0Lm5yX3NuYXBzaG90cyYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpIHtcbiYjNDM7XHRcdFx0cXVvdGEtXHUwMDNld2Fsa190YXJnZXRfZnJvbSA9IHQ7XG4mIzQzO1x0XHRcdHF1b3RhLVx1MDAzZXdhbGtfYWRkcl9mcm9tID0gci1cdTAwM2Vhci5lbmQ7XG4mIzQzO1x0XHRcdGRhbW9zX3dhbGtfbWF5YmVfcm90YXRlKGMsIHQsIHMpO1xuJiM0MztcdFx0fVxuIFx0fVxuIH1cbiBcbkBAIC0zMjQxLDggJiM0MzszMjk3LDEwIEBAIHN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuIFx0bWF4X3JlZ2lvbl9zeiA9IGRhbW9uX3JlZ2lvbl9zel9saW1pdChjKTtcbiBcdG11dGV4X2xvY2soXHUwMDI2Yy1cdTAwM2V3YWxrX2NvbnRyb2xfbG9jayk7XG4gXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xuLVx0XHRpZiAoYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIFx1MDAyNlx1MDAyNiBjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2UpXG4mIzQzO1x0XHRpZiAoYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIFx1MDAyNlx1MDAyNiBjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2UpIHtcbiYjNDM7XHRcdFx0ZGFtb3NfcmVwbGFjZV9pbnZhbGlkX3RhcmdldChjLCB0KTtcbiBcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiBcdFx0ZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opO1xuIFx0fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjI3bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fUkVDTEFJTSYjMzQ7LAogICAgJiMzNDtEQU1PTl9MUlVfU09SVCYjMzQ7LAogICAgJiMzNDtEQU1PTl9TVEFUJiMzNDssCiAgICAmIzM0O0RBTU9OX0RFQlVHX1NBTklUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX2NvbW1pdF9jdHgmIzM0OywKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAgICYjMzQ7ZGFtb25fbmV3X3NjaGVtZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9zZXRfcmVnaW9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBsb2dpYyBvZiBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcikgdG8gdHJhY2sgdGhlIHdhbGtpbmcgcG9zaXRpb24gb2YgREFNT1MgKERBTU9OLWJhc2VkIE9wZXJhdGlvbiBTY2hlbWVzKSBxdW90YXMuIEl0IHJlbmFtZXMgdGhlIHRyYWNraW5nIHZhcmlhYmxlcyBhbmQgaW50cm9kdWNlcyBuZXcgbG9naWMgdG8gaGFuZGxlIHNraXBwaW5nIHdhbGtlZCByZWdpb25zIGFuZCByb3RhdGluZyB0YXJnZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgc3lzZnMgb3Iga2VybmVsIEFQSXMsIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDdiZjVjY2YzYWY5ZDIzZGE1MDhiNTMzMzkwYTY3MzQ0ZWE5NzI2NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDEzOjM5OjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCmluZGV4IDBjOGI3ZGRlZjlhYmIuLjVlMDc1NWViYWQ3NTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKQEAgLTI5Niw4ICYjNDM7Mjk2LDEwIEBAIHN0cnVjdCBkYW1vc19xdW90YSB7CiAJLyogRm9yIGNoYXJnaW5nIHRoZSBxdW90YSAqLwogCXVuc2lnbmVkIGxvbmcgY2hhcmdlZF9zejsKIAl1bnNpZ25lZCBsb25nIGNoYXJnZWRfZnJvbTsKLQlzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpjaGFyZ2VfdGFyZ2V0X2Zyb207Ci0JdW5zaWduZWQgbG9uZyBjaGFyZ2VfYWRkcl9mcm9tOwomIzQzOwomIzQzOwkvKiBGb3IgdHJhY2tpbmcgdGhlIERBTU9TIHdhbGsgcG9zaXRpb24gKHJvdGF0aW5nIGN1cnNvcikgKi8KJiM0MzsJc3RydWN0IGRhbW9uX3RhcmdldCAqd2Fsa190YXJnZXRfZnJvbTsKJiM0MzsJdW5zaWduZWQgbG9uZyB3YWxrX2FkZHJfZnJvbTsKIAogCS8qIEZvciBwcmlvcml0aXphdGlvbiAqLwogCXVuc2lnbmVkIGludCBtaW5fc2NvcmU7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggNjQ0ZGFmNWExNjU2MC4uYmJkYjUzMDUxM2ExOCAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtNDA0LDYgJiM0Mzs0MDQsNTIgQEAgc3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKIAlyZXR1cm4gbGlzdF9pc19sYXN0KCZhbXA7ci0mZ3Q7bGlzdCwgJmFtcDt0LSZndDtyZWdpb25zX2xpc3QpOwogfQogCiYjNDM7c3RhdGljIGJvb2wgZGFtb3NfY29tcGxldGVseV93YWxrZWQoc3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogJiMzOTsmZ3Q7PSYjMzk7IGluc3RlYWQgb2YgJiMzOTs9PSYjMzk7LCBiZWNhdXNlIHRoZSByZWdpb24gc2V0IG9mIEB0IGNvdWxkIGhhdmUgYmVlbgomIzQzOwkgKiBzaHJ1bmtlbiBieSBkYW1vbl9zZXRfcmVnaW9ucygpIGFmdGVyIHRoZSBjdXJzb3Igd2FzIHNhdmVkLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIHMtJmd0O3F1b3RhLndhbGtfdGFyZ2V0X2Zyb20gPT0gdCAmYW1wOyZhbXA7CiYjNDM7CQlzLSZndDtxdW90YS53YWxrX2FkZHJfZnJvbSAmZ3Q7PSBkYW1vbl9sYXN0X3JlZ2lvbih0KS0mZ3Q7YXIuZW5kOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbmV4dF92YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKJiM0MzsJCXN0cnVjdCBkYW1vbl9jdHggKmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJmFtcDtjLSZndDthZGFwdGl2ZV90YXJnZXRzOwomIzQzOwlzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpzdGFydCA9IHQ7CiYjNDM7CXN0cnVjdCBkYW1vbl90YXJnZXQgKm5leHQgPSB0OwomIzQzOwomIzQzOwl3aGlsZSAodHJ1ZSkgewomIzQzOwkJaWYgKGxpc3RfaXNfbGFzdCgmYW1wO25leHQtJmd0O2xpc3QsIGhlYWQpKQomIzQzOwkJCW5leHQgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBkYW1vbl90YXJnZXQsIGxpc3QpOwomIzQzOwkJZWxzZQomIzQzOwkJCW5leHQgPSBsaXN0X25leHRfZW50cnkobmV4dCwgbGlzdCk7CiYjNDM7CiYjNDM7CQlpZiAoIWMtJmd0O29wcy50YXJnZXRfdmFsaWQgfHwgYy0mZ3Q7b3BzLnRhcmdldF92YWxpZChuZXh0KSkKJiM0MzsJCQlyZXR1cm4gbmV4dDsKJiM0MzsKJiM0MzsJCWlmIChuZXh0ID09IHN0YXJ0KQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkYW1vc19yZXBsYWNlX2ludmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsCiYjNDM7CQlzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9zICpzOwomIzQzOwomIzQzOwlkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykgewomIzQzOwkJaWYgKHMtJmd0O3F1b3RhLndhbGtfdGFyZ2V0X2Zyb20gIT0gdCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXMtJmd0O3F1b3RhLndhbGtfdGFyZ2V0X2Zyb20gPSBkYW1vbl9uZXh0X3ZhbGlkX3RhcmdldCh0LCBjKTsKJiM0MzsJCXMtJmd0O3F1b3RhLndhbGtfYWRkcl9mcm9tID0gMDsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qKgogICogZGFtb25fcHJvYmVfaGl0c193c3VtKCkgLSBSZXR1cm5zIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIG9mIGEgcmVnaW9uLgogICogQHI6CQlyZWdpb24gdG8gZ2V0IHRoZSB3ZWlnaHRlZCBzdW0gb2YuCkBAIC02NzMsOCAmIzQzOzcxOSw4IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRhbW9zX3F1b3RhX2luaXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSkKIAlxdW90YS0mZ3Q7dG90YWxfY2hhcmdlZF9ucyA9IDA7CiAJcXVvdGEtJmd0O2NoYXJnZWRfc3ogPSAwOwogCXF1b3RhLSZndDtjaGFyZ2VkX2Zyb20gPSAwOwotCXF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMOwotCXF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tID0gMDsKJiM0MzsJcXVvdGEtJmd0O3dhbGtfdGFyZ2V0X2Zyb20gPSBOVUxMOwomIzQzOwlxdW90YS0mZ3Q7d2Fsa19hZGRyX2Zyb20gPSAwOwogCXF1b3RhLSZndDtlc3pfYnAgPSAwOwogCXJldHVybiBxdW90YTsKIH0KQEAgLTE2MjgsOSAmIzQzOzE2NzQsOSBAQCBzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRzKAogCiAJCQlkYW1vbl9kZXN0cm95X3RhcmdldChkc3RfdGFyZ2V0LCBkc3QpOwogCQkJZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGRzdCkgewotCQkJCWlmIChzLSZndDtxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPT0gZHN0X3RhcmdldCkgewotCQkJCQlzLSZndDtxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMOwotCQkJCQlzLSZndDtxdW90YS5jaGFyZ2VfYWRkcl9mcm9tID0gMDsKJiM0MzsJCQkJaWYgKHMtJmd0O3F1b3RhLndhbGtfdGFyZ2V0X2Zyb20gPT0gZHN0X3RhcmdldCkgewomIzQzOwkJCQkJcy0mZ3Q7cXVvdGEud2Fsa190YXJnZXRfZnJvbSA9IE5VTEw7CiYjNDM7CQkJCQlzLSZndDtxdW90YS53YWxrX2FkZHJfZnJvbSA9IDA7CiAJCQkJfQogCQkJfQogCQl9CkBAIC0yMzEyLDY0ICYjNDM7MjM1OCw1NCBAQCBzdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKIH0KIAogLyoKLSAqIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oKSAtIENoZWNrIGlmIHRoZSBnaXZlbiByZWdpb24gb3Igc3RhcnRpbmcgcGFydCBvZgotICogaXQgaXMgYWxyZWFkeSBjaGFyZ2VkIGZvciB0aGUgREFNT1MgcXVvdGEuCiYjNDM7ICogZGFtb3Nfc2tpcF93YWxrZWRfcmVnaW9uKCkgLSBDaGVjayBpZiB0aGUgZ2l2ZW4gcmVnaW9uIG9yIHN0YXJ0aW5nIHBhcnQgb2YKJiM0MzsgKiBpdCBpcyBhbHJlYWR5IHdhbGtlZCBmb3IgdGhlIERBTU9TIHF1b3RhLgogICogQHQ6CVRoZSB0YXJnZXQgb2YgdGhlIHJlZ2lvbi4KLSAqIEBycDoJVGhlIHBvaW50ZXIgdG8gdGhlIHJlZ2lvbi4KJiM0MzsgKiBAcjoJVGhlIHBvaW50ZXIgdG8gdGhlIHJlZ2lvbi4KICAqIEBzOglUaGUgc2NoZW1lIHRvIGJlIGFwcGxpZWQuCiAgKiBAbWluX3JlZ2lvbl9zejoJbWluaW11bSByZWdpb24gc2l6ZS4KICAqCi0gKiBJZiBhIHF1b3RhIG9mIGEgc2NoZW1lIGhhcyBleGNlZWRlZCBpbiBhIHF1b3RhIGNoYXJnZSB3aW5kb3csIHRoZSBzY2hlbWUmIzM5O3MKLSAqIGFjdGlvbiB3b3VsZCBhcHBsaWVkIHRvIG9ubHkgYSBwYXJ0IG9mIHRoZSB0YXJnZXQgYWNjZXNzIHBhdHRlcm4gZnVsZmlsbGluZwotICogcmVnaW9ucy4gIFRvIGF2b2lkIGFwcGx5aW5nIHRoZSBzY2hlbWUgYWN0aW9uIHRvIG9ubHkgYWxyZWFkeSBhcHBsaWVkCi0gKiByZWdpb25zLCBEQU1PTiBza2lwcyBhcHBseWluZyB0aGUgc2NoZW1lIGFjdGlvbiB0byB0aGUgcmVnaW9ucyB0aGF0IGNoYXJnZWQKLSAqIGluIHRoZSBwcmV2aW91cyBjaGFyZ2Ugd2luZG93LgotICoKLSAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGEgZ2l2ZW4gcmVnaW9uIHNob3VsZCBiZSBza2lwcGVkIG9yIG5vdCBmb3IgdGhlCi0gKiByZWFzb24uICBJZiBvbmx5IHRoZSBzdGFydGluZyBwYXJ0IG9mIHRoZSByZWdpb24gaGFzIHByZXZpb3VzbHkgY2hhcmdlZCwKLSAqIHRoaXMgZnVuY3Rpb24gc3BsaXRzIHRoZSByZWdpb24gaW50byB0d28gc28gdGhhdCB0aGUgc2Vjb25kIG9uZSBjb3ZlcnMgdGhlCi0gKiBhcmVhIHRoYXQgbm90IGNoYXJnZWQgaW4gdGhlIHByZXZpb3VzIGNoYXJnZSB3aWRub3csIGFuZCByZXR1cm4gdHJ1ZS4gIFRoZQotICogY2FsbGVyIGNhbiBzZWUgdGhlIHNlY29uZCBvbmUgb24gdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSByZWdpb24gd2Fsay4KLSAqIE5vdGUgdGhhdCB0aGlzIG1lYW5zIHRoZSBjYWxsZXIgc2hvdWxkIHVzZSBkYW1vbl9mb3JfZWFjaF9yZWdpb24oKSBpbnN0ZWFkCi0gKiBvZiBkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZSgpLiAgSWYgZGFtb25fZm9yX2VhY2hfcmVnaW9uX3NhZmUoKSBpcyB1c2VkLAotICogdGhlIHNlY29uZCByZWdpb24gd2lsbCBqdXN0IGJlIGlnbm9yZWQuCiYjNDM7ICogV2hlbiBhIHF1b3RhIGlzIGNvbmZpZ3VyZWQsIERBTU9OIHJlY29yZHMgaG93IGZhciBpdCBoYXMgd2Fsa2VkIHNvIHRoYXQKJiM0MzsgKiBzdWJzZXF1ZW50IHF1b3RhIHdpbmRvd3MgY29udGludWUgZnJvbSB0aGF0IHBvaW50IGluc3RlYWQgb2YgcmUtYXBwbHlpbmcgdGhlCiYjNDM7ICogc2FtZSByZWdpb25zLiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgZm9yIHJlZ2lvbnMgdGhhdCBhcmUgYmVmb3JlIHRoZQomIzQzOyAqIHJlY29yZGVkIGN1cnNvciBhbmQgdGhlcmVmb3JlIHNob3VsZCBiZSBza2lwcGVkLiAgSWYgb25seSB0aGUgc3RhcnRpbmcgcGFydAomIzQzOyAqIGhhcyBiZWVuIHdhbGtlZCwgdGhlIHJlZ2lvbiBpcyBzcGxpdCBzbyB0aGF0IHRoZSByZW1haW5pbmcgcGFydCBjYW4gYmUKJiM0MzsgKiB2aXNpdGVkLgogICoKICAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcmVnaW9uIHNob3VsZCBiZSBza2lwcGVkLCBmYWxzZSBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBib29sIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKJiM0MztzdGF0aWMgYm9vbCBkYW1vc19za2lwX3dhbGtlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKIAkJc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLAogCQl1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opCiB7CiAJc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9ICZhbXA7cy0mZ3Q7cXVvdGE7CiAJdW5zaWduZWQgbG9uZyBzel90b19za2lwOwogCi0JLyogU2tpcCBwcmV2aW91c2x5IGNoYXJnZWQgcmVnaW9ucyAqLwotCWlmIChxdW90YS0mZ3Q7Y2hhcmdlX3RhcmdldF9mcm9tKSB7Ci0JCWlmICh0ICE9IHF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb20pCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJaWYgKHIgPT0gZGFtb25fbGFzdF9yZWdpb24odCkpIHsKLQkJCXF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMOwotCQkJcXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20gPSAwOwomIzQzOwlpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIFNraXAgcHJldmlvdXNseSB3YWxrZWQgcmVnaW9ucyAqLwomIzQzOwlpZiAocXVvdGEtJmd0O3dhbGtfdGFyZ2V0X2Zyb20pIHsKJiM0MzsJCWlmICh0ICE9IHF1b3RhLSZndDt3YWxrX3RhcmdldF9mcm9tKQogCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJaWYgKHF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tICZhbXA7JmFtcDsKLQkJCQlyLSZndDthci5lbmQgJmx0Oz0gcXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20pCiYjNDM7CQlpZiAocXVvdGEtJmd0O3dhbGtfYWRkcl9mcm9tICZhbXA7JmFtcDsKJiM0MzsJCQkJci0mZ3Q7YXIuZW5kICZsdDs9IHF1b3RhLSZndDt3YWxrX2FkZHJfZnJvbSkKIAkJCXJldHVybiB0cnVlOwogCi0JCWlmIChxdW90YS0mZ3Q7Y2hhcmdlX2FkZHJfZnJvbSAmYW1wOyZhbXA7IHItJmd0O2FyLnN0YXJ0ICZsdDsKLQkJCQlxdW90YS0mZ3Q7Y2hhcmdlX2FkZHJfZnJvbSkgewotCQkJc3pfdG9fc2tpcCA9IEFMSUdOX0RPV04ocXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20gLQomIzQzOwkJaWYgKHF1b3RhLSZndDt3YWxrX2FkZHJfZnJvbSAmYW1wOyZhbXA7IHItJmd0O2FyLnN0YXJ0ICZsdDsKJiM0MzsJCQkJcXVvdGEtJmd0O3dhbGtfYWRkcl9mcm9tKSB7CiYjNDM7CQkJc3pfdG9fc2tpcCA9IEFMSUdOX0RPV04ocXVvdGEtJmd0O3dhbGtfYWRkcl9mcm9tIC0KIAkJCQkJci0mZ3Q7YXIuc3RhcnQsIG1pbl9yZWdpb25fc3opOwogCQkJaWYgKCFzel90b19za2lwKSB7Ci0JCQkJaWYgKGRhbW9uX3N6X3JlZ2lvbihyKSAmbHQ7PSBtaW5fcmVnaW9uX3N6KQomIzQzOwkJCQlpZiAoZGFtb25fc3pfcmVnaW9uKHIpICZsdDs9IG1pbl9yZWdpb25fc3opIHsKJiM0MzsJCQkJCXF1b3RhLSZndDt3YWxrX2FkZHJfZnJvbSA9IHItJmd0O2FyLmVuZDsKIAkJCQkJcmV0dXJuIHRydWU7CiYjNDM7CQkJCX0KIAkJCQlzel90b19za2lwID0gbWluX3JlZ2lvbl9zejsKIAkJCX0KIAkJCWRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBzel90b19za2lwKTsKIAkJCXJldHVybiB0cnVlOwogCQl9Ci0JCXF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMOwotCQlxdW90YS0mZ3Q7Y2hhcmdlX2FkZHJfZnJvbSA9IDA7CiAJfQogCXJldHVybiBmYWxzZTsKIH0KQEAgLTI2MjcsMTAgJiM0MzsyNjYzLDYgQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJCXF1b3RhLSZndDt0b3RhbF9jaGFyZ2VkX25zICYjNDM7PSB0aW1lc3BlYzY0X3RvX25zKCZhbXA7ZW5kKSAtCiAJCQl0aW1lc3BlYzY0X3RvX25zKCZhbXA7YmVnaW4pOwogCQlkYW1vc19jaGFyZ2VfcXVvdGEocXVvdGEsIHN6LCBzel9hcHBsaWVkKTsKLQkJaWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtJmd0O21pbl9yZWdpb25fc3opKSB7Ci0JCQlxdW90YS0mZ3Q7Y2hhcmdlX3RhcmdldF9mcm9tID0gdDsKLQkJCXF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tID0gci0mZ3Q7YXIuZW5kOwotCQl9CiAJfQogCWlmIChzLSZndDthY3Rpb24gIT0gREFNT1NfU1RBVCkKIAkJci0mZ3Q7YWdlID0gMDsKQEAgLTI2MzksOCAmIzQzOzI2NzEsMTkgQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJZGFtb3NfdXBkYXRlX3N0YXQocywgc3osIHN6X2FwcGxpZWQsIHN6X29wc19maWx0ZXJfcGFzc2VkKTsKIH0KIAotc3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLAotCQkJCSAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiYjNDM7c3RhdGljIHZvaWQgZGFtb3Nfd2Fsa19tYXliZV9yb3RhdGUoc3RydWN0IGRhbW9uX2N0eCAqYywKJiM0MzsJCQkJICAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgZGFtb3MgKnMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gJmFtcDtzLSZndDtxdW90YTsKJiM0MzsKJiM0MzsJaWYgKGRhbW9zX2NvbXBsZXRlbHlfd2Fsa2VkKHMsIHQpKSB7CiYjNDM7CQlxdW90YS0mZ3Q7d2Fsa190YXJnZXRfZnJvbSA9IGRhbW9uX25leHRfdmFsaWRfdGFyZ2V0KHQsIGMpOwomIzQzOwkJcXVvdGEtJmd0O3dhbGtfYWRkcl9mcm9tID0gMDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJCQkJICAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcikKIHsKIAlzdHJ1Y3QgZGFtb3MgKnM7CkBAIC0yNjU4LDE4ICYjNDM7MjcwMSwzMSBAQCBzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsCiAJCWlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLSZndDttaW5fcmVnaW9uX3N6KSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHQsIHIsIHMsIGMtJmd0O21pbl9yZWdpb25fc3opKQotCQkJY29udGludWU7Ci0KIAkJaWYgKHMtJmd0O21heF9ucl9zbmFwc2hvdHMgJmFtcDsmYW1wOwogCQkJCXMtJmd0O21heF9ucl9zbmFwc2hvdHMgJmx0Oz0gcy0mZ3Q7c3RhdC5ucl9zbmFwc2hvdHMpCiAJCQljb250aW51ZTsKIAomIzQzOwkJLyoKJiM0MzsJCSAqIFNraXAgcmVnaW9ucyBiZWZvcmUgdGhlIGN1cnNvci4gIElmIHRoZSBza2lwIG1ha2VzIHRoZSBjdXJzb3IKJiM0MzsJCSAqIHJlYWNoIHRoZSBlbmQgb2YgdGhpcyB0YXJnZXQsIHJvdGF0ZSB0byB0aGUgbmV4dCB2YWxpZCB0YXJnZXQKJiM0MzsJCSAqIGJlZm9yZSBjb250aW51aW5nIHdpdGggdGhlIG5leHQgcmVnaW9uL3NjaGVtZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbih0LCByLCBzLCBjLSZndDttaW5fcmVnaW9uX3N6KSkgewomIzQzOwkJCWRhbW9zX3dhbGtfbWF5YmVfcm90YXRlKGMsIHQsIHMpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwogCQlpZiAoZGFtb3NfdmFsaWRfdGFyZ2V0KGMsIHIsIHMpKQogCQkJZGFtb3NfYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMpOwogCiAJCWlmIChkYW1vbl9pc19sYXN0X3JlZ2lvbihyLCB0KSkKIAkJCXMtJmd0O3N0YXQubnJfc25hcHNob3RzJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCWlmIChkYW1vc19xdW90YV9pc19zZXQocXVvdGEpKSB7CiYjNDM7CQkJcXVvdGEtJmd0O3dhbGtfdGFyZ2V0X2Zyb20gPSB0OwomIzQzOwkJCXF1b3RhLSZndDt3YWxrX2FkZHJfZnJvbSA9IHItJmd0O2FyLmVuZDsKJiM0MzsJCQlkYW1vc193YWxrX21heWJlX3JvdGF0ZShjLCB0LCBzKTsKJiM0MzsJCX0KIAl9CiB9CiAKQEAgLTMyNDEsOCAmIzQzOzMyOTcsMTAgQEAgc3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpCiAJbWF4X3JlZ2lvbl9zeiA9IGRhbW9uX3JlZ2lvbl9zel9saW1pdChjKTsKIAltdXRleF9sb2NrKCZhbXA7Yy0mZ3Q7d2Fsa19jb250cm9sX2xvY2spOwogCWRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7Ci0JCWlmIChjLSZndDtvcHMudGFyZ2V0X3ZhbGlkICZhbXA7JmFtcDsgYy0mZ3Q7b3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZSkKJiM0MzsJCWlmIChjLSZndDtvcHMudGFyZ2V0X3ZhbGlkICZhbXA7JmFtcDsgYy0mZ3Q7b3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZSkgewomIzQzOwkJCWRhbW9zX3JlcGxhY2VfaW52YWxpZF90YXJnZXQoYywgdCk7CiAJCQljb250aW51ZTsKJiM0MzsJCX0KIAkJZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTgxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFBhdGNoIFJldmlldyAmYW1wOyBGdXp6aW5nIEZlYXNpYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBEQU1PTiBjb3JlLCBzcGVjaWZpY2FsbHkgdGhlIHF1b3RhIHdhbGtpbmcgbG9naWMgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJdCYjMzk7cyBhIHByZXR0eSB0YXJnZXRlZCBtb2RpZmljYXRpb24sIHJlbmFtaW5nIGEgY291cGxlIG9mIHZhcmlhYmxlcyAoYGNoYXJnZV90YXJnZXRfZnJvbWAgYW5kIGBjaGFyZ2VfYWRkcl9mcm9tYCBiZWNvbWluZyBgd2Fsa190YXJnZXRfZnJvbWAgYW5kIGB3YWxrX2FkZHJfZnJvbWApIGFuZCBpbnRyb2R1Y2luZyBhIGZldyBuZXcgZnVuY3Rpb25zLiBUaGVzZSBhZGRpdGlvbnMsIGBkYW1vc19jb21wbGV0ZWx5X3dhbGtlZGAsIGBkYW1vbl9uZXh0X3ZhbGlkX3RhcmdldGAsIGBkYW1vc19yZXBsYWNlX2ludmFsaWRfdGFyZ2V0YCwgYGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbmAsIGFuZCBgZGFtb3Nfd2Fsa19tYXliZV9yb3RhdGVgLCBzdHJvbmdseSBzdWdnZXN0IGEgbW9yZSBudWFuY2VkIGFwcHJvYWNoIHRvIHRyYWNraW5nIGFuZCBtYW5hZ2luZyBEQU1PUyB3YWxraW5nLiBUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBkYW1vbl9kb19hcHBseV9zY2hlbWVzYCBhbmQgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AsIHdoaWNoIGFyZSBrZXkgYXBwbGljYXRpb24gcG9pbnRzLgoKVGhlIGJpZyBxdWVzdGlvbiBub3cgaXMsICYjMzQ7SXMgdGhpcyBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZT8mIzM0OyBHaXZlbiBEQU1PTiYjMzk7cyByb2xlIGFzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyAmIzM0O1llcy4mIzM0OyBJdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIHN5c2ZzIGFuZCBrZXJuZWwgQVBJcywgd2hpY2ggcHJlc2VudHMgYSBnb29kIGF0dGFjayBzdXJmYWNlLgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgd2VpcmQgY29uZmlnIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IG1ha2UgdGhpcyBwYXRjaCBsZXNzIGludGVyZXN0aW5nIGZvciBmdXp6aW5nLiBJJiMzOTtsbCBzZWFyY2ggYG1tL2RhbW9uL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIERBTU9OIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGUgbW9kaWZpZWQgY29kZSBwYXRocy4gR290dGEgY292ZXIgYWxsIHRoZSBiYXNlcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MDQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGNvbmNpc2Ugc3VtbWFyeSBmb3IgYW4gZXhwZXJ0OgoKKipEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBDb3JlIExvZ2ljIFJldmlldyoqCgpSaWdodCwgaXQmIzM5O3MgdGltZSB0byBlbmFibGUgREFNT04sIHNwZWNpZmljYWxseSB3aXRoIHRoZSBgVkFERFJgLCBgUEFERFJgLCBgU1lTRlNgLCBgUkVDTEFJTWAsIGBMUlVfU09SVGAsIGFuZCBgU1RBVGAgb3B0aW9ucy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBJIGtub3cgdGhlc2UgZmVhdHVyZXMgYXJlIGRlc2lnbmVkIHRvIHByb3ZpZGUgaW4tZGVwdGggbW9uaXRvcmluZyBhbmQgcG90ZW50aWFsIG9wdGltaXphdGlvbiBjYXBhYmlsaXRpZXMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHN1c3BlY3QgZW5hYmxpbmcgYWxsIG9mIHRoZW0gYXQgb25jZSBtaWdodCBiZSBhIGJpdCB2ZXJib3NlIGZvciBpbml0aWFsIHRlc3RpbmcuIEkmIzM5O2xsIG5lZWQgdG8gdGFpbG9yIHRoZW0gdG8gdGhlIHNwZWNpZmljIHNjZW5hcmlvLgoKQmVmb3JlIEkgZGl2ZSBkZWVwZXIgaW50byBleHBlcmltZW50YXRpb24sIEkgbmVlZCB0byBjaGVjayB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiBpbiBgbW0vZGFtb24vY29yZS5jYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbiBjYWxscywgYW55IGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBvdmVyYWxsIGNvbnRyb2wgZmxvdyBvZiBEQU1PTi4gVGhpcyB3aWxsIGhlbHAgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBhY3RzLCBkZXBlbmRlbmNpZXMsIGFuZCBjb25maWd1cmF0aW9uIG51YW5jZXMuIFRoaXMgYXBwcm9hY2ggd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IGRpYWdub3NlIHByb2JsZW1zIGFuZCBvcHRpbWl6ZSBEQU1PTiB1c2FnZS4gSXQgd2lsbCBhbHNvIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgZWFjaCBvcHRpb24gaW50ZXJhY3RzIHdpdGggdGhlIG90aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMuKiBkYW1vc193YWxrX21heWJlX3JvdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MjYwOD1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjY3My1cbm1tL2RhbW9uL2NvcmUuYzoyNjc0OnN0YXRpYyB2b2lkIGRhbW9zX3dhbGtfbWF5YmVfcm90YXRlKHN0cnVjdCBkYW1vbl9jdHggKmMsXG5tbS9kYW1vbi9jb3JlLmMtMjY3NS1cdFx0XHRcdCAgICBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NzQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gUGF0Y2gqKgoKT2theSwgbGV0IG1lIGJyZWFrIGRvd24gdGhpcyBEQU1PTiBwYXRjaC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgaW50cm9kdWNpbmcgc29tZSBuZXcgc3RhdGljIGhlbHBlciBmdW5jdGlvbnM6IGBkYW1vc19jb21wbGV0ZWx5X3dhbGtlZGAsIGBkYW1vbl9uZXh0X3ZhbGlkX3RhcmdldGAsIGBkYW1vc19yZXBsYWNlX2ludmFsaWRfdGFyZ2V0YCwgYGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbmAsIGFuZCBgZGFtb3Nfd2Fsa19tYXliZV9yb3RhdGVgLiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBvcmdhbml6YXRpb25hbCBhcHByb2FjaCBmb3IgdGhlc2UgdHlwZXMgb2YgbG93LWxldmVsIHJvdXRpbmVzLgoKTm93LCB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGlzIGhvdyB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSAqdXNlZCouIGBkYW1vbl9kb19hcHBseV9zY2hlbWVzYCBzZWVtcyB0byBsZXZlcmFnZSBgZGFtb3Nfc2tpcF93YWxrZWRfcmVnaW9uYCBhbmQgYGRhbW9zX3dhbGtfbWF5YmVfcm90YXRlYC4gVGhhdCBzdWdnZXN0cyBzb21lIG9wdGltaXphdGlvbiBvciByb3RhdGlvbiBzdHJhdGVneSBkdXJpbmcgc2NoZW1lIGFwcGxpY2F0aW9uLiBBbmQgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgY2FsbHMgYGRhbW9zX3JlcGxhY2VfaW52YWxpZF90YXJnZXRgLCB3aGljaCBoaW50cyBhdCBoYW5kbGluZyBpbnZhbGlkIHRhcmdldCByZWdpb25zIHdpdGhpbiB0aGUga2VybmVsIGRhZW1vbiBjb250ZXh0LiBgZGFtb25fY29tbWl0X3RhcmdldHNgIGlzIGFsc28gbGlzdGVkIGFzIG1vZGlmaWVkLgoKR2l2ZW4gdGhpcywgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBhbmQgYGRhbW9uX2NvbW1pdF90YXJnZXRzYC4gVGhlc2UgYXJlIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBkaXJlY3RseSBpbXBhY3RlZCBhbmQgYXJlIHRoZSBsaWtlbHkgYXJlYXMgb2YgdGhlIHBhdGNoIHRoYXQgaW50cm9kdWNlIHNpZ25pZmljYW50IGJlaGF2aW9yIGNoYW5nZXMuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaWYgdGhlc2UgYXJlIHRoZSAqdHJ1ZSoga2V5IGZvY2FsIHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPy4qIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzI1OT1zdGF0aWMgdm9pZCBkYW1vc190cmFjZV9zdGF0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzI3NC1cbm1tL2RhbW9uL2NvcmUuYzozMjc1OnN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxubW0vZGFtb24vY29yZS5jLTMyNzYte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zODEwPXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zODgyLVx0XHQvKlxubW0vZGFtb24vY29yZS5jOjM4ODM6XHRcdCAqIGRvIGtkYW1vbmRfY2FsbCgpIGFuZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoKSBhZnRlclxubW0vZGFtb24vY29yZS5jLTM4ODQtXHRcdCAqIGtkYW1vbmRfbWVyZ2VfcmVnaW9ucygpIGlmIHBvc3NpYmxlLCB0byByZWR1Y2Ugb3ZlcmhlYWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzAzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKlN0YXRpYyBGdW5jdGlvbiBDb251bmRydW0qKgoKT2theSwgc28gYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGZpbmUsIEkgY2FuIHdvcmsgd2l0aCB0aGF0LiBCdXQgbm93IEkgbmVlZCB0byByZWFsbHkgY29uc2lkZXIgYGRhbW9uX2NvbW1pdF90YXJnZXRzYC4gSXMgdGhhdCBhbHNvIHN0YXRpYz8gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSwgYmVjYXVzZSB0aGUgYW5zd2VyIHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgaG93IEkgcHJvY2VlZC4gSWYgaXQmIzM5O3Mgc3RhdGljLCBpdCBpbnRyb2R1Y2VzIGEgd2hvbGUgZGlmZmVyZW50IHNldCBvZiBjb25zaWRlcmF0aW9ucyBhYm91dCBzY29wZSBhbmQgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3Vlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMuIEdvdHRhIGRpZyBkZWVwZXIgaW50byB0aGF0IG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8uKiBkYW1vbl9jb21taXRfdGFyZ2V0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTYzND1zdGF0aWMgdm9pZCBkYW1vbl9yZXZlcnRfdGFyZ2V0X2NvbW1pdHMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNjQ5LVxubW0vZGFtb24vY29yZS5jOjE2NTA6c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0cyhcbm1tL2RhbW9uL2NvcmUuYy0xNjUxLVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTc5Nz1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTgyNS1cdFx0cmV0dXJuIGVycjtcbm1tL2RhbW9uL2NvcmUuYzoxODI2Olx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldHMoZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTE4MjctXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTI5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIE5vbi1TdGF0aWMgRGVwZW5kZW5jaWVzIG9uIGBkYW1vbl9jb21taXRfdGFyZ2V0c2AqKgoKUmlnaHQsIHNvIGBkYW1vbl9jb21taXRfdGFyZ2V0c2AgaXMgYSBzdGF0aWMgdmFyaWFibGUsIHdoaWNoIGxpbWl0cyBpdHMgZGlyZWN0IHNjb3BlIGFuZCBwb3RlbnRpYWwgZm9yIGV4dGVybmFsIG1hbmlwdWxhdGlvbi4gVGhhdCYjMzk7cyBnb29kIGZyb20gYSBkZXNpZ24gcGVyc3BlY3RpdmUsIGdlbmVyYWxseSwgYnV0IGl0IGFsc28gbWVhbnMgSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2hlbiByZWFzb25pbmcgYWJvdXQgaXRzIGltcGFjdCBhY3Jvc3MgdGhlIGxhcmdlciBzeXN0ZW0uCgpOb3csIG15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgd2hpY2ggKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucyB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AgYWN0dWFsbHkgKmludGVyYWN0KiB3aXRoIGl0LCBldmVuIGluZGlyZWN0bHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGllY2VzIG9mIHRoZSBhcmNoaXRlY3R1cmUgbWlnaHQgZGVwZW5kIG9uIGl0cyB2YWx1ZSwgb3IgbWlnaHQgbWFuaXB1bGF0ZSBzb21ldGhpbmcgdGhhdCB0aGVuIHJlbGllcyBvbiB0aGF0IHZhbHVlLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBpbnRlcm5hbCBzdGF0ZSwgYW5kIEkgd2FudCBhIGZ1bGwgcGljdHVyZSBvZiBpdHMgcm9sZS4gVGhpcyBpcyBjcml0aWNhbCBmb3IgYXNzZXNzaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IGNoYW5nZXMgb3IgZGVidWdnaW5nIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBEQU1PTiYjMzk7cyBjb3JlIGNvbW1pdCB0YXJnZXQgYmVoYXZpb3IuIFRoaXMgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0IGRyaWxsaW5nIGludG8gaXRzIHVzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBkYW1vbl9jb21taXRfY3R4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0xODU1PXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfdGVzdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xODgzLSAqL1xubW0vZGFtb24vY29yZS5jOjE4ODQ6aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTg4NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZzoKCioqRXhhbWluaW5nIERBTU9OIEluaXRpYWxpemF0aW9uIGFuZCBDb250ZXh0cyoqCgpPa2F5LCBzbyBgZGFtb25fY29tbWl0X2N0eGAgaXMgZXhwb3J0ZWQg4oCTIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCwgYW5kIHRoYXQgY2VydGFpbmx5IGFmZmVjdHMgaG93IGl0IG1pZ2h0IGJlIHVzZWQgYW5kIGFjY2Vzc2VkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCB0aGVuIHN3aW5ncyB0byBga2RhbW9uZF9mbmAuIEhtbSwgaXQmIzM5O3MgZGVmaW5lZCBhcyBzdGF0aWMuIFRoYXQmIzM5O3MgYSBrZXkgZGlzdGluY3Rpb24gYW5kIHJhaXNlcyB0aGUgcXVlc3Rpb24gb2YgaXRzIHNjb3BlIGFuZCB2aXNpYmlsaXR5IGNvbXBhcmVkIHRvIHRoZSBleHBvcnRlZCBgZGFtb25fY29tbWl0X2N0eGAuIEl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZWlyIHJlbGF0aW9uc2hpcCwgaWYgYW55LiAKClRoZSBjb3JlIHF1ZXN0aW9uIHRoYXQgYXJpc2VzIGlzLCBob3cgaXMgREFNT04gYWN0dWFsbHkgbGF1bmNoZWQgb3IgaW5pdGlhbGl6ZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuIEhvdyBkb2VzIHRoZSBzeXN0ZW0gYnJpbmcgREFNT04gaW50byBvcGVyYXRpb24/IElzIGBkYW1vbl9jb21taXRfY3R4YCBwYXJ0IG9mIHRoYXQgaW5pdGlhbGl6YXRpb24/IElzIGl0IHVzZWQgYWZ0ZXI/IEtub3dpbmcgaG93IGl04oCZcyBzdGFydGVkIHdpbGwgaWxsdW1pbmF0ZSBob3cgdGhlc2Ugc2VlbWluZ2x5IGluZGVwZW5kZW50IGNvbXBvbmVudHMgaW50ZXJhY3QgYW5kIHRoZWlyIG92ZXJhbGwgcm9sZSBpbiB0aGUgREFNT04gYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIHRvIGFuc3dlciB0aGlzIHByb3Blcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IGRhbW9uX3N0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0yMDAzPXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjAxOS0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMDIwOmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxubW0vZGFtb24vY29yZS5jLTIwMjEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTQ2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkluaXRpYWwgQXNzZXNzbWVudCBhbmQgRGlyZWN0aW9uKioKCk9rYXksIHNvIGBkYW1vbl9zdGFydGAgaXMgZmxhZ2dlZCBhcyBiZWluZyBleHBvcnRlZC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSB0aGUgZW50cnkgcG9pbnQgZm9yIHNvbWUgY3JpdGljYWwgZGFlbW9uIG9yIHNlcnZpY2UuIE15IG5leHQgc3RlcCwgaW5zdGluY3RpdmVseSwgaXMgdG8gbG9vayBmb3IgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUsIHNvbWV0aGluZyBsaWtlIGBkYW1vc19xdW90YV9pbml0YCwgb3IgYSBmdW5jdGlvbiB3aXRoIGEgdmVyeSBzaW1pbGFyIG5hbWluZyBjb252ZW50aW9uLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgc2V0dXAgYW5kIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBiZWluZyBsb2FkZWQgb3Igc2V0LiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGxvZ2ljIHN0YXJ0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteLiogZGFtb3NfcXVvdGFfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMzkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipTdGF0aWMgVmFyaWFibGVzIGFuZCBTY2hlbWUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCBteSBtaW5kIGltbWVkaWF0ZWx5IGxhdGNoZXMgb250byBgZGFtb3NfcXVvdGFfaW5pdGAuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgZGVjbGFyZWQgYXMgYHN0YXRpY2AgaXMgYSBmbGFzaGluZyByZWQgbGlnaHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gQSBzdGF0aWMgdmFyaWFibGUgbWVhbnMgaXQgcmV0YWlucyBpdHMgdmFsdWUgYmV0d2VlbiBmdW5jdGlvbiBjYWxscy4gVGhpcyBhZmZlY3RzIHNjb3BpbmcsIG9mIGNvdXJzZSwgYnV0IGZvciB0aGUgbGlmZSBvZiBtZSwgSSBjYW4mIzM5O3QgcXVpdGUgc2VlIHRoZSBzcGVjaWZpYyBudWFuY2Ugb2YgaG93IHRoaXMgaXMgYWxsIGludGVycGxheWluZywgYW5kIHNvIEkgaGF2ZSB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzbiYjMzk7dCBhIGx1cmtpbmcgY29uY3VycmVuY3kgaXNzdWUgZG93biB0aGUgbGluZSwgb3IgcGVyaGFwcyBoYXMgc29tZSB1bmV4cGVjdGVkIGluaXRpYWxpemF0aW9uIGJlaGF2aW9yLgoKVGhlbiwgbXkgYXR0ZW50aW9uIHNoaWZ0cyB0byBgZGFtb25fbmV3X3NjaGVtZWAuIEkmIzM5O20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgKmhvdyogdGhpcyBpcyBnZXR0aW5nIGluaXRpYWxpemVkLCBhbmQgaWYgaXQmIzM5O3MgZGVwZW5kZW50IG9uIGBkYW1vc19xdW90YV9pbml0YCBpbiBzb21lIHdheS4gSXMgdGhlcmUgYSBkZWZpbmVkIG9yZGVyPyBIb3cgaXMgdGhlIHNjaGVtZSBuZXdlZD8gSXMgYGRhbW9uX25ld19zY2hlbWVgIGFsc28gc3RhdGljPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSB2YXJpYWJsZSBpbml0aWFsaXphdGlvbj8gSSBoYXZlIHRvIHN0YXJ0IG1hcHBpbmcgb3V0IHRoZSBkZXBlbmRlbmNpZXMuIFRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZXNlIHR3byBpcyB0aGUgbmV4dCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0cnVjdCBkYW1vcyBcXCpkYW1vbl9uZXdfc2NoZW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz03MTU9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSAqZGFtb3NfcXVvdGFfaW5pdChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03MjctXG5tbS9kYW1vbi9jb3JlLmM6NzI4OnN0cnVjdCBkYW1vcyAqZGFtb25fbmV3X3NjaGVtZShzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gKnBhdHRlcm4sXG5tbS9kYW1vbi9jb3JlLmMtNzI5LVx0XHRcdGVudW0gZGFtb3NfYWN0aW9uIGFjdGlvbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU2OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nOgoKKipGb2N1c2luZyBvbiB0aGUgRGFtb24gQ29kZSoqCgpPa2F5LCBzbyBgZGFtb25fbmV3X3NjaGVtZWAgaXMgbm93IG9mZmljaWFsbHkgZXhwb3J0ZWQsIHdoaWNoIGlzIGdyZWF0LiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIGl0IGEga2V5IHN5bWJvbCB0byB0cmFjay4gSSBuZWVkIHRvIGtlZXAgdGhhdCBvbmUgaW4gbWluZC4gSXQgdGVsbHMgbWUgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYSBuZXcgc2NoZW1lIHdpbGwgYmUgYXZhaWxhYmxlIGZvciBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIHRvIHVzZSwgYW5kIGluZGljYXRlcyB0aGUgZmVhdHVyZSBpcyByZWFjaGluZyBtYXR1cml0eS4KCkkmIzM5O20gdGhpbmtpbmcgdGhhdCBmb2N1c2luZyBvbiBhIGZldyBvdGhlciBrZXkgZnVuY3Rpb25zIGlzIHByb2JhYmx5IHRoZSBiZXN0IGFwcHJvYWNoIGF0IHRoaXMgc3RhZ2UuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBgZGFtb25fY29tbWl0X2N0eGAsIGBkYW1vbl9zdGFydGAsIGFuZCBgZGFtb25fbmV3X3NjaGVtZWAuIFRob3NlIHNlZW0gbGlrZSB0aGUgY29yZSBvZiB3aGF0ZXZlciBEYW1vbiBpcyBkb2luZyByaWdodCBub3cuIFRoZXkmIzM5O2xsIGdpdmUgbWUgYSBzdHJvbmcgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBmbG93IGFuZCBmdW5jdGlvbmFsaXR5LgoKSSBzaG91bGQgYWxzbyBpbmNsdWRlIGBkYW1vbl9zZXRfcmVnaW9uc2AgYXMgYSBwb3RlbnRpYWwgYXJlYSBvZiBpbnRlcmVzdC4gRGVwZW5kaW5nIG9uIGhvdyB0aGUgbmV3IHNjaGVtZSBpbnRlcmFjdHMgd2l0aCByZWdpb25zLCBpdCBjb3VsZCBiZSB2ZXJ5IHJlbGV2YW50IHRvIHRoZSBjaGFuZ2VzLiBJJiMzOTtsbCBmbGFnIGl0IGZvciBub3csIGFuZCBzZWUgaWYgaXQgZW1lcmdlcyBhcyBhIGNyaXRpY2FsIHBpZWNlIHdoZW4gbG9va2luZyBhdCB0aGUgb3RoZXIgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IGRhbW9uX3NldF9yZWdpb25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz00OTE9c3RhdGljIGludCBkYW1vbl9maWxsX3JlZ2lvbnNfaG9sZXMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqZmlyc3QsXG4tLVxubW0vZGFtb24vY29yZS5jLTUyMy0gKi9cbm1tL2RhbW9uL2NvcmUuYzo1MjQ6aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG5tbS9kYW1vbi9jb3JlLmMtNTI1LVx0XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDE4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgYGRhbW9uX3NldF9yZWdpb25zYCoqCgpPa2F5LCBzbyBgZGFtb25fc2V0X3JlZ2lvbnNgIGlzIGV4cG9ydGVkLCB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGEgZ29vZCBmb2NhbCBwb2ludCBmb3IgYW5hbHlzaXMuIEFuZCBpdCBsb29rcyBsaWtlIEkmIzM5O3ZlIGZvdW5kIGEgc29saWQgYW5jaG9yIHBvaW50LiBUaGUgcGF0Y2ggZGVzY3JpcHRpb24gcmVmZXJlbmNpbmcgYGRhbW9zX2NvbXBsZXRlbHlfd2Fsa2VkYCBtZW50aW9ucyBgZGFtb25fc2V0X3JlZ2lvbnMoKWAgZGlyZWN0bHksIHNwZWNpZmljYWxseSB0aGUgbnVhbmNlIG9mIHRoZSBmdW5jdGlvbiBwb3RlbnRpYWxseSBzaHJpbmtpbmcgYSByZWdpb24gc2V0IGFmdGVyIGEgY3Vyc29yIGlzIHNhdmVkOgoKYGBgYwoJLyoKCSAqICYjMzk7Jmd0Oz0mIzM5OyBpbnN0ZWFkIG9mICYjMzk7PT0mIzM5OywgYmVjYXVzZSB0aGUgcmVnaW9uIHNldCBvZiBAdCBjb3VsZCBoYXZlIGJlZW4KCSAqIHNocnVua2VuIGJ5IGRhbW9uX3NldF9yZWdpb25zKCkgYWZ0ZXIgdGhlIGN1cnNvciB3YXMgc2F2ZWQuCgkgKi8KYGBgCgpUaGF0IGRlZmluaXRlbHkgbWFrZXMgaXQgYSByZWxldmFudCBzeW1ib2wgdG8gZm9jdXMgb24uIFNvLCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZCBmb3IgdGhpcyB0aGluZyB0byBiZSB1c2VmdWw/IEkgbmVlZCB0byBjaGVjayBmb3IgYERBTU9OYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1NZU0ZTYCwgYERBTU9OX1JFQ0xBSU1gLCBhbmQgYERBTU9OX0xSVV9TT1JUYC4gVGhvc2UgYXJlIHRoZSBjb3JlIGNvbmZpZ3MgSSYjMzk7bSBhbHJlYWR5IGF3YXJlIG9mLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcGVydGluZW50IGNvbmZpZ3MgbHVya2luZyBpbiB0aGUgYmFja2dyb3VuZC4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTQtXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTYtXHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTQtXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWctMTYtXHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0yNS1cbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctMjctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNDYtXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNTUtXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcbm1tL2RhbW9uL0tjb25maWctNjktXHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNzUtXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctODctXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXG5tbS9kYW1vbi9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctOTktXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcbm1tL2RhbW9uL0tjb25maWctMTAxLVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMDctXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZy0xMDktXHRib29sIFwmIzM0O0J1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyB0aGUgREFNT04gQ29kZWJhc2UqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgREFNT04gaW1wbGVtZW50YXRpb24uIFRoZSBjb3JlIGZ1bmN0aW9uYWxpdHksIGFzIEkgcmVjYWxsIGZyb20gcHJldmlvdXMgd29yaywgc2hvdWxkIGJlIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gTWFrZXMgc2Vuc2UsIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIGFueSBtZW1vcnkgbW9uaXRvcmluZyBhbmQgYWRhcHRhdGlvbiB3b3VsZCBsaWtlbHkgcmVzaWRlLiBGaXJzdCwgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoYXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gc3VwcG9ydHMgaXQuIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGBDT05GSUdfREFNT05gIGlzIGFjdHVhbGx5IGRlZmluZWQuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZSBgbW0vZGFtb24vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBKdXN0IG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIGJ1aWxkIGVudmlyb25tZW50LiBUaGlzIGtpbmQgb2YgdXBmcm9udCBjaGVja2luZyBpcyBjcnVjaWFsIGZvciBhdm9pZGluZyB3aWxkIGdvb3NlIGNoYXNlcyBsYXRlciBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0b2JqLXlcdFx0XHRcdDo9IGNvcmUub1xuICAgNDpcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gdmFkZHIub1xuICAgNTpcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gcGFkZHIub1xuICAgNjpcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcdCYjNDM7PSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xuICAgNzpcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXG4gICA4Olx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xuICAgOTpcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjgwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqTWFrZWZpbGUgQW5hbHlzaXM6IE1vZHVsZSBDb21waWxhdGlvbiBUcmlnZ2VyKioKCk9rYXksIHNvIGBvYmoteSA6PSBjb3JlLm9gIGluIHRoaXMgY29udGV4dCBjbGVhcmx5IGluZGljYXRlcyB0aGF0IGBjb3JlLm9gIGlzIHNsYXRlZCBmb3IgY29tcGlsYXRpb24gaWYgaXRzIGRpcmVjdG9yeSBpcyBlbnRlcmVkIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIGhvdyB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBgb2JqLXlgIHZhcmlhYmxlLCB3b3Jrcy4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byB0aGUgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgYW5kIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGxpbmtpbmcgcHJvY2VkdXJlcy4gSSB3YW50IHRvIHNlZSAqaG93KiB0aGlzIGBjb3JlLm9gIGZpbGUgaXMgdWx0aW1hdGVseSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBUaGlzIHdpbGwgY29uZmlybSB0aGUgY29tcGlsYXRpb24gYmVoYXZpb3IuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIHBpY3R1cmUgd2lsbCByZWluZm9yY2UgaG93IHRoaXMgYnVpbGRzIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMzU9b2JqLSQoQ09ORklHX0RFQlVHX1BBR0VfUkVGKSAmIzQzOz0gZGVidWdfcGFnZV9yZWYub1xubW0vTWFrZWZpbGU6MTM2Om9iai0kKENPTkZJR19EQU1PTikgJiM0Mzs9IGRhbW9uL1xubW0vTWFrZWZpbGUtMTM3LW9iai0kKENPTkZJR19IQVJERU5FRF9VU0VSQ09QWSkgJiM0Mzs9IHVzZXJjb3B5Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NzUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gTW9kdWxlIFZ1bG5lcmFiaWxpdHkgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGBDT05GSUdfREFNT05gIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBoZXJlLiBUaGF0JiMzOTtzIHRoZSBnYXRla2VlcGVyLiBUaGUgcGF0Y2ggaXRzZWxmIHNlZW1zIHRvIGJlIGRpZ2dpbmcgaW50byBgbW0vZGFtb24vY29yZS5jYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZSBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIERBTU9OIGxvZ2ljIGxpdmVzIGFuZCBnZXRzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19EQU1PTmAgaXMgb24uIFRoaXMgaW5kaWNhdGVzIGNoYW5nZXMgdG8gc2NoZW1lIGFwcGxpY2F0aW9uIGFuZCBxdW90YSBtYW5hZ2VtZW50IOKAkyBqdWljeSB0YXJnZXRzIGZvciBwb3RlbnRpYWwgZnV6emluZy4gVGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlIGFuZCB3b3J0aCB0aGUgdGltZS4KCk15IGluaXRpYWwgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2Ugc3ltYm9sczogYGRhbW9uX2NvbW1pdF9jdHhgLCBgZGFtb25fc3RhcnRgLCBgZGFtb25fbmV3X3NjaGVtZWAsIGFuZCBgZGFtb25fc2V0X3JlZ2lvbnNgLiBUaG9zZSBmZWVsIGxpa2UgdGhlIGxvZ2ljYWwgZW50cnkgcG9pbnRzIG9yIGNyaXRpY2FsIGZ1bmN0aW9ucyB3aGVyZSB0aGUgbmV3IGNoYW5nZXMgd2lsbCBiZSBleHByZXNzZWQsIGFuZCBkYXRhIGZsb3cgb3IgY29udHJvbCBsb2dpYyBjb3VsZCBiZSBwcm9ibGVtYXRpYy4KCk9mIGNvdXJzZSwgSSBuZWVkIHRvIGtlZXAgdGhlIHZhcmlvdXMgY29uZmlndXJhdGlvbiBvcHRpb25zIGluIG1pbmQgYXMgSSBidWlsZCB0aGUgZnV6emluZyBzZXR1cDogYERBTU9OYCwgb2J2aW91c2x5LCBidXQgYWxzbyBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBgREFNT05fU1lTRlNgLCBgREFNT05fUkVDTEFJTWAsIGFuZCBgREFNT05fTFJVX1NPUlRgLiBUaG9zZSB3aWxsIGxpa2VseSBhbHRlciB0aGUgY29kZSBwYXRocyBhbmQgdGhlcmVmb3JlIGFmZmVjdCB0aGUga2luZHMgb2YgY3Jhc2hlcyB0aGF0IGNhbiBiZSByZXZlYWxlZC4gVGhlIGNvbmZpZ3VyYXRpb25zIG1heSBhbHNvIGFmZmVjdCB0aGUgaW5wdXRzIHRoYXQgbXVzdCBiZSBnZW5lcmF0ZWQgZm9yIHRoZSB0ZXN0IGNhc2VzLgoKT25lIG1vcmUgdGhpbmc6IEkgc2hvdWxkIHZlcmlmeSB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucyBmcm9tIGBtbS9kYW1vbi9jb3JlLmNgIHRoYXQgbG9vayByZWxldmFudCBhbmQgbWlnaHQgYmUgbWlzc2VkIGF0IGEgZmlyc3QgZ2xhbmNlLiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgbm8gb3RoZXIgZnVuY3Rpb25zIGFyZSB1c2VkIGluIGFkZGl0aW9uIHRvIHRoZSBrZXkgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15FWFBPUlRfU1lNQk9MX0dQTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTU1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYEVYUE9SVF9TWU1CT0xfR1BMYCBQbGFjZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIGBFWFBPUlRfU1lNQk9MX0dQTGAgaXMgYmVpbmcgdXNlZCwgb3IgcGVyaGFwcyBkZWZpbmVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBJIG5lZWQgdG8gYmUgZmxleGlibGUgaW4gaG93IEkgc2VhcmNoIGZvciBpdC4gSSBjYW4mIzM5O3QganVzdCBhc3N1bWUgaXQmIzM5O3MgY2xlYW5seSBkZWZpbmVkIG9yIHVzZWQgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBJIGNhbiByZWx5IG9uIGl0IGJlaW5nIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBpdCBtaWdodCBiZSBvbiB0aGUgc2FtZSBsaW5lIGFzIG90aGVyIGNvZGUgZWxlbWVudHMgb3IgZXZlbiBlbWJlZGRlZCB3aXRoaW4gc29tZSBzb3J0IG9mIG1hY3JvLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoYXQgdGhlIHBhcnNlciBtaWdodCBpbnRlcnByZXQgaXQgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIGNvbnRleHQuIEkgbmVlZCB0byBhY2NvdW50IGZvciBib3RoIHNjZW5hcmlvcywgdGhlIGNsZWFuZXIgY2FzZSB3aGVyZSBpdCYjMzk7cyBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUsIGFuZCB0aGUgbGVzcyBjbGVhbiBvbmUgd2hlcmUgaXQgbWlnaHQgYmUgbWl4ZWQgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTF9HUEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgxOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipUaGUgRGVidWdnaW5nIERhbmNlOiBBIFF1aWNrIE1lbnRhbCBXaGlybHdpbmQqKgoKSG1tLCBJJiMzOTttIHN0dWNrLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBtaXNzaW5nLCBvciB3aGVyZSBpdCYjMzk7cyBnb2luZyB3cm9uZy4gSXQmIzM5O3MgdGhhdCBmYW1pbGlhciBmZWVsaW5nLCB0aGUgb25lIHRoYXQgbWFrZXMgbWUgZ28gb3ZlciB0aGluZ3MgSSYjMzk7dmUgY2hlY2tlZCBhIGRvemVuIHRpbWVzIGFscmVhZHkuIFRoZW4sICpib29tKiwgdGhlIGxpdHRsZSBsaWdodG5pbmcgYm9sdCBvZiBhbiBpZGVhIGZsYXNoZXM6IFdhaXQgYSBzZWNvbmQsIGNvdWxkIGl0IGJlIGEgdmlzaWJpbGl0eSBpc3N1ZT8gQXJlIHdlIHN1cmUgdGhlIHN5bWJvbCBpcyBhY3R1YWxseS4uLiBleHBvcnRlZD8gTWF5YmUgSSBqdXN0IG1pc3NlZCBzb21ldGhpbmcgb2J2aW91cywgcmlnaHQ/IExldCBtZSBjb25zaWRlciBgRVhQT1JUX1NZTUJPTGAuIEl0JiMzOTtzIGEga2V5IHRhY3RpYyB3aGVuIGRlYWxpbmcgd2l0aCB0aGVzZSBzb3J0cyBvZiBpc3N1ZXM7IGFuIGVhc3kgdGhpbmcgdG8gbWlzcyBidXQgYWxzbyBhIGNsYXNzaWMgY3VscHJpdC4gQWx3YXlzIHdvcnRoIGEgZG91YmxlLWNoZWNrLiBPa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDUzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBTeW1ib2wgVmlzaWJpbGl0eSBJc3N1ZSBpbiBEQU1PTioqCgpIbW0sIHdhaXQgYSBtaW51dGUuLi4gSSYjMzk7bSBsb29raW5nIGF0IGBtbS9kYW1vbi9jb3JlLmNgLCBhbmQgaXQgZG9lc24mIzM5O3Qgc2VlbSB0byBoYXZlIGFueSBgRVhQT1JUX1NZTUJPTGAgbWFjcm8gZGVmaW5lZCBmb3IgaXQ/IFRoYXQmIzM5O3MgdW51c3VhbCwgYW5kIGRlZmluaXRlbHkgd2FycmFudHMgYSBjbG9zZXIgbG9vay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGBkYW1vbl9zdGFydGAgKG9yIGFueSBvdGhlciBmdW5jdGlvbnMgZm9yIHRoYXQgbWF0dGVyKSB3aXRoaW4gdGhhdCBmaWxlIHdvdWxkIGJlIHZpc2libGUvYWNjZXNzaWJsZSB0byBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGlmIHRoZXJlJiMzOTtzIG5vIGV4cGxpY2l0IGV4cG9ydC4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgbWFpbnRlbmFuY2UgaXNzdWUgZG93biB0aGUgbGluZSBpZiB0aGVyZSBhcmUgZnVuY3Rpb25zIGFzc3VtZWQgdG8gYmUgcHJpdmF0ZS4KClJpZ2h0LCBsZXQgbWUgZG91YmxlLWNoZWNrLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhyb3VnaCBgbW0vZGFtb24vY29yZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGxvb2sgZm9yIHRoZSBgZGFtb25fc3RhcnRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkIGFuZCBob3cuIElmIGl0JiMzOTtzIHVzZWQgZWxzZXdoZXJlLCB0aGVuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pc20gbWFraW5nIGl0IHZpc2libGUsIGJlY2F1c2UgKnNvbWV0aGluZyogbXVzdCBiZSBtYWtpbmcgdGhpcyBhY2Nlc3NpYmxlLiBJJiMzOTttIGFzc3VtaW5nIHRoZXJlJiMzOTtzIG5vIGRpcmVjdCBleHBvcnQsIHNvIHdoYXQgYXJlIHRoZSBhbHRlcm5hdGl2ZXM/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3N0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0xMDU5PXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEwODQtICogSW4gZGV0YWlsLCBhbGwgREFNT04gQVBJIGNhbGxlcnMgZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBpbml0aWFsXG5tbS9kYW1vbi9jb3JlLmM6MTA4NTogKiBzZXR1cCBvZiBkYW1vbl9jdHggYmVmb3JlIGNhbGxpbmcgZGFtb25fc3RhcnQoKS4gIFNvbWUgb2YgdGhlIEFQSSBjYWxsZXJzXG5tbS9kYW1vbi9jb3JlLmMtMTA4Ni0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVx1MDAzZSBkYW1vbl9jb21taXQoKSBmb3Jcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTk3MT1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XG4tLVxubW0vZGFtb24vY29yZS5jLTE5NzMtLypcbm1tL2RhbW9uL2NvcmUuYzoxOTc0OiAqIF9fZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyBtb25pdG9yaW5nIHdpdGggZ2l2ZW4gY29udGV4dC5cbm1tL2RhbW9uL2NvcmUuYy0xOTc1LSAqIEBjdHg6XHRtb25pdG9yaW5nIGNvbnRleHRcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTk4MC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxOTgxOnN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtMTk4Mi17XG4tLVxubW0vZGFtb24vY29yZS5jPTIwMDM9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDA1LS8qKlxubW0vZGFtb24vY29yZS5jOjIwMDY6ICogZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyB0aGUgbW9uaXRvcmluZ3MgZm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgY29udGV4dHMuXG5tbS9kYW1vbi9jb3JlLmMtMjAwNy0gKiBAY3R4czpcdGFuIGFycmF5IG9mIHRoZSBwb2ludGVycyBmb3IgY29udGV4dHMgdG8gc3RhcnQgbW9uaXRvcmluZ1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDE0LSAqIEBleGNsdXNpdmUgaXMgdHJ1ZSBhbmQgYSBncm91cCBvZiB0aHJlYWRzIHRoYXQgY3JlYXRlZCBieSBvdGhlclxubW0vZGFtb24vY29yZS5jOjIwMTU6ICogJiMzOTtkYW1vbl9zdGFydCgpJiMzOTsgY2FsbCBpcyBjdXJyZW50bHkgcnVubmluZywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgYnV0XG5tbS9kYW1vbi9jb3JlLmMtMjAxNi0gKiByZXR1cm5zIC1FQlVTWS5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjAxOS0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMDIwOmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxubW0vZGFtb24vY29yZS5jLTIwMjEte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDQ1LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfY3R4czsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL2NvcmUuYzoyMDQ2Olx0XHRlcnIgPSBfX2RhbW9uX3N0YXJ0KGN0eHNbaV0pO1xubW0vZGFtb24vY29yZS5jLTIwNDctXHRcdGlmIChlcnIpXG4tLVxubW0vZGFtb24vY29yZS5jPTIxMTY9aW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjE0My0gKlxubW0vZGFtb24vY29yZS5jOjIxNDQ6ICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGVcbm1tL2RhbW9uL2NvcmUuYy0yMTQ1LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMTUyPWludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjE5OC0gKlxubW0vZGFtb24vY29yZS5jOjIxOTk6ICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGVcbm1tL2RhbW9uL2NvcmUuYy0yMjAwLSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI4MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBEQU1PTiYjMzk7cyBTeW1ib2wgRXhwb3J0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIERBTU9OIGNvZGUgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBtbS9kYW1vbi9jb3JlLmNgIGlzbiYjMzk7dCBhIG1vZHVsZSwgaXQmIzM5O3MgYmFrZWQgcmlnaHQgaW50byB0aGUga2VybmVsLiBSaWdodCwgSSByZW1lbWJlciB0aGF0IGBtbS9kYW1vbi9NYWtlZmlsZWAgdXNlcyBgb2JqLXkgOj0gY29yZS5vYCwgd2hpY2ggY29uZmlybXMgaXQuIFNvLCBhcyBsb25nIGFzIGBDT05GSUdfREFNT05gIGlzIG9uLCBpdCYjMzk7cyBhbHdheXMgYnVpbHQtaW4uCgpUaGUgaW1wbGljYXRpb25zIGFyZSB0aGF0LCBpZiBpdCYjMzk7cyBhbGwgYnVpbHQtaW4sIGFuZCBvbmx5IG90aGVyIGJ1aWx0LWluIGNvZGUgdXNlcyBpdCwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgZXhwb3J0ZWQgc3ltYm9scy4gQnV0IGhvbGQgb24sIGlzbiYjMzk7dCBgZGFtb25fc3RhcnRgIHVzZWQgYnkgYG1tL2RhbW9uL3N5c2ZzLmNgLCBhbmQgaXNuJiMzOTt0ICp0aGF0KiBhIG1vZHVsZT8gTGV0JiMzOTtzIHZlcmlmeSB0aGF0LgoKWWVwLCBsb29raW5nIGF0IGBvYmotJChDT05GSUdfREFNT05fU1lTRlMpICYjNDM7PSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub2AsIGFuZCBzZWVpbmcgdGhhdCBgQ09ORklHX0RBTU9OX1NZU0ZTYCBpcyBhIGJvb2xlYW4sIHRoYXQgbWVhbnMgYHN5c2ZzLmNgIGlzIGFsc28gYnVpbHQtaW4uIE9rYXksIG5vIGBFWFBPUlRfU1lNQk9MYCBpcyBuZWVkZWQgdGhlbi4gSSBhbSBjb25maWRlbnQuCgpTbywgZnJvbSB3aGF0IEkmIzM5O3ZlIHNlZW4sIGBkYW1vbl9zdGFydGAsIGBkYW1vbl9jb21taXRfY3R4YCwgYGRhbW9uX25ld19zY2hlbWVgLCBhbmQgYGRhbW9uX3NldF9yZWdpb25zYCBhcmUgYWxsIGdsb2JhbCBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AuIFRoZXNlIHdvdWxkIGJlIGdvb2QgY2FuZGlkYXRlcyBmb3IgaW5jbHVzaW9uIGluIGBGb2N1c1N5bWJvbHNgLgoKSnVzdCB0byBiZSB0aG9yb3VnaCwgSSB3aWxsIGRvdWJsZS1jaGVjayBgZGFtb25fbmV3X3NjaGVtZWAgYW5kIGBkYW1vbl9zZXRfcmVnaW9uc2AgYWdhaW4gdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGJlZm9yZSBnb2luZyBhbnkgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fbmV3X3NjaGVtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9NzE1PXN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRhbW9zX3F1b3RhX2luaXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzI3LVxubW0vZGFtb24vY29yZS5jOjcyODpzdHJ1Y3QgZGFtb3MgKmRhbW9uX25ld19zY2hlbWUoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLFxubW0vZGFtb24vY29yZS5jLTcyOS1cdFx0XHRlbnVtIGRhbW9zX2FjdGlvbiBhY3Rpb24sXG4tLVxubW0vZGFtb24vY29yZS5jPTE1MTc9c3RhdGljIGludCBkYW1vbl9jb21taXRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTUzNS1cdFx0XHRjb250aW51ZTtcbm1tL2RhbW9uL2NvcmUuYzoxNTM2Olx0XHRuZXdfc2NoZW1lID0gZGFtb25fbmV3X3NjaGVtZShcdTAwMjZzcmNfc2NoZW1lLVx1MDAzZXBhdHRlcm4sXG5tbS9kYW1vbi9jb3JlLmMtMTUzNy1cdFx0XHRcdHNyY19zY2hlbWUtXHUwMDNlYWN0aW9uLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE5OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipBc3Nlc3NpbmcgdGhlIFNjb3BlIG9mIGBkYW1vbl9uZXdfc2NoZW1lYCBhbmQgYGRhbW9uX3NldF9yZWdpb25zYCoqCgpBbHJpZ2h0LCBzbyB0aGUgY29kZSBjbGVhcmx5IGRlZmluZXMgYGRhbW9uX25ld19zY2hlbWVgIGFzIGEgZ2xvYmFsIGZ1bmN0aW9uLiBObyBzdXJwcmlzZXMgdGhlcmUuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTm93LCB0aGUgbW9yZSBpbnRlcmVzdGluZyBxdWVzdGlvbiBpcyBhYm91dCBgZGFtb25fc2V0X3JlZ2lvbnNgLiBJcyBpdCBhbHNvIGdsb2JhbCwgb3IgaXMgaXQgYm91bmQgdG8gYSBwYXJ0aWN1bGFyIHN0cnVjdHVyZSwgbWF5YmUgYSBjbGFzcyBvciBuYW1lc3BhY2U/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB3aGVyZSBpdCYjMzk7cyB1c2VkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIERBTU9OIGltcGxlbWVudGF0aW9uLiBJdHMgc2NvcGluZyBjb3VsZCBhZmZlY3QgdGhyZWFkIHNhZmV0eSwgcmVlbnRyYW5jeSwgYW5kIGV2ZW4gaG93IGVhc2lseSB3ZSBjYW4gcmVmYWN0b3IgdGhpcyB0aGluZyBkb3duIHRoZSBsaW5lLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlYmFzZSB0byBjb25maXJtIGl0cyBkZWNsYXJhdGlvbiBhbmQgdXNhZ2UgcGF0dGVybnMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyBzY29wZS4gSXMgdGhpcyBhIHBvaW50IG9mIGNvbnRlbnRpb24gd2l0aCBvdXIgbG9ja2luZyBzY2hlbWU/IEkgbmVlZCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zZXRfcmVnaW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9NDA3PXN0YXRpYyBib29sIGRhbW9zX2NvbXBsZXRlbHlfd2Fsa2VkKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDEwLVx0ICogJiMzOTtcdTAwM2U9JiMzOTsgaW5zdGVhZCBvZiAmIzM5Oz09JiMzOTssIGJlY2F1c2UgdGhlIHJlZ2lvbiBzZXQgb2YgQHQgY291bGQgaGF2ZSBiZWVuXG5tbS9kYW1vbi9jb3JlLmM6NDExOlx0ICogc2hydW5rZW4gYnkgZGFtb25fc2V0X3JlZ2lvbnMoKSBhZnRlciB0aGUgY3Vyc29yIHdhcyBzYXZlZC5cbm1tL2RhbW9uL2NvcmUuYy00MTItXHQgKi9cbi0tXG5tbS9kYW1vbi9jb3JlLmM9NDkxPXN0YXRpYyBpbnQgZGFtb25fZmlsbF9yZWdpb25zX2hvbGVzKHN0cnVjdCBkYW1vbl9yZWdpb24gKmZpcnN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy01MTItLypcbm1tL2RhbW9uL2NvcmUuYzo1MTM6ICogZGFtb25fc2V0X3JlZ2lvbnMoKSAtIFNldCByZWdpb25zIG9mIGEgdGFyZ2V0IGZvciBnaXZlbiBhZGRyZXNzIHJhbmdlcy5cbm1tL2RhbW9uL2NvcmUuYy01MTQtICogQHQ6XHRcdHRoZSBnaXZlbiB0YXJnZXQuXG4tLVxubW0vZGFtb24vY29yZS5jLTUyMy0gKi9cbm1tL2RhbW9uL2NvcmUuYzo1MjQ6aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG5tbS9kYW1vbi9jb3JlLmMtNTI1LVx0XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG4tLVxubW0vZGFtb24vY29yZS5jPTE1NzI9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNjAxLVx0cmFuZ2VzW2kmIzQzOyYjNDM7XS5lbmQgPSBkYW1vbl9sYXN0X3JlZ2lvbihzcmMpLVx1MDAzZWFyLmVuZDtcbm1tL2RhbW9uL2NvcmUuYzoxNjAyOlx0ZXJyID0gZGFtb25fc2V0X3JlZ2lvbnMoZHN0LCByYW5nZXMsIGksIHNyY19taW5fcmVnaW9uX3N6KTtcbm1tL2RhbW9uL2NvcmUuYy0xNjAzLVx0a3ZmcmVlKHJhbmdlcyk7XG4tLVxubW0vZGFtb24vY29yZS5jPTQwNDA9aW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy00MDUxLVx0YWRkcl9yYW5nZS5lbmQgPSAqZW5kO1xubW0vZGFtb24vY29yZS5jOjQwNTI6XHRyZXR1cm4gZGFtb25fc2V0X3JlZ2lvbnModCwgXHUwMDI2YWRkcl9yYW5nZSwgMSwgbWluX3JlZ2lvbl9zeik7XG5tbS9kYW1vbi9jb3JlLmMtNDA1My19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDQxCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gTW9kdWxlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIERBTU9OIGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMgdGhhdCBgZGFtb25fc2V0X3JlZ2lvbnNgIGlzIGRlZmluaXRlbHkgYSBnbG9iYWwgZnVuY3Rpb24uIFdlIG5lZWQgdG8gYmUgYXdhcmUgb2YgaG93IHRoYXQgbWlnaHQgaW1wYWN0IHRoZSBzeXN0ZW0uCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUga2V5IHN5bWJvbHMgcmVsYXRlZCB0byB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBJJiMzOTt2ZSBnb3QgYGRhbW9uX2NvbW1pdF9jdHhgLCBgZGFtb25fc3RhcnRgLCBgZGFtb25fbmV3X3NjaGVtZWAsIGFuZCBvZiBjb3Vyc2UsIGBkYW1vbl9zZXRfcmVnaW9uc2AgYXMgdGhlIGZvY2FsIHBvaW50cyBoZXJlLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBpbnRlcmFjdCBpcyBnb2luZyB0byBiZSBjcnVjaWFsIGZvciBhIGRlZXAgZGl2ZS4KCkFuZCBpdCBsb29rcyBsaWtlIHdlIGhhdmUgYSBzZXQgb2YgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBgREFNT05gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBgREFNT05fU1lTRlNgLCBgREFNT05fUkVDTEFJTWAsIGBEQU1PTl9MUlVfU09SVGAsIGFuZCBgREFNT05fU1RBVGAuIFRoZXNlIGFyZSBvYnZpb3VzbHkgZXNzZW50aWFsIGZvciBjb250cm9sbGluZyB0aGUgYmVoYXZpb3Igb2YgdGhlIG1vZHVsZS4KCkkgc2hvdWxkIHByb2JhYmx5IGRvIGEgcXVpY2sgc2NhbiB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50LiBJdCYjMzk7cyBlYXN5IHRvIG92ZXJsb29rIHRoaW5ncyBpbiB0aGVzZSBraW5kcyBvZiBzZXR1cHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTQtXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTYtXHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTQtXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWctMTYtXHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0yNS1cbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctMjctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNDYtXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNTUtXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcbm1tL2RhbW9uL0tjb25maWctNjktXHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNzUtXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctODctXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXG5tbS9kYW1vbi9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctOTktXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcbm1tL2RhbW9uL0tjb25maWctMTAxLVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMDctXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZy0xMDktXHRib29sIFwmIzM0O0J1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxOTkKCQkJCQkJCW91dHB1dDogMjA4CgkJCQkJCQl0aG91Z2h0czogMTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqREFNT04gRnV6emluZyBTdHJhdGVneTogRXhwYW5kaW5nIHRoZSBTY29wZSoqCgpBbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaXMgZXhwYW5kaW5nIHRvIGluY2x1ZGUgYERBTU9OX0RFQlVHX1NBTklUWWAgYW5kIGBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVGAuIE1ha2VzIHNlbnNlLiBUaGlzIGlzIGFib3V0IGJlaW5nIGNvbXByZWhlbnNpdmUgaW4gdGhlIGZ1enppbmcgc3RyYXRlZ3kgZm9yIERBTU9OLgoKVGhlIGNvcmUgb2YgdGhlIG1hdHRlciBpcyB0aGF0IHRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgREFNT04mIzM5O3MgYmVoYXZpb3IgaW4gaG93IGl0IGhhbmRsZXMgREFNT1MgcXVvdGFzIOKAkyBzcGVjaWZpY2FsbHksIHRyYWNraW5nIHdoZXJlIHRoZSB3YWxrZXIgaXMgd2l0aGluIHRoZXNlIHF1b3Rhcy4gVGhleSYjMzk7cmUgcmVuYW1pbmcgdmFyaWFibGVzIGFuZCBpbnRyb2R1Y2luZyBuZXcgY29udHJvbCBmbG93IGZvciBza2lwcGluZyB3YWxrZWQgcmVnaW9ucyBhbmQgcm90YXRpbmcgdGFyZ2V0cy4gVGhhdCYjMzk7cyBhIGNvcmUgbW9kaWZpY2F0aW9uIG9mIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCYjMzk7cyBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgc3lzZnMgYW5kIGtlcm5lbCBBUElzLCBzbyBpdCAqYWJzb2x1dGVseSogd2FycmFudHMgZnV6emluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIHBlcmZvcm1hbmNlIHR3ZWFrLiBJZiBpdCYjMzk7cyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlLCBhbmQgY2hhbmdlcyBjb3JlIERBTU9OIGJlaGF2aW91ciwgdGhlbiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgc3lzdGVtIGlzIHN0YWJsZS4KCkkmIzM5O20gdGhpbmtpbmcsIGZvciBzaW1wbGljaXR5LCB3ZSYjMzk7bGwgbGFiZWwgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSBhcyBgc2V0LXJlc3VsdHNgLiBJdCYjMzk7cyBhIGNsZWFyLCBjb25jaXNlIHdheSB0byByZWZlciB0byB0aGUgZnV6emluZyBmb2N1cy4gSSBrbm93IHdoYXQmIzM5O3MgZ29pbmcgb24gbm93OyB0aGlzIGlzIG1vcmUgdGhhbiBqdXN0IGEgbWlub3IgdHdlYWsuIEl0JiMzOTtzIGFib3V0IGVuc3VyaW5nIERBTU9OLCBhdCB0aGlzIHJldmlzZWQgbGV2ZWwsIGlzIHJvYnVzdCBhbmQgc2VjdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fUkVDTEFJTSYjMzQ7LAogICAgJiMzNDtEQU1PTl9MUlVfU09SVCYjMzQ7LAogICAgJiMzNDtEQU1PTl9TVEFUJiMzNDssCiAgICAmIzM0O0RBTU9OX0RFQlVHX1NBTklUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX2NvbW1pdF9jdHgmIzM0OywKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAgICYjMzQ7ZGFtb25fbmV3X3NjaGVtZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9zZXRfcmVnaW9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBsb2dpYyBvZiBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcikgdG8gdHJhY2sgdGhlIHdhbGtpbmcgcG9zaXRpb24gb2YgREFNT1MgKERBTU9OLWJhc2VkIE9wZXJhdGlvbiBTY2hlbWVzKSBxdW90YXMuIEl0IHJlbmFtZXMgdGhlIHRyYWNraW5nIHZhcmlhYmxlcyBhbmQgaW50cm9kdWNlcyBuZXcgbG9naWMgdG8gaGFuZGxlIHNraXBwaW5nIHdhbGtlZCByZWdpb25zIGFuZCByb3RhdGluZyB0YXJnZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgc3lzZnMgb3Iga2VybmVsIEFQSXMsIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9SRUNMQUlNJiMzNDssCiAgICAmIzM0O0RBTU9OX0xSVV9TT1JUJiMzNDssCiAgICAmIzM0O0RBTU9OX1NUQVQmIzM0OywKICAgICYjMzQ7REFNT05fREVCVUdfU0FOSVRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fY29tbWl0X2N0eCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zdGFydCYjMzQ7LAogICAgJiMzNDtkYW1vbl9uZXdfc2NoZW1lJiMzNDssCiAgICAmIzM0O2RhbW9uX3NldF9yZWdpb25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSB0byB0cmFjayB0aGUgd2Fsa2luZyBwb3NpdGlvbiBvZiBEQU1PUyAoREFNT04tYmFzZWQgT3BlcmF0aW9uIFNjaGVtZXMpIHF1b3Rhcy4gSXQgcmVuYW1lcyB0aGUgdHJhY2tpbmcgdmFyaWFibGVzIGFuZCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBoYW5kbGUgc2tpcHBpbmcgd2Fsa2VkIHJlZ2lvbnMgYW5kIHJvdGF0aW5nIHRhcmdldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBzeXNmcyBvciBrZXJuZWwgQVBJcywgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6MDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIHRyYWNraW5nIG9mIHRoZSBEQU1PUyAoREFNT04tYmFzZWQgT3BlcmF0aW9uIFNjaGVtZXMpIHF1b3RhIHdhbGsgcG9zaXRpb24sIHJlcGxhY2luZyBgY2hhcmdlX3RhcmdldF9mcm9tYCBhbmQgYGNoYXJnZV9hZGRyX2Zyb21gIHdpdGggYHdhbGtfdGFyZ2V0X2Zyb21gIGFuZCBgd2Fsa19hZGRyX2Zyb21gLiBUaGVzZSBuZXcgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIE5VTEwgYW5kIDAgaW4gYGRhbW9zX3F1b3RhX2luaXQoKWAuIFRoZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGludGVybmFsIGtlcm5lbCBjb250cm9sIGZsb3cgYW5kIHJlZ2lvbiBpdGVyYXRpb24gbG9naWMuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDdiZjVjY2YzYWY5ZDIzZGE1MDhiNTMzMzkwYTY3MzQ0ZWE5NzI2NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDEzOjM5OjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCmluZGV4IDBjOGI3ZGRlZjlhYmIuLjVlMDc1NWViYWQ3NTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKQEAgLTI5Niw4ICYjNDM7Mjk2LDEwIEBAIHN0cnVjdCBkYW1vc19xdW90YSB7CiAJLyogRm9yIGNoYXJnaW5nIHRoZSBxdW90YSAqLwogCXVuc2lnbmVkIGxvbmcgY2hhcmdlZF9zejsKIAl1bnNpZ25lZCBsb25nIGNoYXJnZWRfZnJvbTsKLQlzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpjaGFyZ2VfdGFyZ2V0X2Zyb207Ci0JdW5zaWduZWQgbG9uZyBjaGFyZ2VfYWRkcl9mcm9tOwomIzQzOwomIzQzOwkvKiBGb3IgdHJhY2tpbmcgdGhlIERBTU9TIHdhbGsgcG9zaXRpb24gKHJvdGF0aW5nIGN1cnNvcikgKi8KJiM0MzsJc3RydWN0IGRhbW9uX3RhcmdldCAqd2Fsa190YXJnZXRfZnJvbTsKJiM0MzsJdW5zaWduZWQgbG9uZyB3YWxrX2FkZHJfZnJvbTsKIAogCS8qIEZvciBwcmlvcml0aXphdGlvbiAqLwogCXVuc2lnbmVkIGludCBtaW5fc2NvcmU7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggNjQ0ZGFmNWExNjU2MC4uYmJkYjUzMDUxM2ExOCAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtNDA0LDYgJiM0Mzs0MDQsNTIgQEAgc3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKIAlyZXR1cm4gbGlzdF9pc19sYXN0KCZhbXA7ci0mZ3Q7bGlzdCwgJmFtcDt0LSZndDtyZWdpb25zX2xpc3QpOwogfQogCiYjNDM7c3RhdGljIGJvb2wgZGFtb3NfY29tcGxldGVseV93YWxrZWQoc3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogJiMzOTsmZ3Q7PSYjMzk7IGluc3RlYWQgb2YgJiMzOTs9PSYjMzk7LCBiZWNhdXNlIHRoZSByZWdpb24gc2V0IG9mIEB0IGNvdWxkIGhhdmUgYmVlbgomIzQzOwkgKiBzaHJ1bmtlbiBieSBkYW1vbl9zZXRfcmVnaW9ucygpIGFmdGVyIHRoZSBjdXJzb3Igd2FzIHNhdmVkLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIHMtJmd0O3F1b3RhLndhbGtfdGFyZ2V0X2Zyb20gPT0gdCAmYW1wOyZhbXA7CiYjNDM7CQlzLSZndDtxdW90YS53YWxrX2FkZHJfZnJvbSAmZ3Q7PSBkYW1vbl9sYXN0X3JlZ2lvbih0KS0mZ3Q7YXIuZW5kOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbmV4dF92YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKJiM0MzsJCXN0cnVjdCBkYW1vbl9jdHggKmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJmFtcDtjLSZndDthZGFwdGl2ZV90YXJnZXRzOwomIzQzOwlzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpzdGFydCA9IHQ7CiYjNDM7CXN0cnVjdCBkYW1vbl90YXJnZXQgKm5leHQgPSB0OwomIzQzOwomIzQzOwl3aGlsZSAodHJ1ZSkgewomIzQzOwkJaWYgKGxpc3RfaXNfbGFzdCgmYW1wO25leHQtJmd0O2xpc3QsIGhlYWQpKQomIzQzOwkJCW5leHQgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBkYW1vbl90YXJnZXQsIGxpc3QpOwomIzQzOwkJZWxzZQomIzQzOwkJCW5leHQgPSBsaXN0X25leHRfZW50cnkobmV4dCwgbGlzdCk7CiYjNDM7CiYjNDM7CQlpZiAoIWMtJmd0O29wcy50YXJnZXRfdmFsaWQgfHwgYy0mZ3Q7b3BzLnRhcmdldF92YWxpZChuZXh0KSkKJiM0MzsJCQlyZXR1cm4gbmV4dDsKJiM0MzsKJiM0MzsJCWlmIChuZXh0ID09IHN0YXJ0KQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkYW1vc19yZXBsYWNlX2ludmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsCiYjNDM7CQlzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9zICpzOwomIzQzOwomIzQzOwlkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykgewomIzQzOwkJaWYgKHMtJmd0O3F1b3RhLndhbGtfdGFyZ2V0X2Zyb20gIT0gdCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXMtJmd0O3F1b3RhLndhbGtfdGFyZ2V0X2Zyb20gPSBkYW1vbl9uZXh0X3ZhbGlkX3RhcmdldCh0LCBjKTsKJiM0MzsJCXMtJmd0O3F1b3RhLndhbGtfYWRkcl9mcm9tID0gMDsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qKgogICogZGFtb25fcHJvYmVfaGl0c193c3VtKCkgLSBSZXR1cm5zIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIG9mIGEgcmVnaW9uLgogICogQHI6CQlyZWdpb24gdG8gZ2V0IHRoZSB3ZWlnaHRlZCBzdW0gb2YuCkBAIC02NzMsOCAmIzQzOzcxOSw4IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRhbW9zX3F1b3RhX2luaXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSkKIAlxdW90YS0mZ3Q7dG90YWxfY2hhcmdlZF9ucyA9IDA7CiAJcXVvdGEtJmd0O2NoYXJnZWRfc3ogPSAwOwogCXF1b3RhLSZndDtjaGFyZ2VkX2Zyb20gPSAwOwotCXF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMOwotCXF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tID0gMDsKJiM0MzsJcXVvdGEtJmd0O3dhbGtfdGFyZ2V0X2Zyb20gPSBOVUxMOwomIzQzOwlxdW90YS0mZ3Q7d2Fsa19hZGRyX2Zyb20gPSAwOwogCXF1b3RhLSZndDtlc3pfYnAgPSAwOwogCXJldHVybiBxdW90YTsKIH0KQEAgLTE2MjgsOSAmIzQzOzE2NzQsOSBAQCBzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRzKAogCiAJCQlkYW1vbl9kZXN0cm95X3RhcmdldChkc3RfdGFyZ2V0LCBkc3QpOwogCQkJZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGRzdCkgewotCQkJCWlmIChzLSZndDtxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPT0gZHN0X3RhcmdldCkgewotCQkJCQlzLSZndDtxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMOwotCQkJCQlzLSZndDtxdW90YS5jaGFyZ2VfYWRkcl9mcm9tID0gMDsKJiM0MzsJCQkJaWYgKHMtJmd0O3F1b3RhLndhbGtfdGFyZ2V0X2Zyb20gPT0gZHN0X3RhcmdldCkgewomIzQzOwkJCQkJcy0mZ3Q7cXVvdGEud2Fsa190YXJnZXRfZnJvbSA9IE5VTEw7CiYjNDM7CQkJCQlzLSZndDtxdW90YS53YWxrX2FkZHJfZnJvbSA9IDA7CiAJCQkJfQogCQkJfQogCQl9CkBAIC0yMzEyLDY0ICYjNDM7MjM1OCw1NCBAQCBzdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKIH0KIAogLyoKLSAqIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oKSAtIENoZWNrIGlmIHRoZSBnaXZlbiByZWdpb24gb3Igc3RhcnRpbmcgcGFydCBvZgotICogaXQgaXMgYWxyZWFkeSBjaGFyZ2VkIGZvciB0aGUgREFNT1MgcXVvdGEuCiYjNDM7ICogZGFtb3Nfc2tpcF93YWxrZWRfcmVnaW9uKCkgLSBDaGVjayBpZiB0aGUgZ2l2ZW4gcmVnaW9uIG9yIHN0YXJ0aW5nIHBhcnQgb2YKJiM0MzsgKiBpdCBpcyBhbHJlYWR5IHdhbGtlZCBmb3IgdGhlIERBTU9TIHF1b3RhLgogICogQHQ6CVRoZSB0YXJnZXQgb2YgdGhlIHJlZ2lvbi4KLSAqIEBycDoJVGhlIHBvaW50ZXIgdG8gdGhlIHJlZ2lvbi4KJiM0MzsgKiBAcjoJVGhlIHBvaW50ZXIgdG8gdGhlIHJlZ2lvbi4KICAqIEBzOglUaGUgc2NoZW1lIHRvIGJlIGFwcGxpZWQuCiAgKiBAbWluX3JlZ2lvbl9zejoJbWluaW11bSByZWdpb24gc2l6ZS4KICAqCi0gKiBJZiBhIHF1b3RhIG9mIGEgc2NoZW1lIGhhcyBleGNlZWRlZCBpbiBhIHF1b3RhIGNoYXJnZSB3aW5kb3csIHRoZSBzY2hlbWUmIzM5O3MKLSAqIGFjdGlvbiB3b3VsZCBhcHBsaWVkIHRvIG9ubHkgYSBwYXJ0IG9mIHRoZSB0YXJnZXQgYWNjZXNzIHBhdHRlcm4gZnVsZmlsbGluZwotICogcmVnaW9ucy4gIFRvIGF2b2lkIGFwcGx5aW5nIHRoZSBzY2hlbWUgYWN0aW9uIHRvIG9ubHkgYWxyZWFkeSBhcHBsaWVkCi0gKiByZWdpb25zLCBEQU1PTiBza2lwcyBhcHBseWluZyB0aGUgc2NoZW1lIGFjdGlvbiB0byB0aGUgcmVnaW9ucyB0aGF0IGNoYXJnZWQKLSAqIGluIHRoZSBwcmV2aW91cyBjaGFyZ2Ugd2luZG93LgotICoKLSAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGEgZ2l2ZW4gcmVnaW9uIHNob3VsZCBiZSBza2lwcGVkIG9yIG5vdCBmb3IgdGhlCi0gKiByZWFzb24uICBJZiBvbmx5IHRoZSBzdGFydGluZyBwYXJ0IG9mIHRoZSByZWdpb24gaGFzIHByZXZpb3VzbHkgY2hhcmdlZCwKLSAqIHRoaXMgZnVuY3Rpb24gc3BsaXRzIHRoZSByZWdpb24gaW50byB0d28gc28gdGhhdCB0aGUgc2Vjb25kIG9uZSBjb3ZlcnMgdGhlCi0gKiBhcmVhIHRoYXQgbm90IGNoYXJnZWQgaW4gdGhlIHByZXZpb3VzIGNoYXJnZSB3aWRub3csIGFuZCByZXR1cm4gdHJ1ZS4gIFRoZQotICogY2FsbGVyIGNhbiBzZWUgdGhlIHNlY29uZCBvbmUgb24gdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSByZWdpb24gd2Fsay4KLSAqIE5vdGUgdGhhdCB0aGlzIG1lYW5zIHRoZSBjYWxsZXIgc2hvdWxkIHVzZSBkYW1vbl9mb3JfZWFjaF9yZWdpb24oKSBpbnN0ZWFkCi0gKiBvZiBkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZSgpLiAgSWYgZGFtb25fZm9yX2VhY2hfcmVnaW9uX3NhZmUoKSBpcyB1c2VkLAotICogdGhlIHNlY29uZCByZWdpb24gd2lsbCBqdXN0IGJlIGlnbm9yZWQuCiYjNDM7ICogV2hlbiBhIHF1b3RhIGlzIGNvbmZpZ3VyZWQsIERBTU9OIHJlY29yZHMgaG93IGZhciBpdCBoYXMgd2Fsa2VkIHNvIHRoYXQKJiM0MzsgKiBzdWJzZXF1ZW50IHF1b3RhIHdpbmRvd3MgY29udGludWUgZnJvbSB0aGF0IHBvaW50IGluc3RlYWQgb2YgcmUtYXBwbHlpbmcgdGhlCiYjNDM7ICogc2FtZSByZWdpb25zLiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgZm9yIHJlZ2lvbnMgdGhhdCBhcmUgYmVmb3JlIHRoZQomIzQzOyAqIHJlY29yZGVkIGN1cnNvciBhbmQgdGhlcmVmb3JlIHNob3VsZCBiZSBza2lwcGVkLiAgSWYgb25seSB0aGUgc3RhcnRpbmcgcGFydAomIzQzOyAqIGhhcyBiZWVuIHdhbGtlZCwgdGhlIHJlZ2lvbiBpcyBzcGxpdCBzbyB0aGF0IHRoZSByZW1haW5pbmcgcGFydCBjYW4gYmUKJiM0MzsgKiB2aXNpdGVkLgogICoKICAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcmVnaW9uIHNob3VsZCBiZSBza2lwcGVkLCBmYWxzZSBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBib29sIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKJiM0MztzdGF0aWMgYm9vbCBkYW1vc19za2lwX3dhbGtlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKIAkJc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLAogCQl1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opCiB7CiAJc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9ICZhbXA7cy0mZ3Q7cXVvdGE7CiAJdW5zaWduZWQgbG9uZyBzel90b19za2lwOwogCi0JLyogU2tpcCBwcmV2aW91c2x5IGNoYXJnZWQgcmVnaW9ucyAqLwotCWlmIChxdW90YS0mZ3Q7Y2hhcmdlX3RhcmdldF9mcm9tKSB7Ci0JCWlmICh0ICE9IHF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb20pCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJaWYgKHIgPT0gZGFtb25fbGFzdF9yZWdpb24odCkpIHsKLQkJCXF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMOwotCQkJcXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20gPSAwOwomIzQzOwlpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIFNraXAgcHJldmlvdXNseSB3YWxrZWQgcmVnaW9ucyAqLwomIzQzOwlpZiAocXVvdGEtJmd0O3dhbGtfdGFyZ2V0X2Zyb20pIHsKJiM0MzsJCWlmICh0ICE9IHF1b3RhLSZndDt3YWxrX3RhcmdldF9mcm9tKQogCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJaWYgKHF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tICZhbXA7JmFtcDsKLQkJCQlyLSZndDthci5lbmQgJmx0Oz0gcXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20pCiYjNDM7CQlpZiAocXVvdGEtJmd0O3dhbGtfYWRkcl9mcm9tICZhbXA7JmFtcDsKJiM0MzsJCQkJci0mZ3Q7YXIuZW5kICZsdDs9IHF1b3RhLSZndDt3YWxrX2FkZHJfZnJvbSkKIAkJCXJldHVybiB0cnVlOwogCi0JCWlmIChxdW90YS0mZ3Q7Y2hhcmdlX2FkZHJfZnJvbSAmYW1wOyZhbXA7IHItJmd0O2FyLnN0YXJ0ICZsdDsKLQkJCQlxdW90YS0mZ3Q7Y2hhcmdlX2FkZHJfZnJvbSkgewotCQkJc3pfdG9fc2tpcCA9IEFMSUdOX0RPV04ocXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20gLQomIzQzOwkJaWYgKHF1b3RhLSZndDt3YWxrX2FkZHJfZnJvbSAmYW1wOyZhbXA7IHItJmd0O2FyLnN0YXJ0ICZsdDsKJiM0MzsJCQkJcXVvdGEtJmd0O3dhbGtfYWRkcl9mcm9tKSB7CiYjNDM7CQkJc3pfdG9fc2tpcCA9IEFMSUdOX0RPV04ocXVvdGEtJmd0O3dhbGtfYWRkcl9mcm9tIC0KIAkJCQkJci0mZ3Q7YXIuc3RhcnQsIG1pbl9yZWdpb25fc3opOwogCQkJaWYgKCFzel90b19za2lwKSB7Ci0JCQkJaWYgKGRhbW9uX3N6X3JlZ2lvbihyKSAmbHQ7PSBtaW5fcmVnaW9uX3N6KQomIzQzOwkJCQlpZiAoZGFtb25fc3pfcmVnaW9uKHIpICZsdDs9IG1pbl9yZWdpb25fc3opIHsKJiM0MzsJCQkJCXF1b3RhLSZndDt3YWxrX2FkZHJfZnJvbSA9IHItJmd0O2FyLmVuZDsKIAkJCQkJcmV0dXJuIHRydWU7CiYjNDM7CQkJCX0KIAkJCQlzel90b19za2lwID0gbWluX3JlZ2lvbl9zejsKIAkJCX0KIAkJCWRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBzel90b19za2lwKTsKIAkJCXJldHVybiB0cnVlOwogCQl9Ci0JCXF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMOwotCQlxdW90YS0mZ3Q7Y2hhcmdlX2FkZHJfZnJvbSA9IDA7CiAJfQogCXJldHVybiBmYWxzZTsKIH0KQEAgLTI2MjcsMTAgJiM0MzsyNjYzLDYgQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJCXF1b3RhLSZndDt0b3RhbF9jaGFyZ2VkX25zICYjNDM7PSB0aW1lc3BlYzY0X3RvX25zKCZhbXA7ZW5kKSAtCiAJCQl0aW1lc3BlYzY0X3RvX25zKCZhbXA7YmVnaW4pOwogCQlkYW1vc19jaGFyZ2VfcXVvdGEocXVvdGEsIHN6LCBzel9hcHBsaWVkKTsKLQkJaWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtJmd0O21pbl9yZWdpb25fc3opKSB7Ci0JCQlxdW90YS0mZ3Q7Y2hhcmdlX3RhcmdldF9mcm9tID0gdDsKLQkJCXF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tID0gci0mZ3Q7YXIuZW5kOwotCQl9CiAJfQogCWlmIChzLSZndDthY3Rpb24gIT0gREFNT1NfU1RBVCkKIAkJci0mZ3Q7YWdlID0gMDsKQEAgLTI2MzksOCAmIzQzOzI2NzEsMTkgQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJZGFtb3NfdXBkYXRlX3N0YXQocywgc3osIHN6X2FwcGxpZWQsIHN6X29wc19maWx0ZXJfcGFzc2VkKTsKIH0KIAotc3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLAotCQkJCSAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiYjNDM7c3RhdGljIHZvaWQgZGFtb3Nfd2Fsa19tYXliZV9yb3RhdGUoc3RydWN0IGRhbW9uX2N0eCAqYywKJiM0MzsJCQkJICAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgZGFtb3MgKnMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gJmFtcDtzLSZndDtxdW90YTsKJiM0MzsKJiM0MzsJaWYgKGRhbW9zX2NvbXBsZXRlbHlfd2Fsa2VkKHMsIHQpKSB7CiYjNDM7CQlxdW90YS0mZ3Q7d2Fsa190YXJnZXRfZnJvbSA9IGRhbW9uX25leHRfdmFsaWRfdGFyZ2V0KHQsIGMpOwomIzQzOwkJcXVvdGEtJmd0O3dhbGtfYWRkcl9mcm9tID0gMDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJCQkJICAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcikKIHsKIAlzdHJ1Y3QgZGFtb3MgKnM7CkBAIC0yNjU4LDE4ICYjNDM7MjcwMSwzMSBAQCBzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsCiAJCWlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLSZndDttaW5fcmVnaW9uX3N6KSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHQsIHIsIHMsIGMtJmd0O21pbl9yZWdpb25fc3opKQotCQkJY29udGludWU7Ci0KIAkJaWYgKHMtJmd0O21heF9ucl9zbmFwc2hvdHMgJmFtcDsmYW1wOwogCQkJCXMtJmd0O21heF9ucl9zbmFwc2hvdHMgJmx0Oz0gcy0mZ3Q7c3RhdC5ucl9zbmFwc2hvdHMpCiAJCQljb250aW51ZTsKIAomIzQzOwkJLyoKJiM0MzsJCSAqIFNraXAgcmVnaW9ucyBiZWZvcmUgdGhlIGN1cnNvci4gIElmIHRoZSBza2lwIG1ha2VzIHRoZSBjdXJzb3IKJiM0MzsJCSAqIHJlYWNoIHRoZSBlbmQgb2YgdGhpcyB0YXJnZXQsIHJvdGF0ZSB0byB0aGUgbmV4dCB2YWxpZCB0YXJnZXQKJiM0MzsJCSAqIGJlZm9yZSBjb250aW51aW5nIHdpdGggdGhlIG5leHQgcmVnaW9uL3NjaGVtZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbih0LCByLCBzLCBjLSZndDttaW5fcmVnaW9uX3N6KSkgewomIzQzOwkJCWRhbW9zX3dhbGtfbWF5YmVfcm90YXRlKGMsIHQsIHMpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwogCQlpZiAoZGFtb3NfdmFsaWRfdGFyZ2V0KGMsIHIsIHMpKQogCQkJZGFtb3NfYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMpOwogCiAJCWlmIChkYW1vbl9pc19sYXN0X3JlZ2lvbihyLCB0KSkKIAkJCXMtJmd0O3N0YXQubnJfc25hcHNob3RzJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCWlmIChkYW1vc19xdW90YV9pc19zZXQocXVvdGEpKSB7CiYjNDM7CQkJcXVvdGEtJmd0O3dhbGtfdGFyZ2V0X2Zyb20gPSB0OwomIzQzOwkJCXF1b3RhLSZndDt3YWxrX2FkZHJfZnJvbSA9IHItJmd0O2FyLmVuZDsKJiM0MzsJCQlkYW1vc193YWxrX21heWJlX3JvdGF0ZShjLCB0LCBzKTsKJiM0MzsJCX0KIAl9CiB9CiAKQEAgLTMyNDEsOCAmIzQzOzMyOTcsMTAgQEAgc3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpCiAJbWF4X3JlZ2lvbl9zeiA9IGRhbW9uX3JlZ2lvbl9zel9saW1pdChjKTsKIAltdXRleF9sb2NrKCZhbXA7Yy0mZ3Q7d2Fsa19jb250cm9sX2xvY2spOwogCWRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7Ci0JCWlmIChjLSZndDtvcHMudGFyZ2V0X3ZhbGlkICZhbXA7JmFtcDsgYy0mZ3Q7b3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZSkKJiM0MzsJCWlmIChjLSZndDtvcHMudGFyZ2V0X3ZhbGlkICZhbXA7JmFtcDsgYy0mZ3Q7b3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZSkgewomIzQzOwkJCWRhbW9zX3JlcGxhY2VfaW52YWxpZF90YXJnZXQoYywgdCk7CiAJCQljb250aW51ZTsKJiM0MzsJCX0KIAkJZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE3OAoJCQkJCQkJb3V0cHV0OiAxODMKCQkJCQkJCXRob3VnaHRzOiA4NTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gUGF0Y2ggUmV2aWV3OiBObyBLTVNBTiBOZWVkZWQqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIERhdGEgQWNjZXNzIE1vbml0b3IgKERBTU9OKSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgREFNT04tYmFzZWQgT3BlcmF0aW9uIFNjaGVtZXMgKERBTU9TKSBwYXJ0LiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIHRocnVzdCBpcyByZWZhY3RvcmluZyBob3cgREFNT1Mga2VlcHMgdHJhY2sgb2YgaXRzIHF1b3RhIHdhbGsgcG9zaXRpb24gZHVyaW5nIGl0cyBhbmFseXNpcy4gVGhlIGtleSBjaGFuZ2UgaXMgdGhlIHJlbmFtaW5nIG9mIGBjaGFyZ2VfdGFyZ2V0X2Zyb21gIGFuZCBgY2hhcmdlX2FkZHJfZnJvbWAgdG8gYHdhbGtfdGFyZ2V0X2Zyb21gIGFuZCBgd2Fsa19hZGRyX2Zyb21gLCBhbG9uZyB3aXRoIGEgZmV3IHN1cHBvcnRpbmcgZnVuY3Rpb25zIGxpa2UgYGRhbW9zX2NvbXBsZXRlbHlfd2Fsa2VkYCwgYGRhbW9uX25leHRfdmFsaWRfdGFyZ2V0YCwgYGRhbW9zX3JlcGxhY2VfaW52YWxpZF90YXJnZXRgLCBgZGFtb3Nfc2tpcF93YWxrZWRfcmVnaW9uYCwgYW5kIGBkYW1vc193YWxrX21heWJlX3JvdGF0ZWAuCgpMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZ1cnRoZXIuIFRoZSBgc3RydWN0IGRhbW9zX3F1b3RhYCBub3cgaGFzIHRoZXNlIG5ldyBgd2Fsa19gIGZpZWxkcywgYW5kIHRoZSBgZGFtb3NfcXVvdGFfaW5pdGAgZnVuY3Rpb24gY29ycmVjdGx5IGluaXRpYWxpemVzIHRoZW0gdG8gYE5VTExgIGFuZCBgMGAsIHJlc3BlY3RpdmVseS4gR29vZC4gSSBhbHNvIHNlZSB0aGF0IGBkYW1vbl9jb21taXRfdGFyZ2V0c2AgaXMgdXBkYXRlZCB0byByZXNldCB0aGVtIGlmIHRoZSB0YXJnZXQgaXMgZGVzdHJveWVkLCBhbmQgYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbmAgYW5kIHVwZGF0ZWQgYXMgd2VsbC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgb2xkIHZhbHVlcyBhcmVuJiMzOTt0IHVzZWQsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBkZXNpZ24gY2hhbmdlcyBwcmV2ZW50IHRoaXMuIGBkYW1vc19hcHBseV9zY2hlbWVgIG5vIGxvbmdlciBzZXRzIHRoZSBvbGQgYGNoYXJnZV9gIGZpZWxkcywgYW5kIGBkYW1vbl9kb19hcHBseV9zY2hlbWVzYCBub3cgc2V0cyB0aGUgbmV3IGB3YWxrX2AgZmllbGRzIGFuZCBjYWxscyBgZGFtb3Nfd2Fsa19tYXliZV9yb3RhdGVgLiBDcnVjaWFsbHksIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGNhbGxzIGBkYW1vc19yZXBsYWNlX2ludmFsaWRfdGFyZ2V0YCBpZiBhIHRhcmdldCBpcyBpbnZhbGlkLCBzbyB0aGlzIHNob3VsZCBwcmV2ZW50IHRoZSB1c2Ugb2YgaW52YWxpZCB0YXJnZXRzLgoKTXkgaW5pdGlhbCBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeS4gQXJlIHdlIGNyZWF0aW5nIG9wcG9ydHVuaXRpZXMgZm9yIEtBU0FOIHRvIG1pc3MgYSBidWcgaGVyZT8gTGV0JiMzOTtzIGJlIGV4cGxpY2l0LCB0aGVzZSBuZXcgZmllbGRzIGFyZSBpbml0aWFsaXplZCBpbiBgZGFtb3NfcXVvdGFfaW5pdGAgdG8gTlVMTCBhbmQgMCwgd2hpY2ggYXJlIHZhbGlkIHZhbHVlcyBmb3IgcG9pbnRlcnMgYW5kIHVuc2lnbmVkIGxvbmdzLiBXZSYjMzk7cmUgbm90IGFsbG9jYXRpbmcgYW55IG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbmQgc2VuZGluZyB0aGVtIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIGFueSBvZiB0aGUgdXNlci1mYWNpbmcgaW50ZXJmYWNlcyBsaWtlIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rLCBvciBpb2N0bC4gVGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW50ZXJuYWwgdG8gdGhlIERBTU9OIGtlcm5lbCBzdGF0ZSBtYWNoaW5lLCB3aGljaCBpcyBnb29kLiBUaGUgcG90ZW50aWFsIGJ1Z3MgYXJlIGxpbWl0ZWQgdG8gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zIGlmLCBzYXksIGB3YWxrX3RhcmdldF9mcm9tYCBwb2ludHMgdG8gYSBmcmVlZCB0YXJnZXQuIEJ1dCBgZGFtb25fY29tbWl0X3RhcmdldHNgIGFwcGVhcnMgdG8gcHJldmVudCB0aGlzIGFuZCBgZGFtb3NfcmVwbGFjZV9pbnZhbGlkX3RhcmdldGAgYXBwZWFycyB0byBoYW5kbGUgaW52YWxpZCB0YXJnZXRzLiBLQVNBTiBzaG91bGQgYmUgYWJsZSB0byBjYXRjaCBhbGwgb2YgdGhlc2UgdHlwZXMgb2YgaXNzdWVzLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB3aGV0aGVyIGBzdHJ1Y3QgZGFtb3NfcXVvdGFgIG9yIGBzdHJ1Y3QgZGFtb3NgIGl0c2VsZiBpcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIERBTU9OIGV4cG9zZXMgc3RhdHMgdmlhIHN5c2ZzLCBidXQgaXQgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGR1bXAgdGhlIHJhdyBzdHJ1Y3QgdG8gdXNlcnNwYWNlLiBFdmVuIGlmIGl0IGRpZCwgdGhlIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQsIHNvIHRoYXQgd291bGRuJiMzOTt0IGJlIGEgcHJvYmxlbS4KClRoZXJlZm9yZSwgYWZ0ZXIgdGhpcyByZXZpZXcsIGl0JiMzOTtzIG15IGp1ZGdtZW50IHRoYXQgdGhpcyBwYXRjaCBkb2VzICpub3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCB3YXJyYW50IEtNU0FOLiBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBwb3RlbnRpYWwgcHJvYmxlbXMuIExldCYjMzk7cyBkb3VibGUgY2hlY2sgYGRhbW9zX3F1b3RhX2luaXRgIGFzIHdlbGw6CgpgYGBjCnN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRhbW9zX3F1b3RhX2luaXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSkKewoJcXVvdGEtJmd0O21zID0gMDsKCXF1b3RhLSZndDtzeiA9IDA7CglxdW90YS0mZ3Q7cmVzZXRfaW50ZXJ2YWwgPSAwOwoJcXVvdGEtJmd0O3dlaWdodF9zeiA9IDA7CglxdW90YS0mZ3Q7d2VpZ2h0X25yX2FjY2Vzc2VzID0gMDsKCXF1b3RhLSZndDt3ZWlnaHRfYWdlID0gMDsKCXF1b3RhLSZndDt0b3RhbF9jaGFyZ2VkX3N6ID0gMDsKCXF1b3RhLSZndDt0b3RhbF9jaGFyZ2VkX25zID0gMDsKCXF1b3RhLSZndDtjaGFyZ2VkX3N6ID0gMDsKCXF1b3RhLSZndDtjaGFyZ2VkX2Zyb20gPSAwOwoJcXVvdGEtJmd0O3dhbGtfdGFyZ2V0X2Zyb20gPSBOVUxMOwoJcXVvdGEtJmd0O3dhbGtfYWRkcl9mcm9tID0gMDsKCXF1b3RhLSZndDtlc3pfYnAgPSAwOwoJcmV0dXJuIHF1b3RhOwp9CmBgYAoKWWVwLCBldmVyeXRoaW5nIGlzIGV4cGxpY2l0bHkgemVyb2VkIG91dCBvciBOVUxMZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBoZXJlLiBTbywgSSB3aWxsIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCB0cmFja2luZyBvZiB0aGUgREFNT1MgKERBTU9OLWJhc2VkIE9wZXJhdGlvbiBTY2hlbWVzKSBxdW90YSB3YWxrIHBvc2l0aW9uLCByZXBsYWNpbmcgYGNoYXJnZV90YXJnZXRfZnJvbWAgYW5kIGBjaGFyZ2VfYWRkcl9mcm9tYCB3aXRoIGB3YWxrX3RhcmdldF9mcm9tYCBhbmQgYHdhbGtfYWRkcl9mcm9tYC4gVGhlc2UgbmV3IGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBOVUxMIGFuZCAwIGluIGBkYW1vc19xdW90YV9pbml0KClgLiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBpbnRlcm5hbCBrZXJuZWwgY29udHJvbCBmbG93IGFuZCByZWdpb24gaXRlcmF0aW9uIGxvZ2ljLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgdHJhY2tpbmcgb2YgdGhlIERBTU9TIChEQU1PTi1iYXNlZCBPcGVyYXRpb24gU2NoZW1lcykgcXVvdGEgd2FsayBwb3NpdGlvbiwgcmVwbGFjaW5nIGBjaGFyZ2VfdGFyZ2V0X2Zyb21gIGFuZCBgY2hhcmdlX2FkZHJfZnJvbWAgd2l0aCBgd2Fsa190YXJnZXRfZnJvbWAgYW5kIGB3YWxrX2FkZHJfZnJvbWAuIFRoZXNlIG5ldyBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gTlVMTCBhbmQgMCBpbiBgZGFtb3NfcXVvdGFfaW5pdCgpYC4gVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaW50ZXJuYWwga2VybmVsIGNvbnRyb2wgZmxvdyBhbmQgcmVnaW9uIGl0ZXJhdGlvbiBsb2dpYy4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzozOTowNi41ODc0Mjk0OTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY2MzE4NzA0MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9SRUNMQUlNXCIsXG4gICAgXCJEQU1PTl9MUlVfU09SVFwiLFxuICAgIFwiREFNT05fU1RBVFwiLFxuICAgIFwiREFNT05fREVCVUdfU0FOSVRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fY29tbWl0X2N0eFwiLFxuICAgIFwiZGFtb25fc3RhcnRcIixcbiAgICBcImRhbW9uX25ld19zY2hlbWVcIixcbiAgICBcImRhbW9uX3NldF9yZWdpb25zXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgdHJhY2tpbmcgb2YgdGhlIERBTU9TIChEQU1PTi1iYXNlZCBPcGVyYXRpb24gU2NoZW1lcykgcXVvdGEgd2FsayBwb3NpdGlvbiwgcmVwbGFjaW5nIGBjaGFyZ2VfdGFyZ2V0X2Zyb21gIGFuZCBgY2hhcmdlX2FkZHJfZnJvbWAgd2l0aCBgd2Fsa190YXJnZXRfZnJvbWAgYW5kIGB3YWxrX2FkZHJfZnJvbWAuIFRoZXNlIG5ldyBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gTlVMTCBhbmQgMCBpbiBgZGFtb3NfcXVvdGFfaW5pdCgpYC4gVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaW50ZXJuYWwga2VybmVsIGNvbnRyb2wgZmxvdyBhbmQgcmVnaW9uIGl0ZXJhdGlvbiBsb2dpYy4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSB0byB0cmFjayB0aGUgd2Fsa2luZyBwb3NpdGlvbiBvZiBEQU1PUyAoREFNT04tYmFzZWQgT3BlcmF0aW9uIFNjaGVtZXMpIHF1b3Rhcy4gSXQgcmVuYW1lcyB0aGUgdHJhY2tpbmcgdmFyaWFibGVzIGFuZCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBoYW5kbGUgc2tpcHBpbmcgd2Fsa2VkIHJlZ2lvbnMgYW5kIHJvdGF0aW5nIHRhcmdldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBzeXNmcyBvciBrZXJuZWwgQVBJcywgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjM5OjA2LjU4NzQzNTY0NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzNzE3ODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDdiZjVjY2YzYWY5ZDIzZGE1MDhiNTMzMzkwYTY3MzQ0ZWE5NzI2NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxMzozOTowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG5pbmRleCAwYzhiN2RkZWY5YWJiLi41ZTA3NTVlYmFkNzUwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbkBAIC0yOTYsOCArMjk2LDEwIEBAIHN0cnVjdCBkYW1vc19xdW90YSB7XFxuIFxcdC8qIEZvciBjaGFyZ2luZyB0aGUgcXVvdGEgKi9cXG4gXFx0dW5zaWduZWQgbG9uZyBjaGFyZ2VkX3N6O1xcbiBcXHR1bnNpZ25lZCBsb25nIGNoYXJnZWRfZnJvbTtcXG4tXFx0c3RydWN0IGRhbW9uX3RhcmdldCAqY2hhcmdlX3RhcmdldF9mcm9tO1xcbi1cXHR1bnNpZ25lZCBsb25nIGNoYXJnZV9hZGRyX2Zyb207XFxuK1xcbitcXHQvKiBGb3IgdHJhY2tpbmcgdGhlIERBTU9TIHdhbGsgcG9zaXRpb24gKHJvdGF0aW5nIGN1cnNvcikgKi9cXG4rXFx0c3RydWN0IGRhbW9uX3RhcmdldCAqd2Fsa190YXJnZXRfZnJvbTtcXG4rXFx0dW5zaWduZWQgbG9uZyB3YWxrX2FkZHJfZnJvbTtcXG4gXFxuIFxcdC8qIEZvciBwcmlvcml0aXphdGlvbiAqL1xcbiBcXHR1bnNpZ25lZCBpbnQgbWluX3Njb3JlO1xcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcXG5pbmRleCA2NDRkYWY1YTE2NTYwLi5iYmRiNTMwNTEzYTE4IDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xcbkBAIC00MDQsNiArNDA0LDUyIEBAIHN0YXRpYyBib29sIGRhbW9uX2lzX2xhc3RfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuIFxcdHJldHVybiBsaXN0X2lzX2xhc3QoXFx1MDAyNnItXFx1MDAzZWxpc3QsIFxcdTAwMjZ0LVxcdTAwM2VyZWdpb25zX2xpc3QpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBkYW1vc19jb21wbGV0ZWx5X3dhbGtlZChzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogJ1xcdTAwM2U9JyBpbnN0ZWFkIG9mICc9PScsIGJlY2F1c2UgdGhlIHJlZ2lvbiBzZXQgb2YgQHQgY291bGQgaGF2ZSBiZWVuXFxuK1xcdCAqIHNocnVua2VuIGJ5IGRhbW9uX3NldF9yZWdpb25zKCkgYWZ0ZXIgdGhlIGN1cnNvciB3YXMgc2F2ZWQuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gcy1cXHUwMDNlcXVvdGEud2Fsa190YXJnZXRfZnJvbSA9PSB0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdHMtXFx1MDAzZXF1b3RhLndhbGtfYWRkcl9mcm9tIFxcdTAwM2U9IGRhbW9uX2xhc3RfcmVnaW9uKHQpLVxcdTAwM2Vhci5lbmQ7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkYW1vbl9uZXh0X3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbitcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbit7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSBcXHUwMDI2Yy1cXHUwMDNlYWRhcHRpdmVfdGFyZ2V0cztcXG4rXFx0c3RydWN0IGRhbW9uX3RhcmdldCAqc3RhcnQgPSB0O1xcbitcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpuZXh0ID0gdDtcXG4rXFxuK1xcdHdoaWxlICh0cnVlKSB7XFxuK1xcdFxcdGlmIChsaXN0X2lzX2xhc3QoXFx1MDAyNm5leHQtXFx1MDAzZWxpc3QsIGhlYWQpKVxcbitcXHRcXHRcXHRuZXh0ID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0LCBsaXN0KTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRuZXh0ID0gbGlzdF9uZXh0X2VudHJ5KG5leHQsIGxpc3QpO1xcbitcXG4rXFx0XFx0aWYgKCFjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIHx8IGMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQobmV4dCkpXFxuK1xcdFxcdFxcdHJldHVybiBuZXh0O1xcbitcXG4rXFx0XFx0aWYgKG5leHQgPT0gc3RhcnQpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBkYW1vc19yZXBsYWNlX2ludmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuK1xcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9zICpzO1xcbitcXG4rXFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG4rXFx0XFx0aWYgKHMtXFx1MDAzZXF1b3RhLndhbGtfdGFyZ2V0X2Zyb20gIT0gdClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRzLVxcdTAwM2VxdW90YS53YWxrX3RhcmdldF9mcm9tID0gZGFtb25fbmV4dF92YWxpZF90YXJnZXQodCwgYyk7XFxuK1xcdFxcdHMtXFx1MDAzZXF1b3RhLndhbGtfYWRkcl9mcm9tID0gMDtcXG4rXFx0fVxcbit9XFxuK1xcbiAvKipcXG4gICogZGFtb25fcHJvYmVfaGl0c193c3VtKCkgLSBSZXR1cm5zIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIG9mIGEgcmVnaW9uLlxcbiAgKiBAcjpcXHRcXHRyZWdpb24gdG8gZ2V0IHRoZSB3ZWlnaHRlZCBzdW0gb2YuXFxuQEAgLTY3Myw4ICs3MTksOCBAQCBzdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhICpkYW1vc19xdW90YV9pbml0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxuIFxcdHF1b3RhLVxcdTAwM2V0b3RhbF9jaGFyZ2VkX25zID0gMDtcXG4gXFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogPSAwO1xcbiBcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tID0gMDtcXG4tXFx0cXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XFxuLVxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG4rXFx0cXVvdGEtXFx1MDAzZXdhbGtfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbitcXHRxdW90YS1cXHUwMDNld2Fsa19hZGRyX2Zyb20gPSAwO1xcbiBcXHRxdW90YS1cXHUwMDNlZXN6X2JwID0gMDtcXG4gXFx0cmV0dXJuIHF1b3RhO1xcbiB9XFxuQEAgLTE2MjgsOSArMTY3NCw5IEBAIHN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldHMoXFxuIFxcbiBcXHRcXHRcXHRkYW1vbl9kZXN0cm95X3RhcmdldChkc3RfdGFyZ2V0LCBkc3QpO1xcbiBcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgZHN0KSB7XFxuLVxcdFxcdFxcdFxcdGlmIChzLVxcdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPT0gZHN0X3RhcmdldCkge1xcbi1cXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbi1cXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG4rXFx0XFx0XFx0XFx0aWYgKHMtXFx1MDAzZXF1b3RhLndhbGtfdGFyZ2V0X2Zyb20gPT0gZHN0X3RhcmdldCkge1xcbitcXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VxdW90YS53YWxrX3RhcmdldF9mcm9tID0gTlVMTDtcXG4rXFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNlcXVvdGEud2Fsa19hZGRyX2Zyb20gPSAwO1xcbiBcXHRcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbkBAIC0yMzEyLDY0ICsyMzU4LDU0IEBAIHN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbiB9XFxuIFxcbiAvKlxcbi0gKiBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKCkgLSBDaGVjayBpZiB0aGUgZ2l2ZW4gcmVnaW9uIG9yIHN0YXJ0aW5nIHBhcnQgb2ZcXG4tICogaXQgaXMgYWxyZWFkeSBjaGFyZ2VkIGZvciB0aGUgREFNT1MgcXVvdGEuXFxuKyAqIGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbigpIC0gQ2hlY2sgaWYgdGhlIGdpdmVuIHJlZ2lvbiBvciBzdGFydGluZyBwYXJ0IG9mXFxuKyAqIGl0IGlzIGFscmVhZHkgd2Fsa2VkIGZvciB0aGUgREFNT1MgcXVvdGEuXFxuICAqIEB0OlxcdFRoZSB0YXJnZXQgb2YgdGhlIHJlZ2lvbi5cXG4tICogQHJwOlxcdFRoZSBwb2ludGVyIHRvIHRoZSByZWdpb24uXFxuKyAqIEByOlxcdFRoZSBwb2ludGVyIHRvIHRoZSByZWdpb24uXFxuICAqIEBzOlxcdFRoZSBzY2hlbWUgdG8gYmUgYXBwbGllZC5cXG4gICogQG1pbl9yZWdpb25fc3o6XFx0bWluaW11bSByZWdpb24gc2l6ZS5cXG4gICpcXG4tICogSWYgYSBxdW90YSBvZiBhIHNjaGVtZSBoYXMgZXhjZWVkZWQgaW4gYSBxdW90YSBjaGFyZ2Ugd2luZG93LCB0aGUgc2NoZW1lJ3NcXG4tICogYWN0aW9uIHdvdWxkIGFwcGxpZWQgdG8gb25seSBhIHBhcnQgb2YgdGhlIHRhcmdldCBhY2Nlc3MgcGF0dGVybiBmdWxmaWxsaW5nXFxuLSAqIHJlZ2lvbnMuICBUbyBhdm9pZCBhcHBseWluZyB0aGUgc2NoZW1lIGFjdGlvbiB0byBvbmx5IGFscmVhZHkgYXBwbGllZFxcbi0gKiByZWdpb25zLCBEQU1PTiBza2lwcyBhcHBseWluZyB0aGUgc2NoZW1lIGFjdGlvbiB0byB0aGUgcmVnaW9ucyB0aGF0IGNoYXJnZWRcXG4tICogaW4gdGhlIHByZXZpb3VzIGNoYXJnZSB3aW5kb3cuXFxuLSAqXFxuLSAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGEgZ2l2ZW4gcmVnaW9uIHNob3VsZCBiZSBza2lwcGVkIG9yIG5vdCBmb3IgdGhlXFxuLSAqIHJlYXNvbi4gIElmIG9ubHkgdGhlIHN0YXJ0aW5nIHBhcnQgb2YgdGhlIHJlZ2lvbiBoYXMgcHJldmlvdXNseSBjaGFyZ2VkLFxcbi0gKiB0aGlzIGZ1bmN0aW9uIHNwbGl0cyB0aGUgcmVnaW9uIGludG8gdHdvIHNvIHRoYXQgdGhlIHNlY29uZCBvbmUgY292ZXJzIHRoZVxcbi0gKiBhcmVhIHRoYXQgbm90IGNoYXJnZWQgaW4gdGhlIHByZXZpb3VzIGNoYXJnZSB3aWRub3csIGFuZCByZXR1cm4gdHJ1ZS4gIFRoZVxcbi0gKiBjYWxsZXIgY2FuIHNlZSB0aGUgc2Vjb25kIG9uZSBvbiB0aGUgbmV4dCBpdGVyYXRpb24gb2YgdGhlIHJlZ2lvbiB3YWxrLlxcbi0gKiBOb3RlIHRoYXQgdGhpcyBtZWFucyB0aGUgY2FsbGVyIHNob3VsZCB1c2UgZGFtb25fZm9yX2VhY2hfcmVnaW9uKCkgaW5zdGVhZFxcbi0gKiBvZiBkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZSgpLiAgSWYgZGFtb25fZm9yX2VhY2hfcmVnaW9uX3NhZmUoKSBpcyB1c2VkLFxcbi0gKiB0aGUgc2Vjb25kIHJlZ2lvbiB3aWxsIGp1c3QgYmUgaWdub3JlZC5cXG4rICogV2hlbiBhIHF1b3RhIGlzIGNvbmZpZ3VyZWQsIERBTU9OIHJlY29yZHMgaG93IGZhciBpdCBoYXMgd2Fsa2VkIHNvIHRoYXRcXG4rICogc3Vic2VxdWVudCBxdW90YSB3aW5kb3dzIGNvbnRpbnVlIGZyb20gdGhhdCBwb2ludCBpbnN0ZWFkIG9mIHJlLWFwcGx5aW5nIHRoZVxcbisgKiBzYW1lIHJlZ2lvbnMuICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBmb3IgcmVnaW9ucyB0aGF0IGFyZSBiZWZvcmUgdGhlXFxuKyAqIHJlY29yZGVkIGN1cnNvciBhbmQgdGhlcmVmb3JlIHNob3VsZCBiZSBza2lwcGVkLiAgSWYgb25seSB0aGUgc3RhcnRpbmcgcGFydFxcbisgKiBoYXMgYmVlbiB3YWxrZWQsIHRoZSByZWdpb24gaXMgc3BsaXQgc28gdGhhdCB0aGUgcmVtYWluaW5nIHBhcnQgY2FuIGJlXFxuKyAqIHZpc2l0ZWQuXFxuICAqXFxuICAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcmVnaW9uIHNob3VsZCBiZSBza2lwcGVkLCBmYWxzZSBvdGhlcndpc2UuXFxuICAqL1xcbi1zdGF0aWMgYm9vbCBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuK3N0YXRpYyBib29sIGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbiBcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4ge1xcbiBcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXFx1MDAyNnMtXFx1MDAzZXF1b3RhO1xcbiBcXHR1bnNpZ25lZCBsb25nIHN6X3RvX3NraXA7XFxuIFxcbi1cXHQvKiBTa2lwIHByZXZpb3VzbHkgY2hhcmdlZCByZWdpb25zICovXFxuLVxcdGlmIChxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKSB7XFxuLVxcdFxcdGlmICh0ICE9IHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20pXFxuLVxcdFxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHRcXHRpZiAociA9PSBkYW1vbl9sYXN0X3JlZ2lvbih0KSkge1xcbi1cXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcXG4tXFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSAwO1xcbitcXHRpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdC8qIFNraXAgcHJldmlvdXNseSB3YWxrZWQgcmVnaW9ucyAqL1xcbitcXHRpZiAocXVvdGEtXFx1MDAzZXdhbGtfdGFyZ2V0X2Zyb20pIHtcXG4rXFx0XFx0aWYgKHQgIT0gcXVvdGEtXFx1MDAzZXdhbGtfdGFyZ2V0X2Zyb20pXFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGlmIChxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHRcXHRyLVxcdTAwM2Vhci5lbmQgXFx1MDAzYz0gcXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20pXFxuK1xcdFxcdGlmIChxdW90YS1cXHUwMDNld2Fsa19hZGRyX2Zyb20gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuZW5kIFxcdTAwM2M9IHF1b3RhLVxcdTAwM2V3YWxrX2FkZHJfZnJvbSlcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbi1cXHRcXHRpZiAocXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gXFx1MDAyNlxcdTAwMjYgci1cXHUwMDNlYXIuc3RhcnQgXFx1MDAzY1xcbi1cXHRcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSkge1xcbi1cXHRcXHRcXHRzel90b19za2lwID0gQUxJR05fRE9XTihxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSAtXFxuK1xcdFxcdGlmIChxdW90YS1cXHUwMDNld2Fsa19hZGRyX2Zyb20gXFx1MDAyNlxcdTAwMjYgci1cXHUwMDNlYXIuc3RhcnQgXFx1MDAzY1xcbitcXHRcXHRcXHRcXHRxdW90YS1cXHUwMDNld2Fsa19hZGRyX2Zyb20pIHtcXG4rXFx0XFx0XFx0c3pfdG9fc2tpcCA9IEFMSUdOX0RPV04ocXVvdGEtXFx1MDAzZXdhbGtfYWRkcl9mcm9tIC1cXG4gXFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuc3RhcnQsIG1pbl9yZWdpb25fc3opO1xcbiBcXHRcXHRcXHRpZiAoIXN6X3RvX3NraXApIHtcXG4tXFx0XFx0XFx0XFx0aWYgKGRhbW9uX3N6X3JlZ2lvbihyKSBcXHUwMDNjPSBtaW5fcmVnaW9uX3N6KVxcbitcXHRcXHRcXHRcXHRpZiAoZGFtb25fc3pfcmVnaW9uKHIpIFxcdTAwM2M9IG1pbl9yZWdpb25fc3opIHtcXG4rXFx0XFx0XFx0XFx0XFx0cXVvdGEtXFx1MDAzZXdhbGtfYWRkcl9mcm9tID0gci1cXHUwMDNlYXIuZW5kO1xcbiBcXHRcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRcXHRzel90b19za2lwID0gbWluX3JlZ2lvbl9zejtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3pfdG9fc2tpcCk7XFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbi1cXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuQEAgLTI2MjcsMTAgKzI2NjMsNiBAQCBzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4gXFx0XFx0cXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfbnMgKz0gdGltZXNwZWM2NF90b19ucyhcXHUwMDI2ZW5kKSAtXFxuIFxcdFxcdFxcdHRpbWVzcGVjNjRfdG9fbnMoXFx1MDAyNmJlZ2luKTtcXG4gXFx0XFx0ZGFtb3NfY2hhcmdlX3F1b3RhKHF1b3RhLCBzeiwgc3pfYXBwbGllZCk7XFxuLVxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSkge1xcbi1cXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gdDtcXG4tXFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSByLVxcdTAwM2Vhci5lbmQ7XFxuLVxcdFxcdH1cXG4gXFx0fVxcbiBcXHRpZiAocy1cXHUwMDNlYWN0aW9uICE9IERBTU9TX1NUQVQpXFxuIFxcdFxcdHItXFx1MDAzZWFnZSA9IDA7XFxuQEAgLTI2MzksOCArMjY3MSwxOSBAQCBzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4gXFx0ZGFtb3NfdXBkYXRlX3N0YXQocywgc3osIHN6X2FwcGxpZWQsIHN6X29wc19maWx0ZXJfcGFzc2VkKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbitzdGF0aWMgdm9pZCBkYW1vc193YWxrX21heWJlX3JvdGF0ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkYW1vcyAqcylcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXFx1MDAyNnMtXFx1MDAzZXF1b3RhO1xcbitcXG4rXFx0aWYgKGRhbW9zX2NvbXBsZXRlbHlfd2Fsa2VkKHMsIHQpKSB7XFxuK1xcdFxcdHF1b3RhLVxcdTAwM2V3YWxrX3RhcmdldF9mcm9tID0gZGFtb25fbmV4dF92YWxpZF90YXJnZXQodCwgYyk7XFxuK1xcdFxcdHF1b3RhLVxcdTAwM2V3YWxrX2FkZHJfZnJvbSA9IDA7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbiB7XFxuIFxcdHN0cnVjdCBkYW1vcyAqcztcXG5AQCAtMjY1OCwxOCArMjcwMSwzMSBAQCBzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuIFxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRpZiAoZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbih0LCByLCBzLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcbiBcXHRcXHRpZiAocy1cXHUwMDNlbWF4X25yX3NuYXBzaG90cyBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHRcXHRzLVxcdTAwM2VtYXhfbnJfc25hcHNob3RzIFxcdTAwM2M9IHMtXFx1MDAzZXN0YXQubnJfc25hcHNob3RzKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFNraXAgcmVnaW9ucyBiZWZvcmUgdGhlIGN1cnNvci4gIElmIHRoZSBza2lwIG1ha2VzIHRoZSBjdXJzb3JcXG4rXFx0XFx0ICogcmVhY2ggdGhlIGVuZCBvZiB0aGlzIHRhcmdldCwgcm90YXRlIHRvIHRoZSBuZXh0IHZhbGlkIHRhcmdldFxcbitcXHRcXHQgKiBiZWZvcmUgY29udGludWluZyB3aXRoIHRoZSBuZXh0IHJlZ2lvbi9zY2hlbWUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoZGFtb3Nfc2tpcF93YWxrZWRfcmVnaW9uKHQsIHIsIHMsIGMtXFx1MDAzZW1pbl9yZWdpb25fc3opKSB7XFxuK1xcdFxcdFxcdGRhbW9zX3dhbGtfbWF5YmVfcm90YXRlKGMsIHQsIHMpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0aWYgKGRhbW9zX3ZhbGlkX3RhcmdldChjLCByLCBzKSlcXG4gXFx0XFx0XFx0ZGFtb3NfYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMpO1xcbiBcXG4gXFx0XFx0aWYgKGRhbW9uX2lzX2xhc3RfcmVnaW9uKHIsIHQpKVxcbiBcXHRcXHRcXHRzLVxcdTAwM2VzdGF0Lm5yX3NuYXBzaG90cysrO1xcbitcXG4rXFx0XFx0aWYgKGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpIHtcXG4rXFx0XFx0XFx0cXVvdGEtXFx1MDAzZXdhbGtfdGFyZ2V0X2Zyb20gPSB0O1xcbitcXHRcXHRcXHRxdW90YS1cXHUwMDNld2Fsa19hZGRyX2Zyb20gPSByLVxcdTAwM2Vhci5lbmQ7XFxuK1xcdFxcdFxcdGRhbW9zX3dhbGtfbWF5YmVfcm90YXRlKGMsIHQsIHMpO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMzI0MSw4ICszMjk3LDEwIEBAIHN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbiBcXHRtYXhfcmVnaW9uX3N6ID0gZGFtb25fcmVnaW9uX3N6X2xpbWl0KGMpO1xcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZjLVxcdTAwM2V3YWxrX2NvbnRyb2xfbG9jayk7XFxuIFxcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XFxuLVxcdFxcdGlmIChjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIFxcdTAwMjZcXHUwMDI2IGMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2UpXFxuK1xcdFxcdGlmIChjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIFxcdTAwMjZcXHUwMDI2IGMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2UpIHtcXG4rXFx0XFx0XFx0ZGFtb3NfcmVwbGFjZV9pbnZhbGlkX3RhcmdldChjLCB0KTtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4gXFx0XFx0ZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzozOTowNy4wODIwOTc4MTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNjUxODAzOTkwMDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9SRUNMQUlNXCIsXG4gICAgXCJEQU1PTl9MUlVfU09SVFwiLFxuICAgIFwiREFNT05fU1RBVFwiLFxuICAgIFwiREFNT05fREVCVUdfU0FOSVRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fY29tbWl0X2N0eFwiLFxuICAgIFwiZGFtb25fc3RhcnRcIixcbiAgICBcImRhbW9uX25ld19zY2hlbWVcIixcbiAgICBcImRhbW9uX3NldF9yZWdpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgb2YgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIHRvIHRyYWNrIHRoZSB3YWxraW5nIHBvc2l0aW9uIG9mIERBTU9TIChEQU1PTi1iYXNlZCBPcGVyYXRpb24gU2NoZW1lcykgcXVvdGFzLiBJdCByZW5hbWVzIHRoZSB0cmFja2luZyB2YXJpYWJsZXMgYW5kIGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIGhhbmRsZSBza2lwcGluZyB3YWxrZWQgcmVnaW9ucyBhbmQgcm90YXRpbmcgdGFyZ2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHN5c2ZzIG9yIGtlcm5lbCBBUElzLCBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDdiZjVjY2YzYWY5ZDIzZGE1MDhiNTMzMzkwYTY3MzQ0ZWE5NzI2NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDEzOjM5OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5pbmRleCAwYzhiN2RkZWY5YWJiLi41ZTA3NTVlYmFkNzUwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbkBAIC0yOTYsOCArMjk2LDEwIEBAIHN0cnVjdCBkYW1vc19xdW90YSB7XG4gXHQvKiBGb3IgY2hhcmdpbmcgdGhlIHF1b3RhICovXG4gXHR1bnNpZ25lZCBsb25nIGNoYXJnZWRfc3o7XG4gXHR1bnNpZ25lZCBsb25nIGNoYXJnZWRfZnJvbTtcbi1cdHN0cnVjdCBkYW1vbl90YXJnZXQgKmNoYXJnZV90YXJnZXRfZnJvbTtcbi1cdHVuc2lnbmVkIGxvbmcgY2hhcmdlX2FkZHJfZnJvbTtcbitcbitcdC8qIEZvciB0cmFja2luZyB0aGUgREFNT1Mgd2FsayBwb3NpdGlvbiAocm90YXRpbmcgY3Vyc29yKSAqL1xuK1x0c3RydWN0IGRhbW9uX3RhcmdldCAqd2Fsa190YXJnZXRfZnJvbTtcbitcdHVuc2lnbmVkIGxvbmcgd2Fsa19hZGRyX2Zyb207XG4gXG4gXHQvKiBGb3IgcHJpb3JpdGl6YXRpb24gKi9cbiBcdHVuc2lnbmVkIGludCBtaW5fc2NvcmU7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA2NDRkYWY1YTE2NTYwLi5iYmRiNTMwNTEzYTE4IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC00MDQsNiArNDA0LDUyIEBAIHN0YXRpYyBib29sIGRhbW9uX2lzX2xhc3RfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4gXHRyZXR1cm4gbGlzdF9pc19sYXN0KFx1MDAyNnItXHUwMDNlbGlzdCwgXHUwMDI2dC1cdTAwM2VyZWdpb25zX2xpc3QpO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBkYW1vc19jb21wbGV0ZWx5X3dhbGtlZChzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG4re1xuK1x0LypcbitcdCAqICdcdTAwM2U9JyBpbnN0ZWFkIG9mICc9PScsIGJlY2F1c2UgdGhlIHJlZ2lvbiBzZXQgb2YgQHQgY291bGQgaGF2ZSBiZWVuXG4rXHQgKiBzaHJ1bmtlbiBieSBkYW1vbl9zZXRfcmVnaW9ucygpIGFmdGVyIHRoZSBjdXJzb3Igd2FzIHNhdmVkLlxuK1x0ICovXG4rXHRyZXR1cm4gcy1cdTAwM2VxdW90YS53YWxrX3RhcmdldF9mcm9tID09IHQgXHUwMDI2XHUwMDI2XG4rXHRcdHMtXHUwMDNlcXVvdGEud2Fsa19hZGRyX2Zyb20gXHUwMDNlPSBkYW1vbl9sYXN0X3JlZ2lvbih0KS1cdTAwM2Vhci5lbmQ7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkYW1vbl9uZXh0X3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuK1x0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuK3tcbitcdHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSBcdTAwMjZjLVx1MDAzZWFkYXB0aXZlX3RhcmdldHM7XG4rXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpzdGFydCA9IHQ7XG4rXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpuZXh0ID0gdDtcbitcbitcdHdoaWxlICh0cnVlKSB7XG4rXHRcdGlmIChsaXN0X2lzX2xhc3QoXHUwMDI2bmV4dC1cdTAwM2VsaXN0LCBoZWFkKSlcbitcdFx0XHRuZXh0ID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0LCBsaXN0KTtcbitcdFx0ZWxzZVxuK1x0XHRcdG5leHQgPSBsaXN0X25leHRfZW50cnkobmV4dCwgbGlzdCk7XG4rXG4rXHRcdGlmICghYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIHx8IGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZChuZXh0KSlcbitcdFx0XHRyZXR1cm4gbmV4dDtcbitcbitcdFx0aWYgKG5leHQgPT0gc3RhcnQpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIHZvaWQgZGFtb3NfcmVwbGFjZV9pbnZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuK1x0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxuK3tcbitcdHN0cnVjdCBkYW1vcyAqcztcbitcbitcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XG4rXHRcdGlmIChzLVx1MDAzZXF1b3RhLndhbGtfdGFyZ2V0X2Zyb20gIT0gdClcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0cy1cdTAwM2VxdW90YS53YWxrX3RhcmdldF9mcm9tID0gZGFtb25fbmV4dF92YWxpZF90YXJnZXQodCwgYyk7XG4rXHRcdHMtXHUwMDNlcXVvdGEud2Fsa19hZGRyX2Zyb20gPSAwO1xuK1x0fVxuK31cbitcbiAvKipcbiAgKiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oKSAtIFJldHVybnMgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gb2YgYSByZWdpb24uXG4gICogQHI6XHRcdHJlZ2lvbiB0byBnZXQgdGhlIHdlaWdodGVkIHN1bSBvZi5cbkBAIC02NzMsOCArNzE5LDggQEAgc3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSAqZGFtb3NfcXVvdGFfaW5pdChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxuIFx0cXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9ucyA9IDA7XG4gXHRxdW90YS1cdTAwM2VjaGFyZ2VkX3N6ID0gMDtcbiBcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSA9IDA7XG4tXHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xuLVx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4rXHRxdW90YS1cdTAwM2V3YWxrX3RhcmdldF9mcm9tID0gTlVMTDtcbitcdHF1b3RhLVx1MDAzZXdhbGtfYWRkcl9mcm9tID0gMDtcbiBcdHF1b3RhLVx1MDAzZWVzel9icCA9IDA7XG4gXHRyZXR1cm4gcXVvdGE7XG4gfVxuQEAgLTE2MjgsOSArMTY3NCw5IEBAIHN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldHMoXG4gXG4gXHRcdFx0ZGFtb25fZGVzdHJveV90YXJnZXQoZHN0X3RhcmdldCwgZHN0KTtcbiBcdFx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgZHN0KSB7XG4tXHRcdFx0XHRpZiAocy1cdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPT0gZHN0X3RhcmdldCkge1xuLVx0XHRcdFx0XHRzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG4tXHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4rXHRcdFx0XHRpZiAocy1cdTAwM2VxdW90YS53YWxrX3RhcmdldF9mcm9tID09IGRzdF90YXJnZXQpIHtcbitcdFx0XHRcdFx0cy1cdTAwM2VxdW90YS53YWxrX3RhcmdldF9mcm9tID0gTlVMTDtcbitcdFx0XHRcdFx0cy1cdTAwM2VxdW90YS53YWxrX2FkZHJfZnJvbSA9IDA7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG5AQCAtMjMxMiw2NCArMjM1OCw1NCBAQCBzdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiB9XG4gXG4gLypcbi0gKiBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKCkgLSBDaGVjayBpZiB0aGUgZ2l2ZW4gcmVnaW9uIG9yIHN0YXJ0aW5nIHBhcnQgb2Zcbi0gKiBpdCBpcyBhbHJlYWR5IGNoYXJnZWQgZm9yIHRoZSBEQU1PUyBxdW90YS5cbisgKiBkYW1vc19za2lwX3dhbGtlZF9yZWdpb24oKSAtIENoZWNrIGlmIHRoZSBnaXZlbiByZWdpb24gb3Igc3RhcnRpbmcgcGFydCBvZlxuKyAqIGl0IGlzIGFscmVhZHkgd2Fsa2VkIGZvciB0aGUgREFNT1MgcXVvdGEuXG4gICogQHQ6XHRUaGUgdGFyZ2V0IG9mIHRoZSByZWdpb24uXG4tICogQHJwOlx0VGhlIHBvaW50ZXIgdG8gdGhlIHJlZ2lvbi5cbisgKiBAcjpcdFRoZSBwb2ludGVyIHRvIHRoZSByZWdpb24uXG4gICogQHM6XHRUaGUgc2NoZW1lIHRvIGJlIGFwcGxpZWQuXG4gICogQG1pbl9yZWdpb25fc3o6XHRtaW5pbXVtIHJlZ2lvbiBzaXplLlxuICAqXG4tICogSWYgYSBxdW90YSBvZiBhIHNjaGVtZSBoYXMgZXhjZWVkZWQgaW4gYSBxdW90YSBjaGFyZ2Ugd2luZG93LCB0aGUgc2NoZW1lJ3Ncbi0gKiBhY3Rpb24gd291bGQgYXBwbGllZCB0byBvbmx5IGEgcGFydCBvZiB0aGUgdGFyZ2V0IGFjY2VzcyBwYXR0ZXJuIGZ1bGZpbGxpbmdcbi0gKiByZWdpb25zLiAgVG8gYXZvaWQgYXBwbHlpbmcgdGhlIHNjaGVtZSBhY3Rpb24gdG8gb25seSBhbHJlYWR5IGFwcGxpZWRcbi0gKiByZWdpb25zLCBEQU1PTiBza2lwcyBhcHBseWluZyB0aGUgc2NoZW1lIGFjdGlvbiB0byB0aGUgcmVnaW9ucyB0aGF0IGNoYXJnZWRcbi0gKiBpbiB0aGUgcHJldmlvdXMgY2hhcmdlIHdpbmRvdy5cbi0gKlxuLSAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGEgZ2l2ZW4gcmVnaW9uIHNob3VsZCBiZSBza2lwcGVkIG9yIG5vdCBmb3IgdGhlXG4tICogcmVhc29uLiAgSWYgb25seSB0aGUgc3RhcnRpbmcgcGFydCBvZiB0aGUgcmVnaW9uIGhhcyBwcmV2aW91c2x5IGNoYXJnZWQsXG4tICogdGhpcyBmdW5jdGlvbiBzcGxpdHMgdGhlIHJlZ2lvbiBpbnRvIHR3byBzbyB0aGF0IHRoZSBzZWNvbmQgb25lIGNvdmVycyB0aGVcbi0gKiBhcmVhIHRoYXQgbm90IGNoYXJnZWQgaW4gdGhlIHByZXZpb3VzIGNoYXJnZSB3aWRub3csIGFuZCByZXR1cm4gdHJ1ZS4gIFRoZVxuLSAqIGNhbGxlciBjYW4gc2VlIHRoZSBzZWNvbmQgb25lIG9uIHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgcmVnaW9uIHdhbGsuXG4tICogTm90ZSB0aGF0IHRoaXMgbWVhbnMgdGhlIGNhbGxlciBzaG91bGQgdXNlIGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbigpIGluc3RlYWRcbi0gKiBvZiBkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZSgpLiAgSWYgZGFtb25fZm9yX2VhY2hfcmVnaW9uX3NhZmUoKSBpcyB1c2VkLFxuLSAqIHRoZSBzZWNvbmQgcmVnaW9uIHdpbGwganVzdCBiZSBpZ25vcmVkLlxuKyAqIFdoZW4gYSBxdW90YSBpcyBjb25maWd1cmVkLCBEQU1PTiByZWNvcmRzIGhvdyBmYXIgaXQgaGFzIHdhbGtlZCBzbyB0aGF0XG4rICogc3Vic2VxdWVudCBxdW90YSB3aW5kb3dzIGNvbnRpbnVlIGZyb20gdGhhdCBwb2ludCBpbnN0ZWFkIG9mIHJlLWFwcGx5aW5nIHRoZVxuKyAqIHNhbWUgcmVnaW9ucy4gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGZvciByZWdpb25zIHRoYXQgYXJlIGJlZm9yZSB0aGVcbisgKiByZWNvcmRlZCBjdXJzb3IgYW5kIHRoZXJlZm9yZSBzaG91bGQgYmUgc2tpcHBlZC4gIElmIG9ubHkgdGhlIHN0YXJ0aW5nIHBhcnRcbisgKiBoYXMgYmVlbiB3YWxrZWQsIHRoZSByZWdpb24gaXMgc3BsaXQgc28gdGhhdCB0aGUgcmVtYWluaW5nIHBhcnQgY2FuIGJlXG4rICogdmlzaXRlZC5cbiAgKlxuICAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcmVnaW9uIHNob3VsZCBiZSBza2lwcGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICovXG4tc3RhdGljIGJvb2wgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuK3N0YXRpYyBib29sIGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXG4gXHRcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcbiB7XG4gXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXHUwMDI2cy1cdTAwM2VxdW90YTtcbiBcdHVuc2lnbmVkIGxvbmcgc3pfdG9fc2tpcDtcbiBcbi1cdC8qIFNraXAgcHJldmlvdXNseSBjaGFyZ2VkIHJlZ2lvbnMgKi9cbi1cdGlmIChxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20pIHtcbi1cdFx0aWYgKHQgIT0gcXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKVxuLVx0XHRcdHJldHVybiB0cnVlO1xuLVx0XHRpZiAociA9PSBkYW1vbl9sYXN0X3JlZ2lvbih0KSkge1xuLVx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG4tXHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4rXHRpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qIFNraXAgcHJldmlvdXNseSB3YWxrZWQgcmVnaW9ucyAqL1xuK1x0aWYgKHF1b3RhLVx1MDAzZXdhbGtfdGFyZ2V0X2Zyb20pIHtcbitcdFx0aWYgKHQgIT0gcXVvdGEtXHUwMDNld2Fsa190YXJnZXRfZnJvbSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cdFx0fVxuLVx0XHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdHItXHUwMDNlYXIuZW5kIFx1MDAzYz0gcXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSlcbitcdFx0aWYgKHF1b3RhLVx1MDAzZXdhbGtfYWRkcl9mcm9tIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0ci1cdTAwM2Vhci5lbmQgXHUwMDNjPSBxdW90YS1cdTAwM2V3YWxrX2FkZHJfZnJvbSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdFx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gXHUwMDI2XHUwMDI2IHItXHUwMDNlYXIuc3RhcnQgXHUwMDNjXG4tXHRcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tKSB7XG4tXHRcdFx0c3pfdG9fc2tpcCA9IEFMSUdOX0RPV04ocXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSAtXG4rXHRcdGlmIChxdW90YS1cdTAwM2V3YWxrX2FkZHJfZnJvbSBcdTAwMjZcdTAwMjYgci1cdTAwM2Vhci5zdGFydCBcdTAwM2NcbitcdFx0XHRcdHF1b3RhLVx1MDAzZXdhbGtfYWRkcl9mcm9tKSB7XG4rXHRcdFx0c3pfdG9fc2tpcCA9IEFMSUdOX0RPV04ocXVvdGEtXHUwMDNld2Fsa19hZGRyX2Zyb20gLVxuIFx0XHRcdFx0XHRyLVx1MDAzZWFyLnN0YXJ0LCBtaW5fcmVnaW9uX3N6KTtcbiBcdFx0XHRpZiAoIXN6X3RvX3NraXApIHtcbi1cdFx0XHRcdGlmIChkYW1vbl9zel9yZWdpb24ocikgXHUwMDNjPSBtaW5fcmVnaW9uX3N6KVxuK1x0XHRcdFx0aWYgKGRhbW9uX3N6X3JlZ2lvbihyKSBcdTAwM2M9IG1pbl9yZWdpb25fc3opIHtcbitcdFx0XHRcdFx0cXVvdGEtXHUwMDNld2Fsa19hZGRyX2Zyb20gPSByLVx1MDAzZWFyLmVuZDtcbiBcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdFx0XHR9XG4gXHRcdFx0XHRzel90b19za2lwID0gbWluX3JlZ2lvbl9zejtcbiBcdFx0XHR9XG4gXHRcdFx0ZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6X3RvX3NraXApO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHR9XG4tXHRcdHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG4tXHRcdHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSAwO1xuIFx0fVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbkBAIC0yNjI3LDEwICsyNjYzLDYgQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRcdHF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfbnMgKz0gdGltZXNwZWM2NF90b19ucyhcdTAwMjZlbmQpIC1cbiBcdFx0XHR0aW1lc3BlYzY0X3RvX25zKFx1MDAyNmJlZ2luKTtcbiBcdFx0ZGFtb3NfY2hhcmdlX3F1b3RhKHF1b3RhLCBzeiwgc3pfYXBwbGllZCk7XG4tXHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKSB7XG4tXHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gdDtcbi1cdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gci1cdTAwM2Vhci5lbmQ7XG4tXHRcdH1cbiBcdH1cbiBcdGlmIChzLVx1MDAzZWFjdGlvbiAhPSBEQU1PU19TVEFUKVxuIFx0XHRyLVx1MDAzZWFnZSA9IDA7XG5AQCAtMjYzOSw4ICsyNjcxLDE5IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIFx0ZGFtb3NfdXBkYXRlX3N0YXQocywgc3osIHN6X2FwcGxpZWQsIHN6X29wc19maWx0ZXJfcGFzc2VkKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuLVx0XHRcdFx0ICAgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbitzdGF0aWMgdm9pZCBkYW1vc193YWxrX21heWJlX3JvdGF0ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4rXHRcdFx0XHQgICAgc3RydWN0IGRhbW9zICpzKVxuK3tcbitcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuK1xuK1x0aWYgKGRhbW9zX2NvbXBsZXRlbHlfd2Fsa2VkKHMsIHQpKSB7XG4rXHRcdHF1b3RhLVx1MDAzZXdhbGtfdGFyZ2V0X2Zyb20gPSBkYW1vbl9uZXh0X3ZhbGlkX3RhcmdldCh0LCBjKTtcbitcdFx0cXVvdGEtXHUwMDNld2Fsa19hZGRyX2Zyb20gPSAwO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuIHtcbiBcdHN0cnVjdCBkYW1vcyAqcztcbkBAIC0yNjU4LDE4ICsyNzAxLDMxIEBAIHN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbiBcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmIChkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHQsIHIsIHMsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG4tXHRcdFx0Y29udGludWU7XG4tXG4gXHRcdGlmIChzLVx1MDAzZW1heF9ucl9zbmFwc2hvdHMgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHRzLVx1MDAzZW1heF9ucl9zbmFwc2hvdHMgXHUwMDNjPSBzLVx1MDAzZXN0YXQubnJfc25hcHNob3RzKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHQvKlxuK1x0XHQgKiBTa2lwIHJlZ2lvbnMgYmVmb3JlIHRoZSBjdXJzb3IuICBJZiB0aGUgc2tpcCBtYWtlcyB0aGUgY3Vyc29yXG4rXHRcdCAqIHJlYWNoIHRoZSBlbmQgb2YgdGhpcyB0YXJnZXQsIHJvdGF0ZSB0byB0aGUgbmV4dCB2YWxpZCB0YXJnZXRcbitcdFx0ICogYmVmb3JlIGNvbnRpbnVpbmcgd2l0aCB0aGUgbmV4dCByZWdpb24vc2NoZW1lLlxuK1x0XHQgKi9cbitcdFx0aWYgKGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbih0LCByLCBzLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKSB7XG4rXHRcdFx0ZGFtb3Nfd2Fsa19tYXliZV9yb3RhdGUoYywgdCwgcyk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbiBcdFx0aWYgKGRhbW9zX3ZhbGlkX3RhcmdldChjLCByLCBzKSlcbiBcdFx0XHRkYW1vc19hcHBseV9zY2hlbWUoYywgdCwgciwgcyk7XG4gXG4gXHRcdGlmIChkYW1vbl9pc19sYXN0X3JlZ2lvbihyLCB0KSlcbiBcdFx0XHRzLVx1MDAzZXN0YXQubnJfc25hcHNob3RzKys7XG4rXG4rXHRcdGlmIChkYW1vc19xdW90YV9pc19zZXQocXVvdGEpKSB7XG4rXHRcdFx0cXVvdGEtXHUwMDNld2Fsa190YXJnZXRfZnJvbSA9IHQ7XG4rXHRcdFx0cXVvdGEtXHUwMDNld2Fsa19hZGRyX2Zyb20gPSByLVx1MDAzZWFyLmVuZDtcbitcdFx0XHRkYW1vc193YWxrX21heWJlX3JvdGF0ZShjLCB0LCBzKTtcbitcdFx0fVxuIFx0fVxuIH1cbiBcbkBAIC0zMjQxLDggKzMyOTcsMTAgQEAgc3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4gXHRtYXhfcmVnaW9uX3N6ID0gZGFtb25fcmVnaW9uX3N6X2xpbWl0KGMpO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZjLVx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcbiBcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XG4tXHRcdGlmIChjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQgXHUwMDI2XHUwMDI2IGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZSlcbitcdFx0aWYgKGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcdTAwMjZcdTAwMjYgYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKSB7XG4rXHRcdFx0ZGFtb3NfcmVwbGFjZV9pbnZhbGlkX3RhcmdldChjLCB0KTtcbiBcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuIFx0XHRkYW1vc19hcHBseV90YXJnZXQoYywgdCwgbWF4X3JlZ2lvbl9zeik7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzozOTowNy4wODIxMDE1NzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDE4NTUzODc4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBQYXRjaCBSZXZpZXcgXHUwMDI2IEZ1enppbmcgRmVhc2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBEQU1PTiBjb3JlLCBzcGVjaWZpY2FsbHkgdGhlIHF1b3RhIHdhbGtpbmcgbG9naWMgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJdCdzIGEgcHJldHR5IHRhcmdldGVkIG1vZGlmaWNhdGlvbiwgcmVuYW1pbmcgYSBjb3VwbGUgb2YgdmFyaWFibGVzIChgY2hhcmdlX3RhcmdldF9mcm9tYCBhbmQgYGNoYXJnZV9hZGRyX2Zyb21gIGJlY29taW5nIGB3YWxrX3RhcmdldF9mcm9tYCBhbmQgYHdhbGtfYWRkcl9mcm9tYCkgYW5kIGludHJvZHVjaW5nIGEgZmV3IG5ldyBmdW5jdGlvbnMuIFRoZXNlIGFkZGl0aW9ucywgYGRhbW9zX2NvbXBsZXRlbHlfd2Fsa2VkYCwgYGRhbW9uX25leHRfdmFsaWRfdGFyZ2V0YCwgYGRhbW9zX3JlcGxhY2VfaW52YWxpZF90YXJnZXRgLCBgZGFtb3Nfc2tpcF93YWxrZWRfcmVnaW9uYCwgYW5kIGBkYW1vc193YWxrX21heWJlX3JvdGF0ZWAsIHN0cm9uZ2x5IHN1Z2dlc3QgYSBtb3JlIG51YW5jZWQgYXBwcm9hY2ggdG8gdHJhY2tpbmcgYW5kIG1hbmFnaW5nIERBTU9TIHdhbGtpbmcuIFRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgIGFuZCBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCwgd2hpY2ggYXJlIGtleSBhcHBsaWNhdGlvbiBwb2ludHMuXG5cblRoZSBiaWcgcXVlc3Rpb24gbm93IGlzLCBcIklzIHRoaXMgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmU/XCIgR2l2ZW4gREFNT04ncyByb2xlIGFzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyBcIlllcy5cIiBJdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggc3lzZnMgYW5kIGtlcm5lbCBBUElzLCB3aGljaCBwcmVzZW50cyBhIGdvb2QgYXR0YWNrIHN1cmZhY2UuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSB3ZWlyZCBjb25maWcgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgbWFrZSB0aGlzIHBhdGNoIGxlc3MgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuIEknbGwgc2VhcmNoIGBtbS9kYW1vbi9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBEQU1PTiBjb25maWd1cmF0aW9ucyByZXF1aXJlZCB0byBlbmFibGUgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMuIEdvdHRhIGNvdmVyIGFsbCB0aGUgYmFzZXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxODEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzozOToxNy4yNjc2NDM5MTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA5MzY5MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxubW0vZGFtb24vS2NvbmZpZy00LVxcbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWctNjktXFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWctODktXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTA5LVxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzozOToxNy4zMjg1ODU1MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyODg2ODAzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGNvbmNpc2Ugc3VtbWFyeSBmb3IgYW4gZXhwZXJ0OlxuXG4qKkRBTU9OIENvbmZpZ3VyYXRpb24gYW5kIENvcmUgTG9naWMgUmV2aWV3KipcblxuUmlnaHQsIGl0J3MgdGltZSB0byBlbmFibGUgREFNT04sIHNwZWNpZmljYWxseSB3aXRoIHRoZSBgVkFERFJgLCBgUEFERFJgLCBgU1lTRlNgLCBgUkVDTEFJTWAsIGBMUlVfU09SVGAsIGFuZCBgU1RBVGAgb3B0aW9ucy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIEkga25vdyB0aGVzZSBmZWF0dXJlcyBhcmUgZGVzaWduZWQgdG8gcHJvdmlkZSBpbi1kZXB0aCBtb25pdG9yaW5nIGFuZCBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIGNhcGFiaWxpdGllcyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQuIEkgc3VzcGVjdCBlbmFibGluZyBhbGwgb2YgdGhlbSBhdCBvbmNlIG1pZ2h0IGJlIGEgYml0IHZlcmJvc2UgZm9yIGluaXRpYWwgdGVzdGluZy4gSSdsbCBuZWVkIHRvIHRhaWxvciB0aGVtIHRvIHRoZSBzcGVjaWZpYyBzY2VuYXJpby5cblxuQmVmb3JlIEkgZGl2ZSBkZWVwZXIgaW50byBleHBlcmltZW50YXRpb24sIEkgbmVlZCB0byBjaGVjayB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiBpbiBgbW0vZGFtb24vY29yZS5jYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbiBjYWxscywgYW55IGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBvdmVyYWxsIGNvbnRyb2wgZmxvdyBvZiBEQU1PTi4gVGhpcyB3aWxsIGhlbHAgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBhY3RzLCBkZXBlbmRlbmNpZXMsIGFuZCBjb25maWd1cmF0aW9uIG51YW5jZXMuIFRoaXMgYXBwcm9hY2ggd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IGRpYWdub3NlIHByb2JsZW1zIGFuZCBvcHRpbWl6ZSBEQU1PTiB1c2FnZS4gSXQgd2lsbCBhbHNvIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgZWFjaCBvcHRpb24gaW50ZXJhY3RzIHdpdGggdGhlIG90aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTA0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6Mzk6MjEuNjE3MjY4NTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY1MTE2MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYy4qIGRhbW9zX3dhbGtfbWF5YmVfcm90YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MjYwOD1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNjczLVxcbm1tL2RhbW9uL2NvcmUuYzoyNjc0OnN0YXRpYyB2b2lkIGRhbW9zX3dhbGtfbWF5YmVfcm90YXRlKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxubW0vZGFtb24vY29yZS5jLTI2NzUtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjM5OjIxLjcwMzc4NTE1M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzODI2MTMyNzkxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEQU1PTiBQYXRjaCoqXG5cbk9rYXksIGxldCBtZSBicmVhayBkb3duIHRoaXMgREFNT04gcGF0Y2guIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0J3MgaW50cm9kdWNpbmcgc29tZSBuZXcgc3RhdGljIGhlbHBlciBmdW5jdGlvbnM6IGBkYW1vc19jb21wbGV0ZWx5X3dhbGtlZGAsIGBkYW1vbl9uZXh0X3ZhbGlkX3RhcmdldGAsIGBkYW1vc19yZXBsYWNlX2ludmFsaWRfdGFyZ2V0YCwgYGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbmAsIGFuZCBgZGFtb3Nfd2Fsa19tYXliZV9yb3RhdGVgLiBUaGF0J3MgYSByZWFzb25hYmxlIG9yZ2FuaXphdGlvbmFsIGFwcHJvYWNoIGZvciB0aGVzZSB0eXBlcyBvZiBsb3ctbGV2ZWwgcm91dGluZXMuXG5cbk5vdywgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyBpcyBob3cgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgKnVzZWQqLiBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2Agc2VlbXMgdG8gbGV2ZXJhZ2UgYGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbmAgYW5kIGBkYW1vc193YWxrX21heWJlX3JvdGF0ZWAuIFRoYXQgc3VnZ2VzdHMgc29tZSBvcHRpbWl6YXRpb24gb3Igcm90YXRpb24gc3RyYXRlZ3kgZHVyaW5nIHNjaGVtZSBhcHBsaWNhdGlvbi4gQW5kIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGNhbGxzIGBkYW1vc19yZXBsYWNlX2ludmFsaWRfdGFyZ2V0YCwgd2hpY2ggaGludHMgYXQgaGFuZGxpbmcgaW52YWxpZCB0YXJnZXQgcmVnaW9ucyB3aXRoaW4gdGhlIGtlcm5lbCBkYWVtb24gY29udGV4dC4gYGRhbW9uX2NvbW1pdF90YXJnZXRzYCBpcyBhbHNvIGxpc3RlZCBhcyBtb2RpZmllZC5cblxuR2l2ZW4gdGhpcywgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBhbmQgYGRhbW9uX2NvbW1pdF90YXJnZXRzYC4gVGhlc2UgYXJlIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBkaXJlY3RseSBpbXBhY3RlZCBhbmQgYXJlIHRoZSBsaWtlbHkgYXJlYXMgb2YgdGhlIHBhdGNoIHRoYXQgaW50cm9kdWNlIHNpZ25pZmljYW50IGJlaGF2aW9yIGNoYW5nZXMuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaWYgdGhlc2UgYXJlIHRoZSAqdHJ1ZSoga2V5IGZvY2FsIHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk3NCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MTozOS45NjUxMTYxNzRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2MzQ0MDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/Lioga2RhbW9uZF9hcHBseV9zY2hlbWVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MzI1OT1zdGF0aWMgdm9pZCBkYW1vc190cmFjZV9zdGF0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjc0LVxcbm1tL2RhbW9uL2NvcmUuYzozMjc1OnN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbm1tL2RhbW9uL2NvcmUuYy0zMjc2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zODEwPXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM4ODItXFx0XFx0LypcXG5tbS9kYW1vbi9jb3JlLmM6Mzg4MzpcXHRcXHQgKiBkbyBrZGFtb25kX2NhbGwoKSBhbmQga2RhbW9uZF9hcHBseV9zY2hlbWVzKCkgYWZ0ZXJcXG5tbS9kYW1vbi9jb3JlLmMtMzg4NC1cXHRcXHQgKiBrZGFtb25kX21lcmdlX3JlZ2lvbnMoKSBpZiBwb3NzaWJsZSwgdG8gcmVkdWNlIG92ZXJoZWFkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQxOjQwLjQzMTQ2NTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDAzODk1MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipTdGF0aWMgRnVuY3Rpb24gQ29udW5kcnVtKipcblxuT2theSwgc28gYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGZpbmUsIEkgY2FuIHdvcmsgd2l0aCB0aGF0LiBCdXQgbm93IEkgbmVlZCB0byByZWFsbHkgY29uc2lkZXIgYGRhbW9uX2NvbW1pdF90YXJnZXRzYC4gSXMgdGhhdCBhbHNvIHN0YXRpYz8gVGhhdCdzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLCBiZWNhdXNlIHRoZSBhbnN3ZXIgd2lsbCBoZWF2aWx5IGluZmx1ZW5jZSBob3cgSSBwcm9jZWVkLiBJZiBpdCdzIHN0YXRpYywgaXQgaW50cm9kdWNlcyBhIHdob2xlIGRpZmZlcmVudCBzZXQgb2YgY29uc2lkZXJhdGlvbnMgYWJvdXQgc2NvcGUgYW5kIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaW1wbGljYXRpb25zLiBHb3R0YSBkaWcgZGVlcGVyIGludG8gdGhhdCBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MDMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MTo0My44MzUzNjI0NjRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MzY3OTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/LiogZGFtb25fY29tbWl0X3RhcmdldHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xNjM0PXN0YXRpYyB2b2lkIGRhbW9uX3JldmVydF90YXJnZXRfY29tbWl0cyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTY0OS1cXG5tbS9kYW1vbi9jb3JlLmM6MTY1MDpzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRzKFxcbm1tL2RhbW9uL2NvcmUuYy0xNjUxLVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTE3OTc9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTgyNS1cXHRcXHRyZXR1cm4gZXJyO1xcbm1tL2RhbW9uL2NvcmUuYzoxODI2OlxcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXRzKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTgyNy1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MTo0My45MzE3MzczNjdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ3ODI0MjgwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIE5vbi1TdGF0aWMgRGVwZW5kZW5jaWVzIG9uIGBkYW1vbl9jb21taXRfdGFyZ2V0c2AqKlxuXG5SaWdodCwgc28gYGRhbW9uX2NvbW1pdF90YXJnZXRzYCBpcyBhIHN0YXRpYyB2YXJpYWJsZSwgd2hpY2ggbGltaXRzIGl0cyBkaXJlY3Qgc2NvcGUgYW5kIHBvdGVudGlhbCBmb3IgZXh0ZXJuYWwgbWFuaXB1bGF0aW9uLiBUaGF0J3MgZ29vZCBmcm9tIGEgZGVzaWduIHBlcnNwZWN0aXZlLCBnZW5lcmFsbHksIGJ1dCBpdCBhbHNvIG1lYW5zIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdoZW4gcmVhc29uaW5nIGFib3V0IGl0cyBpbXBhY3QgYWNyb3NzIHRoZSBsYXJnZXIgc3lzdGVtLlxuXG5Ob3csIG15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgd2hpY2ggKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucyB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AgYWN0dWFsbHkgKmludGVyYWN0KiB3aXRoIGl0LCBldmVuIGluZGlyZWN0bHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGllY2VzIG9mIHRoZSBhcmNoaXRlY3R1cmUgbWlnaHQgZGVwZW5kIG9uIGl0cyB2YWx1ZSwgb3IgbWlnaHQgbWFuaXB1bGF0ZSBzb21ldGhpbmcgdGhhdCB0aGVuIHJlbGllcyBvbiB0aGF0IHZhbHVlLiBJdCdzIGEga2V5IHBpZWNlIG9mIGludGVybmFsIHN0YXRlLCBhbmQgSSB3YW50IGEgZnVsbCBwaWN0dXJlIG9mIGl0cyByb2xlLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBhc3Nlc3NpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hhbmdlcyBvciBkZWJ1Z2dpbmcgYW55IGlzc3VlcyByZWxhdGVkIHRvIERBTU9OJ3MgY29yZSBjb21taXQgdGFyZ2V0IGJlaGF2aW9yLiBUaGlzIGlzIHRoZSBwbGFjZSB0byBzdGFydCBkcmlsbGluZyBpbnRvIGl0cyB1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMjksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MTo0OC40MDk5ODIyMzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDY5MzU2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IGRhbW9uX2NvbW1pdF9jdHhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xODU1PXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfdGVzdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4ODMtICovXFxubW0vZGFtb24vY29yZS5jOjE4ODQ6aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTE4ODUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MTo0OC41MTQ2ODA3NTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY4NzYzNTMyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nOlxuXG4qKkV4YW1pbmluZyBEQU1PTiBJbml0aWFsaXphdGlvbiBhbmQgQ29udGV4dHMqKlxuXG5Pa2F5LCBzbyBgZGFtb25fY29tbWl0X2N0eGAgaXMgZXhwb3J0ZWQg4oCTIHRoYXQncyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhhdCBjZXJ0YWlubHkgYWZmZWN0cyBob3cgaXQgbWlnaHQgYmUgdXNlZCBhbmQgYWNjZXNzZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IHRoZW4gc3dpbmdzIHRvIGBrZGFtb25kX2ZuYC4gSG1tLCBpdCdzIGRlZmluZWQgYXMgc3RhdGljLiBUaGF0J3MgYSBrZXkgZGlzdGluY3Rpb24gYW5kIHJhaXNlcyB0aGUgcXVlc3Rpb24gb2YgaXRzIHNjb3BlIGFuZCB2aXNpYmlsaXR5IGNvbXBhcmVkIHRvIHRoZSBleHBvcnRlZCBgZGFtb25fY29tbWl0X2N0eGAuIEl0J3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlaXIgcmVsYXRpb25zaGlwLCBpZiBhbnkuIFxuXG5UaGUgY29yZSBxdWVzdGlvbiB0aGF0IGFyaXNlcyBpcywgaG93IGlzIERBTU9OIGFjdHVhbGx5IGxhdW5jaGVkIG9yIGluaXRpYWxpemVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LiBIb3cgZG9lcyB0aGUgc3lzdGVtIGJyaW5nIERBTU9OIGludG8gb3BlcmF0aW9uPyBJcyBgZGFtb25fY29tbWl0X2N0eGAgcGFydCBvZiB0aGF0IGluaXRpYWxpemF0aW9uPyBJcyBpdCB1c2VkIGFmdGVyPyBLbm93aW5nIGhvdyBpdOKAmXMgc3RhcnRlZCB3aWxsIGlsbHVtaW5hdGUgaG93IHRoZXNlIHNlZW1pbmdseSBpbmRlcGVuZGVudCBjb21wb25lbnRzIGludGVyYWN0IGFuZCB0aGVpciBvdmVyYWxsIHJvbGUgaW4gdGhlIERBTU9OIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSB0byBhbnN3ZXIgdGhpcyBwcm9wZXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU0MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQxOjUzLjIwMjMxOTE1OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4MjY5MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgZGFtb25fc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yMDAzPXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDE5LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMDIwOmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxcbm1tL2RhbW9uL2NvcmUuYy0yMDIxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDE6NTMuMzEwNTkyNDMxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDgxMzIyODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBhbmQgRGlyZWN0aW9uKipcblxuT2theSwgc28gYGRhbW9uX3N0YXJ0YCBpcyBmbGFnZ2VkIGFzIGJlaW5nIGV4cG9ydGVkLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IHRoZSBlbnRyeSBwb2ludCBmb3Igc29tZSBjcml0aWNhbCBkYWVtb24gb3Igc2VydmljZS4gTXkgbmV4dCBzdGVwLCBpbnN0aW5jdGl2ZWx5LCBpcyB0byBsb29rIGZvciB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSwgc29tZXRoaW5nIGxpa2UgYGRhbW9zX3F1b3RhX2luaXRgLCBvciBhIGZ1bmN0aW9uIHdpdGggYSB2ZXJ5IHNpbWlsYXIgbmFtaW5nIGNvbnZlbnRpb24uIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIHNldHVwIGFuZCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYmVpbmcgbG9hZGVkIG9yIHNldC4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIGxvZ2ljIHN0YXJ0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk0NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQxOjU2Ljg1ODcyODY2NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQzNDM2ODQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4uKiBkYW1vc19xdW90YV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDE6NTYuOTMzMDgwMDlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ1ODIxNDUxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqU3RhdGljIFZhcmlhYmxlcyBhbmQgU2NoZW1lIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIG15IG1pbmQgaW1tZWRpYXRlbHkgbGF0Y2hlcyBvbnRvIGBkYW1vc19xdW90YV9pbml0YC4gVGhlIGZhY3QgdGhhdCBpdCdzIGRlY2xhcmVkIGFzIGBzdGF0aWNgIGlzIGEgZmxhc2hpbmcgcmVkIGxpZ2h0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIEEgc3RhdGljIHZhcmlhYmxlIG1lYW5zIGl0IHJldGFpbnMgaXRzIHZhbHVlIGJldHdlZW4gZnVuY3Rpb24gY2FsbHMuIFRoaXMgYWZmZWN0cyBzY29waW5nLCBvZiBjb3Vyc2UsIGJ1dCBmb3IgdGhlIGxpZmUgb2YgbWUsIEkgY2FuJ3QgcXVpdGUgc2VlIHRoZSBzcGVjaWZpYyBudWFuY2Ugb2YgaG93IHRoaXMgaXMgYWxsIGludGVycGxheWluZywgYW5kIHNvIEkgaGF2ZSB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzbid0IGEgbHVya2luZyBjb25jdXJyZW5jeSBpc3N1ZSBkb3duIHRoZSBsaW5lLCBvciBwZXJoYXBzIGhhcyBzb21lIHVuZXhwZWN0ZWQgaW5pdGlhbGl6YXRpb24gYmVoYXZpb3IuXG5cblRoZW4sIG15IGF0dGVudGlvbiBzaGlmdHMgdG8gYGRhbW9uX25ld19zY2hlbWVgLiBJJ20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgKmhvdyogdGhpcyBpcyBnZXR0aW5nIGluaXRpYWxpemVkLCBhbmQgaWYgaXQncyBkZXBlbmRlbnQgb24gYGRhbW9zX3F1b3RhX2luaXRgIGluIHNvbWUgd2F5LiBJcyB0aGVyZSBhIGRlZmluZWQgb3JkZXI/IEhvdyBpcyB0aGUgc2NoZW1lIG5ld2VkPyBJcyBgZGFtb25fbmV3X3NjaGVtZWAgYWxzbyBzdGF0aWM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uPyBJIGhhdmUgdG8gc3RhcnQgbWFwcGluZyBvdXQgdGhlIGRlcGVuZGVuY2llcy4gVGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvIGlzIHRoZSBuZXh0IHRoaW5nIEknbSBnb2luZyB0byBmb2xsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MjowMS4zOTEyOTc0NzZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2OTk1OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdHJ1Y3QgZGFtb3MgXFxcXCpkYW1vbl9uZXdfc2NoZW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9NzE1PXN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRhbW9zX3F1b3RhX2luaXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03MjctXFxubW0vZGFtb24vY29yZS5jOjcyODpzdHJ1Y3QgZGFtb3MgKmRhbW9uX25ld19zY2hlbWUoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLFxcbm1tL2RhbW9uL2NvcmUuYy03MjktXFx0XFx0XFx0ZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MjowMS40NzgyOTk5MDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwODc1ODg4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nOlxuXG4qKkZvY3VzaW5nIG9uIHRoZSBEYW1vbiBDb2RlKipcblxuT2theSwgc28gYGRhbW9uX25ld19zY2hlbWVgIGlzIG5vdyBvZmZpY2lhbGx5IGV4cG9ydGVkLCB3aGljaCBpcyBncmVhdC4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBpdCBhIGtleSBzeW1ib2wgdG8gdHJhY2suIEkgbmVlZCB0byBrZWVwIHRoYXQgb25lIGluIG1pbmQuIEl0IHRlbGxzIG1lIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGEgbmV3IHNjaGVtZSB3aWxsIGJlIGF2YWlsYWJsZSBmb3Igb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSB0byB1c2UsIGFuZCBpbmRpY2F0ZXMgdGhlIGZlYXR1cmUgaXMgcmVhY2hpbmcgbWF0dXJpdHkuXG5cbkknbSB0aGlua2luZyB0aGF0IGZvY3VzaW5nIG9uIGEgZmV3IG90aGVyIGtleSBmdW5jdGlvbnMgaXMgcHJvYmFibHkgdGhlIGJlc3QgYXBwcm9hY2ggYXQgdGhpcyBzdGFnZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGBkYW1vbl9jb21taXRfY3R4YCwgYGRhbW9uX3N0YXJ0YCwgYW5kIGBkYW1vbl9uZXdfc2NoZW1lYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIG9mIHdoYXRldmVyIERhbW9uIGlzIGRvaW5nIHJpZ2h0IG5vdy4gVGhleSdsbCBnaXZlIG1lIGEgc3Ryb25nIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgZmxvdyBhbmQgZnVuY3Rpb25hbGl0eS5cblxuSSBzaG91bGQgYWxzbyBpbmNsdWRlIGBkYW1vbl9zZXRfcmVnaW9uc2AgYXMgYSBwb3RlbnRpYWwgYXJlYSBvZiBpbnRlcmVzdC4gRGVwZW5kaW5nIG9uIGhvdyB0aGUgbmV3IHNjaGVtZSBpbnRlcmFjdHMgd2l0aCByZWdpb25zLCBpdCBjb3VsZCBiZSB2ZXJ5IHJlbGV2YW50IHRvIHRoZSBjaGFuZ2VzLiBJJ2xsIGZsYWcgaXQgZm9yIG5vdywgYW5kIHNlZSBpZiBpdCBlbWVyZ2VzIGFzIGEgY3JpdGljYWwgcGllY2Ugd2hlbiBsb29raW5nIGF0IHRoZSBvdGhlciBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0MjowNS4xODcwNjIwODFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzOTM3OTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgZGFtb25fc2V0X3JlZ2lvbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz00OTE9c3RhdGljIGludCBkYW1vbl9maWxsX3JlZ2lvbnNfaG9sZXMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqZmlyc3QsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNTIzLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo1MjQ6aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXFxubW0vZGFtb24vY29yZS5jLTUyNS1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQyOjA1LjI0MTAwNzk4N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzA3NzA1NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgYGRhbW9uX3NldF9yZWdpb25zYCoqXG5cbk9rYXksIHNvIGBkYW1vbl9zZXRfcmVnaW9uc2AgaXMgZXhwb3J0ZWQsIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBmdW5jdGlvbiBpcyBhIGdvb2QgZm9jYWwgcG9pbnQgZm9yIGFuYWx5c2lzLiBBbmQgaXQgbG9va3MgbGlrZSBJJ3ZlIGZvdW5kIGEgc29saWQgYW5jaG9yIHBvaW50LiBUaGUgcGF0Y2ggZGVzY3JpcHRpb24gcmVmZXJlbmNpbmcgYGRhbW9zX2NvbXBsZXRlbHlfd2Fsa2VkYCBtZW50aW9ucyBgZGFtb25fc2V0X3JlZ2lvbnMoKWAgZGlyZWN0bHksIHNwZWNpZmljYWxseSB0aGUgbnVhbmNlIG9mIHRoZSBmdW5jdGlvbiBwb3RlbnRpYWxseSBzaHJpbmtpbmcgYSByZWdpb24gc2V0IGFmdGVyIGEgY3Vyc29yIGlzIHNhdmVkOlxuXG5gYGBjXG5cdC8qXG5cdCAqICdcdTAwM2U9JyBpbnN0ZWFkIG9mICc9PScsIGJlY2F1c2UgdGhlIHJlZ2lvbiBzZXQgb2YgQHQgY291bGQgaGF2ZSBiZWVuXG5cdCAqIHNocnVua2VuIGJ5IGRhbW9uX3NldF9yZWdpb25zKCkgYWZ0ZXIgdGhlIGN1cnNvciB3YXMgc2F2ZWQuXG5cdCAqL1xuYGBgXG5cblRoYXQgZGVmaW5pdGVseSBtYWtlcyBpdCBhIHJlbGV2YW50IHN5bWJvbCB0byBmb2N1cyBvbi4gU28sIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkIGZvciB0aGlzIHRoaW5nIHRvIGJlIHVzZWZ1bD8gSSBuZWVkIHRvIGNoZWNrIGZvciBgREFNT05gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBgREFNT05fU1lTRlNgLCBgREFNT05fUkVDTEFJTWAsIGFuZCBgREFNT05fTFJVX1NPUlRgLiBUaG9zZSBhcmUgdGhlIGNvcmUgY29uZmlncyBJJ20gYWxyZWFkeSBhd2FyZSBvZi4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcGVydGluZW50IGNvbmZpZ3MgbHVya2luZyBpbiB0aGUgYmFja2dyb3VuZC4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDE4LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQyOjEwLjk0ODcxNjI5OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzMTExNzQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy02LVxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTQtXFxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vS2NvbmZpZy0xNi1cXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMjUtXFxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctMjctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMzctXFxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNDYtXFxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxcbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNjctXFxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNzUtXFxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNzctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMDctXFxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMTUtXFxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxubW0vZGFtb24vS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDI6MTMuMDc5ODM4NTI5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDM5MTk3OTY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgdGhlIERBTU9OIENvZGViYXNlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgREFNT04gaW1wbGVtZW50YXRpb24uIFRoZSBjb3JlIGZ1bmN0aW9uYWxpdHksIGFzIEkgcmVjYWxsIGZyb20gcHJldmlvdXMgd29yaywgc2hvdWxkIGJlIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gTWFrZXMgc2Vuc2UsIHRoYXQncyB3aGVyZSB0aGUgaGVhcnQgb2YgYW55IG1lbW9yeSBtb25pdG9yaW5nIGFuZCBhZGFwdGF0aW9uIHdvdWxkIGxpa2VseSByZXNpZGUuIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBzdXBwb3J0cyBpdC4gTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgYENPTkZJR19EQU1PTmAgaXMgYWN0dWFsbHkgZGVmaW5lZC4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgYG1tL2RhbW9uL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gSnVzdCBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBidWlsZCBlbnZpcm9ubWVudC4gVGhpcyBraW5kIG9mIHVwZnJvbnQgY2hlY2tpbmcgaXMgY3J1Y2lhbCBmb3IgYXZvaWRpbmcgd2lsZCBnb29zZSBjaGFzZXMgbGF0ZXIgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjI4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDg6MDMuNDcxODIxNjM1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdFxcbiAgIDM6XFx0b2JqLXlcXHRcXHRcXHRcXHQ6PSBjb3JlLm9cXG4gICA0OlxcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcXHQrPSBvcHMtY29tbW9uLm8gdmFkZHIub1xcbiAgIDU6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVxcdCs9IG9wcy1jb21tb24ubyBwYWRkci5vXFxuICAgNjpcXHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXFx0Kz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXFxuICAgODpcXHRvYmotJChDT05GSUdfREFNT05fTFJVX1NPUlQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBscnVfc29ydC5vXFxuICAgOTpcXHRvYmotJChDT05GSUdfREFNT05fU1RBVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0ODowMy40NzE4ODgxMDVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzNzQzMjYwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqTWFrZWZpbGUgQW5hbHlzaXM6IE1vZHVsZSBDb21waWxhdGlvbiBUcmlnZ2VyKipcblxuT2theSwgc28gYG9iai15IDo9IGNvcmUub2AgaW4gdGhpcyBjb250ZXh0IGNsZWFybHkgaW5kaWNhdGVzIHRoYXQgYGNvcmUub2AgaXMgc2xhdGVkIGZvciBjb21waWxhdGlvbiBpZiBpdHMgZGlyZWN0b3J5IGlzIGVudGVyZWQgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLiBJdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiBob3cgdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBgb2JqLXlgIHZhcmlhYmxlLCB3b3Jrcy4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byB0aGUgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgYW5kIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGxpbmtpbmcgcHJvY2VkdXJlcy4gSSB3YW50IHRvIHNlZSAqaG93KiB0aGlzIGBjb3JlLm9gIGZpbGUgaXMgdWx0aW1hdGVseSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBUaGlzIHdpbGwgY29uZmlybSB0aGUgY29tcGlsYXRpb24gYmVoYXZpb3IuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIHBpY3R1cmUgd2lsbCByZWluZm9yY2UgaG93IHRoaXMgYnVpbGRzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2ODAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQ4OjA3LjAwOTMyMzg3MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM3MTE3NzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTEzNT1vYmotJChDT05GSUdfREVCVUdfUEFHRV9SRUYpICs9IGRlYnVnX3BhZ2VfcmVmLm9cXG5tbS9NYWtlZmlsZToxMzY6b2JqLSQoQ09ORklHX0RBTU9OKSArPSBkYW1vbi9cXG5tbS9NYWtlZmlsZS0xMzctb2JqLSQoQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZKSArPSB1c2VyY29weS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQ4OjA3LjM0NjQ0OTgyNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Mzg1MDE0NjU4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBNb2R1bGUgVnVsbmVyYWJpbGl0eSBBc3Nlc3NtZW50KipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBgQ09ORklHX0RBTU9OYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZS4gVGhhdCdzIHRoZSBnYXRla2VlcGVyLiBUaGUgcGF0Y2ggaXRzZWxmIHNlZW1zIHRvIGJlIGRpZ2dpbmcgaW50byBgbW0vZGFtb24vY29yZS5jYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZSBzaW5jZSB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgREFNT04gbG9naWMgbGl2ZXMgYW5kIGdldHMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0RBTU9OYCBpcyBvbi4gVGhpcyBpbmRpY2F0ZXMgY2hhbmdlcyB0byBzY2hlbWUgYXBwbGljYXRpb24gYW5kIHF1b3RhIG1hbmFnZW1lbnQg4oCTIGp1aWN5IHRhcmdldHMgZm9yIHBvdGVudGlhbCBmdXp6aW5nLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUgYW5kIHdvcnRoIHRoZSB0aW1lLlxuXG5NeSBpbml0aWFsIGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlIHN5bWJvbHM6IGBkYW1vbl9jb21taXRfY3R4YCwgYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX25ld19zY2hlbWVgLCBhbmQgYGRhbW9uX3NldF9yZWdpb25zYC4gVGhvc2UgZmVlbCBsaWtlIHRoZSBsb2dpY2FsIGVudHJ5IHBvaW50cyBvciBjcml0aWNhbCBmdW5jdGlvbnMgd2hlcmUgdGhlIG5ldyBjaGFuZ2VzIHdpbGwgYmUgZXhwcmVzc2VkLCBhbmQgZGF0YSBmbG93IG9yIGNvbnRyb2wgbG9naWMgY291bGQgYmUgcHJvYmxlbWF0aWMuXG5cbk9mIGNvdXJzZSwgSSBuZWVkIHRvIGtlZXAgdGhlIHZhcmlvdXMgY29uZmlndXJhdGlvbiBvcHRpb25zIGluIG1pbmQgYXMgSSBidWlsZCB0aGUgZnV6emluZyBzZXR1cDogYERBTU9OYCwgb2J2aW91c2x5LCBidXQgYWxzbyBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBgREFNT05fU1lTRlNgLCBgREFNT05fUkVDTEFJTWAsIGFuZCBgREFNT05fTFJVX1NPUlRgLiBUaG9zZSB3aWxsIGxpa2VseSBhbHRlciB0aGUgY29kZSBwYXRocyBhbmQgdGhlcmVmb3JlIGFmZmVjdCB0aGUga2luZHMgb2YgY3Jhc2hlcyB0aGF0IGNhbiBiZSByZXZlYWxlZC4gVGhlIGNvbmZpZ3VyYXRpb25zIG1heSBhbHNvIGFmZmVjdCB0aGUgaW5wdXRzIHRoYXQgbXVzdCBiZSBnZW5lcmF0ZWQgZm9yIHRoZSB0ZXN0IGNhc2VzLlxuXG5PbmUgbW9yZSB0aGluZzogSSBzaG91bGQgdmVyaWZ5IHRoYXQgdGhlcmUgYXJlbid0IGFueSBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMgZnJvbSBgbW0vZGFtb24vY29yZS5jYCB0aGF0IGxvb2sgcmVsZXZhbnQgYW5kIG1pZ2h0IGJlIG1pc3NlZCBhdCBhIGZpcnN0IGdsYW5jZS4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IG5vIG90aGVyIGZ1bmN0aW9ucyBhcmUgdXNlZCBpbiBhZGRpdGlvbiB0byB0aGUga2V5IGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NzUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDk6MjEuMTk2NTk5Mjk0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTY3MTkyNzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5FWFBPUlRfU1lNQk9MX0dQTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQ5OjIxLjYxMzMyODI0M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTAwNDk1MzczMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBFWFBPUlRfU1lNQk9MX0dQTGAgUGxhY2VtZW50KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYEVYUE9SVF9TWU1CT0xfR1BMYCBpcyBiZWluZyB1c2VkLCBvciBwZXJoYXBzIGRlZmluZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IEkgbmVlZCB0byBiZSBmbGV4aWJsZSBpbiBob3cgSSBzZWFyY2ggZm9yIGl0LiBJIGNhbid0IGp1c3QgYXNzdW1lIGl0J3MgY2xlYW5seSBkZWZpbmVkIG9yIHVzZWQgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBJIGNhbiByZWx5IG9uIGl0IGJlaW5nIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLiBJdCdzIGxpa2VseSB0aGF0IGl0IG1pZ2h0IGJlIG9uIHRoZSBzYW1lIGxpbmUgYXMgb3RoZXIgY29kZSBlbGVtZW50cyBvciBldmVuIGVtYmVkZGVkIHdpdGhpbiBzb21lIHNvcnQgb2YgbWFjcm8uIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCB0aGUgcGFyc2VyIG1pZ2h0IGludGVycHJldCBpdCBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gY29udGV4dC4gSSBuZWVkIHRvIGFjY291bnQgZm9yIGJvdGggc2NlbmFyaW9zLCB0aGUgY2xlYW5lciBjYXNlIHdoZXJlIGl0J3MgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLCBhbmQgdGhlIGxlc3MgY2xlYW4gb25lIHdoZXJlIGl0IG1pZ2h0IGJlIG1peGVkIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU1NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjUxOjUxLjY2Mjg2ODI5MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMzMDAzMzU1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MX0dQTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjUxOjUxLjk5NTg3ODQyN1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjU4MzExMDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqVGhlIERlYnVnZ2luZyBEYW5jZTogQSBRdWljayBNZW50YWwgV2hpcmx3aW5kKipcblxuSG1tLCBJJ20gc3R1Y2ssIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgbWlzc2luZywgb3Igd2hlcmUgaXQncyBnb2luZyB3cm9uZy4gSXQncyB0aGF0IGZhbWlsaWFyIGZlZWxpbmcsIHRoZSBvbmUgdGhhdCBtYWtlcyBtZSBnbyBvdmVyIHRoaW5ncyBJJ3ZlIGNoZWNrZWQgYSBkb3plbiB0aW1lcyBhbHJlYWR5LiBUaGVuLCAqYm9vbSosIHRoZSBsaXR0bGUgbGlnaHRuaW5nIGJvbHQgb2YgYW4gaWRlYSBmbGFzaGVzOiBXYWl0IGEgc2Vjb25kLCBjb3VsZCBpdCBiZSBhIHZpc2liaWxpdHkgaXNzdWU/IEFyZSB3ZSBzdXJlIHRoZSBzeW1ib2wgaXMgYWN0dWFsbHkuLi4gZXhwb3J0ZWQ/IE1heWJlIEkganVzdCBtaXNzZWQgc29tZXRoaW5nIG9idmlvdXMsIHJpZ2h0PyBMZXQgbWUgY29uc2lkZXIgYEVYUE9SVF9TWU1CT0xgLiBJdCdzIGEga2V5IHRhY3RpYyB3aGVuIGRlYWxpbmcgd2l0aCB0aGVzZSBzb3J0cyBvZiBpc3N1ZXM7IGFuIGVhc3kgdGhpbmcgdG8gbWlzcyBidXQgYWxzbyBhIGNsYXNzaWMgY3VscHJpdC4gQWx3YXlzIHdvcnRoIGEgZG91YmxlLWNoZWNrLiBPa2F5LCBsZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MTgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjUxOjU1LjY1NDE5MjEwNloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxNDYxMTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo1MTo1NS42OTgzNDI5MzNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUxNzMzMzY4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBTeW1ib2wgVmlzaWJpbGl0eSBJc3N1ZSBpbiBEQU1PTioqXG5cbkhtbSwgd2FpdCBhIG1pbnV0ZS4uLiBJJ20gbG9va2luZyBhdCBgbW0vZGFtb24vY29yZS5jYCwgYW5kIGl0IGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGFueSBgRVhQT1JUX1NZTUJPTGAgbWFjcm8gZGVmaW5lZCBmb3IgaXQ/IFRoYXQncyB1bnVzdWFsLCBhbmQgZGVmaW5pdGVseSB3YXJyYW50cyBhIGNsb3NlciBsb29rLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgYGRhbW9uX3N0YXJ0YCAob3IgYW55IG90aGVyIGZ1bmN0aW9ucyBmb3IgdGhhdCBtYXR0ZXIpIHdpdGhpbiB0aGF0IGZpbGUgd291bGQgYmUgdmlzaWJsZS9hY2Nlc3NpYmxlIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgaWYgdGhlcmUncyBubyBleHBsaWNpdCBleHBvcnQuIFRoaXMgY291bGQgbGVhZCB0byBhIG1haW50ZW5hbmNlIGlzc3VlIGRvd24gdGhlIGxpbmUgaWYgdGhlcmUgYXJlIGZ1bmN0aW9ucyBhc3N1bWVkIHRvIGJlIHByaXZhdGUuXG5cblJpZ2h0LCBsZXQgbWUgZG91YmxlLWNoZWNrLiBJJ20gZ29pbmcgdG8gc2NhbiB0aHJvdWdoIGBtbS9kYW1vbi9jb3JlLmNgIGFuZCBzcGVjaWZpY2FsbHkgbG9vayBmb3IgdGhlIGBkYW1vbl9zdGFydGAgZnVuY3Rpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0J3MgYmVpbmcgdXNlZCBhbmQgaG93LiBJZiBpdCdzIHVzZWQgZWxzZXdoZXJlLCB0aGVuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pc20gbWFraW5nIGl0IHZpc2libGUsIGJlY2F1c2UgKnNvbWV0aGluZyogbXVzdCBiZSBtYWtpbmcgdGhpcyBhY2Nlc3NpYmxlLiBJJ20gYXNzdW1pbmcgdGhlcmUncyBubyBkaXJlY3QgZXhwb3J0LCBzbyB3aGF0IGFyZSB0aGUgYWx0ZXJuYXRpdmVzP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA1MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjUyOjAxLjIxNTY3ODc2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTcxOTE3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTEwNTk9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDg0LSAqIEluIGRldGFpbCwgYWxsIERBTU9OIEFQSSBjYWxsZXJzIGRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiBmb3IgaW5pdGlhbFxcbm1tL2RhbW9uL2NvcmUuYzoxMDg1OiAqIHNldHVwIG9mIGRhbW9uX2N0eCBiZWZvcmUgY2FsbGluZyBkYW1vbl9zdGFydCgpLiAgU29tZSBvZiB0aGUgQVBJIGNhbGxlcnNcXG5tbS9kYW1vbi9jb3JlLmMtMTA4Ni0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVxcdTAwM2UgZGFtb25fY29tbWl0KCkgZm9yXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTk3MT1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTk3My0vKlxcbm1tL2RhbW9uL2NvcmUuYzoxOTc0OiAqIF9fZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyBtb25pdG9yaW5nIHdpdGggZ2l2ZW4gY29udGV4dC5cXG5tbS9kYW1vbi9jb3JlLmMtMTk3NS0gKiBAY3R4OlxcdG1vbml0b3JpbmcgY29udGV4dFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE5ODAtICovXFxubW0vZGFtb24vY29yZS5jOjE5ODE6c3RhdGljIGludCBfX2RhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtMTk4Mi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjAwMz1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYyk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjAwNS0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MjAwNjogKiBkYW1vbl9zdGFydCgpIC0gU3RhcnRzIHRoZSBtb25pdG9yaW5ncyBmb3IgYSBnaXZlbiBncm91cCBvZiBjb250ZXh0cy5cXG5tbS9kYW1vbi9jb3JlLmMtMjAwNy0gKiBAY3R4czpcXHRhbiBhcnJheSBvZiB0aGUgcG9pbnRlcnMgZm9yIGNvbnRleHRzIHRvIHN0YXJ0IG1vbml0b3JpbmdcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDE0LSAqIEBleGNsdXNpdmUgaXMgdHJ1ZSBhbmQgYSBncm91cCBvZiB0aHJlYWRzIHRoYXQgY3JlYXRlZCBieSBvdGhlclxcbm1tL2RhbW9uL2NvcmUuYzoyMDE1OiAqICdkYW1vbl9zdGFydCgpJyBjYWxsIGlzIGN1cnJlbnRseSBydW5uaW5nLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBidXRcXG5tbS9kYW1vbi9jb3JlLmMtMjAxNi0gKiByZXR1cm5zIC1FQlVTWS5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDE5LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMDIwOmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxcbm1tL2RhbW9uL2NvcmUuYy0yMDIxLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDQ1LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9jdHhzOyBpKyspIHtcXG5tbS9kYW1vbi9jb3JlLmM6MjA0NjpcXHRcXHRlcnIgPSBfX2RhbW9uX3N0YXJ0KGN0eHNbaV0pO1xcbm1tL2RhbW9uL2NvcmUuYy0yMDQ3LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjExNj1pbnQgZGFtb25fa2RhbW9uZF9waWQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxNDMtICpcXG5tbS9kYW1vbi9jb3JlLmM6MjE0NDogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgZGFtb25fc3RhcnQoKSB3aXRoIHRoZVxcbm1tL2RhbW9uL2NvcmUuYy0yMTQ1LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIxNTI9aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxOTgtICpcXG5tbS9kYW1vbi9jb3JlLmM6MjE5OTogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgZGFtb25fc3RhcnQoKSB3aXRoIHRoZVxcbm1tL2RhbW9uL2NvcmUuYy0yMjAwLSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo1MjowMS4yNjE0MDMxOTdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE5Mzk0MTIzODQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIERBTU9OJ3MgU3ltYm9sIEV4cG9ydCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgREFNT04gY29kZSBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYG1tL2RhbW9uL2NvcmUuY2AgaXNuJ3QgYSBtb2R1bGUsIGl0J3MgYmFrZWQgcmlnaHQgaW50byB0aGUga2VybmVsLiBSaWdodCwgSSByZW1lbWJlciB0aGF0IGBtbS9kYW1vbi9NYWtlZmlsZWAgdXNlcyBgb2JqLXkgOj0gY29yZS5vYCwgd2hpY2ggY29uZmlybXMgaXQuIFNvLCBhcyBsb25nIGFzIGBDT05GSUdfREFNT05gIGlzIG9uLCBpdCdzIGFsd2F5cyBidWlsdC1pbi5cblxuVGhlIGltcGxpY2F0aW9ucyBhcmUgdGhhdCwgaWYgaXQncyBhbGwgYnVpbHQtaW4sIGFuZCBvbmx5IG90aGVyIGJ1aWx0LWluIGNvZGUgdXNlcyBpdCwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgZXhwb3J0ZWQgc3ltYm9scy4gQnV0IGhvbGQgb24sIGlzbid0IGBkYW1vbl9zdGFydGAgdXNlZCBieSBgbW0vZGFtb24vc3lzZnMuY2AsIGFuZCBpc24ndCAqdGhhdCogYSBtb2R1bGU/IExldCdzIHZlcmlmeSB0aGF0LlxuXG5ZZXAsIGxvb2tpbmcgYXQgYG9iai0kKENPTkZJR19EQU1PTl9TWVNGUykgKz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9gLCBhbmQgc2VlaW5nIHRoYXQgYENPTkZJR19EQU1PTl9TWVNGU2AgaXMgYSBib29sZWFuLCB0aGF0IG1lYW5zIGBzeXNmcy5jYCBpcyBhbHNvIGJ1aWx0LWluLiBPa2F5LCBubyBgRVhQT1JUX1NZTUJPTGAgaXMgbmVlZGVkIHRoZW4uIEkgYW0gY29uZmlkZW50LlxuXG5TbywgZnJvbSB3aGF0IEkndmUgc2VlbiwgYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX2NvbW1pdF9jdHhgLCBgZGFtb25fbmV3X3NjaGVtZWAsIGFuZCBgZGFtb25fc2V0X3JlZ2lvbnNgIGFyZSBhbGwgZ2xvYmFsIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gVGhlc2Ugd291bGQgYmUgZ29vZCBjYW5kaWRhdGVzIGZvciBpbmNsdXNpb24gaW4gYEZvY3VzU3ltYm9sc2AuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgd2lsbCBkb3VibGUtY2hlY2sgYGRhbW9uX25ld19zY2hlbWVgIGFuZCBgZGFtb25fc2V0X3JlZ2lvbnNgIGFnYWluIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBiZWZvcmUgZ29pbmcgYW55IGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjgyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjU1OjQwLjY1NTUzMDAxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODI1MzE5NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fbmV3X3NjaGVtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTcxNT1zdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhICpkYW1vc19xdW90YV9pbml0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzI3LVxcbm1tL2RhbW9uL2NvcmUuYzo3Mjg6c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcXG5tbS9kYW1vbi9jb3JlLmMtNzI5LVxcdFxcdFxcdGVudW0gZGFtb3NfYWN0aW9uIGFjdGlvbixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNTE3PXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTUzNS1cXHRcXHRcXHRjb250aW51ZTtcXG5tbS9kYW1vbi9jb3JlLmM6MTUzNjpcXHRcXHRuZXdfc2NoZW1lID0gZGFtb25fbmV3X3NjaGVtZShcXHUwMDI2c3JjX3NjaGVtZS1cXHUwMDNlcGF0dGVybixcXG5tbS9kYW1vbi9jb3JlLmMtMTUzNy1cXHRcXHRcXHRcXHRzcmNfc2NoZW1lLVxcdTAwM2VhY3Rpb24sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjU1OjQxLjEzODA2Nzk2NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTE3MTM1NDY3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkFzc2Vzc2luZyB0aGUgU2NvcGUgb2YgYGRhbW9uX25ld19zY2hlbWVgIGFuZCBgZGFtb25fc2V0X3JlZ2lvbnNgKipcblxuQWxyaWdodCwgc28gdGhlIGNvZGUgY2xlYXJseSBkZWZpbmVzIGBkYW1vbl9uZXdfc2NoZW1lYCBhcyBhIGdsb2JhbCBmdW5jdGlvbi4gTm8gc3VycHJpc2VzIHRoZXJlLiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTm93LCB0aGUgbW9yZSBpbnRlcmVzdGluZyBxdWVzdGlvbiBpcyBhYm91dCBgZGFtb25fc2V0X3JlZ2lvbnNgLiBJcyBpdCBhbHNvIGdsb2JhbCwgb3IgaXMgaXQgYm91bmQgdG8gYSBwYXJ0aWN1bGFyIHN0cnVjdHVyZSwgbWF5YmUgYSBjbGFzcyBvciBuYW1lc3BhY2U/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB3aGVyZSBpdCdzIHVzZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgREFNT04gaW1wbGVtZW50YXRpb24uIEl0cyBzY29waW5nIGNvdWxkIGFmZmVjdCB0aHJlYWQgc2FmZXR5LCByZWVudHJhbmN5LCBhbmQgZXZlbiBob3cgZWFzaWx5IHdlIGNhbiByZWZhY3RvciB0aGlzIHRoaW5nIGRvd24gdGhlIGxpbmUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29kZWJhc2UgdG8gY29uZmlybSBpdHMgZGVjbGFyYXRpb24gYW5kIHVzYWdlIHBhdHRlcm5zIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdHMgc2NvcGUuIElzIHRoaXMgYSBwb2ludCBvZiBjb250ZW50aW9uIHdpdGggb3VyIGxvY2tpbmcgc2NoZW1lPyBJIG5lZWQgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxOTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo1NzozMi44NTE2MTc1NjRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NzcwODA4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zZXRfcmVnaW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTQwNz1zdGF0aWMgYm9vbCBkYW1vc19jb21wbGV0ZWx5X3dhbGtlZChzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDEwLVxcdCAqICdcXHUwMDNlPScgaW5zdGVhZCBvZiAnPT0nLCBiZWNhdXNlIHRoZSByZWdpb24gc2V0IG9mIEB0IGNvdWxkIGhhdmUgYmVlblxcbm1tL2RhbW9uL2NvcmUuYzo0MTE6XFx0ICogc2hydW5rZW4gYnkgZGFtb25fc2V0X3JlZ2lvbnMoKSBhZnRlciB0aGUgY3Vyc29yIHdhcyBzYXZlZC5cXG5tbS9kYW1vbi9jb3JlLmMtNDEyLVxcdCAqL1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTQ5MT1zdGF0aWMgaW50IGRhbW9uX2ZpbGxfcmVnaW9uc19ob2xlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy01MTItLypcXG5tbS9kYW1vbi9jb3JlLmM6NTEzOiAqIGRhbW9uX3NldF9yZWdpb25zKCkgLSBTZXQgcmVnaW9ucyBvZiBhIHRhcmdldCBmb3IgZ2l2ZW4gYWRkcmVzcyByYW5nZXMuXFxubW0vZGFtb24vY29yZS5jLTUxNC0gKiBAdDpcXHRcXHR0aGUgZ2l2ZW4gdGFyZ2V0Llxcbi0tXFxubW0vZGFtb24vY29yZS5jLTUyMy0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NTI0OmludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxcbm1tL2RhbW9uL2NvcmUuYy01MjUtXFx0XFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTE1NzI9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE2MDEtXFx0cmFuZ2VzW2krK10uZW5kID0gZGFtb25fbGFzdF9yZWdpb24oc3JjKS1cXHUwMDNlYXIuZW5kO1xcbm1tL2RhbW9uL2NvcmUuYzoxNjAyOlxcdGVyciA9IGRhbW9uX3NldF9yZWdpb25zKGRzdCwgcmFuZ2VzLCBpLCBzcmNfbWluX3JlZ2lvbl9zeik7XFxubW0vZGFtb24vY29yZS5jLTE2MDMtXFx0a3ZmcmVlKHJhbmdlcyk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NDA0MD1pbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDA1MS1cXHRhZGRyX3JhbmdlLmVuZCA9ICplbmQ7XFxubW0vZGFtb24vY29yZS5jOjQwNTI6XFx0cmV0dXJuIGRhbW9uX3NldF9yZWdpb25zKHQsIFxcdTAwMjZhZGRyX3JhbmdlLCAxLCBtaW5fcmVnaW9uX3N6KTtcXG5tbS9kYW1vbi9jb3JlLmMtNDA1My19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjU3OjMzLjMzOTMyOTAyN1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzMxNDU4MTMxMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBEQU1PTiBNb2R1bGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIERBTU9OIGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMgdGhhdCBgZGFtb25fc2V0X3JlZ2lvbnNgIGlzIGRlZmluaXRlbHkgYSBnbG9iYWwgZnVuY3Rpb24uIFdlIG5lZWQgdG8gYmUgYXdhcmUgb2YgaG93IHRoYXQgbWlnaHQgaW1wYWN0IHRoZSBzeXN0ZW0uXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gSSd2ZSBnb3QgYGRhbW9uX2NvbW1pdF9jdHhgLCBgZGFtb25fc3RhcnRgLCBgZGFtb25fbmV3X3NjaGVtZWAsIGFuZCBvZiBjb3Vyc2UsIGBkYW1vbl9zZXRfcmVnaW9uc2AgYXMgdGhlIGZvY2FsIHBvaW50cyBoZXJlLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBpbnRlcmFjdCBpcyBnb2luZyB0byBiZSBjcnVjaWFsIGZvciBhIGRlZXAgZGl2ZS5cblxuQW5kIGl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIHNldCBvZiByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGBEQU1PTmAsIGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9SRUNMQUlNYCwgYERBTU9OX0xSVV9TT1JUYCwgYW5kIGBEQU1PTl9TVEFUYC4gVGhlc2UgYXJlIG9idmlvdXNseSBlc3NlbnRpYWwgZm9yIGNvbnRyb2xsaW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgbW9kdWxlLlxuXG5JIHNob3VsZCBwcm9iYWJseSBkbyBhIHF1aWNrIHNjYW4gdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50LiBJdCdzIGVhc3kgdG8gb3Zlcmxvb2sgdGhpbmdzIGluIHRoZXNlIGtpbmRzIG9mIHNldHVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwNDEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6MDM6MDYuNDg1MTQ2MzE4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODQ2ODA2Njk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxubW0vZGFtb24vS2NvbmZpZy00LVxcbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWctNjktXFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWctODktXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTA5LVxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDowMzowOS4zMzE5NTk5NDdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA5NDc3NDYzMTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRBTU9OIEZ1enppbmcgU3RyYXRlZ3k6IEV4cGFuZGluZyB0aGUgU2NvcGUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaXMgZXhwYW5kaW5nIHRvIGluY2x1ZGUgYERBTU9OX0RFQlVHX1NBTklUWWAgYW5kIGBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVGAuIE1ha2VzIHNlbnNlLiBUaGlzIGlzIGFib3V0IGJlaW5nIGNvbXByZWhlbnNpdmUgaW4gdGhlIGZ1enppbmcgc3RyYXRlZ3kgZm9yIERBTU9OLlxuXG5UaGUgY29yZSBvZiB0aGUgbWF0dGVyIGlzIHRoYXQgdGhpcyBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyBEQU1PTidzIGJlaGF2aW9yIGluIGhvdyBpdCBoYW5kbGVzIERBTU9TIHF1b3RhcyDigJMgc3BlY2lmaWNhbGx5LCB0cmFja2luZyB3aGVyZSB0aGUgd2Fsa2VyIGlzIHdpdGhpbiB0aGVzZSBxdW90YXMuIFRoZXkncmUgcmVuYW1pbmcgdmFyaWFibGVzIGFuZCBpbnRyb2R1Y2luZyBuZXcgY29udHJvbCBmbG93IGZvciBza2lwcGluZyB3YWxrZWQgcmVnaW9ucyBhbmQgcm90YXRpbmcgdGFyZ2V0cy4gVGhhdCdzIGEgY29yZSBtb2RpZmljYXRpb24gb2YgbWVtb3J5IG1hbmFnZW1lbnQuIEl0J3MgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHN5c2ZzIGFuZCBrZXJuZWwgQVBJcywgc28gaXQgKmFic29sdXRlbHkqIHdhcnJhbnRzIGZ1enppbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSBwZXJmb3JtYW5jZSB0d2Vhay4gSWYgaXQncyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlLCBhbmQgY2hhbmdlcyBjb3JlIERBTU9OIGJlaGF2aW91ciwgdGhlbiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgc3lzdGVtIGlzIHN0YWJsZS5cblxuSSdtIHRoaW5raW5nLCBmb3Igc2ltcGxpY2l0eSwgd2UnbGwgbGFiZWwgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSBhcyBgc2V0LXJlc3VsdHNgLiBJdCdzIGEgY2xlYXIsIGNvbmNpc2Ugd2F5IHRvIHJlZmVyIHRvIHRoZSBmdXp6aW5nIGZvY3VzLiBJIGtub3cgd2hhdCdzIGdvaW5nIG9uIG5vdzsgdGhpcyBpcyBtb3JlIHRoYW4ganVzdCBhIG1pbm9yIHR3ZWFrLiBJdCdzIGFib3V0IGVuc3VyaW5nIERBTU9OLCBhdCB0aGlzIHJldmlzZWQgbGV2ZWwsIGlzIHJvYnVzdCBhbmQgc2VjdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzE5OSwiT3V0cHV0VG9rZW5zIjoyMDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6MDY6MzguODA5NDI2MDVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjY1OTEwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIixcbiAgICBcIkRBTU9OX0xSVV9TT1JUXCIsXG4gICAgXCJEQU1PTl9TVEFUXCIsXG4gICAgXCJEQU1PTl9ERUJVR19TQU5JVFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9jb21taXRfY3R4XCIsXG4gICAgXCJkYW1vbl9zdGFydFwiLFxuICAgIFwiZGFtb25fbmV3X3NjaGVtZVwiLFxuICAgIFwiZGFtb25fc2V0X3JlZ2lvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBsb2dpYyBvZiBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcikgdG8gdHJhY2sgdGhlIHdhbGtpbmcgcG9zaXRpb24gb2YgREFNT1MgKERBTU9OLWJhc2VkIE9wZXJhdGlvbiBTY2hlbWVzKSBxdW90YXMuIEl0IHJlbmFtZXMgdGhlIHRyYWNraW5nIHZhcmlhYmxlcyBhbmQgaW50cm9kdWNlcyBuZXcgbG9naWMgdG8gaGFuZGxlIHNraXBwaW5nIHdhbGtlZCByZWdpb25zIGFuZCByb3RhdGluZyB0YXJnZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgc3lzZnMgb3Iga2VybmVsIEFQSXMsIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9SRUNMQUlNXCIsXG4gICAgXCJEQU1PTl9MUlVfU09SVFwiLFxuICAgIFwiREFNT05fU1RBVFwiLFxuICAgIFwiREFNT05fREVCVUdfU0FOSVRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fY29tbWl0X2N0eFwiLFxuICAgIFwiZGFtb25fc3RhcnRcIixcbiAgICBcImRhbW9uX25ld19zY2hlbWVcIixcbiAgICBcImRhbW9uX3NldF9yZWdpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgb2YgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIHRvIHRyYWNrIHRoZSB3YWxraW5nIHBvc2l0aW9uIG9mIERBTU9TIChEQU1PTi1iYXNlZCBPcGVyYXRpb24gU2NoZW1lcykgcXVvdGFzLiBJdCByZW5hbWVzIHRoZSB0cmFja2luZyB2YXJpYWJsZXMgYW5kIGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIGhhbmRsZSBza2lwcGluZyB3YWxrZWQgcmVnaW9ucyBhbmQgcm90YXRpbmcgdGFyZ2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHN5c2ZzIG9yIGtlcm5lbCBBUElzLCBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6MDY6MzguODg2MDkxNTk1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAyMDAzMjI2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjA2OjM4Ljg4NjYwMzQwNVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDAxOTUxNzUzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIHRyYWNraW5nIG9mIHRoZSBEQU1PUyAoREFNT04tYmFzZWQgT3BlcmF0aW9uIFNjaGVtZXMpIHF1b3RhIHdhbGsgcG9zaXRpb24sIHJlcGxhY2luZyBgY2hhcmdlX3RhcmdldF9mcm9tYCBhbmQgYGNoYXJnZV9hZGRyX2Zyb21gIHdpdGggYHdhbGtfdGFyZ2V0X2Zyb21gIGFuZCBgd2Fsa19hZGRyX2Zyb21gLiBUaGVzZSBuZXcgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIE5VTEwgYW5kIDAgaW4gYGRhbW9zX3F1b3RhX2luaXQoKWAuIFRoZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGludGVybmFsIGtlcm5lbCBjb250cm9sIGZsb3cgYW5kIHJlZ2lvbiBpdGVyYXRpb24gbG9naWMuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0N2JmNWNjZjNhZjlkMjNkYTUwOGI1MzMzOTBhNjczNDRlYTk3MjY2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTM6Mzk6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbmluZGV4IDBjOGI3ZGRlZjlhYmIuLjVlMDc1NWViYWQ3NTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuQEAgLTI5Niw4ICsyOTYsMTAgQEAgc3RydWN0IGRhbW9zX3F1b3RhIHtcbiBcdC8qIEZvciBjaGFyZ2luZyB0aGUgcXVvdGEgKi9cbiBcdHVuc2lnbmVkIGxvbmcgY2hhcmdlZF9zejtcbiBcdHVuc2lnbmVkIGxvbmcgY2hhcmdlZF9mcm9tO1xuLVx0c3RydWN0IGRhbW9uX3RhcmdldCAqY2hhcmdlX3RhcmdldF9mcm9tO1xuLVx0dW5zaWduZWQgbG9uZyBjaGFyZ2VfYWRkcl9mcm9tO1xuK1xuK1x0LyogRm9yIHRyYWNraW5nIHRoZSBEQU1PUyB3YWxrIHBvc2l0aW9uIChyb3RhdGluZyBjdXJzb3IpICovXG4rXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp3YWxrX3RhcmdldF9mcm9tO1xuK1x0dW5zaWduZWQgbG9uZyB3YWxrX2FkZHJfZnJvbTtcbiBcbiBcdC8qIEZvciBwcmlvcml0aXphdGlvbiAqL1xuIFx0dW5zaWduZWQgaW50IG1pbl9zY29yZTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjAuLmJiZGI1MzA1MTNhMTggMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTQwNCw2ICs0MDQsNTIgQEAgc3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdHJldHVybiBsaXN0X2lzX2xhc3QoXHUwMDI2ci1cdTAwM2VsaXN0LCBcdTAwMjZ0LVx1MDAzZXJlZ2lvbnNfbGlzdCk7XG4gfVxuIFxuK3N0YXRpYyBib29sIGRhbW9zX2NvbXBsZXRlbHlfd2Fsa2VkKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbit7XG4rXHQvKlxuK1x0ICogJ1x1MDAzZT0nIGluc3RlYWQgb2YgJz09JywgYmVjYXVzZSB0aGUgcmVnaW9uIHNldCBvZiBAdCBjb3VsZCBoYXZlIGJlZW5cbitcdCAqIHNocnVua2VuIGJ5IGRhbW9uX3NldF9yZWdpb25zKCkgYWZ0ZXIgdGhlIGN1cnNvciB3YXMgc2F2ZWQuXG4rXHQgKi9cbitcdHJldHVybiBzLVx1MDAzZXF1b3RhLndhbGtfdGFyZ2V0X2Zyb20gPT0gdCBcdTAwMjZcdTAwMjZcbitcdFx0cy1cdTAwM2VxdW90YS53YWxrX2FkZHJfZnJvbSBcdTAwM2U9IGRhbW9uX2xhc3RfcmVnaW9uKHQpLVx1MDAzZWFyLmVuZDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBkYW1vbl90YXJnZXQgKmRhbW9uX25leHRfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4rXHRcdHN0cnVjdCBkYW1vbl9jdHggKmMpXG4re1xuK1x0c3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9IFx1MDAyNmMtXHUwMDNlYWRhcHRpdmVfdGFyZ2V0cztcbitcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnN0YXJ0ID0gdDtcbitcdHN0cnVjdCBkYW1vbl90YXJnZXQgKm5leHQgPSB0O1xuK1xuK1x0d2hpbGUgKHRydWUpIHtcbitcdFx0aWYgKGxpc3RfaXNfbGFzdChcdTAwMjZuZXh0LVx1MDAzZWxpc3QsIGhlYWQpKVxuK1x0XHRcdG5leHQgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBkYW1vbl90YXJnZXQsIGxpc3QpO1xuK1x0XHRlbHNlXG4rXHRcdFx0bmV4dCA9IGxpc3RfbmV4dF9lbnRyeShuZXh0LCBsaXN0KTtcbitcbitcdFx0aWYgKCFjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQgfHwgYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKG5leHQpKVxuK1x0XHRcdHJldHVybiBuZXh0O1xuK1xuK1x0XHRpZiAobmV4dCA9PSBzdGFydClcbitcdFx0XHRicmVhaztcbitcdH1cbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgdm9pZCBkYW1vc19yZXBsYWNlX2ludmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsXG4rXHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXG4re1xuK1x0c3RydWN0IGRhbW9zICpzO1xuK1xuK1x0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbitcdFx0aWYgKHMtXHUwMDNlcXVvdGEud2Fsa190YXJnZXRfZnJvbSAhPSB0KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRzLVx1MDAzZXF1b3RhLndhbGtfdGFyZ2V0X2Zyb20gPSBkYW1vbl9uZXh0X3ZhbGlkX3RhcmdldCh0LCBjKTtcbitcdFx0cy1cdTAwM2VxdW90YS53YWxrX2FkZHJfZnJvbSA9IDA7XG4rXHR9XG4rfVxuK1xuIC8qKlxuICAqIGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpIC0gUmV0dXJucyBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiBhIHJlZ2lvbi5cbiAgKiBAcjpcdFx0cmVnaW9uIHRvIGdldCB0aGUgd2VpZ2h0ZWQgc3VtIG9mLlxuQEAgLTY3Myw4ICs3MTksOCBAQCBzdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhICpkYW1vc19xdW90YV9pbml0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXG4gXHRxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX25zID0gMDtcbiBcdHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogPSAwO1xuIFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tID0gMDtcbi1cdHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG4tXHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbitcdHF1b3RhLVx1MDAzZXdhbGtfdGFyZ2V0X2Zyb20gPSBOVUxMO1xuK1x0cXVvdGEtXHUwMDNld2Fsa19hZGRyX2Zyb20gPSAwO1xuIFx0cXVvdGEtXHUwMDNlZXN6X2JwID0gMDtcbiBcdHJldHVybiBxdW90YTtcbiB9XG5AQCAtMTYyOCw5ICsxNjc0LDkgQEAgc3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0cyhcbiBcbiBcdFx0XHRkYW1vbl9kZXN0cm95X3RhcmdldChkc3RfdGFyZ2V0LCBkc3QpO1xuIFx0XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBkc3QpIHtcbi1cdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9PSBkc3RfdGFyZ2V0KSB7XG4tXHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbi1cdFx0XHRcdFx0cy1cdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tID0gMDtcbitcdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLndhbGtfdGFyZ2V0X2Zyb20gPT0gZHN0X3RhcmdldCkge1xuK1x0XHRcdFx0XHRzLVx1MDAzZXF1b3RhLndhbGtfdGFyZ2V0X2Zyb20gPSBOVUxMO1xuK1x0XHRcdFx0XHRzLVx1MDAzZXF1b3RhLndhbGtfYWRkcl9mcm9tID0gMDtcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cbkBAIC0yMzEyLDY0ICsyMzU4LDU0IEBAIHN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIH1cbiBcbiAvKlxuLSAqIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oKSAtIENoZWNrIGlmIHRoZSBnaXZlbiByZWdpb24gb3Igc3RhcnRpbmcgcGFydCBvZlxuLSAqIGl0IGlzIGFscmVhZHkgY2hhcmdlZCBmb3IgdGhlIERBTU9TIHF1b3RhLlxuKyAqIGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbigpIC0gQ2hlY2sgaWYgdGhlIGdpdmVuIHJlZ2lvbiBvciBzdGFydGluZyBwYXJ0IG9mXG4rICogaXQgaXMgYWxyZWFkeSB3YWxrZWQgZm9yIHRoZSBEQU1PUyBxdW90YS5cbiAgKiBAdDpcdFRoZSB0YXJnZXQgb2YgdGhlIHJlZ2lvbi5cbi0gKiBAcnA6XHRUaGUgcG9pbnRlciB0byB0aGUgcmVnaW9uLlxuKyAqIEByOlx0VGhlIHBvaW50ZXIgdG8gdGhlIHJlZ2lvbi5cbiAgKiBAczpcdFRoZSBzY2hlbWUgdG8gYmUgYXBwbGllZC5cbiAgKiBAbWluX3JlZ2lvbl9zejpcdG1pbmltdW0gcmVnaW9uIHNpemUuXG4gICpcbi0gKiBJZiBhIHF1b3RhIG9mIGEgc2NoZW1lIGhhcyBleGNlZWRlZCBpbiBhIHF1b3RhIGNoYXJnZSB3aW5kb3csIHRoZSBzY2hlbWUnc1xuLSAqIGFjdGlvbiB3b3VsZCBhcHBsaWVkIHRvIG9ubHkgYSBwYXJ0IG9mIHRoZSB0YXJnZXQgYWNjZXNzIHBhdHRlcm4gZnVsZmlsbGluZ1xuLSAqIHJlZ2lvbnMuICBUbyBhdm9pZCBhcHBseWluZyB0aGUgc2NoZW1lIGFjdGlvbiB0byBvbmx5IGFscmVhZHkgYXBwbGllZFxuLSAqIHJlZ2lvbnMsIERBTU9OIHNraXBzIGFwcGx5aW5nIHRoZSBzY2hlbWUgYWN0aW9uIHRvIHRoZSByZWdpb25zIHRoYXQgY2hhcmdlZFxuLSAqIGluIHRoZSBwcmV2aW91cyBjaGFyZ2Ugd2luZG93LlxuLSAqXG4tICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgYSBnaXZlbiByZWdpb24gc2hvdWxkIGJlIHNraXBwZWQgb3Igbm90IGZvciB0aGVcbi0gKiByZWFzb24uICBJZiBvbmx5IHRoZSBzdGFydGluZyBwYXJ0IG9mIHRoZSByZWdpb24gaGFzIHByZXZpb3VzbHkgY2hhcmdlZCxcbi0gKiB0aGlzIGZ1bmN0aW9uIHNwbGl0cyB0aGUgcmVnaW9uIGludG8gdHdvIHNvIHRoYXQgdGhlIHNlY29uZCBvbmUgY292ZXJzIHRoZVxuLSAqIGFyZWEgdGhhdCBub3QgY2hhcmdlZCBpbiB0aGUgcHJldmlvdXMgY2hhcmdlIHdpZG5vdywgYW5kIHJldHVybiB0cnVlLiAgVGhlXG4tICogY2FsbGVyIGNhbiBzZWUgdGhlIHNlY29uZCBvbmUgb24gdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSByZWdpb24gd2Fsay5cbi0gKiBOb3RlIHRoYXQgdGhpcyBtZWFucyB0aGUgY2FsbGVyIHNob3VsZCB1c2UgZGFtb25fZm9yX2VhY2hfcmVnaW9uKCkgaW5zdGVhZFxuLSAqIG9mIGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9zYWZlKCkuICBJZiBkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZSgpIGlzIHVzZWQsXG4tICogdGhlIHNlY29uZCByZWdpb24gd2lsbCBqdXN0IGJlIGlnbm9yZWQuXG4rICogV2hlbiBhIHF1b3RhIGlzIGNvbmZpZ3VyZWQsIERBTU9OIHJlY29yZHMgaG93IGZhciBpdCBoYXMgd2Fsa2VkIHNvIHRoYXRcbisgKiBzdWJzZXF1ZW50IHF1b3RhIHdpbmRvd3MgY29udGludWUgZnJvbSB0aGF0IHBvaW50IGluc3RlYWQgb2YgcmUtYXBwbHlpbmcgdGhlXG4rICogc2FtZSByZWdpb25zLiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgZm9yIHJlZ2lvbnMgdGhhdCBhcmUgYmVmb3JlIHRoZVxuKyAqIHJlY29yZGVkIGN1cnNvciBhbmQgdGhlcmVmb3JlIHNob3VsZCBiZSBza2lwcGVkLiAgSWYgb25seSB0aGUgc3RhcnRpbmcgcGFydFxuKyAqIGhhcyBiZWVuIHdhbGtlZCwgdGhlIHJlZ2lvbiBpcyBzcGxpdCBzbyB0aGF0IHRoZSByZW1haW5pbmcgcGFydCBjYW4gYmVcbisgKiB2aXNpdGVkLlxuICAqXG4gICogUmV0dXJuOiB0cnVlIGlmIHRoZSByZWdpb24gc2hvdWxkIGJlIHNraXBwZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgKi9cbi1zdGF0aWMgYm9vbCBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4rc3RhdGljIGJvb2wgZGFtb3Nfc2tpcF93YWxrZWRfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcbiBcdFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxuIHtcbiBcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuIFx0dW5zaWduZWQgbG9uZyBzel90b19za2lwO1xuIFxuLVx0LyogU2tpcCBwcmV2aW91c2x5IGNoYXJnZWQgcmVnaW9ucyAqL1xuLVx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSkge1xuLVx0XHRpZiAodCAhPSBxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20pXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXHRcdGlmIChyID09IGRhbW9uX2xhc3RfcmVnaW9uKHQpKSB7XG4tXHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbi1cdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbitcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LyogU2tpcCBwcmV2aW91c2x5IHdhbGtlZCByZWdpb25zICovXG4rXHRpZiAocXVvdGEtXHUwMDNld2Fsa190YXJnZXRfZnJvbSkge1xuK1x0XHRpZiAodCAhPSBxdW90YS1cdTAwM2V3YWxrX3RhcmdldF9mcm9tKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuLVx0XHR9XG4tXHRcdGlmIChxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0ci1cdTAwM2Vhci5lbmQgXHUwMDNjPSBxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tKVxuK1x0XHRpZiAocXVvdGEtXHUwMDNld2Fsa19hZGRyX2Zyb20gXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHRyLVx1MDAzZWFyLmVuZCBcdTAwM2M9IHF1b3RhLVx1MDAzZXdhbGtfYWRkcl9mcm9tKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFxuLVx0XHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSBcdTAwMjZcdTAwMjYgci1cdTAwM2Vhci5zdGFydCBcdTAwM2Ncbi1cdFx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20pIHtcbi1cdFx0XHRzel90b19za2lwID0gQUxJR05fRE9XTihxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIC1cbitcdFx0aWYgKHF1b3RhLVx1MDAzZXdhbGtfYWRkcl9mcm9tIFx1MDAyNlx1MDAyNiByLVx1MDAzZWFyLnN0YXJ0IFx1MDAzY1xuK1x0XHRcdFx0cXVvdGEtXHUwMDNld2Fsa19hZGRyX2Zyb20pIHtcbitcdFx0XHRzel90b19za2lwID0gQUxJR05fRE9XTihxdW90YS1cdTAwM2V3YWxrX2FkZHJfZnJvbSAtXG4gXHRcdFx0XHRcdHItXHUwMDNlYXIuc3RhcnQsIG1pbl9yZWdpb25fc3opO1xuIFx0XHRcdGlmICghc3pfdG9fc2tpcCkge1xuLVx0XHRcdFx0aWYgKGRhbW9uX3N6X3JlZ2lvbihyKSBcdTAwM2M9IG1pbl9yZWdpb25fc3opXG4rXHRcdFx0XHRpZiAoZGFtb25fc3pfcmVnaW9uKHIpIFx1MDAzYz0gbWluX3JlZ2lvbl9zeikge1xuK1x0XHRcdFx0XHRxdW90YS1cdTAwM2V3YWxrX2FkZHJfZnJvbSA9IHItXHUwMDNlYXIuZW5kO1xuIFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0XHRcdH1cbiBcdFx0XHRcdHN6X3RvX3NraXAgPSBtaW5fcmVnaW9uX3N6O1xuIFx0XHRcdH1cbiBcdFx0XHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3pfdG9fc2tpcCk7XG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdH1cbi1cdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbi1cdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4gXHR9XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTI2MjcsMTAgKzI2NjMsNiBAQCBzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdFx0cXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9ucyArPSB0aW1lc3BlYzY0X3RvX25zKFx1MDAyNmVuZCkgLVxuIFx0XHRcdHRpbWVzcGVjNjRfdG9fbnMoXHUwMDI2YmVnaW4pO1xuIFx0XHRkYW1vc19jaGFyZ2VfcXVvdGEocXVvdGEsIHN6LCBzel9hcHBsaWVkKTtcbi1cdFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpIHtcbi1cdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSB0O1xuLVx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSByLVx1MDAzZWFyLmVuZDtcbi1cdFx0fVxuIFx0fVxuIFx0aWYgKHMtXHUwMDNlYWN0aW9uICE9IERBTU9TX1NUQVQpXG4gXHRcdHItXHUwMDNlYWdlID0gMDtcbkBAIC0yNjM5LDggKzI2NzEsMTkgQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRkYW1vc191cGRhdGVfc3RhdChzLCBzeiwgc3pfYXBwbGllZCwgc3pfb3BzX2ZpbHRlcl9wYXNzZWQpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tXHRcdFx0XHQgICBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuK3N0YXRpYyB2b2lkIGRhbW9zX3dhbGtfbWF5YmVfcm90YXRlKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4rXHRcdFx0XHQgICAgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbitcdFx0XHRcdCAgICBzdHJ1Y3QgZGFtb3MgKnMpXG4re1xuK1x0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4rXG4rXHRpZiAoZGFtb3NfY29tcGxldGVseV93YWxrZWQocywgdCkpIHtcbitcdFx0cXVvdGEtXHUwMDNld2Fsa190YXJnZXRfZnJvbSA9IGRhbW9uX25leHRfdmFsaWRfdGFyZ2V0KHQsIGMpO1xuK1x0XHRxdW90YS1cdTAwM2V3YWxrX2FkZHJfZnJvbSA9IDA7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG4ge1xuIFx0c3RydWN0IGRhbW9zICpzO1xuQEAgLTI2NTgsMTggKzI3MDEsMzEgQEAgc3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuIFx0XHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0aWYgKGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24odCwgciwgcywgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbiBcdFx0aWYgKHMtXHUwMDNlbWF4X25yX3NuYXBzaG90cyBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdHMtXHUwMDNlbWF4X25yX3NuYXBzaG90cyBcdTAwM2M9IHMtXHUwMDNlc3RhdC5ucl9zbmFwc2hvdHMpXG4gXHRcdFx0Y29udGludWU7XG4gXG4rXHRcdC8qXG4rXHRcdCAqIFNraXAgcmVnaW9ucyBiZWZvcmUgdGhlIGN1cnNvci4gIElmIHRoZSBza2lwIG1ha2VzIHRoZSBjdXJzb3JcbitcdFx0ICogcmVhY2ggdGhlIGVuZCBvZiB0aGlzIHRhcmdldCwgcm90YXRlIHRvIHRoZSBuZXh0IHZhbGlkIHRhcmdldFxuK1x0XHQgKiBiZWZvcmUgY29udGludWluZyB3aXRoIHRoZSBuZXh0IHJlZ2lvbi9zY2hlbWUuXG4rXHRcdCAqL1xuK1x0XHRpZiAoZGFtb3Nfc2tpcF93YWxrZWRfcmVnaW9uKHQsIHIsIHMsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpIHtcbitcdFx0XHRkYW1vc193YWxrX21heWJlX3JvdGF0ZShjLCB0LCBzKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuIFx0XHRpZiAoZGFtb3NfdmFsaWRfdGFyZ2V0KGMsIHIsIHMpKVxuIFx0XHRcdGRhbW9zX2FwcGx5X3NjaGVtZShjLCB0LCByLCBzKTtcbiBcbiBcdFx0aWYgKGRhbW9uX2lzX2xhc3RfcmVnaW9uKHIsIHQpKVxuIFx0XHRcdHMtXHUwMDNlc3RhdC5ucl9zbmFwc2hvdHMrKztcbitcbitcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpIHtcbitcdFx0XHRxdW90YS1cdTAwM2V3YWxrX3RhcmdldF9mcm9tID0gdDtcbitcdFx0XHRxdW90YS1cdTAwM2V3YWxrX2FkZHJfZnJvbSA9IHItXHUwMDNlYXIuZW5kO1xuK1x0XHRcdGRhbW9zX3dhbGtfbWF5YmVfcm90YXRlKGMsIHQsIHMpO1xuK1x0XHR9XG4gXHR9XG4gfVxuIFxuQEAgLTMyNDEsOCArMzI5NywxMCBAQCBzdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcbiBcdG1heF9yZWdpb25fc3ogPSBkYW1vbl9yZWdpb25fc3pfbGltaXQoYyk7XG4gXHRtdXRleF9sb2NrKFx1MDAyNmMtXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xuIFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcbi1cdFx0aWYgKGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcdTAwMjZcdTAwMjYgYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKVxuK1x0XHRpZiAoYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIFx1MDAyNlx1MDAyNiBjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2UpIHtcbitcdFx0XHRkYW1vc19yZXBsYWNlX2ludmFsaWRfdGFyZ2V0KGMsIHQpO1xuIFx0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4gXHRcdGRhbW9zX2FwcGx5X3RhcmdldChjLCB0LCBtYXhfcmVnaW9uX3N6KTtcbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjA2OjM4Ljg4NjYwNDIyNVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDAxOTUwMDA4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBQYXRjaCBSZXZpZXc6IE5vIEtNU0FOIE5lZWRlZCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBEYXRhIEFjY2VzcyBNb25pdG9yIChEQU1PTikgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIERBTU9OLWJhc2VkIE9wZXJhdGlvbiBTY2hlbWVzIChEQU1PUykgcGFydC4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiB0aHJ1c3QgaXMgcmVmYWN0b3JpbmcgaG93IERBTU9TIGtlZXBzIHRyYWNrIG9mIGl0cyBxdW90YSB3YWxrIHBvc2l0aW9uIGR1cmluZyBpdHMgYW5hbHlzaXMuIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSByZW5hbWluZyBvZiBgY2hhcmdlX3RhcmdldF9mcm9tYCBhbmQgYGNoYXJnZV9hZGRyX2Zyb21gIHRvIGB3YWxrX3RhcmdldF9mcm9tYCBhbmQgYHdhbGtfYWRkcl9mcm9tYCwgYWxvbmcgd2l0aCBhIGZldyBzdXBwb3J0aW5nIGZ1bmN0aW9ucyBsaWtlIGBkYW1vc19jb21wbGV0ZWx5X3dhbGtlZGAsIGBkYW1vbl9uZXh0X3ZhbGlkX3RhcmdldGAsIGBkYW1vc19yZXBsYWNlX2ludmFsaWRfdGFyZ2V0YCwgYGRhbW9zX3NraXBfd2Fsa2VkX3JlZ2lvbmAsIGFuZCBgZGFtb3Nfd2Fsa19tYXliZV9yb3RhdGVgLlxuXG5MZXQncyBicmVhayB0aGlzIGRvd24gZnVydGhlci4gVGhlIGBzdHJ1Y3QgZGFtb3NfcXVvdGFgIG5vdyBoYXMgdGhlc2UgbmV3IGB3YWxrX2AgZmllbGRzLCBhbmQgdGhlIGBkYW1vc19xdW90YV9pbml0YCBmdW5jdGlvbiBjb3JyZWN0bHkgaW5pdGlhbGl6ZXMgdGhlbSB0byBgTlVMTGAgYW5kIGAwYCwgcmVzcGVjdGl2ZWx5LiBHb29kLiBJIGFsc28gc2VlIHRoYXQgYGRhbW9uX2NvbW1pdF90YXJnZXRzYCBpcyB1cGRhdGVkIHRvIHJlc2V0IHRoZW0gaWYgdGhlIHRhcmdldCBpcyBkZXN0cm95ZWQsIGFuZCBgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbmAgaGFzIGJlZW4gcmVuYW1lZCB0byBgZGFtb3Nfc2tpcF93YWxrZWRfcmVnaW9uYCBhbmQgdXBkYXRlZCBhcyB3ZWxsLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBvbGQgdmFsdWVzIGFyZW4ndCB1c2VkLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgZGVzaWduIGNoYW5nZXMgcHJldmVudCB0aGlzLiBgZGFtb3NfYXBwbHlfc2NoZW1lYCBubyBsb25nZXIgc2V0cyB0aGUgb2xkIGBjaGFyZ2VfYCBmaWVsZHMsIGFuZCBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2Agbm93IHNldHMgdGhlIG5ldyBgd2Fsa19gIGZpZWxkcyBhbmQgY2FsbHMgYGRhbW9zX3dhbGtfbWF5YmVfcm90YXRlYC4gQ3J1Y2lhbGx5LCBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBjYWxscyBgZGFtb3NfcmVwbGFjZV9pbnZhbGlkX3RhcmdldGAgaWYgYSB0YXJnZXQgaXMgaW52YWxpZCwgc28gdGhpcyBzaG91bGQgcHJldmVudCB0aGUgdXNlIG9mIGludmFsaWQgdGFyZ2V0cy5cblxuTXkgaW5pdGlhbCBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeS4gQXJlIHdlIGNyZWF0aW5nIG9wcG9ydHVuaXRpZXMgZm9yIEtBU0FOIHRvIG1pc3MgYSBidWcgaGVyZT8gTGV0J3MgYmUgZXhwbGljaXQsIHRoZXNlIG5ldyBmaWVsZHMgYXJlIGluaXRpYWxpemVkIGluIGBkYW1vc19xdW90YV9pbml0YCB0byBOVUxMIGFuZCAwLCB3aGljaCBhcmUgdmFsaWQgdmFsdWVzIGZvciBwb2ludGVycyBhbmQgdW5zaWduZWQgbG9uZ3MuIFdlJ3JlIG5vdCBhbGxvY2F0aW5nIGFueSBuZXcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYW5kIHNlbmRpbmcgdGhlbSB0byB1c2VyIHNwYWNlLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBhbnkgb2YgdGhlIHVzZXItZmFjaW5nIGludGVyZmFjZXMgbGlrZSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluaywgb3IgaW9jdGwuIFRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIGludGVybmFsIHRvIHRoZSBEQU1PTiBrZXJuZWwgc3RhdGUgbWFjaGluZSwgd2hpY2ggaXMgZ29vZC4gVGhlIHBvdGVudGlhbCBidWdzIGFyZSBsaW1pdGVkIHRvIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBpZiwgc2F5LCBgd2Fsa190YXJnZXRfZnJvbWAgcG9pbnRzIHRvIGEgZnJlZWQgdGFyZ2V0LiBCdXQgYGRhbW9uX2NvbW1pdF90YXJnZXRzYCBhcHBlYXJzIHRvIHByZXZlbnQgdGhpcyBhbmQgYGRhbW9zX3JlcGxhY2VfaW52YWxpZF90YXJnZXRgIGFwcGVhcnMgdG8gaGFuZGxlIGludmFsaWQgdGFyZ2V0cy4gS0FTQU4gc2hvdWxkIGJlIGFibGUgdG8gY2F0Y2ggYWxsIG9mIHRoZXNlIHR5cGVzIG9mIGlzc3Vlcy5cblxuTm93LCBsZXQncyBjb25maXJtIHdoZXRoZXIgYHN0cnVjdCBkYW1vc19xdW90YWAgb3IgYHN0cnVjdCBkYW1vc2AgaXRzZWxmIGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gREFNT04gZXhwb3NlcyBzdGF0cyB2aWEgc3lzZnMsIGJ1dCBpdCBkb2Vzbid0IGFwcGVhciB0byBkdW1wIHRoZSByYXcgc3RydWN0IHRvIHVzZXJzcGFjZS4gRXZlbiBpZiBpdCBkaWQsIHRoZSBmaWVsZHMgYXJlIGluaXRpYWxpemVkLCBzbyB0aGF0IHdvdWxkbid0IGJlIGEgcHJvYmxlbS5cblxuVGhlcmVmb3JlLCBhZnRlciB0aGlzIHJldmlldywgaXQncyBteSBqdWRnbWVudCB0aGF0IHRoaXMgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgd2FycmFudCBLTVNBTi4gS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgcG90ZW50aWFsIHByb2JsZW1zLiBMZXQncyBkb3VibGUgY2hlY2sgYGRhbW9zX3F1b3RhX2luaXRgIGFzIHdlbGw6XG5cbmBgYGNcbnN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRhbW9zX3F1b3RhX2luaXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcbntcblx0cXVvdGEtXHUwMDNlbXMgPSAwO1xuXHRxdW90YS1cdTAwM2VzeiA9IDA7XG5cdHF1b3RhLVx1MDAzZXJlc2V0X2ludGVydmFsID0gMDtcblx0cXVvdGEtXHUwMDNld2VpZ2h0X3N6ID0gMDtcblx0cXVvdGEtXHUwMDNld2VpZ2h0X25yX2FjY2Vzc2VzID0gMDtcblx0cXVvdGEtXHUwMDNld2VpZ2h0X2FnZSA9IDA7XG5cdHF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogPSAwO1xuXHRxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX25zID0gMDtcblx0cXVvdGEtXHUwMDNlY2hhcmdlZF9zeiA9IDA7XG5cdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSA9IDA7XG5cdHF1b3RhLVx1MDAzZXdhbGtfdGFyZ2V0X2Zyb20gPSBOVUxMO1xuXHRxdW90YS1cdTAwM2V3YWxrX2FkZHJfZnJvbSA9IDA7XG5cdHF1b3RhLVx1MDAzZWVzel9icCA9IDA7XG5cdHJldHVybiBxdW90YTtcbn1cbmBgYFxuXG5ZZXAsIGV2ZXJ5dGhpbmcgaXMgZXhwbGljaXRseSB6ZXJvZWQgb3V0IG9yIE5VTExlZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGhlcmUuIFNvLCBJIHdpbGwgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE3OCwiT3V0cHV0VG9rZW5zIjoxODMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDowNjo1Mi45MDYxMDY2MjNaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCB0cmFja2luZyBvZiB0aGUgREFNT1MgKERBTU9OLWJhc2VkIE9wZXJhdGlvbiBTY2hlbWVzKSBxdW90YSB3YWxrIHBvc2l0aW9uLCByZXBsYWNpbmcgYGNoYXJnZV90YXJnZXRfZnJvbWAgYW5kIGBjaGFyZ2VfYWRkcl9mcm9tYCB3aXRoIGB3YWxrX3RhcmdldF9mcm9tYCBhbmQgYHdhbGtfYWRkcl9mcm9tYC4gVGhlc2UgbmV3IGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBOVUxMIGFuZCAwIGluIGBkYW1vc19xdW90YV9pbml0KClgLiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBpbnRlcm5hbCBrZXJuZWwgY29udHJvbCBmbG93IGFuZCByZWdpb24gaXRlcmF0aW9uIGxvZ2ljLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIHRyYWNraW5nIG9mIHRoZSBEQU1PUyAoREFNT04tYmFzZWQgT3BlcmF0aW9uIFNjaGVtZXMpIHF1b3RhIHdhbGsgcG9zaXRpb24sIHJlcGxhY2luZyBgY2hhcmdlX3RhcmdldF9mcm9tYCBhbmQgYGNoYXJnZV9hZGRyX2Zyb21gIHdpdGggYHdhbGtfdGFyZ2V0X2Zyb21gIGFuZCBgd2Fsa19hZGRyX2Zyb21gLiBUaGVzZSBuZXcgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIE5VTEwgYW5kIDAgaW4gYGRhbW9zX3F1b3RhX2luaXQoKWAuIFRoZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGludGVybmFsIGtlcm5lbCBjb250cm9sIGZsb3cgYW5kIHJlZ2lvbiBpdGVyYXRpb24gbG9naWMuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowzmgvk[1] Phase: Succeeded StartedAt: 2026-08-25 14:07:03 +0000 UTC FinishedAt: 2026-08-25 14:07:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmgvk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-25 14:07:03 +0000 UTC FinishedAt: 2026-08-25 14:07:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmgvk[2] Phase: Succeeded StartedAt: 2026-08-25 14:07:03 +0000 UTC FinishedAt: 2026-08-25 17:49:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-25 14:07:03 +0000 UTC FinishedAt: 2026-08-25 17:49:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-25 14:07:03 +0000 UTC FinishedAt: 2026-08-25 14:07:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-25 14:07:03 +0000 UTC FinishedAt: 2026-08-25 14:07:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowzmgvk/series-workflowzmgvk-convert-artifact-737797010/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-25 14:07:13 +0000 UTC FinishedAt: 2026-08-25 14:24:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-25 14:07:13 +0000 UTC FinishedAt: 2026-08-25 14:24:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a6b3fec6-4bea-47eb-b412-e999dfd8e405,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-workflowzmgvk/series-workflowzmgvk-convert-artifact-737797010/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": "d7c3d79d-96df-48ac-aeb5-0376b7dd3770", "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-workflowzmgvk/series-workflowzmgvk-build-action-3155453200/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-25 14:07:13 +0000 UTC FinishedAt: 2026-08-25 14:24:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a6b3fec6-4bea-47eb-b412-e999dfd8e405,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-workflowzmgvk/series-workflowzmgvk-convert-artifact-737797010/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": "d7c3d79d-96df-48ac-aeb5-0376b7dd3770", "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-workflowzmgvk/series-workflowzmgvk-build-action-3155453200/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-25 14:24:40 +0000 UTC FinishedAt: 2026-08-25 14:24:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-25 14:24:40 +0000 UTC FinishedAt: 2026-08-25 14:24:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-25 14:24:40 +0000 UTC FinishedAt: 2026-08-25 14:24:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-25 14:24:40 +0000 UTC FinishedAt: 2026-08-25 14:24:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowzmgvk/series-workflowzmgvk-convert-artifact-406852269/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-25 14:24:50 +0000 UTC FinishedAt: 2026-08-25 14:26:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-25 14:24:50 +0000 UTC FinishedAt: 2026-08-25 14:26:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d7c3d79d-96df-48ac-aeb5-0376b7dd3770,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-workflowzmgvk/series-workflowzmgvk-build-action-3155453200/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-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-25 14:26:54 +0000 UTC FinishedAt: 2026-08-25 14:26:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-25 14:26:54 +0000 UTC FinishedAt: 2026-08-25 14:26:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-25 14:26:54 +0000 UTC FinishedAt: 2026-08-25 14:43:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-25 14:26:54 +0000 UTC FinishedAt: 2026-08-25 14:43:01 +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:*a6b3fec6-4bea-47eb-b412-e999dfd8e405,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-workflowzmgvk/series-workflowzmgvk-convert-artifact-406852269/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": "18958f18-0198-4862-b329-4f9a74af2706", "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-workflowzmgvk/series-workflowzmgvk-build-action-159667977/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-25 14:26:54 +0000 UTC FinishedAt: 2026-08-25 14:42:51 +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:*a6b3fec6-4bea-47eb-b412-e999dfd8e405,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-workflowzmgvk/series-workflowzmgvk-convert-artifact-406852269/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": "18958f18-0198-4862-b329-4f9a74af2706", "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-workflowzmgvk/series-workflowzmgvk-build-action-159667977/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-25 14:43:01 +0000 UTC FinishedAt: 2026-08-25 14:43:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-25 14:43:01 +0000 UTC FinishedAt: 2026-08-25 14:43:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-25 14:43:01 +0000 UTC FinishedAt: 2026-08-25 14:45:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-25 14:43:01 +0000 UTC FinishedAt: 2026-08-25 14:44:55 +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:*18958f18-0198-4862-b329-4f9a74af2706,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-workflowzmgvk/series-workflowzmgvk-build-action-159667977/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-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-25 14:45:05 +0000 UTC FinishedAt: 2026-08-25 17:49:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-25 14:45:05 +0000 UTC FinishedAt: 2026-08-25 17:49:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},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:*d7c3d79d-96df-48ac-aeb5-0376b7dd3770,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*18958f18-0198-4862-b329-4f9a74af2706,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-workflowzmgvk/series-workflowzmgvk-build-action-3155453200/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-workflowzmgvk/series-workflowzmgvk-build-action-159667977/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-25 14:45:05 +0000 UTC FinishedAt: 2026-08-25 14:45:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-25 14:45:05 +0000 UTC FinishedAt: 2026-08-25 14:45:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},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-workflowzmgvk/series-workflowzmgvk-convert-artifact-3793050130/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-25 14:45:05 +0000 UTC FinishedAt: 2026-08-25 14:45:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-25 14:45:05 +0000 UTC FinishedAt: 2026-08-25 14:45:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-25 14:45:05 +0000 UTC FinishedAt: 2026-08-25 14:45:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-25 14:45:15 +0000 UTC FinishedAt: 2026-08-25 17:49:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmgvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_commit_ctx","damon_start","damon_new_scheme","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT","DAMON_DEBUG_SANITY"],"series_id":"53dbd309-f70d-4e7f-bd0b-0a12e3f2a656","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-25 14:45:15 +0000 UTC FinishedAt: 2026-08-25 17:49:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d7c3d79d-96df-48ac-aeb5-0376b7dd3770,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*18958f18-0198-4862-b329-4f9a74af2706,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-workflowzmgvk/series-workflowzmgvk-build-action-3155453200/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-workflowzmgvk/series-workflowzmgvk-build-action-159667977/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-workflowzmgvk/series-workflowzmgvk-convert-artifact-3793050130/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,}