Name: series-workflowj7r74 Phase: Succeeded StartedAt: 2026-08-03 16:11:32 +0000 UTC FinishedAt: 2026-08-03 20:02:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7r74[0] Phase: Succeeded StartedAt: 2026-08-03 16:11:32 +0000 UTC FinishedAt: 2026-08-03 16:17:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7r74[0].run-triage Phase: Succeeded StartedAt: 2026-08-03 16:11:32 +0000 UTC FinishedAt: 2026-08-03 16:17:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "60781269e26c786de2bb93fb1e697a5c32ccee48", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "60781269e26c786de2bb93fb1e697a5c32ccee48", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "e0439e70-7e2d-4302-9cb8-918cf5bd4951" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_tramp_collect_arena_args", "btf_distill_func_proto", "btf_ctx_access" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE2OjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzJiMzNDssCiAgICAmIzM0O2J0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8mIzM0OywKICAgICYjMzQ7YnRmX2N0eF9hY2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgX19hcmVuYWAgYW5kIGBfX2FyZW5hX251bGxhYmxlYCBhbm5vdGF0aW9ucyBmb3IgQlBGIGtmdW5jcyBhbmQgc3RydWN0X29wcyBhcmd1bWVudHMuIEl0IG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIsIEpJVCBjb21waWxlciAoeDg2KSwgYW5kIHRyYW1wb2xpbmUgbG9naWMgdG8gc3VwcG9ydCBhcmVuYSBwb2ludGVycywgaW5jbHVkaW5nIHJlYmFzaW5nIHRoZW0gdG8ga2VybmVsIGFkZHJlc3Nlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG1lbW9yeSBzYWZldHkgYW5kIGNvcnJlY3QgdmVyaWZpY2F0aW9uIG9mIGFyZW5hIHBvaW50ZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE2OjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDBhZmM2NzQ2ZGEwZWM5MDJiZWI2NjM2N2M0NTcwMWZkMDY1OGIxMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTY6MTM6MDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdCBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbmluZGV4IGNiZGU4NmQwODJjY2UuLjQ4Y2Y3NDZmOWZmOWQgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XG5AQCAtMjc4LDYgJiM0MzsyNzgsNDMgQEAgQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6XG4gICAgICAgICAgICAgICAgIC4uLlxuICAgICAgICAgfVxuIFxuJiM0MzsyLjMuOCBfX2FyZW5hIGFuZCBfX2FyZW5hX251bGxhYmxlIEFubm90YXRpb25zXG4mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7XG4mIzQzO0JvdGggYW5ub3RhdGlvbnMgaW5kaWNhdGUgdGhhdCB0aGUgcG9pbnRlciBhcmd1bWVudCBwb2ludHMgaW50byB0aGVcbiYjNDM7Y2FsbGluZyBwcm9ncmFtJiMzOTtzIGFyZW5hLiBUaGUgSklUIHJlYmFzZXMgdGhlIHZhbHVlIGF0IHRoZSBjYWxsIHNpdGUgc29cbiYjNDM7dGhlIGtmdW5jIHJlY2VpdmVzIGEgZGlyZWN0bHkgZGVyZWZlcmVuY2VhYmxlIGtlcm5lbCBhZGRyZXNzLCBzdWJqZWN0IHRvXG4mIzQzO3RoZSBhY2Nlc3MgcnVsZXMgZGVzY3JpYmVkIGluIDpyZWY6YEJQRl9rZnVuY19hcmVuYV9hY2Nlc3NgIChhdCBtb3N0XG4mIzQzO2BgR1VBUkRfU1ogLyAyYGAsIDMyIEtpQiwgcGFzdCB0aGUgcG9pbnRlciBpbiBhIHNpbmdsZSB1bmNoZWNrZWQgYWNjZXNzKS5cbiYjNDM7XG4mIzQzO1dpdGggYGBfX2FyZW5hYGAgdGhlIHJlYmFzZSBpcyB1bmNvbmRpdGlvbmFsIGFuZCB0aGUgYXJndW1lbnQgaXMgbmV2ZXJcbiYjNDM7TlVMTDogYSB2YWx1ZSB3aG9zZSBsb3dlciAzMiBiaXRzIGFyZSB6ZXJvIGFycml2ZXMgYXMgdGhlIGFyZW5hIGJhc2VcbiYjNDM7YWRkcmVzcyAoYXJlbmEgb2Zmc2V0IDApLiBUaGUga2Z1bmMgbXVzdCBub3QgY2hlY2sgdGhlIGFyZ3VtZW50IGZvciBOVUxMLlxuJiM0MztXaXRoIGBgX19hcmVuYV9udWxsYWJsZWBgIHN1Y2ggYSB2YWx1ZSBhcnJpdmVzIGFzIE5VTEwgaW5zdGVhZCBhbmQgdGhlXG4mIzQzO2tmdW5jIG11c3QgY2hlY2sgYmVmb3JlIGRlcmVmZXJlbmNpbmcuXG4mIzQzO1xuJiM0MztBbiBleGFtcGxlIGlzIGdpdmVuIGJlbG93OjpcbiYjNDM7XG4mIzQzOyAgICAgICAgX19icGZfa2Z1bmMgaW50IGJwZl9wcm9jZXNzX2l0ZW0oc3RydWN0IGl0ZW0gKml0ZW1fX2FyZW5hKVxuJiM0MzsgICAgICAgIHtcbiYjNDM7ICAgICAgICAuLi5cbiYjNDM7ICAgICAgICB9XG4mIzQzO1xuJiM0MztDYWxsaW5nIHN1Y2ggYSBrZnVuYyByZXF1aXJlcyB0aGUgcHJvZ3JhbSB0byB1c2UgYW4gYXJlbmEgbWFwIGFuZCBhIEpJVCB3aXRoXG4mIzQzO2FyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQpOyB2ZXJpZmljYXRpb24gZmFpbHMgb3RoZXJ3aXNlLiBUaGVcbiYjNDM7cHJvZ3JhbSBjYW4gcGFzcyBhbnkgdmFsdWUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIGtlcm5lbC4gQSB2YWx1ZSB0aGF0IGRvZXNcbiYjNDM7bm90IHBvaW50IGludG8gdGhlIGFyZW5hIGlzIGEgcHJvZ3JhbSBidWcuXG4mIzQzO1xuJiM0MztUaGUgc3VmZml4ZXMgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIG9uIHRoZSBhcmd1bWVudHMgb2Ygc3RydWN0X29wcyBzdHViXG4mIzQzO2Z1bmN0aW9ucywgd2l0aCB0aGUgY29udmVyc2lvbiBydW5uaW5nIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uIFRoZVxuJiM0MztrZXJuZWwgY2FsbGVyIHBhc3NlcyB0aGUga2VybmVsIGFyZW5hIGFkZHJlc3MgYW5kIHRoZSB0cmFtcG9saW5lIGNvbnZlcnRzXG4mIzQzO2l0IHdoaWxlIHNhdmluZyB0aGUgYXJndW1lbnRzLCBzbyB0aGUgY2FsbGJhY2sgcmVjZWl2ZXMgYW4gYXJlbmEgcG9pbnRlclxuJiM0MztpdCBjYW4gZGVyZWZlcmVuY2UgZGlyZWN0bHkuIFdpdGggYGBfX2FyZW5hYGAgdGhlIGtlcm5lbCBjYWxsZXIgbXVzdCBub3RcbiYjNDM7cGFzcyBOVUxMLiBXaXRoIGBgX19hcmVuYV9udWxsYWJsZWBgIGEgTlVMTCBrZXJuZWwgcG9pbnRlciBhcnJpdmVzIGFzIE5VTEwuXG4mIzQzO0hvd2V2ZXIsIHRoZXJlIGlzIG5vIG9ibGlnYXRpb24gdG8gcHJvdmUgdG8gdGhlIHZlcmlmaWVyIHRoYXQgc3VjaCBhIHBvaW50ZXIgaXNcbiYjNDM7bm9uLU5VTEwgYmVmb3JlIHVzZSwgaW4tbGluZSB3aXRoIGV4aXN0aW5nIHNlbWFudGljcyBvZiBhcmVuYSBwb2ludGVycyB1c2VkIGluXG4mIzQzO2EgcHJvZ3JhbSAob3Igb2J0YWluZWQgZnJvbSBhbnkgb3RoZXIgc291cmNlKS5cbiYjNDM7XG4gLi4gX0JQRl9rZnVuY19ub2RlZjpcbiBcbiAyLjQgVXNpbmcgYW4gZXhpc3Rpbmcga2VybmVsIGZ1bmN0aW9uXG5AQCAtNTE1LDYgJiM0Mzs1NTIsOCBAQCBJbiBvcmRlciB0byBhY2NvbW1vZGF0ZSBzdWNoIHJlcXVpcmVtZW50cywgdGhlIHZlcmlmaWVyIHdpbGwgZW5mb3JjZSBzdHJpY3RcbiBQVFJfVE9fQlRGX0lEIHR5cGUgbWF0Y2hpbmcgaWYgdHdvIHR5cGVzIGhhdmUgdGhlIGV4YWN0IHNhbWUgbmFtZSwgd2l0aCBvbmVcbiBiZWluZyBzdWZmaXhlZCB3aXRoIGBgX19faW5pdGBgLlxuIFxuJiM0MzsuLiBfQlBGX2tmdW5jX2FyZW5hX2FjY2VzczpcbiYjNDM7XG4gMi44IEFjY2Vzc2luZyBhcmVuYSBtZW1vcnkgdGhyb3VnaCBrZnVuYyBhcmd1bWVudHNcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggMDFlN2NlNTY5YzFlZC4uNGIzZTVkOGE0YTU2MyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMTY3OCw2ICYjNDM7MTY3OCw1MCBAQCBzdGF0aWMgaW50IGVtaXRfc3BlY3RyZV9iaGJfYmFycmllcih1OCAqKnBwcm9nLCB1OCAqaXAsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFJlYmFzZSB0aGUgX19hcmVuYSBhcmdzIG9mIGEga2Z1bmMgY2FsbCB0byBhcmVuYSBrZXJuZWwgYWRkcmVzc2VzLFxuJiM0MzsgKiByTiA9IGtlcm5fdm1fc3RhcnQgJiM0MzsgKHUzMilyTiwgd2l0aCBSMTIgaG9sZGluZyBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlXG4mIzQzOyAqIGFyZyBwcmVzZXJ2ZXMgTlVMTCBieSBza2lwcGluZyB0aGUgYWRkLCB0ZXN0ZWQgb24gdGhlIHRydW5jYXRlZCB2YWx1ZSBhc1xuJiM0MzsgKiBhcmVuYSBOVUxMIGlzIG9mZnNldCAwLiBSZXR1cm4gdGhlIG51bWJlciBvZiBlbWl0dGVkIGJ5dGVzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBlbWl0X2tmdW5jX2FyZW5hX2FyZ3Moc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZyxcbiYjNDM7XHRcdFx0XHQgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCB1OCAqKnBwcm9nKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICpmbTtcbiYjNDM7XHR1OCAqcHJvZyA9ICpwcHJvZztcbiYjNDM7XHR1OCAqc3RhcnQgPSBwcm9nO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmbSA9IGJwZl9qaXRfZmluZF9rZnVuY19tb2RlbChicGZfcHJvZywgaW5zbik7XG4mIzQzO1x0aWYgKCFmbSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtaW5fdChpbnQsIGZtLVx1MDAzZW5yX2FyZ3MsIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1OCBmbGFncyA9IGZtLVx1MDAzZWFyZ19mbGFnc1tpXTtcbiYjNDM7XHRcdHUzMiByZWcgPSBCUEZfUkVHXzEgJiM0MzsgaTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIShmbGFncyBcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmIChXQVJOX09OX09OQ0UoIWJwZl9wcm9nLVx1MDAzZWF1eC1cdTAwM2VhcmVuYSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdC8qIG1vdiBlTiwgZU46IHRydW5jYXRlIGFuZCBjbGVhciB0aGUgdXBwZXIgMzIgYml0cyAqL1xuJiM0MztcdFx0ZW1pdF9tb3ZfcmVnKFx1MDAyNnByb2csIGZhbHNlLCByZWcsIHJlZyk7XG4mIzQzO1x0XHRpZiAoZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHKSB7XG4mIzQzO1x0XHRcdC8qIHRlc3QgZU4sIGVOOyBqeiBvdmVyIHRoZSAzLWJ5dGUgYWRkICovXG4mIzQzO1x0XHRcdG1heWJlX2VtaXRfbW9kKFx1MDAyNnByb2csIHJlZywgcmVnLCBmYWxzZSk7XG4mIzQzO1x0XHRcdEVNSVQyKDB4ODUsIGFkZF8ycmVnKDB4QzAsIHJlZywgcmVnKSk7XG4mIzQzO1x0XHRcdEVNSVQyKFg4Nl9KRSwgMyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHQvKiBhZGQgck4sIHIxMiAqL1xuJiM0MztcdFx0bWF5YmVfZW1pdF9tb2QoXHUwMDI2cHJvZywgcmVnLCBYODZfUkVHX1IxMiwgdHJ1ZSk7XG4mIzQzO1x0XHRFTUlUMigweDAxLCBhZGRfMnJlZygweEMwLCByZWcsIFg4Nl9SRUdfUjEyKSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqcHByb2cgPSBwcm9nO1xuJiM0MztcdHJldHVybiBwcm9nIC0gc3RhcnQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxuIFx0XHQgIHU4ICpyd19pbWFnZSwgaW50IG9sZHByb2dsZW4sIHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LCBib29sIGptcF9wYWRkaW5nKVxuIHtcbkBAIC0yNTgzLDYgJiM0MzsyNjI3LDEyIEBAIHN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4gXHRcdFx0fVxuIFx0XHRcdGlmICghaW1tMzIpXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0aWYgKHNyY19yZWcgPT0gQlBGX1BTRVVET19LRlVOQ19DQUxMKSB7XG4mIzQzO1x0XHRcdFx0ZXJyID0gZW1pdF9rZnVuY19hcmVuYV9hcmdzKGJwZl9wcm9nLCBpbnNuLCBcdTAwMjZwcm9nKTtcbiYjNDM7XHRcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdFx0XHRpcCAmIzQzOz0gZXJyO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0aWYgKHByaXZfZnJhbWVfcHRyKSB7XG4gXHRcdFx0XHRwdXNoX3I5KFx1MDAyNnByb2cpO1xuIFx0XHRcdFx0aXAgJiM0Mzs9IDI7XG5AQCAtMjk5MywxMiAmIzQzOzMwNDMsNDAgQEAgc3RhdGljIGludCBnZXRfbnJfdXNlZF9yZWdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSlcbiBcdHJldHVybiBucl91c2VkX3JlZ3M7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBDb252ZXJ0IGFuIGFyZW5hIGtlcm5lbCBhZGRyZXNzIGludG8gdGhlIGFyZW5hIHBvaW50ZXIgZm9ybSBvbiBpdHMgd2F5XG4mIzQzOyAqIGludG8gdGhlIEJQRiBjdHgsIHJheCA9ICh1MzIpKHNyYyAtIGtlcm5fdm1fc3RhcnQpLiBBIG51bGxhYmxlIGFyZ1xuJiM0MzsgKiBwcmVzZXJ2ZXMgTlVMTCwgdGVzdGVkIG9uIHRoZSBmdWxsIDY0LWJpdCBrZXJuZWwgcG9pbnRlci4gVGhlIDMyLWJpdFxuJiM0MzsgKiBzdWJ0cmFjdGlvbiBib3RoIHRydW5jYXRlcyBhbmQgY2xlYXJzIHRoZSB1cHBlciBoYWxmLCBzbyB0aGUgc3RvcmVkXG4mIzQzOyAqIHZhbHVlIHNhdGlzZmllcyB0aGUgSklUIGludmFyaWFudCBmb3IgYXJlbmEgcG9pbnRlciByZWdpc3RlcnMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBlbWl0X2FyZW5hX2FyZ19jb252KHU4ICoqcHByb2csIHUzMiBzcmNfcmVnLCBib29sIG51bGxhYmxlLCB1MzIgYmFzZV9sbylcbiYjNDM7e1xuJiM0MztcdHU4ICpwcm9nID0gKnBwcm9nO1xuJiM0MztcbiYjNDM7XHRpZiAobnVsbGFibGUpIHtcbiYjNDM7XHRcdGlmIChzcmNfcmVnICE9IEJQRl9SRUdfMClcbiYjNDM7XHRcdFx0ZW1pdF9tb3ZfcmVnKFx1MDAyNnByb2csIHRydWUsIEJQRl9SRUdfMCwgc3JjX3JlZyk7XG4mIzQzO1x0XHQvKiB0ZXN0IHJheCwgcmF4OyBqeiBvdmVyIHRoZSA1LWJ5dGUgc3ViICovXG4mIzQzO1x0XHRFTUlUMygweDQ4LCAweDg1LCAweEMwKTtcbiYjNDM7XHRcdEVNSVQyKFg4Nl9KRSwgNSk7XG4mIzQzO1x0fSBlbHNlIGlmIChzcmNfcmVnICE9IEJQRl9SRUdfMCkge1xuJiM0MztcdFx0ZW1pdF9tb3ZfcmVnKFx1MDAyNnByb2csIGZhbHNlLCBCUEZfUkVHXzAsIHNyY19yZWcpO1xuJiM0MztcdH1cbiYjNDM7XHQvKiBzdWIgZWF4LCBiYXNlX2xvICovXG4mIzQzO1x0RU1JVDFfb2ZmMzIoMHgyRCwgYmFzZV9sbyk7XG4mIzQzO1xuJiM0MztcdCpwcHJvZyA9IHByb2c7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgc2F2ZV9hcmdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcm9nLFxuLVx0XHQgICAgICBpbnQgc3RhY2tfc2l6ZSwgYm9vbCBmb3JfY2FsbF9vcmlnaW4sIHUzMiBmbGFncylcbiYjNDM7XHRcdCAgICAgIGludCBzdGFja19zaXplLCBib29sIGZvcl9jYWxsX29yaWdpbiwgdTMyIGZsYWdzLFxuJiM0MztcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJwZl90cmFtcF9hcmVuYV9hcmdzICphYXJncylcbiB7XG4gXHRpbnQgYXJnX3JlZ3MsIGZpcnN0X29mZiA9IDAsIG5yX3JlZ3MgPSAwLCBucl9zdGFja19zbG90cyA9IDA7XG4gXHRib29sIHVzZV9qbXAgPSBicGZfdHJhbXBvbGluZV91c2Vfam1wKGZsYWdzKTtcbi1cdGludCBpLCBqO1xuJiM0MztcdGludCBzdGFja19hcmdzX29mZiA9ICh1c2Vfam1wIHx8IChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpKSA/IDE2IDogMjQ7XG4mIzQzO1x0aW50IGksIGosIHNsb3QgPSAwO1xuIFxuIFx0LyogU3RvcmUgZnVuY3Rpb24gYXJndW1lbnRzIHRvIHN0YWNrLlxuIFx0ICogRm9yIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHR3byBwb2ludGVycyB0aGUgc2VxdWVuY2Ugd2lsbCBiZTpcbkBAIC0zMDI5LDE2ICYjNDM7MzEwNywyMCBAQCBzdGF0aWMgdm9pZCBzYXZlX2FyZ3MoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1OCAqKnByb2csXG4gXHRcdFx0LyogY29weSBmdW5jdGlvbiBhcmd1bWVudHMgZnJvbSBvcmlnaW4gc3RhY2sgZnJhbWVcbiBcdFx0XHQgKiBpbnRvIGN1cnJlbnQgc3RhY2sgZnJhbWUuXG4gXHRcdFx0ICpcbi1cdFx0XHQgKiBUaGUgc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgYXJndW1lbnRzIG9uLXN0YWNrXG4tXHRcdFx0ICogaXM6XG4tXHRcdFx0ICogICByYnAgJiM0MzsgOChwdXNoIHJicCkgJiM0Mztcbi1cdFx0XHQgKiAgIDgocmV0dXJuIGFkZHIgb2Ygb3JpZ2luIGNhbGwpICYjNDM7XG4tXHRcdFx0ICogICA4KHJldHVybiBhZGRyIG9mIHRoZSBjYWxsZXIpXG4tXHRcdFx0ICogd2hpY2ggbWVhbnM6IHJicCAmIzQzOyAyNFxuJiM0MztcdFx0XHQgKiBUaGUgYXJndW1lbnRzIG9uLXN0YWNrIHN0YXJ0IGFib3ZlIHRoZSBzYXZlZCByYnBcbiYjNDM7XHRcdFx0ICogYW5kIHRoZSByZXR1cm4gYWRkcmVzc2VzOiB0d28gcmV0dXJuIGFkZHJlc3Nlc1xuJiM0MztcdFx0XHQgKiAob3JpZ2luIGNhbGwgYW5kIGNhbGxlcikgd2hlbiB0aGUgdHJhbXBvbGluZSBpc1xuJiM0MztcdFx0XHQgKiBlbnRlcmVkIHRocm91Z2ggdGhlIGZlbnRyeSBjYWxsLCBzbyByYnAgJiM0MzsgMjQsIGFuZFxuJiM0MztcdFx0XHQgKiBhIHNpbmdsZSBvbmUgd2hlbiBpdCBpcyBlbnRlcmVkIHdpdGggYSBqbXAgb3JcbiYjNDM7XHRcdFx0ICogY2FsbGVkIGluZGlyZWN0bHksIHNvIHJicCAmIzQzOyAxNi5cbiBcdFx0XHQgKi9cbiBcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBhcmdfcmVnczsgaiYjNDM7JiM0MzspIHtcbiBcdFx0XHRcdGVtaXRfbGR4KHByb2csIEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHX0ZQLFxuLVx0XHRcdFx0XHQgbnJfc3RhY2tfc2xvdHMgKiA4ICYjNDM7IDE2ICYjNDM7ICghdXNlX2ptcCkgKiA4KTtcbiYjNDM7XHRcdFx0XHRcdCBucl9zdGFja19zbG90cyAqIDggJiM0Mzsgc3RhY2tfYXJnc19vZmYpO1xuJiM0MztcdFx0XHRcdGlmIChhYXJncyBcdTAwMjZcdTAwMjYgKGFhcmdzLVx1MDAzZXNsb3RzIFx1MDAyNiBCSVQoc2xvdCkpKVxuJiM0MztcdFx0XHRcdFx0ZW1pdF9hcmVuYV9hcmdfY29udihwcm9nLCBCUEZfUkVHXzAsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIGFhcmdzLVx1MDAzZW51bGxhYmxlX3Nsb3RzIFx1MDAyNiBCSVQoc2xvdCksXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICh1MzIpYWFyZ3MtXHUwMDNla2Vybl92bV9zdGFydCk7XG4gXHRcdFx0XHRlbWl0X3N0eChwcm9nLCBCUEZfRFcsIEJQRl9SRUdfRlAsIEJQRl9SRUdfMCxcbiBcdFx0XHRcdFx0IC1zdGFja19zaXplKTtcbiBcbkBAIC0zMDQ2LDYgJiM0MzszMTI4LDcgQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcm9nLFxuIFx0XHRcdFx0XHRmaXJzdF9vZmYgPSBzdGFja19zaXplO1xuIFx0XHRcdFx0c3RhY2tfc2l6ZSAtPSA4O1xuIFx0XHRcdFx0bnJfc3RhY2tfc2xvdHMmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRcdHNsb3QmIzQzOyYjNDM7O1xuIFx0XHRcdH1cbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKiBPbmx5IGNvcHkgdGhlIGFyZ3VtZW50cyBvbi1zdGFjayB0byBjdXJyZW50XG5AQCAtMzA1NCwxNiAmIzQzOzMxMzcsMjQgQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcm9nLFxuIFx0XHRcdCAqL1xuIFx0XHRcdGlmIChmb3JfY2FsbF9vcmlnaW4pIHtcbiBcdFx0XHRcdG5yX3JlZ3MgJiM0Mzs9IGFyZ19yZWdzO1xuJiM0MztcdFx0XHRcdHNsb3QgJiM0Mzs9IGFyZ19yZWdzO1xuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0fVxuIFxuIFx0XHRcdC8qIGNvcHkgdGhlIGFyZ3VtZW50cyBmcm9tIHJlZ3MgaW50byBzdGFjayAqL1xuIFx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGFyZ19yZWdzOyBqJiM0MzsmIzQzOykge1xuLVx0XHRcdFx0ZW1pdF9zdHgocHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLFxuLVx0XHRcdFx0XHQgbnJfcmVncyA9PSA1ID8gWDg2X1JFR19SOSA6IEJQRl9SRUdfMSAmIzQzOyBucl9yZWdzLFxuLVx0XHRcdFx0XHQgLXN0YWNrX3NpemUpO1xuJiM0MztcdFx0XHRcdHUzMiBzcmMgPSBucl9yZWdzID09IDUgPyBYODZfUkVHX1I5IDogQlBGX1JFR18xICYjNDM7IG5yX3JlZ3M7XG4mIzQzO1xuJiM0MztcdFx0XHRcdGlmIChhYXJncyBcdTAwMjZcdTAwMjYgKGFhcmdzLVx1MDAzZXNsb3RzIFx1MDAyNiBCSVQoc2xvdCkpKSB7XG4mIzQzO1x0XHRcdFx0XHRlbWl0X2FyZW5hX2FyZ19jb252KHByb2csIHNyYyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgYWFyZ3MtXHUwMDNlbnVsbGFibGVfc2xvdHMgXHUwMDI2IEJJVChzbG90KSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgKHUzMilhYXJncy1cdTAwM2VrZXJuX3ZtX3N0YXJ0KTtcbiYjNDM7XHRcdFx0XHRcdHNyYyA9IEJQRl9SRUdfMDtcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHRcdFx0ZW1pdF9zdHgocHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLCBzcmMsIC1zdGFja19zaXplKTtcbiBcdFx0XHRcdHN0YWNrX3NpemUgLT0gODtcbiBcdFx0XHRcdG5yX3JlZ3MmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRcdHNsb3QmIzQzOyYjNDM7O1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0fVxuQEAgLTMzNTQsMTEgJiM0MzszNDQ1LDEzIEBAIHN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltXG4gXHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICpmZW50cnkgPSBcdTAwMjZ0bm9kZXNbQlBGX1RSQU1QX0ZFTlRSWV07XG4gXHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICpmZXhpdCA9IFx1MDAyNnRub2Rlc1tCUEZfVFJBTVBfRkVYSVRdO1xuIFx0c3RydWN0IGJwZl90cmFtcF9ub2RlcyAqZm1vZF9yZXQgPSBcdTAwMjZ0bm9kZXNbQlBGX1RSQU1QX01PRElGWV9SRVRVUk5dO1xuJiM0MztcdHN0cnVjdCBicGZfdHJhbXBfYXJlbmFfYXJncyBhYXJncztcbiBcdHZvaWQgKm9yaWdfY2FsbCA9IGZ1bmNfYWRkcjtcbiBcdGludCBjb29raWVfb2ZmLCBjb29raWVfY250O1xuIFx0dTggKipicmFuY2hlcyA9IE5VTEw7XG4gXHR1NjQgZnVuY19tZXRhO1xuIFx0dTggKnByb2c7XG4mIzQzO1x0Ym9vbCBoYXNfYWFyZ3M7XG4gXHRib29sIHNhdmVfcmV0O1xuIFxuIFx0LypcbkBAIC0zMzY5LDYgJiM0MzszNDYyLDggQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1cbiBcdFdBUk5fT05fT05DRSgoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0lORElSRUNUKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICAoZmxhZ3MgXHUwMDI2IH4oQlBGX1RSQU1QX0ZfSU5ESVJFQ1QgfCBCUEZfVFJBTVBfRl9SRVRfRkVOVFJZX1JFVCkpKTtcbiBcbiYjNDM7XHRoYXNfYWFyZ3MgPSBicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzKHRub2RlcywgZmxhZ3MsIFx1MDAyNmFhcmdzKTtcbiYjNDM7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtLVx1MDAzZW5yX2FyZ3M7IGkmIzQzOyYjNDM7KVxuIFx0XHRucl9yZWdzICYjNDM7PSAobS1cdTAwM2Vhcmdfc2l6ZVtpXSAmIzQzOyA3KSAvIDggLSAxO1xuIFxuQEAgLTM1MDMsNyAmIzQzOzM1OTgsOCBAQCBzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbVxuIFx0XHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KFx1MDAyNnByb2csIEJQRl9SRUdfMCwgLWlwX29mZiwgKGxvbmcpZnVuY19hZGRyKTtcbiBcdH1cbiBcbi1cdHNhdmVfYXJncyhtLCBcdTAwMjZwcm9nLCByZWdzX29mZiwgZmFsc2UsIGZsYWdzKTtcbiYjNDM7XHRzYXZlX2FyZ3MobSwgXHUwMDI2cHJvZywgcmVnc19vZmYsIGZhbHNlLCBmbGFncyxcbiYjNDM7XHRcdCAgaGFzX2FhcmdzID8gXHUwMDI2YWFyZ3MgOiBOVUxMKTtcbiBcbiBcdGlmIChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfQ0FMTF9PUklHKSB7XG4gXHRcdC8qIGFyZzE6IG1vdiByZGksIGltICovXG5AQCAtMzU0NSw3ICYjNDM7MzY0MSw3IEBAIHN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltXG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0NBTExfT1JJRykge1xuIFx0XHRyZXN0b3JlX3JlZ3MobSwgXHUwMDI2cHJvZywgcmVnc19vZmYpO1xuLVx0XHRzYXZlX2FyZ3MobSwgXHUwMDI2cHJvZywgYXJnX3N0YWNrX29mZiwgdHJ1ZSwgZmxhZ3MpO1xuJiM0MztcdFx0c2F2ZV9hcmdzKG0sIFx1MDAyNnByb2csIGFyZ19zdGFja19vZmYsIHRydWUsIGZsYWdzLCBOVUxMKTtcbiBcbiBcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9UQUlMX0NBTExfQ1RYKSB7XG4gXHRcdFx0LyogQmVmb3JlIGNhbGxpbmcgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLCBsb2FkIHRoZVxuQEAgLTQwNDYsNiAmIzQzOzQxNDIsMTEgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbiYjNDM7Ym9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgKmJwZl9hcmNoX3RleHRfY29weSh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IGxlbilcbiB7XG4gXHRpZiAodGV4dF9wb2tlX2NvcHkoZHN0LCBzcmMsIGxlbikgPT0gTlVMTClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggMzU2ODg0NTg3YWUxMS4uMmY2MDZjMzI1NjgwNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmhcbkBAIC0xMjEzLDYgJiM0MzsxMjEzLDEyIEBAIHN0cnVjdCBicGZfcHJvZ19vZmZsb2FkIHtcbiAvKiBUaGUgYXJndW1lbnQgaXMgc2lnbmVkLiAqL1xuICNkZWZpbmUgQlRGX0ZNT0RFTF9TSUdORURfQVJHXHRcdEJJVCgxKVxuIFxuJiM0MzsvKiBUaGUgYXJndW1lbnQgaXMgYW4gYXJlbmEgcG9pbnRlci4gKi9cbiYjNDM7I2RlZmluZSBCVEZfRk1PREVMX0FSRU5BX0FSR1x0XHRCSVQoMilcbiYjNDM7XG4mIzQzOy8qIFRoZSBhcmd1bWVudCBpcyBudWxsYWJsZS4gKi9cbiYjNDM7I2RlZmluZSBCVEZfRk1PREVMX05VTExBQkxFX0FSR1x0XHRCSVQoMylcbiYjNDM7XG4gc3RydWN0IGJ0Zl9mdW5jX21vZGVsIHtcbiBcdHU4IHJldF9zaXplO1xuIFx0dTggcmV0X2ZsYWdzO1xuQEAgLTEyODYsNiAmIzQzOzEyOTIsMjAgQEAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyB7XG4gXHRpbnQgbnJfbm9kZXM7XG4gfTtcbiBcbiYjNDM7LypcbiYjNDM7ICogV2hpY2ggOC1ieXRlIGN0eCBzbG90cyBvZiBhIHN0cnVjdF9vcHMgdHJhbXBvbGluZSBob2xkIGFyZW5hIGtlcm5lbFxuJiM0MzsgKiBwb2ludGVycyB0aGF0IHNhdmVfYXJncygpIGNvbnZlcnRzIHRvIHRoZSBhcmVuYSBwb2ludGVyIGZvcm0sXG4mIzQzOyAqIGN0eFtzbG90XSA9ICh1MzIpKGthZGRyIC0ga2Vybl92bV9zdGFydCkuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgYnBmX3RyYW1wX2FyZW5hX2FyZ3Mge1xuJiM0MztcdHUzMiBzbG90cztcbiYjNDM7XHR1MzIgbnVsbGFibGVfc2xvdHM7XHQvKiBzdWJzZXQgb2YgQHNsb3RzIHdoZXJlIE5VTEwgaXMgcHJlc2VydmVkICovXG4mIzQzO1x0dTY0IGtlcm5fdm1fc3RhcnQ7XG4mIzQzO307XG4mIzQzO1xuJiM0Mztib29sIGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3Moc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB1MzIgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgYnBmX3RyYW1wX2FyZW5hX2FyZ3MgKmFhcmdzKTtcbiYjNDM7XG4gc3RydWN0IGJwZl90cmFtcF9ydW5fY3R4O1xuIFxuIC8qIERpZmZlcmVudCB1c2UgY2FzZXMgZm9yIEJQRiB0cmFtcG9saW5lOlxuQEAgLTE2ODcsNiAmIzQzOzE3MDcsMTEgQEAgc3RydWN0IGJwZl9jdHhfYXJnX2F1eCB7XG4gXHR1MzIgYnRmX2lkO1xuIFx0dTMyIHJlZl9pZDtcbiBcdGJvb2wgcmVmY291bnRlZDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdlIGRvbiYjMzk7dCBlbmNvZGUgTlVMTC1uZXNzIGluIHRoZSB0eXBlIGZvciB0aGUgcHJvZ3JhbSwgYnV0IHN0aWxsIG5lZWRcbiYjNDM7XHQgKiB0byBkaXN0aW5ndWlzaCBpdCBmb3IgdGhlIHB1cnBvc2VzIG9mIHRlbGxpbmcgSklUcyB3aGF0IHNlcXVlbmNlIHRvIGVtaXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0Ym9vbCBhcmVuYV9udWxsYWJsZTtcbiB9O1xuIFxuIHN0cnVjdCBidGZfbW9kX3BhaXIge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5pbmRleCAzMmQ1Mjk3YzU1N2U1Li4zNmNlMzQwM2ZlNTk5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuQEAgLTExODMsNiAmIzQzOzExODMsNyBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZCk7XG4gYm9vbCBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKHZvaWQpO1xuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19rZnVuY19jYWxsKHZvaWQpO1xuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpO1xuJiM0Mztib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKTtcbiBib29sIGJwZl9qaXRfc3VwcG9ydHNfZmFyX2tmdW5jX2NhbGwodm9pZCk7XG4gYm9vbCBicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnModm9pZCk7XG4gYm9vbCBicGZfaml0X3N1cHBvcnRzX3B0cl94Y2hnKHZvaWQpO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYyBiL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY1xuaW5kZXggNGU3YTQ4YzAyYmU1Yy4uODI3YTYyMTZhNjIwMSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jXG5AQCAtMTQ3LDYgJiM0MzsxNDcsOCBAQCB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX2ltYWdlX2ZyZWUodm9pZCAqaW1hZ2UpXG4gXG4gI2RlZmluZSBNQVlCRV9OVUxMX1NVRkZJWCBcJiMzNDtfX251bGxhYmxlXCYjMzQ7XG4gI2RlZmluZSBSRUZDT1VOVEVEX1NVRkZJWCBcJiMzNDtfX3JlZlwmIzM0O1xuJiM0MzsjZGVmaW5lIEFSRU5BX1NVRkZJWCBcJiMzNDtfX2FyZW5hXCYjMzQ7XG4mIzQzOyNkZWZpbmUgQVJFTkFfTUFZQkVfTlVMTF9TVUZGSVggXCYjMzQ7X19hcmVuYV9udWxsYWJsZVwmIzM0O1xuIFxuIC8qIFByZXBhcmUgYXJndW1lbnQgaW5mbyBmb3IgZXZlcnkgbnVsbGFibGUgYXJndW1lbnQgb2YgYSBtZW1iZXIgb2YgYVxuICAqIHN0cnVjdF9vcHMgdHlwZS5cbkBAIC0xNTksNyAmIzQzOzE2MSw3IEBAIHZvaWQgYnBmX3N0cnVjdF9vcHNfaW1hZ2VfZnJlZSh2b2lkICppbWFnZSlcbiAgKiB0byBwcm92aWRlIGFuIGFycmF5IG9mIHN0cnVjdCBicGZfY3R4X2FyZ19hdXgsIHdoaWNoIGluIHR1cm4gcHJvdmlkZXNcbiAgKiB0aGUgaW5mb3JtYXRpb24gdGhhdCB1c2VkIGJ5IHRoZSB2ZXJpZmllciB0byBjaGVjayB0aGUgYXJndW1lbnRzIG9mIHRoZVxuICAqIEJQRiBzdHJ1Y3Rfb3BzIHByb2dyYW0gYXNzaWduZWQgdG8gdGhlIG1lbWJlci4gSGVyZSwgd2Ugb25seSBjYXJlIGFib3V0XG4tICogdGhlIGFyZ3VtZW50cyB0aGF0IGFyZSBtYXJrZWQgYXMgX19udWxsYWJsZS5cbiYjNDM7ICogdGhlIGFyZ3VtZW50cyB0aGF0IGFyZSBtYXJrZWQgYXMgX19udWxsYWJsZSwgX19yZWYgb3IgX19hcmVuYS5cbiAgKlxuICAqIFRoZSBhcnJheSBvZiBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4IGlzIGV2ZW50dWFsbHkgYXNzaWduZWQgdG9cbiAgKiBwcm9nLVx1MDAzZWF1eC1cdTAwM2VjdHhfYXJnX2luZm8gb2YgQlBGIHN0cnVjdF9vcHMgcHJvZ3JhbXMgYW5kIHBhc3NlZCB0byB0aGVcbkBAIC0xNzUsNyAmIzQzOzE3Nyw4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9hcmdfaW5mbyhzdHJ1Y3QgYnRmICpidGYsXG4gXHRcdFx0ICAgIHN0cnVjdCBicGZfc3RydWN0X29wc19hcmdfaW5mbyAqYXJnX2luZm8pXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICpzdHViX2Z1bmNfcHJvdG8sICpwb2ludGVkX3R5cGU7XG4tXHRib29sIGlzX251bGxhYmxlID0gZmFsc2UsIGlzX3JlZmNvdW50ZWQgPSBmYWxzZTtcbiYjNDM7XHRib29sIGlzX251bGxhYmxlID0gZmFsc2UsIGlzX3JlZmNvdW50ZWQgPSBmYWxzZSwgaXNfYXJlbmEgPSBmYWxzZTtcbiYjNDM7XHRib29sIGlzX2FyZW5hX251bGxhYmxlID0gZmFsc2U7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICpzdHViX2FyZ3MsICphcmdzO1xuIFx0c3RydWN0IGJwZl9jdHhfYXJnX2F1eCAqaW5mbywgKmluZm9fYnVmO1xuIFx0dTMyIG5hcmdzLCBhcmdfbm8sIGluZm9fY250ID0gMDtcbkBAIC0yMjYsMjYgJiM0MzsyMjksMzAgQEAgc3RhdGljIGludCBwcmVwYXJlX2FyZ19pbmZvKHN0cnVjdCBidGYgKmJ0ZixcbiBcdGluZm8gPSBpbmZvX2J1ZjtcbiBcdGZvciAoYXJnX25vID0gMDsgYXJnX25vIFx1MDAzYyBuYXJnczsgYXJnX25vJiM0MzsmIzQzOykge1xuIFx0XHQvKiBTa2lwIGFyZ3VtZW50cyB0aGF0IGlzIG5vdCBzdWZmaXhlZCB3aXRoXG4tXHRcdCAqIFwmIzM0O19fbnVsbGFibGUgb3IgX19yZWZcJiMzNDsuXG4mIzQzO1x0XHQgKiBcJiMzNDtfX251bGxhYmxlXCYjMzQ7LCBcJiMzNDtfX3JlZlwmIzM0OywgXCYjMzQ7X19hcmVuYVwmIzM0OyBvciBcJiMzNDtfX2FyZW5hX251bGxhYmxlXCYjMzQ7LlxuIFx0XHQgKi9cbiBcdFx0aXNfbnVsbGFibGUgPSBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgXHUwMDI2c3R1Yl9hcmdzW2FyZ19ub10sXG4gXHRcdFx0XHRcdFx0ICAgICBNQVlCRV9OVUxMX1NVRkZJWCk7XG4gXHRcdGlzX3JlZmNvdW50ZWQgPSBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgXHUwMDI2c3R1Yl9hcmdzW2FyZ19ub10sXG4gXHRcdFx0XHRcdFx0ICAgICAgIFJFRkNPVU5URURfU1VGRklYKTtcbiYjNDM7XHRcdGlzX2FyZW5hX251bGxhYmxlID0gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIFx1MDAyNnN0dWJfYXJnc1thcmdfbm9dLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIEFSRU5BX01BWUJFX05VTExfU1VGRklYKTtcbiYjNDM7XHRcdGlzX2FyZW5hID0gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIFx1MDAyNnN0dWJfYXJnc1thcmdfbm9dLCBBUkVOQV9TVUZGSVgpO1xuIFxuIFx0XHRpZiAoaXNfbnVsbGFibGUpXG4gXHRcdFx0c3VmZml4ID0gTUFZQkVfTlVMTF9TVUZGSVg7XG4gXHRcdGVsc2UgaWYgKGlzX3JlZmNvdW50ZWQpXG4gXHRcdFx0c3VmZml4ID0gUkVGQ09VTlRFRF9TVUZGSVg7XG4mIzQzO1x0XHRlbHNlIGlmIChpc19hcmVuYV9udWxsYWJsZSlcbiYjNDM7XHRcdFx0c3VmZml4ID0gQVJFTkFfTUFZQkVfTlVMTF9TVUZGSVg7XG4mIzQzO1x0XHRlbHNlIGlmIChpc19hcmVuYSlcbiYjNDM7XHRcdFx0c3VmZml4ID0gQVJFTkFfU1VGRklYO1xuIFx0XHRlbHNlXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdC8qIFNob3VsZCBiZSBhIHBvaW50ZXIgdG8gc3RydWN0ICovXG4tXHRcdHBvaW50ZWRfdHlwZSA9IGJ0Zl90eXBlX3Jlc29sdmVfcHRyKGJ0Zixcbi1cdFx0XHRcdFx0XHQgICAgYXJnc1thcmdfbm9dLnR5cGUsXG4tXHRcdFx0XHRcdFx0ICAgIFx1MDAyNmFyZ19idGZfaWQpO1xuLVx0XHRpZiAoIXBvaW50ZWRfdHlwZSB8fFxuLVx0XHQgICAgIWJ0Zl90eXBlX2lzX3N0cnVjdChwb2ludGVkX3R5cGUpKSB7XG4mIzQzO1x0XHQvKiBTaG91bGQgYmUgYSBwb2ludGVyIHRvIHN0cnVjdCwgb3IgYW55IHBvaW50ZXIgZm9yIF9fYXJlbmEvX19hcmVuYV9udWxsYWJsZSAqL1xuJiM0MztcdFx0cG9pbnRlZF90eXBlID0gYnRmX3R5cGVfcmVzb2x2ZV9wdHIoYnRmLCBhcmdzW2FyZ19ub10udHlwZSwgXHUwMDI2YXJnX2J0Zl9pZCk7XG4mIzQzO1x0XHRpZiAoIXBvaW50ZWRfdHlwZSB8fCAoIWlzX2FyZW5hIFx1MDAyNlx1MDAyNiAhaXNfYXJlbmFfbnVsbGFibGUgXHUwMDI2XHUwMDI2ICFidGZfdHlwZV9pc19zdHJ1Y3QocG9pbnRlZF90eXBlKSkpIHtcbiBcdFx0XHRwcl93YXJuKFwmIzM0O3N0dWIgZnVuY3Rpb24gJXMgaGFzICVzIHRhZ2dpbmcgdG8gYW4gdW5zdXBwb3J0ZWQgdHlwZVxcblwmIzM0OyxcbiBcdFx0XHRcdHN0dWJfZm5hbWUsIHN1ZmZpeCk7XG4gXHRcdFx0Z290byBlcnJfb3V0O1xuQEAgLTI3Myw2ICYjNDM7MjgwLDE1IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9hcmdfaW5mbyhzdHJ1Y3QgYnRmICpidGYsXG4gXHRcdH0gZWxzZSBpZiAoaXNfcmVmY291bnRlZCkge1xuIFx0XHRcdGluZm8tXHUwMDNlcmVnX3R5cGUgPSBQVFJfVFJVU1RFRCB8IFBUUl9UT19CVEZfSUQ7XG4gXHRcdFx0aW5mby1cdTAwM2VyZWZjb3VudGVkID0gdHJ1ZTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoaXNfYXJlbmEgfHwgaXNfYXJlbmFfbnVsbGFibGUpIHtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogQm90aCB0eXBlcyBnZXQgUFRSX1RPX0FSRU5BLiBJbiB2ZXJpZmllciBzdGF0ZSxcbiYjNDM7XHRcdFx0ICogUFRSX1RPX0FSRU5BIGVuY29tcGFzc2VzIHBvdGVudGlhbCBOVUxMIHZhbHVlcywgYnV0XG4mIzQzO1x0XHRcdCAqIHdlIGRvIG5vdCBmb3JjZSB0aGUgcHJvZ3JhbSB0byBjaGVjayBpdCwgb3IgbWFpbnRhaW5cbiYjNDM7XHRcdFx0ICogcHJlY2lzaW9uIGFyb3VuZCBpdCwgc2luY2UgaXQgaGFzIG5vIHNhZmV0eSBpbXBsaWNhdGlvbi5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGluZm8tXHUwMDNlcmVnX3R5cGUgPSBQVFJfVE9fQVJFTkE7XG4mIzQzO1x0XHRcdGluZm8tXHUwMDNlYXJlbmFfbnVsbGFibGUgPSBpc19hcmVuYV9udWxsYWJsZTtcbiBcdFx0fVxuIFxuIFx0XHRpbmZvJiM0MzsmIzQzOztcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuY1xuaW5kZXggNWU4YWM0NWNlNTZhZi4uZTMxZjU2ZjQwMWViZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYnRmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnRmLmNcbkBAIC02OTYzLDE1ICYjNDM7Njk2MywxOSBAQCBib29sIGJ0Zl9jdHhfYWNjZXNzKGludCBvZmYsIGludCBzaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4tXHQvKiBjaGVjayBmb3IgUFRSX1RPX1JET05MWV9CVUZfT1JfTlVMTCBvciBQVFJfVE9fUkRXUl9CVUZfT1JfTlVMTCAqL1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2hlY2sgZm9yIFBUUl9UT19SRE9OTFlfQlVGX09SX05VTEwsIFBUUl9UT19SRFdSX0JVRl9PUl9OVUxMIG9yXG4mIzQzO1x0ICogUFRSX1RPX0FSRU5BIChib3RoIG51bGxhYmxlIGFuZCBub24tbnVsbGFibGUgY2FzZXMpLlxuJiM0MztcdCAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJvZy1cdTAwM2VhdXgtXHUwMDNlY3R4X2FyZ19pbmZvX3NpemU7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGNvbnN0IHN0cnVjdCBicGZfY3R4X2FyZ19hdXggKmN0eF9hcmdfaW5mbyA9IFx1MDAyNnByb2ctXHUwMDNlYXV4LVx1MDAzZWN0eF9hcmdfaW5mb1tpXTtcbiBcdFx0dTMyIHR5cGUsIGZsYWc7XG4gXG4gXHRcdHR5cGUgPSBiYXNlX3R5cGUoY3R4X2FyZ19pbmZvLVx1MDAzZXJlZ190eXBlKTtcbiBcdFx0ZmxhZyA9IHR5cGVfZmxhZyhjdHhfYXJnX2luZm8tXHUwMDNlcmVnX3R5cGUpO1xuLVx0XHRpZiAoY3R4X2FyZ19pbmZvLVx1MDAzZW9mZnNldCA9PSBvZmYgXHUwMDI2XHUwMDI2IHR5cGUgPT0gUFRSX1RPX0JVRiBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIChmbGFnIFx1MDAyNiBQVFJfTUFZQkVfTlVMTCkpIHtcbiYjNDM7XHRcdGlmIChjdHhfYXJnX2luZm8tXHUwMDNlb2Zmc2V0ID09IG9mZiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAodHlwZSA9PSBQVFJfVE9fQVJFTkEgfHxcbiYjNDM7XHRcdCAgICAgKHR5cGUgPT0gUFRSX1RPX0JVRiBcdTAwMjZcdTAwMjYgKGZsYWcgXHUwMDI2IFBUUl9NQVlCRV9OVUxMKSkpKSB7XG4gXHRcdFx0aW5mby1cdTAwM2VyZWdfdHlwZSA9IGN0eF9hcmdfaW5mby1cdTAwM2VyZWdfdHlwZTtcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0fVxuQEAgLTc1NDEsNiAmIzQzOzc1NDUsMjIgQEAgc3RhdGljIHU4IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdClcbiBcdHJldHVybiBmbGFncztcbiB9XG4gXG4mIzQzO3N0YXRpYyB1OCBfX2dldF9hcmdfZm1vZGVsX2ZsYWdzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbiYjNDM7XHRcdFx0XHQgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnLFxuJiM0MztcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpXG4mIzQzO3tcbiYjNDM7XHR1OCBmbGFncyA9IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKHQpO1xuJiM0MztcbiYjNDM7XHRpZiAoYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCYjMzQ7X19hcmVuYVwmIzM0OykgfHxcbiYjNDM7XHQgICAgYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCYjMzQ7X19hcmVuYV9udWxsYWJsZVwmIzM0OykpXG4mIzQzO1x0XHRmbGFncyB8PSBCVEZfRk1PREVMX0FSRU5BX0FSRztcbiYjNDM7XHRpZiAoYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCYjMzQ7X19udWxsYWJsZVwmIzM0OykgfHxcbiYjNDM7XHQgICAgYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCYjMzQ7X19hcmVuYV9udWxsYWJsZVwmIzM0OykpXG4mIzQzO1x0XHRmbGFncyB8PSBCVEZfRk1PREVMX05VTExBQkxFX0FSRztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZsYWdzO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBidGZfZGlzdGlsbF9mdW5jX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4gXHRcdFx0ICAgc3RydWN0IGJ0ZiAqYnRmLFxuIFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqZnVuYyxcbkBAIC03NjA2LDcgJiM0Mzs3NjI2LDcgQEAgaW50IGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8oc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuIFx0XHRtLVx1MDAzZWFyZ19zaXplW2ldID0gcmV0O1xuLVx0XHRtLVx1MDAzZWFyZ19mbGFnc1tpXSA9IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKHQpO1xuJiM0MztcdFx0bS1cdTAwM2VhcmdfZmxhZ3NbaV0gPSBfX2dldF9hcmdfZm1vZGVsX2ZsYWdzKGJ0ZiwgXHUwMDI2YXJnc1tpXSwgdCk7XG4gXHR9XG4gXHRtLVx1MDAzZW5yX2FyZ3MgPSBuYXJncztcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY29yZS5jIGIva2VybmVsL2JwZi9jb3JlLmNcbmluZGV4IGUyMDc2NjY3YjI0NTEuLmEzZTFmYWUzMmVhY2UgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jb3JlLmNcbkBAIC0zMzA4LDYgJiM0MzszMzA4LDExIEBAIGJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiYjNDM7Ym9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gYm9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c19mYXJfa2Z1bmNfY2FsbCh2b2lkKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG5pbmRleCBlZDc5OTlhZDZjNjZjLi5kMmQ3YTI5MDQzNDVkIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG5AQCAtNTI5LDYgJiM0Mzs1MjksNTMgQEAgYnBmX3RyYW1wb2xpbmVfZ2V0X3Byb2dzKGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGludCAqdG90YWwsIGJvb2wgKmlwX2FcbiBcdHJldHVybiB0bm9kZXM7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJvZy1cdTAwM2VhdXgtXHUwMDNlY3R4X2FyZ19pbmZvX3NpemU7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0aWYgKGJhc2VfdHlwZShwcm9nLVx1MDAzZWF1eC1cdTAwM2VjdHhfYXJnX2luZm9baV0ucmVnX3R5cGUpID09IFBUUl9UT19BUkVOQSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDb2xsZWN0IHdoaWNoIGN0eCBzbG90cyBvZiBhIHN0cnVjdF9vcHMgdHJhbXBvbGluZSBob2xkIGFyZW5hIGtlcm5lbFxuJiM0MzsgKiBwb2ludGVycyB0aGF0IHNhdmVfYXJncygpIG11c3QgY29udmVydCB0byB0aGUgYXJlbmEgcG9pbnRlciBmb3JtLiBPbmx5XG4mIzQzOyAqIHRoZSBzdHJ1Y3Rfb3BzIGluZGlyZWN0IHRyYW1wb2xpbmUgY29udmVydHM6IGl0IGRpc3BhdGNoZXMgdG8gYSBzaW5nbGVcbiYjNDM7ICogcHJvZyB3aG9zZSBhcmVuYSBpcyBrbm93biBhdCBnZW5lcmF0aW9uIHRpbWUuIFJldHVybiBmYWxzZSB3aGVuIHRoZXJlXG4mIzQzOyAqIGlzIG5vdGhpbmcgdG8gY29udmVydC5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJncyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHUzMiBmbGFncyxcbiYjNDM7XHRcdFx0XHQgIHN0cnVjdCBicGZfdHJhbXBfYXJlbmFfYXJncyAqYWFyZ3MpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdG1lbXNldChhYXJncywgMCwgc2l6ZW9mKCphYXJncykpO1xuJiM0MztcbiYjNDM7XHRpZiAoIShmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIHx8XG4mIzQzO1x0ICAgIHRub2Rlc1tCUEZfVFJBTVBfRkVOVFJZXS5ucl9ub2RlcyAhPSAxKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRwcm9nID0gdG5vZGVzW0JQRl9UUkFNUF9GRU5UUlldLm5vZGVzWzBdLVx1MDAzZWxpbmstXHUwMDNlcHJvZztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwcm9nLVx1MDAzZWF1eC1cdTAwM2VjdHhfYXJnX2luZm9fc2l6ZTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBicGZfY3R4X2FyZ19hdXggKmluZm8gPSBcdTAwMjZwcm9nLVx1MDAzZWF1eC1cdTAwM2VjdHhfYXJnX2luZm9baV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKGJhc2VfdHlwZShpbmZvLVx1MDAzZXJlZ190eXBlKSAhPSBQVFJfVE9fQVJFTkEpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0YWFyZ3MtXHUwMDNlc2xvdHMgfD0gQklUKGluZm8tXHUwMDNlb2Zmc2V0IC8gOCk7XG4mIzQzO1x0XHRpZiAoaW5mby1cdTAwM2VhcmVuYV9udWxsYWJsZSlcbiYjNDM7XHRcdFx0YWFyZ3MtXHUwMDNlbnVsbGFibGVfc2xvdHMgfD0gQklUKGluZm8tXHUwMDNlb2Zmc2V0IC8gOCk7XG4mIzQzO1x0fVxuJiM0MztcdGlmICghYWFyZ3MtXHUwMDNlc2xvdHMpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXJlbmEpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGFhcmdzLVx1MDAzZWtlcm5fdm1fc3RhcnQgPSBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQocHJvZy1cdTAwM2VhdXgtXHUwMDNlYXJlbmEpO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGJwZl90cmFtcF9pbWFnZV9mcmVlKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltKVxuIHtcbiBcdGJwZl9pbWFnZV9rc3ltX2RlbChcdTAwMjZpbS1cdTAwM2Vrc3ltKTtcbkBAIC02ODUsNiAmIzQzOzczMiw3IEBAIHN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0XG4gXHR1MzIgb3JpZ19mbGFncyA9IHRyLVx1MDAzZWZsYWdzO1xuIFx0Ym9vbCBpcF9hcmcgPSBmYWxzZTtcbiBcdGludCBlcnIsIHRvdGFsLCBzaXplO1xuJiM0MztcdGludCBraW5kLCBpO1xuIFxuIFx0dG5vZGVzID0gYnBmX3RyYW1wb2xpbmVfZ2V0X3Byb2dzKHRyLCBcdTAwMjZ0b3RhbCwgXHUwMDI2aXBfYXJnKTtcbiBcdGlmIChJU19FUlIodG5vZGVzKSlcbkBAIC02OTUsNiAmIzQzOzc0MywyMiBAQCBzdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFyZW5hIGN0eCBhcmdzIGFyZSBjb252ZXJ0ZWQgb25seSBieSB0aGUgc3RydWN0X29wcyBpbmRpcmVjdFxuJiM0MztcdCAqIHRyYW1wb2xpbmUsIHdoaWNoIGRpc3BhdGNoZXMgdG8gYSBzaW5nbGUga25vd24gcHJvZy4gR2VuZXJpY1xuJiM0MztcdCAqIHRyYW1wb2xpbmVzIGNhbiBtaXggcHJvZ3Mgd2l0aCBkaWZmZXJlbnQgYXJlbmFzLCBzbyBubyBjb252ZXJzaW9uXG4mIzQzO1x0ICogaXMgcG9zc2libGUgaGVyZS4gTm90IHJlYWNoYWJsZSB0b2RheTogb25seSBzdHJ1Y3Rfb3BzIHByb2dzIGdldFxuJiM0MztcdCAqIGFyZW5hIGN0eCBhcmdzIGFuZCB0aGV5IG5ldmVyIHJpZGUgZ2VuZXJpYyB0cmFtcG9saW5lcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGtpbmQgPSAwOyBraW5kIFx1MDAzYyBCUEZfVFJBTVBfTUFYOyBraW5kJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdG5vZGVzW2tpbmRdLm5yX25vZGVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAoYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmcodG5vZGVzW2tpbmRdLm5vZGVzW2ldLVx1MDAzZWxpbmstXHUwMDNlcHJvZykpIHtcbiYjNDM7XHRcdFx0XHRlcnIgPSAtRU5PVFNVUFA7XG4mIzQzO1x0XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogY2xlYXIgYWxsIGJpdHMgZXhjZXB0IFNIQVJFX0lQTU9ESUZZIGFuZCBUQUlMX0NBTExfQ1RYICovXG4gXHR0ci1cdTAwM2VmbGFncyBcdTAwMjY9IChCUEZfVFJBTVBfRl9TSEFSRV9JUE1PRElGWSB8IEJQRl9UUkFNUF9GX1RBSUxfQ0FMTF9DVFgpO1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggYjI3NDAwNGZjY2ZkOS4uYzkxMjkzMzBkZWRlNiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMTA5MDcsNiAmIzQzOzEwOTA3LDE2IEBAIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19pcnFfZmxhZyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW1cbiBcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcJiMzNDtfX2lycV9mbGFnXCYjMzQ7KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19hcmVuYShjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcJiMzNDtfX2FyZW5hXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2FyZW5hX251bGxhYmxlKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwmIzM0O19fYXJlbmFfbnVsbGFibGVcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19zY2FsYXJfd2l0aF9uYW1lKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbiBcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcsXG4gXHRcdFx0XHRcdCAgY29uc3QgY2hhciAqbmFtZSlcbkBAIC0xMTEyNyw2ICYjNDM7MTExMzcsNyBAQCBlbnVtIGtmdW5jX3B0cl9hcmdfdHlwZSB7XG4gXHRLRl9BUkdfUFRSX1RPX0lSUV9GTEFHLFxuIFx0S0ZfQVJHX1BUUl9UT19SRVNfU1BJTl9MT0NLLFxuIFx0S0ZfQVJHX1BUUl9UT19UQVNLX1dPUkssXG4mIzQzO1x0S0ZfQVJHX1BUUl9UT19BUkVOQSxcbiB9O1xuIFxuIGVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcbkBAIC0xMTQxMiw3ICYjNDM7MTE0MjMsNiBAQCBnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuIFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnRmX3R5cGVfc3RyKHQpKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4tXG4gXHRyZWZfdCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKG1ldGEtXHUwMDNlYnRmLCB0LVx1MDAzZXR5cGUsIE5VTEwpO1xuIFx0cmVmX3RuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KG1ldGEtXHUwMDNlYnRmLCByZWZfdC1cdTAwM2VuYW1lX29mZik7XG4gXG5AQCAtMTE0NjEsNiAmIzQzOzExNDcxLDkgQEAgZ2V0X2tmdW5jX2FyZ190eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbiBcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX1JFU19TUElOX0xPQ0s7XG4gXHRlbHNlIGlmIChpc19rZnVuY19hcmdfY2FsbGJhY2soZW52LCBtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbiBcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0NBTExCQUNLO1xuJiM0MztcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19hcmVuYShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSB8fFxuJiM0MztcdFx0IGlzX2tmdW5jX2FyZ19hcmVuYV9udWxsYWJsZShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbiYjNDM7XHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19BUkVOQTtcbiBcdGVsc2UgaWYgKGFyZyAmIzQzOyAxIFx1MDAzYyBuYXJncyBcdTAwMjZcdTAwMjZcbiBcdFx0IChpc19rZnVuY19hcmdfbWVtX3NpemUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnICYjNDM7IDFdKSB8fFxuIFx0XHQgIGlzX2tmdW5jX2FyZ19jb25zdF9tZW1fc2l6ZShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmcgJiM0MzsgMV0pKSkge1xuQEAgLTEyMTU0LDYgJiM0MzsxMjE2NywzMSBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxuIFxuIFx0XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmdzW2ldLnR5cGUsIE5VTEwpO1xuIFxuJiM0MztcdFx0aWYgKGJhc2VfdHlwZShrZl9hcmdfdHlwZSkgPT0gS0ZfQVJHX1BUUl9UT19BUkVOQSkge1xuJiM0MztcdFx0XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XG4mIzQzO1x0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0pJVCBkb2VzIG5vdCBzdXBwb3J0IGtmdW5jICVzKCkgd2l0aCBhcmVuYSBwb2ludGVyIGFyZ3VtZW50c1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdGZ1bmNfbmFtZSk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRpZiAoIWVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VhcmVuYSkge1xuJiM0MztcdFx0XHRcdHZlcmJvc2UoZW52LFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7JXMgYXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRpZiAocmVnbm8gXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgYXJlbmEgcG9pbnRlciBjYW5ub3QgYmUgYSBzdGFjayBhcmd1bWVudFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0aWYgKHJlZy1cdTAwM2V0eXBlICE9IFBUUl9UT19BUkVOQSBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKSB7XG4mIzQzO1x0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyVzIGlzIG5vdCBhIHBvaW50ZXIgdG8gYXJlbmEgb3Igc2NhbGFyXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGlmIChidGZfdHlwZV9pc19wdHIodCkgXHUwMDI2XHUwMDI2IChicGZfcmVnaXN0ZXJfaXNfbnVsbChyZWcpIHx8IHR5cGVfbWF5X2JlX251bGwocmVnLVx1MDAzZXR5cGUpKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFpc19rZnVuY19hcmdfbnVsbGFibGUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbaV0pKSB7XG4gXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1Bvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCAlc1xcblwmIzM0OyxcbkBAIC0xODgwNyw2ICYjNDM7MTg4NDUsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCAqZnVuY19wcm90bztcbiBcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfYXJnX2luZm8gKmFyZ19pbmZvO1xuIFx0Y29uc3Qgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzICpzdF9vcHM7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyO1xuIFx0c3RydWN0IGJwZl9wcm9nICpwcm9nID0gZW52LVx1MDAzZXByb2c7XG5AQCAtMTg4ODUsMTAgJiM0MzsxODkyNCwyMyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0fVxuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3Rfb3BzX2Rlc2MtXHUwMDNlYXJnX2luZm9bbWVtYmVyX2lkeF0uY250OyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAoc3Rfb3BzX2Rlc2MtXHUwMDNlYXJnX2luZm9bbWVtYmVyX2lkeF0uaW5mb1tpXS5yZWZjb3VudGVkKSB7XG4mIzQzO1x0YXJnX2luZm8gPSBcdTAwMjZzdF9vcHNfZGVzYy1cdTAwM2VhcmdfaW5mb1ttZW1iZXJfaWR4XTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcmdfaW5mby1cdTAwM2VjbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4ICppbmZvID0gXHUwMDI2YXJnX2luZm8tXHUwMDNlaW5mb1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaW5mby1cdTAwM2VyZWZjb3VudGVkKVxuIFx0XHRcdGhhc19yZWZjb3VudGVkX2FyZyA9IHRydWU7XG4tXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRpZiAoYmFzZV90eXBlKGluZm8tXHUwMDNlcmVnX3R5cGUpID09IFBUUl9UT19BUkVOQSkge1xuJiM0MztcdFx0XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XG4mIzQzO1x0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0pJVCBkb2VzIG5vdCBzdXBwb3J0IGFyZW5hIGFyZ3VtZW50c1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRpZiAoIXByb2ctXHUwMDNlYXV4LVx1MDAzZWFyZW5hKSB7XG4mIzQzO1x0XHRcdFx0dmVyYm9zZShlbnYsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDthcmVuYSBhcmd1bWVudCBvZiAlcyByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0bW5hbWUpO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC0xODkwOSw4ICYjNDM7MTg5NjEsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfZnVuY19uYW1lID0gbW5hbWU7XG4gXHRlbnYtXHUwMDNlb3BzID0gc3Rfb3BzLVx1MDAzZXZlcmlmaWVyX29wcztcbiBcbi1cdHJldHVybiBicGZfcHJvZ19jdHhfYXJnX2luZm9faW5pdChwcm9nLCBzdF9vcHNfZGVzYy1cdTAwM2VhcmdfaW5mb1ttZW1iZXJfaWR4XS5pbmZvLFxuLVx0XHRcdFx0XHQgIHN0X29wc19kZXNjLVx1MDAzZWFyZ19pbmZvW21lbWJlcl9pZHhdLmNudCk7XG4mIzQzO1x0cmV0dXJuIGJwZl9wcm9nX2N0eF9hcmdfaW5mb19pbml0KHByb2csIGFyZ19pbmZvLVx1MDAzZWluZm8sIGFyZ19pbmZvLVx1MDAzZWNudCk7XG4gfVxuICNkZWZpbmUgU0VDVVJJVFlfUFJFRklYIFwmIzM0O3NlY3VyaXR5X1wmIzM0O1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9rZnVuYy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOWJlMTk1NjVmMGQ1M1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfa2Z1bmMuY1xuQEAgLTAsMCAmIzQzOzEsMTUgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2FyZW5hX2tmdW5jLnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGhlIHRlc3Qga2Z1bmNzIGxpdmUgaW4gYnBmX3Rlc3Rtb2QuIFJlc29sdmluZyBrZnVuY3MgYWdhaW5zdCBtb2R1bGVcbiYjNDM7ICogQlRGcyBuZWVkcyBDQVBfU1lTX0FETUlOLCBzbyBydW4gd2l0aCBmdWxsIGNhcGFiaWxpdGllcyBpbnN0ZWFkIG9mXG4mIzQzOyAqIHRocm91Z2ggdGhlIHZlcmlmaWVyIHRlc3RzJiMzOTsgY2FwYWJpbGl0eS1yZXN0cmljdGVkIHJ1bm5lci5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgdGVzdF9hcmVuYV9rZnVuYyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0UlVOX1RFU1RTKGFyZW5hX2tmdW5jKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2tmdW5jX2ppdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfa2Z1bmNfaml0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yMzU5Y2RlMjRjNDVkXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9rZnVuY19qaXQuY1xuQEAgLTAsMCAmIzQzOzEsMTMgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YXJlbmFfa2Z1bmNfaml0LnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUnVucyB3aXRoIGZ1bGwgY2FwYWJpbGl0aWVzOiByZXNvbHZpbmcgbW9kdWxlIGtmdW5jIGtzeW1zIHJlcXVpcmVzXG4mIzQzOyAqIENBUF9TWVNfQURNSU4sIHdoaWNoIHJ1bGVzIG91dCB0aGUgY2FwYWJpbGl0eS1yZXN0cmljdGVkIHJ1bm5lci5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgdGVzdF9hcmVuYV9rZnVuY19qaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdFJVTl9URVNUUyhhcmVuYV9rZnVuY19qaXQpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmIxZTM5ZGVmYTM4YWVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jXG5AQCAtMCwwICYjNDM7MSw3NCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c3RydWN0X29wc19hcmVuYS5za2VsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c3RydWN0X29wc19hcmVuYV9mYWlsLnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2lmIGRlZmluZWQoX194ODZfNjRfXylcbiYjNDM7LypcbiYjNDM7ICogQXR0YWNoIGNhbGxiYWNrcyB3aXRoIF9fYXJlbmEgYW5kIF9fYXJlbmFfbnVsbGFibGUgYXJndW1lbnRzIGFuZCBkcml2ZVxuJiM0MzsgKiB0aGVtIHRocm91Z2ggdGhlIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKigpIGtmdW5jcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGFyZW5hX2FyZyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzKTtcbiYjNDM7XHRzdHJ1Y3Qgc3RydWN0X29wc19hcmVuYSAqc2tlbDtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBOVUxMO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBzdHJ1Y3Rfb3BzX2FyZW5hX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3N0cnVjdF9vcHNfYXJlbmFfX29wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRsaW5rID0gYnBmX21hcF9fYXR0YWNoX3N0cnVjdF9vcHMoc2tlbC1cdTAwM2VtYXBzLnRlc3Rtb2RfYXJlbmEpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcJiMzNDthdHRhY2hfc3RydWN0X29wc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy50cmlnZ2VyKSxcbiYjNDM7XHRcdFx0XHQgICAgIFx1MDAyNnRvcHRzKTtcbiYjNDM7XHRBU1NFUlRfT0soZXJyLCBcJiMzNDt0ZXN0X3J1blwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHRvcHRzLnJldHZhbCwgMCwgXCYjMzQ7dHJpZ2dlcl9yZXR2YWxcJiMzNDspO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuJiM0MztcdHN0cnVjdF9vcHNfYXJlbmFfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEEgcHJvZ3JhbSB3aXRoIG5vIGFyZW5hIGNhbm5vdCBhdHRhY2ggdG8gYSBtZW1iZXIgd2l0aCBhbiBfX2FyZW5hXG4mIzQzOyAqIGFyZ3VtZW50LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgYXJlbmFfYXJnX2ZhaWwodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwgKnNrZWw7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWxfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoQVNTRVJUX0VSUl9QVFIoc2tlbCwgXCYjMzQ7c3RydWN0X29wc19hcmVuYV9mYWlsX19vcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c3RydWN0X29wc19hcmVuYV9mYWlsX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogU2VyaWFsaXplZCBiZWNhdXNlIGl0IGF0dGFjaGVzIHRoZSBzaW5nbGV0b24gYnBmX3Rlc3Rtb2Rfb3BzMywgd2hpY2hcbiYjNDM7ICogdGVzdF9zdHJ1Y3Rfb3BzX3ByaXZhdGVfc3RhY2sgYWxzbyBhdHRhY2hlczsgcmVnaXN0ZXJpbmcgaXQgdHdpY2UgZmFpbHNcbiYjNDM7ICogd2l0aCAtRUVYSVNULlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFyZW5hIHN0cnVjdF9vcHMgYXJndW1lbnRzIG5lZWQgSklUIHN1cHBvcnQsIGN1cnJlbnRseSB4ODYtNjQgb25seS5cbiYjNDM7XHQgKiBFbHNld2hlcmUgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGggXCYjMzQ7SklUIGRvZXMgbm90IHN1cHBvcnQgYXJlbmFcbiYjNDM7XHQgKiBhcmd1bWVudHNcJiMzNDssIHNvIHRoZSBwcm9ncmFtcyBjYW5ub3QgZXZlbiBsb2FkLlxuJiM0MztcdCAqL1xuJiM0MzsjaWYgZGVmaW5lZChfX3g4Nl82NF9fKVxuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2FyZW5hX2FyZ1wmIzM0OykpXG4mIzQzO1x0XHRhcmVuYV9hcmcoKTtcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDthcmVuYV9hcmdfZmFpbFwmIzM0OykpXG4mIzQzO1x0XHRhcmVuYV9hcmdfZmFpbCgpO1xuJiM0MzsjZWxzZVxuJiM0MztcdHRlc3RfX3NraXAoKTtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTVkNDgxNTE3OTdkYVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmNcbkBAIC0wLDAgJiM0MzsxLDI2MCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfbWlzYy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9leHBlcmltZW50YWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGZfYXJlbmFfY29tbW9uLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpO1xuJiM0MztcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcbiYjNDM7XHQvKiBwYWdlIDAgaG9zdHMgdGhlIGFyZW5hIGdsb2JhbCwgcGFnZSAxIGlzIGZvciBhbGxvY2F0aW9ucyAqL1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgMik7XG4mIzQzO30gYXJlbmEgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE9jY3VwaWVzIHBhZ2UgMCBzbyBubyBhbGxvY2F0aW9uIGxhbmRzIGF0IGFyZW5hIG9mZnNldCAwLCB3aGljaCB0aGVcbiYjNDM7ICogbnVsbGFibGUgdGVzdHMgYmVsb3cgbXVzdCBiZSBhYmxlIHRvIHRlbGwgYXBhcnQgZnJvbSBOVUxMLlxuJiM0MzsgKi9cbiYjNDM7dTY0IF9fYXJlbmEgYXJlbmFfcGFkO1xuJiM0MztcbiYjNDM7Lyogdm9sYXRpbGUgdG8gZm9yY2UgdGhlIHNjYWxhciByZWxvYWRzIGJlbG93ICovXG4mIzQzO3ZvbGF0aWxlIHU2NCBzdGFzaDtcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKVxuJiM0MztpbnQgYXJlbmFfYXJnX2Zvcm1zKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MzsjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVClcbiYjNDM7XHR1NjQgX19hcmVuYSAqdmFsO1xuJiM0MztcdHU2NCByZXQ7XG4mIzQzO1xuJiM0MztcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbiYjNDM7XHRpZiAoIXZhbClcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcbiYjNDM7XHQvKiBQVFJfVE9fQVJFTkEgYXJndW1lbnQgKi9cbiYjNDM7XHQqdmFsID0gNDE7XG4mIzQzO1x0cmV0ID0gYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KCh1NjQgKil2YWwpO1xuJiM0MztcdGlmIChyZXQgIT0gNDEgfHwgKnZhbCAhPSA0MilcbiYjNDM7XHRcdHJldHVybiAyO1xuJiM0MztcbiYjNDM7XHQvKiB0aGUgbG93IDMyIGJpdHMgYXMgYSBzY2FsYXIgKi9cbiYjNDM7XHRzdGFzaCA9ICh1MzIpKHU2NCl2YWw7XG4mIzQzO1x0cmV0ID0gYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KCh1NjQgKilzdGFzaCk7XG4mIzQzO1x0aWYgKHJldCAhPSA0MiB8fCAqdmFsICE9IDQzKVxuJiM0MztcdFx0cmV0dXJuIDM7XG4mIzQzO1xuJiM0MztcdC8qIHRoZSBmdWxsIHVzZXIgYWRkcmVzcyBhcyBhIHNjYWxhciAqL1xuJiM0MztcdHN0YXNoID0gKHU2NCl2YWw7XG4mIzQzO1x0YnBmX2FkZHJfc3BhY2VfY2FzdChzdGFzaCwgMSwgMCk7XG4mIzQzO1x0cmV0ID0gYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KCh1NjQgKilzdGFzaCk7XG4mIzQzO1x0aWYgKHJldCAhPSA0MyB8fCAqdmFsICE9IDQ0KVxuJiM0MztcdFx0cmV0dXJuIDQ7XG4mIzQzO1xuJiM0MztcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTtcbiYjNDM7I2VuZGlmXG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFBpbiB0aGUgcmViYXNlIHNlbWFudGljcyB1c2luZyB0aGUgY2FwdHVyZSBrZnVuY3MsIHdoaWNoIHJldHVybiB0aGUgcmF3XG4mIzQzOyAqIGFyZ3VtZW50IHZhbHVlOiBfX2FyZW5hIHJlYmFzZXMgdW5jb25kaXRpb25hbGx5LCBzbyB6ZXJvIGxvdyAzMiBiaXRzXG4mIzQzOyAqIGFycml2ZSBhcyB0aGUgYXJlbmEga2VybmVsIGJhc2UsIHdoaWxlIF9fYXJlbmFfbnVsbGFibGUgdHVybnMgdGhlbSBpbnRvXG4mIzQzOyAqIE5VTEwuXG4mIzQzOyAqL1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiYjNDM7aW50IGFyZW5hX2FyZ19yZWJhc2Uodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzOyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuJiM0MztcdHU2NCBfX2FyZW5hICp2YWw7XG4mIzQzO1x0dTY0IGJhc2UsIG9mZjtcbiYjNDM7XG4mIzQzO1x0dmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuJiM0MztcdGlmICghdmFsKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdGJhc2UgPSBicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QoTlVMTCk7XG4mIzQzO1x0aWYgKCFiYXNlKVxuJiM0MztcdFx0cmV0dXJuIDI7XG4mIzQzO1xuJiM0MztcdC8qIG9ubHkgdGhlIGxvdyAzMiBiaXRzIGNvbnRyaWJ1dGUgKi9cbiYjNDM7XHRzdGFzaCA9IDB4YmFkYzBmZmUwMDAwMDAwMDtcbiYjNDM7XHRpZiAoYnBmX2tmdW5jX2FyZW5hX2NhcF90ZXN0KCh1NjQgKilzdGFzaCkgIT0gYmFzZSlcbiYjNDM7XHRcdHJldHVybiAzO1xuJiM0MztcbiYjNDM7XHRvZmYgPSAodTMyKSh1NjQpdmFsO1xuJiM0MztcdGlmIChicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QoKHU2NCAqKXZhbCkgIT0gYmFzZSAmIzQzOyBvZmYpXG4mIzQzO1x0XHRyZXR1cm4gNDtcbiYjNDM7XG4mIzQzO1x0aWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdChOVUxMKSAhPSAwKVxuJiM0MztcdFx0cmV0dXJuIDU7XG4mIzQzO1xuJiM0MztcdHN0YXNoID0gMHhiYWRjMGZmZTAwMDAwMDAwO1xuJiM0MztcdGlmIChicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoKHU2NCAqKXN0YXNoKSAhPSAwKVxuJiM0MztcdFx0cmV0dXJuIDY7XG4mIzQzO1xuJiM0MztcdGlmIChicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoKHU2NCAqKXZhbCkgIT0gYmFzZSAmIzQzOyBvZmYpXG4mIzQzO1x0XHRyZXR1cm4gNztcbiYjNDM7XG4mIzQzO1x0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fYXJjaF94ODZfNjRcbiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApXG4mIzQzO2ludCBhcmVuYV9hcmdfbnVsbGFibGUodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzOyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuJiM0MztcdHU2NCBfX2FyZW5hICp2YWw7XG4mIzQzO1x0dTY0IHJldDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuJiM0MztcdGlmICghdmFsKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdCp2YWwgPSA0MTtcbiYjNDM7XHRyZXQgPSBicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QoKHU2NCAqKXZhbCk7XG4mIzQzO1x0aWYgKHJldCAhPSA0MSB8fCAqdmFsICE9IDQyKVxuJiM0MztcdFx0cmV0dXJuIDI7XG4mIzQzO1xuJiM0MztcdGlmIChicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QoTlVMTCkgIT0gMHhkZWFkYmVlZilcbiYjNDM7XHRcdHJldHVybiAzO1xuJiM0MztcbiYjNDM7XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XG4mIzQzOyNlbmRpZlxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiYjNDM7aW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MzsjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVClcbiYjNDM7XHR1NjQgX19hcmVuYSAqdmFsO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0dmFsWzBdID0gMTtcbiYjNDM7XHR2YWxbMV0gPSAyO1xuJiM0MztcdHZhbFsyXSA9IDQ7XG4mIzQzO1x0dmFsWzNdID0gODtcbiYjNDM7XHR2YWxbNF0gPSAxNjtcbiYjNDM7XG4mIzQzO1x0aWYgKGJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KCh1NjQgKilcdTAwMjZ2YWxbMF0sICh1NjQgKilcdTAwMjZ2YWxbMV0sXG4mIzQzO1x0XHRcdFx0ICAgICAgICh1NjQgKilcdTAwMjZ2YWxbMl0sICh1NjQgKilcdTAwMjZ2YWxbM10sXG4mIzQzO1x0XHRcdFx0ICAgICAgICh1NjQgKilcdTAwMjZ2YWxbNF0pICE9IDMxKVxuJiM0MztcdFx0cmV0dXJuIDI7XG4mIzQzO1x0aWYgKGJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KCh1NjQgKilcdTAwMjZ2YWxbMF0sICh1NjQgKilcdTAwMjZ2YWxbMV0sXG4mIzQzO1x0XHRcdFx0ICAgICAgICh1NjQgKilcdTAwMjZ2YWxbMl0sICh1NjQgKilcdTAwMjZ2YWxbM10sIE5VTEwpICE9IDE1KVxuJiM0MztcdFx0cmV0dXJuIDM7XG4mIzQzO1xuJiM0MztcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTtcbiYjNDM7I2VuZGlmXG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKVxuJiM0MztpbnQgYXJlbmFfYXJnX21peGVkKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MzsjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVClcbiYjNDM7XHR1NjQgX19hcmVuYSAqdmFsO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0dmFsWzBdID0gNztcbiYjNDM7XHR2YWxbMV0gPSA1O1xuJiM0MztcbiYjNDM7XHRpZiAoYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QoKHU2NCAqKVx1MDAyNnZhbFswXSwgTlVMTCkgIT0gNylcbiYjNDM7XHRcdHJldHVybiAyO1xuJiM0MztcbiYjNDM7XHRpZiAoYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QoKHU2NCAqKVx1MDAyNnZhbFswXSwgKHU2NCAqKVx1MDAyNnZhbFsxXSkgIT0gMTIpXG4mIzQzO1x0XHRyZXR1cm4gMztcbiYjNDM7XG4mIzQzO1x0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Lyoga2VybmVsLXNpZGUgZmF1bHRzIG9uIHVucG9wdWxhdGVkIHBhZ2VzIHJlY292ZXIgdmlhIHRoZSBzY3JhdGNoIHBhZ2UgKi9cbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fYXJjaF94ODZfNjRcbiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApXG4mIzQzO2ludCBhcmVuYV9hcmdfdW5wb3B1bGF0ZWQodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzOyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuJiM0MztcdHU2NCBfX2FyZW5hICp2YWw7XG4mIzQzO1xuJiM0MztcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbiYjNDM7XHRpZiAoIXZhbClcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcbiYjNDM7XHRzdGFzaCA9ICh1NjQpdmFsICYjNDM7IFBBR0VfU0laRTtcbiYjNDM7XHRicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoKHU2NCAqKXN0YXNoKTtcbiYjNDM7XG4mIzQzO1x0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fYXJjaF94ODZfNjRcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2FyZW5hIHBvaW50ZXIgcmVxdWlyZXMgYSBwcm9ncmFtIHdpdGggYW4gYXNzb2NpYXRlZCBhcmVuYVwmIzM0OylcbiYjNDM7aW50IGFyZW5hX2FyZ19ub19hcmVuYSh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoKHU2NCAqKTEpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7aXMgbm90IGEgcG9pbnRlciB0byBhcmVuYSBvciBzY2FsYXJcJiMzNDspXG4mIzQzO2ludCBhcmVuYV9hcmdfYmFkX3JlZyh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHR1NjQgYnVmID0gMDtcbiYjNDM7XG4mIzQzO1x0LyogdXNlIHRoZSBhcmVuYSBzbyB0aGUgcHJvZ3JhbSBwYXNzZXMgdGhlIGFyZW5hIHByZXNlbmNlIGNoZWNrICovXG4mIzQzO1x0YnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuJiM0MztcdGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdChcdTAwMjZidWYpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkgXHUwMDI2XHUwMDI2IFxcXG4mIzQzO1x0ZGVmaW5lZChfX0JQRl9GRUFUVVJFX1NUQUNLX0FSR1VNRU5UKVxuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7YXJlbmEgcG9pbnRlciBjYW5ub3QgYmUgYSBzdGFjayBhcmd1bWVudFwmIzM0OylcbiYjNDM7aW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4mIzQzO1x0YnBmX2tmdW5jX2FyZW5hX3N0YWNrX2FyZ190ZXN0KDEsIDIsIDMsIDQsIDUsICh1NjQgKikxKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX2Rlc2NyaXB0aW9uKFwmIzM0O2FyZW5hX2FyZ19zdGFjazogbm90IHN1cHBvcnRlZCwgZHVtbXkgdGVzdFwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO2ludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjg0NzQ3NjExNzI1ZjZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xuQEAgLTAsMCAmIzQzOzEsOTYgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVmVyaWZ5IHRoZSBKSVQtZW1pdHRlZCByZWJhc2Ugc2VxdWVuY2VzIGZvciBfX2FyZW5hIGFuZCBfX2FyZW5hX251bGxhYmxlXG4mIzQzOyAqIGtmdW5jIGFyZ3VtZW50cy4gVGhlIGNhcHR1cmUga2Z1bmNzIHRha2UgdGhlIGFyZ3VtZW50IHdpdGhvdXRcbiYjNDM7ICogZGVyZWZlcmVuY2luZyBpdCwgc28gdGhlc2UgdGVzdHMgcGluIG9ubHkgdGhlIGVtaXR0ZWQgY29kZS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgQlBGX05PX0tGVU5DX1BST1RPVFlQRVNcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX2V4cGVyaW1lbnRhbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZl9hcmVuYV9jb21tb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XG4mIzQzO1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpO1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4mIzQzO30gYXJlbmEgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbiYjNDM7XG4mIzQzOy8qIHZvbGF0aWxlIHRvIGZvcmNlIHRoZSBzY2FsYXIgcmVsb2FkcyBiZWxvdyAqL1xuJiM0Mzt2b2xhdGlsZSB1NjQgc3Rhc2g7XG4mIzQzO1xuJiM0MzsjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVClcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bW92bFx0JWVkaSwgJWVkaVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZHFcdCVyMTIsICVyZGlcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0Y2FsbHFcdHt7Lip9fVwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO2ludCBhcmVuYV9hcmdfaml0X3JlYmFzZSh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdGFzaCA9ICh1NjQpYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuJiM0MztcdGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCgodTY0ICopc3Rhc2gpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX2ppdGVkKFwmIzM0Oy4uLlwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG1vdmxcdCVlZGksICVlZGlcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHR0ZXN0bFx0JWVkaSwgJWVkaVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGplXHR7ey4qfX1cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRxXHQlcjEyLCAlcmRpXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7aW50IGFyZW5hX2FyZ19qaXRfbnVsbGFibGUodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3Rhc2ggPSAodTY0KWJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbiYjNDM7XHRicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoKHU2NCAqKXN0YXNoKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fYXJjaF94ODZfNjRcbiYjNDM7X19qaXRlZChcJiMzNDsuLi5cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRtb3ZsXHQlZWRpLCAlZWRpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkcVx0JXIxMiwgJXJkaVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG1vdmxcdCVlc2ksICVlc2lcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRxXHQlcjEyLCAlcnNpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bW92bFx0JWVkeCwgJWVkeFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZHFcdCVyMTIsICVyZHhcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRtb3ZsXHQlZWN4LCAlZWN4XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkcVx0JXIxMiwgJXJjeFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG1vdmxcdCVyOGQsICVyOGRcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHR0ZXN0bFx0JXI4ZCwgJXI4ZFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGplXHR7ey4qfX1cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRxXHQlcjEyLCAlcjhcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztpbnQgYXJlbmFfYXJnX2ppdF9hcmdzNSh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHR1NjQgX19hcmVuYSAqdmFsO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0dmFsWzBdID0gMTtcbiYjNDM7XHR2YWxbMV0gPSAyO1xuJiM0MztcdHZhbFsyXSA9IDQ7XG4mIzQzO1x0dmFsWzNdID0gODtcbiYjNDM7XHR2YWxbNF0gPSAxNjtcbiYjNDM7XG4mIzQzO1x0YnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QoKHU2NCAqKVx1MDAyNnZhbFswXSwgKHU2NCAqKVx1MDAyNnZhbFsxXSxcbiYjNDM7XHRcdFx0XHQgICAodTY0ICopXHUwMDI2dmFsWzJdLCAodTY0ICopXHUwMDI2dmFsWzNdLFxuJiM0MztcdFx0XHRcdCAgICh1NjQgKilcdTAwMjZ2YWxbNF0pO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QgKi9cbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iYTA0YzczZDhkOTY3XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jXG5AQCAtMCwwICYjNDM7MSwxMTUgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuJiM0MztcbiYjNDM7I2RlZmluZSBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFU1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX2V4cGVyaW1lbnRhbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZl9hcmVuYV9jb21tb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXCYjMzQ7XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiM0MztcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcbiYjNDM7XHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XG4mIzQzO1x0LyogcGFnZSAwIGhvc3RzIHRoZSBhcmVuYSBnbG9iYWxzLCBwYWdlIDEgaXMgZm9yIGFsbG9jYXRpb25zICovXG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAyKTtcbiYjNDM7fSBhcmVuYSBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7LyogYWxzbyBhc3NvY2lhdGVzIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgYXJlbmEgKi9cbiYjNDM7dTY0IF9fYXJlbmEgYXJlbmFfdG91Y2g7XG4mIzQzOy8qIHJhdyB2YWx1ZSBvZiB0aGUgbGFzdCBfX2FyZW5hIGN0eCBhcmd1bWVudCwgY2FwdHVyZWQgYnkgdGVzdF9hcmVuYV9jYiAqL1xuJiM0Mzt1NjQgX19hcmVuYSBjYl9wdHJfdmFsO1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N0cnVjdF9vcHMvdGVzdF9hcmVuYVwmIzM0OylcbiYjNDM7aW50IHRlc3RfYXJlbmFfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXG4mIzQzO3tcbiYjNDM7XHR1NjQgX19hcmVuYSAqcHRyID0gKHU2NCBfX2FyZW5hICopY3R4WzBdO1xuJiM0MztcbiYjNDM7XHRhcmVuYV90b3VjaCYjNDM7JiM0Mzs7XG4mIzQzO1x0Y2JfcHRyX3ZhbCA9IGN0eFswXTtcbiYjNDM7XHQqcHRyICYjNDM7PSAxO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3RydWN0X29wcy90ZXN0X2FyZW5hX251bGxhYmxlXCYjMzQ7KVxuJiM0MztpbnQgdGVzdF9hcmVuYV9udWxsYWJsZV9jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcbiYjNDM7e1xuJiM0MztcdHU2NCBfX2FyZW5hICpwdHIgPSAodTY0IF9fYXJlbmEgKiljdHhbMF07XG4mIzQzO1xuJiM0MztcdGFyZW5hX3RvdWNoJiM0MzsmIzQzOztcbiYjNDM7XHRpZiAoIXB0cilcbiYjNDM7XHRcdHJldHVybiAweGJlZTtcbiYjNDM7XHQqcHRyICYjNDM7PSAxO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3RydWN0X29wcy90ZXN0X2FyZW5hX3N0YWNrXCYjMzQ7KVxuJiM0MztpbnQgdGVzdF9hcmVuYV9zdGFja19jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcbiYjNDM7e1xuJiM0MztcdHU2NCBfX2FyZW5hICpwdHIgPSAodTY0IF9fYXJlbmEgKiljdHhbOF07XG4mIzQzO1xuJiM0MztcdGFyZW5hX3RvdWNoJiM0MzsmIzQzOztcbiYjNDM7XHQvKiBwaW4gdGhlIHNsb3QgbGF5b3V0OiB0aGUgbGVhZGluZyBhcmdzIGZpbGwgY3R4WzBdLi5jdHhbN10gKi9cbiYjNDM7XHRpZiAoY3R4WzBdICE9IDEgfHwgY3R4WzddICE9IDgpXG4mIzQzO1x0XHRyZXR1cm4gMHhiYWQ7XG4mIzQzO1x0KnB0ciAmIzQzOz0gMTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0Oy5zdHJ1Y3Rfb3BzLmxpbmtcJiMzNDspXG4mIzQzO3N0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHRlc3Rtb2RfYXJlbmEgPSB7XG4mIzQzO1x0LnRlc3RfYXJlbmEgPSAodm9pZCAqKXRlc3RfYXJlbmFfY2IsXG4mIzQzO1x0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSAodm9pZCAqKXRlc3RfYXJlbmFfbnVsbGFibGVfY2IsXG4mIzQzO1x0LnRlc3RfYXJlbmFfc3RhY2sgPSAodm9pZCAqKXRlc3RfYXJlbmFfc3RhY2tfY2IsXG4mIzQzO307XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7aW50IHRyaWdnZXIodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzOyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuJiM0MztcdHU2NCBfX2FyZW5hICp2YWw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuJiM0MztcdGlmICghdmFsKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdCp2YWwgPSA0MTtcbiYjNDM7XHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSgodTY0ICopdmFsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIDI7XG4mIzQzO1x0aWYgKCp2YWwgIT0gNDIpXG4mIzQzO1x0XHRyZXR1cm4gMztcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgY2FsbGJhY2sgbXVzdCBoYXZlIHNlZW4gZXhhY3RseSAodTMyKShrYWRkciAtIGtlcm5fdm1fc3RhcnQpLFxuJiM0MztcdCAqIHdoaWNoIGlzIHRoZSBhcmVuYSBvZmZzZXQgb2YgdmFsIHdpdGggdGhlIHVwcGVyIDMyIGJpdHMgY2xlYXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGNiX3B0cl92YWwgIT0gKHUzMikodTY0KXZhbClcbiYjNDM7XHRcdHJldHVybiA0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZSgodTY0ICopdmFsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIDU7XG4mIzQzO1x0aWYgKCp2YWwgIT0gNDMpXG4mIzQzO1x0XHRyZXR1cm4gNjtcbiYjNDM7XG4mIzQzO1x0LyogTlVMTCBzdXJ2aXZlcyB0aGUgbnVsbGFibGUga2Z1bmMgYW5kIHRoZSB0cmFtcG9saW5lIGFzIE5VTEwgKi9cbiYjNDM7XHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZShOVUxMKTtcbiYjNDM7XHRpZiAocmV0ICE9IDB4YmVlKVxuJiM0MztcdFx0cmV0dXJuIDc7XG4mIzQzO1xuJiM0MztcdC8qIHRoZSBhcmVuYSBwb2ludGVyIGlzIHN0YWNrLXBhc3NlZCBpbnRvIHRoZSB0cmFtcG9saW5lIGhlcmUgKi9cbiYjNDM7XHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaygodTY0ICopdmFsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIDg7XG4mIzQzO1x0aWYgKCp2YWwgIT0gNDQpXG4mIzQzO1x0XHRyZXR1cm4gOTtcbiYjNDM7XG4mIzQzO1x0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjFjMGVjNzI3ZDYzNzRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuY1xuQEAgLTAsMCAmIzQzOzEsMjAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0Oy4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFwmIzM0O1xuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjNDM7XG4mIzQzOy8qIE5vIGFyZW5hIGluIHRoZSBwcm9ncmFtOiBhdHRhY2hpbmcgdG8gdGVzdF9hcmVuYSBtdXN0IGJlIHJlamVjdGVkLiAqL1xuJiM0MztTRUMoXCYjMzQ7c3RydWN0X29wcy90ZXN0X2FyZW5hXCYjMzQ7KVxuJiM0MztpbnQgdGVzdF9hcmVuYV9ub19hcmVuYSh1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7LnN0cnVjdF9vcHMubGlua1wmIzM0OylcbiYjNDM7c3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYV9mYWlsID0ge1xuJiM0MztcdC50ZXN0X2FyZW5hID0gKHZvaWQgKil0ZXN0X2FyZW5hX25vX2FyZW5hLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG5pbmRleCBlYjBmOWI1ZTE4ZDg1Li5mZGVhYTU2MzU2YjUyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuQEAgLTIzNyw2ICYjNDM7MjM3LDU2IEBAIF9fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2NvbW1vbl90ZXN0KHZvaWQpXG4ge1xuIH1cbiBcbiYjNDM7X19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCh1NjQgKnZhbF9fYXJlbmEpXG4mIzQzO3tcbiYjNDM7XHR1NjQgb2xkO1xuJiM0MztcbiYjNDM7XHRvbGQgPSAqdmFsX19hcmVuYTtcbiYjNDM7XHQqdmFsX19hcmVuYSA9IG9sZCAmIzQzOyAxO1xuJiM0MztcdHJldHVybiBvbGQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QodTY0ICp2YWxfX2FyZW5hX251bGxhYmxlKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IG9sZDtcbiYjNDM7XG4mIzQzO1x0aWYgKCF2YWxfX2FyZW5hX251bGxhYmxlKVxuJiM0MztcdFx0cmV0dXJuIDB4ZGVhZGJlZWY7XG4mIzQzO1xuJiM0MztcdG9sZCA9ICp2YWxfX2FyZW5hX251bGxhYmxlO1xuJiM0MztcdCp2YWxfX2FyZW5hX251bGxhYmxlID0gb2xkICYjNDM7IDE7XG4mIzQzO1x0cmV0dXJuIG9sZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCh1NjQgKnZhbF9fYXJlbmEpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHU2NCl2YWxfX2FyZW5hO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KHU2NCAqdmFsX19hcmVuYV9udWxsYWJsZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAodTY0KXZhbF9fYXJlbmFfbnVsbGFibGU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdCh1NjQgKmFfX2FyZW5hLCB1NjQgKmJfX2FyZW5hLFxuJiM0MztcdFx0XHRcdFx0ICAgdTY0ICpjX19hcmVuYSwgdTY0ICpkX19hcmVuYSxcbiYjNDM7XHRcdFx0XHRcdCAgIHU2NCAqZV9fYXJlbmFfbnVsbGFibGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKmFfX2FyZW5hICYjNDM7ICpiX19hcmVuYSAmIzQzOyAqY19fYXJlbmEgJiM0MzsgKmRfX2FyZW5hICYjNDM7XG4mIzQzO1x0ICAgICAgIChlX19hcmVuYV9udWxsYWJsZSA/ICplX19hcmVuYV9udWxsYWJsZSA6IDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX3N0YWNrX2FyZ190ZXN0KHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLCB1NjQgZSxcbiYjNDM7XHRcdFx0XHRcdFx0dTY0ICpmX19hcmVuYSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBhICYjNDM7IGIgJiM0MzsgYyAmIzQzOyBkICYjNDM7IGUgJiM0MzsgKmZfX2FyZW5hO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QodTY0ICphX19hcmVuYSwgdTY0ICpiX19hcmVuYV9udWxsYWJsZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAqYV9fYXJlbmEgJiM0MzsgKGJfX2FyZW5hX251bGxhYmxlID8gKmJfX2FyZW5hX251bGxhYmxlIDogMCk7XG4mIzQzO31cbiYjNDM7XG4gX19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfZHlucHRyX3Rlc3Qoc3RydWN0IGJwZl9keW5wdHIgKnB0cixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2R5bnB0ciAqcHRyX19udWxsYWJsZSlcbiB7XG5AQCAtMzQ3LDkgJiM0MzszOTcsMjkgQEAgc3RhdGljIGludCBicGZfdGVzdG1vZF90ZXN0XzQodm9pZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hKHU2NCAqcHRyX19hcmVuYSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbnVsbGFibGUodTY0ICpwdHJfX2FyZW5hX251bGxhYmxlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9zdGFjayh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHU2NCBlLCB1NjQgZiwgdTY0IGcsIHU2NCBoLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgdTY0ICpwdHJfX2FyZW5hKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIF9fYnBmX3Rlc3Rtb2Rfb3BzMyA9IHtcbiBcdC50ZXN0XzEgPSBicGZfdGVzdG1vZF90ZXN0XzMsXG4gXHQudGVzdF8yID0gYnBmX3Rlc3Rtb2RfdGVzdF80LFxuJiM0MztcdC50ZXN0X2FyZW5hID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYSxcbiYjNDM7XHQudGVzdF9hcmVuYV9udWxsYWJsZSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbnVsbGFibGUsXG4mIzQzO1x0LnRlc3RfYXJlbmFfc3RhY2sgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrLFxuIH07XG4gXG4gc3RhdGljIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3Rfb3BzMyh2b2lkKVxuQEAgLTM2OCw2ICYjNDM7NDM4LDIxIEBAIF9fYnBmX2tmdW5jIHZvaWQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMih2b2lkKVxuIFx0c3Rfb3BzMy1cdTAwM2V0ZXN0XzIoKTtcbiB9XG4gXG4mIzQzO19fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSh1NjQgKnB0cl9fYXJlbmEpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gc3Rfb3BzMy1cdTAwM2V0ZXN0X2FyZW5hKHB0cl9fYXJlbmEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUodTY0ICpwdHJfX2FyZW5hX251bGxhYmxlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHN0X29wczMtXHUwMDNldGVzdF9hcmVuYV9udWxsYWJsZShwdHJfX2FyZW5hX251bGxhYmxlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKHU2NCAqcHRyX19hcmVuYSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzdF9vcHMzLVx1MDAzZXRlc3RfYXJlbmFfc3RhY2soMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgcHRyX19hcmVuYSk7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IGJwZl90ZXN0bW9kX2J0Zl90eXBlX3RhZ18xIHtcbiBcdGludCBhO1xuIH07XG5AQCAtNzU1LDYgJiM0Mzs4NDAsMTMgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxX25leHQsIEtGX0lURVJfTkVYVCB8IEtGX1JFVF9OVUxMKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl90ZXN0bW9kX3NlcV9kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxX3ZhbHVlKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY29tbW9uX3Rlc3QpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdClcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19hcmVuYV9zdGFja19hcmdfdGVzdClcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19hcmVuYV9taXhlZF90ZXN0KVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X21lbV9sZW5fcGFzczEpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19keW5wdHJfdGVzdClcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX25lc3RlZF9hY3F1aXJlX25vbnplcm9fb2Zmc2V0X3Rlc3QsIEtGX0FDUVVJUkUpXG5AQCAtNzcwLDYgJiM0Mzs4NjIsOSBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2RfY3R4X2NyZWF0ZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9jdHhfcmVsZWFzZSwgS0ZfUkVMRUFTRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMilcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKVxuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaylcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2dldF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7XG4gQlRGX0tGVU5DU19FTkQoYnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX2lkcylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFxuaW5kZXggODYzZmQxMGYxNjE5OS4uMzNmMmFmNWI3MDg1NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbkBAIC0xMDYsNiAmIzQzOzEwNiwxMiBAQCBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMiB7XG4gc3RydWN0IGJwZl90ZXN0bW9kX29wczMge1xuIFx0aW50ICgqdGVzdF8xKSh2b2lkKTtcbiBcdGludCAoKnRlc3RfMikodm9pZCk7XG4mIzQzO1x0LyogVXNlZCB0byB0ZXN0IGFyZW5hIHBvaW50ZXIgYXJndW1lbnRzLiAqL1xuJiM0MztcdGludCAoKnRlc3RfYXJlbmEpKHU2NCAqcHRyKTtcbiYjNDM7XHRpbnQgKCp0ZXN0X2FyZW5hX251bGxhYmxlKSh1NjQgKnB0cik7XG4mIzQzO1x0LyogZW5vdWdoIGxlYWRpbmcgYXJncyB0byBmb3JjZSBAcHRyIG9udG8gdGhlIHN0YWNrIG9uIHg4NiBhbmQgYXJtNjQgKi9cbiYjNDM7XHRpbnQgKCp0ZXN0X2FyZW5hX3N0YWNrKSh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCwgdTY0IGUsIHU2NCBmLFxuJiM0MztcdFx0XHRcdHU2NCBnLCB1NjQgaCwgdTY0ICpwdHIpO1xuIH07XG4gXG4gc3RydWN0IHN0X29wc19hcmdzIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxuaW5kZXggYzM2YmI5MTFkZWZhNy4uMWE3MmQwZmRhNTNjNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcbkBAIC05OCw2ICYjNDM7OTgsMTYgQEAgdm9pZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JlbGVhc2Uoc3RydWN0IHByb2dfdGVzdF9yZWZfa2Z1bmMgKnApIF9fa3N5bTtcbiB2b2lkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmVmKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwKSBfX2tzeW07XG4gXG4gdm9pZCBicGZfa2Z1bmNfY2FsbF90ZXN0X21lbV9sZW5fcGFzczEodm9pZCAqbWVtLCBpbnQgbGVuKSBfX2tzeW07XG4mIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdChfX3U2NCAqdmFsX19hcmVuYSkgX19rc3ltO1xuJiM0MztfX3U2NCBicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QoX191NjQgKnZhbF9fYXJlbmFfbnVsbGFibGUpIF9fa3N5bTtcbiYjNDM7X191NjQgYnBmX2tmdW5jX2FyZW5hX2NhcF90ZXN0KF9fdTY0ICp2YWxfX2FyZW5hKSBfX2tzeW07XG4mIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdChfX3U2NCAqdmFsX19hcmVuYV9udWxsYWJsZSkgX19rc3ltO1xuJiM0MztfX3U2NCBicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdChfX3U2NCAqYV9fYXJlbmEsIF9fdTY0ICpiX19hcmVuYSxcbiYjNDM7XHRcdFx0XHQgX191NjQgKmNfX2FyZW5hLCBfX3U2NCAqZF9fYXJlbmEsXG4mIzQzO1x0XHRcdFx0IF9fdTY0ICplX19hcmVuYV9udWxsYWJsZSkgX19rc3ltO1xuJiM0MztfX3U2NCBicGZfa2Z1bmNfYXJlbmFfc3RhY2tfYXJnX3Rlc3QoX191NjQgYSwgX191NjQgYiwgX191NjQgYywgX191NjQgZCwgX191NjQgZSxcbiYjNDM7XHRcdFx0XHQgICAgIF9fdTY0ICpmX19hcmVuYSkgX19rc3ltO1xuJiM0MztfX3U2NCBicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdChfX3U2NCAqYV9fYXJlbmEsIF9fdTY0ICpiX19hcmVuYV9udWxsYWJsZSkgX19rc3ltO1xuIGludCAqYnBmX2tmdW5jX2NhbGxfdGVzdF9nZXRfcmR3cl9tZW0oc3RydWN0IHByb2dfdGVzdF9yZWZfa2Z1bmMgKnAsIGNvbnN0IGludCByZHdyX2J1Zl9zaXplKSBfX2tzeW07XG4gaW50ICpicGZfa2Z1bmNfY2FsbF90ZXN0X2dldF9yZG9ubHlfbWVtKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwLCBjb25zdCBpbnQgcmRvbmx5X2J1Zl9zaXplKSBfX2tzeW07XG4gaW50ICpicGZfa2Z1bmNfY2FsbF90ZXN0X2FjcV9yZG9ubHlfbWVtKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwLCBjb25zdCBpbnQgcmRvbmx5X2J1Zl9zaXplKSBfX2tzeW07XG5AQCAtMTExLDYgJiM0MzsxMjEsOSBAQCB1MzIgYnBmX2tmdW5jX2NhbGxfdGVzdF9zdGF0aWNfdW51c2VkX2FyZyh1MzIgYXJnLCB1MzIgdW51c2VkKSBfX2tzeW07XG4gI2VuZGlmXG4gXG4gdm9pZCBicGZfdGVzdG1vZF90ZXN0X21vZF9rZnVuYyhpbnQgaSkgX19rc3ltO1xuJiM0MztpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEoX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTtcbiYjNDM7aW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKF9fdTY0ICpwdHJfX2FyZW5hX251bGxhYmxlKSBfX2tzeW07XG4mIzQzO2ludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayhfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltO1xuIFxuIF9fdTY0IGJwZl9rZnVuY19jYWxsX3Rlc3QxKHN0cnVjdCBzb2NrICpzaywgX191MzIgYSwgX191NjQgYixcbiBcdFx0XHRcdF9fdTMyIGMsIF9fdTY0IGQpIF9fa3N5bTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3MmIzM0OywKICAgICYjMzQ7YnRmX2Rpc3RpbGxfZnVuY19wcm90byYjMzQ7LAogICAgJiMzNDtidGZfY3R4X2FjY2VzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBfX2FyZW5hYCBhbmQgYF9fYXJlbmFfbnVsbGFibGVgIGFubm90YXRpb25zIGZvciBCUEYga2Z1bmNzIGFuZCBzdHJ1Y3Rfb3BzIGFyZ3VtZW50cy4gSXQgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciwgSklUIGNvbXBpbGVyICh4ODYpLCBhbmQgdHJhbXBvbGluZSBsb2dpYyB0byBzdXBwb3J0IGFyZW5hIHBvaW50ZXJzLCBpbmNsdWRpbmcgcmViYXNpbmcgdGhlbSB0byBrZXJuZWwgYWRkcmVzc2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbWVtb3J5IHNhZmV0eSBhbmQgY29ycmVjdCB2ZXJpZmljYXRpb24gb2YgYXJlbmEgcG9pbnRlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwMGFmYzY3NDZkYTBlYzkwMmJlYjY2MzY3YzQ1NzAxZmQwNjU4YjEwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMyAxNjoxMzowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0CmluZGV4IGNiZGU4NmQwODJjY2UuLjQ4Y2Y3NDZmOWZmOWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdApAQCAtMjc4LDYgJiM0MzsyNzgsNDMgQEAgQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6CiAgICAgICAgICAgICAgICAgLi4uCiAgICAgICAgIH0KIAomIzQzOzIuMy44IF9fYXJlbmEgYW5kIF9fYXJlbmFfbnVsbGFibGUgQW5ub3RhdGlvbnMKJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7CiYjNDM7Qm90aCBhbm5vdGF0aW9ucyBpbmRpY2F0ZSB0aGF0IHRoZSBwb2ludGVyIGFyZ3VtZW50IHBvaW50cyBpbnRvIHRoZQomIzQzO2NhbGxpbmcgcHJvZ3JhbSYjMzk7cyBhcmVuYS4gVGhlIEpJVCByZWJhc2VzIHRoZSB2YWx1ZSBhdCB0aGUgY2FsbCBzaXRlIHNvCiYjNDM7dGhlIGtmdW5jIHJlY2VpdmVzIGEgZGlyZWN0bHkgZGVyZWZlcmVuY2VhYmxlIGtlcm5lbCBhZGRyZXNzLCBzdWJqZWN0IHRvCiYjNDM7dGhlIGFjY2VzcyBydWxlcyBkZXNjcmliZWQgaW4gOnJlZjpgQlBGX2tmdW5jX2FyZW5hX2FjY2Vzc2AgKGF0IG1vc3QKJiM0MztgYEdVQVJEX1NaIC8gMmBgLCAzMiBLaUIsIHBhc3QgdGhlIHBvaW50ZXIgaW4gYSBzaW5nbGUgdW5jaGVja2VkIGFjY2VzcykuCiYjNDM7CiYjNDM7V2l0aCBgYF9fYXJlbmFgYCB0aGUgcmViYXNlIGlzIHVuY29uZGl0aW9uYWwgYW5kIHRoZSBhcmd1bWVudCBpcyBuZXZlcgomIzQzO05VTEw6IGEgdmFsdWUgd2hvc2UgbG93ZXIgMzIgYml0cyBhcmUgemVybyBhcnJpdmVzIGFzIHRoZSBhcmVuYSBiYXNlCiYjNDM7YWRkcmVzcyAoYXJlbmEgb2Zmc2V0IDApLiBUaGUga2Z1bmMgbXVzdCBub3QgY2hlY2sgdGhlIGFyZ3VtZW50IGZvciBOVUxMLgomIzQzO1dpdGggYGBfX2FyZW5hX251bGxhYmxlYGAgc3VjaCBhIHZhbHVlIGFycml2ZXMgYXMgTlVMTCBpbnN0ZWFkIGFuZCB0aGUKJiM0MztrZnVuYyBtdXN0IGNoZWNrIGJlZm9yZSBkZXJlZmVyZW5jaW5nLgomIzQzOwomIzQzO0FuIGV4YW1wbGUgaXMgZ2l2ZW4gYmVsb3c6OgomIzQzOwomIzQzOyAgICAgICAgX19icGZfa2Z1bmMgaW50IGJwZl9wcm9jZXNzX2l0ZW0oc3RydWN0IGl0ZW0gKml0ZW1fX2FyZW5hKQomIzQzOyAgICAgICAgewomIzQzOyAgICAgICAgLi4uCiYjNDM7ICAgICAgICB9CiYjNDM7CiYjNDM7Q2FsbGluZyBzdWNoIGEga2Z1bmMgcmVxdWlyZXMgdGhlIHByb2dyYW0gdG8gdXNlIGFuIGFyZW5hIG1hcCBhbmQgYSBKSVQgd2l0aAomIzQzO2FyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQpOyB2ZXJpZmljYXRpb24gZmFpbHMgb3RoZXJ3aXNlLiBUaGUKJiM0Mztwcm9ncmFtIGNhbiBwYXNzIGFueSB2YWx1ZSB3aXRob3V0IGNvbXByb21pc2luZyB0aGUga2VybmVsLiBBIHZhbHVlIHRoYXQgZG9lcwomIzQzO25vdCBwb2ludCBpbnRvIHRoZSBhcmVuYSBpcyBhIHByb2dyYW0gYnVnLgomIzQzOwomIzQzO1RoZSBzdWZmaXhlcyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgb24gdGhlIGFyZ3VtZW50cyBvZiBzdHJ1Y3Rfb3BzIHN0dWIKJiM0MztmdW5jdGlvbnMsIHdpdGggdGhlIGNvbnZlcnNpb24gcnVubmluZyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLiBUaGUKJiM0MztrZXJuZWwgY2FsbGVyIHBhc3NlcyB0aGUga2VybmVsIGFyZW5hIGFkZHJlc3MgYW5kIHRoZSB0cmFtcG9saW5lIGNvbnZlcnRzCiYjNDM7aXQgd2hpbGUgc2F2aW5nIHRoZSBhcmd1bWVudHMsIHNvIHRoZSBjYWxsYmFjayByZWNlaXZlcyBhbiBhcmVuYSBwb2ludGVyCiYjNDM7aXQgY2FuIGRlcmVmZXJlbmNlIGRpcmVjdGx5LiBXaXRoIGBgX19hcmVuYWBgIHRoZSBrZXJuZWwgY2FsbGVyIG11c3Qgbm90CiYjNDM7cGFzcyBOVUxMLiBXaXRoIGBgX19hcmVuYV9udWxsYWJsZWBgIGEgTlVMTCBrZXJuZWwgcG9pbnRlciBhcnJpdmVzIGFzIE5VTEwuCiYjNDM7SG93ZXZlciwgdGhlcmUgaXMgbm8gb2JsaWdhdGlvbiB0byBwcm92ZSB0byB0aGUgdmVyaWZpZXIgdGhhdCBzdWNoIGEgcG9pbnRlciBpcwomIzQzO25vbi1OVUxMIGJlZm9yZSB1c2UsIGluLWxpbmUgd2l0aCBleGlzdGluZyBzZW1hbnRpY3Mgb2YgYXJlbmEgcG9pbnRlcnMgdXNlZCBpbgomIzQzO2EgcHJvZ3JhbSAob3Igb2J0YWluZWQgZnJvbSBhbnkgb3RoZXIgc291cmNlKS4KJiM0MzsKIC4uIF9CUEZfa2Z1bmNfbm9kZWY6CiAKIDIuNCBVc2luZyBhbiBleGlzdGluZyBrZXJuZWwgZnVuY3Rpb24KQEAgLTUxNSw2ICYjNDM7NTUyLDggQEAgSW4gb3JkZXIgdG8gYWNjb21tb2RhdGUgc3VjaCByZXF1aXJlbWVudHMsIHRoZSB2ZXJpZmllciB3aWxsIGVuZm9yY2Ugc3RyaWN0CiBQVFJfVE9fQlRGX0lEIHR5cGUgbWF0Y2hpbmcgaWYgdHdvIHR5cGVzIGhhdmUgdGhlIGV4YWN0IHNhbWUgbmFtZSwgd2l0aCBvbmUKIGJlaW5nIHN1ZmZpeGVkIHdpdGggYGBfX19pbml0YGAuCiAKJiM0MzsuLiBfQlBGX2tmdW5jX2FyZW5hX2FjY2VzczoKJiM0MzsKIDIuOCBBY2Nlc3NpbmcgYXJlbmEgbWVtb3J5IHRocm91Z2gga2Z1bmMgYXJndW1lbnRzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKaW5kZXggMDFlN2NlNTY5YzFlZC4uNGIzZTVkOGE0YTU2MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwpAQCAtMTY3OCw2ICYjNDM7MTY3OCw1MCBAQCBzdGF0aWMgaW50IGVtaXRfc3BlY3RyZV9iaGJfYmFycmllcih1OCAqKnBwcm9nLCB1OCAqaXAsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJlYmFzZSB0aGUgX19hcmVuYSBhcmdzIG9mIGEga2Z1bmMgY2FsbCB0byBhcmVuYSBrZXJuZWwgYWRkcmVzc2VzLAomIzQzOyAqIHJOID0ga2Vybl92bV9zdGFydCAmIzQzOyAodTMyKXJOLCB3aXRoIFIxMiBob2xkaW5nIGtlcm5fdm1fc3RhcnQuIEEgbnVsbGFibGUKJiM0MzsgKiBhcmcgcHJlc2VydmVzIE5VTEwgYnkgc2tpcHBpbmcgdGhlIGFkZCwgdGVzdGVkIG9uIHRoZSB0cnVuY2F0ZWQgdmFsdWUgYXMKJiM0MzsgKiBhcmVuYSBOVUxMIGlzIG9mZnNldCAwLiBSZXR1cm4gdGhlIG51bWJlciBvZiBlbWl0dGVkIGJ5dGVzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZW1pdF9rZnVuY19hcmVuYV9hcmdzKHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csCiYjNDM7CQkJCSBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHU4ICoqcHByb2cpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKmZtOwomIzQzOwl1OCAqcHJvZyA9ICpwcHJvZzsKJiM0MzsJdTggKnN0YXJ0ID0gcHJvZzsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZtID0gYnBmX2ppdF9maW5kX2tmdW5jX21vZGVsKGJwZl9wcm9nLCBpbnNuKTsKJiM0MzsJaWYgKCFmbSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbWluX3QoaW50LCBmbS0mZ3Q7bnJfYXJncywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXU4IGZsYWdzID0gZm0tJmd0O2FyZ19mbGFnc1tpXTsKJiM0MzsJCXUzMiByZWcgPSBCUEZfUkVHXzEgJiM0MzsgaTsKJiM0MzsKJiM0MzsJCWlmICghKGZsYWdzICZhbXA7IEJURl9GTU9ERUxfQVJFTkFfQVJHKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChXQVJOX09OX09OQ0UoIWJwZl9wcm9nLSZndDthdXgtJmd0O2FyZW5hKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCS8qIG1vdiBlTiwgZU46IHRydW5jYXRlIGFuZCBjbGVhciB0aGUgdXBwZXIgMzIgYml0cyAqLwomIzQzOwkJZW1pdF9tb3ZfcmVnKCZhbXA7cHJvZywgZmFsc2UsIHJlZywgcmVnKTsKJiM0MzsJCWlmIChmbGFncyAmYW1wOyBCVEZfRk1PREVMX05VTExBQkxFX0FSRykgewomIzQzOwkJCS8qIHRlc3QgZU4sIGVOOyBqeiBvdmVyIHRoZSAzLWJ5dGUgYWRkICovCiYjNDM7CQkJbWF5YmVfZW1pdF9tb2QoJmFtcDtwcm9nLCByZWcsIHJlZywgZmFsc2UpOwomIzQzOwkJCUVNSVQyKDB4ODUsIGFkZF8ycmVnKDB4QzAsIHJlZywgcmVnKSk7CiYjNDM7CQkJRU1JVDIoWDg2X0pFLCAzKTsKJiM0MzsJCX0KJiM0MzsJCS8qIGFkZCByTiwgcjEyICovCiYjNDM7CQltYXliZV9lbWl0X21vZCgmYW1wO3Byb2csIHJlZywgWDg2X1JFR19SMTIsIHRydWUpOwomIzQzOwkJRU1JVDIoMHgwMSwgYWRkXzJyZWcoMHhDMCwgcmVnLCBYODZfUkVHX1IxMikpOwomIzQzOwl9CiYjNDM7CiYjNDM7CSpwcHJvZyA9IHByb2c7CiYjNDM7CXJldHVybiBwcm9nIC0gc3RhcnQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLAogCQkgIHU4ICpyd19pbWFnZSwgaW50IG9sZHByb2dsZW4sIHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LCBib29sIGptcF9wYWRkaW5nKQogewpAQCAtMjU4Myw2ICYjNDM7MjYyNywxMiBAQCBzdDoJCQlpbnNuX29mZiA9IGluc24tJmd0O29mZjsKIAkJCX0KIAkJCWlmICghaW1tMzIpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJaWYgKHNyY19yZWcgPT0gQlBGX1BTRVVET19LRlVOQ19DQUxMKSB7CiYjNDM7CQkJCWVyciA9IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhicGZfcHJvZywgaW5zbiwgJmFtcDtwcm9nKTsKJiM0MzsJCQkJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQkJCQlyZXR1cm4gZXJyOwomIzQzOwkJCQlpcCAmIzQzOz0gZXJyOwomIzQzOwkJCX0KIAkJCWlmIChwcml2X2ZyYW1lX3B0cikgewogCQkJCXB1c2hfcjkoJmFtcDtwcm9nKTsKIAkJCQlpcCAmIzQzOz0gMjsKQEAgLTI5OTMsMTIgJiM0MzszMDQzLDQwIEBAIHN0YXRpYyBpbnQgZ2V0X25yX3VzZWRfcmVncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0pCiAJcmV0dXJuIG5yX3VzZWRfcmVnczsKIH0KIAomIzQzOy8qCiYjNDM7ICogQ29udmVydCBhbiBhcmVuYSBrZXJuZWwgYWRkcmVzcyBpbnRvIHRoZSBhcmVuYSBwb2ludGVyIGZvcm0gb24gaXRzIHdheQomIzQzOyAqIGludG8gdGhlIEJQRiBjdHgsIHJheCA9ICh1MzIpKHNyYyAtIGtlcm5fdm1fc3RhcnQpLiBBIG51bGxhYmxlIGFyZwomIzQzOyAqIHByZXNlcnZlcyBOVUxMLCB0ZXN0ZWQgb24gdGhlIGZ1bGwgNjQtYml0IGtlcm5lbCBwb2ludGVyLiBUaGUgMzItYml0CiYjNDM7ICogc3VidHJhY3Rpb24gYm90aCB0cnVuY2F0ZXMgYW5kIGNsZWFycyB0aGUgdXBwZXIgaGFsZiwgc28gdGhlIHN0b3JlZAomIzQzOyAqIHZhbHVlIHNhdGlzZmllcyB0aGUgSklUIGludmFyaWFudCBmb3IgYXJlbmEgcG9pbnRlciByZWdpc3RlcnMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hcmVuYV9hcmdfY29udih1OCAqKnBwcm9nLCB1MzIgc3JjX3JlZywgYm9vbCBudWxsYWJsZSwgdTMyIGJhc2VfbG8pCiYjNDM7ewomIzQzOwl1OCAqcHJvZyA9ICpwcHJvZzsKJiM0MzsKJiM0MzsJaWYgKG51bGxhYmxlKSB7CiYjNDM7CQlpZiAoc3JjX3JlZyAhPSBCUEZfUkVHXzApCiYjNDM7CQkJZW1pdF9tb3ZfcmVnKCZhbXA7cHJvZywgdHJ1ZSwgQlBGX1JFR18wLCBzcmNfcmVnKTsKJiM0MzsJCS8qIHRlc3QgcmF4LCByYXg7IGp6IG92ZXIgdGhlIDUtYnl0ZSBzdWIgKi8KJiM0MzsJCUVNSVQzKDB4NDgsIDB4ODUsIDB4QzApOwomIzQzOwkJRU1JVDIoWDg2X0pFLCA1KTsKJiM0MzsJfSBlbHNlIGlmIChzcmNfcmVnICE9IEJQRl9SRUdfMCkgewomIzQzOwkJZW1pdF9tb3ZfcmVnKCZhbXA7cHJvZywgZmFsc2UsIEJQRl9SRUdfMCwgc3JjX3JlZyk7CiYjNDM7CX0KJiM0MzsJLyogc3ViIGVheCwgYmFzZV9sbyAqLwomIzQzOwlFTUlUMV9vZmYzMigweDJELCBiYXNlX2xvKTsKJiM0MzsKJiM0MzsJKnBwcm9nID0gcHJvZzsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBzYXZlX2FyZ3MoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1OCAqKnByb2csCi0JCSAgICAgIGludCBzdGFja19zaXplLCBib29sIGZvcl9jYWxsX29yaWdpbiwgdTMyIGZsYWdzKQomIzQzOwkJICAgICAgaW50IHN0YWNrX3NpemUsIGJvb2wgZm9yX2NhbGxfb3JpZ2luLCB1MzIgZmxhZ3MsCiYjNDM7CQkgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wX2FyZW5hX2FyZ3MgKmFhcmdzKQogewogCWludCBhcmdfcmVncywgZmlyc3Rfb2ZmID0gMCwgbnJfcmVncyA9IDAsIG5yX3N0YWNrX3Nsb3RzID0gMDsKIAlib29sIHVzZV9qbXAgPSBicGZfdHJhbXBvbGluZV91c2Vfam1wKGZsYWdzKTsKLQlpbnQgaSwgajsKJiM0MzsJaW50IHN0YWNrX2FyZ3Nfb2ZmID0gKHVzZV9qbXAgfHwgKGZsYWdzICZhbXA7IEJQRl9UUkFNUF9GX0lORElSRUNUKSkgPyAxNiA6IDI0OwomIzQzOwlpbnQgaSwgaiwgc2xvdCA9IDA7CiAKIAkvKiBTdG9yZSBmdW5jdGlvbiBhcmd1bWVudHMgdG8gc3RhY2suCiAJICogRm9yIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHR3byBwb2ludGVycyB0aGUgc2VxdWVuY2Ugd2lsbCBiZToKQEAgLTMwMjksMTYgJiM0MzszMTA3LDIwIEBAIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZywKIAkJCS8qIGNvcHkgZnVuY3Rpb24gYXJndW1lbnRzIGZyb20gb3JpZ2luIHN0YWNrIGZyYW1lCiAJCQkgKiBpbnRvIGN1cnJlbnQgc3RhY2sgZnJhbWUuCiAJCQkgKgotCQkJICogVGhlIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlIGFyZ3VtZW50cyBvbi1zdGFjawotCQkJICogaXM6Ci0JCQkgKiAgIHJicCAmIzQzOyA4KHB1c2ggcmJwKSAmIzQzOwotCQkJICogICA4KHJldHVybiBhZGRyIG9mIG9yaWdpbiBjYWxsKSAmIzQzOwotCQkJICogICA4KHJldHVybiBhZGRyIG9mIHRoZSBjYWxsZXIpCi0JCQkgKiB3aGljaCBtZWFuczogcmJwICYjNDM7IDI0CiYjNDM7CQkJICogVGhlIGFyZ3VtZW50cyBvbi1zdGFjayBzdGFydCBhYm92ZSB0aGUgc2F2ZWQgcmJwCiYjNDM7CQkJICogYW5kIHRoZSByZXR1cm4gYWRkcmVzc2VzOiB0d28gcmV0dXJuIGFkZHJlc3NlcwomIzQzOwkJCSAqIChvcmlnaW4gY2FsbCBhbmQgY2FsbGVyKSB3aGVuIHRoZSB0cmFtcG9saW5lIGlzCiYjNDM7CQkJICogZW50ZXJlZCB0aHJvdWdoIHRoZSBmZW50cnkgY2FsbCwgc28gcmJwICYjNDM7IDI0LCBhbmQKJiM0MzsJCQkgKiBhIHNpbmdsZSBvbmUgd2hlbiBpdCBpcyBlbnRlcmVkIHdpdGggYSBqbXAgb3IKJiM0MzsJCQkgKiBjYWxsZWQgaW5kaXJlY3RseSwgc28gcmJwICYjNDM7IDE2LgogCQkJICovCiAJCQlmb3IgKGogPSAwOyBqICZsdDsgYXJnX3JlZ3M7IGomIzQzOyYjNDM7KSB7CiAJCQkJZW1pdF9sZHgocHJvZywgQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfRlAsCi0JCQkJCSBucl9zdGFja19zbG90cyAqIDggJiM0MzsgMTYgJiM0MzsgKCF1c2Vfam1wKSAqIDgpOwomIzQzOwkJCQkJIG5yX3N0YWNrX3Nsb3RzICogOCAmIzQzOyBzdGFja19hcmdzX29mZik7CiYjNDM7CQkJCWlmIChhYXJncyAmYW1wOyZhbXA7IChhYXJncy0mZ3Q7c2xvdHMgJmFtcDsgQklUKHNsb3QpKSkKJiM0MzsJCQkJCWVtaXRfYXJlbmFfYXJnX2NvbnYocHJvZywgQlBGX1JFR18wLAomIzQzOwkJCQkJCQkgICAgYWFyZ3MtJmd0O251bGxhYmxlX3Nsb3RzICZhbXA7IEJJVChzbG90KSwKJiM0MzsJCQkJCQkJICAgICh1MzIpYWFyZ3MtJmd0O2tlcm5fdm1fc3RhcnQpOwogCQkJCWVtaXRfc3R4KHByb2csIEJQRl9EVywgQlBGX1JFR19GUCwgQlBGX1JFR18wLAogCQkJCQkgLXN0YWNrX3NpemUpOwogCkBAIC0zMDQ2LDYgJiM0MzszMTI4LDcgQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcm9nLAogCQkJCQlmaXJzdF9vZmYgPSBzdGFja19zaXplOwogCQkJCXN0YWNrX3NpemUgLT0gODsKIAkJCQlucl9zdGFja19zbG90cyYjNDM7JiM0Mzs7CiYjNDM7CQkJCXNsb3QmIzQzOyYjNDM7OwogCQkJfQogCQl9IGVsc2UgewogCQkJLyogT25seSBjb3B5IHRoZSBhcmd1bWVudHMgb24tc3RhY2sgdG8gY3VycmVudApAQCAtMzA1NCwxNiAmIzQzOzMxMzcsMjQgQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcm9nLAogCQkJICovCiAJCQlpZiAoZm9yX2NhbGxfb3JpZ2luKSB7CiAJCQkJbnJfcmVncyAmIzQzOz0gYXJnX3JlZ3M7CiYjNDM7CQkJCXNsb3QgJiM0Mzs9IGFyZ19yZWdzOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCiAJCQkvKiBjb3B5IHRoZSBhcmd1bWVudHMgZnJvbSByZWdzIGludG8gc3RhY2sgKi8KIAkJCWZvciAoaiA9IDA7IGogJmx0OyBhcmdfcmVnczsgaiYjNDM7JiM0MzspIHsKLQkJCQllbWl0X3N0eChwcm9nLCBCUEZfRFcsIEJQRl9SRUdfRlAsCi0JCQkJCSBucl9yZWdzID09IDUgPyBYODZfUkVHX1I5IDogQlBGX1JFR18xICYjNDM7IG5yX3JlZ3MsCi0JCQkJCSAtc3RhY2tfc2l6ZSk7CiYjNDM7CQkJCXUzMiBzcmMgPSBucl9yZWdzID09IDUgPyBYODZfUkVHX1I5IDogQlBGX1JFR18xICYjNDM7IG5yX3JlZ3M7CiYjNDM7CiYjNDM7CQkJCWlmIChhYXJncyAmYW1wOyZhbXA7IChhYXJncy0mZ3Q7c2xvdHMgJmFtcDsgQklUKHNsb3QpKSkgewomIzQzOwkJCQkJZW1pdF9hcmVuYV9hcmdfY29udihwcm9nLCBzcmMsCiYjNDM7CQkJCQkJCSAgICBhYXJncy0mZ3Q7bnVsbGFibGVfc2xvdHMgJmFtcDsgQklUKHNsb3QpLAomIzQzOwkJCQkJCQkgICAgKHUzMilhYXJncy0mZ3Q7a2Vybl92bV9zdGFydCk7CiYjNDM7CQkJCQlzcmMgPSBCUEZfUkVHXzA7CiYjNDM7CQkJCX0KJiM0MzsJCQkJZW1pdF9zdHgocHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLCBzcmMsIC1zdGFja19zaXplKTsKIAkJCQlzdGFja19zaXplIC09IDg7CiAJCQkJbnJfcmVncyYjNDM7JiM0Mzs7CiYjNDM7CQkJCXNsb3QmIzQzOyYjNDM7OwogCQkJfQogCQl9CiAJfQpAQCAtMzM1NCwxMSAmIzQzOzM0NDUsMTMgQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW0KIAlzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICpmZW50cnkgPSAmYW1wO3Rub2Rlc1tCUEZfVFJBTVBfRkVOVFJZXTsKIAlzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICpmZXhpdCA9ICZhbXA7dG5vZGVzW0JQRl9UUkFNUF9GRVhJVF07CiAJc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqZm1vZF9yZXQgPSAmYW1wO3Rub2Rlc1tCUEZfVFJBTVBfTU9ESUZZX1JFVFVSTl07CiYjNDM7CXN0cnVjdCBicGZfdHJhbXBfYXJlbmFfYXJncyBhYXJnczsKIAl2b2lkICpvcmlnX2NhbGwgPSBmdW5jX2FkZHI7CiAJaW50IGNvb2tpZV9vZmYsIGNvb2tpZV9jbnQ7CiAJdTggKipicmFuY2hlcyA9IE5VTEw7CiAJdTY0IGZ1bmNfbWV0YTsKIAl1OCAqcHJvZzsKJiM0MzsJYm9vbCBoYXNfYWFyZ3M7CiAJYm9vbCBzYXZlX3JldDsKIAogCS8qCkBAIC0zMzY5LDYgJiM0MzszNDYyLDggQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW0KIAlXQVJOX09OX09OQ0UoKGZsYWdzICZhbXA7IEJQRl9UUkFNUF9GX0lORElSRUNUKSAmYW1wOyZhbXA7CiAJCSAgICAgKGZsYWdzICZhbXA7IH4oQlBGX1RSQU1QX0ZfSU5ESVJFQ1QgfCBCUEZfVFJBTVBfRl9SRVRfRkVOVFJZX1JFVCkpKTsKIAomIzQzOwloYXNfYWFyZ3MgPSBicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzKHRub2RlcywgZmxhZ3MsICZhbXA7YWFyZ3MpOwomIzQzOwogCWZvciAoaSA9IDA7IGkgJmx0OyBtLSZndDtucl9hcmdzOyBpJiM0MzsmIzQzOykKIAkJbnJfcmVncyAmIzQzOz0gKG0tJmd0O2FyZ19zaXplW2ldICYjNDM7IDcpIC8gOCAtIDE7CiAKQEAgLTM1MDMsNyAmIzQzOzM1OTgsOCBAQCBzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbQogCQllbWl0X3N0b3JlX3N0YWNrX2ltbTY0KCZhbXA7cHJvZywgQlBGX1JFR18wLCAtaXBfb2ZmLCAobG9uZylmdW5jX2FkZHIpOwogCX0KIAotCXNhdmVfYXJncyhtLCAmYW1wO3Byb2csIHJlZ3Nfb2ZmLCBmYWxzZSwgZmxhZ3MpOwomIzQzOwlzYXZlX2FyZ3MobSwgJmFtcDtwcm9nLCByZWdzX29mZiwgZmFsc2UsIGZsYWdzLAomIzQzOwkJICBoYXNfYWFyZ3MgPyAmYW1wO2FhcmdzIDogTlVMTCk7CiAKIAlpZiAoZmxhZ3MgJmFtcDsgQlBGX1RSQU1QX0ZfQ0FMTF9PUklHKSB7CiAJCS8qIGFyZzE6IG1vdiByZGksIGltICovCkBAIC0zNTQ1LDcgJiM0MzszNjQxLDcgQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW0KIAogCWlmIChmbGFncyAmYW1wOyBCUEZfVFJBTVBfRl9DQUxMX09SSUcpIHsKIAkJcmVzdG9yZV9yZWdzKG0sICZhbXA7cHJvZywgcmVnc19vZmYpOwotCQlzYXZlX2FyZ3MobSwgJmFtcDtwcm9nLCBhcmdfc3RhY2tfb2ZmLCB0cnVlLCBmbGFncyk7CiYjNDM7CQlzYXZlX2FyZ3MobSwgJmFtcDtwcm9nLCBhcmdfc3RhY2tfb2ZmLCB0cnVlLCBmbGFncywgTlVMTCk7CiAKIAkJaWYgKGZsYWdzICZhbXA7IEJQRl9UUkFNUF9GX1RBSUxfQ0FMTF9DVFgpIHsKIAkJCS8qIEJlZm9yZSBjYWxsaW5nIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiwgbG9hZCB0aGUKQEAgLTQwNDYsNiAmIzQzOzQxNDIsMTEgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO2Jvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiB2b2lkICpicGZfYXJjaF90ZXh0X2NvcHkodm9pZCAqZHN0LCB2b2lkICpzcmMsIHNpemVfdCBsZW4pCiB7CiAJaWYgKHRleHRfcG9rZV9jb3B5KGRzdCwgc3JjLCBsZW4pID09IE5VTEwpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaAppbmRleCAzNTY4ODQ1ODdhZTExLi4yZjYwNmMzMjU2ODA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmgKQEAgLTEyMTMsNiAmIzQzOzEyMTMsMTIgQEAgc3RydWN0IGJwZl9wcm9nX29mZmxvYWQgewogLyogVGhlIGFyZ3VtZW50IGlzIHNpZ25lZC4gKi8KICNkZWZpbmUgQlRGX0ZNT0RFTF9TSUdORURfQVJHCQlCSVQoMSkKIAomIzQzOy8qIFRoZSBhcmd1bWVudCBpcyBhbiBhcmVuYSBwb2ludGVyLiAqLwomIzQzOyNkZWZpbmUgQlRGX0ZNT0RFTF9BUkVOQV9BUkcJCUJJVCgyKQomIzQzOwomIzQzOy8qIFRoZSBhcmd1bWVudCBpcyBudWxsYWJsZS4gKi8KJiM0MzsjZGVmaW5lIEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHCQlCSVQoMykKJiM0MzsKIHN0cnVjdCBidGZfZnVuY19tb2RlbCB7CiAJdTggcmV0X3NpemU7CiAJdTggcmV0X2ZsYWdzOwpAQCAtMTI4Niw2ICYjNDM7MTI5MiwyMCBAQCBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzIHsKIAlpbnQgbnJfbm9kZXM7CiB9OwogCiYjNDM7LyoKJiM0MzsgKiBXaGljaCA4LWJ5dGUgY3R4IHNsb3RzIG9mIGEgc3RydWN0X29wcyB0cmFtcG9saW5lIGhvbGQgYXJlbmEga2VybmVsCiYjNDM7ICogcG9pbnRlcnMgdGhhdCBzYXZlX2FyZ3MoKSBjb252ZXJ0cyB0byB0aGUgYXJlbmEgcG9pbnRlciBmb3JtLAomIzQzOyAqIGN0eFtzbG90XSA9ICh1MzIpKGthZGRyIC0ga2Vybl92bV9zdGFydCkuCiYjNDM7ICovCiYjNDM7c3RydWN0IGJwZl90cmFtcF9hcmVuYV9hcmdzIHsKJiM0MzsJdTMyIHNsb3RzOwomIzQzOwl1MzIgbnVsbGFibGVfc2xvdHM7CS8qIHN1YnNldCBvZiBAc2xvdHMgd2hlcmUgTlVMTCBpcyBwcmVzZXJ2ZWQgKi8KJiM0MzsJdTY0IGtlcm5fdm1fc3RhcnQ7CiYjNDM7fTsKJiM0MzsKJiM0Mztib29sIGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3Moc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB1MzIgZmxhZ3MsCiYjNDM7CQkJCSAgc3RydWN0IGJwZl90cmFtcF9hcmVuYV9hcmdzICphYXJncyk7CiYjNDM7CiBzdHJ1Y3QgYnBmX3RyYW1wX3J1bl9jdHg7CiAKIC8qIERpZmZlcmVudCB1c2UgY2FzZXMgZm9yIEJQRiB0cmFtcG9saW5lOgpAQCAtMTY4Nyw2ICYjNDM7MTcwNywxMSBAQCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4IHsKIAl1MzIgYnRmX2lkOwogCXUzMiByZWZfaWQ7CiAJYm9vbCByZWZjb3VudGVkOwomIzQzOwkvKgomIzQzOwkgKiBXZSBkb24mIzM5O3QgZW5jb2RlIE5VTEwtbmVzcyBpbiB0aGUgdHlwZSBmb3IgdGhlIHByb2dyYW0sIGJ1dCBzdGlsbCBuZWVkCiYjNDM7CSAqIHRvIGRpc3Rpbmd1aXNoIGl0IGZvciB0aGUgcHVycG9zZXMgb2YgdGVsbGluZyBKSVRzIHdoYXQgc2VxdWVuY2UgdG8gZW1pdC4KJiM0MzsJICovCiYjNDM7CWJvb2wgYXJlbmFfbnVsbGFibGU7CiB9OwogCiBzdHJ1Y3QgYnRmX21vZF9wYWlyIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCmluZGV4IDMyZDUyOTdjNTU3ZTUuLjM2Y2UzNDAzZmU1OTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaApAQCAtMTE4Myw2ICYjNDM7MTE4Myw3IEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdWJwcm9nX3RhaWxjYWxscyh2b2lkKTsKIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKTsKIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19rZnVuY19jYWxsKHZvaWQpOwogYm9vbCBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZCk7CiYjNDM7Ym9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZCk7CiBib29sIGJwZl9qaXRfc3VwcG9ydHNfZmFyX2tmdW5jX2NhbGwodm9pZCk7CiBib29sIGJwZl9qaXRfc3VwcG9ydHNfZXhjZXB0aW9ucyh2b2lkKTsKIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19wdHJfeGNoZyh2b2lkKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYyBiL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYwppbmRleCA0ZTdhNDhjMDJiZTVjLi44MjdhNjIxNmE2MjAxIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jCkBAIC0xNDcsNiAmIzQzOzE0Nyw4IEBAIHZvaWQgYnBmX3N0cnVjdF9vcHNfaW1hZ2VfZnJlZSh2b2lkICppbWFnZSkKIAogI2RlZmluZSBNQVlCRV9OVUxMX1NVRkZJWCAmIzM0O19fbnVsbGFibGUmIzM0OwogI2RlZmluZSBSRUZDT1VOVEVEX1NVRkZJWCAmIzM0O19fcmVmJiMzNDsKJiM0MzsjZGVmaW5lIEFSRU5BX1NVRkZJWCAmIzM0O19fYXJlbmEmIzM0OwomIzQzOyNkZWZpbmUgQVJFTkFfTUFZQkVfTlVMTF9TVUZGSVggJiMzNDtfX2FyZW5hX251bGxhYmxlJiMzNDsKIAogLyogUHJlcGFyZSBhcmd1bWVudCBpbmZvIGZvciBldmVyeSBudWxsYWJsZSBhcmd1bWVudCBvZiBhIG1lbWJlciBvZiBhCiAgKiBzdHJ1Y3Rfb3BzIHR5cGUuCkBAIC0xNTksNyAmIzQzOzE2MSw3IEBAIHZvaWQgYnBmX3N0cnVjdF9vcHNfaW1hZ2VfZnJlZSh2b2lkICppbWFnZSkKICAqIHRvIHByb3ZpZGUgYW4gYXJyYXkgb2Ygc3RydWN0IGJwZl9jdHhfYXJnX2F1eCwgd2hpY2ggaW4gdHVybiBwcm92aWRlcwogICogdGhlIGluZm9ybWF0aW9uIHRoYXQgdXNlZCBieSB0aGUgdmVyaWZpZXIgdG8gY2hlY2sgdGhlIGFyZ3VtZW50cyBvZiB0aGUKICAqIEJQRiBzdHJ1Y3Rfb3BzIHByb2dyYW0gYXNzaWduZWQgdG8gdGhlIG1lbWJlci4gSGVyZSwgd2Ugb25seSBjYXJlIGFib3V0Ci0gKiB0aGUgYXJndW1lbnRzIHRoYXQgYXJlIG1hcmtlZCBhcyBfX251bGxhYmxlLgomIzQzOyAqIHRoZSBhcmd1bWVudHMgdGhhdCBhcmUgbWFya2VkIGFzIF9fbnVsbGFibGUsIF9fcmVmIG9yIF9fYXJlbmEuCiAgKgogICogVGhlIGFycmF5IG9mIHN0cnVjdCBicGZfY3R4X2FyZ19hdXggaXMgZXZlbnR1YWxseSBhc3NpZ25lZCB0bwogICogcHJvZy0mZ3Q7YXV4LSZndDtjdHhfYXJnX2luZm8gb2YgQlBGIHN0cnVjdF9vcHMgcHJvZ3JhbXMgYW5kIHBhc3NlZCB0byB0aGUKQEAgLTE3NSw3ICYjNDM7MTc3LDggQEAgc3RhdGljIGludCBwcmVwYXJlX2FyZ19pbmZvKHN0cnVjdCBidGYgKmJ0ZiwKIAkJCSAgICBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfYXJnX2luZm8gKmFyZ19pbmZvKQogewogCWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqc3R1Yl9mdW5jX3Byb3RvLCAqcG9pbnRlZF90eXBlOwotCWJvb2wgaXNfbnVsbGFibGUgPSBmYWxzZSwgaXNfcmVmY291bnRlZCA9IGZhbHNlOwomIzQzOwlib29sIGlzX251bGxhYmxlID0gZmFsc2UsIGlzX3JlZmNvdW50ZWQgPSBmYWxzZSwgaXNfYXJlbmEgPSBmYWxzZTsKJiM0MzsJYm9vbCBpc19hcmVuYV9udWxsYWJsZSA9IGZhbHNlOwogCWNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKnN0dWJfYXJncywgKmFyZ3M7CiAJc3RydWN0IGJwZl9jdHhfYXJnX2F1eCAqaW5mbywgKmluZm9fYnVmOwogCXUzMiBuYXJncywgYXJnX25vLCBpbmZvX2NudCA9IDA7CkBAIC0yMjYsMjYgJiM0MzsyMjksMzAgQEAgc3RhdGljIGludCBwcmVwYXJlX2FyZ19pbmZvKHN0cnVjdCBidGYgKmJ0ZiwKIAlpbmZvID0gaW5mb19idWY7CiAJZm9yIChhcmdfbm8gPSAwOyBhcmdfbm8gJmx0OyBuYXJnczsgYXJnX25vJiM0MzsmIzQzOykgewogCQkvKiBTa2lwIGFyZ3VtZW50cyB0aGF0IGlzIG5vdCBzdWZmaXhlZCB3aXRoCi0JCSAqICYjMzQ7X19udWxsYWJsZSBvciBfX3JlZiYjMzQ7LgomIzQzOwkJICogJiMzNDtfX251bGxhYmxlJiMzNDssICYjMzQ7X19yZWYmIzM0OywgJiMzNDtfX2FyZW5hJiMzNDsgb3IgJiMzNDtfX2FyZW5hX251bGxhYmxlJiMzNDsuCiAJCSAqLwogCQlpc19udWxsYWJsZSA9IGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCAmYW1wO3N0dWJfYXJnc1thcmdfbm9dLAogCQkJCQkJICAgICBNQVlCRV9OVUxMX1NVRkZJWCk7CiAJCWlzX3JlZmNvdW50ZWQgPSBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgJmFtcDtzdHViX2FyZ3NbYXJnX25vXSwKIAkJCQkJCSAgICAgICBSRUZDT1VOVEVEX1NVRkZJWCk7CiYjNDM7CQlpc19hcmVuYV9udWxsYWJsZSA9IGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCAmYW1wO3N0dWJfYXJnc1thcmdfbm9dLAomIzQzOwkJCQkJCQkgICBBUkVOQV9NQVlCRV9OVUxMX1NVRkZJWCk7CiYjNDM7CQlpc19hcmVuYSA9IGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCAmYW1wO3N0dWJfYXJnc1thcmdfbm9dLCBBUkVOQV9TVUZGSVgpOwogCiAJCWlmIChpc19udWxsYWJsZSkKIAkJCXN1ZmZpeCA9IE1BWUJFX05VTExfU1VGRklYOwogCQllbHNlIGlmIChpc19yZWZjb3VudGVkKQogCQkJc3VmZml4ID0gUkVGQ09VTlRFRF9TVUZGSVg7CiYjNDM7CQllbHNlIGlmIChpc19hcmVuYV9udWxsYWJsZSkKJiM0MzsJCQlzdWZmaXggPSBBUkVOQV9NQVlCRV9OVUxMX1NVRkZJWDsKJiM0MzsJCWVsc2UgaWYgKGlzX2FyZW5hKQomIzQzOwkJCXN1ZmZpeCA9IEFSRU5BX1NVRkZJWDsKIAkJZWxzZQogCQkJY29udGludWU7CiAKLQkJLyogU2hvdWxkIGJlIGEgcG9pbnRlciB0byBzdHJ1Y3QgKi8KLQkJcG9pbnRlZF90eXBlID0gYnRmX3R5cGVfcmVzb2x2ZV9wdHIoYnRmLAotCQkJCQkJICAgIGFyZ3NbYXJnX25vXS50eXBlLAotCQkJCQkJICAgICZhbXA7YXJnX2J0Zl9pZCk7Ci0JCWlmICghcG9pbnRlZF90eXBlIHx8Ci0JCSAgICAhYnRmX3R5cGVfaXNfc3RydWN0KHBvaW50ZWRfdHlwZSkpIHsKJiM0MzsJCS8qIFNob3VsZCBiZSBhIHBvaW50ZXIgdG8gc3RydWN0LCBvciBhbnkgcG9pbnRlciBmb3IgX19hcmVuYS9fX2FyZW5hX251bGxhYmxlICovCiYjNDM7CQlwb2ludGVkX3R5cGUgPSBidGZfdHlwZV9yZXNvbHZlX3B0cihidGYsIGFyZ3NbYXJnX25vXS50eXBlLCAmYW1wO2FyZ19idGZfaWQpOwomIzQzOwkJaWYgKCFwb2ludGVkX3R5cGUgfHwgKCFpc19hcmVuYSAmYW1wOyZhbXA7ICFpc19hcmVuYV9udWxsYWJsZSAmYW1wOyZhbXA7ICFidGZfdHlwZV9pc19zdHJ1Y3QocG9pbnRlZF90eXBlKSkpIHsKIAkJCXByX3dhcm4oJiMzNDtzdHViIGZ1bmN0aW9uICVzIGhhcyAlcyB0YWdnaW5nIHRvIGFuIHVuc3VwcG9ydGVkIHR5cGVcbiYjMzQ7LAogCQkJCXN0dWJfZm5hbWUsIHN1ZmZpeCk7CiAJCQlnb3RvIGVycl9vdXQ7CkBAIC0yNzMsNiAmIzQzOzI4MCwxNSBAQCBzdGF0aWMgaW50IHByZXBhcmVfYXJnX2luZm8oc3RydWN0IGJ0ZiAqYnRmLAogCQl9IGVsc2UgaWYgKGlzX3JlZmNvdW50ZWQpIHsKIAkJCWluZm8tJmd0O3JlZ190eXBlID0gUFRSX1RSVVNURUQgfCBQVFJfVE9fQlRGX0lEOwogCQkJaW5mby0mZ3Q7cmVmY291bnRlZCA9IHRydWU7CiYjNDM7CQl9IGVsc2UgaWYgKGlzX2FyZW5hIHx8IGlzX2FyZW5hX251bGxhYmxlKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBCb3RoIHR5cGVzIGdldCBQVFJfVE9fQVJFTkEuIEluIHZlcmlmaWVyIHN0YXRlLAomIzQzOwkJCSAqIFBUUl9UT19BUkVOQSBlbmNvbXBhc3NlcyBwb3RlbnRpYWwgTlVMTCB2YWx1ZXMsIGJ1dAomIzQzOwkJCSAqIHdlIGRvIG5vdCBmb3JjZSB0aGUgcHJvZ3JhbSB0byBjaGVjayBpdCwgb3IgbWFpbnRhaW4KJiM0MzsJCQkgKiBwcmVjaXNpb24gYXJvdW5kIGl0LCBzaW5jZSBpdCBoYXMgbm8gc2FmZXR5IGltcGxpY2F0aW9uLgomIzQzOwkJCSAqLwomIzQzOwkJCWluZm8tJmd0O3JlZ190eXBlID0gUFRSX1RPX0FSRU5BOwomIzQzOwkJCWluZm8tJmd0O2FyZW5hX251bGxhYmxlID0gaXNfYXJlbmFfbnVsbGFibGU7CiAJCX0KIAogCQlpbmZvJiM0MzsmIzQzOzsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jCmluZGV4IDVlOGFjNDVjZTU2YWYuLmUzMWY1NmY0MDFlYmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvYnRmLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9idGYuYwpAQCAtNjk2MywxNSAmIzQzOzY5NjMsMTkgQEAgYm9vbCBidGZfY3R4X2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSwgZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSwKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCS8qIGNoZWNrIGZvciBQVFJfVE9fUkRPTkxZX0JVRl9PUl9OVUxMIG9yIFBUUl9UT19SRFdSX0JVRl9PUl9OVUxMICovCiYjNDM7CS8qCiYjNDM7CSAqIENoZWNrIGZvciBQVFJfVE9fUkRPTkxZX0JVRl9PUl9OVUxMLCBQVFJfVE9fUkRXUl9CVUZfT1JfTlVMTCBvcgomIzQzOwkgKiBQVFJfVE9fQVJFTkEgKGJvdGggbnVsbGFibGUgYW5kIG5vbi1udWxsYWJsZSBjYXNlcykuCiYjNDM7CSAqLwogCWZvciAoaSA9IDA7IGkgJmx0OyBwcm9nLSZndDthdXgtJmd0O2N0eF9hcmdfaW5mb19zaXplOyBpJiM0MzsmIzQzOykgewogCQljb25zdCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4ICpjdHhfYXJnX2luZm8gPSAmYW1wO3Byb2ctJmd0O2F1eC0mZ3Q7Y3R4X2FyZ19pbmZvW2ldOwogCQl1MzIgdHlwZSwgZmxhZzsKIAogCQl0eXBlID0gYmFzZV90eXBlKGN0eF9hcmdfaW5mby0mZ3Q7cmVnX3R5cGUpOwogCQlmbGFnID0gdHlwZV9mbGFnKGN0eF9hcmdfaW5mby0mZ3Q7cmVnX3R5cGUpOwotCQlpZiAoY3R4X2FyZ19pbmZvLSZndDtvZmZzZXQgPT0gb2ZmICZhbXA7JmFtcDsgdHlwZSA9PSBQVFJfVE9fQlVGICZhbXA7JmFtcDsKLQkJICAgIChmbGFnICZhbXA7IFBUUl9NQVlCRV9OVUxMKSkgewomIzQzOwkJaWYgKGN0eF9hcmdfaW5mby0mZ3Q7b2Zmc2V0ID09IG9mZiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKHR5cGUgPT0gUFRSX1RPX0FSRU5BIHx8CiYjNDM7CQkgICAgICh0eXBlID09IFBUUl9UT19CVUYgJmFtcDsmYW1wOyAoZmxhZyAmYW1wOyBQVFJfTUFZQkVfTlVMTCkpKSkgewogCQkJaW5mby0mZ3Q7cmVnX3R5cGUgPSBjdHhfYXJnX2luZm8tJmd0O3JlZ190eXBlOwogCQkJcmV0dXJuIHRydWU7CiAJCX0KQEAgLTc1NDEsNiAmIzQzOzc1NDUsMjIgQEAgc3RhdGljIHU4IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCkKIAlyZXR1cm4gZmxhZ3M7CiB9CiAKJiM0MztzdGF0aWMgdTggX19nZXRfYXJnX2Ztb2RlbF9mbGFncyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiYjNDM7CQkJCSBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcsCiYjNDM7CQkJCSBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpCiYjNDM7ewomIzQzOwl1OCBmbGFncyA9IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKHQpOwomIzQzOwomIzQzOwlpZiAoYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgJiMzNDtfX2FyZW5hJiMzNDspIHx8CiYjNDM7CSAgICBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCAmIzM0O19fYXJlbmFfbnVsbGFibGUmIzM0OykpCiYjNDM7CQlmbGFncyB8PSBCVEZfRk1PREVMX0FSRU5BX0FSRzsKJiM0MzsJaWYgKGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsICYjMzQ7X19udWxsYWJsZSYjMzQ7KSB8fAomIzQzOwkgICAgYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgJiMzNDtfX2FyZW5hX251bGxhYmxlJiMzNDspKQomIzQzOwkJZmxhZ3MgfD0gQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7CiYjNDM7CiYjNDM7CXJldHVybiBmbGFnczsKJiM0Mzt9CiYjNDM7CiBpbnQgYnRmX2Rpc3RpbGxfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLAogCQkJICAgc3RydWN0IGJ0ZiAqYnRmLAogCQkJICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICpmdW5jLApAQCAtNzYwNiw3ICYjNDM7NzYyNiw3IEBAIGludCBidGZfZGlzdGlsbF9mdW5jX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQltLSZndDthcmdfc2l6ZVtpXSA9IHJldDsKLQkJbS0mZ3Q7YXJnX2ZsYWdzW2ldID0gX19nZXRfdHlwZV9mbW9kZWxfZmxhZ3ModCk7CiYjNDM7CQltLSZndDthcmdfZmxhZ3NbaV0gPSBfX2dldF9hcmdfZm1vZGVsX2ZsYWdzKGJ0ZiwgJmFtcDthcmdzW2ldLCB0KTsKIAl9CiAJbS0mZ3Q7bnJfYXJncyA9IG5hcmdzOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb3JlLmMgYi9rZXJuZWwvYnBmL2NvcmUuYwppbmRleCBlMjA3NjY2N2IyNDUxLi5hM2UxZmFlMzJlYWNlIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2NvcmUuYwpAQCAtMzMwOCw2ICYjNDM7MzMwOCwxMSBAQCBib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZCkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0Mztib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX2Zhcl9rZnVuY19jYWxsKHZvaWQpCiB7CiAJcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYwppbmRleCBlZDc5OTlhZDZjNjZjLi5kMmQ3YTI5MDQzNDVkIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYwpAQCAtNTI5LDYgJiM0Mzs1MjksNTMgQEAgYnBmX3RyYW1wb2xpbmVfZ2V0X3Byb2dzKGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGludCAqdG90YWwsIGJvb2wgKmlwX2EKIAlyZXR1cm4gdG5vZGVzOwogfQogCiYjNDM7c3RhdGljIGJvb2wgYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmcoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwcm9nLSZndDthdXgtJmd0O2N0eF9hcmdfaW5mb19zaXplOyBpJiM0MzsmIzQzOykKJiM0MzsJCWlmIChiYXNlX3R5cGUocHJvZy0mZ3Q7YXV4LSZndDtjdHhfYXJnX2luZm9baV0ucmVnX3R5cGUpID09IFBUUl9UT19BUkVOQSkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIENvbGxlY3Qgd2hpY2ggY3R4IHNsb3RzIG9mIGEgc3RydWN0X29wcyB0cmFtcG9saW5lIGhvbGQgYXJlbmEga2VybmVsCiYjNDM7ICogcG9pbnRlcnMgdGhhdCBzYXZlX2FyZ3MoKSBtdXN0IGNvbnZlcnQgdG8gdGhlIGFyZW5hIHBvaW50ZXIgZm9ybS4gT25seQomIzQzOyAqIHRoZSBzdHJ1Y3Rfb3BzIGluZGlyZWN0IHRyYW1wb2xpbmUgY29udmVydHM6IGl0IGRpc3BhdGNoZXMgdG8gYSBzaW5nbGUKJiM0MzsgKiBwcm9nIHdob3NlIGFyZW5hIGlzIGtub3duIGF0IGdlbmVyYXRpb24gdGltZS4gUmV0dXJuIGZhbHNlIHdoZW4gdGhlcmUKJiM0MzsgKiBpcyBub3RoaW5nIHRvIGNvbnZlcnQuCiYjNDM7ICovCiYjNDM7Ym9vbCBicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzKHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcywgdTMyIGZsYWdzLAomIzQzOwkJCQkgIHN0cnVjdCBicGZfdHJhbXBfYXJlbmFfYXJncyAqYWFyZ3MpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwltZW1zZXQoYWFyZ3MsIDAsIHNpemVvZigqYWFyZ3MpKTsKJiM0MzsKJiM0MzsJaWYgKCEoZmxhZ3MgJmFtcDsgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIHx8CiYjNDM7CSAgICB0bm9kZXNbQlBGX1RSQU1QX0ZFTlRSWV0ubnJfbm9kZXMgIT0gMSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcHJvZyA9IHRub2Rlc1tCUEZfVFJBTVBfRkVOVFJZXS5ub2Rlc1swXS0mZ3Q7bGluay0mZ3Q7cHJvZzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHByb2ctJmd0O2F1eC0mZ3Q7Y3R4X2FyZ19pbmZvX3NpemU7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4ICppbmZvID0gJmFtcDtwcm9nLSZndDthdXgtJmd0O2N0eF9hcmdfaW5mb1tpXTsKJiM0MzsKJiM0MzsJCWlmIChiYXNlX3R5cGUoaW5mby0mZ3Q7cmVnX3R5cGUpICE9IFBUUl9UT19BUkVOQSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWFhcmdzLSZndDtzbG90cyB8PSBCSVQoaW5mby0mZ3Q7b2Zmc2V0IC8gOCk7CiYjNDM7CQlpZiAoaW5mby0mZ3Q7YXJlbmFfbnVsbGFibGUpCiYjNDM7CQkJYWFyZ3MtJmd0O251bGxhYmxlX3Nsb3RzIHw9IEJJVChpbmZvLSZndDtvZmZzZXQgLyA4KTsKJiM0MzsJfQomIzQzOwlpZiAoIWFhcmdzLSZndDtzbG90cykKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghcHJvZy0mZ3Q7YXV4LSZndDthcmVuYSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWFhcmdzLSZndDtrZXJuX3ZtX3N0YXJ0ID0gYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KHByb2ctJmd0O2F1eC0mZ3Q7YXJlbmEpOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBicGZfdHJhbXBfaW1hZ2VfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSkKIHsKIAlicGZfaW1hZ2Vfa3N5bV9kZWwoJmFtcDtpbS0mZ3Q7a3N5bSk7CkBAIC02ODUsNiAmIzQzOzczMiw3IEBAIHN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0CiAJdTMyIG9yaWdfZmxhZ3MgPSB0ci0mZ3Q7ZmxhZ3M7CiAJYm9vbCBpcF9hcmcgPSBmYWxzZTsKIAlpbnQgZXJyLCB0b3RhbCwgc2l6ZTsKJiM0MzsJaW50IGtpbmQsIGk7CiAKIAl0bm9kZXMgPSBicGZfdHJhbXBvbGluZV9nZXRfcHJvZ3ModHIsICZhbXA7dG90YWwsICZhbXA7aXBfYXJnKTsKIAlpZiAoSVNfRVJSKHRub2RlcykpCkBAIC02OTUsNiAmIzQzOzc0MywyMiBAQCBzdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dAogCQlnb3RvIG91dDsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogQXJlbmEgY3R4IGFyZ3MgYXJlIGNvbnZlcnRlZCBvbmx5IGJ5IHRoZSBzdHJ1Y3Rfb3BzIGluZGlyZWN0CiYjNDM7CSAqIHRyYW1wb2xpbmUsIHdoaWNoIGRpc3BhdGNoZXMgdG8gYSBzaW5nbGUga25vd24gcHJvZy4gR2VuZXJpYwomIzQzOwkgKiB0cmFtcG9saW5lcyBjYW4gbWl4IHByb2dzIHdpdGggZGlmZmVyZW50IGFyZW5hcywgc28gbm8gY29udmVyc2lvbgomIzQzOwkgKiBpcyBwb3NzaWJsZSBoZXJlLiBOb3QgcmVhY2hhYmxlIHRvZGF5OiBvbmx5IHN0cnVjdF9vcHMgcHJvZ3MgZ2V0CiYjNDM7CSAqIGFyZW5hIGN0eCBhcmdzIGFuZCB0aGV5IG5ldmVyIHJpZGUgZ2VuZXJpYyB0cmFtcG9saW5lcy4KJiM0MzsJICovCiYjNDM7CWZvciAoa2luZCA9IDA7IGtpbmQgJmx0OyBCUEZfVFJBTVBfTUFYOyBraW5kJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHRub2Rlc1traW5kXS5ucl9ub2RlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAoYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmcodG5vZGVzW2tpbmRdLm5vZGVzW2ldLSZndDtsaW5rLSZndDtwcm9nKSkgewomIzQzOwkJCQllcnIgPSAtRU5PVFNVUFA7CiYjNDM7CQkJCWdvdG8gb3V0OwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCS8qIGNsZWFyIGFsbCBiaXRzIGV4Y2VwdCBTSEFSRV9JUE1PRElGWSBhbmQgVEFJTF9DQUxMX0NUWCAqLwogCXRyLSZndDtmbGFncyAmYW1wOz0gKEJQRl9UUkFNUF9GX1NIQVJFX0lQTU9ESUZZIHwgQlBGX1RSQU1QX0ZfVEFJTF9DQUxMX0NUWCk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCBiMjc0MDA0ZmNjZmQ5Li5jOTEyOTMzMGRlZGU2IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC0xMDkwNyw2ICYjNDM7MTA5MDcsMTYgQEAgc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2lycV9mbGFnKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbQogCXJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCAmIzM0O19faXJxX2ZsYWcmIzM0Oyk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfYXJlbmEoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpCiYjNDM7ewomIzQzOwlyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgJiMzNDtfX2FyZW5hJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfYXJlbmFfbnVsbGFibGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpCiYjNDM7ewomIzQzOwlyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgJiMzNDtfX2FyZW5hX251bGxhYmxlJiMzNDspOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19zY2FsYXJfd2l0aF9uYW1lKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwKIAkJCQkJICBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcsCiAJCQkJCSAgY29uc3QgY2hhciAqbmFtZSkKQEAgLTExMTI3LDYgJiM0MzsxMTEzNyw3IEBAIGVudW0ga2Z1bmNfcHRyX2FyZ190eXBlIHsKIAlLRl9BUkdfUFRSX1RPX0lSUV9GTEFHLAogCUtGX0FSR19QVFJfVE9fUkVTX1NQSU5fTE9DSywKIAlLRl9BUkdfUFRSX1RPX1RBU0tfV09SSywKJiM0MzsJS0ZfQVJHX1BUUl9UT19BUkVOQSwKIH07CiAKIGVudW0gc3BlY2lhbF9rZnVuY190eXBlIHsKQEAgLTExNDEyLDcgJiM0MzsxMTQyMyw2IEBAIGdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsCiAJCQlyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ0Zl90eXBlX3N0cih0KSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQogCXJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMobWV0YS0mZ3Q7YnRmLCB0LSZndDt0eXBlLCBOVUxMKTsKIAlyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQobWV0YS0mZ3Q7YnRmLCByZWZfdC0mZ3Q7bmFtZV9vZmYpOwogCkBAIC0xMTQ2MSw2ICYjNDM7MTE0NzEsOSBAQCBnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLAogCQlhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fUkVTX1NQSU5fTE9DSzsKIAllbHNlIGlmIChpc19rZnVuY19hcmdfY2FsbGJhY2soZW52LCBtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKIAkJYXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0NBTExCQUNLOwomIzQzOwllbHNlIGlmIChpc19rZnVuY19hcmdfYXJlbmEobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnXSkgfHwKJiM0MzsJCSBpc19rZnVuY19hcmdfYXJlbmFfbnVsbGFibGUobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnXSkpCiYjNDM7CQlhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQVJFTkE7CiAJZWxzZSBpZiAoYXJnICYjNDM7IDEgJmx0OyBuYXJncyAmYW1wOyZhbXA7CiAJCSAoaXNfa2Z1bmNfYXJnX21lbV9zaXplKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZyAmIzQzOyAxXSkgfHwKIAkJICBpc19rZnVuY19hcmdfY29uc3RfbWVtX3NpemUobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnICYjNDM7IDFdKSkpIHsKQEAgLTEyMTU0LDYgJiM0MzsxMjE2NywzMSBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZQogCiAJCXQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGFyZ3NbaV0udHlwZSwgTlVMTCk7CiAKJiM0MzsJCWlmIChiYXNlX3R5cGUoa2ZfYXJnX3R5cGUpID09IEtGX0FSR19QVFJfVE9fQVJFTkEpIHsKJiM0MzsJCQlpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7CiYjNDM7CQkJCXZlcmJvc2UoZW52LCAmIzM0O0pJVCBkb2VzIG5vdCBzdXBwb3J0IGtmdW5jICVzKCkgd2l0aCBhcmVuYSBwb2ludGVyIGFyZ3VtZW50c1xuJiMzNDssCiYjNDM7CQkJCQlmdW5jX25hbWUpOwomIzQzOwkJCQlyZXR1cm4gLUVOT1RTVVBQOwomIzQzOwkJCX0KJiM0MzsJCQlpZiAoIWVudi0mZ3Q7cHJvZy0mZ3Q7YXV4LSZndDthcmVuYSkgewomIzQzOwkJCQl2ZXJib3NlKGVudiwKJiM0MzsJCQkJCSYjMzQ7JXMgYXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXG4mIzM0OywKJiM0MzsJCQkJCXJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7CiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCX0KJiM0MzsJCQlpZiAocmVnbm8gJmx0OyAwKSB7CiYjNDM7CQkJCXZlcmJvc2UoZW52LCAmIzM0OyVzIGFyZW5hIHBvaW50ZXIgY2Fubm90IGJlIGEgc3RhY2sgYXJndW1lbnRcbiYjMzQ7LAomIzQzOwkJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTsKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJfQomIzQzOwkJCWlmIChyZWctJmd0O3R5cGUgIT0gUFRSX1RPX0FSRU5BICZhbXA7JmFtcDsgcmVnLSZndDt0eXBlICE9IFNDQUxBUl9WQUxVRSkgewomIzQzOwkJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBpcyBub3QgYSBwb2ludGVyIHRvIGFyZW5hIG9yIHNjYWxhclxuJiMzNDssCiYjNDM7CQkJCQlyZWdfYXJnX25hbWUoZW52LCBhcmdubykpOwomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQl9CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCWlmIChidGZfdHlwZV9pc19wdHIodCkgJmFtcDsmYW1wOyAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSB8fCB0eXBlX21heV9iZV9udWxsKHJlZy0mZ3Q7dHlwZSkpICZhbXA7JmFtcDsKIAkJICAgICFpc19rZnVuY19hcmdfbnVsbGFibGUobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbaV0pKSB7CiAJCQl2ZXJib3NlKGVudiwgJiMzNDtQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgJXNcbiYjMzQ7LApAQCAtMTg4MDcsNiAmIzQzOzE4ODQ1LDcgQEAgc3RhdGljIGludCBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogewogCWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgKmZ1bmNfcHJvdG87CiAJY29uc3Qgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2MgKnN0X29wc19kZXNjOwomIzQzOwljb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfYXJnX2luZm8gKmFyZ19pbmZvOwogCWNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzOwogCWNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXI7CiAJc3RydWN0IGJwZl9wcm9nICpwcm9nID0gZW52LSZndDtwcm9nOwpAQCAtMTg4ODUsMTAgJiM0MzsxODkyNCwyMyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCXJldHVybiAtRUFDQ0VTOwogCX0KIAotCWZvciAoaSA9IDA7IGkgJmx0OyBzdF9vcHNfZGVzYy0mZ3Q7YXJnX2luZm9bbWVtYmVyX2lkeF0uY250OyBpJiM0MzsmIzQzOykgewotCQlpZiAoc3Rfb3BzX2Rlc2MtJmd0O2FyZ19pbmZvW21lbWJlcl9pZHhdLmluZm9baV0ucmVmY291bnRlZCkgewomIzQzOwlhcmdfaW5mbyA9ICZhbXA7c3Rfb3BzX2Rlc2MtJmd0O2FyZ19pbmZvW21lbWJlcl9pZHhdOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgYXJnX2luZm8tJmd0O2NudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCBicGZfY3R4X2FyZ19hdXggKmluZm8gPSAmYW1wO2FyZ19pbmZvLSZndDtpbmZvW2ldOwomIzQzOwomIzQzOwkJaWYgKGluZm8tJmd0O3JlZmNvdW50ZWQpCiAJCQloYXNfcmVmY291bnRlZF9hcmcgPSB0cnVlOwotCQkJYnJlYWs7CiYjNDM7CQlpZiAoYmFzZV90eXBlKGluZm8tJmd0O3JlZ190eXBlKSA9PSBQVFJfVE9fQVJFTkEpIHsKJiM0MzsJCQlpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7CiYjNDM7CQkJCXZlcmJvc2UoZW52LCAmIzM0O0pJVCBkb2VzIG5vdCBzdXBwb3J0IGFyZW5hIGFyZ3VtZW50c1xuJiMzNDspOwomIzQzOwkJCQlyZXR1cm4gLUVOT1RTVVBQOwomIzQzOwkJCX0KJiM0MzsJCQlpZiAoIXByb2ctJmd0O2F1eC0mZ3Q7YXJlbmEpIHsKJiM0MzsJCQkJdmVyYm9zZShlbnYsCiYjNDM7CQkJCQkmIzM0O2FyZW5hIGFyZ3VtZW50IG9mICVzIHJlcXVpcmVzIGEgcHJvZ3JhbSB3aXRoIGFuIGFzc29jaWF0ZWQgYXJlbmFcbiYjMzQ7LAomIzQzOwkJCQkJbW5hbWUpOwomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQl9CiAJCX0KIAl9CiAKQEAgLTE4OTA5LDggJiM0MzsxODk2MSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RydWN0X29wc19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAlwcm9nLSZndDthdXgtJmd0O2F0dGFjaF9mdW5jX25hbWUgPSBtbmFtZTsKIAllbnYtJmd0O29wcyA9IHN0X29wcy0mZ3Q7dmVyaWZpZXJfb3BzOwogCi0JcmV0dXJuIGJwZl9wcm9nX2N0eF9hcmdfaW5mb19pbml0KHByb2csIHN0X29wc19kZXNjLSZndDthcmdfaW5mb1ttZW1iZXJfaWR4XS5pbmZvLAotCQkJCQkgIHN0X29wc19kZXNjLSZndDthcmdfaW5mb1ttZW1iZXJfaWR4XS5jbnQpOwomIzQzOwlyZXR1cm4gYnBmX3Byb2dfY3R4X2FyZ19pbmZvX2luaXQocHJvZywgYXJnX2luZm8tJmd0O2luZm8sIGFyZ19pbmZvLSZndDtjbnQpOwogfQogI2RlZmluZSBTRUNVUklUWV9QUkVGSVggJiMzNDtzZWN1cml0eV8mIzM0OwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9rZnVuYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfa2Z1bmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi45YmUxOTU2NWYwZDUzCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfa2Z1bmMuYwpAQCAtMCwwICYjNDM7MSwxNSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDthcmVuYV9rZnVuYy5za2VsLmgmIzM0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIHRlc3Qga2Z1bmNzIGxpdmUgaW4gYnBmX3Rlc3Rtb2QuIFJlc29sdmluZyBrZnVuY3MgYWdhaW5zdCBtb2R1bGUKJiM0MzsgKiBCVEZzIG5lZWRzIENBUF9TWVNfQURNSU4sIHNvIHJ1biB3aXRoIGZ1bGwgY2FwYWJpbGl0aWVzIGluc3RlYWQgb2YKJiM0MzsgKiB0aHJvdWdoIHRoZSB2ZXJpZmllciB0ZXN0cyYjMzk7IGNhcGFiaWxpdHktcmVzdHJpY3RlZCBydW5uZXIuCiYjNDM7ICovCiYjNDM7dm9pZCB0ZXN0X2FyZW5hX2tmdW5jKHZvaWQpCiYjNDM7ewomIzQzOwlSVU5fVEVTVFMoYXJlbmFfa2Z1bmMpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2tmdW5jX2ppdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfa2Z1bmNfaml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMjM1OWNkZTI0YzQ1ZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2tmdW5jX2ppdC5jCkBAIC0wLDAgJiM0MzsxLDEzIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2FyZW5hX2tmdW5jX2ppdC5za2VsLmgmIzM0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogUnVucyB3aXRoIGZ1bGwgY2FwYWJpbGl0aWVzOiByZXNvbHZpbmcgbW9kdWxlIGtmdW5jIGtzeW1zIHJlcXVpcmVzCiYjNDM7ICogQ0FQX1NZU19BRE1JTiwgd2hpY2ggcnVsZXMgb3V0IHRoZSBjYXBhYmlsaXR5LXJlc3RyaWN0ZWQgcnVubmVyLgomIzQzOyAqLwomIzQzO3ZvaWQgdGVzdF9hcmVuYV9rZnVuY19qaXQodm9pZCkKJiM0Mzt7CiYjNDM7CVJVTl9URVNUUyhhcmVuYV9rZnVuY19qaXQpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYjFlMzlkZWZhMzhhZQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jCkBAIC0wLDAgJiM0MzsxLDc0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3N0cnVjdF9vcHNfYXJlbmEuc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5za2VsLmgmIzM0OwomIzQzOwomIzQzOyNpZiBkZWZpbmVkKF9feDg2XzY0X18pCiYjNDM7LyoKJiM0MzsgKiBBdHRhY2ggY2FsbGJhY2tzIHdpdGggX19hcmVuYSBhbmQgX19hcmVuYV9udWxsYWJsZSBhcmd1bWVudHMgYW5kIGRyaXZlCiYjNDM7ICogdGhlbSB0aHJvdWdoIHRoZSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSooKSBrZnVuY3MuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYXJlbmFfYXJnKHZvaWQpCiYjNDM7ewomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpOwomIzQzOwlzdHJ1Y3Qgc3RydWN0X29wc19hcmVuYSAqc2tlbDsKJiM0MzsJc3RydWN0IGJwZl9saW5rICpsaW5rID0gTlVMTDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJc2tlbCA9IHN0cnVjdF9vcHNfYXJlbmFfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c3RydWN0X29wc19hcmVuYV9fb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbGluayA9IGJwZl9tYXBfX2F0dGFjaF9zdHJ1Y3Rfb3BzKHNrZWwtJmd0O21hcHMudGVzdG1vZF9hcmVuYSk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihsaW5rLCAmIzM0O2F0dGFjaF9zdHJ1Y3Rfb3BzJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLnRyaWdnZXIpLAomIzQzOwkJCQkgICAgICZhbXA7dG9wdHMpOwomIzQzOwlBU1NFUlRfT0soZXJyLCAmIzM0O3Rlc3RfcnVuJiMzNDspOwomIzQzOwlBU1NFUlRfRVEodG9wdHMucmV0dmFsLCAwLCAmIzM0O3RyaWdnZXJfcmV0dmFsJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7CiYjNDM7CXN0cnVjdF9vcHNfYXJlbmFfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBwcm9ncmFtIHdpdGggbm8gYXJlbmEgY2Fubm90IGF0dGFjaCB0byBhIG1lbWJlciB3aXRoIGFuIF9fYXJlbmEKJiM0MzsgKiBhcmd1bWVudC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBhcmVuYV9hcmdfZmFpbCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHN0cnVjdF9vcHNfYXJlbmFfZmFpbCAqc2tlbDsKJiM0MzsKJiM0MzsJc2tlbCA9IHN0cnVjdF9vcHNfYXJlbmFfZmFpbF9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoQVNTRVJUX0VSUl9QVFIoc2tlbCwgJiMzNDtzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWxfX29wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXN0cnVjdF9vcHNfYXJlbmFfZmFpbF9fZGVzdHJveShza2VsKTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBTZXJpYWxpemVkIGJlY2F1c2UgaXQgYXR0YWNoZXMgdGhlIHNpbmdsZXRvbiBicGZfdGVzdG1vZF9vcHMzLCB3aGljaAomIzQzOyAqIHRlc3Rfc3RydWN0X29wc19wcml2YXRlX3N0YWNrIGFsc28gYXR0YWNoZXM7IHJlZ2lzdGVyaW5nIGl0IHR3aWNlIGZhaWxzCiYjNDM7ICogd2l0aCAtRUVYSVNULgomIzQzOyAqLwomIzQzO3ZvaWQgc2VyaWFsX3Rlc3Rfc3RydWN0X29wc19hcmVuYSh2b2lkKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBvbmx5LgomIzQzOwkgKiBFbHNld2hlcmUgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGggJiMzNDtKSVQgZG9lcyBub3Qgc3VwcG9ydCBhcmVuYQomIzQzOwkgKiBhcmd1bWVudHMmIzM0Oywgc28gdGhlIHByb2dyYW1zIGNhbm5vdCBldmVuIGxvYWQuCiYjNDM7CSAqLwomIzQzOyNpZiBkZWZpbmVkKF9feDg2XzY0X18pCiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YXJlbmFfYXJnJiMzNDspKQomIzQzOwkJYXJlbmFfYXJnKCk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YXJlbmFfYXJnX2ZhaWwmIzM0OykpCiYjNDM7CQlhcmVuYV9hcmdfZmFpbCgpOwomIzQzOyNlbHNlCiYjNDM7CXRlc3RfX3NraXAoKTsKJiM0MzsjZW5kaWYKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjE1ZDQ4MTUxNzk3ZGEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYwpAQCAtMCwwICYjNDM7MSwyNjAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi8KJiM0MzsKJiM0MzsjZGVmaW5lIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTCiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9leHBlcmltZW50YWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZl9hcmVuYV9jb21tb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCYjMzQ7CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7CiYjNDM7CV9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTsKJiM0MzsJLyogcGFnZSAwIGhvc3RzIHRoZSBhcmVuYSBnbG9iYWwsIHBhZ2UgMSBpcyBmb3IgYWxsb2NhdGlvbnMgKi8KJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAyKTsKJiM0Mzt9IGFyZW5hIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzOy8qCiYjNDM7ICogT2NjdXBpZXMgcGFnZSAwIHNvIG5vIGFsbG9jYXRpb24gbGFuZHMgYXQgYXJlbmEgb2Zmc2V0IDAsIHdoaWNoIHRoZQomIzQzOyAqIG51bGxhYmxlIHRlc3RzIGJlbG93IG11c3QgYmUgYWJsZSB0byB0ZWxsIGFwYXJ0IGZyb20gTlVMTC4KJiM0MzsgKi8KJiM0Mzt1NjQgX19hcmVuYSBhcmVuYV9wYWQ7CiYjNDM7CiYjNDM7Lyogdm9sYXRpbGUgdG8gZm9yY2UgdGhlIHNjYWxhciByZWxvYWRzIGJlbG93ICovCiYjNDM7dm9sYXRpbGUgdTY0IHN0YXNoOwomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApCiYjNDM7aW50IGFyZW5hX2FyZ19mb3Jtcyh2b2lkICpjdHgpCiYjNDM7ewomIzQzOyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKQomIzQzOwl1NjQgX19hcmVuYSAqdmFsOwomIzQzOwl1NjQgcmV0OwomIzQzOwomIzQzOwl2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoJmFtcDthcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJLyogUFRSX1RPX0FSRU5BIGFyZ3VtZW50ICovCiYjNDM7CSp2YWwgPSA0MTsKJiM0MzsJcmV0ID0gYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KCh1NjQgKil2YWwpOwomIzQzOwlpZiAocmV0ICE9IDQxIHx8ICp2YWwgIT0gNDIpCiYjNDM7CQlyZXR1cm4gMjsKJiM0MzsKJiM0MzsJLyogdGhlIGxvdyAzMiBiaXRzIGFzIGEgc2NhbGFyICovCiYjNDM7CXN0YXNoID0gKHUzMikodTY0KXZhbDsKJiM0MzsJcmV0ID0gYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KCh1NjQgKilzdGFzaCk7CiYjNDM7CWlmIChyZXQgIT0gNDIgfHwgKnZhbCAhPSA0MykKJiM0MzsJCXJldHVybiAzOwomIzQzOwomIzQzOwkvKiB0aGUgZnVsbCB1c2VyIGFkZHJlc3MgYXMgYSBzY2FsYXIgKi8KJiM0MzsJc3Rhc2ggPSAodTY0KXZhbDsKJiM0MzsJYnBmX2FkZHJfc3BhY2VfY2FzdChzdGFzaCwgMSwgMCk7CiYjNDM7CXJldCA9IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopc3Rhc2gpOwomIzQzOwlpZiAocmV0ICE9IDQzIHx8ICp2YWwgIT0gNDQpCiYjNDM7CQlyZXR1cm4gNDsKJiM0MzsKJiM0MzsJYnBmX2FyZW5hX2ZyZWVfcGFnZXMoJmFtcDthcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7CiYjNDM7I2VuZGlmCiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFBpbiB0aGUgcmViYXNlIHNlbWFudGljcyB1c2luZyB0aGUgY2FwdHVyZSBrZnVuY3MsIHdoaWNoIHJldHVybiB0aGUgcmF3CiYjNDM7ICogYXJndW1lbnQgdmFsdWU6IF9fYXJlbmEgcmViYXNlcyB1bmNvbmRpdGlvbmFsbHksIHNvIHplcm8gbG93IDMyIGJpdHMKJiM0MzsgKiBhcnJpdmUgYXMgdGhlIGFyZW5hIGtlcm5lbCBiYXNlLCB3aGlsZSBfX2FyZW5hX251bGxhYmxlIHR1cm5zIHRoZW0gaW50bwomIzQzOyAqIE5VTEwuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztpbnQgYXJlbmFfYXJnX3JlYmFzZSh2b2lkICpjdHgpCiYjNDM7ewomIzQzOyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKQomIzQzOwl1NjQgX19hcmVuYSAqdmFsOwomIzQzOwl1NjQgYmFzZSwgb2ZmOwomIzQzOwomIzQzOwl2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoJmFtcDthcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJYmFzZSA9IGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdChOVUxMKTsKJiM0MzsJaWYgKCFiYXNlKQomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CiYjNDM7CS8qIG9ubHkgdGhlIGxvdyAzMiBiaXRzIGNvbnRyaWJ1dGUgKi8KJiM0MzsJc3Rhc2ggPSAweGJhZGMwZmZlMDAwMDAwMDA7CiYjNDM7CWlmIChicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QoKHU2NCAqKXN0YXNoKSAhPSBiYXNlKQomIzQzOwkJcmV0dXJuIDM7CiYjNDM7CiYjNDM7CW9mZiA9ICh1MzIpKHU2NCl2YWw7CiYjNDM7CWlmIChicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QoKHU2NCAqKXZhbCkgIT0gYmFzZSAmIzQzOyBvZmYpCiYjNDM7CQlyZXR1cm4gNDsKJiM0MzsKJiM0MzsJaWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdChOVUxMKSAhPSAwKQomIzQzOwkJcmV0dXJuIDU7CiYjNDM7CiYjNDM7CXN0YXNoID0gMHhiYWRjMGZmZTAwMDAwMDAwOwomIzQzOwlpZiAoYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KCh1NjQgKilzdGFzaCkgIT0gMCkKJiM0MzsJCXJldHVybiA2OwomIzQzOwomIzQzOwlpZiAoYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KCh1NjQgKil2YWwpICE9IGJhc2UgJiM0Mzsgb2ZmKQomIzQzOwkJcmV0dXJuIDc7CiYjNDM7CiYjNDM7CWJwZl9hcmVuYV9mcmVlX3BhZ2VzKCZhbXA7YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpOwomIzQzOyNlbmRpZgomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztpbnQgYXJlbmFfYXJnX251bGxhYmxlKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7I2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpCiYjNDM7CXU2NCBfX2FyZW5hICp2YWw7CiYjNDM7CXU2NCByZXQ7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwkqdmFsID0gNDE7CiYjNDM7CXJldCA9IGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdCgodTY0ICopdmFsKTsKJiM0MzsJaWYgKHJldCAhPSA0MSB8fCAqdmFsICE9IDQyKQomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CiYjNDM7CWlmIChicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QoTlVMTCkgIT0gMHhkZWFkYmVlZikKJiM0MzsJCXJldHVybiAzOwomIzQzOwomIzQzOwlicGZfYXJlbmFfZnJlZV9wYWdlcygmYW1wO2FyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTsKJiM0MzsjZW5kaWYKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApCiYjNDM7aW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7I2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpCiYjNDM7CXU2NCBfX2FyZW5hICp2YWw7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwl2YWxbMF0gPSAxOwomIzQzOwl2YWxbMV0gPSAyOwomIzQzOwl2YWxbMl0gPSA0OwomIzQzOwl2YWxbM10gPSA4OwomIzQzOwl2YWxbNF0gPSAxNjsKJiM0MzsKJiM0MzsJaWYgKGJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KCh1NjQgKikmYW1wO3ZhbFswXSwgKHU2NCAqKSZhbXA7dmFsWzFdLAomIzQzOwkJCQkgICAgICAgKHU2NCAqKSZhbXA7dmFsWzJdLCAodTY0ICopJmFtcDt2YWxbM10sCiYjNDM7CQkJCSAgICAgICAodTY0ICopJmFtcDt2YWxbNF0pICE9IDMxKQomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CWlmIChicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdCgodTY0ICopJmFtcDt2YWxbMF0sICh1NjQgKikmYW1wO3ZhbFsxXSwKJiM0MzsJCQkJICAgICAgICh1NjQgKikmYW1wO3ZhbFsyXSwgKHU2NCAqKSZhbXA7dmFsWzNdLCBOVUxMKSAhPSAxNSkKJiM0MzsJCXJldHVybiAzOwomIzQzOwomIzQzOwlicGZfYXJlbmFfZnJlZV9wYWdlcygmYW1wO2FyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTsKJiM0MzsjZW5kaWYKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApCiYjNDM7aW50IGFyZW5hX2FyZ19taXhlZCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKQomIzQzOwl1NjQgX19hcmVuYSAqdmFsOwomIzQzOwomIzQzOwl2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoJmFtcDthcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJdmFsWzBdID0gNzsKJiM0MzsJdmFsWzFdID0gNTsKJiM0MzsKJiM0MzsJaWYgKGJwZl9rZnVuY19hcmVuYV9taXhlZF90ZXN0KCh1NjQgKikmYW1wO3ZhbFswXSwgTlVMTCkgIT0gNykKJiM0MzsJCXJldHVybiAyOwomIzQzOwomIzQzOwlpZiAoYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QoKHU2NCAqKSZhbXA7dmFsWzBdLCAodTY0ICopJmFtcDt2YWxbMV0pICE9IDEyKQomIzQzOwkJcmV0dXJuIDM7CiYjNDM7CiYjNDM7CWJwZl9hcmVuYV9mcmVlX3BhZ2VzKCZhbXA7YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpOwomIzQzOyNlbmRpZgomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7Lyoga2VybmVsLXNpZGUgZmF1bHRzIG9uIHVucG9wdWxhdGVkIHBhZ2VzIHJlY292ZXIgdmlhIHRoZSBzY3JhdGNoIHBhZ2UgKi8KJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKQomIzQzO2ludCBhcmVuYV9hcmdfdW5wb3B1bGF0ZWQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkKJiM0MzsJdTY0IF9fYXJlbmEgKnZhbDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCZhbXA7YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CXN0YXNoID0gKHU2NCl2YWwgJiM0MzsgUEFHRV9TSVpFOwomIzQzOwlicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoKHU2NCAqKXN0YXNoKTsKJiM0MzsKJiM0MzsJYnBmX2FyZW5hX2ZyZWVfcGFnZXMoJmFtcDthcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7CiYjNDM7I2VuZGlmCiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2FyZW5hIHBvaW50ZXIgcmVxdWlyZXMgYSBwcm9ncmFtIHdpdGggYW4gYXNzb2NpYXRlZCBhcmVuYSYjMzQ7KQomIzQzO2ludCBhcmVuYV9hcmdfbm9fYXJlbmEodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KCh1NjQgKikxKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7aXMgbm90IGEgcG9pbnRlciB0byBhcmVuYSBvciBzY2FsYXImIzM0OykKJiM0MztpbnQgYXJlbmFfYXJnX2JhZF9yZWcodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJdTY0IGJ1ZiA9IDA7CiYjNDM7CiYjNDM7CS8qIHVzZSB0aGUgYXJlbmEgc28gdGhlIHByb2dyYW0gcGFzc2VzIHRoZSBhcmVuYSBwcmVzZW5jZSBjaGVjayAqLwomIzQzOwlicGZfYXJlbmFfYWxsb2NfcGFnZXMoJmFtcDthcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTsKJiM0MzsJYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KCZhbXA7YnVmKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSAmYW1wOyZhbXA7IFwKJiM0MzsJZGVmaW5lZChfX0JQRl9GRUFUVVJFX1NUQUNLX0FSR1VNRU5UKQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7YXJlbmEgcG9pbnRlciBjYW5ub3QgYmUgYSBzdGFjayBhcmd1bWVudCYjMzQ7KQomIzQzO2ludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCZhbXA7YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7CiYjNDM7CWJwZl9rZnVuY19hcmVuYV9zdGFja19hcmdfdGVzdCgxLCAyLCAzLCA0LCA1LCAodTY0ICopMSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19kZXNjcmlwdGlvbigmIzM0O2FyZW5hX2FyZ19zdGFjazogbm90IHN1cHBvcnRlZCwgZHVtbXkgdGVzdCYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi44NDc0NzYxMTcyNWY2Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jCkBAIC0wLDAgJiM0MzsxLDk2IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBWZXJpZnkgdGhlIEpJVC1lbWl0dGVkIHJlYmFzZSBzZXF1ZW5jZXMgZm9yIF9fYXJlbmEgYW5kIF9fYXJlbmFfbnVsbGFibGUKJiM0MzsgKiBrZnVuYyBhcmd1bWVudHMuIFRoZSBjYXB0dXJlIGtmdW5jcyB0YWtlIHRoZSBhcmd1bWVudCB3aXRob3V0CiYjNDM7ICogZGVyZWZlcmVuY2luZyBpdCwgc28gdGhlc2UgdGVzdHMgcGluIG9ubHkgdGhlIGVtaXR0ZWQgY29kZS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTCiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9leHBlcmltZW50YWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZl9hcmVuYV9jb21tb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCYjMzQ7CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7CiYjNDM7CV9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxKTsKJiM0Mzt9IGFyZW5hIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzOy8qIHZvbGF0aWxlIHRvIGZvcmNlIHRoZSBzY2FsYXIgcmVsb2FkcyBiZWxvdyAqLwomIzQzO3ZvbGF0aWxlIHU2NCBzdGFzaDsKJiM0MzsKJiM0MzsjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkKJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1vdmwJJWVkaSwgJWVkaSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkcQklcjEyLCAlcmRpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Oy4uLiYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJY2FsbHEJe3suKn19JiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IGFyZW5hX2FyZ19qaXRfcmViYXNlKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0YXNoID0gKHU2NClicGZfYXJlbmFfYWxsb2NfcGFnZXMoJmFtcDthcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTsKJiM0MzsJYnBmX2tmdW5jX2FyZW5hX2NhcF90ZXN0KCh1NjQgKilzdGFzaCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1vdmwJJWVkaSwgJWVkaSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJdGVzdGwJJWVkaSwgJWVkaSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJamUJe3suKn19JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGRxCSVyMTIsICVyZGkmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgYXJlbmFfYXJnX2ppdF9udWxsYWJsZSh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdGFzaCA9ICh1NjQpYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCZhbXA7YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7CiYjNDM7CWJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdCgodTY0ICopc3Rhc2gpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Owltb3ZsCSVlZGksICVlZGkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZHEJJXIxMiwgJXJkaSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbW92bAklZXNpLCAlZXNpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGRxCSVyMTIsICVyc2kmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1vdmwJJWVkeCwgJWVkeCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkcQklcjEyLCAlcmR4JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Owltb3ZsCSVlY3gsICVlY3gmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZHEJJXIxMiwgJXJjeCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbW92bAklcjhkLCAlcjhkJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Owl0ZXN0bAklcjhkLCAlcjhkJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlqZQl7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZHEJJXIxMiwgJXI4JiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IGFyZW5hX2FyZ19qaXRfYXJnczUodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJdTY0IF9fYXJlbmEgKnZhbDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCZhbXA7YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CXZhbFswXSA9IDE7CiYjNDM7CXZhbFsxXSA9IDI7CiYjNDM7CXZhbFsyXSA9IDQ7CiYjNDM7CXZhbFszXSA9IDg7CiYjNDM7CXZhbFs0XSA9IDE2OwomIzQzOwomIzQzOwlicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdCgodTY0ICopJmFtcDt2YWxbMF0sICh1NjQgKikmYW1wO3ZhbFsxXSwKJiM0MzsJCQkJICAgKHU2NCAqKSZhbXA7dmFsWzJdLCAodTY0ICopJmFtcDt2YWxbM10sCiYjNDM7CQkJCSAgICh1NjQgKikmYW1wO3ZhbFs0XSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsjZW5kaWYgLyogX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QgKi8KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5iYTA0YzczZDhkOTY3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuYwpAQCAtMCwwICYjNDM7MSwxMTUgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi8KJiM0MzsKJiM0MzsjZGVmaW5lIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTCiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfZXhwZXJpbWVudGFsLmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDticGZfYXJlbmFfY29tbW9uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Li4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oJiMzNDsKJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7CiYjNDM7CV9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTsKJiM0MzsJLyogcGFnZSAwIGhvc3RzIHRoZSBhcmVuYSBnbG9iYWxzLCBwYWdlIDEgaXMgZm9yIGFsbG9jYXRpb25zICovCiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMik7CiYjNDM7fSBhcmVuYSBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MzsvKiBhbHNvIGFzc29jaWF0ZXMgdGhlIGNhbGxiYWNrcyB3aXRoIHRoZSBhcmVuYSAqLwomIzQzO3U2NCBfX2FyZW5hIGFyZW5hX3RvdWNoOwomIzQzOy8qIHJhdyB2YWx1ZSBvZiB0aGUgbGFzdCBfX2FyZW5hIGN0eCBhcmd1bWVudCwgY2FwdHVyZWQgYnkgdGVzdF9hcmVuYV9jYiAqLwomIzQzO3U2NCBfX2FyZW5hIGNiX3B0cl92YWw7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3RydWN0X29wcy90ZXN0X2FyZW5hJiMzNDspCiYjNDM7aW50IHRlc3RfYXJlbmFfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpCiYjNDM7ewomIzQzOwl1NjQgX19hcmVuYSAqcHRyID0gKHU2NCBfX2FyZW5hICopY3R4WzBdOwomIzQzOwomIzQzOwlhcmVuYV90b3VjaCYjNDM7JiM0Mzs7CiYjNDM7CWNiX3B0cl92YWwgPSBjdHhbMF07CiYjNDM7CSpwdHIgJiM0Mzs9IDE7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmFfbnVsbGFibGUmIzM0OykKJiM0MztpbnQgdGVzdF9hcmVuYV9udWxsYWJsZV9jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eCkKJiM0Mzt7CiYjNDM7CXU2NCBfX2FyZW5hICpwdHIgPSAodTY0IF9fYXJlbmEgKiljdHhbMF07CiYjNDM7CiYjNDM7CWFyZW5hX3RvdWNoJiM0MzsmIzQzOzsKJiM0MzsJaWYgKCFwdHIpCiYjNDM7CQlyZXR1cm4gMHhiZWU7CiYjNDM7CSpwdHIgJiM0Mzs9IDE7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmFfc3RhY2smIzM0OykKJiM0MztpbnQgdGVzdF9hcmVuYV9zdGFja19jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eCkKJiM0Mzt7CiYjNDM7CXU2NCBfX2FyZW5hICpwdHIgPSAodTY0IF9fYXJlbmEgKiljdHhbOF07CiYjNDM7CiYjNDM7CWFyZW5hX3RvdWNoJiM0MzsmIzQzOzsKJiM0MzsJLyogcGluIHRoZSBzbG90IGxheW91dDogdGhlIGxlYWRpbmcgYXJncyBmaWxsIGN0eFswXS4uY3R4WzddICovCiYjNDM7CWlmIChjdHhbMF0gIT0gMSB8fCBjdHhbN10gIT0gOCkKJiM0MzsJCXJldHVybiAweGJhZDsKJiM0MzsJKnB0ciAmIzQzOz0gMTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oy5zdHJ1Y3Rfb3BzLmxpbmsmIzM0OykKJiM0MztzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB0ZXN0bW9kX2FyZW5hID0gewomIzQzOwkudGVzdF9hcmVuYSA9ICh2b2lkICopdGVzdF9hcmVuYV9jYiwKJiM0MzsJLnRlc3RfYXJlbmFfbnVsbGFibGUgPSAodm9pZCAqKXRlc3RfYXJlbmFfbnVsbGFibGVfY2IsCiYjNDM7CS50ZXN0X2FyZW5hX3N0YWNrID0gKHZvaWQgKil0ZXN0X2FyZW5hX3N0YWNrX2NiLAomIzQzO307CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO2ludCB0cmlnZ2VyKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7I2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpCiYjNDM7CXU2NCBfX2FyZW5hICp2YWw7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwkqdmFsID0gNDE7CiYjNDM7CXJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKCh1NjQgKil2YWwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CWlmICgqdmFsICE9IDQyKQomIzQzOwkJcmV0dXJuIDM7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBjYWxsYmFjayBtdXN0IGhhdmUgc2VlbiBleGFjdGx5ICh1MzIpKGthZGRyIC0ga2Vybl92bV9zdGFydCksCiYjNDM7CSAqIHdoaWNoIGlzIHRoZSBhcmVuYSBvZmZzZXQgb2YgdmFsIHdpdGggdGhlIHVwcGVyIDMyIGJpdHMgY2xlYXIuCiYjNDM7CSAqLwomIzQzOwlpZiAoY2JfcHRyX3ZhbCAhPSAodTMyKSh1NjQpdmFsKQomIzQzOwkJcmV0dXJuIDQ7CiYjNDM7CiYjNDM7CXJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKCh1NjQgKil2YWwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIDU7CiYjNDM7CWlmICgqdmFsICE9IDQzKQomIzQzOwkJcmV0dXJuIDY7CiYjNDM7CiYjNDM7CS8qIE5VTEwgc3Vydml2ZXMgdGhlIG51bGxhYmxlIGtmdW5jIGFuZCB0aGUgdHJhbXBvbGluZSBhcyBOVUxMICovCiYjNDM7CXJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKE5VTEwpOwomIzQzOwlpZiAocmV0ICE9IDB4YmVlKQomIzQzOwkJcmV0dXJuIDc7CiYjNDM7CiYjNDM7CS8qIHRoZSBhcmVuYSBwb2ludGVyIGlzIHN0YWNrLXBhc3NlZCBpbnRvIHRoZSB0cmFtcG9saW5lIGhlcmUgKi8KJiM0MzsJcmV0ID0gYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2soKHU2NCAqKXZhbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gODsKJiM0MzsJaWYgKCp2YWwgIT0gNDQpCiYjNDM7CQlyZXR1cm4gOTsKJiM0MzsKJiM0MzsJYnBmX2FyZW5hX2ZyZWVfcGFnZXMoJmFtcDthcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7CiYjNDM7I2VuZGlmCiYjNDM7CXJldHVybiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4xYzBlYzcyN2Q2Mzc0Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5jCkBAIC0wLDAgJiM0MzsxLDIwIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmgmIzM0OwomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKJiM0MzsKJiM0MzsvKiBObyBhcmVuYSBpbiB0aGUgcHJvZ3JhbTogYXR0YWNoaW5nIHRvIHRlc3RfYXJlbmEgbXVzdCBiZSByZWplY3RlZC4gKi8KJiM0MztTRUMoJiMzNDtzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmEmIzM0OykKJiM0MztpbnQgdGVzdF9hcmVuYV9ub19hcmVuYSh1bnNpZ25lZCBsb25nIGxvbmcgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDsuc3RydWN0X29wcy5saW5rJiMzNDspCiYjNDM7c3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYV9mYWlsID0gewomIzQzOwkudGVzdF9hcmVuYSA9ICh2b2lkICopdGVzdF9hcmVuYV9ub19hcmVuYSwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMKaW5kZXggZWIwZjliNWUxOGQ4NS4uZmRlYWE1NjM1NmI1MiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jCkBAIC0yMzcsNiAmIzQzOzIzNyw1NiBAQCBfX2JwZl9rZnVuYyB2b2lkIGJwZl9rZnVuY19jb21tb25fdGVzdCh2b2lkKQogewogfQogCiYjNDM7X19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCh1NjQgKnZhbF9fYXJlbmEpCiYjNDM7ewomIzQzOwl1NjQgb2xkOwomIzQzOwomIzQzOwlvbGQgPSAqdmFsX19hcmVuYTsKJiM0MzsJKnZhbF9fYXJlbmEgPSBvbGQgJiM0MzsgMTsKJiM0MzsJcmV0dXJuIG9sZDsKJiM0Mzt9CiYjNDM7CiYjNDM7X19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdCh1NjQgKnZhbF9fYXJlbmFfbnVsbGFibGUpCiYjNDM7ewomIzQzOwl1NjQgb2xkOwomIzQzOwomIzQzOwlpZiAoIXZhbF9fYXJlbmFfbnVsbGFibGUpCiYjNDM7CQlyZXR1cm4gMHhkZWFkYmVlZjsKJiM0MzsKJiM0MzsJb2xkID0gKnZhbF9fYXJlbmFfbnVsbGFibGU7CiYjNDM7CSp2YWxfX2FyZW5hX251bGxhYmxlID0gb2xkICYjNDM7IDE7CiYjNDM7CXJldHVybiBvbGQ7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QodTY0ICp2YWxfX2FyZW5hKQomIzQzO3sKJiM0MzsJcmV0dXJuICh1NjQpdmFsX19hcmVuYTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdCh1NjQgKnZhbF9fYXJlbmFfbnVsbGFibGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gKHU2NCl2YWxfX2FyZW5hX251bGxhYmxlOwomIzQzO30KJiM0MzsKJiM0MztfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QodTY0ICphX19hcmVuYSwgdTY0ICpiX19hcmVuYSwKJiM0MzsJCQkJCSAgIHU2NCAqY19fYXJlbmEsIHU2NCAqZF9fYXJlbmEsCiYjNDM7CQkJCQkgICB1NjQgKmVfX2FyZW5hX251bGxhYmxlKQomIzQzO3sKJiM0MzsJcmV0dXJuICphX19hcmVuYSAmIzQzOyAqYl9fYXJlbmEgJiM0MzsgKmNfX2FyZW5hICYjNDM7ICpkX19hcmVuYSAmIzQzOwomIzQzOwkgICAgICAgKGVfX2FyZW5hX251bGxhYmxlID8gKmVfX2FyZW5hX251bGxhYmxlIDogMCk7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfc3RhY2tfYXJnX3Rlc3QodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsIHU2NCBlLAomIzQzOwkJCQkJCXU2NCAqZl9fYXJlbmEpCiYjNDM7ewomIzQzOwlyZXR1cm4gYSAmIzQzOyBiICYjNDM7IGMgJiM0MzsgZCAmIzQzOyBlICYjNDM7ICpmX19hcmVuYTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9taXhlZF90ZXN0KHU2NCAqYV9fYXJlbmEsIHU2NCAqYl9fYXJlbmFfbnVsbGFibGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gKmFfX2FyZW5hICYjNDM7IChiX19hcmVuYV9udWxsYWJsZSA/ICpiX19hcmVuYV9udWxsYWJsZSA6IDApOwomIzQzO30KJiM0MzsKIF9fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2R5bnB0cl90ZXN0KHN0cnVjdCBicGZfZHlucHRyICpwdHIsCiAJCQkJICAgICAgIHN0cnVjdCBicGZfZHlucHRyICpwdHJfX251bGxhYmxlKQogewpAQCAtMzQ3LDkgJiM0MzszOTcsMjkgQEAgc3RhdGljIGludCBicGZfdGVzdG1vZF90ZXN0XzQodm9pZCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYSh1NjQgKnB0cl9fYXJlbmEpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX251bGxhYmxlKHU2NCAqcHRyX19hcmVuYV9udWxsYWJsZSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2sodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsCiYjNDM7CQkJCQkgICAgICB1NjQgZSwgdTY0IGYsIHU2NCBnLCB1NjQgaCwKJiM0MzsJCQkJCSAgICAgIHU2NCAqcHRyX19hcmVuYSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyBfX2JwZl90ZXN0bW9kX29wczMgPSB7CiAJLnRlc3RfMSA9IGJwZl90ZXN0bW9kX3Rlc3RfMywKIAkudGVzdF8yID0gYnBmX3Rlc3Rtb2RfdGVzdF80LAomIzQzOwkudGVzdF9hcmVuYSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmEsCiYjNDM7CS50ZXN0X2FyZW5hX251bGxhYmxlID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9udWxsYWJsZSwKJiM0MzsJLnRlc3RfYXJlbmFfc3RhY2sgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrLAogfTsKIAogc3RhdGljIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3Rfb3BzMyh2b2lkKQpAQCAtMzY4LDYgJiM0Mzs0MzgsMjEgQEAgX19icGZfa2Z1bmMgdm9pZCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF8yKHZvaWQpCiAJc3Rfb3BzMy0mZ3Q7dGVzdF8yKCk7CiB9CiAKJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEodTY0ICpwdHJfX2FyZW5hKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN0X29wczMtJmd0O3Rlc3RfYXJlbmEocHRyX19hcmVuYSk7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZSh1NjQgKnB0cl9fYXJlbmFfbnVsbGFibGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3Rfb3BzMy0mZ3Q7dGVzdF9hcmVuYV9udWxsYWJsZShwdHJfX2FyZW5hX251bGxhYmxlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKHU2NCAqcHRyX19hcmVuYSkKJiM0Mzt7CiYjNDM7CXJldHVybiBzdF9vcHMzLSZndDt0ZXN0X2FyZW5hX3N0YWNrKDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIHB0cl9fYXJlbmEpOwomIzQzO30KJiM0MzsKIHN0cnVjdCBicGZfdGVzdG1vZF9idGZfdHlwZV90YWdfMSB7CiAJaW50IGE7CiB9OwpAQCAtNzU1LDYgJiM0Mzs4NDAsMTMgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxX25leHQsIEtGX0lURVJfTkVYVCB8IEtGX1JFVF9OVUxMKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxX2Rlc3Ryb3ksIEtGX0lURVJfREVTVFJPWSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl90ZXN0bW9kX3NlcV92YWx1ZSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY29tbW9uX3Rlc3QpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX251bGxhYmxlX2FyZ190ZXN0KQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdCkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19hcmVuYV9zdGFja19hcmdfdGVzdCkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9tZW1fbGVuX3Bhc3MxKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19keW5wdHJfdGVzdCkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfbmVzdGVkX2FjcXVpcmVfbm9uemVyb19vZmZzZXRfdGVzdCwgS0ZfQUNRVUlSRSkKQEAgLTc3MCw2ICYjNDM7ODYyLDkgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX2N0eF9jcmVhdGUsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTCkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9jdHhfcmVsZWFzZSwgS0ZfUkVMRUFTRSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF8xKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzIpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2spCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2dldF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpOwogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19wdXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTsKIEJURl9LRlVOQ1NfRU5EKGJwZl90ZXN0bW9kX2NvbW1vbl9rZnVuY19pZHMpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaAppbmRleCA4NjNmZDEwZjE2MTk5Li4zM2YyYWY1YjcwODU3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmgKQEAgLTEwNiw2ICYjNDM7MTA2LDEyIEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMyIHsKIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHsKIAlpbnQgKCp0ZXN0XzEpKHZvaWQpOwogCWludCAoKnRlc3RfMikodm9pZCk7CiYjNDM7CS8qIFVzZWQgdG8gdGVzdCBhcmVuYSBwb2ludGVyIGFyZ3VtZW50cy4gKi8KJiM0MzsJaW50ICgqdGVzdF9hcmVuYSkodTY0ICpwdHIpOwomIzQzOwlpbnQgKCp0ZXN0X2FyZW5hX251bGxhYmxlKSh1NjQgKnB0cik7CiYjNDM7CS8qIGVub3VnaCBsZWFkaW5nIGFyZ3MgdG8gZm9yY2UgQHB0ciBvbnRvIHRoZSBzdGFjayBvbiB4ODYgYW5kIGFybTY0ICovCiYjNDM7CWludCAoKnRlc3RfYXJlbmFfc3RhY2spKHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLCB1NjQgZSwgdTY0IGYsCiYjNDM7CQkJCXU2NCBnLCB1NjQgaCwgdTY0ICpwdHIpOwogfTsKIAogc3RydWN0IHN0X29wc19hcmdzIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oCmluZGV4IGMzNmJiOTExZGVmYTcuLjFhNzJkMGZkYTUzYzQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaApAQCAtOTgsNiAmIzQzOzk4LDE2IEBAIHZvaWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZWxlYXNlKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwKSBfX2tzeW07CiB2b2lkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmVmKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwKSBfX2tzeW07CiAKIHZvaWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9tZW1fbGVuX3Bhc3MxKHZvaWQgKm1lbSwgaW50IGxlbikgX19rc3ltOwomIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdChfX3U2NCAqdmFsX19hcmVuYSkgX19rc3ltOwomIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdChfX3U2NCAqdmFsX19hcmVuYV9udWxsYWJsZSkgX19rc3ltOwomIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdChfX3U2NCAqdmFsX19hcmVuYSkgX19rc3ltOwomIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdChfX3U2NCAqdmFsX19hcmVuYV9udWxsYWJsZSkgX19rc3ltOwomIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KF9fdTY0ICphX19hcmVuYSwgX191NjQgKmJfX2FyZW5hLAomIzQzOwkJCQkgX191NjQgKmNfX2FyZW5hLCBfX3U2NCAqZF9fYXJlbmEsCiYjNDM7CQkJCSBfX3U2NCAqZV9fYXJlbmFfbnVsbGFibGUpIF9fa3N5bTsKJiM0MztfX3U2NCBicGZfa2Z1bmNfYXJlbmFfc3RhY2tfYXJnX3Rlc3QoX191NjQgYSwgX191NjQgYiwgX191NjQgYywgX191NjQgZCwgX191NjQgZSwKJiM0MzsJCQkJICAgICBfX3U2NCAqZl9fYXJlbmEpIF9fa3N5bTsKJiM0MztfX3U2NCBicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdChfX3U2NCAqYV9fYXJlbmEsIF9fdTY0ICpiX19hcmVuYV9udWxsYWJsZSkgX19rc3ltOwogaW50ICpicGZfa2Z1bmNfY2FsbF90ZXN0X2dldF9yZHdyX21lbShzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyAqcCwgY29uc3QgaW50IHJkd3JfYnVmX3NpemUpIF9fa3N5bTsKIGludCAqYnBmX2tmdW5jX2NhbGxfdGVzdF9nZXRfcmRvbmx5X21lbShzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyAqcCwgY29uc3QgaW50IHJkb25seV9idWZfc2l6ZSkgX19rc3ltOwogaW50ICpicGZfa2Z1bmNfY2FsbF90ZXN0X2FjcV9yZG9ubHlfbWVtKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwLCBjb25zdCBpbnQgcmRvbmx5X2J1Zl9zaXplKSBfX2tzeW07CkBAIC0xMTEsNiAmIzQzOzEyMSw5IEBAIHUzMiBicGZfa2Z1bmNfY2FsbF90ZXN0X3N0YXRpY191bnVzZWRfYXJnKHUzMiBhcmcsIHUzMiB1bnVzZWQpIF9fa3N5bTsKICNlbmRpZgogCiB2b2lkIGJwZl90ZXN0bW9kX3Rlc3RfbW9kX2tmdW5jKGludCBpKSBfX2tzeW07CiYjNDM7aW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07CiYjNDM7aW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKF9fdTY0ICpwdHJfX2FyZW5hX251bGxhYmxlKSBfX2tzeW07CiYjNDM7aW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07CiAKIF9fdTY0IGJwZl9rZnVuY19jYWxsX3Rlc3QxKHN0cnVjdCBzb2NrICpzaywgX191MzIgYSwgX191NjQgYiwKIAkJCQlfX3UzMiBjLCBfX3U2NCBkKSBfX2tzeW07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE2OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDQ5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJQRiBBcmVuYSBQb2ludGVyIEltcGxlbWVudGF0aW9uIC0gSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgaW50cm9kdWNpbmcgYF9fYXJlbmFgIGFuZCBgX19hcmVuYV9udWxsYWJsZWAgYW5ub3RhdGlvbnMgZm9yIEJQRiBrZnVuYyBhbmQgc3RydWN0X29wcyBhcmd1bWVudHMuIFNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgaW1wYWN0aW5nIHRoZSBCUEYgdmVyaWZpZXIsIEpJVCBjb21waWxlciwgYW5kIHRyYW1wb2xpbmUgbG9naWMuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24sIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4KClRoZSBwYXRjaCB0b3VjaGVzIGEgYnVuY2ggb2YgZmlsZXM6IGBEb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0YCwgc29tZSBKSVQgY29tcGlsYXRpb24gY29kZSAoYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2ApLCB2YXJpb3VzIGluY2x1ZGUgZmlsZXMgKGBpbmNsdWRlL2xpbnV4L2JwZi5oYCwgYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgKSwgYW5kIGEgYnVuY2ggb2YgY29yZSBCUEYgY29kZSAoYGtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY2AsIGBrZXJuZWwvYnBmL2J0Zi5jYCwgYGtlcm5lbC9icGYvY29yZS5jYCwgYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCwgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2ApLCBhbmQgc29tZSBzZWxmdGVzdHMuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBhcmVhcyBvZiBpbnRlcmVzdCwgdGhlIGZvY3VzIHN5bWJvbHMuIExvb2tzIGxpa2UgaXQmIzM5O3MgaW50cm9kdWNpbmcgdGhlc2Ugc3RhdGljIGZ1bmN0aW9uczogYGVtaXRfa2Z1bmNfYXJlbmFfYXJnc2AsIGBlbWl0X2FyZW5hX2FyZ19jb252YCwgYHNhdmVfYXJnc2AsIGFuZCBtb2RpZnlpbmcgZnVuY3Rpb25zIGxpa2UgYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCwgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AsIGBwcmVwYXJlX2FyZ19pbmZvYCwgYXMgd2VsbCBhcyBgYnRmX2N0eF9hY2Nlc3NgLCBgX19nZXRfYXJnX2Ztb2RlbF9mbGFnc2AsIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYCwgYGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NgLCBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYCwgYGdldF9rZnVuY19hcmdfdHlwZWAsIGBjaGVja19rZnVuY19hcmdzYCwgYW5kIGBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZGAuCgpJIG5lZWQgdG8gbmFycm93IHRoaXMgZG93biB0byB0aGUgbW9zdCBjcml0aWNhbCBzeW1ib2xzLiBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IHdpdGggYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCwgYGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NgLCBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYCwgYGJ0Zl9jdHhfYWNjZXNzYCwgYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gLCBgZ2V0X2tmdW5jX2FyZ190eXBlYCwgYGNoZWNrX2tmdW5jX2FyZ3NgLCBhbmQgYGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkYC4gTGV0IG1lIHJlLWV2YWx1YXRlLCBzaW5jZSBJIHN1c3BlY3Qgc29tZSBvZiB0aGUgZm9jdXMgc3ltYm9scyBhcmUgb25seSBjYWxsZWQgaW4gYSBuYXJyb3cgc2V0IG9mIGNpcmN1bXN0YW5jZXMsIHN1Y2ggYXMgd2hlbiBwcmVwYXJpbmcgYSB0cmFtcG9saW5lLCB3aGljaCBJIHRoaW5rIG1lYW5zIEkgY2FuIHB1c2ggYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCB0byB0aGUgbG93ZXIgcHJpb3JpdHkgbGlzdC4KCmBicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzYCwgb24gdGhlIG90aGVyIGhhbmQsIHNlZW1zIGxpa2UgYSBnb29kIHRhcmdldC4gYGJ0Zl9jdHhfYWNjZXNzYCwgYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gLCBgZ2V0X2tmdW5jX2FyZ190eXBlYCwgYGNoZWNrX2tmdW5jX2FyZ3NgLCBhbmQgYGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkYCBhcmUgYWxsIGNhbGxlZCBkdXJpbmcgdmVyaWZpY2F0aW9uLCB3aGljaCBtZWFucyB0aGV5JiMzOTtyZSBhbHNvIGludGVyZXN0aW5nLgoKTm93LCBiZWZvcmUgSSBkaWcgdG9vIGRlZXAsIGxldCYjMzk7cyBjb25zaWRlciBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFNpbmNlIHRoaXMgaXMgaW4gdGhlIEJQRiBjb3JlLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIGdpdmVuLiBJIHNob3VsZCBwcm9iYWJseSBncmVwIGZvciBhbnkgZXhwbGljaXQgYENPTkZJR19CUEZfQVJFTkFgIG9wdGlvbnMgb3Igc2ltaWxhciwganVzdCBpbiBjYXNlIHRoZXJlJiMzOTtzIGEgY29uZmlndXJhdGlvbiBnYXRlLiBJIHdpbGwgY29uZmlybSB0byBhdm9pZCB3YXN0aW5nIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0JQRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz01OD1jb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNjQtXG5rZXJuZWwvYnBmL0tjb25maWc6NjU6XHQgIFdoZW4gQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OIGlzIGVuYWJsZWQsIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxua2VybmVsL2JwZi9LY29uZmlnLTY2LVx0ICBpcyBwZXJtYW5lbnRseSBzZXQgdG8gMSBhbmQgc2V0dGluZyBhbnkgb3RoZXIgdmFsdWUgdGhhbiB0aGF0IHdpbGxcbi0tXG5rZXJuZWwvYnBmL01ha2VmaWxlPTI9b2JqLXkgOj0gY29yZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM6aWZuZXEgKCQoQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZS00LSMgX19fYnBmX3Byb2dfcnVuKCkgbmVlZHMgR0NTRSBkaXNhYmxlZCBvbiB4ODY7IHNlZSAzMTkzYzA4MzZmMjAzIGZvciBkZXRhaWxzXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gJiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE1Om9iai0ke0NPTkZJR19CUEZfTFNNfVx0ICAmIzQzOz0gYnBmX2lub2RlX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkaXNhc20ubyBtcHJvZy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gdHJhbXBvbGluZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE5LWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIyOm9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gZGlzcGF0Y2hlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIzLWlmZXEgKCQoQ09ORklHX05FVCkseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZGV2bWFwLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY3B1bWFwLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gb2ZmbG9hZC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IG5ldF9uYW1lc3BhY2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZToyODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSB0Y3gub1xua2VybmVsL2JwZi9NYWtlZmlsZS0yOS1lbmRpZlxua2VybmVsL2JwZi9NYWtlZmlsZT0zMD1pZmVxICgkKENPTkZJR19QRVJGX0VWRU5UUykseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3RhY2ttYXAub1xua2VybmVsL2JwZi9NYWtlZmlsZS0zMi1lbmRpZlxua2VybmVsL2JwZi9NYWtlZmlsZT0zMz1pZmVxICgkKENPTkZJR19DR1JPVVBTKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZS0zNS1lbmRpZlxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9Mzc9aWZlcSAoJChDT05GSUdfSU5FVCkseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6Mzg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gcmV1c2Vwb3J0X2FycmF5Lm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMzktZW5kaWZcbi0tXG5rZXJuZWwvYnBmL01ha2VmaWxlPTQyPWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQzOmlmZXEgKCQoQ09ORklHX0JQRl9KSVQpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9zdHJ1Y3Rfb3BzLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6NDU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY3B1bWFzay5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTQ2LSMgYnBmX2xzbV9wcm90by5vIG11c3QgcHJlY2VkZSBicGZfbHNtLm8uIFRoZSBjdXJyZW50IHBhaG9sZSBsb2dpY1xuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGUtNTUtIyBzZW1hbnRpY3Mgd2l0aGluIHBhaG9sZSBhcmUgcmV2aXNpdGVkIGFjY29yZGluZ2x5Llxua2VybmVsL2JwZi9NYWtlZmlsZTo1NjpvYmotJHtDT05GSUdfQlBGX0xTTX0gJiM0Mzs9IGJwZl9sc21fcHJvdG8ubyBicGZfbHNtLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNTctZW5kaWZcbmtlcm5lbC9icGYvTWFrZWZpbGU9NTg9aWZuZXEgKCQoQ09ORklHX0NSWVBUTyksKVxua2VybmVsL2JwZi9NYWtlZmlsZTo1OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcnlwdG8ub1xua2VybmVsL2JwZi9NYWtlZmlsZS02MC1lbmRpZlxua2VybmVsL2JwZi9NYWtlZmlsZTo2MTpvYmotJChDT05GSUdfQlBGX1BSRUxPQUQpICYjNDM7PSBwcmVsb2FkL1xua2VybmVsL2JwZi9NYWtlZmlsZS02Mi1cbmtlcm5lbC9icGYvTWFrZWZpbGU6NjM6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gcmVsb19jb3JlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnRmX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZTo2NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGZfcmVsb2NhdGUub1xua2VybmVsL2JwZi9NYWtlZmlsZTo2NjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBrbWVtX2NhY2hlX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZS02Ny1pZmVxICgkKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6Njg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZG1hYnVmX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZS02OS1lbmRpZlxuLS1cbmtlcm5lbC9icGYvYnRmLmM9OTgzND1ib29sIGJ0Zl90eXBlX2lkc19ub2Nhc3RfYWxpYXMoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTk4ODgtXG5rZXJuZWwvYnBmL2J0Zi5jOjk4ODk6I2lmZGVmIENPTkZJR19CUEZfSklUXG5rZXJuZWwvYnBmL2J0Zi5jLTk4OTAtc3RhdGljIGludFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9NTI9dm9pZCBfX2luaXQgY2dyb3VwX2JwZl9saWZldGltZV9ub3RpZmllcl9pbml0KHZvaWQpXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy01Ny1cbmtlcm5lbC9icGYvY2dyb3VwLmM6NTg6I2lmZGVmIENPTkZJR19CUEZfTFNNXG5rZXJuZWwvYnBmL2Nncm91cC5jLTU5LXN0cnVjdCBjZ3JvdXBfbHNtX2F0eXBlIHtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE2Mj11bnNpZ25lZCBpbnQgX19jZ3JvdXBfYnBmX3J1bl9sc21fY3VycmVudChjb25zdCB2b2lkICpjdHgsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xODAtXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE4MTojaWZkZWYgQ09ORklHX0JQRl9MU01cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTgyLXN0YXRpYyBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGVcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTIzND1icGZfY2dyb3VwX2F0eXBlX2ZpbmQoZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUsIHUzMiBhdHRhY2hfYnRmX2lkKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMjM5LX1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MjQwOiNlbmRpZiAvKiBDT05GSUdfQlBGX0xTTSAqL1xua2VybmVsL2JwZi9jZ3JvdXAuYy0yNDEtXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MTAwPXN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfYWxsb2Nfbm9fc3RhdHModW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9leHRyYV9mbGFncylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0xMjgtXHRmcC1cdTAwM2VqaXRfcmVxdWVzdGVkID0gZWJwZl9qaXRfZW5hYmxlZCgpO1xua2VybmVsL2JwZi9jb3JlLmM6MTI5Olx0ZnAtXHUwMDNlaml0X3JlcXVpcmVkID0gSVNfRU5BQkxFRChDT05GSUdfQlBGX0pJVF9BTFdBWVNfT04pO1xua2VybmVsL2JwZi9jb3JlLmMtMTMwLVx0ZnAtXHUwMDNlYmxpbmRpbmdfcmVxdWVzdGVkID0gYnBmX2ppdF9ibGluZGluZ19lbmFibGVkKGZwKTtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0xNDMtXG5rZXJuZWwvYnBmL2NvcmUuYzoxNDQ6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9jb3JlLmMtMTQ1LVx0YnBmX3Byb2dfc3RyZWFtX2luaXQoZnApO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTU0MT12b2lkIGJwZl9wcm9nX2thbGxzeW1zX2RlbF9hbGwoc3RydWN0IGJwZl9wcm9nICpmcClcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy01NDYtXG5rZXJuZWwvYnBmL2NvcmUuYzo1NDc6I2lmZGVmIENPTkZJR19CUEZfSklUXG5rZXJuZWwvYnBmL2NvcmUuYy01NDgtLyogQWxsIEJQRiBKSVQgc3lzY3RsIGtub2JzIGhlcmUuICovXG5rZXJuZWwvYnBmL2NvcmUuYzo1NDk6aW50IGJwZl9qaXRfZW5hYmxlICAgX19yZWFkX21vc3RseSA9IElTX0JVSUxUSU4oQ09ORklHX0JQRl9KSVRfREVGQVVMVF9PTik7XG5rZXJuZWwvYnBmL2NvcmUuYzo1NTA6aW50IGJwZl9qaXRfa2FsbHN5bXMgX19yZWFkX21vc3RseSA9IElTX0JVSUxUSU4oQ09ORklHX0JQRl9KSVRfREVGQVVMVF9PTik7XG5rZXJuZWwvYnBmL2NvcmUuYy01NTEtaW50IGJwZl9qaXRfaGFyZGVuICAgX19yZWFkX21vc3RseTtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0xNjU1PXUxNiBicGZfb3V0X3N0YWNrX2FyZ19jbnQoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTE2NjMtfVxua2VybmVsL2JwZi9jb3JlLmM6MTY2NDojZW5kaWYgLyogQ09ORklHX0JQRl9KSVQgKi9cbmtlcm5lbC9icGYvY29yZS5jLTE2NjUtXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MTgyMz1ib29sIGJwZl9vcGNvZGVfaW5faW5zbnRhYmxlKHU4IGNvZGUpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMTg0NS1cbmtlcm5lbC9icGYvY29yZS5jOjE4NDY6I2lmbmRlZiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvY29yZS5jLTE4NDctLyogQWJzb2x1dGUgdmFsdWUgb2YgczMyIHdpdGhvdXQgdW5kZWZpbmVkIGJlaGF2aW9yIGZvciBTMzJfTUlOICovXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjQ3Mz1FVkFMNChQUk9HX05BTUVfTElTVCwgNDE2LCA0NDgsIDQ4MCwgNTEyKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI0NzYtXG5rZXJuZWwvYnBmL2NvcmUuYzoyNDc3OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jLTI0NzgtaW50IGJwZl9wYXRjaF9jYWxsX2FyZ3Moc3RydWN0IGJwZl9pbnNuICppbnNuLCB1MzIgc3RhY2tfZGVwdGgpXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjYxMD1zdGF0aWMgYm9vbCBicGZfcHJvZ19zZWxlY3RfaW50ZXJwcmV0ZXIoc3RydWN0IGJwZl9wcm9nICpmcClcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjEyLVx0Ym9vbCBzZWxlY3RfaW50ZXJwcmV0ZXIgPSBmYWxzZTtcbmtlcm5lbC9icGYvY29yZS5jOjI2MTM6I2lmbmRlZiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvY29yZS5jLTI2MTQtXHR1MzIgc3RhY2tfZGVwdGggPSBtYXhfdCh1MzIsIGZwLVx1MDAzZWF1eC1cdTAwM2VzdGFja19kZXB0aCwgMSk7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjYzMz1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjM0LXtcbmtlcm5lbC9icGYvY29yZS5jOjI2MzU6I2lmZGVmIENPTkZJR19CUEZfSklUXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjM2LVx0c3RydWN0IGJwZl9wcm9nICpvcmlnX3Byb2c7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzA1Nz12b2lkIF9fYnBmX2ZyZWVfdXNlZF9idGZzKHN0cnVjdCBidGZfbW9kX3BhaXIgKnVzZWRfYnRmcywgdTMyIGxlbilcbmtlcm5lbC9icGYvY29yZS5jLTMwNTgte1xua2VybmVsL2JwZi9jb3JlLmM6MzA1OTojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDYwLVx0c3RydWN0IGJ0Zl9tb2RfcGFpciAqYnRmX21vZDtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zMDc4PXN0YXRpYyB2b2lkIGJwZl9wcm9nX2ZyZWVfZGVmZXJyZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTMwODMtXHRhdXggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJwZl9wcm9nX2F1eCwgd29yayk7XG5rZXJuZWwvYnBmL2NvcmUuYzozMDg0OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jLTMwODUtXHRicGZfZnJlZV9rZnVuY19idGZfdGFiKGF1eC1cdTAwM2VrZnVuY19idGZfdGFiKTtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zNDA1PXN0YXRpYyBub2lubGluZSB2b2lkIGJwZl9wcm9nX3JlcG9ydF9tYXlfZ290b192aW9sYXRpb24odm9pZClcbmtlcm5lbC9icGYvY29yZS5jLTM0MDYte1xua2VybmVsL2JwZi9jb3JlLmM6MzQwNzojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDA4LVx0c3RydWN0IGJwZl9zdHJlYW1fc3RhZ2Ugc3M7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzQ0NT1fX3dlYWsgdTY0IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSlcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDQ5LVxua2VybmVsL2JwZi9jb3JlLmM6MzQ1MDojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDUxLV9fd2VhayBib29sIGJwZl9hcmVuYV9oYW5kbGVfcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgaXNfd3JpdGUsXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzQ3Nj1FWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKHhkcF9idWxrX3R4KTtcbmtlcm5lbC9icGYvY29yZS5jLTM0NzctXG5rZXJuZWwvYnBmL2NvcmUuYzozNDc4OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jLTM0NzktXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0xMjc9c3RhdGljIGludCBhZGRfa2Z1bmNfaW5faW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE0MS1cbmtlcm5lbC9icGYvZml4dXBzLmM6MTQyOiNpZm5kZWYgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE0My1zdGF0aWMgaW50IGdldF9jYWxsZWVfc3RhY2tfZGVwdGgoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTEzNzY9aW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvZml4dXBzLmMtMTM3Ny17XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjEzNzg6I2lmbmRlZiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvZml4dXBzLmMtMTM3OS1cdHN0cnVjdCBicGZfcHJvZyAqcHJvZyA9IGVudi1cdTAwM2Vwcm9nO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTQwNC1cdH1cbmtlcm5lbC9icGYvZml4dXBzLmM6MTQwNTojaWZuZGVmIENPTkZJR19CUEZfSklUX0FMV0FZU19PTlxua2VybmVsL2JwZi9maXh1cHMuYy0xNDA2LVx0aWYgKHByb2ctXHUwMDNlaml0X3JlcXVpcmVkKSB7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9Mjc2PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X2N1cnJlbnRfY29tbV9wcm90byA9IHtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yODMtXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyODQ6I2lmIGRlZmluZWQoQ09ORklHX1FVRVVFRF9TUElOTE9DS1MpIHx8IGRlZmluZWQoQ09ORklHX0JQRl9BUkNIX1NQSU5MT0NLKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjg1LVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ4NTA9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90aHJvdylcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4NTE6I2lmZGVmIENPTkZJR19CUEZfRVZFTlRTXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODUyLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfc2VuZF9zaWduYWxfdGFzaylcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00OTMwPUJURl9JRF9GTEFHUyhmdW5jLCBicGZfbG9jYWxfaXJxX3Jlc3RvcmUpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTMxOiNpZmRlZiBDT05GSUdfQlBGX0VWRU5UU1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDkzMi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3Byb2JlX3JlYWRfdXNlcl9keW5wdHIpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk2MT1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cm5jYXNlc3RyKTtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5NjI6I2lmIGRlZmluZWQoQ09ORklHX0JQRl9MU00pIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19DR1JPVVBTKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk2My1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2Nncm91cF9yZWFkX3hhdHRyLCBLRl9SQ1UpXG4tLVxua2VybmVsL2JwZi9wcmVsb2FkL01ha2VmaWxlPTM9TElCQlBGX0lOQ0xVREUgPSAkKHNyY3RyZWUpL3Rvb2xzL2xpYlxua2VybmVsL2JwZi9wcmVsb2FkL01ha2VmaWxlLTQtXG5rZXJuZWwvYnBmL3ByZWxvYWQvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfQlBGX1BSRUxPQURfVU1EKSAmIzQzOz0gYnBmX3ByZWxvYWQub1xua2VybmVsL2JwZi9wcmVsb2FkL01ha2VmaWxlLTYtQ0ZMQUdTX2JwZl9wcmVsb2FkX2tlcm4ubyAmIzQzOz0gLUkkKExJQkJQRl9JTkNMVURFKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTY4PWludCBzeXNjdGxfdW5wcml2aWxlZ2VkX2JwZl9kaXNhYmxlZCBfX3JlYWRfbW9zdGx5ID1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY5Olx0SVNfQlVJTFRJTihDT05GSUdfQlBGX1VOUFJJVl9ERUZBVUxUX09GRikgPyAyIDogMDtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTcwLVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTY1MTg9aW50IGtlcm5fc3lzX2JwZihpbnQgY21kLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgdW5zaWduZWQgaW50IHNpemUpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjUyMy1cdHN3aXRjaCAoY21kKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NTI0OiNpZmRlZiBDT05GSUdfQlBGX0pJVCAvKiBfX2JwZl9wcm9nX2VudGVyX3NsZWVwYWJsZSB1c2VkIGJ5IHRyYW1wb2xpbmUgYW5kIEpJVCAqL1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjUyNS1cdGNhc2UgQlBGX1BST0dfVEVTVF9SVU46XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTA1ND1pbnQgYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwNjUtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDY2OiNpZiBkZWZpbmVkKENPTkZJR19DR1JPVVBfQlBGKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQlBGX0xTTSlcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwNjctc3RhdGljIHZvaWQgYnBmX3NoaW1fdHJhbXBfbGlua19yZWxlYXNlKHN0cnVjdCBicGZfbGluayAqbGluaylcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNTQxPWludCBfX3dlYWsgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NDgtICAgIGRlZmluZWQoQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTKSBcdTAwMjZcdTAwMjYgXFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1NDk6ICAgIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU1MC1cbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzg2PWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xODIzLVx0ICBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxODI0Olx0ICBDT05GSUdfQlBGX1NZU0NBTEwgKi9cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE4MjUtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTQ0NjQ9QlRGX0lEKHN0cnVjdCwgY2dyb3VwKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ0NjUtI2VuZGlmXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDQ2NjojaWZkZWYgQ09ORklHX0JQRl9KSVRcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00NDY3LUJURl9JRChzdHJ1Y3QsIGJwZl9jcHVtYXNrKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTI3Mj1CVEZfSURfVU5VU0VEXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyNzMtI2VuZGlmXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEyNzQ6I2lmZGVmIENPTkZJR19CUEZfRVZFTlRTXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyNzUtQlRGX0lEKGZ1bmMsIGJwZl9zZXNzaW9uX2Nvb2tpZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEyODQ9QlRGX0lEKGZ1bmMsIGJwZl9pdGVyX251bV9kZXN0cm95KVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjg1OiNpZmRlZiBDT05GSUdfQlBGX0xTTVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjg2LUJURl9JRChmdW5jLCBicGZfc2V0X2RlbnRyeV94YXR0cilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEzMDM9QlRGX0lEKGZ1bmMsIGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMzA0OiNpZmRlZiBDT05GSUdfQlBGX0VWRU5UU1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzA1LUJURl9JRChmdW5jLCBicGZfc2Vzc2lvbl9pc19yZXR1cm4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5MzgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQXJlbmEgS0Z1bmMgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBfX2FyZW5hYCBhbmQgYF9fYXJlbmFfbnVsbGFibGVgIHN1cHBvcnQsIHdoaWNoIGlzIGdvb2QuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHRlc3Rpbmcgc3RyYXRlZ3kgdGhleSYjMzk7dmUgdXNlZC4gSSBzZWUgdGhlIHRlc3RzIGFyZSBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfa2Z1bmMuY2AsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9rZnVuY19qaXQuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNgLiBHb29kLCB0aGV5JiMzOTtyZSBjb21wcmVoZW5zaXZlLiBUaGV5IGFyZSByZWx5aW5nIG9uIGBicGZfdGVzdG1vZGAgYXMgZXhwZWN0ZWQuCgpJIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBidWlsZCBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UgdG8gcnVuIHRoZXNlIHRlc3RzLiBJIGFscmVhZHkga25vdyBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19CUEZfSklUYCBhcmUgcmVxdWlyZWQuIEkgdmFndWVseSByZWNhbGwgdGhlcmUgYmVpbmcgZWRnZSBjYXNlcyB3aGVyZSBgQ09ORklHX0JQRl9FVkVOVFNgIG1pZ2h0IGJlIG5lZWRlZCwgYnV0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBjcml0aWNhbCBvbmUuIEkgbmVlZCBgQ09ORklHX0JQRl9KSVRgIGZvciBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYCwgdGhhdCYjMzk7cyBvYnZpb3VzLiBBbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgbmVlZGVkIGZvciBgYXJlbmEub2AuCgpOb3csIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgaWYgYGJwZl90ZXN0bW9kYCBpdHNlbGYgaGFzIGFueSBzcGVjaWZpYyBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBjb3VsZCB0cmlwIG1lIHVwLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayB0byBiZSBzdXJlLiBCdXQgd2FpdCwgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfQlBGX0pJVGAgc2VlbSBwcmV0dHkgc3RhbmRhcmQ7IEkmIzM5O2xsIGNoZWNrIGBrZXJuZWwvYnBmL0tjb25maWdgIGZvciB0aGUgc3BlY2lmaWMgb3B0aW9ucy4gTGV0JiMzOTtzIG1ha2Ugc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxua2VybmVsL2JwZi9LY29uZmlnLTcwLVx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy03Mi1cbmtlcm5lbC9icGYvS2NvbmZpZzo3Mzpjb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxua2VybmVsL2JwZi9LY29uZmlnLTc0LVx0Ym9vbCBcJiMzNDtEaXNhYmxlIHVucHJpdmlsZWdlZCBCUEYgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZz05MD1zb3VyY2UgXCYjMzQ7a2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy05MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo5Mjpjb25maWcgQlBGX0xTTVxua2VybmVsL2JwZi9LY29uZmlnLTkzLVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTAzOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGlzIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGhhbmRmdWwgb2YgbmV3IGZ1bmN0aW9uczogYGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NgLCBgZW1pdF9rZnVuY19hcmVuYV9hcmdzYCwgYGVtaXRfYXJlbmFfYXJnX2NvbnZgLCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYCwgYW5kIGBfX2dldF9hcmdfZm1vZGVsX2ZsYWdzYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyB0aGVzZSBuZXcgY29tcG9uZW50cyBhcmUgaW50ZWdyYXRlZCwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBjb3JlIEJQRiBpbmZyYXN0cnVjdHVyZS4gVGhlIHByZXNlbmNlIG9mIGZ1bmN0aW9ucyBsaWtlIGBhcmVuYV9hcmdzYCBzdWdnZXN0cyBjaGFuZ2VzIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgSklUIGVudmlyb25tZW50LCB3aGljaCBpcyBhbHdheXMgaW50ZXJlc3RpbmcuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgc2NvcGUgb2YgdGhlc2UgY2hhbmdlcywgc3RhcnRpbmcgd2l0aCB2ZXJpZnlpbmcgdmlzaWJpbGl0eSBvZiB0aGUgc3ltYm9scy4gRmlyc3QsIGxldCYjMzk7cyBjb25maXJtIHRoZSBsb2NhdGlvbnMgb2YgdGhlICYjMzQ7Zm9jdXMgc3ltYm9scyYjMzQ7IHRoZSBwYXRjaCBoaWdobGlnaHRzOiBgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc2AsIGBicGZfdHJhbXBvbGluZV91cGRhdGVgLCBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2AsIGBidGZfY3R4X2FjY2Vzc2AsIGBnZXRfa2Z1bmNfYXJnX3R5cGVgLCBgY2hlY2tfa2Z1bmNfYXJnc2AsIGFuZCBgY2hlY2tfc3RydWN0X29wc19idGZfaWRgLgoKYGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQgZnJvbSBgaW5jbHVkZS9saW51eC9icGYuaGAgYW5kIGltcGxlbWVudGVkIGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgYW5kIHNvIGlzIG5vbiBzdGF0aWMsIHNvIHRoYXQmIzM5O3MgZ29vZC4gYGJwZl90cmFtcG9saW5lX3VwZGF0ZWAgaXMgYWxzbyB3aXRoaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCwgYXMgZXhwZWN0ZWQuIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYCBhbmQgYGJ0Zl9jdHhfYWNjZXNzYCBhcmUgbG9jYXRlZCBpbiBga2VybmVsL2JwZi9idGYuY2AuIEFuZCBgZ2V0X2tmdW5jX2FyZ190eXBlYCBhbmQgYGNoZWNrX2tmdW5jX2FyZ3NgIGFyZSBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgYGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkYCBpcyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4KCkFoYSEgYGdldF9rZnVuY19hcmdfdHlwZWAgYW5kIGBjaGVja19rZnVuY19hcmdzYCBhcmUgKnN0YXRpYyogd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBSaWdodCwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGNoYW5nZXMgaW52b2x2aW5nIGZ1bmN0aW9ucyB0aGF0IGRlYWwgd2l0aCB0aGUgdmVyaWZpZXIsIGJ1dCBpdCYjMzk7cyBub3QgZXhwb3NpbmcgbmV3IGV4dGVybmFsbHkgY2FsbGFibGUgdmVyaWZpZXIgZnVuY3Rpb25zLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgdG8gc2VlIGhvdyB0aGlzIGFmZmVjdHMgZXh0ZXJuYWwga2Z1bmNzLiBUaW1lIHRvIGluc3BlY3QgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgZGlyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X2tmdW5jX2FyZ190eXBlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTM5Nj1zdGF0aWMgaW50XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEzOTc6Z2V0X2tmdW5jX2FyZ190eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM5OC1cdFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJncywgaW50IGFyZywgaW50IG5hcmdzKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTUxMT1zdGF0aWMgaW50IGdlbl9rZnVuY19hcmdfcHJvdG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTUzNy1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTUzODpcdFx0YXJnX3R5cGUgPSBnZXRfa2Z1bmNfYXJnX3R5cGUoZW52LCBtZXRhLCBhcmdzLCBpLCBuYXJncyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE1MzktXHRcdGlmIChhcmdfdHlwZSBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjIyNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipDb25zaWRlcmluZyBGdW5jdGlvbiBBcmd1bWVudCBUeXBlcyoqCgpPa2F5LCBzbyBgZ2V0X2tmdW5jX2FyZ190eXBlYCBpcyBkZWZpbml0ZWx5IGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGNsZWFyLiBCdXQgbm93LCBJJiMzOTttIHdvbmRlcmluZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBgY2hlY2tfa2Z1bmNfYXJnc2AuIElzICppdCogc3RhdGljIGFzIHdlbGw/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIHRoYXQgZnVuY3Rpb24gc2hhcmVzIHRoZSBzYW1lIGRlc2lnbiBjaGFyYWN0ZXJpc3RpY3Mgb3IgaWYgdGhlcmUgaXMgYSBkaWZmZXJlbnQgYXBwcm9hY2ggZm9yIHRoaXMgZnVuY3Rpb24uIElzIHRoZXJlIHNvbWV0aGluZyBzcGVjaWFsIGFib3V0IHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMgb3IgdGhlIHdheSBpdCBpcyBjYWxsZWQgdGhhdCBtaWdodCBpbmZsdWVuY2UgaXRzIHN0YXR1cz8gSSBtdXN0IGtub3cgd2hldGhlciBpdCBpcyBzdGF0aWMsIGFuZCBob3cgdGhhdCBzdGF0dXMgbWF5IGVmZmVjdCBteSBkZXNpZ25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19rZnVuY19hcmdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjEwMT1zdGF0aWMgYm9vbCBjaGVja19jc3NfdGFza19pdGVyX2FsbG93bGlzdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjExNi1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjExNzpzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMTE4LVx0XHRcdCAgICBpbnQgaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzMDcwPXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTU0LVx0LyogQ2hlY2sgdGhlIGFyZ3VtZW50cyAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEzMTU1Olx0ZXJyID0gY2hlY2tfa2Z1bmNfYXJncyhlbnYsIFx1MDAyNm1ldGEsIGluc25faWR4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzE1Ni1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNDQwLVx0XHRlbHNlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM0NDE6XHRcdFx0Lyogc2NhbGFyLiBlbnN1cmVkIGJ5IGNoZWNrX2tmdW5jX2FyZ3MoKSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNDQyLVx0XHRcdG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCByZWdubywgdC1cdTAwM2VzaXplKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI3NzkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIFN0YXRpYyBOYXR1cmUgb2YgVGhpcyBTaXR1YXRpb24qKgoKSG1tLCBzbyBpdCYjMzk7cyBpbmhlcmVudGx5IHN0YXRpYy4gVGhhdOKAmXMgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFRoaXMgY29uc3RyYWlucyBob3cgSSBjYW4gYXBwcm9hY2ggdGhlIHByb2JsZW0sIHByb2JhYmx5IG5lY2Vzc2l0YXRpbmcgY29tcGlsZS10aW1lIGFuYWx5c2lzIG9yIGEgdmVyeSBjYXJlZnVsLCBpbW11dGFibGUgZGF0YSBzdHJ1Y3R1cmUgZGVzaWduLiBUaGUgbGltaXRhdGlvbnMgb2Ygc3RhdGljIGVudmlyb25tZW50cyBhbHdheXMgbWFrZSBtZSB0aGluayBhYm91dCB3b3JrYXJvdW5kcywgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBhY3R1YWwgY29uc3RyYWludHMgZmlyc3QsIGJlZm9yZSBkZXZpc2luZyBzb2x1dGlvbnMuCgpNeSBtaW5kIGp1bXBzIGltbWVkaWF0ZWx5IHRvIGEgZnVuY3Rpb24uLi4gd2hhdCBhYm91dCBgY2hlY2tfc3RydWN0X29wc19idGZfaWRgPyBJcyB0aGF0IHJlbGV2YW50IGhlcmU/IENvdWxkIHRoYXQgaG9sZCBzb21lIGluc2lnaHQgaW50byB0aGUgc3RhdGljIHN0cnVjdHVyZSBJJiMzOTttIGRlYWxpbmcgd2l0aCwgcGVyaGFwcyBzb21lIHR5cGUgSUQgb3Igc29tZXRoaW5nIHNpbWlsYXIgdGhhdCBoZWxwcyBtZSB0byB3b3JrIHdpdGggaXQ/IEdvdHRhIGV4YW1pbmUgdGhhdCBmdW5jdGlvbiYjMzk7cyBzaWduYXR1cmUgYW5kIGltcGxlbWVudGF0aW9uIG1vcmUgY2xvc2VseS4gSSB3b25kZXIgaWYgaXQgaGFzIGRpcmVjdCBhcHBsaWNhYmlsaXR5LCBvciBpZiBpdHMgcHJpbmNpcGxlcyBjYW4gYmUgYWRhcHRlZC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hlY2tfc3RydWN0X29wc19idGZfaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTE4ODM1PWludCBicGZfcHJvZ19jdHhfYXJnX2luZm9faW5pdChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4ODQzLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4ODQ0OnN0YXRpYyBpbnQgY2hlY2tfc3RydWN0X29wc19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODg0NS17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NTgyPXN0YXRpYyBpbnQgY2hlY2tfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTYwNS1cdGlmIChwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NjA2Olx0XHRyZXR1cm4gY2hlY2tfc3RydWN0X29wc19idGZfaWQoZW52KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTYwNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMyODcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgZm9jdXNpbmcgb24gdGhlIGltcGxpZWQgcmVhc29uaW5nOgoKKipEaWdnaW5nIGludG8gQlRGIERpc3RpbGxhdGlvbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHJldmlzaXRpbmcgdGhpcyBzdGF0aWMgYXNwZWN0IGFnYWluLiBIbW0sIGp1c3QgdG8gYmUgc3VyZS4uLiBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2AgZnVuY3Rpb24uIEkgaGF2ZSBhIGh1bmNoIGl0IG1pZ2h0IGJlIHJlbGV2YW50LCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnkgb2J2aW91cyBjb25uZWN0aW9ucyBiZXR3ZWVuIHRoZSBzdGF0aWMgcHJvcGVydHkgYW5kIGZ1bmN0aW9uIHByb3RvdHlwZXMuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiwgYW5kIEkgd2FudCB0byBiZSBjZXJ0YWluIHRoZSBleGlzdGluZyBsb2dpYyBpcyB0YWtpbmcgdGhlIHN0YXRpYyBwYXJ0IGludG8gYWNjb3VudCBwcm9wZXJseSB3aXRoaW4gdGhlIGRpc3RpbGxhdGlvbiBwcm9jZXNzLCBpZiBpdCBuZWVkcyB0by4gSSBzaG91bGQgZXhhbWluZSBob3cgdGhhdCBmdW5jdGlvbiBoYW5kbGVzIHN0YXRpYyBkZWNsYXJhdGlvbnMgb3IgcmVmZXJlbmNlcyBpbiBwcm90b3R5cGVzLiBBIHF1aWNrIHNjYW4gd2lsbCBjb25maXJtIHdoZXRoZXIgSSBuZWVkIHRvIGFkanVzdCBvciBpZiBpdCYjMzk7cyBhbHJlYWR5IHdlbGwgaGFuZGxlZC4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidGZfZGlzdGlsbF9mdW5jX3Byb3RvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9idGYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2J0Zi5jPTc1NDg9c3RhdGljIHU4IF9fZ2V0X2FyZ19mbW9kZWxfZmxhZ3MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNzU2My1cbmtlcm5lbC9icGYvYnRmLmM6NzU2NDppbnQgYnRmX2Rpc3RpbGxfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxua2VybmVsL2JwZi9idGYuYy03NTY1LVx0XHRcdCAgIHN0cnVjdCBidGYgKmJ0ZixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTY6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2NTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIEVwaGVtZXJhbCBhbmQgQ29uc2lkZXJpbmcgQWNjZXNzIENvbnRleHQqKgoKUmlnaHQsIHNvIHRoaXMgaXNuJiMzOTt0IGEgc3RhdGljIHNpdHVhdGlvbi4gVGhhdCYjMzk7cyB0aGUgY29yZSBhc3N1bXB0aW9uIEkmIzM5O20gd29ya2luZyBmcm9tLiBUaGlzIG1lYW5zIEkgbmVlZCB0byBiZSB0aGlua2luZyBhYm91dCBob3cgdGhpbmdzIGNoYW5nZSwgZXZvbHZlLCBhbmQgcG90ZW50aWFsbHkgZGVjYXkgb3ZlciB0aW1lLiBUaGUgaW1wbGljYXRpb25zIG9mICYjMzk7bm9uLXN0YXRpYyYjMzk7IGFyZSBnb2luZyB0byBjYXNjYWRlIHRocm91Z2ggdGhlIHJlc3Qgb2YgbXkgYW5hbHlzaXMuIFRoZSBjaGFsbGVuZ2UgdGhlbiBiZWNvbWVzIGlkZW50aWZ5aW5nIHRoZSBjaGFuZ2luZyB2YXJpYWJsZXMgYW5kIG1ha2luZyBzdXJlIEkgYWNjb3VudCBmb3IgdGhlIGltcGFjdCBvZiB0aG9zZSB2YXJpYWJsZXMuCgpBbmQgd2l0aCB0aGF0IHNhaWQsIG15IG5leHQgdGhvdWdodCBpcywgd2hhdCBhYm91dCBhY2Nlc3MgY29udGV4dD8gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgYGJ0Zl9jdHhfYWNjZXNzYC4gVGhpcyBmdW5jdGlvbiwgb3Igc3RydWN0dXJlLCB3aGF0ZXZlciBpdCBpcywgaXMgZ29pbmcgdG8gYmUgY2VudHJhbCB0byBob3cgSSBzaG91bGQgcHJvY2VlZC4gR2l2ZW4gdGhlIGZhY3QgdGhhdCB0aGUgc3ViamVjdCBpcyBub24tc3RhdGljLCBgYnRmX2N0eF9hY2Nlc3NgIGlzIGxpa2VseSB0byBiZSBhIGZhY3RvciB0aGF0IGlzIGR5bmFtaWMgYXMgd2VsbC4gQXJlIHRoZXJlIGluaGVyZW50IHJpc2tzIHRoYXQgYXJlIG9ubHkgcmV2ZWFsZWQgaW4gYSBzcGVjaWZpYyBjb250ZXh0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGR5bmFtaWMgbGFuZHNjYXBlLCBhbmQgaG93IHRoYXQgY29udGV4dCBhZmZlY3RzIHdoYXQgSSBuZWVkIHRvIGRvLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbnVhbmNlcy4gSXRzIGltcGxpY2F0aW9ucy4gTXkgbmV4dCBzdGVwcyBhcmUgdG8gcmV2aWV3IHRoaXMgZnVuY3Rpb24vc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidGZfY3R4X2FjY2VzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnRmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9idGYuYz02NjU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3Jhd190cF9udWxsX2FyZ3MgcmF3X3RwX251bGxfYXJnc1tdID0ge1xuLS1cbmtlcm5lbC9icGYvYnRmLmMtNjg0OS1cbmtlcm5lbC9icGYvYnRmLmM6Njg1MDpib29sIGJ0Zl9jdHhfYWNjZXNzKGludCBvZmYsIGludCBzaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxua2VybmVsL2JwZi9idGYuYy02ODUxLVx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNzEwMy19XG5rZXJuZWwvYnBmL2J0Zi5jOjcxMDQ6RVhQT1JUX1NZTUJPTF9HUEwoYnRmX2N0eF9hY2Nlc3MpO1xua2VybmVsL2JwZi9idGYuYy03MTA1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDE2NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgRHluYW1pYyBMYW5kc2NhcGUgb2YgZUJQRioqCgpIbW0sIHRoaXMgaXMgZGVmaW5pdGVseSBub3QgYSBzdGF0aWMgc2l0dWF0aW9uIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIFRoZSB3aG9sZSBuYXR1cmUgb2YgdGhpcyBmZWVscyBpbmhlcmVudGx5IGR5bmFtaWMgYW5kIGV2ZXItZXZvbHZpbmcuIE15IHByaW1hcnkgZm9jdXMgaXMgb24gdGhlIGltcGFjdCBvZiBjaGFuZ2VzLgoKT2theSwgbGV0JiMzOTtzIHpvb20gaW4gYSBsaXR0bGUgYml0LCB3aGF0IGFib3V0IHRoYXQgYGJwZl90cmFtcG9saW5lX3VwZGF0ZWAgZnVuY3Rpb24/IFRoYXQmIzM5O3MgdGhlIGtleSB2YXJpYWJsZSB0byB1cGRhdGUsIGlzbiYjMzk7dCBpdD8gSXQgaGFzIGFsbCB0aGUgaW1wYWN0IG9uIGhvdyBldmVyeXRoaW5nIGVsc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhbXBvbGluZV91cGRhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz02Mj1zdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy02OS0jaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3MDpzdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dGV4LFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzEtXHRcdFx0XHQgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyAqb3BzLCB2b2lkICpkYXRhKTtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05OD1zdGF0aWMgaW50IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmMoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgbG9uZyBpcCxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTYtXHRcdCAgICAhKHRyLVx1MDAzZWZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9PUklHX1NUQUNLKSlcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1NzpcdFx0XHRyZXQgPSBicGZfdHJhbXBvbGluZV91cGRhdGUodHIsIGZhbHNlIC8qIGxvY2tfZGlyZWN0X211dGV4ICovLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU4LVx0XHRcdFx0XHRcdCAgICBcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYzLVx0XHRpZiAodHItXHUwMDNlZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX09SSUdfU1RBQ0spXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjQ6XHRcdFx0cmV0ID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHRyLCBmYWxzZSAvKiBsb2NrX2RpcmVjdF9tdXRleCAqLyxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2NS1cdFx0XHRcdFx0XHQgICAgXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTM3Mz1zdGF0aWMgc3RydWN0IGJwZl90cmFtcG9saW5lICpicGZfdHJhbXBvbGluZV9sb29rdXAodTY0IGtleSwgdW5zaWduZWQgbG9uZyBpcClcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00MTAtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo0MTE6c3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGVfZmVudHJ5KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDEyLVx0XHRcdFx0XHR2b2lkICpvbGRfYWRkciwgdm9pZCAqbmV3X2FkZHIpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NDMyPXN0YXRpYyBpbnQgdW5yZWdpc3Rlcl9mZW50cnkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIG9yaWdfZmxhZ3MsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDM5LVx0ZWxzZVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NDQwOlx0XHRyZXQgPSBicGZfdHJhbXBvbGluZV91cGRhdGVfZmVudHJ5KHRyLCBvcmlnX2ZsYWdzLCBvbGRfYWRkciwgTlVMTCk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00NDEtXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NDUwPXN0YXRpYyBpbnQgbW9kaWZ5X2ZlbnRyeShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgb3JpZ19mbGFncywgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDU5LVx0fSBlbHNlIHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjQ2MDpcdFx0cmV0ID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlX2ZlbnRyeSh0ciwgb3JpZ19mbGFncywgb2xkX2FkZHIsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00NjEtXHRcdFx0XHRcdFx0ICAgbmV3X2FkZHIpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTQ3Mz1zdGF0aWMgaW50IHJlZ2lzdGVyX2ZlbnRyeShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00OTAtXHR9IGVsc2Uge1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NDkxOlx0XHRyZXQgPSBicGZfdHJhbXBvbGluZV91cGRhdGVfZmVudHJ5KHRyLCAwLCBOVUxMLCBuZXdfYWRkcik7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00OTItXHR9XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NzIwPXZvaWQgYnBmX3RyYW1wb2xpbmVfc2V0X2ZsYWdzKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBmbGFncylcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MjYtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3Mjc6c3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleCxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcyOC1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzICpvcHMsIHZvaWQgKmRhdGEpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTc2PXN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMTAtXHRcdHJldHVybiBlcnI7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDExOlx0ZXJyID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHRyLCB0cnVlIC8qIGxvY2tfZGlyZWN0X211dGV4ICovLCBvcHMsIGRhdGEpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTAxMi1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTAyOT1zdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwNDktXHRicGZfdHJhbXBvbGluZV9yZW1vdmVfcHJvZyh0ciwgbm9kZSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDUwOlx0cmV0dXJuIGJwZl90cmFtcG9saW5lX3VwZGF0ZSh0ciwgdHJ1ZSAvKiBsb2NrX2RpcmVjdF9tdXRleCAqLywgb3BzLCBkYXRhKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwNTEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTYyMQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYCoqCgpPa2F5LCBzbyBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYCBpcyBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVkIG15IGludGVyZXN0LiBHaXZlbiB0aGUgY29udGV4dCwgbXkgbWluZCBpcyBhbHJlYWR5IHJ1bm5pbmcgdGhyb3VnaCBpbXBsaWNhdGlvbnMgZm9yIGxpbmtlciB2aXNpYmlsaXR5LCBzeW1ib2wgc2NvcGluZywgYW5kIHBvdGVudGlhbCBpbmxpbmluZyBiZWhhdmlvdXIgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgQlBGIGluZnJhc3RydWN0dXJlLiBJdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbiwgYnV0IGl0JiMzOTtzIG5vdCB0aGUgZnVsbCBwaWN0dXJlLgoKVG8gdW5kZXJzdGFuZCB0aGUgcHJhY3RpY2FsIGltcGFjdCBvZiB0aGlzIGRlY2xhcmF0aW9uIGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQsIEkgc2hvdWxkIG5vdyBtb3ZlIGludG8gYGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NgLiBJIGhhdmUgYSBmZWVsaW5nIHRoYXQgZnVuY3Rpb24gd2lsbCBwcm92aWRlIHNvbWUgaW1wb3J0YW50IGluc2lnaHQgaGVyZS4gSSBleHBlY3QgaXQgaXMgcmVsYXRlZC4gRnJvbSB0aGVyZSwgSSB3aWxsIGJlIGFibGUgdG8gZm9ybSBhIG1vcmUgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHNlY3Rpb24gb2YgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTY6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jPTUzMj1zdGF0aWMgYm9vbCBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNTQ4LSAqL1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NTQ5OmJvb2wgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJncyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHUzMiBmbGFncyxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTU1MC1cdFx0XHRcdCAgc3RydWN0IGJwZl90cmFtcF9hcmVuYV9hcmdzICphYXJncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTY6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwMDgKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkFuYWx5emluZyBgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc2AgYW5kIFRyYW1wb2xpbmUgUHJlcGFyYXRpb24qKgoKQWxyaWdodCwgc28gYGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NgIGlzIGluZGVlZCAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIE5vdywgdGhhdCYjMzk7cyBjcnVjaWFsIGJlY2F1c2UgaXQgYWZmZWN0cyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIHRoZSBwb3NzaWJsZSBzY29wZSBvZiBpdHMgdXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyBhY2Nlc3NlZCB3aXRoaW4gdGhlIGJyb2FkZXIgQlBGIGNvbnRleHQuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGludG8gYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSB3aGVyZSBhIGxvdCBvZiB0aGUgbWFnaWMgaXMgaGFwcGVuaW5nIHJlZ2FyZGluZyB0aGUgc2V0dXAgYW5kIHByZXBhcmF0aW9uIG9mIHRoZXNlIEJQRiB0cmFtcG9saW5lcywgYW5kIHdoZXJlIGBicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzYCBsaWtlbHkgcGxheXMgYSBzaWduaWZpY2FudCByb2xlLCBwZXJoYXBzIGV2ZW4gYmVpbmcgY2FsbGVkIGRpcmVjdGx5IGFzIHBhcnQgb2YgdGhhdCBwcmVwYXJhdGlvbiBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZXNlIHR3byBpcyBjcml0aWNhbCBmb3IgZmlndXJpbmcgb3V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyBCUEYgdHJhbXBvbGluZXMgYXJlIHN0cnVjdHVyZWQgYW5kIGhhbmRsZWQuIEtub3dpbmcgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aWxsIGltbWVkaWF0ZWx5IHRlbGwgbWUgc29tZXRoaW5nIHZlcnkgaW50ZXJlc3RpbmcgYWJvdXQgdGhlIG92ZXJhbGwgZGVzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzMzNT1zdGF0aWMgaW50IGludm9rZV9icGZfbW9kX3JldChjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHByb2csXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM0MzYtICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzQzNzpzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbWFnZSxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNDM4LVx0XHRcdFx0XHQgdm9pZCAqcndfaW1hZ2VfZW5kLCB2b2lkICppbWFnZSxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mzc2Mj1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICppbWFnZSwgdm9pZCAqaW1hZ2VfZW5kLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzc3LVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM3Nzg6XHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShpbSwgcndfaW1hZ2UsIHJ3X2ltYWdlICYjNDM7IHNpemUsIGltYWdlLCBtLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3NzktXHRcdFx0XHRcdCAgICBmbGFncywgdG5vZGVzLCBmdW5jX2FkZHIpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNzkxPWludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3OTctXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6Mzc5ODpcdC8qIEFsbG9jYXRlIGEgdGVtcG9yYXJ5IGJ1ZmZlciBmb3IgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoKS5cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzk5LVx0ICpcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzgwNy1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozODA4Olx0cmV0ID0gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoXHUwMDI2aW0sIGltYWdlLCBpbWFnZSAmIzQzOyBQQUdFX1NJWkUsIGltYWdlLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM4MDktXHRcdFx0XHRcdCAgICBtLCBmbGFncywgdG5vZGVzLCBmdW5jX2FkZHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjkzMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqVHJhbXBvbGluZSBGdW5jdGlvbnMgYW5kIEFyZW5hIEFyZ3VtZW50IFN1cHBvcnQgaW4gQlBGIEpJVCoqCgpSaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgYSBkaXN0aW5jdGlvbiBoZXJlLiBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uIHdpdGhpbiBhIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQg4oCTIGxpa2VseSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdG8gcHJldmVudCBleHRlcm5hbCBsaW5rYWdlLiBPbiB0aGUgb3RoZXIgaGFuZCwgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgaXMgKm5vdCogYHN0YXRpY2AuIFRoaXMgaW1wbGllcyBpdCYjMzk7cyBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgdXNlLCBwcm9iYWJseSBhcyBwYXJ0IG9mIHRoZSBwdWJsaWMgQlBGIEpJVCBBUEkgb24gdGhlIGFyY2hpdGVjdHVyZSBpbiBxdWVzdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBhbmQgZnVuY3Rpb24gb2YgdGhlc2UgdHdvLiBJIGltYWdpbmUgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb24gd2lsbCBiZSB0aGUgZW50cnkgcG9pbnQgZXhwb3NlZCB0byB0aGUgaGlnaGVyLWxldmVsIEJQRiBzdWJzeXN0ZW0uIFRoZSBzdGF0aWMgb25lLCBsaWtlbHkgdXNlZCBpbnRlcm5hbGx5IGJ5IGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLCBkb2VzIHRoZSBoZWF2eSBsaWZ0aW5nLiBJIHNob3VsZCBleHBsb3JlIHRoZSBpbXBsZW1lbnRhdGlvbnMgdG8gY29uZmlybSB0aGlzLgoKTm93LCBsZXQmIzM5O3MgcGl2b3QuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYC4gSSYjMzk7bSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uLCBvciB2YXJpYWJsZSwgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gZGV0ZXJtaW5pbmcgd2hldGhlciBvciBub3QgdGhlIGFyY2hpdGVjdHVyZSYjMzk7cyBKSVQgY29tcGlsZXIgaGFzIHRoZSBuZWNlc3NhcnkgY2FwYWJpbGl0aWVzIGZvciAmIzM0O2FyZW5hIGFyZ3VtZW50cyYjMzQ7LiBJJiMzOTttIG1ha2luZyBhbiBhc3N1bXB0aW9uIHRoYXQgdGhlIGBhcmVuYWAgaXMgcmVsYXRlZCB0byBob3cgQlBGIHByb2dyYW1zIHBhc3MgYXJndW1lbnRzLCBvciBtYW5hZ2UgaW50ZXJtZWRpYXRlIHN0YXRlLiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gbWVtb3J5IG1hbmFnZW1lbnQgc3BlY2lmaWMgdG8gSklULWNvbXBpbGVkIEJQRiBjb2RlLiBUaGUgZnVuY3Rpb24gbmFtZSBpbXBsaWVzIHNvbWUgcnVudGltZSBjaGVjaywgb3IgcG9zc2libHkgYSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gZmxhZywgdG8gaW5kaWNhdGUgaWYgdGhpcyBzdXBwb3J0IGlzIGF2YWlsYWJsZS4gSSBzaG91bGQgZXhhbWluZSB0aGUgZGVmaW5pdGlvbiBhbmQgdXNlcyBvZiB0aGlzIGZsYWcsIG9yIGZ1bmN0aW9uLCB0byBkZXRlcm1pbmUgcHJlY2lzZWx5IHdoYXQmIzM5O3Mgc3VwcG9ydGVkIGFuZCB3aHkuIEkmIzM5O2QgYmUgbG9va2luZyBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gcGF0aHMsIGNoZWNrcyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMgb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgb3IgbWF5YmUgZXZlbiBjaGVja3MgZm9yIHNwZWNpZmljIGtlcm5lbCB2ZXJzaW9ucy4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZXNlIGVsZW1lbnRzIGNvbWJpbmUgYW5kIGluZmx1ZW5jZSB0aGUgQlBGIEpJVCYjMzk7cyBjb2RlIGdlbmVyYXRpb24gcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTY6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jb3JlLmM9MzMwNj1ib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZClcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzEwLVxua2VybmVsL2JwZi9jb3JlLmM6MzMxMTpib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcbmtlcm5lbC9icGYvY29yZS5jLTMzMTIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzU0NAoJCQkJCQkJb3V0cHV0OiA1NwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBXZWFrbmVzcyBhbmQgSWRlbnRpZnlpbmcgdGhlIFRhcmdldCoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IGZsYWdzIHRoaXMgYXMgYSBub24tc3RhdGljLCBvciAmIzM0O3dlYWsmIzM0OyBwb2ludC4gVGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBteSBpbnRlcm5hbCByYWRhcjsgd2UgbmVlZCB0byBkaWcgZGVlcGVyLiBNeSBmb2N1cyBzaGlmdHMgdG8gdGhlIHN1c3BlY3RlZCBhcmVhLiBMZXQmIzM5O3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIGBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYWAuIFRoaXMgY291bGQgYmUgdGhlIGxpbmNocGluLCBhbmQgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBzb21lIGludmVzdGlnYXRpb24uIFRpbWUgdG8gZ28gaHVudGluZyBmb3Igc29tZXRoaW5nIGludGVyZXN0aW5nIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYz00MzY9X19icGZfa2Z1bmMgdm9pZCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF8yKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYy00NDAtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jOjQ0MTpfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEodTY0ICpwdHJfX2FyZW5hKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYy00NDIte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMtNDQ1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYzo0NDY6X19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKHU2NCAqcHRyX19hcmVuYV9udWxsYWJsZSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMtNDQ3LXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jLTQ1MC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM6NDUxOl9fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayh1NjQgKnB0cl9fYXJlbmEpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jLTQ1Mi17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYz04NjQ9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzIpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jOjg2NTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jOjg2NjpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jOjg2NzpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2spXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jLTg2OC1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2dldF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODQ1MAoJCQkJCQkJb3V0cHV0OiAxNjcKCQkJCQkJCXRob3VnaHRzOiAxNTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEJQRiBBcmVuYSBQb2ludGVyIFN1cHBvcnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgY2hhbmdlcyByZWxhdGVkIHRvIEJQRiBrZnVuY3MgYW5kIGBzdHJ1Y3Rfb3BzYCBhcmd1bWVudHMsIHNwZWNpZmljYWxseSB0aGUgaW50cm9kdWN0aW9uIG9mIGBfX2FyZW5hYCBhbmQgYF9fYXJlbmFfbnVsbGFibGVgIGFubm90YXRpb25zLiBNeSBpbml0aWFsIHNjYW4gZm9jdXNlZCBvbiBmdW5jdGlvbnMgaW4gYHRlc3Rfa21vZHNgLCBidXQgdGhhdCYjMzk7cyBhIHJlZCBoZXJyaW5nLiBXZSBuZWVkIHRvIGxvb2sgYXQgd2hhdCYjMzk7cyBhY3R1YWxseSAqaW50ZWdyYXRlZCogaW50byB0aGUga2VybmVsJiMzOTtzIEJQRiBjb3JlIGxvZ2ljLgoKSSBpbW1lZGlhdGVseSBob25lZCBpbiBvbiBgYnRmX2N0eF9hY2Nlc3NgIGFuZCBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2AsIGJvdGggb2Ygd2hpY2ggYXJlIG5vbi1zdGF0aWMgYW5kIHBhcnQgb2YgdGhlIGNvcmUgQlBGIGNvZGUuICBgYnRmX2N0eF9hY2Nlc3NgIGlzIGNydWNpYWwgYmVjYXVzZSBpdCBnb3Zlcm5zIGNvbnRleHQgYWNjZXNzIGNoZWNrcyBmb3IgdHJhY2luZyBhbmQgYHN0cnVjdF9vcHNgIHByb2dyYW1zLiAgYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gIGlzIGVzc2VudGlhbCBmb3IgZGlzdGlsbGluZyBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciB0cmFtcG9saW5lIG9wZXJhdGlvbnMuCgpUaGVuIEkgY29uc2lkZXJlZCBvdGhlciBwb3NzaWJsZSBjYW5kaWRhdGVzLiBgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc2Agc2VlbXMgcHJvbWlzaW5nLCBhcyBkb2VzIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLCBidXQgdGhlIGxhdHRlciYjMzk7cyBqdXN0IGEgYm9vbGVhbiBjaGVjaywgd2hpY2ggaXNuJiMzOTt0IGFzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc2AgYW5kIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYCBhbmQgYGJ0Zl9jdHhfYWNjZXNzYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMuCgpJIGRpZCBhIGRlZXAgZGl2ZSB0byBlbnN1cmUgSSB3YXNuJiMzOTt0IG1pc3Npbmcgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byBCUEYuIEkgbG9va2VkIGludG8gYGJwZl9wcm9nX2N0eF9hcmdfaW5mb19pbml0YCwgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAsIGBicGZfc3RydWN0X29wc19pbWFnZV9mcmVlYCwgYHByZXBhcmVfYXJnX2luZm9gLCBgY2hlY2tfc3RydWN0X29wc19idGZfaWRgLCBgY2hlY2tfa2Z1bmNfYXJnc2AsIGFuZCBgZ2V0X2tmdW5jX2FyZ190eXBlYC4gIEkgd2FzIGNhcmVmdWwgdG8gbWFrZSBzdXJlIEkgd2FzbiYjMzk7dCBzZWxlY3Rpbmcgc3RhdGljIGZ1bmN0aW9ucywgc3VjaCBhcyBgcHJlcGFyZV9hcmdfaW5mb2AsIGBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZGAsIGBjaGVja19rZnVuY19hcmdzYCwgYW5kIGBnZXRfa2Z1bmNfYXJnX3R5cGVgLgoKU28sIHRoZSBkZWZpbml0aXZlIGxpc3Qgb2YgKm1vZGlmaWVkKiBvciAqYWRkZWQqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZToKCiogICBgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc2AKKiAgIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgCiogICBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2AKKiAgIGBidGZfY3R4X2FjY2Vzc2AKCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgYGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NgLiBJdOKAmXMgYWRkZWQgaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCBhbmQgaXMgY2FsbGVkIGZyb20gYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gIFRoaXMgcmVpbmZvcmNlcyBpdHMgaW1wb3J0YW5jZSBpbiB0aGUgdHJhbXBvbGluZSBsb2dpYy4gIFRoZSBjaGFuZ2VzIHRvIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYCBhbmQgYGJ0Zl9jdHhfYWNjZXNzYCBhcmUgbG9jYXRlZCBpbiBga2VybmVsL2JwZi9idGYuY2AuCgpJIHJldmlld2VkIHRoZSBvdGhlciBmaWxlcyBpbiB0aGUga2VybmVsLiBJbiBga2VybmVsL2JwZi9jb3JlLmNgLCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYCBpcyBhZGRlZC4gSW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AsIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIGlzIGFkZGVkIGFnYWluLgoKTXkgZm9jdXMgbmFycm93cyB0byB0aGVzZSBjb3JlIGZ1bmN0aW9uczoKCiogICBgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc2AKKiAgIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYAoqICAgYGJ0Zl9jdHhfYWNjZXNzYAoKTm93LCByZWdhcmRpbmcgY29uZmlndXJhdGlvbnMsIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYCBhcmUgb2J2aW91c2x5IGNyaXRpY2FsLiBUaGUgdHJhbXBvbGluZXMgYXJlIHBhcnQgb2YgdGhlIEpJVCwgc28gd2UgbmVlZCBib3RoLiAgSSBjb25maXJtZWQgdGhhdCBgQlBGX0pJVF9BTFdBWVNfT05gIGlzbiYjMzk7dCBzdHJpY3RseSBuZWNlc3NhcnkuIGBCUEZfRVZFTlRTYCBpc24mIzM5O3QgcmVxdWlyZWQgaGVyZSBlaXRoZXIuCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb25zLiBgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc2AgaXMgZGVmaW5lZCBhczoKCmBgYGMKYm9vbCBicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzKHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcywgdTMyIGZsYWdzLAoJCQkJICBzdHJ1Y3QgYnBmX3RyYW1wX2FyZW5hX2FyZ3MgKmFhcmdzKQpgYGAKCkl0IGlzIGV4cG9ydGVkIGluIGBpbmNsdWRlL2xpbnV4L2JwZi5oYC4KCmBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYCBpcyBkZWZpbmVkIGFzOgoKYGBgYwppbnQgYnRmX2Rpc3RpbGxfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLAoJCQkgICBzdHJ1Y3QgYnRmICpidGYsCgkJCSAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqZnVuYywKCQkJICAgY29uc3QgY2hhciAqZnVuY19uYW1lLAoJCQkgICBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0pCmBgYAoKYGJ0ZgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJncyYjMzQ7LAogICAgJiMzNDtidGZfZGlzdGlsbF9mdW5jX3Byb3RvJiMzNDssCiAgICAmIzM0O2J0Zl9jdHhfYWNjZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYF9fYXJlbmFgIGFuZCBgX19hcmVuYV9udWxsYWJsZWAgYW5ub3RhdGlvbnMgZm9yIEJQRiBrZnVuY3MgYW5kIHN0cnVjdF9vcHMgYXJndW1lbnRzLiBJdCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyLCBKSVQgY29tcGlsZXIgKHg4NiksIGFuZCB0cmFtcG9saW5lIGxvZ2ljIHRvIHN1cHBvcnQgYXJlbmEgcG9pbnRlcnMsIGluY2x1ZGluZyByZWJhc2luZyB0aGVtIHRvIGtlcm5lbCBhZGRyZXNzZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0IHZlcmlmaWNhdGlvbiBvZiBhcmVuYSBwb2ludGVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3MmIzM0OywKICAgICYjMzQ7YnRmX2Rpc3RpbGxfZnVuY19wcm90byYjMzQ7LAogICAgJiMzNDtidGZfY3R4X2FjY2VzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBfX2FyZW5hYCBhbmQgYF9fYXJlbmFfbnVsbGFibGVgIGFubm90YXRpb25zIGZvciBCUEYga2Z1bmNzIGFuZCBzdHJ1Y3Rfb3BzIGFyZ3VtZW50cy4gSXQgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciwgSklUIGNvbXBpbGVyICh4ODYpLCBhbmQgdHJhbXBvbGluZSBsb2dpYyB0byBzdXBwb3J0IGFyZW5hIHBvaW50ZXJzLCBpbmNsdWRpbmcgcmViYXNpbmcgdGhlbSB0byBrZXJuZWwgYWRkcmVzc2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbWVtb3J5IHNhZmV0eSBhbmQgY29ycmVjdCB2ZXJpZmljYXRpb24gb2YgYXJlbmEgcG9pbnRlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNjoxMzowOC43MDI4NzA1MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDU0NDQ5MzYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NcIixcbiAgICBcImJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9cIixcbiAgICBcImJ0Zl9jdHhfYWNjZXNzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgX19hcmVuYWAgYW5kIGBfX2FyZW5hX251bGxhYmxlYCBhbm5vdGF0aW9ucyBmb3IgQlBGIGtmdW5jcyBhbmQgc3RydWN0X29wcyBhcmd1bWVudHMuIEl0IG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIsIEpJVCBjb21waWxlciAoeDg2KSwgYW5kIHRyYW1wb2xpbmUgbG9naWMgdG8gc3VwcG9ydCBhcmVuYSBwb2ludGVycywgaW5jbHVkaW5nIHJlYmFzaW5nIHRoZW0gdG8ga2VybmVsIGFkZHJlc3Nlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG1lbW9yeSBzYWZldHkgYW5kIGNvcnJlY3QgdmVyaWZpY2F0aW9uIG9mIGFyZW5hIHBvaW50ZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNjoxMzowOC43MDI4Nzg4OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMyMDcyNTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDBhZmM2NzQ2ZGEwZWM5MDJiZWI2NjM2N2M0NTcwMWZkMDY1OGIxMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzIDE2OjEzOjA3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XFxuaW5kZXggY2JkZTg2ZDA4MmNjZS4uNDhjZjc0NmY5ZmY5ZCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxcbkBAIC0yNzgsNiArMjc4LDQzIEBAIEFuIGV4YW1wbGUgaXMgZ2l2ZW4gYmVsb3c6OlxcbiAgICAgICAgICAgICAgICAgLi4uXFxuICAgICAgICAgfVxcbiBcXG4rMi4zLjggX19hcmVuYSBhbmQgX19hcmVuYV9udWxsYWJsZSBBbm5vdGF0aW9uc1xcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuK1xcbitCb3RoIGFubm90YXRpb25zIGluZGljYXRlIHRoYXQgdGhlIHBvaW50ZXIgYXJndW1lbnQgcG9pbnRzIGludG8gdGhlXFxuK2NhbGxpbmcgcHJvZ3JhbSdzIGFyZW5hLiBUaGUgSklUIHJlYmFzZXMgdGhlIHZhbHVlIGF0IHRoZSBjYWxsIHNpdGUgc29cXG4rdGhlIGtmdW5jIHJlY2VpdmVzIGEgZGlyZWN0bHkgZGVyZWZlcmVuY2VhYmxlIGtlcm5lbCBhZGRyZXNzLCBzdWJqZWN0IHRvXFxuK3RoZSBhY2Nlc3MgcnVsZXMgZGVzY3JpYmVkIGluIDpyZWY6YEJQRl9rZnVuY19hcmVuYV9hY2Nlc3NgIChhdCBtb3N0XFxuK2BgR1VBUkRfU1ogLyAyYGAsIDMyIEtpQiwgcGFzdCB0aGUgcG9pbnRlciBpbiBhIHNpbmdsZSB1bmNoZWNrZWQgYWNjZXNzKS5cXG4rXFxuK1dpdGggYGBfX2FyZW5hYGAgdGhlIHJlYmFzZSBpcyB1bmNvbmRpdGlvbmFsIGFuZCB0aGUgYXJndW1lbnQgaXMgbmV2ZXJcXG4rTlVMTDogYSB2YWx1ZSB3aG9zZSBsb3dlciAzMiBiaXRzIGFyZSB6ZXJvIGFycml2ZXMgYXMgdGhlIGFyZW5hIGJhc2VcXG4rYWRkcmVzcyAoYXJlbmEgb2Zmc2V0IDApLiBUaGUga2Z1bmMgbXVzdCBub3QgY2hlY2sgdGhlIGFyZ3VtZW50IGZvciBOVUxMLlxcbitXaXRoIGBgX19hcmVuYV9udWxsYWJsZWBgIHN1Y2ggYSB2YWx1ZSBhcnJpdmVzIGFzIE5VTEwgaW5zdGVhZCBhbmQgdGhlXFxuK2tmdW5jIG11c3QgY2hlY2sgYmVmb3JlIGRlcmVmZXJlbmNpbmcuXFxuK1xcbitBbiBleGFtcGxlIGlzIGdpdmVuIGJlbG93OjpcXG4rXFxuKyAgICAgICAgX19icGZfa2Z1bmMgaW50IGJwZl9wcm9jZXNzX2l0ZW0oc3RydWN0IGl0ZW0gKml0ZW1fX2FyZW5hKVxcbisgICAgICAgIHtcXG4rICAgICAgICAuLi5cXG4rICAgICAgICB9XFxuK1xcbitDYWxsaW5nIHN1Y2ggYSBrZnVuYyByZXF1aXJlcyB0aGUgcHJvZ3JhbSB0byB1c2UgYW4gYXJlbmEgbWFwIGFuZCBhIEpJVCB3aXRoXFxuK2FyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQpOyB2ZXJpZmljYXRpb24gZmFpbHMgb3RoZXJ3aXNlLiBUaGVcXG4rcHJvZ3JhbSBjYW4gcGFzcyBhbnkgdmFsdWUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIGtlcm5lbC4gQSB2YWx1ZSB0aGF0IGRvZXNcXG4rbm90IHBvaW50IGludG8gdGhlIGFyZW5hIGlzIGEgcHJvZ3JhbSBidWcuXFxuK1xcbitUaGUgc3VmZml4ZXMgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIG9uIHRoZSBhcmd1bWVudHMgb2Ygc3RydWN0X29wcyBzdHViXFxuK2Z1bmN0aW9ucywgd2l0aCB0aGUgY29udmVyc2lvbiBydW5uaW5nIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uIFRoZVxcbitrZXJuZWwgY2FsbGVyIHBhc3NlcyB0aGUga2VybmVsIGFyZW5hIGFkZHJlc3MgYW5kIHRoZSB0cmFtcG9saW5lIGNvbnZlcnRzXFxuK2l0IHdoaWxlIHNhdmluZyB0aGUgYXJndW1lbnRzLCBzbyB0aGUgY2FsbGJhY2sgcmVjZWl2ZXMgYW4gYXJlbmEgcG9pbnRlclxcbitpdCBjYW4gZGVyZWZlcmVuY2UgZGlyZWN0bHkuIFdpdGggYGBfX2FyZW5hYGAgdGhlIGtlcm5lbCBjYWxsZXIgbXVzdCBub3RcXG4rcGFzcyBOVUxMLiBXaXRoIGBgX19hcmVuYV9udWxsYWJsZWBgIGEgTlVMTCBrZXJuZWwgcG9pbnRlciBhcnJpdmVzIGFzIE5VTEwuXFxuK0hvd2V2ZXIsIHRoZXJlIGlzIG5vIG9ibGlnYXRpb24gdG8gcHJvdmUgdG8gdGhlIHZlcmlmaWVyIHRoYXQgc3VjaCBhIHBvaW50ZXIgaXNcXG4rbm9uLU5VTEwgYmVmb3JlIHVzZSwgaW4tbGluZSB3aXRoIGV4aXN0aW5nIHNlbWFudGljcyBvZiBhcmVuYSBwb2ludGVycyB1c2VkIGluXFxuK2EgcHJvZ3JhbSAob3Igb2J0YWluZWQgZnJvbSBhbnkgb3RoZXIgc291cmNlKS5cXG4rXFxuIC4uIF9CUEZfa2Z1bmNfbm9kZWY6XFxuIFxcbiAyLjQgVXNpbmcgYW4gZXhpc3Rpbmcga2VybmVsIGZ1bmN0aW9uXFxuQEAgLTUxNSw2ICs1NTIsOCBAQCBJbiBvcmRlciB0byBhY2NvbW1vZGF0ZSBzdWNoIHJlcXVpcmVtZW50cywgdGhlIHZlcmlmaWVyIHdpbGwgZW5mb3JjZSBzdHJpY3RcXG4gUFRSX1RPX0JURl9JRCB0eXBlIG1hdGNoaW5nIGlmIHR3byB0eXBlcyBoYXZlIHRoZSBleGFjdCBzYW1lIG5hbWUsIHdpdGggb25lXFxuIGJlaW5nIHN1ZmZpeGVkIHdpdGggYGBfX19pbml0YGAuXFxuIFxcbisuLiBfQlBGX2tmdW5jX2FyZW5hX2FjY2VzczpcXG4rXFxuIDIuOCBBY2Nlc3NpbmcgYXJlbmEgbWVtb3J5IHRocm91Z2gga2Z1bmMgYXJndW1lbnRzXFxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG5pbmRleCAwMWU3Y2U1NjljMWVkLi40YjNlNWQ4YTRhNTYzIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xcbisrKyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xcbkBAIC0xNjc4LDYgKzE2NzgsNTAgQEAgc3RhdGljIGludCBlbWl0X3NwZWN0cmVfYmhiX2JhcnJpZXIodTggKipwcHJvZywgdTggKmlwLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLypcXG4rICogUmViYXNlIHRoZSBfX2FyZW5hIGFyZ3Mgb2YgYSBrZnVuYyBjYWxsIHRvIGFyZW5hIGtlcm5lbCBhZGRyZXNzZXMsXFxuKyAqIHJOID0ga2Vybl92bV9zdGFydCArICh1MzIpck4sIHdpdGggUjEyIGhvbGRpbmcga2Vybl92bV9zdGFydC4gQSBudWxsYWJsZVxcbisgKiBhcmcgcHJlc2VydmVzIE5VTEwgYnkgc2tpcHBpbmcgdGhlIGFkZCwgdGVzdGVkIG9uIHRoZSB0cnVuY2F0ZWQgdmFsdWUgYXNcXG4rICogYXJlbmEgTlVMTCBpcyBvZmZzZXQgMC4gUmV0dXJuIHRoZSBudW1iZXIgb2YgZW1pdHRlZCBieXRlcy5cXG4rICovXFxuK3N0YXRpYyBpbnQgZW1pdF9rZnVuY19hcmVuYV9hcmdzKHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csXFxuK1xcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHU4ICoqcHByb2cpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICpmbTtcXG4rXFx0dTggKnByb2cgPSAqcHByb2c7XFxuK1xcdHU4ICpzdGFydCA9IHByb2c7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoYnBmX3Byb2csIGluc24pO1xcbitcXHRpZiAoIWZtKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtaW5fdChpbnQsIGZtLVxcdTAwM2Vucl9hcmdzLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpOyBpKyspIHtcXG4rXFx0XFx0dTggZmxhZ3MgPSBmbS1cXHUwMDNlYXJnX2ZsYWdzW2ldO1xcbitcXHRcXHR1MzIgcmVnID0gQlBGX1JFR18xICsgaTtcXG4rXFxuK1xcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKFdBUk5fT05fT05DRSghYnBmX3Byb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXJlbmEpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdC8qIG1vdiBlTiwgZU46IHRydW5jYXRlIGFuZCBjbGVhciB0aGUgdXBwZXIgMzIgYml0cyAqL1xcbitcXHRcXHRlbWl0X21vdl9yZWcoXFx1MDAyNnByb2csIGZhbHNlLCByZWcsIHJlZyk7XFxuK1xcdFxcdGlmIChmbGFncyBcXHUwMDI2IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHKSB7XFxuK1xcdFxcdFxcdC8qIHRlc3QgZU4sIGVOOyBqeiBvdmVyIHRoZSAzLWJ5dGUgYWRkICovXFxuK1xcdFxcdFxcdG1heWJlX2VtaXRfbW9kKFxcdTAwMjZwcm9nLCByZWcsIHJlZywgZmFsc2UpO1xcbitcXHRcXHRcXHRFTUlUMigweDg1LCBhZGRfMnJlZygweEMwLCByZWcsIHJlZykpO1xcbitcXHRcXHRcXHRFTUlUMihYODZfSkUsIDMpO1xcbitcXHRcXHR9XFxuK1xcdFxcdC8qIGFkZCByTiwgcjEyICovXFxuK1xcdFxcdG1heWJlX2VtaXRfbW9kKFxcdTAwMjZwcm9nLCByZWcsIFg4Nl9SRUdfUjEyLCB0cnVlKTtcXG4rXFx0XFx0RU1JVDIoMHgwMSwgYWRkXzJyZWcoMHhDMCwgcmVnLCBYODZfUkVHX1IxMikpO1xcbitcXHR9XFxuK1xcbitcXHQqcHByb2cgPSBwcm9nO1xcbitcXHRyZXR1cm4gcHJvZyAtIHN0YXJ0O1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXFxuIFxcdFxcdCAgdTggKnJ3X2ltYWdlLCBpbnQgb2xkcHJvZ2xlbiwgc3RydWN0IGppdF9jb250ZXh0ICpjdHgsIGJvb2wgam1wX3BhZGRpbmcpXFxuIHtcXG5AQCAtMjU4Myw2ICsyNjI3LDEyIEBAIHN0OlxcdFxcdFxcdGluc25fb2ZmID0gaW5zbi1cXHUwMDNlb2ZmO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGlmICghaW1tMzIpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHRpZiAoc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gZW1pdF9rZnVuY19hcmVuYV9hcmdzKGJwZl9wcm9nLCBpbnNuLCBcXHUwMDI2cHJvZyk7XFxuK1xcdFxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRcXHRcXHRpcCArPSBlcnI7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aWYgKHByaXZfZnJhbWVfcHRyKSB7XFxuIFxcdFxcdFxcdFxcdHB1c2hfcjkoXFx1MDAyNnByb2cpO1xcbiBcXHRcXHRcXHRcXHRpcCArPSAyO1xcbkBAIC0yOTkzLDEyICszMDQzLDQwIEBAIHN0YXRpYyBpbnQgZ2V0X25yX3VzZWRfcmVncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0pXFxuIFxcdHJldHVybiBucl91c2VkX3JlZ3M7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIENvbnZlcnQgYW4gYXJlbmEga2VybmVsIGFkZHJlc3MgaW50byB0aGUgYXJlbmEgcG9pbnRlciBmb3JtIG9uIGl0cyB3YXlcXG4rICogaW50byB0aGUgQlBGIGN0eCwgcmF4ID0gKHUzMikoc3JjIC0ga2Vybl92bV9zdGFydCkuIEEgbnVsbGFibGUgYXJnXFxuKyAqIHByZXNlcnZlcyBOVUxMLCB0ZXN0ZWQgb24gdGhlIGZ1bGwgNjQtYml0IGtlcm5lbCBwb2ludGVyLiBUaGUgMzItYml0XFxuKyAqIHN1YnRyYWN0aW9uIGJvdGggdHJ1bmNhdGVzIGFuZCBjbGVhcnMgdGhlIHVwcGVyIGhhbGYsIHNvIHRoZSBzdG9yZWRcXG4rICogdmFsdWUgc2F0aXNmaWVzIHRoZSBKSVQgaW52YXJpYW50IGZvciBhcmVuYSBwb2ludGVyIHJlZ2lzdGVycy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGVtaXRfYXJlbmFfYXJnX2NvbnYodTggKipwcHJvZywgdTMyIHNyY19yZWcsIGJvb2wgbnVsbGFibGUsIHUzMiBiYXNlX2xvKVxcbit7XFxuK1xcdHU4ICpwcm9nID0gKnBwcm9nO1xcbitcXG4rXFx0aWYgKG51bGxhYmxlKSB7XFxuK1xcdFxcdGlmIChzcmNfcmVnICE9IEJQRl9SRUdfMClcXG4rXFx0XFx0XFx0ZW1pdF9tb3ZfcmVnKFxcdTAwMjZwcm9nLCB0cnVlLCBCUEZfUkVHXzAsIHNyY19yZWcpO1xcbitcXHRcXHQvKiB0ZXN0IHJheCwgcmF4OyBqeiBvdmVyIHRoZSA1LWJ5dGUgc3ViICovXFxuK1xcdFxcdEVNSVQzKDB4NDgsIDB4ODUsIDB4QzApO1xcbitcXHRcXHRFTUlUMihYODZfSkUsIDUpO1xcbitcXHR9IGVsc2UgaWYgKHNyY19yZWcgIT0gQlBGX1JFR18wKSB7XFxuK1xcdFxcdGVtaXRfbW92X3JlZyhcXHUwMDI2cHJvZywgZmFsc2UsIEJQRl9SRUdfMCwgc3JjX3JlZyk7XFxuK1xcdH1cXG4rXFx0Lyogc3ViIGVheCwgYmFzZV9sbyAqL1xcbitcXHRFTUlUMV9vZmYzMigweDJELCBiYXNlX2xvKTtcXG4rXFxuK1xcdCpwcHJvZyA9IHByb2c7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZyxcXG4tXFx0XFx0ICAgICAgaW50IHN0YWNrX3NpemUsIGJvb2wgZm9yX2NhbGxfb3JpZ2luLCB1MzIgZmxhZ3MpXFxuK1xcdFxcdCAgICAgIGludCBzdGFja19zaXplLCBib29sIGZvcl9jYWxsX29yaWdpbiwgdTMyIGZsYWdzLFxcbitcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wX2FyZW5hX2FyZ3MgKmFhcmdzKVxcbiB7XFxuIFxcdGludCBhcmdfcmVncywgZmlyc3Rfb2ZmID0gMCwgbnJfcmVncyA9IDAsIG5yX3N0YWNrX3Nsb3RzID0gMDtcXG4gXFx0Ym9vbCB1c2Vfam1wID0gYnBmX3RyYW1wb2xpbmVfdXNlX2ptcChmbGFncyk7XFxuLVxcdGludCBpLCBqO1xcbitcXHRpbnQgc3RhY2tfYXJnc19vZmYgPSAodXNlX2ptcCB8fCAoZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9JTkRJUkVDVCkpID8gMTYgOiAyNDtcXG4rXFx0aW50IGksIGosIHNsb3QgPSAwO1xcbiBcXG4gXFx0LyogU3RvcmUgZnVuY3Rpb24gYXJndW1lbnRzIHRvIHN0YWNrLlxcbiBcXHQgKiBGb3IgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdHdvIHBvaW50ZXJzIHRoZSBzZXF1ZW5jZSB3aWxsIGJlOlxcbkBAIC0zMDI5LDE2ICszMTA3LDIwIEBAIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZyxcXG4gXFx0XFx0XFx0LyogY29weSBmdW5jdGlvbiBhcmd1bWVudHMgZnJvbSBvcmlnaW4gc3RhY2sgZnJhbWVcXG4gXFx0XFx0XFx0ICogaW50byBjdXJyZW50IHN0YWNrIGZyYW1lLlxcbiBcXHRcXHRcXHQgKlxcbi1cXHRcXHRcXHQgKiBUaGUgc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgYXJndW1lbnRzIG9uLXN0YWNrXFxuLVxcdFxcdFxcdCAqIGlzOlxcbi1cXHRcXHRcXHQgKiAgIHJicCArIDgocHVzaCByYnApICtcXG4tXFx0XFx0XFx0ICogICA4KHJldHVybiBhZGRyIG9mIG9yaWdpbiBjYWxsKSArXFxuLVxcdFxcdFxcdCAqICAgOChyZXR1cm4gYWRkciBvZiB0aGUgY2FsbGVyKVxcbi1cXHRcXHRcXHQgKiB3aGljaCBtZWFuczogcmJwICsgMjRcXG4rXFx0XFx0XFx0ICogVGhlIGFyZ3VtZW50cyBvbi1zdGFjayBzdGFydCBhYm92ZSB0aGUgc2F2ZWQgcmJwXFxuK1xcdFxcdFxcdCAqIGFuZCB0aGUgcmV0dXJuIGFkZHJlc3NlczogdHdvIHJldHVybiBhZGRyZXNzZXNcXG4rXFx0XFx0XFx0ICogKG9yaWdpbiBjYWxsIGFuZCBjYWxsZXIpIHdoZW4gdGhlIHRyYW1wb2xpbmUgaXNcXG4rXFx0XFx0XFx0ICogZW50ZXJlZCB0aHJvdWdoIHRoZSBmZW50cnkgY2FsbCwgc28gcmJwICsgMjQsIGFuZFxcbitcXHRcXHRcXHQgKiBhIHNpbmdsZSBvbmUgd2hlbiBpdCBpcyBlbnRlcmVkIHdpdGggYSBqbXAgb3JcXG4rXFx0XFx0XFx0ICogY2FsbGVkIGluZGlyZWN0bHksIHNvIHJicCArIDE2LlxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGFyZ19yZWdzOyBqKyspIHtcXG4gXFx0XFx0XFx0XFx0ZW1pdF9sZHgocHJvZywgQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfRlAsXFxuLVxcdFxcdFxcdFxcdFxcdCBucl9zdGFja19zbG90cyAqIDggKyAxNiArICghdXNlX2ptcCkgKiA4KTtcXG4rXFx0XFx0XFx0XFx0XFx0IG5yX3N0YWNrX3Nsb3RzICogOCArIHN0YWNrX2FyZ3Nfb2ZmKTtcXG4rXFx0XFx0XFx0XFx0aWYgKGFhcmdzIFxcdTAwMjZcXHUwMDI2IChhYXJncy1cXHUwMDNlc2xvdHMgXFx1MDAyNiBCSVQoc2xvdCkpKVxcbitcXHRcXHRcXHRcXHRcXHRlbWl0X2FyZW5hX2FyZ19jb252KHByb2csIEJQRl9SRUdfMCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGFhcmdzLVxcdTAwM2VudWxsYWJsZV9zbG90cyBcXHUwMDI2IEJJVChzbG90KSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICh1MzIpYWFyZ3MtXFx1MDAzZWtlcm5fdm1fc3RhcnQpO1xcbiBcXHRcXHRcXHRcXHRlbWl0X3N0eChwcm9nLCBCUEZfRFcsIEJQRl9SRUdfRlAsIEJQRl9SRUdfMCxcXG4gXFx0XFx0XFx0XFx0XFx0IC1zdGFja19zaXplKTtcXG4gXFxuQEAgLTMwNDYsNiArMzEyOCw3IEBAIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZyxcXG4gXFx0XFx0XFx0XFx0XFx0Zmlyc3Rfb2ZmID0gc3RhY2tfc2l6ZTtcXG4gXFx0XFx0XFx0XFx0c3RhY2tfc2l6ZSAtPSA4O1xcbiBcXHRcXHRcXHRcXHRucl9zdGFja19zbG90cysrO1xcbitcXHRcXHRcXHRcXHRzbG90Kys7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0LyogT25seSBjb3B5IHRoZSBhcmd1bWVudHMgb24tc3RhY2sgdG8gY3VycmVudFxcbkBAIC0zMDU0LDE2ICszMTM3LDI0IEBAIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZyxcXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdGlmIChmb3JfY2FsbF9vcmlnaW4pIHtcXG4gXFx0XFx0XFx0XFx0bnJfcmVncyArPSBhcmdfcmVncztcXG4rXFx0XFx0XFx0XFx0c2xvdCArPSBhcmdfcmVncztcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdFxcdC8qIGNvcHkgdGhlIGFyZ3VtZW50cyBmcm9tIHJlZ3MgaW50byBzdGFjayAqL1xcbiBcXHRcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgYXJnX3JlZ3M7IGorKykge1xcbi1cXHRcXHRcXHRcXHRlbWl0X3N0eChwcm9nLCBCUEZfRFcsIEJQRl9SRUdfRlAsXFxuLVxcdFxcdFxcdFxcdFxcdCBucl9yZWdzID09IDUgPyBYODZfUkVHX1I5IDogQlBGX1JFR18xICsgbnJfcmVncyxcXG4tXFx0XFx0XFx0XFx0XFx0IC1zdGFja19zaXplKTtcXG4rXFx0XFx0XFx0XFx0dTMyIHNyYyA9IG5yX3JlZ3MgPT0gNSA/IFg4Nl9SRUdfUjkgOiBCUEZfUkVHXzEgKyBucl9yZWdzO1xcbitcXG4rXFx0XFx0XFx0XFx0aWYgKGFhcmdzIFxcdTAwMjZcXHUwMDI2IChhYXJncy1cXHUwMDNlc2xvdHMgXFx1MDAyNiBCSVQoc2xvdCkpKSB7XFxuK1xcdFxcdFxcdFxcdFxcdGVtaXRfYXJlbmFfYXJnX2NvbnYocHJvZywgc3JjLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgYWFyZ3MtXFx1MDAzZW51bGxhYmxlX3Nsb3RzIFxcdTAwMjYgQklUKHNsb3QpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgKHUzMilhYXJncy1cXHUwMDNla2Vybl92bV9zdGFydCk7XFxuK1xcdFxcdFxcdFxcdFxcdHNyYyA9IEJQRl9SRUdfMDtcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHRcXHRlbWl0X3N0eChwcm9nLCBCUEZfRFcsIEJQRl9SRUdfRlAsIHNyYywgLXN0YWNrX3NpemUpO1xcbiBcXHRcXHRcXHRcXHRzdGFja19zaXplIC09IDg7XFxuIFxcdFxcdFxcdFxcdG5yX3JlZ3MrKztcXG4rXFx0XFx0XFx0XFx0c2xvdCsrO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0fVxcbkBAIC0zMzU0LDExICszNDQ1LDEzIEBAIHN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltXFxuIFxcdHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKmZlbnRyeSA9IFxcdTAwMjZ0bm9kZXNbQlBGX1RSQU1QX0ZFTlRSWV07XFxuIFxcdHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKmZleGl0ID0gXFx1MDAyNnRub2Rlc1tCUEZfVFJBTVBfRkVYSVRdO1xcbiBcXHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICpmbW9kX3JldCA9IFxcdTAwMjZ0bm9kZXNbQlBGX1RSQU1QX01PRElGWV9SRVRVUk5dO1xcbitcXHRzdHJ1Y3QgYnBmX3RyYW1wX2FyZW5hX2FyZ3MgYWFyZ3M7XFxuIFxcdHZvaWQgKm9yaWdfY2FsbCA9IGZ1bmNfYWRkcjtcXG4gXFx0aW50IGNvb2tpZV9vZmYsIGNvb2tpZV9jbnQ7XFxuIFxcdHU4ICoqYnJhbmNoZXMgPSBOVUxMO1xcbiBcXHR1NjQgZnVuY19tZXRhO1xcbiBcXHR1OCAqcHJvZztcXG4rXFx0Ym9vbCBoYXNfYWFyZ3M7XFxuIFxcdGJvb2wgc2F2ZV9yZXQ7XFxuIFxcbiBcXHQvKlxcbkBAIC0zMzY5LDYgKzM0NjIsOCBAQCBzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbVxcbiBcXHRXQVJOX09OX09OQ0UoKGZsYWdzIFxcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAgKGZsYWdzIFxcdTAwMjYgfihCUEZfVFJBTVBfRl9JTkRJUkVDVCB8IEJQRl9UUkFNUF9GX1JFVF9GRU5UUllfUkVUKSkpO1xcbiBcXG4rXFx0aGFzX2FhcmdzID0gYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJncyh0bm9kZXMsIGZsYWdzLCBcXHUwMDI2YWFyZ3MpO1xcbitcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG0tXFx1MDAzZW5yX2FyZ3M7IGkrKylcXG4gXFx0XFx0bnJfcmVncyArPSAobS1cXHUwMDNlYXJnX3NpemVbaV0gKyA3KSAvIDggLSAxO1xcbiBcXG5AQCAtMzUwMyw3ICszNTk4LDggQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1cXG4gXFx0XFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChcXHUwMDI2cHJvZywgQlBGX1JFR18wLCAtaXBfb2ZmLCAobG9uZylmdW5jX2FkZHIpO1xcbiBcXHR9XFxuIFxcbi1cXHRzYXZlX2FyZ3MobSwgXFx1MDAyNnByb2csIHJlZ3Nfb2ZmLCBmYWxzZSwgZmxhZ3MpO1xcbitcXHRzYXZlX2FyZ3MobSwgXFx1MDAyNnByb2csIHJlZ3Nfb2ZmLCBmYWxzZSwgZmxhZ3MsXFxuK1xcdFxcdCAgaGFzX2FhcmdzID8gXFx1MDAyNmFhcmdzIDogTlVMTCk7XFxuIFxcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9DQUxMX09SSUcpIHtcXG4gXFx0XFx0LyogYXJnMTogbW92IHJkaSwgaW0gKi9cXG5AQCAtMzU0NSw3ICszNjQxLDcgQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1cXG4gXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX0NBTExfT1JJRykge1xcbiBcXHRcXHRyZXN0b3JlX3JlZ3MobSwgXFx1MDAyNnByb2csIHJlZ3Nfb2ZmKTtcXG4tXFx0XFx0c2F2ZV9hcmdzKG0sIFxcdTAwMjZwcm9nLCBhcmdfc3RhY2tfb2ZmLCB0cnVlLCBmbGFncyk7XFxuK1xcdFxcdHNhdmVfYXJncyhtLCBcXHUwMDI2cHJvZywgYXJnX3N0YWNrX29mZiwgdHJ1ZSwgZmxhZ3MsIE5VTEwpO1xcbiBcXG4gXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX1RSQU1QX0ZfVEFJTF9DQUxMX0NUWCkge1xcbiBcXHRcXHRcXHQvKiBCZWZvcmUgY2FsbGluZyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24sIGxvYWQgdGhlXFxuQEAgLTQwNDYsNiArNDE0MiwxMSBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4rYm9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcXG4re1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gdm9pZCAqYnBmX2FyY2hfdGV4dF9jb3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3QgbGVuKVxcbiB7XFxuIFxcdGlmICh0ZXh0X3Bva2VfY29weShkc3QsIHNyYywgbGVuKSA9PSBOVUxMKVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxcbmluZGV4IDM1Njg4NDU4N2FlMTEuLjJmNjA2YzMyNTY4MDYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmLmhcXG5AQCAtMTIxMyw2ICsxMjEzLDEyIEBAIHN0cnVjdCBicGZfcHJvZ19vZmZsb2FkIHtcXG4gLyogVGhlIGFyZ3VtZW50IGlzIHNpZ25lZC4gKi9cXG4gI2RlZmluZSBCVEZfRk1PREVMX1NJR05FRF9BUkdcXHRcXHRCSVQoMSlcXG4gXFxuKy8qIFRoZSBhcmd1bWVudCBpcyBhbiBhcmVuYSBwb2ludGVyLiAqL1xcbisjZGVmaW5lIEJURl9GTU9ERUxfQVJFTkFfQVJHXFx0XFx0QklUKDIpXFxuK1xcbisvKiBUaGUgYXJndW1lbnQgaXMgbnVsbGFibGUuICovXFxuKyNkZWZpbmUgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkdcXHRcXHRCSVQoMylcXG4rXFxuIHN0cnVjdCBidGZfZnVuY19tb2RlbCB7XFxuIFxcdHU4IHJldF9zaXplO1xcbiBcXHR1OCByZXRfZmxhZ3M7XFxuQEAgLTEyODYsNiArMTI5MiwyMCBAQCBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzIHtcXG4gXFx0aW50IG5yX25vZGVzO1xcbiB9O1xcbiBcXG4rLypcXG4rICogV2hpY2ggOC1ieXRlIGN0eCBzbG90cyBvZiBhIHN0cnVjdF9vcHMgdHJhbXBvbGluZSBob2xkIGFyZW5hIGtlcm5lbFxcbisgKiBwb2ludGVycyB0aGF0IHNhdmVfYXJncygpIGNvbnZlcnRzIHRvIHRoZSBhcmVuYSBwb2ludGVyIGZvcm0sXFxuKyAqIGN0eFtzbG90XSA9ICh1MzIpKGthZGRyIC0ga2Vybl92bV9zdGFydCkuXFxuKyAqL1xcbitzdHJ1Y3QgYnBmX3RyYW1wX2FyZW5hX2FyZ3Mge1xcbitcXHR1MzIgc2xvdHM7XFxuK1xcdHUzMiBudWxsYWJsZV9zbG90cztcXHQvKiBzdWJzZXQgb2YgQHNsb3RzIHdoZXJlIE5VTEwgaXMgcHJlc2VydmVkICovXFxuK1xcdHU2NCBrZXJuX3ZtX3N0YXJ0O1xcbit9O1xcbitcXG4rYm9vbCBicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzKHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcywgdTMyIGZsYWdzLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBicGZfdHJhbXBfYXJlbmFfYXJncyAqYWFyZ3MpO1xcbitcXG4gc3RydWN0IGJwZl90cmFtcF9ydW5fY3R4O1xcbiBcXG4gLyogRGlmZmVyZW50IHVzZSBjYXNlcyBmb3IgQlBGIHRyYW1wb2xpbmU6XFxuQEAgLTE2ODcsNiArMTcwNywxMSBAQCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4IHtcXG4gXFx0dTMyIGJ0Zl9pZDtcXG4gXFx0dTMyIHJlZl9pZDtcXG4gXFx0Ym9vbCByZWZjb3VudGVkO1xcbitcXHQvKlxcbitcXHQgKiBXZSBkb24ndCBlbmNvZGUgTlVMTC1uZXNzIGluIHRoZSB0eXBlIGZvciB0aGUgcHJvZ3JhbSwgYnV0IHN0aWxsIG5lZWRcXG4rXFx0ICogdG8gZGlzdGluZ3Vpc2ggaXQgZm9yIHRoZSBwdXJwb3NlcyBvZiB0ZWxsaW5nIEpJVHMgd2hhdCBzZXF1ZW5jZSB0byBlbWl0LlxcbitcXHQgKi9cXG4rXFx0Ym9vbCBhcmVuYV9udWxsYWJsZTtcXG4gfTtcXG4gXFxuIHN0cnVjdCBidGZfbW9kX3BhaXIge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxcbmluZGV4IDMyZDUyOTdjNTU3ZTUuLjM2Y2UzNDAzZmU1OTkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG5AQCAtMTE4Myw2ICsxMTgzLDcgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX3N1YnByb2dfdGFpbGNhbGxzKHZvaWQpO1xcbiBib29sIGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24odm9pZCk7XFxuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19rZnVuY19jYWxsKHZvaWQpO1xcbiBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKTtcXG4rYm9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZCk7XFxuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19mYXJfa2Z1bmNfY2FsbCh2b2lkKTtcXG4gYm9vbCBicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnModm9pZCk7XFxuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19wdHJfeGNoZyh2b2lkKTtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jIGIva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jXFxuaW5kZXggNGU3YTQ4YzAyYmU1Yy4uODI3YTYyMTZhNjIwMSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmNcXG4rKysgYi9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmNcXG5AQCAtMTQ3LDYgKzE0Nyw4IEBAIHZvaWQgYnBmX3N0cnVjdF9vcHNfaW1hZ2VfZnJlZSh2b2lkICppbWFnZSlcXG4gXFxuICNkZWZpbmUgTUFZQkVfTlVMTF9TVUZGSVggXFxcIl9fbnVsbGFibGVcXFwiXFxuICNkZWZpbmUgUkVGQ09VTlRFRF9TVUZGSVggXFxcIl9fcmVmXFxcIlxcbisjZGVmaW5lIEFSRU5BX1NVRkZJWCBcXFwiX19hcmVuYVxcXCJcXG4rI2RlZmluZSBBUkVOQV9NQVlCRV9OVUxMX1NVRkZJWCBcXFwiX19hcmVuYV9udWxsYWJsZVxcXCJcXG4gXFxuIC8qIFByZXBhcmUgYXJndW1lbnQgaW5mbyBmb3IgZXZlcnkgbnVsbGFibGUgYXJndW1lbnQgb2YgYSBtZW1iZXIgb2YgYVxcbiAgKiBzdHJ1Y3Rfb3BzIHR5cGUuXFxuQEAgLTE1OSw3ICsxNjEsNyBAQCB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX2ltYWdlX2ZyZWUodm9pZCAqaW1hZ2UpXFxuICAqIHRvIHByb3ZpZGUgYW4gYXJyYXkgb2Ygc3RydWN0IGJwZl9jdHhfYXJnX2F1eCwgd2hpY2ggaW4gdHVybiBwcm92aWRlc1xcbiAgKiB0aGUgaW5mb3JtYXRpb24gdGhhdCB1c2VkIGJ5IHRoZSB2ZXJpZmllciB0byBjaGVjayB0aGUgYXJndW1lbnRzIG9mIHRoZVxcbiAgKiBCUEYgc3RydWN0X29wcyBwcm9ncmFtIGFzc2lnbmVkIHRvIHRoZSBtZW1iZXIuIEhlcmUsIHdlIG9ubHkgY2FyZSBhYm91dFxcbi0gKiB0aGUgYXJndW1lbnRzIHRoYXQgYXJlIG1hcmtlZCBhcyBfX251bGxhYmxlLlxcbisgKiB0aGUgYXJndW1lbnRzIHRoYXQgYXJlIG1hcmtlZCBhcyBfX251bGxhYmxlLCBfX3JlZiBvciBfX2FyZW5hLlxcbiAgKlxcbiAgKiBUaGUgYXJyYXkgb2Ygc3RydWN0IGJwZl9jdHhfYXJnX2F1eCBpcyBldmVudHVhbGx5IGFzc2lnbmVkIHRvXFxuICAqIHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlY3R4X2FyZ19pbmZvIG9mIEJQRiBzdHJ1Y3Rfb3BzIHByb2dyYW1zIGFuZCBwYXNzZWQgdG8gdGhlXFxuQEAgLTE3NSw3ICsxNzcsOCBAQCBzdGF0aWMgaW50IHByZXBhcmVfYXJnX2luZm8oc3RydWN0IGJ0ZiAqYnRmLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2FyZ19pbmZvICphcmdfaW5mbylcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnN0dWJfZnVuY19wcm90bywgKnBvaW50ZWRfdHlwZTtcXG4tXFx0Ym9vbCBpc19udWxsYWJsZSA9IGZhbHNlLCBpc19yZWZjb3VudGVkID0gZmFsc2U7XFxuK1xcdGJvb2wgaXNfbnVsbGFibGUgPSBmYWxzZSwgaXNfcmVmY291bnRlZCA9IGZhbHNlLCBpc19hcmVuYSA9IGZhbHNlO1xcbitcXHRib29sIGlzX2FyZW5hX251bGxhYmxlID0gZmFsc2U7XFxuIFxcdGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKnN0dWJfYXJncywgKmFyZ3M7XFxuIFxcdHN0cnVjdCBicGZfY3R4X2FyZ19hdXggKmluZm8sICppbmZvX2J1ZjtcXG4gXFx0dTMyIG5hcmdzLCBhcmdfbm8sIGluZm9fY250ID0gMDtcXG5AQCAtMjI2LDI2ICsyMjksMzAgQEAgc3RhdGljIGludCBwcmVwYXJlX2FyZ19pbmZvKHN0cnVjdCBidGYgKmJ0ZixcXG4gXFx0aW5mbyA9IGluZm9fYnVmO1xcbiBcXHRmb3IgKGFyZ19ubyA9IDA7IGFyZ19ubyBcXHUwMDNjIG5hcmdzOyBhcmdfbm8rKykge1xcbiBcXHRcXHQvKiBTa2lwIGFyZ3VtZW50cyB0aGF0IGlzIG5vdCBzdWZmaXhlZCB3aXRoXFxuLVxcdFxcdCAqIFxcXCJfX251bGxhYmxlIG9yIF9fcmVmXFxcIi5cXG4rXFx0XFx0ICogXFxcIl9fbnVsbGFibGVcXFwiLCBcXFwiX19yZWZcXFwiLCBcXFwiX19hcmVuYVxcXCIgb3IgXFxcIl9fYXJlbmFfbnVsbGFibGVcXFwiLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aXNfbnVsbGFibGUgPSBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgXFx1MDAyNnN0dWJfYXJnc1thcmdfbm9dLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIE1BWUJFX05VTExfU1VGRklYKTtcXG4gXFx0XFx0aXNfcmVmY291bnRlZCA9IGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBcXHUwMDI2c3R1Yl9hcmdzW2FyZ19ub10sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBSRUZDT1VOVEVEX1NVRkZJWCk7XFxuK1xcdFxcdGlzX2FyZW5hX251bGxhYmxlID0gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIFxcdTAwMjZzdHViX2FyZ3NbYXJnX25vXSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgQVJFTkFfTUFZQkVfTlVMTF9TVUZGSVgpO1xcbitcXHRcXHRpc19hcmVuYSA9IGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBcXHUwMDI2c3R1Yl9hcmdzW2FyZ19ub10sIEFSRU5BX1NVRkZJWCk7XFxuIFxcbiBcXHRcXHRpZiAoaXNfbnVsbGFibGUpXFxuIFxcdFxcdFxcdHN1ZmZpeCA9IE1BWUJFX05VTExfU1VGRklYO1xcbiBcXHRcXHRlbHNlIGlmIChpc19yZWZjb3VudGVkKVxcbiBcXHRcXHRcXHRzdWZmaXggPSBSRUZDT1VOVEVEX1NVRkZJWDtcXG4rXFx0XFx0ZWxzZSBpZiAoaXNfYXJlbmFfbnVsbGFibGUpXFxuK1xcdFxcdFxcdHN1ZmZpeCA9IEFSRU5BX01BWUJFX05VTExfU1VGRklYO1xcbitcXHRcXHRlbHNlIGlmIChpc19hcmVuYSlcXG4rXFx0XFx0XFx0c3VmZml4ID0gQVJFTkFfU1VGRklYO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0LyogU2hvdWxkIGJlIGEgcG9pbnRlciB0byBzdHJ1Y3QgKi9cXG4tXFx0XFx0cG9pbnRlZF90eXBlID0gYnRmX3R5cGVfcmVzb2x2ZV9wdHIoYnRmLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgYXJnc1thcmdfbm9dLnR5cGUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2YXJnX2J0Zl9pZCk7XFxuLVxcdFxcdGlmICghcG9pbnRlZF90eXBlIHx8XFxuLVxcdFxcdCAgICAhYnRmX3R5cGVfaXNfc3RydWN0KHBvaW50ZWRfdHlwZSkpIHtcXG4rXFx0XFx0LyogU2hvdWxkIGJlIGEgcG9pbnRlciB0byBzdHJ1Y3QsIG9yIGFueSBwb2ludGVyIGZvciBfX2FyZW5hL19fYXJlbmFfbnVsbGFibGUgKi9cXG4rXFx0XFx0cG9pbnRlZF90eXBlID0gYnRmX3R5cGVfcmVzb2x2ZV9wdHIoYnRmLCBhcmdzW2FyZ19ub10udHlwZSwgXFx1MDAyNmFyZ19idGZfaWQpO1xcbitcXHRcXHRpZiAoIXBvaW50ZWRfdHlwZSB8fCAoIWlzX2FyZW5hIFxcdTAwMjZcXHUwMDI2ICFpc19hcmVuYV9udWxsYWJsZSBcXHUwMDI2XFx1MDAyNiAhYnRmX3R5cGVfaXNfc3RydWN0KHBvaW50ZWRfdHlwZSkpKSB7XFxuIFxcdFxcdFxcdHByX3dhcm4oXFxcInN0dWIgZnVuY3Rpb24gJXMgaGFzICVzIHRhZ2dpbmcgdG8gYW4gdW5zdXBwb3J0ZWQgdHlwZVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0c3R1Yl9mbmFtZSwgc3VmZml4KTtcXG4gXFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbkBAIC0yNzMsNiArMjgwLDE1IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9hcmdfaW5mbyhzdHJ1Y3QgYnRmICpidGYsXFxuIFxcdFxcdH0gZWxzZSBpZiAoaXNfcmVmY291bnRlZCkge1xcbiBcXHRcXHRcXHRpbmZvLVxcdTAwM2VyZWdfdHlwZSA9IFBUUl9UUlVTVEVEIHwgUFRSX1RPX0JURl9JRDtcXG4gXFx0XFx0XFx0aW5mby1cXHUwMDNlcmVmY291bnRlZCA9IHRydWU7XFxuK1xcdFxcdH0gZWxzZSBpZiAoaXNfYXJlbmEgfHwgaXNfYXJlbmFfbnVsbGFibGUpIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogQm90aCB0eXBlcyBnZXQgUFRSX1RPX0FSRU5BLiBJbiB2ZXJpZmllciBzdGF0ZSxcXG4rXFx0XFx0XFx0ICogUFRSX1RPX0FSRU5BIGVuY29tcGFzc2VzIHBvdGVudGlhbCBOVUxMIHZhbHVlcywgYnV0XFxuK1xcdFxcdFxcdCAqIHdlIGRvIG5vdCBmb3JjZSB0aGUgcHJvZ3JhbSB0byBjaGVjayBpdCwgb3IgbWFpbnRhaW5cXG4rXFx0XFx0XFx0ICogcHJlY2lzaW9uIGFyb3VuZCBpdCwgc2luY2UgaXQgaGFzIG5vIHNhZmV0eSBpbXBsaWNhdGlvbi5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGluZm8tXFx1MDAzZXJlZ190eXBlID0gUFRSX1RPX0FSRU5BO1xcbitcXHRcXHRcXHRpbmZvLVxcdTAwM2VhcmVuYV9udWxsYWJsZSA9IGlzX2FyZW5hX251bGxhYmxlO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRpbmZvKys7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jXFxuaW5kZXggNWU4YWM0NWNlNTZhZi4uZTMxZjU2ZjQwMWViZiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2J0Zi5jXFxuKysrIGIva2VybmVsL2JwZi9idGYuY1xcbkBAIC02OTYzLDE1ICs2OTYzLDE5IEBAIGJvb2wgYnRmX2N0eF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbiBcXG4tXFx0LyogY2hlY2sgZm9yIFBUUl9UT19SRE9OTFlfQlVGX09SX05VTEwgb3IgUFRSX1RPX1JEV1JfQlVGX09SX05VTEwgKi9cXG4rXFx0LypcXG4rXFx0ICogQ2hlY2sgZm9yIFBUUl9UT19SRE9OTFlfQlVGX09SX05VTEwsIFBUUl9UT19SRFdSX0JVRl9PUl9OVUxMIG9yXFxuK1xcdCAqIFBUUl9UT19BUkVOQSAoYm90aCBudWxsYWJsZSBhbmQgbm9uLW51bGxhYmxlIGNhc2VzKS5cXG4rXFx0ICovXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWN0eF9hcmdfaW5mb19zaXplOyBpKyspIHtcXG4gXFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9jdHhfYXJnX2F1eCAqY3R4X2FyZ19pbmZvID0gXFx1MDAyNnByb2ctXFx1MDAzZWF1eC1cXHUwMDNlY3R4X2FyZ19pbmZvW2ldO1xcbiBcXHRcXHR1MzIgdHlwZSwgZmxhZztcXG4gXFxuIFxcdFxcdHR5cGUgPSBiYXNlX3R5cGUoY3R4X2FyZ19pbmZvLVxcdTAwM2VyZWdfdHlwZSk7XFxuIFxcdFxcdGZsYWcgPSB0eXBlX2ZsYWcoY3R4X2FyZ19pbmZvLVxcdTAwM2VyZWdfdHlwZSk7XFxuLVxcdFxcdGlmIChjdHhfYXJnX2luZm8tXFx1MDAzZW9mZnNldCA9PSBvZmYgXFx1MDAyNlxcdTAwMjYgdHlwZSA9PSBQVFJfVE9fQlVGIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAoZmxhZyBcXHUwMDI2IFBUUl9NQVlCRV9OVUxMKSkge1xcbitcXHRcXHRpZiAoY3R4X2FyZ19pbmZvLVxcdTAwM2VvZmZzZXQgPT0gb2ZmIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAodHlwZSA9PSBQVFJfVE9fQVJFTkEgfHxcXG4rXFx0XFx0ICAgICAodHlwZSA9PSBQVFJfVE9fQlVGIFxcdTAwMjZcXHUwMDI2IChmbGFnIFxcdTAwMjYgUFRSX01BWUJFX05VTEwpKSkpIHtcXG4gXFx0XFx0XFx0aW5mby1cXHUwMDNlcmVnX3R5cGUgPSBjdHhfYXJnX2luZm8tXFx1MDAzZXJlZ190eXBlO1xcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0XFx0fVxcbkBAIC03NTQxLDYgKzc1NDUsMjIgQEAgc3RhdGljIHU4IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdClcXG4gXFx0cmV0dXJuIGZsYWdzO1xcbiB9XFxuIFxcbitzdGF0aWMgdTggX19nZXRfYXJnX2Ztb2RlbF9mbGFncyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuK1xcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcsXFxuK1xcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpXFxuK3tcXG4rXFx0dTggZmxhZ3MgPSBfX2dldF90eXBlX2Ztb2RlbF9mbGFncyh0KTtcXG4rXFxuK1xcdGlmIChidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcXFwiX19hcmVuYVxcXCIpIHx8XFxuK1xcdCAgICBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcXFwiX19hcmVuYV9udWxsYWJsZVxcXCIpKVxcbitcXHRcXHRmbGFncyB8PSBCVEZfRk1PREVMX0FSRU5BX0FSRztcXG4rXFx0aWYgKGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFxcXCJfX251bGxhYmxlXFxcIikgfHxcXG4rXFx0ICAgIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFxcXCJfX2FyZW5hX251bGxhYmxlXFxcIikpXFxuK1xcdFxcdGZsYWdzIHw9IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHO1xcbitcXG4rXFx0cmV0dXJuIGZsYWdzO1xcbit9XFxuK1xcbiBpbnQgYnRmX2Rpc3RpbGxfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbiBcXHRcXHRcXHQgICBzdHJ1Y3QgYnRmICpidGYsXFxuIFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqZnVuYyxcXG5AQCAtNzYwNiw3ICs3NjI2LDcgQEAgaW50IGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8oc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG4gXFx0XFx0bS1cXHUwMDNlYXJnX3NpemVbaV0gPSByZXQ7XFxuLVxcdFxcdG0tXFx1MDAzZWFyZ19mbGFnc1tpXSA9IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKHQpO1xcbitcXHRcXHRtLVxcdTAwM2VhcmdfZmxhZ3NbaV0gPSBfX2dldF9hcmdfZm1vZGVsX2ZsYWdzKGJ0ZiwgXFx1MDAyNmFyZ3NbaV0sIHQpO1xcbiBcXHR9XFxuIFxcdG0tXFx1MDAzZW5yX2FyZ3MgPSBuYXJncztcXG4gXFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY29yZS5jIGIva2VybmVsL2JwZi9jb3JlLmNcXG5pbmRleCBlMjA3NjY2N2IyNDUxLi5hM2UxZmFlMzJlYWNlIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvY29yZS5jXFxuKysrIGIva2VybmVsL2JwZi9jb3JlLmNcXG5AQCAtMzMwOCw2ICszMzA4LDExIEBAIGJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuK2Jvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4gYm9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c19mYXJfa2Z1bmNfY2FsbCh2b2lkKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xcbmluZGV4IGVkNzk5OWFkNmM2NmMuLmQyZDdhMjkwNDM0NWQgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi90cmFtcG9saW5lLmNcXG4rKysgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xcbkBAIC01MjksNiArNTI5LDUzIEBAIGJwZl90cmFtcG9saW5lX2dldF9wcm9ncyhjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBpbnQgKnRvdGFsLCBib29sICppcF9hXFxuIFxcdHJldHVybiB0bm9kZXM7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWN0eF9hcmdfaW5mb19zaXplOyBpKyspXFxuK1xcdFxcdGlmIChiYXNlX3R5cGUocHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VjdHhfYXJnX2luZm9baV0ucmVnX3R5cGUpID09IFBUUl9UT19BUkVOQSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rLypcXG4rICogQ29sbGVjdCB3aGljaCBjdHggc2xvdHMgb2YgYSBzdHJ1Y3Rfb3BzIHRyYW1wb2xpbmUgaG9sZCBhcmVuYSBrZXJuZWxcXG4rICogcG9pbnRlcnMgdGhhdCBzYXZlX2FyZ3MoKSBtdXN0IGNvbnZlcnQgdG8gdGhlIGFyZW5hIHBvaW50ZXIgZm9ybS4gT25seVxcbisgKiB0aGUgc3RydWN0X29wcyBpbmRpcmVjdCB0cmFtcG9saW5lIGNvbnZlcnRzOiBpdCBkaXNwYXRjaGVzIHRvIGEgc2luZ2xlXFxuKyAqIHByb2cgd2hvc2UgYXJlbmEgaXMga25vd24gYXQgZ2VuZXJhdGlvbiB0aW1lLiBSZXR1cm4gZmFsc2Ugd2hlbiB0aGVyZVxcbisgKiBpcyBub3RoaW5nIHRvIGNvbnZlcnQuXFxuKyAqL1xcbitib29sIGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3Moc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB1MzIgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IGJwZl90cmFtcF9hcmVuYV9hcmdzICphYXJncylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0bWVtc2V0KGFhcmdzLCAwLCBzaXplb2YoKmFhcmdzKSk7XFxuK1xcbitcXHRpZiAoIShmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX0lORElSRUNUKSB8fFxcbitcXHQgICAgdG5vZGVzW0JQRl9UUkFNUF9GRU5UUlldLm5yX25vZGVzICE9IDEpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHByb2cgPSB0bm9kZXNbQlBGX1RSQU1QX0ZFTlRSWV0ubm9kZXNbMF0tXFx1MDAzZWxpbmstXFx1MDAzZXByb2c7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWN0eF9hcmdfaW5mb19zaXplOyBpKyspIHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9jdHhfYXJnX2F1eCAqaW5mbyA9IFxcdTAwMjZwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWN0eF9hcmdfaW5mb1tpXTtcXG4rXFxuK1xcdFxcdGlmIChiYXNlX3R5cGUoaW5mby1cXHUwMDNlcmVnX3R5cGUpICE9IFBUUl9UT19BUkVOQSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGFhcmdzLVxcdTAwM2VzbG90cyB8PSBCSVQoaW5mby1cXHUwMDNlb2Zmc2V0IC8gOCk7XFxuK1xcdFxcdGlmIChpbmZvLVxcdTAwM2VhcmVuYV9udWxsYWJsZSlcXG4rXFx0XFx0XFx0YWFyZ3MtXFx1MDAzZW51bGxhYmxlX3Nsb3RzIHw9IEJJVChpbmZvLVxcdTAwM2VvZmZzZXQgLyA4KTtcXG4rXFx0fVxcbitcXHRpZiAoIWFhcmdzLVxcdTAwM2VzbG90cylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCFwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWFyZW5hKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRhYXJncy1cXHUwMDNla2Vybl92bV9zdGFydCA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWFyZW5hKTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGJwZl90cmFtcF9pbWFnZV9mcmVlKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltKVxcbiB7XFxuIFxcdGJwZl9pbWFnZV9rc3ltX2RlbChcXHUwMDI2aW0tXFx1MDAzZWtzeW0pO1xcbkBAIC02ODUsNiArNzMyLDcgQEAgc3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRcXG4gXFx0dTMyIG9yaWdfZmxhZ3MgPSB0ci1cXHUwMDNlZmxhZ3M7XFxuIFxcdGJvb2wgaXBfYXJnID0gZmFsc2U7XFxuIFxcdGludCBlcnIsIHRvdGFsLCBzaXplO1xcbitcXHRpbnQga2luZCwgaTtcXG4gXFxuIFxcdHRub2RlcyA9IGJwZl90cmFtcG9saW5lX2dldF9wcm9ncyh0ciwgXFx1MDAyNnRvdGFsLCBcXHUwMDI2aXBfYXJnKTtcXG4gXFx0aWYgKElTX0VSUih0bm9kZXMpKVxcbkBAIC02OTUsNiArNzQzLDIyIEBAIHN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbitcXHQvKlxcbitcXHQgKiBBcmVuYSBjdHggYXJncyBhcmUgY29udmVydGVkIG9ubHkgYnkgdGhlIHN0cnVjdF9vcHMgaW5kaXJlY3RcXG4rXFx0ICogdHJhbXBvbGluZSwgd2hpY2ggZGlzcGF0Y2hlcyB0byBhIHNpbmdsZSBrbm93biBwcm9nLiBHZW5lcmljXFxuK1xcdCAqIHRyYW1wb2xpbmVzIGNhbiBtaXggcHJvZ3Mgd2l0aCBkaWZmZXJlbnQgYXJlbmFzLCBzbyBubyBjb252ZXJzaW9uXFxuK1xcdCAqIGlzIHBvc3NpYmxlIGhlcmUuIE5vdCByZWFjaGFibGUgdG9kYXk6IG9ubHkgc3RydWN0X29wcyBwcm9ncyBnZXRcXG4rXFx0ICogYXJlbmEgY3R4IGFyZ3MgYW5kIHRoZXkgbmV2ZXIgcmlkZSBnZW5lcmljIHRyYW1wb2xpbmVzLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChraW5kID0gMDsga2luZCBcXHUwMDNjIEJQRl9UUkFNUF9NQVg7IGtpbmQrKykge1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdG5vZGVzW2tpbmRdLm5yX25vZGVzOyBpKyspIHtcXG4rXFx0XFx0XFx0aWYgKGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKHRub2Rlc1traW5kXS5ub2Rlc1tpXS1cXHUwMDNlbGluay1cXHUwMDNlcHJvZykpIHtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gLUVOT1RTVVBQO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdC8qIGNsZWFyIGFsbCBiaXRzIGV4Y2VwdCBTSEFSRV9JUE1PRElGWSBhbmQgVEFJTF9DQUxMX0NUWCAqL1xcbiBcXHR0ci1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gKEJQRl9UUkFNUF9GX1NIQVJFX0lQTU9ESUZZIHwgQlBGX1RSQU1QX0ZfVEFJTF9DQUxMX0NUWCk7XFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCBiMjc0MDA0ZmNjZmQ5Li5jOTEyOTMzMGRlZGU2IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC0xMDkwNyw2ICsxMDkwNywxNiBAQCBzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfaXJxX2ZsYWcoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtXFxuIFxcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcXFwiX19pcnFfZmxhZ1xcXCIpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfYXJlbmEoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpXFxuK3tcXG4rXFx0cmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFxcXCJfX2FyZW5hXFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19hcmVuYV9udWxsYWJsZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcXG4re1xcbitcXHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXFxcIl9fYXJlbmFfbnVsbGFibGVcXFwiKTtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX3NjYWxhcl93aXRoX25hbWUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbiBcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZyxcXG4gXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBjaGFyICpuYW1lKVxcbkBAIC0xMTEyNyw2ICsxMTEzNyw3IEBAIGVudW0ga2Z1bmNfcHRyX2FyZ190eXBlIHtcXG4gXFx0S0ZfQVJHX1BUUl9UT19JUlFfRkxBRyxcXG4gXFx0S0ZfQVJHX1BUUl9UT19SRVNfU1BJTl9MT0NLLFxcbiBcXHRLRl9BUkdfUFRSX1RPX1RBU0tfV09SSyxcXG4rXFx0S0ZfQVJHX1BUUl9UT19BUkVOQSxcXG4gfTtcXG4gXFxuIGVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcXG5AQCAtMTE0MTIsNyArMTE0MjMsNiBAQCBnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxcbiBcXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ0Zl90eXBlX3N0cih0KSk7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuLVxcbiBcXHRyZWZfdCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKG1ldGEtXFx1MDAzZWJ0ZiwgdC1cXHUwMDNldHlwZSwgTlVMTCk7XFxuIFxcdHJlZl90bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChtZXRhLVxcdTAwM2VidGYsIHJlZl90LVxcdTAwM2VuYW1lX29mZik7XFxuIFxcbkBAIC0xMTQ2MSw2ICsxMTQ3MSw5IEBAIGdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxuIFxcdFxcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19SRVNfU1BJTl9MT0NLO1xcbiBcXHRlbHNlIGlmIChpc19rZnVuY19hcmdfY2FsbGJhY2soZW52LCBtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pKVxcbiBcXHRcXHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQ0FMTEJBQ0s7XFxuK1xcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19hcmVuYShtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pIHx8XFxuK1xcdFxcdCBpc19rZnVuY19hcmdfYXJlbmFfbnVsbGFibGUobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4rXFx0XFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0FSRU5BO1xcbiBcXHRlbHNlIGlmIChhcmcgKyAxIFxcdTAwM2MgbmFyZ3MgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0IChpc19rZnVuY19hcmdfbWVtX3NpemUobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmcgKyAxXSkgfHxcXG4gXFx0XFx0ICBpc19rZnVuY19hcmdfY29uc3RfbWVtX3NpemUobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmcgKyAxXSkpKSB7XFxuQEAgLTEyMTU0LDYgKzEyMTY3LDMxIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXFxuIFxcbiBcXHRcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmdzW2ldLnR5cGUsIE5VTEwpO1xcbiBcXG4rXFx0XFx0aWYgKGJhc2VfdHlwZShrZl9hcmdfdHlwZSkgPT0gS0ZfQVJHX1BUUl9UT19BUkVOQSkge1xcbitcXHRcXHRcXHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XFxuK1xcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiSklUIGRvZXMgbm90IHN1cHBvcnQga2Z1bmMgJXMoKSB3aXRoIGFyZW5hIHBvaW50ZXIgYXJndW1lbnRzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRmdW5jX25hbWUpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT1RTVVBQO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGlmICghZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWFyZW5hKSB7XFxuK1xcdFxcdFxcdFxcdHZlcmJvc2UoZW52LFxcbitcXHRcXHRcXHRcXHRcXHRcXFwiJXMgYXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRpZiAocmVnbm8gXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgYXJlbmEgcG9pbnRlciBjYW5ub3QgYmUgYSBzdGFjayBhcmd1bWVudFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aWYgKHJlZy1cXHUwMDNldHlwZSAhPSBQVFJfVE9fQVJFTkEgXFx1MDAyNlxcdTAwMjYgcmVnLVxcdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSkge1xcbitcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIGlzIG5vdCBhIHBvaW50ZXIgdG8gYXJlbmEgb3Igc2NhbGFyXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0aWYgKGJ0Zl90eXBlX2lzX3B0cih0KSBcXHUwMDI2XFx1MDAyNiAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSB8fCB0eXBlX21heV9iZV9udWxsKHJlZy1cXHUwMDNldHlwZSkpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAhaXNfa2Z1bmNfYXJnX251bGxhYmxlKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbaV0pKSB7XFxuIFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiUG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkICVzXFxcXG5cXFwiLFxcbkBAIC0xODgwNyw2ICsxODg0NSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RydWN0X29wc19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsICpmdW5jX3Byb3RvO1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2M7XFxuK1xcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wc19hcmdfaW5mbyAqYXJnX2luZm87XFxuIFxcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzO1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyO1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBlbnYtXFx1MDAzZXByb2c7XFxuQEAgLTE4ODg1LDEwICsxODkyNCwyMyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbiBcXHR9XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc3Rfb3BzX2Rlc2MtXFx1MDAzZWFyZ19pbmZvW21lbWJlcl9pZHhdLmNudDsgaSsrKSB7XFxuLVxcdFxcdGlmIChzdF9vcHNfZGVzYy1cXHUwMDNlYXJnX2luZm9bbWVtYmVyX2lkeF0uaW5mb1tpXS5yZWZjb3VudGVkKSB7XFxuK1xcdGFyZ19pbmZvID0gXFx1MDAyNnN0X29wc19kZXNjLVxcdTAwM2VhcmdfaW5mb1ttZW1iZXJfaWR4XTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFyZ19pbmZvLVxcdTAwM2VjbnQ7IGkrKykge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4ICppbmZvID0gXFx1MDAyNmFyZ19pbmZvLVxcdTAwM2VpbmZvW2ldO1xcbitcXG4rXFx0XFx0aWYgKGluZm8tXFx1MDAzZXJlZmNvdW50ZWQpXFxuIFxcdFxcdFxcdGhhc19yZWZjb3VudGVkX2FyZyA9IHRydWU7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRpZiAoYmFzZV90eXBlKGluZm8tXFx1MDAzZXJlZ190eXBlKSA9PSBQVFJfVE9fQVJFTkEpIHtcXG4rXFx0XFx0XFx0aWYgKCFicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3MoKSkge1xcbitcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIkpJVCBkb2VzIG5vdCBzdXBwb3J0IGFyZW5hIGFyZ3VtZW50c1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRU5PVFNVUFA7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aWYgKCFwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWFyZW5hKSB7XFxuK1xcdFxcdFxcdFxcdHZlcmJvc2UoZW52LFxcbitcXHRcXHRcXHRcXHRcXHRcXFwiYXJlbmEgYXJndW1lbnQgb2YgJXMgcmVxdWlyZXMgYSBwcm9ncmFtIHdpdGggYW4gYXNzb2NpYXRlZCBhcmVuYVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0bW5hbWUpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuQEAgLTE4OTA5LDggKzE4OTYxLDcgQEAgc3RhdGljIGludCBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWF0dGFjaF9mdW5jX25hbWUgPSBtbmFtZTtcXG4gXFx0ZW52LVxcdTAwM2VvcHMgPSBzdF9vcHMtXFx1MDAzZXZlcmlmaWVyX29wcztcXG4gXFxuLVxcdHJldHVybiBicGZfcHJvZ19jdHhfYXJnX2luZm9faW5pdChwcm9nLCBzdF9vcHNfZGVzYy1cXHUwMDNlYXJnX2luZm9bbWVtYmVyX2lkeF0uaW5mbyxcXG4tXFx0XFx0XFx0XFx0XFx0ICBzdF9vcHNfZGVzYy1cXHUwMDNlYXJnX2luZm9bbWVtYmVyX2lkeF0uY250KTtcXG4rXFx0cmV0dXJuIGJwZl9wcm9nX2N0eF9hcmdfaW5mb19pbml0KHByb2csIGFyZ19pbmZvLVxcdTAwM2VpbmZvLCBhcmdfaW5mby1cXHUwMDNlY250KTtcXG4gfVxcbiAjZGVmaW5lIFNFQ1VSSVRZX1BSRUZJWCBcXFwic2VjdXJpdHlfXFxcIlxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2tmdW5jLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjliZTE5NTY1ZjBkNTNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfa2Z1bmMuY1xcbkBAIC0wLDAgKzEsMTUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImFyZW5hX2tmdW5jLnNrZWwuaFxcXCJcXG4rXFxuKy8qXFxuKyAqIFRoZSB0ZXN0IGtmdW5jcyBsaXZlIGluIGJwZl90ZXN0bW9kLiBSZXNvbHZpbmcga2Z1bmNzIGFnYWluc3QgbW9kdWxlXFxuKyAqIEJURnMgbmVlZHMgQ0FQX1NZU19BRE1JTiwgc28gcnVuIHdpdGggZnVsbCBjYXBhYmlsaXRpZXMgaW5zdGVhZCBvZlxcbisgKiB0aHJvdWdoIHRoZSB2ZXJpZmllciB0ZXN0cycgY2FwYWJpbGl0eS1yZXN0cmljdGVkIHJ1bm5lci5cXG4rICovXFxuK3ZvaWQgdGVzdF9hcmVuYV9rZnVuYyh2b2lkKVxcbit7XFxuK1xcdFJVTl9URVNUUyhhcmVuYV9rZnVuYyk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfa2Z1bmNfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9rZnVuY19qaXQuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjM1OWNkZTI0YzQ1ZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9rZnVuY19qaXQuY1xcbkBAIC0wLDAgKzEsMTMgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYXJlbmFfa2Z1bmNfaml0LnNrZWwuaFxcXCJcXG4rXFxuKy8qXFxuKyAqIFJ1bnMgd2l0aCBmdWxsIGNhcGFiaWxpdGllczogcmVzb2x2aW5nIG1vZHVsZSBrZnVuYyBrc3ltcyByZXF1aXJlc1xcbisgKiBDQVBfU1lTX0FETUlOLCB3aGljaCBydWxlcyBvdXQgdGhlIGNhcGFiaWxpdHktcmVzdHJpY3RlZCBydW5uZXIuXFxuKyAqL1xcbit2b2lkIHRlc3RfYXJlbmFfa2Z1bmNfaml0KHZvaWQpXFxuK3tcXG4rXFx0UlVOX1RFU1RTKGFyZW5hX2tmdW5jX2ppdCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjFlMzlkZWZhMzhhZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xcbkBAIC0wLDAgKzEsNzQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcInN0cnVjdF9vcHNfYXJlbmEuc2tlbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwic3RydWN0X29wc19hcmVuYV9mYWlsLnNrZWwuaFxcXCJcXG4rXFxuKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pXFxuKy8qXFxuKyAqIEF0dGFjaCBjYWxsYmFja3Mgd2l0aCBfX2FyZW5hIGFuZCBfX2FyZW5hX251bGxhYmxlIGFyZ3VtZW50cyBhbmQgZHJpdmVcXG4rICogdGhlbSB0aHJvdWdoIHRoZSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSooKSBrZnVuY3MuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBhcmVuYV9hcmcodm9pZClcXG4re1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpO1xcbitcXHRzdHJ1Y3Qgc3RydWN0X29wc19hcmVuYSAqc2tlbDtcXG4rXFx0c3RydWN0IGJwZl9saW5rICpsaW5rID0gTlVMTDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdHNrZWwgPSBzdHJ1Y3Rfb3BzX2FyZW5hX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic3RydWN0X29wc19hcmVuYV9fb3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRsaW5rID0gYnBmX21hcF9fYXR0YWNoX3N0cnVjdF9vcHMoc2tlbC1cXHUwMDNlbWFwcy50ZXN0bW9kX2FyZW5hKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGxpbmssIFxcXCJhdHRhY2hfc3RydWN0X29wc1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLnRyaWdnZXIpLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZ0b3B0cyk7XFxuK1xcdEFTU0VSVF9PSyhlcnIsIFxcXCJ0ZXN0X3J1blxcXCIpO1xcbitcXHRBU1NFUlRfRVEodG9wdHMucmV0dmFsLCAwLCBcXFwidHJpZ2dlcl9yZXR2YWxcXFwiKTtcXG4rXFxuK291dDpcXG4rXFx0YnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XFxuK1xcdHN0cnVjdF9vcHNfYXJlbmFfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEEgcHJvZ3JhbSB3aXRoIG5vIGFyZW5hIGNhbm5vdCBhdHRhY2ggdG8gYSBtZW1iZXIgd2l0aCBhbiBfX2FyZW5hXFxuKyAqIGFyZ3VtZW50LlxcbisgKi9cXG4rc3RhdGljIHZvaWQgYXJlbmFfYXJnX2ZhaWwodm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qgc3RydWN0X29wc19hcmVuYV9mYWlsICpza2VsO1xcbitcXG4rXFx0c2tlbCA9IHN0cnVjdF9vcHNfYXJlbmFfZmFpbF9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoQVNTRVJUX0VSUl9QVFIoc2tlbCwgXFxcInN0cnVjdF9vcHNfYXJlbmFfZmFpbF9fb3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWxfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG4rI2VuZGlmXFxuK1xcbisvKlxcbisgKiBTZXJpYWxpemVkIGJlY2F1c2UgaXQgYXR0YWNoZXMgdGhlIHNpbmdsZXRvbiBicGZfdGVzdG1vZF9vcHMzLCB3aGljaFxcbisgKiB0ZXN0X3N0cnVjdF9vcHNfcHJpdmF0ZV9zdGFjayBhbHNvIGF0dGFjaGVzOyByZWdpc3RlcmluZyBpdCB0d2ljZSBmYWlsc1xcbisgKiB3aXRoIC1FRVhJU1QuXFxuKyAqL1xcbit2b2lkIHNlcmlhbF90ZXN0X3N0cnVjdF9vcHNfYXJlbmEodm9pZClcXG4re1xcbitcXHQvKlxcbitcXHQgKiBBcmVuYSBzdHJ1Y3Rfb3BzIGFyZ3VtZW50cyBuZWVkIEpJVCBzdXBwb3J0LCBjdXJyZW50bHkgeDg2LTY0IG9ubHkuXFxuK1xcdCAqIEVsc2V3aGVyZSB2ZXJpZmljYXRpb24gZmFpbHMgd2l0aCBcXFwiSklUIGRvZXMgbm90IHN1cHBvcnQgYXJlbmFcXG4rXFx0ICogYXJndW1lbnRzXFxcIiwgc28gdGhlIHByb2dyYW1zIGNhbm5vdCBldmVuIGxvYWQuXFxuK1xcdCAqL1xcbisjaWYgZGVmaW5lZChfX3g4Nl82NF9fKVxcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYXJlbmFfYXJnXFxcIikpXFxuK1xcdFxcdGFyZW5hX2FyZygpO1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYXJlbmFfYXJnX2ZhaWxcXFwiKSlcXG4rXFx0XFx0YXJlbmFfYXJnX2ZhaWwoKTtcXG4rI2Vsc2VcXG4rXFx0dGVzdF9fc2tpcCgpO1xcbisjZW5kaWZcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xNWQ0ODE1MTc5N2RhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXFxuQEAgLTAsMCArMSwyNjAgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbitcXG4rI2RlZmluZSBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFU1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJicGZfbWlzYy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYnBmX2V4cGVyaW1lbnRhbC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmX2FyZW5hX2NvbW1vbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiLi4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXFxcIlxcbitcXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XFxuK1xcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcXG4rXFx0LyogcGFnZSAwIGhvc3RzIHRoZSBhcmVuYSBnbG9iYWwsIHBhZ2UgMSBpcyBmb3IgYWxsb2NhdGlvbnMgKi9cXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAyKTtcXG4rfSBhcmVuYSBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbisvKlxcbisgKiBPY2N1cGllcyBwYWdlIDAgc28gbm8gYWxsb2NhdGlvbiBsYW5kcyBhdCBhcmVuYSBvZmZzZXQgMCwgd2hpY2ggdGhlXFxuKyAqIG51bGxhYmxlIHRlc3RzIGJlbG93IG11c3QgYmUgYWJsZSB0byB0ZWxsIGFwYXJ0IGZyb20gTlVMTC5cXG4rICovXFxuK3U2NCBfX2FyZW5hIGFyZW5hX3BhZDtcXG4rXFxuKy8qIHZvbGF0aWxlIHRvIGZvcmNlIHRoZSBzY2FsYXIgcmVsb2FkcyBiZWxvdyAqL1xcbit2b2xhdGlsZSB1NjQgc3Rhc2g7XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX2FyY2hfeDg2XzY0XFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxcbitpbnQgYXJlbmFfYXJnX2Zvcm1zKHZvaWQgKmN0eClcXG4re1xcbisjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVClcXG4rXFx0dTY0IF9fYXJlbmEgKnZhbDtcXG4rXFx0dTY0IHJldDtcXG4rXFxuK1xcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdC8qIFBUUl9UT19BUkVOQSBhcmd1bWVudCAqL1xcbitcXHQqdmFsID0gNDE7XFxuK1xcdHJldCA9IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopdmFsKTtcXG4rXFx0aWYgKHJldCAhPSA0MSB8fCAqdmFsICE9IDQyKVxcbitcXHRcXHRyZXR1cm4gMjtcXG4rXFxuK1xcdC8qIHRoZSBsb3cgMzIgYml0cyBhcyBhIHNjYWxhciAqL1xcbitcXHRzdGFzaCA9ICh1MzIpKHU2NCl2YWw7XFxuK1xcdHJldCA9IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopc3Rhc2gpO1xcbitcXHRpZiAocmV0ICE9IDQyIHx8ICp2YWwgIT0gNDMpXFxuK1xcdFxcdHJldHVybiAzO1xcbitcXG4rXFx0LyogdGhlIGZ1bGwgdXNlciBhZGRyZXNzIGFzIGEgc2NhbGFyICovXFxuK1xcdHN0YXNoID0gKHU2NCl2YWw7XFxuK1xcdGJwZl9hZGRyX3NwYWNlX2Nhc3Qoc3Rhc2gsIDEsIDApO1xcbitcXHRyZXQgPSBicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoKHU2NCAqKXN0YXNoKTtcXG4rXFx0aWYgKHJldCAhPSA0MyB8fCAqdmFsICE9IDQ0KVxcbitcXHRcXHRyZXR1cm4gNDtcXG4rXFxuK1xcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XFxuKyNlbmRpZlxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogUGluIHRoZSByZWJhc2Ugc2VtYW50aWNzIHVzaW5nIHRoZSBjYXB0dXJlIGtmdW5jcywgd2hpY2ggcmV0dXJuIHRoZSByYXdcXG4rICogYXJndW1lbnQgdmFsdWU6IF9fYXJlbmEgcmViYXNlcyB1bmNvbmRpdGlvbmFsbHksIHNvIHplcm8gbG93IDMyIGJpdHNcXG4rICogYXJyaXZlIGFzIHRoZSBhcmVuYSBrZXJuZWwgYmFzZSwgd2hpbGUgX19hcmVuYV9udWxsYWJsZSB0dXJucyB0aGVtIGludG9cXG4rICogTlVMTC5cXG4rICovXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fYXJjaF94ODZfNjRcXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuK2ludCBhcmVuYV9hcmdfcmViYXNlKHZvaWQgKmN0eClcXG4re1xcbisjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVClcXG4rXFx0dTY0IF9fYXJlbmEgKnZhbDtcXG4rXFx0dTY0IGJhc2UsIG9mZjtcXG4rXFxuK1xcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdGJhc2UgPSBicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QoTlVMTCk7XFxuK1xcdGlmICghYmFzZSlcXG4rXFx0XFx0cmV0dXJuIDI7XFxuK1xcbitcXHQvKiBvbmx5IHRoZSBsb3cgMzIgYml0cyBjb250cmlidXRlICovXFxuK1xcdHN0YXNoID0gMHhiYWRjMGZmZTAwMDAwMDAwO1xcbitcXHRpZiAoYnBmX2tmdW5jX2FyZW5hX2NhcF90ZXN0KCh1NjQgKilzdGFzaCkgIT0gYmFzZSlcXG4rXFx0XFx0cmV0dXJuIDM7XFxuK1xcbitcXHRvZmYgPSAodTMyKSh1NjQpdmFsO1xcbitcXHRpZiAoYnBmX2tmdW5jX2FyZW5hX2NhcF90ZXN0KCh1NjQgKil2YWwpICE9IGJhc2UgKyBvZmYpXFxuK1xcdFxcdHJldHVybiA0O1xcbitcXG4rXFx0aWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdChOVUxMKSAhPSAwKVxcbitcXHRcXHRyZXR1cm4gNTtcXG4rXFxuK1xcdHN0YXNoID0gMHhiYWRjMGZmZTAwMDAwMDAwO1xcbitcXHRpZiAoYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KCh1NjQgKilzdGFzaCkgIT0gMClcXG4rXFx0XFx0cmV0dXJuIDY7XFxuK1xcbitcXHRpZiAoYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KCh1NjQgKil2YWwpICE9IGJhc2UgKyBvZmYpXFxuK1xcdFxcdHJldHVybiA3O1xcbitcXG4rXFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTtcXG4rI2VuZGlmXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX2FyY2hfeDg2XzY0XFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxcbitpbnQgYXJlbmFfYXJnX251bGxhYmxlKHZvaWQgKmN0eClcXG4re1xcbisjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVClcXG4rXFx0dTY0IF9fYXJlbmEgKnZhbDtcXG4rXFx0dTY0IHJldDtcXG4rXFxuK1xcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdCp2YWwgPSA0MTtcXG4rXFx0cmV0ID0gYnBmX2tmdW5jX2FyZW5hX251bGxhYmxlX2FyZ190ZXN0KCh1NjQgKil2YWwpO1xcbitcXHRpZiAocmV0ICE9IDQxIHx8ICp2YWwgIT0gNDIpXFxuK1xcdFxcdHJldHVybiAyO1xcbitcXG4rXFx0aWYgKGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdChOVUxMKSAhPSAweGRlYWRiZWVmKVxcbitcXHRcXHRyZXR1cm4gMztcXG4rXFxuK1xcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XFxuKyNlbmRpZlxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19hcmNoX3g4Nl82NFxcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcXG4raW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eClcXG4re1xcbisjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVClcXG4rXFx0dTY0IF9fYXJlbmEgKnZhbDtcXG4rXFxuK1xcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdHZhbFswXSA9IDE7XFxuK1xcdHZhbFsxXSA9IDI7XFxuK1xcdHZhbFsyXSA9IDQ7XFxuK1xcdHZhbFszXSA9IDg7XFxuK1xcdHZhbFs0XSA9IDE2O1xcbitcXG4rXFx0aWYgKGJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KCh1NjQgKilcXHUwMDI2dmFsWzBdLCAodTY0ICopXFx1MDAyNnZhbFsxXSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgICh1NjQgKilcXHUwMDI2dmFsWzJdLCAodTY0ICopXFx1MDAyNnZhbFszXSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgICh1NjQgKilcXHUwMDI2dmFsWzRdKSAhPSAzMSlcXG4rXFx0XFx0cmV0dXJuIDI7XFxuK1xcdGlmIChicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdCgodTY0ICopXFx1MDAyNnZhbFswXSwgKHU2NCAqKVxcdTAwMjZ2YWxbMV0sXFxuK1xcdFxcdFxcdFxcdCAgICAgICAodTY0ICopXFx1MDAyNnZhbFsyXSwgKHU2NCAqKVxcdTAwMjZ2YWxbM10sIE5VTEwpICE9IDE1KVxcbitcXHRcXHRyZXR1cm4gMztcXG4rXFxuK1xcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XFxuKyNlbmRpZlxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19hcmNoX3g4Nl82NFxcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcXG4raW50IGFyZW5hX2FyZ19taXhlZCh2b2lkICpjdHgpXFxuK3tcXG4rI2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXFxuK1xcdHU2NCBfX2FyZW5hICp2YWw7XFxuK1xcbitcXHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbitcXHRpZiAoIXZhbClcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHR2YWxbMF0gPSA3O1xcbitcXHR2YWxbMV0gPSA1O1xcbitcXG4rXFx0aWYgKGJwZl9rZnVuY19hcmVuYV9taXhlZF90ZXN0KCh1NjQgKilcXHUwMDI2dmFsWzBdLCBOVUxMKSAhPSA3KVxcbitcXHRcXHRyZXR1cm4gMjtcXG4rXFxuK1xcdGlmIChicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdCgodTY0ICopXFx1MDAyNnZhbFswXSwgKHU2NCAqKVxcdTAwMjZ2YWxbMV0pICE9IDEyKVxcbitcXHRcXHRyZXR1cm4gMztcXG4rXFxuK1xcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XFxuKyNlbmRpZlxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoga2VybmVsLXNpZGUgZmF1bHRzIG9uIHVucG9wdWxhdGVkIHBhZ2VzIHJlY292ZXIgdmlhIHRoZSBzY3JhdGNoIHBhZ2UgKi9cXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19hcmNoX3g4Nl82NFxcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcXG4raW50IGFyZW5hX2FyZ191bnBvcHVsYXRlZCh2b2lkICpjdHgpXFxuK3tcXG4rI2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXFxuK1xcdHU2NCBfX2FyZW5hICp2YWw7XFxuK1xcbitcXHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbitcXHRpZiAoIXZhbClcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHRzdGFzaCA9ICh1NjQpdmFsICsgUEFHRV9TSVpFO1xcbitcXHRicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoKHU2NCAqKXN0YXNoKTtcXG4rXFxuK1xcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XFxuKyNlbmRpZlxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19hcmNoX3g4Nl82NFxcbitfX2ZhaWx1cmUgX19tc2coXFxcImFyZW5hIHBvaW50ZXIgcmVxdWlyZXMgYSBwcm9ncmFtIHdpdGggYW4gYXNzb2NpYXRlZCBhcmVuYVxcXCIpXFxuK2ludCBhcmVuYV9hcmdfbm9fYXJlbmEodm9pZCAqY3R4KVxcbit7XFxuK1xcdGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopMSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX2FyY2hfeDg2XzY0XFxuK19fZmFpbHVyZSBfX21zZyhcXFwiaXMgbm90IGEgcG9pbnRlciB0byBhcmVuYSBvciBzY2FsYXJcXFwiKVxcbitpbnQgYXJlbmFfYXJnX2JhZF9yZWcodm9pZCAqY3R4KVxcbit7XFxuK1xcdHU2NCBidWYgPSAwO1xcbitcXG4rXFx0LyogdXNlIHRoZSBhcmVuYSBzbyB0aGUgcHJvZ3JhbSBwYXNzZXMgdGhlIGFyZW5hIHByZXNlbmNlIGNoZWNrICovXFxuK1xcdGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxuK1xcdGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdChcXHUwMDI2YnVmKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuK1xcdGRlZmluZWQoX19CUEZfRkVBVFVSRV9TVEFDS19BUkdVTUVOVClcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19hcmNoX3g4Nl82NFxcbitfX2ZhaWx1cmUgX19tc2coXFxcImFyZW5hIHBvaW50ZXIgY2Fubm90IGJlIGEgc3RhY2sgYXJndW1lbnRcXFwiKVxcbitpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eClcXG4re1xcbitcXHRicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbitcXHRicGZfa2Z1bmNfYXJlbmFfc3RhY2tfYXJnX3Rlc3QoMSwgMiwgMywgNCwgNSwgKHU2NCAqKTEpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbisjZWxzZVxcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX2FyY2hfeDg2XzY0XFxuK19fZGVzY3JpcHRpb24oXFxcImFyZW5hX2FyZ19zdGFjazogbm90IHN1cHBvcnRlZCwgZHVtbXkgdGVzdFxcXCIpXFxuK19fc3VjY2Vzc1xcbitpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eClcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbisjZW5kaWZcXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjg0NzQ3NjExNzI1ZjZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jXFxuQEAgLTAsMCArMSw5NiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxuK1xcbisvKlxcbisgKiBWZXJpZnkgdGhlIEpJVC1lbWl0dGVkIHJlYmFzZSBzZXF1ZW5jZXMgZm9yIF9fYXJlbmEgYW5kIF9fYXJlbmFfbnVsbGFibGVcXG4rICoga2Z1bmMgYXJndW1lbnRzLiBUaGUgY2FwdHVyZSBrZnVuY3MgdGFrZSB0aGUgYXJndW1lbnQgd2l0aG91dFxcbisgKiBkZXJlZmVyZW5jaW5nIGl0LCBzbyB0aGVzZSB0ZXN0cyBwaW4gb25seSB0aGUgZW1pdHRlZCBjb2RlLlxcbisgKi9cXG4rI2RlZmluZSBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFU1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJicGZfbWlzYy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYnBmX2V4cGVyaW1lbnRhbC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmX2FyZW5hX2NvbW1vbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiLi4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXFxcIlxcbitcXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XFxuK1xcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAxKTtcXG4rfSBhcmVuYSBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbisvKiB2b2xhdGlsZSB0byBmb3JjZSB0aGUgc2NhbGFyIHJlbG9hZHMgYmVsb3cgKi9cXG4rdm9sYXRpbGUgdTY0IHN0YXNoO1xcbitcXG4rI2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX2FyY2hfeDg2XzY0XFxuK19faml0ZWQoXFxcIi4uLlxcXCIpXFxuK19faml0ZWQoXFxcIlxcdG1vdmxcXHQlZWRpLCAlZWRpXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkcVxcdCVyMTIsICVyZGlcXFwiKVxcbitfX2ppdGVkKFxcXCIuLi5cXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRjYWxscVxcdHt7Lip9fVxcXCIpXFxuK19fc3VjY2Vzc1xcbitpbnQgYXJlbmFfYXJnX2ppdF9yZWJhc2Uodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0YXNoID0gKHU2NClicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbitcXHRicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QoKHU2NCAqKXN0YXNoKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fYXJjaF94ODZfNjRcXG4rX19qaXRlZChcXFwiLi4uXFxcIilcXG4rX19qaXRlZChcXFwiXFx0bW92bFxcdCVlZGksICVlZGlcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHR0ZXN0bFxcdCVlZGksICVlZGlcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRqZVxcdHt7Lip9fVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGFkZHFcXHQlcjEyLCAlcmRpXFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCBhcmVuYV9hcmdfaml0X251bGxhYmxlKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdGFzaCA9ICh1NjQpYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG4rXFx0YnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KCh1NjQgKilzdGFzaCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX2FyY2hfeDg2XzY0XFxuK19faml0ZWQoXFxcIi4uLlxcXCIpXFxuK19faml0ZWQoXFxcIlxcdG1vdmxcXHQlZWRpLCAlZWRpXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkcVxcdCVyMTIsICVyZGlcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRtb3ZsXFx0JWVzaSwgJWVzaVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGFkZHFcXHQlcjEyLCAlcnNpXFxcIilcXG4rX19qaXRlZChcXFwiXFx0bW92bFxcdCVlZHgsICVlZHhcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRhZGRxXFx0JXIxMiwgJXJkeFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdG1vdmxcXHQlZWN4LCAlZWN4XFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkcVxcdCVyMTIsICVyY3hcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRtb3ZsXFx0JXI4ZCwgJXI4ZFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdHRlc3RsXFx0JXI4ZCwgJXI4ZFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGplXFx0e3suKn19XFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkcVxcdCVyMTIsICVyOFxcXCIpXFxuK19fc3VjY2Vzc1xcbitpbnQgYXJlbmFfYXJnX2ppdF9hcmdzNSh2b2lkICpjdHgpXFxuK3tcXG4rXFx0dTY0IF9fYXJlbmEgKnZhbDtcXG4rXFxuK1xcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdHZhbFswXSA9IDE7XFxuK1xcdHZhbFsxXSA9IDI7XFxuK1xcdHZhbFsyXSA9IDQ7XFxuK1xcdHZhbFszXSA9IDg7XFxuK1xcdHZhbFs0XSA9IDE2O1xcbitcXG4rXFx0YnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QoKHU2NCAqKVxcdTAwMjZ2YWxbMF0sICh1NjQgKilcXHUwMDI2dmFsWzFdLFxcbitcXHRcXHRcXHRcXHQgICAodTY0ICopXFx1MDAyNnZhbFsyXSwgKHU2NCAqKVxcdTAwMjZ2YWxbM10sXFxuK1xcdFxcdFxcdFxcdCAgICh1NjQgKilcXHUwMDI2dmFsWzRdKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKyNlbmRpZiAvKiBfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCAqL1xcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iYTA0YzczZDhkOTY3XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmNcXG5AQCAtMCwwICsxLDExNSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxuK1xcbisjZGVmaW5lIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTXFxuKyNpbmNsdWRlIFxcdTAwM2N2bWxpbnV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJwZl9leHBlcmltZW50YWwuaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZl9hcmVuYV9jb21tb24uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcIi4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIi4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxcXCJcXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbitcXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XFxuK1xcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcXG4rXFx0LyogcGFnZSAwIGhvc3RzIHRoZSBhcmVuYSBnbG9iYWxzLCBwYWdlIDEgaXMgZm9yIGFsbG9jYXRpb25zICovXFxuK1xcdF9fdWludChtYXhfZW50cmllcywgMik7XFxuK30gYXJlbmEgU0VDKFxcXCIubWFwc1xcXCIpO1xcbitcXG4rLyogYWxzbyBhc3NvY2lhdGVzIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgYXJlbmEgKi9cXG4rdTY0IF9fYXJlbmEgYXJlbmFfdG91Y2g7XFxuKy8qIHJhdyB2YWx1ZSBvZiB0aGUgbGFzdCBfX2FyZW5hIGN0eCBhcmd1bWVudCwgY2FwdHVyZWQgYnkgdGVzdF9hcmVuYV9jYiAqL1xcbit1NjQgX19hcmVuYSBjYl9wdHJfdmFsO1xcbitcXG4rU0VDKFxcXCJzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmFcXFwiKVxcbitpbnQgdGVzdF9hcmVuYV9jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcXG4re1xcbitcXHR1NjQgX19hcmVuYSAqcHRyID0gKHU2NCBfX2FyZW5hICopY3R4WzBdO1xcbitcXG4rXFx0YXJlbmFfdG91Y2grKztcXG4rXFx0Y2JfcHRyX3ZhbCA9IGN0eFswXTtcXG4rXFx0KnB0ciArPSAxO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmFfbnVsbGFibGVcXFwiKVxcbitpbnQgdGVzdF9hcmVuYV9udWxsYWJsZV9jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcXG4re1xcbitcXHR1NjQgX19hcmVuYSAqcHRyID0gKHU2NCBfX2FyZW5hICopY3R4WzBdO1xcbitcXG4rXFx0YXJlbmFfdG91Y2grKztcXG4rXFx0aWYgKCFwdHIpXFxuK1xcdFxcdHJldHVybiAweGJlZTtcXG4rXFx0KnB0ciArPSAxO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmFfc3RhY2tcXFwiKVxcbitpbnQgdGVzdF9hcmVuYV9zdGFja19jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcXG4re1xcbitcXHR1NjQgX19hcmVuYSAqcHRyID0gKHU2NCBfX2FyZW5hICopY3R4WzhdO1xcbitcXG4rXFx0YXJlbmFfdG91Y2grKztcXG4rXFx0LyogcGluIHRoZSBzbG90IGxheW91dDogdGhlIGxlYWRpbmcgYXJncyBmaWxsIGN0eFswXS4uY3R4WzddICovXFxuK1xcdGlmIChjdHhbMF0gIT0gMSB8fCBjdHhbN10gIT0gOClcXG4rXFx0XFx0cmV0dXJuIDB4YmFkO1xcbitcXHQqcHRyICs9IDE7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcIi5zdHJ1Y3Rfb3BzLmxpbmtcXFwiKVxcbitzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB0ZXN0bW9kX2FyZW5hID0ge1xcbitcXHQudGVzdF9hcmVuYSA9ICh2b2lkICopdGVzdF9hcmVuYV9jYixcXG4rXFx0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSAodm9pZCAqKXRlc3RfYXJlbmFfbnVsbGFibGVfY2IsXFxuK1xcdC50ZXN0X2FyZW5hX3N0YWNrID0gKHZvaWQgKil0ZXN0X2FyZW5hX3N0YWNrX2NiLFxcbit9O1xcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4raW50IHRyaWdnZXIodm9pZCAqY3R4KVxcbit7XFxuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxcbitcXHR1NjQgX19hcmVuYSAqdmFsO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0dmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG4rXFx0aWYgKCF2YWwpXFxuK1xcdFxcdHJldHVybiAxO1xcbitcXG4rXFx0KnZhbCA9IDQxO1xcbitcXHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSgodTY0ICopdmFsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIDI7XFxuK1xcdGlmICgqdmFsICE9IDQyKVxcbitcXHRcXHRyZXR1cm4gMztcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBjYWxsYmFjayBtdXN0IGhhdmUgc2VlbiBleGFjdGx5ICh1MzIpKGthZGRyIC0ga2Vybl92bV9zdGFydCksXFxuK1xcdCAqIHdoaWNoIGlzIHRoZSBhcmVuYSBvZmZzZXQgb2YgdmFsIHdpdGggdGhlIHVwcGVyIDMyIGJpdHMgY2xlYXIuXFxuK1xcdCAqL1xcbitcXHRpZiAoY2JfcHRyX3ZhbCAhPSAodTMyKSh1NjQpdmFsKVxcbitcXHRcXHRyZXR1cm4gNDtcXG4rXFxuK1xcdHJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKCh1NjQgKil2YWwpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gNTtcXG4rXFx0aWYgKCp2YWwgIT0gNDMpXFxuK1xcdFxcdHJldHVybiA2O1xcbitcXG4rXFx0LyogTlVMTCBzdXJ2aXZlcyB0aGUgbnVsbGFibGUga2Z1bmMgYW5kIHRoZSB0cmFtcG9saW5lIGFzIE5VTEwgKi9cXG4rXFx0cmV0ID0gYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUoTlVMTCk7XFxuK1xcdGlmIChyZXQgIT0gMHhiZWUpXFxuK1xcdFxcdHJldHVybiA3O1xcbitcXG4rXFx0LyogdGhlIGFyZW5hIHBvaW50ZXIgaXMgc3RhY2stcGFzc2VkIGludG8gdGhlIHRyYW1wb2xpbmUgaGVyZSAqL1xcbitcXHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaygodTY0ICopdmFsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIDg7XFxuK1xcdGlmICgqdmFsICE9IDQ0KVxcbitcXHRcXHRyZXR1cm4gOTtcXG4rXFxuK1xcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XFxuKyNlbmRpZlxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYV9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYV9mYWlsLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjFjMGVjNzI3ZDYzNzRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5jXFxuQEAgLTAsMCArMSwyMCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCIuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcXFwiXFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4rXFxuKy8qIE5vIGFyZW5hIGluIHRoZSBwcm9ncmFtOiBhdHRhY2hpbmcgdG8gdGVzdF9hcmVuYSBtdXN0IGJlIHJlamVjdGVkLiAqL1xcbitTRUMoXFxcInN0cnVjdF9vcHMvdGVzdF9hcmVuYVxcXCIpXFxuK2ludCB0ZXN0X2FyZW5hX25vX2FyZW5hKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcIi5zdHJ1Y3Rfb3BzLmxpbmtcXFwiKVxcbitzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB0ZXN0bW9kX2FyZW5hX2ZhaWwgPSB7XFxuK1xcdC50ZXN0X2FyZW5hID0gKHZvaWQgKil0ZXN0X2FyZW5hX25vX2FyZW5hLFxcbit9O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xcbmluZGV4IGViMGY5YjVlMThkODUuLmZkZWFhNTYzNTZiNTIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcXG5AQCAtMjM3LDYgKzIzNyw1NiBAQCBfX2JwZl9rZnVuYyB2b2lkIGJwZl9rZnVuY19jb21tb25fdGVzdCh2b2lkKVxcbiB7XFxuIH1cXG4gXFxuK19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QodTY0ICp2YWxfX2FyZW5hKVxcbit7XFxuK1xcdHU2NCBvbGQ7XFxuK1xcbitcXHRvbGQgPSAqdmFsX19hcmVuYTtcXG4rXFx0KnZhbF9fYXJlbmEgPSBvbGQgKyAxO1xcbitcXHRyZXR1cm4gb2xkO1xcbit9XFxuK1xcbitfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX251bGxhYmxlX2FyZ190ZXN0KHU2NCAqdmFsX19hcmVuYV9udWxsYWJsZSlcXG4re1xcbitcXHR1NjQgb2xkO1xcbitcXG4rXFx0aWYgKCF2YWxfX2FyZW5hX251bGxhYmxlKVxcbitcXHRcXHRyZXR1cm4gMHhkZWFkYmVlZjtcXG4rXFxuK1xcdG9sZCA9ICp2YWxfX2FyZW5hX251bGxhYmxlO1xcbitcXHQqdmFsX19hcmVuYV9udWxsYWJsZSA9IG9sZCArIDE7XFxuK1xcdHJldHVybiBvbGQ7XFxuK31cXG4rXFxuK19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QodTY0ICp2YWxfX2FyZW5hKVxcbit7XFxuK1xcdHJldHVybiAodTY0KXZhbF9fYXJlbmE7XFxuK31cXG4rXFxuK19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QodTY0ICp2YWxfX2FyZW5hX251bGxhYmxlKVxcbit7XFxuK1xcdHJldHVybiAodTY0KXZhbF9fYXJlbmFfbnVsbGFibGU7XFxuK31cXG4rXFxuK19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdCh1NjQgKmFfX2FyZW5hLCB1NjQgKmJfX2FyZW5hLFxcbitcXHRcXHRcXHRcXHRcXHQgICB1NjQgKmNfX2FyZW5hLCB1NjQgKmRfX2FyZW5hLFxcbitcXHRcXHRcXHRcXHRcXHQgICB1NjQgKmVfX2FyZW5hX251bGxhYmxlKVxcbit7XFxuK1xcdHJldHVybiAqYV9fYXJlbmEgKyAqYl9fYXJlbmEgKyAqY19fYXJlbmEgKyAqZF9fYXJlbmEgK1xcbitcXHQgICAgICAgKGVfX2FyZW5hX251bGxhYmxlID8gKmVfX2FyZW5hX251bGxhYmxlIDogMCk7XFxuK31cXG4rXFxuK19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfc3RhY2tfYXJnX3Rlc3QodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsIHU2NCBlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHR1NjQgKmZfX2FyZW5hKVxcbit7XFxuK1xcdHJldHVybiBhICsgYiArIGMgKyBkICsgZSArICpmX19hcmVuYTtcXG4rfVxcbitcXG4rX19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9taXhlZF90ZXN0KHU2NCAqYV9fYXJlbmEsIHU2NCAqYl9fYXJlbmFfbnVsbGFibGUpXFxuK3tcXG4rXFx0cmV0dXJuICphX19hcmVuYSArIChiX19hcmVuYV9udWxsYWJsZSA/ICpiX19hcmVuYV9udWxsYWJsZSA6IDApO1xcbit9XFxuK1xcbiBfX2JwZl9rZnVuYyB2b2lkIGJwZl9rZnVuY19keW5wdHJfdGVzdChzdHJ1Y3QgYnBmX2R5bnB0ciAqcHRyLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9keW5wdHIgKnB0cl9fbnVsbGFibGUpXFxuIHtcXG5AQCAtMzQ3LDkgKzM5NywyOSBAQCBzdGF0aWMgaW50IGJwZl90ZXN0bW9kX3Rlc3RfNCh2b2lkKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hKHU2NCAqcHRyX19hcmVuYSlcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX251bGxhYmxlKHU2NCAqcHRyX19hcmVuYV9udWxsYWJsZSlcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrKHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICB1NjQgZSwgdTY0IGYsIHU2NCBnLCB1NjQgaCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgdTY0ICpwdHJfX2FyZW5hKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IGJwZl90ZXN0bW9kX29wczMgX19icGZfdGVzdG1vZF9vcHMzID0ge1xcbiBcXHQudGVzdF8xID0gYnBmX3Rlc3Rtb2RfdGVzdF8zLFxcbiBcXHQudGVzdF8yID0gYnBmX3Rlc3Rtb2RfdGVzdF80LFxcbitcXHQudGVzdF9hcmVuYSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmEsXFxuK1xcdC50ZXN0X2FyZW5hX251bGxhYmxlID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9udWxsYWJsZSxcXG4rXFx0LnRlc3RfYXJlbmFfc3RhY2sgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrLFxcbiB9O1xcbiBcXG4gc3RhdGljIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3Rfb3BzMyh2b2lkKVxcbkBAIC0zNjgsNiArNDM4LDIxIEBAIF9fYnBmX2tmdW5jIHZvaWQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMih2b2lkKVxcbiBcXHRzdF9vcHMzLVxcdTAwM2V0ZXN0XzIoKTtcXG4gfVxcbiBcXG4rX19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKHU2NCAqcHRyX19hcmVuYSlcXG4re1xcbitcXHRyZXR1cm4gc3Rfb3BzMy1cXHUwMDNldGVzdF9hcmVuYShwdHJfX2FyZW5hKTtcXG4rfVxcbitcXG4rX19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKHU2NCAqcHRyX19hcmVuYV9udWxsYWJsZSlcXG4re1xcbitcXHRyZXR1cm4gc3Rfb3BzMy1cXHUwMDNldGVzdF9hcmVuYV9udWxsYWJsZShwdHJfX2FyZW5hX251bGxhYmxlKTtcXG4rfVxcbitcXG4rX19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKHU2NCAqcHRyX19hcmVuYSlcXG4re1xcbitcXHRyZXR1cm4gc3Rfb3BzMy1cXHUwMDNldGVzdF9hcmVuYV9zdGFjaygxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCBwdHJfX2FyZW5hKTtcXG4rfVxcbitcXG4gc3RydWN0IGJwZl90ZXN0bW9kX2J0Zl90eXBlX3RhZ18xIHtcXG4gXFx0aW50IGE7XFxuIH07XFxuQEAgLTc1NSw2ICs4NDAsMTMgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxX25leHQsIEtGX0lURVJfTkVYVCB8IEtGX1JFVF9OVUxMKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfdGVzdG1vZF9zZXFfZGVzdHJveSwgS0ZfSVRFUl9ERVNUUk9ZKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfdGVzdG1vZF9zZXFfdmFsdWUpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY29tbW9uX3Rlc3QpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdClcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19hcmVuYV9zdGFja19hcmdfdGVzdClcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19hcmVuYV9taXhlZF90ZXN0KVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9tZW1fbGVuX3Bhc3MxKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2R5bnB0cl90ZXN0KVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX25lc3RlZF9hY3F1aXJlX25vbnplcm9fb2Zmc2V0X3Rlc3QsIEtGX0FDUVVJUkUpXFxuQEAgLTc3MCw2ICs4NjIsOSBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2RfY3R4X2NyZWF0ZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2RfY3R4X3JlbGVhc2UsIEtGX1JFTEVBU0UpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF8xKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMilcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaylcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19nZXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTtcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19wdXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTtcXG4gQlRGX0tGVU5DU19FTkQoYnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX2lkcylcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcXG5pbmRleCA4NjNmZDEwZjE2MTk5Li4zM2YyYWY1YjcwODU3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXFxuQEAgLTEwNiw2ICsxMDYsMTIgQEAgc3RydWN0IGJwZl90ZXN0bW9kX29wczIge1xcbiBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB7XFxuIFxcdGludCAoKnRlc3RfMSkodm9pZCk7XFxuIFxcdGludCAoKnRlc3RfMikodm9pZCk7XFxuK1xcdC8qIFVzZWQgdG8gdGVzdCBhcmVuYSBwb2ludGVyIGFyZ3VtZW50cy4gKi9cXG4rXFx0aW50ICgqdGVzdF9hcmVuYSkodTY0ICpwdHIpO1xcbitcXHRpbnQgKCp0ZXN0X2FyZW5hX251bGxhYmxlKSh1NjQgKnB0cik7XFxuK1xcdC8qIGVub3VnaCBsZWFkaW5nIGFyZ3MgdG8gZm9yY2UgQHB0ciBvbnRvIHRoZSBzdGFjayBvbiB4ODYgYW5kIGFybTY0ICovXFxuK1xcdGludCAoKnRlc3RfYXJlbmFfc3RhY2spKHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLCB1NjQgZSwgdTY0IGYsXFxuK1xcdFxcdFxcdFxcdHU2NCBnLCB1NjQgaCwgdTY0ICpwdHIpO1xcbiB9O1xcbiBcXG4gc3RydWN0IHN0X29wc19hcmdzIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcXG5pbmRleCBjMzZiYjkxMWRlZmE3Li4xYTcyZDBmZGE1M2M0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXFxuQEAgLTk4LDYgKzk4LDE2IEBAIHZvaWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZWxlYXNlKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwKSBfX2tzeW07XFxuIHZvaWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZWYoc3RydWN0IHByb2dfdGVzdF9yZWZfa2Z1bmMgKnApIF9fa3N5bTtcXG4gXFxuIHZvaWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9tZW1fbGVuX3Bhc3MxKHZvaWQgKm1lbSwgaW50IGxlbikgX19rc3ltO1xcbitfX3U2NCBicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoX191NjQgKnZhbF9fYXJlbmEpIF9fa3N5bTtcXG4rX191NjQgYnBmX2tmdW5jX2FyZW5hX251bGxhYmxlX2FyZ190ZXN0KF9fdTY0ICp2YWxfX2FyZW5hX251bGxhYmxlKSBfX2tzeW07XFxuK19fdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdChfX3U2NCAqdmFsX19hcmVuYSkgX19rc3ltO1xcbitfX3U2NCBicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoX191NjQgKnZhbF9fYXJlbmFfbnVsbGFibGUpIF9fa3N5bTtcXG4rX191NjQgYnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QoX191NjQgKmFfX2FyZW5hLCBfX3U2NCAqYl9fYXJlbmEsXFxuK1xcdFxcdFxcdFxcdCBfX3U2NCAqY19fYXJlbmEsIF9fdTY0ICpkX19hcmVuYSxcXG4rXFx0XFx0XFx0XFx0IF9fdTY0ICplX19hcmVuYV9udWxsYWJsZSkgX19rc3ltO1xcbitfX3U2NCBicGZfa2Z1bmNfYXJlbmFfc3RhY2tfYXJnX3Rlc3QoX191NjQgYSwgX191NjQgYiwgX191NjQgYywgX191NjQgZCwgX191NjQgZSxcXG4rXFx0XFx0XFx0XFx0ICAgICBfX3U2NCAqZl9fYXJlbmEpIF9fa3N5bTtcXG4rX191NjQgYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QoX191NjQgKmFfX2FyZW5hLCBfX3U2NCAqYl9fYXJlbmFfbnVsbGFibGUpIF9fa3N5bTtcXG4gaW50ICpicGZfa2Z1bmNfY2FsbF90ZXN0X2dldF9yZHdyX21lbShzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyAqcCwgY29uc3QgaW50IHJkd3JfYnVmX3NpemUpIF9fa3N5bTtcXG4gaW50ICpicGZfa2Z1bmNfY2FsbF90ZXN0X2dldF9yZG9ubHlfbWVtKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwLCBjb25zdCBpbnQgcmRvbmx5X2J1Zl9zaXplKSBfX2tzeW07XFxuIGludCAqYnBmX2tmdW5jX2NhbGxfdGVzdF9hY3FfcmRvbmx5X21lbShzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyAqcCwgY29uc3QgaW50IHJkb25seV9idWZfc2l6ZSkgX19rc3ltO1xcbkBAIC0xMTEsNiArMTIxLDkgQEAgdTMyIGJwZl9rZnVuY19jYWxsX3Rlc3Rfc3RhdGljX3VudXNlZF9hcmcodTMyIGFyZywgdTMyIHVudXNlZCkgX19rc3ltO1xcbiAjZW5kaWZcXG4gXFxuIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9tb2Rfa2Z1bmMoaW50IGkpIF9fa3N5bTtcXG4raW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07XFxuK2ludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZShfX3U2NCAqcHRyX19hcmVuYV9udWxsYWJsZSkgX19rc3ltO1xcbitpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2soX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTtcXG4gXFxuIF9fdTY0IGJwZl9rZnVuY19jYWxsX3Rlc3QxKHN0cnVjdCBzb2NrICpzaywgX191MzIgYSwgX191NjQgYixcXG4gXFx0XFx0XFx0XFx0X191MzIgYywgX191NjQgZCkgX19rc3ltO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNjoxMzowOS4xMzU5NDI4OTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMzAxMTE0MTIzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzXCIsXG4gICAgXCJidGZfZGlzdGlsbF9mdW5jX3Byb3RvXCIsXG4gICAgXCJidGZfY3R4X2FjY2Vzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYF9fYXJlbmFgIGFuZCBgX19hcmVuYV9udWxsYWJsZWAgYW5ub3RhdGlvbnMgZm9yIEJQRiBrZnVuY3MgYW5kIHN0cnVjdF9vcHMgYXJndW1lbnRzLiBJdCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyLCBKSVQgY29tcGlsZXIgKHg4NiksIGFuZCB0cmFtcG9saW5lIGxvZ2ljIHRvIHN1cHBvcnQgYXJlbmEgcG9pbnRlcnMsIGluY2x1ZGluZyByZWJhc2luZyB0aGVtIHRvIGtlcm5lbCBhZGRyZXNzZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0IHZlcmlmaWNhdGlvbiBvZiBhcmVuYSBwb2ludGVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDBhZmM2NzQ2ZGEwZWM5MDJiZWI2NjM2N2M0NTcwMWZkMDY1OGIxMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTY6MTM6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuaW5kZXggY2JkZTg2ZDA4MmNjZS4uNDhjZjc0NmY5ZmY5ZCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbkBAIC0yNzgsNiArMjc4LDQzIEBAIEFuIGV4YW1wbGUgaXMgZ2l2ZW4gYmVsb3c6OlxuICAgICAgICAgICAgICAgICAuLi5cbiAgICAgICAgIH1cbiBcbisyLjMuOCBfX2FyZW5hIGFuZCBfX2FyZW5hX251bGxhYmxlIEFubm90YXRpb25zXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuK1xuK0JvdGggYW5ub3RhdGlvbnMgaW5kaWNhdGUgdGhhdCB0aGUgcG9pbnRlciBhcmd1bWVudCBwb2ludHMgaW50byB0aGVcbitjYWxsaW5nIHByb2dyYW0ncyBhcmVuYS4gVGhlIEpJVCByZWJhc2VzIHRoZSB2YWx1ZSBhdCB0aGUgY2FsbCBzaXRlIHNvXG4rdGhlIGtmdW5jIHJlY2VpdmVzIGEgZGlyZWN0bHkgZGVyZWZlcmVuY2VhYmxlIGtlcm5lbCBhZGRyZXNzLCBzdWJqZWN0IHRvXG4rdGhlIGFjY2VzcyBydWxlcyBkZXNjcmliZWQgaW4gOnJlZjpgQlBGX2tmdW5jX2FyZW5hX2FjY2Vzc2AgKGF0IG1vc3RcbitgYEdVQVJEX1NaIC8gMmBgLCAzMiBLaUIsIHBhc3QgdGhlIHBvaW50ZXIgaW4gYSBzaW5nbGUgdW5jaGVja2VkIGFjY2VzcykuXG4rXG4rV2l0aCBgYF9fYXJlbmFgYCB0aGUgcmViYXNlIGlzIHVuY29uZGl0aW9uYWwgYW5kIHRoZSBhcmd1bWVudCBpcyBuZXZlclxuK05VTEw6IGEgdmFsdWUgd2hvc2UgbG93ZXIgMzIgYml0cyBhcmUgemVybyBhcnJpdmVzIGFzIHRoZSBhcmVuYSBiYXNlXG4rYWRkcmVzcyAoYXJlbmEgb2Zmc2V0IDApLiBUaGUga2Z1bmMgbXVzdCBub3QgY2hlY2sgdGhlIGFyZ3VtZW50IGZvciBOVUxMLlxuK1dpdGggYGBfX2FyZW5hX251bGxhYmxlYGAgc3VjaCBhIHZhbHVlIGFycml2ZXMgYXMgTlVMTCBpbnN0ZWFkIGFuZCB0aGVcbitrZnVuYyBtdXN0IGNoZWNrIGJlZm9yZSBkZXJlZmVyZW5jaW5nLlxuK1xuK0FuIGV4YW1wbGUgaXMgZ2l2ZW4gYmVsb3c6OlxuK1xuKyAgICAgICAgX19icGZfa2Z1bmMgaW50IGJwZl9wcm9jZXNzX2l0ZW0oc3RydWN0IGl0ZW0gKml0ZW1fX2FyZW5hKVxuKyAgICAgICAge1xuKyAgICAgICAgLi4uXG4rICAgICAgICB9XG4rXG4rQ2FsbGluZyBzdWNoIGEga2Z1bmMgcmVxdWlyZXMgdGhlIHByb2dyYW0gdG8gdXNlIGFuIGFyZW5hIG1hcCBhbmQgYSBKSVQgd2l0aFxuK2FyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQpOyB2ZXJpZmljYXRpb24gZmFpbHMgb3RoZXJ3aXNlLiBUaGVcbitwcm9ncmFtIGNhbiBwYXNzIGFueSB2YWx1ZSB3aXRob3V0IGNvbXByb21pc2luZyB0aGUga2VybmVsLiBBIHZhbHVlIHRoYXQgZG9lc1xuK25vdCBwb2ludCBpbnRvIHRoZSBhcmVuYSBpcyBhIHByb2dyYW0gYnVnLlxuK1xuK1RoZSBzdWZmaXhlcyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgb24gdGhlIGFyZ3VtZW50cyBvZiBzdHJ1Y3Rfb3BzIHN0dWJcbitmdW5jdGlvbnMsIHdpdGggdGhlIGNvbnZlcnNpb24gcnVubmluZyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLiBUaGVcbitrZXJuZWwgY2FsbGVyIHBhc3NlcyB0aGUga2VybmVsIGFyZW5hIGFkZHJlc3MgYW5kIHRoZSB0cmFtcG9saW5lIGNvbnZlcnRzXG4raXQgd2hpbGUgc2F2aW5nIHRoZSBhcmd1bWVudHMsIHNvIHRoZSBjYWxsYmFjayByZWNlaXZlcyBhbiBhcmVuYSBwb2ludGVyXG4raXQgY2FuIGRlcmVmZXJlbmNlIGRpcmVjdGx5LiBXaXRoIGBgX19hcmVuYWBgIHRoZSBrZXJuZWwgY2FsbGVyIG11c3Qgbm90XG4rcGFzcyBOVUxMLiBXaXRoIGBgX19hcmVuYV9udWxsYWJsZWBgIGEgTlVMTCBrZXJuZWwgcG9pbnRlciBhcnJpdmVzIGFzIE5VTEwuXG4rSG93ZXZlciwgdGhlcmUgaXMgbm8gb2JsaWdhdGlvbiB0byBwcm92ZSB0byB0aGUgdmVyaWZpZXIgdGhhdCBzdWNoIGEgcG9pbnRlciBpc1xuK25vbi1OVUxMIGJlZm9yZSB1c2UsIGluLWxpbmUgd2l0aCBleGlzdGluZyBzZW1hbnRpY3Mgb2YgYXJlbmEgcG9pbnRlcnMgdXNlZCBpblxuK2EgcHJvZ3JhbSAob3Igb2J0YWluZWQgZnJvbSBhbnkgb3RoZXIgc291cmNlKS5cbitcbiAuLiBfQlBGX2tmdW5jX25vZGVmOlxuIFxuIDIuNCBVc2luZyBhbiBleGlzdGluZyBrZXJuZWwgZnVuY3Rpb25cbkBAIC01MTUsNiArNTUyLDggQEAgSW4gb3JkZXIgdG8gYWNjb21tb2RhdGUgc3VjaCByZXF1aXJlbWVudHMsIHRoZSB2ZXJpZmllciB3aWxsIGVuZm9yY2Ugc3RyaWN0XG4gUFRSX1RPX0JURl9JRCB0eXBlIG1hdGNoaW5nIGlmIHR3byB0eXBlcyBoYXZlIHRoZSBleGFjdCBzYW1lIG5hbWUsIHdpdGggb25lXG4gYmVpbmcgc3VmZml4ZWQgd2l0aCBgYF9fX2luaXRgYC5cbiBcbisuLiBfQlBGX2tmdW5jX2FyZW5hX2FjY2VzczpcbitcbiAyLjggQWNjZXNzaW5nIGFyZW5hIG1lbW9yeSB0aHJvdWdoIGtmdW5jIGFyZ3VtZW50c1xuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCAwMWU3Y2U1NjljMWVkLi40YjNlNWQ4YTRhNTYzIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG4rKysgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0xNjc4LDYgKzE2NzgsNTAgQEAgc3RhdGljIGludCBlbWl0X3NwZWN0cmVfYmhiX2JhcnJpZXIodTggKipwcHJvZywgdTggKmlwLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qXG4rICogUmViYXNlIHRoZSBfX2FyZW5hIGFyZ3Mgb2YgYSBrZnVuYyBjYWxsIHRvIGFyZW5hIGtlcm5lbCBhZGRyZXNzZXMsXG4rICogck4gPSBrZXJuX3ZtX3N0YXJ0ICsgKHUzMilyTiwgd2l0aCBSMTIgaG9sZGluZyBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlXG4rICogYXJnIHByZXNlcnZlcyBOVUxMIGJ5IHNraXBwaW5nIHRoZSBhZGQsIHRlc3RlZCBvbiB0aGUgdHJ1bmNhdGVkIHZhbHVlIGFzXG4rICogYXJlbmEgTlVMTCBpcyBvZmZzZXQgMC4gUmV0dXJuIHRoZSBudW1iZXIgb2YgZW1pdHRlZCBieXRlcy5cbisgKi9cbitzdGF0aWMgaW50IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLFxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgdTggKipwcHJvZylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKmZtO1xuK1x0dTggKnByb2cgPSAqcHByb2c7XG4rXHR1OCAqc3RhcnQgPSBwcm9nO1xuK1x0aW50IGk7XG4rXG4rXHRmbSA9IGJwZl9qaXRfZmluZF9rZnVuY19tb2RlbChicGZfcHJvZywgaW5zbik7XG4rXHRpZiAoIWZtKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1pbl90KGludCwgZm0tXHUwMDNlbnJfYXJncywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKTsgaSsrKSB7XG4rXHRcdHU4IGZsYWdzID0gZm0tXHUwMDNlYXJnX2ZsYWdzW2ldO1xuK1x0XHR1MzIgcmVnID0gQlBGX1JFR18xICsgaTtcbitcbitcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKFdBUk5fT05fT05DRSghYnBmX3Byb2ctXHUwMDNlYXV4LVx1MDAzZWFyZW5hKSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0LyogbW92IGVOLCBlTjogdHJ1bmNhdGUgYW5kIGNsZWFyIHRoZSB1cHBlciAzMiBiaXRzICovXG4rXHRcdGVtaXRfbW92X3JlZyhcdTAwMjZwcm9nLCBmYWxzZSwgcmVnLCByZWcpO1xuK1x0XHRpZiAoZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHKSB7XG4rXHRcdFx0LyogdGVzdCBlTiwgZU47IGp6IG92ZXIgdGhlIDMtYnl0ZSBhZGQgKi9cbitcdFx0XHRtYXliZV9lbWl0X21vZChcdTAwMjZwcm9nLCByZWcsIHJlZywgZmFsc2UpO1xuK1x0XHRcdEVNSVQyKDB4ODUsIGFkZF8ycmVnKDB4QzAsIHJlZywgcmVnKSk7XG4rXHRcdFx0RU1JVDIoWDg2X0pFLCAzKTtcbitcdFx0fVxuK1x0XHQvKiBhZGQgck4sIHIxMiAqL1xuK1x0XHRtYXliZV9lbWl0X21vZChcdTAwMjZwcm9nLCByZWcsIFg4Nl9SRUdfUjEyLCB0cnVlKTtcbitcdFx0RU1JVDIoMHgwMSwgYWRkXzJyZWcoMHhDMCwgcmVnLCBYODZfUkVHX1IxMikpO1xuK1x0fVxuK1xuK1x0KnBwcm9nID0gcHJvZztcbitcdHJldHVybiBwcm9nIC0gc3RhcnQ7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcbiBcdFx0ICB1OCAqcndfaW1hZ2UsIGludCBvbGRwcm9nbGVuLCBzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eCwgYm9vbCBqbXBfcGFkZGluZylcbiB7XG5AQCAtMjU4Myw2ICsyNjI3LDEyIEBAIHN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4gXHRcdFx0fVxuIFx0XHRcdGlmICghaW1tMzIpXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHRpZiAoc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHtcbitcdFx0XHRcdGVyciA9IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhicGZfcHJvZywgaW5zbiwgXHUwMDI2cHJvZyk7XG4rXHRcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRcdFx0aXAgKz0gZXJyO1xuK1x0XHRcdH1cbiBcdFx0XHRpZiAocHJpdl9mcmFtZV9wdHIpIHtcbiBcdFx0XHRcdHB1c2hfcjkoXHUwMDI2cHJvZyk7XG4gXHRcdFx0XHRpcCArPSAyO1xuQEAgLTI5OTMsMTIgKzMwNDMsNDAgQEAgc3RhdGljIGludCBnZXRfbnJfdXNlZF9yZWdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSlcbiBcdHJldHVybiBucl91c2VkX3JlZ3M7XG4gfVxuIFxuKy8qXG4rICogQ29udmVydCBhbiBhcmVuYSBrZXJuZWwgYWRkcmVzcyBpbnRvIHRoZSBhcmVuYSBwb2ludGVyIGZvcm0gb24gaXRzIHdheVxuKyAqIGludG8gdGhlIEJQRiBjdHgsIHJheCA9ICh1MzIpKHNyYyAtIGtlcm5fdm1fc3RhcnQpLiBBIG51bGxhYmxlIGFyZ1xuKyAqIHByZXNlcnZlcyBOVUxMLCB0ZXN0ZWQgb24gdGhlIGZ1bGwgNjQtYml0IGtlcm5lbCBwb2ludGVyLiBUaGUgMzItYml0XG4rICogc3VidHJhY3Rpb24gYm90aCB0cnVuY2F0ZXMgYW5kIGNsZWFycyB0aGUgdXBwZXIgaGFsZiwgc28gdGhlIHN0b3JlZFxuKyAqIHZhbHVlIHNhdGlzZmllcyB0aGUgSklUIGludmFyaWFudCBmb3IgYXJlbmEgcG9pbnRlciByZWdpc3RlcnMuXG4rICovXG4rc3RhdGljIHZvaWQgZW1pdF9hcmVuYV9hcmdfY29udih1OCAqKnBwcm9nLCB1MzIgc3JjX3JlZywgYm9vbCBudWxsYWJsZSwgdTMyIGJhc2VfbG8pXG4re1xuK1x0dTggKnByb2cgPSAqcHByb2c7XG4rXG4rXHRpZiAobnVsbGFibGUpIHtcbitcdFx0aWYgKHNyY19yZWcgIT0gQlBGX1JFR18wKVxuK1x0XHRcdGVtaXRfbW92X3JlZyhcdTAwMjZwcm9nLCB0cnVlLCBCUEZfUkVHXzAsIHNyY19yZWcpO1xuK1x0XHQvKiB0ZXN0IHJheCwgcmF4OyBqeiBvdmVyIHRoZSA1LWJ5dGUgc3ViICovXG4rXHRcdEVNSVQzKDB4NDgsIDB4ODUsIDB4QzApO1xuK1x0XHRFTUlUMihYODZfSkUsIDUpO1xuK1x0fSBlbHNlIGlmIChzcmNfcmVnICE9IEJQRl9SRUdfMCkge1xuK1x0XHRlbWl0X21vdl9yZWcoXHUwMDI2cHJvZywgZmFsc2UsIEJQRl9SRUdfMCwgc3JjX3JlZyk7XG4rXHR9XG4rXHQvKiBzdWIgZWF4LCBiYXNlX2xvICovXG4rXHRFTUlUMV9vZmYzMigweDJELCBiYXNlX2xvKTtcbitcbitcdCpwcHJvZyA9IHByb2c7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZyxcbi1cdFx0ICAgICAgaW50IHN0YWNrX3NpemUsIGJvb2wgZm9yX2NhbGxfb3JpZ2luLCB1MzIgZmxhZ3MpXG4rXHRcdCAgICAgIGludCBzdGFja19zaXplLCBib29sIGZvcl9jYWxsX29yaWdpbiwgdTMyIGZsYWdzLFxuK1x0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wX2FyZW5hX2FyZ3MgKmFhcmdzKVxuIHtcbiBcdGludCBhcmdfcmVncywgZmlyc3Rfb2ZmID0gMCwgbnJfcmVncyA9IDAsIG5yX3N0YWNrX3Nsb3RzID0gMDtcbiBcdGJvb2wgdXNlX2ptcCA9IGJwZl90cmFtcG9saW5lX3VzZV9qbXAoZmxhZ3MpO1xuLVx0aW50IGksIGo7XG4rXHRpbnQgc3RhY2tfYXJnc19vZmYgPSAodXNlX2ptcCB8fCAoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0lORElSRUNUKSkgPyAxNiA6IDI0O1xuK1x0aW50IGksIGosIHNsb3QgPSAwO1xuIFxuIFx0LyogU3RvcmUgZnVuY3Rpb24gYXJndW1lbnRzIHRvIHN0YWNrLlxuIFx0ICogRm9yIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHR3byBwb2ludGVycyB0aGUgc2VxdWVuY2Ugd2lsbCBiZTpcbkBAIC0zMDI5LDE2ICszMTA3LDIwIEBAIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZyxcbiBcdFx0XHQvKiBjb3B5IGZ1bmN0aW9uIGFyZ3VtZW50cyBmcm9tIG9yaWdpbiBzdGFjayBmcmFtZVxuIFx0XHRcdCAqIGludG8gY3VycmVudCBzdGFjayBmcmFtZS5cbiBcdFx0XHQgKlxuLVx0XHRcdCAqIFRoZSBzdGFydGluZyBhZGRyZXNzIG9mIHRoZSBhcmd1bWVudHMgb24tc3RhY2tcbi1cdFx0XHQgKiBpczpcbi1cdFx0XHQgKiAgIHJicCArIDgocHVzaCByYnApICtcbi1cdFx0XHQgKiAgIDgocmV0dXJuIGFkZHIgb2Ygb3JpZ2luIGNhbGwpICtcbi1cdFx0XHQgKiAgIDgocmV0dXJuIGFkZHIgb2YgdGhlIGNhbGxlcilcbi1cdFx0XHQgKiB3aGljaCBtZWFuczogcmJwICsgMjRcbitcdFx0XHQgKiBUaGUgYXJndW1lbnRzIG9uLXN0YWNrIHN0YXJ0IGFib3ZlIHRoZSBzYXZlZCByYnBcbitcdFx0XHQgKiBhbmQgdGhlIHJldHVybiBhZGRyZXNzZXM6IHR3byByZXR1cm4gYWRkcmVzc2VzXG4rXHRcdFx0ICogKG9yaWdpbiBjYWxsIGFuZCBjYWxsZXIpIHdoZW4gdGhlIHRyYW1wb2xpbmUgaXNcbitcdFx0XHQgKiBlbnRlcmVkIHRocm91Z2ggdGhlIGZlbnRyeSBjYWxsLCBzbyByYnAgKyAyNCwgYW5kXG4rXHRcdFx0ICogYSBzaW5nbGUgb25lIHdoZW4gaXQgaXMgZW50ZXJlZCB3aXRoIGEgam1wIG9yXG4rXHRcdFx0ICogY2FsbGVkIGluZGlyZWN0bHksIHNvIHJicCArIDE2LlxuIFx0XHRcdCAqL1xuIFx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGFyZ19yZWdzOyBqKyspIHtcbiBcdFx0XHRcdGVtaXRfbGR4KHByb2csIEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHX0ZQLFxuLVx0XHRcdFx0XHQgbnJfc3RhY2tfc2xvdHMgKiA4ICsgMTYgKyAoIXVzZV9qbXApICogOCk7XG4rXHRcdFx0XHRcdCBucl9zdGFja19zbG90cyAqIDggKyBzdGFja19hcmdzX29mZik7XG4rXHRcdFx0XHRpZiAoYWFyZ3MgXHUwMDI2XHUwMDI2IChhYXJncy1cdTAwM2VzbG90cyBcdTAwMjYgQklUKHNsb3QpKSlcbitcdFx0XHRcdFx0ZW1pdF9hcmVuYV9hcmdfY29udihwcm9nLCBCUEZfUkVHXzAsXG4rXHRcdFx0XHRcdFx0XHQgICAgYWFyZ3MtXHUwMDNlbnVsbGFibGVfc2xvdHMgXHUwMDI2IEJJVChzbG90KSxcbitcdFx0XHRcdFx0XHRcdCAgICAodTMyKWFhcmdzLVx1MDAzZWtlcm5fdm1fc3RhcnQpO1xuIFx0XHRcdFx0ZW1pdF9zdHgocHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLCBCUEZfUkVHXzAsXG4gXHRcdFx0XHRcdCAtc3RhY2tfc2l6ZSk7XG4gXG5AQCAtMzA0Niw2ICszMTI4LDcgQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcm9nLFxuIFx0XHRcdFx0XHRmaXJzdF9vZmYgPSBzdGFja19zaXplO1xuIFx0XHRcdFx0c3RhY2tfc2l6ZSAtPSA4O1xuIFx0XHRcdFx0bnJfc3RhY2tfc2xvdHMrKztcbitcdFx0XHRcdHNsb3QrKztcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0LyogT25seSBjb3B5IHRoZSBhcmd1bWVudHMgb24tc3RhY2sgdG8gY3VycmVudFxuQEAgLTMwNTQsMTYgKzMxMzcsMjQgQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcm9nLFxuIFx0XHRcdCAqL1xuIFx0XHRcdGlmIChmb3JfY2FsbF9vcmlnaW4pIHtcbiBcdFx0XHRcdG5yX3JlZ3MgKz0gYXJnX3JlZ3M7XG4rXHRcdFx0XHRzbG90ICs9IGFyZ19yZWdzO1xuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0fVxuIFxuIFx0XHRcdC8qIGNvcHkgdGhlIGFyZ3VtZW50cyBmcm9tIHJlZ3MgaW50byBzdGFjayAqL1xuIFx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGFyZ19yZWdzOyBqKyspIHtcbi1cdFx0XHRcdGVtaXRfc3R4KHByb2csIEJQRl9EVywgQlBGX1JFR19GUCxcbi1cdFx0XHRcdFx0IG5yX3JlZ3MgPT0gNSA/IFg4Nl9SRUdfUjkgOiBCUEZfUkVHXzEgKyBucl9yZWdzLFxuLVx0XHRcdFx0XHQgLXN0YWNrX3NpemUpO1xuK1x0XHRcdFx0dTMyIHNyYyA9IG5yX3JlZ3MgPT0gNSA/IFg4Nl9SRUdfUjkgOiBCUEZfUkVHXzEgKyBucl9yZWdzO1xuK1xuK1x0XHRcdFx0aWYgKGFhcmdzIFx1MDAyNlx1MDAyNiAoYWFyZ3MtXHUwMDNlc2xvdHMgXHUwMDI2IEJJVChzbG90KSkpIHtcbitcdFx0XHRcdFx0ZW1pdF9hcmVuYV9hcmdfY29udihwcm9nLCBzcmMsXG4rXHRcdFx0XHRcdFx0XHQgICAgYWFyZ3MtXHUwMDNlbnVsbGFibGVfc2xvdHMgXHUwMDI2IEJJVChzbG90KSxcbitcdFx0XHRcdFx0XHRcdCAgICAodTMyKWFhcmdzLVx1MDAzZWtlcm5fdm1fc3RhcnQpO1xuK1x0XHRcdFx0XHRzcmMgPSBCUEZfUkVHXzA7XG4rXHRcdFx0XHR9XG4rXHRcdFx0XHRlbWl0X3N0eChwcm9nLCBCUEZfRFcsIEJQRl9SRUdfRlAsIHNyYywgLXN0YWNrX3NpemUpO1xuIFx0XHRcdFx0c3RhY2tfc2l6ZSAtPSA4O1xuIFx0XHRcdFx0bnJfcmVncysrO1xuK1x0XHRcdFx0c2xvdCsrO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0fVxuQEAgLTMzNTQsMTEgKzM0NDUsMTMgQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1cbiBcdHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKmZlbnRyeSA9IFx1MDAyNnRub2Rlc1tCUEZfVFJBTVBfRkVOVFJZXTtcbiBcdHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKmZleGl0ID0gXHUwMDI2dG5vZGVzW0JQRl9UUkFNUF9GRVhJVF07XG4gXHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICpmbW9kX3JldCA9IFx1MDAyNnRub2Rlc1tCUEZfVFJBTVBfTU9ESUZZX1JFVFVSTl07XG4rXHRzdHJ1Y3QgYnBmX3RyYW1wX2FyZW5hX2FyZ3MgYWFyZ3M7XG4gXHR2b2lkICpvcmlnX2NhbGwgPSBmdW5jX2FkZHI7XG4gXHRpbnQgY29va2llX29mZiwgY29va2llX2NudDtcbiBcdHU4ICoqYnJhbmNoZXMgPSBOVUxMO1xuIFx0dTY0IGZ1bmNfbWV0YTtcbiBcdHU4ICpwcm9nO1xuK1x0Ym9vbCBoYXNfYWFyZ3M7XG4gXHRib29sIHNhdmVfcmV0O1xuIFxuIFx0LypcbkBAIC0zMzY5LDYgKzM0NjIsOCBAQCBzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbVxuIFx0V0FSTl9PTl9PTkNFKChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIChmbGFncyBcdTAwMjYgfihCUEZfVFJBTVBfRl9JTkRJUkVDVCB8IEJQRl9UUkFNUF9GX1JFVF9GRU5UUllfUkVUKSkpO1xuIFxuK1x0aGFzX2FhcmdzID0gYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJncyh0bm9kZXMsIGZsYWdzLCBcdTAwMjZhYXJncyk7XG4rXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtLVx1MDAzZW5yX2FyZ3M7IGkrKylcbiBcdFx0bnJfcmVncyArPSAobS1cdTAwM2Vhcmdfc2l6ZVtpXSArIDcpIC8gOCAtIDE7XG4gXG5AQCAtMzUwMyw3ICszNTk4LDggQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1cbiBcdFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChcdTAwMjZwcm9nLCBCUEZfUkVHXzAsIC1pcF9vZmYsIChsb25nKWZ1bmNfYWRkcik7XG4gXHR9XG4gXG4tXHRzYXZlX2FyZ3MobSwgXHUwMDI2cHJvZywgcmVnc19vZmYsIGZhbHNlLCBmbGFncyk7XG4rXHRzYXZlX2FyZ3MobSwgXHUwMDI2cHJvZywgcmVnc19vZmYsIGZhbHNlLCBmbGFncyxcbitcdFx0ICBoYXNfYWFyZ3MgPyBcdTAwMjZhYXJncyA6IE5VTEwpO1xuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9DQUxMX09SSUcpIHtcbiBcdFx0LyogYXJnMTogbW92IHJkaSwgaW0gKi9cbkBAIC0zNTQ1LDcgKzM2NDEsNyBAQCBzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbVxuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9DQUxMX09SSUcpIHtcbiBcdFx0cmVzdG9yZV9yZWdzKG0sIFx1MDAyNnByb2csIHJlZ3Nfb2ZmKTtcbi1cdFx0c2F2ZV9hcmdzKG0sIFx1MDAyNnByb2csIGFyZ19zdGFja19vZmYsIHRydWUsIGZsYWdzKTtcbitcdFx0c2F2ZV9hcmdzKG0sIFx1MDAyNnByb2csIGFyZ19zdGFja19vZmYsIHRydWUsIGZsYWdzLCBOVUxMKTtcbiBcbiBcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9UQUlMX0NBTExfQ1RYKSB7XG4gXHRcdFx0LyogQmVmb3JlIGNhbGxpbmcgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLCBsb2FkIHRoZVxuQEAgLTQwNDYsNiArNDE0MiwxMSBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK2Jvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpXG4re1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIHZvaWQgKmJwZl9hcmNoX3RleHRfY29weSh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IGxlbilcbiB7XG4gXHRpZiAodGV4dF9wb2tlX2NvcHkoZHN0LCBzcmMsIGxlbikgPT0gTlVMTClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggMzU2ODg0NTg3YWUxMS4uMmY2MDZjMzI1NjgwNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmLmhcbkBAIC0xMjEzLDYgKzEyMTMsMTIgQEAgc3RydWN0IGJwZl9wcm9nX29mZmxvYWQge1xuIC8qIFRoZSBhcmd1bWVudCBpcyBzaWduZWQuICovXG4gI2RlZmluZSBCVEZfRk1PREVMX1NJR05FRF9BUkdcdFx0QklUKDEpXG4gXG4rLyogVGhlIGFyZ3VtZW50IGlzIGFuIGFyZW5hIHBvaW50ZXIuICovXG4rI2RlZmluZSBCVEZfRk1PREVMX0FSRU5BX0FSR1x0XHRCSVQoMilcbitcbisvKiBUaGUgYXJndW1lbnQgaXMgbnVsbGFibGUuICovXG4rI2RlZmluZSBCVEZfRk1PREVMX05VTExBQkxFX0FSR1x0XHRCSVQoMylcbitcbiBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwge1xuIFx0dTggcmV0X3NpemU7XG4gXHR1OCByZXRfZmxhZ3M7XG5AQCAtMTI4Niw2ICsxMjkyLDIwIEBAIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMge1xuIFx0aW50IG5yX25vZGVzO1xuIH07XG4gXG4rLypcbisgKiBXaGljaCA4LWJ5dGUgY3R4IHNsb3RzIG9mIGEgc3RydWN0X29wcyB0cmFtcG9saW5lIGhvbGQgYXJlbmEga2VybmVsXG4rICogcG9pbnRlcnMgdGhhdCBzYXZlX2FyZ3MoKSBjb252ZXJ0cyB0byB0aGUgYXJlbmEgcG9pbnRlciBmb3JtLFxuKyAqIGN0eFtzbG90XSA9ICh1MzIpKGthZGRyIC0ga2Vybl92bV9zdGFydCkuXG4rICovXG4rc3RydWN0IGJwZl90cmFtcF9hcmVuYV9hcmdzIHtcbitcdHUzMiBzbG90cztcbitcdHUzMiBudWxsYWJsZV9zbG90cztcdC8qIHN1YnNldCBvZiBAc2xvdHMgd2hlcmUgTlVMTCBpcyBwcmVzZXJ2ZWQgKi9cbitcdHU2NCBrZXJuX3ZtX3N0YXJ0O1xuK307XG4rXG4rYm9vbCBicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzKHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcywgdTMyIGZsYWdzLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgYnBmX3RyYW1wX2FyZW5hX2FyZ3MgKmFhcmdzKTtcbitcbiBzdHJ1Y3QgYnBmX3RyYW1wX3J1bl9jdHg7XG4gXG4gLyogRGlmZmVyZW50IHVzZSBjYXNlcyBmb3IgQlBGIHRyYW1wb2xpbmU6XG5AQCAtMTY4Nyw2ICsxNzA3LDExIEBAIHN0cnVjdCBicGZfY3R4X2FyZ19hdXgge1xuIFx0dTMyIGJ0Zl9pZDtcbiBcdHUzMiByZWZfaWQ7XG4gXHRib29sIHJlZmNvdW50ZWQ7XG4rXHQvKlxuK1x0ICogV2UgZG9uJ3QgZW5jb2RlIE5VTEwtbmVzcyBpbiB0aGUgdHlwZSBmb3IgdGhlIHByb2dyYW0sIGJ1dCBzdGlsbCBuZWVkXG4rXHQgKiB0byBkaXN0aW5ndWlzaCBpdCBmb3IgdGhlIHB1cnBvc2VzIG9mIHRlbGxpbmcgSklUcyB3aGF0IHNlcXVlbmNlIHRvIGVtaXQuXG4rXHQgKi9cbitcdGJvb2wgYXJlbmFfbnVsbGFibGU7XG4gfTtcbiBcbiBzdHJ1Y3QgYnRmX21vZF9wYWlyIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuaW5kZXggMzJkNTI5N2M1NTdlNS4uMzZjZTM0MDNmZTU5OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbkBAIC0xMTgzLDYgKzExODMsNyBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZCk7XG4gYm9vbCBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKHZvaWQpO1xuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19rZnVuY19jYWxsKHZvaWQpO1xuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpO1xuK2Jvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpO1xuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19mYXJfa2Z1bmNfY2FsbCh2b2lkKTtcbiBib29sIGJwZl9qaXRfc3VwcG9ydHNfZXhjZXB0aW9ucyh2b2lkKTtcbiBib29sIGJwZl9qaXRfc3VwcG9ydHNfcHRyX3hjaGcodm9pZCk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jIGIva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jXG5pbmRleCA0ZTdhNDhjMDJiZTVjLi44MjdhNjIxNmE2MjAxIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jXG4rKysgYi9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmNcbkBAIC0xNDcsNiArMTQ3LDggQEAgdm9pZCBicGZfc3RydWN0X29wc19pbWFnZV9mcmVlKHZvaWQgKmltYWdlKVxuIFxuICNkZWZpbmUgTUFZQkVfTlVMTF9TVUZGSVggXCJfX251bGxhYmxlXCJcbiAjZGVmaW5lIFJFRkNPVU5URURfU1VGRklYIFwiX19yZWZcIlxuKyNkZWZpbmUgQVJFTkFfU1VGRklYIFwiX19hcmVuYVwiXG4rI2RlZmluZSBBUkVOQV9NQVlCRV9OVUxMX1NVRkZJWCBcIl9fYXJlbmFfbnVsbGFibGVcIlxuIFxuIC8qIFByZXBhcmUgYXJndW1lbnQgaW5mbyBmb3IgZXZlcnkgbnVsbGFibGUgYXJndW1lbnQgb2YgYSBtZW1iZXIgb2YgYVxuICAqIHN0cnVjdF9vcHMgdHlwZS5cbkBAIC0xNTksNyArMTYxLDcgQEAgdm9pZCBicGZfc3RydWN0X29wc19pbWFnZV9mcmVlKHZvaWQgKmltYWdlKVxuICAqIHRvIHByb3ZpZGUgYW4gYXJyYXkgb2Ygc3RydWN0IGJwZl9jdHhfYXJnX2F1eCwgd2hpY2ggaW4gdHVybiBwcm92aWRlc1xuICAqIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHVzZWQgYnkgdGhlIHZlcmlmaWVyIHRvIGNoZWNrIHRoZSBhcmd1bWVudHMgb2YgdGhlXG4gICogQlBGIHN0cnVjdF9vcHMgcHJvZ3JhbSBhc3NpZ25lZCB0byB0aGUgbWVtYmVyLiBIZXJlLCB3ZSBvbmx5IGNhcmUgYWJvdXRcbi0gKiB0aGUgYXJndW1lbnRzIHRoYXQgYXJlIG1hcmtlZCBhcyBfX251bGxhYmxlLlxuKyAqIHRoZSBhcmd1bWVudHMgdGhhdCBhcmUgbWFya2VkIGFzIF9fbnVsbGFibGUsIF9fcmVmIG9yIF9fYXJlbmEuXG4gICpcbiAgKiBUaGUgYXJyYXkgb2Ygc3RydWN0IGJwZl9jdHhfYXJnX2F1eCBpcyBldmVudHVhbGx5IGFzc2lnbmVkIHRvXG4gICogcHJvZy1cdTAwM2VhdXgtXHUwMDNlY3R4X2FyZ19pbmZvIG9mIEJQRiBzdHJ1Y3Rfb3BzIHByb2dyYW1zIGFuZCBwYXNzZWQgdG8gdGhlXG5AQCAtMTc1LDcgKzE3Nyw4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9hcmdfaW5mbyhzdHJ1Y3QgYnRmICpidGYsXG4gXHRcdFx0ICAgIHN0cnVjdCBicGZfc3RydWN0X29wc19hcmdfaW5mbyAqYXJnX2luZm8pXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICpzdHViX2Z1bmNfcHJvdG8sICpwb2ludGVkX3R5cGU7XG4tXHRib29sIGlzX251bGxhYmxlID0gZmFsc2UsIGlzX3JlZmNvdW50ZWQgPSBmYWxzZTtcbitcdGJvb2wgaXNfbnVsbGFibGUgPSBmYWxzZSwgaXNfcmVmY291bnRlZCA9IGZhbHNlLCBpc19hcmVuYSA9IGZhbHNlO1xuK1x0Ym9vbCBpc19hcmVuYV9udWxsYWJsZSA9IGZhbHNlO1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqc3R1Yl9hcmdzLCAqYXJncztcbiBcdHN0cnVjdCBicGZfY3R4X2FyZ19hdXggKmluZm8sICppbmZvX2J1ZjtcbiBcdHUzMiBuYXJncywgYXJnX25vLCBpbmZvX2NudCA9IDA7XG5AQCAtMjI2LDI2ICsyMjksMzAgQEAgc3RhdGljIGludCBwcmVwYXJlX2FyZ19pbmZvKHN0cnVjdCBidGYgKmJ0ZixcbiBcdGluZm8gPSBpbmZvX2J1ZjtcbiBcdGZvciAoYXJnX25vID0gMDsgYXJnX25vIFx1MDAzYyBuYXJnczsgYXJnX25vKyspIHtcbiBcdFx0LyogU2tpcCBhcmd1bWVudHMgdGhhdCBpcyBub3Qgc3VmZml4ZWQgd2l0aFxuLVx0XHQgKiBcIl9fbnVsbGFibGUgb3IgX19yZWZcIi5cbitcdFx0ICogXCJfX251bGxhYmxlXCIsIFwiX19yZWZcIiwgXCJfX2FyZW5hXCIgb3IgXCJfX2FyZW5hX251bGxhYmxlXCIuXG4gXHRcdCAqL1xuIFx0XHRpc19udWxsYWJsZSA9IGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBcdTAwMjZzdHViX2FyZ3NbYXJnX25vXSxcbiBcdFx0XHRcdFx0XHQgICAgIE1BWUJFX05VTExfU1VGRklYKTtcbiBcdFx0aXNfcmVmY291bnRlZCA9IGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBcdTAwMjZzdHViX2FyZ3NbYXJnX25vXSxcbiBcdFx0XHRcdFx0XHQgICAgICAgUkVGQ09VTlRFRF9TVUZGSVgpO1xuK1x0XHRpc19hcmVuYV9udWxsYWJsZSA9IGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBcdTAwMjZzdHViX2FyZ3NbYXJnX25vXSxcbitcdFx0XHRcdFx0XHRcdCAgIEFSRU5BX01BWUJFX05VTExfU1VGRklYKTtcbitcdFx0aXNfYXJlbmEgPSBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgXHUwMDI2c3R1Yl9hcmdzW2FyZ19ub10sIEFSRU5BX1NVRkZJWCk7XG4gXG4gXHRcdGlmIChpc19udWxsYWJsZSlcbiBcdFx0XHRzdWZmaXggPSBNQVlCRV9OVUxMX1NVRkZJWDtcbiBcdFx0ZWxzZSBpZiAoaXNfcmVmY291bnRlZClcbiBcdFx0XHRzdWZmaXggPSBSRUZDT1VOVEVEX1NVRkZJWDtcbitcdFx0ZWxzZSBpZiAoaXNfYXJlbmFfbnVsbGFibGUpXG4rXHRcdFx0c3VmZml4ID0gQVJFTkFfTUFZQkVfTlVMTF9TVUZGSVg7XG4rXHRcdGVsc2UgaWYgKGlzX2FyZW5hKVxuK1x0XHRcdHN1ZmZpeCA9IEFSRU5BX1NVRkZJWDtcbiBcdFx0ZWxzZVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHQvKiBTaG91bGQgYmUgYSBwb2ludGVyIHRvIHN0cnVjdCAqL1xuLVx0XHRwb2ludGVkX3R5cGUgPSBidGZfdHlwZV9yZXNvbHZlX3B0cihidGYsXG4tXHRcdFx0XHRcdFx0ICAgIGFyZ3NbYXJnX25vXS50eXBlLFxuLVx0XHRcdFx0XHRcdCAgICBcdTAwMjZhcmdfYnRmX2lkKTtcbi1cdFx0aWYgKCFwb2ludGVkX3R5cGUgfHxcbi1cdFx0ICAgICFidGZfdHlwZV9pc19zdHJ1Y3QocG9pbnRlZF90eXBlKSkge1xuK1x0XHQvKiBTaG91bGQgYmUgYSBwb2ludGVyIHRvIHN0cnVjdCwgb3IgYW55IHBvaW50ZXIgZm9yIF9fYXJlbmEvX19hcmVuYV9udWxsYWJsZSAqL1xuK1x0XHRwb2ludGVkX3R5cGUgPSBidGZfdHlwZV9yZXNvbHZlX3B0cihidGYsIGFyZ3NbYXJnX25vXS50eXBlLCBcdTAwMjZhcmdfYnRmX2lkKTtcbitcdFx0aWYgKCFwb2ludGVkX3R5cGUgfHwgKCFpc19hcmVuYSBcdTAwMjZcdTAwMjYgIWlzX2FyZW5hX251bGxhYmxlIFx1MDAyNlx1MDAyNiAhYnRmX3R5cGVfaXNfc3RydWN0KHBvaW50ZWRfdHlwZSkpKSB7XG4gXHRcdFx0cHJfd2FybihcInN0dWIgZnVuY3Rpb24gJXMgaGFzICVzIHRhZ2dpbmcgdG8gYW4gdW5zdXBwb3J0ZWQgdHlwZVxcblwiLFxuIFx0XHRcdFx0c3R1Yl9mbmFtZSwgc3VmZml4KTtcbiBcdFx0XHRnb3RvIGVycl9vdXQ7XG5AQCAtMjczLDYgKzI4MCwxNSBAQCBzdGF0aWMgaW50IHByZXBhcmVfYXJnX2luZm8oc3RydWN0IGJ0ZiAqYnRmLFxuIFx0XHR9IGVsc2UgaWYgKGlzX3JlZmNvdW50ZWQpIHtcbiBcdFx0XHRpbmZvLVx1MDAzZXJlZ190eXBlID0gUFRSX1RSVVNURUQgfCBQVFJfVE9fQlRGX0lEO1xuIFx0XHRcdGluZm8tXHUwMDNlcmVmY291bnRlZCA9IHRydWU7XG4rXHRcdH0gZWxzZSBpZiAoaXNfYXJlbmEgfHwgaXNfYXJlbmFfbnVsbGFibGUpIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIEJvdGggdHlwZXMgZ2V0IFBUUl9UT19BUkVOQS4gSW4gdmVyaWZpZXIgc3RhdGUsXG4rXHRcdFx0ICogUFRSX1RPX0FSRU5BIGVuY29tcGFzc2VzIHBvdGVudGlhbCBOVUxMIHZhbHVlcywgYnV0XG4rXHRcdFx0ICogd2UgZG8gbm90IGZvcmNlIHRoZSBwcm9ncmFtIHRvIGNoZWNrIGl0LCBvciBtYWludGFpblxuK1x0XHRcdCAqIHByZWNpc2lvbiBhcm91bmQgaXQsIHNpbmNlIGl0IGhhcyBubyBzYWZldHkgaW1wbGljYXRpb24uXG4rXHRcdFx0ICovXG4rXHRcdFx0aW5mby1cdTAwM2VyZWdfdHlwZSA9IFBUUl9UT19BUkVOQTtcbitcdFx0XHRpbmZvLVx1MDAzZWFyZW5hX251bGxhYmxlID0gaXNfYXJlbmFfbnVsbGFibGU7XG4gXHRcdH1cbiBcbiBcdFx0aW5mbysrO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jXG5pbmRleCA1ZThhYzQ1Y2U1NmFmLi5lMzFmNTZmNDAxZWJmIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9idGYuY1xuKysrIGIva2VybmVsL2JwZi9idGYuY1xuQEAgLTY5NjMsMTUgKzY5NjMsMTkgQEAgYm9vbCBidGZfY3R4X2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSwgZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuLVx0LyogY2hlY2sgZm9yIFBUUl9UT19SRE9OTFlfQlVGX09SX05VTEwgb3IgUFRSX1RPX1JEV1JfQlVGX09SX05VTEwgKi9cbitcdC8qXG4rXHQgKiBDaGVjayBmb3IgUFRSX1RPX1JET05MWV9CVUZfT1JfTlVMTCwgUFRSX1RPX1JEV1JfQlVGX09SX05VTEwgb3JcbitcdCAqIFBUUl9UT19BUkVOQSAoYm90aCBudWxsYWJsZSBhbmQgbm9uLW51bGxhYmxlIGNhc2VzKS5cbitcdCAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJvZy1cdTAwM2VhdXgtXHUwMDNlY3R4X2FyZ19pbmZvX3NpemU7IGkrKykge1xuIFx0XHRjb25zdCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4ICpjdHhfYXJnX2luZm8gPSBcdTAwMjZwcm9nLVx1MDAzZWF1eC1cdTAwM2VjdHhfYXJnX2luZm9baV07XG4gXHRcdHUzMiB0eXBlLCBmbGFnO1xuIFxuIFx0XHR0eXBlID0gYmFzZV90eXBlKGN0eF9hcmdfaW5mby1cdTAwM2VyZWdfdHlwZSk7XG4gXHRcdGZsYWcgPSB0eXBlX2ZsYWcoY3R4X2FyZ19pbmZvLVx1MDAzZXJlZ190eXBlKTtcbi1cdFx0aWYgKGN0eF9hcmdfaW5mby1cdTAwM2VvZmZzZXQgPT0gb2ZmIFx1MDAyNlx1MDAyNiB0eXBlID09IFBUUl9UT19CVUYgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAoZmxhZyBcdTAwMjYgUFRSX01BWUJFX05VTEwpKSB7XG4rXHRcdGlmIChjdHhfYXJnX2luZm8tXHUwMDNlb2Zmc2V0ID09IG9mZiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICh0eXBlID09IFBUUl9UT19BUkVOQSB8fFxuK1x0XHQgICAgICh0eXBlID09IFBUUl9UT19CVUYgXHUwMDI2XHUwMDI2IChmbGFnIFx1MDAyNiBQVFJfTUFZQkVfTlVMTCkpKSkge1xuIFx0XHRcdGluZm8tXHUwMDNlcmVnX3R5cGUgPSBjdHhfYXJnX2luZm8tXHUwMDNlcmVnX3R5cGU7XG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdH1cbkBAIC03NTQxLDYgKzc1NDUsMjIgQEAgc3RhdGljIHU4IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdClcbiBcdHJldHVybiBmbGFncztcbiB9XG4gXG4rc3RhdGljIHU4IF9fZ2V0X2FyZ19mbW9kZWxfZmxhZ3MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZyxcbitcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpXG4re1xuK1x0dTggZmxhZ3MgPSBfX2dldF90eXBlX2Ztb2RlbF9mbGFncyh0KTtcbitcbitcdGlmIChidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcIl9fYXJlbmFcIikgfHxcbitcdCAgICBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcIl9fYXJlbmFfbnVsbGFibGVcIikpXG4rXHRcdGZsYWdzIHw9IEJURl9GTU9ERUxfQVJFTkFfQVJHO1xuK1x0aWYgKGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwiX19udWxsYWJsZVwiKSB8fFxuK1x0ICAgIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwiX19hcmVuYV9udWxsYWJsZVwiKSlcbitcdFx0ZmxhZ3MgfD0gQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7XG4rXG4rXHRyZXR1cm4gZmxhZ3M7XG4rfVxuK1xuIGludCBidGZfZGlzdGlsbF9mdW5jX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4gXHRcdFx0ICAgc3RydWN0IGJ0ZiAqYnRmLFxuIFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqZnVuYyxcbkBAIC03NjA2LDcgKzc2MjYsNyBAQCBpbnQgYnRmX2Rpc3RpbGxfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXHRcdG0tXHUwMDNlYXJnX3NpemVbaV0gPSByZXQ7XG4tXHRcdG0tXHUwMDNlYXJnX2ZsYWdzW2ldID0gX19nZXRfdHlwZV9mbW9kZWxfZmxhZ3ModCk7XG4rXHRcdG0tXHUwMDNlYXJnX2ZsYWdzW2ldID0gX19nZXRfYXJnX2Ztb2RlbF9mbGFncyhidGYsIFx1MDAyNmFyZ3NbaV0sIHQpO1xuIFx0fVxuIFx0bS1cdTAwM2Vucl9hcmdzID0gbmFyZ3M7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NvcmUuYyBiL2tlcm5lbC9icGYvY29yZS5jXG5pbmRleCBlMjA3NjY2N2IyNDUxLi5hM2UxZmFlMzJlYWNlIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jb3JlLmNcbisrKyBiL2tlcm5lbC9icGYvY29yZS5jXG5AQCAtMzMwOCw2ICszMzA4LDExIEBAIGJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbitib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIGJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfZmFyX2tmdW5jX2NhbGwodm9pZClcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuaW5kZXggZWQ3OTk5YWQ2YzY2Yy4uZDJkN2EyOTA0MzQ1ZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG4rKysgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuQEAgLTUyOSw2ICs1MjksNTMgQEAgYnBmX3RyYW1wb2xpbmVfZ2V0X3Byb2dzKGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGludCAqdG90YWwsIGJvb2wgKmlwX2FcbiBcdHJldHVybiB0bm9kZXM7XG4gfVxuIFxuK3N0YXRpYyBib29sIGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbit7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByb2ctXHUwMDNlYXV4LVx1MDAzZWN0eF9hcmdfaW5mb19zaXplOyBpKyspXG4rXHRcdGlmIChiYXNlX3R5cGUocHJvZy1cdTAwM2VhdXgtXHUwMDNlY3R4X2FyZ19pbmZvW2ldLnJlZ190eXBlKSA9PSBQVFJfVE9fQVJFTkEpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuKy8qXG4rICogQ29sbGVjdCB3aGljaCBjdHggc2xvdHMgb2YgYSBzdHJ1Y3Rfb3BzIHRyYW1wb2xpbmUgaG9sZCBhcmVuYSBrZXJuZWxcbisgKiBwb2ludGVycyB0aGF0IHNhdmVfYXJncygpIG11c3QgY29udmVydCB0byB0aGUgYXJlbmEgcG9pbnRlciBmb3JtLiBPbmx5XG4rICogdGhlIHN0cnVjdF9vcHMgaW5kaXJlY3QgdHJhbXBvbGluZSBjb252ZXJ0czogaXQgZGlzcGF0Y2hlcyB0byBhIHNpbmdsZVxuKyAqIHByb2cgd2hvc2UgYXJlbmEgaXMga25vd24gYXQgZ2VuZXJhdGlvbiB0aW1lLiBSZXR1cm4gZmFsc2Ugd2hlbiB0aGVyZVxuKyAqIGlzIG5vdGhpbmcgdG8gY29udmVydC5cbisgKi9cbitib29sIGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3Moc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB1MzIgZmxhZ3MsXG4rXHRcdFx0XHQgIHN0cnVjdCBicGZfdHJhbXBfYXJlbmFfYXJncyAqYWFyZ3MpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nO1xuK1x0aW50IGk7XG4rXG4rXHRtZW1zZXQoYWFyZ3MsIDAsIHNpemVvZigqYWFyZ3MpKTtcbitcbitcdGlmICghKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9JTkRJUkVDVCkgfHxcbitcdCAgICB0bm9kZXNbQlBGX1RSQU1QX0ZFTlRSWV0ubnJfbm9kZXMgIT0gMSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cHJvZyA9IHRub2Rlc1tCUEZfVFJBTVBfRkVOVFJZXS5ub2Rlc1swXS1cdTAwM2VsaW5rLVx1MDAzZXByb2c7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwcm9nLVx1MDAzZWF1eC1cdTAwM2VjdHhfYXJnX2luZm9fc2l6ZTsgaSsrKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCBicGZfY3R4X2FyZ19hdXggKmluZm8gPSBcdTAwMjZwcm9nLVx1MDAzZWF1eC1cdTAwM2VjdHhfYXJnX2luZm9baV07XG4rXG4rXHRcdGlmIChiYXNlX3R5cGUoaW5mby1cdTAwM2VyZWdfdHlwZSkgIT0gUFRSX1RPX0FSRU5BKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRhYXJncy1cdTAwM2VzbG90cyB8PSBCSVQoaW5mby1cdTAwM2VvZmZzZXQgLyA4KTtcbitcdFx0aWYgKGluZm8tXHUwMDNlYXJlbmFfbnVsbGFibGUpXG4rXHRcdFx0YWFyZ3MtXHUwMDNlbnVsbGFibGVfc2xvdHMgfD0gQklUKGluZm8tXHUwMDNlb2Zmc2V0IC8gOCk7XG4rXHR9XG4rXHRpZiAoIWFhcmdzLVx1MDAzZXNsb3RzKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFwcm9nLVx1MDAzZWF1eC1cdTAwM2VhcmVuYSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGFhcmdzLVx1MDAzZWtlcm5fdm1fc3RhcnQgPSBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQocHJvZy1cdTAwM2VhdXgtXHUwMDNlYXJlbmEpO1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGJwZl90cmFtcF9pbWFnZV9mcmVlKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltKVxuIHtcbiBcdGJwZl9pbWFnZV9rc3ltX2RlbChcdTAwMjZpbS1cdTAwM2Vrc3ltKTtcbkBAIC02ODUsNiArNzMyLDcgQEAgc3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRcbiBcdHUzMiBvcmlnX2ZsYWdzID0gdHItXHUwMDNlZmxhZ3M7XG4gXHRib29sIGlwX2FyZyA9IGZhbHNlO1xuIFx0aW50IGVyciwgdG90YWwsIHNpemU7XG4rXHRpbnQga2luZCwgaTtcbiBcbiBcdHRub2RlcyA9IGJwZl90cmFtcG9saW5lX2dldF9wcm9ncyh0ciwgXHUwMDI2dG90YWwsIFx1MDAyNmlwX2FyZyk7XG4gXHRpZiAoSVNfRVJSKHRub2RlcykpXG5AQCAtNjk1LDYgKzc0MywyMiBAQCBzdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBBcmVuYSBjdHggYXJncyBhcmUgY29udmVydGVkIG9ubHkgYnkgdGhlIHN0cnVjdF9vcHMgaW5kaXJlY3RcbitcdCAqIHRyYW1wb2xpbmUsIHdoaWNoIGRpc3BhdGNoZXMgdG8gYSBzaW5nbGUga25vd24gcHJvZy4gR2VuZXJpY1xuK1x0ICogdHJhbXBvbGluZXMgY2FuIG1peCBwcm9ncyB3aXRoIGRpZmZlcmVudCBhcmVuYXMsIHNvIG5vIGNvbnZlcnNpb25cbitcdCAqIGlzIHBvc3NpYmxlIGhlcmUuIE5vdCByZWFjaGFibGUgdG9kYXk6IG9ubHkgc3RydWN0X29wcyBwcm9ncyBnZXRcbitcdCAqIGFyZW5hIGN0eCBhcmdzIGFuZCB0aGV5IG5ldmVyIHJpZGUgZ2VuZXJpYyB0cmFtcG9saW5lcy5cbitcdCAqL1xuK1x0Zm9yIChraW5kID0gMDsga2luZCBcdTAwM2MgQlBGX1RSQU1QX01BWDsga2luZCsrKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRub2Rlc1traW5kXS5ucl9ub2RlczsgaSsrKSB7XG4rXHRcdFx0aWYgKGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKHRub2Rlc1traW5kXS5ub2Rlc1tpXS1cdTAwM2VsaW5rLVx1MDAzZXByb2cpKSB7XG4rXHRcdFx0XHRlcnIgPSAtRU5PVFNVUFA7XG4rXHRcdFx0XHRnb3RvIG91dDtcbitcdFx0XHR9XG4rXHRcdH1cbitcdH1cbitcbiBcdC8qIGNsZWFyIGFsbCBiaXRzIGV4Y2VwdCBTSEFSRV9JUE1PRElGWSBhbmQgVEFJTF9DQUxMX0NUWCAqL1xuIFx0dHItXHUwMDNlZmxhZ3MgXHUwMDI2PSAoQlBGX1RSQU1QX0ZfU0hBUkVfSVBNT0RJRlkgfCBCUEZfVFJBTVBfRl9UQUlMX0NBTExfQ1RYKTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGIyNzQwMDRmY2NmZDkuLmM5MTI5MzMwZGVkZTYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTEwOTA3LDYgKzEwOTA3LDE2IEBAIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19pcnFfZmxhZyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW1cbiBcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcIl9faXJxX2ZsYWdcIik7XG4gfVxuIFxuK3N0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19hcmVuYShjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbit7XG4rXHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCJfX2FyZW5hXCIpO1xuK31cbitcbitzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfYXJlbmFfbnVsbGFibGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpXG4re1xuK1x0cmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwiX19hcmVuYV9udWxsYWJsZVwiKTtcbit9XG4rXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX3NjYWxhcl93aXRoX25hbWUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZyxcbiBcdFx0XHRcdFx0ICBjb25zdCBjaGFyICpuYW1lKVxuQEAgLTExMTI3LDYgKzExMTM3LDcgQEAgZW51bSBrZnVuY19wdHJfYXJnX3R5cGUge1xuIFx0S0ZfQVJHX1BUUl9UT19JUlFfRkxBRyxcbiBcdEtGX0FSR19QVFJfVE9fUkVTX1NQSU5fTE9DSyxcbiBcdEtGX0FSR19QVFJfVE9fVEFTS19XT1JLLFxuK1x0S0ZfQVJHX1BUUl9UT19BUkVOQSxcbiB9O1xuIFxuIGVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcbkBAIC0xMTQxMiw3ICsxMTQyMyw2IEBAIGdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXG4gXHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIodCkpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbi1cbiBcdHJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMobWV0YS1cdTAwM2VidGYsIHQtXHUwMDNldHlwZSwgTlVMTCk7XG4gXHRyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQobWV0YS1cdTAwM2VidGYsIHJlZl90LVx1MDAzZW5hbWVfb2ZmKTtcbiBcbkBAIC0xMTQ2MSw2ICsxMTQ3MSw5IEBAIGdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXG4gXHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19SRVNfU1BJTl9MT0NLO1xuIFx0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2NhbGxiYWNrKGVudiwgbWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4gXHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19DQUxMQkFDSztcbitcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19hcmVuYShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSB8fFxuK1x0XHQgaXNfa2Z1bmNfYXJnX2FyZW5hX251bGxhYmxlKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuK1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQVJFTkE7XG4gXHRlbHNlIGlmIChhcmcgKyAxIFx1MDAzYyBuYXJncyBcdTAwMjZcdTAwMjZcbiBcdFx0IChpc19rZnVuY19hcmdfbWVtX3NpemUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnICsgMV0pIHx8XG4gXHRcdCAgaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZyArIDFdKSkpIHtcbkBAIC0xMjE1NCw2ICsxMjE2NywzMSBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxuIFxuIFx0XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmdzW2ldLnR5cGUsIE5VTEwpO1xuIFxuK1x0XHRpZiAoYmFzZV90eXBlKGtmX2FyZ190eXBlKSA9PSBLRl9BUkdfUFRSX1RPX0FSRU5BKSB7XG4rXHRcdFx0aWYgKCFicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3MoKSkge1xuK1x0XHRcdFx0dmVyYm9zZShlbnYsIFwiSklUIGRvZXMgbm90IHN1cHBvcnQga2Z1bmMgJXMoKSB3aXRoIGFyZW5hIHBvaW50ZXIgYXJndW1lbnRzXFxuXCIsXG4rXHRcdFx0XHRcdGZ1bmNfbmFtZSk7XG4rXHRcdFx0XHRyZXR1cm4gLUVOT1RTVVBQO1xuK1x0XHRcdH1cbitcdFx0XHRpZiAoIWVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VhcmVuYSkge1xuK1x0XHRcdFx0dmVyYm9zZShlbnYsXG4rXHRcdFx0XHRcdFwiJXMgYXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXFxuXCIsXG4rXHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHR9XG4rXHRcdFx0aWYgKHJlZ25vIFx1MDAzYyAwKSB7XG4rXHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBhcmVuYSBwb2ludGVyIGNhbm5vdCBiZSBhIHN0YWNrIGFyZ3VtZW50XFxuXCIsXG4rXHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHR9XG4rXHRcdFx0aWYgKHJlZy1cdTAwM2V0eXBlICE9IFBUUl9UT19BUkVOQSBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKSB7XG4rXHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBpcyBub3QgYSBwb2ludGVyIHRvIGFyZW5hIG9yIHNjYWxhclxcblwiLFxuK1x0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4gXHRcdGlmIChidGZfdHlwZV9pc19wdHIodCkgXHUwMDI2XHUwMDI2IChicGZfcmVnaXN0ZXJfaXNfbnVsbChyZWcpIHx8IHR5cGVfbWF5X2JlX251bGwocmVnLVx1MDAzZXR5cGUpKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFpc19rZnVuY19hcmdfbnVsbGFibGUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbaV0pKSB7XG4gXHRcdFx0dmVyYm9zZShlbnYsIFwiUG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkICVzXFxuXCIsXG5AQCAtMTg4MDcsNiArMTg4NDUsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCAqZnVuY19wcm90bztcbiBcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYztcbitcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wc19hcmdfaW5mbyAqYXJnX2luZm87XG4gXHRjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgKnN0X29wcztcbiBcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXI7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBlbnYtXHUwMDNlcHJvZztcbkBAIC0xODg4NSwxMCArMTg5MjQsMjMgQEAgc3RhdGljIGludCBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdH1cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN0X29wc19kZXNjLVx1MDAzZWFyZ19pbmZvW21lbWJlcl9pZHhdLmNudDsgaSsrKSB7XG4tXHRcdGlmIChzdF9vcHNfZGVzYy1cdTAwM2VhcmdfaW5mb1ttZW1iZXJfaWR4XS5pbmZvW2ldLnJlZmNvdW50ZWQpIHtcbitcdGFyZ19pbmZvID0gXHUwMDI2c3Rfb3BzX2Rlc2MtXHUwMDNlYXJnX2luZm9bbWVtYmVyX2lkeF07XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcmdfaW5mby1cdTAwM2VjbnQ7IGkrKykge1xuK1x0XHRjb25zdCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4ICppbmZvID0gXHUwMDI2YXJnX2luZm8tXHUwMDNlaW5mb1tpXTtcbitcbitcdFx0aWYgKGluZm8tXHUwMDNlcmVmY291bnRlZClcbiBcdFx0XHRoYXNfcmVmY291bnRlZF9hcmcgPSB0cnVlO1xuLVx0XHRcdGJyZWFrO1xuK1x0XHRpZiAoYmFzZV90eXBlKGluZm8tXHUwMDNlcmVnX3R5cGUpID09IFBUUl9UT19BUkVOQSkge1xuK1x0XHRcdGlmICghYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKCkpIHtcbitcdFx0XHRcdHZlcmJvc2UoZW52LCBcIkpJVCBkb2VzIG5vdCBzdXBwb3J0IGFyZW5hIGFyZ3VtZW50c1xcblwiKTtcbitcdFx0XHRcdHJldHVybiAtRU5PVFNVUFA7XG4rXHRcdFx0fVxuK1x0XHRcdGlmICghcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXJlbmEpIHtcbitcdFx0XHRcdHZlcmJvc2UoZW52LFxuK1x0XHRcdFx0XHRcImFyZW5hIGFyZ3VtZW50IG9mICVzIHJlcXVpcmVzIGEgcHJvZ3JhbSB3aXRoIGFuIGFzc29jaWF0ZWQgYXJlbmFcXG5cIixcbitcdFx0XHRcdFx0bW5hbWUpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuIFx0XHR9XG4gXHR9XG4gXG5AQCAtMTg5MDksOCArMTg5NjEsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfZnVuY19uYW1lID0gbW5hbWU7XG4gXHRlbnYtXHUwMDNlb3BzID0gc3Rfb3BzLVx1MDAzZXZlcmlmaWVyX29wcztcbiBcbi1cdHJldHVybiBicGZfcHJvZ19jdHhfYXJnX2luZm9faW5pdChwcm9nLCBzdF9vcHNfZGVzYy1cdTAwM2VhcmdfaW5mb1ttZW1iZXJfaWR4XS5pbmZvLFxuLVx0XHRcdFx0XHQgIHN0X29wc19kZXNjLVx1MDAzZWFyZ19pbmZvW21lbWJlcl9pZHhdLmNudCk7XG4rXHRyZXR1cm4gYnBmX3Byb2dfY3R4X2FyZ19pbmZvX2luaXQocHJvZywgYXJnX2luZm8tXHUwMDNlaW5mbywgYXJnX2luZm8tXHUwMDNlY250KTtcbiB9XG4gI2RlZmluZSBTRUNVUklUWV9QUkVGSVggXCJzZWN1cml0eV9cIlxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9rZnVuYy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOWJlMTk1NjVmMGQ1M1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfa2Z1bmMuY1xuQEAgLTAsMCArMSwxNSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiYXJlbmFfa2Z1bmMuc2tlbC5oXCJcbitcbisvKlxuKyAqIFRoZSB0ZXN0IGtmdW5jcyBsaXZlIGluIGJwZl90ZXN0bW9kLiBSZXNvbHZpbmcga2Z1bmNzIGFnYWluc3QgbW9kdWxlXG4rICogQlRGcyBuZWVkcyBDQVBfU1lTX0FETUlOLCBzbyBydW4gd2l0aCBmdWxsIGNhcGFiaWxpdGllcyBpbnN0ZWFkIG9mXG4rICogdGhyb3VnaCB0aGUgdmVyaWZpZXIgdGVzdHMnIGNhcGFiaWxpdHktcmVzdHJpY3RlZCBydW5uZXIuXG4rICovXG4rdm9pZCB0ZXN0X2FyZW5hX2tmdW5jKHZvaWQpXG4re1xuK1x0UlVOX1RFU1RTKGFyZW5hX2tmdW5jKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfa2Z1bmNfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9rZnVuY19qaXQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjIzNTljZGUyNGM0NWRcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2tmdW5jX2ppdC5jXG5AQCAtMCwwICsxLDEzIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJhcmVuYV9rZnVuY19qaXQuc2tlbC5oXCJcbitcbisvKlxuKyAqIFJ1bnMgd2l0aCBmdWxsIGNhcGFiaWxpdGllczogcmVzb2x2aW5nIG1vZHVsZSBrZnVuYyBrc3ltcyByZXF1aXJlc1xuKyAqIENBUF9TWVNfQURNSU4sIHdoaWNoIHJ1bGVzIG91dCB0aGUgY2FwYWJpbGl0eS1yZXN0cmljdGVkIHJ1bm5lci5cbisgKi9cbit2b2lkIHRlc3RfYXJlbmFfa2Z1bmNfaml0KHZvaWQpXG4re1xuK1x0UlVOX1RFU1RTKGFyZW5hX2tmdW5jX2ppdCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iMWUzOWRlZmEzOGFlXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xuQEAgLTAsMCArMSw3NCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwic3RydWN0X29wc19hcmVuYS5za2VsLmhcIlxuKyNpbmNsdWRlIFwic3RydWN0X29wc19hcmVuYV9mYWlsLnNrZWwuaFwiXG4rXG4rI2lmIGRlZmluZWQoX194ODZfNjRfXylcbisvKlxuKyAqIEF0dGFjaCBjYWxsYmFja3Mgd2l0aCBfX2FyZW5hIGFuZCBfX2FyZW5hX251bGxhYmxlIGFyZ3VtZW50cyBhbmQgZHJpdmVcbisgKiB0aGVtIHRocm91Z2ggdGhlIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKigpIGtmdW5jcy5cbisgKi9cbitzdGF0aWMgdm9pZCBhcmVuYV9hcmcodm9pZClcbit7XG4rXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpO1xuK1x0c3RydWN0IHN0cnVjdF9vcHNfYXJlbmEgKnNrZWw7XG4rXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBOVUxMO1xuK1x0aW50IGVycjtcbitcbitcdHNrZWwgPSBzdHJ1Y3Rfb3BzX2FyZW5hX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJzdHJ1Y3Rfb3BzX2FyZW5hX19vcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRsaW5rID0gYnBmX21hcF9fYXR0YWNoX3N0cnVjdF9vcHMoc2tlbC1cdTAwM2VtYXBzLnRlc3Rtb2RfYXJlbmEpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGxpbmssIFwiYXR0YWNoX3N0cnVjdF9vcHNcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy50cmlnZ2VyKSxcbitcdFx0XHRcdCAgICAgXHUwMDI2dG9wdHMpO1xuK1x0QVNTRVJUX09LKGVyciwgXCJ0ZXN0X3J1blwiKTtcbitcdEFTU0VSVF9FUSh0b3B0cy5yZXR2YWwsIDAsIFwidHJpZ2dlcl9yZXR2YWxcIik7XG4rXG4rb3V0OlxuK1x0YnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XG4rXHRzdHJ1Y3Rfb3BzX2FyZW5hX19kZXN0cm95KHNrZWwpO1xuK31cbitcbisvKlxuKyAqIEEgcHJvZ3JhbSB3aXRoIG5vIGFyZW5hIGNhbm5vdCBhdHRhY2ggdG8gYSBtZW1iZXIgd2l0aCBhbiBfX2FyZW5hXG4rICogYXJndW1lbnQuXG4rICovXG4rc3RhdGljIHZvaWQgYXJlbmFfYXJnX2ZhaWwodm9pZClcbit7XG4rXHRzdHJ1Y3Qgc3RydWN0X29wc19hcmVuYV9mYWlsICpza2VsO1xuK1xuK1x0c2tlbCA9IHN0cnVjdF9vcHNfYXJlbmFfZmFpbF9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKEFTU0VSVF9FUlJfUFRSKHNrZWwsIFwic3RydWN0X29wc19hcmVuYV9mYWlsX19vcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWxfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuKyNlbmRpZlxuK1xuKy8qXG4rICogU2VyaWFsaXplZCBiZWNhdXNlIGl0IGF0dGFjaGVzIHRoZSBzaW5nbGV0b24gYnBmX3Rlc3Rtb2Rfb3BzMywgd2hpY2hcbisgKiB0ZXN0X3N0cnVjdF9vcHNfcHJpdmF0ZV9zdGFjayBhbHNvIGF0dGFjaGVzOyByZWdpc3RlcmluZyBpdCB0d2ljZSBmYWlsc1xuKyAqIHdpdGggLUVFWElTVC5cbisgKi9cbit2b2lkIHNlcmlhbF90ZXN0X3N0cnVjdF9vcHNfYXJlbmEodm9pZClcbit7XG4rXHQvKlxuK1x0ICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBvbmx5LlxuK1x0ICogRWxzZXdoZXJlIHZlcmlmaWNhdGlvbiBmYWlscyB3aXRoIFwiSklUIGRvZXMgbm90IHN1cHBvcnQgYXJlbmFcbitcdCAqIGFyZ3VtZW50c1wiLCBzbyB0aGUgcHJvZ3JhbXMgY2Fubm90IGV2ZW4gbG9hZC5cbitcdCAqL1xuKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImFyZW5hX2FyZ1wiKSlcbitcdFx0YXJlbmFfYXJnKCk7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImFyZW5hX2FyZ19mYWlsXCIpKVxuK1x0XHRhcmVuYV9hcmdfZmFpbCgpO1xuKyNlbHNlXG4rXHR0ZXN0X19za2lwKCk7XG4rI2VuZGlmXG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xNWQ0ODE1MTc5N2RhXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuY1xuQEAgLTAsMCArMSwyNjAgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbitcbisjZGVmaW5lIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuKyNpbmNsdWRlIFwiYnBmX2V4cGVyaW1lbnRhbC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGZfYXJlbmFfY29tbW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcIi4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFwiXG4rXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpO1xuK1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpO1xuK1x0LyogcGFnZSAwIGhvc3RzIHRoZSBhcmVuYSBnbG9iYWwsIHBhZ2UgMSBpcyBmb3IgYWxsb2NhdGlvbnMgKi9cbitcdF9fdWludChtYXhfZW50cmllcywgMik7XG4rfSBhcmVuYSBTRUMoXCIubWFwc1wiKTtcbitcbisvKlxuKyAqIE9jY3VwaWVzIHBhZ2UgMCBzbyBubyBhbGxvY2F0aW9uIGxhbmRzIGF0IGFyZW5hIG9mZnNldCAwLCB3aGljaCB0aGVcbisgKiBudWxsYWJsZSB0ZXN0cyBiZWxvdyBtdXN0IGJlIGFibGUgdG8gdGVsbCBhcGFydCBmcm9tIE5VTEwuXG4rICovXG4rdTY0IF9fYXJlbmEgYXJlbmFfcGFkO1xuK1xuKy8qIHZvbGF0aWxlIHRvIGZvcmNlIHRoZSBzY2FsYXIgcmVsb2FkcyBiZWxvdyAqL1xuK3ZvbGF0aWxlIHU2NCBzdGFzaDtcbitcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19hcmNoX3g4Nl82NFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxuK2ludCBhcmVuYV9hcmdfZm9ybXModm9pZCAqY3R4KVxuK3tcbisjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVClcbitcdHU2NCBfX2FyZW5hICp2YWw7XG4rXHR1NjQgcmV0O1xuK1xuK1x0dmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuK1x0aWYgKCF2YWwpXG4rXHRcdHJldHVybiAxO1xuK1xuK1x0LyogUFRSX1RPX0FSRU5BIGFyZ3VtZW50ICovXG4rXHQqdmFsID0gNDE7XG4rXHRyZXQgPSBicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoKHU2NCAqKXZhbCk7XG4rXHRpZiAocmV0ICE9IDQxIHx8ICp2YWwgIT0gNDIpXG4rXHRcdHJldHVybiAyO1xuK1xuK1x0LyogdGhlIGxvdyAzMiBiaXRzIGFzIGEgc2NhbGFyICovXG4rXHRzdGFzaCA9ICh1MzIpKHU2NCl2YWw7XG4rXHRyZXQgPSBicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoKHU2NCAqKXN0YXNoKTtcbitcdGlmIChyZXQgIT0gNDIgfHwgKnZhbCAhPSA0MylcbitcdFx0cmV0dXJuIDM7XG4rXG4rXHQvKiB0aGUgZnVsbCB1c2VyIGFkZHJlc3MgYXMgYSBzY2FsYXIgKi9cbitcdHN0YXNoID0gKHU2NCl2YWw7XG4rXHRicGZfYWRkcl9zcGFjZV9jYXN0KHN0YXNoLCAxLCAwKTtcbitcdHJldCA9IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopc3Rhc2gpO1xuK1x0aWYgKHJldCAhPSA0MyB8fCAqdmFsICE9IDQ0KVxuK1x0XHRyZXR1cm4gNDtcbitcbitcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTtcbisjZW5kaWZcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIFBpbiB0aGUgcmViYXNlIHNlbWFudGljcyB1c2luZyB0aGUgY2FwdHVyZSBrZnVuY3MsIHdoaWNoIHJldHVybiB0aGUgcmF3XG4rICogYXJndW1lbnQgdmFsdWU6IF9fYXJlbmEgcmViYXNlcyB1bmNvbmRpdGlvbmFsbHksIHNvIHplcm8gbG93IDMyIGJpdHNcbisgKiBhcnJpdmUgYXMgdGhlIGFyZW5hIGtlcm5lbCBiYXNlLCB3aGlsZSBfX2FyZW5hX251bGxhYmxlIHR1cm5zIHRoZW0gaW50b1xuKyAqIE5VTEwuXG4rICovXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fYXJjaF94ODZfNjRcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbitpbnQgYXJlbmFfYXJnX3JlYmFzZSh2b2lkICpjdHgpXG4re1xuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuK1x0dTY0IF9fYXJlbmEgKnZhbDtcbitcdHU2NCBiYXNlLCBvZmY7XG4rXG4rXHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRiYXNlID0gYnBmX2tmdW5jX2FyZW5hX2NhcF90ZXN0KE5VTEwpO1xuK1x0aWYgKCFiYXNlKVxuK1x0XHRyZXR1cm4gMjtcbitcbitcdC8qIG9ubHkgdGhlIGxvdyAzMiBiaXRzIGNvbnRyaWJ1dGUgKi9cbitcdHN0YXNoID0gMHhiYWRjMGZmZTAwMDAwMDAwO1xuK1x0aWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCgodTY0ICopc3Rhc2gpICE9IGJhc2UpXG4rXHRcdHJldHVybiAzO1xuK1xuK1x0b2ZmID0gKHUzMikodTY0KXZhbDtcbitcdGlmIChicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QoKHU2NCAqKXZhbCkgIT0gYmFzZSArIG9mZilcbitcdFx0cmV0dXJuIDQ7XG4rXG4rXHRpZiAoYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KE5VTEwpICE9IDApXG4rXHRcdHJldHVybiA1O1xuK1xuK1x0c3Rhc2ggPSAweGJhZGMwZmZlMDAwMDAwMDA7XG4rXHRpZiAoYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KCh1NjQgKilzdGFzaCkgIT0gMClcbitcdFx0cmV0dXJuIDY7XG4rXG4rXHRpZiAoYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KCh1NjQgKil2YWwpICE9IGJhc2UgKyBvZmYpXG4rXHRcdHJldHVybiA3O1xuK1xuK1x0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xuKyNlbmRpZlxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0XG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4raW50IGFyZW5hX2FyZ19udWxsYWJsZSh2b2lkICpjdHgpXG4re1xuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuK1x0dTY0IF9fYXJlbmEgKnZhbDtcbitcdHU2NCByZXQ7XG4rXG4rXHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHQqdmFsID0gNDE7XG4rXHRyZXQgPSBicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QoKHU2NCAqKXZhbCk7XG4rXHRpZiAocmV0ICE9IDQxIHx8ICp2YWwgIT0gNDIpXG4rXHRcdHJldHVybiAyO1xuK1xuK1x0aWYgKGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdChOVUxMKSAhPSAweGRlYWRiZWVmKVxuK1x0XHRyZXR1cm4gMztcbitcbitcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTtcbisjZW5kaWZcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19hcmNoX3g4Nl82NFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxuK2ludCBhcmVuYV9hcmdzNSh2b2lkICpjdHgpXG4re1xuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuK1x0dTY0IF9fYXJlbmEgKnZhbDtcbitcbitcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdHZhbFswXSA9IDE7XG4rXHR2YWxbMV0gPSAyO1xuK1x0dmFsWzJdID0gNDtcbitcdHZhbFszXSA9IDg7XG4rXHR2YWxbNF0gPSAxNjtcbitcbitcdGlmIChicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdCgodTY0ICopXHUwMDI2dmFsWzBdLCAodTY0ICopXHUwMDI2dmFsWzFdLFxuK1x0XHRcdFx0ICAgICAgICh1NjQgKilcdTAwMjZ2YWxbMl0sICh1NjQgKilcdTAwMjZ2YWxbM10sXG4rXHRcdFx0XHQgICAgICAgKHU2NCAqKVx1MDAyNnZhbFs0XSkgIT0gMzEpXG4rXHRcdHJldHVybiAyO1xuK1x0aWYgKGJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KCh1NjQgKilcdTAwMjZ2YWxbMF0sICh1NjQgKilcdTAwMjZ2YWxbMV0sXG4rXHRcdFx0XHQgICAgICAgKHU2NCAqKVx1MDAyNnZhbFsyXSwgKHU2NCAqKVx1MDAyNnZhbFszXSwgTlVMTCkgIT0gMTUpXG4rXHRcdHJldHVybiAzO1xuK1xuK1x0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xuKyNlbmRpZlxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0XG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4raW50IGFyZW5hX2FyZ19taXhlZCh2b2lkICpjdHgpXG4re1xuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuK1x0dTY0IF9fYXJlbmEgKnZhbDtcbitcbitcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdHZhbFswXSA9IDc7XG4rXHR2YWxbMV0gPSA1O1xuK1xuK1x0aWYgKGJwZl9rZnVuY19hcmVuYV9taXhlZF90ZXN0KCh1NjQgKilcdTAwMjZ2YWxbMF0sIE5VTEwpICE9IDcpXG4rXHRcdHJldHVybiAyO1xuK1xuK1x0aWYgKGJwZl9rZnVuY19hcmVuYV9taXhlZF90ZXN0KCh1NjQgKilcdTAwMjZ2YWxbMF0sICh1NjQgKilcdTAwMjZ2YWxbMV0pICE9IDEyKVxuK1x0XHRyZXR1cm4gMztcbitcbitcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTtcbisjZW5kaWZcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBrZXJuZWwtc2lkZSBmYXVsdHMgb24gdW5wb3B1bGF0ZWQgcGFnZXMgcmVjb3ZlciB2aWEgdGhlIHNjcmF0Y2ggcGFnZSAqL1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0XG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4raW50IGFyZW5hX2FyZ191bnBvcHVsYXRlZCh2b2lkICpjdHgpXG4re1xuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuK1x0dTY0IF9fYXJlbmEgKnZhbDtcbitcbitcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdHN0YXNoID0gKHU2NCl2YWwgKyBQQUdFX1NJWkU7XG4rXHRicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoKHU2NCAqKXN0YXNoKTtcbitcbitcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTtcbisjZW5kaWZcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19hcmNoX3g4Nl82NFxuK19fZmFpbHVyZSBfX21zZyhcImFyZW5hIHBvaW50ZXIgcmVxdWlyZXMgYSBwcm9ncmFtIHdpdGggYW4gYXNzb2NpYXRlZCBhcmVuYVwiKVxuK2ludCBhcmVuYV9hcmdfbm9fYXJlbmEodm9pZCAqY3R4KVxuK3tcbitcdGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopMSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fYXJjaF94ODZfNjRcbitfX2ZhaWx1cmUgX19tc2coXCJpcyBub3QgYSBwb2ludGVyIHRvIGFyZW5hIG9yIHNjYWxhclwiKVxuK2ludCBhcmVuYV9hcmdfYmFkX3JlZyh2b2lkICpjdHgpXG4re1xuK1x0dTY0IGJ1ZiA9IDA7XG4rXG4rXHQvKiB1c2UgdGhlIGFyZW5hIHNvIHRoZSBwcm9ncmFtIHBhc3NlcyB0aGUgYXJlbmEgcHJlc2VuY2UgY2hlY2sgKi9cbitcdGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbitcdGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdChcdTAwMjZidWYpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcdTAwMjZcdTAwMjYgXFxcbitcdGRlZmluZWQoX19CUEZfRkVBVFVSRV9TVEFDS19BUkdVTUVOVClcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19hcmNoX3g4Nl82NFxuK19fZmFpbHVyZSBfX21zZyhcImFyZW5hIHBvaW50ZXIgY2Fubm90IGJlIGEgc3RhY2sgYXJndW1lbnRcIilcbitpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eClcbit7XG4rXHRicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHRicGZfa2Z1bmNfYXJlbmFfc3RhY2tfYXJnX3Rlc3QoMSwgMiwgMywgNCwgNSwgKHU2NCAqKTEpO1xuK1x0cmV0dXJuIDA7XG4rfVxuKyNlbHNlXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fYXJjaF94ODZfNjRcbitfX2Rlc2NyaXB0aW9uKFwiYXJlbmFfYXJnX3N0YWNrOiBub3Qgc3VwcG9ydGVkLCBkdW1teSB0ZXN0XCIpXG4rX19zdWNjZXNzXG4raW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuKyNlbmRpZlxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi44NDc0NzYxMTcyNWY2XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmNcbkBAIC0wLDAgKzEsOTYgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbitcbisvKlxuKyAqIFZlcmlmeSB0aGUgSklULWVtaXR0ZWQgcmViYXNlIHNlcXVlbmNlcyBmb3IgX19hcmVuYSBhbmQgX19hcmVuYV9udWxsYWJsZVxuKyAqIGtmdW5jIGFyZ3VtZW50cy4gVGhlIGNhcHR1cmUga2Z1bmNzIHRha2UgdGhlIGFyZ3VtZW50IHdpdGhvdXRcbisgKiBkZXJlZmVyZW5jaW5nIGl0LCBzbyB0aGVzZSB0ZXN0cyBwaW4gb25seSB0aGUgZW1pdHRlZCBjb2RlLlxuKyAqL1xuKyNkZWZpbmUgQlBGX05PX0tGVU5DX1BST1RPVFlQRVNcbisjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rI2luY2x1ZGUgXCJicGZfZXhwZXJpbWVudGFsLmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZl9hcmVuYV9jb21tb24uaFx1MDAzZVxuKyNpbmNsdWRlIFwiLi4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXCJcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XG4rXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK30gYXJlbmEgU0VDKFwiLm1hcHNcIik7XG4rXG4rLyogdm9sYXRpbGUgdG8gZm9yY2UgdGhlIHNjYWxhciByZWxvYWRzIGJlbG93ICovXG4rdm9sYXRpbGUgdTY0IHN0YXNoO1xuK1xuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0XG4rX19qaXRlZChcIi4uLlwiKVxuK19faml0ZWQoXCJcdG1vdmxcdCVlZGksICVlZGlcIilcbitfX2ppdGVkKFwiXHRhZGRxXHQlcjEyLCAlcmRpXCIpXG4rX19qaXRlZChcIi4uLlwiKVxuK19faml0ZWQoXCJcdGNhbGxxXHR7ey4qfX1cIilcbitfX3N1Y2Nlc3NcbitpbnQgYXJlbmFfYXJnX2ppdF9yZWJhc2Uodm9pZCAqY3R4KVxuK3tcbitcdHN0YXNoID0gKHU2NClicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHRicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QoKHU2NCAqKXN0YXNoKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19hcmNoX3g4Nl82NFxuK19faml0ZWQoXCIuLi5cIilcbitfX2ppdGVkKFwiXHRtb3ZsXHQlZWRpLCAlZWRpXCIpXG4rX19qaXRlZChcIlx0dGVzdGxcdCVlZGksICVlZGlcIilcbitfX2ppdGVkKFwiXHRqZVx0e3suKn19XCIpXG4rX19qaXRlZChcIlx0YWRkcVx0JXIxMiwgJXJkaVwiKVxuK19fc3VjY2Vzc1xuK2ludCBhcmVuYV9hcmdfaml0X251bGxhYmxlKHZvaWQgKmN0eClcbit7XG4rXHRzdGFzaCA9ICh1NjQpYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuK1x0YnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KCh1NjQgKilzdGFzaCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fYXJjaF94ODZfNjRcbitfX2ppdGVkKFwiLi4uXCIpXG4rX19qaXRlZChcIlx0bW92bFx0JWVkaSwgJWVkaVwiKVxuK19faml0ZWQoXCJcdGFkZHFcdCVyMTIsICVyZGlcIilcbitfX2ppdGVkKFwiXHRtb3ZsXHQlZXNpLCAlZXNpXCIpXG4rX19qaXRlZChcIlx0YWRkcVx0JXIxMiwgJXJzaVwiKVxuK19faml0ZWQoXCJcdG1vdmxcdCVlZHgsICVlZHhcIilcbitfX2ppdGVkKFwiXHRhZGRxXHQlcjEyLCAlcmR4XCIpXG4rX19qaXRlZChcIlx0bW92bFx0JWVjeCwgJWVjeFwiKVxuK19faml0ZWQoXCJcdGFkZHFcdCVyMTIsICVyY3hcIilcbitfX2ppdGVkKFwiXHRtb3ZsXHQlcjhkLCAlcjhkXCIpXG4rX19qaXRlZChcIlx0dGVzdGxcdCVyOGQsICVyOGRcIilcbitfX2ppdGVkKFwiXHRqZVx0e3suKn19XCIpXG4rX19qaXRlZChcIlx0YWRkcVx0JXIxMiwgJXI4XCIpXG4rX19zdWNjZXNzXG4raW50IGFyZW5hX2FyZ19qaXRfYXJnczUodm9pZCAqY3R4KVxuK3tcbitcdHU2NCBfX2FyZW5hICp2YWw7XG4rXG4rXHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHR2YWxbMF0gPSAxO1xuK1x0dmFsWzFdID0gMjtcbitcdHZhbFsyXSA9IDQ7XG4rXHR2YWxbM10gPSA4O1xuK1x0dmFsWzRdID0gMTY7XG4rXG4rXHRicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdCgodTY0ICopXHUwMDI2dmFsWzBdLCAodTY0ICopXHUwMDI2dmFsWzFdLFxuK1x0XHRcdFx0ICAgKHU2NCAqKVx1MDAyNnZhbFsyXSwgKHU2NCAqKVx1MDAyNnZhbFszXSxcbitcdFx0XHRcdCAgICh1NjQgKilcdTAwMjZ2YWxbNF0pO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKyNlbmRpZiAvKiBfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCAqL1xuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmJhMDRjNzNkOGQ5Njdcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbkBAIC0wLDAgKzEsMTE1IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4rXG4rI2RlZmluZSBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFU1xuKyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfZXhwZXJpbWVudGFsLmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZl9hcmVuYV9jb21tb24uaFx1MDAzZVxuKyNpbmNsdWRlIFwiLi4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXCJcbisjaW5jbHVkZSBcIi4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFwiXG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcbitcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcbitcdC8qIHBhZ2UgMCBob3N0cyB0aGUgYXJlbmEgZ2xvYmFscywgcGFnZSAxIGlzIGZvciBhbGxvY2F0aW9ucyAqL1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAyKTtcbit9IGFyZW5hIFNFQyhcIi5tYXBzXCIpO1xuK1xuKy8qIGFsc28gYXNzb2NpYXRlcyB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGFyZW5hICovXG4rdTY0IF9fYXJlbmEgYXJlbmFfdG91Y2g7XG4rLyogcmF3IHZhbHVlIG9mIHRoZSBsYXN0IF9fYXJlbmEgY3R4IGFyZ3VtZW50LCBjYXB0dXJlZCBieSB0ZXN0X2FyZW5hX2NiICovXG4rdTY0IF9fYXJlbmEgY2JfcHRyX3ZhbDtcbitcbitTRUMoXCJzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmFcIilcbitpbnQgdGVzdF9hcmVuYV9jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcbit7XG4rXHR1NjQgX19hcmVuYSAqcHRyID0gKHU2NCBfX2FyZW5hICopY3R4WzBdO1xuK1xuK1x0YXJlbmFfdG91Y2grKztcbitcdGNiX3B0cl92YWwgPSBjdHhbMF07XG4rXHQqcHRyICs9IDE7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwic3RydWN0X29wcy90ZXN0X2FyZW5hX251bGxhYmxlXCIpXG4raW50IHRlc3RfYXJlbmFfbnVsbGFibGVfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXG4re1xuK1x0dTY0IF9fYXJlbmEgKnB0ciA9ICh1NjQgX19hcmVuYSAqKWN0eFswXTtcbitcbitcdGFyZW5hX3RvdWNoKys7XG4rXHRpZiAoIXB0cilcbitcdFx0cmV0dXJuIDB4YmVlO1xuK1x0KnB0ciArPSAxO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN0cnVjdF9vcHMvdGVzdF9hcmVuYV9zdGFja1wiKVxuK2ludCB0ZXN0X2FyZW5hX3N0YWNrX2NiKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KVxuK3tcbitcdHU2NCBfX2FyZW5hICpwdHIgPSAodTY0IF9fYXJlbmEgKiljdHhbOF07XG4rXG4rXHRhcmVuYV90b3VjaCsrO1xuK1x0LyogcGluIHRoZSBzbG90IGxheW91dDogdGhlIGxlYWRpbmcgYXJncyBmaWxsIGN0eFswXS4uY3R4WzddICovXG4rXHRpZiAoY3R4WzBdICE9IDEgfHwgY3R4WzddICE9IDgpXG4rXHRcdHJldHVybiAweGJhZDtcbitcdCpwdHIgKz0gMTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCIuc3RydWN0X29wcy5saW5rXCIpXG4rc3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYSA9IHtcbitcdC50ZXN0X2FyZW5hID0gKHZvaWQgKil0ZXN0X2FyZW5hX2NiLFxuK1x0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSAodm9pZCAqKXRlc3RfYXJlbmFfbnVsbGFibGVfY2IsXG4rXHQudGVzdF9hcmVuYV9zdGFjayA9ICh2b2lkICopdGVzdF9hcmVuYV9zdGFja19jYixcbit9O1xuK1xuK1NFQyhcInN5c2NhbGxcIilcbitpbnQgdHJpZ2dlcih2b2lkICpjdHgpXG4re1xuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuK1x0dTY0IF9fYXJlbmEgKnZhbDtcbitcdGludCByZXQ7XG4rXG4rXHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHQqdmFsID0gNDE7XG4rXHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSgodTY0ICopdmFsKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiAyO1xuK1x0aWYgKCp2YWwgIT0gNDIpXG4rXHRcdHJldHVybiAzO1xuK1xuK1x0LypcbitcdCAqIFRoZSBjYWxsYmFjayBtdXN0IGhhdmUgc2VlbiBleGFjdGx5ICh1MzIpKGthZGRyIC0ga2Vybl92bV9zdGFydCksXG4rXHQgKiB3aGljaCBpcyB0aGUgYXJlbmEgb2Zmc2V0IG9mIHZhbCB3aXRoIHRoZSB1cHBlciAzMiBiaXRzIGNsZWFyLlxuK1x0ICovXG4rXHRpZiAoY2JfcHRyX3ZhbCAhPSAodTMyKSh1NjQpdmFsKVxuK1x0XHRyZXR1cm4gNDtcbitcbitcdHJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKCh1NjQgKil2YWwpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIDU7XG4rXHRpZiAoKnZhbCAhPSA0MylcbitcdFx0cmV0dXJuIDY7XG4rXG4rXHQvKiBOVUxMIHN1cnZpdmVzIHRoZSBudWxsYWJsZSBrZnVuYyBhbmQgdGhlIHRyYW1wb2xpbmUgYXMgTlVMTCAqL1xuK1x0cmV0ID0gYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUoTlVMTCk7XG4rXHRpZiAocmV0ICE9IDB4YmVlKVxuK1x0XHRyZXR1cm4gNztcbitcbitcdC8qIHRoZSBhcmVuYSBwb2ludGVyIGlzIHN0YWNrLXBhc3NlZCBpbnRvIHRoZSB0cmFtcG9saW5lIGhlcmUgKi9cbitcdHJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKCh1NjQgKil2YWwpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIDg7XG4rXHRpZiAoKnZhbCAhPSA0NClcbitcdFx0cmV0dXJuIDk7XG4rXG4rXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XG4rI2VuZGlmXG4rXHRyZXR1cm4gMDtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMWMwZWM3MjdkNjM3NFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5jXG5AQCAtMCwwICsxLDIwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcIi4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFwiXG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuK1xuKy8qIE5vIGFyZW5hIGluIHRoZSBwcm9ncmFtOiBhdHRhY2hpbmcgdG8gdGVzdF9hcmVuYSBtdXN0IGJlIHJlamVjdGVkLiAqL1xuK1NFQyhcInN0cnVjdF9vcHMvdGVzdF9hcmVuYVwiKVxuK2ludCB0ZXN0X2FyZW5hX25vX2FyZW5hKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCIuc3RydWN0X29wcy5saW5rXCIpXG4rc3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYV9mYWlsID0ge1xuK1x0LnRlc3RfYXJlbmEgPSAodm9pZCAqKXRlc3RfYXJlbmFfbm9fYXJlbmEsXG4rfTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuaW5kZXggZWIwZjliNWUxOGQ4NS4uZmRlYWE1NjM1NmI1MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbkBAIC0yMzcsNiArMjM3LDU2IEBAIF9fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2NvbW1vbl90ZXN0KHZvaWQpXG4ge1xuIH1cbiBcbitfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KHU2NCAqdmFsX19hcmVuYSlcbit7XG4rXHR1NjQgb2xkO1xuK1xuK1x0b2xkID0gKnZhbF9fYXJlbmE7XG4rXHQqdmFsX19hcmVuYSA9IG9sZCArIDE7XG4rXHRyZXR1cm4gb2xkO1xuK31cbitcbitfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX251bGxhYmxlX2FyZ190ZXN0KHU2NCAqdmFsX19hcmVuYV9udWxsYWJsZSlcbit7XG4rXHR1NjQgb2xkO1xuK1xuK1x0aWYgKCF2YWxfX2FyZW5hX251bGxhYmxlKVxuK1x0XHRyZXR1cm4gMHhkZWFkYmVlZjtcbitcbitcdG9sZCA9ICp2YWxfX2FyZW5hX251bGxhYmxlO1xuK1x0KnZhbF9fYXJlbmFfbnVsbGFibGUgPSBvbGQgKyAxO1xuK1x0cmV0dXJuIG9sZDtcbit9XG4rXG4rX19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCh1NjQgKnZhbF9fYXJlbmEpXG4re1xuK1x0cmV0dXJuICh1NjQpdmFsX19hcmVuYTtcbit9XG4rXG4rX19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdCh1NjQgKnZhbF9fYXJlbmFfbnVsbGFibGUpXG4re1xuK1x0cmV0dXJuICh1NjQpdmFsX19hcmVuYV9udWxsYWJsZTtcbit9XG4rXG4rX19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KHU2NCAqYV9fYXJlbmEsIHU2NCAqYl9fYXJlbmEsXG4rXHRcdFx0XHRcdCAgIHU2NCAqY19fYXJlbmEsIHU2NCAqZF9fYXJlbmEsXG4rXHRcdFx0XHRcdCAgIHU2NCAqZV9fYXJlbmFfbnVsbGFibGUpXG4re1xuK1x0cmV0dXJuICphX19hcmVuYSArICpiX19hcmVuYSArICpjX19hcmVuYSArICpkX19hcmVuYSArXG4rXHQgICAgICAgKGVfX2FyZW5hX251bGxhYmxlID8gKmVfX2FyZW5hX251bGxhYmxlIDogMCk7XG4rfVxuK1xuK19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfc3RhY2tfYXJnX3Rlc3QodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsIHU2NCBlLFxuK1x0XHRcdFx0XHRcdHU2NCAqZl9fYXJlbmEpXG4re1xuK1x0cmV0dXJuIGEgKyBiICsgYyArIGQgKyBlICsgKmZfX2FyZW5hO1xuK31cbitcbitfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QodTY0ICphX19hcmVuYSwgdTY0ICpiX19hcmVuYV9udWxsYWJsZSlcbit7XG4rXHRyZXR1cm4gKmFfX2FyZW5hICsgKGJfX2FyZW5hX251bGxhYmxlID8gKmJfX2FyZW5hX251bGxhYmxlIDogMCk7XG4rfVxuK1xuIF9fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2R5bnB0cl90ZXN0KHN0cnVjdCBicGZfZHlucHRyICpwdHIsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGJwZl9keW5wdHIgKnB0cl9fbnVsbGFibGUpXG4ge1xuQEAgLTM0Nyw5ICszOTcsMjkgQEAgc3RhdGljIGludCBicGZfdGVzdG1vZF90ZXN0XzQodm9pZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmEodTY0ICpwdHJfX2FyZW5hKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbnVsbGFibGUodTY0ICpwdHJfX2FyZW5hX251bGxhYmxlKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2sodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsXG4rXHRcdFx0XHRcdCAgICAgIHU2NCBlLCB1NjQgZiwgdTY0IGcsIHU2NCBoLFxuK1x0XHRcdFx0XHQgICAgICB1NjQgKnB0cl9fYXJlbmEpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyBfX2JwZl90ZXN0bW9kX29wczMgPSB7XG4gXHQudGVzdF8xID0gYnBmX3Rlc3Rtb2RfdGVzdF8zLFxuIFx0LnRlc3RfMiA9IGJwZl90ZXN0bW9kX3Rlc3RfNCxcbitcdC50ZXN0X2FyZW5hID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYSxcbitcdC50ZXN0X2FyZW5hX251bGxhYmxlID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9udWxsYWJsZSxcbitcdC50ZXN0X2FyZW5hX3N0YWNrID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9zdGFjayxcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X29wczModm9pZClcbkBAIC0zNjgsNiArNDM4LDIxIEBAIF9fYnBmX2tmdW5jIHZvaWQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMih2b2lkKVxuIFx0c3Rfb3BzMy1cdTAwM2V0ZXN0XzIoKTtcbiB9XG4gXG4rX19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKHU2NCAqcHRyX19hcmVuYSlcbit7XG4rXHRyZXR1cm4gc3Rfb3BzMy1cdTAwM2V0ZXN0X2FyZW5hKHB0cl9fYXJlbmEpO1xuK31cbitcbitfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUodTY0ICpwdHJfX2FyZW5hX251bGxhYmxlKVxuK3tcbitcdHJldHVybiBzdF9vcHMzLVx1MDAzZXRlc3RfYXJlbmFfbnVsbGFibGUocHRyX19hcmVuYV9udWxsYWJsZSk7XG4rfVxuK1xuK19fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayh1NjQgKnB0cl9fYXJlbmEpXG4re1xuK1x0cmV0dXJuIHN0X29wczMtXHUwMDNldGVzdF9hcmVuYV9zdGFjaygxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCBwdHJfX2FyZW5hKTtcbit9XG4rXG4gc3RydWN0IGJwZl90ZXN0bW9kX2J0Zl90eXBlX3RhZ18xIHtcbiBcdGludCBhO1xuIH07XG5AQCAtNzU1LDYgKzg0MCwxMyBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfdGVzdG1vZF9zZXFfbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxX2Rlc3Ryb3ksIEtGX0lURVJfREVTVFJPWSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfdGVzdG1vZF9zZXFfdmFsdWUpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jb21tb25fdGVzdClcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdClcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdClcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX3N0YWNrX2FyZ190ZXN0KVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdClcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9tZW1fbGVuX3Bhc3MxKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfZHlucHRyX3Rlc3QpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19uZXN0ZWRfYWNxdWlyZV9ub256ZXJvX29mZnNldF90ZXN0LCBLRl9BQ1FVSVJFKVxuQEAgLTc3MCw2ICs4NjIsOSBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2RfY3R4X2NyZWF0ZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9jdHhfcmVsZWFzZSwgS0ZfUkVMRUFTRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMilcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaylcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2dldF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7XG4gQlRGX0tGVU5DU19FTkQoYnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX2lkcylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFxuaW5kZXggODYzZmQxMGYxNjE5OS4uMzNmMmFmNWI3MDg1NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbkBAIC0xMDYsNiArMTA2LDEyIEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMyIHtcbiBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB7XG4gXHRpbnQgKCp0ZXN0XzEpKHZvaWQpO1xuIFx0aW50ICgqdGVzdF8yKSh2b2lkKTtcbitcdC8qIFVzZWQgdG8gdGVzdCBhcmVuYSBwb2ludGVyIGFyZ3VtZW50cy4gKi9cbitcdGludCAoKnRlc3RfYXJlbmEpKHU2NCAqcHRyKTtcbitcdGludCAoKnRlc3RfYXJlbmFfbnVsbGFibGUpKHU2NCAqcHRyKTtcbitcdC8qIGVub3VnaCBsZWFkaW5nIGFyZ3MgdG8gZm9yY2UgQHB0ciBvbnRvIHRoZSBzdGFjayBvbiB4ODYgYW5kIGFybTY0ICovXG4rXHRpbnQgKCp0ZXN0X2FyZW5hX3N0YWNrKSh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCwgdTY0IGUsIHU2NCBmLFxuK1x0XHRcdFx0dTY0IGcsIHU2NCBoLCB1NjQgKnB0cik7XG4gfTtcbiBcbiBzdHJ1Y3Qgc3Rfb3BzX2FyZ3Mge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG5pbmRleCBjMzZiYjkxMWRlZmE3Li4xYTcyZDBmZGE1M2M0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxuQEAgLTk4LDYgKzk4LDE2IEBAIHZvaWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZWxlYXNlKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwKSBfX2tzeW07XG4gdm9pZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JlZihzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyAqcCkgX19rc3ltO1xuIFxuIHZvaWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9tZW1fbGVuX3Bhc3MxKHZvaWQgKm1lbSwgaW50IGxlbikgX19rc3ltO1xuK19fdTY0IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdChfX3U2NCAqdmFsX19hcmVuYSkgX19rc3ltO1xuK19fdTY0IGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdChfX3U2NCAqdmFsX19hcmVuYV9udWxsYWJsZSkgX19rc3ltO1xuK19fdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdChfX3U2NCAqdmFsX19hcmVuYSkgX19rc3ltO1xuK19fdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdChfX3U2NCAqdmFsX19hcmVuYV9udWxsYWJsZSkgX19rc3ltO1xuK19fdTY0IGJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KF9fdTY0ICphX19hcmVuYSwgX191NjQgKmJfX2FyZW5hLFxuK1x0XHRcdFx0IF9fdTY0ICpjX19hcmVuYSwgX191NjQgKmRfX2FyZW5hLFxuK1x0XHRcdFx0IF9fdTY0ICplX19hcmVuYV9udWxsYWJsZSkgX19rc3ltO1xuK19fdTY0IGJwZl9rZnVuY19hcmVuYV9zdGFja19hcmdfdGVzdChfX3U2NCBhLCBfX3U2NCBiLCBfX3U2NCBjLCBfX3U2NCBkLCBfX3U2NCBlLFxuK1x0XHRcdFx0ICAgICBfX3U2NCAqZl9fYXJlbmEpIF9fa3N5bTtcbitfX3U2NCBicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdChfX3U2NCAqYV9fYXJlbmEsIF9fdTY0ICpiX19hcmVuYV9udWxsYWJsZSkgX19rc3ltO1xuIGludCAqYnBmX2tmdW5jX2NhbGxfdGVzdF9nZXRfcmR3cl9tZW0oc3RydWN0IHByb2dfdGVzdF9yZWZfa2Z1bmMgKnAsIGNvbnN0IGludCByZHdyX2J1Zl9zaXplKSBfX2tzeW07XG4gaW50ICpicGZfa2Z1bmNfY2FsbF90ZXN0X2dldF9yZG9ubHlfbWVtKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwLCBjb25zdCBpbnQgcmRvbmx5X2J1Zl9zaXplKSBfX2tzeW07XG4gaW50ICpicGZfa2Z1bmNfY2FsbF90ZXN0X2FjcV9yZG9ubHlfbWVtKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwLCBjb25zdCBpbnQgcmRvbmx5X2J1Zl9zaXplKSBfX2tzeW07XG5AQCAtMTExLDYgKzEyMSw5IEBAIHUzMiBicGZfa2Z1bmNfY2FsbF90ZXN0X3N0YXRpY191bnVzZWRfYXJnKHUzMiBhcmcsIHUzMiB1bnVzZWQpIF9fa3N5bTtcbiAjZW5kaWZcbiBcbiB2b2lkIGJwZl90ZXN0bW9kX3Rlc3RfbW9kX2tmdW5jKGludCBpKSBfX2tzeW07XG4raW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07XG4raW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKF9fdTY0ICpwdHJfX2FyZW5hX251bGxhYmxlKSBfX2tzeW07XG4raW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07XG4gXG4gX191NjQgYnBmX2tmdW5jX2NhbGxfdGVzdDEoc3RydWN0IHNvY2sgKnNrLCBfX3UzMiBhLCBfX3U2NCBiLFxuIFx0XHRcdFx0X191MzIgYywgX191NjQgZCkgX19rc3ltO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTY6MTM6MDkuMTM1OTQ0NDY0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxNjQ4MDE3NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIEFyZW5hIFBvaW50ZXIgSW1wbGVtZW50YXRpb24gLSBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgaW50cm9kdWNpbmcgYF9fYXJlbmFgIGFuZCBgX19hcmVuYV9udWxsYWJsZWAgYW5ub3RhdGlvbnMgZm9yIEJQRiBrZnVuYyBhbmQgc3RydWN0X29wcyBhcmd1bWVudHMuIFNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgaW1wYWN0aW5nIHRoZSBCUEYgdmVyaWZpZXIsIEpJVCBjb21waWxlciwgYW5kIHRyYW1wb2xpbmUgbG9naWMuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24sIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHNlY3VyaXR5IGltcGxpY2F0aW9ucy5cblxuVGhlIHBhdGNoIHRvdWNoZXMgYSBidW5jaCBvZiBmaWxlczogYERvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RgLCBzb21lIEpJVCBjb21waWxhdGlvbiBjb2RlIChgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCksIHZhcmlvdXMgaW5jbHVkZSBmaWxlcyAoYGluY2x1ZGUvbGludXgvYnBmLmhgLCBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGApLCBhbmQgYSBidW5jaCBvZiBjb3JlIEJQRiBjb2RlIChga2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jYCwgYGtlcm5lbC9icGYvYnRmLmNgLCBga2VybmVsL2JwZi9jb3JlLmNgLCBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgLCBga2VybmVsL2JwZi92ZXJpZmllci5jYCksIGFuZCBzb21lIHNlbGZ0ZXN0cy5cblxuQWxyaWdodCwgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBhcmVhcyBvZiBpbnRlcmVzdCwgdGhlIGZvY3VzIHN5bWJvbHMuIExvb2tzIGxpa2UgaXQncyBpbnRyb2R1Y2luZyB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zOiBgZW1pdF9rZnVuY19hcmVuYV9hcmdzYCwgYGVtaXRfYXJlbmFfYXJnX2NvbnZgLCBgc2F2ZV9hcmdzYCwgYW5kIG1vZGlmeWluZyBmdW5jdGlvbnMgbGlrZSBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYCwgYHByZXBhcmVfYXJnX2luZm9gLCBhcyB3ZWxsIGFzIGBidGZfY3R4X2FjY2Vzc2AsIGBfX2dldF9hcmdfZm1vZGVsX2ZsYWdzYCwgYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gLCBgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc2AsIGBicGZfdHJhbXBvbGluZV91cGRhdGVgLCBgZ2V0X2tmdW5jX2FyZ190eXBlYCwgYGNoZWNrX2tmdW5jX2FyZ3NgLCBhbmQgYGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkYC5cblxuSSBuZWVkIHRvIG5hcnJvdyB0aGlzIGRvd24gdG8gdGhlIG1vc3QgY3JpdGljYWwgc3ltYm9scy4gSSdtIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IHdpdGggYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCwgYGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NgLCBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYCwgYGJ0Zl9jdHhfYWNjZXNzYCwgYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gLCBgZ2V0X2tmdW5jX2FyZ190eXBlYCwgYGNoZWNrX2tmdW5jX2FyZ3NgLCBhbmQgYGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkYC4gTGV0IG1lIHJlLWV2YWx1YXRlLCBzaW5jZSBJIHN1c3BlY3Qgc29tZSBvZiB0aGUgZm9jdXMgc3ltYm9scyBhcmUgb25seSBjYWxsZWQgaW4gYSBuYXJyb3cgc2V0IG9mIGNpcmN1bXN0YW5jZXMsIHN1Y2ggYXMgd2hlbiBwcmVwYXJpbmcgYSB0cmFtcG9saW5lLCB3aGljaCBJIHRoaW5rIG1lYW5zIEkgY2FuIHB1c2ggYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCB0byB0aGUgbG93ZXIgcHJpb3JpdHkgbGlzdC5cblxuYGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NgLCBvbiB0aGUgb3RoZXIgaGFuZCwgc2VlbXMgbGlrZSBhIGdvb2QgdGFyZ2V0LiBgYnRmX2N0eF9hY2Nlc3NgLCBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2AsIGBnZXRfa2Z1bmNfYXJnX3R5cGVgLCBgY2hlY2tfa2Z1bmNfYXJnc2AsIGFuZCBgY2hlY2tfc3RydWN0X29wc19idGZfaWRgIGFyZSBhbGwgY2FsbGVkIGR1cmluZyB2ZXJpZmljYXRpb24sIHdoaWNoIG1lYW5zIHRoZXkncmUgYWxzbyBpbnRlcmVzdGluZy5cblxuTm93LCBiZWZvcmUgSSBkaWcgdG9vIGRlZXAsIGxldCdzIGNvbnNpZGVyIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gU2luY2UgdGhpcyBpcyBpbiB0aGUgQlBGIGNvcmUsIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgZ2l2ZW4uIEkgc2hvdWxkIHByb2JhYmx5IGdyZXAgZm9yIGFueSBleHBsaWNpdCBgQ09ORklHX0JQRl9BUkVOQWAgb3B0aW9ucyBvciBzaW1pbGFyLCBqdXN0IGluIGNhc2UgdGhlcmUncyBhIGNvbmZpZ3VyYXRpb24gZ2F0ZS4gSSB3aWxsIGNvbmZpcm0gdG8gYXZvaWQgd2FzdGluZyB0aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzA0OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE2OjEzOjIxLjMwMDc0OTIzNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTgyMzkyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfQlBGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz01OD1jb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy02NC1cXG5rZXJuZWwvYnBmL0tjb25maWc6NjU6XFx0ICBXaGVuIENPTkZJR19CUEZfSklUX0FMV0FZU19PTiBpcyBlbmFibGVkLCAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcXG5rZXJuZWwvYnBmL0tjb25maWctNjYtXFx0ICBpcyBwZXJtYW5lbnRseSBzZXQgdG8gMSBhbmQgc2V0dGluZyBhbnkgb3RoZXIgdmFsdWUgdGhhbiB0aGF0IHdpbGxcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9Mj1vYmoteSA6PSBjb3JlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM6aWZuZXEgKCQoQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGUtNC0jIF9fX2JwZl9wcm9nX3J1bigpIG5lZWRzIEdDU0UgZGlzYWJsZWQgb24geDg2OyBzZWUgMzE5M2MwODM2ZjIwMyBmb3IgZGV0YWlsc1xcbi0tXFxua2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gKz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXFxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNTpvYmotJHtDT05GSUdfQlBGX0xTTX1cXHQgICs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZGlzYXNtLm8gbXByb2cub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTktaWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYXJlbmEubyByYW5nZV90cmVlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZToyMjpvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gZGlzcGF0Y2hlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yMy1pZmVxICgkKENPTkZJR19ORVQpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRldm1hcC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNwdW1hcC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IG9mZmxvYWQub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBuZXRfbmFtZXNwYWNlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gdGN4Lm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTI5LWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZT0zMD1pZmVxICgkKENPTkZJR19QRVJGX0VWRU5UUykseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjMxOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3RhY2ttYXAub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMzItZW5kaWZcXG5rZXJuZWwvYnBmL01ha2VmaWxlPTMzPWlmZXEgKCQoQ09ORklHX0NHUk9VUFMpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNncm91cF9pdGVyLm8gYnBmX2NncnBfc3RvcmFnZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0zNS1lbmRpZlxcbi0tXFxua2VybmVsL2JwZi9NYWtlZmlsZT0zNz1pZmVxICgkKENPTkZJR19JTkVUKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6Mzg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSByZXVzZXBvcnRfYXJyYXkub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMzktZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9NDI9ZW5kaWZcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQzOmlmZXEgKCQoQ09ORklHX0JQRl9KSVQpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9zdHJ1Y3Rfb3BzLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3B1bWFzay5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS00Ni0jIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGUtNTUtIyBzZW1hbnRpY3Mgd2l0aGluIHBhaG9sZSBhcmUgcmV2aXNpdGVkIGFjY29yZGluZ2x5Llxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NTY6b2JqLSR7Q09ORklHX0JQRl9MU019ICs9IGJwZl9sc21fcHJvdG8ubyBicGZfbHNtLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTU3LWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZT01OD1pZm5lcSAoJChDT05GSUdfQ1JZUFRPKSwpXFxua2VybmVsL2JwZi9NYWtlZmlsZTo1OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNyeXB0by5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS02MC1lbmRpZlxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NjE6b2JqLSQoQ09ORklHX0JQRl9QUkVMT0FEKSArPSBwcmVsb2FkL1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNjItXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2MzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHJlbG9fY29yZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zl9pdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnRmX3JlbG9jYXRlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0ga21lbV9jYWNoZV9pdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTY3LWlmZXEgKCQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6Njg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkbWFidWZfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS02OS1lbmRpZlxcbi0tXFxua2VybmVsL2JwZi9idGYuYz05ODM0PWJvb2wgYnRmX3R5cGVfaWRzX25vY2FzdF9hbGlhcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy05ODg4LVxcbmtlcm5lbC9icGYvYnRmLmM6OTg4OTojaWZkZWYgQ09ORklHX0JQRl9KSVRcXG5rZXJuZWwvYnBmL2J0Zi5jLTk4OTAtc3RhdGljIGludFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz01Mj12b2lkIF9faW5pdCBjZ3JvdXBfYnBmX2xpZmV0aW1lX25vdGlmaWVyX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtNTctXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo1ODojaWZkZWYgQ09ORklHX0JQRl9MU01cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTU5LXN0cnVjdCBjZ3JvdXBfbHNtX2F0eXBlIHtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTYyPXVuc2lnbmVkIGludCBfX2Nncm91cF9icGZfcnVuX2xzbV9jdXJyZW50KGNvbnN0IHZvaWQgKmN0eCxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTgwLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTgxOiNpZmRlZiBDT05GSUdfQlBGX0xTTVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTgyLXN0YXRpYyBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGVcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MjM0PWJwZl9jZ3JvdXBfYXR5cGVfZmluZChlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSwgdTMyIGF0dGFjaF9idGZfaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTIzOS19XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNDA6I2VuZGlmIC8qIENPTkZJR19CUEZfTFNNICovXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNDEtXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0xMDA9c3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19hbGxvY19ub19zdGF0cyh1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX2V4dHJhX2ZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMTI4LVxcdGZwLVxcdTAwM2VqaXRfcmVxdWVzdGVkID0gZWJwZl9qaXRfZW5hYmxlZCgpO1xcbmtlcm5lbC9icGYvY29yZS5jOjEyOTpcXHRmcC1cXHUwMDNlaml0X3JlcXVpcmVkID0gSVNfRU5BQkxFRChDT05GSUdfQlBGX0pJVF9BTFdBWVNfT04pO1xcbmtlcm5lbC9icGYvY29yZS5jLTEzMC1cXHRmcC1cXHUwMDNlYmxpbmRpbmdfcmVxdWVzdGVkID0gYnBmX2ppdF9ibGluZGluZ19lbmFibGVkKGZwKTtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTE0My1cXG5rZXJuZWwvYnBmL2NvcmUuYzoxNDQ6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTE0NS1cXHRicGZfcHJvZ19zdHJlYW1faW5pdChmcCk7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz01NDE9dm9pZCBicGZfcHJvZ19rYWxsc3ltc19kZWxfYWxsKHN0cnVjdCBicGZfcHJvZyAqZnApXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy01NDYtXFxua2VybmVsL2JwZi9jb3JlLmM6NTQ3OiNpZmRlZiBDT05GSUdfQlBGX0pJVFxcbmtlcm5lbC9icGYvY29yZS5jLTU0OC0vKiBBbGwgQlBGIEpJVCBzeXNjdGwga25vYnMgaGVyZS4gKi9cXG5rZXJuZWwvYnBmL2NvcmUuYzo1NDk6aW50IGJwZl9qaXRfZW5hYmxlICAgX19yZWFkX21vc3RseSA9IElTX0JVSUxUSU4oQ09ORklHX0JQRl9KSVRfREVGQVVMVF9PTik7XFxua2VybmVsL2JwZi9jb3JlLmM6NTUwOmludCBicGZfaml0X2thbGxzeW1zIF9fcmVhZF9tb3N0bHkgPSBJU19CVUlMVElOKENPTkZJR19CUEZfSklUX0RFRkFVTFRfT04pO1xcbmtlcm5lbC9icGYvY29yZS5jLTU1MS1pbnQgYnBmX2ppdF9oYXJkZW4gICBfX3JlYWRfbW9zdGx5O1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MTY1NT11MTYgYnBmX291dF9zdGFja19hcmdfY250KGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTE2NjMtfVxcbmtlcm5lbC9icGYvY29yZS5jOjE2NjQ6I2VuZGlmIC8qIENPTkZJR19CUEZfSklUICovXFxua2VybmVsL2JwZi9jb3JlLmMtMTY2NS1cXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTE4MjM9Ym9vbCBicGZfb3Bjb2RlX2luX2luc250YWJsZSh1OCBjb2RlKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMTg0NS1cXG5rZXJuZWwvYnBmL2NvcmUuYzoxODQ2OiNpZm5kZWYgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OXFxua2VybmVsL2JwZi9jb3JlLmMtMTg0Ny0vKiBBYnNvbHV0ZSB2YWx1ZSBvZiBzMzIgd2l0aG91dCB1bmRlZmluZWQgYmVoYXZpb3IgZm9yIFMzMl9NSU4gKi9cXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTI0NzM9RVZBTDQoUFJPR19OQU1FX0xJU1QsIDQxNiwgNDQ4LCA0ODAsIDUxMilcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTI0NzYtXFxua2VybmVsL2JwZi9jb3JlLmM6MjQ3NzojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9jb3JlLmMtMjQ3OC1pbnQgYnBmX3BhdGNoX2NhbGxfYXJncyhzdHJ1Y3QgYnBmX2luc24gKmluc24sIHUzMiBzdGFja19kZXB0aClcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTI2MTA9c3RhdGljIGJvb2wgYnBmX3Byb2dfc2VsZWN0X2ludGVycHJldGVyKHN0cnVjdCBicGZfcHJvZyAqZnApXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjEyLVxcdGJvb2wgc2VsZWN0X2ludGVycHJldGVyID0gZmFsc2U7XFxua2VybmVsL2JwZi9jb3JlLmM6MjYxMzojaWZuZGVmIENPTkZJR19CUEZfSklUX0FMV0FZU19PTlxcbmtlcm5lbC9icGYvY29yZS5jLTI2MTQtXFx0dTMyIHN0YWNrX2RlcHRoID0gbWF4X3QodTMyLCBmcC1cXHUwMDNlYXV4LVxcdTAwM2VzdGFja19kZXB0aCwgMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yNjMzPXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjM0LXtcXG5rZXJuZWwvYnBmL2NvcmUuYzoyNjM1OiNpZmRlZiBDT05GSUdfQlBGX0pJVFxcbmtlcm5lbC9icGYvY29yZS5jLTI2MzYtXFx0c3RydWN0IGJwZl9wcm9nICpvcmlnX3Byb2c7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zMDU3PXZvaWQgX19icGZfZnJlZV91c2VkX2J0ZnMoc3RydWN0IGJ0Zl9tb2RfcGFpciAqdXNlZF9idGZzLCB1MzIgbGVuKVxcbmtlcm5lbC9icGYvY29yZS5jLTMwNTgte1xcbmtlcm5lbC9icGYvY29yZS5jOjMwNTk6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTMwNjAtXFx0c3RydWN0IGJ0Zl9tb2RfcGFpciAqYnRmX21vZDtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTMwNzg9c3RhdGljIHZvaWQgYnBmX3Byb2dfZnJlZV9kZWZlcnJlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDgzLVxcdGF1eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4LCB3b3JrKTtcXG5rZXJuZWwvYnBmL2NvcmUuYzozMDg0OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDg1LVxcdGJwZl9mcmVlX2tmdW5jX2J0Zl90YWIoYXV4LVxcdTAwM2VrZnVuY19idGZfdGFiKTtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTM0MDU9c3RhdGljIG5vaW5saW5lIHZvaWQgYnBmX3Byb2dfcmVwb3J0X21heV9nb3RvX3Zpb2xhdGlvbih2b2lkKVxcbmtlcm5lbC9icGYvY29yZS5jLTM0MDYte1xcbmtlcm5lbC9icGYvY29yZS5jOjM0MDc6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTM0MDgtXFx0c3RydWN0IGJwZl9zdHJlYW1fc3RhZ2Ugc3M7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zNDQ1PV9fd2VhayB1NjQgYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMzQ0OS1cXG5rZXJuZWwvYnBmL2NvcmUuYzozNDUwOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDUxLV9fd2VhayBib29sIGJwZl9hcmVuYV9oYW5kbGVfcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgaXNfd3JpdGUsXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zNDc2PUVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwoeGRwX2J1bGtfdHgpO1xcbmtlcm5lbC9icGYvY29yZS5jLTM0NzctXFxua2VybmVsL2JwZi9jb3JlLmM6MzQ3ODojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9jb3JlLmMtMzQ3OS1cXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MTI3PXN0YXRpYyBpbnQgYWRkX2tmdW5jX2luX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE0MS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE0MjojaWZuZGVmIENPTkZJR19CUEZfSklUX0FMV0FZU19PTlxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTQzLXN0YXRpYyBpbnQgZ2V0X2NhbGxlZV9zdGFja19kZXB0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz0xMzc2PWludCBicGZfZml4dXBfY2FsbF9hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi9maXh1cHMuYy0xMzc3LXtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjEzNzg6I2lmbmRlZiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEzNzktXFx0c3RydWN0IGJwZl9wcm9nICpwcm9nID0gZW52LVxcdTAwM2Vwcm9nO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNDA0LVxcdH1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE0MDU6I2lmbmRlZiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE0MDYtXFx0aWYgKHByb2ctXFx1MDAzZWppdF9yZXF1aXJlZCkge1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9Mjc2PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X2N1cnJlbnRfY29tbV9wcm90byA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI4My1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyODQ6I2lmIGRlZmluZWQoQ09ORklHX1FVRVVFRF9TUElOTE9DS1MpIHx8IGRlZmluZWQoQ09ORklHX0JQRl9BUkNIX1NQSU5MT0NLKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI4NS1cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTQ4NTA9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90aHJvdylcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODUxOiNpZmRlZiBDT05GSUdfQlBGX0VWRU5UU1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4NTItQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zZW5kX3NpZ25hbF90YXNrKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDkzMD1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2xvY2FsX2lycV9yZXN0b3JlKVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5MzE6I2lmZGVmIENPTkZJR19CUEZfRVZFTlRTXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDkzMi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3Byb2JlX3JlYWRfdXNlcl9keW5wdHIpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00OTYxPUJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RybmNhc2VzdHIpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5NjI6I2lmIGRlZmluZWQoQ09ORklHX0JQRl9MU00pIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0NHUk9VUFMpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk2My1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2Nncm91cF9yZWFkX3hhdHRyLCBLRl9SQ1UpXFxuLS1cXG5rZXJuZWwvYnBmL3ByZWxvYWQvTWFrZWZpbGU9Mz1MSUJCUEZfSU5DTFVERSA9ICQoc3JjdHJlZSkvdG9vbHMvbGliXFxua2VybmVsL2JwZi9wcmVsb2FkL01ha2VmaWxlLTQtXFxua2VybmVsL2JwZi9wcmVsb2FkL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0JQRl9QUkVMT0FEX1VNRCkgKz0gYnBmX3ByZWxvYWQub1xcbmtlcm5lbC9icGYvcHJlbG9hZC9NYWtlZmlsZS02LUNGTEFHU19icGZfcHJlbG9hZF9rZXJuLm8gKz0gLUkkKExJQkJQRl9JTkNMVURFKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9Njg9aW50IHN5c2N0bF91bnByaXZpbGVnZWRfYnBmX2Rpc2FibGVkIF9fcmVhZF9tb3N0bHkgPVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY5OlxcdElTX0JVSUxUSU4oQ09ORklHX0JQRl9VTlBSSVZfREVGQVVMVF9PRkYpID8gMiA6IDA7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNzAtXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02NTE4PWludCBrZXJuX3N5c19icGYoaW50IGNtZCwgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjUyMy1cXHRzd2l0Y2ggKGNtZCkge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY1MjQ6I2lmZGVmIENPTkZJR19CUEZfSklUIC8qIF9fYnBmX3Byb2dfZW50ZXJfc2xlZXBhYmxlIHVzZWQgYnkgdHJhbXBvbGluZSBhbmQgSklUICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjUyNS1cXHRjYXNlIEJQRl9QUk9HX1RFU1RfUlVOOlxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTA1ND1pbnQgYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTA2NS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDY2OiNpZiBkZWZpbmVkKENPTkZJR19DR1JPVVBfQlBGKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19CUEZfTFNNKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwNjctc3RhdGljIHZvaWQgYnBmX3NoaW1fdHJhbXBfbGlua19yZWxlYXNlKHN0cnVjdCBicGZfbGluayAqbGluaylcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1NDE9aW50IF9fd2VhayBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTQ4LSAgICBkZWZpbmVkKENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUykgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1NDk6ICAgIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NTAtXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzg2PWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE4MjMtXFx0ICBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxODI0OlxcdCAgQ09ORklHX0JQRl9TWVNDQUxMICovXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTgyNS1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00NDY0PUJURl9JRChzdHJ1Y3QsIGNncm91cClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDQ2NS0jZW5kaWZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDQ2NjojaWZkZWYgQ09ORklHX0JQRl9KSVRcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDQ2Ny1CVEZfSUQoc3RydWN0LCBicGZfY3B1bWFzaylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTI3Mj1CVEZfSURfVU5VU0VEXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjczLSNlbmRpZlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTI3NDojaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyNzUtQlRGX0lEKGZ1bmMsIGJwZl9zZXNzaW9uX2Nvb2tpZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTI4ND1CVEZfSUQoZnVuYywgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3kpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjg1OiNpZmRlZiBDT05GSUdfQlBGX0xTTVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTI4Ni1CVEZfSUQoZnVuYywgYnBmX3NldF9kZW50cnlfeGF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEzMDM9QlRGX0lEKGZ1bmMsIGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTMwNDojaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzMDUtQlRGX0lEKGZ1bmMsIGJwZl9zZXNzaW9uX2lzX3JldHVybilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTY6MTM6MjEuMzUyNTgwMDkxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIyNzUyODU1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBBcmVuYSBLRnVuYyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgX19hcmVuYWAgYW5kIGBfX2FyZW5hX251bGxhYmxlYCBzdXBwb3J0LCB3aGljaCBpcyBnb29kLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSB0ZXN0aW5nIHN0cmF0ZWd5IHRoZXkndmUgdXNlZC4gSSBzZWUgdGhlIHRlc3RzIGFyZSBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfa2Z1bmMuY2AsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9rZnVuY19qaXQuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNgLiBHb29kLCB0aGV5J3JlIGNvbXByZWhlbnNpdmUuIFRoZXkgYXJlIHJlbHlpbmcgb24gYGJwZl90ZXN0bW9kYCBhcyBleHBlY3RlZC5cblxuSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgYnVpbGQgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYWNlIHRvIHJ1biB0aGVzZSB0ZXN0cy4gSSBhbHJlYWR5IGtub3cgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfQlBGX0pJVGAgYXJlIHJlcXVpcmVkLiBJIHZhZ3VlbHkgcmVjYWxsIHRoZXJlIGJlaW5nIGVkZ2UgY2FzZXMgd2hlcmUgYENPTkZJR19CUEZfRVZFTlRTYCBtaWdodCBiZSBuZWVkZWQsIGJ1dCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0aGUgY3JpdGljYWwgb25lLiBJIG5lZWQgYENPTkZJR19CUEZfSklUYCBmb3IgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AsIHRoYXQncyBvYnZpb3VzLiBBbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgbmVlZGVkIGZvciBgYXJlbmEub2AuXG5cbk5vdywgSSBzaG91bGQgcXVpY2tseSBjaGVjayBpZiBgYnBmX3Rlc3Rtb2RgIGl0c2VsZiBoYXMgYW55IHNwZWNpZmljIGRlcGVuZGVuY2llcyBvciBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIHRyaXAgbWUgdXAuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgdG8gYmUgc3VyZS4gQnV0IHdhaXQsIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX0JQRl9KSVRgIHNlZW0gcHJldHR5IHN0YW5kYXJkOyBJJ2xsIGNoZWNrIGBrZXJuZWwvYnBmL0tjb25maWdgIGZvciB0aGUgc3BlY2lmaWMgb3B0aW9ucy4gTGV0J3MgbWFrZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTkzOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNjoxMzoyOC41ODAxMTE2ODVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwMzUxMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cXG5rZXJuZWwvYnBmL0tjb25maWc6NDI6Y29uZmlnIEJQRl9KSVRcXG5rZXJuZWwvYnBmL0tjb25maWctNDMtXFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNTctXFxua2VybmVsL2JwZi9LY29uZmlnOjU4OmNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxcbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cXHRib29sIFxcXCJQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxcbmtlcm5lbC9icGYvS2NvbmZpZy03MC1cXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNzItXFxua2VybmVsL2JwZi9LY29uZmlnOjczOmNvbmZpZyBCUEZfVU5QUklWX0RFRkFVTFRfT0ZGXFxua2VybmVsL2JwZi9LY29uZmlnLTc0LVxcdGJvb2wgXFxcIkRpc2FibGUgdW5wcml2aWxlZ2VkIEJQRiBieSBkZWZhdWx0XFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnPTkwPXNvdXJjZSBcXFwia2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTkxLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo5Mjpjb25maWcgQlBGX0xTTVxcbmtlcm5lbC9icGYvS2NvbmZpZy05My1cXHRib29sIFxcXCJFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE2OjEzOjI4LjYyOTE1MjczMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0OTQ2ODUxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGhhbmRmdWwgb2YgbmV3IGZ1bmN0aW9uczogYGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NgLCBgZW1pdF9rZnVuY19hcmVuYV9hcmdzYCwgYGVtaXRfYXJlbmFfYXJnX2NvbnZgLCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYCwgYW5kIGBfX2dldF9hcmdfZm1vZGVsX2ZsYWdzYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyB0aGVzZSBuZXcgY29tcG9uZW50cyBhcmUgaW50ZWdyYXRlZCwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBjb3JlIEJQRiBpbmZyYXN0cnVjdHVyZS4gVGhlIHByZXNlbmNlIG9mIGZ1bmN0aW9ucyBsaWtlIGBhcmVuYV9hcmdzYCBzdWdnZXN0cyBjaGFuZ2VzIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgSklUIGVudmlyb25tZW50LCB3aGljaCBpcyBhbHdheXMgaW50ZXJlc3RpbmcuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLCBzdGFydGluZyB3aXRoIHZlcmlmeWluZyB2aXNpYmlsaXR5IG9mIHRoZSBzeW1ib2xzLiBGaXJzdCwgbGV0J3MgY29uZmlybSB0aGUgbG9jYXRpb25zIG9mIHRoZSBcImZvY3VzIHN5bWJvbHNcIiB0aGUgcGF0Y2ggaGlnaGxpZ2h0czogYGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NgLCBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYCwgYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gLCBgYnRmX2N0eF9hY2Nlc3NgLCBgZ2V0X2tmdW5jX2FyZ190eXBlYCwgYGNoZWNrX2tmdW5jX2FyZ3NgLCBhbmQgYGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkYC5cblxuYGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQgZnJvbSBgaW5jbHVkZS9saW51eC9icGYuaGAgYW5kIGltcGxlbWVudGVkIGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgYW5kIHNvIGlzIG5vbiBzdGF0aWMsIHNvIHRoYXQncyBnb29kLiBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYCBpcyBhbHNvIHdpdGhpbiBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgLCBhcyBleHBlY3RlZC4gYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gIGFuZCBgYnRmX2N0eF9hY2Nlc3NgIGFyZSBsb2NhdGVkIGluIGBrZXJuZWwvYnBmL2J0Zi5jYC4gQW5kIGBnZXRfa2Z1bmNfYXJnX3R5cGVgIGFuZCBgY2hlY2tfa2Z1bmNfYXJnc2AgYXJlIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFuZCBgY2hlY2tfc3RydWN0X29wc19idGZfaWRgIGlzIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLlxuXG5BaGEhIGBnZXRfa2Z1bmNfYXJnX3R5cGVgIGFuZCBgY2hlY2tfa2Z1bmNfYXJnc2AgYXJlICpzdGF0aWMqIHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBjaGFuZ2VzIGludm9sdmluZyBmdW5jdGlvbnMgdGhhdCBkZWFsIHdpdGggdGhlIHZlcmlmaWVyLCBidXQgaXQncyBub3QgZXhwb3NpbmcgbmV3IGV4dGVybmFsbHkgY2FsbGFibGUgdmVyaWZpZXIgZnVuY3Rpb25zLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgdG8gc2VlIGhvdyB0aGlzIGFmZmVjdHMgZXh0ZXJuYWwga2Z1bmNzLiBUaW1lIHRvIGluc3BlY3QgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgZGlyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMDM4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE2OjEzOjM4LjEyMzg0MTcxN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA4NDAzNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X2tmdW5jX2FyZ190eXBlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEzOTY9c3RhdGljIGludFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTM5NzpnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM5OC1cXHRcXHQgICBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmdzLCBpbnQgYXJnLCBpbnQgbmFyZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE1MTE9c3RhdGljIGludCBnZW5fa2Z1bmNfYXJnX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTUzNy1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE1Mzg6XFx0XFx0YXJnX3R5cGUgPSBnZXRfa2Z1bmNfYXJnX3R5cGUoZW52LCBtZXRhLCBhcmdzLCBpLCBuYXJncyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNTM5LVxcdFxcdGlmIChhcmdfdHlwZSBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE2OjEzOjM4LjI0NDcwOTczWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUzMzI2NTEyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkNvbnNpZGVyaW5nIEZ1bmN0aW9uIEFyZ3VtZW50IFR5cGVzKipcblxuT2theSwgc28gYGdldF9rZnVuY19hcmdfdHlwZWAgaXMgZGVmaW5pdGVseSBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGNsZWFyLiBCdXQgbm93LCBJJ20gd29uZGVyaW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIGBjaGVja19rZnVuY19hcmdzYC4gSXMgKml0KiBzdGF0aWMgYXMgd2VsbD8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhhdCBmdW5jdGlvbiBzaGFyZXMgdGhlIHNhbWUgZGVzaWduIGNoYXJhY3RlcmlzdGljcyBvciBpZiB0aGVyZSBpcyBhIGRpZmZlcmVudCBhcHByb2FjaCBmb3IgdGhpcyBmdW5jdGlvbi4gSXMgdGhlcmUgc29tZXRoaW5nIHNwZWNpYWwgYWJvdXQgdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcyBvciB0aGUgd2F5IGl0IGlzIGNhbGxlZCB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBpdHMgc3RhdHVzPyBJIG11c3Qga25vdyB3aGV0aGVyIGl0IGlzIHN0YXRpYywgYW5kIGhvdyB0aGF0IHN0YXR1cyBtYXkgZWZmZWN0IG15IGRlc2lnbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMjI3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTY6MTM6NDMuNzc3OTc5ODM4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg1NTA4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19rZnVuY19hcmdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTIxMDE9c3RhdGljIGJvb2wgY2hlY2tfY3NzX3Rhc2tfaXRlcl9hbGxvd2xpc3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjExNi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIxMTc6c3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIxMTgtXFx0XFx0XFx0ICAgIGludCBpbnNuX2lkeClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzA3MD1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTU0LVxcdC8qIENoZWNrIHRoZSBhcmd1bWVudHMgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMxNTU6XFx0ZXJyID0gY2hlY2tfa2Z1bmNfYXJncyhlbnYsIFxcdTAwMjZtZXRhLCBpbnNuX2lkeCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTU2LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNDQwLVxcdFxcdGVsc2VcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM0NDE6XFx0XFx0XFx0Lyogc2NhbGFyLiBlbnN1cmVkIGJ5IGNoZWNrX2tmdW5jX2FyZ3MoKSAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzQ0Mi1cXHRcXHRcXHRtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVnbm8sIHQtXFx1MDAzZXNpemUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNjoxMzo0My44MjU4NDczNzVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5ODIxNjU1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBTdGF0aWMgTmF0dXJlIG9mIFRoaXMgU2l0dWF0aW9uKipcblxuSG1tLCBzbyBpdCdzIGluaGVyZW50bHkgc3RhdGljLiBUaGF04oCZcyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gVGhpcyBjb25zdHJhaW5zIGhvdyBJIGNhbiBhcHByb2FjaCB0aGUgcHJvYmxlbSwgcHJvYmFibHkgbmVjZXNzaXRhdGluZyBjb21waWxlLXRpbWUgYW5hbHlzaXMgb3IgYSB2ZXJ5IGNhcmVmdWwsIGltbXV0YWJsZSBkYXRhIHN0cnVjdHVyZSBkZXNpZ24uIFRoZSBsaW1pdGF0aW9ucyBvZiBzdGF0aWMgZW52aXJvbm1lbnRzIGFsd2F5cyBtYWtlIG1lIHRoaW5rIGFib3V0IHdvcmthcm91bmRzLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgYWN0dWFsIGNvbnN0cmFpbnRzIGZpcnN0LCBiZWZvcmUgZGV2aXNpbmcgc29sdXRpb25zLlxuXG5NeSBtaW5kIGp1bXBzIGltbWVkaWF0ZWx5IHRvIGEgZnVuY3Rpb24uLi4gd2hhdCBhYm91dCBgY2hlY2tfc3RydWN0X29wc19idGZfaWRgPyBJcyB0aGF0IHJlbGV2YW50IGhlcmU/IENvdWxkIHRoYXQgaG9sZCBzb21lIGluc2lnaHQgaW50byB0aGUgc3RhdGljIHN0cnVjdHVyZSBJJ20gZGVhbGluZyB3aXRoLCBwZXJoYXBzIHNvbWUgdHlwZSBJRCBvciBzb21ldGhpbmcgc2ltaWxhciB0aGF0IGhlbHBzIG1lIHRvIHdvcmsgd2l0aCBpdD8gR290dGEgZXhhbWluZSB0aGF0IGZ1bmN0aW9uJ3Mgc2lnbmF0dXJlIGFuZCBpbXBsZW1lbnRhdGlvbiBtb3JlIGNsb3NlbHkuIEkgd29uZGVyIGlmIGl0IGhhcyBkaXJlY3QgYXBwbGljYWJpbGl0eSwgb3IgaWYgaXRzIHByaW5jaXBsZXMgY2FuIGJlIGFkYXB0ZWQuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNzc5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTY6MTM6NDcuNTI0MDY2ODU4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzIyNTMwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTE4ODM1PWludCBicGZfcHJvZ19jdHhfYXJnX2luZm9faW5pdChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4NDMtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4ODQ0OnN0YXRpYyBpbnQgY2hlY2tfc3RydWN0X29wc19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4NDUte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NTgyPXN0YXRpYyBpbnQgY2hlY2tfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjA1LVxcdGlmIChwcm9nLVxcdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2MDY6XFx0XFx0cmV0dXJuIGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKGVudik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjA3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNjoxMzo0Ny41NzEyOTcxMjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU5MzgzMTQ0MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgZm9jdXNpbmcgb24gdGhlIGltcGxpZWQgcmVhc29uaW5nOlxuXG4qKkRpZ2dpbmcgaW50byBCVEYgRGlzdGlsbGF0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIHJldmlzaXRpbmcgdGhpcyBzdGF0aWMgYXNwZWN0IGFnYWluLiBIbW0sIGp1c3QgdG8gYmUgc3VyZS4uLiBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2AgZnVuY3Rpb24uIEkgaGF2ZSBhIGh1bmNoIGl0IG1pZ2h0IGJlIHJlbGV2YW50LCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIGFueSBvYnZpb3VzIGNvbm5lY3Rpb25zIGJldHdlZW4gdGhlIHN0YXRpYyBwcm9wZXJ0eSBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcy4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuLCBhbmQgSSB3YW50IHRvIGJlIGNlcnRhaW4gdGhlIGV4aXN0aW5nIGxvZ2ljIGlzIHRha2luZyB0aGUgc3RhdGljIHBhcnQgaW50byBhY2NvdW50IHByb3Blcmx5IHdpdGhpbiB0aGUgZGlzdGlsbGF0aW9uIHByb2Nlc3MsIGlmIGl0IG5lZWRzIHRvLiBJIHNob3VsZCBleGFtaW5lIGhvdyB0aGF0IGZ1bmN0aW9uIGhhbmRsZXMgc3RhdGljIGRlY2xhcmF0aW9ucyBvciByZWZlcmVuY2VzIGluIHByb3RvdHlwZXMuIEEgcXVpY2sgc2NhbiB3aWxsIGNvbmZpcm0gd2hldGhlciBJIG5lZWQgdG8gYWRqdXN0IG9yIGlmIGl0J3MgYWxyZWFkeSB3ZWxsIGhhbmRsZWQuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMyODcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNjoxNDowMy41MDk2MTQyNDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NjkyNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9idGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2J0Zi5jPTc1NDg9c3RhdGljIHU4IF9fZ2V0X2FyZ19mbW9kZWxfZmxhZ3MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03NTYzLVxcbmtlcm5lbC9icGYvYnRmLmM6NzU2NDppbnQgYnRmX2Rpc3RpbGxfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbmtlcm5lbC9icGYvYnRmLmMtNzU2NS1cXHRcXHRcXHQgICBzdHJ1Y3QgYnRmICpidGYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE2OjE0OjAzLjU1ODMxMzIwOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ0MTg2NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEVwaGVtZXJhbCBhbmQgQ29uc2lkZXJpbmcgQWNjZXNzIENvbnRleHQqKlxuXG5SaWdodCwgc28gdGhpcyBpc24ndCBhIHN0YXRpYyBzaXR1YXRpb24uIFRoYXQncyB0aGUgY29yZSBhc3N1bXB0aW9uIEknbSB3b3JraW5nIGZyb20uIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGJlIHRoaW5raW5nIGFib3V0IGhvdyB0aGluZ3MgY2hhbmdlLCBldm9sdmUsIGFuZCBwb3RlbnRpYWxseSBkZWNheSBvdmVyIHRpbWUuIFRoZSBpbXBsaWNhdGlvbnMgb2YgJ25vbi1zdGF0aWMnIGFyZSBnb2luZyB0byBjYXNjYWRlIHRocm91Z2ggdGhlIHJlc3Qgb2YgbXkgYW5hbHlzaXMuIFRoZSBjaGFsbGVuZ2UgdGhlbiBiZWNvbWVzIGlkZW50aWZ5aW5nIHRoZSBjaGFuZ2luZyB2YXJpYWJsZXMgYW5kIG1ha2luZyBzdXJlIEkgYWNjb3VudCBmb3IgdGhlIGltcGFjdCBvZiB0aG9zZSB2YXJpYWJsZXMuXG5cbkFuZCB3aXRoIHRoYXQgc2FpZCwgbXkgbmV4dCB0aG91Z2h0IGlzLCB3aGF0IGFib3V0IGFjY2VzcyBjb250ZXh0PyBTcGVjaWZpY2FsbHksIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IGBidGZfY3R4X2FjY2Vzc2AuIFRoaXMgZnVuY3Rpb24sIG9yIHN0cnVjdHVyZSwgd2hhdGV2ZXIgaXQgaXMsIGlzIGdvaW5nIHRvIGJlIGNlbnRyYWwgdG8gaG93IEkgc2hvdWxkIHByb2NlZWQuIEdpdmVuIHRoZSBmYWN0IHRoYXQgdGhlIHN1YmplY3QgaXMgbm9uLXN0YXRpYywgYGJ0Zl9jdHhfYWNjZXNzYCBpcyBsaWtlbHkgdG8gYmUgYSBmYWN0b3IgdGhhdCBpcyBkeW5hbWljIGFzIHdlbGwuIEFyZSB0aGVyZSBpbmhlcmVudCByaXNrcyB0aGF0IGFyZSBvbmx5IHJldmVhbGVkIGluIGEgc3BlY2lmaWMgY29udGV4dD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBkeW5hbWljIGxhbmRzY2FwZSwgYW5kIGhvdyB0aGF0IGNvbnRleHQgYWZmZWN0cyB3aGF0IEkgbmVlZCB0byBkby4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIG51YW5jZXMuIEl0cyBpbXBsaWNhdGlvbnMuIE15IG5leHQgc3RlcHMgYXJlIHRvIHJldmlldyB0aGlzIGZ1bmN0aW9uL3N0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM2NTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNjoxNDowNy44MDI1MDMyODhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NTk4NDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ0Zl9jdHhfYWNjZXNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvYnRmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9idGYuYz02NjU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3Jhd190cF9udWxsX2FyZ3MgcmF3X3RwX251bGxfYXJnc1tdID0ge1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy02ODQ5LVxcbmtlcm5lbC9icGYvYnRmLmM6Njg1MDpib29sIGJ0Zl9jdHhfYWNjZXNzKGludCBvZmYsIGludCBzaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbmtlcm5lbC9icGYvYnRmLmMtNjg1MS1cXHRcXHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03MTAzLX1cXG5rZXJuZWwvYnBmL2J0Zi5jOjcxMDQ6RVhQT1JUX1NZTUJPTF9HUEwoYnRmX2N0eF9hY2Nlc3MpO1xcbmtlcm5lbC9icGYvYnRmLmMtNzEwNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTY6MTQ6MDcuODU3MTExODg0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxODE2MjIyODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgRHluYW1pYyBMYW5kc2NhcGUgb2YgZUJQRioqXG5cbkhtbSwgdGhpcyBpcyBkZWZpbml0ZWx5IG5vdCBhIHN0YXRpYyBzaXR1YXRpb24gd2UncmUgZGVhbGluZyB3aXRoLiBUaGUgd2hvbGUgbmF0dXJlIG9mIHRoaXMgZmVlbHMgaW5oZXJlbnRseSBkeW5hbWljIGFuZCBldmVyLWV2b2x2aW5nLiBNeSBwcmltYXJ5IGZvY3VzIGlzIG9uIHRoZSBpbXBhY3Qgb2YgY2hhbmdlcy5cblxuT2theSwgbGV0J3Mgem9vbSBpbiBhIGxpdHRsZSBiaXQsIHdoYXQgYWJvdXQgdGhhdCBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYCBmdW5jdGlvbj8gVGhhdCdzIHRoZSBrZXkgdmFyaWFibGUgdG8gdXBkYXRlLCBpc24ndCBpdD8gSXQgaGFzIGFsbCB0aGUgaW1wYWN0IG9uIGhvdyBldmVyeXRoaW5nIGVsc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDE2NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE2OjE0OjEyLjAzODczNzg4N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3Njg5NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYW1wb2xpbmVfdXBkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTYyPXN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMge1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNjktI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcwOnN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzEtXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgKm9wcywgdm9pZCAqZGF0YSk7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05OD1zdGF0aWMgaW50IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmMoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgbG9uZyBpcCxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1Ni1cXHRcXHQgICAgISh0ci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9PUklHX1NUQUNLKSlcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTc6XFx0XFx0XFx0cmV0ID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHRyLCBmYWxzZSAvKiBsb2NrX2RpcmVjdF9tdXRleCAqLyxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjMtXFx0XFx0aWYgKHRyLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX09SSUdfU1RBQ0spXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY0OlxcdFxcdFxcdHJldCA9IGJwZl90cmFtcG9saW5lX3VwZGF0ZSh0ciwgZmFsc2UgLyogbG9ja19kaXJlY3RfbXV0ZXggKi8sXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MzczPXN0YXRpYyBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKmJwZl90cmFtcG9saW5lX2xvb2t1cCh1NjQga2V5LCB1bnNpZ25lZCBsb25nIGlwKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDEwLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjQxMTpzdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZV9mZW50cnkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIG9yaWdfZmxhZ3MsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDEyLVxcdFxcdFxcdFxcdFxcdHZvaWQgKm9sZF9hZGRyLCB2b2lkICpuZXdfYWRkcilcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTQzMj1zdGF0aWMgaW50IHVucmVnaXN0ZXJfZmVudHJ5KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCB2b2lkICpkYXRhIF9fbWF5YmVfdW51c2VkKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDM5LVxcdGVsc2VcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo0NDA6XFx0XFx0cmV0ID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlX2ZlbnRyeSh0ciwgb3JpZ19mbGFncywgb2xkX2FkZHIsIE5VTEwpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ0MS1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTQ1MD1zdGF0aWMgaW50IG1vZGlmeV9mZW50cnkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIG9yaWdfZmxhZ3MsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDU5LVxcdH0gZWxzZSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NDYwOlxcdFxcdHJldCA9IGJwZl90cmFtcG9saW5lX3VwZGF0ZV9mZW50cnkodHIsIG9yaWdfZmxhZ3MsIG9sZF9hZGRyLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ2MS1cXHRcXHRcXHRcXHRcXHRcXHQgICBuZXdfYWRkcik7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz00NzM9c3RhdGljIGludCByZWdpc3Rlcl9mZW50cnkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00OTAtXFx0fSBlbHNlIHtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo0OTE6XFx0XFx0cmV0ID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlX2ZlbnRyeSh0ciwgMCwgTlVMTCwgbmV3X2FkZHIpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ5Mi1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz03MjA9dm9pZCBicGZfdHJhbXBvbGluZV9zZXRfZmxhZ3Moc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzI2LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcyNzpzdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dGV4LFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcyOC1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyAqb3BzLCB2b2lkICpkYXRhKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTc2PXN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTAxMC1cXHRcXHRyZXR1cm4gZXJyO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwMTE6XFx0ZXJyID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHRyLCB0cnVlIC8qIGxvY2tfZGlyZWN0X211dGV4ICovLCBvcHMsIGRhdGEpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMTItXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTEwMjk9c3RhdGljIGludCBfX2JwZl90cmFtcG9saW5lX3VubGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwNDktXFx0YnBmX3RyYW1wb2xpbmVfcmVtb3ZlX3Byb2codHIsIG5vZGUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwNTA6XFx0cmV0dXJuIGJwZl90cmFtcG9saW5lX3VwZGF0ZSh0ciwgdHJ1ZSAvKiBsb2NrX2RpcmVjdF9tdXRleCAqLywgb3BzLCBkYXRhKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMDUxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTY6MTQ6MTIuMDg2NTEzOTczWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NTUwNjIyMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYCoqXG5cbk9rYXksIHNvIGBicGZfdHJhbXBvbGluZV91cGRhdGVgIGlzIHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZWQgbXkgaW50ZXJlc3QuIEdpdmVuIHRoZSBjb250ZXh0LCBteSBtaW5kIGlzIGFscmVhZHkgcnVubmluZyB0aHJvdWdoIGltcGxpY2F0aW9ucyBmb3IgbGlua2VyIHZpc2liaWxpdHksIHN5bWJvbCBzY29waW5nLCBhbmQgcG90ZW50aWFsIGlubGluaW5nIGJlaGF2aW91ciB3aXRoaW4gdGhlIGtlcm5lbCdzIEJQRiBpbmZyYXN0cnVjdHVyZS4gSXQncyBhIGtleSBvYnNlcnZhdGlvbiwgYnV0IGl0J3Mgbm90IHRoZSBmdWxsIHBpY3R1cmUuXG5cblRvIHVuZGVyc3RhbmQgdGhlIHByYWN0aWNhbCBpbXBhY3Qgb2YgdGhpcyBkZWNsYXJhdGlvbiBhbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyB1c2VkLCBJIHNob3VsZCBub3cgbW92ZSBpbnRvIGBicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzYC4gSSBoYXZlIGEgZmVlbGluZyB0aGF0IGZ1bmN0aW9uIHdpbGwgcHJvdmlkZSBzb21lIGltcG9ydGFudCBpbnNpZ2h0IGhlcmUuIEkgZXhwZWN0IGl0IGlzIHJlbGF0ZWQuIEZyb20gdGhlcmUsIEkgd2lsbCBiZSBhYmxlIHRvIGZvcm0gYSBtb3JlIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBzZWN0aW9uIG9mIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NjIxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTY6MTQ6MTYuMDQxNTc4ODFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjA5Nzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmM9NTMyPXN0YXRpYyBib29sIGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTU0OC0gKi9cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo1NDk6Ym9vbCBicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzKHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcywgdTMyIGZsYWdzLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTU1MC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBicGZfdHJhbXBfYXJlbmFfYXJncyAqYWFyZ3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE2OjE0OjE2LjA4ODc5NDUwN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQ4MzUwMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkFuYWx5emluZyBgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc2AgYW5kIFRyYW1wb2xpbmUgUHJlcGFyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc2AgaXMgaW5kZWVkICpub3QqIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gTm93LCB0aGF0J3MgY3J1Y2lhbCBiZWNhdXNlIGl0IGFmZmVjdHMgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgcG9zc2libGUgc2NvcGUgb2YgaXRzIHVzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgaXQncyBjYWxsZWQgYW5kIGhvdyBpdCdzIGJlaW5nIGFjY2Vzc2VkIHdpdGhpbiB0aGUgYnJvYWRlciBCUEYgY29udGV4dC5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBpbnRvIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAuIFRoYXQgZnVuY3Rpb24gaXMgcHJvYmFibHkgd2hlcmUgYSBsb3Qgb2YgdGhlIG1hZ2ljIGlzIGhhcHBlbmluZyByZWdhcmRpbmcgdGhlIHNldHVwIGFuZCBwcmVwYXJhdGlvbiBvZiB0aGVzZSBCUEYgdHJhbXBvbGluZXMsIGFuZCB3aGVyZSBgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc2AgbGlrZWx5IHBsYXlzIGEgc2lnbmlmaWNhbnQgcm9sZSwgcGVyaGFwcyBldmVuIGJlaW5nIGNhbGxlZCBkaXJlY3RseSBhcyBwYXJ0IG9mIHRoYXQgcHJlcGFyYXRpb24gcHJvY2Vzcy4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28gaXMgY3JpdGljYWwgZm9yIGZpZ3VyaW5nIG91dCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgQlBGIHRyYW1wb2xpbmVzIGFyZSBzdHJ1Y3R1cmVkIGFuZCBoYW5kbGVkLiBLbm93aW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2lsbCBpbW1lZGlhdGVseSB0ZWxsIG1lIHNvbWV0aGluZyB2ZXJ5IGludGVyZXN0aW5nIGFib3V0IHRoZSBvdmVyYWxsIGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYwMDgsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNjoxNDoyMC4xMzcxNDk2NjhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDcwNjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzMzNT1zdGF0aWMgaW50IGludm9rZV9icGZfbW9kX3JldChjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHByb2csXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzQzNi0gKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzQzNzpzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbWFnZSxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzQzOC1cXHRcXHRcXHRcXHRcXHQgdm9pZCAqcndfaW1hZ2VfZW5kLCB2b2lkICppbWFnZSxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNzYyPWludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKmltYWdlLCB2b2lkICppbWFnZV9lbmQsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzc3Ny1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6Mzc3ODpcXHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShpbSwgcndfaW1hZ2UsIHJ3X2ltYWdlICsgc2l6ZSwgaW1hZ2UsIG0sXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3NzktXFx0XFx0XFx0XFx0XFx0ICAgIGZsYWdzLCB0bm9kZXMsIGZ1bmNfYWRkcik7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mzc5MT1pbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3OTctXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM3OTg6XFx0LyogQWxsb2NhdGUgYSB0ZW1wb3JhcnkgYnVmZmVyIGZvciBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSgpLlxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzk5LVxcdCAqXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzgwNy1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzgwODpcXHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShcXHUwMDI2aW0sIGltYWdlLCBpbWFnZSArIFBBR0VfU0laRSwgaW1hZ2UsXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM4MDktXFx0XFx0XFx0XFx0XFx0ICAgIG0sIGZsYWdzLCB0bm9kZXMsIGZ1bmNfYWRkcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE2OjE0OjIwLjE4NzY1Nzc4NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDA3Nzk0OTAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipUcmFtcG9saW5lIEZ1bmN0aW9ucyBhbmQgQXJlbmEgQXJndW1lbnQgU3VwcG9ydCBpbiBCUEYgSklUKipcblxuUmlnaHQsIHNvIEknbSBzZWVpbmcgYSBkaXN0aW5jdGlvbiBoZXJlLiBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGxpa2VseSBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gd2l0aGluIGEgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdCDigJMgbGlrZWx5IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB0byBwcmV2ZW50IGV4dGVybmFsIGxpbmthZ2UuIE9uIHRoZSBvdGhlciBoYW5kLCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBpcyAqbm90KiBgc3RhdGljYC4gVGhpcyBpbXBsaWVzIGl0J3MgaW50ZW5kZWQgZm9yIGV4dGVybmFsIHVzZSwgcHJvYmFibHkgYXMgcGFydCBvZiB0aGUgcHVibGljIEJQRiBKSVQgQVBJIG9uIHRoZSBhcmNoaXRlY3R1cmUgaW4gcXVlc3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYW5kIGZ1bmN0aW9uIG9mIHRoZXNlIHR3by4gSSBpbWFnaW5lIHRoZSBub24tc3RhdGljIGZ1bmN0aW9uIHdpbGwgYmUgdGhlIGVudHJ5IHBvaW50IGV4cG9zZWQgdG8gdGhlIGhpZ2hlci1sZXZlbCBCUEYgc3Vic3lzdGVtLiBUaGUgc3RhdGljIG9uZSwgbGlrZWx5IHVzZWQgaW50ZXJuYWxseSBieSBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCwgZG9lcyB0aGUgaGVhdnkgbGlmdGluZy4gSSBzaG91bGQgZXhwbG9yZSB0aGUgaW1wbGVtZW50YXRpb25zIHRvIGNvbmZpcm0gdGhpcy5cblxuTm93LCBsZXQncyBwaXZvdC4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLiBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiwgb3IgdmFyaWFibGUsIHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIGRldGVybWluaW5nIHdoZXRoZXIgb3Igbm90IHRoZSBhcmNoaXRlY3R1cmUncyBKSVQgY29tcGlsZXIgaGFzIHRoZSBuZWNlc3NhcnkgY2FwYWJpbGl0aWVzIGZvciBcImFyZW5hIGFyZ3VtZW50c1wiLiBJJ20gbWFraW5nIGFuIGFzc3VtcHRpb24gdGhhdCB0aGUgYGFyZW5hYCBpcyByZWxhdGVkIHRvIGhvdyBCUEYgcHJvZ3JhbXMgcGFzcyBhcmd1bWVudHMsIG9yIG1hbmFnZSBpbnRlcm1lZGlhdGUgc3RhdGUuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIG1lbW9yeSBtYW5hZ2VtZW50IHNwZWNpZmljIHRvIEpJVC1jb21waWxlZCBCUEYgY29kZS4gVGhlIGZ1bmN0aW9uIG5hbWUgaW1wbGllcyBzb21lIHJ1bnRpbWUgY2hlY2ssIG9yIHBvc3NpYmx5IGEgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIGZsYWcsIHRvIGluZGljYXRlIGlmIHRoaXMgc3VwcG9ydCBpcyBhdmFpbGFibGUuIEkgc2hvdWxkIGV4YW1pbmUgdGhlIGRlZmluaXRpb24gYW5kIHVzZXMgb2YgdGhpcyBmbGFnLCBvciBmdW5jdGlvbiwgdG8gZGV0ZXJtaW5lIHByZWNpc2VseSB3aGF0J3Mgc3VwcG9ydGVkIGFuZCB3aHkuIEknZCBiZSBsb29raW5nIGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBwYXRocywgY2hlY2tzIGZvciBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBvciBtYXliZSBldmVuIGNoZWNrcyBmb3Igc3BlY2lmaWMga2VybmVsIHZlcnNpb25zLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBlbGVtZW50cyBjb21iaW5lIGFuZCBpbmZsdWVuY2UgdGhlIEJQRiBKSVQncyBjb2RlIGdlbmVyYXRpb24gcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY5MzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNjoxNDo1MC4yNjU2MTEwNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2MzY3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY29yZS5jPTMzMDY9Ym9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzEwLVxcbmtlcm5lbC9icGYvY29yZS5jOjMzMTE6Ym9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpXFxua2VybmVsL2JwZi9jb3JlLmMtMzMxMi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE2OjE0OjUwLjMxNDI1MzgzN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTc5MTk1MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgV2Vha25lc3MgYW5kIElkZW50aWZ5aW5nIHRoZSBUYXJnZXQqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IGZsYWdzIHRoaXMgYXMgYSBub24tc3RhdGljLCBvciBcIndlYWtcIiBwb2ludC4gVGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBteSBpbnRlcm5hbCByYWRhcjsgd2UgbmVlZCB0byBkaWcgZGVlcGVyLiBNeSBmb2N1cyBzaGlmdHMgdG8gdGhlIHN1c3BlY3RlZCBhcmVhLiBMZXQncyBzdGFydCBieSBzY3J1dGluaXppbmcgYGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hYC4gVGhpcyBjb3VsZCBiZSB0aGUgbGluY2hwaW4sIGFuZCB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHNvbWUgaW52ZXN0aWdhdGlvbi4gVGltZSB0byBnbyBodW50aW5nIGZvciBzb21ldGhpbmcgaW50ZXJlc3RpbmcgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NTQ0LCJPdXRwdXRUb2tlbnMiOjU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTY6MTQ6NTQuMjkzNDUyNTEyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTM1NDg0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM9NDM2PV9fYnBmX2tmdW5jIHZvaWQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMih2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYy00NDAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYzo0NDE6X19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKHU2NCAqcHRyX19hcmVuYSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jLTQ0Mi17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jLTQ0NS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jOjQ0NjpfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUodTY0ICpwdHJfX2FyZW5hX251bGxhYmxlKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMtNDQ3LXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMtNDUwLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM6NDUxOl9fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayh1NjQgKnB0cl9fYXJlbmEpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYy00NTIte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYz04NjQ9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYzo4NjU6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM6ODY2OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jOjg2NzpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2spXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYy04NjgtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19nZXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTY6MTQ6NTQuMzQyODEyODU5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNDgyMzM4OTcwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBCUEYgQXJlbmEgUG9pbnRlciBTdXBwb3J0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGNoYW5nZXMgcmVsYXRlZCB0byBCUEYga2Z1bmNzIGFuZCBgc3RydWN0X29wc2AgYXJndW1lbnRzLCBzcGVjaWZpY2FsbHkgdGhlIGludHJvZHVjdGlvbiBvZiBgX19hcmVuYWAgYW5kIGBfX2FyZW5hX251bGxhYmxlYCBhbm5vdGF0aW9ucy4gTXkgaW5pdGlhbCBzY2FuIGZvY3VzZWQgb24gZnVuY3Rpb25zIGluIGB0ZXN0X2ttb2RzYCwgYnV0IHRoYXQncyBhIHJlZCBoZXJyaW5nLiBXZSBuZWVkIHRvIGxvb2sgYXQgd2hhdCdzIGFjdHVhbGx5ICppbnRlZ3JhdGVkKiBpbnRvIHRoZSBrZXJuZWwncyBCUEYgY29yZSBsb2dpYy5cblxuSSBpbW1lZGlhdGVseSBob25lZCBpbiBvbiBgYnRmX2N0eF9hY2Nlc3NgIGFuZCBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2AsIGJvdGggb2Ygd2hpY2ggYXJlIG5vbi1zdGF0aWMgYW5kIHBhcnQgb2YgdGhlIGNvcmUgQlBGIGNvZGUuICBgYnRmX2N0eF9hY2Nlc3NgIGlzIGNydWNpYWwgYmVjYXVzZSBpdCBnb3Zlcm5zIGNvbnRleHQgYWNjZXNzIGNoZWNrcyBmb3IgdHJhY2luZyBhbmQgYHN0cnVjdF9vcHNgIHByb2dyYW1zLiAgYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gIGlzIGVzc2VudGlhbCBmb3IgZGlzdGlsbGluZyBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciB0cmFtcG9saW5lIG9wZXJhdGlvbnMuXG5cblRoZW4gSSBjb25zaWRlcmVkIG90aGVyIHBvc3NpYmxlIGNhbmRpZGF0ZXMuIGBicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzYCBzZWVtcyBwcm9taXNpbmcsIGFzIGRvZXMgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AsIGJ1dCB0aGUgbGF0dGVyJ3MganVzdCBhIGJvb2xlYW4gY2hlY2ssIHdoaWNoIGlzbid0IGFzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc2AgYW5kIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYCBhbmQgYGJ0Zl9jdHhfYWNjZXNzYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMuXG5cbkkgZGlkIGEgZGVlcCBkaXZlIHRvIGVuc3VyZSBJIHdhc24ndCBtaXNzaW5nIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gQlBGLiBJIGxvb2tlZCBpbnRvIGBicGZfcHJvZ19jdHhfYXJnX2luZm9faW5pdGAsIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLCBgYnBmX3N0cnVjdF9vcHNfaW1hZ2VfZnJlZWAsIGBwcmVwYXJlX2FyZ19pbmZvYCwgYGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkYCwgYGNoZWNrX2tmdW5jX2FyZ3NgLCBhbmQgYGdldF9rZnVuY19hcmdfdHlwZWAuICBJIHdhcyBjYXJlZnVsIHRvIG1ha2Ugc3VyZSBJIHdhc24ndCBzZWxlY3Rpbmcgc3RhdGljIGZ1bmN0aW9ucywgc3VjaCBhcyBgcHJlcGFyZV9hcmdfaW5mb2AsIGBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZGAsIGBjaGVja19rZnVuY19hcmdzYCwgYW5kIGBnZXRfa2Z1bmNfYXJnX3R5cGVgLlxuXG5TbywgdGhlIGRlZmluaXRpdmUgbGlzdCBvZiAqbW9kaWZpZWQqIG9yICphZGRlZCogbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlOlxuXG4qICAgYGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NgXG4qICAgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2BcbiogICBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2BcbiogICBgYnRmX2N0eF9hY2Nlc3NgXG5cbkxldCdzIGRvdWJsZS1jaGVjayBgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc2AuIEl04oCZcyBhZGRlZCBpbiBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgIGFuZCBpcyBjYWxsZWQgZnJvbSBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiAgVGhpcyByZWluZm9yY2VzIGl0cyBpbXBvcnRhbmNlIGluIHRoZSB0cmFtcG9saW5lIGxvZ2ljLiAgVGhlIGNoYW5nZXMgdG8gYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gIGFuZCBgYnRmX2N0eF9hY2Nlc3NgIGFyZSBsb2NhdGVkIGluIGBrZXJuZWwvYnBmL2J0Zi5jYC5cblxuSSByZXZpZXdlZCB0aGUgb3RoZXIgZmlsZXMgaW4gdGhlIGtlcm5lbC4gSW4gYGtlcm5lbC9icGYvY29yZS5jYCwgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AgaXMgYWRkZWQuIEluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYCBpcyBhZGRlZCBhZ2Fpbi5cblxuTXkgZm9jdXMgbmFycm93cyB0byB0aGVzZSBjb3JlIGZ1bmN0aW9uczpcblxuKiAgIGBicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzYFxuKiAgIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYFxuKiAgIGBidGZfY3R4X2FjY2Vzc2BcblxuTm93LCByZWdhcmRpbmcgY29uZmlndXJhdGlvbnMsIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYCBhcmUgb2J2aW91c2x5IGNyaXRpY2FsLiBUaGUgdHJhbXBvbGluZXMgYXJlIHBhcnQgb2YgdGhlIEpJVCwgc28gd2UgbmVlZCBib3RoLiAgSSBjb25maXJtZWQgdGhhdCBgQlBGX0pJVF9BTFdBWVNfT05gIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeS4gYEJQRl9FVkVOVFNgIGlzbid0IHJlcXVpcmVkIGhlcmUgZWl0aGVyLlxuXG5MZXQncyBxdWlja2x5IHZlcmlmeSB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMuIGBicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzYCBpcyBkZWZpbmVkIGFzOlxuXG5gYGBjXG5ib29sIGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3Moc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB1MzIgZmxhZ3MsXG5cdFx0XHRcdCAgc3RydWN0IGJwZl90cmFtcF9hcmVuYV9hcmdzICphYXJncylcbmBgYFxuXG5JdCBpcyBleHBvcnRlZCBpbiBgaW5jbHVkZS9saW51eC9icGYuaGAuXG5cbmBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYCBpcyBkZWZpbmVkIGFzOlxuXG5gYGBjXG5pbnQgYnRmX2Rpc3RpbGxfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuXHRcdFx0ICAgc3RydWN0IGJ0ZiAqYnRmLFxuXHRcdFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICpmdW5jLFxuXHRcdFx0ICAgY29uc3QgY2hhciAqZnVuY19uYW1lLFxuXHRcdFx0ICAgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptKVxuYGBgXG5cbmBidGZcblxuIiwiSW5wdXRUb2tlbnMiOjM4NDUwLCJPdXRwdXRUb2tlbnMiOjE2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTY6MTY6NTkuMTY2MjA2MTg2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODExNDYxNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc1wiLFxuICAgIFwiYnRmX2Rpc3RpbGxfZnVuY19wcm90b1wiLFxuICAgIFwiYnRmX2N0eF9hY2Nlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBfX2FyZW5hYCBhbmQgYF9fYXJlbmFfbnVsbGFibGVgIGFubm90YXRpb25zIGZvciBCUEYga2Z1bmNzIGFuZCBzdHJ1Y3Rfb3BzIGFyZ3VtZW50cy4gSXQgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciwgSklUIGNvbXBpbGVyICh4ODYpLCBhbmQgdHJhbXBvbGluZSBsb2dpYyB0byBzdXBwb3J0IGFyZW5hIHBvaW50ZXJzLCBpbmNsdWRpbmcgcmViYXNpbmcgdGhlbSB0byBrZXJuZWwgYWRkcmVzc2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbWVtb3J5IHNhZmV0eSBhbmQgY29ycmVjdCB2ZXJpZmljYXRpb24gb2YgYXJlbmEgcG9pbnRlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzXCIsXG4gICAgXCJidGZfZGlzdGlsbF9mdW5jX3Byb3RvXCIsXG4gICAgXCJidGZfY3R4X2FjY2Vzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYF9fYXJlbmFgIGFuZCBgX19hcmVuYV9udWxsYWJsZWAgYW5ub3RhdGlvbnMgZm9yIEJQRiBrZnVuY3MgYW5kIHN0cnVjdF9vcHMgYXJndW1lbnRzLiBJdCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyLCBKSVQgY29tcGlsZXIgKHg4NiksIGFuZCB0cmFtcG9saW5lIGxvZ2ljIHRvIHN1cHBvcnQgYXJlbmEgcG9pbnRlcnMsIGluY2x1ZGluZyByZWJhc2luZyB0aGVtIHRvIGtlcm5lbCBhZGRyZXNzZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0IHZlcmlmaWNhdGlvbiBvZiBhcmVuYSBwb2ludGVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowj7r74[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-03 16:11:32 +0000 UTC FinishedAt: 2026-08-03 16:17:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "60781269e26c786de2bb93fb1e697a5c32ccee48", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "60781269e26c786de2bb93fb1e697a5c32ccee48", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "e0439e70-7e2d-4302-9cb8-918cf5bd4951" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_tramp_collect_arena_args", "btf_distill_func_proto", "btf_ctx_access" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE2OjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzJiMzNDssCiAgICAmIzM0O2J0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8mIzM0OywKICAgICYjMzQ7YnRmX2N0eF9hY2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgX19hcmVuYWAgYW5kIGBfX2FyZW5hX251bGxhYmxlYCBhbm5vdGF0aW9ucyBmb3IgQlBGIGtmdW5jcyBhbmQgc3RydWN0X29wcyBhcmd1bWVudHMuIEl0IG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIsIEpJVCBjb21waWxlciAoeDg2KSwgYW5kIHRyYW1wb2xpbmUgbG9naWMgdG8gc3VwcG9ydCBhcmVuYSBwb2ludGVycywgaW5jbHVkaW5nIHJlYmFzaW5nIHRoZW0gdG8ga2VybmVsIGFkZHJlc3Nlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG1lbW9yeSBzYWZldHkgYW5kIGNvcnJlY3QgdmVyaWZpY2F0aW9uIG9mIGFyZW5hIHBvaW50ZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE2OjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDBhZmM2NzQ2ZGEwZWM5MDJiZWI2NjM2N2M0NTcwMWZkMDY1OGIxMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTY6MTM6MDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdCBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbmluZGV4IGNiZGU4NmQwODJjY2UuLjQ4Y2Y3NDZmOWZmOWQgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XG5AQCAtMjc4LDYgJiM0MzsyNzgsNDMgQEAgQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6XG4gICAgICAgICAgICAgICAgIC4uLlxuICAgICAgICAgfVxuIFxuJiM0MzsyLjMuOCBfX2FyZW5hIGFuZCBfX2FyZW5hX251bGxhYmxlIEFubm90YXRpb25zXG4mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7XG4mIzQzO0JvdGggYW5ub3RhdGlvbnMgaW5kaWNhdGUgdGhhdCB0aGUgcG9pbnRlciBhcmd1bWVudCBwb2ludHMgaW50byB0aGVcbiYjNDM7Y2FsbGluZyBwcm9ncmFtJiMzOTtzIGFyZW5hLiBUaGUgSklUIHJlYmFzZXMgdGhlIHZhbHVlIGF0IHRoZSBjYWxsIHNpdGUgc29cbiYjNDM7dGhlIGtmdW5jIHJlY2VpdmVzIGEgZGlyZWN0bHkgZGVyZWZlcmVuY2VhYmxlIGtlcm5lbCBhZGRyZXNzLCBzdWJqZWN0IHRvXG4mIzQzO3RoZSBhY2Nlc3MgcnVsZXMgZGVzY3JpYmVkIGluIDpyZWY6YEJQRl9rZnVuY19hcmVuYV9hY2Nlc3NgIChhdCBtb3N0XG4mIzQzO2BgR1VBUkRfU1ogLyAyYGAsIDMyIEtpQiwgcGFzdCB0aGUgcG9pbnRlciBpbiBhIHNpbmdsZSB1bmNoZWNrZWQgYWNjZXNzKS5cbiYjNDM7XG4mIzQzO1dpdGggYGBfX2FyZW5hYGAgdGhlIHJlYmFzZSBpcyB1bmNvbmRpdGlvbmFsIGFuZCB0aGUgYXJndW1lbnQgaXMgbmV2ZXJcbiYjNDM7TlVMTDogYSB2YWx1ZSB3aG9zZSBsb3dlciAzMiBiaXRzIGFyZSB6ZXJvIGFycml2ZXMgYXMgdGhlIGFyZW5hIGJhc2VcbiYjNDM7YWRkcmVzcyAoYXJlbmEgb2Zmc2V0IDApLiBUaGUga2Z1bmMgbXVzdCBub3QgY2hlY2sgdGhlIGFyZ3VtZW50IGZvciBOVUxMLlxuJiM0MztXaXRoIGBgX19hcmVuYV9udWxsYWJsZWBgIHN1Y2ggYSB2YWx1ZSBhcnJpdmVzIGFzIE5VTEwgaW5zdGVhZCBhbmQgdGhlXG4mIzQzO2tmdW5jIG11c3QgY2hlY2sgYmVmb3JlIGRlcmVmZXJlbmNpbmcuXG4mIzQzO1xuJiM0MztBbiBleGFtcGxlIGlzIGdpdmVuIGJlbG93OjpcbiYjNDM7XG4mIzQzOyAgICAgICAgX19icGZfa2Z1bmMgaW50IGJwZl9wcm9jZXNzX2l0ZW0oc3RydWN0IGl0ZW0gKml0ZW1fX2FyZW5hKVxuJiM0MzsgICAgICAgIHtcbiYjNDM7ICAgICAgICAuLi5cbiYjNDM7ICAgICAgICB9XG4mIzQzO1xuJiM0MztDYWxsaW5nIHN1Y2ggYSBrZnVuYyByZXF1aXJlcyB0aGUgcHJvZ3JhbSB0byB1c2UgYW4gYXJlbmEgbWFwIGFuZCBhIEpJVCB3aXRoXG4mIzQzO2FyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQpOyB2ZXJpZmljYXRpb24gZmFpbHMgb3RoZXJ3aXNlLiBUaGVcbiYjNDM7cHJvZ3JhbSBjYW4gcGFzcyBhbnkgdmFsdWUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIGtlcm5lbC4gQSB2YWx1ZSB0aGF0IGRvZXNcbiYjNDM7bm90IHBvaW50IGludG8gdGhlIGFyZW5hIGlzIGEgcHJvZ3JhbSBidWcuXG4mIzQzO1xuJiM0MztUaGUgc3VmZml4ZXMgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIG9uIHRoZSBhcmd1bWVudHMgb2Ygc3RydWN0X29wcyBzdHViXG4mIzQzO2Z1bmN0aW9ucywgd2l0aCB0aGUgY29udmVyc2lvbiBydW5uaW5nIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uIFRoZVxuJiM0MztrZXJuZWwgY2FsbGVyIHBhc3NlcyB0aGUga2VybmVsIGFyZW5hIGFkZHJlc3MgYW5kIHRoZSB0cmFtcG9saW5lIGNvbnZlcnRzXG4mIzQzO2l0IHdoaWxlIHNhdmluZyB0aGUgYXJndW1lbnRzLCBzbyB0aGUgY2FsbGJhY2sgcmVjZWl2ZXMgYW4gYXJlbmEgcG9pbnRlclxuJiM0MztpdCBjYW4gZGVyZWZlcmVuY2UgZGlyZWN0bHkuIFdpdGggYGBfX2FyZW5hYGAgdGhlIGtlcm5lbCBjYWxsZXIgbXVzdCBub3RcbiYjNDM7cGFzcyBOVUxMLiBXaXRoIGBgX19hcmVuYV9udWxsYWJsZWBgIGEgTlVMTCBrZXJuZWwgcG9pbnRlciBhcnJpdmVzIGFzIE5VTEwuXG4mIzQzO0hvd2V2ZXIsIHRoZXJlIGlzIG5vIG9ibGlnYXRpb24gdG8gcHJvdmUgdG8gdGhlIHZlcmlmaWVyIHRoYXQgc3VjaCBhIHBvaW50ZXIgaXNcbiYjNDM7bm9uLU5VTEwgYmVmb3JlIHVzZSwgaW4tbGluZSB3aXRoIGV4aXN0aW5nIHNlbWFudGljcyBvZiBhcmVuYSBwb2ludGVycyB1c2VkIGluXG4mIzQzO2EgcHJvZ3JhbSAob3Igb2J0YWluZWQgZnJvbSBhbnkgb3RoZXIgc291cmNlKS5cbiYjNDM7XG4gLi4gX0JQRl9rZnVuY19ub2RlZjpcbiBcbiAyLjQgVXNpbmcgYW4gZXhpc3Rpbmcga2VybmVsIGZ1bmN0aW9uXG5AQCAtNTE1LDYgJiM0Mzs1NTIsOCBAQCBJbiBvcmRlciB0byBhY2NvbW1vZGF0ZSBzdWNoIHJlcXVpcmVtZW50cywgdGhlIHZlcmlmaWVyIHdpbGwgZW5mb3JjZSBzdHJpY3RcbiBQVFJfVE9fQlRGX0lEIHR5cGUgbWF0Y2hpbmcgaWYgdHdvIHR5cGVzIGhhdmUgdGhlIGV4YWN0IHNhbWUgbmFtZSwgd2l0aCBvbmVcbiBiZWluZyBzdWZmaXhlZCB3aXRoIGBgX19faW5pdGBgLlxuIFxuJiM0MzsuLiBfQlBGX2tmdW5jX2FyZW5hX2FjY2VzczpcbiYjNDM7XG4gMi44IEFjY2Vzc2luZyBhcmVuYSBtZW1vcnkgdGhyb3VnaCBrZnVuYyBhcmd1bWVudHNcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggMDFlN2NlNTY5YzFlZC4uNGIzZTVkOGE0YTU2MyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMTY3OCw2ICYjNDM7MTY3OCw1MCBAQCBzdGF0aWMgaW50IGVtaXRfc3BlY3RyZV9iaGJfYmFycmllcih1OCAqKnBwcm9nLCB1OCAqaXAsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFJlYmFzZSB0aGUgX19hcmVuYSBhcmdzIG9mIGEga2Z1bmMgY2FsbCB0byBhcmVuYSBrZXJuZWwgYWRkcmVzc2VzLFxuJiM0MzsgKiByTiA9IGtlcm5fdm1fc3RhcnQgJiM0MzsgKHUzMilyTiwgd2l0aCBSMTIgaG9sZGluZyBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlXG4mIzQzOyAqIGFyZyBwcmVzZXJ2ZXMgTlVMTCBieSBza2lwcGluZyB0aGUgYWRkLCB0ZXN0ZWQgb24gdGhlIHRydW5jYXRlZCB2YWx1ZSBhc1xuJiM0MzsgKiBhcmVuYSBOVUxMIGlzIG9mZnNldCAwLiBSZXR1cm4gdGhlIG51bWJlciBvZiBlbWl0dGVkIGJ5dGVzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBlbWl0X2tmdW5jX2FyZW5hX2FyZ3Moc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZyxcbiYjNDM7XHRcdFx0XHQgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCB1OCAqKnBwcm9nKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICpmbTtcbiYjNDM7XHR1OCAqcHJvZyA9ICpwcHJvZztcbiYjNDM7XHR1OCAqc3RhcnQgPSBwcm9nO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmbSA9IGJwZl9qaXRfZmluZF9rZnVuY19tb2RlbChicGZfcHJvZywgaW5zbik7XG4mIzQzO1x0aWYgKCFmbSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtaW5fdChpbnQsIGZtLVx1MDAzZW5yX2FyZ3MsIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1OCBmbGFncyA9IGZtLVx1MDAzZWFyZ19mbGFnc1tpXTtcbiYjNDM7XHRcdHUzMiByZWcgPSBCUEZfUkVHXzEgJiM0MzsgaTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIShmbGFncyBcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmIChXQVJOX09OX09OQ0UoIWJwZl9wcm9nLVx1MDAzZWF1eC1cdTAwM2VhcmVuYSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdC8qIG1vdiBlTiwgZU46IHRydW5jYXRlIGFuZCBjbGVhciB0aGUgdXBwZXIgMzIgYml0cyAqL1xuJiM0MztcdFx0ZW1pdF9tb3ZfcmVnKFx1MDAyNnByb2csIGZhbHNlLCByZWcsIHJlZyk7XG4mIzQzO1x0XHRpZiAoZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHKSB7XG4mIzQzO1x0XHRcdC8qIHRlc3QgZU4sIGVOOyBqeiBvdmVyIHRoZSAzLWJ5dGUgYWRkICovXG4mIzQzO1x0XHRcdG1heWJlX2VtaXRfbW9kKFx1MDAyNnByb2csIHJlZywgcmVnLCBmYWxzZSk7XG4mIzQzO1x0XHRcdEVNSVQyKDB4ODUsIGFkZF8ycmVnKDB4QzAsIHJlZywgcmVnKSk7XG4mIzQzO1x0XHRcdEVNSVQyKFg4Nl9KRSwgMyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHQvKiBhZGQgck4sIHIxMiAqL1xuJiM0MztcdFx0bWF5YmVfZW1pdF9tb2QoXHUwMDI2cHJvZywgcmVnLCBYODZfUkVHX1IxMiwgdHJ1ZSk7XG4mIzQzO1x0XHRFTUlUMigweDAxLCBhZGRfMnJlZygweEMwLCByZWcsIFg4Nl9SRUdfUjEyKSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqcHByb2cgPSBwcm9nO1xuJiM0MztcdHJldHVybiBwcm9nIC0gc3RhcnQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxuIFx0XHQgIHU4ICpyd19pbWFnZSwgaW50IG9sZHByb2dsZW4sIHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LCBib29sIGptcF9wYWRkaW5nKVxuIHtcbkBAIC0yNTgzLDYgJiM0MzsyNjI3LDEyIEBAIHN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4gXHRcdFx0fVxuIFx0XHRcdGlmICghaW1tMzIpXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0aWYgKHNyY19yZWcgPT0gQlBGX1BTRVVET19LRlVOQ19DQUxMKSB7XG4mIzQzO1x0XHRcdFx0ZXJyID0gZW1pdF9rZnVuY19hcmVuYV9hcmdzKGJwZl9wcm9nLCBpbnNuLCBcdTAwMjZwcm9nKTtcbiYjNDM7XHRcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdFx0XHRpcCAmIzQzOz0gZXJyO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0aWYgKHByaXZfZnJhbWVfcHRyKSB7XG4gXHRcdFx0XHRwdXNoX3I5KFx1MDAyNnByb2cpO1xuIFx0XHRcdFx0aXAgJiM0Mzs9IDI7XG5AQCAtMjk5MywxMiAmIzQzOzMwNDMsNDAgQEAgc3RhdGljIGludCBnZXRfbnJfdXNlZF9yZWdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSlcbiBcdHJldHVybiBucl91c2VkX3JlZ3M7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBDb252ZXJ0IGFuIGFyZW5hIGtlcm5lbCBhZGRyZXNzIGludG8gdGhlIGFyZW5hIHBvaW50ZXIgZm9ybSBvbiBpdHMgd2F5XG4mIzQzOyAqIGludG8gdGhlIEJQRiBjdHgsIHJheCA9ICh1MzIpKHNyYyAtIGtlcm5fdm1fc3RhcnQpLiBBIG51bGxhYmxlIGFyZ1xuJiM0MzsgKiBwcmVzZXJ2ZXMgTlVMTCwgdGVzdGVkIG9uIHRoZSBmdWxsIDY0LWJpdCBrZXJuZWwgcG9pbnRlci4gVGhlIDMyLWJpdFxuJiM0MzsgKiBzdWJ0cmFjdGlvbiBib3RoIHRydW5jYXRlcyBhbmQgY2xlYXJzIHRoZSB1cHBlciBoYWxmLCBzbyB0aGUgc3RvcmVkXG4mIzQzOyAqIHZhbHVlIHNhdGlzZmllcyB0aGUgSklUIGludmFyaWFudCBmb3IgYXJlbmEgcG9pbnRlciByZWdpc3RlcnMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBlbWl0X2FyZW5hX2FyZ19jb252KHU4ICoqcHByb2csIHUzMiBzcmNfcmVnLCBib29sIG51bGxhYmxlLCB1MzIgYmFzZV9sbylcbiYjNDM7e1xuJiM0MztcdHU4ICpwcm9nID0gKnBwcm9nO1xuJiM0MztcbiYjNDM7XHRpZiAobnVsbGFibGUpIHtcbiYjNDM7XHRcdGlmIChzcmNfcmVnICE9IEJQRl9SRUdfMClcbiYjNDM7XHRcdFx0ZW1pdF9tb3ZfcmVnKFx1MDAyNnByb2csIHRydWUsIEJQRl9SRUdfMCwgc3JjX3JlZyk7XG4mIzQzO1x0XHQvKiB0ZXN0IHJheCwgcmF4OyBqeiBvdmVyIHRoZSA1LWJ5dGUgc3ViICovXG4mIzQzO1x0XHRFTUlUMygweDQ4LCAweDg1LCAweEMwKTtcbiYjNDM7XHRcdEVNSVQyKFg4Nl9KRSwgNSk7XG4mIzQzO1x0fSBlbHNlIGlmIChzcmNfcmVnICE9IEJQRl9SRUdfMCkge1xuJiM0MztcdFx0ZW1pdF9tb3ZfcmVnKFx1MDAyNnByb2csIGZhbHNlLCBCUEZfUkVHXzAsIHNyY19yZWcpO1xuJiM0MztcdH1cbiYjNDM7XHQvKiBzdWIgZWF4LCBiYXNlX2xvICovXG4mIzQzO1x0RU1JVDFfb2ZmMzIoMHgyRCwgYmFzZV9sbyk7XG4mIzQzO1xuJiM0MztcdCpwcHJvZyA9IHByb2c7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgc2F2ZV9hcmdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcm9nLFxuLVx0XHQgICAgICBpbnQgc3RhY2tfc2l6ZSwgYm9vbCBmb3JfY2FsbF9vcmlnaW4sIHUzMiBmbGFncylcbiYjNDM7XHRcdCAgICAgIGludCBzdGFja19zaXplLCBib29sIGZvcl9jYWxsX29yaWdpbiwgdTMyIGZsYWdzLFxuJiM0MztcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJwZl90cmFtcF9hcmVuYV9hcmdzICphYXJncylcbiB7XG4gXHRpbnQgYXJnX3JlZ3MsIGZpcnN0X29mZiA9IDAsIG5yX3JlZ3MgPSAwLCBucl9zdGFja19zbG90cyA9IDA7XG4gXHRib29sIHVzZV9qbXAgPSBicGZfdHJhbXBvbGluZV91c2Vfam1wKGZsYWdzKTtcbi1cdGludCBpLCBqO1xuJiM0MztcdGludCBzdGFja19hcmdzX29mZiA9ICh1c2Vfam1wIHx8IChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpKSA/IDE2IDogMjQ7XG4mIzQzO1x0aW50IGksIGosIHNsb3QgPSAwO1xuIFxuIFx0LyogU3RvcmUgZnVuY3Rpb24gYXJndW1lbnRzIHRvIHN0YWNrLlxuIFx0ICogRm9yIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHR3byBwb2ludGVycyB0aGUgc2VxdWVuY2Ugd2lsbCBiZTpcbkBAIC0zMDI5LDE2ICYjNDM7MzEwNywyMCBAQCBzdGF0aWMgdm9pZCBzYXZlX2FyZ3MoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1OCAqKnByb2csXG4gXHRcdFx0LyogY29weSBmdW5jdGlvbiBhcmd1bWVudHMgZnJvbSBvcmlnaW4gc3RhY2sgZnJhbWVcbiBcdFx0XHQgKiBpbnRvIGN1cnJlbnQgc3RhY2sgZnJhbWUuXG4gXHRcdFx0ICpcbi1cdFx0XHQgKiBUaGUgc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgYXJndW1lbnRzIG9uLXN0YWNrXG4tXHRcdFx0ICogaXM6XG4tXHRcdFx0ICogICByYnAgJiM0MzsgOChwdXNoIHJicCkgJiM0Mztcbi1cdFx0XHQgKiAgIDgocmV0dXJuIGFkZHIgb2Ygb3JpZ2luIGNhbGwpICYjNDM7XG4tXHRcdFx0ICogICA4KHJldHVybiBhZGRyIG9mIHRoZSBjYWxsZXIpXG4tXHRcdFx0ICogd2hpY2ggbWVhbnM6IHJicCAmIzQzOyAyNFxuJiM0MztcdFx0XHQgKiBUaGUgYXJndW1lbnRzIG9uLXN0YWNrIHN0YXJ0IGFib3ZlIHRoZSBzYXZlZCByYnBcbiYjNDM7XHRcdFx0ICogYW5kIHRoZSByZXR1cm4gYWRkcmVzc2VzOiB0d28gcmV0dXJuIGFkZHJlc3Nlc1xuJiM0MztcdFx0XHQgKiAob3JpZ2luIGNhbGwgYW5kIGNhbGxlcikgd2hlbiB0aGUgdHJhbXBvbGluZSBpc1xuJiM0MztcdFx0XHQgKiBlbnRlcmVkIHRocm91Z2ggdGhlIGZlbnRyeSBjYWxsLCBzbyByYnAgJiM0MzsgMjQsIGFuZFxuJiM0MztcdFx0XHQgKiBhIHNpbmdsZSBvbmUgd2hlbiBpdCBpcyBlbnRlcmVkIHdpdGggYSBqbXAgb3JcbiYjNDM7XHRcdFx0ICogY2FsbGVkIGluZGlyZWN0bHksIHNvIHJicCAmIzQzOyAxNi5cbiBcdFx0XHQgKi9cbiBcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBhcmdfcmVnczsgaiYjNDM7JiM0MzspIHtcbiBcdFx0XHRcdGVtaXRfbGR4KHByb2csIEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHX0ZQLFxuLVx0XHRcdFx0XHQgbnJfc3RhY2tfc2xvdHMgKiA4ICYjNDM7IDE2ICYjNDM7ICghdXNlX2ptcCkgKiA4KTtcbiYjNDM7XHRcdFx0XHRcdCBucl9zdGFja19zbG90cyAqIDggJiM0Mzsgc3RhY2tfYXJnc19vZmYpO1xuJiM0MztcdFx0XHRcdGlmIChhYXJncyBcdTAwMjZcdTAwMjYgKGFhcmdzLVx1MDAzZXNsb3RzIFx1MDAyNiBCSVQoc2xvdCkpKVxuJiM0MztcdFx0XHRcdFx0ZW1pdF9hcmVuYV9hcmdfY29udihwcm9nLCBCUEZfUkVHXzAsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIGFhcmdzLVx1MDAzZW51bGxhYmxlX3Nsb3RzIFx1MDAyNiBCSVQoc2xvdCksXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICh1MzIpYWFyZ3MtXHUwMDNla2Vybl92bV9zdGFydCk7XG4gXHRcdFx0XHRlbWl0X3N0eChwcm9nLCBCUEZfRFcsIEJQRl9SRUdfRlAsIEJQRl9SRUdfMCxcbiBcdFx0XHRcdFx0IC1zdGFja19zaXplKTtcbiBcbkBAIC0zMDQ2LDYgJiM0MzszMTI4LDcgQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcm9nLFxuIFx0XHRcdFx0XHRmaXJzdF9vZmYgPSBzdGFja19zaXplO1xuIFx0XHRcdFx0c3RhY2tfc2l6ZSAtPSA4O1xuIFx0XHRcdFx0bnJfc3RhY2tfc2xvdHMmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRcdHNsb3QmIzQzOyYjNDM7O1xuIFx0XHRcdH1cbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKiBPbmx5IGNvcHkgdGhlIGFyZ3VtZW50cyBvbi1zdGFjayB0byBjdXJyZW50XG5AQCAtMzA1NCwxNiAmIzQzOzMxMzcsMjQgQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcm9nLFxuIFx0XHRcdCAqL1xuIFx0XHRcdGlmIChmb3JfY2FsbF9vcmlnaW4pIHtcbiBcdFx0XHRcdG5yX3JlZ3MgJiM0Mzs9IGFyZ19yZWdzO1xuJiM0MztcdFx0XHRcdHNsb3QgJiM0Mzs9IGFyZ19yZWdzO1xuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0fVxuIFxuIFx0XHRcdC8qIGNvcHkgdGhlIGFyZ3VtZW50cyBmcm9tIHJlZ3MgaW50byBzdGFjayAqL1xuIFx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGFyZ19yZWdzOyBqJiM0MzsmIzQzOykge1xuLVx0XHRcdFx0ZW1pdF9zdHgocHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLFxuLVx0XHRcdFx0XHQgbnJfcmVncyA9PSA1ID8gWDg2X1JFR19SOSA6IEJQRl9SRUdfMSAmIzQzOyBucl9yZWdzLFxuLVx0XHRcdFx0XHQgLXN0YWNrX3NpemUpO1xuJiM0MztcdFx0XHRcdHUzMiBzcmMgPSBucl9yZWdzID09IDUgPyBYODZfUkVHX1I5IDogQlBGX1JFR18xICYjNDM7IG5yX3JlZ3M7XG4mIzQzO1xuJiM0MztcdFx0XHRcdGlmIChhYXJncyBcdTAwMjZcdTAwMjYgKGFhcmdzLVx1MDAzZXNsb3RzIFx1MDAyNiBCSVQoc2xvdCkpKSB7XG4mIzQzO1x0XHRcdFx0XHRlbWl0X2FyZW5hX2FyZ19jb252KHByb2csIHNyYyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgYWFyZ3MtXHUwMDNlbnVsbGFibGVfc2xvdHMgXHUwMDI2IEJJVChzbG90KSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgKHUzMilhYXJncy1cdTAwM2VrZXJuX3ZtX3N0YXJ0KTtcbiYjNDM7XHRcdFx0XHRcdHNyYyA9IEJQRl9SRUdfMDtcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHRcdFx0ZW1pdF9zdHgocHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLCBzcmMsIC1zdGFja19zaXplKTtcbiBcdFx0XHRcdHN0YWNrX3NpemUgLT0gODtcbiBcdFx0XHRcdG5yX3JlZ3MmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRcdHNsb3QmIzQzOyYjNDM7O1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0fVxuQEAgLTMzNTQsMTEgJiM0MzszNDQ1LDEzIEBAIHN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltXG4gXHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICpmZW50cnkgPSBcdTAwMjZ0bm9kZXNbQlBGX1RSQU1QX0ZFTlRSWV07XG4gXHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICpmZXhpdCA9IFx1MDAyNnRub2Rlc1tCUEZfVFJBTVBfRkVYSVRdO1xuIFx0c3RydWN0IGJwZl90cmFtcF9ub2RlcyAqZm1vZF9yZXQgPSBcdTAwMjZ0bm9kZXNbQlBGX1RSQU1QX01PRElGWV9SRVRVUk5dO1xuJiM0MztcdHN0cnVjdCBicGZfdHJhbXBfYXJlbmFfYXJncyBhYXJncztcbiBcdHZvaWQgKm9yaWdfY2FsbCA9IGZ1bmNfYWRkcjtcbiBcdGludCBjb29raWVfb2ZmLCBjb29raWVfY250O1xuIFx0dTggKipicmFuY2hlcyA9IE5VTEw7XG4gXHR1NjQgZnVuY19tZXRhO1xuIFx0dTggKnByb2c7XG4mIzQzO1x0Ym9vbCBoYXNfYWFyZ3M7XG4gXHRib29sIHNhdmVfcmV0O1xuIFxuIFx0LypcbkBAIC0zMzY5LDYgJiM0MzszNDYyLDggQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1cbiBcdFdBUk5fT05fT05DRSgoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0lORElSRUNUKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICAoZmxhZ3MgXHUwMDI2IH4oQlBGX1RSQU1QX0ZfSU5ESVJFQ1QgfCBCUEZfVFJBTVBfRl9SRVRfRkVOVFJZX1JFVCkpKTtcbiBcbiYjNDM7XHRoYXNfYWFyZ3MgPSBicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzKHRub2RlcywgZmxhZ3MsIFx1MDAyNmFhcmdzKTtcbiYjNDM7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtLVx1MDAzZW5yX2FyZ3M7IGkmIzQzOyYjNDM7KVxuIFx0XHRucl9yZWdzICYjNDM7PSAobS1cdTAwM2Vhcmdfc2l6ZVtpXSAmIzQzOyA3KSAvIDggLSAxO1xuIFxuQEAgLTM1MDMsNyAmIzQzOzM1OTgsOCBAQCBzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbVxuIFx0XHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KFx1MDAyNnByb2csIEJQRl9SRUdfMCwgLWlwX29mZiwgKGxvbmcpZnVuY19hZGRyKTtcbiBcdH1cbiBcbi1cdHNhdmVfYXJncyhtLCBcdTAwMjZwcm9nLCByZWdzX29mZiwgZmFsc2UsIGZsYWdzKTtcbiYjNDM7XHRzYXZlX2FyZ3MobSwgXHUwMDI2cHJvZywgcmVnc19vZmYsIGZhbHNlLCBmbGFncyxcbiYjNDM7XHRcdCAgaGFzX2FhcmdzID8gXHUwMDI2YWFyZ3MgOiBOVUxMKTtcbiBcbiBcdGlmIChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfQ0FMTF9PUklHKSB7XG4gXHRcdC8qIGFyZzE6IG1vdiByZGksIGltICovXG5AQCAtMzU0NSw3ICYjNDM7MzY0MSw3IEBAIHN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltXG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0NBTExfT1JJRykge1xuIFx0XHRyZXN0b3JlX3JlZ3MobSwgXHUwMDI2cHJvZywgcmVnc19vZmYpO1xuLVx0XHRzYXZlX2FyZ3MobSwgXHUwMDI2cHJvZywgYXJnX3N0YWNrX29mZiwgdHJ1ZSwgZmxhZ3MpO1xuJiM0MztcdFx0c2F2ZV9hcmdzKG0sIFx1MDAyNnByb2csIGFyZ19zdGFja19vZmYsIHRydWUsIGZsYWdzLCBOVUxMKTtcbiBcbiBcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9UQUlMX0NBTExfQ1RYKSB7XG4gXHRcdFx0LyogQmVmb3JlIGNhbGxpbmcgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLCBsb2FkIHRoZVxuQEAgLTQwNDYsNiAmIzQzOzQxNDIsMTEgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbiYjNDM7Ym9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgKmJwZl9hcmNoX3RleHRfY29weSh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IGxlbilcbiB7XG4gXHRpZiAodGV4dF9wb2tlX2NvcHkoZHN0LCBzcmMsIGxlbikgPT0gTlVMTClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggMzU2ODg0NTg3YWUxMS4uMmY2MDZjMzI1NjgwNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmhcbkBAIC0xMjEzLDYgJiM0MzsxMjEzLDEyIEBAIHN0cnVjdCBicGZfcHJvZ19vZmZsb2FkIHtcbiAvKiBUaGUgYXJndW1lbnQgaXMgc2lnbmVkLiAqL1xuICNkZWZpbmUgQlRGX0ZNT0RFTF9TSUdORURfQVJHXHRcdEJJVCgxKVxuIFxuJiM0MzsvKiBUaGUgYXJndW1lbnQgaXMgYW4gYXJlbmEgcG9pbnRlci4gKi9cbiYjNDM7I2RlZmluZSBCVEZfRk1PREVMX0FSRU5BX0FSR1x0XHRCSVQoMilcbiYjNDM7XG4mIzQzOy8qIFRoZSBhcmd1bWVudCBpcyBudWxsYWJsZS4gKi9cbiYjNDM7I2RlZmluZSBCVEZfRk1PREVMX05VTExBQkxFX0FSR1x0XHRCSVQoMylcbiYjNDM7XG4gc3RydWN0IGJ0Zl9mdW5jX21vZGVsIHtcbiBcdHU4IHJldF9zaXplO1xuIFx0dTggcmV0X2ZsYWdzO1xuQEAgLTEyODYsNiAmIzQzOzEyOTIsMjAgQEAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyB7XG4gXHRpbnQgbnJfbm9kZXM7XG4gfTtcbiBcbiYjNDM7LypcbiYjNDM7ICogV2hpY2ggOC1ieXRlIGN0eCBzbG90cyBvZiBhIHN0cnVjdF9vcHMgdHJhbXBvbGluZSBob2xkIGFyZW5hIGtlcm5lbFxuJiM0MzsgKiBwb2ludGVycyB0aGF0IHNhdmVfYXJncygpIGNvbnZlcnRzIHRvIHRoZSBhcmVuYSBwb2ludGVyIGZvcm0sXG4mIzQzOyAqIGN0eFtzbG90XSA9ICh1MzIpKGthZGRyIC0ga2Vybl92bV9zdGFydCkuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgYnBmX3RyYW1wX2FyZW5hX2FyZ3Mge1xuJiM0MztcdHUzMiBzbG90cztcbiYjNDM7XHR1MzIgbnVsbGFibGVfc2xvdHM7XHQvKiBzdWJzZXQgb2YgQHNsb3RzIHdoZXJlIE5VTEwgaXMgcHJlc2VydmVkICovXG4mIzQzO1x0dTY0IGtlcm5fdm1fc3RhcnQ7XG4mIzQzO307XG4mIzQzO1xuJiM0Mztib29sIGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3Moc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB1MzIgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgYnBmX3RyYW1wX2FyZW5hX2FyZ3MgKmFhcmdzKTtcbiYjNDM7XG4gc3RydWN0IGJwZl90cmFtcF9ydW5fY3R4O1xuIFxuIC8qIERpZmZlcmVudCB1c2UgY2FzZXMgZm9yIEJQRiB0cmFtcG9saW5lOlxuQEAgLTE2ODcsNiAmIzQzOzE3MDcsMTEgQEAgc3RydWN0IGJwZl9jdHhfYXJnX2F1eCB7XG4gXHR1MzIgYnRmX2lkO1xuIFx0dTMyIHJlZl9pZDtcbiBcdGJvb2wgcmVmY291bnRlZDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdlIGRvbiYjMzk7dCBlbmNvZGUgTlVMTC1uZXNzIGluIHRoZSB0eXBlIGZvciB0aGUgcHJvZ3JhbSwgYnV0IHN0aWxsIG5lZWRcbiYjNDM7XHQgKiB0byBkaXN0aW5ndWlzaCBpdCBmb3IgdGhlIHB1cnBvc2VzIG9mIHRlbGxpbmcgSklUcyB3aGF0IHNlcXVlbmNlIHRvIGVtaXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0Ym9vbCBhcmVuYV9udWxsYWJsZTtcbiB9O1xuIFxuIHN0cnVjdCBidGZfbW9kX3BhaXIge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5pbmRleCAzMmQ1Mjk3YzU1N2U1Li4zNmNlMzQwM2ZlNTk5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuQEAgLTExODMsNiAmIzQzOzExODMsNyBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZCk7XG4gYm9vbCBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKHZvaWQpO1xuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19rZnVuY19jYWxsKHZvaWQpO1xuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpO1xuJiM0Mztib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKTtcbiBib29sIGJwZl9qaXRfc3VwcG9ydHNfZmFyX2tmdW5jX2NhbGwodm9pZCk7XG4gYm9vbCBicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnModm9pZCk7XG4gYm9vbCBicGZfaml0X3N1cHBvcnRzX3B0cl94Y2hnKHZvaWQpO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYyBiL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY1xuaW5kZXggNGU3YTQ4YzAyYmU1Yy4uODI3YTYyMTZhNjIwMSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jXG5AQCAtMTQ3LDYgJiM0MzsxNDcsOCBAQCB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX2ltYWdlX2ZyZWUodm9pZCAqaW1hZ2UpXG4gXG4gI2RlZmluZSBNQVlCRV9OVUxMX1NVRkZJWCBcJiMzNDtfX251bGxhYmxlXCYjMzQ7XG4gI2RlZmluZSBSRUZDT1VOVEVEX1NVRkZJWCBcJiMzNDtfX3JlZlwmIzM0O1xuJiM0MzsjZGVmaW5lIEFSRU5BX1NVRkZJWCBcJiMzNDtfX2FyZW5hXCYjMzQ7XG4mIzQzOyNkZWZpbmUgQVJFTkFfTUFZQkVfTlVMTF9TVUZGSVggXCYjMzQ7X19hcmVuYV9udWxsYWJsZVwmIzM0O1xuIFxuIC8qIFByZXBhcmUgYXJndW1lbnQgaW5mbyBmb3IgZXZlcnkgbnVsbGFibGUgYXJndW1lbnQgb2YgYSBtZW1iZXIgb2YgYVxuICAqIHN0cnVjdF9vcHMgdHlwZS5cbkBAIC0xNTksNyAmIzQzOzE2MSw3IEBAIHZvaWQgYnBmX3N0cnVjdF9vcHNfaW1hZ2VfZnJlZSh2b2lkICppbWFnZSlcbiAgKiB0byBwcm92aWRlIGFuIGFycmF5IG9mIHN0cnVjdCBicGZfY3R4X2FyZ19hdXgsIHdoaWNoIGluIHR1cm4gcHJvdmlkZXNcbiAgKiB0aGUgaW5mb3JtYXRpb24gdGhhdCB1c2VkIGJ5IHRoZSB2ZXJpZmllciB0byBjaGVjayB0aGUgYXJndW1lbnRzIG9mIHRoZVxuICAqIEJQRiBzdHJ1Y3Rfb3BzIHByb2dyYW0gYXNzaWduZWQgdG8gdGhlIG1lbWJlci4gSGVyZSwgd2Ugb25seSBjYXJlIGFib3V0XG4tICogdGhlIGFyZ3VtZW50cyB0aGF0IGFyZSBtYXJrZWQgYXMgX19udWxsYWJsZS5cbiYjNDM7ICogdGhlIGFyZ3VtZW50cyB0aGF0IGFyZSBtYXJrZWQgYXMgX19udWxsYWJsZSwgX19yZWYgb3IgX19hcmVuYS5cbiAgKlxuICAqIFRoZSBhcnJheSBvZiBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4IGlzIGV2ZW50dWFsbHkgYXNzaWduZWQgdG9cbiAgKiBwcm9nLVx1MDAzZWF1eC1cdTAwM2VjdHhfYXJnX2luZm8gb2YgQlBGIHN0cnVjdF9vcHMgcHJvZ3JhbXMgYW5kIHBhc3NlZCB0byB0aGVcbkBAIC0xNzUsNyAmIzQzOzE3Nyw4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9hcmdfaW5mbyhzdHJ1Y3QgYnRmICpidGYsXG4gXHRcdFx0ICAgIHN0cnVjdCBicGZfc3RydWN0X29wc19hcmdfaW5mbyAqYXJnX2luZm8pXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICpzdHViX2Z1bmNfcHJvdG8sICpwb2ludGVkX3R5cGU7XG4tXHRib29sIGlzX251bGxhYmxlID0gZmFsc2UsIGlzX3JlZmNvdW50ZWQgPSBmYWxzZTtcbiYjNDM7XHRib29sIGlzX251bGxhYmxlID0gZmFsc2UsIGlzX3JlZmNvdW50ZWQgPSBmYWxzZSwgaXNfYXJlbmEgPSBmYWxzZTtcbiYjNDM7XHRib29sIGlzX2FyZW5hX251bGxhYmxlID0gZmFsc2U7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICpzdHViX2FyZ3MsICphcmdzO1xuIFx0c3RydWN0IGJwZl9jdHhfYXJnX2F1eCAqaW5mbywgKmluZm9fYnVmO1xuIFx0dTMyIG5hcmdzLCBhcmdfbm8sIGluZm9fY250ID0gMDtcbkBAIC0yMjYsMjYgJiM0MzsyMjksMzAgQEAgc3RhdGljIGludCBwcmVwYXJlX2FyZ19pbmZvKHN0cnVjdCBidGYgKmJ0ZixcbiBcdGluZm8gPSBpbmZvX2J1ZjtcbiBcdGZvciAoYXJnX25vID0gMDsgYXJnX25vIFx1MDAzYyBuYXJnczsgYXJnX25vJiM0MzsmIzQzOykge1xuIFx0XHQvKiBTa2lwIGFyZ3VtZW50cyB0aGF0IGlzIG5vdCBzdWZmaXhlZCB3aXRoXG4tXHRcdCAqIFwmIzM0O19fbnVsbGFibGUgb3IgX19yZWZcJiMzNDsuXG4mIzQzO1x0XHQgKiBcJiMzNDtfX251bGxhYmxlXCYjMzQ7LCBcJiMzNDtfX3JlZlwmIzM0OywgXCYjMzQ7X19hcmVuYVwmIzM0OyBvciBcJiMzNDtfX2FyZW5hX251bGxhYmxlXCYjMzQ7LlxuIFx0XHQgKi9cbiBcdFx0aXNfbnVsbGFibGUgPSBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgXHUwMDI2c3R1Yl9hcmdzW2FyZ19ub10sXG4gXHRcdFx0XHRcdFx0ICAgICBNQVlCRV9OVUxMX1NVRkZJWCk7XG4gXHRcdGlzX3JlZmNvdW50ZWQgPSBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgXHUwMDI2c3R1Yl9hcmdzW2FyZ19ub10sXG4gXHRcdFx0XHRcdFx0ICAgICAgIFJFRkNPVU5URURfU1VGRklYKTtcbiYjNDM7XHRcdGlzX2FyZW5hX251bGxhYmxlID0gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIFx1MDAyNnN0dWJfYXJnc1thcmdfbm9dLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIEFSRU5BX01BWUJFX05VTExfU1VGRklYKTtcbiYjNDM7XHRcdGlzX2FyZW5hID0gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIFx1MDAyNnN0dWJfYXJnc1thcmdfbm9dLCBBUkVOQV9TVUZGSVgpO1xuIFxuIFx0XHRpZiAoaXNfbnVsbGFibGUpXG4gXHRcdFx0c3VmZml4ID0gTUFZQkVfTlVMTF9TVUZGSVg7XG4gXHRcdGVsc2UgaWYgKGlzX3JlZmNvdW50ZWQpXG4gXHRcdFx0c3VmZml4ID0gUkVGQ09VTlRFRF9TVUZGSVg7XG4mIzQzO1x0XHRlbHNlIGlmIChpc19hcmVuYV9udWxsYWJsZSlcbiYjNDM7XHRcdFx0c3VmZml4ID0gQVJFTkFfTUFZQkVfTlVMTF9TVUZGSVg7XG4mIzQzO1x0XHRlbHNlIGlmIChpc19hcmVuYSlcbiYjNDM7XHRcdFx0c3VmZml4ID0gQVJFTkFfU1VGRklYO1xuIFx0XHRlbHNlXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdC8qIFNob3VsZCBiZSBhIHBvaW50ZXIgdG8gc3RydWN0ICovXG4tXHRcdHBvaW50ZWRfdHlwZSA9IGJ0Zl90eXBlX3Jlc29sdmVfcHRyKGJ0Zixcbi1cdFx0XHRcdFx0XHQgICAgYXJnc1thcmdfbm9dLnR5cGUsXG4tXHRcdFx0XHRcdFx0ICAgIFx1MDAyNmFyZ19idGZfaWQpO1xuLVx0XHRpZiAoIXBvaW50ZWRfdHlwZSB8fFxuLVx0XHQgICAgIWJ0Zl90eXBlX2lzX3N0cnVjdChwb2ludGVkX3R5cGUpKSB7XG4mIzQzO1x0XHQvKiBTaG91bGQgYmUgYSBwb2ludGVyIHRvIHN0cnVjdCwgb3IgYW55IHBvaW50ZXIgZm9yIF9fYXJlbmEvX19hcmVuYV9udWxsYWJsZSAqL1xuJiM0MztcdFx0cG9pbnRlZF90eXBlID0gYnRmX3R5cGVfcmVzb2x2ZV9wdHIoYnRmLCBhcmdzW2FyZ19ub10udHlwZSwgXHUwMDI2YXJnX2J0Zl9pZCk7XG4mIzQzO1x0XHRpZiAoIXBvaW50ZWRfdHlwZSB8fCAoIWlzX2FyZW5hIFx1MDAyNlx1MDAyNiAhaXNfYXJlbmFfbnVsbGFibGUgXHUwMDI2XHUwMDI2ICFidGZfdHlwZV9pc19zdHJ1Y3QocG9pbnRlZF90eXBlKSkpIHtcbiBcdFx0XHRwcl93YXJuKFwmIzM0O3N0dWIgZnVuY3Rpb24gJXMgaGFzICVzIHRhZ2dpbmcgdG8gYW4gdW5zdXBwb3J0ZWQgdHlwZVxcblwmIzM0OyxcbiBcdFx0XHRcdHN0dWJfZm5hbWUsIHN1ZmZpeCk7XG4gXHRcdFx0Z290byBlcnJfb3V0O1xuQEAgLTI3Myw2ICYjNDM7MjgwLDE1IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9hcmdfaW5mbyhzdHJ1Y3QgYnRmICpidGYsXG4gXHRcdH0gZWxzZSBpZiAoaXNfcmVmY291bnRlZCkge1xuIFx0XHRcdGluZm8tXHUwMDNlcmVnX3R5cGUgPSBQVFJfVFJVU1RFRCB8IFBUUl9UT19CVEZfSUQ7XG4gXHRcdFx0aW5mby1cdTAwM2VyZWZjb3VudGVkID0gdHJ1ZTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoaXNfYXJlbmEgfHwgaXNfYXJlbmFfbnVsbGFibGUpIHtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogQm90aCB0eXBlcyBnZXQgUFRSX1RPX0FSRU5BLiBJbiB2ZXJpZmllciBzdGF0ZSxcbiYjNDM7XHRcdFx0ICogUFRSX1RPX0FSRU5BIGVuY29tcGFzc2VzIHBvdGVudGlhbCBOVUxMIHZhbHVlcywgYnV0XG4mIzQzO1x0XHRcdCAqIHdlIGRvIG5vdCBmb3JjZSB0aGUgcHJvZ3JhbSB0byBjaGVjayBpdCwgb3IgbWFpbnRhaW5cbiYjNDM7XHRcdFx0ICogcHJlY2lzaW9uIGFyb3VuZCBpdCwgc2luY2UgaXQgaGFzIG5vIHNhZmV0eSBpbXBsaWNhdGlvbi5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGluZm8tXHUwMDNlcmVnX3R5cGUgPSBQVFJfVE9fQVJFTkE7XG4mIzQzO1x0XHRcdGluZm8tXHUwMDNlYXJlbmFfbnVsbGFibGUgPSBpc19hcmVuYV9udWxsYWJsZTtcbiBcdFx0fVxuIFxuIFx0XHRpbmZvJiM0MzsmIzQzOztcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuY1xuaW5kZXggNWU4YWM0NWNlNTZhZi4uZTMxZjU2ZjQwMWViZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYnRmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnRmLmNcbkBAIC02OTYzLDE1ICYjNDM7Njk2MywxOSBAQCBib29sIGJ0Zl9jdHhfYWNjZXNzKGludCBvZmYsIGludCBzaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4tXHQvKiBjaGVjayBmb3IgUFRSX1RPX1JET05MWV9CVUZfT1JfTlVMTCBvciBQVFJfVE9fUkRXUl9CVUZfT1JfTlVMTCAqL1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2hlY2sgZm9yIFBUUl9UT19SRE9OTFlfQlVGX09SX05VTEwsIFBUUl9UT19SRFdSX0JVRl9PUl9OVUxMIG9yXG4mIzQzO1x0ICogUFRSX1RPX0FSRU5BIChib3RoIG51bGxhYmxlIGFuZCBub24tbnVsbGFibGUgY2FzZXMpLlxuJiM0MztcdCAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJvZy1cdTAwM2VhdXgtXHUwMDNlY3R4X2FyZ19pbmZvX3NpemU7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGNvbnN0IHN0cnVjdCBicGZfY3R4X2FyZ19hdXggKmN0eF9hcmdfaW5mbyA9IFx1MDAyNnByb2ctXHUwMDNlYXV4LVx1MDAzZWN0eF9hcmdfaW5mb1tpXTtcbiBcdFx0dTMyIHR5cGUsIGZsYWc7XG4gXG4gXHRcdHR5cGUgPSBiYXNlX3R5cGUoY3R4X2FyZ19pbmZvLVx1MDAzZXJlZ190eXBlKTtcbiBcdFx0ZmxhZyA9IHR5cGVfZmxhZyhjdHhfYXJnX2luZm8tXHUwMDNlcmVnX3R5cGUpO1xuLVx0XHRpZiAoY3R4X2FyZ19pbmZvLVx1MDAzZW9mZnNldCA9PSBvZmYgXHUwMDI2XHUwMDI2IHR5cGUgPT0gUFRSX1RPX0JVRiBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIChmbGFnIFx1MDAyNiBQVFJfTUFZQkVfTlVMTCkpIHtcbiYjNDM7XHRcdGlmIChjdHhfYXJnX2luZm8tXHUwMDNlb2Zmc2V0ID09IG9mZiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAodHlwZSA9PSBQVFJfVE9fQVJFTkEgfHxcbiYjNDM7XHRcdCAgICAgKHR5cGUgPT0gUFRSX1RPX0JVRiBcdTAwMjZcdTAwMjYgKGZsYWcgXHUwMDI2IFBUUl9NQVlCRV9OVUxMKSkpKSB7XG4gXHRcdFx0aW5mby1cdTAwM2VyZWdfdHlwZSA9IGN0eF9hcmdfaW5mby1cdTAwM2VyZWdfdHlwZTtcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0fVxuQEAgLTc1NDEsNiAmIzQzOzc1NDUsMjIgQEAgc3RhdGljIHU4IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdClcbiBcdHJldHVybiBmbGFncztcbiB9XG4gXG4mIzQzO3N0YXRpYyB1OCBfX2dldF9hcmdfZm1vZGVsX2ZsYWdzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbiYjNDM7XHRcdFx0XHQgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnLFxuJiM0MztcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpXG4mIzQzO3tcbiYjNDM7XHR1OCBmbGFncyA9IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKHQpO1xuJiM0MztcbiYjNDM7XHRpZiAoYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCYjMzQ7X19hcmVuYVwmIzM0OykgfHxcbiYjNDM7XHQgICAgYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCYjMzQ7X19hcmVuYV9udWxsYWJsZVwmIzM0OykpXG4mIzQzO1x0XHRmbGFncyB8PSBCVEZfRk1PREVMX0FSRU5BX0FSRztcbiYjNDM7XHRpZiAoYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCYjMzQ7X19udWxsYWJsZVwmIzM0OykgfHxcbiYjNDM7XHQgICAgYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCYjMzQ7X19hcmVuYV9udWxsYWJsZVwmIzM0OykpXG4mIzQzO1x0XHRmbGFncyB8PSBCVEZfRk1PREVMX05VTExBQkxFX0FSRztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZsYWdzO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBidGZfZGlzdGlsbF9mdW5jX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4gXHRcdFx0ICAgc3RydWN0IGJ0ZiAqYnRmLFxuIFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqZnVuYyxcbkBAIC03NjA2LDcgJiM0Mzs3NjI2LDcgQEAgaW50IGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8oc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuIFx0XHRtLVx1MDAzZWFyZ19zaXplW2ldID0gcmV0O1xuLVx0XHRtLVx1MDAzZWFyZ19mbGFnc1tpXSA9IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKHQpO1xuJiM0MztcdFx0bS1cdTAwM2VhcmdfZmxhZ3NbaV0gPSBfX2dldF9hcmdfZm1vZGVsX2ZsYWdzKGJ0ZiwgXHUwMDI2YXJnc1tpXSwgdCk7XG4gXHR9XG4gXHRtLVx1MDAzZW5yX2FyZ3MgPSBuYXJncztcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY29yZS5jIGIva2VybmVsL2JwZi9jb3JlLmNcbmluZGV4IGUyMDc2NjY3YjI0NTEuLmEzZTFmYWUzMmVhY2UgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jb3JlLmNcbkBAIC0zMzA4LDYgJiM0MzszMzA4LDExIEBAIGJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiYjNDM7Ym9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gYm9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c19mYXJfa2Z1bmNfY2FsbCh2b2lkKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG5pbmRleCBlZDc5OTlhZDZjNjZjLi5kMmQ3YTI5MDQzNDVkIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG5AQCAtNTI5LDYgJiM0Mzs1MjksNTMgQEAgYnBmX3RyYW1wb2xpbmVfZ2V0X3Byb2dzKGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGludCAqdG90YWwsIGJvb2wgKmlwX2FcbiBcdHJldHVybiB0bm9kZXM7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJvZy1cdTAwM2VhdXgtXHUwMDNlY3R4X2FyZ19pbmZvX3NpemU7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0aWYgKGJhc2VfdHlwZShwcm9nLVx1MDAzZWF1eC1cdTAwM2VjdHhfYXJnX2luZm9baV0ucmVnX3R5cGUpID09IFBUUl9UT19BUkVOQSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDb2xsZWN0IHdoaWNoIGN0eCBzbG90cyBvZiBhIHN0cnVjdF9vcHMgdHJhbXBvbGluZSBob2xkIGFyZW5hIGtlcm5lbFxuJiM0MzsgKiBwb2ludGVycyB0aGF0IHNhdmVfYXJncygpIG11c3QgY29udmVydCB0byB0aGUgYXJlbmEgcG9pbnRlciBmb3JtLiBPbmx5XG4mIzQzOyAqIHRoZSBzdHJ1Y3Rfb3BzIGluZGlyZWN0IHRyYW1wb2xpbmUgY29udmVydHM6IGl0IGRpc3BhdGNoZXMgdG8gYSBzaW5nbGVcbiYjNDM7ICogcHJvZyB3aG9zZSBhcmVuYSBpcyBrbm93biBhdCBnZW5lcmF0aW9uIHRpbWUuIFJldHVybiBmYWxzZSB3aGVuIHRoZXJlXG4mIzQzOyAqIGlzIG5vdGhpbmcgdG8gY29udmVydC5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJncyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHUzMiBmbGFncyxcbiYjNDM7XHRcdFx0XHQgIHN0cnVjdCBicGZfdHJhbXBfYXJlbmFfYXJncyAqYWFyZ3MpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdG1lbXNldChhYXJncywgMCwgc2l6ZW9mKCphYXJncykpO1xuJiM0MztcbiYjNDM7XHRpZiAoIShmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIHx8XG4mIzQzO1x0ICAgIHRub2Rlc1tCUEZfVFJBTVBfRkVOVFJZXS5ucl9ub2RlcyAhPSAxKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRwcm9nID0gdG5vZGVzW0JQRl9UUkFNUF9GRU5UUlldLm5vZGVzWzBdLVx1MDAzZWxpbmstXHUwMDNlcHJvZztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwcm9nLVx1MDAzZWF1eC1cdTAwM2VjdHhfYXJnX2luZm9fc2l6ZTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBicGZfY3R4X2FyZ19hdXggKmluZm8gPSBcdTAwMjZwcm9nLVx1MDAzZWF1eC1cdTAwM2VjdHhfYXJnX2luZm9baV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKGJhc2VfdHlwZShpbmZvLVx1MDAzZXJlZ190eXBlKSAhPSBQVFJfVE9fQVJFTkEpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0YWFyZ3MtXHUwMDNlc2xvdHMgfD0gQklUKGluZm8tXHUwMDNlb2Zmc2V0IC8gOCk7XG4mIzQzO1x0XHRpZiAoaW5mby1cdTAwM2VhcmVuYV9udWxsYWJsZSlcbiYjNDM7XHRcdFx0YWFyZ3MtXHUwMDNlbnVsbGFibGVfc2xvdHMgfD0gQklUKGluZm8tXHUwMDNlb2Zmc2V0IC8gOCk7XG4mIzQzO1x0fVxuJiM0MztcdGlmICghYWFyZ3MtXHUwMDNlc2xvdHMpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXJlbmEpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGFhcmdzLVx1MDAzZWtlcm5fdm1fc3RhcnQgPSBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQocHJvZy1cdTAwM2VhdXgtXHUwMDNlYXJlbmEpO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGJwZl90cmFtcF9pbWFnZV9mcmVlKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltKVxuIHtcbiBcdGJwZl9pbWFnZV9rc3ltX2RlbChcdTAwMjZpbS1cdTAwM2Vrc3ltKTtcbkBAIC02ODUsNiAmIzQzOzczMiw3IEBAIHN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0XG4gXHR1MzIgb3JpZ19mbGFncyA9IHRyLVx1MDAzZWZsYWdzO1xuIFx0Ym9vbCBpcF9hcmcgPSBmYWxzZTtcbiBcdGludCBlcnIsIHRvdGFsLCBzaXplO1xuJiM0MztcdGludCBraW5kLCBpO1xuIFxuIFx0dG5vZGVzID0gYnBmX3RyYW1wb2xpbmVfZ2V0X3Byb2dzKHRyLCBcdTAwMjZ0b3RhbCwgXHUwMDI2aXBfYXJnKTtcbiBcdGlmIChJU19FUlIodG5vZGVzKSlcbkBAIC02OTUsNiAmIzQzOzc0MywyMiBAQCBzdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFyZW5hIGN0eCBhcmdzIGFyZSBjb252ZXJ0ZWQgb25seSBieSB0aGUgc3RydWN0X29wcyBpbmRpcmVjdFxuJiM0MztcdCAqIHRyYW1wb2xpbmUsIHdoaWNoIGRpc3BhdGNoZXMgdG8gYSBzaW5nbGUga25vd24gcHJvZy4gR2VuZXJpY1xuJiM0MztcdCAqIHRyYW1wb2xpbmVzIGNhbiBtaXggcHJvZ3Mgd2l0aCBkaWZmZXJlbnQgYXJlbmFzLCBzbyBubyBjb252ZXJzaW9uXG4mIzQzO1x0ICogaXMgcG9zc2libGUgaGVyZS4gTm90IHJlYWNoYWJsZSB0b2RheTogb25seSBzdHJ1Y3Rfb3BzIHByb2dzIGdldFxuJiM0MztcdCAqIGFyZW5hIGN0eCBhcmdzIGFuZCB0aGV5IG5ldmVyIHJpZGUgZ2VuZXJpYyB0cmFtcG9saW5lcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGtpbmQgPSAwOyBraW5kIFx1MDAzYyBCUEZfVFJBTVBfTUFYOyBraW5kJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdG5vZGVzW2tpbmRdLm5yX25vZGVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAoYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmcodG5vZGVzW2tpbmRdLm5vZGVzW2ldLVx1MDAzZWxpbmstXHUwMDNlcHJvZykpIHtcbiYjNDM7XHRcdFx0XHRlcnIgPSAtRU5PVFNVUFA7XG4mIzQzO1x0XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogY2xlYXIgYWxsIGJpdHMgZXhjZXB0IFNIQVJFX0lQTU9ESUZZIGFuZCBUQUlMX0NBTExfQ1RYICovXG4gXHR0ci1cdTAwM2VmbGFncyBcdTAwMjY9IChCUEZfVFJBTVBfRl9TSEFSRV9JUE1PRElGWSB8IEJQRl9UUkFNUF9GX1RBSUxfQ0FMTF9DVFgpO1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggYjI3NDAwNGZjY2ZkOS4uYzkxMjkzMzBkZWRlNiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMTA5MDcsNiAmIzQzOzEwOTA3LDE2IEBAIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19pcnFfZmxhZyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW1cbiBcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcJiMzNDtfX2lycV9mbGFnXCYjMzQ7KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19hcmVuYShjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcJiMzNDtfX2FyZW5hXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2FyZW5hX251bGxhYmxlKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwmIzM0O19fYXJlbmFfbnVsbGFibGVcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19zY2FsYXJfd2l0aF9uYW1lKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbiBcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcsXG4gXHRcdFx0XHRcdCAgY29uc3QgY2hhciAqbmFtZSlcbkBAIC0xMTEyNyw2ICYjNDM7MTExMzcsNyBAQCBlbnVtIGtmdW5jX3B0cl9hcmdfdHlwZSB7XG4gXHRLRl9BUkdfUFRSX1RPX0lSUV9GTEFHLFxuIFx0S0ZfQVJHX1BUUl9UT19SRVNfU1BJTl9MT0NLLFxuIFx0S0ZfQVJHX1BUUl9UT19UQVNLX1dPUkssXG4mIzQzO1x0S0ZfQVJHX1BUUl9UT19BUkVOQSxcbiB9O1xuIFxuIGVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcbkBAIC0xMTQxMiw3ICYjNDM7MTE0MjMsNiBAQCBnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuIFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnRmX3R5cGVfc3RyKHQpKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4tXG4gXHRyZWZfdCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKG1ldGEtXHUwMDNlYnRmLCB0LVx1MDAzZXR5cGUsIE5VTEwpO1xuIFx0cmVmX3RuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KG1ldGEtXHUwMDNlYnRmLCByZWZfdC1cdTAwM2VuYW1lX29mZik7XG4gXG5AQCAtMTE0NjEsNiAmIzQzOzExNDcxLDkgQEAgZ2V0X2tmdW5jX2FyZ190eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbiBcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX1JFU19TUElOX0xPQ0s7XG4gXHRlbHNlIGlmIChpc19rZnVuY19hcmdfY2FsbGJhY2soZW52LCBtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbiBcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0NBTExCQUNLO1xuJiM0MztcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19hcmVuYShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSB8fFxuJiM0MztcdFx0IGlzX2tmdW5jX2FyZ19hcmVuYV9udWxsYWJsZShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbiYjNDM7XHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19BUkVOQTtcbiBcdGVsc2UgaWYgKGFyZyAmIzQzOyAxIFx1MDAzYyBuYXJncyBcdTAwMjZcdTAwMjZcbiBcdFx0IChpc19rZnVuY19hcmdfbWVtX3NpemUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnICYjNDM7IDFdKSB8fFxuIFx0XHQgIGlzX2tmdW5jX2FyZ19jb25zdF9tZW1fc2l6ZShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmcgJiM0MzsgMV0pKSkge1xuQEAgLTEyMTU0LDYgJiM0MzsxMjE2NywzMSBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxuIFxuIFx0XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmdzW2ldLnR5cGUsIE5VTEwpO1xuIFxuJiM0MztcdFx0aWYgKGJhc2VfdHlwZShrZl9hcmdfdHlwZSkgPT0gS0ZfQVJHX1BUUl9UT19BUkVOQSkge1xuJiM0MztcdFx0XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XG4mIzQzO1x0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0pJVCBkb2VzIG5vdCBzdXBwb3J0IGtmdW5jICVzKCkgd2l0aCBhcmVuYSBwb2ludGVyIGFyZ3VtZW50c1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdGZ1bmNfbmFtZSk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRpZiAoIWVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VhcmVuYSkge1xuJiM0MztcdFx0XHRcdHZlcmJvc2UoZW52LFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7JXMgYXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRpZiAocmVnbm8gXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgYXJlbmEgcG9pbnRlciBjYW5ub3QgYmUgYSBzdGFjayBhcmd1bWVudFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0aWYgKHJlZy1cdTAwM2V0eXBlICE9IFBUUl9UT19BUkVOQSBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKSB7XG4mIzQzO1x0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyVzIGlzIG5vdCBhIHBvaW50ZXIgdG8gYXJlbmEgb3Igc2NhbGFyXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGlmIChidGZfdHlwZV9pc19wdHIodCkgXHUwMDI2XHUwMDI2IChicGZfcmVnaXN0ZXJfaXNfbnVsbChyZWcpIHx8IHR5cGVfbWF5X2JlX251bGwocmVnLVx1MDAzZXR5cGUpKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFpc19rZnVuY19hcmdfbnVsbGFibGUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbaV0pKSB7XG4gXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1Bvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCAlc1xcblwmIzM0OyxcbkBAIC0xODgwNyw2ICYjNDM7MTg4NDUsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCAqZnVuY19wcm90bztcbiBcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfYXJnX2luZm8gKmFyZ19pbmZvO1xuIFx0Y29uc3Qgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzICpzdF9vcHM7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyO1xuIFx0c3RydWN0IGJwZl9wcm9nICpwcm9nID0gZW52LVx1MDAzZXByb2c7XG5AQCAtMTg4ODUsMTAgJiM0MzsxODkyNCwyMyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0fVxuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3Rfb3BzX2Rlc2MtXHUwMDNlYXJnX2luZm9bbWVtYmVyX2lkeF0uY250OyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAoc3Rfb3BzX2Rlc2MtXHUwMDNlYXJnX2luZm9bbWVtYmVyX2lkeF0uaW5mb1tpXS5yZWZjb3VudGVkKSB7XG4mIzQzO1x0YXJnX2luZm8gPSBcdTAwMjZzdF9vcHNfZGVzYy1cdTAwM2VhcmdfaW5mb1ttZW1iZXJfaWR4XTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcmdfaW5mby1cdTAwM2VjbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4ICppbmZvID0gXHUwMDI2YXJnX2luZm8tXHUwMDNlaW5mb1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaW5mby1cdTAwM2VyZWZjb3VudGVkKVxuIFx0XHRcdGhhc19yZWZjb3VudGVkX2FyZyA9IHRydWU7XG4tXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRpZiAoYmFzZV90eXBlKGluZm8tXHUwMDNlcmVnX3R5cGUpID09IFBUUl9UT19BUkVOQSkge1xuJiM0MztcdFx0XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XG4mIzQzO1x0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0pJVCBkb2VzIG5vdCBzdXBwb3J0IGFyZW5hIGFyZ3VtZW50c1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRpZiAoIXByb2ctXHUwMDNlYXV4LVx1MDAzZWFyZW5hKSB7XG4mIzQzO1x0XHRcdFx0dmVyYm9zZShlbnYsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDthcmVuYSBhcmd1bWVudCBvZiAlcyByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0bW5hbWUpO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC0xODkwOSw4ICYjNDM7MTg5NjEsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfZnVuY19uYW1lID0gbW5hbWU7XG4gXHRlbnYtXHUwMDNlb3BzID0gc3Rfb3BzLVx1MDAzZXZlcmlmaWVyX29wcztcbiBcbi1cdHJldHVybiBicGZfcHJvZ19jdHhfYXJnX2luZm9faW5pdChwcm9nLCBzdF9vcHNfZGVzYy1cdTAwM2VhcmdfaW5mb1ttZW1iZXJfaWR4XS5pbmZvLFxuLVx0XHRcdFx0XHQgIHN0X29wc19kZXNjLVx1MDAzZWFyZ19pbmZvW21lbWJlcl9pZHhdLmNudCk7XG4mIzQzO1x0cmV0dXJuIGJwZl9wcm9nX2N0eF9hcmdfaW5mb19pbml0KHByb2csIGFyZ19pbmZvLVx1MDAzZWluZm8sIGFyZ19pbmZvLVx1MDAzZWNudCk7XG4gfVxuICNkZWZpbmUgU0VDVVJJVFlfUFJFRklYIFwmIzM0O3NlY3VyaXR5X1wmIzM0O1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9rZnVuYy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOWJlMTk1NjVmMGQ1M1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfa2Z1bmMuY1xuQEAgLTAsMCAmIzQzOzEsMTUgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2FyZW5hX2tmdW5jLnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGhlIHRlc3Qga2Z1bmNzIGxpdmUgaW4gYnBmX3Rlc3Rtb2QuIFJlc29sdmluZyBrZnVuY3MgYWdhaW5zdCBtb2R1bGVcbiYjNDM7ICogQlRGcyBuZWVkcyBDQVBfU1lTX0FETUlOLCBzbyBydW4gd2l0aCBmdWxsIGNhcGFiaWxpdGllcyBpbnN0ZWFkIG9mXG4mIzQzOyAqIHRocm91Z2ggdGhlIHZlcmlmaWVyIHRlc3RzJiMzOTsgY2FwYWJpbGl0eS1yZXN0cmljdGVkIHJ1bm5lci5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgdGVzdF9hcmVuYV9rZnVuYyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0UlVOX1RFU1RTKGFyZW5hX2tmdW5jKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2tmdW5jX2ppdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfa2Z1bmNfaml0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yMzU5Y2RlMjRjNDVkXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9rZnVuY19qaXQuY1xuQEAgLTAsMCAmIzQzOzEsMTMgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YXJlbmFfa2Z1bmNfaml0LnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUnVucyB3aXRoIGZ1bGwgY2FwYWJpbGl0aWVzOiByZXNvbHZpbmcgbW9kdWxlIGtmdW5jIGtzeW1zIHJlcXVpcmVzXG4mIzQzOyAqIENBUF9TWVNfQURNSU4sIHdoaWNoIHJ1bGVzIG91dCB0aGUgY2FwYWJpbGl0eS1yZXN0cmljdGVkIHJ1bm5lci5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgdGVzdF9hcmVuYV9rZnVuY19qaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdFJVTl9URVNUUyhhcmVuYV9rZnVuY19qaXQpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmIxZTM5ZGVmYTM4YWVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jXG5AQCAtMCwwICYjNDM7MSw3NCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c3RydWN0X29wc19hcmVuYS5za2VsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c3RydWN0X29wc19hcmVuYV9mYWlsLnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2lmIGRlZmluZWQoX194ODZfNjRfXylcbiYjNDM7LypcbiYjNDM7ICogQXR0YWNoIGNhbGxiYWNrcyB3aXRoIF9fYXJlbmEgYW5kIF9fYXJlbmFfbnVsbGFibGUgYXJndW1lbnRzIGFuZCBkcml2ZVxuJiM0MzsgKiB0aGVtIHRocm91Z2ggdGhlIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKigpIGtmdW5jcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGFyZW5hX2FyZyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzKTtcbiYjNDM7XHRzdHJ1Y3Qgc3RydWN0X29wc19hcmVuYSAqc2tlbDtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBOVUxMO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBzdHJ1Y3Rfb3BzX2FyZW5hX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3N0cnVjdF9vcHNfYXJlbmFfX29wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRsaW5rID0gYnBmX21hcF9fYXR0YWNoX3N0cnVjdF9vcHMoc2tlbC1cdTAwM2VtYXBzLnRlc3Rtb2RfYXJlbmEpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcJiMzNDthdHRhY2hfc3RydWN0X29wc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy50cmlnZ2VyKSxcbiYjNDM7XHRcdFx0XHQgICAgIFx1MDAyNnRvcHRzKTtcbiYjNDM7XHRBU1NFUlRfT0soZXJyLCBcJiMzNDt0ZXN0X3J1blwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHRvcHRzLnJldHZhbCwgMCwgXCYjMzQ7dHJpZ2dlcl9yZXR2YWxcJiMzNDspO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuJiM0MztcdHN0cnVjdF9vcHNfYXJlbmFfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEEgcHJvZ3JhbSB3aXRoIG5vIGFyZW5hIGNhbm5vdCBhdHRhY2ggdG8gYSBtZW1iZXIgd2l0aCBhbiBfX2FyZW5hXG4mIzQzOyAqIGFyZ3VtZW50LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgYXJlbmFfYXJnX2ZhaWwodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwgKnNrZWw7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWxfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoQVNTRVJUX0VSUl9QVFIoc2tlbCwgXCYjMzQ7c3RydWN0X29wc19hcmVuYV9mYWlsX19vcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c3RydWN0X29wc19hcmVuYV9mYWlsX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogU2VyaWFsaXplZCBiZWNhdXNlIGl0IGF0dGFjaGVzIHRoZSBzaW5nbGV0b24gYnBmX3Rlc3Rtb2Rfb3BzMywgd2hpY2hcbiYjNDM7ICogdGVzdF9zdHJ1Y3Rfb3BzX3ByaXZhdGVfc3RhY2sgYWxzbyBhdHRhY2hlczsgcmVnaXN0ZXJpbmcgaXQgdHdpY2UgZmFpbHNcbiYjNDM7ICogd2l0aCAtRUVYSVNULlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFyZW5hIHN0cnVjdF9vcHMgYXJndW1lbnRzIG5lZWQgSklUIHN1cHBvcnQsIGN1cnJlbnRseSB4ODYtNjQgb25seS5cbiYjNDM7XHQgKiBFbHNld2hlcmUgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGggXCYjMzQ7SklUIGRvZXMgbm90IHN1cHBvcnQgYXJlbmFcbiYjNDM7XHQgKiBhcmd1bWVudHNcJiMzNDssIHNvIHRoZSBwcm9ncmFtcyBjYW5ub3QgZXZlbiBsb2FkLlxuJiM0MztcdCAqL1xuJiM0MzsjaWYgZGVmaW5lZChfX3g4Nl82NF9fKVxuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2FyZW5hX2FyZ1wmIzM0OykpXG4mIzQzO1x0XHRhcmVuYV9hcmcoKTtcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDthcmVuYV9hcmdfZmFpbFwmIzM0OykpXG4mIzQzO1x0XHRhcmVuYV9hcmdfZmFpbCgpO1xuJiM0MzsjZWxzZVxuJiM0MztcdHRlc3RfX3NraXAoKTtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTVkNDgxNTE3OTdkYVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmNcbkBAIC0wLDAgJiM0MzsxLDI2MCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfbWlzYy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9leHBlcmltZW50YWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGZfYXJlbmFfY29tbW9uLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpO1xuJiM0MztcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcbiYjNDM7XHQvKiBwYWdlIDAgaG9zdHMgdGhlIGFyZW5hIGdsb2JhbCwgcGFnZSAxIGlzIGZvciBhbGxvY2F0aW9ucyAqL1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgMik7XG4mIzQzO30gYXJlbmEgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE9jY3VwaWVzIHBhZ2UgMCBzbyBubyBhbGxvY2F0aW9uIGxhbmRzIGF0IGFyZW5hIG9mZnNldCAwLCB3aGljaCB0aGVcbiYjNDM7ICogbnVsbGFibGUgdGVzdHMgYmVsb3cgbXVzdCBiZSBhYmxlIHRvIHRlbGwgYXBhcnQgZnJvbSBOVUxMLlxuJiM0MzsgKi9cbiYjNDM7dTY0IF9fYXJlbmEgYXJlbmFfcGFkO1xuJiM0MztcbiYjNDM7Lyogdm9sYXRpbGUgdG8gZm9yY2UgdGhlIHNjYWxhciByZWxvYWRzIGJlbG93ICovXG4mIzQzO3ZvbGF0aWxlIHU2NCBzdGFzaDtcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKVxuJiM0MztpbnQgYXJlbmFfYXJnX2Zvcm1zKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MzsjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVClcbiYjNDM7XHR1NjQgX19hcmVuYSAqdmFsO1xuJiM0MztcdHU2NCByZXQ7XG4mIzQzO1xuJiM0MztcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbiYjNDM7XHRpZiAoIXZhbClcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcbiYjNDM7XHQvKiBQVFJfVE9fQVJFTkEgYXJndW1lbnQgKi9cbiYjNDM7XHQqdmFsID0gNDE7XG4mIzQzO1x0cmV0ID0gYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KCh1NjQgKil2YWwpO1xuJiM0MztcdGlmIChyZXQgIT0gNDEgfHwgKnZhbCAhPSA0MilcbiYjNDM7XHRcdHJldHVybiAyO1xuJiM0MztcbiYjNDM7XHQvKiB0aGUgbG93IDMyIGJpdHMgYXMgYSBzY2FsYXIgKi9cbiYjNDM7XHRzdGFzaCA9ICh1MzIpKHU2NCl2YWw7XG4mIzQzO1x0cmV0ID0gYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KCh1NjQgKilzdGFzaCk7XG4mIzQzO1x0aWYgKHJldCAhPSA0MiB8fCAqdmFsICE9IDQzKVxuJiM0MztcdFx0cmV0dXJuIDM7XG4mIzQzO1xuJiM0MztcdC8qIHRoZSBmdWxsIHVzZXIgYWRkcmVzcyBhcyBhIHNjYWxhciAqL1xuJiM0MztcdHN0YXNoID0gKHU2NCl2YWw7XG4mIzQzO1x0YnBmX2FkZHJfc3BhY2VfY2FzdChzdGFzaCwgMSwgMCk7XG4mIzQzO1x0cmV0ID0gYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KCh1NjQgKilzdGFzaCk7XG4mIzQzO1x0aWYgKHJldCAhPSA0MyB8fCAqdmFsICE9IDQ0KVxuJiM0MztcdFx0cmV0dXJuIDQ7XG4mIzQzO1xuJiM0MztcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTtcbiYjNDM7I2VuZGlmXG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFBpbiB0aGUgcmViYXNlIHNlbWFudGljcyB1c2luZyB0aGUgY2FwdHVyZSBrZnVuY3MsIHdoaWNoIHJldHVybiB0aGUgcmF3XG4mIzQzOyAqIGFyZ3VtZW50IHZhbHVlOiBfX2FyZW5hIHJlYmFzZXMgdW5jb25kaXRpb25hbGx5LCBzbyB6ZXJvIGxvdyAzMiBiaXRzXG4mIzQzOyAqIGFycml2ZSBhcyB0aGUgYXJlbmEga2VybmVsIGJhc2UsIHdoaWxlIF9fYXJlbmFfbnVsbGFibGUgdHVybnMgdGhlbSBpbnRvXG4mIzQzOyAqIE5VTEwuXG4mIzQzOyAqL1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiYjNDM7aW50IGFyZW5hX2FyZ19yZWJhc2Uodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzOyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuJiM0MztcdHU2NCBfX2FyZW5hICp2YWw7XG4mIzQzO1x0dTY0IGJhc2UsIG9mZjtcbiYjNDM7XG4mIzQzO1x0dmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuJiM0MztcdGlmICghdmFsKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdGJhc2UgPSBicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QoTlVMTCk7XG4mIzQzO1x0aWYgKCFiYXNlKVxuJiM0MztcdFx0cmV0dXJuIDI7XG4mIzQzO1xuJiM0MztcdC8qIG9ubHkgdGhlIGxvdyAzMiBiaXRzIGNvbnRyaWJ1dGUgKi9cbiYjNDM7XHRzdGFzaCA9IDB4YmFkYzBmZmUwMDAwMDAwMDtcbiYjNDM7XHRpZiAoYnBmX2tmdW5jX2FyZW5hX2NhcF90ZXN0KCh1NjQgKilzdGFzaCkgIT0gYmFzZSlcbiYjNDM7XHRcdHJldHVybiAzO1xuJiM0MztcbiYjNDM7XHRvZmYgPSAodTMyKSh1NjQpdmFsO1xuJiM0MztcdGlmIChicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QoKHU2NCAqKXZhbCkgIT0gYmFzZSAmIzQzOyBvZmYpXG4mIzQzO1x0XHRyZXR1cm4gNDtcbiYjNDM7XG4mIzQzO1x0aWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdChOVUxMKSAhPSAwKVxuJiM0MztcdFx0cmV0dXJuIDU7XG4mIzQzO1xuJiM0MztcdHN0YXNoID0gMHhiYWRjMGZmZTAwMDAwMDAwO1xuJiM0MztcdGlmIChicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoKHU2NCAqKXN0YXNoKSAhPSAwKVxuJiM0MztcdFx0cmV0dXJuIDY7XG4mIzQzO1xuJiM0MztcdGlmIChicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoKHU2NCAqKXZhbCkgIT0gYmFzZSAmIzQzOyBvZmYpXG4mIzQzO1x0XHRyZXR1cm4gNztcbiYjNDM7XG4mIzQzO1x0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fYXJjaF94ODZfNjRcbiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApXG4mIzQzO2ludCBhcmVuYV9hcmdfbnVsbGFibGUodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzOyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuJiM0MztcdHU2NCBfX2FyZW5hICp2YWw7XG4mIzQzO1x0dTY0IHJldDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuJiM0MztcdGlmICghdmFsKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdCp2YWwgPSA0MTtcbiYjNDM7XHRyZXQgPSBicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QoKHU2NCAqKXZhbCk7XG4mIzQzO1x0aWYgKHJldCAhPSA0MSB8fCAqdmFsICE9IDQyKVxuJiM0MztcdFx0cmV0dXJuIDI7XG4mIzQzO1xuJiM0MztcdGlmIChicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QoTlVMTCkgIT0gMHhkZWFkYmVlZilcbiYjNDM7XHRcdHJldHVybiAzO1xuJiM0MztcbiYjNDM7XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XG4mIzQzOyNlbmRpZlxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiYjNDM7aW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MzsjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVClcbiYjNDM7XHR1NjQgX19hcmVuYSAqdmFsO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0dmFsWzBdID0gMTtcbiYjNDM7XHR2YWxbMV0gPSAyO1xuJiM0MztcdHZhbFsyXSA9IDQ7XG4mIzQzO1x0dmFsWzNdID0gODtcbiYjNDM7XHR2YWxbNF0gPSAxNjtcbiYjNDM7XG4mIzQzO1x0aWYgKGJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KCh1NjQgKilcdTAwMjZ2YWxbMF0sICh1NjQgKilcdTAwMjZ2YWxbMV0sXG4mIzQzO1x0XHRcdFx0ICAgICAgICh1NjQgKilcdTAwMjZ2YWxbMl0sICh1NjQgKilcdTAwMjZ2YWxbM10sXG4mIzQzO1x0XHRcdFx0ICAgICAgICh1NjQgKilcdTAwMjZ2YWxbNF0pICE9IDMxKVxuJiM0MztcdFx0cmV0dXJuIDI7XG4mIzQzO1x0aWYgKGJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KCh1NjQgKilcdTAwMjZ2YWxbMF0sICh1NjQgKilcdTAwMjZ2YWxbMV0sXG4mIzQzO1x0XHRcdFx0ICAgICAgICh1NjQgKilcdTAwMjZ2YWxbMl0sICh1NjQgKilcdTAwMjZ2YWxbM10sIE5VTEwpICE9IDE1KVxuJiM0MztcdFx0cmV0dXJuIDM7XG4mIzQzO1xuJiM0MztcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTtcbiYjNDM7I2VuZGlmXG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKVxuJiM0MztpbnQgYXJlbmFfYXJnX21peGVkKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MzsjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVClcbiYjNDM7XHR1NjQgX19hcmVuYSAqdmFsO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0dmFsWzBdID0gNztcbiYjNDM7XHR2YWxbMV0gPSA1O1xuJiM0MztcbiYjNDM7XHRpZiAoYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QoKHU2NCAqKVx1MDAyNnZhbFswXSwgTlVMTCkgIT0gNylcbiYjNDM7XHRcdHJldHVybiAyO1xuJiM0MztcbiYjNDM7XHRpZiAoYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QoKHU2NCAqKVx1MDAyNnZhbFswXSwgKHU2NCAqKVx1MDAyNnZhbFsxXSkgIT0gMTIpXG4mIzQzO1x0XHRyZXR1cm4gMztcbiYjNDM7XG4mIzQzO1x0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Lyoga2VybmVsLXNpZGUgZmF1bHRzIG9uIHVucG9wdWxhdGVkIHBhZ2VzIHJlY292ZXIgdmlhIHRoZSBzY3JhdGNoIHBhZ2UgKi9cbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fYXJjaF94ODZfNjRcbiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApXG4mIzQzO2ludCBhcmVuYV9hcmdfdW5wb3B1bGF0ZWQodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzOyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuJiM0MztcdHU2NCBfX2FyZW5hICp2YWw7XG4mIzQzO1xuJiM0MztcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbiYjNDM7XHRpZiAoIXZhbClcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcbiYjNDM7XHRzdGFzaCA9ICh1NjQpdmFsICYjNDM7IFBBR0VfU0laRTtcbiYjNDM7XHRicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoKHU2NCAqKXN0YXNoKTtcbiYjNDM7XG4mIzQzO1x0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fYXJjaF94ODZfNjRcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2FyZW5hIHBvaW50ZXIgcmVxdWlyZXMgYSBwcm9ncmFtIHdpdGggYW4gYXNzb2NpYXRlZCBhcmVuYVwmIzM0OylcbiYjNDM7aW50IGFyZW5hX2FyZ19ub19hcmVuYSh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoKHU2NCAqKTEpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7aXMgbm90IGEgcG9pbnRlciB0byBhcmVuYSBvciBzY2FsYXJcJiMzNDspXG4mIzQzO2ludCBhcmVuYV9hcmdfYmFkX3JlZyh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHR1NjQgYnVmID0gMDtcbiYjNDM7XG4mIzQzO1x0LyogdXNlIHRoZSBhcmVuYSBzbyB0aGUgcHJvZ3JhbSBwYXNzZXMgdGhlIGFyZW5hIHByZXNlbmNlIGNoZWNrICovXG4mIzQzO1x0YnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuJiM0MztcdGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdChcdTAwMjZidWYpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkgXHUwMDI2XHUwMDI2IFxcXG4mIzQzO1x0ZGVmaW5lZChfX0JQRl9GRUFUVVJFX1NUQUNLX0FSR1VNRU5UKVxuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7YXJlbmEgcG9pbnRlciBjYW5ub3QgYmUgYSBzdGFjayBhcmd1bWVudFwmIzM0OylcbiYjNDM7aW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4mIzQzO1x0YnBmX2tmdW5jX2FyZW5hX3N0YWNrX2FyZ190ZXN0KDEsIDIsIDMsIDQsIDUsICh1NjQgKikxKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX2Rlc2NyaXB0aW9uKFwmIzM0O2FyZW5hX2FyZ19zdGFjazogbm90IHN1cHBvcnRlZCwgZHVtbXkgdGVzdFwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO2ludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjg0NzQ3NjExNzI1ZjZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xuQEAgLTAsMCAmIzQzOzEsOTYgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVmVyaWZ5IHRoZSBKSVQtZW1pdHRlZCByZWJhc2Ugc2VxdWVuY2VzIGZvciBfX2FyZW5hIGFuZCBfX2FyZW5hX251bGxhYmxlXG4mIzQzOyAqIGtmdW5jIGFyZ3VtZW50cy4gVGhlIGNhcHR1cmUga2Z1bmNzIHRha2UgdGhlIGFyZ3VtZW50IHdpdGhvdXRcbiYjNDM7ICogZGVyZWZlcmVuY2luZyBpdCwgc28gdGhlc2UgdGVzdHMgcGluIG9ubHkgdGhlIGVtaXR0ZWQgY29kZS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgQlBGX05PX0tGVU5DX1BST1RPVFlQRVNcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX2V4cGVyaW1lbnRhbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZl9hcmVuYV9jb21tb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XG4mIzQzO1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpO1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4mIzQzO30gYXJlbmEgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbiYjNDM7XG4mIzQzOy8qIHZvbGF0aWxlIHRvIGZvcmNlIHRoZSBzY2FsYXIgcmVsb2FkcyBiZWxvdyAqL1xuJiM0Mzt2b2xhdGlsZSB1NjQgc3Rhc2g7XG4mIzQzO1xuJiM0MzsjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVClcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bW92bFx0JWVkaSwgJWVkaVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZHFcdCVyMTIsICVyZGlcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0Y2FsbHFcdHt7Lip9fVwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO2ludCBhcmVuYV9hcmdfaml0X3JlYmFzZSh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdGFzaCA9ICh1NjQpYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuJiM0MztcdGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCgodTY0ICopc3Rhc2gpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX2ppdGVkKFwmIzM0Oy4uLlwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG1vdmxcdCVlZGksICVlZGlcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHR0ZXN0bFx0JWVkaSwgJWVkaVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGplXHR7ey4qfX1cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRxXHQlcjEyLCAlcmRpXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7aW50IGFyZW5hX2FyZ19qaXRfbnVsbGFibGUodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3Rhc2ggPSAodTY0KWJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbiYjNDM7XHRicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoKHU2NCAqKXN0YXNoKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fYXJjaF94ODZfNjRcbiYjNDM7X19qaXRlZChcJiMzNDsuLi5cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRtb3ZsXHQlZWRpLCAlZWRpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkcVx0JXIxMiwgJXJkaVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG1vdmxcdCVlc2ksICVlc2lcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRxXHQlcjEyLCAlcnNpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bW92bFx0JWVkeCwgJWVkeFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZHFcdCVyMTIsICVyZHhcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRtb3ZsXHQlZWN4LCAlZWN4XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkcVx0JXIxMiwgJXJjeFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG1vdmxcdCVyOGQsICVyOGRcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHR0ZXN0bFx0JXI4ZCwgJXI4ZFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGplXHR7ey4qfX1cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRxXHQlcjEyLCAlcjhcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztpbnQgYXJlbmFfYXJnX2ppdF9hcmdzNSh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHR1NjQgX19hcmVuYSAqdmFsO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0dmFsWzBdID0gMTtcbiYjNDM7XHR2YWxbMV0gPSAyO1xuJiM0MztcdHZhbFsyXSA9IDQ7XG4mIzQzO1x0dmFsWzNdID0gODtcbiYjNDM7XHR2YWxbNF0gPSAxNjtcbiYjNDM7XG4mIzQzO1x0YnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QoKHU2NCAqKVx1MDAyNnZhbFswXSwgKHU2NCAqKVx1MDAyNnZhbFsxXSxcbiYjNDM7XHRcdFx0XHQgICAodTY0ICopXHUwMDI2dmFsWzJdLCAodTY0ICopXHUwMDI2dmFsWzNdLFxuJiM0MztcdFx0XHRcdCAgICh1NjQgKilcdTAwMjZ2YWxbNF0pO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QgKi9cbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iYTA0YzczZDhkOTY3XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jXG5AQCAtMCwwICYjNDM7MSwxMTUgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuJiM0MztcbiYjNDM7I2RlZmluZSBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFU1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX2V4cGVyaW1lbnRhbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZl9hcmVuYV9jb21tb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXCYjMzQ7XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiM0MztcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcbiYjNDM7XHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XG4mIzQzO1x0LyogcGFnZSAwIGhvc3RzIHRoZSBhcmVuYSBnbG9iYWxzLCBwYWdlIDEgaXMgZm9yIGFsbG9jYXRpb25zICovXG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAyKTtcbiYjNDM7fSBhcmVuYSBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7LyogYWxzbyBhc3NvY2lhdGVzIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgYXJlbmEgKi9cbiYjNDM7dTY0IF9fYXJlbmEgYXJlbmFfdG91Y2g7XG4mIzQzOy8qIHJhdyB2YWx1ZSBvZiB0aGUgbGFzdCBfX2FyZW5hIGN0eCBhcmd1bWVudCwgY2FwdHVyZWQgYnkgdGVzdF9hcmVuYV9jYiAqL1xuJiM0Mzt1NjQgX19hcmVuYSBjYl9wdHJfdmFsO1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N0cnVjdF9vcHMvdGVzdF9hcmVuYVwmIzM0OylcbiYjNDM7aW50IHRlc3RfYXJlbmFfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXG4mIzQzO3tcbiYjNDM7XHR1NjQgX19hcmVuYSAqcHRyID0gKHU2NCBfX2FyZW5hICopY3R4WzBdO1xuJiM0MztcbiYjNDM7XHRhcmVuYV90b3VjaCYjNDM7JiM0Mzs7XG4mIzQzO1x0Y2JfcHRyX3ZhbCA9IGN0eFswXTtcbiYjNDM7XHQqcHRyICYjNDM7PSAxO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3RydWN0X29wcy90ZXN0X2FyZW5hX251bGxhYmxlXCYjMzQ7KVxuJiM0MztpbnQgdGVzdF9hcmVuYV9udWxsYWJsZV9jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcbiYjNDM7e1xuJiM0MztcdHU2NCBfX2FyZW5hICpwdHIgPSAodTY0IF9fYXJlbmEgKiljdHhbMF07XG4mIzQzO1xuJiM0MztcdGFyZW5hX3RvdWNoJiM0MzsmIzQzOztcbiYjNDM7XHRpZiAoIXB0cilcbiYjNDM7XHRcdHJldHVybiAweGJlZTtcbiYjNDM7XHQqcHRyICYjNDM7PSAxO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3RydWN0X29wcy90ZXN0X2FyZW5hX3N0YWNrXCYjMzQ7KVxuJiM0MztpbnQgdGVzdF9hcmVuYV9zdGFja19jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcbiYjNDM7e1xuJiM0MztcdHU2NCBfX2FyZW5hICpwdHIgPSAodTY0IF9fYXJlbmEgKiljdHhbOF07XG4mIzQzO1xuJiM0MztcdGFyZW5hX3RvdWNoJiM0MzsmIzQzOztcbiYjNDM7XHQvKiBwaW4gdGhlIHNsb3QgbGF5b3V0OiB0aGUgbGVhZGluZyBhcmdzIGZpbGwgY3R4WzBdLi5jdHhbN10gKi9cbiYjNDM7XHRpZiAoY3R4WzBdICE9IDEgfHwgY3R4WzddICE9IDgpXG4mIzQzO1x0XHRyZXR1cm4gMHhiYWQ7XG4mIzQzO1x0KnB0ciAmIzQzOz0gMTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0Oy5zdHJ1Y3Rfb3BzLmxpbmtcJiMzNDspXG4mIzQzO3N0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHRlc3Rtb2RfYXJlbmEgPSB7XG4mIzQzO1x0LnRlc3RfYXJlbmEgPSAodm9pZCAqKXRlc3RfYXJlbmFfY2IsXG4mIzQzO1x0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSAodm9pZCAqKXRlc3RfYXJlbmFfbnVsbGFibGVfY2IsXG4mIzQzO1x0LnRlc3RfYXJlbmFfc3RhY2sgPSAodm9pZCAqKXRlc3RfYXJlbmFfc3RhY2tfY2IsXG4mIzQzO307XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7aW50IHRyaWdnZXIodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzOyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuJiM0MztcdHU2NCBfX2FyZW5hICp2YWw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuJiM0MztcdGlmICghdmFsKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdCp2YWwgPSA0MTtcbiYjNDM7XHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSgodTY0ICopdmFsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIDI7XG4mIzQzO1x0aWYgKCp2YWwgIT0gNDIpXG4mIzQzO1x0XHRyZXR1cm4gMztcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgY2FsbGJhY2sgbXVzdCBoYXZlIHNlZW4gZXhhY3RseSAodTMyKShrYWRkciAtIGtlcm5fdm1fc3RhcnQpLFxuJiM0MztcdCAqIHdoaWNoIGlzIHRoZSBhcmVuYSBvZmZzZXQgb2YgdmFsIHdpdGggdGhlIHVwcGVyIDMyIGJpdHMgY2xlYXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGNiX3B0cl92YWwgIT0gKHUzMikodTY0KXZhbClcbiYjNDM7XHRcdHJldHVybiA0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZSgodTY0ICopdmFsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIDU7XG4mIzQzO1x0aWYgKCp2YWwgIT0gNDMpXG4mIzQzO1x0XHRyZXR1cm4gNjtcbiYjNDM7XG4mIzQzO1x0LyogTlVMTCBzdXJ2aXZlcyB0aGUgbnVsbGFibGUga2Z1bmMgYW5kIHRoZSB0cmFtcG9saW5lIGFzIE5VTEwgKi9cbiYjNDM7XHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZShOVUxMKTtcbiYjNDM7XHRpZiAocmV0ICE9IDB4YmVlKVxuJiM0MztcdFx0cmV0dXJuIDc7XG4mIzQzO1xuJiM0MztcdC8qIHRoZSBhcmVuYSBwb2ludGVyIGlzIHN0YWNrLXBhc3NlZCBpbnRvIHRoZSB0cmFtcG9saW5lIGhlcmUgKi9cbiYjNDM7XHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaygodTY0ICopdmFsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIDg7XG4mIzQzO1x0aWYgKCp2YWwgIT0gNDQpXG4mIzQzO1x0XHRyZXR1cm4gOTtcbiYjNDM7XG4mIzQzO1x0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjFjMGVjNzI3ZDYzNzRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuY1xuQEAgLTAsMCAmIzQzOzEsMjAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0Oy4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFwmIzM0O1xuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjNDM7XG4mIzQzOy8qIE5vIGFyZW5hIGluIHRoZSBwcm9ncmFtOiBhdHRhY2hpbmcgdG8gdGVzdF9hcmVuYSBtdXN0IGJlIHJlamVjdGVkLiAqL1xuJiM0MztTRUMoXCYjMzQ7c3RydWN0X29wcy90ZXN0X2FyZW5hXCYjMzQ7KVxuJiM0MztpbnQgdGVzdF9hcmVuYV9ub19hcmVuYSh1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7LnN0cnVjdF9vcHMubGlua1wmIzM0OylcbiYjNDM7c3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYV9mYWlsID0ge1xuJiM0MztcdC50ZXN0X2FyZW5hID0gKHZvaWQgKil0ZXN0X2FyZW5hX25vX2FyZW5hLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG5pbmRleCBlYjBmOWI1ZTE4ZDg1Li5mZGVhYTU2MzU2YjUyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuQEAgLTIzNyw2ICYjNDM7MjM3LDU2IEBAIF9fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2NvbW1vbl90ZXN0KHZvaWQpXG4ge1xuIH1cbiBcbiYjNDM7X19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCh1NjQgKnZhbF9fYXJlbmEpXG4mIzQzO3tcbiYjNDM7XHR1NjQgb2xkO1xuJiM0MztcbiYjNDM7XHRvbGQgPSAqdmFsX19hcmVuYTtcbiYjNDM7XHQqdmFsX19hcmVuYSA9IG9sZCAmIzQzOyAxO1xuJiM0MztcdHJldHVybiBvbGQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QodTY0ICp2YWxfX2FyZW5hX251bGxhYmxlKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IG9sZDtcbiYjNDM7XG4mIzQzO1x0aWYgKCF2YWxfX2FyZW5hX251bGxhYmxlKVxuJiM0MztcdFx0cmV0dXJuIDB4ZGVhZGJlZWY7XG4mIzQzO1xuJiM0MztcdG9sZCA9ICp2YWxfX2FyZW5hX251bGxhYmxlO1xuJiM0MztcdCp2YWxfX2FyZW5hX251bGxhYmxlID0gb2xkICYjNDM7IDE7XG4mIzQzO1x0cmV0dXJuIG9sZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCh1NjQgKnZhbF9fYXJlbmEpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHU2NCl2YWxfX2FyZW5hO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KHU2NCAqdmFsX19hcmVuYV9udWxsYWJsZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAodTY0KXZhbF9fYXJlbmFfbnVsbGFibGU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdCh1NjQgKmFfX2FyZW5hLCB1NjQgKmJfX2FyZW5hLFxuJiM0MztcdFx0XHRcdFx0ICAgdTY0ICpjX19hcmVuYSwgdTY0ICpkX19hcmVuYSxcbiYjNDM7XHRcdFx0XHRcdCAgIHU2NCAqZV9fYXJlbmFfbnVsbGFibGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKmFfX2FyZW5hICYjNDM7ICpiX19hcmVuYSAmIzQzOyAqY19fYXJlbmEgJiM0MzsgKmRfX2FyZW5hICYjNDM7XG4mIzQzO1x0ICAgICAgIChlX19hcmVuYV9udWxsYWJsZSA/ICplX19hcmVuYV9udWxsYWJsZSA6IDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX3N0YWNrX2FyZ190ZXN0KHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLCB1NjQgZSxcbiYjNDM7XHRcdFx0XHRcdFx0dTY0ICpmX19hcmVuYSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBhICYjNDM7IGIgJiM0MzsgYyAmIzQzOyBkICYjNDM7IGUgJiM0MzsgKmZfX2FyZW5hO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QodTY0ICphX19hcmVuYSwgdTY0ICpiX19hcmVuYV9udWxsYWJsZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAqYV9fYXJlbmEgJiM0MzsgKGJfX2FyZW5hX251bGxhYmxlID8gKmJfX2FyZW5hX251bGxhYmxlIDogMCk7XG4mIzQzO31cbiYjNDM7XG4gX19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfZHlucHRyX3Rlc3Qoc3RydWN0IGJwZl9keW5wdHIgKnB0cixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2R5bnB0ciAqcHRyX19udWxsYWJsZSlcbiB7XG5AQCAtMzQ3LDkgJiM0MzszOTcsMjkgQEAgc3RhdGljIGludCBicGZfdGVzdG1vZF90ZXN0XzQodm9pZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hKHU2NCAqcHRyX19hcmVuYSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbnVsbGFibGUodTY0ICpwdHJfX2FyZW5hX251bGxhYmxlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9zdGFjayh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHU2NCBlLCB1NjQgZiwgdTY0IGcsIHU2NCBoLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgdTY0ICpwdHJfX2FyZW5hKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIF9fYnBmX3Rlc3Rtb2Rfb3BzMyA9IHtcbiBcdC50ZXN0XzEgPSBicGZfdGVzdG1vZF90ZXN0XzMsXG4gXHQudGVzdF8yID0gYnBmX3Rlc3Rtb2RfdGVzdF80LFxuJiM0MztcdC50ZXN0X2FyZW5hID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYSxcbiYjNDM7XHQudGVzdF9hcmVuYV9udWxsYWJsZSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbnVsbGFibGUsXG4mIzQzO1x0LnRlc3RfYXJlbmFfc3RhY2sgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrLFxuIH07XG4gXG4gc3RhdGljIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3Rfb3BzMyh2b2lkKVxuQEAgLTM2OCw2ICYjNDM7NDM4LDIxIEBAIF9fYnBmX2tmdW5jIHZvaWQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMih2b2lkKVxuIFx0c3Rfb3BzMy1cdTAwM2V0ZXN0XzIoKTtcbiB9XG4gXG4mIzQzO19fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSh1NjQgKnB0cl9fYXJlbmEpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gc3Rfb3BzMy1cdTAwM2V0ZXN0X2FyZW5hKHB0cl9fYXJlbmEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUodTY0ICpwdHJfX2FyZW5hX251bGxhYmxlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHN0X29wczMtXHUwMDNldGVzdF9hcmVuYV9udWxsYWJsZShwdHJfX2FyZW5hX251bGxhYmxlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKHU2NCAqcHRyX19hcmVuYSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzdF9vcHMzLVx1MDAzZXRlc3RfYXJlbmFfc3RhY2soMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgcHRyX19hcmVuYSk7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IGJwZl90ZXN0bW9kX2J0Zl90eXBlX3RhZ18xIHtcbiBcdGludCBhO1xuIH07XG5AQCAtNzU1LDYgJiM0Mzs4NDAsMTMgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxX25leHQsIEtGX0lURVJfTkVYVCB8IEtGX1JFVF9OVUxMKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl90ZXN0bW9kX3NlcV9kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxX3ZhbHVlKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY29tbW9uX3Rlc3QpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdClcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19hcmVuYV9zdGFja19hcmdfdGVzdClcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19hcmVuYV9taXhlZF90ZXN0KVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X21lbV9sZW5fcGFzczEpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19keW5wdHJfdGVzdClcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX25lc3RlZF9hY3F1aXJlX25vbnplcm9fb2Zmc2V0X3Rlc3QsIEtGX0FDUVVJUkUpXG5AQCAtNzcwLDYgJiM0Mzs4NjIsOSBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2RfY3R4X2NyZWF0ZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9jdHhfcmVsZWFzZSwgS0ZfUkVMRUFTRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMilcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKVxuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaylcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2dldF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7XG4gQlRGX0tGVU5DU19FTkQoYnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX2lkcylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFxuaW5kZXggODYzZmQxMGYxNjE5OS4uMzNmMmFmNWI3MDg1NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbkBAIC0xMDYsNiAmIzQzOzEwNiwxMiBAQCBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMiB7XG4gc3RydWN0IGJwZl90ZXN0bW9kX29wczMge1xuIFx0aW50ICgqdGVzdF8xKSh2b2lkKTtcbiBcdGludCAoKnRlc3RfMikodm9pZCk7XG4mIzQzO1x0LyogVXNlZCB0byB0ZXN0IGFyZW5hIHBvaW50ZXIgYXJndW1lbnRzLiAqL1xuJiM0MztcdGludCAoKnRlc3RfYXJlbmEpKHU2NCAqcHRyKTtcbiYjNDM7XHRpbnQgKCp0ZXN0X2FyZW5hX251bGxhYmxlKSh1NjQgKnB0cik7XG4mIzQzO1x0LyogZW5vdWdoIGxlYWRpbmcgYXJncyB0byBmb3JjZSBAcHRyIG9udG8gdGhlIHN0YWNrIG9uIHg4NiBhbmQgYXJtNjQgKi9cbiYjNDM7XHRpbnQgKCp0ZXN0X2FyZW5hX3N0YWNrKSh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCwgdTY0IGUsIHU2NCBmLFxuJiM0MztcdFx0XHRcdHU2NCBnLCB1NjQgaCwgdTY0ICpwdHIpO1xuIH07XG4gXG4gc3RydWN0IHN0X29wc19hcmdzIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxuaW5kZXggYzM2YmI5MTFkZWZhNy4uMWE3MmQwZmRhNTNjNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcbkBAIC05OCw2ICYjNDM7OTgsMTYgQEAgdm9pZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JlbGVhc2Uoc3RydWN0IHByb2dfdGVzdF9yZWZfa2Z1bmMgKnApIF9fa3N5bTtcbiB2b2lkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmVmKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwKSBfX2tzeW07XG4gXG4gdm9pZCBicGZfa2Z1bmNfY2FsbF90ZXN0X21lbV9sZW5fcGFzczEodm9pZCAqbWVtLCBpbnQgbGVuKSBfX2tzeW07XG4mIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdChfX3U2NCAqdmFsX19hcmVuYSkgX19rc3ltO1xuJiM0MztfX3U2NCBicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QoX191NjQgKnZhbF9fYXJlbmFfbnVsbGFibGUpIF9fa3N5bTtcbiYjNDM7X191NjQgYnBmX2tmdW5jX2FyZW5hX2NhcF90ZXN0KF9fdTY0ICp2YWxfX2FyZW5hKSBfX2tzeW07XG4mIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdChfX3U2NCAqdmFsX19hcmVuYV9udWxsYWJsZSkgX19rc3ltO1xuJiM0MztfX3U2NCBicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdChfX3U2NCAqYV9fYXJlbmEsIF9fdTY0ICpiX19hcmVuYSxcbiYjNDM7XHRcdFx0XHQgX191NjQgKmNfX2FyZW5hLCBfX3U2NCAqZF9fYXJlbmEsXG4mIzQzO1x0XHRcdFx0IF9fdTY0ICplX19hcmVuYV9udWxsYWJsZSkgX19rc3ltO1xuJiM0MztfX3U2NCBicGZfa2Z1bmNfYXJlbmFfc3RhY2tfYXJnX3Rlc3QoX191NjQgYSwgX191NjQgYiwgX191NjQgYywgX191NjQgZCwgX191NjQgZSxcbiYjNDM7XHRcdFx0XHQgICAgIF9fdTY0ICpmX19hcmVuYSkgX19rc3ltO1xuJiM0MztfX3U2NCBicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdChfX3U2NCAqYV9fYXJlbmEsIF9fdTY0ICpiX19hcmVuYV9udWxsYWJsZSkgX19rc3ltO1xuIGludCAqYnBmX2tmdW5jX2NhbGxfdGVzdF9nZXRfcmR3cl9tZW0oc3RydWN0IHByb2dfdGVzdF9yZWZfa2Z1bmMgKnAsIGNvbnN0IGludCByZHdyX2J1Zl9zaXplKSBfX2tzeW07XG4gaW50ICpicGZfa2Z1bmNfY2FsbF90ZXN0X2dldF9yZG9ubHlfbWVtKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwLCBjb25zdCBpbnQgcmRvbmx5X2J1Zl9zaXplKSBfX2tzeW07XG4gaW50ICpicGZfa2Z1bmNfY2FsbF90ZXN0X2FjcV9yZG9ubHlfbWVtKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwLCBjb25zdCBpbnQgcmRvbmx5X2J1Zl9zaXplKSBfX2tzeW07XG5AQCAtMTExLDYgJiM0MzsxMjEsOSBAQCB1MzIgYnBmX2tmdW5jX2NhbGxfdGVzdF9zdGF0aWNfdW51c2VkX2FyZyh1MzIgYXJnLCB1MzIgdW51c2VkKSBfX2tzeW07XG4gI2VuZGlmXG4gXG4gdm9pZCBicGZfdGVzdG1vZF90ZXN0X21vZF9rZnVuYyhpbnQgaSkgX19rc3ltO1xuJiM0MztpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEoX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTtcbiYjNDM7aW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKF9fdTY0ICpwdHJfX2FyZW5hX251bGxhYmxlKSBfX2tzeW07XG4mIzQzO2ludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayhfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltO1xuIFxuIF9fdTY0IGJwZl9rZnVuY19jYWxsX3Rlc3QxKHN0cnVjdCBzb2NrICpzaywgX191MzIgYSwgX191NjQgYixcbiBcdFx0XHRcdF9fdTMyIGMsIF9fdTY0IGQpIF9fa3N5bTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3MmIzM0OywKICAgICYjMzQ7YnRmX2Rpc3RpbGxfZnVuY19wcm90byYjMzQ7LAogICAgJiMzNDtidGZfY3R4X2FjY2VzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBfX2FyZW5hYCBhbmQgYF9fYXJlbmFfbnVsbGFibGVgIGFubm90YXRpb25zIGZvciBCUEYga2Z1bmNzIGFuZCBzdHJ1Y3Rfb3BzIGFyZ3VtZW50cy4gSXQgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciwgSklUIGNvbXBpbGVyICh4ODYpLCBhbmQgdHJhbXBvbGluZSBsb2dpYyB0byBzdXBwb3J0IGFyZW5hIHBvaW50ZXJzLCBpbmNsdWRpbmcgcmViYXNpbmcgdGhlbSB0byBrZXJuZWwgYWRkcmVzc2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbWVtb3J5IHNhZmV0eSBhbmQgY29ycmVjdCB2ZXJpZmljYXRpb24gb2YgYXJlbmEgcG9pbnRlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwMGFmYzY3NDZkYTBlYzkwMmJlYjY2MzY3YzQ1NzAxZmQwNjU4YjEwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMyAxNjoxMzowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0CmluZGV4IGNiZGU4NmQwODJjY2UuLjQ4Y2Y3NDZmOWZmOWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdApAQCAtMjc4LDYgJiM0MzsyNzgsNDMgQEAgQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6CiAgICAgICAgICAgICAgICAgLi4uCiAgICAgICAgIH0KIAomIzQzOzIuMy44IF9fYXJlbmEgYW5kIF9fYXJlbmFfbnVsbGFibGUgQW5ub3RhdGlvbnMKJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7CiYjNDM7Qm90aCBhbm5vdGF0aW9ucyBpbmRpY2F0ZSB0aGF0IHRoZSBwb2ludGVyIGFyZ3VtZW50IHBvaW50cyBpbnRvIHRoZQomIzQzO2NhbGxpbmcgcHJvZ3JhbSYjMzk7cyBhcmVuYS4gVGhlIEpJVCByZWJhc2VzIHRoZSB2YWx1ZSBhdCB0aGUgY2FsbCBzaXRlIHNvCiYjNDM7dGhlIGtmdW5jIHJlY2VpdmVzIGEgZGlyZWN0bHkgZGVyZWZlcmVuY2VhYmxlIGtlcm5lbCBhZGRyZXNzLCBzdWJqZWN0IHRvCiYjNDM7dGhlIGFjY2VzcyBydWxlcyBkZXNjcmliZWQgaW4gOnJlZjpgQlBGX2tmdW5jX2FyZW5hX2FjY2Vzc2AgKGF0IG1vc3QKJiM0MztgYEdVQVJEX1NaIC8gMmBgLCAzMiBLaUIsIHBhc3QgdGhlIHBvaW50ZXIgaW4gYSBzaW5nbGUgdW5jaGVja2VkIGFjY2VzcykuCiYjNDM7CiYjNDM7V2l0aCBgYF9fYXJlbmFgYCB0aGUgcmViYXNlIGlzIHVuY29uZGl0aW9uYWwgYW5kIHRoZSBhcmd1bWVudCBpcyBuZXZlcgomIzQzO05VTEw6IGEgdmFsdWUgd2hvc2UgbG93ZXIgMzIgYml0cyBhcmUgemVybyBhcnJpdmVzIGFzIHRoZSBhcmVuYSBiYXNlCiYjNDM7YWRkcmVzcyAoYXJlbmEgb2Zmc2V0IDApLiBUaGUga2Z1bmMgbXVzdCBub3QgY2hlY2sgdGhlIGFyZ3VtZW50IGZvciBOVUxMLgomIzQzO1dpdGggYGBfX2FyZW5hX251bGxhYmxlYGAgc3VjaCBhIHZhbHVlIGFycml2ZXMgYXMgTlVMTCBpbnN0ZWFkIGFuZCB0aGUKJiM0MztrZnVuYyBtdXN0IGNoZWNrIGJlZm9yZSBkZXJlZmVyZW5jaW5nLgomIzQzOwomIzQzO0FuIGV4YW1wbGUgaXMgZ2l2ZW4gYmVsb3c6OgomIzQzOwomIzQzOyAgICAgICAgX19icGZfa2Z1bmMgaW50IGJwZl9wcm9jZXNzX2l0ZW0oc3RydWN0IGl0ZW0gKml0ZW1fX2FyZW5hKQomIzQzOyAgICAgICAgewomIzQzOyAgICAgICAgLi4uCiYjNDM7ICAgICAgICB9CiYjNDM7CiYjNDM7Q2FsbGluZyBzdWNoIGEga2Z1bmMgcmVxdWlyZXMgdGhlIHByb2dyYW0gdG8gdXNlIGFuIGFyZW5hIG1hcCBhbmQgYSBKSVQgd2l0aAomIzQzO2FyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQpOyB2ZXJpZmljYXRpb24gZmFpbHMgb3RoZXJ3aXNlLiBUaGUKJiM0Mztwcm9ncmFtIGNhbiBwYXNzIGFueSB2YWx1ZSB3aXRob3V0IGNvbXByb21pc2luZyB0aGUga2VybmVsLiBBIHZhbHVlIHRoYXQgZG9lcwomIzQzO25vdCBwb2ludCBpbnRvIHRoZSBhcmVuYSBpcyBhIHByb2dyYW0gYnVnLgomIzQzOwomIzQzO1RoZSBzdWZmaXhlcyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgb24gdGhlIGFyZ3VtZW50cyBvZiBzdHJ1Y3Rfb3BzIHN0dWIKJiM0MztmdW5jdGlvbnMsIHdpdGggdGhlIGNvbnZlcnNpb24gcnVubmluZyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLiBUaGUKJiM0MztrZXJuZWwgY2FsbGVyIHBhc3NlcyB0aGUga2VybmVsIGFyZW5hIGFkZHJlc3MgYW5kIHRoZSB0cmFtcG9saW5lIGNvbnZlcnRzCiYjNDM7aXQgd2hpbGUgc2F2aW5nIHRoZSBhcmd1bWVudHMsIHNvIHRoZSBjYWxsYmFjayByZWNlaXZlcyBhbiBhcmVuYSBwb2ludGVyCiYjNDM7aXQgY2FuIGRlcmVmZXJlbmNlIGRpcmVjdGx5LiBXaXRoIGBgX19hcmVuYWBgIHRoZSBrZXJuZWwgY2FsbGVyIG11c3Qgbm90CiYjNDM7cGFzcyBOVUxMLiBXaXRoIGBgX19hcmVuYV9udWxsYWJsZWBgIGEgTlVMTCBrZXJuZWwgcG9pbnRlciBhcnJpdmVzIGFzIE5VTEwuCiYjNDM7SG93ZXZlciwgdGhlcmUgaXMgbm8gb2JsaWdhdGlvbiB0byBwcm92ZSB0byB0aGUgdmVyaWZpZXIgdGhhdCBzdWNoIGEgcG9pbnRlciBpcwomIzQzO25vbi1OVUxMIGJlZm9yZSB1c2UsIGluLWxpbmUgd2l0aCBleGlzdGluZyBzZW1hbnRpY3Mgb2YgYXJlbmEgcG9pbnRlcnMgdXNlZCBpbgomIzQzO2EgcHJvZ3JhbSAob3Igb2J0YWluZWQgZnJvbSBhbnkgb3RoZXIgc291cmNlKS4KJiM0MzsKIC4uIF9CUEZfa2Z1bmNfbm9kZWY6CiAKIDIuNCBVc2luZyBhbiBleGlzdGluZyBrZXJuZWwgZnVuY3Rpb24KQEAgLTUxNSw2ICYjNDM7NTUyLDggQEAgSW4gb3JkZXIgdG8gYWNjb21tb2RhdGUgc3VjaCByZXF1aXJlbWVudHMsIHRoZSB2ZXJpZmllciB3aWxsIGVuZm9yY2Ugc3RyaWN0CiBQVFJfVE9fQlRGX0lEIHR5cGUgbWF0Y2hpbmcgaWYgdHdvIHR5cGVzIGhhdmUgdGhlIGV4YWN0IHNhbWUgbmFtZSwgd2l0aCBvbmUKIGJlaW5nIHN1ZmZpeGVkIHdpdGggYGBfX19pbml0YGAuCiAKJiM0MzsuLiBfQlBGX2tmdW5jX2FyZW5hX2FjY2VzczoKJiM0MzsKIDIuOCBBY2Nlc3NpbmcgYXJlbmEgbWVtb3J5IHRocm91Z2gga2Z1bmMgYXJndW1lbnRzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKaW5kZXggMDFlN2NlNTY5YzFlZC4uNGIzZTVkOGE0YTU2MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwpAQCAtMTY3OCw2ICYjNDM7MTY3OCw1MCBAQCBzdGF0aWMgaW50IGVtaXRfc3BlY3RyZV9iaGJfYmFycmllcih1OCAqKnBwcm9nLCB1OCAqaXAsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJlYmFzZSB0aGUgX19hcmVuYSBhcmdzIG9mIGEga2Z1bmMgY2FsbCB0byBhcmVuYSBrZXJuZWwgYWRkcmVzc2VzLAomIzQzOyAqIHJOID0ga2Vybl92bV9zdGFydCAmIzQzOyAodTMyKXJOLCB3aXRoIFIxMiBob2xkaW5nIGtlcm5fdm1fc3RhcnQuIEEgbnVsbGFibGUKJiM0MzsgKiBhcmcgcHJlc2VydmVzIE5VTEwgYnkgc2tpcHBpbmcgdGhlIGFkZCwgdGVzdGVkIG9uIHRoZSB0cnVuY2F0ZWQgdmFsdWUgYXMKJiM0MzsgKiBhcmVuYSBOVUxMIGlzIG9mZnNldCAwLiBSZXR1cm4gdGhlIG51bWJlciBvZiBlbWl0dGVkIGJ5dGVzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZW1pdF9rZnVuY19hcmVuYV9hcmdzKHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csCiYjNDM7CQkJCSBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHU4ICoqcHByb2cpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKmZtOwomIzQzOwl1OCAqcHJvZyA9ICpwcHJvZzsKJiM0MzsJdTggKnN0YXJ0ID0gcHJvZzsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZtID0gYnBmX2ppdF9maW5kX2tmdW5jX21vZGVsKGJwZl9wcm9nLCBpbnNuKTsKJiM0MzsJaWYgKCFmbSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbWluX3QoaW50LCBmbS0mZ3Q7bnJfYXJncywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXU4IGZsYWdzID0gZm0tJmd0O2FyZ19mbGFnc1tpXTsKJiM0MzsJCXUzMiByZWcgPSBCUEZfUkVHXzEgJiM0MzsgaTsKJiM0MzsKJiM0MzsJCWlmICghKGZsYWdzICZhbXA7IEJURl9GTU9ERUxfQVJFTkFfQVJHKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChXQVJOX09OX09OQ0UoIWJwZl9wcm9nLSZndDthdXgtJmd0O2FyZW5hKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCS8qIG1vdiBlTiwgZU46IHRydW5jYXRlIGFuZCBjbGVhciB0aGUgdXBwZXIgMzIgYml0cyAqLwomIzQzOwkJZW1pdF9tb3ZfcmVnKCZhbXA7cHJvZywgZmFsc2UsIHJlZywgcmVnKTsKJiM0MzsJCWlmIChmbGFncyAmYW1wOyBCVEZfRk1PREVMX05VTExBQkxFX0FSRykgewomIzQzOwkJCS8qIHRlc3QgZU4sIGVOOyBqeiBvdmVyIHRoZSAzLWJ5dGUgYWRkICovCiYjNDM7CQkJbWF5YmVfZW1pdF9tb2QoJmFtcDtwcm9nLCByZWcsIHJlZywgZmFsc2UpOwomIzQzOwkJCUVNSVQyKDB4ODUsIGFkZF8ycmVnKDB4QzAsIHJlZywgcmVnKSk7CiYjNDM7CQkJRU1JVDIoWDg2X0pFLCAzKTsKJiM0MzsJCX0KJiM0MzsJCS8qIGFkZCByTiwgcjEyICovCiYjNDM7CQltYXliZV9lbWl0X21vZCgmYW1wO3Byb2csIHJlZywgWDg2X1JFR19SMTIsIHRydWUpOwomIzQzOwkJRU1JVDIoMHgwMSwgYWRkXzJyZWcoMHhDMCwgcmVnLCBYODZfUkVHX1IxMikpOwomIzQzOwl9CiYjNDM7CiYjNDM7CSpwcHJvZyA9IHByb2c7CiYjNDM7CXJldHVybiBwcm9nIC0gc3RhcnQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLAogCQkgIHU4ICpyd19pbWFnZSwgaW50IG9sZHByb2dsZW4sIHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LCBib29sIGptcF9wYWRkaW5nKQogewpAQCAtMjU4Myw2ICYjNDM7MjYyNywxMiBAQCBzdDoJCQlpbnNuX29mZiA9IGluc24tJmd0O29mZjsKIAkJCX0KIAkJCWlmICghaW1tMzIpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJaWYgKHNyY19yZWcgPT0gQlBGX1BTRVVET19LRlVOQ19DQUxMKSB7CiYjNDM7CQkJCWVyciA9IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhicGZfcHJvZywgaW5zbiwgJmFtcDtwcm9nKTsKJiM0MzsJCQkJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQkJCQlyZXR1cm4gZXJyOwomIzQzOwkJCQlpcCAmIzQzOz0gZXJyOwomIzQzOwkJCX0KIAkJCWlmIChwcml2X2ZyYW1lX3B0cikgewogCQkJCXB1c2hfcjkoJmFtcDtwcm9nKTsKIAkJCQlpcCAmIzQzOz0gMjsKQEAgLTI5OTMsMTIgJiM0MzszMDQzLDQwIEBAIHN0YXRpYyBpbnQgZ2V0X25yX3VzZWRfcmVncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0pCiAJcmV0dXJuIG5yX3VzZWRfcmVnczsKIH0KIAomIzQzOy8qCiYjNDM7ICogQ29udmVydCBhbiBhcmVuYSBrZXJuZWwgYWRkcmVzcyBpbnRvIHRoZSBhcmVuYSBwb2ludGVyIGZvcm0gb24gaXRzIHdheQomIzQzOyAqIGludG8gdGhlIEJQRiBjdHgsIHJheCA9ICh1MzIpKHNyYyAtIGtlcm5fdm1fc3RhcnQpLiBBIG51bGxhYmxlIGFyZwomIzQzOyAqIHByZXNlcnZlcyBOVUxMLCB0ZXN0ZWQgb24gdGhlIGZ1bGwgNjQtYml0IGtlcm5lbCBwb2ludGVyLiBUaGUgMzItYml0CiYjNDM7ICogc3VidHJhY3Rpb24gYm90aCB0cnVuY2F0ZXMgYW5kIGNsZWFycyB0aGUgdXBwZXIgaGFsZiwgc28gdGhlIHN0b3JlZAomIzQzOyAqIHZhbHVlIHNhdGlzZmllcyB0aGUgSklUIGludmFyaWFudCBmb3IgYXJlbmEgcG9pbnRlciByZWdpc3RlcnMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hcmVuYV9hcmdfY29udih1OCAqKnBwcm9nLCB1MzIgc3JjX3JlZywgYm9vbCBudWxsYWJsZSwgdTMyIGJhc2VfbG8pCiYjNDM7ewomIzQzOwl1OCAqcHJvZyA9ICpwcHJvZzsKJiM0MzsKJiM0MzsJaWYgKG51bGxhYmxlKSB7CiYjNDM7CQlpZiAoc3JjX3JlZyAhPSBCUEZfUkVHXzApCiYjNDM7CQkJZW1pdF9tb3ZfcmVnKCZhbXA7cHJvZywgdHJ1ZSwgQlBGX1JFR18wLCBzcmNfcmVnKTsKJiM0MzsJCS8qIHRlc3QgcmF4LCByYXg7IGp6IG92ZXIgdGhlIDUtYnl0ZSBzdWIgKi8KJiM0MzsJCUVNSVQzKDB4NDgsIDB4ODUsIDB4QzApOwomIzQzOwkJRU1JVDIoWDg2X0pFLCA1KTsKJiM0MzsJfSBlbHNlIGlmIChzcmNfcmVnICE9IEJQRl9SRUdfMCkgewomIzQzOwkJZW1pdF9tb3ZfcmVnKCZhbXA7cHJvZywgZmFsc2UsIEJQRl9SRUdfMCwgc3JjX3JlZyk7CiYjNDM7CX0KJiM0MzsJLyogc3ViIGVheCwgYmFzZV9sbyAqLwomIzQzOwlFTUlUMV9vZmYzMigweDJELCBiYXNlX2xvKTsKJiM0MzsKJiM0MzsJKnBwcm9nID0gcHJvZzsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBzYXZlX2FyZ3MoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1OCAqKnByb2csCi0JCSAgICAgIGludCBzdGFja19zaXplLCBib29sIGZvcl9jYWxsX29yaWdpbiwgdTMyIGZsYWdzKQomIzQzOwkJICAgICAgaW50IHN0YWNrX3NpemUsIGJvb2wgZm9yX2NhbGxfb3JpZ2luLCB1MzIgZmxhZ3MsCiYjNDM7CQkgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wX2FyZW5hX2FyZ3MgKmFhcmdzKQogewogCWludCBhcmdfcmVncywgZmlyc3Rfb2ZmID0gMCwgbnJfcmVncyA9IDAsIG5yX3N0YWNrX3Nsb3RzID0gMDsKIAlib29sIHVzZV9qbXAgPSBicGZfdHJhbXBvbGluZV91c2Vfam1wKGZsYWdzKTsKLQlpbnQgaSwgajsKJiM0MzsJaW50IHN0YWNrX2FyZ3Nfb2ZmID0gKHVzZV9qbXAgfHwgKGZsYWdzICZhbXA7IEJQRl9UUkFNUF9GX0lORElSRUNUKSkgPyAxNiA6IDI0OwomIzQzOwlpbnQgaSwgaiwgc2xvdCA9IDA7CiAKIAkvKiBTdG9yZSBmdW5jdGlvbiBhcmd1bWVudHMgdG8gc3RhY2suCiAJICogRm9yIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHR3byBwb2ludGVycyB0aGUgc2VxdWVuY2Ugd2lsbCBiZToKQEAgLTMwMjksMTYgJiM0MzszMTA3LDIwIEBAIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZywKIAkJCS8qIGNvcHkgZnVuY3Rpb24gYXJndW1lbnRzIGZyb20gb3JpZ2luIHN0YWNrIGZyYW1lCiAJCQkgKiBpbnRvIGN1cnJlbnQgc3RhY2sgZnJhbWUuCiAJCQkgKgotCQkJICogVGhlIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlIGFyZ3VtZW50cyBvbi1zdGFjawotCQkJICogaXM6Ci0JCQkgKiAgIHJicCAmIzQzOyA4KHB1c2ggcmJwKSAmIzQzOwotCQkJICogICA4KHJldHVybiBhZGRyIG9mIG9yaWdpbiBjYWxsKSAmIzQzOwotCQkJICogICA4KHJldHVybiBhZGRyIG9mIHRoZSBjYWxsZXIpCi0JCQkgKiB3aGljaCBtZWFuczogcmJwICYjNDM7IDI0CiYjNDM7CQkJICogVGhlIGFyZ3VtZW50cyBvbi1zdGFjayBzdGFydCBhYm92ZSB0aGUgc2F2ZWQgcmJwCiYjNDM7CQkJICogYW5kIHRoZSByZXR1cm4gYWRkcmVzc2VzOiB0d28gcmV0dXJuIGFkZHJlc3NlcwomIzQzOwkJCSAqIChvcmlnaW4gY2FsbCBhbmQgY2FsbGVyKSB3aGVuIHRoZSB0cmFtcG9saW5lIGlzCiYjNDM7CQkJICogZW50ZXJlZCB0aHJvdWdoIHRoZSBmZW50cnkgY2FsbCwgc28gcmJwICYjNDM7IDI0LCBhbmQKJiM0MzsJCQkgKiBhIHNpbmdsZSBvbmUgd2hlbiBpdCBpcyBlbnRlcmVkIHdpdGggYSBqbXAgb3IKJiM0MzsJCQkgKiBjYWxsZWQgaW5kaXJlY3RseSwgc28gcmJwICYjNDM7IDE2LgogCQkJICovCiAJCQlmb3IgKGogPSAwOyBqICZsdDsgYXJnX3JlZ3M7IGomIzQzOyYjNDM7KSB7CiAJCQkJZW1pdF9sZHgocHJvZywgQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfRlAsCi0JCQkJCSBucl9zdGFja19zbG90cyAqIDggJiM0MzsgMTYgJiM0MzsgKCF1c2Vfam1wKSAqIDgpOwomIzQzOwkJCQkJIG5yX3N0YWNrX3Nsb3RzICogOCAmIzQzOyBzdGFja19hcmdzX29mZik7CiYjNDM7CQkJCWlmIChhYXJncyAmYW1wOyZhbXA7IChhYXJncy0mZ3Q7c2xvdHMgJmFtcDsgQklUKHNsb3QpKSkKJiM0MzsJCQkJCWVtaXRfYXJlbmFfYXJnX2NvbnYocHJvZywgQlBGX1JFR18wLAomIzQzOwkJCQkJCQkgICAgYWFyZ3MtJmd0O251bGxhYmxlX3Nsb3RzICZhbXA7IEJJVChzbG90KSwKJiM0MzsJCQkJCQkJICAgICh1MzIpYWFyZ3MtJmd0O2tlcm5fdm1fc3RhcnQpOwogCQkJCWVtaXRfc3R4KHByb2csIEJQRl9EVywgQlBGX1JFR19GUCwgQlBGX1JFR18wLAogCQkJCQkgLXN0YWNrX3NpemUpOwogCkBAIC0zMDQ2LDYgJiM0MzszMTI4LDcgQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcm9nLAogCQkJCQlmaXJzdF9vZmYgPSBzdGFja19zaXplOwogCQkJCXN0YWNrX3NpemUgLT0gODsKIAkJCQlucl9zdGFja19zbG90cyYjNDM7JiM0Mzs7CiYjNDM7CQkJCXNsb3QmIzQzOyYjNDM7OwogCQkJfQogCQl9IGVsc2UgewogCQkJLyogT25seSBjb3B5IHRoZSBhcmd1bWVudHMgb24tc3RhY2sgdG8gY3VycmVudApAQCAtMzA1NCwxNiAmIzQzOzMxMzcsMjQgQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcm9nLAogCQkJICovCiAJCQlpZiAoZm9yX2NhbGxfb3JpZ2luKSB7CiAJCQkJbnJfcmVncyAmIzQzOz0gYXJnX3JlZ3M7CiYjNDM7CQkJCXNsb3QgJiM0Mzs9IGFyZ19yZWdzOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCiAJCQkvKiBjb3B5IHRoZSBhcmd1bWVudHMgZnJvbSByZWdzIGludG8gc3RhY2sgKi8KIAkJCWZvciAoaiA9IDA7IGogJmx0OyBhcmdfcmVnczsgaiYjNDM7JiM0MzspIHsKLQkJCQllbWl0X3N0eChwcm9nLCBCUEZfRFcsIEJQRl9SRUdfRlAsCi0JCQkJCSBucl9yZWdzID09IDUgPyBYODZfUkVHX1I5IDogQlBGX1JFR18xICYjNDM7IG5yX3JlZ3MsCi0JCQkJCSAtc3RhY2tfc2l6ZSk7CiYjNDM7CQkJCXUzMiBzcmMgPSBucl9yZWdzID09IDUgPyBYODZfUkVHX1I5IDogQlBGX1JFR18xICYjNDM7IG5yX3JlZ3M7CiYjNDM7CiYjNDM7CQkJCWlmIChhYXJncyAmYW1wOyZhbXA7IChhYXJncy0mZ3Q7c2xvdHMgJmFtcDsgQklUKHNsb3QpKSkgewomIzQzOwkJCQkJZW1pdF9hcmVuYV9hcmdfY29udihwcm9nLCBzcmMsCiYjNDM7CQkJCQkJCSAgICBhYXJncy0mZ3Q7bnVsbGFibGVfc2xvdHMgJmFtcDsgQklUKHNsb3QpLAomIzQzOwkJCQkJCQkgICAgKHUzMilhYXJncy0mZ3Q7a2Vybl92bV9zdGFydCk7CiYjNDM7CQkJCQlzcmMgPSBCUEZfUkVHXzA7CiYjNDM7CQkJCX0KJiM0MzsJCQkJZW1pdF9zdHgocHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLCBzcmMsIC1zdGFja19zaXplKTsKIAkJCQlzdGFja19zaXplIC09IDg7CiAJCQkJbnJfcmVncyYjNDM7JiM0Mzs7CiYjNDM7CQkJCXNsb3QmIzQzOyYjNDM7OwogCQkJfQogCQl9CiAJfQpAQCAtMzM1NCwxMSAmIzQzOzM0NDUsMTMgQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW0KIAlzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICpmZW50cnkgPSAmYW1wO3Rub2Rlc1tCUEZfVFJBTVBfRkVOVFJZXTsKIAlzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICpmZXhpdCA9ICZhbXA7dG5vZGVzW0JQRl9UUkFNUF9GRVhJVF07CiAJc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqZm1vZF9yZXQgPSAmYW1wO3Rub2Rlc1tCUEZfVFJBTVBfTU9ESUZZX1JFVFVSTl07CiYjNDM7CXN0cnVjdCBicGZfdHJhbXBfYXJlbmFfYXJncyBhYXJnczsKIAl2b2lkICpvcmlnX2NhbGwgPSBmdW5jX2FkZHI7CiAJaW50IGNvb2tpZV9vZmYsIGNvb2tpZV9jbnQ7CiAJdTggKipicmFuY2hlcyA9IE5VTEw7CiAJdTY0IGZ1bmNfbWV0YTsKIAl1OCAqcHJvZzsKJiM0MzsJYm9vbCBoYXNfYWFyZ3M7CiAJYm9vbCBzYXZlX3JldDsKIAogCS8qCkBAIC0zMzY5LDYgJiM0MzszNDYyLDggQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW0KIAlXQVJOX09OX09OQ0UoKGZsYWdzICZhbXA7IEJQRl9UUkFNUF9GX0lORElSRUNUKSAmYW1wOyZhbXA7CiAJCSAgICAgKGZsYWdzICZhbXA7IH4oQlBGX1RSQU1QX0ZfSU5ESVJFQ1QgfCBCUEZfVFJBTVBfRl9SRVRfRkVOVFJZX1JFVCkpKTsKIAomIzQzOwloYXNfYWFyZ3MgPSBicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzKHRub2RlcywgZmxhZ3MsICZhbXA7YWFyZ3MpOwomIzQzOwogCWZvciAoaSA9IDA7IGkgJmx0OyBtLSZndDtucl9hcmdzOyBpJiM0MzsmIzQzOykKIAkJbnJfcmVncyAmIzQzOz0gKG0tJmd0O2FyZ19zaXplW2ldICYjNDM7IDcpIC8gOCAtIDE7CiAKQEAgLTM1MDMsNyAmIzQzOzM1OTgsOCBAQCBzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbQogCQllbWl0X3N0b3JlX3N0YWNrX2ltbTY0KCZhbXA7cHJvZywgQlBGX1JFR18wLCAtaXBfb2ZmLCAobG9uZylmdW5jX2FkZHIpOwogCX0KIAotCXNhdmVfYXJncyhtLCAmYW1wO3Byb2csIHJlZ3Nfb2ZmLCBmYWxzZSwgZmxhZ3MpOwomIzQzOwlzYXZlX2FyZ3MobSwgJmFtcDtwcm9nLCByZWdzX29mZiwgZmFsc2UsIGZsYWdzLAomIzQzOwkJICBoYXNfYWFyZ3MgPyAmYW1wO2FhcmdzIDogTlVMTCk7CiAKIAlpZiAoZmxhZ3MgJmFtcDsgQlBGX1RSQU1QX0ZfQ0FMTF9PUklHKSB7CiAJCS8qIGFyZzE6IG1vdiByZGksIGltICovCkBAIC0zNTQ1LDcgJiM0MzszNjQxLDcgQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW0KIAogCWlmIChmbGFncyAmYW1wOyBCUEZfVFJBTVBfRl9DQUxMX09SSUcpIHsKIAkJcmVzdG9yZV9yZWdzKG0sICZhbXA7cHJvZywgcmVnc19vZmYpOwotCQlzYXZlX2FyZ3MobSwgJmFtcDtwcm9nLCBhcmdfc3RhY2tfb2ZmLCB0cnVlLCBmbGFncyk7CiYjNDM7CQlzYXZlX2FyZ3MobSwgJmFtcDtwcm9nLCBhcmdfc3RhY2tfb2ZmLCB0cnVlLCBmbGFncywgTlVMTCk7CiAKIAkJaWYgKGZsYWdzICZhbXA7IEJQRl9UUkFNUF9GX1RBSUxfQ0FMTF9DVFgpIHsKIAkJCS8qIEJlZm9yZSBjYWxsaW5nIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiwgbG9hZCB0aGUKQEAgLTQwNDYsNiAmIzQzOzQxNDIsMTEgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO2Jvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiB2b2lkICpicGZfYXJjaF90ZXh0X2NvcHkodm9pZCAqZHN0LCB2b2lkICpzcmMsIHNpemVfdCBsZW4pCiB7CiAJaWYgKHRleHRfcG9rZV9jb3B5KGRzdCwgc3JjLCBsZW4pID09IE5VTEwpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaAppbmRleCAzNTY4ODQ1ODdhZTExLi4yZjYwNmMzMjU2ODA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmgKQEAgLTEyMTMsNiAmIzQzOzEyMTMsMTIgQEAgc3RydWN0IGJwZl9wcm9nX29mZmxvYWQgewogLyogVGhlIGFyZ3VtZW50IGlzIHNpZ25lZC4gKi8KICNkZWZpbmUgQlRGX0ZNT0RFTF9TSUdORURfQVJHCQlCSVQoMSkKIAomIzQzOy8qIFRoZSBhcmd1bWVudCBpcyBhbiBhcmVuYSBwb2ludGVyLiAqLwomIzQzOyNkZWZpbmUgQlRGX0ZNT0RFTF9BUkVOQV9BUkcJCUJJVCgyKQomIzQzOwomIzQzOy8qIFRoZSBhcmd1bWVudCBpcyBudWxsYWJsZS4gKi8KJiM0MzsjZGVmaW5lIEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHCQlCSVQoMykKJiM0MzsKIHN0cnVjdCBidGZfZnVuY19tb2RlbCB7CiAJdTggcmV0X3NpemU7CiAJdTggcmV0X2ZsYWdzOwpAQCAtMTI4Niw2ICYjNDM7MTI5MiwyMCBAQCBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzIHsKIAlpbnQgbnJfbm9kZXM7CiB9OwogCiYjNDM7LyoKJiM0MzsgKiBXaGljaCA4LWJ5dGUgY3R4IHNsb3RzIG9mIGEgc3RydWN0X29wcyB0cmFtcG9saW5lIGhvbGQgYXJlbmEga2VybmVsCiYjNDM7ICogcG9pbnRlcnMgdGhhdCBzYXZlX2FyZ3MoKSBjb252ZXJ0cyB0byB0aGUgYXJlbmEgcG9pbnRlciBmb3JtLAomIzQzOyAqIGN0eFtzbG90XSA9ICh1MzIpKGthZGRyIC0ga2Vybl92bV9zdGFydCkuCiYjNDM7ICovCiYjNDM7c3RydWN0IGJwZl90cmFtcF9hcmVuYV9hcmdzIHsKJiM0MzsJdTMyIHNsb3RzOwomIzQzOwl1MzIgbnVsbGFibGVfc2xvdHM7CS8qIHN1YnNldCBvZiBAc2xvdHMgd2hlcmUgTlVMTCBpcyBwcmVzZXJ2ZWQgKi8KJiM0MzsJdTY0IGtlcm5fdm1fc3RhcnQ7CiYjNDM7fTsKJiM0MzsKJiM0Mztib29sIGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3Moc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB1MzIgZmxhZ3MsCiYjNDM7CQkJCSAgc3RydWN0IGJwZl90cmFtcF9hcmVuYV9hcmdzICphYXJncyk7CiYjNDM7CiBzdHJ1Y3QgYnBmX3RyYW1wX3J1bl9jdHg7CiAKIC8qIERpZmZlcmVudCB1c2UgY2FzZXMgZm9yIEJQRiB0cmFtcG9saW5lOgpAQCAtMTY4Nyw2ICYjNDM7MTcwNywxMSBAQCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4IHsKIAl1MzIgYnRmX2lkOwogCXUzMiByZWZfaWQ7CiAJYm9vbCByZWZjb3VudGVkOwomIzQzOwkvKgomIzQzOwkgKiBXZSBkb24mIzM5O3QgZW5jb2RlIE5VTEwtbmVzcyBpbiB0aGUgdHlwZSBmb3IgdGhlIHByb2dyYW0sIGJ1dCBzdGlsbCBuZWVkCiYjNDM7CSAqIHRvIGRpc3Rpbmd1aXNoIGl0IGZvciB0aGUgcHVycG9zZXMgb2YgdGVsbGluZyBKSVRzIHdoYXQgc2VxdWVuY2UgdG8gZW1pdC4KJiM0MzsJICovCiYjNDM7CWJvb2wgYXJlbmFfbnVsbGFibGU7CiB9OwogCiBzdHJ1Y3QgYnRmX21vZF9wYWlyIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCmluZGV4IDMyZDUyOTdjNTU3ZTUuLjM2Y2UzNDAzZmU1OTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaApAQCAtMTE4Myw2ICYjNDM7MTE4Myw3IEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdWJwcm9nX3RhaWxjYWxscyh2b2lkKTsKIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKTsKIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19rZnVuY19jYWxsKHZvaWQpOwogYm9vbCBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZCk7CiYjNDM7Ym9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZCk7CiBib29sIGJwZl9qaXRfc3VwcG9ydHNfZmFyX2tmdW5jX2NhbGwodm9pZCk7CiBib29sIGJwZl9qaXRfc3VwcG9ydHNfZXhjZXB0aW9ucyh2b2lkKTsKIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19wdHJfeGNoZyh2b2lkKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYyBiL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYwppbmRleCA0ZTdhNDhjMDJiZTVjLi44MjdhNjIxNmE2MjAxIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jCkBAIC0xNDcsNiAmIzQzOzE0Nyw4IEBAIHZvaWQgYnBmX3N0cnVjdF9vcHNfaW1hZ2VfZnJlZSh2b2lkICppbWFnZSkKIAogI2RlZmluZSBNQVlCRV9OVUxMX1NVRkZJWCAmIzM0O19fbnVsbGFibGUmIzM0OwogI2RlZmluZSBSRUZDT1VOVEVEX1NVRkZJWCAmIzM0O19fcmVmJiMzNDsKJiM0MzsjZGVmaW5lIEFSRU5BX1NVRkZJWCAmIzM0O19fYXJlbmEmIzM0OwomIzQzOyNkZWZpbmUgQVJFTkFfTUFZQkVfTlVMTF9TVUZGSVggJiMzNDtfX2FyZW5hX251bGxhYmxlJiMzNDsKIAogLyogUHJlcGFyZSBhcmd1bWVudCBpbmZvIGZvciBldmVyeSBudWxsYWJsZSBhcmd1bWVudCBvZiBhIG1lbWJlciBvZiBhCiAgKiBzdHJ1Y3Rfb3BzIHR5cGUuCkBAIC0xNTksNyAmIzQzOzE2MSw3IEBAIHZvaWQgYnBmX3N0cnVjdF9vcHNfaW1hZ2VfZnJlZSh2b2lkICppbWFnZSkKICAqIHRvIHByb3ZpZGUgYW4gYXJyYXkgb2Ygc3RydWN0IGJwZl9jdHhfYXJnX2F1eCwgd2hpY2ggaW4gdHVybiBwcm92aWRlcwogICogdGhlIGluZm9ybWF0aW9uIHRoYXQgdXNlZCBieSB0aGUgdmVyaWZpZXIgdG8gY2hlY2sgdGhlIGFyZ3VtZW50cyBvZiB0aGUKICAqIEJQRiBzdHJ1Y3Rfb3BzIHByb2dyYW0gYXNzaWduZWQgdG8gdGhlIG1lbWJlci4gSGVyZSwgd2Ugb25seSBjYXJlIGFib3V0Ci0gKiB0aGUgYXJndW1lbnRzIHRoYXQgYXJlIG1hcmtlZCBhcyBfX251bGxhYmxlLgomIzQzOyAqIHRoZSBhcmd1bWVudHMgdGhhdCBhcmUgbWFya2VkIGFzIF9fbnVsbGFibGUsIF9fcmVmIG9yIF9fYXJlbmEuCiAgKgogICogVGhlIGFycmF5IG9mIHN0cnVjdCBicGZfY3R4X2FyZ19hdXggaXMgZXZlbnR1YWxseSBhc3NpZ25lZCB0bwogICogcHJvZy0mZ3Q7YXV4LSZndDtjdHhfYXJnX2luZm8gb2YgQlBGIHN0cnVjdF9vcHMgcHJvZ3JhbXMgYW5kIHBhc3NlZCB0byB0aGUKQEAgLTE3NSw3ICYjNDM7MTc3LDggQEAgc3RhdGljIGludCBwcmVwYXJlX2FyZ19pbmZvKHN0cnVjdCBidGYgKmJ0ZiwKIAkJCSAgICBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfYXJnX2luZm8gKmFyZ19pbmZvKQogewogCWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqc3R1Yl9mdW5jX3Byb3RvLCAqcG9pbnRlZF90eXBlOwotCWJvb2wgaXNfbnVsbGFibGUgPSBmYWxzZSwgaXNfcmVmY291bnRlZCA9IGZhbHNlOwomIzQzOwlib29sIGlzX251bGxhYmxlID0gZmFsc2UsIGlzX3JlZmNvdW50ZWQgPSBmYWxzZSwgaXNfYXJlbmEgPSBmYWxzZTsKJiM0MzsJYm9vbCBpc19hcmVuYV9udWxsYWJsZSA9IGZhbHNlOwogCWNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKnN0dWJfYXJncywgKmFyZ3M7CiAJc3RydWN0IGJwZl9jdHhfYXJnX2F1eCAqaW5mbywgKmluZm9fYnVmOwogCXUzMiBuYXJncywgYXJnX25vLCBpbmZvX2NudCA9IDA7CkBAIC0yMjYsMjYgJiM0MzsyMjksMzAgQEAgc3RhdGljIGludCBwcmVwYXJlX2FyZ19pbmZvKHN0cnVjdCBidGYgKmJ0ZiwKIAlpbmZvID0gaW5mb19idWY7CiAJZm9yIChhcmdfbm8gPSAwOyBhcmdfbm8gJmx0OyBuYXJnczsgYXJnX25vJiM0MzsmIzQzOykgewogCQkvKiBTa2lwIGFyZ3VtZW50cyB0aGF0IGlzIG5vdCBzdWZmaXhlZCB3aXRoCi0JCSAqICYjMzQ7X19udWxsYWJsZSBvciBfX3JlZiYjMzQ7LgomIzQzOwkJICogJiMzNDtfX251bGxhYmxlJiMzNDssICYjMzQ7X19yZWYmIzM0OywgJiMzNDtfX2FyZW5hJiMzNDsgb3IgJiMzNDtfX2FyZW5hX251bGxhYmxlJiMzNDsuCiAJCSAqLwogCQlpc19udWxsYWJsZSA9IGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCAmYW1wO3N0dWJfYXJnc1thcmdfbm9dLAogCQkJCQkJICAgICBNQVlCRV9OVUxMX1NVRkZJWCk7CiAJCWlzX3JlZmNvdW50ZWQgPSBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgJmFtcDtzdHViX2FyZ3NbYXJnX25vXSwKIAkJCQkJCSAgICAgICBSRUZDT1VOVEVEX1NVRkZJWCk7CiYjNDM7CQlpc19hcmVuYV9udWxsYWJsZSA9IGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCAmYW1wO3N0dWJfYXJnc1thcmdfbm9dLAomIzQzOwkJCQkJCQkgICBBUkVOQV9NQVlCRV9OVUxMX1NVRkZJWCk7CiYjNDM7CQlpc19hcmVuYSA9IGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCAmYW1wO3N0dWJfYXJnc1thcmdfbm9dLCBBUkVOQV9TVUZGSVgpOwogCiAJCWlmIChpc19udWxsYWJsZSkKIAkJCXN1ZmZpeCA9IE1BWUJFX05VTExfU1VGRklYOwogCQllbHNlIGlmIChpc19yZWZjb3VudGVkKQogCQkJc3VmZml4ID0gUkVGQ09VTlRFRF9TVUZGSVg7CiYjNDM7CQllbHNlIGlmIChpc19hcmVuYV9udWxsYWJsZSkKJiM0MzsJCQlzdWZmaXggPSBBUkVOQV9NQVlCRV9OVUxMX1NVRkZJWDsKJiM0MzsJCWVsc2UgaWYgKGlzX2FyZW5hKQomIzQzOwkJCXN1ZmZpeCA9IEFSRU5BX1NVRkZJWDsKIAkJZWxzZQogCQkJY29udGludWU7CiAKLQkJLyogU2hvdWxkIGJlIGEgcG9pbnRlciB0byBzdHJ1Y3QgKi8KLQkJcG9pbnRlZF90eXBlID0gYnRmX3R5cGVfcmVzb2x2ZV9wdHIoYnRmLAotCQkJCQkJICAgIGFyZ3NbYXJnX25vXS50eXBlLAotCQkJCQkJICAgICZhbXA7YXJnX2J0Zl9pZCk7Ci0JCWlmICghcG9pbnRlZF90eXBlIHx8Ci0JCSAgICAhYnRmX3R5cGVfaXNfc3RydWN0KHBvaW50ZWRfdHlwZSkpIHsKJiM0MzsJCS8qIFNob3VsZCBiZSBhIHBvaW50ZXIgdG8gc3RydWN0LCBvciBhbnkgcG9pbnRlciBmb3IgX19hcmVuYS9fX2FyZW5hX251bGxhYmxlICovCiYjNDM7CQlwb2ludGVkX3R5cGUgPSBidGZfdHlwZV9yZXNvbHZlX3B0cihidGYsIGFyZ3NbYXJnX25vXS50eXBlLCAmYW1wO2FyZ19idGZfaWQpOwomIzQzOwkJaWYgKCFwb2ludGVkX3R5cGUgfHwgKCFpc19hcmVuYSAmYW1wOyZhbXA7ICFpc19hcmVuYV9udWxsYWJsZSAmYW1wOyZhbXA7ICFidGZfdHlwZV9pc19zdHJ1Y3QocG9pbnRlZF90eXBlKSkpIHsKIAkJCXByX3dhcm4oJiMzNDtzdHViIGZ1bmN0aW9uICVzIGhhcyAlcyB0YWdnaW5nIHRvIGFuIHVuc3VwcG9ydGVkIHR5cGVcbiYjMzQ7LAogCQkJCXN0dWJfZm5hbWUsIHN1ZmZpeCk7CiAJCQlnb3RvIGVycl9vdXQ7CkBAIC0yNzMsNiAmIzQzOzI4MCwxNSBAQCBzdGF0aWMgaW50IHByZXBhcmVfYXJnX2luZm8oc3RydWN0IGJ0ZiAqYnRmLAogCQl9IGVsc2UgaWYgKGlzX3JlZmNvdW50ZWQpIHsKIAkJCWluZm8tJmd0O3JlZ190eXBlID0gUFRSX1RSVVNURUQgfCBQVFJfVE9fQlRGX0lEOwogCQkJaW5mby0mZ3Q7cmVmY291bnRlZCA9IHRydWU7CiYjNDM7CQl9IGVsc2UgaWYgKGlzX2FyZW5hIHx8IGlzX2FyZW5hX251bGxhYmxlKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBCb3RoIHR5cGVzIGdldCBQVFJfVE9fQVJFTkEuIEluIHZlcmlmaWVyIHN0YXRlLAomIzQzOwkJCSAqIFBUUl9UT19BUkVOQSBlbmNvbXBhc3NlcyBwb3RlbnRpYWwgTlVMTCB2YWx1ZXMsIGJ1dAomIzQzOwkJCSAqIHdlIGRvIG5vdCBmb3JjZSB0aGUgcHJvZ3JhbSB0byBjaGVjayBpdCwgb3IgbWFpbnRhaW4KJiM0MzsJCQkgKiBwcmVjaXNpb24gYXJvdW5kIGl0LCBzaW5jZSBpdCBoYXMgbm8gc2FmZXR5IGltcGxpY2F0aW9uLgomIzQzOwkJCSAqLwomIzQzOwkJCWluZm8tJmd0O3JlZ190eXBlID0gUFRSX1RPX0FSRU5BOwomIzQzOwkJCWluZm8tJmd0O2FyZW5hX251bGxhYmxlID0gaXNfYXJlbmFfbnVsbGFibGU7CiAJCX0KIAogCQlpbmZvJiM0MzsmIzQzOzsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jCmluZGV4IDVlOGFjNDVjZTU2YWYuLmUzMWY1NmY0MDFlYmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvYnRmLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9idGYuYwpAQCAtNjk2MywxNSAmIzQzOzY5NjMsMTkgQEAgYm9vbCBidGZfY3R4X2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSwgZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSwKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCS8qIGNoZWNrIGZvciBQVFJfVE9fUkRPTkxZX0JVRl9PUl9OVUxMIG9yIFBUUl9UT19SRFdSX0JVRl9PUl9OVUxMICovCiYjNDM7CS8qCiYjNDM7CSAqIENoZWNrIGZvciBQVFJfVE9fUkRPTkxZX0JVRl9PUl9OVUxMLCBQVFJfVE9fUkRXUl9CVUZfT1JfTlVMTCBvcgomIzQzOwkgKiBQVFJfVE9fQVJFTkEgKGJvdGggbnVsbGFibGUgYW5kIG5vbi1udWxsYWJsZSBjYXNlcykuCiYjNDM7CSAqLwogCWZvciAoaSA9IDA7IGkgJmx0OyBwcm9nLSZndDthdXgtJmd0O2N0eF9hcmdfaW5mb19zaXplOyBpJiM0MzsmIzQzOykgewogCQljb25zdCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4ICpjdHhfYXJnX2luZm8gPSAmYW1wO3Byb2ctJmd0O2F1eC0mZ3Q7Y3R4X2FyZ19pbmZvW2ldOwogCQl1MzIgdHlwZSwgZmxhZzsKIAogCQl0eXBlID0gYmFzZV90eXBlKGN0eF9hcmdfaW5mby0mZ3Q7cmVnX3R5cGUpOwogCQlmbGFnID0gdHlwZV9mbGFnKGN0eF9hcmdfaW5mby0mZ3Q7cmVnX3R5cGUpOwotCQlpZiAoY3R4X2FyZ19pbmZvLSZndDtvZmZzZXQgPT0gb2ZmICZhbXA7JmFtcDsgdHlwZSA9PSBQVFJfVE9fQlVGICZhbXA7JmFtcDsKLQkJICAgIChmbGFnICZhbXA7IFBUUl9NQVlCRV9OVUxMKSkgewomIzQzOwkJaWYgKGN0eF9hcmdfaW5mby0mZ3Q7b2Zmc2V0ID09IG9mZiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKHR5cGUgPT0gUFRSX1RPX0FSRU5BIHx8CiYjNDM7CQkgICAgICh0eXBlID09IFBUUl9UT19CVUYgJmFtcDsmYW1wOyAoZmxhZyAmYW1wOyBQVFJfTUFZQkVfTlVMTCkpKSkgewogCQkJaW5mby0mZ3Q7cmVnX3R5cGUgPSBjdHhfYXJnX2luZm8tJmd0O3JlZ190eXBlOwogCQkJcmV0dXJuIHRydWU7CiAJCX0KQEAgLTc1NDEsNiAmIzQzOzc1NDUsMjIgQEAgc3RhdGljIHU4IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCkKIAlyZXR1cm4gZmxhZ3M7CiB9CiAKJiM0MztzdGF0aWMgdTggX19nZXRfYXJnX2Ztb2RlbF9mbGFncyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiYjNDM7CQkJCSBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcsCiYjNDM7CQkJCSBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpCiYjNDM7ewomIzQzOwl1OCBmbGFncyA9IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKHQpOwomIzQzOwomIzQzOwlpZiAoYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgJiMzNDtfX2FyZW5hJiMzNDspIHx8CiYjNDM7CSAgICBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCAmIzM0O19fYXJlbmFfbnVsbGFibGUmIzM0OykpCiYjNDM7CQlmbGFncyB8PSBCVEZfRk1PREVMX0FSRU5BX0FSRzsKJiM0MzsJaWYgKGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsICYjMzQ7X19udWxsYWJsZSYjMzQ7KSB8fAomIzQzOwkgICAgYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgJiMzNDtfX2FyZW5hX251bGxhYmxlJiMzNDspKQomIzQzOwkJZmxhZ3MgfD0gQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7CiYjNDM7CiYjNDM7CXJldHVybiBmbGFnczsKJiM0Mzt9CiYjNDM7CiBpbnQgYnRmX2Rpc3RpbGxfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLAogCQkJICAgc3RydWN0IGJ0ZiAqYnRmLAogCQkJICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICpmdW5jLApAQCAtNzYwNiw3ICYjNDM7NzYyNiw3IEBAIGludCBidGZfZGlzdGlsbF9mdW5jX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQltLSZndDthcmdfc2l6ZVtpXSA9IHJldDsKLQkJbS0mZ3Q7YXJnX2ZsYWdzW2ldID0gX19nZXRfdHlwZV9mbW9kZWxfZmxhZ3ModCk7CiYjNDM7CQltLSZndDthcmdfZmxhZ3NbaV0gPSBfX2dldF9hcmdfZm1vZGVsX2ZsYWdzKGJ0ZiwgJmFtcDthcmdzW2ldLCB0KTsKIAl9CiAJbS0mZ3Q7bnJfYXJncyA9IG5hcmdzOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb3JlLmMgYi9rZXJuZWwvYnBmL2NvcmUuYwppbmRleCBlMjA3NjY2N2IyNDUxLi5hM2UxZmFlMzJlYWNlIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2NvcmUuYwpAQCAtMzMwOCw2ICYjNDM7MzMwOCwxMSBAQCBib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZCkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0Mztib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX2Zhcl9rZnVuY19jYWxsKHZvaWQpCiB7CiAJcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYwppbmRleCBlZDc5OTlhZDZjNjZjLi5kMmQ3YTI5MDQzNDVkIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYwpAQCAtNTI5LDYgJiM0Mzs1MjksNTMgQEAgYnBmX3RyYW1wb2xpbmVfZ2V0X3Byb2dzKGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGludCAqdG90YWwsIGJvb2wgKmlwX2EKIAlyZXR1cm4gdG5vZGVzOwogfQogCiYjNDM7c3RhdGljIGJvb2wgYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmcoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwcm9nLSZndDthdXgtJmd0O2N0eF9hcmdfaW5mb19zaXplOyBpJiM0MzsmIzQzOykKJiM0MzsJCWlmIChiYXNlX3R5cGUocHJvZy0mZ3Q7YXV4LSZndDtjdHhfYXJnX2luZm9baV0ucmVnX3R5cGUpID09IFBUUl9UT19BUkVOQSkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIENvbGxlY3Qgd2hpY2ggY3R4IHNsb3RzIG9mIGEgc3RydWN0X29wcyB0cmFtcG9saW5lIGhvbGQgYXJlbmEga2VybmVsCiYjNDM7ICogcG9pbnRlcnMgdGhhdCBzYXZlX2FyZ3MoKSBtdXN0IGNvbnZlcnQgdG8gdGhlIGFyZW5hIHBvaW50ZXIgZm9ybS4gT25seQomIzQzOyAqIHRoZSBzdHJ1Y3Rfb3BzIGluZGlyZWN0IHRyYW1wb2xpbmUgY29udmVydHM6IGl0IGRpc3BhdGNoZXMgdG8gYSBzaW5nbGUKJiM0MzsgKiBwcm9nIHdob3NlIGFyZW5hIGlzIGtub3duIGF0IGdlbmVyYXRpb24gdGltZS4gUmV0dXJuIGZhbHNlIHdoZW4gdGhlcmUKJiM0MzsgKiBpcyBub3RoaW5nIHRvIGNvbnZlcnQuCiYjNDM7ICovCiYjNDM7Ym9vbCBicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzKHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcywgdTMyIGZsYWdzLAomIzQzOwkJCQkgIHN0cnVjdCBicGZfdHJhbXBfYXJlbmFfYXJncyAqYWFyZ3MpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwltZW1zZXQoYWFyZ3MsIDAsIHNpemVvZigqYWFyZ3MpKTsKJiM0MzsKJiM0MzsJaWYgKCEoZmxhZ3MgJmFtcDsgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIHx8CiYjNDM7CSAgICB0bm9kZXNbQlBGX1RSQU1QX0ZFTlRSWV0ubnJfbm9kZXMgIT0gMSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcHJvZyA9IHRub2Rlc1tCUEZfVFJBTVBfRkVOVFJZXS5ub2Rlc1swXS0mZ3Q7bGluay0mZ3Q7cHJvZzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHByb2ctJmd0O2F1eC0mZ3Q7Y3R4X2FyZ19pbmZvX3NpemU7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4ICppbmZvID0gJmFtcDtwcm9nLSZndDthdXgtJmd0O2N0eF9hcmdfaW5mb1tpXTsKJiM0MzsKJiM0MzsJCWlmIChiYXNlX3R5cGUoaW5mby0mZ3Q7cmVnX3R5cGUpICE9IFBUUl9UT19BUkVOQSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWFhcmdzLSZndDtzbG90cyB8PSBCSVQoaW5mby0mZ3Q7b2Zmc2V0IC8gOCk7CiYjNDM7CQlpZiAoaW5mby0mZ3Q7YXJlbmFfbnVsbGFibGUpCiYjNDM7CQkJYWFyZ3MtJmd0O251bGxhYmxlX3Nsb3RzIHw9IEJJVChpbmZvLSZndDtvZmZzZXQgLyA4KTsKJiM0MzsJfQomIzQzOwlpZiAoIWFhcmdzLSZndDtzbG90cykKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghcHJvZy0mZ3Q7YXV4LSZndDthcmVuYSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWFhcmdzLSZndDtrZXJuX3ZtX3N0YXJ0ID0gYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KHByb2ctJmd0O2F1eC0mZ3Q7YXJlbmEpOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBicGZfdHJhbXBfaW1hZ2VfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSkKIHsKIAlicGZfaW1hZ2Vfa3N5bV9kZWwoJmFtcDtpbS0mZ3Q7a3N5bSk7CkBAIC02ODUsNiAmIzQzOzczMiw3IEBAIHN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0CiAJdTMyIG9yaWdfZmxhZ3MgPSB0ci0mZ3Q7ZmxhZ3M7CiAJYm9vbCBpcF9hcmcgPSBmYWxzZTsKIAlpbnQgZXJyLCB0b3RhbCwgc2l6ZTsKJiM0MzsJaW50IGtpbmQsIGk7CiAKIAl0bm9kZXMgPSBicGZfdHJhbXBvbGluZV9nZXRfcHJvZ3ModHIsICZhbXA7dG90YWwsICZhbXA7aXBfYXJnKTsKIAlpZiAoSVNfRVJSKHRub2RlcykpCkBAIC02OTUsNiAmIzQzOzc0MywyMiBAQCBzdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dAogCQlnb3RvIG91dDsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogQXJlbmEgY3R4IGFyZ3MgYXJlIGNvbnZlcnRlZCBvbmx5IGJ5IHRoZSBzdHJ1Y3Rfb3BzIGluZGlyZWN0CiYjNDM7CSAqIHRyYW1wb2xpbmUsIHdoaWNoIGRpc3BhdGNoZXMgdG8gYSBzaW5nbGUga25vd24gcHJvZy4gR2VuZXJpYwomIzQzOwkgKiB0cmFtcG9saW5lcyBjYW4gbWl4IHByb2dzIHdpdGggZGlmZmVyZW50IGFyZW5hcywgc28gbm8gY29udmVyc2lvbgomIzQzOwkgKiBpcyBwb3NzaWJsZSBoZXJlLiBOb3QgcmVhY2hhYmxlIHRvZGF5OiBvbmx5IHN0cnVjdF9vcHMgcHJvZ3MgZ2V0CiYjNDM7CSAqIGFyZW5hIGN0eCBhcmdzIGFuZCB0aGV5IG5ldmVyIHJpZGUgZ2VuZXJpYyB0cmFtcG9saW5lcy4KJiM0MzsJICovCiYjNDM7CWZvciAoa2luZCA9IDA7IGtpbmQgJmx0OyBCUEZfVFJBTVBfTUFYOyBraW5kJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHRub2Rlc1traW5kXS5ucl9ub2RlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAoYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmcodG5vZGVzW2tpbmRdLm5vZGVzW2ldLSZndDtsaW5rLSZndDtwcm9nKSkgewomIzQzOwkJCQllcnIgPSAtRU5PVFNVUFA7CiYjNDM7CQkJCWdvdG8gb3V0OwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCS8qIGNsZWFyIGFsbCBiaXRzIGV4Y2VwdCBTSEFSRV9JUE1PRElGWSBhbmQgVEFJTF9DQUxMX0NUWCAqLwogCXRyLSZndDtmbGFncyAmYW1wOz0gKEJQRl9UUkFNUF9GX1NIQVJFX0lQTU9ESUZZIHwgQlBGX1RSQU1QX0ZfVEFJTF9DQUxMX0NUWCk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCBiMjc0MDA0ZmNjZmQ5Li5jOTEyOTMzMGRlZGU2IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC0xMDkwNyw2ICYjNDM7MTA5MDcsMTYgQEAgc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2lycV9mbGFnKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbQogCXJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCAmIzM0O19faXJxX2ZsYWcmIzM0Oyk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfYXJlbmEoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpCiYjNDM7ewomIzQzOwlyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgJiMzNDtfX2FyZW5hJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfYXJlbmFfbnVsbGFibGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpCiYjNDM7ewomIzQzOwlyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgJiMzNDtfX2FyZW5hX251bGxhYmxlJiMzNDspOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19zY2FsYXJfd2l0aF9uYW1lKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwKIAkJCQkJICBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcsCiAJCQkJCSAgY29uc3QgY2hhciAqbmFtZSkKQEAgLTExMTI3LDYgJiM0MzsxMTEzNyw3IEBAIGVudW0ga2Z1bmNfcHRyX2FyZ190eXBlIHsKIAlLRl9BUkdfUFRSX1RPX0lSUV9GTEFHLAogCUtGX0FSR19QVFJfVE9fUkVTX1NQSU5fTE9DSywKIAlLRl9BUkdfUFRSX1RPX1RBU0tfV09SSywKJiM0MzsJS0ZfQVJHX1BUUl9UT19BUkVOQSwKIH07CiAKIGVudW0gc3BlY2lhbF9rZnVuY190eXBlIHsKQEAgLTExNDEyLDcgJiM0MzsxMTQyMyw2IEBAIGdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsCiAJCQlyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ0Zl90eXBlX3N0cih0KSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQogCXJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMobWV0YS0mZ3Q7YnRmLCB0LSZndDt0eXBlLCBOVUxMKTsKIAlyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQobWV0YS0mZ3Q7YnRmLCByZWZfdC0mZ3Q7bmFtZV9vZmYpOwogCkBAIC0xMTQ2MSw2ICYjNDM7MTE0NzEsOSBAQCBnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLAogCQlhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fUkVTX1NQSU5fTE9DSzsKIAllbHNlIGlmIChpc19rZnVuY19hcmdfY2FsbGJhY2soZW52LCBtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKIAkJYXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0NBTExCQUNLOwomIzQzOwllbHNlIGlmIChpc19rZnVuY19hcmdfYXJlbmEobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnXSkgfHwKJiM0MzsJCSBpc19rZnVuY19hcmdfYXJlbmFfbnVsbGFibGUobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnXSkpCiYjNDM7CQlhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQVJFTkE7CiAJZWxzZSBpZiAoYXJnICYjNDM7IDEgJmx0OyBuYXJncyAmYW1wOyZhbXA7CiAJCSAoaXNfa2Z1bmNfYXJnX21lbV9zaXplKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZyAmIzQzOyAxXSkgfHwKIAkJICBpc19rZnVuY19hcmdfY29uc3RfbWVtX3NpemUobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnICYjNDM7IDFdKSkpIHsKQEAgLTEyMTU0LDYgJiM0MzsxMjE2NywzMSBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZQogCiAJCXQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGFyZ3NbaV0udHlwZSwgTlVMTCk7CiAKJiM0MzsJCWlmIChiYXNlX3R5cGUoa2ZfYXJnX3R5cGUpID09IEtGX0FSR19QVFJfVE9fQVJFTkEpIHsKJiM0MzsJCQlpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7CiYjNDM7CQkJCXZlcmJvc2UoZW52LCAmIzM0O0pJVCBkb2VzIG5vdCBzdXBwb3J0IGtmdW5jICVzKCkgd2l0aCBhcmVuYSBwb2ludGVyIGFyZ3VtZW50c1xuJiMzNDssCiYjNDM7CQkJCQlmdW5jX25hbWUpOwomIzQzOwkJCQlyZXR1cm4gLUVOT1RTVVBQOwomIzQzOwkJCX0KJiM0MzsJCQlpZiAoIWVudi0mZ3Q7cHJvZy0mZ3Q7YXV4LSZndDthcmVuYSkgewomIzQzOwkJCQl2ZXJib3NlKGVudiwKJiM0MzsJCQkJCSYjMzQ7JXMgYXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXG4mIzM0OywKJiM0MzsJCQkJCXJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7CiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCX0KJiM0MzsJCQlpZiAocmVnbm8gJmx0OyAwKSB7CiYjNDM7CQkJCXZlcmJvc2UoZW52LCAmIzM0OyVzIGFyZW5hIHBvaW50ZXIgY2Fubm90IGJlIGEgc3RhY2sgYXJndW1lbnRcbiYjMzQ7LAomIzQzOwkJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTsKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJfQomIzQzOwkJCWlmIChyZWctJmd0O3R5cGUgIT0gUFRSX1RPX0FSRU5BICZhbXA7JmFtcDsgcmVnLSZndDt0eXBlICE9IFNDQUxBUl9WQUxVRSkgewomIzQzOwkJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBpcyBub3QgYSBwb2ludGVyIHRvIGFyZW5hIG9yIHNjYWxhclxuJiMzNDssCiYjNDM7CQkJCQlyZWdfYXJnX25hbWUoZW52LCBhcmdubykpOwomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQl9CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCWlmIChidGZfdHlwZV9pc19wdHIodCkgJmFtcDsmYW1wOyAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSB8fCB0eXBlX21heV9iZV9udWxsKHJlZy0mZ3Q7dHlwZSkpICZhbXA7JmFtcDsKIAkJICAgICFpc19rZnVuY19hcmdfbnVsbGFibGUobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbaV0pKSB7CiAJCQl2ZXJib3NlKGVudiwgJiMzNDtQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgJXNcbiYjMzQ7LApAQCAtMTg4MDcsNiAmIzQzOzE4ODQ1LDcgQEAgc3RhdGljIGludCBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogewogCWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgKmZ1bmNfcHJvdG87CiAJY29uc3Qgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2MgKnN0X29wc19kZXNjOwomIzQzOwljb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfYXJnX2luZm8gKmFyZ19pbmZvOwogCWNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzOwogCWNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXI7CiAJc3RydWN0IGJwZl9wcm9nICpwcm9nID0gZW52LSZndDtwcm9nOwpAQCAtMTg4ODUsMTAgJiM0MzsxODkyNCwyMyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCXJldHVybiAtRUFDQ0VTOwogCX0KIAotCWZvciAoaSA9IDA7IGkgJmx0OyBzdF9vcHNfZGVzYy0mZ3Q7YXJnX2luZm9bbWVtYmVyX2lkeF0uY250OyBpJiM0MzsmIzQzOykgewotCQlpZiAoc3Rfb3BzX2Rlc2MtJmd0O2FyZ19pbmZvW21lbWJlcl9pZHhdLmluZm9baV0ucmVmY291bnRlZCkgewomIzQzOwlhcmdfaW5mbyA9ICZhbXA7c3Rfb3BzX2Rlc2MtJmd0O2FyZ19pbmZvW21lbWJlcl9pZHhdOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgYXJnX2luZm8tJmd0O2NudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCBicGZfY3R4X2FyZ19hdXggKmluZm8gPSAmYW1wO2FyZ19pbmZvLSZndDtpbmZvW2ldOwomIzQzOwomIzQzOwkJaWYgKGluZm8tJmd0O3JlZmNvdW50ZWQpCiAJCQloYXNfcmVmY291bnRlZF9hcmcgPSB0cnVlOwotCQkJYnJlYWs7CiYjNDM7CQlpZiAoYmFzZV90eXBlKGluZm8tJmd0O3JlZ190eXBlKSA9PSBQVFJfVE9fQVJFTkEpIHsKJiM0MzsJCQlpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7CiYjNDM7CQkJCXZlcmJvc2UoZW52LCAmIzM0O0pJVCBkb2VzIG5vdCBzdXBwb3J0IGFyZW5hIGFyZ3VtZW50c1xuJiMzNDspOwomIzQzOwkJCQlyZXR1cm4gLUVOT1RTVVBQOwomIzQzOwkJCX0KJiM0MzsJCQlpZiAoIXByb2ctJmd0O2F1eC0mZ3Q7YXJlbmEpIHsKJiM0MzsJCQkJdmVyYm9zZShlbnYsCiYjNDM7CQkJCQkmIzM0O2FyZW5hIGFyZ3VtZW50IG9mICVzIHJlcXVpcmVzIGEgcHJvZ3JhbSB3aXRoIGFuIGFzc29jaWF0ZWQgYXJlbmFcbiYjMzQ7LAomIzQzOwkJCQkJbW5hbWUpOwomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQl9CiAJCX0KIAl9CiAKQEAgLTE4OTA5LDggJiM0MzsxODk2MSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RydWN0X29wc19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAlwcm9nLSZndDthdXgtJmd0O2F0dGFjaF9mdW5jX25hbWUgPSBtbmFtZTsKIAllbnYtJmd0O29wcyA9IHN0X29wcy0mZ3Q7dmVyaWZpZXJfb3BzOwogCi0JcmV0dXJuIGJwZl9wcm9nX2N0eF9hcmdfaW5mb19pbml0KHByb2csIHN0X29wc19kZXNjLSZndDthcmdfaW5mb1ttZW1iZXJfaWR4XS5pbmZvLAotCQkJCQkgIHN0X29wc19kZXNjLSZndDthcmdfaW5mb1ttZW1iZXJfaWR4XS5jbnQpOwomIzQzOwlyZXR1cm4gYnBmX3Byb2dfY3R4X2FyZ19pbmZvX2luaXQocHJvZywgYXJnX2luZm8tJmd0O2luZm8sIGFyZ19pbmZvLSZndDtjbnQpOwogfQogI2RlZmluZSBTRUNVUklUWV9QUkVGSVggJiMzNDtzZWN1cml0eV8mIzM0OwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9rZnVuYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfa2Z1bmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi45YmUxOTU2NWYwZDUzCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfa2Z1bmMuYwpAQCAtMCwwICYjNDM7MSwxNSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDthcmVuYV9rZnVuYy5za2VsLmgmIzM0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIHRlc3Qga2Z1bmNzIGxpdmUgaW4gYnBmX3Rlc3Rtb2QuIFJlc29sdmluZyBrZnVuY3MgYWdhaW5zdCBtb2R1bGUKJiM0MzsgKiBCVEZzIG5lZWRzIENBUF9TWVNfQURNSU4sIHNvIHJ1biB3aXRoIGZ1bGwgY2FwYWJpbGl0aWVzIGluc3RlYWQgb2YKJiM0MzsgKiB0aHJvdWdoIHRoZSB2ZXJpZmllciB0ZXN0cyYjMzk7IGNhcGFiaWxpdHktcmVzdHJpY3RlZCBydW5uZXIuCiYjNDM7ICovCiYjNDM7dm9pZCB0ZXN0X2FyZW5hX2tmdW5jKHZvaWQpCiYjNDM7ewomIzQzOwlSVU5fVEVTVFMoYXJlbmFfa2Z1bmMpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2tmdW5jX2ppdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfa2Z1bmNfaml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMjM1OWNkZTI0YzQ1ZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2tmdW5jX2ppdC5jCkBAIC0wLDAgJiM0MzsxLDEzIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2FyZW5hX2tmdW5jX2ppdC5za2VsLmgmIzM0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogUnVucyB3aXRoIGZ1bGwgY2FwYWJpbGl0aWVzOiByZXNvbHZpbmcgbW9kdWxlIGtmdW5jIGtzeW1zIHJlcXVpcmVzCiYjNDM7ICogQ0FQX1NZU19BRE1JTiwgd2hpY2ggcnVsZXMgb3V0IHRoZSBjYXBhYmlsaXR5LXJlc3RyaWN0ZWQgcnVubmVyLgomIzQzOyAqLwomIzQzO3ZvaWQgdGVzdF9hcmVuYV9rZnVuY19qaXQodm9pZCkKJiM0Mzt7CiYjNDM7CVJVTl9URVNUUyhhcmVuYV9rZnVuY19qaXQpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYjFlMzlkZWZhMzhhZQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jCkBAIC0wLDAgJiM0MzsxLDc0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3N0cnVjdF9vcHNfYXJlbmEuc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5za2VsLmgmIzM0OwomIzQzOwomIzQzOyNpZiBkZWZpbmVkKF9feDg2XzY0X18pCiYjNDM7LyoKJiM0MzsgKiBBdHRhY2ggY2FsbGJhY2tzIHdpdGggX19hcmVuYSBhbmQgX19hcmVuYV9udWxsYWJsZSBhcmd1bWVudHMgYW5kIGRyaXZlCiYjNDM7ICogdGhlbSB0aHJvdWdoIHRoZSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSooKSBrZnVuY3MuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYXJlbmFfYXJnKHZvaWQpCiYjNDM7ewomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpOwomIzQzOwlzdHJ1Y3Qgc3RydWN0X29wc19hcmVuYSAqc2tlbDsKJiM0MzsJc3RydWN0IGJwZl9saW5rICpsaW5rID0gTlVMTDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJc2tlbCA9IHN0cnVjdF9vcHNfYXJlbmFfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c3RydWN0X29wc19hcmVuYV9fb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbGluayA9IGJwZl9tYXBfX2F0dGFjaF9zdHJ1Y3Rfb3BzKHNrZWwtJmd0O21hcHMudGVzdG1vZF9hcmVuYSk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihsaW5rLCAmIzM0O2F0dGFjaF9zdHJ1Y3Rfb3BzJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLnRyaWdnZXIpLAomIzQzOwkJCQkgICAgICZhbXA7dG9wdHMpOwomIzQzOwlBU1NFUlRfT0soZXJyLCAmIzM0O3Rlc3RfcnVuJiMzNDspOwomIzQzOwlBU1NFUlRfRVEodG9wdHMucmV0dmFsLCAwLCAmIzM0O3RyaWdnZXJfcmV0dmFsJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7CiYjNDM7CXN0cnVjdF9vcHNfYXJlbmFfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBwcm9ncmFtIHdpdGggbm8gYXJlbmEgY2Fubm90IGF0dGFjaCB0byBhIG1lbWJlciB3aXRoIGFuIF9fYXJlbmEKJiM0MzsgKiBhcmd1bWVudC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBhcmVuYV9hcmdfZmFpbCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHN0cnVjdF9vcHNfYXJlbmFfZmFpbCAqc2tlbDsKJiM0MzsKJiM0MzsJc2tlbCA9IHN0cnVjdF9vcHNfYXJlbmFfZmFpbF9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoQVNTRVJUX0VSUl9QVFIoc2tlbCwgJiMzNDtzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWxfX29wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXN0cnVjdF9vcHNfYXJlbmFfZmFpbF9fZGVzdHJveShza2VsKTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBTZXJpYWxpemVkIGJlY2F1c2UgaXQgYXR0YWNoZXMgdGhlIHNpbmdsZXRvbiBicGZfdGVzdG1vZF9vcHMzLCB3aGljaAomIzQzOyAqIHRlc3Rfc3RydWN0X29wc19wcml2YXRlX3N0YWNrIGFsc28gYXR0YWNoZXM7IHJlZ2lzdGVyaW5nIGl0IHR3aWNlIGZhaWxzCiYjNDM7ICogd2l0aCAtRUVYSVNULgomIzQzOyAqLwomIzQzO3ZvaWQgc2VyaWFsX3Rlc3Rfc3RydWN0X29wc19hcmVuYSh2b2lkKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBvbmx5LgomIzQzOwkgKiBFbHNld2hlcmUgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGggJiMzNDtKSVQgZG9lcyBub3Qgc3VwcG9ydCBhcmVuYQomIzQzOwkgKiBhcmd1bWVudHMmIzM0Oywgc28gdGhlIHByb2dyYW1zIGNhbm5vdCBldmVuIGxvYWQuCiYjNDM7CSAqLwomIzQzOyNpZiBkZWZpbmVkKF9feDg2XzY0X18pCiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YXJlbmFfYXJnJiMzNDspKQomIzQzOwkJYXJlbmFfYXJnKCk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YXJlbmFfYXJnX2ZhaWwmIzM0OykpCiYjNDM7CQlhcmVuYV9hcmdfZmFpbCgpOwomIzQzOyNlbHNlCiYjNDM7CXRlc3RfX3NraXAoKTsKJiM0MzsjZW5kaWYKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjE1ZDQ4MTUxNzk3ZGEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYwpAQCAtMCwwICYjNDM7MSwyNjAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi8KJiM0MzsKJiM0MzsjZGVmaW5lIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTCiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9leHBlcmltZW50YWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZl9hcmVuYV9jb21tb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCYjMzQ7CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7CiYjNDM7CV9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTsKJiM0MzsJLyogcGFnZSAwIGhvc3RzIHRoZSBhcmVuYSBnbG9iYWwsIHBhZ2UgMSBpcyBmb3IgYWxsb2NhdGlvbnMgKi8KJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAyKTsKJiM0Mzt9IGFyZW5hIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzOy8qCiYjNDM7ICogT2NjdXBpZXMgcGFnZSAwIHNvIG5vIGFsbG9jYXRpb24gbGFuZHMgYXQgYXJlbmEgb2Zmc2V0IDAsIHdoaWNoIHRoZQomIzQzOyAqIG51bGxhYmxlIHRlc3RzIGJlbG93IG11c3QgYmUgYWJsZSB0byB0ZWxsIGFwYXJ0IGZyb20gTlVMTC4KJiM0MzsgKi8KJiM0Mzt1NjQgX19hcmVuYSBhcmVuYV9wYWQ7CiYjNDM7CiYjNDM7Lyogdm9sYXRpbGUgdG8gZm9yY2UgdGhlIHNjYWxhciByZWxvYWRzIGJlbG93ICovCiYjNDM7dm9sYXRpbGUgdTY0IHN0YXNoOwomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApCiYjNDM7aW50IGFyZW5hX2FyZ19mb3Jtcyh2b2lkICpjdHgpCiYjNDM7ewomIzQzOyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKQomIzQzOwl1NjQgX19hcmVuYSAqdmFsOwomIzQzOwl1NjQgcmV0OwomIzQzOwomIzQzOwl2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoJmFtcDthcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJLyogUFRSX1RPX0FSRU5BIGFyZ3VtZW50ICovCiYjNDM7CSp2YWwgPSA0MTsKJiM0MzsJcmV0ID0gYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KCh1NjQgKil2YWwpOwomIzQzOwlpZiAocmV0ICE9IDQxIHx8ICp2YWwgIT0gNDIpCiYjNDM7CQlyZXR1cm4gMjsKJiM0MzsKJiM0MzsJLyogdGhlIGxvdyAzMiBiaXRzIGFzIGEgc2NhbGFyICovCiYjNDM7CXN0YXNoID0gKHUzMikodTY0KXZhbDsKJiM0MzsJcmV0ID0gYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KCh1NjQgKilzdGFzaCk7CiYjNDM7CWlmIChyZXQgIT0gNDIgfHwgKnZhbCAhPSA0MykKJiM0MzsJCXJldHVybiAzOwomIzQzOwomIzQzOwkvKiB0aGUgZnVsbCB1c2VyIGFkZHJlc3MgYXMgYSBzY2FsYXIgKi8KJiM0MzsJc3Rhc2ggPSAodTY0KXZhbDsKJiM0MzsJYnBmX2FkZHJfc3BhY2VfY2FzdChzdGFzaCwgMSwgMCk7CiYjNDM7CXJldCA9IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopc3Rhc2gpOwomIzQzOwlpZiAocmV0ICE9IDQzIHx8ICp2YWwgIT0gNDQpCiYjNDM7CQlyZXR1cm4gNDsKJiM0MzsKJiM0MzsJYnBmX2FyZW5hX2ZyZWVfcGFnZXMoJmFtcDthcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7CiYjNDM7I2VuZGlmCiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFBpbiB0aGUgcmViYXNlIHNlbWFudGljcyB1c2luZyB0aGUgY2FwdHVyZSBrZnVuY3MsIHdoaWNoIHJldHVybiB0aGUgcmF3CiYjNDM7ICogYXJndW1lbnQgdmFsdWU6IF9fYXJlbmEgcmViYXNlcyB1bmNvbmRpdGlvbmFsbHksIHNvIHplcm8gbG93IDMyIGJpdHMKJiM0MzsgKiBhcnJpdmUgYXMgdGhlIGFyZW5hIGtlcm5lbCBiYXNlLCB3aGlsZSBfX2FyZW5hX251bGxhYmxlIHR1cm5zIHRoZW0gaW50bwomIzQzOyAqIE5VTEwuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztpbnQgYXJlbmFfYXJnX3JlYmFzZSh2b2lkICpjdHgpCiYjNDM7ewomIzQzOyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKQomIzQzOwl1NjQgX19hcmVuYSAqdmFsOwomIzQzOwl1NjQgYmFzZSwgb2ZmOwomIzQzOwomIzQzOwl2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoJmFtcDthcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJYmFzZSA9IGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdChOVUxMKTsKJiM0MzsJaWYgKCFiYXNlKQomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CiYjNDM7CS8qIG9ubHkgdGhlIGxvdyAzMiBiaXRzIGNvbnRyaWJ1dGUgKi8KJiM0MzsJc3Rhc2ggPSAweGJhZGMwZmZlMDAwMDAwMDA7CiYjNDM7CWlmIChicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QoKHU2NCAqKXN0YXNoKSAhPSBiYXNlKQomIzQzOwkJcmV0dXJuIDM7CiYjNDM7CiYjNDM7CW9mZiA9ICh1MzIpKHU2NCl2YWw7CiYjNDM7CWlmIChicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QoKHU2NCAqKXZhbCkgIT0gYmFzZSAmIzQzOyBvZmYpCiYjNDM7CQlyZXR1cm4gNDsKJiM0MzsKJiM0MzsJaWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdChOVUxMKSAhPSAwKQomIzQzOwkJcmV0dXJuIDU7CiYjNDM7CiYjNDM7CXN0YXNoID0gMHhiYWRjMGZmZTAwMDAwMDAwOwomIzQzOwlpZiAoYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KCh1NjQgKilzdGFzaCkgIT0gMCkKJiM0MzsJCXJldHVybiA2OwomIzQzOwomIzQzOwlpZiAoYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KCh1NjQgKil2YWwpICE9IGJhc2UgJiM0Mzsgb2ZmKQomIzQzOwkJcmV0dXJuIDc7CiYjNDM7CiYjNDM7CWJwZl9hcmVuYV9mcmVlX3BhZ2VzKCZhbXA7YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpOwomIzQzOyNlbmRpZgomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztpbnQgYXJlbmFfYXJnX251bGxhYmxlKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7I2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpCiYjNDM7CXU2NCBfX2FyZW5hICp2YWw7CiYjNDM7CXU2NCByZXQ7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwkqdmFsID0gNDE7CiYjNDM7CXJldCA9IGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdCgodTY0ICopdmFsKTsKJiM0MzsJaWYgKHJldCAhPSA0MSB8fCAqdmFsICE9IDQyKQomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CiYjNDM7CWlmIChicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QoTlVMTCkgIT0gMHhkZWFkYmVlZikKJiM0MzsJCXJldHVybiAzOwomIzQzOwomIzQzOwlicGZfYXJlbmFfZnJlZV9wYWdlcygmYW1wO2FyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTsKJiM0MzsjZW5kaWYKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApCiYjNDM7aW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7I2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpCiYjNDM7CXU2NCBfX2FyZW5hICp2YWw7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwl2YWxbMF0gPSAxOwomIzQzOwl2YWxbMV0gPSAyOwomIzQzOwl2YWxbMl0gPSA0OwomIzQzOwl2YWxbM10gPSA4OwomIzQzOwl2YWxbNF0gPSAxNjsKJiM0MzsKJiM0MzsJaWYgKGJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KCh1NjQgKikmYW1wO3ZhbFswXSwgKHU2NCAqKSZhbXA7dmFsWzFdLAomIzQzOwkJCQkgICAgICAgKHU2NCAqKSZhbXA7dmFsWzJdLCAodTY0ICopJmFtcDt2YWxbM10sCiYjNDM7CQkJCSAgICAgICAodTY0ICopJmFtcDt2YWxbNF0pICE9IDMxKQomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CWlmIChicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdCgodTY0ICopJmFtcDt2YWxbMF0sICh1NjQgKikmYW1wO3ZhbFsxXSwKJiM0MzsJCQkJICAgICAgICh1NjQgKikmYW1wO3ZhbFsyXSwgKHU2NCAqKSZhbXA7dmFsWzNdLCBOVUxMKSAhPSAxNSkKJiM0MzsJCXJldHVybiAzOwomIzQzOwomIzQzOwlicGZfYXJlbmFfZnJlZV9wYWdlcygmYW1wO2FyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTsKJiM0MzsjZW5kaWYKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApCiYjNDM7aW50IGFyZW5hX2FyZ19taXhlZCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKQomIzQzOwl1NjQgX19hcmVuYSAqdmFsOwomIzQzOwomIzQzOwl2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoJmFtcDthcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJdmFsWzBdID0gNzsKJiM0MzsJdmFsWzFdID0gNTsKJiM0MzsKJiM0MzsJaWYgKGJwZl9rZnVuY19hcmVuYV9taXhlZF90ZXN0KCh1NjQgKikmYW1wO3ZhbFswXSwgTlVMTCkgIT0gNykKJiM0MzsJCXJldHVybiAyOwomIzQzOwomIzQzOwlpZiAoYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QoKHU2NCAqKSZhbXA7dmFsWzBdLCAodTY0ICopJmFtcDt2YWxbMV0pICE9IDEyKQomIzQzOwkJcmV0dXJuIDM7CiYjNDM7CiYjNDM7CWJwZl9hcmVuYV9mcmVlX3BhZ2VzKCZhbXA7YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpOwomIzQzOyNlbmRpZgomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7Lyoga2VybmVsLXNpZGUgZmF1bHRzIG9uIHVucG9wdWxhdGVkIHBhZ2VzIHJlY292ZXIgdmlhIHRoZSBzY3JhdGNoIHBhZ2UgKi8KJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKQomIzQzO2ludCBhcmVuYV9hcmdfdW5wb3B1bGF0ZWQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkKJiM0MzsJdTY0IF9fYXJlbmEgKnZhbDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCZhbXA7YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CXN0YXNoID0gKHU2NCl2YWwgJiM0MzsgUEFHRV9TSVpFOwomIzQzOwlicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoKHU2NCAqKXN0YXNoKTsKJiM0MzsKJiM0MzsJYnBmX2FyZW5hX2ZyZWVfcGFnZXMoJmFtcDthcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7CiYjNDM7I2VuZGlmCiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2FyZW5hIHBvaW50ZXIgcmVxdWlyZXMgYSBwcm9ncmFtIHdpdGggYW4gYXNzb2NpYXRlZCBhcmVuYSYjMzQ7KQomIzQzO2ludCBhcmVuYV9hcmdfbm9fYXJlbmEodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KCh1NjQgKikxKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7aXMgbm90IGEgcG9pbnRlciB0byBhcmVuYSBvciBzY2FsYXImIzM0OykKJiM0MztpbnQgYXJlbmFfYXJnX2JhZF9yZWcodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJdTY0IGJ1ZiA9IDA7CiYjNDM7CiYjNDM7CS8qIHVzZSB0aGUgYXJlbmEgc28gdGhlIHByb2dyYW0gcGFzc2VzIHRoZSBhcmVuYSBwcmVzZW5jZSBjaGVjayAqLwomIzQzOwlicGZfYXJlbmFfYWxsb2NfcGFnZXMoJmFtcDthcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTsKJiM0MzsJYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KCZhbXA7YnVmKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSAmYW1wOyZhbXA7IFwKJiM0MzsJZGVmaW5lZChfX0JQRl9GRUFUVVJFX1NUQUNLX0FSR1VNRU5UKQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7YXJlbmEgcG9pbnRlciBjYW5ub3QgYmUgYSBzdGFjayBhcmd1bWVudCYjMzQ7KQomIzQzO2ludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCZhbXA7YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7CiYjNDM7CWJwZl9rZnVuY19hcmVuYV9zdGFja19hcmdfdGVzdCgxLCAyLCAzLCA0LCA1LCAodTY0ICopMSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19kZXNjcmlwdGlvbigmIzM0O2FyZW5hX2FyZ19zdGFjazogbm90IHN1cHBvcnRlZCwgZHVtbXkgdGVzdCYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi44NDc0NzYxMTcyNWY2Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jCkBAIC0wLDAgJiM0MzsxLDk2IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBWZXJpZnkgdGhlIEpJVC1lbWl0dGVkIHJlYmFzZSBzZXF1ZW5jZXMgZm9yIF9fYXJlbmEgYW5kIF9fYXJlbmFfbnVsbGFibGUKJiM0MzsgKiBrZnVuYyBhcmd1bWVudHMuIFRoZSBjYXB0dXJlIGtmdW5jcyB0YWtlIHRoZSBhcmd1bWVudCB3aXRob3V0CiYjNDM7ICogZGVyZWZlcmVuY2luZyBpdCwgc28gdGhlc2UgdGVzdHMgcGluIG9ubHkgdGhlIGVtaXR0ZWQgY29kZS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTCiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9leHBlcmltZW50YWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZl9hcmVuYV9jb21tb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCYjMzQ7CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7CiYjNDM7CV9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxKTsKJiM0Mzt9IGFyZW5hIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzOy8qIHZvbGF0aWxlIHRvIGZvcmNlIHRoZSBzY2FsYXIgcmVsb2FkcyBiZWxvdyAqLwomIzQzO3ZvbGF0aWxlIHU2NCBzdGFzaDsKJiM0MzsKJiM0MzsjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkKJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1vdmwJJWVkaSwgJWVkaSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkcQklcjEyLCAlcmRpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Oy4uLiYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJY2FsbHEJe3suKn19JiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IGFyZW5hX2FyZ19qaXRfcmViYXNlKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0YXNoID0gKHU2NClicGZfYXJlbmFfYWxsb2NfcGFnZXMoJmFtcDthcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTsKJiM0MzsJYnBmX2tmdW5jX2FyZW5hX2NhcF90ZXN0KCh1NjQgKilzdGFzaCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1vdmwJJWVkaSwgJWVkaSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJdGVzdGwJJWVkaSwgJWVkaSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJamUJe3suKn19JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGRxCSVyMTIsICVyZGkmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgYXJlbmFfYXJnX2ppdF9udWxsYWJsZSh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdGFzaCA9ICh1NjQpYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCZhbXA7YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7CiYjNDM7CWJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdCgodTY0ICopc3Rhc2gpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Owltb3ZsCSVlZGksICVlZGkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZHEJJXIxMiwgJXJkaSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbW92bAklZXNpLCAlZXNpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGRxCSVyMTIsICVyc2kmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1vdmwJJWVkeCwgJWVkeCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkcQklcjEyLCAlcmR4JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Owltb3ZsCSVlY3gsICVlY3gmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZHEJJXIxMiwgJXJjeCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbW92bAklcjhkLCAlcjhkJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Owl0ZXN0bAklcjhkLCAlcjhkJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlqZQl7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZHEJJXIxMiwgJXI4JiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IGFyZW5hX2FyZ19qaXRfYXJnczUodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJdTY0IF9fYXJlbmEgKnZhbDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCZhbXA7YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CXZhbFswXSA9IDE7CiYjNDM7CXZhbFsxXSA9IDI7CiYjNDM7CXZhbFsyXSA9IDQ7CiYjNDM7CXZhbFszXSA9IDg7CiYjNDM7CXZhbFs0XSA9IDE2OwomIzQzOwomIzQzOwlicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdCgodTY0ICopJmFtcDt2YWxbMF0sICh1NjQgKikmYW1wO3ZhbFsxXSwKJiM0MzsJCQkJICAgKHU2NCAqKSZhbXA7dmFsWzJdLCAodTY0ICopJmFtcDt2YWxbM10sCiYjNDM7CQkJCSAgICh1NjQgKikmYW1wO3ZhbFs0XSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsjZW5kaWYgLyogX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QgKi8KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5iYTA0YzczZDhkOTY3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuYwpAQCAtMCwwICYjNDM7MSwxMTUgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi8KJiM0MzsKJiM0MzsjZGVmaW5lIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTCiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfZXhwZXJpbWVudGFsLmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDticGZfYXJlbmFfY29tbW9uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Li4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oJiMzNDsKJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7CiYjNDM7CV9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTsKJiM0MzsJLyogcGFnZSAwIGhvc3RzIHRoZSBhcmVuYSBnbG9iYWxzLCBwYWdlIDEgaXMgZm9yIGFsbG9jYXRpb25zICovCiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMik7CiYjNDM7fSBhcmVuYSBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MzsvKiBhbHNvIGFzc29jaWF0ZXMgdGhlIGNhbGxiYWNrcyB3aXRoIHRoZSBhcmVuYSAqLwomIzQzO3U2NCBfX2FyZW5hIGFyZW5hX3RvdWNoOwomIzQzOy8qIHJhdyB2YWx1ZSBvZiB0aGUgbGFzdCBfX2FyZW5hIGN0eCBhcmd1bWVudCwgY2FwdHVyZWQgYnkgdGVzdF9hcmVuYV9jYiAqLwomIzQzO3U2NCBfX2FyZW5hIGNiX3B0cl92YWw7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3RydWN0X29wcy90ZXN0X2FyZW5hJiMzNDspCiYjNDM7aW50IHRlc3RfYXJlbmFfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpCiYjNDM7ewomIzQzOwl1NjQgX19hcmVuYSAqcHRyID0gKHU2NCBfX2FyZW5hICopY3R4WzBdOwomIzQzOwomIzQzOwlhcmVuYV90b3VjaCYjNDM7JiM0Mzs7CiYjNDM7CWNiX3B0cl92YWwgPSBjdHhbMF07CiYjNDM7CSpwdHIgJiM0Mzs9IDE7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmFfbnVsbGFibGUmIzM0OykKJiM0MztpbnQgdGVzdF9hcmVuYV9udWxsYWJsZV9jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eCkKJiM0Mzt7CiYjNDM7CXU2NCBfX2FyZW5hICpwdHIgPSAodTY0IF9fYXJlbmEgKiljdHhbMF07CiYjNDM7CiYjNDM7CWFyZW5hX3RvdWNoJiM0MzsmIzQzOzsKJiM0MzsJaWYgKCFwdHIpCiYjNDM7CQlyZXR1cm4gMHhiZWU7CiYjNDM7CSpwdHIgJiM0Mzs9IDE7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmFfc3RhY2smIzM0OykKJiM0MztpbnQgdGVzdF9hcmVuYV9zdGFja19jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eCkKJiM0Mzt7CiYjNDM7CXU2NCBfX2FyZW5hICpwdHIgPSAodTY0IF9fYXJlbmEgKiljdHhbOF07CiYjNDM7CiYjNDM7CWFyZW5hX3RvdWNoJiM0MzsmIzQzOzsKJiM0MzsJLyogcGluIHRoZSBzbG90IGxheW91dDogdGhlIGxlYWRpbmcgYXJncyBmaWxsIGN0eFswXS4uY3R4WzddICovCiYjNDM7CWlmIChjdHhbMF0gIT0gMSB8fCBjdHhbN10gIT0gOCkKJiM0MzsJCXJldHVybiAweGJhZDsKJiM0MzsJKnB0ciAmIzQzOz0gMTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oy5zdHJ1Y3Rfb3BzLmxpbmsmIzM0OykKJiM0MztzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB0ZXN0bW9kX2FyZW5hID0gewomIzQzOwkudGVzdF9hcmVuYSA9ICh2b2lkICopdGVzdF9hcmVuYV9jYiwKJiM0MzsJLnRlc3RfYXJlbmFfbnVsbGFibGUgPSAodm9pZCAqKXRlc3RfYXJlbmFfbnVsbGFibGVfY2IsCiYjNDM7CS50ZXN0X2FyZW5hX3N0YWNrID0gKHZvaWQgKil0ZXN0X2FyZW5hX3N0YWNrX2NiLAomIzQzO307CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO2ludCB0cmlnZ2VyKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7I2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpCiYjNDM7CXU2NCBfX2FyZW5hICp2YWw7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwkqdmFsID0gNDE7CiYjNDM7CXJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKCh1NjQgKil2YWwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CWlmICgqdmFsICE9IDQyKQomIzQzOwkJcmV0dXJuIDM7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBjYWxsYmFjayBtdXN0IGhhdmUgc2VlbiBleGFjdGx5ICh1MzIpKGthZGRyIC0ga2Vybl92bV9zdGFydCksCiYjNDM7CSAqIHdoaWNoIGlzIHRoZSBhcmVuYSBvZmZzZXQgb2YgdmFsIHdpdGggdGhlIHVwcGVyIDMyIGJpdHMgY2xlYXIuCiYjNDM7CSAqLwomIzQzOwlpZiAoY2JfcHRyX3ZhbCAhPSAodTMyKSh1NjQpdmFsKQomIzQzOwkJcmV0dXJuIDQ7CiYjNDM7CiYjNDM7CXJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKCh1NjQgKil2YWwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIDU7CiYjNDM7CWlmICgqdmFsICE9IDQzKQomIzQzOwkJcmV0dXJuIDY7CiYjNDM7CiYjNDM7CS8qIE5VTEwgc3Vydml2ZXMgdGhlIG51bGxhYmxlIGtmdW5jIGFuZCB0aGUgdHJhbXBvbGluZSBhcyBOVUxMICovCiYjNDM7CXJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKE5VTEwpOwomIzQzOwlpZiAocmV0ICE9IDB4YmVlKQomIzQzOwkJcmV0dXJuIDc7CiYjNDM7CiYjNDM7CS8qIHRoZSBhcmVuYSBwb2ludGVyIGlzIHN0YWNrLXBhc3NlZCBpbnRvIHRoZSB0cmFtcG9saW5lIGhlcmUgKi8KJiM0MzsJcmV0ID0gYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2soKHU2NCAqKXZhbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gODsKJiM0MzsJaWYgKCp2YWwgIT0gNDQpCiYjNDM7CQlyZXR1cm4gOTsKJiM0MzsKJiM0MzsJYnBmX2FyZW5hX2ZyZWVfcGFnZXMoJmFtcDthcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7CiYjNDM7I2VuZGlmCiYjNDM7CXJldHVybiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4xYzBlYzcyN2Q2Mzc0Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5jCkBAIC0wLDAgJiM0MzsxLDIwIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmgmIzM0OwomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKJiM0MzsKJiM0MzsvKiBObyBhcmVuYSBpbiB0aGUgcHJvZ3JhbTogYXR0YWNoaW5nIHRvIHRlc3RfYXJlbmEgbXVzdCBiZSByZWplY3RlZC4gKi8KJiM0MztTRUMoJiMzNDtzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmEmIzM0OykKJiM0MztpbnQgdGVzdF9hcmVuYV9ub19hcmVuYSh1bnNpZ25lZCBsb25nIGxvbmcgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDsuc3RydWN0X29wcy5saW5rJiMzNDspCiYjNDM7c3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYV9mYWlsID0gewomIzQzOwkudGVzdF9hcmVuYSA9ICh2b2lkICopdGVzdF9hcmVuYV9ub19hcmVuYSwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMKaW5kZXggZWIwZjliNWUxOGQ4NS4uZmRlYWE1NjM1NmI1MiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jCkBAIC0yMzcsNiAmIzQzOzIzNyw1NiBAQCBfX2JwZl9rZnVuYyB2b2lkIGJwZl9rZnVuY19jb21tb25fdGVzdCh2b2lkKQogewogfQogCiYjNDM7X19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCh1NjQgKnZhbF9fYXJlbmEpCiYjNDM7ewomIzQzOwl1NjQgb2xkOwomIzQzOwomIzQzOwlvbGQgPSAqdmFsX19hcmVuYTsKJiM0MzsJKnZhbF9fYXJlbmEgPSBvbGQgJiM0MzsgMTsKJiM0MzsJcmV0dXJuIG9sZDsKJiM0Mzt9CiYjNDM7CiYjNDM7X19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdCh1NjQgKnZhbF9fYXJlbmFfbnVsbGFibGUpCiYjNDM7ewomIzQzOwl1NjQgb2xkOwomIzQzOwomIzQzOwlpZiAoIXZhbF9fYXJlbmFfbnVsbGFibGUpCiYjNDM7CQlyZXR1cm4gMHhkZWFkYmVlZjsKJiM0MzsKJiM0MzsJb2xkID0gKnZhbF9fYXJlbmFfbnVsbGFibGU7CiYjNDM7CSp2YWxfX2FyZW5hX251bGxhYmxlID0gb2xkICYjNDM7IDE7CiYjNDM7CXJldHVybiBvbGQ7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QodTY0ICp2YWxfX2FyZW5hKQomIzQzO3sKJiM0MzsJcmV0dXJuICh1NjQpdmFsX19hcmVuYTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdCh1NjQgKnZhbF9fYXJlbmFfbnVsbGFibGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gKHU2NCl2YWxfX2FyZW5hX251bGxhYmxlOwomIzQzO30KJiM0MzsKJiM0MztfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QodTY0ICphX19hcmVuYSwgdTY0ICpiX19hcmVuYSwKJiM0MzsJCQkJCSAgIHU2NCAqY19fYXJlbmEsIHU2NCAqZF9fYXJlbmEsCiYjNDM7CQkJCQkgICB1NjQgKmVfX2FyZW5hX251bGxhYmxlKQomIzQzO3sKJiM0MzsJcmV0dXJuICphX19hcmVuYSAmIzQzOyAqYl9fYXJlbmEgJiM0MzsgKmNfX2FyZW5hICYjNDM7ICpkX19hcmVuYSAmIzQzOwomIzQzOwkgICAgICAgKGVfX2FyZW5hX251bGxhYmxlID8gKmVfX2FyZW5hX251bGxhYmxlIDogMCk7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfc3RhY2tfYXJnX3Rlc3QodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsIHU2NCBlLAomIzQzOwkJCQkJCXU2NCAqZl9fYXJlbmEpCiYjNDM7ewomIzQzOwlyZXR1cm4gYSAmIzQzOyBiICYjNDM7IGMgJiM0MzsgZCAmIzQzOyBlICYjNDM7ICpmX19hcmVuYTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9taXhlZF90ZXN0KHU2NCAqYV9fYXJlbmEsIHU2NCAqYl9fYXJlbmFfbnVsbGFibGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gKmFfX2FyZW5hICYjNDM7IChiX19hcmVuYV9udWxsYWJsZSA/ICpiX19hcmVuYV9udWxsYWJsZSA6IDApOwomIzQzO30KJiM0MzsKIF9fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2R5bnB0cl90ZXN0KHN0cnVjdCBicGZfZHlucHRyICpwdHIsCiAJCQkJICAgICAgIHN0cnVjdCBicGZfZHlucHRyICpwdHJfX251bGxhYmxlKQogewpAQCAtMzQ3LDkgJiM0MzszOTcsMjkgQEAgc3RhdGljIGludCBicGZfdGVzdG1vZF90ZXN0XzQodm9pZCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYSh1NjQgKnB0cl9fYXJlbmEpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX251bGxhYmxlKHU2NCAqcHRyX19hcmVuYV9udWxsYWJsZSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2sodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsCiYjNDM7CQkJCQkgICAgICB1NjQgZSwgdTY0IGYsIHU2NCBnLCB1NjQgaCwKJiM0MzsJCQkJCSAgICAgIHU2NCAqcHRyX19hcmVuYSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyBfX2JwZl90ZXN0bW9kX29wczMgPSB7CiAJLnRlc3RfMSA9IGJwZl90ZXN0bW9kX3Rlc3RfMywKIAkudGVzdF8yID0gYnBmX3Rlc3Rtb2RfdGVzdF80LAomIzQzOwkudGVzdF9hcmVuYSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmEsCiYjNDM7CS50ZXN0X2FyZW5hX251bGxhYmxlID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9udWxsYWJsZSwKJiM0MzsJLnRlc3RfYXJlbmFfc3RhY2sgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrLAogfTsKIAogc3RhdGljIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3Rfb3BzMyh2b2lkKQpAQCAtMzY4LDYgJiM0Mzs0MzgsMjEgQEAgX19icGZfa2Z1bmMgdm9pZCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF8yKHZvaWQpCiAJc3Rfb3BzMy0mZ3Q7dGVzdF8yKCk7CiB9CiAKJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEodTY0ICpwdHJfX2FyZW5hKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN0X29wczMtJmd0O3Rlc3RfYXJlbmEocHRyX19hcmVuYSk7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZSh1NjQgKnB0cl9fYXJlbmFfbnVsbGFibGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3Rfb3BzMy0mZ3Q7dGVzdF9hcmVuYV9udWxsYWJsZShwdHJfX2FyZW5hX251bGxhYmxlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKHU2NCAqcHRyX19hcmVuYSkKJiM0Mzt7CiYjNDM7CXJldHVybiBzdF9vcHMzLSZndDt0ZXN0X2FyZW5hX3N0YWNrKDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIHB0cl9fYXJlbmEpOwomIzQzO30KJiM0MzsKIHN0cnVjdCBicGZfdGVzdG1vZF9idGZfdHlwZV90YWdfMSB7CiAJaW50IGE7CiB9OwpAQCAtNzU1LDYgJiM0Mzs4NDAsMTMgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxX25leHQsIEtGX0lURVJfTkVYVCB8IEtGX1JFVF9OVUxMKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxX2Rlc3Ryb3ksIEtGX0lURVJfREVTVFJPWSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl90ZXN0bW9kX3NlcV92YWx1ZSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY29tbW9uX3Rlc3QpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX251bGxhYmxlX2FyZ190ZXN0KQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdCkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19hcmVuYV9zdGFja19hcmdfdGVzdCkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9tZW1fbGVuX3Bhc3MxKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19keW5wdHJfdGVzdCkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfbmVzdGVkX2FjcXVpcmVfbm9uemVyb19vZmZzZXRfdGVzdCwgS0ZfQUNRVUlSRSkKQEAgLTc3MCw2ICYjNDM7ODYyLDkgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX2N0eF9jcmVhdGUsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTCkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9jdHhfcmVsZWFzZSwgS0ZfUkVMRUFTRSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF8xKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzIpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2spCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2dldF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpOwogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19wdXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTsKIEJURl9LRlVOQ1NfRU5EKGJwZl90ZXN0bW9kX2NvbW1vbl9rZnVuY19pZHMpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaAppbmRleCA4NjNmZDEwZjE2MTk5Li4zM2YyYWY1YjcwODU3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmgKQEAgLTEwNiw2ICYjNDM7MTA2LDEyIEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMyIHsKIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHsKIAlpbnQgKCp0ZXN0XzEpKHZvaWQpOwogCWludCAoKnRlc3RfMikodm9pZCk7CiYjNDM7CS8qIFVzZWQgdG8gdGVzdCBhcmVuYSBwb2ludGVyIGFyZ3VtZW50cy4gKi8KJiM0MzsJaW50ICgqdGVzdF9hcmVuYSkodTY0ICpwdHIpOwomIzQzOwlpbnQgKCp0ZXN0X2FyZW5hX251bGxhYmxlKSh1NjQgKnB0cik7CiYjNDM7CS8qIGVub3VnaCBsZWFkaW5nIGFyZ3MgdG8gZm9yY2UgQHB0ciBvbnRvIHRoZSBzdGFjayBvbiB4ODYgYW5kIGFybTY0ICovCiYjNDM7CWludCAoKnRlc3RfYXJlbmFfc3RhY2spKHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLCB1NjQgZSwgdTY0IGYsCiYjNDM7CQkJCXU2NCBnLCB1NjQgaCwgdTY0ICpwdHIpOwogfTsKIAogc3RydWN0IHN0X29wc19hcmdzIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oCmluZGV4IGMzNmJiOTExZGVmYTcuLjFhNzJkMGZkYTUzYzQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaApAQCAtOTgsNiAmIzQzOzk4LDE2IEBAIHZvaWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZWxlYXNlKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwKSBfX2tzeW07CiB2b2lkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmVmKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwKSBfX2tzeW07CiAKIHZvaWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9tZW1fbGVuX3Bhc3MxKHZvaWQgKm1lbSwgaW50IGxlbikgX19rc3ltOwomIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdChfX3U2NCAqdmFsX19hcmVuYSkgX19rc3ltOwomIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdChfX3U2NCAqdmFsX19hcmVuYV9udWxsYWJsZSkgX19rc3ltOwomIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdChfX3U2NCAqdmFsX19hcmVuYSkgX19rc3ltOwomIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdChfX3U2NCAqdmFsX19hcmVuYV9udWxsYWJsZSkgX19rc3ltOwomIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KF9fdTY0ICphX19hcmVuYSwgX191NjQgKmJfX2FyZW5hLAomIzQzOwkJCQkgX191NjQgKmNfX2FyZW5hLCBfX3U2NCAqZF9fYXJlbmEsCiYjNDM7CQkJCSBfX3U2NCAqZV9fYXJlbmFfbnVsbGFibGUpIF9fa3N5bTsKJiM0MztfX3U2NCBicGZfa2Z1bmNfYXJlbmFfc3RhY2tfYXJnX3Rlc3QoX191NjQgYSwgX191NjQgYiwgX191NjQgYywgX191NjQgZCwgX191NjQgZSwKJiM0MzsJCQkJICAgICBfX3U2NCAqZl9fYXJlbmEpIF9fa3N5bTsKJiM0MztfX3U2NCBicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdChfX3U2NCAqYV9fYXJlbmEsIF9fdTY0ICpiX19hcmVuYV9udWxsYWJsZSkgX19rc3ltOwogaW50ICpicGZfa2Z1bmNfY2FsbF90ZXN0X2dldF9yZHdyX21lbShzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyAqcCwgY29uc3QgaW50IHJkd3JfYnVmX3NpemUpIF9fa3N5bTsKIGludCAqYnBmX2tmdW5jX2NhbGxfdGVzdF9nZXRfcmRvbmx5X21lbShzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyAqcCwgY29uc3QgaW50IHJkb25seV9idWZfc2l6ZSkgX19rc3ltOwogaW50ICpicGZfa2Z1bmNfY2FsbF90ZXN0X2FjcV9yZG9ubHlfbWVtKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwLCBjb25zdCBpbnQgcmRvbmx5X2J1Zl9zaXplKSBfX2tzeW07CkBAIC0xMTEsNiAmIzQzOzEyMSw5IEBAIHUzMiBicGZfa2Z1bmNfY2FsbF90ZXN0X3N0YXRpY191bnVzZWRfYXJnKHUzMiBhcmcsIHUzMiB1bnVzZWQpIF9fa3N5bTsKICNlbmRpZgogCiB2b2lkIGJwZl90ZXN0bW9kX3Rlc3RfbW9kX2tmdW5jKGludCBpKSBfX2tzeW07CiYjNDM7aW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07CiYjNDM7aW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKF9fdTY0ICpwdHJfX2FyZW5hX251bGxhYmxlKSBfX2tzeW07CiYjNDM7aW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07CiAKIF9fdTY0IGJwZl9rZnVuY19jYWxsX3Rlc3QxKHN0cnVjdCBzb2NrICpzaywgX191MzIgYSwgX191NjQgYiwKIAkJCQlfX3UzMiBjLCBfX3U2NCBkKSBfX2tzeW07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE2OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDQ5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJQRiBBcmVuYSBQb2ludGVyIEltcGxlbWVudGF0aW9uIC0gSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgaW50cm9kdWNpbmcgYF9fYXJlbmFgIGFuZCBgX19hcmVuYV9udWxsYWJsZWAgYW5ub3RhdGlvbnMgZm9yIEJQRiBrZnVuYyBhbmQgc3RydWN0X29wcyBhcmd1bWVudHMuIFNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgaW1wYWN0aW5nIHRoZSBCUEYgdmVyaWZpZXIsIEpJVCBjb21waWxlciwgYW5kIHRyYW1wb2xpbmUgbG9naWMuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24sIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4KClRoZSBwYXRjaCB0b3VjaGVzIGEgYnVuY2ggb2YgZmlsZXM6IGBEb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0YCwgc29tZSBKSVQgY29tcGlsYXRpb24gY29kZSAoYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2ApLCB2YXJpb3VzIGluY2x1ZGUgZmlsZXMgKGBpbmNsdWRlL2xpbnV4L2JwZi5oYCwgYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgKSwgYW5kIGEgYnVuY2ggb2YgY29yZSBCUEYgY29kZSAoYGtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY2AsIGBrZXJuZWwvYnBmL2J0Zi5jYCwgYGtlcm5lbC9icGYvY29yZS5jYCwgYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCwgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2ApLCBhbmQgc29tZSBzZWxmdGVzdHMuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBhcmVhcyBvZiBpbnRlcmVzdCwgdGhlIGZvY3VzIHN5bWJvbHMuIExvb2tzIGxpa2UgaXQmIzM5O3MgaW50cm9kdWNpbmcgdGhlc2Ugc3RhdGljIGZ1bmN0aW9uczogYGVtaXRfa2Z1bmNfYXJlbmFfYXJnc2AsIGBlbWl0X2FyZW5hX2FyZ19jb252YCwgYHNhdmVfYXJnc2AsIGFuZCBtb2RpZnlpbmcgZnVuY3Rpb25zIGxpa2UgYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCwgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AsIGBwcmVwYXJlX2FyZ19pbmZvYCwgYXMgd2VsbCBhcyBgYnRmX2N0eF9hY2Nlc3NgLCBgX19nZXRfYXJnX2Ztb2RlbF9mbGFnc2AsIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYCwgYGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NgLCBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYCwgYGdldF9rZnVuY19hcmdfdHlwZWAsIGBjaGVja19rZnVuY19hcmdzYCwgYW5kIGBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZGAuCgpJIG5lZWQgdG8gbmFycm93IHRoaXMgZG93biB0byB0aGUgbW9zdCBjcml0aWNhbCBzeW1ib2xzLiBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IHdpdGggYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCwgYGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NgLCBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYCwgYGJ0Zl9jdHhfYWNjZXNzYCwgYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gLCBgZ2V0X2tmdW5jX2FyZ190eXBlYCwgYGNoZWNrX2tmdW5jX2FyZ3NgLCBhbmQgYGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkYC4gTGV0IG1lIHJlLWV2YWx1YXRlLCBzaW5jZSBJIHN1c3BlY3Qgc29tZSBvZiB0aGUgZm9jdXMgc3ltYm9scyBhcmUgb25seSBjYWxsZWQgaW4gYSBuYXJyb3cgc2V0IG9mIGNpcmN1bXN0YW5jZXMsIHN1Y2ggYXMgd2hlbiBwcmVwYXJpbmcgYSB0cmFtcG9saW5lLCB3aGljaCBJIHRoaW5rIG1lYW5zIEkgY2FuIHB1c2ggYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCB0byB0aGUgbG93ZXIgcHJpb3JpdHkgbGlzdC4KCmBicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzYCwgb24gdGhlIG90aGVyIGhhbmQsIHNlZW1zIGxpa2UgYSBnb29kIHRhcmdldC4gYGJ0Zl9jdHhfYWNjZXNzYCwgYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gLCBgZ2V0X2tmdW5jX2FyZ190eXBlYCwgYGNoZWNrX2tmdW5jX2FyZ3NgLCBhbmQgYGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkYCBhcmUgYWxsIGNhbGxlZCBkdXJpbmcgdmVyaWZpY2F0aW9uLCB3aGljaCBtZWFucyB0aGV5JiMzOTtyZSBhbHNvIGludGVyZXN0aW5nLgoKTm93LCBiZWZvcmUgSSBkaWcgdG9vIGRlZXAsIGxldCYjMzk7cyBjb25zaWRlciBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFNpbmNlIHRoaXMgaXMgaW4gdGhlIEJQRiBjb3JlLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIGdpdmVuLiBJIHNob3VsZCBwcm9iYWJseSBncmVwIGZvciBhbnkgZXhwbGljaXQgYENPTkZJR19CUEZfQVJFTkFgIG9wdGlvbnMgb3Igc2ltaWxhciwganVzdCBpbiBjYXNlIHRoZXJlJiMzOTtzIGEgY29uZmlndXJhdGlvbiBnYXRlLiBJIHdpbGwgY29uZmlybSB0byBhdm9pZCB3YXN0aW5nIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0JQRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz01OD1jb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNjQtXG5rZXJuZWwvYnBmL0tjb25maWc6NjU6XHQgIFdoZW4gQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OIGlzIGVuYWJsZWQsIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxua2VybmVsL2JwZi9LY29uZmlnLTY2LVx0ICBpcyBwZXJtYW5lbnRseSBzZXQgdG8gMSBhbmQgc2V0dGluZyBhbnkgb3RoZXIgdmFsdWUgdGhhbiB0aGF0IHdpbGxcbi0tXG5rZXJuZWwvYnBmL01ha2VmaWxlPTI9b2JqLXkgOj0gY29yZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM6aWZuZXEgKCQoQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZS00LSMgX19fYnBmX3Byb2dfcnVuKCkgbmVlZHMgR0NTRSBkaXNhYmxlZCBvbiB4ODY7IHNlZSAzMTkzYzA4MzZmMjAzIGZvciBkZXRhaWxzXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gJiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE1Om9iai0ke0NPTkZJR19CUEZfTFNNfVx0ICAmIzQzOz0gYnBmX2lub2RlX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkaXNhc20ubyBtcHJvZy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gdHJhbXBvbGluZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE5LWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIyOm9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gZGlzcGF0Y2hlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIzLWlmZXEgKCQoQ09ORklHX05FVCkseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZGV2bWFwLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY3B1bWFwLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gb2ZmbG9hZC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IG5ldF9uYW1lc3BhY2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZToyODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSB0Y3gub1xua2VybmVsL2JwZi9NYWtlZmlsZS0yOS1lbmRpZlxua2VybmVsL2JwZi9NYWtlZmlsZT0zMD1pZmVxICgkKENPTkZJR19QRVJGX0VWRU5UUykseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3RhY2ttYXAub1xua2VybmVsL2JwZi9NYWtlZmlsZS0zMi1lbmRpZlxua2VybmVsL2JwZi9NYWtlZmlsZT0zMz1pZmVxICgkKENPTkZJR19DR1JPVVBTKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZS0zNS1lbmRpZlxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9Mzc9aWZlcSAoJChDT05GSUdfSU5FVCkseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6Mzg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gcmV1c2Vwb3J0X2FycmF5Lm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMzktZW5kaWZcbi0tXG5rZXJuZWwvYnBmL01ha2VmaWxlPTQyPWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQzOmlmZXEgKCQoQ09ORklHX0JQRl9KSVQpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9zdHJ1Y3Rfb3BzLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6NDU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY3B1bWFzay5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTQ2LSMgYnBmX2xzbV9wcm90by5vIG11c3QgcHJlY2VkZSBicGZfbHNtLm8uIFRoZSBjdXJyZW50IHBhaG9sZSBsb2dpY1xuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGUtNTUtIyBzZW1hbnRpY3Mgd2l0aGluIHBhaG9sZSBhcmUgcmV2aXNpdGVkIGFjY29yZGluZ2x5Llxua2VybmVsL2JwZi9NYWtlZmlsZTo1NjpvYmotJHtDT05GSUdfQlBGX0xTTX0gJiM0Mzs9IGJwZl9sc21fcHJvdG8ubyBicGZfbHNtLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNTctZW5kaWZcbmtlcm5lbC9icGYvTWFrZWZpbGU9NTg9aWZuZXEgKCQoQ09ORklHX0NSWVBUTyksKVxua2VybmVsL2JwZi9NYWtlZmlsZTo1OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcnlwdG8ub1xua2VybmVsL2JwZi9NYWtlZmlsZS02MC1lbmRpZlxua2VybmVsL2JwZi9NYWtlZmlsZTo2MTpvYmotJChDT05GSUdfQlBGX1BSRUxPQUQpICYjNDM7PSBwcmVsb2FkL1xua2VybmVsL2JwZi9NYWtlZmlsZS02Mi1cbmtlcm5lbC9icGYvTWFrZWZpbGU6NjM6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gcmVsb19jb3JlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnRmX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZTo2NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGZfcmVsb2NhdGUub1xua2VybmVsL2JwZi9NYWtlZmlsZTo2NjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBrbWVtX2NhY2hlX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZS02Ny1pZmVxICgkKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6Njg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZG1hYnVmX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZS02OS1lbmRpZlxuLS1cbmtlcm5lbC9icGYvYnRmLmM9OTgzND1ib29sIGJ0Zl90eXBlX2lkc19ub2Nhc3RfYWxpYXMoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTk4ODgtXG5rZXJuZWwvYnBmL2J0Zi5jOjk4ODk6I2lmZGVmIENPTkZJR19CUEZfSklUXG5rZXJuZWwvYnBmL2J0Zi5jLTk4OTAtc3RhdGljIGludFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9NTI9dm9pZCBfX2luaXQgY2dyb3VwX2JwZl9saWZldGltZV9ub3RpZmllcl9pbml0KHZvaWQpXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy01Ny1cbmtlcm5lbC9icGYvY2dyb3VwLmM6NTg6I2lmZGVmIENPTkZJR19CUEZfTFNNXG5rZXJuZWwvYnBmL2Nncm91cC5jLTU5LXN0cnVjdCBjZ3JvdXBfbHNtX2F0eXBlIHtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE2Mj11bnNpZ25lZCBpbnQgX19jZ3JvdXBfYnBmX3J1bl9sc21fY3VycmVudChjb25zdCB2b2lkICpjdHgsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xODAtXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE4MTojaWZkZWYgQ09ORklHX0JQRl9MU01cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTgyLXN0YXRpYyBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGVcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTIzND1icGZfY2dyb3VwX2F0eXBlX2ZpbmQoZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUsIHUzMiBhdHRhY2hfYnRmX2lkKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMjM5LX1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MjQwOiNlbmRpZiAvKiBDT05GSUdfQlBGX0xTTSAqL1xua2VybmVsL2JwZi9jZ3JvdXAuYy0yNDEtXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MTAwPXN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfYWxsb2Nfbm9fc3RhdHModW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9leHRyYV9mbGFncylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0xMjgtXHRmcC1cdTAwM2VqaXRfcmVxdWVzdGVkID0gZWJwZl9qaXRfZW5hYmxlZCgpO1xua2VybmVsL2JwZi9jb3JlLmM6MTI5Olx0ZnAtXHUwMDNlaml0X3JlcXVpcmVkID0gSVNfRU5BQkxFRChDT05GSUdfQlBGX0pJVF9BTFdBWVNfT04pO1xua2VybmVsL2JwZi9jb3JlLmMtMTMwLVx0ZnAtXHUwMDNlYmxpbmRpbmdfcmVxdWVzdGVkID0gYnBmX2ppdF9ibGluZGluZ19lbmFibGVkKGZwKTtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0xNDMtXG5rZXJuZWwvYnBmL2NvcmUuYzoxNDQ6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9jb3JlLmMtMTQ1LVx0YnBmX3Byb2dfc3RyZWFtX2luaXQoZnApO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTU0MT12b2lkIGJwZl9wcm9nX2thbGxzeW1zX2RlbF9hbGwoc3RydWN0IGJwZl9wcm9nICpmcClcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy01NDYtXG5rZXJuZWwvYnBmL2NvcmUuYzo1NDc6I2lmZGVmIENPTkZJR19CUEZfSklUXG5rZXJuZWwvYnBmL2NvcmUuYy01NDgtLyogQWxsIEJQRiBKSVQgc3lzY3RsIGtub2JzIGhlcmUuICovXG5rZXJuZWwvYnBmL2NvcmUuYzo1NDk6aW50IGJwZl9qaXRfZW5hYmxlICAgX19yZWFkX21vc3RseSA9IElTX0JVSUxUSU4oQ09ORklHX0JQRl9KSVRfREVGQVVMVF9PTik7XG5rZXJuZWwvYnBmL2NvcmUuYzo1NTA6aW50IGJwZl9qaXRfa2FsbHN5bXMgX19yZWFkX21vc3RseSA9IElTX0JVSUxUSU4oQ09ORklHX0JQRl9KSVRfREVGQVVMVF9PTik7XG5rZXJuZWwvYnBmL2NvcmUuYy01NTEtaW50IGJwZl9qaXRfaGFyZGVuICAgX19yZWFkX21vc3RseTtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0xNjU1PXUxNiBicGZfb3V0X3N0YWNrX2FyZ19jbnQoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTE2NjMtfVxua2VybmVsL2JwZi9jb3JlLmM6MTY2NDojZW5kaWYgLyogQ09ORklHX0JQRl9KSVQgKi9cbmtlcm5lbC9icGYvY29yZS5jLTE2NjUtXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MTgyMz1ib29sIGJwZl9vcGNvZGVfaW5faW5zbnRhYmxlKHU4IGNvZGUpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMTg0NS1cbmtlcm5lbC9icGYvY29yZS5jOjE4NDY6I2lmbmRlZiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvY29yZS5jLTE4NDctLyogQWJzb2x1dGUgdmFsdWUgb2YgczMyIHdpdGhvdXQgdW5kZWZpbmVkIGJlaGF2aW9yIGZvciBTMzJfTUlOICovXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjQ3Mz1FVkFMNChQUk9HX05BTUVfTElTVCwgNDE2LCA0NDgsIDQ4MCwgNTEyKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI0NzYtXG5rZXJuZWwvYnBmL2NvcmUuYzoyNDc3OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jLTI0NzgtaW50IGJwZl9wYXRjaF9jYWxsX2FyZ3Moc3RydWN0IGJwZl9pbnNuICppbnNuLCB1MzIgc3RhY2tfZGVwdGgpXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjYxMD1zdGF0aWMgYm9vbCBicGZfcHJvZ19zZWxlY3RfaW50ZXJwcmV0ZXIoc3RydWN0IGJwZl9wcm9nICpmcClcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjEyLVx0Ym9vbCBzZWxlY3RfaW50ZXJwcmV0ZXIgPSBmYWxzZTtcbmtlcm5lbC9icGYvY29yZS5jOjI2MTM6I2lmbmRlZiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvY29yZS5jLTI2MTQtXHR1MzIgc3RhY2tfZGVwdGggPSBtYXhfdCh1MzIsIGZwLVx1MDAzZWF1eC1cdTAwM2VzdGFja19kZXB0aCwgMSk7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjYzMz1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjM0LXtcbmtlcm5lbC9icGYvY29yZS5jOjI2MzU6I2lmZGVmIENPTkZJR19CUEZfSklUXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjM2LVx0c3RydWN0IGJwZl9wcm9nICpvcmlnX3Byb2c7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzA1Nz12b2lkIF9fYnBmX2ZyZWVfdXNlZF9idGZzKHN0cnVjdCBidGZfbW9kX3BhaXIgKnVzZWRfYnRmcywgdTMyIGxlbilcbmtlcm5lbC9icGYvY29yZS5jLTMwNTgte1xua2VybmVsL2JwZi9jb3JlLmM6MzA1OTojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDYwLVx0c3RydWN0IGJ0Zl9tb2RfcGFpciAqYnRmX21vZDtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zMDc4PXN0YXRpYyB2b2lkIGJwZl9wcm9nX2ZyZWVfZGVmZXJyZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTMwODMtXHRhdXggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJwZl9wcm9nX2F1eCwgd29yayk7XG5rZXJuZWwvYnBmL2NvcmUuYzozMDg0OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jLTMwODUtXHRicGZfZnJlZV9rZnVuY19idGZfdGFiKGF1eC1cdTAwM2VrZnVuY19idGZfdGFiKTtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zNDA1PXN0YXRpYyBub2lubGluZSB2b2lkIGJwZl9wcm9nX3JlcG9ydF9tYXlfZ290b192aW9sYXRpb24odm9pZClcbmtlcm5lbC9icGYvY29yZS5jLTM0MDYte1xua2VybmVsL2JwZi9jb3JlLmM6MzQwNzojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDA4LVx0c3RydWN0IGJwZl9zdHJlYW1fc3RhZ2Ugc3M7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzQ0NT1fX3dlYWsgdTY0IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSlcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDQ5LVxua2VybmVsL2JwZi9jb3JlLmM6MzQ1MDojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDUxLV9fd2VhayBib29sIGJwZl9hcmVuYV9oYW5kbGVfcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgaXNfd3JpdGUsXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzQ3Nj1FWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKHhkcF9idWxrX3R4KTtcbmtlcm5lbC9icGYvY29yZS5jLTM0NzctXG5rZXJuZWwvYnBmL2NvcmUuYzozNDc4OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jLTM0NzktXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0xMjc9c3RhdGljIGludCBhZGRfa2Z1bmNfaW5faW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE0MS1cbmtlcm5lbC9icGYvZml4dXBzLmM6MTQyOiNpZm5kZWYgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE0My1zdGF0aWMgaW50IGdldF9jYWxsZWVfc3RhY2tfZGVwdGgoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTEzNzY9aW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvZml4dXBzLmMtMTM3Ny17XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjEzNzg6I2lmbmRlZiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvZml4dXBzLmMtMTM3OS1cdHN0cnVjdCBicGZfcHJvZyAqcHJvZyA9IGVudi1cdTAwM2Vwcm9nO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTQwNC1cdH1cbmtlcm5lbC9icGYvZml4dXBzLmM6MTQwNTojaWZuZGVmIENPTkZJR19CUEZfSklUX0FMV0FZU19PTlxua2VybmVsL2JwZi9maXh1cHMuYy0xNDA2LVx0aWYgKHByb2ctXHUwMDNlaml0X3JlcXVpcmVkKSB7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9Mjc2PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X2N1cnJlbnRfY29tbV9wcm90byA9IHtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yODMtXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyODQ6I2lmIGRlZmluZWQoQ09ORklHX1FVRVVFRF9TUElOTE9DS1MpIHx8IGRlZmluZWQoQ09ORklHX0JQRl9BUkNIX1NQSU5MT0NLKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjg1LVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ4NTA9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90aHJvdylcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4NTE6I2lmZGVmIENPTkZJR19CUEZfRVZFTlRTXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODUyLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfc2VuZF9zaWduYWxfdGFzaylcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00OTMwPUJURl9JRF9GTEFHUyhmdW5jLCBicGZfbG9jYWxfaXJxX3Jlc3RvcmUpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTMxOiNpZmRlZiBDT05GSUdfQlBGX0VWRU5UU1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDkzMi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3Byb2JlX3JlYWRfdXNlcl9keW5wdHIpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk2MT1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cm5jYXNlc3RyKTtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5NjI6I2lmIGRlZmluZWQoQ09ORklHX0JQRl9MU00pIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19DR1JPVVBTKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk2My1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2Nncm91cF9yZWFkX3hhdHRyLCBLRl9SQ1UpXG4tLVxua2VybmVsL2JwZi9wcmVsb2FkL01ha2VmaWxlPTM9TElCQlBGX0lOQ0xVREUgPSAkKHNyY3RyZWUpL3Rvb2xzL2xpYlxua2VybmVsL2JwZi9wcmVsb2FkL01ha2VmaWxlLTQtXG5rZXJuZWwvYnBmL3ByZWxvYWQvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfQlBGX1BSRUxPQURfVU1EKSAmIzQzOz0gYnBmX3ByZWxvYWQub1xua2VybmVsL2JwZi9wcmVsb2FkL01ha2VmaWxlLTYtQ0ZMQUdTX2JwZl9wcmVsb2FkX2tlcm4ubyAmIzQzOz0gLUkkKExJQkJQRl9JTkNMVURFKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTY4PWludCBzeXNjdGxfdW5wcml2aWxlZ2VkX2JwZl9kaXNhYmxlZCBfX3JlYWRfbW9zdGx5ID1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY5Olx0SVNfQlVJTFRJTihDT05GSUdfQlBGX1VOUFJJVl9ERUZBVUxUX09GRikgPyAyIDogMDtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTcwLVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTY1MTg9aW50IGtlcm5fc3lzX2JwZihpbnQgY21kLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgdW5zaWduZWQgaW50IHNpemUpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjUyMy1cdHN3aXRjaCAoY21kKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NTI0OiNpZmRlZiBDT05GSUdfQlBGX0pJVCAvKiBfX2JwZl9wcm9nX2VudGVyX3NsZWVwYWJsZSB1c2VkIGJ5IHRyYW1wb2xpbmUgYW5kIEpJVCAqL1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjUyNS1cdGNhc2UgQlBGX1BST0dfVEVTVF9SVU46XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTA1ND1pbnQgYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwNjUtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDY2OiNpZiBkZWZpbmVkKENPTkZJR19DR1JPVVBfQlBGKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQlBGX0xTTSlcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwNjctc3RhdGljIHZvaWQgYnBmX3NoaW1fdHJhbXBfbGlua19yZWxlYXNlKHN0cnVjdCBicGZfbGluayAqbGluaylcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNTQxPWludCBfX3dlYWsgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NDgtICAgIGRlZmluZWQoQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTKSBcdTAwMjZcdTAwMjYgXFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1NDk6ICAgIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU1MC1cbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzg2PWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xODIzLVx0ICBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxODI0Olx0ICBDT05GSUdfQlBGX1NZU0NBTEwgKi9cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE4MjUtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTQ0NjQ9QlRGX0lEKHN0cnVjdCwgY2dyb3VwKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ0NjUtI2VuZGlmXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDQ2NjojaWZkZWYgQ09ORklHX0JQRl9KSVRcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00NDY3LUJURl9JRChzdHJ1Y3QsIGJwZl9jcHVtYXNrKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTI3Mj1CVEZfSURfVU5VU0VEXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyNzMtI2VuZGlmXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEyNzQ6I2lmZGVmIENPTkZJR19CUEZfRVZFTlRTXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyNzUtQlRGX0lEKGZ1bmMsIGJwZl9zZXNzaW9uX2Nvb2tpZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEyODQ9QlRGX0lEKGZ1bmMsIGJwZl9pdGVyX251bV9kZXN0cm95KVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjg1OiNpZmRlZiBDT05GSUdfQlBGX0xTTVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjg2LUJURl9JRChmdW5jLCBicGZfc2V0X2RlbnRyeV94YXR0cilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEzMDM9QlRGX0lEKGZ1bmMsIGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMzA0OiNpZmRlZiBDT05GSUdfQlBGX0VWRU5UU1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzA1LUJURl9JRChmdW5jLCBicGZfc2Vzc2lvbl9pc19yZXR1cm4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5MzgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQXJlbmEgS0Z1bmMgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBfX2FyZW5hYCBhbmQgYF9fYXJlbmFfbnVsbGFibGVgIHN1cHBvcnQsIHdoaWNoIGlzIGdvb2QuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHRlc3Rpbmcgc3RyYXRlZ3kgdGhleSYjMzk7dmUgdXNlZC4gSSBzZWUgdGhlIHRlc3RzIGFyZSBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfa2Z1bmMuY2AsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9rZnVuY19qaXQuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNgLiBHb29kLCB0aGV5JiMzOTtyZSBjb21wcmVoZW5zaXZlLiBUaGV5IGFyZSByZWx5aW5nIG9uIGBicGZfdGVzdG1vZGAgYXMgZXhwZWN0ZWQuCgpJIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBidWlsZCBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UgdG8gcnVuIHRoZXNlIHRlc3RzLiBJIGFscmVhZHkga25vdyBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19CUEZfSklUYCBhcmUgcmVxdWlyZWQuIEkgdmFndWVseSByZWNhbGwgdGhlcmUgYmVpbmcgZWRnZSBjYXNlcyB3aGVyZSBgQ09ORklHX0JQRl9FVkVOVFNgIG1pZ2h0IGJlIG5lZWRlZCwgYnV0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBjcml0aWNhbCBvbmUuIEkgbmVlZCBgQ09ORklHX0JQRl9KSVRgIGZvciBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYCwgdGhhdCYjMzk7cyBvYnZpb3VzLiBBbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgbmVlZGVkIGZvciBgYXJlbmEub2AuCgpOb3csIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgaWYgYGJwZl90ZXN0bW9kYCBpdHNlbGYgaGFzIGFueSBzcGVjaWZpYyBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBjb3VsZCB0cmlwIG1lIHVwLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayB0byBiZSBzdXJlLiBCdXQgd2FpdCwgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfQlBGX0pJVGAgc2VlbSBwcmV0dHkgc3RhbmRhcmQ7IEkmIzM5O2xsIGNoZWNrIGBrZXJuZWwvYnBmL0tjb25maWdgIGZvciB0aGUgc3BlY2lmaWMgb3B0aW9ucy4gTGV0JiMzOTtzIG1ha2Ugc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxua2VybmVsL2JwZi9LY29uZmlnLTcwLVx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy03Mi1cbmtlcm5lbC9icGYvS2NvbmZpZzo3Mzpjb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxua2VybmVsL2JwZi9LY29uZmlnLTc0LVx0Ym9vbCBcJiMzNDtEaXNhYmxlIHVucHJpdmlsZWdlZCBCUEYgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZz05MD1zb3VyY2UgXCYjMzQ7a2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy05MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo5Mjpjb25maWcgQlBGX0xTTVxua2VybmVsL2JwZi9LY29uZmlnLTkzLVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTAzOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGlzIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGhhbmRmdWwgb2YgbmV3IGZ1bmN0aW9uczogYGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NgLCBgZW1pdF9rZnVuY19hcmVuYV9hcmdzYCwgYGVtaXRfYXJlbmFfYXJnX2NvbnZgLCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYCwgYW5kIGBfX2dldF9hcmdfZm1vZGVsX2ZsYWdzYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyB0aGVzZSBuZXcgY29tcG9uZW50cyBhcmUgaW50ZWdyYXRlZCwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBjb3JlIEJQRiBpbmZyYXN0cnVjdHVyZS4gVGhlIHByZXNlbmNlIG9mIGZ1bmN0aW9ucyBsaWtlIGBhcmVuYV9hcmdzYCBzdWdnZXN0cyBjaGFuZ2VzIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgSklUIGVudmlyb25tZW50LCB3aGljaCBpcyBhbHdheXMgaW50ZXJlc3RpbmcuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgc2NvcGUgb2YgdGhlc2UgY2hhbmdlcywgc3RhcnRpbmcgd2l0aCB2ZXJpZnlpbmcgdmlzaWJpbGl0eSBvZiB0aGUgc3ltYm9scy4gRmlyc3QsIGxldCYjMzk7cyBjb25maXJtIHRoZSBsb2NhdGlvbnMgb2YgdGhlICYjMzQ7Zm9jdXMgc3ltYm9scyYjMzQ7IHRoZSBwYXRjaCBoaWdobGlnaHRzOiBgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc2AsIGBicGZfdHJhbXBvbGluZV91cGRhdGVgLCBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2AsIGBidGZfY3R4X2FjY2Vzc2AsIGBnZXRfa2Z1bmNfYXJnX3R5cGVgLCBgY2hlY2tfa2Z1bmNfYXJnc2AsIGFuZCBgY2hlY2tfc3RydWN0X29wc19idGZfaWRgLgoKYGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQgZnJvbSBgaW5jbHVkZS9saW51eC9icGYuaGAgYW5kIGltcGxlbWVudGVkIGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgYW5kIHNvIGlzIG5vbiBzdGF0aWMsIHNvIHRoYXQmIzM5O3MgZ29vZC4gYGJwZl90cmFtcG9saW5lX3VwZGF0ZWAgaXMgYWxzbyB3aXRoaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCwgYXMgZXhwZWN0ZWQuIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYCBhbmQgYGJ0Zl9jdHhfYWNjZXNzYCBhcmUgbG9jYXRlZCBpbiBga2VybmVsL2JwZi9idGYuY2AuIEFuZCBgZ2V0X2tmdW5jX2FyZ190eXBlYCBhbmQgYGNoZWNrX2tmdW5jX2FyZ3NgIGFyZSBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgYGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkYCBpcyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4KCkFoYSEgYGdldF9rZnVuY19hcmdfdHlwZWAgYW5kIGBjaGVja19rZnVuY19hcmdzYCBhcmUgKnN0YXRpYyogd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBSaWdodCwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGNoYW5nZXMgaW52b2x2aW5nIGZ1bmN0aW9ucyB0aGF0IGRlYWwgd2l0aCB0aGUgdmVyaWZpZXIsIGJ1dCBpdCYjMzk7cyBub3QgZXhwb3NpbmcgbmV3IGV4dGVybmFsbHkgY2FsbGFibGUgdmVyaWZpZXIgZnVuY3Rpb25zLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgdG8gc2VlIGhvdyB0aGlzIGFmZmVjdHMgZXh0ZXJuYWwga2Z1bmNzLiBUaW1lIHRvIGluc3BlY3QgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgZGlyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X2tmdW5jX2FyZ190eXBlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTM5Nj1zdGF0aWMgaW50XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEzOTc6Z2V0X2tmdW5jX2FyZ190eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM5OC1cdFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJncywgaW50IGFyZywgaW50IG5hcmdzKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTUxMT1zdGF0aWMgaW50IGdlbl9rZnVuY19hcmdfcHJvdG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTUzNy1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTUzODpcdFx0YXJnX3R5cGUgPSBnZXRfa2Z1bmNfYXJnX3R5cGUoZW52LCBtZXRhLCBhcmdzLCBpLCBuYXJncyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE1MzktXHRcdGlmIChhcmdfdHlwZSBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjIyNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipDb25zaWRlcmluZyBGdW5jdGlvbiBBcmd1bWVudCBUeXBlcyoqCgpPa2F5LCBzbyBgZ2V0X2tmdW5jX2FyZ190eXBlYCBpcyBkZWZpbml0ZWx5IGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGNsZWFyLiBCdXQgbm93LCBJJiMzOTttIHdvbmRlcmluZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBgY2hlY2tfa2Z1bmNfYXJnc2AuIElzICppdCogc3RhdGljIGFzIHdlbGw/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIHRoYXQgZnVuY3Rpb24gc2hhcmVzIHRoZSBzYW1lIGRlc2lnbiBjaGFyYWN0ZXJpc3RpY3Mgb3IgaWYgdGhlcmUgaXMgYSBkaWZmZXJlbnQgYXBwcm9hY2ggZm9yIHRoaXMgZnVuY3Rpb24uIElzIHRoZXJlIHNvbWV0aGluZyBzcGVjaWFsIGFib3V0IHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMgb3IgdGhlIHdheSBpdCBpcyBjYWxsZWQgdGhhdCBtaWdodCBpbmZsdWVuY2UgaXRzIHN0YXR1cz8gSSBtdXN0IGtub3cgd2hldGhlciBpdCBpcyBzdGF0aWMsIGFuZCBob3cgdGhhdCBzdGF0dXMgbWF5IGVmZmVjdCBteSBkZXNpZ25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19rZnVuY19hcmdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjEwMT1zdGF0aWMgYm9vbCBjaGVja19jc3NfdGFza19pdGVyX2FsbG93bGlzdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjExNi1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjExNzpzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMTE4LVx0XHRcdCAgICBpbnQgaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzMDcwPXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTU0LVx0LyogQ2hlY2sgdGhlIGFyZ3VtZW50cyAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEzMTU1Olx0ZXJyID0gY2hlY2tfa2Z1bmNfYXJncyhlbnYsIFx1MDAyNm1ldGEsIGluc25faWR4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzE1Ni1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNDQwLVx0XHRlbHNlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM0NDE6XHRcdFx0Lyogc2NhbGFyLiBlbnN1cmVkIGJ5IGNoZWNrX2tmdW5jX2FyZ3MoKSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNDQyLVx0XHRcdG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCByZWdubywgdC1cdTAwM2VzaXplKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI3NzkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIFN0YXRpYyBOYXR1cmUgb2YgVGhpcyBTaXR1YXRpb24qKgoKSG1tLCBzbyBpdCYjMzk7cyBpbmhlcmVudGx5IHN0YXRpYy4gVGhhdOKAmXMgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFRoaXMgY29uc3RyYWlucyBob3cgSSBjYW4gYXBwcm9hY2ggdGhlIHByb2JsZW0sIHByb2JhYmx5IG5lY2Vzc2l0YXRpbmcgY29tcGlsZS10aW1lIGFuYWx5c2lzIG9yIGEgdmVyeSBjYXJlZnVsLCBpbW11dGFibGUgZGF0YSBzdHJ1Y3R1cmUgZGVzaWduLiBUaGUgbGltaXRhdGlvbnMgb2Ygc3RhdGljIGVudmlyb25tZW50cyBhbHdheXMgbWFrZSBtZSB0aGluayBhYm91dCB3b3JrYXJvdW5kcywgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBhY3R1YWwgY29uc3RyYWludHMgZmlyc3QsIGJlZm9yZSBkZXZpc2luZyBzb2x1dGlvbnMuCgpNeSBtaW5kIGp1bXBzIGltbWVkaWF0ZWx5IHRvIGEgZnVuY3Rpb24uLi4gd2hhdCBhYm91dCBgY2hlY2tfc3RydWN0X29wc19idGZfaWRgPyBJcyB0aGF0IHJlbGV2YW50IGhlcmU/IENvdWxkIHRoYXQgaG9sZCBzb21lIGluc2lnaHQgaW50byB0aGUgc3RhdGljIHN0cnVjdHVyZSBJJiMzOTttIGRlYWxpbmcgd2l0aCwgcGVyaGFwcyBzb21lIHR5cGUgSUQgb3Igc29tZXRoaW5nIHNpbWlsYXIgdGhhdCBoZWxwcyBtZSB0byB3b3JrIHdpdGggaXQ/IEdvdHRhIGV4YW1pbmUgdGhhdCBmdW5jdGlvbiYjMzk7cyBzaWduYXR1cmUgYW5kIGltcGxlbWVudGF0aW9uIG1vcmUgY2xvc2VseS4gSSB3b25kZXIgaWYgaXQgaGFzIGRpcmVjdCBhcHBsaWNhYmlsaXR5LCBvciBpZiBpdHMgcHJpbmNpcGxlcyBjYW4gYmUgYWRhcHRlZC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hlY2tfc3RydWN0X29wc19idGZfaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTE4ODM1PWludCBicGZfcHJvZ19jdHhfYXJnX2luZm9faW5pdChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4ODQzLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4ODQ0OnN0YXRpYyBpbnQgY2hlY2tfc3RydWN0X29wc19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODg0NS17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NTgyPXN0YXRpYyBpbnQgY2hlY2tfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTYwNS1cdGlmIChwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NjA2Olx0XHRyZXR1cm4gY2hlY2tfc3RydWN0X29wc19idGZfaWQoZW52KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTYwNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMyODcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgZm9jdXNpbmcgb24gdGhlIGltcGxpZWQgcmVhc29uaW5nOgoKKipEaWdnaW5nIGludG8gQlRGIERpc3RpbGxhdGlvbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHJldmlzaXRpbmcgdGhpcyBzdGF0aWMgYXNwZWN0IGFnYWluLiBIbW0sIGp1c3QgdG8gYmUgc3VyZS4uLiBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2AgZnVuY3Rpb24uIEkgaGF2ZSBhIGh1bmNoIGl0IG1pZ2h0IGJlIHJlbGV2YW50LCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnkgb2J2aW91cyBjb25uZWN0aW9ucyBiZXR3ZWVuIHRoZSBzdGF0aWMgcHJvcGVydHkgYW5kIGZ1bmN0aW9uIHByb3RvdHlwZXMuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiwgYW5kIEkgd2FudCB0byBiZSBjZXJ0YWluIHRoZSBleGlzdGluZyBsb2dpYyBpcyB0YWtpbmcgdGhlIHN0YXRpYyBwYXJ0IGludG8gYWNjb3VudCBwcm9wZXJseSB3aXRoaW4gdGhlIGRpc3RpbGxhdGlvbiBwcm9jZXNzLCBpZiBpdCBuZWVkcyB0by4gSSBzaG91bGQgZXhhbWluZSBob3cgdGhhdCBmdW5jdGlvbiBoYW5kbGVzIHN0YXRpYyBkZWNsYXJhdGlvbnMgb3IgcmVmZXJlbmNlcyBpbiBwcm90b3R5cGVzLiBBIHF1aWNrIHNjYW4gd2lsbCBjb25maXJtIHdoZXRoZXIgSSBuZWVkIHRvIGFkanVzdCBvciBpZiBpdCYjMzk7cyBhbHJlYWR5IHdlbGwgaGFuZGxlZC4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidGZfZGlzdGlsbF9mdW5jX3Byb3RvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9idGYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2J0Zi5jPTc1NDg9c3RhdGljIHU4IF9fZ2V0X2FyZ19mbW9kZWxfZmxhZ3MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNzU2My1cbmtlcm5lbC9icGYvYnRmLmM6NzU2NDppbnQgYnRmX2Rpc3RpbGxfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxua2VybmVsL2JwZi9idGYuYy03NTY1LVx0XHRcdCAgIHN0cnVjdCBidGYgKmJ0ZixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTY6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2NTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIEVwaGVtZXJhbCBhbmQgQ29uc2lkZXJpbmcgQWNjZXNzIENvbnRleHQqKgoKUmlnaHQsIHNvIHRoaXMgaXNuJiMzOTt0IGEgc3RhdGljIHNpdHVhdGlvbi4gVGhhdCYjMzk7cyB0aGUgY29yZSBhc3N1bXB0aW9uIEkmIzM5O20gd29ya2luZyBmcm9tLiBUaGlzIG1lYW5zIEkgbmVlZCB0byBiZSB0aGlua2luZyBhYm91dCBob3cgdGhpbmdzIGNoYW5nZSwgZXZvbHZlLCBhbmQgcG90ZW50aWFsbHkgZGVjYXkgb3ZlciB0aW1lLiBUaGUgaW1wbGljYXRpb25zIG9mICYjMzk7bm9uLXN0YXRpYyYjMzk7IGFyZSBnb2luZyB0byBjYXNjYWRlIHRocm91Z2ggdGhlIHJlc3Qgb2YgbXkgYW5hbHlzaXMuIFRoZSBjaGFsbGVuZ2UgdGhlbiBiZWNvbWVzIGlkZW50aWZ5aW5nIHRoZSBjaGFuZ2luZyB2YXJpYWJsZXMgYW5kIG1ha2luZyBzdXJlIEkgYWNjb3VudCBmb3IgdGhlIGltcGFjdCBvZiB0aG9zZSB2YXJpYWJsZXMuCgpBbmQgd2l0aCB0aGF0IHNhaWQsIG15IG5leHQgdGhvdWdodCBpcywgd2hhdCBhYm91dCBhY2Nlc3MgY29udGV4dD8gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgYGJ0Zl9jdHhfYWNjZXNzYC4gVGhpcyBmdW5jdGlvbiwgb3Igc3RydWN0dXJlLCB3aGF0ZXZlciBpdCBpcywgaXMgZ29pbmcgdG8gYmUgY2VudHJhbCB0byBob3cgSSBzaG91bGQgcHJvY2VlZC4gR2l2ZW4gdGhlIGZhY3QgdGhhdCB0aGUgc3ViamVjdCBpcyBub24tc3RhdGljLCBgYnRmX2N0eF9hY2Nlc3NgIGlzIGxpa2VseSB0byBiZSBhIGZhY3RvciB0aGF0IGlzIGR5bmFtaWMgYXMgd2VsbC4gQXJlIHRoZXJlIGluaGVyZW50IHJpc2tzIHRoYXQgYXJlIG9ubHkgcmV2ZWFsZWQgaW4gYSBzcGVjaWZpYyBjb250ZXh0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGR5bmFtaWMgbGFuZHNjYXBlLCBhbmQgaG93IHRoYXQgY29udGV4dCBhZmZlY3RzIHdoYXQgSSBuZWVkIHRvIGRvLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbnVhbmNlcy4gSXRzIGltcGxpY2F0aW9ucy4gTXkgbmV4dCBzdGVwcyBhcmUgdG8gcmV2aWV3IHRoaXMgZnVuY3Rpb24vc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidGZfY3R4X2FjY2VzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnRmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9idGYuYz02NjU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3Jhd190cF9udWxsX2FyZ3MgcmF3X3RwX251bGxfYXJnc1tdID0ge1xuLS1cbmtlcm5lbC9icGYvYnRmLmMtNjg0OS1cbmtlcm5lbC9icGYvYnRmLmM6Njg1MDpib29sIGJ0Zl9jdHhfYWNjZXNzKGludCBvZmYsIGludCBzaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxua2VybmVsL2JwZi9idGYuYy02ODUxLVx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNzEwMy19XG5rZXJuZWwvYnBmL2J0Zi5jOjcxMDQ6RVhQT1JUX1NZTUJPTF9HUEwoYnRmX2N0eF9hY2Nlc3MpO1xua2VybmVsL2JwZi9idGYuYy03MTA1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDE2NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgRHluYW1pYyBMYW5kc2NhcGUgb2YgZUJQRioqCgpIbW0sIHRoaXMgaXMgZGVmaW5pdGVseSBub3QgYSBzdGF0aWMgc2l0dWF0aW9uIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIFRoZSB3aG9sZSBuYXR1cmUgb2YgdGhpcyBmZWVscyBpbmhlcmVudGx5IGR5bmFtaWMgYW5kIGV2ZXItZXZvbHZpbmcuIE15IHByaW1hcnkgZm9jdXMgaXMgb24gdGhlIGltcGFjdCBvZiBjaGFuZ2VzLgoKT2theSwgbGV0JiMzOTtzIHpvb20gaW4gYSBsaXR0bGUgYml0LCB3aGF0IGFib3V0IHRoYXQgYGJwZl90cmFtcG9saW5lX3VwZGF0ZWAgZnVuY3Rpb24/IFRoYXQmIzM5O3MgdGhlIGtleSB2YXJpYWJsZSB0byB1cGRhdGUsIGlzbiYjMzk7dCBpdD8gSXQgaGFzIGFsbCB0aGUgaW1wYWN0IG9uIGhvdyBldmVyeXRoaW5nIGVsc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhbXBvbGluZV91cGRhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz02Mj1zdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy02OS0jaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3MDpzdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dGV4LFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzEtXHRcdFx0XHQgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyAqb3BzLCB2b2lkICpkYXRhKTtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05OD1zdGF0aWMgaW50IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmMoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgbG9uZyBpcCxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTYtXHRcdCAgICAhKHRyLVx1MDAzZWZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9PUklHX1NUQUNLKSlcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1NzpcdFx0XHRyZXQgPSBicGZfdHJhbXBvbGluZV91cGRhdGUodHIsIGZhbHNlIC8qIGxvY2tfZGlyZWN0X211dGV4ICovLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU4LVx0XHRcdFx0XHRcdCAgICBcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYzLVx0XHRpZiAodHItXHUwMDNlZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX09SSUdfU1RBQ0spXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjQ6XHRcdFx0cmV0ID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHRyLCBmYWxzZSAvKiBsb2NrX2RpcmVjdF9tdXRleCAqLyxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2NS1cdFx0XHRcdFx0XHQgICAgXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTM3Mz1zdGF0aWMgc3RydWN0IGJwZl90cmFtcG9saW5lICpicGZfdHJhbXBvbGluZV9sb29rdXAodTY0IGtleSwgdW5zaWduZWQgbG9uZyBpcClcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00MTAtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo0MTE6c3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGVfZmVudHJ5KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDEyLVx0XHRcdFx0XHR2b2lkICpvbGRfYWRkciwgdm9pZCAqbmV3X2FkZHIpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NDMyPXN0YXRpYyBpbnQgdW5yZWdpc3Rlcl9mZW50cnkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIG9yaWdfZmxhZ3MsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDM5LVx0ZWxzZVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NDQwOlx0XHRyZXQgPSBicGZfdHJhbXBvbGluZV91cGRhdGVfZmVudHJ5KHRyLCBvcmlnX2ZsYWdzLCBvbGRfYWRkciwgTlVMTCk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00NDEtXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NDUwPXN0YXRpYyBpbnQgbW9kaWZ5X2ZlbnRyeShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgb3JpZ19mbGFncywgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDU5LVx0fSBlbHNlIHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjQ2MDpcdFx0cmV0ID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlX2ZlbnRyeSh0ciwgb3JpZ19mbGFncywgb2xkX2FkZHIsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00NjEtXHRcdFx0XHRcdFx0ICAgbmV3X2FkZHIpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTQ3Mz1zdGF0aWMgaW50IHJlZ2lzdGVyX2ZlbnRyeShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00OTAtXHR9IGVsc2Uge1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NDkxOlx0XHRyZXQgPSBicGZfdHJhbXBvbGluZV91cGRhdGVfZmVudHJ5KHRyLCAwLCBOVUxMLCBuZXdfYWRkcik7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00OTItXHR9XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NzIwPXZvaWQgYnBmX3RyYW1wb2xpbmVfc2V0X2ZsYWdzKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBmbGFncylcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MjYtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3Mjc6c3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleCxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcyOC1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzICpvcHMsIHZvaWQgKmRhdGEpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTc2PXN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMTAtXHRcdHJldHVybiBlcnI7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDExOlx0ZXJyID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHRyLCB0cnVlIC8qIGxvY2tfZGlyZWN0X211dGV4ICovLCBvcHMsIGRhdGEpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTAxMi1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTAyOT1zdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwNDktXHRicGZfdHJhbXBvbGluZV9yZW1vdmVfcHJvZyh0ciwgbm9kZSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDUwOlx0cmV0dXJuIGJwZl90cmFtcG9saW5lX3VwZGF0ZSh0ciwgdHJ1ZSAvKiBsb2NrX2RpcmVjdF9tdXRleCAqLywgb3BzLCBkYXRhKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwNTEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTYyMQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYCoqCgpPa2F5LCBzbyBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYCBpcyBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVkIG15IGludGVyZXN0LiBHaXZlbiB0aGUgY29udGV4dCwgbXkgbWluZCBpcyBhbHJlYWR5IHJ1bm5pbmcgdGhyb3VnaCBpbXBsaWNhdGlvbnMgZm9yIGxpbmtlciB2aXNpYmlsaXR5LCBzeW1ib2wgc2NvcGluZywgYW5kIHBvdGVudGlhbCBpbmxpbmluZyBiZWhhdmlvdXIgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgQlBGIGluZnJhc3RydWN0dXJlLiBJdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbiwgYnV0IGl0JiMzOTtzIG5vdCB0aGUgZnVsbCBwaWN0dXJlLgoKVG8gdW5kZXJzdGFuZCB0aGUgcHJhY3RpY2FsIGltcGFjdCBvZiB0aGlzIGRlY2xhcmF0aW9uIGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQsIEkgc2hvdWxkIG5vdyBtb3ZlIGludG8gYGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NgLiBJIGhhdmUgYSBmZWVsaW5nIHRoYXQgZnVuY3Rpb24gd2lsbCBwcm92aWRlIHNvbWUgaW1wb3J0YW50IGluc2lnaHQgaGVyZS4gSSBleHBlY3QgaXQgaXMgcmVsYXRlZC4gRnJvbSB0aGVyZSwgSSB3aWxsIGJlIGFibGUgdG8gZm9ybSBhIG1vcmUgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHNlY3Rpb24gb2YgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTY6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jPTUzMj1zdGF0aWMgYm9vbCBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNTQ4LSAqL1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NTQ5OmJvb2wgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJncyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHUzMiBmbGFncyxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTU1MC1cdFx0XHRcdCAgc3RydWN0IGJwZl90cmFtcF9hcmVuYV9hcmdzICphYXJncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTY6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwMDgKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkFuYWx5emluZyBgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc2AgYW5kIFRyYW1wb2xpbmUgUHJlcGFyYXRpb24qKgoKQWxyaWdodCwgc28gYGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NgIGlzIGluZGVlZCAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIE5vdywgdGhhdCYjMzk7cyBjcnVjaWFsIGJlY2F1c2UgaXQgYWZmZWN0cyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIHRoZSBwb3NzaWJsZSBzY29wZSBvZiBpdHMgdXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyBhY2Nlc3NlZCB3aXRoaW4gdGhlIGJyb2FkZXIgQlBGIGNvbnRleHQuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGludG8gYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSB3aGVyZSBhIGxvdCBvZiB0aGUgbWFnaWMgaXMgaGFwcGVuaW5nIHJlZ2FyZGluZyB0aGUgc2V0dXAgYW5kIHByZXBhcmF0aW9uIG9mIHRoZXNlIEJQRiB0cmFtcG9saW5lcywgYW5kIHdoZXJlIGBicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzYCBsaWtlbHkgcGxheXMgYSBzaWduaWZpY2FudCByb2xlLCBwZXJoYXBzIGV2ZW4gYmVpbmcgY2FsbGVkIGRpcmVjdGx5IGFzIHBhcnQgb2YgdGhhdCBwcmVwYXJhdGlvbiBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZXNlIHR3byBpcyBjcml0aWNhbCBmb3IgZmlndXJpbmcgb3V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyBCUEYgdHJhbXBvbGluZXMgYXJlIHN0cnVjdHVyZWQgYW5kIGhhbmRsZWQuIEtub3dpbmcgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aWxsIGltbWVkaWF0ZWx5IHRlbGwgbWUgc29tZXRoaW5nIHZlcnkgaW50ZXJlc3RpbmcgYWJvdXQgdGhlIG92ZXJhbGwgZGVzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzMzNT1zdGF0aWMgaW50IGludm9rZV9icGZfbW9kX3JldChjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHByb2csXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM0MzYtICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzQzNzpzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbWFnZSxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNDM4LVx0XHRcdFx0XHQgdm9pZCAqcndfaW1hZ2VfZW5kLCB2b2lkICppbWFnZSxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mzc2Mj1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICppbWFnZSwgdm9pZCAqaW1hZ2VfZW5kLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzc3LVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM3Nzg6XHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShpbSwgcndfaW1hZ2UsIHJ3X2ltYWdlICYjNDM7IHNpemUsIGltYWdlLCBtLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3NzktXHRcdFx0XHRcdCAgICBmbGFncywgdG5vZGVzLCBmdW5jX2FkZHIpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNzkxPWludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3OTctXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6Mzc5ODpcdC8qIEFsbG9jYXRlIGEgdGVtcG9yYXJ5IGJ1ZmZlciBmb3IgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoKS5cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzk5LVx0ICpcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzgwNy1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozODA4Olx0cmV0ID0gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoXHUwMDI2aW0sIGltYWdlLCBpbWFnZSAmIzQzOyBQQUdFX1NJWkUsIGltYWdlLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM4MDktXHRcdFx0XHRcdCAgICBtLCBmbGFncywgdG5vZGVzLCBmdW5jX2FkZHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjkzMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqVHJhbXBvbGluZSBGdW5jdGlvbnMgYW5kIEFyZW5hIEFyZ3VtZW50IFN1cHBvcnQgaW4gQlBGIEpJVCoqCgpSaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgYSBkaXN0aW5jdGlvbiBoZXJlLiBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uIHdpdGhpbiBhIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQg4oCTIGxpa2VseSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdG8gcHJldmVudCBleHRlcm5hbCBsaW5rYWdlLiBPbiB0aGUgb3RoZXIgaGFuZCwgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgaXMgKm5vdCogYHN0YXRpY2AuIFRoaXMgaW1wbGllcyBpdCYjMzk7cyBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgdXNlLCBwcm9iYWJseSBhcyBwYXJ0IG9mIHRoZSBwdWJsaWMgQlBGIEpJVCBBUEkgb24gdGhlIGFyY2hpdGVjdHVyZSBpbiBxdWVzdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBhbmQgZnVuY3Rpb24gb2YgdGhlc2UgdHdvLiBJIGltYWdpbmUgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb24gd2lsbCBiZSB0aGUgZW50cnkgcG9pbnQgZXhwb3NlZCB0byB0aGUgaGlnaGVyLWxldmVsIEJQRiBzdWJzeXN0ZW0uIFRoZSBzdGF0aWMgb25lLCBsaWtlbHkgdXNlZCBpbnRlcm5hbGx5IGJ5IGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLCBkb2VzIHRoZSBoZWF2eSBsaWZ0aW5nLiBJIHNob3VsZCBleHBsb3JlIHRoZSBpbXBsZW1lbnRhdGlvbnMgdG8gY29uZmlybSB0aGlzLgoKTm93LCBsZXQmIzM5O3MgcGl2b3QuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYC4gSSYjMzk7bSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uLCBvciB2YXJpYWJsZSwgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gZGV0ZXJtaW5pbmcgd2hldGhlciBvciBub3QgdGhlIGFyY2hpdGVjdHVyZSYjMzk7cyBKSVQgY29tcGlsZXIgaGFzIHRoZSBuZWNlc3NhcnkgY2FwYWJpbGl0aWVzIGZvciAmIzM0O2FyZW5hIGFyZ3VtZW50cyYjMzQ7LiBJJiMzOTttIG1ha2luZyBhbiBhc3N1bXB0aW9uIHRoYXQgdGhlIGBhcmVuYWAgaXMgcmVsYXRlZCB0byBob3cgQlBGIHByb2dyYW1zIHBhc3MgYXJndW1lbnRzLCBvciBtYW5hZ2UgaW50ZXJtZWRpYXRlIHN0YXRlLiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gbWVtb3J5IG1hbmFnZW1lbnQgc3BlY2lmaWMgdG8gSklULWNvbXBpbGVkIEJQRiBjb2RlLiBUaGUgZnVuY3Rpb24gbmFtZSBpbXBsaWVzIHNvbWUgcnVudGltZSBjaGVjaywgb3IgcG9zc2libHkgYSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gZmxhZywgdG8gaW5kaWNhdGUgaWYgdGhpcyBzdXBwb3J0IGlzIGF2YWlsYWJsZS4gSSBzaG91bGQgZXhhbWluZSB0aGUgZGVmaW5pdGlvbiBhbmQgdXNlcyBvZiB0aGlzIGZsYWcsIG9yIGZ1bmN0aW9uLCB0byBkZXRlcm1pbmUgcHJlY2lzZWx5IHdoYXQmIzM5O3Mgc3VwcG9ydGVkIGFuZCB3aHkuIEkmIzM5O2QgYmUgbG9va2luZyBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gcGF0aHMsIGNoZWNrcyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMgb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgb3IgbWF5YmUgZXZlbiBjaGVja3MgZm9yIHNwZWNpZmljIGtlcm5lbCB2ZXJzaW9ucy4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZXNlIGVsZW1lbnRzIGNvbWJpbmUgYW5kIGluZmx1ZW5jZSB0aGUgQlBGIEpJVCYjMzk7cyBjb2RlIGdlbmVyYXRpb24gcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTY6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jb3JlLmM9MzMwNj1ib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZClcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzEwLVxua2VybmVsL2JwZi9jb3JlLmM6MzMxMTpib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcbmtlcm5lbC9icGYvY29yZS5jLTMzMTIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzU0NAoJCQkJCQkJb3V0cHV0OiA1NwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBXZWFrbmVzcyBhbmQgSWRlbnRpZnlpbmcgdGhlIFRhcmdldCoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IGZsYWdzIHRoaXMgYXMgYSBub24tc3RhdGljLCBvciAmIzM0O3dlYWsmIzM0OyBwb2ludC4gVGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBteSBpbnRlcm5hbCByYWRhcjsgd2UgbmVlZCB0byBkaWcgZGVlcGVyLiBNeSBmb2N1cyBzaGlmdHMgdG8gdGhlIHN1c3BlY3RlZCBhcmVhLiBMZXQmIzM5O3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIGBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYWAuIFRoaXMgY291bGQgYmUgdGhlIGxpbmNocGluLCBhbmQgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBzb21lIGludmVzdGlnYXRpb24uIFRpbWUgdG8gZ28gaHVudGluZyBmb3Igc29tZXRoaW5nIGludGVyZXN0aW5nIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYz00MzY9X19icGZfa2Z1bmMgdm9pZCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF8yKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYy00NDAtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jOjQ0MTpfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEodTY0ICpwdHJfX2FyZW5hKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYy00NDIte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMtNDQ1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYzo0NDY6X19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKHU2NCAqcHRyX19hcmVuYV9udWxsYWJsZSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMtNDQ3LXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jLTQ1MC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM6NDUxOl9fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayh1NjQgKnB0cl9fYXJlbmEpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jLTQ1Mi17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYz04NjQ9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzIpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jOjg2NTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jOjg2NjpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jOjg2NzpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2spXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jLTg2OC1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2dldF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODQ1MAoJCQkJCQkJb3V0cHV0OiAxNjcKCQkJCQkJCXRob3VnaHRzOiAxNTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEJQRiBBcmVuYSBQb2ludGVyIFN1cHBvcnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgY2hhbmdlcyByZWxhdGVkIHRvIEJQRiBrZnVuY3MgYW5kIGBzdHJ1Y3Rfb3BzYCBhcmd1bWVudHMsIHNwZWNpZmljYWxseSB0aGUgaW50cm9kdWN0aW9uIG9mIGBfX2FyZW5hYCBhbmQgYF9fYXJlbmFfbnVsbGFibGVgIGFubm90YXRpb25zLiBNeSBpbml0aWFsIHNjYW4gZm9jdXNlZCBvbiBmdW5jdGlvbnMgaW4gYHRlc3Rfa21vZHNgLCBidXQgdGhhdCYjMzk7cyBhIHJlZCBoZXJyaW5nLiBXZSBuZWVkIHRvIGxvb2sgYXQgd2hhdCYjMzk7cyBhY3R1YWxseSAqaW50ZWdyYXRlZCogaW50byB0aGUga2VybmVsJiMzOTtzIEJQRiBjb3JlIGxvZ2ljLgoKSSBpbW1lZGlhdGVseSBob25lZCBpbiBvbiBgYnRmX2N0eF9hY2Nlc3NgIGFuZCBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2AsIGJvdGggb2Ygd2hpY2ggYXJlIG5vbi1zdGF0aWMgYW5kIHBhcnQgb2YgdGhlIGNvcmUgQlBGIGNvZGUuICBgYnRmX2N0eF9hY2Nlc3NgIGlzIGNydWNpYWwgYmVjYXVzZSBpdCBnb3Zlcm5zIGNvbnRleHQgYWNjZXNzIGNoZWNrcyBmb3IgdHJhY2luZyBhbmQgYHN0cnVjdF9vcHNgIHByb2dyYW1zLiAgYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gIGlzIGVzc2VudGlhbCBmb3IgZGlzdGlsbGluZyBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciB0cmFtcG9saW5lIG9wZXJhdGlvbnMuCgpUaGVuIEkgY29uc2lkZXJlZCBvdGhlciBwb3NzaWJsZSBjYW5kaWRhdGVzLiBgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc2Agc2VlbXMgcHJvbWlzaW5nLCBhcyBkb2VzIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLCBidXQgdGhlIGxhdHRlciYjMzk7cyBqdXN0IGEgYm9vbGVhbiBjaGVjaywgd2hpY2ggaXNuJiMzOTt0IGFzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc2AgYW5kIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYCBhbmQgYGJ0Zl9jdHhfYWNjZXNzYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMuCgpJIGRpZCBhIGRlZXAgZGl2ZSB0byBlbnN1cmUgSSB3YXNuJiMzOTt0IG1pc3Npbmcgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byBCUEYuIEkgbG9va2VkIGludG8gYGJwZl9wcm9nX2N0eF9hcmdfaW5mb19pbml0YCwgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAsIGBicGZfc3RydWN0X29wc19pbWFnZV9mcmVlYCwgYHByZXBhcmVfYXJnX2luZm9gLCBgY2hlY2tfc3RydWN0X29wc19idGZfaWRgLCBgY2hlY2tfa2Z1bmNfYXJnc2AsIGFuZCBgZ2V0X2tmdW5jX2FyZ190eXBlYC4gIEkgd2FzIGNhcmVmdWwgdG8gbWFrZSBzdXJlIEkgd2FzbiYjMzk7dCBzZWxlY3Rpbmcgc3RhdGljIGZ1bmN0aW9ucywgc3VjaCBhcyBgcHJlcGFyZV9hcmdfaW5mb2AsIGBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZGAsIGBjaGVja19rZnVuY19hcmdzYCwgYW5kIGBnZXRfa2Z1bmNfYXJnX3R5cGVgLgoKU28sIHRoZSBkZWZpbml0aXZlIGxpc3Qgb2YgKm1vZGlmaWVkKiBvciAqYWRkZWQqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZToKCiogICBgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc2AKKiAgIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgCiogICBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2AKKiAgIGBidGZfY3R4X2FjY2Vzc2AKCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgYGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NgLiBJdOKAmXMgYWRkZWQgaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCBhbmQgaXMgY2FsbGVkIGZyb20gYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gIFRoaXMgcmVpbmZvcmNlcyBpdHMgaW1wb3J0YW5jZSBpbiB0aGUgdHJhbXBvbGluZSBsb2dpYy4gIFRoZSBjaGFuZ2VzIHRvIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYCBhbmQgYGJ0Zl9jdHhfYWNjZXNzYCBhcmUgbG9jYXRlZCBpbiBga2VybmVsL2JwZi9idGYuY2AuCgpJIHJldmlld2VkIHRoZSBvdGhlciBmaWxlcyBpbiB0aGUga2VybmVsLiBJbiBga2VybmVsL2JwZi9jb3JlLmNgLCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYCBpcyBhZGRlZC4gSW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AsIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIGlzIGFkZGVkIGFnYWluLgoKTXkgZm9jdXMgbmFycm93cyB0byB0aGVzZSBjb3JlIGZ1bmN0aW9uczoKCiogICBgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc2AKKiAgIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYAoqICAgYGJ0Zl9jdHhfYWNjZXNzYAoKTm93LCByZWdhcmRpbmcgY29uZmlndXJhdGlvbnMsIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYCBhcmUgb2J2aW91c2x5IGNyaXRpY2FsLiBUaGUgdHJhbXBvbGluZXMgYXJlIHBhcnQgb2YgdGhlIEpJVCwgc28gd2UgbmVlZCBib3RoLiAgSSBjb25maXJtZWQgdGhhdCBgQlBGX0pJVF9BTFdBWVNfT05gIGlzbiYjMzk7dCBzdHJpY3RseSBuZWNlc3NhcnkuIGBCUEZfRVZFTlRTYCBpc24mIzM5O3QgcmVxdWlyZWQgaGVyZSBlaXRoZXIuCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb25zLiBgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc2AgaXMgZGVmaW5lZCBhczoKCmBgYGMKYm9vbCBicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzKHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcywgdTMyIGZsYWdzLAoJCQkJICBzdHJ1Y3QgYnBmX3RyYW1wX2FyZW5hX2FyZ3MgKmFhcmdzKQpgYGAKCkl0IGlzIGV4cG9ydGVkIGluIGBpbmNsdWRlL2xpbnV4L2JwZi5oYC4KCmBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYCBpcyBkZWZpbmVkIGFzOgoKYGBgYwppbnQgYnRmX2Rpc3RpbGxfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLAoJCQkgICBzdHJ1Y3QgYnRmICpidGYsCgkJCSAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqZnVuYywKCQkJICAgY29uc3QgY2hhciAqZnVuY19uYW1lLAoJCQkgICBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0pCmBgYAoKYGJ0ZgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJncyYjMzQ7LAogICAgJiMzNDtidGZfZGlzdGlsbF9mdW5jX3Byb3RvJiMzNDssCiAgICAmIzM0O2J0Zl9jdHhfYWNjZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYF9fYXJlbmFgIGFuZCBgX19hcmVuYV9udWxsYWJsZWAgYW5ub3RhdGlvbnMgZm9yIEJQRiBrZnVuY3MgYW5kIHN0cnVjdF9vcHMgYXJndW1lbnRzLiBJdCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyLCBKSVQgY29tcGlsZXIgKHg4NiksIGFuZCB0cmFtcG9saW5lIGxvZ2ljIHRvIHN1cHBvcnQgYXJlbmEgcG9pbnRlcnMsIGluY2x1ZGluZyByZWJhc2luZyB0aGVtIHRvIGtlcm5lbCBhZGRyZXNzZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0IHZlcmlmaWNhdGlvbiBvZiBhcmVuYSBwb2ludGVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3MmIzM0OywKICAgICYjMzQ7YnRmX2Rpc3RpbGxfZnVuY19wcm90byYjMzQ7LAogICAgJiMzNDtidGZfY3R4X2FjY2VzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBfX2FyZW5hYCBhbmQgYF9fYXJlbmFfbnVsbGFibGVgIGFubm90YXRpb25zIGZvciBCUEYga2Z1bmNzIGFuZCBzdHJ1Y3Rfb3BzIGFyZ3VtZW50cy4gSXQgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciwgSklUIGNvbXBpbGVyICh4ODYpLCBhbmQgdHJhbXBvbGluZSBsb2dpYyB0byBzdXBwb3J0IGFyZW5hIHBvaW50ZXJzLCBpbmNsdWRpbmcgcmViYXNpbmcgdGhlbSB0byBrZXJuZWwgYWRkcmVzc2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbWVtb3J5IHNhZmV0eSBhbmQgY29ycmVjdCB2ZXJpZmljYXRpb24gb2YgYXJlbmEgcG9pbnRlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNjoxMzowOC43MDI4NzA1MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDU0NDQ5MzYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NcIixcbiAgICBcImJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9cIixcbiAgICBcImJ0Zl9jdHhfYWNjZXNzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgX19hcmVuYWAgYW5kIGBfX2FyZW5hX251bGxhYmxlYCBhbm5vdGF0aW9ucyBmb3IgQlBGIGtmdW5jcyBhbmQgc3RydWN0X29wcyBhcmd1bWVudHMuIEl0IG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIsIEpJVCBjb21waWxlciAoeDg2KSwgYW5kIHRyYW1wb2xpbmUgbG9naWMgdG8gc3VwcG9ydCBhcmVuYSBwb2ludGVycywgaW5jbHVkaW5nIHJlYmFzaW5nIHRoZW0gdG8ga2VybmVsIGFkZHJlc3Nlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG1lbW9yeSBzYWZldHkgYW5kIGNvcnJlY3QgdmVyaWZpY2F0aW9uIG9mIGFyZW5hIHBvaW50ZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNjoxMzowOC43MDI4Nzg4OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMyMDcyNTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDBhZmM2NzQ2ZGEwZWM5MDJiZWI2NjM2N2M0NTcwMWZkMDY1OGIxMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzIDE2OjEzOjA3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XFxuaW5kZXggY2JkZTg2ZDA4MmNjZS4uNDhjZjc0NmY5ZmY5ZCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxcbkBAIC0yNzgsNiArMjc4LDQzIEBAIEFuIGV4YW1wbGUgaXMgZ2l2ZW4gYmVsb3c6OlxcbiAgICAgICAgICAgICAgICAgLi4uXFxuICAgICAgICAgfVxcbiBcXG4rMi4zLjggX19hcmVuYSBhbmQgX19hcmVuYV9udWxsYWJsZSBBbm5vdGF0aW9uc1xcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuK1xcbitCb3RoIGFubm90YXRpb25zIGluZGljYXRlIHRoYXQgdGhlIHBvaW50ZXIgYXJndW1lbnQgcG9pbnRzIGludG8gdGhlXFxuK2NhbGxpbmcgcHJvZ3JhbSdzIGFyZW5hLiBUaGUgSklUIHJlYmFzZXMgdGhlIHZhbHVlIGF0IHRoZSBjYWxsIHNpdGUgc29cXG4rdGhlIGtmdW5jIHJlY2VpdmVzIGEgZGlyZWN0bHkgZGVyZWZlcmVuY2VhYmxlIGtlcm5lbCBhZGRyZXNzLCBzdWJqZWN0IHRvXFxuK3RoZSBhY2Nlc3MgcnVsZXMgZGVzY3JpYmVkIGluIDpyZWY6YEJQRl9rZnVuY19hcmVuYV9hY2Nlc3NgIChhdCBtb3N0XFxuK2BgR1VBUkRfU1ogLyAyYGAsIDMyIEtpQiwgcGFzdCB0aGUgcG9pbnRlciBpbiBhIHNpbmdsZSB1bmNoZWNrZWQgYWNjZXNzKS5cXG4rXFxuK1dpdGggYGBfX2FyZW5hYGAgdGhlIHJlYmFzZSBpcyB1bmNvbmRpdGlvbmFsIGFuZCB0aGUgYXJndW1lbnQgaXMgbmV2ZXJcXG4rTlVMTDogYSB2YWx1ZSB3aG9zZSBsb3dlciAzMiBiaXRzIGFyZSB6ZXJvIGFycml2ZXMgYXMgdGhlIGFyZW5hIGJhc2VcXG4rYWRkcmVzcyAoYXJlbmEgb2Zmc2V0IDApLiBUaGUga2Z1bmMgbXVzdCBub3QgY2hlY2sgdGhlIGFyZ3VtZW50IGZvciBOVUxMLlxcbitXaXRoIGBgX19hcmVuYV9udWxsYWJsZWBgIHN1Y2ggYSB2YWx1ZSBhcnJpdmVzIGFzIE5VTEwgaW5zdGVhZCBhbmQgdGhlXFxuK2tmdW5jIG11c3QgY2hlY2sgYmVmb3JlIGRlcmVmZXJlbmNpbmcuXFxuK1xcbitBbiBleGFtcGxlIGlzIGdpdmVuIGJlbG93OjpcXG4rXFxuKyAgICAgICAgX19icGZfa2Z1bmMgaW50IGJwZl9wcm9jZXNzX2l0ZW0oc3RydWN0IGl0ZW0gKml0ZW1fX2FyZW5hKVxcbisgICAgICAgIHtcXG4rICAgICAgICAuLi5cXG4rICAgICAgICB9XFxuK1xcbitDYWxsaW5nIHN1Y2ggYSBrZnVuYyByZXF1aXJlcyB0aGUgcHJvZ3JhbSB0byB1c2UgYW4gYXJlbmEgbWFwIGFuZCBhIEpJVCB3aXRoXFxuK2FyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQpOyB2ZXJpZmljYXRpb24gZmFpbHMgb3RoZXJ3aXNlLiBUaGVcXG4rcHJvZ3JhbSBjYW4gcGFzcyBhbnkgdmFsdWUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIGtlcm5lbC4gQSB2YWx1ZSB0aGF0IGRvZXNcXG4rbm90IHBvaW50IGludG8gdGhlIGFyZW5hIGlzIGEgcHJvZ3JhbSBidWcuXFxuK1xcbitUaGUgc3VmZml4ZXMgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIG9uIHRoZSBhcmd1bWVudHMgb2Ygc3RydWN0X29wcyBzdHViXFxuK2Z1bmN0aW9ucywgd2l0aCB0aGUgY29udmVyc2lvbiBydW5uaW5nIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uIFRoZVxcbitrZXJuZWwgY2FsbGVyIHBhc3NlcyB0aGUga2VybmVsIGFyZW5hIGFkZHJlc3MgYW5kIHRoZSB0cmFtcG9saW5lIGNvbnZlcnRzXFxuK2l0IHdoaWxlIHNhdmluZyB0aGUgYXJndW1lbnRzLCBzbyB0aGUgY2FsbGJhY2sgcmVjZWl2ZXMgYW4gYXJlbmEgcG9pbnRlclxcbitpdCBjYW4gZGVyZWZlcmVuY2UgZGlyZWN0bHkuIFdpdGggYGBfX2FyZW5hYGAgdGhlIGtlcm5lbCBjYWxsZXIgbXVzdCBub3RcXG4rcGFzcyBOVUxMLiBXaXRoIGBgX19hcmVuYV9udWxsYWJsZWBgIGEgTlVMTCBrZXJuZWwgcG9pbnRlciBhcnJpdmVzIGFzIE5VTEwuXFxuK0hvd2V2ZXIsIHRoZXJlIGlzIG5vIG9ibGlnYXRpb24gdG8gcHJvdmUgdG8gdGhlIHZlcmlmaWVyIHRoYXQgc3VjaCBhIHBvaW50ZXIgaXNcXG4rbm9uLU5VTEwgYmVmb3JlIHVzZSwgaW4tbGluZSB3aXRoIGV4aXN0aW5nIHNlbWFudGljcyBvZiBhcmVuYSBwb2ludGVycyB1c2VkIGluXFxuK2EgcHJvZ3JhbSAob3Igb2J0YWluZWQgZnJvbSBhbnkgb3RoZXIgc291cmNlKS5cXG4rXFxuIC4uIF9CUEZfa2Z1bmNfbm9kZWY6XFxuIFxcbiAyLjQgVXNpbmcgYW4gZXhpc3Rpbmcga2VybmVsIGZ1bmN0aW9uXFxuQEAgLTUxNSw2ICs1NTIsOCBAQCBJbiBvcmRlciB0byBhY2NvbW1vZGF0ZSBzdWNoIHJlcXVpcmVtZW50cywgdGhlIHZlcmlmaWVyIHdpbGwgZW5mb3JjZSBzdHJpY3RcXG4gUFRSX1RPX0JURl9JRCB0eXBlIG1hdGNoaW5nIGlmIHR3byB0eXBlcyBoYXZlIHRoZSBleGFjdCBzYW1lIG5hbWUsIHdpdGggb25lXFxuIGJlaW5nIHN1ZmZpeGVkIHdpdGggYGBfX19pbml0YGAuXFxuIFxcbisuLiBfQlBGX2tmdW5jX2FyZW5hX2FjY2VzczpcXG4rXFxuIDIuOCBBY2Nlc3NpbmcgYXJlbmEgbWVtb3J5IHRocm91Z2gga2Z1bmMgYXJndW1lbnRzXFxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG5pbmRleCAwMWU3Y2U1NjljMWVkLi40YjNlNWQ4YTRhNTYzIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xcbisrKyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xcbkBAIC0xNjc4LDYgKzE2NzgsNTAgQEAgc3RhdGljIGludCBlbWl0X3NwZWN0cmVfYmhiX2JhcnJpZXIodTggKipwcHJvZywgdTggKmlwLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLypcXG4rICogUmViYXNlIHRoZSBfX2FyZW5hIGFyZ3Mgb2YgYSBrZnVuYyBjYWxsIHRvIGFyZW5hIGtlcm5lbCBhZGRyZXNzZXMsXFxuKyAqIHJOID0ga2Vybl92bV9zdGFydCArICh1MzIpck4sIHdpdGggUjEyIGhvbGRpbmcga2Vybl92bV9zdGFydC4gQSBudWxsYWJsZVxcbisgKiBhcmcgcHJlc2VydmVzIE5VTEwgYnkgc2tpcHBpbmcgdGhlIGFkZCwgdGVzdGVkIG9uIHRoZSB0cnVuY2F0ZWQgdmFsdWUgYXNcXG4rICogYXJlbmEgTlVMTCBpcyBvZmZzZXQgMC4gUmV0dXJuIHRoZSBudW1iZXIgb2YgZW1pdHRlZCBieXRlcy5cXG4rICovXFxuK3N0YXRpYyBpbnQgZW1pdF9rZnVuY19hcmVuYV9hcmdzKHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csXFxuK1xcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHU4ICoqcHByb2cpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICpmbTtcXG4rXFx0dTggKnByb2cgPSAqcHByb2c7XFxuK1xcdHU4ICpzdGFydCA9IHByb2c7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoYnBmX3Byb2csIGluc24pO1xcbitcXHRpZiAoIWZtKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtaW5fdChpbnQsIGZtLVxcdTAwM2Vucl9hcmdzLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpOyBpKyspIHtcXG4rXFx0XFx0dTggZmxhZ3MgPSBmbS1cXHUwMDNlYXJnX2ZsYWdzW2ldO1xcbitcXHRcXHR1MzIgcmVnID0gQlBGX1JFR18xICsgaTtcXG4rXFxuK1xcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKFdBUk5fT05fT05DRSghYnBmX3Byb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXJlbmEpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdC8qIG1vdiBlTiwgZU46IHRydW5jYXRlIGFuZCBjbGVhciB0aGUgdXBwZXIgMzIgYml0cyAqL1xcbitcXHRcXHRlbWl0X21vdl9yZWcoXFx1MDAyNnByb2csIGZhbHNlLCByZWcsIHJlZyk7XFxuK1xcdFxcdGlmIChmbGFncyBcXHUwMDI2IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHKSB7XFxuK1xcdFxcdFxcdC8qIHRlc3QgZU4sIGVOOyBqeiBvdmVyIHRoZSAzLWJ5dGUgYWRkICovXFxuK1xcdFxcdFxcdG1heWJlX2VtaXRfbW9kKFxcdTAwMjZwcm9nLCByZWcsIHJlZywgZmFsc2UpO1xcbitcXHRcXHRcXHRFTUlUMigweDg1LCBhZGRfMnJlZygweEMwLCByZWcsIHJlZykpO1xcbitcXHRcXHRcXHRFTUlUMihYODZfSkUsIDMpO1xcbitcXHRcXHR9XFxuK1xcdFxcdC8qIGFkZCByTiwgcjEyICovXFxuK1xcdFxcdG1heWJlX2VtaXRfbW9kKFxcdTAwMjZwcm9nLCByZWcsIFg4Nl9SRUdfUjEyLCB0cnVlKTtcXG4rXFx0XFx0RU1JVDIoMHgwMSwgYWRkXzJyZWcoMHhDMCwgcmVnLCBYODZfUkVHX1IxMikpO1xcbitcXHR9XFxuK1xcbitcXHQqcHByb2cgPSBwcm9nO1xcbitcXHRyZXR1cm4gcHJvZyAtIHN0YXJ0O1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXFxuIFxcdFxcdCAgdTggKnJ3X2ltYWdlLCBpbnQgb2xkcHJvZ2xlbiwgc3RydWN0IGppdF9jb250ZXh0ICpjdHgsIGJvb2wgam1wX3BhZGRpbmcpXFxuIHtcXG5AQCAtMjU4Myw2ICsyNjI3LDEyIEBAIHN0OlxcdFxcdFxcdGluc25fb2ZmID0gaW5zbi1cXHUwMDNlb2ZmO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGlmICghaW1tMzIpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHRpZiAoc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gZW1pdF9rZnVuY19hcmVuYV9hcmdzKGJwZl9wcm9nLCBpbnNuLCBcXHUwMDI2cHJvZyk7XFxuK1xcdFxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRcXHRcXHRpcCArPSBlcnI7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aWYgKHByaXZfZnJhbWVfcHRyKSB7XFxuIFxcdFxcdFxcdFxcdHB1c2hfcjkoXFx1MDAyNnByb2cpO1xcbiBcXHRcXHRcXHRcXHRpcCArPSAyO1xcbkBAIC0yOTkzLDEyICszMDQzLDQwIEBAIHN0YXRpYyBpbnQgZ2V0X25yX3VzZWRfcmVncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0pXFxuIFxcdHJldHVybiBucl91c2VkX3JlZ3M7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIENvbnZlcnQgYW4gYXJlbmEga2VybmVsIGFkZHJlc3MgaW50byB0aGUgYXJlbmEgcG9pbnRlciBmb3JtIG9uIGl0cyB3YXlcXG4rICogaW50byB0aGUgQlBGIGN0eCwgcmF4ID0gKHUzMikoc3JjIC0ga2Vybl92bV9zdGFydCkuIEEgbnVsbGFibGUgYXJnXFxuKyAqIHByZXNlcnZlcyBOVUxMLCB0ZXN0ZWQgb24gdGhlIGZ1bGwgNjQtYml0IGtlcm5lbCBwb2ludGVyLiBUaGUgMzItYml0XFxuKyAqIHN1YnRyYWN0aW9uIGJvdGggdHJ1bmNhdGVzIGFuZCBjbGVhcnMgdGhlIHVwcGVyIGhhbGYsIHNvIHRoZSBzdG9yZWRcXG4rICogdmFsdWUgc2F0aXNmaWVzIHRoZSBKSVQgaW52YXJpYW50IGZvciBhcmVuYSBwb2ludGVyIHJlZ2lzdGVycy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGVtaXRfYXJlbmFfYXJnX2NvbnYodTggKipwcHJvZywgdTMyIHNyY19yZWcsIGJvb2wgbnVsbGFibGUsIHUzMiBiYXNlX2xvKVxcbit7XFxuK1xcdHU4ICpwcm9nID0gKnBwcm9nO1xcbitcXG4rXFx0aWYgKG51bGxhYmxlKSB7XFxuK1xcdFxcdGlmIChzcmNfcmVnICE9IEJQRl9SRUdfMClcXG4rXFx0XFx0XFx0ZW1pdF9tb3ZfcmVnKFxcdTAwMjZwcm9nLCB0cnVlLCBCUEZfUkVHXzAsIHNyY19yZWcpO1xcbitcXHRcXHQvKiB0ZXN0IHJheCwgcmF4OyBqeiBvdmVyIHRoZSA1LWJ5dGUgc3ViICovXFxuK1xcdFxcdEVNSVQzKDB4NDgsIDB4ODUsIDB4QzApO1xcbitcXHRcXHRFTUlUMihYODZfSkUsIDUpO1xcbitcXHR9IGVsc2UgaWYgKHNyY19yZWcgIT0gQlBGX1JFR18wKSB7XFxuK1xcdFxcdGVtaXRfbW92X3JlZyhcXHUwMDI2cHJvZywgZmFsc2UsIEJQRl9SRUdfMCwgc3JjX3JlZyk7XFxuK1xcdH1cXG4rXFx0Lyogc3ViIGVheCwgYmFzZV9sbyAqL1xcbitcXHRFTUlUMV9vZmYzMigweDJELCBiYXNlX2xvKTtcXG4rXFxuK1xcdCpwcHJvZyA9IHByb2c7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZyxcXG4tXFx0XFx0ICAgICAgaW50IHN0YWNrX3NpemUsIGJvb2wgZm9yX2NhbGxfb3JpZ2luLCB1MzIgZmxhZ3MpXFxuK1xcdFxcdCAgICAgIGludCBzdGFja19zaXplLCBib29sIGZvcl9jYWxsX29yaWdpbiwgdTMyIGZsYWdzLFxcbitcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wX2FyZW5hX2FyZ3MgKmFhcmdzKVxcbiB7XFxuIFxcdGludCBhcmdfcmVncywgZmlyc3Rfb2ZmID0gMCwgbnJfcmVncyA9IDAsIG5yX3N0YWNrX3Nsb3RzID0gMDtcXG4gXFx0Ym9vbCB1c2Vfam1wID0gYnBmX3RyYW1wb2xpbmVfdXNlX2ptcChmbGFncyk7XFxuLVxcdGludCBpLCBqO1xcbitcXHRpbnQgc3RhY2tfYXJnc19vZmYgPSAodXNlX2ptcCB8fCAoZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9JTkRJUkVDVCkpID8gMTYgOiAyNDtcXG4rXFx0aW50IGksIGosIHNsb3QgPSAwO1xcbiBcXG4gXFx0LyogU3RvcmUgZnVuY3Rpb24gYXJndW1lbnRzIHRvIHN0YWNrLlxcbiBcXHQgKiBGb3IgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdHdvIHBvaW50ZXJzIHRoZSBzZXF1ZW5jZSB3aWxsIGJlOlxcbkBAIC0zMDI5LDE2ICszMTA3LDIwIEBAIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZyxcXG4gXFx0XFx0XFx0LyogY29weSBmdW5jdGlvbiBhcmd1bWVudHMgZnJvbSBvcmlnaW4gc3RhY2sgZnJhbWVcXG4gXFx0XFx0XFx0ICogaW50byBjdXJyZW50IHN0YWNrIGZyYW1lLlxcbiBcXHRcXHRcXHQgKlxcbi1cXHRcXHRcXHQgKiBUaGUgc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgYXJndW1lbnRzIG9uLXN0YWNrXFxuLVxcdFxcdFxcdCAqIGlzOlxcbi1cXHRcXHRcXHQgKiAgIHJicCArIDgocHVzaCByYnApICtcXG4tXFx0XFx0XFx0ICogICA4KHJldHVybiBhZGRyIG9mIG9yaWdpbiBjYWxsKSArXFxuLVxcdFxcdFxcdCAqICAgOChyZXR1cm4gYWRkciBvZiB0aGUgY2FsbGVyKVxcbi1cXHRcXHRcXHQgKiB3aGljaCBtZWFuczogcmJwICsgMjRcXG4rXFx0XFx0XFx0ICogVGhlIGFyZ3VtZW50cyBvbi1zdGFjayBzdGFydCBhYm92ZSB0aGUgc2F2ZWQgcmJwXFxuK1xcdFxcdFxcdCAqIGFuZCB0aGUgcmV0dXJuIGFkZHJlc3NlczogdHdvIHJldHVybiBhZGRyZXNzZXNcXG4rXFx0XFx0XFx0ICogKG9yaWdpbiBjYWxsIGFuZCBjYWxsZXIpIHdoZW4gdGhlIHRyYW1wb2xpbmUgaXNcXG4rXFx0XFx0XFx0ICogZW50ZXJlZCB0aHJvdWdoIHRoZSBmZW50cnkgY2FsbCwgc28gcmJwICsgMjQsIGFuZFxcbitcXHRcXHRcXHQgKiBhIHNpbmdsZSBvbmUgd2hlbiBpdCBpcyBlbnRlcmVkIHdpdGggYSBqbXAgb3JcXG4rXFx0XFx0XFx0ICogY2FsbGVkIGluZGlyZWN0bHksIHNvIHJicCArIDE2LlxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGFyZ19yZWdzOyBqKyspIHtcXG4gXFx0XFx0XFx0XFx0ZW1pdF9sZHgocHJvZywgQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfRlAsXFxuLVxcdFxcdFxcdFxcdFxcdCBucl9zdGFja19zbG90cyAqIDggKyAxNiArICghdXNlX2ptcCkgKiA4KTtcXG4rXFx0XFx0XFx0XFx0XFx0IG5yX3N0YWNrX3Nsb3RzICogOCArIHN0YWNrX2FyZ3Nfb2ZmKTtcXG4rXFx0XFx0XFx0XFx0aWYgKGFhcmdzIFxcdTAwMjZcXHUwMDI2IChhYXJncy1cXHUwMDNlc2xvdHMgXFx1MDAyNiBCSVQoc2xvdCkpKVxcbitcXHRcXHRcXHRcXHRcXHRlbWl0X2FyZW5hX2FyZ19jb252KHByb2csIEJQRl9SRUdfMCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGFhcmdzLVxcdTAwM2VudWxsYWJsZV9zbG90cyBcXHUwMDI2IEJJVChzbG90KSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICh1MzIpYWFyZ3MtXFx1MDAzZWtlcm5fdm1fc3RhcnQpO1xcbiBcXHRcXHRcXHRcXHRlbWl0X3N0eChwcm9nLCBCUEZfRFcsIEJQRl9SRUdfRlAsIEJQRl9SRUdfMCxcXG4gXFx0XFx0XFx0XFx0XFx0IC1zdGFja19zaXplKTtcXG4gXFxuQEAgLTMwNDYsNiArMzEyOCw3IEBAIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZyxcXG4gXFx0XFx0XFx0XFx0XFx0Zmlyc3Rfb2ZmID0gc3RhY2tfc2l6ZTtcXG4gXFx0XFx0XFx0XFx0c3RhY2tfc2l6ZSAtPSA4O1xcbiBcXHRcXHRcXHRcXHRucl9zdGFja19zbG90cysrO1xcbitcXHRcXHRcXHRcXHRzbG90Kys7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0LyogT25seSBjb3B5IHRoZSBhcmd1bWVudHMgb24tc3RhY2sgdG8gY3VycmVudFxcbkBAIC0zMDU0LDE2ICszMTM3LDI0IEBAIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZyxcXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdGlmIChmb3JfY2FsbF9vcmlnaW4pIHtcXG4gXFx0XFx0XFx0XFx0bnJfcmVncyArPSBhcmdfcmVncztcXG4rXFx0XFx0XFx0XFx0c2xvdCArPSBhcmdfcmVncztcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdFxcdC8qIGNvcHkgdGhlIGFyZ3VtZW50cyBmcm9tIHJlZ3MgaW50byBzdGFjayAqL1xcbiBcXHRcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgYXJnX3JlZ3M7IGorKykge1xcbi1cXHRcXHRcXHRcXHRlbWl0X3N0eChwcm9nLCBCUEZfRFcsIEJQRl9SRUdfRlAsXFxuLVxcdFxcdFxcdFxcdFxcdCBucl9yZWdzID09IDUgPyBYODZfUkVHX1I5IDogQlBGX1JFR18xICsgbnJfcmVncyxcXG4tXFx0XFx0XFx0XFx0XFx0IC1zdGFja19zaXplKTtcXG4rXFx0XFx0XFx0XFx0dTMyIHNyYyA9IG5yX3JlZ3MgPT0gNSA/IFg4Nl9SRUdfUjkgOiBCUEZfUkVHXzEgKyBucl9yZWdzO1xcbitcXG4rXFx0XFx0XFx0XFx0aWYgKGFhcmdzIFxcdTAwMjZcXHUwMDI2IChhYXJncy1cXHUwMDNlc2xvdHMgXFx1MDAyNiBCSVQoc2xvdCkpKSB7XFxuK1xcdFxcdFxcdFxcdFxcdGVtaXRfYXJlbmFfYXJnX2NvbnYocHJvZywgc3JjLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgYWFyZ3MtXFx1MDAzZW51bGxhYmxlX3Nsb3RzIFxcdTAwMjYgQklUKHNsb3QpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgKHUzMilhYXJncy1cXHUwMDNla2Vybl92bV9zdGFydCk7XFxuK1xcdFxcdFxcdFxcdFxcdHNyYyA9IEJQRl9SRUdfMDtcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHRcXHRlbWl0X3N0eChwcm9nLCBCUEZfRFcsIEJQRl9SRUdfRlAsIHNyYywgLXN0YWNrX3NpemUpO1xcbiBcXHRcXHRcXHRcXHRzdGFja19zaXplIC09IDg7XFxuIFxcdFxcdFxcdFxcdG5yX3JlZ3MrKztcXG4rXFx0XFx0XFx0XFx0c2xvdCsrO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0fVxcbkBAIC0zMzU0LDExICszNDQ1LDEzIEBAIHN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltXFxuIFxcdHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKmZlbnRyeSA9IFxcdTAwMjZ0bm9kZXNbQlBGX1RSQU1QX0ZFTlRSWV07XFxuIFxcdHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKmZleGl0ID0gXFx1MDAyNnRub2Rlc1tCUEZfVFJBTVBfRkVYSVRdO1xcbiBcXHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICpmbW9kX3JldCA9IFxcdTAwMjZ0bm9kZXNbQlBGX1RSQU1QX01PRElGWV9SRVRVUk5dO1xcbitcXHRzdHJ1Y3QgYnBmX3RyYW1wX2FyZW5hX2FyZ3MgYWFyZ3M7XFxuIFxcdHZvaWQgKm9yaWdfY2FsbCA9IGZ1bmNfYWRkcjtcXG4gXFx0aW50IGNvb2tpZV9vZmYsIGNvb2tpZV9jbnQ7XFxuIFxcdHU4ICoqYnJhbmNoZXMgPSBOVUxMO1xcbiBcXHR1NjQgZnVuY19tZXRhO1xcbiBcXHR1OCAqcHJvZztcXG4rXFx0Ym9vbCBoYXNfYWFyZ3M7XFxuIFxcdGJvb2wgc2F2ZV9yZXQ7XFxuIFxcbiBcXHQvKlxcbkBAIC0zMzY5LDYgKzM0NjIsOCBAQCBzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbVxcbiBcXHRXQVJOX09OX09OQ0UoKGZsYWdzIFxcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAgKGZsYWdzIFxcdTAwMjYgfihCUEZfVFJBTVBfRl9JTkRJUkVDVCB8IEJQRl9UUkFNUF9GX1JFVF9GRU5UUllfUkVUKSkpO1xcbiBcXG4rXFx0aGFzX2FhcmdzID0gYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJncyh0bm9kZXMsIGZsYWdzLCBcXHUwMDI2YWFyZ3MpO1xcbitcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG0tXFx1MDAzZW5yX2FyZ3M7IGkrKylcXG4gXFx0XFx0bnJfcmVncyArPSAobS1cXHUwMDNlYXJnX3NpemVbaV0gKyA3KSAvIDggLSAxO1xcbiBcXG5AQCAtMzUwMyw3ICszNTk4LDggQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1cXG4gXFx0XFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChcXHUwMDI2cHJvZywgQlBGX1JFR18wLCAtaXBfb2ZmLCAobG9uZylmdW5jX2FkZHIpO1xcbiBcXHR9XFxuIFxcbi1cXHRzYXZlX2FyZ3MobSwgXFx1MDAyNnByb2csIHJlZ3Nfb2ZmLCBmYWxzZSwgZmxhZ3MpO1xcbitcXHRzYXZlX2FyZ3MobSwgXFx1MDAyNnByb2csIHJlZ3Nfb2ZmLCBmYWxzZSwgZmxhZ3MsXFxuK1xcdFxcdCAgaGFzX2FhcmdzID8gXFx1MDAyNmFhcmdzIDogTlVMTCk7XFxuIFxcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9DQUxMX09SSUcpIHtcXG4gXFx0XFx0LyogYXJnMTogbW92IHJkaSwgaW0gKi9cXG5AQCAtMzU0NSw3ICszNjQxLDcgQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1cXG4gXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX0NBTExfT1JJRykge1xcbiBcXHRcXHRyZXN0b3JlX3JlZ3MobSwgXFx1MDAyNnByb2csIHJlZ3Nfb2ZmKTtcXG4tXFx0XFx0c2F2ZV9hcmdzKG0sIFxcdTAwMjZwcm9nLCBhcmdfc3RhY2tfb2ZmLCB0cnVlLCBmbGFncyk7XFxuK1xcdFxcdHNhdmVfYXJncyhtLCBcXHUwMDI2cHJvZywgYXJnX3N0YWNrX29mZiwgdHJ1ZSwgZmxhZ3MsIE5VTEwpO1xcbiBcXG4gXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX1RSQU1QX0ZfVEFJTF9DQUxMX0NUWCkge1xcbiBcXHRcXHRcXHQvKiBCZWZvcmUgY2FsbGluZyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24sIGxvYWQgdGhlXFxuQEAgLTQwNDYsNiArNDE0MiwxMSBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4rYm9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcXG4re1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gdm9pZCAqYnBmX2FyY2hfdGV4dF9jb3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3QgbGVuKVxcbiB7XFxuIFxcdGlmICh0ZXh0X3Bva2VfY29weShkc3QsIHNyYywgbGVuKSA9PSBOVUxMKVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxcbmluZGV4IDM1Njg4NDU4N2FlMTEuLjJmNjA2YzMyNTY4MDYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmLmhcXG5AQCAtMTIxMyw2ICsxMjEzLDEyIEBAIHN0cnVjdCBicGZfcHJvZ19vZmZsb2FkIHtcXG4gLyogVGhlIGFyZ3VtZW50IGlzIHNpZ25lZC4gKi9cXG4gI2RlZmluZSBCVEZfRk1PREVMX1NJR05FRF9BUkdcXHRcXHRCSVQoMSlcXG4gXFxuKy8qIFRoZSBhcmd1bWVudCBpcyBhbiBhcmVuYSBwb2ludGVyLiAqL1xcbisjZGVmaW5lIEJURl9GTU9ERUxfQVJFTkFfQVJHXFx0XFx0QklUKDIpXFxuK1xcbisvKiBUaGUgYXJndW1lbnQgaXMgbnVsbGFibGUuICovXFxuKyNkZWZpbmUgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkdcXHRcXHRCSVQoMylcXG4rXFxuIHN0cnVjdCBidGZfZnVuY19tb2RlbCB7XFxuIFxcdHU4IHJldF9zaXplO1xcbiBcXHR1OCByZXRfZmxhZ3M7XFxuQEAgLTEyODYsNiArMTI5MiwyMCBAQCBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzIHtcXG4gXFx0aW50IG5yX25vZGVzO1xcbiB9O1xcbiBcXG4rLypcXG4rICogV2hpY2ggOC1ieXRlIGN0eCBzbG90cyBvZiBhIHN0cnVjdF9vcHMgdHJhbXBvbGluZSBob2xkIGFyZW5hIGtlcm5lbFxcbisgKiBwb2ludGVycyB0aGF0IHNhdmVfYXJncygpIGNvbnZlcnRzIHRvIHRoZSBhcmVuYSBwb2ludGVyIGZvcm0sXFxuKyAqIGN0eFtzbG90XSA9ICh1MzIpKGthZGRyIC0ga2Vybl92bV9zdGFydCkuXFxuKyAqL1xcbitzdHJ1Y3QgYnBmX3RyYW1wX2FyZW5hX2FyZ3Mge1xcbitcXHR1MzIgc2xvdHM7XFxuK1xcdHUzMiBudWxsYWJsZV9zbG90cztcXHQvKiBzdWJzZXQgb2YgQHNsb3RzIHdoZXJlIE5VTEwgaXMgcHJlc2VydmVkICovXFxuK1xcdHU2NCBrZXJuX3ZtX3N0YXJ0O1xcbit9O1xcbitcXG4rYm9vbCBicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzKHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcywgdTMyIGZsYWdzLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBicGZfdHJhbXBfYXJlbmFfYXJncyAqYWFyZ3MpO1xcbitcXG4gc3RydWN0IGJwZl90cmFtcF9ydW5fY3R4O1xcbiBcXG4gLyogRGlmZmVyZW50IHVzZSBjYXNlcyBmb3IgQlBGIHRyYW1wb2xpbmU6XFxuQEAgLTE2ODcsNiArMTcwNywxMSBAQCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4IHtcXG4gXFx0dTMyIGJ0Zl9pZDtcXG4gXFx0dTMyIHJlZl9pZDtcXG4gXFx0Ym9vbCByZWZjb3VudGVkO1xcbitcXHQvKlxcbitcXHQgKiBXZSBkb24ndCBlbmNvZGUgTlVMTC1uZXNzIGluIHRoZSB0eXBlIGZvciB0aGUgcHJvZ3JhbSwgYnV0IHN0aWxsIG5lZWRcXG4rXFx0ICogdG8gZGlzdGluZ3Vpc2ggaXQgZm9yIHRoZSBwdXJwb3NlcyBvZiB0ZWxsaW5nIEpJVHMgd2hhdCBzZXF1ZW5jZSB0byBlbWl0LlxcbitcXHQgKi9cXG4rXFx0Ym9vbCBhcmVuYV9udWxsYWJsZTtcXG4gfTtcXG4gXFxuIHN0cnVjdCBidGZfbW9kX3BhaXIge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxcbmluZGV4IDMyZDUyOTdjNTU3ZTUuLjM2Y2UzNDAzZmU1OTkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG5AQCAtMTE4Myw2ICsxMTgzLDcgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX3N1YnByb2dfdGFpbGNhbGxzKHZvaWQpO1xcbiBib29sIGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24odm9pZCk7XFxuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19rZnVuY19jYWxsKHZvaWQpO1xcbiBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKTtcXG4rYm9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZCk7XFxuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19mYXJfa2Z1bmNfY2FsbCh2b2lkKTtcXG4gYm9vbCBicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnModm9pZCk7XFxuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19wdHJfeGNoZyh2b2lkKTtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jIGIva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jXFxuaW5kZXggNGU3YTQ4YzAyYmU1Yy4uODI3YTYyMTZhNjIwMSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmNcXG4rKysgYi9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmNcXG5AQCAtMTQ3LDYgKzE0Nyw4IEBAIHZvaWQgYnBmX3N0cnVjdF9vcHNfaW1hZ2VfZnJlZSh2b2lkICppbWFnZSlcXG4gXFxuICNkZWZpbmUgTUFZQkVfTlVMTF9TVUZGSVggXFxcIl9fbnVsbGFibGVcXFwiXFxuICNkZWZpbmUgUkVGQ09VTlRFRF9TVUZGSVggXFxcIl9fcmVmXFxcIlxcbisjZGVmaW5lIEFSRU5BX1NVRkZJWCBcXFwiX19hcmVuYVxcXCJcXG4rI2RlZmluZSBBUkVOQV9NQVlCRV9OVUxMX1NVRkZJWCBcXFwiX19hcmVuYV9udWxsYWJsZVxcXCJcXG4gXFxuIC8qIFByZXBhcmUgYXJndW1lbnQgaW5mbyBmb3IgZXZlcnkgbnVsbGFibGUgYXJndW1lbnQgb2YgYSBtZW1iZXIgb2YgYVxcbiAgKiBzdHJ1Y3Rfb3BzIHR5cGUuXFxuQEAgLTE1OSw3ICsxNjEsNyBAQCB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX2ltYWdlX2ZyZWUodm9pZCAqaW1hZ2UpXFxuICAqIHRvIHByb3ZpZGUgYW4gYXJyYXkgb2Ygc3RydWN0IGJwZl9jdHhfYXJnX2F1eCwgd2hpY2ggaW4gdHVybiBwcm92aWRlc1xcbiAgKiB0aGUgaW5mb3JtYXRpb24gdGhhdCB1c2VkIGJ5IHRoZSB2ZXJpZmllciB0byBjaGVjayB0aGUgYXJndW1lbnRzIG9mIHRoZVxcbiAgKiBCUEYgc3RydWN0X29wcyBwcm9ncmFtIGFzc2lnbmVkIHRvIHRoZSBtZW1iZXIuIEhlcmUsIHdlIG9ubHkgY2FyZSBhYm91dFxcbi0gKiB0aGUgYXJndW1lbnRzIHRoYXQgYXJlIG1hcmtlZCBhcyBfX251bGxhYmxlLlxcbisgKiB0aGUgYXJndW1lbnRzIHRoYXQgYXJlIG1hcmtlZCBhcyBfX251bGxhYmxlLCBfX3JlZiBvciBfX2FyZW5hLlxcbiAgKlxcbiAgKiBUaGUgYXJyYXkgb2Ygc3RydWN0IGJwZl9jdHhfYXJnX2F1eCBpcyBldmVudHVhbGx5IGFzc2lnbmVkIHRvXFxuICAqIHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlY3R4X2FyZ19pbmZvIG9mIEJQRiBzdHJ1Y3Rfb3BzIHByb2dyYW1zIGFuZCBwYXNzZWQgdG8gdGhlXFxuQEAgLTE3NSw3ICsxNzcsOCBAQCBzdGF0aWMgaW50IHByZXBhcmVfYXJnX2luZm8oc3RydWN0IGJ0ZiAqYnRmLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2FyZ19pbmZvICphcmdfaW5mbylcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnN0dWJfZnVuY19wcm90bywgKnBvaW50ZWRfdHlwZTtcXG4tXFx0Ym9vbCBpc19udWxsYWJsZSA9IGZhbHNlLCBpc19yZWZjb3VudGVkID0gZmFsc2U7XFxuK1xcdGJvb2wgaXNfbnVsbGFibGUgPSBmYWxzZSwgaXNfcmVmY291bnRlZCA9IGZhbHNlLCBpc19hcmVuYSA9IGZhbHNlO1xcbitcXHRib29sIGlzX2FyZW5hX251bGxhYmxlID0gZmFsc2U7XFxuIFxcdGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKnN0dWJfYXJncywgKmFyZ3M7XFxuIFxcdHN0cnVjdCBicGZfY3R4X2FyZ19hdXggKmluZm8sICppbmZvX2J1ZjtcXG4gXFx0dTMyIG5hcmdzLCBhcmdfbm8sIGluZm9fY250ID0gMDtcXG5AQCAtMjI2LDI2ICsyMjksMzAgQEAgc3RhdGljIGludCBwcmVwYXJlX2FyZ19pbmZvKHN0cnVjdCBidGYgKmJ0ZixcXG4gXFx0aW5mbyA9IGluZm9fYnVmO1xcbiBcXHRmb3IgKGFyZ19ubyA9IDA7IGFyZ19ubyBcXHUwMDNjIG5hcmdzOyBhcmdfbm8rKykge1xcbiBcXHRcXHQvKiBTa2lwIGFyZ3VtZW50cyB0aGF0IGlzIG5vdCBzdWZmaXhlZCB3aXRoXFxuLVxcdFxcdCAqIFxcXCJfX251bGxhYmxlIG9yIF9fcmVmXFxcIi5cXG4rXFx0XFx0ICogXFxcIl9fbnVsbGFibGVcXFwiLCBcXFwiX19yZWZcXFwiLCBcXFwiX19hcmVuYVxcXCIgb3IgXFxcIl9fYXJlbmFfbnVsbGFibGVcXFwiLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aXNfbnVsbGFibGUgPSBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgXFx1MDAyNnN0dWJfYXJnc1thcmdfbm9dLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIE1BWUJFX05VTExfU1VGRklYKTtcXG4gXFx0XFx0aXNfcmVmY291bnRlZCA9IGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBcXHUwMDI2c3R1Yl9hcmdzW2FyZ19ub10sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBSRUZDT1VOVEVEX1NVRkZJWCk7XFxuK1xcdFxcdGlzX2FyZW5hX251bGxhYmxlID0gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIFxcdTAwMjZzdHViX2FyZ3NbYXJnX25vXSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgQVJFTkFfTUFZQkVfTlVMTF9TVUZGSVgpO1xcbitcXHRcXHRpc19hcmVuYSA9IGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBcXHUwMDI2c3R1Yl9hcmdzW2FyZ19ub10sIEFSRU5BX1NVRkZJWCk7XFxuIFxcbiBcXHRcXHRpZiAoaXNfbnVsbGFibGUpXFxuIFxcdFxcdFxcdHN1ZmZpeCA9IE1BWUJFX05VTExfU1VGRklYO1xcbiBcXHRcXHRlbHNlIGlmIChpc19yZWZjb3VudGVkKVxcbiBcXHRcXHRcXHRzdWZmaXggPSBSRUZDT1VOVEVEX1NVRkZJWDtcXG4rXFx0XFx0ZWxzZSBpZiAoaXNfYXJlbmFfbnVsbGFibGUpXFxuK1xcdFxcdFxcdHN1ZmZpeCA9IEFSRU5BX01BWUJFX05VTExfU1VGRklYO1xcbitcXHRcXHRlbHNlIGlmIChpc19hcmVuYSlcXG4rXFx0XFx0XFx0c3VmZml4ID0gQVJFTkFfU1VGRklYO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0LyogU2hvdWxkIGJlIGEgcG9pbnRlciB0byBzdHJ1Y3QgKi9cXG4tXFx0XFx0cG9pbnRlZF90eXBlID0gYnRmX3R5cGVfcmVzb2x2ZV9wdHIoYnRmLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgYXJnc1thcmdfbm9dLnR5cGUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2YXJnX2J0Zl9pZCk7XFxuLVxcdFxcdGlmICghcG9pbnRlZF90eXBlIHx8XFxuLVxcdFxcdCAgICAhYnRmX3R5cGVfaXNfc3RydWN0KHBvaW50ZWRfdHlwZSkpIHtcXG4rXFx0XFx0LyogU2hvdWxkIGJlIGEgcG9pbnRlciB0byBzdHJ1Y3QsIG9yIGFueSBwb2ludGVyIGZvciBfX2FyZW5hL19fYXJlbmFfbnVsbGFibGUgKi9cXG4rXFx0XFx0cG9pbnRlZF90eXBlID0gYnRmX3R5cGVfcmVzb2x2ZV9wdHIoYnRmLCBhcmdzW2FyZ19ub10udHlwZSwgXFx1MDAyNmFyZ19idGZfaWQpO1xcbitcXHRcXHRpZiAoIXBvaW50ZWRfdHlwZSB8fCAoIWlzX2FyZW5hIFxcdTAwMjZcXHUwMDI2ICFpc19hcmVuYV9udWxsYWJsZSBcXHUwMDI2XFx1MDAyNiAhYnRmX3R5cGVfaXNfc3RydWN0KHBvaW50ZWRfdHlwZSkpKSB7XFxuIFxcdFxcdFxcdHByX3dhcm4oXFxcInN0dWIgZnVuY3Rpb24gJXMgaGFzICVzIHRhZ2dpbmcgdG8gYW4gdW5zdXBwb3J0ZWQgdHlwZVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0c3R1Yl9mbmFtZSwgc3VmZml4KTtcXG4gXFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbkBAIC0yNzMsNiArMjgwLDE1IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9hcmdfaW5mbyhzdHJ1Y3QgYnRmICpidGYsXFxuIFxcdFxcdH0gZWxzZSBpZiAoaXNfcmVmY291bnRlZCkge1xcbiBcXHRcXHRcXHRpbmZvLVxcdTAwM2VyZWdfdHlwZSA9IFBUUl9UUlVTVEVEIHwgUFRSX1RPX0JURl9JRDtcXG4gXFx0XFx0XFx0aW5mby1cXHUwMDNlcmVmY291bnRlZCA9IHRydWU7XFxuK1xcdFxcdH0gZWxzZSBpZiAoaXNfYXJlbmEgfHwgaXNfYXJlbmFfbnVsbGFibGUpIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogQm90aCB0eXBlcyBnZXQgUFRSX1RPX0FSRU5BLiBJbiB2ZXJpZmllciBzdGF0ZSxcXG4rXFx0XFx0XFx0ICogUFRSX1RPX0FSRU5BIGVuY29tcGFzc2VzIHBvdGVudGlhbCBOVUxMIHZhbHVlcywgYnV0XFxuK1xcdFxcdFxcdCAqIHdlIGRvIG5vdCBmb3JjZSB0aGUgcHJvZ3JhbSB0byBjaGVjayBpdCwgb3IgbWFpbnRhaW5cXG4rXFx0XFx0XFx0ICogcHJlY2lzaW9uIGFyb3VuZCBpdCwgc2luY2UgaXQgaGFzIG5vIHNhZmV0eSBpbXBsaWNhdGlvbi5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGluZm8tXFx1MDAzZXJlZ190eXBlID0gUFRSX1RPX0FSRU5BO1xcbitcXHRcXHRcXHRpbmZvLVxcdTAwM2VhcmVuYV9udWxsYWJsZSA9IGlzX2FyZW5hX251bGxhYmxlO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRpbmZvKys7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jXFxuaW5kZXggNWU4YWM0NWNlNTZhZi4uZTMxZjU2ZjQwMWViZiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2J0Zi5jXFxuKysrIGIva2VybmVsL2JwZi9idGYuY1xcbkBAIC02OTYzLDE1ICs2OTYzLDE5IEBAIGJvb2wgYnRmX2N0eF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbiBcXG4tXFx0LyogY2hlY2sgZm9yIFBUUl9UT19SRE9OTFlfQlVGX09SX05VTEwgb3IgUFRSX1RPX1JEV1JfQlVGX09SX05VTEwgKi9cXG4rXFx0LypcXG4rXFx0ICogQ2hlY2sgZm9yIFBUUl9UT19SRE9OTFlfQlVGX09SX05VTEwsIFBUUl9UT19SRFdSX0JVRl9PUl9OVUxMIG9yXFxuK1xcdCAqIFBUUl9UT19BUkVOQSAoYm90aCBudWxsYWJsZSBhbmQgbm9uLW51bGxhYmxlIGNhc2VzKS5cXG4rXFx0ICovXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWN0eF9hcmdfaW5mb19zaXplOyBpKyspIHtcXG4gXFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9jdHhfYXJnX2F1eCAqY3R4X2FyZ19pbmZvID0gXFx1MDAyNnByb2ctXFx1MDAzZWF1eC1cXHUwMDNlY3R4X2FyZ19pbmZvW2ldO1xcbiBcXHRcXHR1MzIgdHlwZSwgZmxhZztcXG4gXFxuIFxcdFxcdHR5cGUgPSBiYXNlX3R5cGUoY3R4X2FyZ19pbmZvLVxcdTAwM2VyZWdfdHlwZSk7XFxuIFxcdFxcdGZsYWcgPSB0eXBlX2ZsYWcoY3R4X2FyZ19pbmZvLVxcdTAwM2VyZWdfdHlwZSk7XFxuLVxcdFxcdGlmIChjdHhfYXJnX2luZm8tXFx1MDAzZW9mZnNldCA9PSBvZmYgXFx1MDAyNlxcdTAwMjYgdHlwZSA9PSBQVFJfVE9fQlVGIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAoZmxhZyBcXHUwMDI2IFBUUl9NQVlCRV9OVUxMKSkge1xcbitcXHRcXHRpZiAoY3R4X2FyZ19pbmZvLVxcdTAwM2VvZmZzZXQgPT0gb2ZmIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAodHlwZSA9PSBQVFJfVE9fQVJFTkEgfHxcXG4rXFx0XFx0ICAgICAodHlwZSA9PSBQVFJfVE9fQlVGIFxcdTAwMjZcXHUwMDI2IChmbGFnIFxcdTAwMjYgUFRSX01BWUJFX05VTEwpKSkpIHtcXG4gXFx0XFx0XFx0aW5mby1cXHUwMDNlcmVnX3R5cGUgPSBjdHhfYXJnX2luZm8tXFx1MDAzZXJlZ190eXBlO1xcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0XFx0fVxcbkBAIC03NTQxLDYgKzc1NDUsMjIgQEAgc3RhdGljIHU4IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdClcXG4gXFx0cmV0dXJuIGZsYWdzO1xcbiB9XFxuIFxcbitzdGF0aWMgdTggX19nZXRfYXJnX2Ztb2RlbF9mbGFncyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuK1xcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcsXFxuK1xcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpXFxuK3tcXG4rXFx0dTggZmxhZ3MgPSBfX2dldF90eXBlX2Ztb2RlbF9mbGFncyh0KTtcXG4rXFxuK1xcdGlmIChidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcXFwiX19hcmVuYVxcXCIpIHx8XFxuK1xcdCAgICBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcXFwiX19hcmVuYV9udWxsYWJsZVxcXCIpKVxcbitcXHRcXHRmbGFncyB8PSBCVEZfRk1PREVMX0FSRU5BX0FSRztcXG4rXFx0aWYgKGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFxcXCJfX251bGxhYmxlXFxcIikgfHxcXG4rXFx0ICAgIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFxcXCJfX2FyZW5hX251bGxhYmxlXFxcIikpXFxuK1xcdFxcdGZsYWdzIHw9IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHO1xcbitcXG4rXFx0cmV0dXJuIGZsYWdzO1xcbit9XFxuK1xcbiBpbnQgYnRmX2Rpc3RpbGxfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbiBcXHRcXHRcXHQgICBzdHJ1Y3QgYnRmICpidGYsXFxuIFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqZnVuYyxcXG5AQCAtNzYwNiw3ICs3NjI2LDcgQEAgaW50IGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8oc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG4gXFx0XFx0bS1cXHUwMDNlYXJnX3NpemVbaV0gPSByZXQ7XFxuLVxcdFxcdG0tXFx1MDAzZWFyZ19mbGFnc1tpXSA9IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKHQpO1xcbitcXHRcXHRtLVxcdTAwM2VhcmdfZmxhZ3NbaV0gPSBfX2dldF9hcmdfZm1vZGVsX2ZsYWdzKGJ0ZiwgXFx1MDAyNmFyZ3NbaV0sIHQpO1xcbiBcXHR9XFxuIFxcdG0tXFx1MDAzZW5yX2FyZ3MgPSBuYXJncztcXG4gXFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY29yZS5jIGIva2VybmVsL2JwZi9jb3JlLmNcXG5pbmRleCBlMjA3NjY2N2IyNDUxLi5hM2UxZmFlMzJlYWNlIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvY29yZS5jXFxuKysrIGIva2VybmVsL2JwZi9jb3JlLmNcXG5AQCAtMzMwOCw2ICszMzA4LDExIEBAIGJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuK2Jvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4gYm9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c19mYXJfa2Z1bmNfY2FsbCh2b2lkKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xcbmluZGV4IGVkNzk5OWFkNmM2NmMuLmQyZDdhMjkwNDM0NWQgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi90cmFtcG9saW5lLmNcXG4rKysgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xcbkBAIC01MjksNiArNTI5LDUzIEBAIGJwZl90cmFtcG9saW5lX2dldF9wcm9ncyhjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBpbnQgKnRvdGFsLCBib29sICppcF9hXFxuIFxcdHJldHVybiB0bm9kZXM7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWN0eF9hcmdfaW5mb19zaXplOyBpKyspXFxuK1xcdFxcdGlmIChiYXNlX3R5cGUocHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VjdHhfYXJnX2luZm9baV0ucmVnX3R5cGUpID09IFBUUl9UT19BUkVOQSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rLypcXG4rICogQ29sbGVjdCB3aGljaCBjdHggc2xvdHMgb2YgYSBzdHJ1Y3Rfb3BzIHRyYW1wb2xpbmUgaG9sZCBhcmVuYSBrZXJuZWxcXG4rICogcG9pbnRlcnMgdGhhdCBzYXZlX2FyZ3MoKSBtdXN0IGNvbnZlcnQgdG8gdGhlIGFyZW5hIHBvaW50ZXIgZm9ybS4gT25seVxcbisgKiB0aGUgc3RydWN0X29wcyBpbmRpcmVjdCB0cmFtcG9saW5lIGNvbnZlcnRzOiBpdCBkaXNwYXRjaGVzIHRvIGEgc2luZ2xlXFxuKyAqIHByb2cgd2hvc2UgYXJlbmEgaXMga25vd24gYXQgZ2VuZXJhdGlvbiB0aW1lLiBSZXR1cm4gZmFsc2Ugd2hlbiB0aGVyZVxcbisgKiBpcyBub3RoaW5nIHRvIGNvbnZlcnQuXFxuKyAqL1xcbitib29sIGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3Moc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB1MzIgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IGJwZl90cmFtcF9hcmVuYV9hcmdzICphYXJncylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0bWVtc2V0KGFhcmdzLCAwLCBzaXplb2YoKmFhcmdzKSk7XFxuK1xcbitcXHRpZiAoIShmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX0lORElSRUNUKSB8fFxcbitcXHQgICAgdG5vZGVzW0JQRl9UUkFNUF9GRU5UUlldLm5yX25vZGVzICE9IDEpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHByb2cgPSB0bm9kZXNbQlBGX1RSQU1QX0ZFTlRSWV0ubm9kZXNbMF0tXFx1MDAzZWxpbmstXFx1MDAzZXByb2c7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWN0eF9hcmdfaW5mb19zaXplOyBpKyspIHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9jdHhfYXJnX2F1eCAqaW5mbyA9IFxcdTAwMjZwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWN0eF9hcmdfaW5mb1tpXTtcXG4rXFxuK1xcdFxcdGlmIChiYXNlX3R5cGUoaW5mby1cXHUwMDNlcmVnX3R5cGUpICE9IFBUUl9UT19BUkVOQSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGFhcmdzLVxcdTAwM2VzbG90cyB8PSBCSVQoaW5mby1cXHUwMDNlb2Zmc2V0IC8gOCk7XFxuK1xcdFxcdGlmIChpbmZvLVxcdTAwM2VhcmVuYV9udWxsYWJsZSlcXG4rXFx0XFx0XFx0YWFyZ3MtXFx1MDAzZW51bGxhYmxlX3Nsb3RzIHw9IEJJVChpbmZvLVxcdTAwM2VvZmZzZXQgLyA4KTtcXG4rXFx0fVxcbitcXHRpZiAoIWFhcmdzLVxcdTAwM2VzbG90cylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCFwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWFyZW5hKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRhYXJncy1cXHUwMDNla2Vybl92bV9zdGFydCA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWFyZW5hKTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGJwZl90cmFtcF9pbWFnZV9mcmVlKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltKVxcbiB7XFxuIFxcdGJwZl9pbWFnZV9rc3ltX2RlbChcXHUwMDI2aW0tXFx1MDAzZWtzeW0pO1xcbkBAIC02ODUsNiArNzMyLDcgQEAgc3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRcXG4gXFx0dTMyIG9yaWdfZmxhZ3MgPSB0ci1cXHUwMDNlZmxhZ3M7XFxuIFxcdGJvb2wgaXBfYXJnID0gZmFsc2U7XFxuIFxcdGludCBlcnIsIHRvdGFsLCBzaXplO1xcbitcXHRpbnQga2luZCwgaTtcXG4gXFxuIFxcdHRub2RlcyA9IGJwZl90cmFtcG9saW5lX2dldF9wcm9ncyh0ciwgXFx1MDAyNnRvdGFsLCBcXHUwMDI2aXBfYXJnKTtcXG4gXFx0aWYgKElTX0VSUih0bm9kZXMpKVxcbkBAIC02OTUsNiArNzQzLDIyIEBAIHN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbitcXHQvKlxcbitcXHQgKiBBcmVuYSBjdHggYXJncyBhcmUgY29udmVydGVkIG9ubHkgYnkgdGhlIHN0cnVjdF9vcHMgaW5kaXJlY3RcXG4rXFx0ICogdHJhbXBvbGluZSwgd2hpY2ggZGlzcGF0Y2hlcyB0byBhIHNpbmdsZSBrbm93biBwcm9nLiBHZW5lcmljXFxuK1xcdCAqIHRyYW1wb2xpbmVzIGNhbiBtaXggcHJvZ3Mgd2l0aCBkaWZmZXJlbnQgYXJlbmFzLCBzbyBubyBjb252ZXJzaW9uXFxuK1xcdCAqIGlzIHBvc3NpYmxlIGhlcmUuIE5vdCByZWFjaGFibGUgdG9kYXk6IG9ubHkgc3RydWN0X29wcyBwcm9ncyBnZXRcXG4rXFx0ICogYXJlbmEgY3R4IGFyZ3MgYW5kIHRoZXkgbmV2ZXIgcmlkZSBnZW5lcmljIHRyYW1wb2xpbmVzLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChraW5kID0gMDsga2luZCBcXHUwMDNjIEJQRl9UUkFNUF9NQVg7IGtpbmQrKykge1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdG5vZGVzW2tpbmRdLm5yX25vZGVzOyBpKyspIHtcXG4rXFx0XFx0XFx0aWYgKGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKHRub2Rlc1traW5kXS5ub2Rlc1tpXS1cXHUwMDNlbGluay1cXHUwMDNlcHJvZykpIHtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gLUVOT1RTVVBQO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdC8qIGNsZWFyIGFsbCBiaXRzIGV4Y2VwdCBTSEFSRV9JUE1PRElGWSBhbmQgVEFJTF9DQUxMX0NUWCAqL1xcbiBcXHR0ci1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gKEJQRl9UUkFNUF9GX1NIQVJFX0lQTU9ESUZZIHwgQlBGX1RSQU1QX0ZfVEFJTF9DQUxMX0NUWCk7XFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCBiMjc0MDA0ZmNjZmQ5Li5jOTEyOTMzMGRlZGU2IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC0xMDkwNyw2ICsxMDkwNywxNiBAQCBzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfaXJxX2ZsYWcoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtXFxuIFxcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcXFwiX19pcnFfZmxhZ1xcXCIpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfYXJlbmEoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpXFxuK3tcXG4rXFx0cmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFxcXCJfX2FyZW5hXFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19hcmVuYV9udWxsYWJsZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcXG4re1xcbitcXHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXFxcIl9fYXJlbmFfbnVsbGFibGVcXFwiKTtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX3NjYWxhcl93aXRoX25hbWUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbiBcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZyxcXG4gXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBjaGFyICpuYW1lKVxcbkBAIC0xMTEyNyw2ICsxMTEzNyw3IEBAIGVudW0ga2Z1bmNfcHRyX2FyZ190eXBlIHtcXG4gXFx0S0ZfQVJHX1BUUl9UT19JUlFfRkxBRyxcXG4gXFx0S0ZfQVJHX1BUUl9UT19SRVNfU1BJTl9MT0NLLFxcbiBcXHRLRl9BUkdfUFRSX1RPX1RBU0tfV09SSyxcXG4rXFx0S0ZfQVJHX1BUUl9UT19BUkVOQSxcXG4gfTtcXG4gXFxuIGVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcXG5AQCAtMTE0MTIsNyArMTE0MjMsNiBAQCBnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxcbiBcXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ0Zl90eXBlX3N0cih0KSk7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuLVxcbiBcXHRyZWZfdCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKG1ldGEtXFx1MDAzZWJ0ZiwgdC1cXHUwMDNldHlwZSwgTlVMTCk7XFxuIFxcdHJlZl90bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChtZXRhLVxcdTAwM2VidGYsIHJlZl90LVxcdTAwM2VuYW1lX29mZik7XFxuIFxcbkBAIC0xMTQ2MSw2ICsxMTQ3MSw5IEBAIGdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxuIFxcdFxcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19SRVNfU1BJTl9MT0NLO1xcbiBcXHRlbHNlIGlmIChpc19rZnVuY19hcmdfY2FsbGJhY2soZW52LCBtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pKVxcbiBcXHRcXHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQ0FMTEJBQ0s7XFxuK1xcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19hcmVuYShtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pIHx8XFxuK1xcdFxcdCBpc19rZnVuY19hcmdfYXJlbmFfbnVsbGFibGUobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4rXFx0XFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0FSRU5BO1xcbiBcXHRlbHNlIGlmIChhcmcgKyAxIFxcdTAwM2MgbmFyZ3MgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0IChpc19rZnVuY19hcmdfbWVtX3NpemUobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmcgKyAxXSkgfHxcXG4gXFx0XFx0ICBpc19rZnVuY19hcmdfY29uc3RfbWVtX3NpemUobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmcgKyAxXSkpKSB7XFxuQEAgLTEyMTU0LDYgKzEyMTY3LDMxIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXFxuIFxcbiBcXHRcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmdzW2ldLnR5cGUsIE5VTEwpO1xcbiBcXG4rXFx0XFx0aWYgKGJhc2VfdHlwZShrZl9hcmdfdHlwZSkgPT0gS0ZfQVJHX1BUUl9UT19BUkVOQSkge1xcbitcXHRcXHRcXHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XFxuK1xcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiSklUIGRvZXMgbm90IHN1cHBvcnQga2Z1bmMgJXMoKSB3aXRoIGFyZW5hIHBvaW50ZXIgYXJndW1lbnRzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRmdW5jX25hbWUpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT1RTVVBQO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGlmICghZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWFyZW5hKSB7XFxuK1xcdFxcdFxcdFxcdHZlcmJvc2UoZW52LFxcbitcXHRcXHRcXHRcXHRcXHRcXFwiJXMgYXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRpZiAocmVnbm8gXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgYXJlbmEgcG9pbnRlciBjYW5ub3QgYmUgYSBzdGFjayBhcmd1bWVudFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aWYgKHJlZy1cXHUwMDNldHlwZSAhPSBQVFJfVE9fQVJFTkEgXFx1MDAyNlxcdTAwMjYgcmVnLVxcdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSkge1xcbitcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIGlzIG5vdCBhIHBvaW50ZXIgdG8gYXJlbmEgb3Igc2NhbGFyXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0aWYgKGJ0Zl90eXBlX2lzX3B0cih0KSBcXHUwMDI2XFx1MDAyNiAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSB8fCB0eXBlX21heV9iZV9udWxsKHJlZy1cXHUwMDNldHlwZSkpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAhaXNfa2Z1bmNfYXJnX251bGxhYmxlKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbaV0pKSB7XFxuIFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiUG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkICVzXFxcXG5cXFwiLFxcbkBAIC0xODgwNyw2ICsxODg0NSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RydWN0X29wc19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsICpmdW5jX3Byb3RvO1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2M7XFxuK1xcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wc19hcmdfaW5mbyAqYXJnX2luZm87XFxuIFxcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzO1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyO1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBlbnYtXFx1MDAzZXByb2c7XFxuQEAgLTE4ODg1LDEwICsxODkyNCwyMyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbiBcXHR9XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc3Rfb3BzX2Rlc2MtXFx1MDAzZWFyZ19pbmZvW21lbWJlcl9pZHhdLmNudDsgaSsrKSB7XFxuLVxcdFxcdGlmIChzdF9vcHNfZGVzYy1cXHUwMDNlYXJnX2luZm9bbWVtYmVyX2lkeF0uaW5mb1tpXS5yZWZjb3VudGVkKSB7XFxuK1xcdGFyZ19pbmZvID0gXFx1MDAyNnN0X29wc19kZXNjLVxcdTAwM2VhcmdfaW5mb1ttZW1iZXJfaWR4XTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFyZ19pbmZvLVxcdTAwM2VjbnQ7IGkrKykge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4ICppbmZvID0gXFx1MDAyNmFyZ19pbmZvLVxcdTAwM2VpbmZvW2ldO1xcbitcXG4rXFx0XFx0aWYgKGluZm8tXFx1MDAzZXJlZmNvdW50ZWQpXFxuIFxcdFxcdFxcdGhhc19yZWZjb3VudGVkX2FyZyA9IHRydWU7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRpZiAoYmFzZV90eXBlKGluZm8tXFx1MDAzZXJlZ190eXBlKSA9PSBQVFJfVE9fQVJFTkEpIHtcXG4rXFx0XFx0XFx0aWYgKCFicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3MoKSkge1xcbitcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIkpJVCBkb2VzIG5vdCBzdXBwb3J0IGFyZW5hIGFyZ3VtZW50c1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRU5PVFNVUFA7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aWYgKCFwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWFyZW5hKSB7XFxuK1xcdFxcdFxcdFxcdHZlcmJvc2UoZW52LFxcbitcXHRcXHRcXHRcXHRcXHRcXFwiYXJlbmEgYXJndW1lbnQgb2YgJXMgcmVxdWlyZXMgYSBwcm9ncmFtIHdpdGggYW4gYXNzb2NpYXRlZCBhcmVuYVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0bW5hbWUpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuQEAgLTE4OTA5LDggKzE4OTYxLDcgQEAgc3RhdGljIGludCBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWF0dGFjaF9mdW5jX25hbWUgPSBtbmFtZTtcXG4gXFx0ZW52LVxcdTAwM2VvcHMgPSBzdF9vcHMtXFx1MDAzZXZlcmlmaWVyX29wcztcXG4gXFxuLVxcdHJldHVybiBicGZfcHJvZ19jdHhfYXJnX2luZm9faW5pdChwcm9nLCBzdF9vcHNfZGVzYy1cXHUwMDNlYXJnX2luZm9bbWVtYmVyX2lkeF0uaW5mbyxcXG4tXFx0XFx0XFx0XFx0XFx0ICBzdF9vcHNfZGVzYy1cXHUwMDNlYXJnX2luZm9bbWVtYmVyX2lkeF0uY250KTtcXG4rXFx0cmV0dXJuIGJwZl9wcm9nX2N0eF9hcmdfaW5mb19pbml0KHByb2csIGFyZ19pbmZvLVxcdTAwM2VpbmZvLCBhcmdfaW5mby1cXHUwMDNlY250KTtcXG4gfVxcbiAjZGVmaW5lIFNFQ1VSSVRZX1BSRUZJWCBcXFwic2VjdXJpdHlfXFxcIlxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2tmdW5jLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjliZTE5NTY1ZjBkNTNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfa2Z1bmMuY1xcbkBAIC0wLDAgKzEsMTUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImFyZW5hX2tmdW5jLnNrZWwuaFxcXCJcXG4rXFxuKy8qXFxuKyAqIFRoZSB0ZXN0IGtmdW5jcyBsaXZlIGluIGJwZl90ZXN0bW9kLiBSZXNvbHZpbmcga2Z1bmNzIGFnYWluc3QgbW9kdWxlXFxuKyAqIEJURnMgbmVlZHMgQ0FQX1NZU19BRE1JTiwgc28gcnVuIHdpdGggZnVsbCBjYXBhYmlsaXRpZXMgaW5zdGVhZCBvZlxcbisgKiB0aHJvdWdoIHRoZSB2ZXJpZmllciB0ZXN0cycgY2FwYWJpbGl0eS1yZXN0cmljdGVkIHJ1bm5lci5cXG4rICovXFxuK3ZvaWQgdGVzdF9hcmVuYV9rZnVuYyh2b2lkKVxcbit7XFxuK1xcdFJVTl9URVNUUyhhcmVuYV9rZnVuYyk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfa2Z1bmNfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9rZnVuY19qaXQuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjM1OWNkZTI0YzQ1ZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9rZnVuY19qaXQuY1xcbkBAIC0wLDAgKzEsMTMgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYXJlbmFfa2Z1bmNfaml0LnNrZWwuaFxcXCJcXG4rXFxuKy8qXFxuKyAqIFJ1bnMgd2l0aCBmdWxsIGNhcGFiaWxpdGllczogcmVzb2x2aW5nIG1vZHVsZSBrZnVuYyBrc3ltcyByZXF1aXJlc1xcbisgKiBDQVBfU1lTX0FETUlOLCB3aGljaCBydWxlcyBvdXQgdGhlIGNhcGFiaWxpdHktcmVzdHJpY3RlZCBydW5uZXIuXFxuKyAqL1xcbit2b2lkIHRlc3RfYXJlbmFfa2Z1bmNfaml0KHZvaWQpXFxuK3tcXG4rXFx0UlVOX1RFU1RTKGFyZW5hX2tmdW5jX2ppdCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjFlMzlkZWZhMzhhZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xcbkBAIC0wLDAgKzEsNzQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcInN0cnVjdF9vcHNfYXJlbmEuc2tlbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwic3RydWN0X29wc19hcmVuYV9mYWlsLnNrZWwuaFxcXCJcXG4rXFxuKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pXFxuKy8qXFxuKyAqIEF0dGFjaCBjYWxsYmFja3Mgd2l0aCBfX2FyZW5hIGFuZCBfX2FyZW5hX251bGxhYmxlIGFyZ3VtZW50cyBhbmQgZHJpdmVcXG4rICogdGhlbSB0aHJvdWdoIHRoZSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSooKSBrZnVuY3MuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBhcmVuYV9hcmcodm9pZClcXG4re1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpO1xcbitcXHRzdHJ1Y3Qgc3RydWN0X29wc19hcmVuYSAqc2tlbDtcXG4rXFx0c3RydWN0IGJwZl9saW5rICpsaW5rID0gTlVMTDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdHNrZWwgPSBzdHJ1Y3Rfb3BzX2FyZW5hX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic3RydWN0X29wc19hcmVuYV9fb3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRsaW5rID0gYnBmX21hcF9fYXR0YWNoX3N0cnVjdF9vcHMoc2tlbC1cXHUwMDNlbWFwcy50ZXN0bW9kX2FyZW5hKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGxpbmssIFxcXCJhdHRhY2hfc3RydWN0X29wc1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLnRyaWdnZXIpLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZ0b3B0cyk7XFxuK1xcdEFTU0VSVF9PSyhlcnIsIFxcXCJ0ZXN0X3J1blxcXCIpO1xcbitcXHRBU1NFUlRfRVEodG9wdHMucmV0dmFsLCAwLCBcXFwidHJpZ2dlcl9yZXR2YWxcXFwiKTtcXG4rXFxuK291dDpcXG4rXFx0YnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XFxuK1xcdHN0cnVjdF9vcHNfYXJlbmFfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEEgcHJvZ3JhbSB3aXRoIG5vIGFyZW5hIGNhbm5vdCBhdHRhY2ggdG8gYSBtZW1iZXIgd2l0aCBhbiBfX2FyZW5hXFxuKyAqIGFyZ3VtZW50LlxcbisgKi9cXG4rc3RhdGljIHZvaWQgYXJlbmFfYXJnX2ZhaWwodm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qgc3RydWN0X29wc19hcmVuYV9mYWlsICpza2VsO1xcbitcXG4rXFx0c2tlbCA9IHN0cnVjdF9vcHNfYXJlbmFfZmFpbF9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoQVNTRVJUX0VSUl9QVFIoc2tlbCwgXFxcInN0cnVjdF9vcHNfYXJlbmFfZmFpbF9fb3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWxfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG4rI2VuZGlmXFxuK1xcbisvKlxcbisgKiBTZXJpYWxpemVkIGJlY2F1c2UgaXQgYXR0YWNoZXMgdGhlIHNpbmdsZXRvbiBicGZfdGVzdG1vZF9vcHMzLCB3aGljaFxcbisgKiB0ZXN0X3N0cnVjdF9vcHNfcHJpdmF0ZV9zdGFjayBhbHNvIGF0dGFjaGVzOyByZWdpc3RlcmluZyBpdCB0d2ljZSBmYWlsc1xcbisgKiB3aXRoIC1FRVhJU1QuXFxuKyAqL1xcbit2b2lkIHNlcmlhbF90ZXN0X3N0cnVjdF9vcHNfYXJlbmEodm9pZClcXG4re1xcbitcXHQvKlxcbitcXHQgKiBBcmVuYSBzdHJ1Y3Rfb3BzIGFyZ3VtZW50cyBuZWVkIEpJVCBzdXBwb3J0LCBjdXJyZW50bHkgeDg2LTY0IG9ubHkuXFxuK1xcdCAqIEVsc2V3aGVyZSB2ZXJpZmljYXRpb24gZmFpbHMgd2l0aCBcXFwiSklUIGRvZXMgbm90IHN1cHBvcnQgYXJlbmFcXG4rXFx0ICogYXJndW1lbnRzXFxcIiwgc28gdGhlIHByb2dyYW1zIGNhbm5vdCBldmVuIGxvYWQuXFxuK1xcdCAqL1xcbisjaWYgZGVmaW5lZChfX3g4Nl82NF9fKVxcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYXJlbmFfYXJnXFxcIikpXFxuK1xcdFxcdGFyZW5hX2FyZygpO1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYXJlbmFfYXJnX2ZhaWxcXFwiKSlcXG4rXFx0XFx0YXJlbmFfYXJnX2ZhaWwoKTtcXG4rI2Vsc2VcXG4rXFx0dGVzdF9fc2tpcCgpO1xcbisjZW5kaWZcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xNWQ0ODE1MTc5N2RhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXFxuQEAgLTAsMCArMSwyNjAgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbitcXG4rI2RlZmluZSBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFU1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJicGZfbWlzYy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYnBmX2V4cGVyaW1lbnRhbC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmX2FyZW5hX2NvbW1vbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiLi4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXFxcIlxcbitcXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XFxuK1xcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcXG4rXFx0LyogcGFnZSAwIGhvc3RzIHRoZSBhcmVuYSBnbG9iYWwsIHBhZ2UgMSBpcyBmb3IgYWxsb2NhdGlvbnMgKi9cXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAyKTtcXG4rfSBhcmVuYSBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbisvKlxcbisgKiBPY2N1cGllcyBwYWdlIDAgc28gbm8gYWxsb2NhdGlvbiBsYW5kcyBhdCBhcmVuYSBvZmZzZXQgMCwgd2hpY2ggdGhlXFxuKyAqIG51bGxhYmxlIHRlc3RzIGJlbG93IG11c3QgYmUgYWJsZSB0byB0ZWxsIGFwYXJ0IGZyb20gTlVMTC5cXG4rICovXFxuK3U2NCBfX2FyZW5hIGFyZW5hX3BhZDtcXG4rXFxuKy8qIHZvbGF0aWxlIHRvIGZvcmNlIHRoZSBzY2FsYXIgcmVsb2FkcyBiZWxvdyAqL1xcbit2b2xhdGlsZSB1NjQgc3Rhc2g7XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX2FyY2hfeDg2XzY0XFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxcbitpbnQgYXJlbmFfYXJnX2Zvcm1zKHZvaWQgKmN0eClcXG4re1xcbisjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVClcXG4rXFx0dTY0IF9fYXJlbmEgKnZhbDtcXG4rXFx0dTY0IHJldDtcXG4rXFxuK1xcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdC8qIFBUUl9UT19BUkVOQSBhcmd1bWVudCAqL1xcbitcXHQqdmFsID0gNDE7XFxuK1xcdHJldCA9IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopdmFsKTtcXG4rXFx0aWYgKHJldCAhPSA0MSB8fCAqdmFsICE9IDQyKVxcbitcXHRcXHRyZXR1cm4gMjtcXG4rXFxuK1xcdC8qIHRoZSBsb3cgMzIgYml0cyBhcyBhIHNjYWxhciAqL1xcbitcXHRzdGFzaCA9ICh1MzIpKHU2NCl2YWw7XFxuK1xcdHJldCA9IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopc3Rhc2gpO1xcbitcXHRpZiAocmV0ICE9IDQyIHx8ICp2YWwgIT0gNDMpXFxuK1xcdFxcdHJldHVybiAzO1xcbitcXG4rXFx0LyogdGhlIGZ1bGwgdXNlciBhZGRyZXNzIGFzIGEgc2NhbGFyICovXFxuK1xcdHN0YXNoID0gKHU2NCl2YWw7XFxuK1xcdGJwZl9hZGRyX3NwYWNlX2Nhc3Qoc3Rhc2gsIDEsIDApO1xcbitcXHRyZXQgPSBicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoKHU2NCAqKXN0YXNoKTtcXG4rXFx0aWYgKHJldCAhPSA0MyB8fCAqdmFsICE9IDQ0KVxcbitcXHRcXHRyZXR1cm4gNDtcXG4rXFxuK1xcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XFxuKyNlbmRpZlxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogUGluIHRoZSByZWJhc2Ugc2VtYW50aWNzIHVzaW5nIHRoZSBjYXB0dXJlIGtmdW5jcywgd2hpY2ggcmV0dXJuIHRoZSByYXdcXG4rICogYXJndW1lbnQgdmFsdWU6IF9fYXJlbmEgcmViYXNlcyB1bmNvbmRpdGlvbmFsbHksIHNvIHplcm8gbG93IDMyIGJpdHNcXG4rICogYXJyaXZlIGFzIHRoZSBhcmVuYSBrZXJuZWwgYmFzZSwgd2hpbGUgX19hcmVuYV9udWxsYWJsZSB0dXJucyB0aGVtIGludG9cXG4rICogTlVMTC5cXG4rICovXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fYXJjaF94ODZfNjRcXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuK2ludCBhcmVuYV9hcmdfcmViYXNlKHZvaWQgKmN0eClcXG4re1xcbisjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVClcXG4rXFx0dTY0IF9fYXJlbmEgKnZhbDtcXG4rXFx0dTY0IGJhc2UsIG9mZjtcXG4rXFxuK1xcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdGJhc2UgPSBicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QoTlVMTCk7XFxuK1xcdGlmICghYmFzZSlcXG4rXFx0XFx0cmV0dXJuIDI7XFxuK1xcbitcXHQvKiBvbmx5IHRoZSBsb3cgMzIgYml0cyBjb250cmlidXRlICovXFxuK1xcdHN0YXNoID0gMHhiYWRjMGZmZTAwMDAwMDAwO1xcbitcXHRpZiAoYnBmX2tmdW5jX2FyZW5hX2NhcF90ZXN0KCh1NjQgKilzdGFzaCkgIT0gYmFzZSlcXG4rXFx0XFx0cmV0dXJuIDM7XFxuK1xcbitcXHRvZmYgPSAodTMyKSh1NjQpdmFsO1xcbitcXHRpZiAoYnBmX2tmdW5jX2FyZW5hX2NhcF90ZXN0KCh1NjQgKil2YWwpICE9IGJhc2UgKyBvZmYpXFxuK1xcdFxcdHJldHVybiA0O1xcbitcXG4rXFx0aWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdChOVUxMKSAhPSAwKVxcbitcXHRcXHRyZXR1cm4gNTtcXG4rXFxuK1xcdHN0YXNoID0gMHhiYWRjMGZmZTAwMDAwMDAwO1xcbitcXHRpZiAoYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KCh1NjQgKilzdGFzaCkgIT0gMClcXG4rXFx0XFx0cmV0dXJuIDY7XFxuK1xcbitcXHRpZiAoYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KCh1NjQgKil2YWwpICE9IGJhc2UgKyBvZmYpXFxuK1xcdFxcdHJldHVybiA3O1xcbitcXG4rXFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTtcXG4rI2VuZGlmXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX2FyY2hfeDg2XzY0XFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxcbitpbnQgYXJlbmFfYXJnX251bGxhYmxlKHZvaWQgKmN0eClcXG4re1xcbisjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVClcXG4rXFx0dTY0IF9fYXJlbmEgKnZhbDtcXG4rXFx0dTY0IHJldDtcXG4rXFxuK1xcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdCp2YWwgPSA0MTtcXG4rXFx0cmV0ID0gYnBmX2tmdW5jX2FyZW5hX251bGxhYmxlX2FyZ190ZXN0KCh1NjQgKil2YWwpO1xcbitcXHRpZiAocmV0ICE9IDQxIHx8ICp2YWwgIT0gNDIpXFxuK1xcdFxcdHJldHVybiAyO1xcbitcXG4rXFx0aWYgKGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdChOVUxMKSAhPSAweGRlYWRiZWVmKVxcbitcXHRcXHRyZXR1cm4gMztcXG4rXFxuK1xcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XFxuKyNlbmRpZlxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19hcmNoX3g4Nl82NFxcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcXG4raW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eClcXG4re1xcbisjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVClcXG4rXFx0dTY0IF9fYXJlbmEgKnZhbDtcXG4rXFxuK1xcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdHZhbFswXSA9IDE7XFxuK1xcdHZhbFsxXSA9IDI7XFxuK1xcdHZhbFsyXSA9IDQ7XFxuK1xcdHZhbFszXSA9IDg7XFxuK1xcdHZhbFs0XSA9IDE2O1xcbitcXG4rXFx0aWYgKGJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KCh1NjQgKilcXHUwMDI2dmFsWzBdLCAodTY0ICopXFx1MDAyNnZhbFsxXSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgICh1NjQgKilcXHUwMDI2dmFsWzJdLCAodTY0ICopXFx1MDAyNnZhbFszXSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgICh1NjQgKilcXHUwMDI2dmFsWzRdKSAhPSAzMSlcXG4rXFx0XFx0cmV0dXJuIDI7XFxuK1xcdGlmIChicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdCgodTY0ICopXFx1MDAyNnZhbFswXSwgKHU2NCAqKVxcdTAwMjZ2YWxbMV0sXFxuK1xcdFxcdFxcdFxcdCAgICAgICAodTY0ICopXFx1MDAyNnZhbFsyXSwgKHU2NCAqKVxcdTAwMjZ2YWxbM10sIE5VTEwpICE9IDE1KVxcbitcXHRcXHRyZXR1cm4gMztcXG4rXFxuK1xcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XFxuKyNlbmRpZlxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19hcmNoX3g4Nl82NFxcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcXG4raW50IGFyZW5hX2FyZ19taXhlZCh2b2lkICpjdHgpXFxuK3tcXG4rI2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXFxuK1xcdHU2NCBfX2FyZW5hICp2YWw7XFxuK1xcbitcXHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbitcXHRpZiAoIXZhbClcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHR2YWxbMF0gPSA3O1xcbitcXHR2YWxbMV0gPSA1O1xcbitcXG4rXFx0aWYgKGJwZl9rZnVuY19hcmVuYV9taXhlZF90ZXN0KCh1NjQgKilcXHUwMDI2dmFsWzBdLCBOVUxMKSAhPSA3KVxcbitcXHRcXHRyZXR1cm4gMjtcXG4rXFxuK1xcdGlmIChicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdCgodTY0ICopXFx1MDAyNnZhbFswXSwgKHU2NCAqKVxcdTAwMjZ2YWxbMV0pICE9IDEyKVxcbitcXHRcXHRyZXR1cm4gMztcXG4rXFxuK1xcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XFxuKyNlbmRpZlxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoga2VybmVsLXNpZGUgZmF1bHRzIG9uIHVucG9wdWxhdGVkIHBhZ2VzIHJlY292ZXIgdmlhIHRoZSBzY3JhdGNoIHBhZ2UgKi9cXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19hcmNoX3g4Nl82NFxcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcXG4raW50IGFyZW5hX2FyZ191bnBvcHVsYXRlZCh2b2lkICpjdHgpXFxuK3tcXG4rI2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXFxuK1xcdHU2NCBfX2FyZW5hICp2YWw7XFxuK1xcbitcXHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbitcXHRpZiAoIXZhbClcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHRzdGFzaCA9ICh1NjQpdmFsICsgUEFHRV9TSVpFO1xcbitcXHRicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoKHU2NCAqKXN0YXNoKTtcXG4rXFxuK1xcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XFxuKyNlbmRpZlxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19hcmNoX3g4Nl82NFxcbitfX2ZhaWx1cmUgX19tc2coXFxcImFyZW5hIHBvaW50ZXIgcmVxdWlyZXMgYSBwcm9ncmFtIHdpdGggYW4gYXNzb2NpYXRlZCBhcmVuYVxcXCIpXFxuK2ludCBhcmVuYV9hcmdfbm9fYXJlbmEodm9pZCAqY3R4KVxcbit7XFxuK1xcdGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopMSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX2FyY2hfeDg2XzY0XFxuK19fZmFpbHVyZSBfX21zZyhcXFwiaXMgbm90IGEgcG9pbnRlciB0byBhcmVuYSBvciBzY2FsYXJcXFwiKVxcbitpbnQgYXJlbmFfYXJnX2JhZF9yZWcodm9pZCAqY3R4KVxcbit7XFxuK1xcdHU2NCBidWYgPSAwO1xcbitcXG4rXFx0LyogdXNlIHRoZSBhcmVuYSBzbyB0aGUgcHJvZ3JhbSBwYXNzZXMgdGhlIGFyZW5hIHByZXNlbmNlIGNoZWNrICovXFxuK1xcdGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxuK1xcdGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdChcXHUwMDI2YnVmKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuK1xcdGRlZmluZWQoX19CUEZfRkVBVFVSRV9TVEFDS19BUkdVTUVOVClcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19hcmNoX3g4Nl82NFxcbitfX2ZhaWx1cmUgX19tc2coXFxcImFyZW5hIHBvaW50ZXIgY2Fubm90IGJlIGEgc3RhY2sgYXJndW1lbnRcXFwiKVxcbitpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eClcXG4re1xcbitcXHRicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbitcXHRicGZfa2Z1bmNfYXJlbmFfc3RhY2tfYXJnX3Rlc3QoMSwgMiwgMywgNCwgNSwgKHU2NCAqKTEpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbisjZWxzZVxcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX2FyY2hfeDg2XzY0XFxuK19fZGVzY3JpcHRpb24oXFxcImFyZW5hX2FyZ19zdGFjazogbm90IHN1cHBvcnRlZCwgZHVtbXkgdGVzdFxcXCIpXFxuK19fc3VjY2Vzc1xcbitpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eClcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbisjZW5kaWZcXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjg0NzQ3NjExNzI1ZjZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jXFxuQEAgLTAsMCArMSw5NiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxuK1xcbisvKlxcbisgKiBWZXJpZnkgdGhlIEpJVC1lbWl0dGVkIHJlYmFzZSBzZXF1ZW5jZXMgZm9yIF9fYXJlbmEgYW5kIF9fYXJlbmFfbnVsbGFibGVcXG4rICoga2Z1bmMgYXJndW1lbnRzLiBUaGUgY2FwdHVyZSBrZnVuY3MgdGFrZSB0aGUgYXJndW1lbnQgd2l0aG91dFxcbisgKiBkZXJlZmVyZW5jaW5nIGl0LCBzbyB0aGVzZSB0ZXN0cyBwaW4gb25seSB0aGUgZW1pdHRlZCBjb2RlLlxcbisgKi9cXG4rI2RlZmluZSBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFU1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJicGZfbWlzYy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYnBmX2V4cGVyaW1lbnRhbC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmX2FyZW5hX2NvbW1vbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiLi4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXFxcIlxcbitcXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XFxuK1xcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAxKTtcXG4rfSBhcmVuYSBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbisvKiB2b2xhdGlsZSB0byBmb3JjZSB0aGUgc2NhbGFyIHJlbG9hZHMgYmVsb3cgKi9cXG4rdm9sYXRpbGUgdTY0IHN0YXNoO1xcbitcXG4rI2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX2FyY2hfeDg2XzY0XFxuK19faml0ZWQoXFxcIi4uLlxcXCIpXFxuK19faml0ZWQoXFxcIlxcdG1vdmxcXHQlZWRpLCAlZWRpXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkcVxcdCVyMTIsICVyZGlcXFwiKVxcbitfX2ppdGVkKFxcXCIuLi5cXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRjYWxscVxcdHt7Lip9fVxcXCIpXFxuK19fc3VjY2Vzc1xcbitpbnQgYXJlbmFfYXJnX2ppdF9yZWJhc2Uodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0YXNoID0gKHU2NClicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbitcXHRicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QoKHU2NCAqKXN0YXNoKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fYXJjaF94ODZfNjRcXG4rX19qaXRlZChcXFwiLi4uXFxcIilcXG4rX19qaXRlZChcXFwiXFx0bW92bFxcdCVlZGksICVlZGlcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHR0ZXN0bFxcdCVlZGksICVlZGlcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRqZVxcdHt7Lip9fVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGFkZHFcXHQlcjEyLCAlcmRpXFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCBhcmVuYV9hcmdfaml0X251bGxhYmxlKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdGFzaCA9ICh1NjQpYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG4rXFx0YnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KCh1NjQgKilzdGFzaCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX2FyY2hfeDg2XzY0XFxuK19faml0ZWQoXFxcIi4uLlxcXCIpXFxuK19faml0ZWQoXFxcIlxcdG1vdmxcXHQlZWRpLCAlZWRpXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkcVxcdCVyMTIsICVyZGlcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRtb3ZsXFx0JWVzaSwgJWVzaVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGFkZHFcXHQlcjEyLCAlcnNpXFxcIilcXG4rX19qaXRlZChcXFwiXFx0bW92bFxcdCVlZHgsICVlZHhcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRhZGRxXFx0JXIxMiwgJXJkeFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdG1vdmxcXHQlZWN4LCAlZWN4XFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkcVxcdCVyMTIsICVyY3hcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRtb3ZsXFx0JXI4ZCwgJXI4ZFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdHRlc3RsXFx0JXI4ZCwgJXI4ZFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGplXFx0e3suKn19XFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkcVxcdCVyMTIsICVyOFxcXCIpXFxuK19fc3VjY2Vzc1xcbitpbnQgYXJlbmFfYXJnX2ppdF9hcmdzNSh2b2lkICpjdHgpXFxuK3tcXG4rXFx0dTY0IF9fYXJlbmEgKnZhbDtcXG4rXFxuK1xcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdHZhbFswXSA9IDE7XFxuK1xcdHZhbFsxXSA9IDI7XFxuK1xcdHZhbFsyXSA9IDQ7XFxuK1xcdHZhbFszXSA9IDg7XFxuK1xcdHZhbFs0XSA9IDE2O1xcbitcXG4rXFx0YnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QoKHU2NCAqKVxcdTAwMjZ2YWxbMF0sICh1NjQgKilcXHUwMDI2dmFsWzFdLFxcbitcXHRcXHRcXHRcXHQgICAodTY0ICopXFx1MDAyNnZhbFsyXSwgKHU2NCAqKVxcdTAwMjZ2YWxbM10sXFxuK1xcdFxcdFxcdFxcdCAgICh1NjQgKilcXHUwMDI2dmFsWzRdKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKyNlbmRpZiAvKiBfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCAqL1xcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iYTA0YzczZDhkOTY3XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmNcXG5AQCAtMCwwICsxLDExNSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxuK1xcbisjZGVmaW5lIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTXFxuKyNpbmNsdWRlIFxcdTAwM2N2bWxpbnV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJwZl9leHBlcmltZW50YWwuaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZl9hcmVuYV9jb21tb24uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcIi4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIi4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxcXCJcXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbitcXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XFxuK1xcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcXG4rXFx0LyogcGFnZSAwIGhvc3RzIHRoZSBhcmVuYSBnbG9iYWxzLCBwYWdlIDEgaXMgZm9yIGFsbG9jYXRpb25zICovXFxuK1xcdF9fdWludChtYXhfZW50cmllcywgMik7XFxuK30gYXJlbmEgU0VDKFxcXCIubWFwc1xcXCIpO1xcbitcXG4rLyogYWxzbyBhc3NvY2lhdGVzIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgYXJlbmEgKi9cXG4rdTY0IF9fYXJlbmEgYXJlbmFfdG91Y2g7XFxuKy8qIHJhdyB2YWx1ZSBvZiB0aGUgbGFzdCBfX2FyZW5hIGN0eCBhcmd1bWVudCwgY2FwdHVyZWQgYnkgdGVzdF9hcmVuYV9jYiAqL1xcbit1NjQgX19hcmVuYSBjYl9wdHJfdmFsO1xcbitcXG4rU0VDKFxcXCJzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmFcXFwiKVxcbitpbnQgdGVzdF9hcmVuYV9jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcXG4re1xcbitcXHR1NjQgX19hcmVuYSAqcHRyID0gKHU2NCBfX2FyZW5hICopY3R4WzBdO1xcbitcXG4rXFx0YXJlbmFfdG91Y2grKztcXG4rXFx0Y2JfcHRyX3ZhbCA9IGN0eFswXTtcXG4rXFx0KnB0ciArPSAxO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmFfbnVsbGFibGVcXFwiKVxcbitpbnQgdGVzdF9hcmVuYV9udWxsYWJsZV9jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcXG4re1xcbitcXHR1NjQgX19hcmVuYSAqcHRyID0gKHU2NCBfX2FyZW5hICopY3R4WzBdO1xcbitcXG4rXFx0YXJlbmFfdG91Y2grKztcXG4rXFx0aWYgKCFwdHIpXFxuK1xcdFxcdHJldHVybiAweGJlZTtcXG4rXFx0KnB0ciArPSAxO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmFfc3RhY2tcXFwiKVxcbitpbnQgdGVzdF9hcmVuYV9zdGFja19jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcXG4re1xcbitcXHR1NjQgX19hcmVuYSAqcHRyID0gKHU2NCBfX2FyZW5hICopY3R4WzhdO1xcbitcXG4rXFx0YXJlbmFfdG91Y2grKztcXG4rXFx0LyogcGluIHRoZSBzbG90IGxheW91dDogdGhlIGxlYWRpbmcgYXJncyBmaWxsIGN0eFswXS4uY3R4WzddICovXFxuK1xcdGlmIChjdHhbMF0gIT0gMSB8fCBjdHhbN10gIT0gOClcXG4rXFx0XFx0cmV0dXJuIDB4YmFkO1xcbitcXHQqcHRyICs9IDE7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcIi5zdHJ1Y3Rfb3BzLmxpbmtcXFwiKVxcbitzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB0ZXN0bW9kX2FyZW5hID0ge1xcbitcXHQudGVzdF9hcmVuYSA9ICh2b2lkICopdGVzdF9hcmVuYV9jYixcXG4rXFx0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSAodm9pZCAqKXRlc3RfYXJlbmFfbnVsbGFibGVfY2IsXFxuK1xcdC50ZXN0X2FyZW5hX3N0YWNrID0gKHZvaWQgKil0ZXN0X2FyZW5hX3N0YWNrX2NiLFxcbit9O1xcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4raW50IHRyaWdnZXIodm9pZCAqY3R4KVxcbit7XFxuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxcbitcXHR1NjQgX19hcmVuYSAqdmFsO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0dmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG4rXFx0aWYgKCF2YWwpXFxuK1xcdFxcdHJldHVybiAxO1xcbitcXG4rXFx0KnZhbCA9IDQxO1xcbitcXHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSgodTY0ICopdmFsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIDI7XFxuK1xcdGlmICgqdmFsICE9IDQyKVxcbitcXHRcXHRyZXR1cm4gMztcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBjYWxsYmFjayBtdXN0IGhhdmUgc2VlbiBleGFjdGx5ICh1MzIpKGthZGRyIC0ga2Vybl92bV9zdGFydCksXFxuK1xcdCAqIHdoaWNoIGlzIHRoZSBhcmVuYSBvZmZzZXQgb2YgdmFsIHdpdGggdGhlIHVwcGVyIDMyIGJpdHMgY2xlYXIuXFxuK1xcdCAqL1xcbitcXHRpZiAoY2JfcHRyX3ZhbCAhPSAodTMyKSh1NjQpdmFsKVxcbitcXHRcXHRyZXR1cm4gNDtcXG4rXFxuK1xcdHJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKCh1NjQgKil2YWwpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gNTtcXG4rXFx0aWYgKCp2YWwgIT0gNDMpXFxuK1xcdFxcdHJldHVybiA2O1xcbitcXG4rXFx0LyogTlVMTCBzdXJ2aXZlcyB0aGUgbnVsbGFibGUga2Z1bmMgYW5kIHRoZSB0cmFtcG9saW5lIGFzIE5VTEwgKi9cXG4rXFx0cmV0ID0gYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUoTlVMTCk7XFxuK1xcdGlmIChyZXQgIT0gMHhiZWUpXFxuK1xcdFxcdHJldHVybiA3O1xcbitcXG4rXFx0LyogdGhlIGFyZW5hIHBvaW50ZXIgaXMgc3RhY2stcGFzc2VkIGludG8gdGhlIHRyYW1wb2xpbmUgaGVyZSAqL1xcbitcXHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaygodTY0ICopdmFsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIDg7XFxuK1xcdGlmICgqdmFsICE9IDQ0KVxcbitcXHRcXHRyZXR1cm4gOTtcXG4rXFxuK1xcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XFxuKyNlbmRpZlxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYV9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYV9mYWlsLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjFjMGVjNzI3ZDYzNzRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5jXFxuQEAgLTAsMCArMSwyMCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCIuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcXFwiXFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4rXFxuKy8qIE5vIGFyZW5hIGluIHRoZSBwcm9ncmFtOiBhdHRhY2hpbmcgdG8gdGVzdF9hcmVuYSBtdXN0IGJlIHJlamVjdGVkLiAqL1xcbitTRUMoXFxcInN0cnVjdF9vcHMvdGVzdF9hcmVuYVxcXCIpXFxuK2ludCB0ZXN0X2FyZW5hX25vX2FyZW5hKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcIi5zdHJ1Y3Rfb3BzLmxpbmtcXFwiKVxcbitzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB0ZXN0bW9kX2FyZW5hX2ZhaWwgPSB7XFxuK1xcdC50ZXN0X2FyZW5hID0gKHZvaWQgKil0ZXN0X2FyZW5hX25vX2FyZW5hLFxcbit9O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xcbmluZGV4IGViMGY5YjVlMThkODUuLmZkZWFhNTYzNTZiNTIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcXG5AQCAtMjM3LDYgKzIzNyw1NiBAQCBfX2JwZl9rZnVuYyB2b2lkIGJwZl9rZnVuY19jb21tb25fdGVzdCh2b2lkKVxcbiB7XFxuIH1cXG4gXFxuK19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QodTY0ICp2YWxfX2FyZW5hKVxcbit7XFxuK1xcdHU2NCBvbGQ7XFxuK1xcbitcXHRvbGQgPSAqdmFsX19hcmVuYTtcXG4rXFx0KnZhbF9fYXJlbmEgPSBvbGQgKyAxO1xcbitcXHRyZXR1cm4gb2xkO1xcbit9XFxuK1xcbitfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX251bGxhYmxlX2FyZ190ZXN0KHU2NCAqdmFsX19hcmVuYV9udWxsYWJsZSlcXG4re1xcbitcXHR1NjQgb2xkO1xcbitcXG4rXFx0aWYgKCF2YWxfX2FyZW5hX251bGxhYmxlKVxcbitcXHRcXHRyZXR1cm4gMHhkZWFkYmVlZjtcXG4rXFxuK1xcdG9sZCA9ICp2YWxfX2FyZW5hX251bGxhYmxlO1xcbitcXHQqdmFsX19hcmVuYV9udWxsYWJsZSA9IG9sZCArIDE7XFxuK1xcdHJldHVybiBvbGQ7XFxuK31cXG4rXFxuK19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QodTY0ICp2YWxfX2FyZW5hKVxcbit7XFxuK1xcdHJldHVybiAodTY0KXZhbF9fYXJlbmE7XFxuK31cXG4rXFxuK19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QodTY0ICp2YWxfX2FyZW5hX251bGxhYmxlKVxcbit7XFxuK1xcdHJldHVybiAodTY0KXZhbF9fYXJlbmFfbnVsbGFibGU7XFxuK31cXG4rXFxuK19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdCh1NjQgKmFfX2FyZW5hLCB1NjQgKmJfX2FyZW5hLFxcbitcXHRcXHRcXHRcXHRcXHQgICB1NjQgKmNfX2FyZW5hLCB1NjQgKmRfX2FyZW5hLFxcbitcXHRcXHRcXHRcXHRcXHQgICB1NjQgKmVfX2FyZW5hX251bGxhYmxlKVxcbit7XFxuK1xcdHJldHVybiAqYV9fYXJlbmEgKyAqYl9fYXJlbmEgKyAqY19fYXJlbmEgKyAqZF9fYXJlbmEgK1xcbitcXHQgICAgICAgKGVfX2FyZW5hX251bGxhYmxlID8gKmVfX2FyZW5hX251bGxhYmxlIDogMCk7XFxuK31cXG4rXFxuK19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfc3RhY2tfYXJnX3Rlc3QodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsIHU2NCBlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHR1NjQgKmZfX2FyZW5hKVxcbit7XFxuK1xcdHJldHVybiBhICsgYiArIGMgKyBkICsgZSArICpmX19hcmVuYTtcXG4rfVxcbitcXG4rX19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9taXhlZF90ZXN0KHU2NCAqYV9fYXJlbmEsIHU2NCAqYl9fYXJlbmFfbnVsbGFibGUpXFxuK3tcXG4rXFx0cmV0dXJuICphX19hcmVuYSArIChiX19hcmVuYV9udWxsYWJsZSA/ICpiX19hcmVuYV9udWxsYWJsZSA6IDApO1xcbit9XFxuK1xcbiBfX2JwZl9rZnVuYyB2b2lkIGJwZl9rZnVuY19keW5wdHJfdGVzdChzdHJ1Y3QgYnBmX2R5bnB0ciAqcHRyLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9keW5wdHIgKnB0cl9fbnVsbGFibGUpXFxuIHtcXG5AQCAtMzQ3LDkgKzM5NywyOSBAQCBzdGF0aWMgaW50IGJwZl90ZXN0bW9kX3Rlc3RfNCh2b2lkKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hKHU2NCAqcHRyX19hcmVuYSlcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX251bGxhYmxlKHU2NCAqcHRyX19hcmVuYV9udWxsYWJsZSlcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrKHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICB1NjQgZSwgdTY0IGYsIHU2NCBnLCB1NjQgaCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgdTY0ICpwdHJfX2FyZW5hKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IGJwZl90ZXN0bW9kX29wczMgX19icGZfdGVzdG1vZF9vcHMzID0ge1xcbiBcXHQudGVzdF8xID0gYnBmX3Rlc3Rtb2RfdGVzdF8zLFxcbiBcXHQudGVzdF8yID0gYnBmX3Rlc3Rtb2RfdGVzdF80LFxcbitcXHQudGVzdF9hcmVuYSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmEsXFxuK1xcdC50ZXN0X2FyZW5hX251bGxhYmxlID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9udWxsYWJsZSxcXG4rXFx0LnRlc3RfYXJlbmFfc3RhY2sgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrLFxcbiB9O1xcbiBcXG4gc3RhdGljIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3Rfb3BzMyh2b2lkKVxcbkBAIC0zNjgsNiArNDM4LDIxIEBAIF9fYnBmX2tmdW5jIHZvaWQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMih2b2lkKVxcbiBcXHRzdF9vcHMzLVxcdTAwM2V0ZXN0XzIoKTtcXG4gfVxcbiBcXG4rX19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKHU2NCAqcHRyX19hcmVuYSlcXG4re1xcbitcXHRyZXR1cm4gc3Rfb3BzMy1cXHUwMDNldGVzdF9hcmVuYShwdHJfX2FyZW5hKTtcXG4rfVxcbitcXG4rX19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKHU2NCAqcHRyX19hcmVuYV9udWxsYWJsZSlcXG4re1xcbitcXHRyZXR1cm4gc3Rfb3BzMy1cXHUwMDNldGVzdF9hcmVuYV9udWxsYWJsZShwdHJfX2FyZW5hX251bGxhYmxlKTtcXG4rfVxcbitcXG4rX19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKHU2NCAqcHRyX19hcmVuYSlcXG4re1xcbitcXHRyZXR1cm4gc3Rfb3BzMy1cXHUwMDNldGVzdF9hcmVuYV9zdGFjaygxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCBwdHJfX2FyZW5hKTtcXG4rfVxcbitcXG4gc3RydWN0IGJwZl90ZXN0bW9kX2J0Zl90eXBlX3RhZ18xIHtcXG4gXFx0aW50IGE7XFxuIH07XFxuQEAgLTc1NSw2ICs4NDAsMTMgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxX25leHQsIEtGX0lURVJfTkVYVCB8IEtGX1JFVF9OVUxMKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfdGVzdG1vZF9zZXFfZGVzdHJveSwgS0ZfSVRFUl9ERVNUUk9ZKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfdGVzdG1vZF9zZXFfdmFsdWUpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY29tbW9uX3Rlc3QpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdClcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19hcmVuYV9zdGFja19hcmdfdGVzdClcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19hcmVuYV9taXhlZF90ZXN0KVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9tZW1fbGVuX3Bhc3MxKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2R5bnB0cl90ZXN0KVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX25lc3RlZF9hY3F1aXJlX25vbnplcm9fb2Zmc2V0X3Rlc3QsIEtGX0FDUVVJUkUpXFxuQEAgLTc3MCw2ICs4NjIsOSBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2RfY3R4X2NyZWF0ZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2RfY3R4X3JlbGVhc2UsIEtGX1JFTEVBU0UpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF8xKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMilcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaylcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19nZXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTtcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19wdXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTtcXG4gQlRGX0tGVU5DU19FTkQoYnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX2lkcylcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcXG5pbmRleCA4NjNmZDEwZjE2MTk5Li4zM2YyYWY1YjcwODU3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXFxuQEAgLTEwNiw2ICsxMDYsMTIgQEAgc3RydWN0IGJwZl90ZXN0bW9kX29wczIge1xcbiBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB7XFxuIFxcdGludCAoKnRlc3RfMSkodm9pZCk7XFxuIFxcdGludCAoKnRlc3RfMikodm9pZCk7XFxuK1xcdC8qIFVzZWQgdG8gdGVzdCBhcmVuYSBwb2ludGVyIGFyZ3VtZW50cy4gKi9cXG4rXFx0aW50ICgqdGVzdF9hcmVuYSkodTY0ICpwdHIpO1xcbitcXHRpbnQgKCp0ZXN0X2FyZW5hX251bGxhYmxlKSh1NjQgKnB0cik7XFxuK1xcdC8qIGVub3VnaCBsZWFkaW5nIGFyZ3MgdG8gZm9yY2UgQHB0ciBvbnRvIHRoZSBzdGFjayBvbiB4ODYgYW5kIGFybTY0ICovXFxuK1xcdGludCAoKnRlc3RfYXJlbmFfc3RhY2spKHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLCB1NjQgZSwgdTY0IGYsXFxuK1xcdFxcdFxcdFxcdHU2NCBnLCB1NjQgaCwgdTY0ICpwdHIpO1xcbiB9O1xcbiBcXG4gc3RydWN0IHN0X29wc19hcmdzIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcXG5pbmRleCBjMzZiYjkxMWRlZmE3Li4xYTcyZDBmZGE1M2M0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXFxuQEAgLTk4LDYgKzk4LDE2IEBAIHZvaWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZWxlYXNlKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwKSBfX2tzeW07XFxuIHZvaWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZWYoc3RydWN0IHByb2dfdGVzdF9yZWZfa2Z1bmMgKnApIF9fa3N5bTtcXG4gXFxuIHZvaWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9tZW1fbGVuX3Bhc3MxKHZvaWQgKm1lbSwgaW50IGxlbikgX19rc3ltO1xcbitfX3U2NCBicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoX191NjQgKnZhbF9fYXJlbmEpIF9fa3N5bTtcXG4rX191NjQgYnBmX2tmdW5jX2FyZW5hX251bGxhYmxlX2FyZ190ZXN0KF9fdTY0ICp2YWxfX2FyZW5hX251bGxhYmxlKSBfX2tzeW07XFxuK19fdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdChfX3U2NCAqdmFsX19hcmVuYSkgX19rc3ltO1xcbitfX3U2NCBicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoX191NjQgKnZhbF9fYXJlbmFfbnVsbGFibGUpIF9fa3N5bTtcXG4rX191NjQgYnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QoX191NjQgKmFfX2FyZW5hLCBfX3U2NCAqYl9fYXJlbmEsXFxuK1xcdFxcdFxcdFxcdCBfX3U2NCAqY19fYXJlbmEsIF9fdTY0ICpkX19hcmVuYSxcXG4rXFx0XFx0XFx0XFx0IF9fdTY0ICplX19hcmVuYV9udWxsYWJsZSkgX19rc3ltO1xcbitfX3U2NCBicGZfa2Z1bmNfYXJlbmFfc3RhY2tfYXJnX3Rlc3QoX191NjQgYSwgX191NjQgYiwgX191NjQgYywgX191NjQgZCwgX191NjQgZSxcXG4rXFx0XFx0XFx0XFx0ICAgICBfX3U2NCAqZl9fYXJlbmEpIF9fa3N5bTtcXG4rX191NjQgYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QoX191NjQgKmFfX2FyZW5hLCBfX3U2NCAqYl9fYXJlbmFfbnVsbGFibGUpIF9fa3N5bTtcXG4gaW50ICpicGZfa2Z1bmNfY2FsbF90ZXN0X2dldF9yZHdyX21lbShzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyAqcCwgY29uc3QgaW50IHJkd3JfYnVmX3NpemUpIF9fa3N5bTtcXG4gaW50ICpicGZfa2Z1bmNfY2FsbF90ZXN0X2dldF9yZG9ubHlfbWVtKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwLCBjb25zdCBpbnQgcmRvbmx5X2J1Zl9zaXplKSBfX2tzeW07XFxuIGludCAqYnBmX2tmdW5jX2NhbGxfdGVzdF9hY3FfcmRvbmx5X21lbShzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyAqcCwgY29uc3QgaW50IHJkb25seV9idWZfc2l6ZSkgX19rc3ltO1xcbkBAIC0xMTEsNiArMTIxLDkgQEAgdTMyIGJwZl9rZnVuY19jYWxsX3Rlc3Rfc3RhdGljX3VudXNlZF9hcmcodTMyIGFyZywgdTMyIHVudXNlZCkgX19rc3ltO1xcbiAjZW5kaWZcXG4gXFxuIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9tb2Rfa2Z1bmMoaW50IGkpIF9fa3N5bTtcXG4raW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07XFxuK2ludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZShfX3U2NCAqcHRyX19hcmVuYV9udWxsYWJsZSkgX19rc3ltO1xcbitpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2soX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTtcXG4gXFxuIF9fdTY0IGJwZl9rZnVuY19jYWxsX3Rlc3QxKHN0cnVjdCBzb2NrICpzaywgX191MzIgYSwgX191NjQgYixcXG4gXFx0XFx0XFx0XFx0X191MzIgYywgX191NjQgZCkgX19rc3ltO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNjoxMzowOS4xMzU5NDI4OTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMzAxMTE0MTIzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzXCIsXG4gICAgXCJidGZfZGlzdGlsbF9mdW5jX3Byb3RvXCIsXG4gICAgXCJidGZfY3R4X2FjY2Vzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYF9fYXJlbmFgIGFuZCBgX19hcmVuYV9udWxsYWJsZWAgYW5ub3RhdGlvbnMgZm9yIEJQRiBrZnVuY3MgYW5kIHN0cnVjdF9vcHMgYXJndW1lbnRzLiBJdCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyLCBKSVQgY29tcGlsZXIgKHg4NiksIGFuZCB0cmFtcG9saW5lIGxvZ2ljIHRvIHN1cHBvcnQgYXJlbmEgcG9pbnRlcnMsIGluY2x1ZGluZyByZWJhc2luZyB0aGVtIHRvIGtlcm5lbCBhZGRyZXNzZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0IHZlcmlmaWNhdGlvbiBvZiBhcmVuYSBwb2ludGVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDBhZmM2NzQ2ZGEwZWM5MDJiZWI2NjM2N2M0NTcwMWZkMDY1OGIxMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTY6MTM6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuaW5kZXggY2JkZTg2ZDA4MmNjZS4uNDhjZjc0NmY5ZmY5ZCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbkBAIC0yNzgsNiArMjc4LDQzIEBAIEFuIGV4YW1wbGUgaXMgZ2l2ZW4gYmVsb3c6OlxuICAgICAgICAgICAgICAgICAuLi5cbiAgICAgICAgIH1cbiBcbisyLjMuOCBfX2FyZW5hIGFuZCBfX2FyZW5hX251bGxhYmxlIEFubm90YXRpb25zXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuK1xuK0JvdGggYW5ub3RhdGlvbnMgaW5kaWNhdGUgdGhhdCB0aGUgcG9pbnRlciBhcmd1bWVudCBwb2ludHMgaW50byB0aGVcbitjYWxsaW5nIHByb2dyYW0ncyBhcmVuYS4gVGhlIEpJVCByZWJhc2VzIHRoZSB2YWx1ZSBhdCB0aGUgY2FsbCBzaXRlIHNvXG4rdGhlIGtmdW5jIHJlY2VpdmVzIGEgZGlyZWN0bHkgZGVyZWZlcmVuY2VhYmxlIGtlcm5lbCBhZGRyZXNzLCBzdWJqZWN0IHRvXG4rdGhlIGFjY2VzcyBydWxlcyBkZXNjcmliZWQgaW4gOnJlZjpgQlBGX2tmdW5jX2FyZW5hX2FjY2Vzc2AgKGF0IG1vc3RcbitgYEdVQVJEX1NaIC8gMmBgLCAzMiBLaUIsIHBhc3QgdGhlIHBvaW50ZXIgaW4gYSBzaW5nbGUgdW5jaGVja2VkIGFjY2VzcykuXG4rXG4rV2l0aCBgYF9fYXJlbmFgYCB0aGUgcmViYXNlIGlzIHVuY29uZGl0aW9uYWwgYW5kIHRoZSBhcmd1bWVudCBpcyBuZXZlclxuK05VTEw6IGEgdmFsdWUgd2hvc2UgbG93ZXIgMzIgYml0cyBhcmUgemVybyBhcnJpdmVzIGFzIHRoZSBhcmVuYSBiYXNlXG4rYWRkcmVzcyAoYXJlbmEgb2Zmc2V0IDApLiBUaGUga2Z1bmMgbXVzdCBub3QgY2hlY2sgdGhlIGFyZ3VtZW50IGZvciBOVUxMLlxuK1dpdGggYGBfX2FyZW5hX251bGxhYmxlYGAgc3VjaCBhIHZhbHVlIGFycml2ZXMgYXMgTlVMTCBpbnN0ZWFkIGFuZCB0aGVcbitrZnVuYyBtdXN0IGNoZWNrIGJlZm9yZSBkZXJlZmVyZW5jaW5nLlxuK1xuK0FuIGV4YW1wbGUgaXMgZ2l2ZW4gYmVsb3c6OlxuK1xuKyAgICAgICAgX19icGZfa2Z1bmMgaW50IGJwZl9wcm9jZXNzX2l0ZW0oc3RydWN0IGl0ZW0gKml0ZW1fX2FyZW5hKVxuKyAgICAgICAge1xuKyAgICAgICAgLi4uXG4rICAgICAgICB9XG4rXG4rQ2FsbGluZyBzdWNoIGEga2Z1bmMgcmVxdWlyZXMgdGhlIHByb2dyYW0gdG8gdXNlIGFuIGFyZW5hIG1hcCBhbmQgYSBKSVQgd2l0aFxuK2FyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQpOyB2ZXJpZmljYXRpb24gZmFpbHMgb3RoZXJ3aXNlLiBUaGVcbitwcm9ncmFtIGNhbiBwYXNzIGFueSB2YWx1ZSB3aXRob3V0IGNvbXByb21pc2luZyB0aGUga2VybmVsLiBBIHZhbHVlIHRoYXQgZG9lc1xuK25vdCBwb2ludCBpbnRvIHRoZSBhcmVuYSBpcyBhIHByb2dyYW0gYnVnLlxuK1xuK1RoZSBzdWZmaXhlcyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgb24gdGhlIGFyZ3VtZW50cyBvZiBzdHJ1Y3Rfb3BzIHN0dWJcbitmdW5jdGlvbnMsIHdpdGggdGhlIGNvbnZlcnNpb24gcnVubmluZyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLiBUaGVcbitrZXJuZWwgY2FsbGVyIHBhc3NlcyB0aGUga2VybmVsIGFyZW5hIGFkZHJlc3MgYW5kIHRoZSB0cmFtcG9saW5lIGNvbnZlcnRzXG4raXQgd2hpbGUgc2F2aW5nIHRoZSBhcmd1bWVudHMsIHNvIHRoZSBjYWxsYmFjayByZWNlaXZlcyBhbiBhcmVuYSBwb2ludGVyXG4raXQgY2FuIGRlcmVmZXJlbmNlIGRpcmVjdGx5LiBXaXRoIGBgX19hcmVuYWBgIHRoZSBrZXJuZWwgY2FsbGVyIG11c3Qgbm90XG4rcGFzcyBOVUxMLiBXaXRoIGBgX19hcmVuYV9udWxsYWJsZWBgIGEgTlVMTCBrZXJuZWwgcG9pbnRlciBhcnJpdmVzIGFzIE5VTEwuXG4rSG93ZXZlciwgdGhlcmUgaXMgbm8gb2JsaWdhdGlvbiB0byBwcm92ZSB0byB0aGUgdmVyaWZpZXIgdGhhdCBzdWNoIGEgcG9pbnRlciBpc1xuK25vbi1OVUxMIGJlZm9yZSB1c2UsIGluLWxpbmUgd2l0aCBleGlzdGluZyBzZW1hbnRpY3Mgb2YgYXJlbmEgcG9pbnRlcnMgdXNlZCBpblxuK2EgcHJvZ3JhbSAob3Igb2J0YWluZWQgZnJvbSBhbnkgb3RoZXIgc291cmNlKS5cbitcbiAuLiBfQlBGX2tmdW5jX25vZGVmOlxuIFxuIDIuNCBVc2luZyBhbiBleGlzdGluZyBrZXJuZWwgZnVuY3Rpb25cbkBAIC01MTUsNiArNTUyLDggQEAgSW4gb3JkZXIgdG8gYWNjb21tb2RhdGUgc3VjaCByZXF1aXJlbWVudHMsIHRoZSB2ZXJpZmllciB3aWxsIGVuZm9yY2Ugc3RyaWN0XG4gUFRSX1RPX0JURl9JRCB0eXBlIG1hdGNoaW5nIGlmIHR3byB0eXBlcyBoYXZlIHRoZSBleGFjdCBzYW1lIG5hbWUsIHdpdGggb25lXG4gYmVpbmcgc3VmZml4ZWQgd2l0aCBgYF9fX2luaXRgYC5cbiBcbisuLiBfQlBGX2tmdW5jX2FyZW5hX2FjY2VzczpcbitcbiAyLjggQWNjZXNzaW5nIGFyZW5hIG1lbW9yeSB0aHJvdWdoIGtmdW5jIGFyZ3VtZW50c1xuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCAwMWU3Y2U1NjljMWVkLi40YjNlNWQ4YTRhNTYzIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG4rKysgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0xNjc4LDYgKzE2NzgsNTAgQEAgc3RhdGljIGludCBlbWl0X3NwZWN0cmVfYmhiX2JhcnJpZXIodTggKipwcHJvZywgdTggKmlwLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qXG4rICogUmViYXNlIHRoZSBfX2FyZW5hIGFyZ3Mgb2YgYSBrZnVuYyBjYWxsIHRvIGFyZW5hIGtlcm5lbCBhZGRyZXNzZXMsXG4rICogck4gPSBrZXJuX3ZtX3N0YXJ0ICsgKHUzMilyTiwgd2l0aCBSMTIgaG9sZGluZyBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlXG4rICogYXJnIHByZXNlcnZlcyBOVUxMIGJ5IHNraXBwaW5nIHRoZSBhZGQsIHRlc3RlZCBvbiB0aGUgdHJ1bmNhdGVkIHZhbHVlIGFzXG4rICogYXJlbmEgTlVMTCBpcyBvZmZzZXQgMC4gUmV0dXJuIHRoZSBudW1iZXIgb2YgZW1pdHRlZCBieXRlcy5cbisgKi9cbitzdGF0aWMgaW50IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLFxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgdTggKipwcHJvZylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKmZtO1xuK1x0dTggKnByb2cgPSAqcHByb2c7XG4rXHR1OCAqc3RhcnQgPSBwcm9nO1xuK1x0aW50IGk7XG4rXG4rXHRmbSA9IGJwZl9qaXRfZmluZF9rZnVuY19tb2RlbChicGZfcHJvZywgaW5zbik7XG4rXHRpZiAoIWZtKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1pbl90KGludCwgZm0tXHUwMDNlbnJfYXJncywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKTsgaSsrKSB7XG4rXHRcdHU4IGZsYWdzID0gZm0tXHUwMDNlYXJnX2ZsYWdzW2ldO1xuK1x0XHR1MzIgcmVnID0gQlBGX1JFR18xICsgaTtcbitcbitcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKFdBUk5fT05fT05DRSghYnBmX3Byb2ctXHUwMDNlYXV4LVx1MDAzZWFyZW5hKSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0LyogbW92IGVOLCBlTjogdHJ1bmNhdGUgYW5kIGNsZWFyIHRoZSB1cHBlciAzMiBiaXRzICovXG4rXHRcdGVtaXRfbW92X3JlZyhcdTAwMjZwcm9nLCBmYWxzZSwgcmVnLCByZWcpO1xuK1x0XHRpZiAoZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHKSB7XG4rXHRcdFx0LyogdGVzdCBlTiwgZU47IGp6IG92ZXIgdGhlIDMtYnl0ZSBhZGQgKi9cbitcdFx0XHRtYXliZV9lbWl0X21vZChcdTAwMjZwcm9nLCByZWcsIHJlZywgZmFsc2UpO1xuK1x0XHRcdEVNSVQyKDB4ODUsIGFkZF8ycmVnKDB4QzAsIHJlZywgcmVnKSk7XG4rXHRcdFx0RU1JVDIoWDg2X0pFLCAzKTtcbitcdFx0fVxuK1x0XHQvKiBhZGQgck4sIHIxMiAqL1xuK1x0XHRtYXliZV9lbWl0X21vZChcdTAwMjZwcm9nLCByZWcsIFg4Nl9SRUdfUjEyLCB0cnVlKTtcbitcdFx0RU1JVDIoMHgwMSwgYWRkXzJyZWcoMHhDMCwgcmVnLCBYODZfUkVHX1IxMikpO1xuK1x0fVxuK1xuK1x0KnBwcm9nID0gcHJvZztcbitcdHJldHVybiBwcm9nIC0gc3RhcnQ7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcbiBcdFx0ICB1OCAqcndfaW1hZ2UsIGludCBvbGRwcm9nbGVuLCBzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eCwgYm9vbCBqbXBfcGFkZGluZylcbiB7XG5AQCAtMjU4Myw2ICsyNjI3LDEyIEBAIHN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4gXHRcdFx0fVxuIFx0XHRcdGlmICghaW1tMzIpXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHRpZiAoc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHtcbitcdFx0XHRcdGVyciA9IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhicGZfcHJvZywgaW5zbiwgXHUwMDI2cHJvZyk7XG4rXHRcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRcdFx0aXAgKz0gZXJyO1xuK1x0XHRcdH1cbiBcdFx0XHRpZiAocHJpdl9mcmFtZV9wdHIpIHtcbiBcdFx0XHRcdHB1c2hfcjkoXHUwMDI2cHJvZyk7XG4gXHRcdFx0XHRpcCArPSAyO1xuQEAgLTI5OTMsMTIgKzMwNDMsNDAgQEAgc3RhdGljIGludCBnZXRfbnJfdXNlZF9yZWdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSlcbiBcdHJldHVybiBucl91c2VkX3JlZ3M7XG4gfVxuIFxuKy8qXG4rICogQ29udmVydCBhbiBhcmVuYSBrZXJuZWwgYWRkcmVzcyBpbnRvIHRoZSBhcmVuYSBwb2ludGVyIGZvcm0gb24gaXRzIHdheVxuKyAqIGludG8gdGhlIEJQRiBjdHgsIHJheCA9ICh1MzIpKHNyYyAtIGtlcm5fdm1fc3RhcnQpLiBBIG51bGxhYmxlIGFyZ1xuKyAqIHByZXNlcnZlcyBOVUxMLCB0ZXN0ZWQgb24gdGhlIGZ1bGwgNjQtYml0IGtlcm5lbCBwb2ludGVyLiBUaGUgMzItYml0XG4rICogc3VidHJhY3Rpb24gYm90aCB0cnVuY2F0ZXMgYW5kIGNsZWFycyB0aGUgdXBwZXIgaGFsZiwgc28gdGhlIHN0b3JlZFxuKyAqIHZhbHVlIHNhdGlzZmllcyB0aGUgSklUIGludmFyaWFudCBmb3IgYXJlbmEgcG9pbnRlciByZWdpc3RlcnMuXG4rICovXG4rc3RhdGljIHZvaWQgZW1pdF9hcmVuYV9hcmdfY29udih1OCAqKnBwcm9nLCB1MzIgc3JjX3JlZywgYm9vbCBudWxsYWJsZSwgdTMyIGJhc2VfbG8pXG4re1xuK1x0dTggKnByb2cgPSAqcHByb2c7XG4rXG4rXHRpZiAobnVsbGFibGUpIHtcbitcdFx0aWYgKHNyY19yZWcgIT0gQlBGX1JFR18wKVxuK1x0XHRcdGVtaXRfbW92X3JlZyhcdTAwMjZwcm9nLCB0cnVlLCBCUEZfUkVHXzAsIHNyY19yZWcpO1xuK1x0XHQvKiB0ZXN0IHJheCwgcmF4OyBqeiBvdmVyIHRoZSA1LWJ5dGUgc3ViICovXG4rXHRcdEVNSVQzKDB4NDgsIDB4ODUsIDB4QzApO1xuK1x0XHRFTUlUMihYODZfSkUsIDUpO1xuK1x0fSBlbHNlIGlmIChzcmNfcmVnICE9IEJQRl9SRUdfMCkge1xuK1x0XHRlbWl0X21vdl9yZWcoXHUwMDI2cHJvZywgZmFsc2UsIEJQRl9SRUdfMCwgc3JjX3JlZyk7XG4rXHR9XG4rXHQvKiBzdWIgZWF4LCBiYXNlX2xvICovXG4rXHRFTUlUMV9vZmYzMigweDJELCBiYXNlX2xvKTtcbitcbitcdCpwcHJvZyA9IHByb2c7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZyxcbi1cdFx0ICAgICAgaW50IHN0YWNrX3NpemUsIGJvb2wgZm9yX2NhbGxfb3JpZ2luLCB1MzIgZmxhZ3MpXG4rXHRcdCAgICAgIGludCBzdGFja19zaXplLCBib29sIGZvcl9jYWxsX29yaWdpbiwgdTMyIGZsYWdzLFxuK1x0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wX2FyZW5hX2FyZ3MgKmFhcmdzKVxuIHtcbiBcdGludCBhcmdfcmVncywgZmlyc3Rfb2ZmID0gMCwgbnJfcmVncyA9IDAsIG5yX3N0YWNrX3Nsb3RzID0gMDtcbiBcdGJvb2wgdXNlX2ptcCA9IGJwZl90cmFtcG9saW5lX3VzZV9qbXAoZmxhZ3MpO1xuLVx0aW50IGksIGo7XG4rXHRpbnQgc3RhY2tfYXJnc19vZmYgPSAodXNlX2ptcCB8fCAoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0lORElSRUNUKSkgPyAxNiA6IDI0O1xuK1x0aW50IGksIGosIHNsb3QgPSAwO1xuIFxuIFx0LyogU3RvcmUgZnVuY3Rpb24gYXJndW1lbnRzIHRvIHN0YWNrLlxuIFx0ICogRm9yIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHR3byBwb2ludGVycyB0aGUgc2VxdWVuY2Ugd2lsbCBiZTpcbkBAIC0zMDI5LDE2ICszMTA3LDIwIEBAIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZyxcbiBcdFx0XHQvKiBjb3B5IGZ1bmN0aW9uIGFyZ3VtZW50cyBmcm9tIG9yaWdpbiBzdGFjayBmcmFtZVxuIFx0XHRcdCAqIGludG8gY3VycmVudCBzdGFjayBmcmFtZS5cbiBcdFx0XHQgKlxuLVx0XHRcdCAqIFRoZSBzdGFydGluZyBhZGRyZXNzIG9mIHRoZSBhcmd1bWVudHMgb24tc3RhY2tcbi1cdFx0XHQgKiBpczpcbi1cdFx0XHQgKiAgIHJicCArIDgocHVzaCByYnApICtcbi1cdFx0XHQgKiAgIDgocmV0dXJuIGFkZHIgb2Ygb3JpZ2luIGNhbGwpICtcbi1cdFx0XHQgKiAgIDgocmV0dXJuIGFkZHIgb2YgdGhlIGNhbGxlcilcbi1cdFx0XHQgKiB3aGljaCBtZWFuczogcmJwICsgMjRcbitcdFx0XHQgKiBUaGUgYXJndW1lbnRzIG9uLXN0YWNrIHN0YXJ0IGFib3ZlIHRoZSBzYXZlZCByYnBcbitcdFx0XHQgKiBhbmQgdGhlIHJldHVybiBhZGRyZXNzZXM6IHR3byByZXR1cm4gYWRkcmVzc2VzXG4rXHRcdFx0ICogKG9yaWdpbiBjYWxsIGFuZCBjYWxsZXIpIHdoZW4gdGhlIHRyYW1wb2xpbmUgaXNcbitcdFx0XHQgKiBlbnRlcmVkIHRocm91Z2ggdGhlIGZlbnRyeSBjYWxsLCBzbyByYnAgKyAyNCwgYW5kXG4rXHRcdFx0ICogYSBzaW5nbGUgb25lIHdoZW4gaXQgaXMgZW50ZXJlZCB3aXRoIGEgam1wIG9yXG4rXHRcdFx0ICogY2FsbGVkIGluZGlyZWN0bHksIHNvIHJicCArIDE2LlxuIFx0XHRcdCAqL1xuIFx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGFyZ19yZWdzOyBqKyspIHtcbiBcdFx0XHRcdGVtaXRfbGR4KHByb2csIEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHX0ZQLFxuLVx0XHRcdFx0XHQgbnJfc3RhY2tfc2xvdHMgKiA4ICsgMTYgKyAoIXVzZV9qbXApICogOCk7XG4rXHRcdFx0XHRcdCBucl9zdGFja19zbG90cyAqIDggKyBzdGFja19hcmdzX29mZik7XG4rXHRcdFx0XHRpZiAoYWFyZ3MgXHUwMDI2XHUwMDI2IChhYXJncy1cdTAwM2VzbG90cyBcdTAwMjYgQklUKHNsb3QpKSlcbitcdFx0XHRcdFx0ZW1pdF9hcmVuYV9hcmdfY29udihwcm9nLCBCUEZfUkVHXzAsXG4rXHRcdFx0XHRcdFx0XHQgICAgYWFyZ3MtXHUwMDNlbnVsbGFibGVfc2xvdHMgXHUwMDI2IEJJVChzbG90KSxcbitcdFx0XHRcdFx0XHRcdCAgICAodTMyKWFhcmdzLVx1MDAzZWtlcm5fdm1fc3RhcnQpO1xuIFx0XHRcdFx0ZW1pdF9zdHgocHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLCBCUEZfUkVHXzAsXG4gXHRcdFx0XHRcdCAtc3RhY2tfc2l6ZSk7XG4gXG5AQCAtMzA0Niw2ICszMTI4LDcgQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcm9nLFxuIFx0XHRcdFx0XHRmaXJzdF9vZmYgPSBzdGFja19zaXplO1xuIFx0XHRcdFx0c3RhY2tfc2l6ZSAtPSA4O1xuIFx0XHRcdFx0bnJfc3RhY2tfc2xvdHMrKztcbitcdFx0XHRcdHNsb3QrKztcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0LyogT25seSBjb3B5IHRoZSBhcmd1bWVudHMgb24tc3RhY2sgdG8gY3VycmVudFxuQEAgLTMwNTQsMTYgKzMxMzcsMjQgQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcm9nLFxuIFx0XHRcdCAqL1xuIFx0XHRcdGlmIChmb3JfY2FsbF9vcmlnaW4pIHtcbiBcdFx0XHRcdG5yX3JlZ3MgKz0gYXJnX3JlZ3M7XG4rXHRcdFx0XHRzbG90ICs9IGFyZ19yZWdzO1xuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0fVxuIFxuIFx0XHRcdC8qIGNvcHkgdGhlIGFyZ3VtZW50cyBmcm9tIHJlZ3MgaW50byBzdGFjayAqL1xuIFx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGFyZ19yZWdzOyBqKyspIHtcbi1cdFx0XHRcdGVtaXRfc3R4KHByb2csIEJQRl9EVywgQlBGX1JFR19GUCxcbi1cdFx0XHRcdFx0IG5yX3JlZ3MgPT0gNSA/IFg4Nl9SRUdfUjkgOiBCUEZfUkVHXzEgKyBucl9yZWdzLFxuLVx0XHRcdFx0XHQgLXN0YWNrX3NpemUpO1xuK1x0XHRcdFx0dTMyIHNyYyA9IG5yX3JlZ3MgPT0gNSA/IFg4Nl9SRUdfUjkgOiBCUEZfUkVHXzEgKyBucl9yZWdzO1xuK1xuK1x0XHRcdFx0aWYgKGFhcmdzIFx1MDAyNlx1MDAyNiAoYWFyZ3MtXHUwMDNlc2xvdHMgXHUwMDI2IEJJVChzbG90KSkpIHtcbitcdFx0XHRcdFx0ZW1pdF9hcmVuYV9hcmdfY29udihwcm9nLCBzcmMsXG4rXHRcdFx0XHRcdFx0XHQgICAgYWFyZ3MtXHUwMDNlbnVsbGFibGVfc2xvdHMgXHUwMDI2IEJJVChzbG90KSxcbitcdFx0XHRcdFx0XHRcdCAgICAodTMyKWFhcmdzLVx1MDAzZWtlcm5fdm1fc3RhcnQpO1xuK1x0XHRcdFx0XHRzcmMgPSBCUEZfUkVHXzA7XG4rXHRcdFx0XHR9XG4rXHRcdFx0XHRlbWl0X3N0eChwcm9nLCBCUEZfRFcsIEJQRl9SRUdfRlAsIHNyYywgLXN0YWNrX3NpemUpO1xuIFx0XHRcdFx0c3RhY2tfc2l6ZSAtPSA4O1xuIFx0XHRcdFx0bnJfcmVncysrO1xuK1x0XHRcdFx0c2xvdCsrO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0fVxuQEAgLTMzNTQsMTEgKzM0NDUsMTMgQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1cbiBcdHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKmZlbnRyeSA9IFx1MDAyNnRub2Rlc1tCUEZfVFJBTVBfRkVOVFJZXTtcbiBcdHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKmZleGl0ID0gXHUwMDI2dG5vZGVzW0JQRl9UUkFNUF9GRVhJVF07XG4gXHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICpmbW9kX3JldCA9IFx1MDAyNnRub2Rlc1tCUEZfVFJBTVBfTU9ESUZZX1JFVFVSTl07XG4rXHRzdHJ1Y3QgYnBmX3RyYW1wX2FyZW5hX2FyZ3MgYWFyZ3M7XG4gXHR2b2lkICpvcmlnX2NhbGwgPSBmdW5jX2FkZHI7XG4gXHRpbnQgY29va2llX29mZiwgY29va2llX2NudDtcbiBcdHU4ICoqYnJhbmNoZXMgPSBOVUxMO1xuIFx0dTY0IGZ1bmNfbWV0YTtcbiBcdHU4ICpwcm9nO1xuK1x0Ym9vbCBoYXNfYWFyZ3M7XG4gXHRib29sIHNhdmVfcmV0O1xuIFxuIFx0LypcbkBAIC0zMzY5LDYgKzM0NjIsOCBAQCBzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbVxuIFx0V0FSTl9PTl9PTkNFKChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIChmbGFncyBcdTAwMjYgfihCUEZfVFJBTVBfRl9JTkRJUkVDVCB8IEJQRl9UUkFNUF9GX1JFVF9GRU5UUllfUkVUKSkpO1xuIFxuK1x0aGFzX2FhcmdzID0gYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJncyh0bm9kZXMsIGZsYWdzLCBcdTAwMjZhYXJncyk7XG4rXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtLVx1MDAzZW5yX2FyZ3M7IGkrKylcbiBcdFx0bnJfcmVncyArPSAobS1cdTAwM2Vhcmdfc2l6ZVtpXSArIDcpIC8gOCAtIDE7XG4gXG5AQCAtMzUwMyw3ICszNTk4LDggQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1cbiBcdFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChcdTAwMjZwcm9nLCBCUEZfUkVHXzAsIC1pcF9vZmYsIChsb25nKWZ1bmNfYWRkcik7XG4gXHR9XG4gXG4tXHRzYXZlX2FyZ3MobSwgXHUwMDI2cHJvZywgcmVnc19vZmYsIGZhbHNlLCBmbGFncyk7XG4rXHRzYXZlX2FyZ3MobSwgXHUwMDI2cHJvZywgcmVnc19vZmYsIGZhbHNlLCBmbGFncyxcbitcdFx0ICBoYXNfYWFyZ3MgPyBcdTAwMjZhYXJncyA6IE5VTEwpO1xuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9DQUxMX09SSUcpIHtcbiBcdFx0LyogYXJnMTogbW92IHJkaSwgaW0gKi9cbkBAIC0zNTQ1LDcgKzM2NDEsNyBAQCBzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbVxuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9DQUxMX09SSUcpIHtcbiBcdFx0cmVzdG9yZV9yZWdzKG0sIFx1MDAyNnByb2csIHJlZ3Nfb2ZmKTtcbi1cdFx0c2F2ZV9hcmdzKG0sIFx1MDAyNnByb2csIGFyZ19zdGFja19vZmYsIHRydWUsIGZsYWdzKTtcbitcdFx0c2F2ZV9hcmdzKG0sIFx1MDAyNnByb2csIGFyZ19zdGFja19vZmYsIHRydWUsIGZsYWdzLCBOVUxMKTtcbiBcbiBcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9UQUlMX0NBTExfQ1RYKSB7XG4gXHRcdFx0LyogQmVmb3JlIGNhbGxpbmcgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLCBsb2FkIHRoZVxuQEAgLTQwNDYsNiArNDE0MiwxMSBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK2Jvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpXG4re1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIHZvaWQgKmJwZl9hcmNoX3RleHRfY29weSh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IGxlbilcbiB7XG4gXHRpZiAodGV4dF9wb2tlX2NvcHkoZHN0LCBzcmMsIGxlbikgPT0gTlVMTClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggMzU2ODg0NTg3YWUxMS4uMmY2MDZjMzI1NjgwNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmLmhcbkBAIC0xMjEzLDYgKzEyMTMsMTIgQEAgc3RydWN0IGJwZl9wcm9nX29mZmxvYWQge1xuIC8qIFRoZSBhcmd1bWVudCBpcyBzaWduZWQuICovXG4gI2RlZmluZSBCVEZfRk1PREVMX1NJR05FRF9BUkdcdFx0QklUKDEpXG4gXG4rLyogVGhlIGFyZ3VtZW50IGlzIGFuIGFyZW5hIHBvaW50ZXIuICovXG4rI2RlZmluZSBCVEZfRk1PREVMX0FSRU5BX0FSR1x0XHRCSVQoMilcbitcbisvKiBUaGUgYXJndW1lbnQgaXMgbnVsbGFibGUuICovXG4rI2RlZmluZSBCVEZfRk1PREVMX05VTExBQkxFX0FSR1x0XHRCSVQoMylcbitcbiBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwge1xuIFx0dTggcmV0X3NpemU7XG4gXHR1OCByZXRfZmxhZ3M7XG5AQCAtMTI4Niw2ICsxMjkyLDIwIEBAIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMge1xuIFx0aW50IG5yX25vZGVzO1xuIH07XG4gXG4rLypcbisgKiBXaGljaCA4LWJ5dGUgY3R4IHNsb3RzIG9mIGEgc3RydWN0X29wcyB0cmFtcG9saW5lIGhvbGQgYXJlbmEga2VybmVsXG4rICogcG9pbnRlcnMgdGhhdCBzYXZlX2FyZ3MoKSBjb252ZXJ0cyB0byB0aGUgYXJlbmEgcG9pbnRlciBmb3JtLFxuKyAqIGN0eFtzbG90XSA9ICh1MzIpKGthZGRyIC0ga2Vybl92bV9zdGFydCkuXG4rICovXG4rc3RydWN0IGJwZl90cmFtcF9hcmVuYV9hcmdzIHtcbitcdHUzMiBzbG90cztcbitcdHUzMiBudWxsYWJsZV9zbG90cztcdC8qIHN1YnNldCBvZiBAc2xvdHMgd2hlcmUgTlVMTCBpcyBwcmVzZXJ2ZWQgKi9cbitcdHU2NCBrZXJuX3ZtX3N0YXJ0O1xuK307XG4rXG4rYm9vbCBicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzKHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcywgdTMyIGZsYWdzLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgYnBmX3RyYW1wX2FyZW5hX2FyZ3MgKmFhcmdzKTtcbitcbiBzdHJ1Y3QgYnBmX3RyYW1wX3J1bl9jdHg7XG4gXG4gLyogRGlmZmVyZW50IHVzZSBjYXNlcyBmb3IgQlBGIHRyYW1wb2xpbmU6XG5AQCAtMTY4Nyw2ICsxNzA3LDExIEBAIHN0cnVjdCBicGZfY3R4X2FyZ19hdXgge1xuIFx0dTMyIGJ0Zl9pZDtcbiBcdHUzMiByZWZfaWQ7XG4gXHRib29sIHJlZmNvdW50ZWQ7XG4rXHQvKlxuK1x0ICogV2UgZG9uJ3QgZW5jb2RlIE5VTEwtbmVzcyBpbiB0aGUgdHlwZSBmb3IgdGhlIHByb2dyYW0sIGJ1dCBzdGlsbCBuZWVkXG4rXHQgKiB0byBkaXN0aW5ndWlzaCBpdCBmb3IgdGhlIHB1cnBvc2VzIG9mIHRlbGxpbmcgSklUcyB3aGF0IHNlcXVlbmNlIHRvIGVtaXQuXG4rXHQgKi9cbitcdGJvb2wgYXJlbmFfbnVsbGFibGU7XG4gfTtcbiBcbiBzdHJ1Y3QgYnRmX21vZF9wYWlyIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuaW5kZXggMzJkNTI5N2M1NTdlNS4uMzZjZTM0MDNmZTU5OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbkBAIC0xMTgzLDYgKzExODMsNyBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZCk7XG4gYm9vbCBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKHZvaWQpO1xuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19rZnVuY19jYWxsKHZvaWQpO1xuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpO1xuK2Jvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpO1xuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19mYXJfa2Z1bmNfY2FsbCh2b2lkKTtcbiBib29sIGJwZl9qaXRfc3VwcG9ydHNfZXhjZXB0aW9ucyh2b2lkKTtcbiBib29sIGJwZl9qaXRfc3VwcG9ydHNfcHRyX3hjaGcodm9pZCk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jIGIva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jXG5pbmRleCA0ZTdhNDhjMDJiZTVjLi44MjdhNjIxNmE2MjAxIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jXG4rKysgYi9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmNcbkBAIC0xNDcsNiArMTQ3LDggQEAgdm9pZCBicGZfc3RydWN0X29wc19pbWFnZV9mcmVlKHZvaWQgKmltYWdlKVxuIFxuICNkZWZpbmUgTUFZQkVfTlVMTF9TVUZGSVggXCJfX251bGxhYmxlXCJcbiAjZGVmaW5lIFJFRkNPVU5URURfU1VGRklYIFwiX19yZWZcIlxuKyNkZWZpbmUgQVJFTkFfU1VGRklYIFwiX19hcmVuYVwiXG4rI2RlZmluZSBBUkVOQV9NQVlCRV9OVUxMX1NVRkZJWCBcIl9fYXJlbmFfbnVsbGFibGVcIlxuIFxuIC8qIFByZXBhcmUgYXJndW1lbnQgaW5mbyBmb3IgZXZlcnkgbnVsbGFibGUgYXJndW1lbnQgb2YgYSBtZW1iZXIgb2YgYVxuICAqIHN0cnVjdF9vcHMgdHlwZS5cbkBAIC0xNTksNyArMTYxLDcgQEAgdm9pZCBicGZfc3RydWN0X29wc19pbWFnZV9mcmVlKHZvaWQgKmltYWdlKVxuICAqIHRvIHByb3ZpZGUgYW4gYXJyYXkgb2Ygc3RydWN0IGJwZl9jdHhfYXJnX2F1eCwgd2hpY2ggaW4gdHVybiBwcm92aWRlc1xuICAqIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHVzZWQgYnkgdGhlIHZlcmlmaWVyIHRvIGNoZWNrIHRoZSBhcmd1bWVudHMgb2YgdGhlXG4gICogQlBGIHN0cnVjdF9vcHMgcHJvZ3JhbSBhc3NpZ25lZCB0byB0aGUgbWVtYmVyLiBIZXJlLCB3ZSBvbmx5IGNhcmUgYWJvdXRcbi0gKiB0aGUgYXJndW1lbnRzIHRoYXQgYXJlIG1hcmtlZCBhcyBfX251bGxhYmxlLlxuKyAqIHRoZSBhcmd1bWVudHMgdGhhdCBhcmUgbWFya2VkIGFzIF9fbnVsbGFibGUsIF9fcmVmIG9yIF9fYXJlbmEuXG4gICpcbiAgKiBUaGUgYXJyYXkgb2Ygc3RydWN0IGJwZl9jdHhfYXJnX2F1eCBpcyBldmVudHVhbGx5IGFzc2lnbmVkIHRvXG4gICogcHJvZy1cdTAwM2VhdXgtXHUwMDNlY3R4X2FyZ19pbmZvIG9mIEJQRiBzdHJ1Y3Rfb3BzIHByb2dyYW1zIGFuZCBwYXNzZWQgdG8gdGhlXG5AQCAtMTc1LDcgKzE3Nyw4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9hcmdfaW5mbyhzdHJ1Y3QgYnRmICpidGYsXG4gXHRcdFx0ICAgIHN0cnVjdCBicGZfc3RydWN0X29wc19hcmdfaW5mbyAqYXJnX2luZm8pXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICpzdHViX2Z1bmNfcHJvdG8sICpwb2ludGVkX3R5cGU7XG4tXHRib29sIGlzX251bGxhYmxlID0gZmFsc2UsIGlzX3JlZmNvdW50ZWQgPSBmYWxzZTtcbitcdGJvb2wgaXNfbnVsbGFibGUgPSBmYWxzZSwgaXNfcmVmY291bnRlZCA9IGZhbHNlLCBpc19hcmVuYSA9IGZhbHNlO1xuK1x0Ym9vbCBpc19hcmVuYV9udWxsYWJsZSA9IGZhbHNlO1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqc3R1Yl9hcmdzLCAqYXJncztcbiBcdHN0cnVjdCBicGZfY3R4X2FyZ19hdXggKmluZm8sICppbmZvX2J1ZjtcbiBcdHUzMiBuYXJncywgYXJnX25vLCBpbmZvX2NudCA9IDA7XG5AQCAtMjI2LDI2ICsyMjksMzAgQEAgc3RhdGljIGludCBwcmVwYXJlX2FyZ19pbmZvKHN0cnVjdCBidGYgKmJ0ZixcbiBcdGluZm8gPSBpbmZvX2J1ZjtcbiBcdGZvciAoYXJnX25vID0gMDsgYXJnX25vIFx1MDAzYyBuYXJnczsgYXJnX25vKyspIHtcbiBcdFx0LyogU2tpcCBhcmd1bWVudHMgdGhhdCBpcyBub3Qgc3VmZml4ZWQgd2l0aFxuLVx0XHQgKiBcIl9fbnVsbGFibGUgb3IgX19yZWZcIi5cbitcdFx0ICogXCJfX251bGxhYmxlXCIsIFwiX19yZWZcIiwgXCJfX2FyZW5hXCIgb3IgXCJfX2FyZW5hX251bGxhYmxlXCIuXG4gXHRcdCAqL1xuIFx0XHRpc19udWxsYWJsZSA9IGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBcdTAwMjZzdHViX2FyZ3NbYXJnX25vXSxcbiBcdFx0XHRcdFx0XHQgICAgIE1BWUJFX05VTExfU1VGRklYKTtcbiBcdFx0aXNfcmVmY291bnRlZCA9IGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBcdTAwMjZzdHViX2FyZ3NbYXJnX25vXSxcbiBcdFx0XHRcdFx0XHQgICAgICAgUkVGQ09VTlRFRF9TVUZGSVgpO1xuK1x0XHRpc19hcmVuYV9udWxsYWJsZSA9IGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBcdTAwMjZzdHViX2FyZ3NbYXJnX25vXSxcbitcdFx0XHRcdFx0XHRcdCAgIEFSRU5BX01BWUJFX05VTExfU1VGRklYKTtcbitcdFx0aXNfYXJlbmEgPSBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgXHUwMDI2c3R1Yl9hcmdzW2FyZ19ub10sIEFSRU5BX1NVRkZJWCk7XG4gXG4gXHRcdGlmIChpc19udWxsYWJsZSlcbiBcdFx0XHRzdWZmaXggPSBNQVlCRV9OVUxMX1NVRkZJWDtcbiBcdFx0ZWxzZSBpZiAoaXNfcmVmY291bnRlZClcbiBcdFx0XHRzdWZmaXggPSBSRUZDT1VOVEVEX1NVRkZJWDtcbitcdFx0ZWxzZSBpZiAoaXNfYXJlbmFfbnVsbGFibGUpXG4rXHRcdFx0c3VmZml4ID0gQVJFTkFfTUFZQkVfTlVMTF9TVUZGSVg7XG4rXHRcdGVsc2UgaWYgKGlzX2FyZW5hKVxuK1x0XHRcdHN1ZmZpeCA9IEFSRU5BX1NVRkZJWDtcbiBcdFx0ZWxzZVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHQvKiBTaG91bGQgYmUgYSBwb2ludGVyIHRvIHN0cnVjdCAqL1xuLVx0XHRwb2ludGVkX3R5cGUgPSBidGZfdHlwZV9yZXNvbHZlX3B0cihidGYsXG4tXHRcdFx0XHRcdFx0ICAgIGFyZ3NbYXJnX25vXS50eXBlLFxuLVx0XHRcdFx0XHRcdCAgICBcdTAwMjZhcmdfYnRmX2lkKTtcbi1cdFx0aWYgKCFwb2ludGVkX3R5cGUgfHxcbi1cdFx0ICAgICFidGZfdHlwZV9pc19zdHJ1Y3QocG9pbnRlZF90eXBlKSkge1xuK1x0XHQvKiBTaG91bGQgYmUgYSBwb2ludGVyIHRvIHN0cnVjdCwgb3IgYW55IHBvaW50ZXIgZm9yIF9fYXJlbmEvX19hcmVuYV9udWxsYWJsZSAqL1xuK1x0XHRwb2ludGVkX3R5cGUgPSBidGZfdHlwZV9yZXNvbHZlX3B0cihidGYsIGFyZ3NbYXJnX25vXS50eXBlLCBcdTAwMjZhcmdfYnRmX2lkKTtcbitcdFx0aWYgKCFwb2ludGVkX3R5cGUgfHwgKCFpc19hcmVuYSBcdTAwMjZcdTAwMjYgIWlzX2FyZW5hX251bGxhYmxlIFx1MDAyNlx1MDAyNiAhYnRmX3R5cGVfaXNfc3RydWN0KHBvaW50ZWRfdHlwZSkpKSB7XG4gXHRcdFx0cHJfd2FybihcInN0dWIgZnVuY3Rpb24gJXMgaGFzICVzIHRhZ2dpbmcgdG8gYW4gdW5zdXBwb3J0ZWQgdHlwZVxcblwiLFxuIFx0XHRcdFx0c3R1Yl9mbmFtZSwgc3VmZml4KTtcbiBcdFx0XHRnb3RvIGVycl9vdXQ7XG5AQCAtMjczLDYgKzI4MCwxNSBAQCBzdGF0aWMgaW50IHByZXBhcmVfYXJnX2luZm8oc3RydWN0IGJ0ZiAqYnRmLFxuIFx0XHR9IGVsc2UgaWYgKGlzX3JlZmNvdW50ZWQpIHtcbiBcdFx0XHRpbmZvLVx1MDAzZXJlZ190eXBlID0gUFRSX1RSVVNURUQgfCBQVFJfVE9fQlRGX0lEO1xuIFx0XHRcdGluZm8tXHUwMDNlcmVmY291bnRlZCA9IHRydWU7XG4rXHRcdH0gZWxzZSBpZiAoaXNfYXJlbmEgfHwgaXNfYXJlbmFfbnVsbGFibGUpIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIEJvdGggdHlwZXMgZ2V0IFBUUl9UT19BUkVOQS4gSW4gdmVyaWZpZXIgc3RhdGUsXG4rXHRcdFx0ICogUFRSX1RPX0FSRU5BIGVuY29tcGFzc2VzIHBvdGVudGlhbCBOVUxMIHZhbHVlcywgYnV0XG4rXHRcdFx0ICogd2UgZG8gbm90IGZvcmNlIHRoZSBwcm9ncmFtIHRvIGNoZWNrIGl0LCBvciBtYWludGFpblxuK1x0XHRcdCAqIHByZWNpc2lvbiBhcm91bmQgaXQsIHNpbmNlIGl0IGhhcyBubyBzYWZldHkgaW1wbGljYXRpb24uXG4rXHRcdFx0ICovXG4rXHRcdFx0aW5mby1cdTAwM2VyZWdfdHlwZSA9IFBUUl9UT19BUkVOQTtcbitcdFx0XHRpbmZvLVx1MDAzZWFyZW5hX251bGxhYmxlID0gaXNfYXJlbmFfbnVsbGFibGU7XG4gXHRcdH1cbiBcbiBcdFx0aW5mbysrO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jXG5pbmRleCA1ZThhYzQ1Y2U1NmFmLi5lMzFmNTZmNDAxZWJmIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9idGYuY1xuKysrIGIva2VybmVsL2JwZi9idGYuY1xuQEAgLTY5NjMsMTUgKzY5NjMsMTkgQEAgYm9vbCBidGZfY3R4X2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSwgZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuLVx0LyogY2hlY2sgZm9yIFBUUl9UT19SRE9OTFlfQlVGX09SX05VTEwgb3IgUFRSX1RPX1JEV1JfQlVGX09SX05VTEwgKi9cbitcdC8qXG4rXHQgKiBDaGVjayBmb3IgUFRSX1RPX1JET05MWV9CVUZfT1JfTlVMTCwgUFRSX1RPX1JEV1JfQlVGX09SX05VTEwgb3JcbitcdCAqIFBUUl9UT19BUkVOQSAoYm90aCBudWxsYWJsZSBhbmQgbm9uLW51bGxhYmxlIGNhc2VzKS5cbitcdCAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJvZy1cdTAwM2VhdXgtXHUwMDNlY3R4X2FyZ19pbmZvX3NpemU7IGkrKykge1xuIFx0XHRjb25zdCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4ICpjdHhfYXJnX2luZm8gPSBcdTAwMjZwcm9nLVx1MDAzZWF1eC1cdTAwM2VjdHhfYXJnX2luZm9baV07XG4gXHRcdHUzMiB0eXBlLCBmbGFnO1xuIFxuIFx0XHR0eXBlID0gYmFzZV90eXBlKGN0eF9hcmdfaW5mby1cdTAwM2VyZWdfdHlwZSk7XG4gXHRcdGZsYWcgPSB0eXBlX2ZsYWcoY3R4X2FyZ19pbmZvLVx1MDAzZXJlZ190eXBlKTtcbi1cdFx0aWYgKGN0eF9hcmdfaW5mby1cdTAwM2VvZmZzZXQgPT0gb2ZmIFx1MDAyNlx1MDAyNiB0eXBlID09IFBUUl9UT19CVUYgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAoZmxhZyBcdTAwMjYgUFRSX01BWUJFX05VTEwpKSB7XG4rXHRcdGlmIChjdHhfYXJnX2luZm8tXHUwMDNlb2Zmc2V0ID09IG9mZiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICh0eXBlID09IFBUUl9UT19BUkVOQSB8fFxuK1x0XHQgICAgICh0eXBlID09IFBUUl9UT19CVUYgXHUwMDI2XHUwMDI2IChmbGFnIFx1MDAyNiBQVFJfTUFZQkVfTlVMTCkpKSkge1xuIFx0XHRcdGluZm8tXHUwMDNlcmVnX3R5cGUgPSBjdHhfYXJnX2luZm8tXHUwMDNlcmVnX3R5cGU7XG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdH1cbkBAIC03NTQxLDYgKzc1NDUsMjIgQEAgc3RhdGljIHU4IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdClcbiBcdHJldHVybiBmbGFncztcbiB9XG4gXG4rc3RhdGljIHU4IF9fZ2V0X2FyZ19mbW9kZWxfZmxhZ3MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZyxcbitcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpXG4re1xuK1x0dTggZmxhZ3MgPSBfX2dldF90eXBlX2Ztb2RlbF9mbGFncyh0KTtcbitcbitcdGlmIChidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcIl9fYXJlbmFcIikgfHxcbitcdCAgICBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcIl9fYXJlbmFfbnVsbGFibGVcIikpXG4rXHRcdGZsYWdzIHw9IEJURl9GTU9ERUxfQVJFTkFfQVJHO1xuK1x0aWYgKGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwiX19udWxsYWJsZVwiKSB8fFxuK1x0ICAgIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwiX19hcmVuYV9udWxsYWJsZVwiKSlcbitcdFx0ZmxhZ3MgfD0gQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7XG4rXG4rXHRyZXR1cm4gZmxhZ3M7XG4rfVxuK1xuIGludCBidGZfZGlzdGlsbF9mdW5jX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4gXHRcdFx0ICAgc3RydWN0IGJ0ZiAqYnRmLFxuIFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqZnVuYyxcbkBAIC03NjA2LDcgKzc2MjYsNyBAQCBpbnQgYnRmX2Rpc3RpbGxfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXHRcdG0tXHUwMDNlYXJnX3NpemVbaV0gPSByZXQ7XG4tXHRcdG0tXHUwMDNlYXJnX2ZsYWdzW2ldID0gX19nZXRfdHlwZV9mbW9kZWxfZmxhZ3ModCk7XG4rXHRcdG0tXHUwMDNlYXJnX2ZsYWdzW2ldID0gX19nZXRfYXJnX2Ztb2RlbF9mbGFncyhidGYsIFx1MDAyNmFyZ3NbaV0sIHQpO1xuIFx0fVxuIFx0bS1cdTAwM2Vucl9hcmdzID0gbmFyZ3M7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NvcmUuYyBiL2tlcm5lbC9icGYvY29yZS5jXG5pbmRleCBlMjA3NjY2N2IyNDUxLi5hM2UxZmFlMzJlYWNlIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jb3JlLmNcbisrKyBiL2tlcm5lbC9icGYvY29yZS5jXG5AQCAtMzMwOCw2ICszMzA4LDExIEBAIGJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbitib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIGJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfZmFyX2tmdW5jX2NhbGwodm9pZClcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuaW5kZXggZWQ3OTk5YWQ2YzY2Yy4uZDJkN2EyOTA0MzQ1ZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG4rKysgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuQEAgLTUyOSw2ICs1MjksNTMgQEAgYnBmX3RyYW1wb2xpbmVfZ2V0X3Byb2dzKGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGludCAqdG90YWwsIGJvb2wgKmlwX2FcbiBcdHJldHVybiB0bm9kZXM7XG4gfVxuIFxuK3N0YXRpYyBib29sIGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbit7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByb2ctXHUwMDNlYXV4LVx1MDAzZWN0eF9hcmdfaW5mb19zaXplOyBpKyspXG4rXHRcdGlmIChiYXNlX3R5cGUocHJvZy1cdTAwM2VhdXgtXHUwMDNlY3R4X2FyZ19pbmZvW2ldLnJlZ190eXBlKSA9PSBQVFJfVE9fQVJFTkEpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuKy8qXG4rICogQ29sbGVjdCB3aGljaCBjdHggc2xvdHMgb2YgYSBzdHJ1Y3Rfb3BzIHRyYW1wb2xpbmUgaG9sZCBhcmVuYSBrZXJuZWxcbisgKiBwb2ludGVycyB0aGF0IHNhdmVfYXJncygpIG11c3QgY29udmVydCB0byB0aGUgYXJlbmEgcG9pbnRlciBmb3JtLiBPbmx5XG4rICogdGhlIHN0cnVjdF9vcHMgaW5kaXJlY3QgdHJhbXBvbGluZSBjb252ZXJ0czogaXQgZGlzcGF0Y2hlcyB0byBhIHNpbmdsZVxuKyAqIHByb2cgd2hvc2UgYXJlbmEgaXMga25vd24gYXQgZ2VuZXJhdGlvbiB0aW1lLiBSZXR1cm4gZmFsc2Ugd2hlbiB0aGVyZVxuKyAqIGlzIG5vdGhpbmcgdG8gY29udmVydC5cbisgKi9cbitib29sIGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3Moc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB1MzIgZmxhZ3MsXG4rXHRcdFx0XHQgIHN0cnVjdCBicGZfdHJhbXBfYXJlbmFfYXJncyAqYWFyZ3MpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nO1xuK1x0aW50IGk7XG4rXG4rXHRtZW1zZXQoYWFyZ3MsIDAsIHNpemVvZigqYWFyZ3MpKTtcbitcbitcdGlmICghKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9JTkRJUkVDVCkgfHxcbitcdCAgICB0bm9kZXNbQlBGX1RSQU1QX0ZFTlRSWV0ubnJfbm9kZXMgIT0gMSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cHJvZyA9IHRub2Rlc1tCUEZfVFJBTVBfRkVOVFJZXS5ub2Rlc1swXS1cdTAwM2VsaW5rLVx1MDAzZXByb2c7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwcm9nLVx1MDAzZWF1eC1cdTAwM2VjdHhfYXJnX2luZm9fc2l6ZTsgaSsrKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCBicGZfY3R4X2FyZ19hdXggKmluZm8gPSBcdTAwMjZwcm9nLVx1MDAzZWF1eC1cdTAwM2VjdHhfYXJnX2luZm9baV07XG4rXG4rXHRcdGlmIChiYXNlX3R5cGUoaW5mby1cdTAwM2VyZWdfdHlwZSkgIT0gUFRSX1RPX0FSRU5BKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRhYXJncy1cdTAwM2VzbG90cyB8PSBCSVQoaW5mby1cdTAwM2VvZmZzZXQgLyA4KTtcbitcdFx0aWYgKGluZm8tXHUwMDNlYXJlbmFfbnVsbGFibGUpXG4rXHRcdFx0YWFyZ3MtXHUwMDNlbnVsbGFibGVfc2xvdHMgfD0gQklUKGluZm8tXHUwMDNlb2Zmc2V0IC8gOCk7XG4rXHR9XG4rXHRpZiAoIWFhcmdzLVx1MDAzZXNsb3RzKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFwcm9nLVx1MDAzZWF1eC1cdTAwM2VhcmVuYSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGFhcmdzLVx1MDAzZWtlcm5fdm1fc3RhcnQgPSBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQocHJvZy1cdTAwM2VhdXgtXHUwMDNlYXJlbmEpO1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGJwZl90cmFtcF9pbWFnZV9mcmVlKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltKVxuIHtcbiBcdGJwZl9pbWFnZV9rc3ltX2RlbChcdTAwMjZpbS1cdTAwM2Vrc3ltKTtcbkBAIC02ODUsNiArNzMyLDcgQEAgc3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRcbiBcdHUzMiBvcmlnX2ZsYWdzID0gdHItXHUwMDNlZmxhZ3M7XG4gXHRib29sIGlwX2FyZyA9IGZhbHNlO1xuIFx0aW50IGVyciwgdG90YWwsIHNpemU7XG4rXHRpbnQga2luZCwgaTtcbiBcbiBcdHRub2RlcyA9IGJwZl90cmFtcG9saW5lX2dldF9wcm9ncyh0ciwgXHUwMDI2dG90YWwsIFx1MDAyNmlwX2FyZyk7XG4gXHRpZiAoSVNfRVJSKHRub2RlcykpXG5AQCAtNjk1LDYgKzc0MywyMiBAQCBzdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBBcmVuYSBjdHggYXJncyBhcmUgY29udmVydGVkIG9ubHkgYnkgdGhlIHN0cnVjdF9vcHMgaW5kaXJlY3RcbitcdCAqIHRyYW1wb2xpbmUsIHdoaWNoIGRpc3BhdGNoZXMgdG8gYSBzaW5nbGUga25vd24gcHJvZy4gR2VuZXJpY1xuK1x0ICogdHJhbXBvbGluZXMgY2FuIG1peCBwcm9ncyB3aXRoIGRpZmZlcmVudCBhcmVuYXMsIHNvIG5vIGNvbnZlcnNpb25cbitcdCAqIGlzIHBvc3NpYmxlIGhlcmUuIE5vdCByZWFjaGFibGUgdG9kYXk6IG9ubHkgc3RydWN0X29wcyBwcm9ncyBnZXRcbitcdCAqIGFyZW5hIGN0eCBhcmdzIGFuZCB0aGV5IG5ldmVyIHJpZGUgZ2VuZXJpYyB0cmFtcG9saW5lcy5cbitcdCAqL1xuK1x0Zm9yIChraW5kID0gMDsga2luZCBcdTAwM2MgQlBGX1RSQU1QX01BWDsga2luZCsrKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRub2Rlc1traW5kXS5ucl9ub2RlczsgaSsrKSB7XG4rXHRcdFx0aWYgKGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKHRub2Rlc1traW5kXS5ub2Rlc1tpXS1cdTAwM2VsaW5rLVx1MDAzZXByb2cpKSB7XG4rXHRcdFx0XHRlcnIgPSAtRU5PVFNVUFA7XG4rXHRcdFx0XHRnb3RvIG91dDtcbitcdFx0XHR9XG4rXHRcdH1cbitcdH1cbitcbiBcdC8qIGNsZWFyIGFsbCBiaXRzIGV4Y2VwdCBTSEFSRV9JUE1PRElGWSBhbmQgVEFJTF9DQUxMX0NUWCAqL1xuIFx0dHItXHUwMDNlZmxhZ3MgXHUwMDI2PSAoQlBGX1RSQU1QX0ZfU0hBUkVfSVBNT0RJRlkgfCBCUEZfVFJBTVBfRl9UQUlMX0NBTExfQ1RYKTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGIyNzQwMDRmY2NmZDkuLmM5MTI5MzMwZGVkZTYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTEwOTA3LDYgKzEwOTA3LDE2IEBAIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19pcnFfZmxhZyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW1cbiBcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcIl9faXJxX2ZsYWdcIik7XG4gfVxuIFxuK3N0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19hcmVuYShjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbit7XG4rXHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCJfX2FyZW5hXCIpO1xuK31cbitcbitzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfYXJlbmFfbnVsbGFibGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpXG4re1xuK1x0cmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwiX19hcmVuYV9udWxsYWJsZVwiKTtcbit9XG4rXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX3NjYWxhcl93aXRoX25hbWUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZyxcbiBcdFx0XHRcdFx0ICBjb25zdCBjaGFyICpuYW1lKVxuQEAgLTExMTI3LDYgKzExMTM3LDcgQEAgZW51bSBrZnVuY19wdHJfYXJnX3R5cGUge1xuIFx0S0ZfQVJHX1BUUl9UT19JUlFfRkxBRyxcbiBcdEtGX0FSR19QVFJfVE9fUkVTX1NQSU5fTE9DSyxcbiBcdEtGX0FSR19QVFJfVE9fVEFTS19XT1JLLFxuK1x0S0ZfQVJHX1BUUl9UT19BUkVOQSxcbiB9O1xuIFxuIGVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcbkBAIC0xMTQxMiw3ICsxMTQyMyw2IEBAIGdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXG4gXHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIodCkpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbi1cbiBcdHJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMobWV0YS1cdTAwM2VidGYsIHQtXHUwMDNldHlwZSwgTlVMTCk7XG4gXHRyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQobWV0YS1cdTAwM2VidGYsIHJlZl90LVx1MDAzZW5hbWVfb2ZmKTtcbiBcbkBAIC0xMTQ2MSw2ICsxMTQ3MSw5IEBAIGdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXG4gXHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19SRVNfU1BJTl9MT0NLO1xuIFx0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2NhbGxiYWNrKGVudiwgbWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4gXHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19DQUxMQkFDSztcbitcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19hcmVuYShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSB8fFxuK1x0XHQgaXNfa2Z1bmNfYXJnX2FyZW5hX251bGxhYmxlKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuK1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQVJFTkE7XG4gXHRlbHNlIGlmIChhcmcgKyAxIFx1MDAzYyBuYXJncyBcdTAwMjZcdTAwMjZcbiBcdFx0IChpc19rZnVuY19hcmdfbWVtX3NpemUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnICsgMV0pIHx8XG4gXHRcdCAgaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZyArIDFdKSkpIHtcbkBAIC0xMjE1NCw2ICsxMjE2NywzMSBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxuIFxuIFx0XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmdzW2ldLnR5cGUsIE5VTEwpO1xuIFxuK1x0XHRpZiAoYmFzZV90eXBlKGtmX2FyZ190eXBlKSA9PSBLRl9BUkdfUFRSX1RPX0FSRU5BKSB7XG4rXHRcdFx0aWYgKCFicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3MoKSkge1xuK1x0XHRcdFx0dmVyYm9zZShlbnYsIFwiSklUIGRvZXMgbm90IHN1cHBvcnQga2Z1bmMgJXMoKSB3aXRoIGFyZW5hIHBvaW50ZXIgYXJndW1lbnRzXFxuXCIsXG4rXHRcdFx0XHRcdGZ1bmNfbmFtZSk7XG4rXHRcdFx0XHRyZXR1cm4gLUVOT1RTVVBQO1xuK1x0XHRcdH1cbitcdFx0XHRpZiAoIWVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VhcmVuYSkge1xuK1x0XHRcdFx0dmVyYm9zZShlbnYsXG4rXHRcdFx0XHRcdFwiJXMgYXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXFxuXCIsXG4rXHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHR9XG4rXHRcdFx0aWYgKHJlZ25vIFx1MDAzYyAwKSB7XG4rXHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBhcmVuYSBwb2ludGVyIGNhbm5vdCBiZSBhIHN0YWNrIGFyZ3VtZW50XFxuXCIsXG4rXHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHR9XG4rXHRcdFx0aWYgKHJlZy1cdTAwM2V0eXBlICE9IFBUUl9UT19BUkVOQSBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKSB7XG4rXHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBpcyBub3QgYSBwb2ludGVyIHRvIGFyZW5hIG9yIHNjYWxhclxcblwiLFxuK1x0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4gXHRcdGlmIChidGZfdHlwZV9pc19wdHIodCkgXHUwMDI2XHUwMDI2IChicGZfcmVnaXN0ZXJfaXNfbnVsbChyZWcpIHx8IHR5cGVfbWF5X2JlX251bGwocmVnLVx1MDAzZXR5cGUpKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFpc19rZnVuY19hcmdfbnVsbGFibGUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbaV0pKSB7XG4gXHRcdFx0dmVyYm9zZShlbnYsIFwiUG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkICVzXFxuXCIsXG5AQCAtMTg4MDcsNiArMTg4NDUsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCAqZnVuY19wcm90bztcbiBcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYztcbitcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wc19hcmdfaW5mbyAqYXJnX2luZm87XG4gXHRjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgKnN0X29wcztcbiBcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXI7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBlbnYtXHUwMDNlcHJvZztcbkBAIC0xODg4NSwxMCArMTg5MjQsMjMgQEAgc3RhdGljIGludCBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdH1cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN0X29wc19kZXNjLVx1MDAzZWFyZ19pbmZvW21lbWJlcl9pZHhdLmNudDsgaSsrKSB7XG4tXHRcdGlmIChzdF9vcHNfZGVzYy1cdTAwM2VhcmdfaW5mb1ttZW1iZXJfaWR4XS5pbmZvW2ldLnJlZmNvdW50ZWQpIHtcbitcdGFyZ19pbmZvID0gXHUwMDI2c3Rfb3BzX2Rlc2MtXHUwMDNlYXJnX2luZm9bbWVtYmVyX2lkeF07XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcmdfaW5mby1cdTAwM2VjbnQ7IGkrKykge1xuK1x0XHRjb25zdCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4ICppbmZvID0gXHUwMDI2YXJnX2luZm8tXHUwMDNlaW5mb1tpXTtcbitcbitcdFx0aWYgKGluZm8tXHUwMDNlcmVmY291bnRlZClcbiBcdFx0XHRoYXNfcmVmY291bnRlZF9hcmcgPSB0cnVlO1xuLVx0XHRcdGJyZWFrO1xuK1x0XHRpZiAoYmFzZV90eXBlKGluZm8tXHUwMDNlcmVnX3R5cGUpID09IFBUUl9UT19BUkVOQSkge1xuK1x0XHRcdGlmICghYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKCkpIHtcbitcdFx0XHRcdHZlcmJvc2UoZW52LCBcIkpJVCBkb2VzIG5vdCBzdXBwb3J0IGFyZW5hIGFyZ3VtZW50c1xcblwiKTtcbitcdFx0XHRcdHJldHVybiAtRU5PVFNVUFA7XG4rXHRcdFx0fVxuK1x0XHRcdGlmICghcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXJlbmEpIHtcbitcdFx0XHRcdHZlcmJvc2UoZW52LFxuK1x0XHRcdFx0XHRcImFyZW5hIGFyZ3VtZW50IG9mICVzIHJlcXVpcmVzIGEgcHJvZ3JhbSB3aXRoIGFuIGFzc29jaWF0ZWQgYXJlbmFcXG5cIixcbitcdFx0XHRcdFx0bW5hbWUpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuIFx0XHR9XG4gXHR9XG4gXG5AQCAtMTg5MDksOCArMTg5NjEsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfZnVuY19uYW1lID0gbW5hbWU7XG4gXHRlbnYtXHUwMDNlb3BzID0gc3Rfb3BzLVx1MDAzZXZlcmlmaWVyX29wcztcbiBcbi1cdHJldHVybiBicGZfcHJvZ19jdHhfYXJnX2luZm9faW5pdChwcm9nLCBzdF9vcHNfZGVzYy1cdTAwM2VhcmdfaW5mb1ttZW1iZXJfaWR4XS5pbmZvLFxuLVx0XHRcdFx0XHQgIHN0X29wc19kZXNjLVx1MDAzZWFyZ19pbmZvW21lbWJlcl9pZHhdLmNudCk7XG4rXHRyZXR1cm4gYnBmX3Byb2dfY3R4X2FyZ19pbmZvX2luaXQocHJvZywgYXJnX2luZm8tXHUwMDNlaW5mbywgYXJnX2luZm8tXHUwMDNlY250KTtcbiB9XG4gI2RlZmluZSBTRUNVUklUWV9QUkVGSVggXCJzZWN1cml0eV9cIlxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9rZnVuYy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOWJlMTk1NjVmMGQ1M1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfa2Z1bmMuY1xuQEAgLTAsMCArMSwxNSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiYXJlbmFfa2Z1bmMuc2tlbC5oXCJcbitcbisvKlxuKyAqIFRoZSB0ZXN0IGtmdW5jcyBsaXZlIGluIGJwZl90ZXN0bW9kLiBSZXNvbHZpbmcga2Z1bmNzIGFnYWluc3QgbW9kdWxlXG4rICogQlRGcyBuZWVkcyBDQVBfU1lTX0FETUlOLCBzbyBydW4gd2l0aCBmdWxsIGNhcGFiaWxpdGllcyBpbnN0ZWFkIG9mXG4rICogdGhyb3VnaCB0aGUgdmVyaWZpZXIgdGVzdHMnIGNhcGFiaWxpdHktcmVzdHJpY3RlZCBydW5uZXIuXG4rICovXG4rdm9pZCB0ZXN0X2FyZW5hX2tmdW5jKHZvaWQpXG4re1xuK1x0UlVOX1RFU1RTKGFyZW5hX2tmdW5jKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfa2Z1bmNfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9rZnVuY19qaXQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjIzNTljZGUyNGM0NWRcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2tmdW5jX2ppdC5jXG5AQCAtMCwwICsxLDEzIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJhcmVuYV9rZnVuY19qaXQuc2tlbC5oXCJcbitcbisvKlxuKyAqIFJ1bnMgd2l0aCBmdWxsIGNhcGFiaWxpdGllczogcmVzb2x2aW5nIG1vZHVsZSBrZnVuYyBrc3ltcyByZXF1aXJlc1xuKyAqIENBUF9TWVNfQURNSU4sIHdoaWNoIHJ1bGVzIG91dCB0aGUgY2FwYWJpbGl0eS1yZXN0cmljdGVkIHJ1bm5lci5cbisgKi9cbit2b2lkIHRlc3RfYXJlbmFfa2Z1bmNfaml0KHZvaWQpXG4re1xuK1x0UlVOX1RFU1RTKGFyZW5hX2tmdW5jX2ppdCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iMWUzOWRlZmEzOGFlXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xuQEAgLTAsMCArMSw3NCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwic3RydWN0X29wc19hcmVuYS5za2VsLmhcIlxuKyNpbmNsdWRlIFwic3RydWN0X29wc19hcmVuYV9mYWlsLnNrZWwuaFwiXG4rXG4rI2lmIGRlZmluZWQoX194ODZfNjRfXylcbisvKlxuKyAqIEF0dGFjaCBjYWxsYmFja3Mgd2l0aCBfX2FyZW5hIGFuZCBfX2FyZW5hX251bGxhYmxlIGFyZ3VtZW50cyBhbmQgZHJpdmVcbisgKiB0aGVtIHRocm91Z2ggdGhlIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKigpIGtmdW5jcy5cbisgKi9cbitzdGF0aWMgdm9pZCBhcmVuYV9hcmcodm9pZClcbit7XG4rXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpO1xuK1x0c3RydWN0IHN0cnVjdF9vcHNfYXJlbmEgKnNrZWw7XG4rXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBOVUxMO1xuK1x0aW50IGVycjtcbitcbitcdHNrZWwgPSBzdHJ1Y3Rfb3BzX2FyZW5hX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJzdHJ1Y3Rfb3BzX2FyZW5hX19vcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRsaW5rID0gYnBmX21hcF9fYXR0YWNoX3N0cnVjdF9vcHMoc2tlbC1cdTAwM2VtYXBzLnRlc3Rtb2RfYXJlbmEpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGxpbmssIFwiYXR0YWNoX3N0cnVjdF9vcHNcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy50cmlnZ2VyKSxcbitcdFx0XHRcdCAgICAgXHUwMDI2dG9wdHMpO1xuK1x0QVNTRVJUX09LKGVyciwgXCJ0ZXN0X3J1blwiKTtcbitcdEFTU0VSVF9FUSh0b3B0cy5yZXR2YWwsIDAsIFwidHJpZ2dlcl9yZXR2YWxcIik7XG4rXG4rb3V0OlxuK1x0YnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XG4rXHRzdHJ1Y3Rfb3BzX2FyZW5hX19kZXN0cm95KHNrZWwpO1xuK31cbitcbisvKlxuKyAqIEEgcHJvZ3JhbSB3aXRoIG5vIGFyZW5hIGNhbm5vdCBhdHRhY2ggdG8gYSBtZW1iZXIgd2l0aCBhbiBfX2FyZW5hXG4rICogYXJndW1lbnQuXG4rICovXG4rc3RhdGljIHZvaWQgYXJlbmFfYXJnX2ZhaWwodm9pZClcbit7XG4rXHRzdHJ1Y3Qgc3RydWN0X29wc19hcmVuYV9mYWlsICpza2VsO1xuK1xuK1x0c2tlbCA9IHN0cnVjdF9vcHNfYXJlbmFfZmFpbF9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKEFTU0VSVF9FUlJfUFRSKHNrZWwsIFwic3RydWN0X29wc19hcmVuYV9mYWlsX19vcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWxfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuKyNlbmRpZlxuK1xuKy8qXG4rICogU2VyaWFsaXplZCBiZWNhdXNlIGl0IGF0dGFjaGVzIHRoZSBzaW5nbGV0b24gYnBmX3Rlc3Rtb2Rfb3BzMywgd2hpY2hcbisgKiB0ZXN0X3N0cnVjdF9vcHNfcHJpdmF0ZV9zdGFjayBhbHNvIGF0dGFjaGVzOyByZWdpc3RlcmluZyBpdCB0d2ljZSBmYWlsc1xuKyAqIHdpdGggLUVFWElTVC5cbisgKi9cbit2b2lkIHNlcmlhbF90ZXN0X3N0cnVjdF9vcHNfYXJlbmEodm9pZClcbit7XG4rXHQvKlxuK1x0ICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBvbmx5LlxuK1x0ICogRWxzZXdoZXJlIHZlcmlmaWNhdGlvbiBmYWlscyB3aXRoIFwiSklUIGRvZXMgbm90IHN1cHBvcnQgYXJlbmFcbitcdCAqIGFyZ3VtZW50c1wiLCBzbyB0aGUgcHJvZ3JhbXMgY2Fubm90IGV2ZW4gbG9hZC5cbitcdCAqL1xuKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImFyZW5hX2FyZ1wiKSlcbitcdFx0YXJlbmFfYXJnKCk7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImFyZW5hX2FyZ19mYWlsXCIpKVxuK1x0XHRhcmVuYV9hcmdfZmFpbCgpO1xuKyNlbHNlXG4rXHR0ZXN0X19za2lwKCk7XG4rI2VuZGlmXG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xNWQ0ODE1MTc5N2RhXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuY1xuQEAgLTAsMCArMSwyNjAgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbitcbisjZGVmaW5lIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuKyNpbmNsdWRlIFwiYnBmX2V4cGVyaW1lbnRhbC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGZfYXJlbmFfY29tbW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcIi4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFwiXG4rXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpO1xuK1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpO1xuK1x0LyogcGFnZSAwIGhvc3RzIHRoZSBhcmVuYSBnbG9iYWwsIHBhZ2UgMSBpcyBmb3IgYWxsb2NhdGlvbnMgKi9cbitcdF9fdWludChtYXhfZW50cmllcywgMik7XG4rfSBhcmVuYSBTRUMoXCIubWFwc1wiKTtcbitcbisvKlxuKyAqIE9jY3VwaWVzIHBhZ2UgMCBzbyBubyBhbGxvY2F0aW9uIGxhbmRzIGF0IGFyZW5hIG9mZnNldCAwLCB3aGljaCB0aGVcbisgKiBudWxsYWJsZSB0ZXN0cyBiZWxvdyBtdXN0IGJlIGFibGUgdG8gdGVsbCBhcGFydCBmcm9tIE5VTEwuXG4rICovXG4rdTY0IF9fYXJlbmEgYXJlbmFfcGFkO1xuK1xuKy8qIHZvbGF0aWxlIHRvIGZvcmNlIHRoZSBzY2FsYXIgcmVsb2FkcyBiZWxvdyAqL1xuK3ZvbGF0aWxlIHU2NCBzdGFzaDtcbitcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19hcmNoX3g4Nl82NFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxuK2ludCBhcmVuYV9hcmdfZm9ybXModm9pZCAqY3R4KVxuK3tcbisjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVClcbitcdHU2NCBfX2FyZW5hICp2YWw7XG4rXHR1NjQgcmV0O1xuK1xuK1x0dmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuK1x0aWYgKCF2YWwpXG4rXHRcdHJldHVybiAxO1xuK1xuK1x0LyogUFRSX1RPX0FSRU5BIGFyZ3VtZW50ICovXG4rXHQqdmFsID0gNDE7XG4rXHRyZXQgPSBicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoKHU2NCAqKXZhbCk7XG4rXHRpZiAocmV0ICE9IDQxIHx8ICp2YWwgIT0gNDIpXG4rXHRcdHJldHVybiAyO1xuK1xuK1x0LyogdGhlIGxvdyAzMiBiaXRzIGFzIGEgc2NhbGFyICovXG4rXHRzdGFzaCA9ICh1MzIpKHU2NCl2YWw7XG4rXHRyZXQgPSBicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoKHU2NCAqKXN0YXNoKTtcbitcdGlmIChyZXQgIT0gNDIgfHwgKnZhbCAhPSA0MylcbitcdFx0cmV0dXJuIDM7XG4rXG4rXHQvKiB0aGUgZnVsbCB1c2VyIGFkZHJlc3MgYXMgYSBzY2FsYXIgKi9cbitcdHN0YXNoID0gKHU2NCl2YWw7XG4rXHRicGZfYWRkcl9zcGFjZV9jYXN0KHN0YXNoLCAxLCAwKTtcbitcdHJldCA9IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopc3Rhc2gpO1xuK1x0aWYgKHJldCAhPSA0MyB8fCAqdmFsICE9IDQ0KVxuK1x0XHRyZXR1cm4gNDtcbitcbitcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTtcbisjZW5kaWZcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIFBpbiB0aGUgcmViYXNlIHNlbWFudGljcyB1c2luZyB0aGUgY2FwdHVyZSBrZnVuY3MsIHdoaWNoIHJldHVybiB0aGUgcmF3XG4rICogYXJndW1lbnQgdmFsdWU6IF9fYXJlbmEgcmViYXNlcyB1bmNvbmRpdGlvbmFsbHksIHNvIHplcm8gbG93IDMyIGJpdHNcbisgKiBhcnJpdmUgYXMgdGhlIGFyZW5hIGtlcm5lbCBiYXNlLCB3aGlsZSBfX2FyZW5hX251bGxhYmxlIHR1cm5zIHRoZW0gaW50b1xuKyAqIE5VTEwuXG4rICovXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fYXJjaF94ODZfNjRcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbitpbnQgYXJlbmFfYXJnX3JlYmFzZSh2b2lkICpjdHgpXG4re1xuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuK1x0dTY0IF9fYXJlbmEgKnZhbDtcbitcdHU2NCBiYXNlLCBvZmY7XG4rXG4rXHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRiYXNlID0gYnBmX2tmdW5jX2FyZW5hX2NhcF90ZXN0KE5VTEwpO1xuK1x0aWYgKCFiYXNlKVxuK1x0XHRyZXR1cm4gMjtcbitcbitcdC8qIG9ubHkgdGhlIGxvdyAzMiBiaXRzIGNvbnRyaWJ1dGUgKi9cbitcdHN0YXNoID0gMHhiYWRjMGZmZTAwMDAwMDAwO1xuK1x0aWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCgodTY0ICopc3Rhc2gpICE9IGJhc2UpXG4rXHRcdHJldHVybiAzO1xuK1xuK1x0b2ZmID0gKHUzMikodTY0KXZhbDtcbitcdGlmIChicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QoKHU2NCAqKXZhbCkgIT0gYmFzZSArIG9mZilcbitcdFx0cmV0dXJuIDQ7XG4rXG4rXHRpZiAoYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KE5VTEwpICE9IDApXG4rXHRcdHJldHVybiA1O1xuK1xuK1x0c3Rhc2ggPSAweGJhZGMwZmZlMDAwMDAwMDA7XG4rXHRpZiAoYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KCh1NjQgKilzdGFzaCkgIT0gMClcbitcdFx0cmV0dXJuIDY7XG4rXG4rXHRpZiAoYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KCh1NjQgKil2YWwpICE9IGJhc2UgKyBvZmYpXG4rXHRcdHJldHVybiA3O1xuK1xuK1x0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xuKyNlbmRpZlxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0XG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4raW50IGFyZW5hX2FyZ19udWxsYWJsZSh2b2lkICpjdHgpXG4re1xuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuK1x0dTY0IF9fYXJlbmEgKnZhbDtcbitcdHU2NCByZXQ7XG4rXG4rXHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHQqdmFsID0gNDE7XG4rXHRyZXQgPSBicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QoKHU2NCAqKXZhbCk7XG4rXHRpZiAocmV0ICE9IDQxIHx8ICp2YWwgIT0gNDIpXG4rXHRcdHJldHVybiAyO1xuK1xuK1x0aWYgKGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdChOVUxMKSAhPSAweGRlYWRiZWVmKVxuK1x0XHRyZXR1cm4gMztcbitcbitcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTtcbisjZW5kaWZcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19hcmNoX3g4Nl82NFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxuK2ludCBhcmVuYV9hcmdzNSh2b2lkICpjdHgpXG4re1xuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuK1x0dTY0IF9fYXJlbmEgKnZhbDtcbitcbitcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdHZhbFswXSA9IDE7XG4rXHR2YWxbMV0gPSAyO1xuK1x0dmFsWzJdID0gNDtcbitcdHZhbFszXSA9IDg7XG4rXHR2YWxbNF0gPSAxNjtcbitcbitcdGlmIChicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdCgodTY0ICopXHUwMDI2dmFsWzBdLCAodTY0ICopXHUwMDI2dmFsWzFdLFxuK1x0XHRcdFx0ICAgICAgICh1NjQgKilcdTAwMjZ2YWxbMl0sICh1NjQgKilcdTAwMjZ2YWxbM10sXG4rXHRcdFx0XHQgICAgICAgKHU2NCAqKVx1MDAyNnZhbFs0XSkgIT0gMzEpXG4rXHRcdHJldHVybiAyO1xuK1x0aWYgKGJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KCh1NjQgKilcdTAwMjZ2YWxbMF0sICh1NjQgKilcdTAwMjZ2YWxbMV0sXG4rXHRcdFx0XHQgICAgICAgKHU2NCAqKVx1MDAyNnZhbFsyXSwgKHU2NCAqKVx1MDAyNnZhbFszXSwgTlVMTCkgIT0gMTUpXG4rXHRcdHJldHVybiAzO1xuK1xuK1x0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xuKyNlbmRpZlxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0XG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4raW50IGFyZW5hX2FyZ19taXhlZCh2b2lkICpjdHgpXG4re1xuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuK1x0dTY0IF9fYXJlbmEgKnZhbDtcbitcbitcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdHZhbFswXSA9IDc7XG4rXHR2YWxbMV0gPSA1O1xuK1xuK1x0aWYgKGJwZl9rZnVuY19hcmVuYV9taXhlZF90ZXN0KCh1NjQgKilcdTAwMjZ2YWxbMF0sIE5VTEwpICE9IDcpXG4rXHRcdHJldHVybiAyO1xuK1xuK1x0aWYgKGJwZl9rZnVuY19hcmVuYV9taXhlZF90ZXN0KCh1NjQgKilcdTAwMjZ2YWxbMF0sICh1NjQgKilcdTAwMjZ2YWxbMV0pICE9IDEyKVxuK1x0XHRyZXR1cm4gMztcbitcbitcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTtcbisjZW5kaWZcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBrZXJuZWwtc2lkZSBmYXVsdHMgb24gdW5wb3B1bGF0ZWQgcGFnZXMgcmVjb3ZlciB2aWEgdGhlIHNjcmF0Y2ggcGFnZSAqL1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0XG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4raW50IGFyZW5hX2FyZ191bnBvcHVsYXRlZCh2b2lkICpjdHgpXG4re1xuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuK1x0dTY0IF9fYXJlbmEgKnZhbDtcbitcbitcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdHN0YXNoID0gKHU2NCl2YWwgKyBQQUdFX1NJWkU7XG4rXHRicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoKHU2NCAqKXN0YXNoKTtcbitcbitcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTtcbisjZW5kaWZcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19hcmNoX3g4Nl82NFxuK19fZmFpbHVyZSBfX21zZyhcImFyZW5hIHBvaW50ZXIgcmVxdWlyZXMgYSBwcm9ncmFtIHdpdGggYW4gYXNzb2NpYXRlZCBhcmVuYVwiKVxuK2ludCBhcmVuYV9hcmdfbm9fYXJlbmEodm9pZCAqY3R4KVxuK3tcbitcdGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopMSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fYXJjaF94ODZfNjRcbitfX2ZhaWx1cmUgX19tc2coXCJpcyBub3QgYSBwb2ludGVyIHRvIGFyZW5hIG9yIHNjYWxhclwiKVxuK2ludCBhcmVuYV9hcmdfYmFkX3JlZyh2b2lkICpjdHgpXG4re1xuK1x0dTY0IGJ1ZiA9IDA7XG4rXG4rXHQvKiB1c2UgdGhlIGFyZW5hIHNvIHRoZSBwcm9ncmFtIHBhc3NlcyB0aGUgYXJlbmEgcHJlc2VuY2UgY2hlY2sgKi9cbitcdGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbitcdGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdChcdTAwMjZidWYpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcdTAwMjZcdTAwMjYgXFxcbitcdGRlZmluZWQoX19CUEZfRkVBVFVSRV9TVEFDS19BUkdVTUVOVClcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19hcmNoX3g4Nl82NFxuK19fZmFpbHVyZSBfX21zZyhcImFyZW5hIHBvaW50ZXIgY2Fubm90IGJlIGEgc3RhY2sgYXJndW1lbnRcIilcbitpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eClcbit7XG4rXHRicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHRicGZfa2Z1bmNfYXJlbmFfc3RhY2tfYXJnX3Rlc3QoMSwgMiwgMywgNCwgNSwgKHU2NCAqKTEpO1xuK1x0cmV0dXJuIDA7XG4rfVxuKyNlbHNlXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fYXJjaF94ODZfNjRcbitfX2Rlc2NyaXB0aW9uKFwiYXJlbmFfYXJnX3N0YWNrOiBub3Qgc3VwcG9ydGVkLCBkdW1teSB0ZXN0XCIpXG4rX19zdWNjZXNzXG4raW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuKyNlbmRpZlxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi44NDc0NzYxMTcyNWY2XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmNcbkBAIC0wLDAgKzEsOTYgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbitcbisvKlxuKyAqIFZlcmlmeSB0aGUgSklULWVtaXR0ZWQgcmViYXNlIHNlcXVlbmNlcyBmb3IgX19hcmVuYSBhbmQgX19hcmVuYV9udWxsYWJsZVxuKyAqIGtmdW5jIGFyZ3VtZW50cy4gVGhlIGNhcHR1cmUga2Z1bmNzIHRha2UgdGhlIGFyZ3VtZW50IHdpdGhvdXRcbisgKiBkZXJlZmVyZW5jaW5nIGl0LCBzbyB0aGVzZSB0ZXN0cyBwaW4gb25seSB0aGUgZW1pdHRlZCBjb2RlLlxuKyAqL1xuKyNkZWZpbmUgQlBGX05PX0tGVU5DX1BST1RPVFlQRVNcbisjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rI2luY2x1ZGUgXCJicGZfZXhwZXJpbWVudGFsLmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZl9hcmVuYV9jb21tb24uaFx1MDAzZVxuKyNpbmNsdWRlIFwiLi4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXCJcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XG4rXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK30gYXJlbmEgU0VDKFwiLm1hcHNcIik7XG4rXG4rLyogdm9sYXRpbGUgdG8gZm9yY2UgdGhlIHNjYWxhciByZWxvYWRzIGJlbG93ICovXG4rdm9sYXRpbGUgdTY0IHN0YXNoO1xuK1xuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0XG4rX19qaXRlZChcIi4uLlwiKVxuK19faml0ZWQoXCJcdG1vdmxcdCVlZGksICVlZGlcIilcbitfX2ppdGVkKFwiXHRhZGRxXHQlcjEyLCAlcmRpXCIpXG4rX19qaXRlZChcIi4uLlwiKVxuK19faml0ZWQoXCJcdGNhbGxxXHR7ey4qfX1cIilcbitfX3N1Y2Nlc3NcbitpbnQgYXJlbmFfYXJnX2ppdF9yZWJhc2Uodm9pZCAqY3R4KVxuK3tcbitcdHN0YXNoID0gKHU2NClicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHRicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QoKHU2NCAqKXN0YXNoKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19hcmNoX3g4Nl82NFxuK19faml0ZWQoXCIuLi5cIilcbitfX2ppdGVkKFwiXHRtb3ZsXHQlZWRpLCAlZWRpXCIpXG4rX19qaXRlZChcIlx0dGVzdGxcdCVlZGksICVlZGlcIilcbitfX2ppdGVkKFwiXHRqZVx0e3suKn19XCIpXG4rX19qaXRlZChcIlx0YWRkcVx0JXIxMiwgJXJkaVwiKVxuK19fc3VjY2Vzc1xuK2ludCBhcmVuYV9hcmdfaml0X251bGxhYmxlKHZvaWQgKmN0eClcbit7XG4rXHRzdGFzaCA9ICh1NjQpYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuK1x0YnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KCh1NjQgKilzdGFzaCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fYXJjaF94ODZfNjRcbitfX2ppdGVkKFwiLi4uXCIpXG4rX19qaXRlZChcIlx0bW92bFx0JWVkaSwgJWVkaVwiKVxuK19faml0ZWQoXCJcdGFkZHFcdCVyMTIsICVyZGlcIilcbitfX2ppdGVkKFwiXHRtb3ZsXHQlZXNpLCAlZXNpXCIpXG4rX19qaXRlZChcIlx0YWRkcVx0JXIxMiwgJXJzaVwiKVxuK19faml0ZWQoXCJcdG1vdmxcdCVlZHgsICVlZHhcIilcbitfX2ppdGVkKFwiXHRhZGRxXHQlcjEyLCAlcmR4XCIpXG4rX19qaXRlZChcIlx0bW92bFx0JWVjeCwgJWVjeFwiKVxuK19faml0ZWQoXCJcdGFkZHFcdCVyMTIsICVyY3hcIilcbitfX2ppdGVkKFwiXHRtb3ZsXHQlcjhkLCAlcjhkXCIpXG4rX19qaXRlZChcIlx0dGVzdGxcdCVyOGQsICVyOGRcIilcbitfX2ppdGVkKFwiXHRqZVx0e3suKn19XCIpXG4rX19qaXRlZChcIlx0YWRkcVx0JXIxMiwgJXI4XCIpXG4rX19zdWNjZXNzXG4raW50IGFyZW5hX2FyZ19qaXRfYXJnczUodm9pZCAqY3R4KVxuK3tcbitcdHU2NCBfX2FyZW5hICp2YWw7XG4rXG4rXHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHR2YWxbMF0gPSAxO1xuK1x0dmFsWzFdID0gMjtcbitcdHZhbFsyXSA9IDQ7XG4rXHR2YWxbM10gPSA4O1xuK1x0dmFsWzRdID0gMTY7XG4rXG4rXHRicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdCgodTY0ICopXHUwMDI2dmFsWzBdLCAodTY0ICopXHUwMDI2dmFsWzFdLFxuK1x0XHRcdFx0ICAgKHU2NCAqKVx1MDAyNnZhbFsyXSwgKHU2NCAqKVx1MDAyNnZhbFszXSxcbitcdFx0XHRcdCAgICh1NjQgKilcdTAwMjZ2YWxbNF0pO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKyNlbmRpZiAvKiBfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCAqL1xuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmJhMDRjNzNkOGQ5Njdcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbkBAIC0wLDAgKzEsMTE1IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4rXG4rI2RlZmluZSBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFU1xuKyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfZXhwZXJpbWVudGFsLmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZl9hcmVuYV9jb21tb24uaFx1MDAzZVxuKyNpbmNsdWRlIFwiLi4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXCJcbisjaW5jbHVkZSBcIi4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFwiXG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcbitcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcbitcdC8qIHBhZ2UgMCBob3N0cyB0aGUgYXJlbmEgZ2xvYmFscywgcGFnZSAxIGlzIGZvciBhbGxvY2F0aW9ucyAqL1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAyKTtcbit9IGFyZW5hIFNFQyhcIi5tYXBzXCIpO1xuK1xuKy8qIGFsc28gYXNzb2NpYXRlcyB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGFyZW5hICovXG4rdTY0IF9fYXJlbmEgYXJlbmFfdG91Y2g7XG4rLyogcmF3IHZhbHVlIG9mIHRoZSBsYXN0IF9fYXJlbmEgY3R4IGFyZ3VtZW50LCBjYXB0dXJlZCBieSB0ZXN0X2FyZW5hX2NiICovXG4rdTY0IF9fYXJlbmEgY2JfcHRyX3ZhbDtcbitcbitTRUMoXCJzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmFcIilcbitpbnQgdGVzdF9hcmVuYV9jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcbit7XG4rXHR1NjQgX19hcmVuYSAqcHRyID0gKHU2NCBfX2FyZW5hICopY3R4WzBdO1xuK1xuK1x0YXJlbmFfdG91Y2grKztcbitcdGNiX3B0cl92YWwgPSBjdHhbMF07XG4rXHQqcHRyICs9IDE7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwic3RydWN0X29wcy90ZXN0X2FyZW5hX251bGxhYmxlXCIpXG4raW50IHRlc3RfYXJlbmFfbnVsbGFibGVfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXG4re1xuK1x0dTY0IF9fYXJlbmEgKnB0ciA9ICh1NjQgX19hcmVuYSAqKWN0eFswXTtcbitcbitcdGFyZW5hX3RvdWNoKys7XG4rXHRpZiAoIXB0cilcbitcdFx0cmV0dXJuIDB4YmVlO1xuK1x0KnB0ciArPSAxO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN0cnVjdF9vcHMvdGVzdF9hcmVuYV9zdGFja1wiKVxuK2ludCB0ZXN0X2FyZW5hX3N0YWNrX2NiKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KVxuK3tcbitcdHU2NCBfX2FyZW5hICpwdHIgPSAodTY0IF9fYXJlbmEgKiljdHhbOF07XG4rXG4rXHRhcmVuYV90b3VjaCsrO1xuK1x0LyogcGluIHRoZSBzbG90IGxheW91dDogdGhlIGxlYWRpbmcgYXJncyBmaWxsIGN0eFswXS4uY3R4WzddICovXG4rXHRpZiAoY3R4WzBdICE9IDEgfHwgY3R4WzddICE9IDgpXG4rXHRcdHJldHVybiAweGJhZDtcbitcdCpwdHIgKz0gMTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCIuc3RydWN0X29wcy5saW5rXCIpXG4rc3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYSA9IHtcbitcdC50ZXN0X2FyZW5hID0gKHZvaWQgKil0ZXN0X2FyZW5hX2NiLFxuK1x0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSAodm9pZCAqKXRlc3RfYXJlbmFfbnVsbGFibGVfY2IsXG4rXHQudGVzdF9hcmVuYV9zdGFjayA9ICh2b2lkICopdGVzdF9hcmVuYV9zdGFja19jYixcbit9O1xuK1xuK1NFQyhcInN5c2NhbGxcIilcbitpbnQgdHJpZ2dlcih2b2lkICpjdHgpXG4re1xuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuK1x0dTY0IF9fYXJlbmEgKnZhbDtcbitcdGludCByZXQ7XG4rXG4rXHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHQqdmFsID0gNDE7XG4rXHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSgodTY0ICopdmFsKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiAyO1xuK1x0aWYgKCp2YWwgIT0gNDIpXG4rXHRcdHJldHVybiAzO1xuK1xuK1x0LypcbitcdCAqIFRoZSBjYWxsYmFjayBtdXN0IGhhdmUgc2VlbiBleGFjdGx5ICh1MzIpKGthZGRyIC0ga2Vybl92bV9zdGFydCksXG4rXHQgKiB3aGljaCBpcyB0aGUgYXJlbmEgb2Zmc2V0IG9mIHZhbCB3aXRoIHRoZSB1cHBlciAzMiBiaXRzIGNsZWFyLlxuK1x0ICovXG4rXHRpZiAoY2JfcHRyX3ZhbCAhPSAodTMyKSh1NjQpdmFsKVxuK1x0XHRyZXR1cm4gNDtcbitcbitcdHJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKCh1NjQgKil2YWwpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIDU7XG4rXHRpZiAoKnZhbCAhPSA0MylcbitcdFx0cmV0dXJuIDY7XG4rXG4rXHQvKiBOVUxMIHN1cnZpdmVzIHRoZSBudWxsYWJsZSBrZnVuYyBhbmQgdGhlIHRyYW1wb2xpbmUgYXMgTlVMTCAqL1xuK1x0cmV0ID0gYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUoTlVMTCk7XG4rXHRpZiAocmV0ICE9IDB4YmVlKVxuK1x0XHRyZXR1cm4gNztcbitcbitcdC8qIHRoZSBhcmVuYSBwb2ludGVyIGlzIHN0YWNrLXBhc3NlZCBpbnRvIHRoZSB0cmFtcG9saW5lIGhlcmUgKi9cbitcdHJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKCh1NjQgKil2YWwpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIDg7XG4rXHRpZiAoKnZhbCAhPSA0NClcbitcdFx0cmV0dXJuIDk7XG4rXG4rXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XG4rI2VuZGlmXG4rXHRyZXR1cm4gMDtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMWMwZWM3MjdkNjM3NFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5jXG5AQCAtMCwwICsxLDIwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcIi4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFwiXG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuK1xuKy8qIE5vIGFyZW5hIGluIHRoZSBwcm9ncmFtOiBhdHRhY2hpbmcgdG8gdGVzdF9hcmVuYSBtdXN0IGJlIHJlamVjdGVkLiAqL1xuK1NFQyhcInN0cnVjdF9vcHMvdGVzdF9hcmVuYVwiKVxuK2ludCB0ZXN0X2FyZW5hX25vX2FyZW5hKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCIuc3RydWN0X29wcy5saW5rXCIpXG4rc3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYV9mYWlsID0ge1xuK1x0LnRlc3RfYXJlbmEgPSAodm9pZCAqKXRlc3RfYXJlbmFfbm9fYXJlbmEsXG4rfTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuaW5kZXggZWIwZjliNWUxOGQ4NS4uZmRlYWE1NjM1NmI1MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbkBAIC0yMzcsNiArMjM3LDU2IEBAIF9fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2NvbW1vbl90ZXN0KHZvaWQpXG4ge1xuIH1cbiBcbitfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KHU2NCAqdmFsX19hcmVuYSlcbit7XG4rXHR1NjQgb2xkO1xuK1xuK1x0b2xkID0gKnZhbF9fYXJlbmE7XG4rXHQqdmFsX19hcmVuYSA9IG9sZCArIDE7XG4rXHRyZXR1cm4gb2xkO1xuK31cbitcbitfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX251bGxhYmxlX2FyZ190ZXN0KHU2NCAqdmFsX19hcmVuYV9udWxsYWJsZSlcbit7XG4rXHR1NjQgb2xkO1xuK1xuK1x0aWYgKCF2YWxfX2FyZW5hX251bGxhYmxlKVxuK1x0XHRyZXR1cm4gMHhkZWFkYmVlZjtcbitcbitcdG9sZCA9ICp2YWxfX2FyZW5hX251bGxhYmxlO1xuK1x0KnZhbF9fYXJlbmFfbnVsbGFibGUgPSBvbGQgKyAxO1xuK1x0cmV0dXJuIG9sZDtcbit9XG4rXG4rX19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCh1NjQgKnZhbF9fYXJlbmEpXG4re1xuK1x0cmV0dXJuICh1NjQpdmFsX19hcmVuYTtcbit9XG4rXG4rX19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdCh1NjQgKnZhbF9fYXJlbmFfbnVsbGFibGUpXG4re1xuK1x0cmV0dXJuICh1NjQpdmFsX19hcmVuYV9udWxsYWJsZTtcbit9XG4rXG4rX19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KHU2NCAqYV9fYXJlbmEsIHU2NCAqYl9fYXJlbmEsXG4rXHRcdFx0XHRcdCAgIHU2NCAqY19fYXJlbmEsIHU2NCAqZF9fYXJlbmEsXG4rXHRcdFx0XHRcdCAgIHU2NCAqZV9fYXJlbmFfbnVsbGFibGUpXG4re1xuK1x0cmV0dXJuICphX19hcmVuYSArICpiX19hcmVuYSArICpjX19hcmVuYSArICpkX19hcmVuYSArXG4rXHQgICAgICAgKGVfX2FyZW5hX251bGxhYmxlID8gKmVfX2FyZW5hX251bGxhYmxlIDogMCk7XG4rfVxuK1xuK19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfc3RhY2tfYXJnX3Rlc3QodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsIHU2NCBlLFxuK1x0XHRcdFx0XHRcdHU2NCAqZl9fYXJlbmEpXG4re1xuK1x0cmV0dXJuIGEgKyBiICsgYyArIGQgKyBlICsgKmZfX2FyZW5hO1xuK31cbitcbitfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QodTY0ICphX19hcmVuYSwgdTY0ICpiX19hcmVuYV9udWxsYWJsZSlcbit7XG4rXHRyZXR1cm4gKmFfX2FyZW5hICsgKGJfX2FyZW5hX251bGxhYmxlID8gKmJfX2FyZW5hX251bGxhYmxlIDogMCk7XG4rfVxuK1xuIF9fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2R5bnB0cl90ZXN0KHN0cnVjdCBicGZfZHlucHRyICpwdHIsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGJwZl9keW5wdHIgKnB0cl9fbnVsbGFibGUpXG4ge1xuQEAgLTM0Nyw5ICszOTcsMjkgQEAgc3RhdGljIGludCBicGZfdGVzdG1vZF90ZXN0XzQodm9pZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmEodTY0ICpwdHJfX2FyZW5hKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbnVsbGFibGUodTY0ICpwdHJfX2FyZW5hX251bGxhYmxlKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2sodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsXG4rXHRcdFx0XHRcdCAgICAgIHU2NCBlLCB1NjQgZiwgdTY0IGcsIHU2NCBoLFxuK1x0XHRcdFx0XHQgICAgICB1NjQgKnB0cl9fYXJlbmEpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyBfX2JwZl90ZXN0bW9kX29wczMgPSB7XG4gXHQudGVzdF8xID0gYnBmX3Rlc3Rtb2RfdGVzdF8zLFxuIFx0LnRlc3RfMiA9IGJwZl90ZXN0bW9kX3Rlc3RfNCxcbitcdC50ZXN0X2FyZW5hID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYSxcbitcdC50ZXN0X2FyZW5hX251bGxhYmxlID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9udWxsYWJsZSxcbitcdC50ZXN0X2FyZW5hX3N0YWNrID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9zdGFjayxcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X29wczModm9pZClcbkBAIC0zNjgsNiArNDM4LDIxIEBAIF9fYnBmX2tmdW5jIHZvaWQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMih2b2lkKVxuIFx0c3Rfb3BzMy1cdTAwM2V0ZXN0XzIoKTtcbiB9XG4gXG4rX19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKHU2NCAqcHRyX19hcmVuYSlcbit7XG4rXHRyZXR1cm4gc3Rfb3BzMy1cdTAwM2V0ZXN0X2FyZW5hKHB0cl9fYXJlbmEpO1xuK31cbitcbitfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUodTY0ICpwdHJfX2FyZW5hX251bGxhYmxlKVxuK3tcbitcdHJldHVybiBzdF9vcHMzLVx1MDAzZXRlc3RfYXJlbmFfbnVsbGFibGUocHRyX19hcmVuYV9udWxsYWJsZSk7XG4rfVxuK1xuK19fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayh1NjQgKnB0cl9fYXJlbmEpXG4re1xuK1x0cmV0dXJuIHN0X29wczMtXHUwMDNldGVzdF9hcmVuYV9zdGFjaygxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCBwdHJfX2FyZW5hKTtcbit9XG4rXG4gc3RydWN0IGJwZl90ZXN0bW9kX2J0Zl90eXBlX3RhZ18xIHtcbiBcdGludCBhO1xuIH07XG5AQCAtNzU1LDYgKzg0MCwxMyBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfdGVzdG1vZF9zZXFfbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxX2Rlc3Ryb3ksIEtGX0lURVJfREVTVFJPWSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfdGVzdG1vZF9zZXFfdmFsdWUpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jb21tb25fdGVzdClcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdClcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdClcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX3N0YWNrX2FyZ190ZXN0KVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdClcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9tZW1fbGVuX3Bhc3MxKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfZHlucHRyX3Rlc3QpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19uZXN0ZWRfYWNxdWlyZV9ub256ZXJvX29mZnNldF90ZXN0LCBLRl9BQ1FVSVJFKVxuQEAgLTc3MCw2ICs4NjIsOSBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2RfY3R4X2NyZWF0ZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9jdHhfcmVsZWFzZSwgS0ZfUkVMRUFTRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMilcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaylcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2dldF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7XG4gQlRGX0tGVU5DU19FTkQoYnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX2lkcylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFxuaW5kZXggODYzZmQxMGYxNjE5OS4uMzNmMmFmNWI3MDg1NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbkBAIC0xMDYsNiArMTA2LDEyIEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMyIHtcbiBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB7XG4gXHRpbnQgKCp0ZXN0XzEpKHZvaWQpO1xuIFx0aW50ICgqdGVzdF8yKSh2b2lkKTtcbitcdC8qIFVzZWQgdG8gdGVzdCBhcmVuYSBwb2ludGVyIGFyZ3VtZW50cy4gKi9cbitcdGludCAoKnRlc3RfYXJlbmEpKHU2NCAqcHRyKTtcbitcdGludCAoKnRlc3RfYXJlbmFfbnVsbGFibGUpKHU2NCAqcHRyKTtcbitcdC8qIGVub3VnaCBsZWFkaW5nIGFyZ3MgdG8gZm9yY2UgQHB0ciBvbnRvIHRoZSBzdGFjayBvbiB4ODYgYW5kIGFybTY0ICovXG4rXHRpbnQgKCp0ZXN0X2FyZW5hX3N0YWNrKSh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCwgdTY0IGUsIHU2NCBmLFxuK1x0XHRcdFx0dTY0IGcsIHU2NCBoLCB1NjQgKnB0cik7XG4gfTtcbiBcbiBzdHJ1Y3Qgc3Rfb3BzX2FyZ3Mge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG5pbmRleCBjMzZiYjkxMWRlZmE3Li4xYTcyZDBmZGE1M2M0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxuQEAgLTk4LDYgKzk4LDE2IEBAIHZvaWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZWxlYXNlKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwKSBfX2tzeW07XG4gdm9pZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JlZihzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyAqcCkgX19rc3ltO1xuIFxuIHZvaWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9tZW1fbGVuX3Bhc3MxKHZvaWQgKm1lbSwgaW50IGxlbikgX19rc3ltO1xuK19fdTY0IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdChfX3U2NCAqdmFsX19hcmVuYSkgX19rc3ltO1xuK19fdTY0IGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdChfX3U2NCAqdmFsX19hcmVuYV9udWxsYWJsZSkgX19rc3ltO1xuK19fdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdChfX3U2NCAqdmFsX19hcmVuYSkgX19rc3ltO1xuK19fdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdChfX3U2NCAqdmFsX19hcmVuYV9udWxsYWJsZSkgX19rc3ltO1xuK19fdTY0IGJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KF9fdTY0ICphX19hcmVuYSwgX191NjQgKmJfX2FyZW5hLFxuK1x0XHRcdFx0IF9fdTY0ICpjX19hcmVuYSwgX191NjQgKmRfX2FyZW5hLFxuK1x0XHRcdFx0IF9fdTY0ICplX19hcmVuYV9udWxsYWJsZSkgX19rc3ltO1xuK19fdTY0IGJwZl9rZnVuY19hcmVuYV9zdGFja19hcmdfdGVzdChfX3U2NCBhLCBfX3U2NCBiLCBfX3U2NCBjLCBfX3U2NCBkLCBfX3U2NCBlLFxuK1x0XHRcdFx0ICAgICBfX3U2NCAqZl9fYXJlbmEpIF9fa3N5bTtcbitfX3U2NCBicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdChfX3U2NCAqYV9fYXJlbmEsIF9fdTY0ICpiX19hcmVuYV9udWxsYWJsZSkgX19rc3ltO1xuIGludCAqYnBmX2tmdW5jX2NhbGxfdGVzdF9nZXRfcmR3cl9tZW0oc3RydWN0IHByb2dfdGVzdF9yZWZfa2Z1bmMgKnAsIGNvbnN0IGludCByZHdyX2J1Zl9zaXplKSBfX2tzeW07XG4gaW50ICpicGZfa2Z1bmNfY2FsbF90ZXN0X2dldF9yZG9ubHlfbWVtKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwLCBjb25zdCBpbnQgcmRvbmx5X2J1Zl9zaXplKSBfX2tzeW07XG4gaW50ICpicGZfa2Z1bmNfY2FsbF90ZXN0X2FjcV9yZG9ubHlfbWVtKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwLCBjb25zdCBpbnQgcmRvbmx5X2J1Zl9zaXplKSBfX2tzeW07XG5AQCAtMTExLDYgKzEyMSw5IEBAIHUzMiBicGZfa2Z1bmNfY2FsbF90ZXN0X3N0YXRpY191bnVzZWRfYXJnKHUzMiBhcmcsIHUzMiB1bnVzZWQpIF9fa3N5bTtcbiAjZW5kaWZcbiBcbiB2b2lkIGJwZl90ZXN0bW9kX3Rlc3RfbW9kX2tmdW5jKGludCBpKSBfX2tzeW07XG4raW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07XG4raW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKF9fdTY0ICpwdHJfX2FyZW5hX251bGxhYmxlKSBfX2tzeW07XG4raW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07XG4gXG4gX191NjQgYnBmX2tmdW5jX2NhbGxfdGVzdDEoc3RydWN0IHNvY2sgKnNrLCBfX3UzMiBhLCBfX3U2NCBiLFxuIFx0XHRcdFx0X191MzIgYywgX191NjQgZCkgX19rc3ltO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTY6MTM6MDkuMTM1OTQ0NDY0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxNjQ4MDE3NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIEFyZW5hIFBvaW50ZXIgSW1wbGVtZW50YXRpb24gLSBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgaW50cm9kdWNpbmcgYF9fYXJlbmFgIGFuZCBgX19hcmVuYV9udWxsYWJsZWAgYW5ub3RhdGlvbnMgZm9yIEJQRiBrZnVuYyBhbmQgc3RydWN0X29wcyBhcmd1bWVudHMuIFNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgaW1wYWN0aW5nIHRoZSBCUEYgdmVyaWZpZXIsIEpJVCBjb21waWxlciwgYW5kIHRyYW1wb2xpbmUgbG9naWMuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24sIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHNlY3VyaXR5IGltcGxpY2F0aW9ucy5cblxuVGhlIHBhdGNoIHRvdWNoZXMgYSBidW5jaCBvZiBmaWxlczogYERvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RgLCBzb21lIEpJVCBjb21waWxhdGlvbiBjb2RlIChgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCksIHZhcmlvdXMgaW5jbHVkZSBmaWxlcyAoYGluY2x1ZGUvbGludXgvYnBmLmhgLCBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGApLCBhbmQgYSBidW5jaCBvZiBjb3JlIEJQRiBjb2RlIChga2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jYCwgYGtlcm5lbC9icGYvYnRmLmNgLCBga2VybmVsL2JwZi9jb3JlLmNgLCBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgLCBga2VybmVsL2JwZi92ZXJpZmllci5jYCksIGFuZCBzb21lIHNlbGZ0ZXN0cy5cblxuQWxyaWdodCwgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBhcmVhcyBvZiBpbnRlcmVzdCwgdGhlIGZvY3VzIHN5bWJvbHMuIExvb2tzIGxpa2UgaXQncyBpbnRyb2R1Y2luZyB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zOiBgZW1pdF9rZnVuY19hcmVuYV9hcmdzYCwgYGVtaXRfYXJlbmFfYXJnX2NvbnZgLCBgc2F2ZV9hcmdzYCwgYW5kIG1vZGlmeWluZyBmdW5jdGlvbnMgbGlrZSBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYCwgYHByZXBhcmVfYXJnX2luZm9gLCBhcyB3ZWxsIGFzIGBidGZfY3R4X2FjY2Vzc2AsIGBfX2dldF9hcmdfZm1vZGVsX2ZsYWdzYCwgYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gLCBgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc2AsIGBicGZfdHJhbXBvbGluZV91cGRhdGVgLCBgZ2V0X2tmdW5jX2FyZ190eXBlYCwgYGNoZWNrX2tmdW5jX2FyZ3NgLCBhbmQgYGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkYC5cblxuSSBuZWVkIHRvIG5hcnJvdyB0aGlzIGRvd24gdG8gdGhlIG1vc3QgY3JpdGljYWwgc3ltYm9scy4gSSdtIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IHdpdGggYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCwgYGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NgLCBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYCwgYGJ0Zl9jdHhfYWNjZXNzYCwgYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gLCBgZ2V0X2tmdW5jX2FyZ190eXBlYCwgYGNoZWNrX2tmdW5jX2FyZ3NgLCBhbmQgYGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkYC4gTGV0IG1lIHJlLWV2YWx1YXRlLCBzaW5jZSBJIHN1c3BlY3Qgc29tZSBvZiB0aGUgZm9jdXMgc3ltYm9scyBhcmUgb25seSBjYWxsZWQgaW4gYSBuYXJyb3cgc2V0IG9mIGNpcmN1bXN0YW5jZXMsIHN1Y2ggYXMgd2hlbiBwcmVwYXJpbmcgYSB0cmFtcG9saW5lLCB3aGljaCBJIHRoaW5rIG1lYW5zIEkgY2FuIHB1c2ggYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCB0byB0aGUgbG93ZXIgcHJpb3JpdHkgbGlzdC5cblxuYGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NgLCBvbiB0aGUgb3RoZXIgaGFuZCwgc2VlbXMgbGlrZSBhIGdvb2QgdGFyZ2V0LiBgYnRmX2N0eF9hY2Nlc3NgLCBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2AsIGBnZXRfa2Z1bmNfYXJnX3R5cGVgLCBgY2hlY2tfa2Z1bmNfYXJnc2AsIGFuZCBgY2hlY2tfc3RydWN0X29wc19idGZfaWRgIGFyZSBhbGwgY2FsbGVkIGR1cmluZyB2ZXJpZmljYXRpb24sIHdoaWNoIG1lYW5zIHRoZXkncmUgYWxzbyBpbnRlcmVzdGluZy5cblxuTm93LCBiZWZvcmUgSSBkaWcgdG9vIGRlZXAsIGxldCdzIGNvbnNpZGVyIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gU2luY2UgdGhpcyBpcyBpbiB0aGUgQlBGIGNvcmUsIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgZ2l2ZW4uIEkgc2hvdWxkIHByb2JhYmx5IGdyZXAgZm9yIGFueSBleHBsaWNpdCBgQ09ORklHX0JQRl9BUkVOQWAgb3B0aW9ucyBvciBzaW1pbGFyLCBqdXN0IGluIGNhc2UgdGhlcmUncyBhIGNvbmZpZ3VyYXRpb24gZ2F0ZS4gSSB3aWxsIGNvbmZpcm0gdG8gYXZvaWQgd2FzdGluZyB0aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzA0OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE2OjEzOjIxLjMwMDc0OTIzNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTgyMzkyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfQlBGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz01OD1jb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy02NC1cXG5rZXJuZWwvYnBmL0tjb25maWc6NjU6XFx0ICBXaGVuIENPTkZJR19CUEZfSklUX0FMV0FZU19PTiBpcyBlbmFibGVkLCAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcXG5rZXJuZWwvYnBmL0tjb25maWctNjYtXFx0ICBpcyBwZXJtYW5lbnRseSBzZXQgdG8gMSBhbmQgc2V0dGluZyBhbnkgb3RoZXIgdmFsdWUgdGhhbiB0aGF0IHdpbGxcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9Mj1vYmoteSA6PSBjb3JlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM6aWZuZXEgKCQoQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGUtNC0jIF9fX2JwZl9wcm9nX3J1bigpIG5lZWRzIEdDU0UgZGlzYWJsZWQgb24geDg2OyBzZWUgMzE5M2MwODM2ZjIwMyBmb3IgZGV0YWlsc1xcbi0tXFxua2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gKz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXFxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNTpvYmotJHtDT05GSUdfQlBGX0xTTX1cXHQgICs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZGlzYXNtLm8gbXByb2cub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTktaWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYXJlbmEubyByYW5nZV90cmVlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZToyMjpvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gZGlzcGF0Y2hlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yMy1pZmVxICgkKENPTkZJR19ORVQpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRldm1hcC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNwdW1hcC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IG9mZmxvYWQub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBuZXRfbmFtZXNwYWNlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gdGN4Lm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTI5LWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZT0zMD1pZmVxICgkKENPTkZJR19QRVJGX0VWRU5UUykseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjMxOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3RhY2ttYXAub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMzItZW5kaWZcXG5rZXJuZWwvYnBmL01ha2VmaWxlPTMzPWlmZXEgKCQoQ09ORklHX0NHUk9VUFMpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNncm91cF9pdGVyLm8gYnBmX2NncnBfc3RvcmFnZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0zNS1lbmRpZlxcbi0tXFxua2VybmVsL2JwZi9NYWtlZmlsZT0zNz1pZmVxICgkKENPTkZJR19JTkVUKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6Mzg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSByZXVzZXBvcnRfYXJyYXkub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMzktZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9NDI9ZW5kaWZcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQzOmlmZXEgKCQoQ09ORklHX0JQRl9KSVQpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9zdHJ1Y3Rfb3BzLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3B1bWFzay5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS00Ni0jIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGUtNTUtIyBzZW1hbnRpY3Mgd2l0aGluIHBhaG9sZSBhcmUgcmV2aXNpdGVkIGFjY29yZGluZ2x5Llxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NTY6b2JqLSR7Q09ORklHX0JQRl9MU019ICs9IGJwZl9sc21fcHJvdG8ubyBicGZfbHNtLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTU3LWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZT01OD1pZm5lcSAoJChDT05GSUdfQ1JZUFRPKSwpXFxua2VybmVsL2JwZi9NYWtlZmlsZTo1OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNyeXB0by5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS02MC1lbmRpZlxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NjE6b2JqLSQoQ09ORklHX0JQRl9QUkVMT0FEKSArPSBwcmVsb2FkL1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNjItXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2MzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHJlbG9fY29yZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zl9pdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnRmX3JlbG9jYXRlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0ga21lbV9jYWNoZV9pdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTY3LWlmZXEgKCQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6Njg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkbWFidWZfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS02OS1lbmRpZlxcbi0tXFxua2VybmVsL2JwZi9idGYuYz05ODM0PWJvb2wgYnRmX3R5cGVfaWRzX25vY2FzdF9hbGlhcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy05ODg4LVxcbmtlcm5lbC9icGYvYnRmLmM6OTg4OTojaWZkZWYgQ09ORklHX0JQRl9KSVRcXG5rZXJuZWwvYnBmL2J0Zi5jLTk4OTAtc3RhdGljIGludFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz01Mj12b2lkIF9faW5pdCBjZ3JvdXBfYnBmX2xpZmV0aW1lX25vdGlmaWVyX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtNTctXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo1ODojaWZkZWYgQ09ORklHX0JQRl9MU01cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTU5LXN0cnVjdCBjZ3JvdXBfbHNtX2F0eXBlIHtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTYyPXVuc2lnbmVkIGludCBfX2Nncm91cF9icGZfcnVuX2xzbV9jdXJyZW50KGNvbnN0IHZvaWQgKmN0eCxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTgwLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTgxOiNpZmRlZiBDT05GSUdfQlBGX0xTTVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTgyLXN0YXRpYyBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGVcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MjM0PWJwZl9jZ3JvdXBfYXR5cGVfZmluZChlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSwgdTMyIGF0dGFjaF9idGZfaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTIzOS19XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNDA6I2VuZGlmIC8qIENPTkZJR19CUEZfTFNNICovXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNDEtXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0xMDA9c3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19hbGxvY19ub19zdGF0cyh1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX2V4dHJhX2ZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMTI4LVxcdGZwLVxcdTAwM2VqaXRfcmVxdWVzdGVkID0gZWJwZl9qaXRfZW5hYmxlZCgpO1xcbmtlcm5lbC9icGYvY29yZS5jOjEyOTpcXHRmcC1cXHUwMDNlaml0X3JlcXVpcmVkID0gSVNfRU5BQkxFRChDT05GSUdfQlBGX0pJVF9BTFdBWVNfT04pO1xcbmtlcm5lbC9icGYvY29yZS5jLTEzMC1cXHRmcC1cXHUwMDNlYmxpbmRpbmdfcmVxdWVzdGVkID0gYnBmX2ppdF9ibGluZGluZ19lbmFibGVkKGZwKTtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTE0My1cXG5rZXJuZWwvYnBmL2NvcmUuYzoxNDQ6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTE0NS1cXHRicGZfcHJvZ19zdHJlYW1faW5pdChmcCk7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz01NDE9dm9pZCBicGZfcHJvZ19rYWxsc3ltc19kZWxfYWxsKHN0cnVjdCBicGZfcHJvZyAqZnApXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy01NDYtXFxua2VybmVsL2JwZi9jb3JlLmM6NTQ3OiNpZmRlZiBDT05GSUdfQlBGX0pJVFxcbmtlcm5lbC9icGYvY29yZS5jLTU0OC0vKiBBbGwgQlBGIEpJVCBzeXNjdGwga25vYnMgaGVyZS4gKi9cXG5rZXJuZWwvYnBmL2NvcmUuYzo1NDk6aW50IGJwZl9qaXRfZW5hYmxlICAgX19yZWFkX21vc3RseSA9IElTX0JVSUxUSU4oQ09ORklHX0JQRl9KSVRfREVGQVVMVF9PTik7XFxua2VybmVsL2JwZi9jb3JlLmM6NTUwOmludCBicGZfaml0X2thbGxzeW1zIF9fcmVhZF9tb3N0bHkgPSBJU19CVUlMVElOKENPTkZJR19CUEZfSklUX0RFRkFVTFRfT04pO1xcbmtlcm5lbC9icGYvY29yZS5jLTU1MS1pbnQgYnBmX2ppdF9oYXJkZW4gICBfX3JlYWRfbW9zdGx5O1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MTY1NT11MTYgYnBmX291dF9zdGFja19hcmdfY250KGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTE2NjMtfVxcbmtlcm5lbC9icGYvY29yZS5jOjE2NjQ6I2VuZGlmIC8qIENPTkZJR19CUEZfSklUICovXFxua2VybmVsL2JwZi9jb3JlLmMtMTY2NS1cXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTE4MjM9Ym9vbCBicGZfb3Bjb2RlX2luX2luc250YWJsZSh1OCBjb2RlKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMTg0NS1cXG5rZXJuZWwvYnBmL2NvcmUuYzoxODQ2OiNpZm5kZWYgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OXFxua2VybmVsL2JwZi9jb3JlLmMtMTg0Ny0vKiBBYnNvbHV0ZSB2YWx1ZSBvZiBzMzIgd2l0aG91dCB1bmRlZmluZWQgYmVoYXZpb3IgZm9yIFMzMl9NSU4gKi9cXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTI0NzM9RVZBTDQoUFJPR19OQU1FX0xJU1QsIDQxNiwgNDQ4LCA0ODAsIDUxMilcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTI0NzYtXFxua2VybmVsL2JwZi9jb3JlLmM6MjQ3NzojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9jb3JlLmMtMjQ3OC1pbnQgYnBmX3BhdGNoX2NhbGxfYXJncyhzdHJ1Y3QgYnBmX2luc24gKmluc24sIHUzMiBzdGFja19kZXB0aClcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTI2MTA9c3RhdGljIGJvb2wgYnBmX3Byb2dfc2VsZWN0X2ludGVycHJldGVyKHN0cnVjdCBicGZfcHJvZyAqZnApXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjEyLVxcdGJvb2wgc2VsZWN0X2ludGVycHJldGVyID0gZmFsc2U7XFxua2VybmVsL2JwZi9jb3JlLmM6MjYxMzojaWZuZGVmIENPTkZJR19CUEZfSklUX0FMV0FZU19PTlxcbmtlcm5lbC9icGYvY29yZS5jLTI2MTQtXFx0dTMyIHN0YWNrX2RlcHRoID0gbWF4X3QodTMyLCBmcC1cXHUwMDNlYXV4LVxcdTAwM2VzdGFja19kZXB0aCwgMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yNjMzPXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjM0LXtcXG5rZXJuZWwvYnBmL2NvcmUuYzoyNjM1OiNpZmRlZiBDT05GSUdfQlBGX0pJVFxcbmtlcm5lbC9icGYvY29yZS5jLTI2MzYtXFx0c3RydWN0IGJwZl9wcm9nICpvcmlnX3Byb2c7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zMDU3PXZvaWQgX19icGZfZnJlZV91c2VkX2J0ZnMoc3RydWN0IGJ0Zl9tb2RfcGFpciAqdXNlZF9idGZzLCB1MzIgbGVuKVxcbmtlcm5lbC9icGYvY29yZS5jLTMwNTgte1xcbmtlcm5lbC9icGYvY29yZS5jOjMwNTk6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTMwNjAtXFx0c3RydWN0IGJ0Zl9tb2RfcGFpciAqYnRmX21vZDtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTMwNzg9c3RhdGljIHZvaWQgYnBmX3Byb2dfZnJlZV9kZWZlcnJlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDgzLVxcdGF1eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4LCB3b3JrKTtcXG5rZXJuZWwvYnBmL2NvcmUuYzozMDg0OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDg1LVxcdGJwZl9mcmVlX2tmdW5jX2J0Zl90YWIoYXV4LVxcdTAwM2VrZnVuY19idGZfdGFiKTtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTM0MDU9c3RhdGljIG5vaW5saW5lIHZvaWQgYnBmX3Byb2dfcmVwb3J0X21heV9nb3RvX3Zpb2xhdGlvbih2b2lkKVxcbmtlcm5lbC9icGYvY29yZS5jLTM0MDYte1xcbmtlcm5lbC9icGYvY29yZS5jOjM0MDc6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTM0MDgtXFx0c3RydWN0IGJwZl9zdHJlYW1fc3RhZ2Ugc3M7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zNDQ1PV9fd2VhayB1NjQgYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMzQ0OS1cXG5rZXJuZWwvYnBmL2NvcmUuYzozNDUwOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDUxLV9fd2VhayBib29sIGJwZl9hcmVuYV9oYW5kbGVfcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgaXNfd3JpdGUsXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zNDc2PUVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwoeGRwX2J1bGtfdHgpO1xcbmtlcm5lbC9icGYvY29yZS5jLTM0NzctXFxua2VybmVsL2JwZi9jb3JlLmM6MzQ3ODojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9jb3JlLmMtMzQ3OS1cXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MTI3PXN0YXRpYyBpbnQgYWRkX2tmdW5jX2luX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE0MS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE0MjojaWZuZGVmIENPTkZJR19CUEZfSklUX0FMV0FZU19PTlxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTQzLXN0YXRpYyBpbnQgZ2V0X2NhbGxlZV9zdGFja19kZXB0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz0xMzc2PWludCBicGZfZml4dXBfY2FsbF9hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi9maXh1cHMuYy0xMzc3LXtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjEzNzg6I2lmbmRlZiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEzNzktXFx0c3RydWN0IGJwZl9wcm9nICpwcm9nID0gZW52LVxcdTAwM2Vwcm9nO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNDA0LVxcdH1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE0MDU6I2lmbmRlZiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE0MDYtXFx0aWYgKHByb2ctXFx1MDAzZWppdF9yZXF1aXJlZCkge1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9Mjc2PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X2N1cnJlbnRfY29tbV9wcm90byA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI4My1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyODQ6I2lmIGRlZmluZWQoQ09ORklHX1FVRVVFRF9TUElOTE9DS1MpIHx8IGRlZmluZWQoQ09ORklHX0JQRl9BUkNIX1NQSU5MT0NLKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI4NS1cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTQ4NTA9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90aHJvdylcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODUxOiNpZmRlZiBDT05GSUdfQlBGX0VWRU5UU1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4NTItQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zZW5kX3NpZ25hbF90YXNrKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDkzMD1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2xvY2FsX2lycV9yZXN0b3JlKVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5MzE6I2lmZGVmIENPTkZJR19CUEZfRVZFTlRTXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDkzMi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3Byb2JlX3JlYWRfdXNlcl9keW5wdHIpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00OTYxPUJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RybmNhc2VzdHIpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5NjI6I2lmIGRlZmluZWQoQ09ORklHX0JQRl9MU00pIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0NHUk9VUFMpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk2My1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2Nncm91cF9yZWFkX3hhdHRyLCBLRl9SQ1UpXFxuLS1cXG5rZXJuZWwvYnBmL3ByZWxvYWQvTWFrZWZpbGU9Mz1MSUJCUEZfSU5DTFVERSA9ICQoc3JjdHJlZSkvdG9vbHMvbGliXFxua2VybmVsL2JwZi9wcmVsb2FkL01ha2VmaWxlLTQtXFxua2VybmVsL2JwZi9wcmVsb2FkL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0JQRl9QUkVMT0FEX1VNRCkgKz0gYnBmX3ByZWxvYWQub1xcbmtlcm5lbC9icGYvcHJlbG9hZC9NYWtlZmlsZS02LUNGTEFHU19icGZfcHJlbG9hZF9rZXJuLm8gKz0gLUkkKExJQkJQRl9JTkNMVURFKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9Njg9aW50IHN5c2N0bF91bnByaXZpbGVnZWRfYnBmX2Rpc2FibGVkIF9fcmVhZF9tb3N0bHkgPVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY5OlxcdElTX0JVSUxUSU4oQ09ORklHX0JQRl9VTlBSSVZfREVGQVVMVF9PRkYpID8gMiA6IDA7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNzAtXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02NTE4PWludCBrZXJuX3N5c19icGYoaW50IGNtZCwgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjUyMy1cXHRzd2l0Y2ggKGNtZCkge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY1MjQ6I2lmZGVmIENPTkZJR19CUEZfSklUIC8qIF9fYnBmX3Byb2dfZW50ZXJfc2xlZXBhYmxlIHVzZWQgYnkgdHJhbXBvbGluZSBhbmQgSklUICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjUyNS1cXHRjYXNlIEJQRl9QUk9HX1RFU1RfUlVOOlxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTA1ND1pbnQgYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTA2NS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDY2OiNpZiBkZWZpbmVkKENPTkZJR19DR1JPVVBfQlBGKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19CUEZfTFNNKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwNjctc3RhdGljIHZvaWQgYnBmX3NoaW1fdHJhbXBfbGlua19yZWxlYXNlKHN0cnVjdCBicGZfbGluayAqbGluaylcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1NDE9aW50IF9fd2VhayBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTQ4LSAgICBkZWZpbmVkKENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUykgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1NDk6ICAgIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NTAtXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzg2PWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE4MjMtXFx0ICBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxODI0OlxcdCAgQ09ORklHX0JQRl9TWVNDQUxMICovXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTgyNS1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00NDY0PUJURl9JRChzdHJ1Y3QsIGNncm91cClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDQ2NS0jZW5kaWZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDQ2NjojaWZkZWYgQ09ORklHX0JQRl9KSVRcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDQ2Ny1CVEZfSUQoc3RydWN0LCBicGZfY3B1bWFzaylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTI3Mj1CVEZfSURfVU5VU0VEXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjczLSNlbmRpZlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTI3NDojaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyNzUtQlRGX0lEKGZ1bmMsIGJwZl9zZXNzaW9uX2Nvb2tpZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTI4ND1CVEZfSUQoZnVuYywgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3kpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjg1OiNpZmRlZiBDT05GSUdfQlBGX0xTTVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTI4Ni1CVEZfSUQoZnVuYywgYnBmX3NldF9kZW50cnlfeGF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEzMDM9QlRGX0lEKGZ1bmMsIGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTMwNDojaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzMDUtQlRGX0lEKGZ1bmMsIGJwZl9zZXNzaW9uX2lzX3JldHVybilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTY6MTM6MjEuMzUyNTgwMDkxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIyNzUyODU1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBBcmVuYSBLRnVuYyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgX19hcmVuYWAgYW5kIGBfX2FyZW5hX251bGxhYmxlYCBzdXBwb3J0LCB3aGljaCBpcyBnb29kLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSB0ZXN0aW5nIHN0cmF0ZWd5IHRoZXkndmUgdXNlZC4gSSBzZWUgdGhlIHRlc3RzIGFyZSBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfa2Z1bmMuY2AsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9rZnVuY19qaXQuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNgLiBHb29kLCB0aGV5J3JlIGNvbXByZWhlbnNpdmUuIFRoZXkgYXJlIHJlbHlpbmcgb24gYGJwZl90ZXN0bW9kYCBhcyBleHBlY3RlZC5cblxuSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgYnVpbGQgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYWNlIHRvIHJ1biB0aGVzZSB0ZXN0cy4gSSBhbHJlYWR5IGtub3cgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfQlBGX0pJVGAgYXJlIHJlcXVpcmVkLiBJIHZhZ3VlbHkgcmVjYWxsIHRoZXJlIGJlaW5nIGVkZ2UgY2FzZXMgd2hlcmUgYENPTkZJR19CUEZfRVZFTlRTYCBtaWdodCBiZSBuZWVkZWQsIGJ1dCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0aGUgY3JpdGljYWwgb25lLiBJIG5lZWQgYENPTkZJR19CUEZfSklUYCBmb3IgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AsIHRoYXQncyBvYnZpb3VzLiBBbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgbmVlZGVkIGZvciBgYXJlbmEub2AuXG5cbk5vdywgSSBzaG91bGQgcXVpY2tseSBjaGVjayBpZiBgYnBmX3Rlc3Rtb2RgIGl0c2VsZiBoYXMgYW55IHNwZWNpZmljIGRlcGVuZGVuY2llcyBvciBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIHRyaXAgbWUgdXAuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgdG8gYmUgc3VyZS4gQnV0IHdhaXQsIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX0JQRl9KSVRgIHNlZW0gcHJldHR5IHN0YW5kYXJkOyBJJ2xsIGNoZWNrIGBrZXJuZWwvYnBmL0tjb25maWdgIGZvciB0aGUgc3BlY2lmaWMgb3B0aW9ucy4gTGV0J3MgbWFrZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTkzOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNjoxMzoyOC41ODAxMTE2ODVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwMzUxMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cXG5rZXJuZWwvYnBmL0tjb25maWc6NDI6Y29uZmlnIEJQRl9KSVRcXG5rZXJuZWwvYnBmL0tjb25maWctNDMtXFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNTctXFxua2VybmVsL2JwZi9LY29uZmlnOjU4OmNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxcbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cXHRib29sIFxcXCJQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxcbmtlcm5lbC9icGYvS2NvbmZpZy03MC1cXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNzItXFxua2VybmVsL2JwZi9LY29uZmlnOjczOmNvbmZpZyBCUEZfVU5QUklWX0RFRkFVTFRfT0ZGXFxua2VybmVsL2JwZi9LY29uZmlnLTc0LVxcdGJvb2wgXFxcIkRpc2FibGUgdW5wcml2aWxlZ2VkIEJQRiBieSBkZWZhdWx0XFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnPTkwPXNvdXJjZSBcXFwia2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTkxLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo5Mjpjb25maWcgQlBGX0xTTVxcbmtlcm5lbC9icGYvS2NvbmZpZy05My1cXHRib29sIFxcXCJFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE2OjEzOjI4LjYyOTE1MjczMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0OTQ2ODUxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGhhbmRmdWwgb2YgbmV3IGZ1bmN0aW9uczogYGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NgLCBgZW1pdF9rZnVuY19hcmVuYV9hcmdzYCwgYGVtaXRfYXJlbmFfYXJnX2NvbnZgLCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYCwgYW5kIGBfX2dldF9hcmdfZm1vZGVsX2ZsYWdzYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyB0aGVzZSBuZXcgY29tcG9uZW50cyBhcmUgaW50ZWdyYXRlZCwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBjb3JlIEJQRiBpbmZyYXN0cnVjdHVyZS4gVGhlIHByZXNlbmNlIG9mIGZ1bmN0aW9ucyBsaWtlIGBhcmVuYV9hcmdzYCBzdWdnZXN0cyBjaGFuZ2VzIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgSklUIGVudmlyb25tZW50LCB3aGljaCBpcyBhbHdheXMgaW50ZXJlc3RpbmcuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLCBzdGFydGluZyB3aXRoIHZlcmlmeWluZyB2aXNpYmlsaXR5IG9mIHRoZSBzeW1ib2xzLiBGaXJzdCwgbGV0J3MgY29uZmlybSB0aGUgbG9jYXRpb25zIG9mIHRoZSBcImZvY3VzIHN5bWJvbHNcIiB0aGUgcGF0Y2ggaGlnaGxpZ2h0czogYGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NgLCBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYCwgYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gLCBgYnRmX2N0eF9hY2Nlc3NgLCBgZ2V0X2tmdW5jX2FyZ190eXBlYCwgYGNoZWNrX2tmdW5jX2FyZ3NgLCBhbmQgYGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkYC5cblxuYGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQgZnJvbSBgaW5jbHVkZS9saW51eC9icGYuaGAgYW5kIGltcGxlbWVudGVkIGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgYW5kIHNvIGlzIG5vbiBzdGF0aWMsIHNvIHRoYXQncyBnb29kLiBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYCBpcyBhbHNvIHdpdGhpbiBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgLCBhcyBleHBlY3RlZC4gYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gIGFuZCBgYnRmX2N0eF9hY2Nlc3NgIGFyZSBsb2NhdGVkIGluIGBrZXJuZWwvYnBmL2J0Zi5jYC4gQW5kIGBnZXRfa2Z1bmNfYXJnX3R5cGVgIGFuZCBgY2hlY2tfa2Z1bmNfYXJnc2AgYXJlIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFuZCBgY2hlY2tfc3RydWN0X29wc19idGZfaWRgIGlzIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLlxuXG5BaGEhIGBnZXRfa2Z1bmNfYXJnX3R5cGVgIGFuZCBgY2hlY2tfa2Z1bmNfYXJnc2AgYXJlICpzdGF0aWMqIHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBjaGFuZ2VzIGludm9sdmluZyBmdW5jdGlvbnMgdGhhdCBkZWFsIHdpdGggdGhlIHZlcmlmaWVyLCBidXQgaXQncyBub3QgZXhwb3NpbmcgbmV3IGV4dGVybmFsbHkgY2FsbGFibGUgdmVyaWZpZXIgZnVuY3Rpb25zLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgdG8gc2VlIGhvdyB0aGlzIGFmZmVjdHMgZXh0ZXJuYWwga2Z1bmNzLiBUaW1lIHRvIGluc3BlY3QgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgZGlyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMDM4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE2OjEzOjM4LjEyMzg0MTcxN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA4NDAzNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X2tmdW5jX2FyZ190eXBlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEzOTY9c3RhdGljIGludFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTM5NzpnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM5OC1cXHRcXHQgICBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmdzLCBpbnQgYXJnLCBpbnQgbmFyZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE1MTE9c3RhdGljIGludCBnZW5fa2Z1bmNfYXJnX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTUzNy1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE1Mzg6XFx0XFx0YXJnX3R5cGUgPSBnZXRfa2Z1bmNfYXJnX3R5cGUoZW52LCBtZXRhLCBhcmdzLCBpLCBuYXJncyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNTM5LVxcdFxcdGlmIChhcmdfdHlwZSBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE2OjEzOjM4LjI0NDcwOTczWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUzMzI2NTEyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkNvbnNpZGVyaW5nIEZ1bmN0aW9uIEFyZ3VtZW50IFR5cGVzKipcblxuT2theSwgc28gYGdldF9rZnVuY19hcmdfdHlwZWAgaXMgZGVmaW5pdGVseSBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGNsZWFyLiBCdXQgbm93LCBJJ20gd29uZGVyaW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIGBjaGVja19rZnVuY19hcmdzYC4gSXMgKml0KiBzdGF0aWMgYXMgd2VsbD8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhhdCBmdW5jdGlvbiBzaGFyZXMgdGhlIHNhbWUgZGVzaWduIGNoYXJhY3RlcmlzdGljcyBvciBpZiB0aGVyZSBpcyBhIGRpZmZlcmVudCBhcHByb2FjaCBmb3IgdGhpcyBmdW5jdGlvbi4gSXMgdGhlcmUgc29tZXRoaW5nIHNwZWNpYWwgYWJvdXQgdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcyBvciB0aGUgd2F5IGl0IGlzIGNhbGxlZCB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBpdHMgc3RhdHVzPyBJIG11c3Qga25vdyB3aGV0aGVyIGl0IGlzIHN0YXRpYywgYW5kIGhvdyB0aGF0IHN0YXR1cyBtYXkgZWZmZWN0IG15IGRlc2lnbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMjI3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTY6MTM6NDMuNzc3OTc5ODM4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg1NTA4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19rZnVuY19hcmdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTIxMDE9c3RhdGljIGJvb2wgY2hlY2tfY3NzX3Rhc2tfaXRlcl9hbGxvd2xpc3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjExNi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIxMTc6c3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIxMTgtXFx0XFx0XFx0ICAgIGludCBpbnNuX2lkeClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzA3MD1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTU0LVxcdC8qIENoZWNrIHRoZSBhcmd1bWVudHMgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMxNTU6XFx0ZXJyID0gY2hlY2tfa2Z1bmNfYXJncyhlbnYsIFxcdTAwMjZtZXRhLCBpbnNuX2lkeCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTU2LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNDQwLVxcdFxcdGVsc2VcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM0NDE6XFx0XFx0XFx0Lyogc2NhbGFyLiBlbnN1cmVkIGJ5IGNoZWNrX2tmdW5jX2FyZ3MoKSAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzQ0Mi1cXHRcXHRcXHRtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVnbm8sIHQtXFx1MDAzZXNpemUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNjoxMzo0My44MjU4NDczNzVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5ODIxNjU1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBTdGF0aWMgTmF0dXJlIG9mIFRoaXMgU2l0dWF0aW9uKipcblxuSG1tLCBzbyBpdCdzIGluaGVyZW50bHkgc3RhdGljLiBUaGF04oCZcyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gVGhpcyBjb25zdHJhaW5zIGhvdyBJIGNhbiBhcHByb2FjaCB0aGUgcHJvYmxlbSwgcHJvYmFibHkgbmVjZXNzaXRhdGluZyBjb21waWxlLXRpbWUgYW5hbHlzaXMgb3IgYSB2ZXJ5IGNhcmVmdWwsIGltbXV0YWJsZSBkYXRhIHN0cnVjdHVyZSBkZXNpZ24uIFRoZSBsaW1pdGF0aW9ucyBvZiBzdGF0aWMgZW52aXJvbm1lbnRzIGFsd2F5cyBtYWtlIG1lIHRoaW5rIGFib3V0IHdvcmthcm91bmRzLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgYWN0dWFsIGNvbnN0cmFpbnRzIGZpcnN0LCBiZWZvcmUgZGV2aXNpbmcgc29sdXRpb25zLlxuXG5NeSBtaW5kIGp1bXBzIGltbWVkaWF0ZWx5IHRvIGEgZnVuY3Rpb24uLi4gd2hhdCBhYm91dCBgY2hlY2tfc3RydWN0X29wc19idGZfaWRgPyBJcyB0aGF0IHJlbGV2YW50IGhlcmU/IENvdWxkIHRoYXQgaG9sZCBzb21lIGluc2lnaHQgaW50byB0aGUgc3RhdGljIHN0cnVjdHVyZSBJJ20gZGVhbGluZyB3aXRoLCBwZXJoYXBzIHNvbWUgdHlwZSBJRCBvciBzb21ldGhpbmcgc2ltaWxhciB0aGF0IGhlbHBzIG1lIHRvIHdvcmsgd2l0aCBpdD8gR290dGEgZXhhbWluZSB0aGF0IGZ1bmN0aW9uJ3Mgc2lnbmF0dXJlIGFuZCBpbXBsZW1lbnRhdGlvbiBtb3JlIGNsb3NlbHkuIEkgd29uZGVyIGlmIGl0IGhhcyBkaXJlY3QgYXBwbGljYWJpbGl0eSwgb3IgaWYgaXRzIHByaW5jaXBsZXMgY2FuIGJlIGFkYXB0ZWQuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNzc5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTY6MTM6NDcuNTI0MDY2ODU4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzIyNTMwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTE4ODM1PWludCBicGZfcHJvZ19jdHhfYXJnX2luZm9faW5pdChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4NDMtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4ODQ0OnN0YXRpYyBpbnQgY2hlY2tfc3RydWN0X29wc19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4NDUte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NTgyPXN0YXRpYyBpbnQgY2hlY2tfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjA1LVxcdGlmIChwcm9nLVxcdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2MDY6XFx0XFx0cmV0dXJuIGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKGVudik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjA3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNjoxMzo0Ny41NzEyOTcxMjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU5MzgzMTQ0MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgZm9jdXNpbmcgb24gdGhlIGltcGxpZWQgcmVhc29uaW5nOlxuXG4qKkRpZ2dpbmcgaW50byBCVEYgRGlzdGlsbGF0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIHJldmlzaXRpbmcgdGhpcyBzdGF0aWMgYXNwZWN0IGFnYWluLiBIbW0sIGp1c3QgdG8gYmUgc3VyZS4uLiBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2AgZnVuY3Rpb24uIEkgaGF2ZSBhIGh1bmNoIGl0IG1pZ2h0IGJlIHJlbGV2YW50LCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIGFueSBvYnZpb3VzIGNvbm5lY3Rpb25zIGJldHdlZW4gdGhlIHN0YXRpYyBwcm9wZXJ0eSBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcy4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuLCBhbmQgSSB3YW50IHRvIGJlIGNlcnRhaW4gdGhlIGV4aXN0aW5nIGxvZ2ljIGlzIHRha2luZyB0aGUgc3RhdGljIHBhcnQgaW50byBhY2NvdW50IHByb3Blcmx5IHdpdGhpbiB0aGUgZGlzdGlsbGF0aW9uIHByb2Nlc3MsIGlmIGl0IG5lZWRzIHRvLiBJIHNob3VsZCBleGFtaW5lIGhvdyB0aGF0IGZ1bmN0aW9uIGhhbmRsZXMgc3RhdGljIGRlY2xhcmF0aW9ucyBvciByZWZlcmVuY2VzIGluIHByb3RvdHlwZXMuIEEgcXVpY2sgc2NhbiB3aWxsIGNvbmZpcm0gd2hldGhlciBJIG5lZWQgdG8gYWRqdXN0IG9yIGlmIGl0J3MgYWxyZWFkeSB3ZWxsIGhhbmRsZWQuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMyODcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNjoxNDowMy41MDk2MTQyNDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NjkyNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9idGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2J0Zi5jPTc1NDg9c3RhdGljIHU4IF9fZ2V0X2FyZ19mbW9kZWxfZmxhZ3MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03NTYzLVxcbmtlcm5lbC9icGYvYnRmLmM6NzU2NDppbnQgYnRmX2Rpc3RpbGxfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbmtlcm5lbC9icGYvYnRmLmMtNzU2NS1cXHRcXHRcXHQgICBzdHJ1Y3QgYnRmICpidGYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE2OjE0OjAzLjU1ODMxMzIwOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ0MTg2NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEVwaGVtZXJhbCBhbmQgQ29uc2lkZXJpbmcgQWNjZXNzIENvbnRleHQqKlxuXG5SaWdodCwgc28gdGhpcyBpc24ndCBhIHN0YXRpYyBzaXR1YXRpb24uIFRoYXQncyB0aGUgY29yZSBhc3N1bXB0aW9uIEknbSB3b3JraW5nIGZyb20uIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGJlIHRoaW5raW5nIGFib3V0IGhvdyB0aGluZ3MgY2hhbmdlLCBldm9sdmUsIGFuZCBwb3RlbnRpYWxseSBkZWNheSBvdmVyIHRpbWUuIFRoZSBpbXBsaWNhdGlvbnMgb2YgJ25vbi1zdGF0aWMnIGFyZSBnb2luZyB0byBjYXNjYWRlIHRocm91Z2ggdGhlIHJlc3Qgb2YgbXkgYW5hbHlzaXMuIFRoZSBjaGFsbGVuZ2UgdGhlbiBiZWNvbWVzIGlkZW50aWZ5aW5nIHRoZSBjaGFuZ2luZyB2YXJpYWJsZXMgYW5kIG1ha2luZyBzdXJlIEkgYWNjb3VudCBmb3IgdGhlIGltcGFjdCBvZiB0aG9zZSB2YXJpYWJsZXMuXG5cbkFuZCB3aXRoIHRoYXQgc2FpZCwgbXkgbmV4dCB0aG91Z2h0IGlzLCB3aGF0IGFib3V0IGFjY2VzcyBjb250ZXh0PyBTcGVjaWZpY2FsbHksIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IGBidGZfY3R4X2FjY2Vzc2AuIFRoaXMgZnVuY3Rpb24sIG9yIHN0cnVjdHVyZSwgd2hhdGV2ZXIgaXQgaXMsIGlzIGdvaW5nIHRvIGJlIGNlbnRyYWwgdG8gaG93IEkgc2hvdWxkIHByb2NlZWQuIEdpdmVuIHRoZSBmYWN0IHRoYXQgdGhlIHN1YmplY3QgaXMgbm9uLXN0YXRpYywgYGJ0Zl9jdHhfYWNjZXNzYCBpcyBsaWtlbHkgdG8gYmUgYSBmYWN0b3IgdGhhdCBpcyBkeW5hbWljIGFzIHdlbGwuIEFyZSB0aGVyZSBpbmhlcmVudCByaXNrcyB0aGF0IGFyZSBvbmx5IHJldmVhbGVkIGluIGEgc3BlY2lmaWMgY29udGV4dD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBkeW5hbWljIGxhbmRzY2FwZSwgYW5kIGhvdyB0aGF0IGNvbnRleHQgYWZmZWN0cyB3aGF0IEkgbmVlZCB0byBkby4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIG51YW5jZXMuIEl0cyBpbXBsaWNhdGlvbnMuIE15IG5leHQgc3RlcHMgYXJlIHRvIHJldmlldyB0aGlzIGZ1bmN0aW9uL3N0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM2NTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNjoxNDowNy44MDI1MDMyODhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NTk4NDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ0Zl9jdHhfYWNjZXNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvYnRmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9idGYuYz02NjU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3Jhd190cF9udWxsX2FyZ3MgcmF3X3RwX251bGxfYXJnc1tdID0ge1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy02ODQ5LVxcbmtlcm5lbC9icGYvYnRmLmM6Njg1MDpib29sIGJ0Zl9jdHhfYWNjZXNzKGludCBvZmYsIGludCBzaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbmtlcm5lbC9icGYvYnRmLmMtNjg1MS1cXHRcXHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03MTAzLX1cXG5rZXJuZWwvYnBmL2J0Zi5jOjcxMDQ6RVhQT1JUX1NZTUJPTF9HUEwoYnRmX2N0eF9hY2Nlc3MpO1xcbmtlcm5lbC9icGYvYnRmLmMtNzEwNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTY6MTQ6MDcuODU3MTExODg0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxODE2MjIyODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgRHluYW1pYyBMYW5kc2NhcGUgb2YgZUJQRioqXG5cbkhtbSwgdGhpcyBpcyBkZWZpbml0ZWx5IG5vdCBhIHN0YXRpYyBzaXR1YXRpb24gd2UncmUgZGVhbGluZyB3aXRoLiBUaGUgd2hvbGUgbmF0dXJlIG9mIHRoaXMgZmVlbHMgaW5oZXJlbnRseSBkeW5hbWljIGFuZCBldmVyLWV2b2x2aW5nLiBNeSBwcmltYXJ5IGZvY3VzIGlzIG9uIHRoZSBpbXBhY3Qgb2YgY2hhbmdlcy5cblxuT2theSwgbGV0J3Mgem9vbSBpbiBhIGxpdHRsZSBiaXQsIHdoYXQgYWJvdXQgdGhhdCBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYCBmdW5jdGlvbj8gVGhhdCdzIHRoZSBrZXkgdmFyaWFibGUgdG8gdXBkYXRlLCBpc24ndCBpdD8gSXQgaGFzIGFsbCB0aGUgaW1wYWN0IG9uIGhvdyBldmVyeXRoaW5nIGVsc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDE2NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE2OjE0OjEyLjAzODczNzg4N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3Njg5NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYW1wb2xpbmVfdXBkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTYyPXN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMge1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNjktI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcwOnN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzEtXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgKm9wcywgdm9pZCAqZGF0YSk7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05OD1zdGF0aWMgaW50IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmMoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgbG9uZyBpcCxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1Ni1cXHRcXHQgICAgISh0ci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9PUklHX1NUQUNLKSlcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTc6XFx0XFx0XFx0cmV0ID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHRyLCBmYWxzZSAvKiBsb2NrX2RpcmVjdF9tdXRleCAqLyxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjMtXFx0XFx0aWYgKHRyLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX09SSUdfU1RBQ0spXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY0OlxcdFxcdFxcdHJldCA9IGJwZl90cmFtcG9saW5lX3VwZGF0ZSh0ciwgZmFsc2UgLyogbG9ja19kaXJlY3RfbXV0ZXggKi8sXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MzczPXN0YXRpYyBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKmJwZl90cmFtcG9saW5lX2xvb2t1cCh1NjQga2V5LCB1bnNpZ25lZCBsb25nIGlwKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDEwLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjQxMTpzdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZV9mZW50cnkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIG9yaWdfZmxhZ3MsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDEyLVxcdFxcdFxcdFxcdFxcdHZvaWQgKm9sZF9hZGRyLCB2b2lkICpuZXdfYWRkcilcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTQzMj1zdGF0aWMgaW50IHVucmVnaXN0ZXJfZmVudHJ5KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCB2b2lkICpkYXRhIF9fbWF5YmVfdW51c2VkKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDM5LVxcdGVsc2VcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo0NDA6XFx0XFx0cmV0ID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlX2ZlbnRyeSh0ciwgb3JpZ19mbGFncywgb2xkX2FkZHIsIE5VTEwpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ0MS1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTQ1MD1zdGF0aWMgaW50IG1vZGlmeV9mZW50cnkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIG9yaWdfZmxhZ3MsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDU5LVxcdH0gZWxzZSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NDYwOlxcdFxcdHJldCA9IGJwZl90cmFtcG9saW5lX3VwZGF0ZV9mZW50cnkodHIsIG9yaWdfZmxhZ3MsIG9sZF9hZGRyLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ2MS1cXHRcXHRcXHRcXHRcXHRcXHQgICBuZXdfYWRkcik7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz00NzM9c3RhdGljIGludCByZWdpc3Rlcl9mZW50cnkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00OTAtXFx0fSBlbHNlIHtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo0OTE6XFx0XFx0cmV0ID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlX2ZlbnRyeSh0ciwgMCwgTlVMTCwgbmV3X2FkZHIpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ5Mi1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz03MjA9dm9pZCBicGZfdHJhbXBvbGluZV9zZXRfZmxhZ3Moc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzI2LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcyNzpzdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dGV4LFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcyOC1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyAqb3BzLCB2b2lkICpkYXRhKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTc2PXN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTAxMC1cXHRcXHRyZXR1cm4gZXJyO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwMTE6XFx0ZXJyID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHRyLCB0cnVlIC8qIGxvY2tfZGlyZWN0X211dGV4ICovLCBvcHMsIGRhdGEpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMTItXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTEwMjk9c3RhdGljIGludCBfX2JwZl90cmFtcG9saW5lX3VubGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwNDktXFx0YnBmX3RyYW1wb2xpbmVfcmVtb3ZlX3Byb2codHIsIG5vZGUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwNTA6XFx0cmV0dXJuIGJwZl90cmFtcG9saW5lX3VwZGF0ZSh0ciwgdHJ1ZSAvKiBsb2NrX2RpcmVjdF9tdXRleCAqLywgb3BzLCBkYXRhKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMDUxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTY6MTQ6MTIuMDg2NTEzOTczWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NTUwNjIyMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYCoqXG5cbk9rYXksIHNvIGBicGZfdHJhbXBvbGluZV91cGRhdGVgIGlzIHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZWQgbXkgaW50ZXJlc3QuIEdpdmVuIHRoZSBjb250ZXh0LCBteSBtaW5kIGlzIGFscmVhZHkgcnVubmluZyB0aHJvdWdoIGltcGxpY2F0aW9ucyBmb3IgbGlua2VyIHZpc2liaWxpdHksIHN5bWJvbCBzY29waW5nLCBhbmQgcG90ZW50aWFsIGlubGluaW5nIGJlaGF2aW91ciB3aXRoaW4gdGhlIGtlcm5lbCdzIEJQRiBpbmZyYXN0cnVjdHVyZS4gSXQncyBhIGtleSBvYnNlcnZhdGlvbiwgYnV0IGl0J3Mgbm90IHRoZSBmdWxsIHBpY3R1cmUuXG5cblRvIHVuZGVyc3RhbmQgdGhlIHByYWN0aWNhbCBpbXBhY3Qgb2YgdGhpcyBkZWNsYXJhdGlvbiBhbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyB1c2VkLCBJIHNob3VsZCBub3cgbW92ZSBpbnRvIGBicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzYC4gSSBoYXZlIGEgZmVlbGluZyB0aGF0IGZ1bmN0aW9uIHdpbGwgcHJvdmlkZSBzb21lIGltcG9ydGFudCBpbnNpZ2h0IGhlcmUuIEkgZXhwZWN0IGl0IGlzIHJlbGF0ZWQuIEZyb20gdGhlcmUsIEkgd2lsbCBiZSBhYmxlIHRvIGZvcm0gYSBtb3JlIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBzZWN0aW9uIG9mIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NjIxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTY6MTQ6MTYuMDQxNTc4ODFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjA5Nzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmM9NTMyPXN0YXRpYyBib29sIGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTU0OC0gKi9cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo1NDk6Ym9vbCBicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzKHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcywgdTMyIGZsYWdzLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTU1MC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBicGZfdHJhbXBfYXJlbmFfYXJncyAqYWFyZ3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE2OjE0OjE2LjA4ODc5NDUwN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQ4MzUwMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkFuYWx5emluZyBgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc2AgYW5kIFRyYW1wb2xpbmUgUHJlcGFyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc2AgaXMgaW5kZWVkICpub3QqIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gTm93LCB0aGF0J3MgY3J1Y2lhbCBiZWNhdXNlIGl0IGFmZmVjdHMgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgcG9zc2libGUgc2NvcGUgb2YgaXRzIHVzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgaXQncyBjYWxsZWQgYW5kIGhvdyBpdCdzIGJlaW5nIGFjY2Vzc2VkIHdpdGhpbiB0aGUgYnJvYWRlciBCUEYgY29udGV4dC5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBpbnRvIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAuIFRoYXQgZnVuY3Rpb24gaXMgcHJvYmFibHkgd2hlcmUgYSBsb3Qgb2YgdGhlIG1hZ2ljIGlzIGhhcHBlbmluZyByZWdhcmRpbmcgdGhlIHNldHVwIGFuZCBwcmVwYXJhdGlvbiBvZiB0aGVzZSBCUEYgdHJhbXBvbGluZXMsIGFuZCB3aGVyZSBgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc2AgbGlrZWx5IHBsYXlzIGEgc2lnbmlmaWNhbnQgcm9sZSwgcGVyaGFwcyBldmVuIGJlaW5nIGNhbGxlZCBkaXJlY3RseSBhcyBwYXJ0IG9mIHRoYXQgcHJlcGFyYXRpb24gcHJvY2Vzcy4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28gaXMgY3JpdGljYWwgZm9yIGZpZ3VyaW5nIG91dCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgQlBGIHRyYW1wb2xpbmVzIGFyZSBzdHJ1Y3R1cmVkIGFuZCBoYW5kbGVkLiBLbm93aW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2lsbCBpbW1lZGlhdGVseSB0ZWxsIG1lIHNvbWV0aGluZyB2ZXJ5IGludGVyZXN0aW5nIGFib3V0IHRoZSBvdmVyYWxsIGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYwMDgsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNjoxNDoyMC4xMzcxNDk2NjhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDcwNjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzMzNT1zdGF0aWMgaW50IGludm9rZV9icGZfbW9kX3JldChjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHByb2csXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzQzNi0gKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzQzNzpzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbWFnZSxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzQzOC1cXHRcXHRcXHRcXHRcXHQgdm9pZCAqcndfaW1hZ2VfZW5kLCB2b2lkICppbWFnZSxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNzYyPWludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKmltYWdlLCB2b2lkICppbWFnZV9lbmQsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzc3Ny1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6Mzc3ODpcXHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShpbSwgcndfaW1hZ2UsIHJ3X2ltYWdlICsgc2l6ZSwgaW1hZ2UsIG0sXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3NzktXFx0XFx0XFx0XFx0XFx0ICAgIGZsYWdzLCB0bm9kZXMsIGZ1bmNfYWRkcik7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mzc5MT1pbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3OTctXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM3OTg6XFx0LyogQWxsb2NhdGUgYSB0ZW1wb3JhcnkgYnVmZmVyIGZvciBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSgpLlxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzk5LVxcdCAqXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzgwNy1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzgwODpcXHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShcXHUwMDI2aW0sIGltYWdlLCBpbWFnZSArIFBBR0VfU0laRSwgaW1hZ2UsXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM4MDktXFx0XFx0XFx0XFx0XFx0ICAgIG0sIGZsYWdzLCB0bm9kZXMsIGZ1bmNfYWRkcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE2OjE0OjIwLjE4NzY1Nzc4NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDA3Nzk0OTAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipUcmFtcG9saW5lIEZ1bmN0aW9ucyBhbmQgQXJlbmEgQXJndW1lbnQgU3VwcG9ydCBpbiBCUEYgSklUKipcblxuUmlnaHQsIHNvIEknbSBzZWVpbmcgYSBkaXN0aW5jdGlvbiBoZXJlLiBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGxpa2VseSBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gd2l0aGluIGEgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdCDigJMgbGlrZWx5IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB0byBwcmV2ZW50IGV4dGVybmFsIGxpbmthZ2UuIE9uIHRoZSBvdGhlciBoYW5kLCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBpcyAqbm90KiBgc3RhdGljYC4gVGhpcyBpbXBsaWVzIGl0J3MgaW50ZW5kZWQgZm9yIGV4dGVybmFsIHVzZSwgcHJvYmFibHkgYXMgcGFydCBvZiB0aGUgcHVibGljIEJQRiBKSVQgQVBJIG9uIHRoZSBhcmNoaXRlY3R1cmUgaW4gcXVlc3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYW5kIGZ1bmN0aW9uIG9mIHRoZXNlIHR3by4gSSBpbWFnaW5lIHRoZSBub24tc3RhdGljIGZ1bmN0aW9uIHdpbGwgYmUgdGhlIGVudHJ5IHBvaW50IGV4cG9zZWQgdG8gdGhlIGhpZ2hlci1sZXZlbCBCUEYgc3Vic3lzdGVtLiBUaGUgc3RhdGljIG9uZSwgbGlrZWx5IHVzZWQgaW50ZXJuYWxseSBieSBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCwgZG9lcyB0aGUgaGVhdnkgbGlmdGluZy4gSSBzaG91bGQgZXhwbG9yZSB0aGUgaW1wbGVtZW50YXRpb25zIHRvIGNvbmZpcm0gdGhpcy5cblxuTm93LCBsZXQncyBwaXZvdC4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLiBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiwgb3IgdmFyaWFibGUsIHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIGRldGVybWluaW5nIHdoZXRoZXIgb3Igbm90IHRoZSBhcmNoaXRlY3R1cmUncyBKSVQgY29tcGlsZXIgaGFzIHRoZSBuZWNlc3NhcnkgY2FwYWJpbGl0aWVzIGZvciBcImFyZW5hIGFyZ3VtZW50c1wiLiBJJ20gbWFraW5nIGFuIGFzc3VtcHRpb24gdGhhdCB0aGUgYGFyZW5hYCBpcyByZWxhdGVkIHRvIGhvdyBCUEYgcHJvZ3JhbXMgcGFzcyBhcmd1bWVudHMsIG9yIG1hbmFnZSBpbnRlcm1lZGlhdGUgc3RhdGUuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIG1lbW9yeSBtYW5hZ2VtZW50IHNwZWNpZmljIHRvIEpJVC1jb21waWxlZCBCUEYgY29kZS4gVGhlIGZ1bmN0aW9uIG5hbWUgaW1wbGllcyBzb21lIHJ1bnRpbWUgY2hlY2ssIG9yIHBvc3NpYmx5IGEgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIGZsYWcsIHRvIGluZGljYXRlIGlmIHRoaXMgc3VwcG9ydCBpcyBhdmFpbGFibGUuIEkgc2hvdWxkIGV4YW1pbmUgdGhlIGRlZmluaXRpb24gYW5kIHVzZXMgb2YgdGhpcyBmbGFnLCBvciBmdW5jdGlvbiwgdG8gZGV0ZXJtaW5lIHByZWNpc2VseSB3aGF0J3Mgc3VwcG9ydGVkIGFuZCB3aHkuIEknZCBiZSBsb29raW5nIGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBwYXRocywgY2hlY2tzIGZvciBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBvciBtYXliZSBldmVuIGNoZWNrcyBmb3Igc3BlY2lmaWMga2VybmVsIHZlcnNpb25zLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBlbGVtZW50cyBjb21iaW5lIGFuZCBpbmZsdWVuY2UgdGhlIEJQRiBKSVQncyBjb2RlIGdlbmVyYXRpb24gcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY5MzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNjoxNDo1MC4yNjU2MTEwNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2MzY3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY29yZS5jPTMzMDY9Ym9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzEwLVxcbmtlcm5lbC9icGYvY29yZS5jOjMzMTE6Ym9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpXFxua2VybmVsL2JwZi9jb3JlLmMtMzMxMi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE2OjE0OjUwLjMxNDI1MzgzN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTc5MTk1MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgV2Vha25lc3MgYW5kIElkZW50aWZ5aW5nIHRoZSBUYXJnZXQqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IGZsYWdzIHRoaXMgYXMgYSBub24tc3RhdGljLCBvciBcIndlYWtcIiBwb2ludC4gVGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBteSBpbnRlcm5hbCByYWRhcjsgd2UgbmVlZCB0byBkaWcgZGVlcGVyLiBNeSBmb2N1cyBzaGlmdHMgdG8gdGhlIHN1c3BlY3RlZCBhcmVhLiBMZXQncyBzdGFydCBieSBzY3J1dGluaXppbmcgYGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hYC4gVGhpcyBjb3VsZCBiZSB0aGUgbGluY2hwaW4sIGFuZCB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHNvbWUgaW52ZXN0aWdhdGlvbi4gVGltZSB0byBnbyBodW50aW5nIGZvciBzb21ldGhpbmcgaW50ZXJlc3RpbmcgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NTQ0LCJPdXRwdXRUb2tlbnMiOjU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTY6MTQ6NTQuMjkzNDUyNTEyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTM1NDg0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM9NDM2PV9fYnBmX2tmdW5jIHZvaWQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMih2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYy00NDAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYzo0NDE6X19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKHU2NCAqcHRyX19hcmVuYSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jLTQ0Mi17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jLTQ0NS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jOjQ0NjpfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUodTY0ICpwdHJfX2FyZW5hX251bGxhYmxlKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMtNDQ3LXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMtNDUwLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM6NDUxOl9fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayh1NjQgKnB0cl9fYXJlbmEpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYy00NTIte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYz04NjQ9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYzo4NjU6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM6ODY2OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jOjg2NzpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2spXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYy04NjgtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19nZXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTY6MTQ6NTQuMzQyODEyODU5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNDgyMzM4OTcwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBCUEYgQXJlbmEgUG9pbnRlciBTdXBwb3J0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGNoYW5nZXMgcmVsYXRlZCB0byBCUEYga2Z1bmNzIGFuZCBgc3RydWN0X29wc2AgYXJndW1lbnRzLCBzcGVjaWZpY2FsbHkgdGhlIGludHJvZHVjdGlvbiBvZiBgX19hcmVuYWAgYW5kIGBfX2FyZW5hX251bGxhYmxlYCBhbm5vdGF0aW9ucy4gTXkgaW5pdGlhbCBzY2FuIGZvY3VzZWQgb24gZnVuY3Rpb25zIGluIGB0ZXN0X2ttb2RzYCwgYnV0IHRoYXQncyBhIHJlZCBoZXJyaW5nLiBXZSBuZWVkIHRvIGxvb2sgYXQgd2hhdCdzIGFjdHVhbGx5ICppbnRlZ3JhdGVkKiBpbnRvIHRoZSBrZXJuZWwncyBCUEYgY29yZSBsb2dpYy5cblxuSSBpbW1lZGlhdGVseSBob25lZCBpbiBvbiBgYnRmX2N0eF9hY2Nlc3NgIGFuZCBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2AsIGJvdGggb2Ygd2hpY2ggYXJlIG5vbi1zdGF0aWMgYW5kIHBhcnQgb2YgdGhlIGNvcmUgQlBGIGNvZGUuICBgYnRmX2N0eF9hY2Nlc3NgIGlzIGNydWNpYWwgYmVjYXVzZSBpdCBnb3Zlcm5zIGNvbnRleHQgYWNjZXNzIGNoZWNrcyBmb3IgdHJhY2luZyBhbmQgYHN0cnVjdF9vcHNgIHByb2dyYW1zLiAgYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gIGlzIGVzc2VudGlhbCBmb3IgZGlzdGlsbGluZyBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciB0cmFtcG9saW5lIG9wZXJhdGlvbnMuXG5cblRoZW4gSSBjb25zaWRlcmVkIG90aGVyIHBvc3NpYmxlIGNhbmRpZGF0ZXMuIGBicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzYCBzZWVtcyBwcm9taXNpbmcsIGFzIGRvZXMgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AsIGJ1dCB0aGUgbGF0dGVyJ3MganVzdCBhIGJvb2xlYW4gY2hlY2ssIHdoaWNoIGlzbid0IGFzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc2AgYW5kIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYCBhbmQgYGJ0Zl9jdHhfYWNjZXNzYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMuXG5cbkkgZGlkIGEgZGVlcCBkaXZlIHRvIGVuc3VyZSBJIHdhc24ndCBtaXNzaW5nIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gQlBGLiBJIGxvb2tlZCBpbnRvIGBicGZfcHJvZ19jdHhfYXJnX2luZm9faW5pdGAsIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLCBgYnBmX3N0cnVjdF9vcHNfaW1hZ2VfZnJlZWAsIGBwcmVwYXJlX2FyZ19pbmZvYCwgYGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkYCwgYGNoZWNrX2tmdW5jX2FyZ3NgLCBhbmQgYGdldF9rZnVuY19hcmdfdHlwZWAuICBJIHdhcyBjYXJlZnVsIHRvIG1ha2Ugc3VyZSBJIHdhc24ndCBzZWxlY3Rpbmcgc3RhdGljIGZ1bmN0aW9ucywgc3VjaCBhcyBgcHJlcGFyZV9hcmdfaW5mb2AsIGBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZGAsIGBjaGVja19rZnVuY19hcmdzYCwgYW5kIGBnZXRfa2Z1bmNfYXJnX3R5cGVgLlxuXG5TbywgdGhlIGRlZmluaXRpdmUgbGlzdCBvZiAqbW9kaWZpZWQqIG9yICphZGRlZCogbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlOlxuXG4qICAgYGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3NgXG4qICAgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2BcbiogICBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2BcbiogICBgYnRmX2N0eF9hY2Nlc3NgXG5cbkxldCdzIGRvdWJsZS1jaGVjayBgYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc2AuIEl04oCZcyBhZGRlZCBpbiBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgIGFuZCBpcyBjYWxsZWQgZnJvbSBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiAgVGhpcyByZWluZm9yY2VzIGl0cyBpbXBvcnRhbmNlIGluIHRoZSB0cmFtcG9saW5lIGxvZ2ljLiAgVGhlIGNoYW5nZXMgdG8gYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gIGFuZCBgYnRmX2N0eF9hY2Nlc3NgIGFyZSBsb2NhdGVkIGluIGBrZXJuZWwvYnBmL2J0Zi5jYC5cblxuSSByZXZpZXdlZCB0aGUgb3RoZXIgZmlsZXMgaW4gdGhlIGtlcm5lbC4gSW4gYGtlcm5lbC9icGYvY29yZS5jYCwgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AgaXMgYWRkZWQuIEluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYCBpcyBhZGRlZCBhZ2Fpbi5cblxuTXkgZm9jdXMgbmFycm93cyB0byB0aGVzZSBjb3JlIGZ1bmN0aW9uczpcblxuKiAgIGBicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzYFxuKiAgIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYFxuKiAgIGBidGZfY3R4X2FjY2Vzc2BcblxuTm93LCByZWdhcmRpbmcgY29uZmlndXJhdGlvbnMsIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYCBhcmUgb2J2aW91c2x5IGNyaXRpY2FsLiBUaGUgdHJhbXBvbGluZXMgYXJlIHBhcnQgb2YgdGhlIEpJVCwgc28gd2UgbmVlZCBib3RoLiAgSSBjb25maXJtZWQgdGhhdCBgQlBGX0pJVF9BTFdBWVNfT05gIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeS4gYEJQRl9FVkVOVFNgIGlzbid0IHJlcXVpcmVkIGhlcmUgZWl0aGVyLlxuXG5MZXQncyBxdWlja2x5IHZlcmlmeSB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMuIGBicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzYCBpcyBkZWZpbmVkIGFzOlxuXG5gYGBjXG5ib29sIGJwZl90cmFtcF9jb2xsZWN0X2FyZW5hX2FyZ3Moc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB1MzIgZmxhZ3MsXG5cdFx0XHRcdCAgc3RydWN0IGJwZl90cmFtcF9hcmVuYV9hcmdzICphYXJncylcbmBgYFxuXG5JdCBpcyBleHBvcnRlZCBpbiBgaW5jbHVkZS9saW51eC9icGYuaGAuXG5cbmBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYCBpcyBkZWZpbmVkIGFzOlxuXG5gYGBjXG5pbnQgYnRmX2Rpc3RpbGxfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuXHRcdFx0ICAgc3RydWN0IGJ0ZiAqYnRmLFxuXHRcdFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICpmdW5jLFxuXHRcdFx0ICAgY29uc3QgY2hhciAqZnVuY19uYW1lLFxuXHRcdFx0ICAgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptKVxuYGBgXG5cbmBidGZcblxuIiwiSW5wdXRUb2tlbnMiOjM4NDUwLCJPdXRwdXRUb2tlbnMiOjE2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTY6MTY6NTkuMTY2MjA2MTg2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODExNDYxNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3RyYW1wX2NvbGxlY3RfYXJlbmFfYXJnc1wiLFxuICAgIFwiYnRmX2Rpc3RpbGxfZnVuY19wcm90b1wiLFxuICAgIFwiYnRmX2N0eF9hY2Nlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBfX2FyZW5hYCBhbmQgYF9fYXJlbmFfbnVsbGFibGVgIGFubm90YXRpb25zIGZvciBCUEYga2Z1bmNzIGFuZCBzdHJ1Y3Rfb3BzIGFyZ3VtZW50cy4gSXQgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciwgSklUIGNvbXBpbGVyICh4ODYpLCBhbmQgdHJhbXBvbGluZSBsb2dpYyB0byBzdXBwb3J0IGFyZW5hIHBvaW50ZXJzLCBpbmNsdWRpbmcgcmViYXNpbmcgdGhlbSB0byBrZXJuZWwgYWRkcmVzc2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbWVtb3J5IHNhZmV0eSBhbmQgY29ycmVjdCB2ZXJpZmljYXRpb24gb2YgYXJlbmEgcG9pbnRlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfdHJhbXBfY29sbGVjdF9hcmVuYV9hcmdzXCIsXG4gICAgXCJidGZfZGlzdGlsbF9mdW5jX3Byb3RvXCIsXG4gICAgXCJidGZfY3R4X2FjY2Vzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYF9fYXJlbmFgIGFuZCBgX19hcmVuYV9udWxsYWJsZWAgYW5ub3RhdGlvbnMgZm9yIEJQRiBrZnVuY3MgYW5kIHN0cnVjdF9vcHMgYXJndW1lbnRzLiBJdCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyLCBKSVQgY29tcGlsZXIgKHg4NiksIGFuZCB0cmFtcG9saW5lIGxvZ2ljIHRvIHN1cHBvcnQgYXJlbmEgcG9pbnRlcnMsIGluY2x1ZGluZyByZWJhc2luZyB0aGVtIHRvIGtlcm5lbCBhZGRyZXNzZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0IHZlcmlmaWNhdGlvbiBvZiBhcmVuYSBwb2ludGVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowj7r74[1] Phase: Succeeded StartedAt: 2026-08-03 16:17:03 +0000 UTC FinishedAt: 2026-08-03 16:17:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7r74[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-03 16:17:03 +0000 UTC FinishedAt: 2026-08-03 16:17:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7r74[2] Phase: Succeeded StartedAt: 2026-08-03 16:17:03 +0000 UTC FinishedAt: 2026-08-03 20:02:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-03 16:17:03 +0000 UTC FinishedAt: 2026-08-03 20:02:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-03 16:17:03 +0000 UTC FinishedAt: 2026-08-03 16:17:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-03 16:17:03 +0000 UTC FinishedAt: 2026-08-03 16:17:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowj7r74/series-workflowj7r74-convert-artifact-1582394251/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-03 16:17:14 +0000 UTC FinishedAt: 2026-08-03 16:35:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-03 16:17:14 +0000 UTC FinishedAt: 2026-08-03 16:35:22 +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:*728a7b2f-9ccd-4f54-8bce-8e8be5a91a43,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-workflowj7r74/series-workflowj7r74-convert-artifact-1582394251/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": "1521bf9c-ddf0-4003-aa68-f0524f137bc4", "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-workflowj7r74/series-workflowj7r74-build-action-4086654601/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-03 16:17:14 +0000 UTC FinishedAt: 2026-08-03 16:35:12 +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:*728a7b2f-9ccd-4f54-8bce-8e8be5a91a43,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-workflowj7r74/series-workflowj7r74-convert-artifact-1582394251/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": "1521bf9c-ddf0-4003-aa68-f0524f137bc4", "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-workflowj7r74/series-workflowj7r74-build-action-4086654601/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-03 16:35:22 +0000 UTC FinishedAt: 2026-08-03 16:35:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-03 16:35:22 +0000 UTC FinishedAt: 2026-08-03 16:35:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-03 16:35:22 +0000 UTC FinishedAt: 2026-08-03 16:35:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-03 16:35:22 +0000 UTC FinishedAt: 2026-08-03 16:35:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowj7r74/series-workflowj7r74-convert-artifact-1366640610/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-03 16:35:32 +0000 UTC FinishedAt: 2026-08-03 16:37:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-03 16:35:32 +0000 UTC FinishedAt: 2026-08-03 16:37:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1521bf9c-ddf0-4003-aa68-f0524f137bc4,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-workflowj7r74/series-workflowj7r74-build-action-4086654601/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-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-03 16:37:35 +0000 UTC FinishedAt: 2026-08-03 16:37:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-03 16:37:35 +0000 UTC FinishedAt: 2026-08-03 16:37:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-03 16:37:35 +0000 UTC FinishedAt: 2026-08-03 16:59:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-03 16:37:35 +0000 UTC FinishedAt: 2026-08-03 16:59:07 +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:*728a7b2f-9ccd-4f54-8bce-8e8be5a91a43,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-workflowj7r74/series-workflowj7r74-convert-artifact-1366640610/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": "8f81b5c7-1138-4d62-9d1f-e5a94091465e", "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-workflowj7r74/series-workflowj7r74-build-action-2977412150/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-03 16:37:35 +0000 UTC FinishedAt: 2026-08-03 16:58:57 +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:*728a7b2f-9ccd-4f54-8bce-8e8be5a91a43,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-workflowj7r74/series-workflowj7r74-convert-artifact-1366640610/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": "8f81b5c7-1138-4d62-9d1f-e5a94091465e", "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-workflowj7r74/series-workflowj7r74-build-action-2977412150/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-03 16:59:07 +0000 UTC FinishedAt: 2026-08-03 16:59:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-03 16:59:07 +0000 UTC FinishedAt: 2026-08-03 16:59:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-03 16:59:07 +0000 UTC FinishedAt: 2026-08-03 17:01:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-03 16:59:07 +0000 UTC FinishedAt: 2026-08-03 17:01:06 +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:*8f81b5c7-1138-4d62-9d1f-e5a94091465e,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-workflowj7r74/series-workflowj7r74-build-action-2977412150/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-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-03 17:01:15 +0000 UTC FinishedAt: 2026-08-03 20:02:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-03 17:01:15 +0000 UTC FinishedAt: 2026-08-03 20:02:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*1521bf9c-ddf0-4003-aa68-f0524f137bc4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8f81b5c7-1138-4d62-9d1f-e5a94091465e,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-workflowj7r74/series-workflowj7r74-build-action-4086654601/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-workflowj7r74/series-workflowj7r74-build-action-2977412150/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-03 17:01:15 +0000 UTC FinishedAt: 2026-08-03 17:01:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-03 17:01:15 +0000 UTC FinishedAt: 2026-08-03 17:01:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowj7r74/series-workflowj7r74-convert-artifact-1567918615/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-03 17:01:15 +0000 UTC FinishedAt: 2026-08-03 17:01:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-03 17:01:15 +0000 UTC FinishedAt: 2026-08-03 17:01:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-03 17:01:15 +0000 UTC FinishedAt: 2026-08-03 17:01:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-03 17:01:25 +0000 UTC FinishedAt: 2026-08-03 20:02:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7r74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_collect_arena_args","btf_distill_func_proto","btf_ctx_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60781269e26c786de2bb93fb1e697a5c32ccee48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"e0439e70-7e2d-4302-9cb8-918cf5bd4951","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-03 17:01:25 +0000 UTC FinishedAt: 2026-08-03 20:02:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1521bf9c-ddf0-4003-aa68-f0524f137bc4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8f81b5c7-1138-4d62-9d1f-e5a94091465e,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-workflowj7r74/series-workflowj7r74-build-action-4086654601/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-workflowj7r74/series-workflowj7r74-build-action-2977412150/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-workflowj7r74/series-workflowj7r74-convert-artifact-1567918615/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,}