Name: series-workflow4jnp9 Phase: Succeeded StartedAt: 2026-08-22 09:00:58 +0000 UTC FinishedAt: 2026-08-22 13:27:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jnp9[0] Phase: Succeeded StartedAt: 2026-08-22 09:00:58 +0000 UTC FinishedAt: 2026-08-22 09:46:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jnp9[0].run-triage Phase: Succeeded StartedAt: 2026-08-22 09:00:58 +0000 UTC FinishedAt: 2026-08-22 09:46:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "55ab7e14222e5f0b0fd9f7711ca391d2924b35e3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FTRACE", "FUNCTION_TRACER", "FUNCTION_GRAPH_TRACER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "55ab7e14222e5f0b0fd9f7711ca391d2924b35e3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FTRACE", "FUNCTION_TRACER", "FUNCTION_GRAPH_TRACER" ], "series_id": "a6c4011e-5e1d-421d-a646-8928694800c7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZUUkFDRSYjMzQ7LAogICAgJiMzNDtGVU5DVElPTl9UUkFDRVImIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fR1JBUEhfVFJBQ0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socClgIGVhcmxpZXIgaW4gYGNvcHlfcHJvY2VzcygpYCB0byBlbnN1cmUgdGhhdCBgcC1cdTAwM2VyZXRfc3RhY2tgIGFuZCByZWxhdGVkIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgKHNldCB0byBOVUxMIG9yIG5ld2x5IGFsbG9jYXRlZCkgYmVmb3JlIGFueSBmYWxsaWJsZSBvcGVyYXRpb25zIG9jY3VyLiBQcmlvciB0byB0aGlzIGNoYW5nZSwgaWYgYW4gZXJyb3Igb2NjdXJyZWQgZWFybHkgaW4gYGNvcHlfcHJvY2VzcygpYCAoZS5nLiwgaW4gYGNvcHlfZXhlY19zdGF0ZSgpYCksIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGNvdWxkIGZyZWUgdGhlIG5ldyB0YXNrIHN0cnVjdHVyZSB3aGlsZSBpdCBzdGlsbCBoZWxkIGEgY29weSBvZiB0aGUgcGFyZW50JiMzOTtzIGByZXRfc3RhY2tgIHBvaW50ZXIgKGR1ZSB0byBgZHVwX3Rhc2tfc3RydWN0KClgKS4gVGhpcyB3b3VsZCByZXN1bHQgaW4gZnJlZWluZyB0aGUgcGFyZW50JiMzOTtzIGByZXRfc3RhY2tgLCBsZWFkaW5nIHRvIGEgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgYnVnLlxuXG5UaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBidWdzICh1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUpIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIGlzc3VlIGRvZXMgbm90IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQsIGFzIHN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIGJ1ZyB0aGlzIHBhdGNoIGFkZHJlc3Nlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gdGhlIGVycm9yIHBhdGhzIG9mIGNvcHlfcHJvY2VzcygpLiBXaGVuIGEgdGFzayBpcyBkdXBsaWNhdGVkIHZpYSBkdXBfdGFza19zdHJ1Y3QoKSwgdGhlIGNoaWxkIHRhc2sgaW5oZXJpdHMgdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2sgcG9pbnRlci4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBwcm9jZXNzIGNyZWF0aW9uIGJlZm9yZSBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKCkgY2xlYXJzIHRoZSBjaGlsZCYjMzk7cyByZXRfc3RhY2ssIHRoZSBlcnJvciBwYXRoIChmcmVlX3Rhc2sgLVx1MDAzZSBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKSB3aWxsIGVycm9uZW91c2x5IGZyZWUgdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2ssIGxlYWRpbmcgdG8gYSB1c2UtYWZ0ZXItZnJlZSB3aGVuIHRoZSBwYXJlbnQgcmVzdW1lcyBleGVjdXRpb24uIFRoZSBwYXRjaCBtb3ZlcyBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKCkgYmVmb3JlIGFueSBmYWxsaWJsZSBvcGVyYXRpb25zIHRvIHByZXZlbnQgdGhpcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGZvciBhIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBidWcsIHJlcXVpcmluZyBmdHJhY2UgZ3JhcGggdHJhY2luZyBjb25maWdzIHRvIGJlIGVuYWJsZWQuIE5vIHNwZWNpZmljIGZvY3VzIHN5bWJvbHMgYXJlIG5lZWRlZCBzaW5jZSBjb3B5X3Byb2Nlc3MoKSBpcyBhbHJlYWR5IGhlYXZpbHkgZnV6emVkIHZpYSBjbG9uZS9mb3JrIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOGE4YTEzZWE5NDhiNjBhYjgxNjc0NDUwMDNkODdkNmQyYWYyNDg1NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDIyIDA5OjQ0OjE4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jXG5pbmRleCAxZTY4NDA0YmQ3NzNlLi4wZDFhZDkyZTJkMzM3IDEwMDY0NFxuLS0tIGEva2VybmVsL2ZvcmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2ZvcmsuY1xuQEAgLTIxMzksNiAmIzQzOzIxMzksMTEgQEAgX19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcyhcbiBcdHAgPSBkdXBfdGFza19zdHJ1Y3QoY3VycmVudCwgbm9kZSk7XG4gXHRpZiAoIXApXG4gXHRcdGdvdG8gZm9ya19vdXQ7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNdXN0IHJ1biBiZWZvcmUgdGhlIGZpcnN0IGZhbGxpYmxlIG9wLCBzbyBlcnJvciBwYXRocyBuZXZlclxuJiM0MztcdCAqIGZyZWUgdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2suXG4mIzQzO1x0ICovXG4mIzQzO1x0ZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTtcbiBcdHJldHZhbCA9IGNvcHlfZXhlY19zdGF0ZShjbG9uZV9mbGFncywgcCk7XG4gXHRpZiAocmV0dmFsKVxuIFx0XHRnb3RvIGJhZF9mb3JrX2ZyZWU7XG5AQCAtMjE2NSw4ICYjNDM7MjE3MCw2IEBAIF9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXG4gXHQgKi9cbiBcdHAtXHUwMDNlY2xlYXJfY2hpbGRfdGlkID0gKGNsb25lX2ZsYWdzIFx1MDAyNiBDTE9ORV9DSElMRF9DTEVBUlRJRCkgPyBhcmdzLVx1MDAzZWNoaWxkX3RpZCA6IE5VTEw7XG4gXG4tXHRmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApO1xuLVxuIFx0cnRfbXV0ZXhfaW5pdF90YXNrKHApO1xuIFx0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNnAtXHUwMDNlYmxvY2tlZF9sb2NrKTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTo0NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlRSQUNFJiMzNDssCiAgICAmIzM0O0ZVTkNUSU9OX1RSQUNFUiYjMzQ7LAogICAgJiMzNDtGVU5DVElPTl9HUkFQSF9UUkFDRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gdGhlIGVycm9yIHBhdGhzIG9mIGNvcHlfcHJvY2VzcygpLiBXaGVuIGEgdGFzayBpcyBkdXBsaWNhdGVkIHZpYSBkdXBfdGFza19zdHJ1Y3QoKSwgdGhlIGNoaWxkIHRhc2sgaW5oZXJpdHMgdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2sgcG9pbnRlci4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBwcm9jZXNzIGNyZWF0aW9uIGJlZm9yZSBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKCkgY2xlYXJzIHRoZSBjaGlsZCYjMzk7cyByZXRfc3RhY2ssIHRoZSBlcnJvciBwYXRoIChmcmVlX3Rhc2sgLVx1MDAzZSBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKSB3aWxsIGVycm9uZW91c2x5IGZyZWUgdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2ssIGxlYWRpbmcgdG8gYSB1c2UtYWZ0ZXItZnJlZSB3aGVuIHRoZSBwYXJlbnQgcmVzdW1lcyBleGVjdXRpb24uIFRoZSBwYXRjaCBtb3ZlcyBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKCkgYmVmb3JlIGFueSBmYWxsaWJsZSBvcGVyYXRpb25zIHRvIHByZXZlbnQgdGhpcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGZvciBhIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBidWcsIHJlcXVpcmluZyBmdHJhY2UgZ3JhcGggdHJhY2luZyBjb25maWdzIHRvIGJlIGVuYWJsZWQuIE5vIHNwZWNpZmljIGZvY3VzIHN5bWJvbHMgYXJlIG5lZWRlZCBzaW5jZSBjb3B5X3Byb2Nlc3MoKSBpcyBhbHJlYWR5IGhlYXZpbHkgZnV6emVkIHZpYSBjbG9uZS9mb3JrIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGE4YTEzZWE5NDhiNjBhYjgxNjc0NDUwMDNkODdkNmQyYWYyNDg1NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDA5OjQ0OjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggMWU2ODQwNGJkNzczZS4uMGQxYWQ5MmUyZDMzNyAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZm9yay5jCkBAIC0yMTM5LDYgJiM0MzsyMTM5LDExIEBAIF9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoCiAJcCA9IGR1cF90YXNrX3N0cnVjdChjdXJyZW50LCBub2RlKTsKIAlpZiAoIXApCiAJCWdvdG8gZm9ya19vdXQ7CiYjNDM7CS8qCiYjNDM7CSAqIE11c3QgcnVuIGJlZm9yZSB0aGUgZmlyc3QgZmFsbGlibGUgb3AsIHNvIGVycm9yIHBhdGhzIG5ldmVyCiYjNDM7CSAqIGZyZWUgdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2suCiYjNDM7CSAqLwomIzQzOwlmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApOwogCXJldHZhbCA9IGNvcHlfZXhlY19zdGF0ZShjbG9uZV9mbGFncywgcCk7CiAJaWYgKHJldHZhbCkKIAkJZ290byBiYWRfZm9ya19mcmVlOwpAQCAtMjE2NSw4ICYjNDM7MjE3MCw2IEBAIF9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoCiAJICovCiAJcC0mZ3Q7Y2xlYXJfY2hpbGRfdGlkID0gKGNsb25lX2ZsYWdzICZhbXA7IENMT05FX0NISUxEX0NMRUFSVElEKSA/IGFyZ3MtJmd0O2NoaWxkX3RpZCA6IE5VTEw7CiAKLQlmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApOwotCiAJcnRfbXV0ZXhfaW5pdF90YXNrKHApOwogCXJhd19zcGluX2xvY2tfaW5pdCgmYW1wO3AtJmd0O2Jsb2NrZWRfbG9jayk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDUyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IEZ0cmFjZSBhbmQgYGNvcHlfcHJvY2VzcygpYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgYGtlcm5lbC9mb3JrLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBjb3B5X3Byb2Nlc3MoKWAgZnVuY3Rpb24uIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXMgYSByZW9yZGVyaW5nIG9mIGZ1bmN0aW9uIGNhbGxzLiBXZSYjMzk7cmUgbW92aW5nIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCBlYXJsaWVyIGluIHRoZSBwcm9jZXNzLiAgVGhlIGdvYWwgaXMgdG8gZW5zdXJlIGl0IGhhcHBlbnMgKmJlZm9yZSogb3RoZXIgcG90ZW50aWFsbHkgZmFpbGluZyBvcGVyYXRpb25zLCBsaWtlIGBjb3B5X2V4ZWNfc3RhdGUoKWAuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiBpZiBhbiBlcnJvciBvY2N1cnMgKmFmdGVyKiBgZnRyYWNlX2dyYXBoX2luaXRfdGFzaygpYCwgdGhlIGVycm9yIGNsZWFudXAgcGF0aHMgZG9uJiMzOTt0IGhhdmUgdG8gd29ycnkgYWJvdXQgY2xlYW5pbmcgdXAgdGhlIHBhcmVudCYjMzk7cyBgcmV0X3N0YWNrYC4gVGhpcyBpcyBhIGRlZmVuc2l2ZSBtb3ZlIHRvIGF2b2lkIG1lbW9yeSBsZWFrcyBvciBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLgoKVGhlIGNvbW1lbnQgaW4gdGhlIGNvZGUgaGlnaGxpZ2h0cyB0aGlzIHBvaW50IGNsZWFybHk6ICYjMzQ7TXVzdCBydW4gYmVmb3JlIHRoZSBmaXJzdCBmYWxsaWJsZSBvcCwgc28gZXJyb3IgcGF0aHMgbmV2ZXIgZnJlZSB0aGUgcGFyZW50JiMzOTtzIHJldF9zdGFjay4mIzM0OyBJIGdldCBpdC4gIGBjb3B5X3Byb2Nlc3MoKWAgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgZnVuZGFtZW50YWwgdG8gcHJvY2VzcyBjcmVhdGlvbiB2aWEgYGNsb25lYCwgYGZvcmtgLCBhbmQgYHZmb3JrYC4gIFNpbmNlIGBjb3B5X3Byb2Nlc3NgIGlzIGFscmVhZHkgaGVhdmlseSBmdXp6ZWQsIHRoaXMgY2hhbmdlIGlzIHdvcnRoIGZ1enppbmcgYXMgaXQgZXhwbGljaXRseSBhZGRyZXNzZXMgZXJyb3IgcGF0aHMuCgpUaGUga2V5IGlzIHRoYXQgdGhpcyByZW9yZGVyaW5nIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFpbWVkIGF0IHByZXZlbnRpbmcgYSByZXNvdXJjZSBsZWFrIG9yLCB3b3JzZSwgYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LiAgQmVjYXVzZSB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgY29weV9wcm9jZXNzYCwgYSBjb3JlIGtlcm5lbCBmdW5jdGlvbiwgYW55IGNoYW5nZSB3YXJyYW50cyBjYXJlZnVsIHNjcnV0aW55IGFuZCBmdXp6aW5nLCBldmVuIGlmIHRoZSBjaGFuZ2UgdG91Y2hlcyBvbiBhbiBhcmVhIGxpa2UgZnRyYWNlIHRoYXQgbWlnaHQgbm90IGJlIGEgdXN1YWwgZnV6emluZyB0YXJnZXQuCgpXYWl0IGEgc2Vjb25kLiBOb3cgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AuICBUaGF04oCZcyBwYXJ0IG9mIHRoZSBmdHJhY2UgaW5mcmFzdHJ1Y3R1cmUuICBHZW5lcmFsbHksIHdlIGRvbiYjMzk7dCB6ZXJvIGluIG9uIHRyYWNpbmcgZmVhdHVyZXMgZHVyaW5nIGZ1enppbmcsIGJ1dCB0aGUgcHJveGltaXR5IHRvIGEgY29yZSBmdW5jdGlvbiBkb2VzIG1ha2UgaXQgYSBwb3RlbnRpYWwgZm9jdXMuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnRyYWNlX2dyYXBoX2luaXRfdGFzayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEzNDI9ZXh0ZXJuIHRyYWNlX2Z1bmNfZ3JhcGhfZW50X3QgZnRyYWNlX2dyYXBoX2VudHJ5O1xuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzQzLVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzQ0OmV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KTtcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM0NS1leHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XG4tLVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzU2PXN0YXRpYyBpbmxpbmUgdm9pZCB1bnBhdXNlX2dyYXBoX3RyYWNpbmcodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNjMtXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNjQ6c3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM2NS1zdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgfVxuLS1cbmtlcm5lbC9mb3JrLmM9MjAxOD1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxuLS1cbmtlcm5lbC9mb3JrLmMtMjE0NS1cdCAqL1xua2VybmVsL2ZvcmsuYzoyMTQ2Olx0ZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTtcbmtlcm5lbC9mb3JrLmMtMjE0Ny1cdHJldHZhbCA9IGNvcHlfZXhlY19zdGF0ZShjbG9uZV9mbGFncywgcCk7XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTExMzE9dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF9pZGxlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY3B1KVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMTU5LS8qIEFsbG9jYXRlIGEgcmV0dXJuIHN0YWNrIGZvciBuZXdseSBjcmVhdGVkIHRhc2sgKi9cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMTYwOnZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE2MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUzOAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgVGhvdWdodHMgb24gYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgKioKCk9rYXksIHNvIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBpcyBkZWZpbmVkIGluIGBrZXJuZWwvdHJhY2UvZmdyYXBoLmNgLiBJbW1lZGlhdGVseSwgbXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nIOKAkyBpdCYjMzk7cyBsaWtlbHkgZGVwZW5kZW50IG9uIGBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYC4gVGhhdCYjMzk7cyB0aGUgdHlwaWNhbCBwYXR0ZXJuLCBhbmQgdGhpcyBpcyB0cmFjaW5nLXJlbGF0ZWQgY29kZSwgc28gaXQmIzM5O3MgYSB2ZXJ5IGhpZ2ggcHJvYmFiaWxpdHkuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgcXVpY2tseTsgaXQmIzM5O3MgYmFzaWMgZHVlIGRpbGlnZW5jZS4gVGhlIG1vc3QgZGlyZWN0IHBhdGhzIHdvdWxkIGJlIGVpdGhlciB0byBjaGVjayB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgYGtlcm5lbC90cmFjZWAgZGlyZWN0b3J5LCBvciBtYXliZSBldmVuIGxvb2sgYXQgdGhlIGluY2x1ZGUgZ3VhcmRzIGRpcmVjdGx5IHdpdGhpbiBgZmdyYXBoLmNgIGl0c2VsZi4gSXTigJlzIGEgdHJpdmlhbCBjaGVjayBmb3IgbWUsIGJ1dCBpdCBpcyBpbXBvcnRhbnQgdG8gYmUgY29uZmlkZW50IG9uIGJ1aWxkIHByZXJlcXVpc2l0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmdyYXBoLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdHJhY2UuaD0yODQ9ZnRyYWNlX2Z1bmNfdCBmdHJhY2Vfb3BzX2dldF9mdW5jKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMpO1xuLS1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMzQxLSAqIFNVQk9QICAtIElzIGNvbnRyb2xsZWQgYnkgYW5vdGhlciBvcCBpbiBmaWVsZCBtYW5hZ2VkLlxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDozNDI6ICogR1JBUEggIC0gSXMgYSBjb21wb25lbnQgb2YgdGhlIGZncmFwaF9vcHMgc3RydWN0dXJlXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTM0My0gKi9cbi0tXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEyMzE9c3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQge1xuLS1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTI0MC1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTI0MTpzdHJ1Y3QgZmdyYXBoX29wcztcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTI0Mi1cbi0tXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEyNDQ9dHlwZWRlZiB2b2lkICgqdHJhY2VfZnVuY19ncmFwaF9yZXRfdCkoc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKixcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTI0NTpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZmdyYXBoX29wcyAqLFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMjQ2LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqKTsgLyogcmV0dXJuICovXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEyNDc9dHlwZWRlZiBpbnQgKCp0cmFjZV9mdW5jX2dyYXBoX2VudF90KShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqLFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMjQ4Olx0XHRcdFx0ICAgICAgc3RydWN0IGZncmFwaF9vcHMgKixcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTI0OS1cdFx0XHRcdCAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqKTsgLyogZW50cnkgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEyNTE9ZXh0ZXJuIGludCBmdHJhY2VfZ3JhcGhfZW50cnlfc3R1YihzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEyNTI6XHRcdFx0XHQgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTI1My1cdFx0XHRcdCAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpO1xuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMjU0PWJvb2wgZnRyYWNlX3BpZHNfZW5hYmxlZChzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEyNTctXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEyNTg6c3RydWN0IGZncmFwaF9vcHMge1xuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMjU5LVx0dHJhY2VfZnVuY19ncmFwaF9lbnRfdFx0XHRlbnRyeWZ1bmM7XG4tLVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzA3PXVuc2lnbmVkIGxvbmcgZnRyYWNlX2dyYXBoX3JldF9hZGRyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50ICppZHgsXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzMDgtXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyByZXQsIHVuc2lnbmVkIGxvbmcgKnJldHApO1xuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzA5OnVuc2lnbmVkIGxvbmcgKmZncmFwaF9nZXRfdGFza192YXIoc3RydWN0IGZncmFwaF9vcHMgKmdvcHMpO1xuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzEwLVxuLS1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTMyMC1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTMyMTpleHRlcm4gaW50IHJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChzdHJ1Y3QgZmdyYXBoX29wcyAqb3BzKTtcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTMyMjpleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChzdHJ1Y3QgZmdyYXBoX29wcyAqb3BzKTtcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTMyMy1cbi0tXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEzNjY9c3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X2lkbGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjcHUpIHsgfVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzY3LVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzY4Oi8qIERlZmluZSBhcyBtYWNyb3MgYXMgZmdyYXBoX29wcyBtYXkgbm90IGJlIGRlZmluZWQgKi9cbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM2OS0jZGVmaW5lIHJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChvcHMpICh7IC0xOyB9KVxuLS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZT05Mj1vYmotJChDT05GSUdfQkxLX0RFVl9JT19UUkFDRSkgJiM0Mzs9IGJsa3RyYWNlLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo5MzpvYmotJChDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSKSAmIzQzOz0gZmdyYXBoLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS05NC1pZmVxICgkKENPTkZJR19CTE9DSykseSlcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDEtICogRm9yIHR5cGUgd2l0aCBcJiMzNDtiaXRtYXAgb2YgZmdyYXBoX2FycmF5IGluZGV4XCYjMzQ7IChGR1JBUEhfVFlQRV9CSVRNQVApOlxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjQyOiAqICBiaXRzOiAxMiAtIDI3XHRUaGUgYml0bWFwIG9mIGZncmFwaF9vcHMgZmdyYXBoX2FycmF5IGluZGV4XG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDMtICpcdFx0XHRUaGF0IGlzLCBpdCYjMzk7cyBhIGJpdG1hc2sgb2YgMC0xNSAoMTYgYml0cylcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNTYtICogVGhhdCBpcywgYXQgdGhlIGVuZCBvZiBmdW5jdGlvbl9ncmFwaF9lbnRlciwgaWYgdGhlIGZpcnN0IGFuZCBmb3J0aFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjU3OiAqIGZncmFwaF9vcHMgb24gdGhlIGZncmFwaF9hcnJheVtdIChpbmRleCAwIGFuZCAzKSBuZWVkcyB0aGVpciByZXRmdW5jIGNhbGxlZFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjU4OiAqIG9uIHRoZSByZXR1cm4gb2YgdGhlIGZ1bmN0aW9uIGJlaW5nIHRyYWNlZCwgYW5kIHRoZSBmb3J0aCBmZ3JhcGhfb3BzXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNTktICogc3RvcmVkIHR3byB3b3JkcyBvZiBkYXRhLCB0aGlzIGlzIHdoYXQgd2lsbCBiZSBvbiB0aGUgdGFzayYjMzk7cyBzaGFkb3dcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNzEtICogfCAgICAgICAgICpvciBwdXQgYW5vdGhlciB3YXkqICAgICAgICAgICAgICAgfFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjcyOiAqIHwgKDMgXHUwMDNjXHUwMDNjIEZHUkFQSF9EQVRBX0lOREVYX1NISUZUKXwgXFwgICAgICAgICAgfCBUaGlzIGlzIGZvciBmZ3JhcGhfb3BzWzNdLlxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTczLSAqIHwgKCgyIC0gMSkgXHUwMDNjXHUwMDNjIEZHUkFQSF9EQVRBX1NISUZUKXwgXFwgICAgICAgICAgfCBUaGUgZGF0YSBzaXplIGlzIDIgd29yZHMuXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTExNT1lbnVtIHtcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTY1LS8qXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTY2OiAqIEVhY2ggZmdyYXBoX29wcyBoYXMgYSByZXNlcnZlZCB1bnNpZ25lZCBsb25nIGF0IHRoZSBlbmQgKHRvcCkgb2YgdGhlXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTY3LSAqIHJldF9zdGFjayB0byBzdG9yZSB0YXNrIHNwZWNpZmljIHN0YXRlLlxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xNzU9c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpmZ3JhcGhfc3RhY2tfY2FjaGVwO1xua2VybmVsL3RyYWNlL2ZncmFwaC5jLTE3Ni1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxNzc6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzICpmZ3JhcGhfYXJyYXlbRkdSQVBIX0FSUkFZX1NJWkVdO1xua2VybmVsL3RyYWNlL2ZncmFwaC5jLTE3OC1zdGF0aWMgdW5zaWduZWQgbG9uZyBmZ3JhcGhfYXJyYXlfYml0bWFzaztcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9Mjg3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtYWtlX2RhdGFfdHlwZV92YWwoaW50IGlkeCwgaW50IHNpemUsIGludCBvZmZzZXQpXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTI5NC0vKiBmdHJhY2VfZ3JhcGhfZW50cnkgc2V0IHRvIHRoaXMgdG8gdGVsbCBzb21lIGFyY2hzIHRvIHJ1biBmdW5jdGlvbiBncmFwaCAqL1xua2VybmVsL3RyYWNlL2ZncmFwaC5jOjI5NTpzdGF0aWMgaW50IGVudHJ5X3J1bihzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsIHN0cnVjdCBmZ3JhcGhfb3BzICpvcHMsXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMjk2LVx0XHQgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTMwMS0vKiBmdHJhY2VfZ3JhcGhfcmV0dXJuIHNldCB0byB0aGlzIHRvIHRlbGwgc29tZSBhcmNocyB0byBydW4gZnVuY3Rpb24gZ3JhcGggKi9cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzozMDI6c3RhdGljIHZvaWQgcmV0dXJuX3J1bihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsIHN0cnVjdCBmZ3JhcGhfb3BzICpvcHMsXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzAzLVx0XHQgICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9MzIyPXN0YXRpYyB2b2lkIHJldF9zdGFja19pbml0X3Rhc2tfdmFycyh1bnNpZ25lZCBsb25nICpyZXRfc3RhY2spXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTMzNC0gKiBSZXNlcnZlcyBzcGFjZSBvZiB1cCB0byBGR1JBUEhfTUFYX0RBVEFfU0laRSBieXRlcyBvbiB0aGVcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzozMzU6ICogdGFzayYjMzk7cyByZXRfc3RhY2sgc2hhZG93IHN0YWNrLCBmb3IgYSBnaXZlbiBmZ3JhcGhfb3BzIGR1cmluZ1xua2VybmVsL3RyYWNlL2ZncmFwaC5jLTMzNi0gKiB0aGUgZW50cnlmdW5jKCkgY2FsbC4gSWYgZW50cnlmdW5jKCkgcmV0dXJucyB6ZXJvLCB0aGUgc3RvcmFnZVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTMzNy0gKiBpcyBkaXNjYXJkZWQuIEFuIGVudHJ5ZnVuYygpIGNhbiBvbmx5IGNhbGwgdGhpcyBvbmNlIHBlciBpdGVyYXRpb24uXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MzM4OiAqIFRoZSBmZ3JhcGhfb3BzIHJldGZ1bmMoKSBjYW4gcmV0cmlldmUgdGhpcyBzdG9yZWQgZGF0YSB3aXRoXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzM5LSAqIGZncmFwaF9yZXRyaWV2ZV9kYXRhKCkuXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTM0Nj12b2lkICpmZ3JhcGhfcmVzZXJ2ZV9kYXRhKGludCBpZHgsIGludCBzaXplX2J5dGVzKVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zODEtICogZmdyYXBoX3JldHJpZXZlX2RhdGEgLSBSZXRyaWV2ZSBzdG9yZWQgZGF0YSBmcm9tIGZncmFwaF9yZXNlcnZlX2RhdGEoKVxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjM4MjogKiBAaWR4Olx0dGhlIGluZGV4IG9mIGZncmFwaF9hcnJheSAoZmdyYXBoX29wczo6aWR4KVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTM4My0gKiBAc2l6ZV9ieXRlczogcG9pbnRlciB0byByZXRyaWV2ZWQgZGF0YSBzaXplLlxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTM4NC0gKlxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjM4NTogKiBUaGlzIGlzIHRvIGJlIGNhbGxlZCBieSBhIGZncmFwaF9vcHMgcmV0ZnVuYygpLCB0byByZXRyaWV2ZSBkYXRhIHRoYXRcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzozODY6ICogd2FzIHN0b3JlZCBieSB0aGUgZmdyYXBoX29wcyBlbnRyeWZ1bmMoKSBvbiB0aGUgZnVuY3Rpb24gZW50cnkuXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzg3LSAqIFRoYXQgaXMsIHRoaXMgd2lsbCByZXRyaWV2ZSB0aGUgZGF0YSB0aGF0IHdhcyByZXNlcnZlZCBvbiB0aGVcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zODgtICogZW50cnkgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGV4aXQgb2YgdGhlIGZ1bmN0aW9uXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6Mzg5OiAqIHRoYXQgdGhlIGZncmFwaF9vcHMgcmV0ZnVuYygpIGlzIGNhbGxlZCBvbi5cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zOTAtICpcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9Mzk1PXZvaWQgKmZncmFwaF9yZXRyaWV2ZV9kYXRhKGludCBpZHgsIGludCAqc2l6ZV9ieXRlcylcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDAzLSAqXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6NDA0OiAqIEV2ZXJ5IHJlZ2lzdGVyZWQgZmdyYXBoX29wcyBoYXMgYSB0YXNrIHN0YXRlIHZhcmlhYmxlXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDA1LSAqIHJlc2VydmVkIG9uIHRoZSB0YXNrJiMzOTtzIHJldF9zdGFjay4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy00MDctICpcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo0MDg6ICogUmV0dXJucyB0aGUgYWRkcmVzcyB0byB0aGUgZmdyYXBoX29wcyBAZ29wcyB0YXNrcyBzcGVjaWZpY1xua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQwOS0gKiB1bnNpZ25lZCBsb25nIHZhcmlhYmxlLlxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQxMC0gKi9cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo0MTE6dW5zaWduZWQgbG9uZyAqZmdyYXBoX2dldF90YXNrX3ZhcihzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcylcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy00MTIte1xuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYz00MzQ9Z2V0X3JldF9zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBvZmZzZXQsIGludCAqZnJhbWVfb2Zmc2V0KVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy00NTQtICogZmdyYXBoX3JldHJpZXZlX3BhcmVudF9kYXRhIC0gZ2V0IGRhdGEgZnJvbSBhIHBhcmVudCBmdW5jdGlvblxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjQ1NTogKiBAaWR4OiBUaGUgaW5kZXggaW50byB0aGUgZmdyYXBoX2FycmF5IChmZ3JhcGhfb3BzOjppZHgpXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDU2LSAqIEBzaXplX2J5dGVzOiBBIHBvaW50ZXIgdG8gcmV0cmlldmVkIGRhdGEgc2l6ZVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYz01MjE9aW50IGZ0cmFjZV9ncmFwaF9lbnRyeV9zdHViKHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo1MjI6XHRcdFx0ICAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTUyMy1cdFx0XHQgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9NTI4PXN0YXRpYyB2b2lkIGZ0cmFjZV9ncmFwaF9yZXRfc3R1YihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6NTI5Olx0XHRcdFx0ICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy01MzAtXHRcdFx0XHQgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTUzMy1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo1MzQ6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzIGZncmFwaF9zdHViID0ge1xua2VybmVsL3RyYWNlL2ZncmFwaC5jLTUzNS1cdC5lbnRyeWZ1bmMgPSBmdHJhY2VfZ3JhcGhfZW50cnlfc3R1Yixcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNTM4LVxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjUzOTpzdGF0aWMgc3RydWN0IGZncmFwaF9vcHMgKmZncmFwaF9kaXJlY3RfZ29wcyA9IFx1MDAyNmZncmFwaF9zdHViO1xua2VybmVsL3RyYWNlL2ZncmFwaC5jLTU0MC1ERUZJTkVfU1RBVElDX0NBTEwoZmdyYXBoX2Z1bmMsIGZ0cmFjZV9ncmFwaF9lbnRyeV9zdHViKTtcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9NjUyPWludCBmdW5jdGlvbl9ncmFwaF9lbnRlcl9yZWdzKHVuc2lnbmVkIGxvbmcgcmV0LCB1bnNpZ25lZCBsb25nIGZ1bmMsXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTY4Ni1cdFx0XHRcdFx0IHNpemVvZihmZ3JhcGhfYXJyYXlfYml0bWFzaykgKiBCSVRTX1BFUl9CWVRFKSB7XG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6Njg3Olx0XHRcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzID0gUkVBRF9PTkNFKGZncmFwaF9hcnJheVtpXSk7XG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNjg4LVx0XHRcdGludCBzYXZlX2N1cnJfcmV0X3N0YWNrO1xuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYz04MTI9X19mdHJhY2VfcmV0dXJuX3RvX2hhbmRsZXIoc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncywgdW5zaWduZWQgbG9uZyBmcmFtZV9wb2ludGVyKVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy04NTYtXHRcdGZvcl9lYWNoX3NldF9iaXQoaSwgXHUwMDI2Yml0bWFwLCBzaXplb2YoYml0bWFwKSAqIEJJVFNfUEVSX0JZVEUpIHtcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo4NTc6XHRcdFx0c3RydWN0IGZncmFwaF9vcHMgKmdvcHMgPSBSRUFEX09OQ0UoZmdyYXBoX2FycmF5W2ldKTtcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy04NTgtXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTEwMTI9dm9pZCBmZ3JhcGhfaW5pdF9vcHMoc3RydWN0IGZ0cmFjZV9vcHMgKmRzdF9vcHMsXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEwMzEtICovXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTAzMjp2b2lkIGZ0cmFjZV9zdHViX2dyYXBoKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSwgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTAzMy1cdFx0ICAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpO1xuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMTk2PXN0YXRpYyBpbnQgZmdyYXBoX3BpZF9mdW5jKHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMTk3Olx0XHRcdCAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTExOTgtXHRcdFx0ICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9MTIxNT12b2lkIGZncmFwaF91cGRhdGVfcGlkX2Z1bmModm9pZClcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMjE2LXtcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMjE3Olx0c3RydWN0IGZncmFwaF9vcHMgKmdvcHM7XG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTIxOC1cdHN0cnVjdCBmdHJhY2Vfb3BzICpvcDtcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTIyNC1cdFx0aWYgKG9wLVx1MDAzZWZsYWdzIFx1MDAyNiBGVFJBQ0VfT1BTX0ZMX1BJRCkge1xua2VybmVsL3RyYWNlL2ZncmFwaC5jOjEyMjU6XHRcdFx0Z29wcyA9IGNvbnRhaW5lcl9vZihvcCwgc3RydWN0IGZncmFwaF9vcHMsIG9wcyk7XG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTIyNi1cdFx0XHRnb3BzLVx1MDAzZWVudHJ5ZnVuYyA9IGZ0cmFjZV9waWRzX2VuYWJsZWQob3ApID9cbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9MTI2OD1zdGF0aWMgdm9pZCBpbml0X3Rhc2tfdmFycyhpbnQgaWR4KVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMjg1LVxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjEyODY6c3RhdGljIHZvaWQgZnRyYWNlX2dyYXBoX2VuYWJsZV9kaXJlY3QoYm9vbCBlbmFibGVfYnJhbmNoLCBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcylcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMjg3LXtcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9MTMyOT1zdGF0aWMgaW50IGZncmFwaF9jcHVfaW5pdCh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMzM1LVxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjEzMzY6aW50IHJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcylcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMzM3LXtcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTM1Ny1cdGlmICghZmdyYXBoX2luaXRpYWxpemVkKSB7XG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTM1ODpcdFx0cmV0ID0gY3B1aHBfc2V0dXBfc3RhdGUoQ1BVSFBfQVBfT05MSU5FX0RZTiwgXCYjMzQ7ZmdyYXBoOm9ubGluZVwmIzM0Oyxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMzU5LVx0XHRcdFx0XHRmZ3JhcGhfY3B1X2luaXQsIE5VTEwpO1xuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xNDI1LVxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjE0MjY6dm9pZCB1bnJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcylcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xNDI3LXtcbi0tXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM9NDc9c3RhdGljIERFRklORV9NVVRFWChmcHJvYmVfbXV0ZXgpO1xua2VybmVsL3RyYWNlL2Zwcm9iZS5jOjQ4OnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyBmcHJvYmVfZ3JhcGhfb3BzO1xua2VybmVsL3RyYWNlL2Zwcm9iZS5jLTQ5LVxuLS1cbmtlcm5lbC90cmFjZS9mcHJvYmUuYz0yMDE9c3RhdGljIGlubGluZSB2b2lkIHJlYWRfZnByb2JlX2hlYWRlcih1bnNpZ25lZCBsb25nICpzdGFjayxcbi0tXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtMjEzLSAqIGZwcm9iZSBzaGFkb3cgc3RhY2sgbWFuYWdlbWVudDpcbmtlcm5lbC90cmFjZS9mcHJvYmUuYzoyMTQ6ICogU2luY2UgZnByb2JlIHNoYXJlcyBhIHNpbmdsZSBmZ3JhcGhfb3BzLCBpdCBuZWVkcyB0byBzaGFyZSB0aGUgc3RhY2sgZW50cnlcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy0yMTUtICogYW1vbmcgdGhlIHByb2JlcyBvbiB0aGUgc2FtZSBmdW5jdGlvbiBleGl0LiBOb3RlIHRoYXQgYSBuZXcgcHJvYmUgY2FuIGJlXG4tLVxua2VybmVsL3RyYWNlL2Zwcm9iZS5jPTIzMT1zdGF0aWMgaW5saW5lIGludCBfX2Zwcm9iZV9rcHJvYmVfaGFuZGxlcih1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCxcbi0tXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtMjUyLVxua2VybmVsL3RyYWNlL2Zwcm9iZS5jOjI1MzpzdGF0aWMgaW50IGZwcm9iZV9mZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLCBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy0yNTQtXHRcdFx0ICAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpO1xua2VybmVsL3RyYWNlL2Zwcm9iZS5jPTI1NT1zdGF0aWMgdm9pZCBmcHJvYmVfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYzoyNTY6XHRcdFx0ICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy0yNTctXHRcdFx0ICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKTtcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy0yNTgtXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM6MjU5OnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyBmcHJvYmVfZ3JhcGhfb3BzID0ge1xua2VybmVsL3RyYWNlL2Zwcm9iZS5jLTI2MC1cdC5lbnRyeWZ1bmNcdD0gZnByb2JlX2ZncmFwaF9lbnRyeSxcbi0tXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM9NTQzPXN0YXRpYyB2b2lkIGZwcm9iZV9yZW1vdmVfaXBzKHVuc2lnbmVkIGxvbmcgKmlwcywgdW5zaWduZWQgaW50IGNudClcbi0tXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtNTUyLVxua2VybmVsL3RyYWNlL2Zwcm9iZS5jOjU1MzovKiBmZ3JhcGhfb3BzIGNhbGxiYWNrLCB0aGlzIHByb2Nlc3NlcyBmcHJvYmVzIHdoaWNoIGhhdmUgZXhpdF9oYW5kbGVyLiAqL1xua2VybmVsL3RyYWNlL2Zwcm9iZS5jOjU1NDpzdGF0aWMgaW50IGZwcm9iZV9mZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLCBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy01NTUtXHRcdFx0ICAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL2Zwcm9iZS5jPTY1MD1zdGF0aWMgdm9pZCBmcHJvYmVfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYzo2NTE6XHRcdFx0ICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy02NTItXHRcdFx0ICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxuLS1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYz04NDE9c3RhdGljIGludCBwcm9maWxlX2dyYXBoX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYzo4NDI6XHRcdFx0ICAgICAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTg0My1cdFx0XHQgICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbi0tXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM9ODY2PXN0YXRpYyB2b2lkIHByb2ZpbGVfZ3JhcGhfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYzo4Njc6XHRcdFx0XHQgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtODY4LVx0XHRcdFx0IHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTkxNi1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYzo5MTc6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzIGZwcm9maWxlcl9vcHMgPSB7XG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtOTE4LVx0LmVudHJ5ZnVuYyA9IFx1MDAyNnByb2ZpbGVfZ3JhcGhfZW50cnksXG4tLVxua2VybmVsL3RyYWNlL2Z0cmFjZS5jPTQ0NTE9c3RhdGljIHZvaWQgcHJpbnRfc3Vib3BzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgc3RydWN0IGR5bl9mdHJhY2UgKnJlYylcbi0tXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtNDQ2NS1cdFx0aWYgKHN1Ym9wcy1cdTAwM2VmbGFncyBcdTAwMjYgRlRSQUNFX09QU19GTF9HUkFQSCkge1xua2VybmVsL3RyYWNlL2Z0cmFjZS5jOjQ0NjY6XHRcdFx0c3RydWN0IGZncmFwaF9vcHMgKmdvcHM7XG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtNDQ2Ny1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYzo0NDY4Olx0XHRcdGdvcHMgPSBjb250YWluZXJfb2Yoc3Vib3BzLCBzdHJ1Y3QgZmdyYXBoX29wcywgb3BzKTtcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy00NDY5LVx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7IHtlbnQ6JXBTIHJldDolcFN9XCYjMzQ7LFxuLS1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYz04NDk3PV9faW5pdCB2b2lkIGZ0cmFjZV9pbml0X2dsb2JhbF9hcnJheV9vcHMoc3RydWN0IHRyYWNlX2FycmF5ICp0cilcbi0tXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtODUwMi1cdGZ0cmFjZV9pbml0X3RyYWNlX2FycmF5KHRyKTtcbmtlcm5lbC90cmFjZS9mdHJhY2UuYzo4NTAzOlx0aW5pdF9hcnJheV9mZ3JhcGhfb3BzKHRyLCB0ci1cdTAwM2VvcHMpO1xua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTg1MDQtfVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5oPTMzMz1zdHJ1Y3QgdHJhY2VfYXJyYXkge1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5oLTQzNy0jaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUlxua2VybmVsL3RyYWNlL3RyYWNlLmg6NDM4Olx0c3RydWN0IGZncmFwaF9vcHNcdCpnb3BzO1xua2VybmVsL3RyYWNlL3RyYWNlLmgtNDM5LSNlbmRpZlxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5oPTgxNz12b2lkIHByaW50X3RyYWNlX2hlYWRlcihzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcik7XG5rZXJuZWwvdHJhY2UvdHJhY2UuaC04MTgtXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDo4MTk6dm9pZCB0cmFjZV9ncmFwaF9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLCBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS90cmFjZS5oLTgyMC1cdFx0XHRzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKTtcbmtlcm5lbC90cmFjZS90cmFjZS5oOjgyMTppbnQgdHJhY2VfZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLCBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS90cmFjZS5oLTgyMi1cdFx0ICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncyk7XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmg9MTA2MD1leHRlcm4gdm9pZCBfX3RyYWNlX2dyYXBoX3JldHVybihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLFxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5oLTEwNjQtXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMDY1OmV4dGVybiB2b2lkIGluaXRfYXJyYXlfZmdyYXBoX29wcyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKTtcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEwNjY6ZXh0ZXJuIGludCBhbGxvY2F0ZV9mZ3JhcGhfb3BzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMpO1xua2VybmVsL3RyYWNlL3RyYWNlLmg6MTA2NzpleHRlcm4gdm9pZCBmcmVlX2ZncmFwaF9vcHMoc3RydWN0IHRyYWNlX2FycmF5ICp0cik7XG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0xMDY4LVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5oPTExNjM9c3RhdGljIGlubGluZSB2b2lkXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMTY0OmZ0cmFjZV9ncmFwaF9hZGRyX2ZpbmlzaChzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcywgc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlKVxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTE2NS17XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmg9MTIwMT1zdGF0aWMgaW5saW5lIGludCBmdHJhY2VfZ3JhcGhfbm90cmFjZV9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0xMjA0LX1cbmtlcm5lbC90cmFjZS90cmFjZS5oOjEyMDU6c3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9hZGRyX2ZpbmlzaChzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcywgc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlKVxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTIwNi17IH1cbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuaD0xMjEzPXN0YXRpYyBpbmxpbmUgYm9vbFxua2VybmVsL3RyYWNlL3RyYWNlLmg6MTIxNDpmdHJhY2VfZ3JhcGhfaWdub3JlX2Z1bmMoc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsIHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSlcbmtlcm5lbC90cmFjZS90cmFjZS5oLTEyMTUte1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5oPTEyMzA9cHJpbnRfZ3JhcGhfZnVuY3Rpb25fZmxhZ3Moc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCB1MzIgZmxhZ3MpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTIzMy19XG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMjM0OnN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX2ZncmFwaF9vcHMoc3RydWN0IHRyYWNlX2FycmF5ICp0cikgeyB9XG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0xMjM1LS8qIGZ0cmFjZV9vcHMgbWF5IG5vdCBiZSBkZWZpbmVkICovXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMjM2OiNkZWZpbmUgaW5pdF9hcnJheV9mZ3JhcGhfb3BzKHRyLCBvcHMpIGRvIHsgfSB3aGlsZSAoMClcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEyMzc6I2RlZmluZSBhbGxvY2F0ZV9mZ3JhcGhfb3BzKHRyLCBvcHMpICh7IDA7IH0pXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0xMjM4LSNlbmRpZiAvKiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSICovXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jPTg0PWludCBmdHJhY2VfY3JlYXRlX2Z1bmN0aW9uX2ZpbGVzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jLTk3LVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jOjk4Olx0cmV0ID0gYWxsb2NhdGVfZmdyYXBoX29wcyh0ciwgdHItXHUwMDNlb3BzKTtcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYy05OS1cdGlmIChyZXQpIHtcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmM9MTA5PXZvaWQgZnRyYWNlX2Rlc3Ryb3lfZnVuY3Rpb25fZmlsZXMoc3RydWN0IHRyYWNlX2FycmF5ICp0cilcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMtMTEyLVx0ZnRyYWNlX2ZyZWVfZnRyYWNlX29wcyh0cik7XG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmM6MTEzOlx0ZnJlZV9mZ3JhcGhfb3BzKHRyKTtcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYy0xMTQtfVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYz0yMjU9c3RhdGljIGludCBncmFwaF9lbnRyeShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM6MjI2Olx0XHQgICAgICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtMjI3LVx0XHQgICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM9Mjk0PWludCB0cmFjZV9ncmFwaF9lbnRyeShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM6Mjk1Olx0XHQgICAgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy0yOTYtXHRcdCAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jPTMwMT1zdGF0aWMgaW50IHRyYWNlX2dyYXBoX2VudHJ5X2FyZ3Moc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jOjMwMjpcdFx0XHRcdCAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtMzAzLVx0XHRcdFx0ICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYz0zNjg9dm9pZCB0cmFjZV9ncmFwaF9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jOjM2OTpcdFx0XHRzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcywgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy0zNzAte1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYz0zOTk9c3RhdGljIHZvaWQgdHJhY2VfZ3JhcGhfdGhyZXNoX3JldHVybihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM6NDAwOlx0XHRcdFx0ICAgICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtNDAxLVx0XHRcdFx0ICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtNDM0LVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jOjQzNTpzdGF0aWMgc3RydWN0IGZncmFwaF9vcHMgZnVuY2dyYXBoX29wcyA9IHtcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00MzYtXHQuZW50cnlmdW5jID0gXHUwMDI2dHJhY2VfZ3JhcGhfZW50cnksXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTQzOS1cbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzo0NDA6aW50IGFsbG9jYXRlX2ZncmFwaF9vcHMoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgc3RydWN0IGZ0cmFjZV9vcHMgKm9wcylcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00NDEte1xua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jOjQ0MjpcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzO1xua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTQ0My1cbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtNDU4LVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jOjQ1OTp2b2lkIGZyZWVfZmdyYXBoX29wcyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTQ2MC17XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTQ2My1cbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzo0NjQ6X19pbml0IHZvaWQgaW5pdF9hcnJheV9mZ3JhcGhfb3BzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMpXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtNDY1LXtcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jPTE3OD1zdGF0aWMgaW50IGlycXNvZmZfZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYzoxNzk6XHRcdFx0ICAgICAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYy0xODAtXHRcdFx0ICAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYz0yMTU9c3RhdGljIHZvaWQgaXJxc29mZl9ncmFwaF9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYzoyMTY6XHRcdFx0XHQgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jLTIxNy1cdFx0XHRcdCBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMtMjQwLVxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYzoyNDE6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzIGZncmFwaF9vcHMgPSB7XG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jLTI0Mi1cdC5lbnRyeWZ1bmNcdFx0PSBcdTAwMjZpcnFzb2ZmX2dyYXBoX2VudHJ5LFxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmM9NDg0PXN0YXRpYyBpbnQgcmVnaXN0ZXJfaXJxc29mZl9mdW5jdGlvbihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBpbnQgZ3JhcGgsIGludCBzZXQpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYy00OTItXHRpZiAoZ3JhcGgpXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jOjQ5MzpcdFx0cmV0ID0gcmVnaXN0ZXJfZnRyYWNlX2dyYXBoKFx1MDAyNmZncmFwaF9vcHMpO1xua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYy00OTQtXHRlbHNlXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYz01MDM9c3RhdGljIHZvaWQgdW5yZWdpc3Rlcl9pcnFzb2ZmX2Z1bmN0aW9uKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIGludCBncmFwaClcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jLTUwOC1cdGlmIChncmFwaClcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmM6NTA5Olx0XHR1bnJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChcdTAwMjZmZ3JhcGhfb3BzKTtcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMtNTEwLVx0ZWxzZVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYz0xMTU9c3RhdGljIGludCB3YWtldXBfZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLFxua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jOjExNjpcdFx0XHQgICAgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYy0xMTctXHRcdFx0ICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmM9MTUxPXN0YXRpYyB2b2lkIHdha2V1cF9ncmFwaF9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jOjE1MjpcdFx0XHRcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jLTE1My1cdFx0XHRcdHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jLTE3Ny1cbmtlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYzoxNzg6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzIGZncmFwaF93YWtldXBfb3BzID0ge1xua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jLTE3OS1cdC5lbnRyeWZ1bmMgPSBcdTAwMjZ3YWtldXBfZ3JhcGhfZW50cnksXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM9NzY4PXN0cnVjdCBmZ3JhcGhfZml4dHVyZSB7XG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzo3Njk6XHRzdHJ1Y3QgZmdyYXBoX29wcyBnb3BzO1xua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtNzcwLVx0aW50IHN0b3JlX3NpemU7XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM9Nzc2PXN0YXRpYyBfX2luaXQgaW50IHN0b3JlX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjc3NzpcdFx0XHQgICAgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTc3OC1cdFx0XHQgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jPTgxMD1zdGF0aWMgX19pbml0IHZvaWQgc3RvcmVfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjgxMTpcdFx0XHRcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtODEyLVx0XHRcdFx0c3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYz0xMDI5PXN0YXRpYyBpbnQgdHJhY2VfZ3JhcGhfZW50cnlfd2F0Y2hkb2coc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6MTAzMDpcdFx0XHRcdCAgICAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTAzMS1cdFx0XHRcdCAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTA0Ny1cbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjEwNDg6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzIGZncmFwaF9vcHMgX19pbml0ZGF0YSAgPSB7XG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMDQ5LVx0LmVudHJ5ZnVuY1x0XHQ9IFx1MDAyNnRyYWNlX2dyYXBoX2VudHJ5X3dhdGNoZG9nLFxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jPTEwNjI9dHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9mdW5jdGlvbl9ncmFwaChzdHJ1Y3QgdHJhY2VyICp0cmFjZSxcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMDgwLVx0dHJhY2luZ19yZXNldF9vbmxpbmVfY3B1cyhcdTAwMjZ0ci1cdTAwM2VhcnJheV9idWZmZXIpO1xua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6MTA4MTpcdGZncmFwaF9vcHMucHJpdmF0ZSA9IHRyO1xua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6MTA4MjpcdHJldCA9IHJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChcdTAwMjZmZ3JhcGhfb3BzKTtcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTEwODMtXHRpZiAocmV0KSB7XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTEwMy1cbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjExMDQ6XHQvKiBOZWVkIHRvIGFsc28gc2ltdWxhdGUgdGhlIHRyLVx1MDAzZXJlc2V0IHRvIHJlbW92ZSB0aGlzIGZncmFwaF9vcHMgKi9cbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTExMDUtXHR0cmFjaW5nX3N0b3BfY21kbGluZV9yZWNvcmQoKTtcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjExMDY6XHR1bnJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChcdTAwMjZmZ3JhcGhfb3BzKTtcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTExMDctXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTEyMy1cdHRyYWNpbmdfcmVzZXRfb25saW5lX2NwdXMoXHUwMDI2dHItXHUwMDNlYXJyYXlfYnVmZmVyKTtcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjExMjQ6XHRmZ3JhcGhfb3BzLnByaXZhdGUgPSB0cjtcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTExMjUtXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTE0NS1cbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjExNDY6XHRyZXQgPSByZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoXHUwMDI2ZmdyYXBoX29wcyk7XG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMTQ3LVx0aWYgKHJldCkge1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTExNTktXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzoxMTYwOlx0dW5yZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoXHUwMDI2ZmdyYXBoX29wcyk7XG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMTYxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTc5CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOgoKKipLZXJuZWwgUGF0Y2ggQW5hbHlzaXM6IEZ0cmFjZSBhbmQgVGFzayBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyB0aGUgcHJvcG9zZWQgcGF0Y2ggdGFyZ2V0cyBga2VybmVsL2ZvcmsuY2AsIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIG1vdmluZyB0aGUgY2FsbCB0byBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgZWFybGllciBpbiB0aGUgYGZvcmtgIHByb2Nlc3MuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgcHJvYmFibHkgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRpbWluZyBvciByZXNvdXJjZSBhbGxvY2F0aW9uIGR1cmluZyB0aGUgdGFzayBjcmVhdGlvbi4KCkxldCYjMzk7cyBzZWXigKYgcmlnaHQsIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCDigJMgdGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRoZSByZXR1cm4gc3RhY2sgYWxsb2NhdGlvbiBmb3IgYSBuZXcgdGFzaywgYnV0IG9ubHkgaWYgYENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVJgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2U7IGl04oCZcyBjb25kaXRpb25hbCBvbiB0aGUgdHJhY2luZyBmZWF0dXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24sIEkga25vdyBpdC4gSG9sZCBvbiwgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgLi4uIHdhaXQgYSBtaW51dGUsIGl04oCZcyBkZWZpbmVkIGluIGBrZXJuZWwvdHJhY2UvZmdyYXBoLmNgLCBub3QgZGlyZWN0bHkgaW4gYGtlcm5lbC9mb3JrLmNgLiBCZXR0ZXIgY2hlY2sgdGhhdC4gT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgdGhpcyBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZnRyYWNlLmg9MTM0Mj1leHRlcm4gdHJhY2VfZnVuY19ncmFwaF9lbnRfdCBmdHJhY2VfZ3JhcGhfZW50cnk7XG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNDMtXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNDQ6ZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzQ1LWV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEzNTY9c3RhdGljIGlubGluZSB2b2lkIHVucGF1c2VfZ3JhcGhfdHJhY2luZyh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM2My1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTM2NDpzdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgfVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzY1LXN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkgeyB9XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTExMzE9dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF9pZGxlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY3B1KVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMTU5LS8qIEFsbG9jYXRlIGEgcmV0dXJuIHN0YWNrIGZvciBuZXdseSBjcmVhdGVkIHRhc2sgKi9cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMTYwOnZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE2MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyOTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGZncmFwaC5jIGZvciBGdW5jdGlvbiBHcmFwaCBUcmFjaW5nKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGBrZXJuZWwvdHJhY2UvZmdyYXBoLmNgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMTYwLiBNeSBndXQgdGVsbHMgbWUgdGhhdCYjMzk7cyB3aGVyZSB3ZSYjMzk7bGwgZmluZCB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2luZyBtZWNoYW5pc20uIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBjYXB0dXJpbmcgYW5kIG1hbmFnaW5nIHRoZSBjYWxsIGdyYXBoIGRhdGEuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9uIGNhbGxzIHJlc3BvbnNpYmxlIGZvciB0aGUgaW5zdHJ1bWVudGF0aW9uLCBwZXJoYXBzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSB0cmFjZXBvaW50IGluZnJhc3RydWN0dXJlIGFuZCB0aGUgY29udHJvbCBmbG93IGFzcGVjdHMsIHRvby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvZmdyYXBoLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNTA6XHRcdFx0XHRyZXRfc3RhY2sgPSBrbWVtX2NhY2hlX2FsbG9jKGZncmFwaF9zdGFja19jYWNoZXAsIEdGUF9LRVJORUwpO1xuMTE1MTpcdFx0XHRcdGlmICghcmV0X3N0YWNrKVxuMTE1MjpcdFx0XHRcdFx0cmV0dXJuO1xuMTE1MzpcdFx0XHRcdHBlcl9jcHUoaWRsZV9yZXRfc3RhY2ssIGNwdSkgPSByZXRfc3RhY2s7XG4xMTU0Olx0XHRcdH1cbjExNTU6XHRcdFx0Z3JhcGhfaW5pdF90YXNrKHQsIHJldF9zdGFjayk7XG4xMTU2Olx0XHR9XG4xMTU3Olx0fVxuMTE1ODpcdFxuMTE1OTpcdC8qIEFsbG9jYXRlIGEgcmV0dXJuIHN0YWNrIGZvciBuZXdseSBjcmVhdGVkIHRhc2sgKi9cbjExNjA6XHR2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KVxuMTE2MTpcdHtcbjExNjI6XHRcdC8qIE1ha2Ugc3VyZSB3ZSBkbyBub3QgdXNlIHRoZSBwYXJlbnQgcmV0X3N0YWNrICovXG4xMTYzOlx0XHR0LVx1MDAzZXJldF9zdGFjayA9IE5VTEw7XG4xMTY0Olx0XHR0LVx1MDAzZWN1cnJfcmV0X3N0YWNrID0gMDtcbjExNjU6XHRcdHQtXHUwMDNlY3Vycl9yZXRfZGVwdGggPSAtMTtcbjExNjY6XHRcbjExNjc6XHRcdGlmIChmdHJhY2VfZ3JhcGhfYWN0aXZlKSB7XG4xMTY4Olx0XHRcdHVuc2lnbmVkIGxvbmcgKnJldF9zdGFjaztcbjExNjk6XHRcbjExNzA6XHRcdFx0aWYgKFdBUk5fT05fT05DRSghZmdyYXBoX3N0YWNrX2NhY2hlcCkpXG4xMTcxOlx0XHRcdFx0cmV0dXJuO1xuMTE3MjpcdFxuMTE3MzpcdFx0XHRyZXRfc3RhY2sgPSBrbWVtX2NhY2hlX2FsbG9jKGZncmFwaF9zdGFja19jYWNoZXAsIEdGUF9LRVJORUwpO1xuMTE3NDpcdFx0XHRpZiAoIXJldF9zdGFjaylcbjExNzU6XHRcdFx0XHRyZXR1cm47XG4xMTc2Olx0XHRcdGdyYXBoX2luaXRfdGFzayh0LCByZXRfc3RhY2spO1xuMTE3NzpcdFx0fVxuMTE3ODpcdH1cbjExNzk6XHRcbjExODA6XHR2b2lkIGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KVxuMTE4MTpcdHtcbjExODI6XHRcdHVuc2lnbmVkIGxvbmcgKnJldF9zdGFjayA9IHQtXHUwMDNlcmV0X3N0YWNrO1xuMTE4MzpcdFxuMTE4NDpcdFx0dC1cdTAwM2VyZXRfc3RhY2sgPSBOVUxMO1xuMTE4NTpcdFx0LyogTlVMTCBtdXN0IGJlY29tZSB2aXNpYmxlIHRvIElSUXMgYmVmb3JlIHdlIGZyZWUgaXQ6ICovXG4xMTg2Olx0XHRiYXJyaWVyKCk7XG4xMTg3Olx0XG4xMTg4Olx0XHRpZiAocmV0X3N0YWNrKSB7XG4xMTg5Olx0XHRcdGlmIChXQVJOX09OX09OQ0UoIWZncmFwaF9zdGFja19jYWNoZXApKVxuMTE5MDpcdFx0XHRcdHJldHVybjtcbjExOTE6XHRcdFx0a21lbV9jYWNoZV9mcmVlKGZncmFwaF9zdGFja19jYWNoZXAsIHJldF9zdGFjayk7XG4xMTkyOlx0XHR9XG4xMTkzOlx0fVxuMTE5NDpcdFxuMTE5NTpcdCNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VcbjExOTY6XHRzdGF0aWMgaW50IGZncmFwaF9waWRfZnVuYyhzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXG4xMTk3Olx0XHRcdFx0ICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG4xMTk4Olx0XHRcdFx0ICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbjExOTk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjMzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogODk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFN1YnRsZSBSYWNlIENvbmRpdGlvbiBpbiBgY29weV9wcm9jZXNzYCBhbmQgdGhlIEZ0cmFjZSBHcmFwaCBUcmFjZXIqKgoKT2theSwgc28gaGVyZSYjMzk7cyB0aGUgZGVhbC4gSSYjMzk7dmUgc3R1bWJsZWQgdXBvbiBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZSBpbiB0aGUga2VybmVsLCBhbmQgaXQmIzM5O3MgcmVsYXRlZCB0byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgY29weV9wcm9jZXNzYCAoc3BlY2lmaWNhbGx5IGluIGl0cyBlcnJvciBoYW5kbGluZyBwYXRocykgYW5kIHRoZSBGdW5jdGlvbiBHcmFwaCBUcmFjZXIgKGBmdHJhY2VgKS4gSSYjMzk7dmUgbm90aWNlZCB0aGF0IGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBzZXRzIGB0LSZndDtyZXRfc3RhY2tgIHRvIGBOVUxMYC4gVGhlIHByb2JsZW0gYXJpc2VzIHdoZW4gdGhpcyBjYWxsIGhhcHBlbnMgKmFmdGVyKiBvdGhlciBvcGVyYXRpb25zIHdpdGhpbiBgY29weV9wcm9jZXNzYCB3aGljaCBjb3VsZCBwb3RlbnRpYWxseSBmYWlsLCBsaWtlIGBjb3B5X2V4ZWNfc3RhdGVgLgoKSWYgYW55IG9mIHRob3NlIGZhbGxpYmxlIG9wZXJhdGlvbnMgZmFpbCwgd2UgaGl0IGFuIGVycm9yIHBhdGggKGxpa2UgYGJhZF9mb3JrX2ZyZWVgKS4gSGVyZSYjMzk7cyB0aGUga2lja2VyOiBgZHVwX3Rhc2tfc3RydWN0YCBjb3BpZXMgdGhlICplbnRpcmUqIGB0YXNrX3N0cnVjdGAsIGluY2x1ZGluZyBgdC0mZ3Q7cmV0X3N0YWNrYC4gSWYgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGhhc24mIzM5O3QgcnVuIHlldCwgYHQtJmd0O3JldF9zdGFja2Agc3RpbGwgcG9pbnRzIHRvIHRoZSAqcGFyZW50JiMzOTtzKiByZXR1cm4gc3RhY2suCgpOb3csIGluIHRoZSBlcnJvciBwYXRoIChlLmcuLCB3aXRoaW4gYGZyZWVfdGFza2Agb3IgYHB1dF90YXNrX3N0cnVjdGApLCBgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayh0KWAgZ2V0cyBjYWxsZWQsIHdoaWNoLCBjcml0aWNhbGx5LCAqZnJlZXMqIGB0LSZndDtyZXRfc3RhY2tgLiBCdXQgaGV5ISBgdC0mZ3Q7cmV0X3N0YWNrYCBpcyB0aGUgKnBhcmVudCYjMzk7cyogc3RhY2ssIHNvIHdlJiMzOTtyZSBmcmVlaW5nIG1lbW9yeSB0aGF0IHN0aWxsIGJlbG9uZ3MgdG8gdGhlIHBhcmVudCB0YXNrLiBUaGlzIGxlYWRzIHRvIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZS4KClRoZSBmaXggc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBtb3ZlIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCByaWdodCBhZnRlciBgZHVwX3Rhc2tfc3RydWN0YC4gVGhpcyB3YXksIGB0LSZndDtyZXRfc3RhY2tgIGlzIGNsZWFyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGNvcHkuIFRoaXMgc2VlbXMgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZvciBzdXJlLCBhbmQgZGVmaW5pdGVseSBmaXhlcyBhIGJ1Zy4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgaXQmIzM5O3Mgd29ydGggZnV6emluZyB0aGlzIGZpeD8gQWJzb2x1dGVseS4gVGhpcyBpcyBhIHVzZS1hZnRlci1mcmVlLCBzbyBpdCYjMzk7cyBhIGhpZ2gtcHJpb3JpdHkgdGFyZ2V0LgoKVG8gdHJpZ2dlciB0aGUgYnVnLCBgZnRyYWNlX2dyYXBoX2FjdGl2ZWAgZG9lc24mIzM5O3QgbmVlZCB0byBiZSB0cnVlLiBJdCYjMzk7cyBlbm91Z2ggdG8gaGF2ZSBgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgZW5hYmxlZC4gYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIGlzIGNvbXBpbGVkIGFuZCBsaW5rZWQgaW4gaWYgdGhpcyBpcyBzZXQsIGFuZCBpdCYjMzk7cyBgZnRyYWNlX2dyYXBoX2V4aXRfdGFza2AgdGhhdCBjYXVzZXMgdGhlIGlzc3VlIGJ5IGZyZWVpbmcgYHQtJmd0O3JldF9zdGFja2AgaWYgaXQmIzM5O3Mgbm9uLU5VTEwuCgpTbywgYENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVJgIGlzIG91ciBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24uIFdlIGFsc28gbmVlZCB0byBmb2N1cyBvbiBmdXp6aW5nIHRoZSBlcnJvciBwYXRocyB3aXRoaW4gYGNvcHlfcHJvY2Vzc2AuIFNwZWNpZmljIGZ1bmN0aW9ucyB0byB0YXJnZXQgd291bGQgYmU6IGBjb3B5X3Byb2Nlc3NgLCBgY29weV9leGVjX3N0YXRlYCwgYW5kIGBkdXBfdGFza19zdHJ1Y3RgLiBHaXZlbiB0aGF0IGBjb3B5X3Byb2Nlc3NgIGlzIGEgaG90LXBhdGggYW5kIGFscmVhZHkgaGVhdmlseSBmdXp6ZWQsIGl0IG1heSBub3QgYmUgbmVjZXNzYXJ5IHRvIHNwZWNpZnkgaXQgZXhwbGljaXRseSwgYnV0IHdlIHNob3VsZCBzcGVjaWZ5IGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBhbmQgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIHRvIGVuc3VyZSB0aGUgZnV6emVyIGhpdHMgdGhlIHNwZWNpZmljIHRyYWNpbmcgaW5pdC9leGl0IHBhdGhzLiBFc3BlY2lhbGx5IHNpbmNlIHRoZSBpc3N1ZSBpcyBsaWtlbHkgdG8gYmUgZXhwb3NlZCB3aGVuIHRyYWNpbmcgaXMgZW5hYmxlZCBhbmQgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGlzIGJlaW5nIGNhbGxlZCBhdCBldmVyeSBmb3JrL2Nsb25lLiBUaGlzIHdvbiYjMzk7dCBiZSBvbiBieSBkZWZhdWx0LCBzbyB3ZSYjMzk7cmUgZ29pbmcgdG8gbmVlZCB0byBlbmFibGUgYENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVJgLgoKUmlnaHQsIGxldCBtZSBkb3VibGUgY2hlY2sgdGhhdCBgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgaXMgc3VmZmljaWVudC4gQWhhLCBldmVuIGlmIGBmdHJhY2VfZ3JhcGhfYWN0aXZlYCBpcyAqZmFsc2UqLCB0aGlzIGNhbiBzdGlsbCBoYXBwZW4hIEJlY2F1c2UgYGR1cF90YXNrX3N0cnVjdGAgY29waWVzIGB0LSZndDtyZXRfc3RhY2tgIGZyb20gdGhlIHBhcmVudCByZWdhcmRsZXNzLiBBcyBsb25nIGFzIHRoZSBwYXJlbnQgaGFzIGhhZCB0cmFjaW5nIGVuYWJsZWQgYXQgc29tZSBwb2ludCwgYHQtJmd0O3JldF9zdGFja2AgbWlnaHQgYmUgbm9uLU5VTEwuIFRoZW4gdGhlIGVycm9yIHBhdGggdHJpZ2dlcnMgdGhlIFVBRi4KCk9rYXksIHNvIHRoZSBmaXggaXM6IHdlIG1vdmUgdGhhdCBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgY2FsbCAqYmVmb3JlKiBhbnkgZmFsbGlibGUgb3BlcmF0aW9ucy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IGBmcmVlX3Rhc2tgIGlzIGFjdHVhbGx5IHRoZSBvbmUgY2FsbGluZyBgZnRyYWNlX2dyYXBoX2V4aXRfdGFza2AgdGhvdWdoLCB0byBjb25maXJtIHRoZSBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdHJhY2VfZ3JhcGhfZXhpdF90YXNrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZnRyYWNlLmg9MTM0ND1leHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNDU6ZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzQ2LWV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X2lkbGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjcHUpO1xuLS1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmg9MTM2ND1zdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgfVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzY1OnN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkgeyB9XG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNjYtc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X2lkbGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjcHUpIHsgfVxuLS1cbmtlcm5lbC9mb3JrLmM9NTMzPXZvaWQgZnJlZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuLS1cbmtlcm5lbC9mb3JrLmMtNTU1LVx0cnRfbXV0ZXhfZGVidWdfdGFza19mcmVlKHRzayk7XG5rZXJuZWwvZm9yay5jOjU1NjpcdGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2sodHNrKTtcbmtlcm5lbC9mb3JrLmMtNTU3LVx0YXJjaF9yZWxlYXNlX3Rhc2tfc3RydWN0KHRzayk7XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTExNjA9dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE3OS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMTgwOnZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE4MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDUyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHJldF9zdGFja2AgVXNlLUFmdGVyLUZyZWUgQnVnKioKCk9rYXksIHNvIGBmcmVlX3Rhc2tgICpkb2VzKiBjYWxsIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYC4gRXhjZWxsZW50LCB0aGUgYnVnIGlzIGV4YWN0bHkgYXMgSSBpbml0aWFsbHkgc3VzcGVjdGVkLiBMZXQmIzM5O3MgYnJlYWsgaXQgZG93biBhZ2FpbiBpbiBteSBtaW5kOgoKMS4gIEEgcGFyZW50IHByb2Nlc3MgaGFzIGl0cyBgcmV0X3N0YWNrYCBtZW1vcnkgYWxsb2NhdGVkLgoyLiAgYGZvcmsoKWAgaXMgaW52b2tlZCwgY3JlYXRpbmcgYSBjaGlsZCBwcm9jZXNzLgozLiAgYGR1cF90YXNrX3N0cnVjdGAgY29waWVzIHRoZSBgdGFza19zdHJ1Y3RgLCBtZWFuaW5nIHRoZSBjaGlsZCBwcm9jZXNzJiMzOTtzIGByZXRfc3RhY2tgIHBvaW50ZXIgKmFsc28qIHBvaW50cyB0byB0aGUgcGFyZW50JiMzOTtzIGByZXRfc3RhY2tgIG1lbW9yeS4gTWFrZXMgc2Vuc2UuCjQuICBUaGVuLCBhIGZhbGxpYmxlIG9wZXJhdGlvbiBsaWtlIGBjb3B5X2V4ZWNfc3RhdGVgIG9yIGBjb3B5X2NyZWRzYCBmYWlscy4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBwb2ludC4KNS4gIENvbnRyb2wganVtcHMgdG8gYSBgYmFkX2ZvcmtfZnJlZWAgcGF0aCAob3Igc2ltaWxhciksIHVsdGltYXRlbHkgbGVhZGluZyB0byBgZnJlZV90YXNrKGNoaWxkKWAuCjYuICBIZXJlJiMzOTtzIHdoZXJlIGl0IGdvZXMgc291dGg6IGBmcmVlX3Rhc2tgIGNhbGxzIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKGNoaWxkKWAuCjcuICBgZnRyYWNlX2dyYXBoX2V4aXRfdGFza2AgdGhlbiBmcmVlcyBgY2hpbGQtJmd0O3JldF9zdGFja2AsIHdoaWNoIGlzLCBpbiByZWFsaXR5LCAqdGhlIHBhcmVudCYjMzk7cyogYHJldF9zdGFja2AgbWVtb3J5LiBBIGNsYXNzaWMuCjguICBUaGUgcGFyZW50LCBvYmxpdmlvdXMgdG8gdGhpcywgY29udGludWVzIGV4ZWN1dGluZyBhbmQsIGluZXZpdGFibHksIHVzZXMgaXRzIChub3cgZnJlZWQpIGByZXRfc3RhY2tgLCByZXN1bHRpbmcgaW4gYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LgoKVGhlIGZpeCwgbW92aW5nIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCDigJMgd2hpY2gsIGNyaXRpY2FsbHksICpzZXRzKiBgdC0mZ3Q7cmV0X3N0YWNrID0gTlVMTGAg4oCTICpiZWZvcmUqIGFueSBwb3RlbnRpYWxseSBmYWlsaW5nIG9wZXJhdGlvbnMgYWZ0ZXIgYGR1cF90YXNrX3N0cnVjdGAsIGlzIGNsZWFuLiBJdCBlbnN1cmVzIHRoYXQgdGhlIGNoaWxkJiMzOTtzIGByZXRfc3RhY2tgIGlzIGV4cGxpY2l0bHkgbnVsbGlmaWVkICpiZWZvcmUqIGFueSBjaGFuY2Ugb2YgY2xlYW51cC4gSXQmIzM5O3MgYSBuaWNlLCBmdW5jdGlvbmFsIGZpeC4gTXkgc3BpZGV5LXNlbnNlIHNheXMgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBXZSYjMzk7bGwgbmVlZCBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCB0byByZXByb2R1Y2UgdGhlIGJ1Zy4gVGltZSB0byBjaGVjayBga2VybmVsL3RyYWNlL0tjb25maWdgIHRvIGNvbmZpcm0gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZVTkNUSU9OX0dSQVBIX1RSQUNFUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZz0yMzU9Y29uZmlnIEZVTkNUSU9OX1RSQUNFUlxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTI1My1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjI1NDpjb25maWcgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0yNTUtXHRib29sIFwmIzM0O0tlcm5lbCBGdW5jdGlvbiBHcmFwaCBUcmFjZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczMjIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlcGVuZGVuY3kgRGVlcCBEaXZlKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYC4gSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhLCBzbyBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSBsaWtlbHkgY3VscHJpdHMuIEkga25vdyB0aGF0IHN1Y2ggYSB0cmFjZXIgbGlrZWx5IGhvb2tzIGludG8gdGhlIGV4ZWN1dGlvbiBvZiBhIGZ1bmN0aW9uIGdyYXBoIGluIHNvbWUgd2F5LiBTbywgZmlyc3QsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgY29yZSBjb21wb25lbnRzIGl0IGludGVyYWN0cyB3aXRoLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHN0YXRpYyBvciBkeW5hbWljIGFuYWx5c2lzIHRvb2w/IERvZXMgaXQgcmVseSBvbiBpbnN0cnVtZW50YXRpb24sIGJ5dGVjb2RlIG1hbmlwdWxhdGlvbiwgb3IgcGVyaGFwcyBwcm9maWxpbmcgZGF0YT8gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB0aGUgdHJhY2VyIHVzZXMgYW55IGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB0byBzdG9yZSB0aGUgZ3JhcGggaW5mb3JtYXRpb24sIGFuZCB3aGV0aGVyIGl0IGludGVyYWN0cyB3aXRoIGFueSBzcGVjaWZpYyBydW50aW1lIGVudmlyb25tZW50cyBvciBsaWJyYXJpZXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgcG90ZW50aWFsIHJpc2tzLCBwb2ludHMgb2YgZmFpbHVyZSBhbmQgYXJlYXMgdGhhdCBhcmUgbW9yZSBjb21wbGljYXRlZCB0aGFuIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTA6XHRcdCAgKHRoZSBib290dXAgZGVmYXVsdCksIHRoZW4gdGhlIG92ZXJoZWFkIG9mIHRoZSBpbnN0cnVjdGlvbnMgaXMgdmVyeVxuIDI1MTpcdFx0ICBzbWFsbCBhbmQgbm90IG1lYXN1cmFibGUgZXZlbiBpbiBtaWNyby1iZW5jaG1hcmtzIChhdCBsZWFzdCBvblxuIDI1MjpcdFx0ICB4ODYsIGJ1dCBtYXkgaGF2ZSBpbXBhY3Qgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcykuXG4gMjUzOlx0XG4gMjU0Olx0Y29uZmlnIEZVTkNUSU9OX0dSQVBIX1RSQUNFUlxuIDI1NTpcdFx0Ym9vbCBcJiMzNDtLZXJuZWwgRnVuY3Rpb24gR3JhcGggVHJhY2VyXCYjMzQ7XG4gMjU2Olx0XHRkZXBlbmRzIG9uIEhBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXG4gMjU3Olx0XHRkZXBlbmRzIG9uIEZVTkNUSU9OX1RSQUNFUlxuIDI1ODpcdFx0ZGVwZW5kcyBvbiAhWDg2XzMyIHx8ICFDQ19PUFRJTUlaRV9GT1JfU0laRVxuIDI1OTpcdFx0ZGVmYXVsdCB5XG4gMjYwOlx0XHRoZWxwXG4gMjYxOlx0XHQgIEVuYWJsZSB0aGUga2VybmVsIHRvIHRyYWNlIGEgZnVuY3Rpb24gYXQgYm90aCBpdHMgcmV0dXJuXG4gMjYyOlx0XHQgIGFuZCBpdHMgZW50cnkuXG4gMjYzOlx0XHQgIEl0cyBmaXJzdCBwdXJwb3NlIGlzIHRvIHRyYWNlIHRoZSBkdXJhdGlvbiBvZiBmdW5jdGlvbnMgYW5kXG4gMjY0Olx0XHQgIGRyYXcgYSBjYWxsIGdyYXBoIGZvciBlYWNoIHRocmVhZCB3aXRoIHNvbWUgaW5mb3JtYXRpb24gbGlrZVxuIDI2NTpcdFx0ICB0aGUgcmV0dXJuIHZhbHVlLiBUaGlzIGlzIGRvbmUgYnkgc2V0dGluZyB0aGUgY3VycmVudCByZXR1cm5cbiAyNjY6XHRcdCAgYWRkcmVzcyBvbiB0aGUgY3VycmVudCB0YXNrIHN0cnVjdHVyZSBpbnRvIGEgc3RhY2sgb2YgY2FsbHMuXG4gMjY3Olx0XG4gMjY4Olx0Y29uZmlnIEZVTkNUSU9OX0dSQVBIX1JFVFZBTFxuIDI2OTpcdFx0Ym9vbCBcJiMzNDtLZXJuZWwgRnVuY3Rpb24gR3JhcGggUmV0dXJuIFZhbHVlXCYjMzQ7XG4gMjcwOlx0XHRkZXBlbmRzIG9uIEhBVkVfRlVOQ1RJT05fR1JBUEhfRlJFR1NcbiAyNzE6XHRcdGRlcGVuZHMgb24gRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXG4gMjcyOlx0XHRkZWZhdWx0IG5cbiAyNzM6XHRcdGhlbHBcbiAyNzQ6XHRcdCAgU3VwcG9ydCByZWNvcmRpbmcgYW5kIHByaW50aW5nIHRoZSBmdW5jdGlvbiByZXR1cm4gdmFsdWUgd2hlblxuIDI3NTpcdFx0ICB1c2luZyBmdW5jdGlvbiBncmFwaCB0cmFjZXIuIEl0IGNhbiBiZSBoZWxwZnVsIHRvIGxvY2F0ZSBmdW5jdGlvbnNcbiAyNzY6XHRcdCAgdGhhdCByZXR1cm4gZXJyb3JzLiBUaGlzIGZlYXR1cmUgaXMgb2ZmIGJ5IGRlZmF1bHQsIGFuZCB5b3UgY2FuXG4gMjc3Olx0XHQgIGVuYWJsZSBpdCB2aWEgdGhlIHRyYWNlIG9wdGlvbiBmdW5jZ3JhcGgtcmV0dmFsLlxuIDI3ODpcdFx0ICBTZWUgRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0XG4gMjc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDMxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGVwZW5kZW5jaWVzIGFuZCBUcmFjaW5nKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyB0aGF0IGBGVU5DVElPTl9HUkFQSF9UUkFDRVJgIHJlbGllcyBvbiBgRlVOQ1RJT05fVFJBQ0VSYC4gVGhhdCYjMzk7cyBub3QgdW5leHBlY3RlZDsgZ3JhcGggdHJhY2luZyBvZnRlbiBidWlsZHMgdXBvbiBtb3JlIGJhc2ljIGZ1bmN0aW9uLWxldmVsIHRyYWNpbmcuIFRvIGJlIGNlcnRhaW4gYWJvdXQgaG93IHRoZXkgcmVsYXRlLCB0aGUgcGxhY2UgdG8gc3RhcnQgaXMgd2l0aCBgRlVOQ1RJT05fVFJBQ0VSYC4gTGV0JiMzOTtzIHRha2UgYSBsb29rIGF0ICppdCogZmlyc3QuIFVuZGVyc3RhbmRpbmcgKnRoYXQqIGNvbXBvbmVudCYjMzk7cyBjb3JlIGZ1bmN0aW9uYWxpdHkgaXMgZ29pbmcgdG8gaW5mb3JtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHdob2xlIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjMwOlx0XHRoZWxwXG4gMjMxOlx0XHQgIEVuYWJsZSBkZXZlbG9wZXIgdG8gc2V0dXAgZnRyYWNlIHN1YnN5c3RlbSB2aWEgc3VwcGxlbWVudGFsXG4gMjMyOlx0XHQgIGtlcm5lbCBjbWRsaW5lIGF0IGJvb3QgdGltZSBmb3IgZGVidWdnaW5nICh0cmFjaW5nKSBkcml2ZXJcbiAyMzM6XHRcdCAgaW5pdGlhbGl6YXRpb24gYW5kIGJvb3QgcHJvY2Vzcy5cbiAyMzQ6XHRcbiAyMzU6XHRjb25maWcgRlVOQ1RJT05fVFJBQ0VSXG4gMjM2Olx0XHRib29sIFwmIzM0O0tlcm5lbCBGdW5jdGlvbiBUcmFjZXJcJiMzNDtcbiAyMzc6XHRcdGRlcGVuZHMgb24gSEFWRV9GVU5DVElPTl9UUkFDRVJcbiAyMzg6XHRcdHNlbGVjdCBLQUxMU1lNU1xuIDIzOTpcdFx0c2VsZWN0IEdFTkVSSUNfVFJBQ0VSXG4gMjQwOlx0XHRzZWxlY3QgQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSXG4gMjQxOlx0XHRzZWxlY3QgR0xPQlxuIDI0MjpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gMjQzOlx0XHRzZWxlY3QgVEFTS1NfUlVERV9SQ1VcbiAyNDQ6XHRcdGhlbHBcbiAyNDU6XHRcdCAgRW5hYmxlIHRoZSBrZXJuZWwgdG8gdHJhY2UgZXZlcnkga2VybmVsIGZ1bmN0aW9uLiBUaGlzIGlzIGRvbmVcbiAyNDY6XHRcdCAgYnkgdXNpbmcgYSBjb21waWxlciBmZWF0dXJlIHRvIGluc2VydCBhIHNtYWxsLCA1LWJ5dGUgTm8tT3BlcmF0aW9uXG4gMjQ3Olx0XHQgIGluc3RydWN0aW9uIGF0IHRoZSBiZWdpbm5pbmcgb2YgZXZlcnkga2VybmVsIGZ1bmN0aW9uLCB3aGljaCBOT1BcbiAyNDg6XHRcdCAgc2VxdWVuY2UgaXMgdGhlbiBkeW5hbWljYWxseSBwYXRjaGVkIGludG8gYSB0cmFjZXIgY2FsbCB3aGVuXG4gMjQ5Olx0XHQgIHRyYWNpbmcgaXMgZW5hYmxlZCBieSB0aGUgYWRtaW5pc3RyYXRvci4gSWYgaXQmIzM5O3MgcnVudGltZSBkaXNhYmxlZFxuIDI1MDpcdFx0ICAodGhlIGJvb3R1cCBkZWZhdWx0KSwgdGhlbiB0aGUgb3ZlcmhlYWQgb2YgdGhlIGluc3RydWN0aW9ucyBpcyB2ZXJ5XG4gMjUxOlx0XHQgIHNtYWxsIGFuZCBub3QgbWVhc3VyYWJsZSBldmVuIGluIG1pY3JvLWJlbmNobWFya3MgKGF0IGxlYXN0IG9uXG4gMjUyOlx0XHQgIHg4NiwgYnV0IG1heSBoYXZlIGltcGFjdCBvbiBvdGhlciBhcmNoaXRlY3R1cmVzKS5cbiAyNTM6XHRcbiAyNTQ6XHRjb25maWcgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXG4gMjU1Olx0XHRib29sIFwmIzM0O0tlcm5lbCBGdW5jdGlvbiBHcmFwaCBUcmFjZXJcJiMzNDtcbiAyNTY6XHRcdGRlcGVuZHMgb24gSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVJcbiAyNTc6XHRcdGRlcGVuZHMgb24gRlVOQ1RJT05fVFJBQ0VSXG4gMjU4Olx0XHRkZXBlbmRzIG9uICFYODZfMzIgfHwgIUNDX09QVElNSVpFX0ZPUl9TSVpFXG4gMjU5Olx0XHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3MDAKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgSSBuZWVkIHRvIGdldCB0aGlzIHRyYWNpbmcgc3lzdGVtIHNxdWFyZWQgYXdheS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgd2UmIzM5O2xsIG5lZWQgYm90aCBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCBhbmQganVzdCBhIGJhc2ljIGBGVU5DVElPTl9UUkFDRVJgLiBIb2xkIG9uIHRob3VnaCwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIGBGVU5DVElPTl9UUkFDRVJgIGlzbiYjMzk7dCBhIHNpbXBsZSBvbi9vZmYgc3dpdGNoOyBpdCBoaW5nZXMgb24gYEhBVkVfRlVOQ1RJT05fVFJBQ0VSYCwgYW5kIHRoYXQmIzM5O3MgdXN1YWxseSBzZWxlY3RlZCBhdCB0aGUgYXJjaGl0ZWN0dXJlIGxldmVsLCBtZWFuaW5nIGl0JiMzOTtzIGRlcGVuZGVudCBvbiB0aGUgaGFyZHdhcmUuIFJpZ2h0LiBBbmQgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhpcywgSSBzaG91bGQgcHJvYmFibHkgY29uZmlybSB3aGV0aGVyIGBGVFJBQ0VgIGl0c2VsZiBpcyBldmVuIGVuYWJsZWQuIGBGVFJBQ0VgIGlzIHRoZSBiaWcga2FodW5hLCB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgYWxsIHRoaXMgdHJhY2luZy4gQmV0dGVyIGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBzZWxlY3RlZCBmaXJzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZUUkFDRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZz0xOTg9Y29uZmlnIFRSQUNJTkdfU1VQUE9SVFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTIwMy1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjIwNDptZW51Y29uZmlnIEZUUkFDRVxua2VybmVsL3RyYWNlL0tjb25maWctMjA1LVx0Ym9vbCBcJiMzNDtUcmFjZXJzXCYjMzQ7XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9NTg4PWNvbmZpZyBFTkFCTEVfREVGQVVMVF9UUkFDRVJTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctNTk2LVxua2VybmVsL3RyYWNlL0tjb25maWc6NTk3OmNvbmZpZyBGVFJBQ0VfU1lTQ0FMTFNcbmtlcm5lbC90cmFjZS9LY29uZmlnLTU5OC1cdGJvb2wgXCYjMzQ7VHJhY2Ugc3lzY2FsbHNcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz04Njg9Y29uZmlnIEJQRl9LUFJPQkVfT1ZFUlJJREVcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NzYtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4Nzc6Y29uZmlnIEZUUkFDRV9NQ09VTlRfVVNFX1BBVENIQUJMRV9GVU5DVElPTl9FTlRSWVxua2VybmVsL3RyYWNlL0tjb25maWctODc4LVx0Ym9vbFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTg4MC1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjg4MTpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfQ0Ncbmtlcm5lbC90cmFjZS9LY29uZmlnLTg4Mi1cdGRlZl9ib29sIHlcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04ODYtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4ODc6Y29uZmlnIEZUUkFDRV9NQ09VTlRfVVNFX09CSlRPT0xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg4OC1cdGRlZl9ib29sIHlcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04OTQtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4OTU6Y29uZmlnIEZUUkFDRV9NQ09VTlRfVVNFX1JFQ09SRE1DT1VOVFxua2VybmVsL3RyYWNlL0tjb25maWctODk2LVx0ZGVmX2Jvb2wgeVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTEwMjE9Y29uZmlnIFRSQUNFX0VWQUxfTUFQX0ZJTEVcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDQ4LVxua2VybmVsL3RyYWNlL0tjb25maWc6MTA0OTpjb25maWcgRlRSQUNFX1JFQ09SRF9SRUNVUlNJT05cbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNTAtXHRib29sIFwmIzM0O1JlY29yZCBmdW5jdGlvbnMgdGhhdCByZWN1cnNlIGluIGZ1bmN0aW9uIHRyYWNpbmdcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDYyLVxua2VybmVsL3RyYWNlL0tjb25maWc6MTA2Mzpjb25maWcgRlRSQUNFX1JFQ09SRF9SRUNVUlNJT05fU0laRVxua2VybmVsL3RyYWNlL0tjb25maWctMTA2NC1cdGludCBcJiMzNDtNYXggbnVtYmVyIG9mIHJlY3Vyc2VkIGZ1bmN0aW9ucyB0byByZWNvcmRcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDczLVxua2VybmVsL3RyYWNlL0tjb25maWc6MTA3NDpjb25maWcgRlRSQUNFX1ZBTElEQVRFX1JDVV9JU19XQVRDSElOR1xua2VybmVsL3RyYWNlL0tjb25maWctMTA3NS1cdGJvb2wgXCYjMzQ7VmFsaWRhdGUgUkNVIGlzIG9uIGR1cmluZyBmdHJhY2UgZXhlY3V0aW9uXCYjMzQ7XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9MTEwMT1jb25maWcgR0NPVl9QUk9GSUxFX0ZUUkFDRVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMTItXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMTEzOmNvbmZpZyBGVFJBQ0VfU0VMRlRFU1Rcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMTQtXHRib29sXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTE1LVxua2VybmVsL3RyYWNlL0tjb25maWc6MTExNjpjb25maWcgRlRSQUNFX1NUQVJUVVBfVEVTVFxua2VybmVsL3RyYWNlL0tjb25maWctMTExNy1cdGJvb2wgXCYjMzQ7UGVyZm9ybSBhIHN0YXJ0dXAgdGVzdCBvbiBmdHJhY2VcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMTM2PWNvbmZpZyBFVkVOVF9UUkFDRV9URVNUX1NZU0NBTExTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMTE0Ny1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjExNDg6Y29uZmlnIEZUUkFDRV9TT1JUX1NUQVJUVVBfVEVTVFxua2VybmVsL3RyYWNlL0tjb25maWctMTE0OS0gICAgICAgYm9vbCBcJiMzNDtWZXJpZnkgY29tcGlsZSB0aW1lIHNvcnRpbmcgb2YgZnRyYWNlIGZ1bmN0aW9uc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc4OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZUUkFDRSBDb25maWd1cmF0aW9uIEFuYWx5c2lzKioKCk9rYXksIHNvIGBGVFJBQ0VgIGlzIGRlZmluaXRlbHkgYSBtZW51Y29uZmlnIG9wdGlvbi4gVGhhdCBtZWFucyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gY29uc2lkZXJpbmcgYWxsIHRoZSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zOiBgRlRSQUNFYCwgYEZVTkNUSU9OX1RSQUNFUmAsIGFuZCBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYC4gSG9sZCBvbiBhIHNlY29uZCwgd2FzbiYjMzk7dCBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgaWYgYEZVTkNUSU9OX1RSQUNFUmAgd2FzIGVuYWJsZWQ/IFllcywgSSBiZWxpZXZlIHRoYXQmIzM5O3MgcmlnaHQuIEp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9mIGBGVFJBQ0VgIGl0c2VsZiBhbmQgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBkZXBlbmRlbnQgY29uZmlndXJhdGlvbnMgSSYjMzk7bSBtaXNzaW5nLiBUaW1lIHRvIGRpZyBpbiBhbmQgY29uZmlybSB0aGUgZXhhY3QgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDA6XHRcdGRlcGVuZHMgb24gVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVFxuIDIwMTpcdFx0ZGVwZW5kcyBvbiBTVEFDS1RSQUNFX1NVUFBPUlRcbiAyMDI6XHRcdGRlZmF1bHQgeVxuIDIwMzpcdFxuIDIwNDpcdG1lbnVjb25maWcgRlRSQUNFXG4gMjA1Olx0XHRib29sIFwmIzM0O1RyYWNlcnNcJiMzNDtcbiAyMDY6XHRcdGRlcGVuZHMgb24gVFJBQ0lOR19TVVBQT1JUXG4gMjA3Olx0XHRkZWZhdWx0IHkgaWYgREVCVUdfS0VSTkVMXG4gMjA4Olx0XHRoZWxwXG4gMjA5Olx0XHQgIEVuYWJsZSB0aGUga2VybmVsIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUuXG4gMjEwOlx0XG4gMjExOlx0aWYgRlRSQUNFXG4gMjEyOlx0XG4gMjEzOlx0Y29uZmlnIFRSQUNFRlNfQVVUT01PVU5UX0RFUFJFQ0FURURcbiAyMTQ6XHRcdGJvb2wgXCYjMzQ7QXV0b21vdW50IHRyYWNlZnMgb24gZGVidWdmcyBbREVQUkVDQVRFRF1cJiMzNDtcbiAyMTU6XHRcdGRlcGVuZHMgb24gVFJBQ0lOR1xuIDIxNjpcdFx0ZGVmYXVsdCB5XG4gMjE3Olx0XHRoZWxwXG4gMjE4Olx0XHQgIFRoZSB0cmFjaW5nIGludGVyZmFjZSB3YXMgbW92ZWQgZnJvbSAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nXG4gMjE5Olx0XHQgIHRvIC9zeXMva2VybmVsL3RyYWNpbmcgaW4gMjAxNSwgYnV0IHRoZSB0cmFjaW5nIGZpbGUgc3lzdGVtXG4gMjIwOlx0XHQgIHdhcyBzdGlsbCBhdXRvbW91bnRlZCBpbiAvc3lzL2tlcm5lbC9kZWJ1ZyBmb3IgYmFja3dhcmRcbiAyMjE6XHRcdCAgY29tcGF0aWJpbGl0eSB3aXRoIHRvb2xpbmcuXG4gMjIyOlx0XG4gMjIzOlx0XHQgIFRoZSBuZXcgaW50ZXJmYWNlIGhhcyBiZWVuIGFyb3VuZCBmb3IgbW9yZSB0aGFuIDEwIHllYXJzIGFuZFxuIDIyNDpcdFx0ICB0aGUgb2xkIGRlYnVnIG1vdW50IHdpbGwgc29vbiBiZSByZW1vdmVkLlxuIDIyNTpcdFxuIDIyNjpcdGNvbmZpZyBCT09UVElNRV9UUkFDSU5HXG4gMjI3Olx0XHRib29sIFwmIzM0O0Jvb3QtdGltZSBUcmFjaW5nIHN1cHBvcnRcJiMzNDtcbiAyMjg6XHRcdGRlcGVuZHMgb24gVFJBQ0lOR1xuIDIyOTpcdFx0c2VsZWN0IEJPT1RfQ09ORklHXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDQ1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGdW5jdGlvbiBUcmFjaW5nIGFuZCBCdWcgVHJpZ2dlcmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRvIGJlc3QgYXBwcm9hY2ggZnV6emluZyBhcm91bmQgYSBzcGVjaWZpYyBidWcgcmVsYXRlZCB0byBmdW5jdGlvbiB0cmFjaW5nLiAgYEZUUkFDRWAsIGBGVU5DVElPTl9UUkFDRVJgLCBhbmQgYEZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgYXJlIHRoZSByZWxldmFudCBjb25maWdzIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIFRoZSBjb3JlIGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkIGlzIGBjb3B5X3Byb2Nlc3NgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBmb2N1cyB0aGUgZnV6emVyIGRpcmVjdGx5IG9uIGBjb3B5X3Byb2Nlc3NgLiBIb3dldmVyLCB0aGF0JiMzOTtzIGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiwgY2FsbGVkIG9uIGV2ZXJ5IGZvcmsgYW5kIGNsb25lLiBUaGUgZnV6emVyIGFscmVhZHkgaGVhdmlseSB0YXJnZXRzIHRoZXNlIHN5c3RlbSBjYWxscy4gIElmIEkgemVybyBpbiBvbiBgY29weV9wcm9jZXNzYCwgaXQgd2lsbCBsaWtlbHkganVzdCBnaXZlIG1lIGEgc2tld2VkIGRpc3RyaWJ1dGlvbiwgYW5kIHByb2JhYmx5IG5vdCByZXZlYWwgYW55dGhpbmcgbmV3LgoKVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogY2FuIEkgc3RlZXIgdGhlIGZ1enplciB0b3dhcmQgdGhlICplcnJvciogcGF0aCBvZiBgY29weV9wcm9jZXNzYD8gVGhlc2UgZXJyb3IgcGF0aHMgYXJpc2UgZnJvbSBmYWlsdXJlcyB3aXRoaW4gdGhpbmdzIGxpa2UgYGNvcHlfZXhlY19zdGF0ZWAsIGBjb3B5X2NyZWRzYCwgYGNvcHlfbW1gLCBvciBgY29weV9uYW1lc3BhY2VzYC4gVGhvc2UgZmFpbHVyZXMgYXJlIHVzdWFsbHkgZHVlIHRvIG1lbW9yeSBhbGxvY2F0aW9uIHByb2JsZW1zICh3aGljaCBzeXprYWxsZXIgY2FuIGluZHVjZSB1c2luZyBmYXVsdCBpbmplY3Rpb24pIG9yIGludmFsaWQgYXJndW1lbnRzIHBhc3NlZCB0byBgY2xvbmUzYC4KCkNvbnNpZGVyaW5nIGBzeXNfY2xvbmUzYCBvciBgc3lzX2Nsb25lYCBhcmUgYWxzbyBnZW5lcmljLCB0aGF0IGRvZXNuJiMzOTt0IHNlZW0gcHJvbWlzaW5nIGVpdGhlci4gV2FpdCwgYnV0IHRoZSBidWcgcmVwb3J0IHNwZWNpZmljYWxseSBtZW50aW9ucyBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgYW5kIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYC4KCk15IGZpcnN0IGluY2xpbmF0aW9uIHdhcyB0byBhZGQgdGhvc2UgZnVuY3Rpb25zIHRvIGBGb2N1c1N5bWJvbHNgLCBob3Bpbmcgc3l6a2FsbGVyIHdvdWxkIHRyeSB0byByZWFjaCB0aGVtLiBUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZXkgYXJlIGNhbGxlZCB1bmNvbmRpdGlvbmFsbHkgZnJvbSB3aXRoaW4gYGNvcHlfcHJvY2Vzc2AgYW5kIGBmcmVlX3Rhc2tgLCAqaWYqIGBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCBpcyBlbmFibGVkLiAgU28sIHRoZXkmIzM5O3JlIGFsc28gaG90LXBhdGggZnVuY3Rpb25zLCBleGVjdXRlZCB3aXRoIGV2ZXJ5IGZvcmsvZXhpdC4KCk5vdywgd2FpdCBhIG1pbnV0ZSwgdGhlIHByb21wdCBzYXlzIHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLiBUaGlzIGlzIGltcG9ydGFudCB0byBhdm9pZCBhIHNrZXdlZCBkaXN0cmlidXRpb24uIEl0IGFsc28gc3RhdGVzIEkgc2hvdWxkIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiAgU28sIGxpc3RpbmcgYGNvcHlfcHJvY2Vzc2AsIGBmcmVlX3Rhc2tgIGFuZCBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgbWlnaHQgbm90IGJlIHRoZSByaWdodCBtb3ZlIGhlcmUsIGV2ZW4gdGhvdWdoIHRoZXkmIzM5O3JlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGZ1bmN0aW9ucyBpZGVudGlmaWVkIGluIHRoZSBidWcgcmVwb3J0LgoKQnV0IHdhaXQsIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBkb2VzIGEgY2hlY2s6IGl0IG9ubHkgZXhlY3V0ZXMgaWYgYGZ0cmFjZV9ncmFwaF9hY3RpdmVgIGlzIHRydWUuIEhtbSwgSSBuZWVkIHRvIHJldmlzaXQgYGtlcm5lbC90cmFjZS9mZ3JhcGguY2AgYW5kIHVuZGVyc3RhbmQgaG93IHRvIGdldCB0aGF0IGNvbmRpdGlvbiB0byBiZSB0cnVlLiBMZXQgbWUgZGl2ZSBiYWNrIGludG8gdGhhdCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9mZ3JhcGguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE1OTpcdC8qIEFsbG9jYXRlIGEgcmV0dXJuIHN0YWNrIGZvciBuZXdseSBjcmVhdGVkIHRhc2sgKi9cbjExNjA6XHR2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KVxuMTE2MTpcdHtcbjExNjI6XHRcdC8qIE1ha2Ugc3VyZSB3ZSBkbyBub3QgdXNlIHRoZSBwYXJlbnQgcmV0X3N0YWNrICovXG4xMTYzOlx0XHR0LVx1MDAzZXJldF9zdGFjayA9IE5VTEw7XG4xMTY0Olx0XHR0LVx1MDAzZWN1cnJfcmV0X3N0YWNrID0gMDtcbjExNjU6XHRcdHQtXHUwMDNlY3Vycl9yZXRfZGVwdGggPSAtMTtcbjExNjY6XHRcbjExNjc6XHRcdGlmIChmdHJhY2VfZ3JhcGhfYWN0aXZlKSB7XG4xMTY4Olx0XHRcdHVuc2lnbmVkIGxvbmcgKnJldF9zdGFjaztcbjExNjk6XHRcbjExNzA6XHRcdFx0aWYgKFdBUk5fT05fT05DRSghZmdyYXBoX3N0YWNrX2NhY2hlcCkpXG4xMTcxOlx0XHRcdFx0cmV0dXJuO1xuMTE3MjpcdFxuMTE3MzpcdFx0XHRyZXRfc3RhY2sgPSBrbWVtX2NhY2hlX2FsbG9jKGZncmFwaF9zdGFja19jYWNoZXAsIEdGUF9LRVJORUwpO1xuMTE3NDpcdFx0XHRpZiAoIXJldF9zdGFjaylcbjExNzU6XHRcdFx0XHRyZXR1cm47XG4xMTc2Olx0XHRcdGdyYXBoX2luaXRfdGFzayh0LCByZXRfc3RhY2spO1xuMTE3NzpcdFx0fVxuMTE3ODpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3NzQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMTk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJ1ZyBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneSBmb3IgS2VybmVsIFVzZS1BZnRlci1GcmVlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgaXMgZXhwb3J0ZWQsIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGNhbGxlZCBvbiBldmVyeSBmb3JrLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBjb3B5X3Byb2Nlc3NgLiBUaGUgY29yZSBvZiB0aGUgYnVnIGxpZXMgaW4gdGhlIGVycm9yIGhhbmRsaW5nIG9mIGBjb3B5X3Byb2Nlc3NgLiBJZiBhIGZhbGxpYmxlIG9wZXJhdGlvbiB3aXRoaW4gYGNvcHlfcHJvY2Vzc2AgZmFpbHMgKmJlZm9yZSogYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGlzIGNhbGxlZCwgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIGluIHRoZSBlcnJvciBwYXRoIGVuZHMgdXAgZnJlZWluZyB0aGUgcGFyZW50JiMzOTtzIGByZXRfc3RhY2tgLiBUaGlzIGlzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gVGhpcyBvY2N1cnMgcmVnYXJkbGVzcyBvZiBgZnRyYWNlX2dyYXBoX2FjdGl2ZWAsIGFzIGxvbmcgYXMgdGhlIHBhcmVudCB0YXNrIGF0IHNvbWUgcG9pbnQgaGFkIGBmdHJhY2VfZ3JhcGhfYWN0aXZlYCBzZXQgdG8gdHJ1ZS4KClRoZSBrZXkgdG8gdHJpZ2dlcmluZyB0aGlzIGxpZXMgaW4gdGhlIHRpbWluZyBvZiB0aGUgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGNhbGwgd2l0aGluIGBjb3B5X3Byb2Nlc3NgLiBUaGUgcGF0Y2ggZml4ZXMgdGhpcyBieSBtb3ZpbmcgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGVhcmxpZXIsIHJpZ2h0IGFmdGVyIGBkdXBfdGFza19zdHJ1Y3RgLgoKSG93IGRvIHdlIHRyaWdnZXIgdGhpcz8gV2UgbmVlZCB0byBlbmFibGUgZnRyYWNlIGdyYXBoIHRyYWNpbmcuIFRoYXQmIzM5O3MgZG9uZSB2aWEgdHJhY2Vmcywgd2hpY2ggc3l6a2FsbGVyIGFscmVhZHkga25vd3MgaG93IHRvIGZ1enouIFNvLCB3ZSYjMzk7cmUgbm90IHN0cmljdGx5IGZvY3VzaW5nIG9uIHRyYWNlZnMgZnVuY3Rpb25zIGhlcmUsIGJ1dCB0aGUgdHJhY2luZyAqbmVlZHMqIHRvIGJlIGVuYWJsZWQuCgpTaW5jZSB0aGUgZml4IG1vZGlmaWVzIGBjb3B5X3Byb2Nlc3NgLCB3aGljaCBpcyBhICpob3QgcGF0aCosIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggYEZvY3VzU3ltYm9sc2AuIExpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgd291bGQgc2tldyB0aGUgdGVzdCBkaXN0cmlidXRpb24uIEkgbmVlZCB0byBhdm9pZCBsaXN0aW5nIGBjb3B5X3Byb2Nlc3NgLCBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AsIG9yIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYC4gR2l2ZW4gdGhlIGJ1ZyYjMzk7cyBuYXR1cmUgYW5kIHRoZSBob3QgcGF0aCBjb25zaWRlcmF0aW9ucywgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIGJlIGVtcHR5LgoKTm93LCBhYm91dCB0aGUgY29uZmlncy4gV2UgbmVlZCBgRlRSQUNFYCwgYEZVTkNUSU9OX1RSQUNFUmAsIGFuZCBlc3BlY2lhbGx5IGBGVU5DVElPTl9HUkFQSF9UUkFDRVJgIHRvIGJlIGVuYWJsZWQuIGBGVU5DVElPTl9HUkFQSF9UUkFDRVJgIHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBvbmUuCgpMZXQmIzM5O3MgcXVpY2tseSByZXZpZXcgdGhlIGJ1ZyBhZ2FpbiB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyYjMzk7cyBjbGVhci4gSW4gdGhlIHByZS1wYXRjaCBjb2RlLCB0aGUgY2FsbCB0byBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgaGFwcGVuZWQgKmFmdGVyKiBtYW55IHBvdGVudGlhbGx5IGZhaWxpbmcgb3BlcmF0aW9ucywgd2hpY2ggY291bGQgbGVhZCB0byBgZnRyYWNlX2dyYXBoX2V4aXRfdGFza2AgZnJlZWluZyB0aGUgcGFyZW50JiMzOTtzIHN0YWNrIGluIGFuIGVycm9yIHBhdGguIFRoZSBmaXggbW92ZXMgdGhlIGluaXRpYWxpemF0aW9uIGVhcmxpZXIsIHdoaWNoIGlzIHRoZSBrZXkuCgpUaGlzIGlzIGEgdmVyeSBjbGVhciBhbmQgaW1wb3J0YW50IGZ1bmN0aW9uYWwgZml4IQoKVGhlcmVmb3JlLCB0aGUgc3RyYXRlZ3kgd2lsbCBiZToKCiogICAqKldvcnRoRnV6emluZyoqOiBUcnVlCiogICAqKkZvY3VzU3ltYm9scyoqOiBFbXB0eSBcW1xdICh0byBhdm9pZCBob3QgcGF0aCBpc3N1ZXMpCiogICAqKkVuYWJsZUNvbmZpZ3MqKjogXFsmIzM0O0ZUUkFDRSYjMzQ7LCAmIzM0O0ZVTkNUSU9OX1RSQUNFUiYjMzQ7LCAmIzM0O0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiYjMzQ7XF0KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHVwX3Rhc2tfc3RydWN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdD0zNjg2PWNhbiBjdXJyZW50bHkgb25seSBoYXZlIGV2ZW50cyBlbmFibGVkIGZvciB0aGVtLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdC0zNzEyLSAgICAgICAgICAgICAgYmFzaC0yMDQ0ICBbMDAyXSBkLi4uIDEwNTk0LjQ4MTAzNDogX19pbmNfem9uZV9zdGF0ZSBcdTAwM2Mtem9uZV9zdGF0aXN0aWNzXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3Q6MzcxMzogICAgICAgICAgICAgIGJhc2gtMjA0NCAgWzAwMl0gLi4uLiAxMDU5NC40ODEwMzU6IGFyY2hfZHVwX3Rhc2tfc3RydWN0IFx1MDAzYy1jb3B5X3Byb2Nlc3NcbkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdC0zNzE0LSAgWy4uLl1cbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmM9MjMyPWludCBjb3B5X3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMtMjYzLVx0ICAgdmFsdWUgZnJvbSB0aGUgcGFyZW50LCB3aGljaCB3aWxsIGhhdmUgYmVlbiBzZXQgYnkgdGhlIGJsb2NrXG5hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmM6MjY0Olx0ICAgY29weSBpbiBkdXBfdGFza19zdHJ1Y3QuICBUaGlzIGlzIG5vbi1pbnR1aXRpdmUsIGJ1dCBpc1xuYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jLTI2NS1cdCAgIHJlcXVpcmVkIGZvciBwcm9wZXIgb3BlcmF0aW9uIGluIHRoZSBjYXNlIG9mIGEgdGhyZWFkZWRcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9mcHNpbWQuYz0xNzY0PXZvaWQgZnBzaW1kX3Jlc3RvcmVfY3VycmVudF9zdGF0ZSh2b2lkKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2Zwc2ltZC5jLTE3NjctXHQgKiBUSUZfRk9SRUlHTl9GUFNUQVRFIGlzIHNldCBvbiB0aGUgaW5pdCB0YXNrIGFuZCBjb3BpZWQgYnlcbmFyY2gvYXJtNjQva2VybmVsL2Zwc2ltZC5jOjE3Njg6XHQgKiBhcmNoX2R1cF90YXNrX3N0cnVjdCgpIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBGUC9TSU1EIGlzIGRldGVjdGVkLlxuYXJjaC9hcm02NC9rZXJuZWwvZnBzaW1kLmMtMTc2OS1cdCAqIFRodXMgdXNlciB0aHJlYWRzIGNhbiBoYXZlIHRoaXMgc2V0IGV2ZW4gd2hlbiBGUC9TSU1EIGhhc24mIzM5O3QgYmVlblxuLS1cbmFyY2gvYXJtNjQva2VybmVsL3Byb2Nlc3MuYz0zNDQ9dm9pZCBhcmNoX3JlbGVhc2VfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvcHJvY2Vzcy5jLTM0OC1cbmFyY2gvYXJtNjQva2VybmVsL3Byb2Nlc3MuYzozNDk6aW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYylcbmFyY2gvYXJtNjQva2VybmVsL3Byb2Nlc3MuYy0zNTAte1xuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9wcm9jZXNzLmM9MTEwPXZvaWQgZXhpdF90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Byb2Nlc3MuYy0xMTMtXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvcHJvY2Vzcy5jOjExNDppbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Byb2Nlc3MuYy0xMTUte1xuLS1cbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaD0zMT1leHRlcm4gdW5zaWduZWQgaW50IHZjZWRfY291bnQsIHZjZWlfY291bnQ7XG5hcmNoL21pcHMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6MzI6ZXh0ZXJuIGludCBhcmNoX2R1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCwgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMpO1xuYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTMzLVxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jPTcxPXZvaWQgZXhpdF90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxuYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMtODAtXG5hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYzo4MTppbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKVxuYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMtODIte1xuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oPTU0PXN0cnVjdCB0aHJlYWRfaW5mbyB7XG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgtODgtLyogaG93IHRvIGdldCB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdCBmcm9tIEMgKi9cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oOjg5OmV4dGVybiBpbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKTtcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oLTkwLVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jPTE2NzY9RVhQT1JUX1NZTUJPTF9HUEwoc2V0X3RocmVhZF90aWRyKTtcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYy0xNjgzLSAqL1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmM6MTY4NDppbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMtMTY4NS17XG4tLVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaD0xODk9ZXh0ZXJuIHZvaWQgcmlzY3ZfZmlsbF9od2NhcCh2b2lkKTtcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6MTkwOmV4dGVybiBpbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKTtcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtMTkxLVxuLS1cbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaD0xMDE9dm9pZCBhcmNoX3JlbGVhc2VfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oOjEwMjppbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKTtcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaC0xMDMtXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvcHJvY2Vzcy5jPTIwOT12b2lkIGFyY2hfcmVsZWFzZV90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9wcm9jZXNzLmMtMjE1LVxuYXJjaC9yaXNjdi9rZXJuZWwvcHJvY2Vzcy5jOjIxNjppbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKVxuYXJjaC9yaXNjdi9rZXJuZWwvcHJvY2Vzcy5jLTIxNy17XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmM9Nzk9dm9pZCBhcmNoX3JlbGVhc2VfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMtODQtXG5hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYzo4NTppbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKVxuYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMtODYte1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jPTEwNj1pbnQgY29weV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMtMTYxLVx0ICogQ2xlYXIgdGhlIHJ1bnRpbWUgaW5zdHJ1bWVudGF0aW9uIGZsYWcgYWZ0ZXIgdGhlIGFib3ZlIGNoaWxkcmVnc1xuYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmM6MTYyOlx0ICogY29weS4gVGhlIENCIHBvaW50ZXIgd2FzIGFscmVhZHkgY2xlYXJlZCBpbiBhcmNoX2R1cF90YXNrX3N0cnVjdCgpLlxuYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMtMTYzLVx0ICovXG4tLVxuYXJjaC9zaC9rZXJuZWwvcHJvY2Vzcy5jPTE3PUVYUE9SVF9TWU1CT0woX19zdGFja19jaGtfZ3VhcmQpO1xuLS1cbmFyY2gvc2gva2VybmVsL3Byb2Nlc3MuYy0yMy0gKi9cbmFyY2gvc2gva2VybmVsL3Byb2Nlc3MuYzoyNDppbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKVxuYXJjaC9zaC9rZXJuZWwvcHJvY2Vzcy5jLTI1LXtcbi0tXG5hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzY0LmM9NTcwPWludCBjb3B5X3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylcbi0tXG5hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzY0LmMtNjUwLSAqL1xuYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc182NC5jOjY1MTppbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKVxuYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc182NC5jLTY1Mi17XG4tLVxuYXJjaC91bS9rZXJuZWwvcHJvY2Vzcy5jPTE4OD12b2lkIGluaXRpYWxfdGhyZWFkX2NiKHZvaWQgKCpwcm9jKSh2b2lkICopLCB2b2lkICphcmcpXG4tLVxuYXJjaC91bS9rZXJuZWwvcHJvY2Vzcy5jLTE5Mi1cbmFyY2gvdW0va2VybmVsL3Byb2Nlc3MuYzoxOTM6aW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LFxuYXJjaC91bS9rZXJuZWwvcHJvY2Vzcy5jLTE5NC1cdFx0XHQgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMpXG4tLVxuYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYz05OT1ERUZJTkVfUEVSX0NQVShib29sLCBjYWNoZV9zdGF0ZV9pbmNvaGVyZW50KTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jLTEwNC0gKi9cbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmM6MTA1OmludCBhcmNoX2R1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCwgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMpXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jLTEwNi17XG4tLVxuYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYz0yMDQ9dm9pZCBmbHVzaF90aHJlYWQodm9pZClcbi0tXG5hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jLTIxNi0gKi9cbmFyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmM6MjE3OmludCBhcmNoX2R1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCwgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMpXG5hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jLTIxOC17XG4tLVxuaW5jbHVkZS9saW51eC90aHJlYWRfaW5mby5oPTIzMj12b2lkIGFyY2hfcmVsZWFzZV90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7XG5pbmNsdWRlL2xpbnV4L3RocmVhZF9pbmZvLmg6MjMzOmludCBhcmNoX2R1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCxcbmluY2x1ZGUvbGludXgvdGhyZWFkX2luZm8uaC0yMzQtXHRcdFx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYyk7XG4tLVxua2VybmVsL2ZvcmsuYz04NTU9dm9pZCBfX2luaXQgZm9ya19pbml0KHZvaWQpXG4tLVxua2VybmVsL2ZvcmsuYy04OTktXG5rZXJuZWwvZm9yay5jOjkwMDppbnQgX193ZWFrIGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LFxua2VybmVsL2ZvcmsuYy05MDEtXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYylcbi0tXG5rZXJuZWwvZm9yay5jPTkwNz12b2lkIHNldF90YXNrX3N0YWNrX2VuZF9tYWdpYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbi0tXG5rZXJuZWwvZm9yay5jLTkxNC1cbmtlcm5lbC9mb3JrLmM6OTE1OnN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmR1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9yaWcsIGludCBub2RlKVxua2VybmVsL2ZvcmsuYy05MTYte1xuLS1cbmtlcm5lbC9mb3JrLmMtOTI1LVxua2VybmVsL2ZvcmsuYzo5MjY6XHRlcnIgPSBhcmNoX2R1cF90YXNrX3N0cnVjdCh0c2ssIG9yaWcpO1xua2VybmVsL2ZvcmsuYy05MjctXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9mb3JrLmM9MjAxOD1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxuLS1cbmtlcm5lbC9mb3JrLmMtMjEzOC1cdHJldHZhbCA9IC1FTk9NRU07XG5rZXJuZWwvZm9yay5jOjIxMzk6XHRwID0gZHVwX3Rhc2tfc3RydWN0KGN1cnJlbnQsIG5vZGUpO1xua2VybmVsL2ZvcmsuYy0yMTQwLVx0aWYgKCFwKVxuLS1cbmtlcm5lbC9mb3JrLmMtMjIwMC1cbmtlcm5lbC9mb3JrLmM6MjIwMTpcdGRlbGF5YWNjdF90c2tfaW5pdChwKTtcdC8qIE11c3QgcmVtYWluIGFmdGVyIGR1cF90YXNrX3N0cnVjdCgpICovXG5rZXJuZWwvZm9yay5jLTIyMDItXHRwLVx1MDAzZWZsYWdzIFx1MDAyNj0gfihQRl9TVVBFUlBSSVYgfCBQRl9XUV9XT1JLRVIgfCBQRl9JRExFIHwgUEZfTk9fU0VUQUZGSU5JVFkpO1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9NDM3OD12b2lkIGluaXRfbnVtYV9iYWxhbmNpbmcodTY0IGNsb25lX2ZsYWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy00NDEyLVx0ICogTmV3IHRocmVhZCwga2VlcCBleGlzdGluZyBudW1hX3ByZWZlcnJlZF9uaWQgd2hpY2ggc2hvdWxkIGJlIGNvcGllZFxua2VybmVsL3NjaGVkL2ZhaXIuYzo0NDEzOlx0ICogYWxyZWFkeSBieSBhcmNoX2R1cF90YXNrX3N0cnVjdCBidXQgc3RhZ2dlciB3aGVuIHNjYW5zIHN0YXJ0Llxua2VybmVsL3NjaGVkL2ZhaXIuYy00NDE0LVx0ICovXG4tLVxua2VybmVsL3NtcC5jPTg4OT1zdGF0aWMgdm9pZCBzbXBfY2FsbF9mdW5jdGlvbl9tYW55X2NvbmQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssXG4tLVxua2VybmVsL3NtcC5jLTk4OC1cdCAqIFRoZSBJUEkgd29yayBoYXMgYmVlbiBxdWV1ZWQgYW5kIGRpc3BhdGNoZWQuIE9uIFBSRUVNUFQga2VybmVscyxcbmtlcm5lbC9zbXAuYzo5ODk6XHQgKiB0YXNrcyBjcmVhdGVkIHRocm91Z2ggZHVwX3Rhc2tfc3RydWN0KCkgaGF2ZSB0YXNrLWxvY2FsIHdhaXQgbWFza3MuXG5rZXJuZWwvc21wLmMtOTkwLVx0ICogVGhlIGJvb3QgaW5pdF90YXNrIGNhbiBmYWxsIGJhY2sgdG8gY2ZkLVx1MDAzZWNwdW1hc2sgd2hlbiB0aGUgbWFzayBpc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQ4NwoJCQkJCQkJb3V0cHV0OiAyMzIKCQkJCQkJCXRob3VnaHRzOiAzMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBjb3B5X3Byb2Nlc3NgIEJ1ZyBGaXgqKgoKT2theSwgc28gaGVyZSYjMzk7cyB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSB3YXMgcmlnaHQ7IHRoZSByb290IG9mIHRoaXMgbGllcyB3aXRoaW4gYGtlcm5lbC9mb3JrLmNgLCBzcGVjaWZpY2FsbHkgaW4gYGR1cF90YXNrX3N0cnVjdGAuIFdlIGFsbCBrbm93IHRoaXMgZnVuY3Rpb24sIG9yIGl0cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY291bnRlcnBhcnQgYGFyY2hfZHVwX3Rhc2tfc3RydWN0YCwgZXNzZW50aWFsbHkgZG9lcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjb3B5IOKAkyBgKnRzayA9ICpvcmlnYCwgZWZmZWN0aXZlbHkgZHVwbGljYXRpbmcgdGhlIHRhc2sgc3RydWN0dXJlLiBUaGlzIG1lYW5zIHRoZSBgcmV0X3N0YWNrYCBwb2ludGVyIGZyb20gdGhlIHBhcmVudCBwcm9jZXNzIChgY3VycmVudC0mZ3Q7cmV0X3N0YWNrYCkgaXMgZ2V0dGluZyBkaXJlY3RseSBjb3BpZWQgaW50byB0aGUgY2hpbGQgcHJvY2Vzcy4KClRoZSBjcnV4IG9mIHRoZSBwcm9ibGVtIGFyaXNlcyB3aGVuIHRoaXMgY29weSBoYXBwZW5zLCBidXQgYW4gZXJyb3Igb2NjdXJzICpiZWZvcmUqIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBoYXMgYSBjaGFuY2UgdG8gY2xlYXIgdGhlIGNoaWxkJiMzOTtzIGByZXRfc3RhY2tgLiBUaGVuIHdlJiMzOTtyZSBpbiB0cm91YmxlLiBUaGUgZXJyb3IgcGF0aCBzdWJzZXF1ZW50bHkgaW52b2tlcyBgZnJlZV90YXNrYCwgd2hpY2ggaW4gdHVybiBjYWxscyBgZnRyYWNlX2dyYXBoX2V4aXRfdGFza2AuIEFuZCB0aGVyZSwgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIGZyZWVzIHRoZSAqcGFyZW50JiMzOTtzKiBgcmV0X3N0YWNrYC4gVGhlIGNoaWxkIHN0aWxsIGhhcyBhIGRhbmdsaW5nIHBvaW50ZXIgdG8gdGhlIGZyZWUmIzM5O2QgbWVtb3J5LiBBIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUsIHBsYWluIGFuZCBzaW1wbGUuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIGVsZWdhbnQgaW4gaXRzIHNpbXBsaWNpdHkuIEl0IGp1c3Qgc2hpZnRzIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCB1cHdhcmRzLCB0byBiZSBleGVjdXRlZCAqYmVmb3JlKiBhbnkgcG90ZW50aWFsbHkgZmFpbGluZyBvcGVyYXRpb25zIGluIHRoZSBgY29weV9wcm9jZXNzYCBlcnJvciBwYXRocy4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGNoaWxkJiMzOTtzIGByZXRfc3RhY2tgIGlzIHplcm9lZCBvdXQgYmVmb3JlIGFueXRoaW5nIGNhbiBnbyB3cm9uZy4KCk5hdHVyYWxseSwgdGhpcyBmaXggb25seSBhcHBsaWVzIGlmIGBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCBpcyBlbmFibGVkLCBhcyB0aGF0JiMzOTtzIHdoYXQgYnJpbmdzIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYCBhbmQgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGludG8gdGhlIHBpY3R1cmUuIFRoYXQgYWxzbyByZXF1aXJlcyB0aGUgc3RhbmRhcmQgZGVwZW5kZW5jaWVzIG9mIGBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSYCBhbmQgYENPTkZJR19GVFJBQ0VgLgoKR2l2ZW4gaG93IGhlYXZpbHkgZnV6emVkIGBjb3B5X3Byb2Nlc3NgIGlzIGFzIGEgaG90IHBhdGgsIHRoaXMgaXMgYSB2ZXJ5IGhpZ2ggaW1wYWN0IGZpeC4gTm8gbmVlZCB0byBnbyBodW50aW5nIGZvciBzcGVjaWZpYyBzeW1ib2xzIGZvciB0aGlzIG9uZS4KClRpbWUgdG8gZmVlZCB0aGlzIGludG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZUUkFDRSYjMzQ7LAogICAgJiMzNDtGVU5DVElPTl9UUkFDRVImIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fR1JBUEhfVFJBQ0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGluIHRoZSBlcnJvciBwYXRocyBvZiBjb3B5X3Byb2Nlc3MoKS4gV2hlbiBhIHRhc2sgaXMgZHVwbGljYXRlZCB2aWEgZHVwX3Rhc2tfc3RydWN0KCksIHRoZSBjaGlsZCB0YXNrIGluaGVyaXRzIHRoZSBwYXJlbnQmIzM5O3MgcmV0X3N0YWNrIHBvaW50ZXIuIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgcHJvY2VzcyBjcmVhdGlvbiBiZWZvcmUgZnRyYWNlX2dyYXBoX2luaXRfdGFzaygpIGNsZWFycyB0aGUgY2hpbGQmIzM5O3MgcmV0X3N0YWNrLCB0aGUgZXJyb3IgcGF0aCAoZnJlZV90YXNrIC1cdTAwM2UgZnRyYWNlX2dyYXBoX2V4aXRfdGFzaykgd2lsbCBlcnJvbmVvdXNseSBmcmVlIHRoZSBwYXJlbnQmIzM5O3MgcmV0X3N0YWNrLCBsZWFkaW5nIHRvIGEgdXNlLWFmdGVyLWZyZWUgd2hlbiB0aGUgcGFyZW50IHJlc3VtZXMgZXhlY3V0aW9uLiBUaGUgcGF0Y2ggbW92ZXMgZnRyYWNlX2dyYXBoX2luaXRfdGFzaygpIGJlZm9yZSBhbnkgZmFsbGlibGUgb3BlcmF0aW9ucyB0byBwcmV2ZW50IHRoaXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCBmb3IgYSByZWFjaGFibGUgY29yZSBrZXJuZWwgYnVnLCByZXF1aXJpbmcgZnRyYWNlIGdyYXBoIHRyYWNpbmcgY29uZmlncyB0byBiZSBlbmFibGVkLiBObyBzcGVjaWZpYyBmb2N1cyBzeW1ib2xzIGFyZSBuZWVkZWQgc2luY2UgY29weV9wcm9jZXNzKCkgaXMgYWxyZWFkeSBoZWF2aWx5IGZ1enplZCB2aWEgY2xvbmUvZm9yayBzeXNjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlRSQUNFJiMzNDssCiAgICAmIzM0O0ZVTkNUSU9OX1RSQUNFUiYjMzQ7LAogICAgJiMzNDtGVU5DVElPTl9HUkFQSF9UUkFDRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gdGhlIGVycm9yIHBhdGhzIG9mIGNvcHlfcHJvY2VzcygpLiBXaGVuIGEgdGFzayBpcyBkdXBsaWNhdGVkIHZpYSBkdXBfdGFza19zdHJ1Y3QoKSwgdGhlIGNoaWxkIHRhc2sgaW5oZXJpdHMgdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2sgcG9pbnRlci4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBwcm9jZXNzIGNyZWF0aW9uIGJlZm9yZSBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKCkgY2xlYXJzIHRoZSBjaGlsZCYjMzk7cyByZXRfc3RhY2ssIHRoZSBlcnJvciBwYXRoIChmcmVlX3Rhc2sgLVx1MDAzZSBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKSB3aWxsIGVycm9uZW91c2x5IGZyZWUgdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2ssIGxlYWRpbmcgdG8gYSB1c2UtYWZ0ZXItZnJlZSB3aGVuIHRoZSBwYXJlbnQgcmVzdW1lcyBleGVjdXRpb24uIFRoZSBwYXRjaCBtb3ZlcyBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKCkgYmVmb3JlIGFueSBmYWxsaWJsZSBvcGVyYXRpb25zIHRvIHByZXZlbnQgdGhpcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGZvciBhIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBidWcsIHJlcXVpcmluZyBmdHJhY2UgZ3JhcGggdHJhY2luZyBjb25maWdzIHRvIGJlIGVuYWJsZWQuIE5vIHNwZWNpZmljIGZvY3VzIHN5bWJvbHMgYXJlIG5lZWRlZCBzaW5jZSBjb3B5X3Byb2Nlc3MoKSBpcyBhbHJlYWR5IGhlYXZpbHkgZnV6emVkIHZpYSBjbG9uZS9mb3JrIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTo0NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCBlYXJsaWVyIGluIGBjb3B5X3Byb2Nlc3MoKWAgdG8gZW5zdXJlIHRoYXQgYHAtXHUwMDNlcmV0X3N0YWNrYCBhbmQgcmVsYXRlZCBmaWVsZHMgYXJlIGluaXRpYWxpemVkIChzZXQgdG8gTlVMTCBvciBuZXdseSBhbGxvY2F0ZWQpIGJlZm9yZSBhbnkgZmFsbGlibGUgb3BlcmF0aW9ucyBvY2N1ci4gUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIGlmIGFuIGVycm9yIG9jY3VycmVkIGVhcmx5IGluIGBjb3B5X3Byb2Nlc3MoKWAgKGUuZy4sIGluIGBjb3B5X2V4ZWNfc3RhdGUoKWApLCB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBjb3VsZCBmcmVlIHRoZSBuZXcgdGFzayBzdHJ1Y3R1cmUgd2hpbGUgaXQgc3RpbGwgaGVsZCBhIGNvcHkgb2YgdGhlIHBhcmVudCYjMzk7cyBgcmV0X3N0YWNrYCBwb2ludGVyIChkdWUgdG8gYGR1cF90YXNrX3N0cnVjdCgpYCkuIFRoaXMgd291bGQgcmVzdWx0IGluIGZyZWVpbmcgdGhlIHBhcmVudCYjMzk7cyBgcmV0X3N0YWNrYCwgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGJ1Zy5cblxuVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAodXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlKSBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBpc3N1ZSBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGludm9sdmUgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLCBhcyBzdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBidWcgdGhpcyBwYXRjaCBhZGRyZXNzZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhhOGExM2VhOTQ4YjYwYWI4MTY3NDQ1MDAzZDg3ZDZkMmFmMjQ4NTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyMiAwOTo0NDoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IDFlNjg0MDRiZDc3M2UuLjBkMWFkOTJlMmQzMzcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2ZvcmsuYwpAQCAtMjEzOSw2ICYjNDM7MjEzOSwxMSBAQCBfX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKAogCXAgPSBkdXBfdGFza19zdHJ1Y3QoY3VycmVudCwgbm9kZSk7CiAJaWYgKCFwKQogCQlnb3RvIGZvcmtfb3V0OwomIzQzOwkvKgomIzQzOwkgKiBNdXN0IHJ1biBiZWZvcmUgdGhlIGZpcnN0IGZhbGxpYmxlIG9wLCBzbyBlcnJvciBwYXRocyBuZXZlcgomIzQzOwkgKiBmcmVlIHRoZSBwYXJlbnQmIzM5O3MgcmV0X3N0YWNrLgomIzQzOwkgKi8KJiM0MzsJZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTsKIAlyZXR2YWwgPSBjb3B5X2V4ZWNfc3RhdGUoY2xvbmVfZmxhZ3MsIHApOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gYmFkX2ZvcmtfZnJlZTsKQEAgLTIxNjUsOCAmIzQzOzIxNzAsNiBAQCBfX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKAogCSAqLwogCXAtJmd0O2NsZWFyX2NoaWxkX3RpZCA9IChjbG9uZV9mbGFncyAmYW1wOyBDTE9ORV9DSElMRF9DTEVBUlRJRCkgPyBhcmdzLSZndDtjaGlsZF90aWQgOiBOVUxMOwogCi0JZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTsKLQogCXJ0X211dGV4X2luaXRfdGFzayhwKTsKIAlyYXdfc3Bpbl9sb2NrX2luaXQoJmFtcDtwLSZndDtibG9ja2VkX2xvY2spOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2gmIzM5O3MgSW1wYWN0IG9uIE1lbW9yeSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1vdmluZyBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgZWFybGllciBpbiBgY29weV9wcm9jZXNzKClgLCByaWdodCBhZnRlciBgZHVwX3Rhc2tfc3RydWN0KClgLiBUaGUgY29tbWVudCBtZW50aW9ucyB0aGF0IHRoaXMgaXMgY3J1Y2lhbCB0byBwcmV2ZW50IGZyZWVpbmcgdGhlIHBhcmVudCYjMzk7cyBgcmV0X3N0YWNrYCBpbiBlcnJvciBwYXRocy4gIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgcHJldmVudHMgYSBwcm9ibGVtIHdpdGggdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2ssIGFuZCB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyB0aGF0IEtNU0FOIG1pZ2h0IGNhdGNoLgoKTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYGR1cF90YXNrX3N0cnVjdCgpYCBpcyBhbGxvY2F0aW5nIGEgbmV3IGB0YXNrX3N0cnVjdGAgYW5kIGNvcHlpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBwYXJlbnQmIzM5O3MgYHRhc2tfc3RydWN0YCBpbnRvIGl0LiAgTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaWYgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socClgIHNldHMgc29tZSBmaWVsZHMsIG1heWJlIGluY2x1ZGluZyBgcmV0X3N0YWNrYCwgdG8gTlVMTCBvciB6ZXJvLCB0aGVuIG1vdmluZyBpdCBlYXJsaWVyIG1lYW5zIHRoZXNlIGZpZWxkcyB3b24mIzM5O3QgaG9sZCB0aGUgcGFyZW50JiMzOTtzIGRhdGEgYW55bW9yZSwgZHVyaW5nIGFuIGVycm9yIHBhdGggd2hlbiBvdGhlciBzdGVwcyAoZS5nLiwgYGNvcHlfZXhlY19zdGF0ZWApIG1pZ2h0IGZhaWwuIFRoaXMgaXMgY3J1Y2lhbDogaWYgdGhvc2UgZXJyb3IgcGF0aHMgd2VyZSB0byByZWxlYXNlIHRoZSBtZW1vcnkgcG9pbnRlZCB0byBieSB0aGUgKnBhcmVudCYjMzk7cyogYHJldF9zdGFja2AsIGFuZCB0aGVuIHRoZSBwYXJlbnQgY29udGludWVkIHRvIHVzZSBpdCwgaXQgd291bGQgYmUgYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIG9yIGEgZG91YmxlIGZyZWUhICBUaGUgcGFyZW50JiMzOTtzIGByZXRfc3RhY2tgIG1pZ2h0IGJlIGEgcG9pbnRlciB0byBpdHMgb3duIHN0cnVjdHVyZXMuCgpXYWl0LCBpcyB0aGlzIHJlYWxseSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSAqaXNzdWUqIHRob3VnaD8gVGhpcyBpcyBhIGZpeCBmb3IgYSAqdXNlLWFmdGVyLWZyZWUqIG9yICpkb3VibGUtZnJlZSosIHdoaWNoIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2guIGBkdXBfdGFza19zdHJ1Y3RgIGluaXRpYWxpemVzIHRoZSBtZW1vcnkgdG8gdGhlIHBhcmVudCYjMzk7cyB2YWx1ZXMsIHNvIGl0JiMzOTtzIG5vdCB1bmluaXRpYWxpemVkIGluIHRoZSBzdHJpY3Qgc2Vuc2UuIFRoZSB3b3JyeSBpcyB0aGF0IGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBwcm9iYWJseSBzZXRzIHNvbWV0aGluZyBsaWtlIGBwLSZndDtyZXRfc3RhY2sgPSBOVUxMYCBvciBzaW1pbGFyLCBhZnRlciB0aGUgY29weS4gIE1vdmluZyB0aGlzIG9wZXJhdGlvbiBlYXJsaWVyIG1lYW5zIGBwLSZndDtyZXRfc3RhY2tgICp3b24mIzM5O3QqIGhhdmUgdGhlIHBhcmVudCYjMzk7cyBwb3RlbnRpYWxseSBpbnZhbGlkIHBvaW50ZXIgYW55bW9yZSBpbiBjYXNlIG9mIGFuIGVycm9yLiBUaGlzIGlzIGEgZGFuZ2xpbmcgcG9pbnRlci9kb3VibGUtZnJlZSBpc3N1ZSwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgc2hvdWxkIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBjb2RlIGZvciBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgdG8gY29uZmlybSB0aGlzIGh1bmNoIGFuZCBydWxlIG91dCBhbnkgdW5leHBlY3RlZCBiZWhhdmlvcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z0cmFjZV9ncmFwaF9pbml0X3Rhc2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzQyPWV4dGVybiB0cmFjZV9mdW5jX2dyYXBoX2VudF90IGZ0cmFjZV9ncmFwaF9lbnRyeTtcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM0My1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTM0NDpleHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNDUtZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xuLS1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmg9MTM1Nj1zdGF0aWMgaW5saW5lIHZvaWQgdW5wYXVzZV9ncmFwaF90cmFjaW5nKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzYzLVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzY0OnN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkgeyB9XG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNjUtc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cbi0tXG5rZXJuZWwvZm9yay5jPTIwMTg9X19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2Vzcyhcbi0tXG5rZXJuZWwvZm9yay5jLTIxNDUtXHQgKi9cbmtlcm5lbC9mb3JrLmM6MjE0NjpcdGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socCk7XG5rZXJuZWwvZm9yay5jLTIxNDctXHRyZXR2YWwgPSBjb3B5X2V4ZWNfc3RhdGUoY2xvbmVfZmxhZ3MsIHApO1xuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMTMxPXZvaWQgZnRyYWNlX2dyYXBoX2luaXRfaWRsZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgaW50IGNwdSlcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE1OS0vKiBBbGxvY2F0ZSBhIHJldHVybiBzdGFjayBmb3IgbmV3bHkgY3JlYXRlZCB0YXNrICovXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTE2MDp2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTExNjEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDgwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgdGhlIGZ1bmN0aW9uIGdyYXBoIHRyYWNlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgLiAgTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gYGtlcm5lbC90cmFjZS9mZ3JhcGguY2AuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgZnJvbSB0aGVyZS4gSSBleHBlY3QgdGhhdCB0aGlzIHJvdXRpbmUgbXVzdCBiZSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgb3IgaW50ZXJuYWwgc3RydWN0dXJlcyB3aGVuIGEgbmV3IHRhc2sgaXMgaW5pdGlhbGl6ZWQuIFBlcmhhcHMgSSBjYW4gd29yayBvdXQgaG93IGEgdGFzayYjMzk7cyBmdW5jdGlvbiBncmFwaCBzdGF0ZSBpcyBpbml0aWFsaXplZCwgd2hhdCBmbGFncyBvciB2YXJpYWJsZXMgYXJlIHNldCBhbmQgdGhlIHJvbGUgaXQgcGxheXMgaW4gdGhlIG92ZXJhbGwgYGZ0cmFjZWAgYXJjaGl0ZWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoaXMgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyB3aWxsIHByb3ZpZGUgdmFsdWFibGUgaW5zaWdodCBpbnRvIGl0cyBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgdHJhY2VyLiBJIGFudGljaXBhdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbGwgaXMgYXQgdGhlIGhlYXJ0IG9mIHRoZSB0cmFjZXImIzM5O3MgcGVyLXRhc2sgdHJhY2tpbmcgd2hpY2ggaXMgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGlubmVyIHdvcmtpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9mZ3JhcGguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE1OTpcdC8qIEFsbG9jYXRlIGEgcmV0dXJuIHN0YWNrIGZvciBuZXdseSBjcmVhdGVkIHRhc2sgKi9cbjExNjA6XHR2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KVxuMTE2MTpcdHtcbjExNjI6XHRcdC8qIE1ha2Ugc3VyZSB3ZSBkbyBub3QgdXNlIHRoZSBwYXJlbnQgcmV0X3N0YWNrICovXG4xMTYzOlx0XHR0LVx1MDAzZXJldF9zdGFjayA9IE5VTEw7XG4xMTY0Olx0XHR0LVx1MDAzZWN1cnJfcmV0X3N0YWNrID0gMDtcbjExNjU6XHRcdHQtXHUwMDNlY3Vycl9yZXRfZGVwdGggPSAtMTtcbjExNjY6XHRcbjExNjc6XHRcdGlmIChmdHJhY2VfZ3JhcGhfYWN0aXZlKSB7XG4xMTY4Olx0XHRcdHVuc2lnbmVkIGxvbmcgKnJldF9zdGFjaztcbjExNjk6XHRcbjExNzA6XHRcdFx0aWYgKFdBUk5fT05fT05DRSghZmdyYXBoX3N0YWNrX2NhY2hlcCkpXG4xMTcxOlx0XHRcdFx0cmV0dXJuO1xuMTE3MjpcdFxuMTE3MzpcdFx0XHRyZXRfc3RhY2sgPSBrbWVtX2NhY2hlX2FsbG9jKGZncmFwaF9zdGFja19jYWNoZXAsIEdGUF9LRVJORUwpO1xuMTE3NDpcdFx0XHRpZiAoIXJldF9zdGFjaylcbjExNzU6XHRcdFx0XHRyZXR1cm47XG4xMTc2Olx0XHRcdGdyYXBoX2luaXRfdGFzayh0LCByZXRfc3RhY2spO1xuMTE3NzpcdFx0fVxuMTE3ODpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA1MgoJCQkJCQkJb3V0cHV0OiAyNTEKCQkJCQkJCXRob3VnaHRzOiAxMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBjb3B5X3Byb2Nlc3MoKWAgQnVnIEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIGRpc2FzdGVyIGluIGBjb3B5X3Byb2Nlc3MoKWAuIEZyb20gd2hhdCBJIGdhdGhlciwgdGhlIGlzc3VlIGJvaWxzIGRvd24gdG8gaG93IGB0LSZndDtyZXRfc3RhY2tgIGludGVyYWN0cyB3aXRoIGVycm9yIGhhbmRsaW5nLiBFc3NlbnRpYWxseSwgaWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgcHJvY2VzcyBjcmVhdGlvbiBhbmQgdGhlIGByZXRfc3RhY2tgIG1pc3Rha2VubHkgaG9sZHMgb250byB0aGUgcGFyZW50JiMzOTtzIHZhbHVlLCBhbmQgdGhlbiB0aGUgZXJyb3IgaGFuZGxpbmcgcm91dGluZSAobGlrZSBgZnJlZV90YXNrKClgKSByZWxlYXNlcyBpdCwgYm9vbeKAlHdlIGhhdmUgYSB1c2UtYWZ0ZXItZnJlZSBvciwgZXZlbiB3b3JzZSwgYSBkb3VibGUtZnJlZSB2dWxuZXJhYmlsaXR5LiBLQVNBTiByaWdodGZ1bGx5IGZsYWdzIHRoaXMgYXMgYSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZSwgYSBjbGFzc2ljIFVBRiBidWcuIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgYW55IGluZm9ybWF0aW9uIGxlYWthZ2UgaW52b2x2ZWQgaGVyZS4KCkdpdmVuIHRoYXQgdGhpcyBpcyBwdXJlbHkgYSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZSwgYW5kIEtBU0FOIGlzIGFscmVhZHkgb24gdGhlIGNhc2UsIEtNU0FOIGlzbiYjMzk7dCBnb2luZyB0byBhZGQgYW55IHZhbHVlLiBJdCYjMzk7cyBub3QgdGhlIHJpZ2h0IHRvb2wgZm9yIHRoaXMgam9iLiBTbywgSSB3aWxsIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAuIE15IHJhdGlvbmFsZSBpcyBjbGVhcjogS0FTQU4gY292ZXJzIHRoZSBrZXkgYXNwZWN0cyBvZiB0aGlzIGJ1Z+KAlHNwZWNpZmljYWxseSwgdGhlIGRldGVjdGlvbiBvZiB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25z4oCUd2hpbGUgS01TQU4mIzM5O3MgZm9jdXMgb24gZGV0ZWN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGRvZXNuJiMzOTt0IGFsaWduIHdpdGggdGhlIG5hdHVyZSBvZiB0aGlzIHBhcnRpY3VsYXIgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCBlYXJsaWVyIGluIGBjb3B5X3Byb2Nlc3MoKWAgdG8gZW5zdXJlIHRoYXQgYHAtXHUwMDNlcmV0X3N0YWNrYCBhbmQgcmVsYXRlZCBmaWVsZHMgYXJlIGluaXRpYWxpemVkIChzZXQgdG8gTlVMTCBvciBuZXdseSBhbGxvY2F0ZWQpIGJlZm9yZSBhbnkgZmFsbGlibGUgb3BlcmF0aW9ucyBvY2N1ci4gUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIGlmIGFuIGVycm9yIG9jY3VycmVkIGVhcmx5IGluIGBjb3B5X3Byb2Nlc3MoKWAgKGUuZy4sIGluIGBjb3B5X2V4ZWNfc3RhdGUoKWApLCB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBjb3VsZCBmcmVlIHRoZSBuZXcgdGFzayBzdHJ1Y3R1cmUgd2hpbGUgaXQgc3RpbGwgaGVsZCBhIGNvcHkgb2YgdGhlIHBhcmVudCYjMzk7cyBgcmV0X3N0YWNrYCBwb2ludGVyIChkdWUgdG8gYGR1cF90YXNrX3N0cnVjdCgpYCkuIFRoaXMgd291bGQgcmVzdWx0IGluIGZyZWVpbmcgdGhlIHBhcmVudCYjMzk7cyBgcmV0X3N0YWNrYCwgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGJ1Zy5cblxuVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAodXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlKSBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBpc3N1ZSBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGludm9sdmUgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLCBhcyBzdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBidWcgdGhpcyBwYXRjaCBhZGRyZXNzZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgZWFybGllciBpbiBgY29weV9wcm9jZXNzKClgIHRvIGVuc3VyZSB0aGF0IGBwLVx1MDAzZXJldF9zdGFja2AgYW5kIHJlbGF0ZWQgZmllbGRzIGFyZSBpbml0aWFsaXplZCAoc2V0IHRvIE5VTEwgb3IgbmV3bHkgYWxsb2NhdGVkKSBiZWZvcmUgYW55IGZhbGxpYmxlIG9wZXJhdGlvbnMgb2NjdXIuIFByaW9yIHRvIHRoaXMgY2hhbmdlLCBpZiBhbiBlcnJvciBvY2N1cnJlZCBlYXJseSBpbiBgY29weV9wcm9jZXNzKClgIChlLmcuLCBpbiBgY29weV9leGVjX3N0YXRlKClgKSwgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggY291bGQgZnJlZSB0aGUgbmV3IHRhc2sgc3RydWN0dXJlIHdoaWxlIGl0IHN0aWxsIGhlbGQgYSBjb3B5IG9mIHRoZSBwYXJlbnQmIzM5O3MgYHJldF9zdGFja2AgcG9pbnRlciAoZHVlIHRvIGBkdXBfdGFza19zdHJ1Y3QoKWApLiBUaGlzIHdvdWxkIHJlc3VsdCBpbiBmcmVlaW5nIHRoZSBwYXJlbnQmIzM5O3MgYHJldF9zdGFja2AsIGxlYWRpbmcgdG8gYSB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSBidWcuXG5cblRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSkgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgaXNzdWUgZG9lcyBub3QgaW52b2x2ZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBpbnZvbHZlIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZCwgYXMgc3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgYnVnIHRoaXMgcGF0Y2ggYWRkcmVzc2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NDoyMC41Mjk5OTc3ODRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAyNDYwMzIzMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlRSQUNFXCIsXG4gICAgXCJGVU5DVElPTl9UUkFDRVJcIixcbiAgICBcIkZVTkNUSU9OX0dSQVBIX1RSQUNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCBlYXJsaWVyIGluIGBjb3B5X3Byb2Nlc3MoKWAgdG8gZW5zdXJlIHRoYXQgYHAtXFx1MDAzZXJldF9zdGFja2AgYW5kIHJlbGF0ZWQgZmllbGRzIGFyZSBpbml0aWFsaXplZCAoc2V0IHRvIE5VTEwgb3IgbmV3bHkgYWxsb2NhdGVkKSBiZWZvcmUgYW55IGZhbGxpYmxlIG9wZXJhdGlvbnMgb2NjdXIuIFByaW9yIHRvIHRoaXMgY2hhbmdlLCBpZiBhbiBlcnJvciBvY2N1cnJlZCBlYXJseSBpbiBgY29weV9wcm9jZXNzKClgIChlLmcuLCBpbiBgY29weV9leGVjX3N0YXRlKClgKSwgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggY291bGQgZnJlZSB0aGUgbmV3IHRhc2sgc3RydWN0dXJlIHdoaWxlIGl0IHN0aWxsIGhlbGQgYSBjb3B5IG9mIHRoZSBwYXJlbnQncyBgcmV0X3N0YWNrYCBwb2ludGVyIChkdWUgdG8gYGR1cF90YXNrX3N0cnVjdCgpYCkuIFRoaXMgd291bGQgcmVzdWx0IGluIGZyZWVpbmcgdGhlIHBhcmVudCdzIGByZXRfc3RhY2tgLCBsZWFkaW5nIHRvIGEgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgYnVnLlxcblxcblRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSkgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgaXNzdWUgZG9lcyBub3QgaW52b2x2ZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBpbnZvbHZlIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZCwgYXMgc3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgYnVnIHRoaXMgcGF0Y2ggYWRkcmVzc2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGluIHRoZSBlcnJvciBwYXRocyBvZiBjb3B5X3Byb2Nlc3MoKS4gV2hlbiBhIHRhc2sgaXMgZHVwbGljYXRlZCB2aWEgZHVwX3Rhc2tfc3RydWN0KCksIHRoZSBjaGlsZCB0YXNrIGluaGVyaXRzIHRoZSBwYXJlbnQncyByZXRfc3RhY2sgcG9pbnRlci4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBwcm9jZXNzIGNyZWF0aW9uIGJlZm9yZSBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKCkgY2xlYXJzIHRoZSBjaGlsZCdzIHJldF9zdGFjaywgdGhlIGVycm9yIHBhdGggKGZyZWVfdGFzayAtXFx1MDAzZSBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKSB3aWxsIGVycm9uZW91c2x5IGZyZWUgdGhlIHBhcmVudCdzIHJldF9zdGFjaywgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlIHdoZW4gdGhlIHBhcmVudCByZXN1bWVzIGV4ZWN1dGlvbi4gVGhlIHBhdGNoIG1vdmVzIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKSBiZWZvcmUgYW55IGZhbGxpYmxlIG9wZXJhdGlvbnMgdG8gcHJldmVudCB0aGlzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggZm9yIGEgcmVhY2hhYmxlIGNvcmUga2VybmVsIGJ1ZywgcmVxdWlyaW5nIGZ0cmFjZSBncmFwaCB0cmFjaW5nIGNvbmZpZ3MgdG8gYmUgZW5hYmxlZC4gTm8gc3BlY2lmaWMgZm9jdXMgc3ltYm9scyBhcmUgbmVlZGVkIHNpbmNlIGNvcHlfcHJvY2VzcygpIGlzIGFscmVhZHkgaGVhdmlseSBmdXp6ZWQgdmlhIGNsb25lL2Zvcmsgc3lzY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ0OjIwLjUzMDAwMjAyNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NDk1ODI1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDhhOGExM2VhOTQ4YjYwYWI4MTY3NDQ1MDAzZDg3ZDZkMmFmMjQ4NTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjIgMDk6NDQ6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmNcXG5pbmRleCAxZTY4NDA0YmQ3NzNlLi4wZDFhZDkyZTJkMzM3IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9mb3JrLmNcXG4rKysgYi9rZXJuZWwvZm9yay5jXFxuQEAgLTIxMzksNiArMjEzOSwxMSBAQCBfX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxcbiBcXHRwID0gZHVwX3Rhc2tfc3RydWN0KGN1cnJlbnQsIG5vZGUpO1xcbiBcXHRpZiAoIXApXFxuIFxcdFxcdGdvdG8gZm9ya19vdXQ7XFxuK1xcdC8qXFxuK1xcdCAqIE11c3QgcnVuIGJlZm9yZSB0aGUgZmlyc3QgZmFsbGlibGUgb3AsIHNvIGVycm9yIHBhdGhzIG5ldmVyXFxuK1xcdCAqIGZyZWUgdGhlIHBhcmVudCdzIHJldF9zdGFjay5cXG4rXFx0ICovXFxuK1xcdGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socCk7XFxuIFxcdHJldHZhbCA9IGNvcHlfZXhlY19zdGF0ZShjbG9uZV9mbGFncywgcCk7XFxuIFxcdGlmIChyZXR2YWwpXFxuIFxcdFxcdGdvdG8gYmFkX2ZvcmtfZnJlZTtcXG5AQCAtMjE2NSw4ICsyMTcwLDYgQEAgX19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcyhcXG4gXFx0ICovXFxuIFxcdHAtXFx1MDAzZWNsZWFyX2NoaWxkX3RpZCA9IChjbG9uZV9mbGFncyBcXHUwMDI2IENMT05FX0NISUxEX0NMRUFSVElEKSA/IGFyZ3MtXFx1MDAzZWNoaWxkX3RpZCA6IE5VTEw7XFxuIFxcbi1cXHRmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApO1xcbi1cXG4gXFx0cnRfbXV0ZXhfaW5pdF90YXNrKHApO1xcbiBcXHRyYXdfc3Bpbl9sb2NrX2luaXQoXFx1MDAyNnAtXFx1MDAzZWJsb2NrZWRfbG9jayk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NDoyMS45OTU0ODE3MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExODY2NzU1NTU5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVFJBQ0VcIixcbiAgICBcIkZVTkNUSU9OX1RSQUNFUlwiLFxuICAgIFwiRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGluIHRoZSBlcnJvciBwYXRocyBvZiBjb3B5X3Byb2Nlc3MoKS4gV2hlbiBhIHRhc2sgaXMgZHVwbGljYXRlZCB2aWEgZHVwX3Rhc2tfc3RydWN0KCksIHRoZSBjaGlsZCB0YXNrIGluaGVyaXRzIHRoZSBwYXJlbnQncyByZXRfc3RhY2sgcG9pbnRlci4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBwcm9jZXNzIGNyZWF0aW9uIGJlZm9yZSBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKCkgY2xlYXJzIHRoZSBjaGlsZCdzIHJldF9zdGFjaywgdGhlIGVycm9yIHBhdGggKGZyZWVfdGFzayAtXFx1MDAzZSBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKSB3aWxsIGVycm9uZW91c2x5IGZyZWUgdGhlIHBhcmVudCdzIHJldF9zdGFjaywgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlIHdoZW4gdGhlIHBhcmVudCByZXN1bWVzIGV4ZWN1dGlvbi4gVGhlIHBhdGNoIG1vdmVzIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKSBiZWZvcmUgYW55IGZhbGxpYmxlIG9wZXJhdGlvbnMgdG8gcHJldmVudCB0aGlzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggZm9yIGEgcmVhY2hhYmxlIGNvcmUga2VybmVsIGJ1ZywgcmVxdWlyaW5nIGZ0cmFjZSBncmFwaCB0cmFjaW5nIGNvbmZpZ3MgdG8gYmUgZW5hYmxlZC4gTm8gc3BlY2lmaWMgZm9jdXMgc3ltYm9scyBhcmUgbmVlZGVkIHNpbmNlIGNvcHlfcHJvY2VzcygpIGlzIGFscmVhZHkgaGVhdmlseSBmdXp6ZWQgdmlhIGNsb25lL2Zvcmsgc3lzY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDhhOGExM2VhOTQ4YjYwYWI4MTY3NDQ1MDAzZDg3ZDZkMmFmMjQ4NTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAwOTo0NDoxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jXG5pbmRleCAxZTY4NDA0YmQ3NzNlLi4wZDFhZDkyZTJkMzM3IDEwMDY0NFxuLS0tIGEva2VybmVsL2ZvcmsuY1xuKysrIGIva2VybmVsL2ZvcmsuY1xuQEAgLTIxMzksNiArMjEzOSwxMSBAQCBfX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxuIFx0cCA9IGR1cF90YXNrX3N0cnVjdChjdXJyZW50LCBub2RlKTtcbiBcdGlmICghcClcbiBcdFx0Z290byBmb3JrX291dDtcbitcdC8qXG4rXHQgKiBNdXN0IHJ1biBiZWZvcmUgdGhlIGZpcnN0IGZhbGxpYmxlIG9wLCBzbyBlcnJvciBwYXRocyBuZXZlclxuK1x0ICogZnJlZSB0aGUgcGFyZW50J3MgcmV0X3N0YWNrLlxuK1x0ICovXG4rXHRmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApO1xuIFx0cmV0dmFsID0gY29weV9leGVjX3N0YXRlKGNsb25lX2ZsYWdzLCBwKTtcbiBcdGlmIChyZXR2YWwpXG4gXHRcdGdvdG8gYmFkX2ZvcmtfZnJlZTtcbkBAIC0yMTY1LDggKzIxNzAsNiBAQCBfX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxuIFx0ICovXG4gXHRwLVx1MDAzZWNsZWFyX2NoaWxkX3RpZCA9IChjbG9uZV9mbGFncyBcdTAwMjYgQ0xPTkVfQ0hJTERfQ0xFQVJUSUQpID8gYXJncy1cdTAwM2VjaGlsZF90aWQgOiBOVUxMO1xuIFxuLVx0ZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTtcbi1cbiBcdHJ0X211dGV4X2luaXRfdGFzayhwKTtcbiBcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZwLVx1MDAzZWJsb2NrZWRfbG9jayk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NDoyMS45OTU0ODI5MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NzIxMTg5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBGdHJhY2UgYW5kIGBjb3B5X3Byb2Nlc3MoKWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGZvciBga2VybmVsL2ZvcmsuY2AsIHNwZWNpZmljYWxseSB0aGUgYGNvcHlfcHJvY2VzcygpYCBmdW5jdGlvbi4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpcyBhIHJlb3JkZXJpbmcgb2YgZnVuY3Rpb24gY2FsbHMuIFdlJ3JlIG1vdmluZyBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgZWFybGllciBpbiB0aGUgcHJvY2Vzcy4gIFRoZSBnb2FsIGlzIHRvIGVuc3VyZSBpdCBoYXBwZW5zICpiZWZvcmUqIG90aGVyIHBvdGVudGlhbGx5IGZhaWxpbmcgb3BlcmF0aW9ucywgbGlrZSBgY29weV9leGVjX3N0YXRlKClgLiBUaGUgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaWYgYW4gZXJyb3Igb2NjdXJzICphZnRlciogYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKWAsIHRoZSBlcnJvciBjbGVhbnVwIHBhdGhzIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgY2xlYW5pbmcgdXAgdGhlIHBhcmVudCdzIGByZXRfc3RhY2tgLiBUaGlzIGlzIGEgZGVmZW5zaXZlIG1vdmUgdG8gYXZvaWQgbWVtb3J5IGxlYWtzIG9yIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uXG5cblRoZSBjb21tZW50IGluIHRoZSBjb2RlIGhpZ2hsaWdodHMgdGhpcyBwb2ludCBjbGVhcmx5OiBcIk11c3QgcnVuIGJlZm9yZSB0aGUgZmlyc3QgZmFsbGlibGUgb3AsIHNvIGVycm9yIHBhdGhzIG5ldmVyIGZyZWUgdGhlIHBhcmVudCdzIHJldF9zdGFjay5cIiBJIGdldCBpdC4gIGBjb3B5X3Byb2Nlc3MoKWAgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgZnVuZGFtZW50YWwgdG8gcHJvY2VzcyBjcmVhdGlvbiB2aWEgYGNsb25lYCwgYGZvcmtgLCBhbmQgYHZmb3JrYC4gIFNpbmNlIGBjb3B5X3Byb2Nlc3NgIGlzIGFscmVhZHkgaGVhdmlseSBmdXp6ZWQsIHRoaXMgY2hhbmdlIGlzIHdvcnRoIGZ1enppbmcgYXMgaXQgZXhwbGljaXRseSBhZGRyZXNzZXMgZXJyb3IgcGF0aHMuXG5cblRoZSBrZXkgaXMgdGhhdCB0aGlzIHJlb3JkZXJpbmcgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYWltZWQgYXQgcHJldmVudGluZyBhIHJlc291cmNlIGxlYWsgb3IsIHdvcnNlLCBhIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkuICBCZWNhdXNlIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYGNvcHlfcHJvY2Vzc2AsIGEgY29yZSBrZXJuZWwgZnVuY3Rpb24sIGFueSBjaGFuZ2Ugd2FycmFudHMgY2FyZWZ1bCBzY3J1dGlueSBhbmQgZnV6emluZywgZXZlbiBpZiB0aGUgY2hhbmdlIHRvdWNoZXMgb24gYW4gYXJlYSBsaWtlIGZ0cmFjZSB0aGF0IG1pZ2h0IG5vdCBiZSBhIHVzdWFsIGZ1enppbmcgdGFyZ2V0LlxuXG5XYWl0IGEgc2Vjb25kLiBOb3cgSSdtIHRoaW5raW5nIGFib3V0IGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYC4gIFRoYXTigJlzIHBhcnQgb2YgdGhlIGZ0cmFjZSBpbmZyYXN0cnVjdHVyZS4gIEdlbmVyYWxseSwgd2UgZG9uJ3QgemVybyBpbiBvbiB0cmFjaW5nIGZlYXR1cmVzIGR1cmluZyBmdXp6aW5nLCBidXQgdGhlIHByb3hpbWl0eSB0byBhIGNvcmUgZnVuY3Rpb24gZG9lcyBtYWtlIGl0IGEgcG90ZW50aWFsIGZvY3VzLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE3LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDQ6MjkuODY3NjA0MDIyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTY4NjUyNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnRyYWNlX2dyYXBoX2luaXRfdGFza1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEzNDI9ZXh0ZXJuIHRyYWNlX2Z1bmNfZ3JhcGhfZW50X3QgZnRyYWNlX2dyYXBoX2VudHJ5O1xcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM0My1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNDQ6ZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM0NS1leHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEzNTY9c3RhdGljIGlubGluZSB2b2lkIHVucGF1c2VfZ3JhcGhfdHJhY2luZyh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzYzLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTM2NDpzdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgfVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM2NS1zdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgfVxcbi0tXFxua2VybmVsL2ZvcmsuYz0yMDE4PV9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXFxuLS1cXG5rZXJuZWwvZm9yay5jLTIxNDUtXFx0ICovXFxua2VybmVsL2ZvcmsuYzoyMTQ2OlxcdGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socCk7XFxua2VybmVsL2ZvcmsuYy0yMTQ3LVxcdHJldHZhbCA9IGNvcHlfZXhlY19zdGF0ZShjbG9uZV9mbGFncywgcCk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9MTEzMT12b2lkIGZ0cmFjZV9ncmFwaF9pbml0X2lkbGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjcHUpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE1OS0vKiBBbGxvY2F0ZSBhIHJldHVybiBzdGFjayBmb3IgbmV3bHkgY3JlYXRlZCB0YXNrICovXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjExNjA6dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE2MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ0OjMxLjc2NDQ3NzU3NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODg0NTk4MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW5pdGlhbCBUaG91Z2h0cyBvbiBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AqKlxuXG5Pa2F5LCBzbyBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgaXMgZGVmaW5lZCBpbiBga2VybmVsL3RyYWNlL2ZncmFwaC5jYC4gSW1tZWRpYXRlbHksIG15IHNwaWRleS1zZW5zZSBpcyB0aW5nbGluZyDigJMgaXQncyBsaWtlbHkgZGVwZW5kZW50IG9uIGBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYC4gVGhhdCdzIHRoZSB0eXBpY2FsIHBhdHRlcm4sIGFuZCB0aGlzIGlzIHRyYWNpbmctcmVsYXRlZCBjb2RlLCBzbyBpdCdzIGEgdmVyeSBoaWdoIHByb2JhYmlsaXR5LiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHF1aWNrbHk7IGl0J3MgYmFzaWMgZHVlIGRpbGlnZW5jZS4gVGhlIG1vc3QgZGlyZWN0IHBhdGhzIHdvdWxkIGJlIGVpdGhlciB0byBjaGVjayB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgYGtlcm5lbC90cmFjZWAgZGlyZWN0b3J5LCBvciBtYXliZSBldmVuIGxvb2sgYXQgdGhlIGluY2x1ZGUgZ3VhcmRzIGRpcmVjdGx5IHdpdGhpbiBgZmdyYXBoLmNgIGl0c2VsZi4gSXTigJlzIGEgdHJpdmlhbCBjaGVjayBmb3IgbWUsIGJ1dCBpdCBpcyBpbXBvcnRhbnQgdG8gYmUgY29uZmlkZW50IG9uIGJ1aWxkIHByZXJlcXVpc2l0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MzgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NDozNS4yNTI5NDAwMTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwMTM5Njk5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmZ3JhcGgub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTI4ND1mdHJhY2VfZnVuY190IGZ0cmFjZV9vcHNfZ2V0X2Z1bmMoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTM0MS0gKiBTVUJPUCAgLSBJcyBjb250cm9sbGVkIGJ5IGFub3RoZXIgb3AgaW4gZmllbGQgbWFuYWdlZC5cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjM0MjogKiBHUkFQSCAgLSBJcyBhIGNvbXBvbmVudCBvZiB0aGUgZmdyYXBoX29wcyBzdHJ1Y3R1cmVcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTM0My0gKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg9MTIzMT1zdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEyNDAtXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMjQxOnN0cnVjdCBmZ3JhcGhfb3BzO1xcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTI0Mi1cXG4tLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg9MTI0ND10eXBlZGVmIHZvaWQgKCp0cmFjZV9mdW5jX2dyYXBoX3JldF90KShzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqLFxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTI0NTpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGZncmFwaF9vcHMgKixcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEyNDYtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqKTsgLyogcmV0dXJuICovXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMjQ3PXR5cGVkZWYgaW50ICgqdHJhY2VfZnVuY19ncmFwaF9lbnRfdCkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKixcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEyNDg6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGZncmFwaF9vcHMgKixcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEyNDktXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICopOyAvKiBlbnRyeSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMjUxPWV4dGVybiBpbnQgZnRyYWNlX2dyYXBoX2VudHJ5X3N0dWIoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLFxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTI1MjpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEyNTMtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncyk7XFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMjU0PWJvb2wgZnRyYWNlX3BpZHNfZW5hYmxlZChzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTI1Ny1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEyNTg6c3RydWN0IGZncmFwaF9vcHMge1xcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTI1OS1cXHR0cmFjZV9mdW5jX2dyYXBoX2VudF90XFx0XFx0ZW50cnlmdW5jO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzA3PXVuc2lnbmVkIGxvbmcgZnRyYWNlX2dyYXBoX3JldF9hZGRyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50ICppZHgsXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzA4LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIHJldCwgdW5zaWduZWQgbG9uZyAqcmV0cCk7XFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzA5OnVuc2lnbmVkIGxvbmcgKmZncmFwaF9nZXRfdGFza192YXIoc3RydWN0IGZncmFwaF9vcHMgKmdvcHMpO1xcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTMxMC1cXG4tLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTMyMC1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzMjE6ZXh0ZXJuIGludCByZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoc3RydWN0IGZncmFwaF9vcHMgKm9wcyk7XFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzIyOmV4dGVybiB2b2lkIHVucmVnaXN0ZXJfZnRyYWNlX2dyYXBoKHN0cnVjdCBmZ3JhcGhfb3BzICpvcHMpO1xcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTMyMy1cXG4tLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg9MTM2Nj1zdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfaWRsZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgaW50IGNwdSkgeyB9XFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzY3LVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTM2ODovKiBEZWZpbmUgYXMgbWFjcm9zIGFzIGZncmFwaF9vcHMgbWF5IG5vdCBiZSBkZWZpbmVkICovXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzY5LSNkZWZpbmUgcmVnaXN0ZXJfZnRyYWNlX2dyYXBoKG9wcykgKHsgLTE7IH0pXFxuLS1cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU9OTI9b2JqLSQoQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UpICs9IGJsa3RyYWNlLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6OTM6b2JqLSQoQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUikgKz0gZmdyYXBoLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtOTQtaWZlcSAoJChDT05GSUdfQkxPQ0spLHkpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDEtICogRm9yIHR5cGUgd2l0aCBcXFwiYml0bWFwIG9mIGZncmFwaF9hcnJheSBpbmRleFxcXCIgKEZHUkFQSF9UWVBFX0JJVE1BUCk6XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjQyOiAqICBiaXRzOiAxMiAtIDI3XFx0VGhlIGJpdG1hcCBvZiBmZ3JhcGhfb3BzIGZncmFwaF9hcnJheSBpbmRleFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy00My0gKlxcdFxcdFxcdFRoYXQgaXMsIGl0J3MgYSBiaXRtYXNrIG9mIDAtMTUgKDE2IGJpdHMpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNTYtICogVGhhdCBpcywgYXQgdGhlIGVuZCBvZiBmdW5jdGlvbl9ncmFwaF9lbnRlciwgaWYgdGhlIGZpcnN0IGFuZCBmb3J0aFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo1NzogKiBmZ3JhcGhfb3BzIG9uIHRoZSBmZ3JhcGhfYXJyYXlbXSAoaW5kZXggMCBhbmQgMykgbmVlZHMgdGhlaXIgcmV0ZnVuYyBjYWxsZWRcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6NTg6ICogb24gdGhlIHJldHVybiBvZiB0aGUgZnVuY3Rpb24gYmVpbmcgdHJhY2VkLCBhbmQgdGhlIGZvcnRoIGZncmFwaF9vcHNcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNTktICogc3RvcmVkIHR3byB3b3JkcyBvZiBkYXRhLCB0aGlzIGlzIHdoYXQgd2lsbCBiZSBvbiB0aGUgdGFzaydzIHNoYWRvd1xcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTcxLSAqIHwgICAgICAgICAqb3IgcHV0IGFub3RoZXIgd2F5KiAgICAgICAgICAgICAgIHxcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6NzI6ICogfCAoMyBcXHUwMDNjXFx1MDAzYyBGR1JBUEhfREFUQV9JTkRFWF9TSElGVCl8IFxcXFwgICAgICAgICAgfCBUaGlzIGlzIGZvciBmZ3JhcGhfb3BzWzNdLlxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy03My0gKiB8ICgoMiAtIDEpIFxcdTAwM2NcXHUwMDNjIEZHUkFQSF9EQVRBX1NISUZUKXwgXFxcXCAgICAgICAgICB8IFRoZSBkYXRhIHNpemUgaXMgMiB3b3Jkcy5cXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMTU9ZW51bSB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTY1LS8qXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjE2NjogKiBFYWNoIGZncmFwaF9vcHMgaGFzIGEgcmVzZXJ2ZWQgdW5zaWduZWQgbG9uZyBhdCB0aGUgZW5kICh0b3ApIG9mIHRoZVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xNjctICogcmV0X3N0YWNrIHRvIHN0b3JlIHRhc2sgc3BlY2lmaWMgc3RhdGUuXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9MTc1PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZmdyYXBoX3N0YWNrX2NhY2hlcDtcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTc2LVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxNzc6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzICpmZ3JhcGhfYXJyYXlbRkdSQVBIX0FSUkFZX1NJWkVdO1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xNzgtc3RhdGljIHVuc2lnbmVkIGxvbmcgZmdyYXBoX2FycmF5X2JpdG1hc2s7XFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9Mjg3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtYWtlX2RhdGFfdHlwZV92YWwoaW50IGlkeCwgaW50IHNpemUsIGludCBvZmZzZXQpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMjk0LS8qIGZ0cmFjZV9ncmFwaF9lbnRyeSBzZXQgdG8gdGhpcyB0byB0ZWxsIHNvbWUgYXJjaHMgdG8gcnVuIGZ1bmN0aW9uIGdyYXBoICovXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjI5NTpzdGF0aWMgaW50IGVudHJ5X3J1bihzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsIHN0cnVjdCBmZ3JhcGhfb3BzICpvcHMsXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTI5Ni1cXHRcXHQgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzAxLS8qIGZ0cmFjZV9ncmFwaF9yZXR1cm4gc2V0IHRvIHRoaXMgdG8gdGVsbCBzb21lIGFyY2hzIHRvIHJ1biBmdW5jdGlvbiBncmFwaCAqL1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzozMDI6c3RhdGljIHZvaWQgcmV0dXJuX3J1bihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsIHN0cnVjdCBmZ3JhcGhfb3BzICpvcHMsXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTMwMy1cXHRcXHQgICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0zMjI9c3RhdGljIHZvaWQgcmV0X3N0YWNrX2luaXRfdGFza192YXJzKHVuc2lnbmVkIGxvbmcgKnJldF9zdGFjaylcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zMzQtICogUmVzZXJ2ZXMgc3BhY2Ugb2YgdXAgdG8gRkdSQVBIX01BWF9EQVRBX1NJWkUgYnl0ZXMgb24gdGhlXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjMzNTogKiB0YXNrJ3MgcmV0X3N0YWNrIHNoYWRvdyBzdGFjaywgZm9yIGEgZ2l2ZW4gZmdyYXBoX29wcyBkdXJpbmdcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzM2LSAqIHRoZSBlbnRyeWZ1bmMoKSBjYWxsLiBJZiBlbnRyeWZ1bmMoKSByZXR1cm5zIHplcm8sIHRoZSBzdG9yYWdlXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTMzNy0gKiBpcyBkaXNjYXJkZWQuIEFuIGVudHJ5ZnVuYygpIGNhbiBvbmx5IGNhbGwgdGhpcyBvbmNlIHBlciBpdGVyYXRpb24uXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjMzODogKiBUaGUgZmdyYXBoX29wcyByZXRmdW5jKCkgY2FuIHJldHJpZXZlIHRoaXMgc3RvcmVkIGRhdGEgd2l0aFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zMzktICogZmdyYXBoX3JldHJpZXZlX2RhdGEoKS5cXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0zNDY9dm9pZCAqZmdyYXBoX3Jlc2VydmVfZGF0YShpbnQgaWR4LCBpbnQgc2l6ZV9ieXRlcylcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zODEtICogZmdyYXBoX3JldHJpZXZlX2RhdGEgLSBSZXRyaWV2ZSBzdG9yZWQgZGF0YSBmcm9tIGZncmFwaF9yZXNlcnZlX2RhdGEoKVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzozODI6ICogQGlkeDpcXHR0aGUgaW5kZXggb2YgZmdyYXBoX2FycmF5IChmZ3JhcGhfb3BzOjppZHgpXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTM4My0gKiBAc2l6ZV9ieXRlczogcG9pbnRlciB0byByZXRyaWV2ZWQgZGF0YSBzaXplLlxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zODQtICpcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6Mzg1OiAqIFRoaXMgaXMgdG8gYmUgY2FsbGVkIGJ5IGEgZmdyYXBoX29wcyByZXRmdW5jKCksIHRvIHJldHJpZXZlIGRhdGEgdGhhdFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzozODY6ICogd2FzIHN0b3JlZCBieSB0aGUgZmdyYXBoX29wcyBlbnRyeWZ1bmMoKSBvbiB0aGUgZnVuY3Rpb24gZW50cnkuXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTM4Ny0gKiBUaGF0IGlzLCB0aGlzIHdpbGwgcmV0cmlldmUgdGhlIGRhdGEgdGhhdCB3YXMgcmVzZXJ2ZWQgb24gdGhlXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTM4OC0gKiBlbnRyeSBvZiB0aGUgZnVuY3Rpb24gdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgZXhpdCBvZiB0aGUgZnVuY3Rpb25cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6Mzg5OiAqIHRoYXQgdGhlIGZncmFwaF9vcHMgcmV0ZnVuYygpIGlzIGNhbGxlZCBvbi5cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzkwLSAqXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9Mzk1PXZvaWQgKmZncmFwaF9yZXRyaWV2ZV9kYXRhKGludCBpZHgsIGludCAqc2l6ZV9ieXRlcylcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy00MDMtICpcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6NDA0OiAqIEV2ZXJ5IHJlZ2lzdGVyZWQgZmdyYXBoX29wcyBoYXMgYSB0YXNrIHN0YXRlIHZhcmlhYmxlXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQwNS0gKiByZXNlcnZlZCBvbiB0aGUgdGFzaydzIHJldF9zdGFjay4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQwNy0gKlxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo0MDg6ICogUmV0dXJucyB0aGUgYWRkcmVzcyB0byB0aGUgZmdyYXBoX29wcyBAZ29wcyB0YXNrcyBzcGVjaWZpY1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy00MDktICogdW5zaWduZWQgbG9uZyB2YXJpYWJsZS5cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDEwLSAqL1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo0MTE6dW5zaWduZWQgbG9uZyAqZmdyYXBoX2dldF90YXNrX3ZhcihzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcylcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDEyLXtcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz00MzQ9Z2V0X3JldF9zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBvZmZzZXQsIGludCAqZnJhbWVfb2Zmc2V0KVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQ1NC0gKiBmZ3JhcGhfcmV0cmlldmVfcGFyZW50X2RhdGEgLSBnZXQgZGF0YSBmcm9tIGEgcGFyZW50IGZ1bmN0aW9uXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjQ1NTogKiBAaWR4OiBUaGUgaW5kZXggaW50byB0aGUgZmdyYXBoX2FycmF5IChmZ3JhcGhfb3BzOjppZHgpXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQ1Ni0gKiBAc2l6ZV9ieXRlczogQSBwb2ludGVyIHRvIHJldHJpZXZlZCBkYXRhIHNpemVcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz01MjE9aW50IGZ0cmFjZV9ncmFwaF9lbnRyeV9zdHViKHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6NTIyOlxcdFxcdFxcdCAgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNTIzLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTUyOD1zdGF0aWMgdm9pZCBmdHJhY2VfZ3JhcGhfcmV0X3N0dWIoc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo1Mjk6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNTMwLVxcdFxcdFxcdFxcdCAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy01MzMtXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjUzNDpzdGF0aWMgc3RydWN0IGZncmFwaF9vcHMgZmdyYXBoX3N0dWIgPSB7XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTUzNS1cXHQuZW50cnlmdW5jID0gZnRyYWNlX2dyYXBoX2VudHJ5X3N0dWIsXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNTM4LVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo1Mzk6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzICpmZ3JhcGhfZGlyZWN0X2dvcHMgPSBcXHUwMDI2ZmdyYXBoX3N0dWI7XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTU0MC1ERUZJTkVfU1RBVElDX0NBTEwoZmdyYXBoX2Z1bmMsIGZ0cmFjZV9ncmFwaF9lbnRyeV9zdHViKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz02NTI9aW50IGZ1bmN0aW9uX2dyYXBoX2VudGVyX3JlZ3ModW5zaWduZWQgbG9uZyByZXQsIHVuc2lnbmVkIGxvbmcgZnVuYyxcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy02ODYtXFx0XFx0XFx0XFx0XFx0IHNpemVvZihmZ3JhcGhfYXJyYXlfYml0bWFzaykgKiBCSVRTX1BFUl9CWVRFKSB7XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjY4NzpcXHRcXHRcXHRzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyA9IFJFQURfT05DRShmZ3JhcGhfYXJyYXlbaV0pO1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy02ODgtXFx0XFx0XFx0aW50IHNhdmVfY3Vycl9yZXRfc3RhY2s7XFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9ODEyPV9fZnRyYWNlX3JldHVybl90b19oYW5kbGVyKHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MsIHVuc2lnbmVkIGxvbmcgZnJhbWVfcG9pbnRlcilcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy04NTYtXFx0XFx0Zm9yX2VhY2hfc2V0X2JpdChpLCBcXHUwMDI2Yml0bWFwLCBzaXplb2YoYml0bWFwKSAqIEJJVFNfUEVSX0JZVEUpIHtcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6ODU3OlxcdFxcdFxcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzID0gUkVBRF9PTkNFKGZncmFwaF9hcnJheVtpXSk7XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTg1OC1cXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMDEyPXZvaWQgZmdyYXBoX2luaXRfb3BzKHN0cnVjdCBmdHJhY2Vfb3BzICpkc3Rfb3BzLFxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEwMzEtICovXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjEwMzI6dm9pZCBmdHJhY2Vfc3R1Yl9ncmFwaChzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMDMzLVxcdFxcdCAgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMTk2PXN0YXRpYyBpbnQgZmdyYXBoX3BpZF9mdW5jKHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTE5NzpcXHRcXHRcXHQgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE5OC1cXHRcXHRcXHQgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTEyMTU9dm9pZCBmZ3JhcGhfdXBkYXRlX3BpZF9mdW5jKHZvaWQpXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEyMTYte1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMjE3OlxcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzO1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMjE4LVxcdHN0cnVjdCBmdHJhY2Vfb3BzICpvcDtcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMjI0LVxcdFxcdGlmIChvcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGVFJBQ0VfT1BTX0ZMX1BJRCkge1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMjI1OlxcdFxcdFxcdGdvcHMgPSBjb250YWluZXJfb2Yob3AsIHN0cnVjdCBmZ3JhcGhfb3BzLCBvcHMpO1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMjI2LVxcdFxcdFxcdGdvcHMtXFx1MDAzZWVudHJ5ZnVuYyA9IGZ0cmFjZV9waWRzX2VuYWJsZWQob3ApID9cXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMjY4PXN0YXRpYyB2b2lkIGluaXRfdGFza192YXJzKGludCBpZHgpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTI4NS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTI4NjpzdGF0aWMgdm9pZCBmdHJhY2VfZ3JhcGhfZW5hYmxlX2RpcmVjdChib29sIGVuYWJsZV9icmFuY2gsIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzKVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMjg3LXtcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMzI5PXN0YXRpYyBpbnQgZmdyYXBoX2NwdV9pbml0KHVuc2lnbmVkIGludCBjcHUpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTMzNS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTMzNjppbnQgcmVnaXN0ZXJfZnRyYWNlX2dyYXBoKHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzKVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMzM3LXtcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMzU3LVxcdGlmICghZmdyYXBoX2luaXRpYWxpemVkKSB7XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjEzNTg6XFx0XFx0cmV0ID0gY3B1aHBfc2V0dXBfc3RhdGUoQ1BVSFBfQVBfT05MSU5FX0RZTiwgXFxcImZncmFwaDpvbmxpbmVcXFwiLFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMzU5LVxcdFxcdFxcdFxcdFxcdGZncmFwaF9jcHVfaW5pdCwgTlVMTCk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTQyNS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTQyNjp2b2lkIHVucmVnaXN0ZXJfZnRyYWNlX2dyYXBoKHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzKVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xNDI3LXtcXG4tLVxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYz00Nz1zdGF0aWMgREVGSU5FX01VVEVYKGZwcm9iZV9tdXRleCk7XFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jOjQ4OnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyBmcHJvYmVfZ3JhcGhfb3BzO1xcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy00OS1cXG4tLVxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYz0yMDE9c3RhdGljIGlubGluZSB2b2lkIHJlYWRfZnByb2JlX2hlYWRlcih1bnNpZ25lZCBsb25nICpzdGFjayxcXG4tLVxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy0yMTMtICogZnByb2JlIHNoYWRvdyBzdGFjayBtYW5hZ2VtZW50Olxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYzoyMTQ6ICogU2luY2UgZnByb2JlIHNoYXJlcyBhIHNpbmdsZSBmZ3JhcGhfb3BzLCBpdCBuZWVkcyB0byBzaGFyZSB0aGUgc3RhY2sgZW50cnlcXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtMjE1LSAqIGFtb25nIHRoZSBwcm9iZXMgb24gdGhlIHNhbWUgZnVuY3Rpb24gZXhpdC4gTm90ZSB0aGF0IGEgbmV3IHByb2JlIGNhbiBiZVxcbi0tXFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jPTIzMT1zdGF0aWMgaW5saW5lIGludCBfX2Zwcm9iZV9rcHJvYmVfaGFuZGxlcih1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCxcXG4tLVxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy0yNTItXFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jOjI1MzpzdGF0aWMgaW50IGZwcm9iZV9mZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLCBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtMjU0LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKTtcXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM9MjU1PXN0YXRpYyB2b2lkIGZwcm9iZV9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYzoyNTY6XFx0XFx0XFx0ICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtMjU3LVxcdFxcdFxcdCAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncyk7XFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jLTI1OC1cXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM6MjU5OnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyBmcHJvYmVfZ3JhcGhfb3BzID0ge1xcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy0yNjAtXFx0LmVudHJ5ZnVuY1xcdD0gZnByb2JlX2ZncmFwaF9lbnRyeSxcXG4tLVxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYz01NDM9c3RhdGljIHZvaWQgZnByb2JlX3JlbW92ZV9pcHModW5zaWduZWQgbG9uZyAqaXBzLCB1bnNpZ25lZCBpbnQgY250KVxcbi0tXFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jLTU1Mi1cXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM6NTUzOi8qIGZncmFwaF9vcHMgY2FsbGJhY2ssIHRoaXMgcHJvY2Vzc2VzIGZwcm9iZXMgd2hpY2ggaGF2ZSBleGl0X2hhbmRsZXIuICovXFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jOjU1NDpzdGF0aWMgaW50IGZwcm9iZV9mZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLCBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtNTU1LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jPTY1MD1zdGF0aWMgdm9pZCBmcHJvYmVfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSxcXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM6NjUxOlxcdFxcdFxcdCAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jLTY1Mi1cXHRcXHRcXHQgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM9ODQxPXN0YXRpYyBpbnQgcHJvZmlsZV9ncmFwaF9lbnRyeShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jOjg0MjpcXHRcXHRcXHQgICAgICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTg0My1cXHRcXHRcXHQgICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYz04NjY9c3RhdGljIHZvaWQgcHJvZmlsZV9ncmFwaF9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYzo4Njc6XFx0XFx0XFx0XFx0IHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy04NjgtXFx0XFx0XFx0XFx0IHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtOTE2LVxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYzo5MTc6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzIGZwcm9maWxlcl9vcHMgPSB7XFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTkxOC1cXHQuZW50cnlmdW5jID0gXFx1MDAyNnByb2ZpbGVfZ3JhcGhfZW50cnksXFxuLS1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM9NDQ1MT1zdGF0aWMgdm9pZCBwcmludF9zdWJvcHMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCBzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKVxcbi0tXFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTQ0NjUtXFx0XFx0aWYgKHN1Ym9wcy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGVFJBQ0VfT1BTX0ZMX0dSQVBIKSB7XFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jOjQ0NjY6XFx0XFx0XFx0c3RydWN0IGZncmFwaF9vcHMgKmdvcHM7XFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTQ0NjctXFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jOjQ0Njg6XFx0XFx0XFx0Z29wcyA9IGNvbnRhaW5lcl9vZihzdWJvcHMsIHN0cnVjdCBmZ3JhcGhfb3BzLCBvcHMpO1xcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy00NDY5LVxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiB7ZW50OiVwUyByZXQ6JXBTfVxcXCIsXFxuLS1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM9ODQ5Nz1fX2luaXQgdm9pZCBmdHJhY2VfaW5pdF9nbG9iYWxfYXJyYXlfb3BzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtODUwMi1cXHRmdHJhY2VfaW5pdF90cmFjZV9hcnJheSh0cik7XFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jOjg1MDM6XFx0aW5pdF9hcnJheV9mZ3JhcGhfb3BzKHRyLCB0ci1cXHUwMDNlb3BzKTtcXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtODUwNC19XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuaD0zMzM9c3RydWN0IHRyYWNlX2FycmF5IHtcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5oLTQzNy0jaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUlxcbmtlcm5lbC90cmFjZS90cmFjZS5oOjQzODpcXHRzdHJ1Y3QgZmdyYXBoX29wc1xcdCpnb3BzO1xcbmtlcm5lbC90cmFjZS90cmFjZS5oLTQzOS0jZW5kaWZcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5oPTgxNz12b2lkIHByaW50X3RyYWNlX2hlYWRlcihzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcik7XFxua2VybmVsL3RyYWNlL3RyYWNlLmgtODE4LVxcbmtlcm5lbC90cmFjZS90cmFjZS5oOjgxOTp2b2lkIHRyYWNlX2dyYXBoX3JldHVybihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS90cmFjZS5oLTgyMC1cXHRcXHRcXHRzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKTtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDo4MjE6aW50IHRyYWNlX2dyYXBoX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSwgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL3RyYWNlLmgtODIyLVxcdFxcdCAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpO1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmg9MTA2MD1leHRlcm4gdm9pZCBfX3RyYWNlX2dyYXBoX3JldHVybihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLFxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTA2NC1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMDY1OmV4dGVybiB2b2lkIGluaXRfYXJyYXlfZmdyYXBoX29wcyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKTtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMDY2OmV4dGVybiBpbnQgYWxsb2NhdGVfZmdyYXBoX29wcyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKTtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMDY3OmV4dGVybiB2b2lkIGZyZWVfZmdyYXBoX29wcyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKTtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0xMDY4LVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmg9MTE2Mz1zdGF0aWMgaW5saW5lIHZvaWRcXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMTY0OmZ0cmFjZV9ncmFwaF9hZGRyX2ZpbmlzaChzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcywgc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlKVxcbmtlcm5lbC90cmFjZS90cmFjZS5oLTExNjUte1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmg9MTIwMT1zdGF0aWMgaW5saW5lIGludCBmdHJhY2VfZ3JhcGhfbm90cmFjZV9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5oLTEyMDQtfVxcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEyMDU6c3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9hZGRyX2ZpbmlzaChzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcywgc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlKVxcbmtlcm5lbC90cmFjZS90cmFjZS5oLTEyMDYteyB9XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuaD0xMjEzPXN0YXRpYyBpbmxpbmUgYm9vbFxcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEyMTQ6ZnRyYWNlX2dyYXBoX2lnbm9yZV9mdW5jKHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLCBzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UpXFxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTIxNS17XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuaD0xMjMwPXByaW50X2dyYXBoX2Z1bmN0aW9uX2ZsYWdzKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgdTMyIGZsYWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTIzMy19XFxua2VybmVsL3RyYWNlL3RyYWNlLmg6MTIzNDpzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9mZ3JhcGhfb3BzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpIHsgfVxcbmtlcm5lbC90cmFjZS90cmFjZS5oLTEyMzUtLyogZnRyYWNlX29wcyBtYXkgbm90IGJlIGRlZmluZWQgKi9cXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMjM2OiNkZWZpbmUgaW5pdF9hcnJheV9mZ3JhcGhfb3BzKHRyLCBvcHMpIGRvIHsgfSB3aGlsZSAoMClcXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMjM3OiNkZWZpbmUgYWxsb2NhdGVfZmdyYXBoX29wcyh0ciwgb3BzKSAoeyAwOyB9KVxcbmtlcm5lbC90cmFjZS90cmFjZS5oLTEyMzgtI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIgKi9cXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYz04ND1pbnQgZnRyYWNlX2NyZWF0ZV9mdW5jdGlvbl9maWxlcyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLFxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jLTk3LVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYzo5ODpcXHRyZXQgPSBhbGxvY2F0ZV9mZ3JhcGhfb3BzKHRyLCB0ci1cXHUwMDNlb3BzKTtcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMtOTktXFx0aWYgKHJldCkge1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jPTEwOT12b2lkIGZ0cmFjZV9kZXN0cm95X2Z1bmN0aW9uX2ZpbGVzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMtMTEyLVxcdGZ0cmFjZV9mcmVlX2Z0cmFjZV9vcHModHIpO1xcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYzoxMTM6XFx0ZnJlZV9mZ3JhcGhfb3BzKHRyKTtcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMtMTE0LX1cXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYz0yMjU9c3RhdGljIGludCBncmFwaF9lbnRyeShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jOjIyNjpcXHRcXHQgICAgICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTIyNy1cXHRcXHQgICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYz0yOTQ9aW50IHRyYWNlX2dyYXBoX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM6Mjk1OlxcdFxcdCAgICAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy0yOTYtXFx0XFx0ICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYz0zMDE9c3RhdGljIGludCB0cmFjZV9ncmFwaF9lbnRyeV9hcmdzKHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM6MzAyOlxcdFxcdFxcdFxcdCAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTMwMy1cXHRcXHRcXHRcXHQgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM9MzY4PXZvaWQgdHJhY2VfZ3JhcGhfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSxcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM6MzY5OlxcdFxcdFxcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLCBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy0zNzAte1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jPTM5OT1zdGF0aWMgdm9pZCB0cmFjZV9ncmFwaF90aHJlc2hfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSxcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM6NDAwOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00MDEtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00MzQtXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jOjQzNTpzdGF0aWMgc3RydWN0IGZncmFwaF9vcHMgZnVuY2dyYXBoX29wcyA9IHtcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtNDM2LVxcdC5lbnRyeWZ1bmMgPSBcXHUwMDI2dHJhY2VfZ3JhcGhfZW50cnksXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtNDM5LVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzo0NDA6aW50IGFsbG9jYXRlX2ZncmFwaF9vcHMoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgc3RydWN0IGZ0cmFjZV9vcHMgKm9wcylcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtNDQxLXtcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM6NDQyOlxcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzO1xcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00NDMtXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtNDU4LVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzo0NTk6dm9pZCBmcmVlX2ZncmFwaF9vcHMoc3RydWN0IHRyYWNlX2FycmF5ICp0cilcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtNDYwLXtcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00NjMtXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jOjQ2NDpfX2luaXQgdm9pZCBpbml0X2FycmF5X2ZncmFwaF9vcHMoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgc3RydWN0IGZ0cmFjZV9vcHMgKm9wcylcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtNDY1LXtcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmM9MTc4PXN0YXRpYyBpbnQgaXJxc29mZl9ncmFwaF9lbnRyeShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYzoxNzk6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMtMTgwLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYz0yMTU9c3RhdGljIHZvaWQgaXJxc29mZl9ncmFwaF9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmM6MjE2OlxcdFxcdFxcdFxcdCBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jLTIxNy1cXHRcXHRcXHRcXHQgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMtMjQwLVxcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmM6MjQxOnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyBmZ3JhcGhfb3BzID0ge1xcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMtMjQyLVxcdC5lbnRyeWZ1bmNcXHRcXHQ9IFxcdTAwMjZpcnFzb2ZmX2dyYXBoX2VudHJ5LFxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYz00ODQ9c3RhdGljIGludCByZWdpc3Rlcl9pcnFzb2ZmX2Z1bmN0aW9uKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIGludCBncmFwaCwgaW50IHNldClcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMtNDkyLVxcdGlmIChncmFwaClcXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jOjQ5MzpcXHRcXHRyZXQgPSByZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoXFx1MDAyNmZncmFwaF9vcHMpO1xcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMtNDk0LVxcdGVsc2VcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmM9NTAzPXN0YXRpYyB2b2lkIHVucmVnaXN0ZXJfaXJxc29mZl9mdW5jdGlvbihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBpbnQgZ3JhcGgpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jLTUwOC1cXHRpZiAoZ3JhcGgpXFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYzo1MDk6XFx0XFx0dW5yZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoXFx1MDAyNmZncmFwaF9vcHMpO1xcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMtNTEwLVxcdGVsc2VcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYz0xMTU9c3RhdGljIGludCB3YWtldXBfZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYzoxMTY6XFx0XFx0XFx0ICAgICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jLTExNy1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jPTE1MT1zdGF0aWMgdm9pZCB3YWtldXBfZ3JhcGhfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSxcXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmM6MTUyOlxcdFxcdFxcdFxcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYy0xNTMtXFx0XFx0XFx0XFx0c3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYy0xNzctXFxua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jOjE3ODpzdGF0aWMgc3RydWN0IGZncmFwaF9vcHMgZmdyYXBoX3dha2V1cF9vcHMgPSB7XFxua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jLTE3OS1cXHQuZW50cnlmdW5jID0gXFx1MDAyNndha2V1cF9ncmFwaF9lbnRyeSxcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jPTc2OD1zdHJ1Y3QgZmdyYXBoX2ZpeHR1cmUge1xcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjc2OTpcXHRzdHJ1Y3QgZmdyYXBoX29wcyBnb3BzO1xcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTc3MC1cXHRpbnQgc3RvcmVfc2l6ZTtcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jPTc3Nj1zdGF0aWMgX19pbml0IGludCBzdG9yZV9lbnRyeShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6Nzc3OlxcdFxcdFxcdCAgICAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTc3OC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM9ODEwPXN0YXRpYyBfX2luaXQgdm9pZCBzdG9yZV9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjgxMTpcXHRcXHRcXHRcXHRzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy04MTItXFx0XFx0XFx0XFx0c3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jPTEwMjk9c3RhdGljIGludCB0cmFjZV9ncmFwaF9lbnRyeV93YXRjaGRvZyhzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6MTAzMDpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMDMxLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMDQ3LVxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjEwNDg6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzIGZncmFwaF9vcHMgX19pbml0ZGF0YSAgPSB7XFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTA0OS1cXHQuZW50cnlmdW5jXFx0XFx0PSBcXHUwMDI2dHJhY2VfZ3JhcGhfZW50cnlfd2F0Y2hkb2csXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYz0xMDYyPXRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfZnVuY3Rpb25fZ3JhcGgoc3RydWN0IHRyYWNlciAqdHJhY2UsXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMDgwLVxcdHRyYWNpbmdfcmVzZXRfb25saW5lX2NwdXMoXFx1MDAyNnRyLVxcdTAwM2VhcnJheV9idWZmZXIpO1xcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjEwODE6XFx0ZmdyYXBoX29wcy5wcml2YXRlID0gdHI7XFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6MTA4MjpcXHRyZXQgPSByZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoXFx1MDAyNmZncmFwaF9vcHMpO1xcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTEwODMtXFx0aWYgKHJldCkge1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTEwMy1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzoxMTA0OlxcdC8qIE5lZWQgdG8gYWxzbyBzaW11bGF0ZSB0aGUgdHItXFx1MDAzZXJlc2V0IHRvIHJlbW92ZSB0aGlzIGZncmFwaF9vcHMgKi9cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMTA1LVxcdHRyYWNpbmdfc3RvcF9jbWRsaW5lX3JlY29yZCgpO1xcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjExMDY6XFx0dW5yZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoXFx1MDAyNmZncmFwaF9vcHMpO1xcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTExMDctXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMTIzLVxcdHRyYWNpbmdfcmVzZXRfb25saW5lX2NwdXMoXFx1MDAyNnRyLVxcdTAwM2VhcnJheV9idWZmZXIpO1xcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjExMjQ6XFx0ZmdyYXBoX29wcy5wcml2YXRlID0gdHI7XFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTEyNS1cXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTExNDUtXFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6MTE0NjpcXHRyZXQgPSByZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoXFx1MDAyNmZncmFwaF9vcHMpO1xcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTExNDctXFx0aWYgKHJldCkge1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTE1OS1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzoxMTYwOlxcdHVucmVnaXN0ZXJfZnRyYWNlX2dyYXBoKFxcdTAwMjZmZ3JhcGhfb3BzKTtcXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMTYxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NDozNy41NTQzNDE5OThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzQ3MzUyMDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOlxuXG4qKktlcm5lbCBQYXRjaCBBbmFseXNpczogRnRyYWNlIGFuZCBUYXNrIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gdGhlIHByb3Bvc2VkIHBhdGNoIHRhcmdldHMgYGtlcm5lbC9mb3JrLmNgLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIG1vdmluZyB0aGUgY2FsbCB0byBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgZWFybGllciBpbiB0aGUgYGZvcmtgIHByb2Nlc3MuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgcHJvYmFibHkgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRpbWluZyBvciByZXNvdXJjZSBhbGxvY2F0aW9uIGR1cmluZyB0aGUgdGFzayBjcmVhdGlvbi5cblxuTGV0J3Mgc2Vl4oCmIHJpZ2h0LCBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2Ag4oCTIHRoYXQncyB0aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRoZSByZXR1cm4gc3RhY2sgYWxsb2NhdGlvbiBmb3IgYSBuZXcgdGFzaywgYnV0IG9ubHkgaWYgYENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVJgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2U7IGl04oCZcyBjb25kaXRpb25hbCBvbiB0aGUgdHJhY2luZyBmZWF0dXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24sIEkga25vdyBpdC4gSG9sZCBvbiwgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgLi4uIHdhaXQgYSBtaW51dGUsIGl04oCZcyBkZWZpbmVkIGluIGBrZXJuZWwvdHJhY2UvZmdyYXBoLmNgLCBub3QgZGlyZWN0bHkgaW4gYGtlcm5lbC9mb3JrLmNgLiBCZXR0ZXIgY2hlY2sgdGhhdC4gT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgdGhpcyBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTc5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDQ6NDQuOTAxNjk2MThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczNjY0MjIzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzQyPWV4dGVybiB0cmFjZV9mdW5jX2dyYXBoX2VudF90IGZ0cmFjZV9ncmFwaF9lbnRyeTtcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNDMtXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzQ0OmV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KTtcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNDUtZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzU2PXN0YXRpYyBpbmxpbmUgdm9pZCB1bnBhdXNlX2dyYXBoX3RyYWNpbmcodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM2My1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNjQ6c3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNjUtc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMTMxPXZvaWQgZnRyYWNlX2dyYXBoX2luaXRfaWRsZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgaW50IGNwdSlcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMTU5LS8qIEFsbG9jYXRlIGEgcmV0dXJuIHN0YWNrIGZvciBuZXdseSBjcmVhdGVkIHRhc2sgKi9cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTE2MDp2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMTYxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDQ6NDYuNjM4MzQzMTAyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI5MzY2NzY1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gZmdyYXBoLmMgZm9yIEZ1bmN0aW9uIEdyYXBoIFRyYWNpbmcqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRoaW5raW5nIHdlIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgYGtlcm5lbC90cmFjZS9mZ3JhcGguY2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDExNjAuIE15IGd1dCB0ZWxscyBtZSB0aGF0J3Mgd2hlcmUgd2UnbGwgZmluZCB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2luZyBtZWNoYW5pc20uIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBjYXB0dXJpbmcgYW5kIG1hbmFnaW5nIHRoZSBjYWxsIGdyYXBoIGRhdGEuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb24gY2FsbHMgcmVzcG9uc2libGUgZm9yIHRoZSBpbnN0cnVtZW50YXRpb24sIHBlcmhhcHMgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHRyYWNlcG9pbnQgaW5mcmFzdHJ1Y3R1cmUgYW5kIHRoZSBjb250cm9sIGZsb3cgYXNwZWN0cywgdG9vLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI5OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ0OjU5LjU3NTAyMTgzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvZmdyYXBoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE1MDpcXHRcXHRcXHRcXHRyZXRfc3RhY2sgPSBrbWVtX2NhY2hlX2FsbG9jKGZncmFwaF9zdGFja19jYWNoZXAsIEdGUF9LRVJORUwpO1xcbjExNTE6XFx0XFx0XFx0XFx0aWYgKCFyZXRfc3RhY2spXFxuMTE1MjpcXHRcXHRcXHRcXHRcXHRyZXR1cm47XFxuMTE1MzpcXHRcXHRcXHRcXHRwZXJfY3B1KGlkbGVfcmV0X3N0YWNrLCBjcHUpID0gcmV0X3N0YWNrO1xcbjExNTQ6XFx0XFx0XFx0fVxcbjExNTU6XFx0XFx0XFx0Z3JhcGhfaW5pdF90YXNrKHQsIHJldF9zdGFjayk7XFxuMTE1NjpcXHRcXHR9XFxuMTE1NzpcXHR9XFxuMTE1ODpcXHRcXG4xMTU5OlxcdC8qIEFsbG9jYXRlIGEgcmV0dXJuIHN0YWNrIGZvciBuZXdseSBjcmVhdGVkIHRhc2sgKi9cXG4xMTYwOlxcdHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxuMTE2MTpcXHR7XFxuMTE2MjpcXHRcXHQvKiBNYWtlIHN1cmUgd2UgZG8gbm90IHVzZSB0aGUgcGFyZW50IHJldF9zdGFjayAqL1xcbjExNjM6XFx0XFx0dC1cXHUwMDNlcmV0X3N0YWNrID0gTlVMTDtcXG4xMTY0OlxcdFxcdHQtXFx1MDAzZWN1cnJfcmV0X3N0YWNrID0gMDtcXG4xMTY1OlxcdFxcdHQtXFx1MDAzZWN1cnJfcmV0X2RlcHRoID0gLTE7XFxuMTE2NjpcXHRcXG4xMTY3OlxcdFxcdGlmIChmdHJhY2VfZ3JhcGhfYWN0aXZlKSB7XFxuMTE2ODpcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpyZXRfc3RhY2s7XFxuMTE2OTpcXHRcXG4xMTcwOlxcdFxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWZncmFwaF9zdGFja19jYWNoZXApKVxcbjExNzE6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjExNzI6XFx0XFxuMTE3MzpcXHRcXHRcXHRyZXRfc3RhY2sgPSBrbWVtX2NhY2hlX2FsbG9jKGZncmFwaF9zdGFja19jYWNoZXAsIEdGUF9LRVJORUwpO1xcbjExNzQ6XFx0XFx0XFx0aWYgKCFyZXRfc3RhY2spXFxuMTE3NTpcXHRcXHRcXHRcXHRyZXR1cm47XFxuMTE3NjpcXHRcXHRcXHRncmFwaF9pbml0X3Rhc2sodCwgcmV0X3N0YWNrKTtcXG4xMTc3OlxcdFxcdH1cXG4xMTc4OlxcdH1cXG4xMTc5OlxcdFxcbjExODA6XFx0dm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG4xMTgxOlxcdHtcXG4xMTgyOlxcdFxcdHVuc2lnbmVkIGxvbmcgKnJldF9zdGFjayA9IHQtXFx1MDAzZXJldF9zdGFjaztcXG4xMTgzOlxcdFxcbjExODQ6XFx0XFx0dC1cXHUwMDNlcmV0X3N0YWNrID0gTlVMTDtcXG4xMTg1OlxcdFxcdC8qIE5VTEwgbXVzdCBiZWNvbWUgdmlzaWJsZSB0byBJUlFzIGJlZm9yZSB3ZSBmcmVlIGl0OiAqL1xcbjExODY6XFx0XFx0YmFycmllcigpO1xcbjExODc6XFx0XFxuMTE4ODpcXHRcXHRpZiAocmV0X3N0YWNrKSB7XFxuMTE4OTpcXHRcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFmZ3JhcGhfc3RhY2tfY2FjaGVwKSlcXG4xMTkwOlxcdFxcdFxcdFxcdHJldHVybjtcXG4xMTkxOlxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShmZ3JhcGhfc3RhY2tfY2FjaGVwLCByZXRfc3RhY2spO1xcbjExOTI6XFx0XFx0fVxcbjExOTM6XFx0fVxcbjExOTQ6XFx0XFxuMTE5NTpcXHQjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFXFxuMTE5NjpcXHRzdGF0aWMgaW50IGZncmFwaF9waWRfZnVuYyhzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXFxuMTE5NzpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG4xMTk4OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuMTE5OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ0OjU5LjU3NTExODA2OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjgyOTgwMzI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTdWJ0bGUgUmFjZSBDb25kaXRpb24gaW4gYGNvcHlfcHJvY2Vzc2AgYW5kIHRoZSBGdHJhY2UgR3JhcGggVHJhY2VyKipcblxuT2theSwgc28gaGVyZSdzIHRoZSBkZWFsLiBJJ3ZlIHN0dW1ibGVkIHVwb24gYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaXNzdWUgaW4gdGhlIGtlcm5lbCwgYW5kIGl0J3MgcmVsYXRlZCB0byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgY29weV9wcm9jZXNzYCAoc3BlY2lmaWNhbGx5IGluIGl0cyBlcnJvciBoYW5kbGluZyBwYXRocykgYW5kIHRoZSBGdW5jdGlvbiBHcmFwaCBUcmFjZXIgKGBmdHJhY2VgKS4gSSd2ZSBub3RpY2VkIHRoYXQgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIHNldHMgYHQtXHUwMDNlcmV0X3N0YWNrYCB0byBgTlVMTGAuIFRoZSBwcm9ibGVtIGFyaXNlcyB3aGVuIHRoaXMgY2FsbCBoYXBwZW5zICphZnRlciogb3RoZXIgb3BlcmF0aW9ucyB3aXRoaW4gYGNvcHlfcHJvY2Vzc2Agd2hpY2ggY291bGQgcG90ZW50aWFsbHkgZmFpbCwgbGlrZSBgY29weV9leGVjX3N0YXRlYC5cblxuSWYgYW55IG9mIHRob3NlIGZhbGxpYmxlIG9wZXJhdGlvbnMgZmFpbCwgd2UgaGl0IGFuIGVycm9yIHBhdGggKGxpa2UgYGJhZF9mb3JrX2ZyZWVgKS4gSGVyZSdzIHRoZSBraWNrZXI6IGBkdXBfdGFza19zdHJ1Y3RgIGNvcGllcyB0aGUgKmVudGlyZSogYHRhc2tfc3RydWN0YCwgaW5jbHVkaW5nIGB0LVx1MDAzZXJldF9zdGFja2AuIElmIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBoYXNuJ3QgcnVuIHlldCwgYHQtXHUwMDNlcmV0X3N0YWNrYCBzdGlsbCBwb2ludHMgdG8gdGhlICpwYXJlbnQncyogcmV0dXJuIHN0YWNrLlxuXG5Ob3csIGluIHRoZSBlcnJvciBwYXRoIChlLmcuLCB3aXRoaW4gYGZyZWVfdGFza2Agb3IgYHB1dF90YXNrX3N0cnVjdGApLCBgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayh0KWAgZ2V0cyBjYWxsZWQsIHdoaWNoLCBjcml0aWNhbGx5LCAqZnJlZXMqIGB0LVx1MDAzZXJldF9zdGFja2AuIEJ1dCBoZXkhIGB0LVx1MDAzZXJldF9zdGFja2AgaXMgdGhlICpwYXJlbnQncyogc3RhY2ssIHNvIHdlJ3JlIGZyZWVpbmcgbWVtb3J5IHRoYXQgc3RpbGwgYmVsb25ncyB0byB0aGUgcGFyZW50IHRhc2suIFRoaXMgbGVhZHMgdG8gYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlLlxuXG5UaGUgZml4IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogbW92ZSBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgcmlnaHQgYWZ0ZXIgYGR1cF90YXNrX3N0cnVjdGAuIFRoaXMgd2F5LCBgdC1cdTAwM2VyZXRfc3RhY2tgIGlzIGNsZWFyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGNvcHkuIFRoaXMgc2VlbXMgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZvciBzdXJlLCBhbmQgZGVmaW5pdGVseSBmaXhlcyBhIGJ1Zy5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciBpdCdzIHdvcnRoIGZ1enppbmcgdGhpcyBmaXg/IEFic29sdXRlbHkuIFRoaXMgaXMgYSB1c2UtYWZ0ZXItZnJlZSwgc28gaXQncyBhIGhpZ2gtcHJpb3JpdHkgdGFyZ2V0LlxuXG5UbyB0cmlnZ2VyIHRoZSBidWcsIGBmdHJhY2VfZ3JhcGhfYWN0aXZlYCBkb2Vzbid0IG5lZWQgdG8gYmUgdHJ1ZS4gSXQncyBlbm91Z2ggdG8gaGF2ZSBgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgZW5hYmxlZC4gYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIGlzIGNvbXBpbGVkIGFuZCBsaW5rZWQgaW4gaWYgdGhpcyBpcyBzZXQsIGFuZCBpdCdzIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYCB0aGF0IGNhdXNlcyB0aGUgaXNzdWUgYnkgZnJlZWluZyBgdC1cdTAwM2VyZXRfc3RhY2tgIGlmIGl0J3Mgbm9uLU5VTEwuXG5cblNvLCBgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgaXMgb3VyIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbi4gV2UgYWxzbyBuZWVkIHRvIGZvY3VzIG9uIGZ1enppbmcgdGhlIGVycm9yIHBhdGhzIHdpdGhpbiBgY29weV9wcm9jZXNzYC4gU3BlY2lmaWMgZnVuY3Rpb25zIHRvIHRhcmdldCB3b3VsZCBiZTogYGNvcHlfcHJvY2Vzc2AsIGBjb3B5X2V4ZWNfc3RhdGVgLCBhbmQgYGR1cF90YXNrX3N0cnVjdGAuIEdpdmVuIHRoYXQgYGNvcHlfcHJvY2Vzc2AgaXMgYSBob3QtcGF0aCBhbmQgYWxyZWFkeSBoZWF2aWx5IGZ1enplZCwgaXQgbWF5IG5vdCBiZSBuZWNlc3NhcnkgdG8gc3BlY2lmeSBpdCBleHBsaWNpdGx5LCBidXQgd2Ugc2hvdWxkIHNwZWNpZnkgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGFuZCBgZnRyYWNlX2dyYXBoX2V4aXRfdGFza2AgdG8gZW5zdXJlIHRoZSBmdXp6ZXIgaGl0cyB0aGUgc3BlY2lmaWMgdHJhY2luZyBpbml0L2V4aXQgcGF0aHMuIEVzcGVjaWFsbHkgc2luY2UgdGhlIGlzc3VlIGlzIGxpa2VseSB0byBiZSBleHBvc2VkIHdoZW4gdHJhY2luZyBpcyBlbmFibGVkIGFuZCBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgaXMgYmVpbmcgY2FsbGVkIGF0IGV2ZXJ5IGZvcmsvY2xvbmUuIFRoaXMgd29uJ3QgYmUgb24gYnkgZGVmYXVsdCwgc28gd2UncmUgZ29pbmcgdG8gbmVlZCB0byBlbmFibGUgYENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVJgLlxuXG5SaWdodCwgbGV0IG1lIGRvdWJsZSBjaGVjayB0aGF0IGBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCBpcyBzdWZmaWNpZW50LiBBaGEsIGV2ZW4gaWYgYGZ0cmFjZV9ncmFwaF9hY3RpdmVgIGlzICpmYWxzZSosIHRoaXMgY2FuIHN0aWxsIGhhcHBlbiEgQmVjYXVzZSBgZHVwX3Rhc2tfc3RydWN0YCBjb3BpZXMgYHQtXHUwMDNlcmV0X3N0YWNrYCBmcm9tIHRoZSBwYXJlbnQgcmVnYXJkbGVzcy4gQXMgbG9uZyBhcyB0aGUgcGFyZW50IGhhcyBoYWQgdHJhY2luZyBlbmFibGVkIGF0IHNvbWUgcG9pbnQsIGB0LVx1MDAzZXJldF9zdGFja2AgbWlnaHQgYmUgbm9uLU5VTEwuIFRoZW4gdGhlIGVycm9yIHBhdGggdHJpZ2dlcnMgdGhlIFVBRi5cblxuT2theSwgc28gdGhlIGZpeCBpczogd2UgbW92ZSB0aGF0IGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBjYWxsICpiZWZvcmUqIGFueSBmYWxsaWJsZSBvcGVyYXRpb25zLiBMZXQncyBtYWtlIHN1cmUgdGhhdCBgZnJlZV90YXNrYCBpcyBhY3R1YWxseSB0aGUgb25lIGNhbGxpbmcgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIHRob3VnaCwgdG8gY29uZmlybSB0aGUgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyMzMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NToxMi40MDQ5MjQ3MzNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTg1ODA4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnRyYWNlX2dyYXBoX2V4aXRfdGFza1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEzNDQ9ZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTM0NTpleHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzQ2LWV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X2lkbGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjcHUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzY0PXN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkgeyB9XFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzY1OnN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkgeyB9XFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzY2LXN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF9pZGxlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY3B1KSB7IH1cXG4tLVxcbmtlcm5lbC9mb3JrLmM9NTMzPXZvaWQgZnJlZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxua2VybmVsL2ZvcmsuYy01NTUtXFx0cnRfbXV0ZXhfZGVidWdfdGFza19mcmVlKHRzayk7XFxua2VybmVsL2ZvcmsuYzo1NTY6XFx0ZnRyYWNlX2dyYXBoX2V4aXRfdGFzayh0c2spO1xcbmtlcm5lbC9mb3JrLmMtNTU3LVxcdGFyY2hfcmVsZWFzZV90YXNrX3N0cnVjdCh0c2spO1xcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTExNjA9dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMTc5LVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMTgwOnZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTExODEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NToxNC4xMjM1MTIzNTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA5MjkzNjk4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGByZXRfc3RhY2tgIFVzZS1BZnRlci1GcmVlIEJ1ZyoqXG5cbk9rYXksIHNvIGBmcmVlX3Rhc2tgICpkb2VzKiBjYWxsIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYC4gRXhjZWxsZW50LCB0aGUgYnVnIGlzIGV4YWN0bHkgYXMgSSBpbml0aWFsbHkgc3VzcGVjdGVkLiBMZXQncyBicmVhayBpdCBkb3duIGFnYWluIGluIG15IG1pbmQ6XG5cbjEuICBBIHBhcmVudCBwcm9jZXNzIGhhcyBpdHMgYHJldF9zdGFja2AgbWVtb3J5IGFsbG9jYXRlZC5cbjIuICBgZm9yaygpYCBpcyBpbnZva2VkLCBjcmVhdGluZyBhIGNoaWxkIHByb2Nlc3MuXG4zLiAgYGR1cF90YXNrX3N0cnVjdGAgY29waWVzIHRoZSBgdGFza19zdHJ1Y3RgLCBtZWFuaW5nIHRoZSBjaGlsZCBwcm9jZXNzJ3MgYHJldF9zdGFja2AgcG9pbnRlciAqYWxzbyogcG9pbnRzIHRvIHRoZSBwYXJlbnQncyBgcmV0X3N0YWNrYCBtZW1vcnkuIE1ha2VzIHNlbnNlLlxuNC4gIFRoZW4sIGEgZmFsbGlibGUgb3BlcmF0aW9uIGxpa2UgYGNvcHlfZXhlY19zdGF0ZWAgb3IgYGNvcHlfY3JlZHNgIGZhaWxzLiBUaGlzIGlzIHRoZSBjcnVjaWFsIHBvaW50LlxuNS4gIENvbnRyb2wganVtcHMgdG8gYSBgYmFkX2ZvcmtfZnJlZWAgcGF0aCAob3Igc2ltaWxhciksIHVsdGltYXRlbHkgbGVhZGluZyB0byBgZnJlZV90YXNrKGNoaWxkKWAuXG42LiAgSGVyZSdzIHdoZXJlIGl0IGdvZXMgc291dGg6IGBmcmVlX3Rhc2tgIGNhbGxzIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKGNoaWxkKWAuXG43LiAgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIHRoZW4gZnJlZXMgYGNoaWxkLVx1MDAzZXJldF9zdGFja2AsIHdoaWNoIGlzLCBpbiByZWFsaXR5LCAqdGhlIHBhcmVudCdzKiBgcmV0X3N0YWNrYCBtZW1vcnkuIEEgY2xhc3NpYy5cbjguICBUaGUgcGFyZW50LCBvYmxpdmlvdXMgdG8gdGhpcywgY29udGludWVzIGV4ZWN1dGluZyBhbmQsIGluZXZpdGFibHksIHVzZXMgaXRzIChub3cgZnJlZWQpIGByZXRfc3RhY2tgLCByZXN1bHRpbmcgaW4gYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LlxuXG5UaGUgZml4LCBtb3ZpbmcgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socClgIOKAkyB3aGljaCwgY3JpdGljYWxseSwgKnNldHMqIGB0LVx1MDAzZXJldF9zdGFjayA9IE5VTExgIOKAkyAqYmVmb3JlKiBhbnkgcG90ZW50aWFsbHkgZmFpbGluZyBvcGVyYXRpb25zIGFmdGVyIGBkdXBfdGFza19zdHJ1Y3RgLCBpcyBjbGVhbi4gSXQgZW5zdXJlcyB0aGF0IHRoZSBjaGlsZCdzIGByZXRfc3RhY2tgIGlzIGV4cGxpY2l0bHkgbnVsbGlmaWVkICpiZWZvcmUqIGFueSBjaGFuY2Ugb2YgY2xlYW51cC4gSXQncyBhIG5pY2UsIGZ1bmN0aW9uYWwgZml4LiBNeSBzcGlkZXktc2Vuc2Ugc2F5cyB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIFdlJ2xsIG5lZWQgYEZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgdG8gcmVwcm9kdWNlIHRoZSBidWcuIFRpbWUgdG8gY2hlY2sgYGtlcm5lbC90cmFjZS9LY29uZmlnYCB0byBjb25maXJtIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDUyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ1OjIxLjIxNjQ1Mjk2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ1NTQ1ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGVU5DVElPTl9HUkFQSF9UUkFDRVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWc9MjM1PWNvbmZpZyBGVU5DVElPTl9UUkFDRVJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTI1My1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoyNTQ6Y29uZmlnIEZVTkNUSU9OX0dSQVBIX1RSQUNFUlxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTI1NS1cXHRib29sIFxcXCJLZXJuZWwgRnVuY3Rpb24gR3JhcGggVHJhY2VyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NToyMi42NjIwMDI4NzNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3MzMzMTU0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZXBlbmRlbmN5IERlZXAgRGl2ZSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYC4gSSdtIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEsIHNvIEknbSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgbGlrZWx5IGN1bHByaXRzLiBJIGtub3cgdGhhdCBzdWNoIGEgdHJhY2VyIGxpa2VseSBob29rcyBpbnRvIHRoZSBleGVjdXRpb24gb2YgYSBmdW5jdGlvbiBncmFwaCBpbiBzb21lIHdheS4gU28sIGZpcnN0LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGNvcmUgY29tcG9uZW50cyBpdCBpbnRlcmFjdHMgd2l0aC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzdGF0aWMgb3IgZHluYW1pYyBhbmFseXNpcyB0b29sPyBEb2VzIGl0IHJlbHkgb24gaW5zdHJ1bWVudGF0aW9uLCBieXRlY29kZSBtYW5pcHVsYXRpb24sIG9yIHBlcmhhcHMgcHJvZmlsaW5nIGRhdGE/IEknbGwgbmVlZCB0byBjaGVjayBpZiB0aGUgdHJhY2VyIHVzZXMgYW55IGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB0byBzdG9yZSB0aGUgZ3JhcGggaW5mb3JtYXRpb24sIGFuZCB3aGV0aGVyIGl0IGludGVyYWN0cyB3aXRoIGFueSBzcGVjaWZpYyBydW50aW1lIGVudmlyb25tZW50cyBvciBsaWJyYXJpZXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgcG90ZW50aWFsIHJpc2tzLCBwb2ludHMgb2YgZmFpbHVyZSBhbmQgYXJlYXMgdGhhdCBhcmUgbW9yZSBjb21wbGljYXRlZCB0aGFuIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzMyMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ1OjI1LjkzNTMzNjY2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI1MDpcXHRcXHQgICh0aGUgYm9vdHVwIGRlZmF1bHQpLCB0aGVuIHRoZSBvdmVyaGVhZCBvZiB0aGUgaW5zdHJ1Y3Rpb25zIGlzIHZlcnlcXG4gMjUxOlxcdFxcdCAgc21hbGwgYW5kIG5vdCBtZWFzdXJhYmxlIGV2ZW4gaW4gbWljcm8tYmVuY2htYXJrcyAoYXQgbGVhc3Qgb25cXG4gMjUyOlxcdFxcdCAgeDg2LCBidXQgbWF5IGhhdmUgaW1wYWN0IG9uIG90aGVyIGFyY2hpdGVjdHVyZXMpLlxcbiAyNTM6XFx0XFxuIDI1NDpcXHRjb25maWcgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXFxuIDI1NTpcXHRcXHRib29sIFxcXCJLZXJuZWwgRnVuY3Rpb24gR3JhcGggVHJhY2VyXFxcIlxcbiAyNTY6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUlxcbiAyNTc6XFx0XFx0ZGVwZW5kcyBvbiBGVU5DVElPTl9UUkFDRVJcXG4gMjU4OlxcdFxcdGRlcGVuZHMgb24gIVg4Nl8zMiB8fCAhQ0NfT1BUSU1JWkVfRk9SX1NJWkVcXG4gMjU5OlxcdFxcdGRlZmF1bHQgeVxcbiAyNjA6XFx0XFx0aGVscFxcbiAyNjE6XFx0XFx0ICBFbmFibGUgdGhlIGtlcm5lbCB0byB0cmFjZSBhIGZ1bmN0aW9uIGF0IGJvdGggaXRzIHJldHVyblxcbiAyNjI6XFx0XFx0ICBhbmQgaXRzIGVudHJ5LlxcbiAyNjM6XFx0XFx0ICBJdHMgZmlyc3QgcHVycG9zZSBpcyB0byB0cmFjZSB0aGUgZHVyYXRpb24gb2YgZnVuY3Rpb25zIGFuZFxcbiAyNjQ6XFx0XFx0ICBkcmF3IGEgY2FsbCBncmFwaCBmb3IgZWFjaCB0aHJlYWQgd2l0aCBzb21lIGluZm9ybWF0aW9uIGxpa2VcXG4gMjY1OlxcdFxcdCAgdGhlIHJldHVybiB2YWx1ZS4gVGhpcyBpcyBkb25lIGJ5IHNldHRpbmcgdGhlIGN1cnJlbnQgcmV0dXJuXFxuIDI2NjpcXHRcXHQgIGFkZHJlc3Mgb24gdGhlIGN1cnJlbnQgdGFzayBzdHJ1Y3R1cmUgaW50byBhIHN0YWNrIG9mIGNhbGxzLlxcbiAyNjc6XFx0XFxuIDI2ODpcXHRjb25maWcgRlVOQ1RJT05fR1JBUEhfUkVUVkFMXFxuIDI2OTpcXHRcXHRib29sIFxcXCJLZXJuZWwgRnVuY3Rpb24gR3JhcGggUmV0dXJuIFZhbHVlXFxcIlxcbiAyNzA6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0ZVTkNUSU9OX0dSQVBIX0ZSRUdTXFxuIDI3MTpcXHRcXHRkZXBlbmRzIG9uIEZVTkNUSU9OX0dSQVBIX1RSQUNFUlxcbiAyNzI6XFx0XFx0ZGVmYXVsdCBuXFxuIDI3MzpcXHRcXHRoZWxwXFxuIDI3NDpcXHRcXHQgIFN1cHBvcnQgcmVjb3JkaW5nIGFuZCBwcmludGluZyB0aGUgZnVuY3Rpb24gcmV0dXJuIHZhbHVlIHdoZW5cXG4gMjc1OlxcdFxcdCAgdXNpbmcgZnVuY3Rpb24gZ3JhcGggdHJhY2VyLiBJdCBjYW4gYmUgaGVscGZ1bCB0byBsb2NhdGUgZnVuY3Rpb25zXFxuIDI3NjpcXHRcXHQgIHRoYXQgcmV0dXJuIGVycm9ycy4gVGhpcyBmZWF0dXJlIGlzIG9mZiBieSBkZWZhdWx0LCBhbmQgeW91IGNhblxcbiAyNzc6XFx0XFx0ICBlbmFibGUgaXQgdmlhIHRoZSB0cmFjZSBvcHRpb24gZnVuY2dyYXBoLXJldHZhbC5cXG4gMjc4OlxcdFxcdCAgU2VlIERvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdFxcbiAyNzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ1OjI1LjkzNTQzMDlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE2MTk5NDMwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGVwZW5kZW5jaWVzIGFuZCBUcmFjaW5nKipcblxuUmlnaHQsIHNvIEknbSBzZWVpbmcgdGhhdCBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCByZWxpZXMgb24gYEZVTkNUSU9OX1RSQUNFUmAuIFRoYXQncyBub3QgdW5leHBlY3RlZDsgZ3JhcGggdHJhY2luZyBvZnRlbiBidWlsZHMgdXBvbiBtb3JlIGJhc2ljIGZ1bmN0aW9uLWxldmVsIHRyYWNpbmcuIFRvIGJlIGNlcnRhaW4gYWJvdXQgaG93IHRoZXkgcmVsYXRlLCB0aGUgcGxhY2UgdG8gc3RhcnQgaXMgd2l0aCBgRlVOQ1RJT05fVFJBQ0VSYC4gTGV0J3MgdGFrZSBhIGxvb2sgYXQgKml0KiBmaXJzdC4gVW5kZXJzdGFuZGluZyAqdGhhdCogY29tcG9uZW50J3MgY29yZSBmdW5jdGlvbmFsaXR5IGlzIGdvaW5nIHRvIGluZm9ybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB3aG9sZSBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDMxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NTozMi4wOTc0MjcyMTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTUzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjMwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjMwOlxcdFxcdGhlbHBcXG4gMjMxOlxcdFxcdCAgRW5hYmxlIGRldmVsb3BlciB0byBzZXR1cCBmdHJhY2Ugc3Vic3lzdGVtIHZpYSBzdXBwbGVtZW50YWxcXG4gMjMyOlxcdFxcdCAga2VybmVsIGNtZGxpbmUgYXQgYm9vdCB0aW1lIGZvciBkZWJ1Z2dpbmcgKHRyYWNpbmcpIGRyaXZlclxcbiAyMzM6XFx0XFx0ICBpbml0aWFsaXphdGlvbiBhbmQgYm9vdCBwcm9jZXNzLlxcbiAyMzQ6XFx0XFxuIDIzNTpcXHRjb25maWcgRlVOQ1RJT05fVFJBQ0VSXFxuIDIzNjpcXHRcXHRib29sIFxcXCJLZXJuZWwgRnVuY3Rpb24gVHJhY2VyXFxcIlxcbiAyMzc6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0ZVTkNUSU9OX1RSQUNFUlxcbiAyMzg6XFx0XFx0c2VsZWN0IEtBTExTWU1TXFxuIDIzOTpcXHRcXHRzZWxlY3QgR0VORVJJQ19UUkFDRVJcXG4gMjQwOlxcdFxcdHNlbGVjdCBDT05URVhUX1NXSVRDSF9UUkFDRVJcXG4gMjQxOlxcdFxcdHNlbGVjdCBHTE9CXFxuIDI0MjpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gMjQzOlxcdFxcdHNlbGVjdCBUQVNLU19SVURFX1JDVVxcbiAyNDQ6XFx0XFx0aGVscFxcbiAyNDU6XFx0XFx0ICBFbmFibGUgdGhlIGtlcm5lbCB0byB0cmFjZSBldmVyeSBrZXJuZWwgZnVuY3Rpb24uIFRoaXMgaXMgZG9uZVxcbiAyNDY6XFx0XFx0ICBieSB1c2luZyBhIGNvbXBpbGVyIGZlYXR1cmUgdG8gaW5zZXJ0IGEgc21hbGwsIDUtYnl0ZSBOby1PcGVyYXRpb25cXG4gMjQ3OlxcdFxcdCAgaW5zdHJ1Y3Rpb24gYXQgdGhlIGJlZ2lubmluZyBvZiBldmVyeSBrZXJuZWwgZnVuY3Rpb24sIHdoaWNoIE5PUFxcbiAyNDg6XFx0XFx0ICBzZXF1ZW5jZSBpcyB0aGVuIGR5bmFtaWNhbGx5IHBhdGNoZWQgaW50byBhIHRyYWNlciBjYWxsIHdoZW5cXG4gMjQ5OlxcdFxcdCAgdHJhY2luZyBpcyBlbmFibGVkIGJ5IHRoZSBhZG1pbmlzdHJhdG9yLiBJZiBpdCdzIHJ1bnRpbWUgZGlzYWJsZWRcXG4gMjUwOlxcdFxcdCAgKHRoZSBib290dXAgZGVmYXVsdCksIHRoZW4gdGhlIG92ZXJoZWFkIG9mIHRoZSBpbnN0cnVjdGlvbnMgaXMgdmVyeVxcbiAyNTE6XFx0XFx0ICBzbWFsbCBhbmQgbm90IG1lYXN1cmFibGUgZXZlbiBpbiBtaWNyby1iZW5jaG1hcmtzIChhdCBsZWFzdCBvblxcbiAyNTI6XFx0XFx0ICB4ODYsIGJ1dCBtYXkgaGF2ZSBpbXBhY3Qgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcykuXFxuIDI1MzpcXHRcXG4gMjU0OlxcdGNvbmZpZyBGVU5DVElPTl9HUkFQSF9UUkFDRVJcXG4gMjU1OlxcdFxcdGJvb2wgXFxcIktlcm5lbCBGdW5jdGlvbiBHcmFwaCBUcmFjZXJcXFwiXFxuIDI1NjpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXFxuIDI1NzpcXHRcXHRkZXBlbmRzIG9uIEZVTkNUSU9OX1RSQUNFUlxcbiAyNTg6XFx0XFx0ZGVwZW5kcyBvbiAhWDg2XzMyIHx8ICFDQ19PUFRJTUlaRV9GT1JfU0laRVxcbiAyNTk6XFx0XFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ1OjMyLjA5NzUyNDEyN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjEwNzc0NjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIEkgbmVlZCB0byBnZXQgdGhpcyB0cmFjaW5nIHN5c3RlbSBzcXVhcmVkIGF3YXkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHdlJ2xsIG5lZWQgYm90aCBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCBhbmQganVzdCBhIGJhc2ljIGBGVU5DVElPTl9UUkFDRVJgLiBIb2xkIG9uIHRob3VnaCwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIGBGVU5DVElPTl9UUkFDRVJgIGlzbid0IGEgc2ltcGxlIG9uL29mZiBzd2l0Y2g7IGl0IGhpbmdlcyBvbiBgSEFWRV9GVU5DVElPTl9UUkFDRVJgLCBhbmQgdGhhdCdzIHVzdWFsbHkgc2VsZWN0ZWQgYXQgdGhlIGFyY2hpdGVjdHVyZSBsZXZlbCwgbWVhbmluZyBpdCdzIGRlcGVuZGVudCBvbiB0aGUgaGFyZHdhcmUuIFJpZ2h0LiBBbmQgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhpcywgSSBzaG91bGQgcHJvYmFibHkgY29uZmlybSB3aGV0aGVyIGBGVFJBQ0VgIGl0c2VsZiBpcyBldmVuIGVuYWJsZWQuIGBGVFJBQ0VgIGlzIHRoZSBiaWcga2FodW5hLCB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgYWxsIHRoaXMgdHJhY2luZy4gQmV0dGVyIGNvbmZpcm0gdGhhdCBpdCdzIHNlbGVjdGVkIGZpcnN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODcwMCwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDU6MzcuMzA4MzAxNDM1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ3NjE2NDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGVFJBQ0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWc9MTk4PWNvbmZpZyBUUkFDSU5HX1NVUFBPUlRcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTIwMy1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoyMDQ6bWVudWNvbmZpZyBGVFJBQ0VcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0yMDUtXFx0Ym9vbCBcXFwiVHJhY2Vyc1xcXCJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTU4OD1jb25maWcgRU5BQkxFX0RFRkFVTFRfVFJBQ0VSU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctNTk2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjU5Nzpjb25maWcgRlRSQUNFX1NZU0NBTExTXFxua2VybmVsL3RyYWNlL0tjb25maWctNTk4LVxcdGJvb2wgXFxcIlRyYWNlIHN5c2NhbGxzXFxcIlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9ODY4PWNvbmZpZyBCUEZfS1BST0JFX09WRVJSSURFXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NzYtXFxua2VybmVsL3RyYWNlL0tjb25maWc6ODc3OmNvbmZpZyBGVFJBQ0VfTUNPVU5UX1VTRV9QQVRDSEFCTEVfRlVOQ1RJT05fRU5UUllcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NzgtXFx0Ym9vbFxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODgwLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg4MTpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfQ0NcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04ODItXFx0ZGVmX2Jvb2wgeVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODg2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg4Nzpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfT0JKVE9PTFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg4OC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04OTQtXFxua2VybmVsL3RyYWNlL0tjb25maWc6ODk1OmNvbmZpZyBGVFJBQ0VfTUNPVU5UX1VTRV9SRUNPUkRNQ09VTlRcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04OTYtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9MTAyMT1jb25maWcgVFJBQ0VfRVZBTF9NQVBfRklMRVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMTA0OC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDQ5OmNvbmZpZyBGVFJBQ0VfUkVDT1JEX1JFQ1VSU0lPTlxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNTAtXFx0Ym9vbCBcXFwiUmVjb3JkIGZ1bmN0aW9ucyB0aGF0IHJlY3Vyc2UgaW4gZnVuY3Rpb24gdHJhY2luZ1xcXCJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNjItXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTA2Mzpjb25maWcgRlRSQUNFX1JFQ09SRF9SRUNVUlNJT05fU0laRVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNjQtXFx0aW50IFxcXCJNYXggbnVtYmVyIG9mIHJlY3Vyc2VkIGZ1bmN0aW9ucyB0byByZWNvcmRcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDczLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjEwNzQ6Y29uZmlnIEZUUkFDRV9WQUxJREFURV9SQ1VfSVNfV0FUQ0hJTkdcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDc1LVxcdGJvb2wgXFxcIlZhbGlkYXRlIFJDVSBpcyBvbiBkdXJpbmcgZnRyYWNlIGV4ZWN1dGlvblxcXCJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTExMDE9Y29uZmlnIEdDT1ZfUFJPRklMRV9GVFJBQ0VcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMTItXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTExMzpjb25maWcgRlRSQUNFX1NFTEZURVNUXFxua2VybmVsL3RyYWNlL0tjb25maWctMTExNC1cXHRib29sXFxua2VybmVsL3RyYWNlL0tjb25maWctMTExNS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMTE2OmNvbmZpZyBGVFJBQ0VfU1RBUlRVUF9URVNUXFxua2VybmVsL3RyYWNlL0tjb25maWctMTExNy1cXHRib29sIFxcXCJQZXJmb3JtIGEgc3RhcnR1cCB0ZXN0IG9uIGZ0cmFjZVxcXCJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTExMzY9Y29uZmlnIEVWRU5UX1RSQUNFX1RFU1RfU1lTQ0FMTFNcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExNDctXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTE0ODpjb25maWcgRlRSQUNFX1NPUlRfU1RBUlRVUF9URVNUXFxua2VybmVsL3RyYWNlL0tjb25maWctMTE0OS0gICAgICAgYm9vbCBcXFwiVmVyaWZ5IGNvbXBpbGUgdGltZSBzb3J0aW5nIG9mIGZ0cmFjZSBmdW5jdGlvbnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ1OjM4Ljc1NTkyMTM3NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI1ODE4ODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZUUkFDRSBDb25maWd1cmF0aW9uIEFuYWx5c2lzKipcblxuT2theSwgc28gYEZUUkFDRWAgaXMgZGVmaW5pdGVseSBhIG1lbnVjb25maWcgb3B0aW9uLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGNvbnNpZGVyaW5nIGFsbCB0aGUgcmVsYXRlZCBjb25maWd1cmF0aW9uczogYEZUUkFDRWAsIGBGVU5DVElPTl9UUkFDRVJgLCBhbmQgYEZVTkNUSU9OX0dSQVBIX1RSQUNFUmAuIEhvbGQgb24gYSBzZWNvbmQsIHdhc24ndCBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgaWYgYEZVTkNUSU9OX1RSQUNFUmAgd2FzIGVuYWJsZWQ/IFllcywgSSBiZWxpZXZlIHRoYXQncyByaWdodC4gSnVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUsIGxldCdzIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBvZiBgRlRSQUNFYCBpdHNlbGYgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgZGVwZW5kZW50IGNvbmZpZ3VyYXRpb25zIEknbSBtaXNzaW5nLiBUaW1lIHRvIGRpZyBpbiBhbmQgY29uZmlybSB0aGUgZXhhY3QgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc4OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ1OjQyLjE4MTc0MjUwN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzg3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjAwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjAwOlxcdFxcdGRlcGVuZHMgb24gVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVFxcbiAyMDE6XFx0XFx0ZGVwZW5kcyBvbiBTVEFDS1RSQUNFX1NVUFBPUlRcXG4gMjAyOlxcdFxcdGRlZmF1bHQgeVxcbiAyMDM6XFx0XFxuIDIwNDpcXHRtZW51Y29uZmlnIEZUUkFDRVxcbiAyMDU6XFx0XFx0Ym9vbCBcXFwiVHJhY2Vyc1xcXCJcXG4gMjA2OlxcdFxcdGRlcGVuZHMgb24gVFJBQ0lOR19TVVBQT1JUXFxuIDIwNzpcXHRcXHRkZWZhdWx0IHkgaWYgREVCVUdfS0VSTkVMXFxuIDIwODpcXHRcXHRoZWxwXFxuIDIwOTpcXHRcXHQgIEVuYWJsZSB0aGUga2VybmVsIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUuXFxuIDIxMDpcXHRcXG4gMjExOlxcdGlmIEZUUkFDRVxcbiAyMTI6XFx0XFxuIDIxMzpcXHRjb25maWcgVFJBQ0VGU19BVVRPTU9VTlRfREVQUkVDQVRFRFxcbiAyMTQ6XFx0XFx0Ym9vbCBcXFwiQXV0b21vdW50IHRyYWNlZnMgb24gZGVidWdmcyBbREVQUkVDQVRFRF1cXFwiXFxuIDIxNTpcXHRcXHRkZXBlbmRzIG9uIFRSQUNJTkdcXG4gMjE2OlxcdFxcdGRlZmF1bHQgeVxcbiAyMTc6XFx0XFx0aGVscFxcbiAyMTg6XFx0XFx0ICBUaGUgdHJhY2luZyBpbnRlcmZhY2Ugd2FzIG1vdmVkIGZyb20gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZ1xcbiAyMTk6XFx0XFx0ICB0byAvc3lzL2tlcm5lbC90cmFjaW5nIGluIDIwMTUsIGJ1dCB0aGUgdHJhY2luZyBmaWxlIHN5c3RlbVxcbiAyMjA6XFx0XFx0ICB3YXMgc3RpbGwgYXV0b21vdW50ZWQgaW4gL3N5cy9rZXJuZWwvZGVidWcgZm9yIGJhY2t3YXJkXFxuIDIyMTpcXHRcXHQgIGNvbXBhdGliaWxpdHkgd2l0aCB0b29saW5nLlxcbiAyMjI6XFx0XFxuIDIyMzpcXHRcXHQgIFRoZSBuZXcgaW50ZXJmYWNlIGhhcyBiZWVuIGFyb3VuZCBmb3IgbW9yZSB0aGFuIDEwIHllYXJzIGFuZFxcbiAyMjQ6XFx0XFx0ICB0aGUgb2xkIGRlYnVnIG1vdW50IHdpbGwgc29vbiBiZSByZW1vdmVkLlxcbiAyMjU6XFx0XFxuIDIyNjpcXHRjb25maWcgQk9PVFRJTUVfVFJBQ0lOR1xcbiAyMjc6XFx0XFx0Ym9vbCBcXFwiQm9vdC10aW1lIFRyYWNpbmcgc3VwcG9ydFxcXCJcXG4gMjI4OlxcdFxcdGRlcGVuZHMgb24gVFJBQ0lOR1xcbiAyMjk6XFx0XFx0c2VsZWN0IEJPT1RfQ09ORklHXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ1OjQyLjE4MTkyMjcxN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzUxNjYzNjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBGdW5jdGlvbiBUcmFjaW5nIGFuZCBCdWcgVHJpZ2dlcmluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0byBiZXN0IGFwcHJvYWNoIGZ1enppbmcgYXJvdW5kIGEgc3BlY2lmaWMgYnVnIHJlbGF0ZWQgdG8gZnVuY3Rpb24gdHJhY2luZy4gIGBGVFJBQ0VgLCBgRlVOQ1RJT05fVFJBQ0VSYCwgYW5kIGBGVU5DVElPTl9HUkFQSF9UUkFDRVJgIGFyZSB0aGUgcmVsZXZhbnQgY29uZmlncyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBUaGUgY29yZSBmdW5jdGlvbiBiZWluZyBtb2RpZmllZCBpcyBgY29weV9wcm9jZXNzYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBmb2N1cyB0aGUgZnV6emVyIGRpcmVjdGx5IG9uIGBjb3B5X3Byb2Nlc3NgLiBIb3dldmVyLCB0aGF0J3MgYSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9uLCBjYWxsZWQgb24gZXZlcnkgZm9yayBhbmQgY2xvbmUuIFRoZSBmdXp6ZXIgYWxyZWFkeSBoZWF2aWx5IHRhcmdldHMgdGhlc2Ugc3lzdGVtIGNhbGxzLiAgSWYgSSB6ZXJvIGluIG9uIGBjb3B5X3Byb2Nlc3NgLCBpdCB3aWxsIGxpa2VseSBqdXN0IGdpdmUgbWUgYSBza2V3ZWQgZGlzdHJpYnV0aW9uLCBhbmQgcHJvYmFibHkgbm90IHJldmVhbCBhbnl0aGluZyBuZXcuXG5cblRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGNhbiBJIHN0ZWVyIHRoZSBmdXp6ZXIgdG93YXJkIHRoZSAqZXJyb3IqIHBhdGggb2YgYGNvcHlfcHJvY2Vzc2A/IFRoZXNlIGVycm9yIHBhdGhzIGFyaXNlIGZyb20gZmFpbHVyZXMgd2l0aGluIHRoaW5ncyBsaWtlIGBjb3B5X2V4ZWNfc3RhdGVgLCBgY29weV9jcmVkc2AsIGBjb3B5X21tYCwgb3IgYGNvcHlfbmFtZXNwYWNlc2AuIFRob3NlIGZhaWx1cmVzIGFyZSB1c3VhbGx5IGR1ZSB0byBtZW1vcnkgYWxsb2NhdGlvbiBwcm9ibGVtcyAod2hpY2ggc3l6a2FsbGVyIGNhbiBpbmR1Y2UgdXNpbmcgZmF1bHQgaW5qZWN0aW9uKSBvciBpbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8gYGNsb25lM2AuXG5cbkNvbnNpZGVyaW5nIGBzeXNfY2xvbmUzYCBvciBgc3lzX2Nsb25lYCBhcmUgYWxzbyBnZW5lcmljLCB0aGF0IGRvZXNuJ3Qgc2VlbSBwcm9taXNpbmcgZWl0aGVyLiBXYWl0LCBidXQgdGhlIGJ1ZyByZXBvcnQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBhbmQgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgLlxuXG5NeSBmaXJzdCBpbmNsaW5hdGlvbiB3YXMgdG8gYWRkIHRob3NlIGZ1bmN0aW9ucyB0byBgRm9jdXNTeW1ib2xzYCwgaG9waW5nIHN5emthbGxlciB3b3VsZCB0cnkgdG8gcmVhY2ggdGhlbS4gVGhlIHByb2JsZW0gaXMgdGhhdCB0aGV5IGFyZSBjYWxsZWQgdW5jb25kaXRpb25hbGx5IGZyb20gd2l0aGluIGBjb3B5X3Byb2Nlc3NgIGFuZCBgZnJlZV90YXNrYCwgKmlmKiBgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgaXMgZW5hYmxlZC4gIFNvLCB0aGV5J3JlIGFsc28gaG90LXBhdGggZnVuY3Rpb25zLCBleGVjdXRlZCB3aXRoIGV2ZXJ5IGZvcmsvZXhpdC5cblxuTm93LCB3YWl0IGEgbWludXRlLCB0aGUgcHJvbXB0IHNheXMgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGF2b2lkIGEgc2tld2VkIGRpc3RyaWJ1dGlvbi4gSXQgYWxzbyBzdGF0ZXMgSSBzaG91bGQgcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuICBTbywgbGlzdGluZyBgY29weV9wcm9jZXNzYCwgYGZyZWVfdGFza2AgYW5kIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBtaWdodCBub3QgYmUgdGhlIHJpZ2h0IG1vdmUgaGVyZSwgZXZlbiB0aG91Z2ggdGhleSdyZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBmdW5jdGlvbnMgaWRlbnRpZmllZCBpbiB0aGUgYnVnIHJlcG9ydC5cblxuQnV0IHdhaXQsIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBkb2VzIGEgY2hlY2s6IGl0IG9ubHkgZXhlY3V0ZXMgaWYgYGZ0cmFjZV9ncmFwaF9hY3RpdmVgIGlzIHRydWUuIEhtbSwgSSBuZWVkIHRvIHJldmlzaXQgYGtlcm5lbC90cmFjZS9mZ3JhcGguY2AgYW5kIHVuZGVyc3RhbmQgaG93IHRvIGdldCB0aGF0IGNvbmRpdGlvbiB0byBiZSB0cnVlLiBMZXQgbWUgZGl2ZSBiYWNrIGludG8gdGhhdCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ0NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ1OjUxLjUzMzU4OTI5MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDkxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL2ZncmFwaC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNTksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNTk6XFx0LyogQWxsb2NhdGUgYSByZXR1cm4gc3RhY2sgZm9yIG5ld2x5IGNyZWF0ZWQgdGFzayAqL1xcbjExNjA6XFx0dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG4xMTYxOlxcdHtcXG4xMTYyOlxcdFxcdC8qIE1ha2Ugc3VyZSB3ZSBkbyBub3QgdXNlIHRoZSBwYXJlbnQgcmV0X3N0YWNrICovXFxuMTE2MzpcXHRcXHR0LVxcdTAwM2VyZXRfc3RhY2sgPSBOVUxMO1xcbjExNjQ6XFx0XFx0dC1cXHUwMDNlY3Vycl9yZXRfc3RhY2sgPSAwO1xcbjExNjU6XFx0XFx0dC1cXHUwMDNlY3Vycl9yZXRfZGVwdGggPSAtMTtcXG4xMTY2OlxcdFxcbjExNjc6XFx0XFx0aWYgKGZ0cmFjZV9ncmFwaF9hY3RpdmUpIHtcXG4xMTY4OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKnJldF9zdGFjaztcXG4xMTY5OlxcdFxcbjExNzA6XFx0XFx0XFx0aWYgKFdBUk5fT05fT05DRSghZmdyYXBoX3N0YWNrX2NhY2hlcCkpXFxuMTE3MTpcXHRcXHRcXHRcXHRyZXR1cm47XFxuMTE3MjpcXHRcXG4xMTczOlxcdFxcdFxcdHJldF9zdGFjayA9IGttZW1fY2FjaGVfYWxsb2MoZmdyYXBoX3N0YWNrX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XFxuMTE3NDpcXHRcXHRcXHRpZiAoIXJldF9zdGFjaylcXG4xMTc1OlxcdFxcdFxcdFxcdHJldHVybjtcXG4xMTc2OlxcdFxcdFxcdGdyYXBoX2luaXRfdGFzayh0LCByZXRfc3RhY2spO1xcbjExNzc6XFx0XFx0fVxcbjExNzg6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NTo1MS41MzM2OTk2OTFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc4Nzk1NTYzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQnVnIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5IGZvciBLZXJuZWwgVXNlLUFmdGVyLUZyZWUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgaXMgZXhwb3J0ZWQsIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgY2FsbGVkIG9uIGV2ZXJ5IGZvcmssIHNwZWNpZmljYWxseSB3aXRoaW4gYGNvcHlfcHJvY2Vzc2AuIFRoZSBjb3JlIG9mIHRoZSBidWcgbGllcyBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGNvcHlfcHJvY2Vzc2AuIElmIGEgZmFsbGlibGUgb3BlcmF0aW9uIHdpdGhpbiBgY29weV9wcm9jZXNzYCBmYWlscyAqYmVmb3JlKiBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgaXMgY2FsbGVkLCBgZnRyYWNlX2dyYXBoX2V4aXRfdGFza2AgaW4gdGhlIGVycm9yIHBhdGggZW5kcyB1cCBmcmVlaW5nIHRoZSBwYXJlbnQncyBgcmV0X3N0YWNrYC4gVGhpcyBpcyBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIFRoaXMgb2NjdXJzIHJlZ2FyZGxlc3Mgb2YgYGZ0cmFjZV9ncmFwaF9hY3RpdmVgLCBhcyBsb25nIGFzIHRoZSBwYXJlbnQgdGFzayBhdCBzb21lIHBvaW50IGhhZCBgZnRyYWNlX2dyYXBoX2FjdGl2ZWAgc2V0IHRvIHRydWUuXG5cblRoZSBrZXkgdG8gdHJpZ2dlcmluZyB0aGlzIGxpZXMgaW4gdGhlIHRpbWluZyBvZiB0aGUgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGNhbGwgd2l0aGluIGBjb3B5X3Byb2Nlc3NgLiBUaGUgcGF0Y2ggZml4ZXMgdGhpcyBieSBtb3ZpbmcgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGVhcmxpZXIsIHJpZ2h0IGFmdGVyIGBkdXBfdGFza19zdHJ1Y3RgLlxuXG5Ib3cgZG8gd2UgdHJpZ2dlciB0aGlzPyBXZSBuZWVkIHRvIGVuYWJsZSBmdHJhY2UgZ3JhcGggdHJhY2luZy4gVGhhdCdzIGRvbmUgdmlhIHRyYWNlZnMsIHdoaWNoIHN5emthbGxlciBhbHJlYWR5IGtub3dzIGhvdyB0byBmdXp6LiBTbywgd2UncmUgbm90IHN0cmljdGx5IGZvY3VzaW5nIG9uIHRyYWNlZnMgZnVuY3Rpb25zIGhlcmUsIGJ1dCB0aGUgdHJhY2luZyAqbmVlZHMqIHRvIGJlIGVuYWJsZWQuXG5cblNpbmNlIHRoZSBmaXggbW9kaWZpZXMgYGNvcHlfcHJvY2Vzc2AsIHdoaWNoIGlzIGEgKmhvdCBwYXRoKiwgSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCBgRm9jdXNTeW1ib2xzYC4gTGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB3b3VsZCBza2V3IHRoZSB0ZXN0IGRpc3RyaWJ1dGlvbi4gSSBuZWVkIHRvIGF2b2lkIGxpc3RpbmcgYGNvcHlfcHJvY2Vzc2AsIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCwgb3IgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgLiBHaXZlbiB0aGUgYnVnJ3MgbmF0dXJlIGFuZCB0aGUgaG90IHBhdGggY29uc2lkZXJhdGlvbnMsIGBGb2N1c1N5bWJvbHNgIHNob3VsZCBiZSBlbXB0eS5cblxuTm93LCBhYm91dCB0aGUgY29uZmlncy4gV2UgbmVlZCBgRlRSQUNFYCwgYEZVTkNUSU9OX1RSQUNFUmAsIGFuZCBlc3BlY2lhbGx5IGBGVU5DVElPTl9HUkFQSF9UUkFDRVJgIHRvIGJlIGVuYWJsZWQuIGBGVU5DVElPTl9HUkFQSF9UUkFDRVJgIHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBvbmUuXG5cbkxldCdzIHF1aWNrbHkgcmV2aWV3IHRoZSBidWcgYWdhaW4gdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcncyBjbGVhci4gSW4gdGhlIHByZS1wYXRjaCBjb2RlLCB0aGUgY2FsbCB0byBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgaGFwcGVuZWQgKmFmdGVyKiBtYW55IHBvdGVudGlhbGx5IGZhaWxpbmcgb3BlcmF0aW9ucywgd2hpY2ggY291bGQgbGVhZCB0byBgZnRyYWNlX2dyYXBoX2V4aXRfdGFza2AgZnJlZWluZyB0aGUgcGFyZW50J3Mgc3RhY2sgaW4gYW4gZXJyb3IgcGF0aC4gVGhlIGZpeCBtb3ZlcyB0aGUgaW5pdGlhbGl6YXRpb24gZWFybGllciwgd2hpY2ggaXMgdGhlIGtleS5cblxuVGhpcyBpcyBhIHZlcnkgY2xlYXIgYW5kIGltcG9ydGFudCBmdW5jdGlvbmFsIGZpeCFcblxuVGhlcmVmb3JlLCB0aGUgc3RyYXRlZ3kgd2lsbCBiZTpcblxuKiAgICoqV29ydGhGdXp6aW5nKio6IFRydWVcbiogICAqKkZvY3VzU3ltYm9scyoqOiBFbXB0eSBcXFtcXF0gKHRvIGF2b2lkIGhvdCBwYXRoIGlzc3VlcylcbiogICAqKkVuYWJsZUNvbmZpZ3MqKjogXFxbXCJGVFJBQ0VcIiwgXCJGVU5DVElPTl9UUkFDRVJcIiwgXCJGVU5DVElPTl9HUkFQSF9UUkFDRVJcIlxcXVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc3NCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NjowOS40MTMyNTkyOTlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjQ5NzI0NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHVwX3Rhc2tfc3RydWN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdD0zNjg2PWNhbiBjdXJyZW50bHkgb25seSBoYXZlIGV2ZW50cyBlbmFibGVkIGZvciB0aGVtLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0LTM3MTItICAgICAgICAgICAgICBiYXNoLTIwNDQgIFswMDJdIGQuLi4gMTA1OTQuNDgxMDM0OiBfX2luY196b25lX3N0YXRlIFxcdTAwM2Mtem9uZV9zdGF0aXN0aWNzXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0OjM3MTM6ICAgICAgICAgICAgICBiYXNoLTIwNDQgIFswMDJdIC4uLi4gMTA1OTQuNDgxMDM1OiBhcmNoX2R1cF90YXNrX3N0cnVjdCBcXHUwMDNjLWNvcHlfcHJvY2Vzc1xcbkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdC0zNzE0LSAgWy4uLl1cXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL3Byb2Nlc3MuYz0yMzI9aW50IGNvcHlfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jLTI2My1cXHQgICB2YWx1ZSBmcm9tIHRoZSBwYXJlbnQsIHdoaWNoIHdpbGwgaGF2ZSBiZWVuIHNldCBieSB0aGUgYmxvY2tcXG5hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmM6MjY0OlxcdCAgIGNvcHkgaW4gZHVwX3Rhc2tfc3RydWN0LiAgVGhpcyBpcyBub24taW50dWl0aXZlLCBidXQgaXNcXG5hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMtMjY1LVxcdCAgIHJlcXVpcmVkIGZvciBwcm9wZXIgb3BlcmF0aW9uIGluIHRoZSBjYXNlIG9mIGEgdGhyZWFkZWRcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2Zwc2ltZC5jPTE3NjQ9dm9pZCBmcHNpbWRfcmVzdG9yZV9jdXJyZW50X3N0YXRlKHZvaWQpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9mcHNpbWQuYy0xNzY3LVxcdCAqIFRJRl9GT1JFSUdOX0ZQU1RBVEUgaXMgc2V0IG9uIHRoZSBpbml0IHRhc2sgYW5kIGNvcGllZCBieVxcbmFyY2gvYXJtNjQva2VybmVsL2Zwc2ltZC5jOjE3Njg6XFx0ICogYXJjaF9kdXBfdGFza19zdHJ1Y3QoKSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgRlAvU0lNRCBpcyBkZXRlY3RlZC5cXG5hcmNoL2FybTY0L2tlcm5lbC9mcHNpbWQuYy0xNzY5LVxcdCAqIFRodXMgdXNlciB0aHJlYWRzIGNhbiBoYXZlIHRoaXMgc2V0IGV2ZW4gd2hlbiBGUC9TSU1EIGhhc24ndCBiZWVuXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9jZXNzLmM9MzQ0PXZvaWQgYXJjaF9yZWxlYXNlX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvcHJvY2Vzcy5jLTM0OC1cXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9jZXNzLmM6MzQ5OmludCBhcmNoX2R1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCwgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMpXFxuYXJjaC9hcm02NC9rZXJuZWwvcHJvY2Vzcy5jLTM1MC17XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvcHJvY2Vzcy5jPTExMD12b2lkIGV4aXRfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Byb2Nlc3MuYy0xMTMtXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Byb2Nlc3MuYzoxMTQ6aW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYylcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvcHJvY2Vzcy5jLTExNS17XFxuLS1cXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg9MzE9ZXh0ZXJuIHVuc2lnbmVkIGludCB2Y2VkX2NvdW50LCB2Y2VpX2NvdW50O1xcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaDozMjpleHRlcm4gaW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYyk7XFxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTMzLVxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmM9NzE9dm9pZCBleGl0X3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jLTgwLVxcbmFyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jOjgxOmludCBhcmNoX2R1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCwgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMpXFxuYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMtODIte1xcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmg9NTQ9c3RydWN0IHRocmVhZF9pbmZvIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oLTg4LS8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmg6ODk6ZXh0ZXJuIGludCBhcmNoX2R1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCwgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMpO1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oLTkwLVxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmM9MTY3Nj1FWFBPUlRfU1lNQk9MX0dQTChzZXRfdGhyZWFkX3RpZHIpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMtMTY4My0gKi9cXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYzoxNjg0OmludCBhcmNoX2R1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCwgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMpXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMtMTY4NS17XFxuLS1cXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oPTE4OT1leHRlcm4gdm9pZCByaXNjdl9maWxsX2h3Y2FwKHZvaWQpO1xcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6MTkwOmV4dGVybiBpbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKTtcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTE5MS1cXG4tLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaD0xMDE9dm9pZCBhcmNoX3JlbGVhc2VfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaDoxMDI6aW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYyk7XFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oLTEwMy1cXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL3Byb2Nlc3MuYz0yMDk9dm9pZCBhcmNoX3JlbGVhc2VfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9wcm9jZXNzLmMtMjE1LVxcbmFyY2gvcmlzY3Yva2VybmVsL3Byb2Nlc3MuYzoyMTY6aW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYylcXG5hcmNoL3Jpc2N2L2tlcm5lbC9wcm9jZXNzLmMtMjE3LXtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jPTc5PXZvaWQgYXJjaF9yZWxlYXNlX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMtODQtXFxuYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmM6ODU6aW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYylcXG5hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYy04Ni17XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYz0xMDY9aW50IGNvcHlfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMtMTYxLVxcdCAqIENsZWFyIHRoZSBydW50aW1lIGluc3RydW1lbnRhdGlvbiBmbGFnIGFmdGVyIHRoZSBhYm92ZSBjaGlsZHJlZ3NcXG5hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYzoxNjI6XFx0ICogY29weS4gVGhlIENCIHBvaW50ZXIgd2FzIGFscmVhZHkgY2xlYXJlZCBpbiBhcmNoX2R1cF90YXNrX3N0cnVjdCgpLlxcbmFyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jLTE2My1cXHQgKi9cXG4tLVxcbmFyY2gvc2gva2VybmVsL3Byb2Nlc3MuYz0xNz1FWFBPUlRfU1lNQk9MKF9fc3RhY2tfY2hrX2d1YXJkKTtcXG4tLVxcbmFyY2gvc2gva2VybmVsL3Byb2Nlc3MuYy0yMy0gKi9cXG5hcmNoL3NoL2tlcm5lbC9wcm9jZXNzLmM6MjQ6aW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYylcXG5hcmNoL3NoL2tlcm5lbC9wcm9jZXNzLmMtMjUte1xcbi0tXFxuYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc182NC5jPTU3MD1pbnQgY29weV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXFxuLS1cXG5hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzY0LmMtNjUwLSAqL1xcbmFyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfNjQuYzo2NTE6aW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYylcXG5hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzY0LmMtNjUyLXtcXG4tLVxcbmFyY2gvdW0va2VybmVsL3Byb2Nlc3MuYz0xODg9dm9pZCBpbml0aWFsX3RocmVhZF9jYih2b2lkICgqcHJvYykodm9pZCAqKSwgdm9pZCAqYXJnKVxcbi0tXFxuYXJjaC91bS9rZXJuZWwvcHJvY2Vzcy5jLTE5Mi1cXG5hcmNoL3VtL2tlcm5lbC9wcm9jZXNzLmM6MTkzOmludCBhcmNoX2R1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCxcXG5hcmNoL3VtL2tlcm5lbC9wcm9jZXNzLmMtMTk0LVxcdFxcdFxcdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYylcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmM9OTk9REVGSU5FX1BFUl9DUFUoYm9vbCwgY2FjaGVfc3RhdGVfaW5jb2hlcmVudCk7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jLTEwNC0gKi9cXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jOjEwNTppbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKVxcbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMtMTA2LXtcXG4tLVxcbmFyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmM9MjA0PXZvaWQgZmx1c2hfdGhyZWFkKHZvaWQpXFxuLS1cXG5hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jLTIxNi0gKi9cXG5hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jOjIxNzppbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKVxcbmFyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmMtMjE4LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvdGhyZWFkX2luZm8uaD0yMzI9dm9pZCBhcmNoX3JlbGVhc2VfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xcbmluY2x1ZGUvbGludXgvdGhyZWFkX2luZm8uaDoyMzM6aW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LFxcbmluY2x1ZGUvbGludXgvdGhyZWFkX2luZm8uaC0yMzQtXFx0XFx0XFx0XFx0c3RydWN0IHRhc2tfc3RydWN0ICpzcmMpO1xcbi0tXFxua2VybmVsL2ZvcmsuYz04NTU9dm9pZCBfX2luaXQgZm9ya19pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvZm9yay5jLTg5OS1cXG5rZXJuZWwvZm9yay5jOjkwMDppbnQgX193ZWFrIGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LFxcbmtlcm5lbC9mb3JrLmMtOTAxLVxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYylcXG4tLVxcbmtlcm5lbC9mb3JrLmM9OTA3PXZvaWQgc2V0X3Rhc2tfc3RhY2tfZW5kX21hZ2ljKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxua2VybmVsL2ZvcmsuYy05MTQtXFxua2VybmVsL2ZvcmsuYzo5MTU6c3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqb3JpZywgaW50IG5vZGUpXFxua2VybmVsL2ZvcmsuYy05MTYte1xcbi0tXFxua2VybmVsL2ZvcmsuYy05MjUtXFxua2VybmVsL2ZvcmsuYzo5MjY6XFx0ZXJyID0gYXJjaF9kdXBfdGFza19zdHJ1Y3QodHNrLCBvcmlnKTtcXG5rZXJuZWwvZm9yay5jLTkyNy1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2ZvcmsuYz0yMDE4PV9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXFxuLS1cXG5rZXJuZWwvZm9yay5jLTIxMzgtXFx0cmV0dmFsID0gLUVOT01FTTtcXG5rZXJuZWwvZm9yay5jOjIxMzk6XFx0cCA9IGR1cF90YXNrX3N0cnVjdChjdXJyZW50LCBub2RlKTtcXG5rZXJuZWwvZm9yay5jLTIxNDAtXFx0aWYgKCFwKVxcbi0tXFxua2VybmVsL2ZvcmsuYy0yMjAwLVxcbmtlcm5lbC9mb3JrLmM6MjIwMTpcXHRkZWxheWFjY3RfdHNrX2luaXQocCk7XFx0LyogTXVzdCByZW1haW4gYWZ0ZXIgZHVwX3Rhc2tfc3RydWN0KCkgKi9cXG5rZXJuZWwvZm9yay5jLTIyMDItXFx0cC1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfihQRl9TVVBFUlBSSVYgfCBQRl9XUV9XT1JLRVIgfCBQRl9JRExFIHwgUEZfTk9fU0VUQUZGSU5JVFkpO1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz00Mzc4PXZvaWQgaW5pdF9udW1hX2JhbGFuY2luZyh1NjQgY2xvbmVfZmxhZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtNDQxMi1cXHQgKiBOZXcgdGhyZWFkLCBrZWVwIGV4aXN0aW5nIG51bWFfcHJlZmVycmVkX25pZCB3aGljaCBzaG91bGQgYmUgY29waWVkXFxua2VybmVsL3NjaGVkL2ZhaXIuYzo0NDEzOlxcdCAqIGFscmVhZHkgYnkgYXJjaF9kdXBfdGFza19zdHJ1Y3QgYnV0IHN0YWdnZXIgd2hlbiBzY2FucyBzdGFydC5cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTQ0MTQtXFx0ICovXFxuLS1cXG5rZXJuZWwvc21wLmM9ODg5PXN0YXRpYyB2b2lkIHNtcF9jYWxsX2Z1bmN0aW9uX21hbnlfY29uZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayxcXG4tLVxcbmtlcm5lbC9zbXAuYy05ODgtXFx0ICogVGhlIElQSSB3b3JrIGhhcyBiZWVuIHF1ZXVlZCBhbmQgZGlzcGF0Y2hlZC4gT24gUFJFRU1QVCBrZXJuZWxzLFxcbmtlcm5lbC9zbXAuYzo5ODk6XFx0ICogdGFza3MgY3JlYXRlZCB0aHJvdWdoIGR1cF90YXNrX3N0cnVjdCgpIGhhdmUgdGFzay1sb2NhbCB3YWl0IG1hc2tzLlxcbmtlcm5lbC9zbXAuYy05OTAtXFx0ICogVGhlIGJvb3QgaW5pdF90YXNrIGNhbiBmYWxsIGJhY2sgdG8gY2ZkLVxcdTAwM2VjcHVtYXNrIHdoZW4gdGhlIG1hc2sgaXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDY6MTAuODM4MjM5Nzc3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3NTU3NDkwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBjb3B5X3Byb2Nlc3NgIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBoZXJlJ3Mgd2hhdCdzIGhhcHBlbmluZy4gSSB3YXMgcmlnaHQ7IHRoZSByb290IG9mIHRoaXMgbGllcyB3aXRoaW4gYGtlcm5lbC9mb3JrLmNgLCBzcGVjaWZpY2FsbHkgaW4gYGR1cF90YXNrX3N0cnVjdGAuIFdlIGFsbCBrbm93IHRoaXMgZnVuY3Rpb24sIG9yIGl0cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY291bnRlcnBhcnQgYGFyY2hfZHVwX3Rhc2tfc3RydWN0YCwgZXNzZW50aWFsbHkgZG9lcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjb3B5IOKAkyBgKnRzayA9ICpvcmlnYCwgZWZmZWN0aXZlbHkgZHVwbGljYXRpbmcgdGhlIHRhc2sgc3RydWN0dXJlLiBUaGlzIG1lYW5zIHRoZSBgcmV0X3N0YWNrYCBwb2ludGVyIGZyb20gdGhlIHBhcmVudCBwcm9jZXNzIChgY3VycmVudC1cdTAwM2VyZXRfc3RhY2tgKSBpcyBnZXR0aW5nIGRpcmVjdGx5IGNvcGllZCBpbnRvIHRoZSBjaGlsZCBwcm9jZXNzLlxuXG5UaGUgY3J1eCBvZiB0aGUgcHJvYmxlbSBhcmlzZXMgd2hlbiB0aGlzIGNvcHkgaGFwcGVucywgYnV0IGFuIGVycm9yIG9jY3VycyAqYmVmb3JlKiBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgaGFzIGEgY2hhbmNlIHRvIGNsZWFyIHRoZSBjaGlsZCdzIGByZXRfc3RhY2tgLiBUaGVuIHdlJ3JlIGluIHRyb3VibGUuIFRoZSBlcnJvciBwYXRoIHN1YnNlcXVlbnRseSBpbnZva2VzIGBmcmVlX3Rhc2tgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYC4gQW5kIHRoZXJlLCBgZnRyYWNlX2dyYXBoX2V4aXRfdGFza2AgZnJlZXMgdGhlICpwYXJlbnQncyogYHJldF9zdGFja2AuIFRoZSBjaGlsZCBzdGlsbCBoYXMgYSBkYW5nbGluZyBwb2ludGVyIHRvIHRoZSBmcmVlJ2QgbWVtb3J5LiBBIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUsIHBsYWluIGFuZCBzaW1wbGUuXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgZWxlZ2FudCBpbiBpdHMgc2ltcGxpY2l0eS4gSXQganVzdCBzaGlmdHMgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIHVwd2FyZHMsIHRvIGJlIGV4ZWN1dGVkICpiZWZvcmUqIGFueSBwb3RlbnRpYWxseSBmYWlsaW5nIG9wZXJhdGlvbnMgaW4gdGhlIGBjb3B5X3Byb2Nlc3NgIGVycm9yIHBhdGhzLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgY2hpbGQncyBgcmV0X3N0YWNrYCBpcyB6ZXJvZWQgb3V0IGJlZm9yZSBhbnl0aGluZyBjYW4gZ28gd3JvbmcuXG5cbk5hdHVyYWxseSwgdGhpcyBmaXggb25seSBhcHBsaWVzIGlmIGBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCBpcyBlbmFibGVkLCBhcyB0aGF0J3Mgd2hhdCBicmluZ3MgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIGFuZCBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgaW50byB0aGUgcGljdHVyZS4gVGhhdCBhbHNvIHJlcXVpcmVzIHRoZSBzdGFuZGFyZCBkZXBlbmRlbmNpZXMgb2YgYENPTkZJR19GVU5DVElPTl9UUkFDRVJgIGFuZCBgQ09ORklHX0ZUUkFDRWAuXG5cbkdpdmVuIGhvdyBoZWF2aWx5IGZ1enplZCBgY29weV9wcm9jZXNzYCBpcyBhcyBhIGhvdCBwYXRoLCB0aGlzIGlzIGEgdmVyeSBoaWdoIGltcGFjdCBmaXguIE5vIG5lZWQgdG8gZ28gaHVudGluZyBmb3Igc3BlY2lmaWMgc3ltYm9scyBmb3IgdGhpcyBvbmUuXG5cblRpbWUgdG8gZmVlZCB0aGlzIGludG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY0ODcsIk91dHB1dFRva2VucyI6MjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ2OjIwLjU5Mzk5MTI0NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MDQ0MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVFJBQ0VcIixcbiAgICBcIkZVTkNUSU9OX1RSQUNFUlwiLFxuICAgIFwiRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGluIHRoZSBlcnJvciBwYXRocyBvZiBjb3B5X3Byb2Nlc3MoKS4gV2hlbiBhIHRhc2sgaXMgZHVwbGljYXRlZCB2aWEgZHVwX3Rhc2tfc3RydWN0KCksIHRoZSBjaGlsZCB0YXNrIGluaGVyaXRzIHRoZSBwYXJlbnQncyByZXRfc3RhY2sgcG9pbnRlci4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBwcm9jZXNzIGNyZWF0aW9uIGJlZm9yZSBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKCkgY2xlYXJzIHRoZSBjaGlsZCdzIHJldF9zdGFjaywgdGhlIGVycm9yIHBhdGggKGZyZWVfdGFzayAtXFx1MDAzZSBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKSB3aWxsIGVycm9uZW91c2x5IGZyZWUgdGhlIHBhcmVudCdzIHJldF9zdGFjaywgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlIHdoZW4gdGhlIHBhcmVudCByZXN1bWVzIGV4ZWN1dGlvbi4gVGhlIHBhdGNoIG1vdmVzIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKSBiZWZvcmUgYW55IGZhbGxpYmxlIG9wZXJhdGlvbnMgdG8gcHJldmVudCB0aGlzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggZm9yIGEgcmVhY2hhYmxlIGNvcmUga2VybmVsIGJ1ZywgcmVxdWlyaW5nIGZ0cmFjZSBncmFwaCB0cmFjaW5nIGNvbmZpZ3MgdG8gYmUgZW5hYmxlZC4gTm8gc3BlY2lmaWMgZm9jdXMgc3ltYm9scyBhcmUgbmVlZGVkIHNpbmNlIGNvcHlfcHJvY2VzcygpIGlzIGFscmVhZHkgaGVhdmlseSBmdXp6ZWQgdmlhIGNsb25lL2Zvcmsgc3lzY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlRSQUNFXCIsXG4gICAgXCJGVU5DVElPTl9UUkFDRVJcIixcbiAgICBcIkZVTkNUSU9OX0dSQVBIX1RSQUNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBpbiB0aGUgZXJyb3IgcGF0aHMgb2YgY29weV9wcm9jZXNzKCkuIFdoZW4gYSB0YXNrIGlzIGR1cGxpY2F0ZWQgdmlhIGR1cF90YXNrX3N0cnVjdCgpLCB0aGUgY2hpbGQgdGFzayBpbmhlcml0cyB0aGUgcGFyZW50J3MgcmV0X3N0YWNrIHBvaW50ZXIuIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgcHJvY2VzcyBjcmVhdGlvbiBiZWZvcmUgZnRyYWNlX2dyYXBoX2luaXRfdGFzaygpIGNsZWFycyB0aGUgY2hpbGQncyByZXRfc3RhY2ssIHRoZSBlcnJvciBwYXRoIChmcmVlX3Rhc2sgLVxcdTAwM2UgZnRyYWNlX2dyYXBoX2V4aXRfdGFzaykgd2lsbCBlcnJvbmVvdXNseSBmcmVlIHRoZSBwYXJlbnQncyByZXRfc3RhY2ssIGxlYWRpbmcgdG8gYSB1c2UtYWZ0ZXItZnJlZSB3aGVuIHRoZSBwYXJlbnQgcmVzdW1lcyBleGVjdXRpb24uIFRoZSBwYXRjaCBtb3ZlcyBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKCkgYmVmb3JlIGFueSBmYWxsaWJsZSBvcGVyYXRpb25zIHRvIHByZXZlbnQgdGhpcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGZvciBhIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBidWcsIHJlcXVpcmluZyBmdHJhY2UgZ3JhcGggdHJhY2luZyBjb25maWdzIHRvIGJlIGVuYWJsZWQuIE5vIHNwZWNpZmljIGZvY3VzIHN5bWJvbHMgYXJlIG5lZWRlZCBzaW5jZSBjb3B5X3Byb2Nlc3MoKSBpcyBhbHJlYWR5IGhlYXZpbHkgZnV6emVkIHZpYSBjbG9uZS9mb3JrIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NjoyMC42NjMwNDExMDNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTEyOTgwMDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDY6MjAuNjYzNDY5NjczWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIwMTEyNTQ3NTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgZWFybGllciBpbiBgY29weV9wcm9jZXNzKClgIHRvIGVuc3VyZSB0aGF0IGBwLVxcdTAwM2VyZXRfc3RhY2tgIGFuZCByZWxhdGVkIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgKHNldCB0byBOVUxMIG9yIG5ld2x5IGFsbG9jYXRlZCkgYmVmb3JlIGFueSBmYWxsaWJsZSBvcGVyYXRpb25zIG9jY3VyLiBQcmlvciB0byB0aGlzIGNoYW5nZSwgaWYgYW4gZXJyb3Igb2NjdXJyZWQgZWFybHkgaW4gYGNvcHlfcHJvY2VzcygpYCAoZS5nLiwgaW4gYGNvcHlfZXhlY19zdGF0ZSgpYCksIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGNvdWxkIGZyZWUgdGhlIG5ldyB0YXNrIHN0cnVjdHVyZSB3aGlsZSBpdCBzdGlsbCBoZWxkIGEgY29weSBvZiB0aGUgcGFyZW50J3MgYHJldF9zdGFja2AgcG9pbnRlciAoZHVlIHRvIGBkdXBfdGFza19zdHJ1Y3QoKWApLiBUaGlzIHdvdWxkIHJlc3VsdCBpbiBmcmVlaW5nIHRoZSBwYXJlbnQncyBgcmV0X3N0YWNrYCwgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGJ1Zy5cXG5cXG5UaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBidWdzICh1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUpIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIGlzc3VlIGRvZXMgbm90IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQsIGFzIHN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIGJ1ZyB0aGlzIHBhdGNoIGFkZHJlc3Nlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4YThhMTNlYTk0OGI2MGFiODE2NzQ0NTAwM2Q4N2Q2ZDJhZjI0ODU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMDk6NDQ6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuY1xuaW5kZXggMWU2ODQwNGJkNzczZS4uMGQxYWQ5MmUyZDMzNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mb3JrLmNcbisrKyBiL2tlcm5lbC9mb3JrLmNcbkBAIC0yMTM5LDYgKzIxMzksMTEgQEAgX19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcyhcbiBcdHAgPSBkdXBfdGFza19zdHJ1Y3QoY3VycmVudCwgbm9kZSk7XG4gXHRpZiAoIXApXG4gXHRcdGdvdG8gZm9ya19vdXQ7XG4rXHQvKlxuK1x0ICogTXVzdCBydW4gYmVmb3JlIHRoZSBmaXJzdCBmYWxsaWJsZSBvcCwgc28gZXJyb3IgcGF0aHMgbmV2ZXJcbitcdCAqIGZyZWUgdGhlIHBhcmVudCdzIHJldF9zdGFjay5cbitcdCAqL1xuK1x0ZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTtcbiBcdHJldHZhbCA9IGNvcHlfZXhlY19zdGF0ZShjbG9uZV9mbGFncywgcCk7XG4gXHRpZiAocmV0dmFsKVxuIFx0XHRnb3RvIGJhZF9mb3JrX2ZyZWU7XG5AQCAtMjE2NSw4ICsyMTcwLDYgQEAgX19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcyhcbiBcdCAqL1xuIFx0cC1cdTAwM2VjbGVhcl9jaGlsZF90aWQgPSAoY2xvbmVfZmxhZ3MgXHUwMDI2IENMT05FX0NISUxEX0NMRUFSVElEKSA/IGFyZ3MtXHUwMDNlY2hpbGRfdGlkIDogTlVMTDtcbiBcbi1cdGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socCk7XG4tXG4gXHRydF9tdXRleF9pbml0X3Rhc2socCk7XG4gXHRyYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2cC1cdTAwM2VibG9ja2VkX2xvY2spO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDY6MjAuNjYzNDcwNDYzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMzg3NzQ0NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIEltcGFjdCBvbiBNZW1vcnkgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1vdmluZyBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgZWFybGllciBpbiBgY29weV9wcm9jZXNzKClgLCByaWdodCBhZnRlciBgZHVwX3Rhc2tfc3RydWN0KClgLiBUaGUgY29tbWVudCBtZW50aW9ucyB0aGF0IHRoaXMgaXMgY3J1Y2lhbCB0byBwcmV2ZW50IGZyZWVpbmcgdGhlIHBhcmVudCdzIGByZXRfc3RhY2tgIGluIGVycm9yIHBhdGhzLiAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBwcmV2ZW50cyBhIHByb2JsZW0gd2l0aCB0aGUgcGFyZW50J3MgcmV0X3N0YWNrLCBhbmQgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgdGhhdCBLTVNBTiBtaWdodCBjYXRjaC5cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBgZHVwX3Rhc2tfc3RydWN0KClgIGlzIGFsbG9jYXRpbmcgYSBuZXcgYHRhc2tfc3RydWN0YCBhbmQgY29weWluZyB0aGUgY29udGVudHMgb2YgdGhlIHBhcmVudCdzIGB0YXNrX3N0cnVjdGAgaW50byBpdC4gIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGlmIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCBzZXRzIHNvbWUgZmllbGRzLCBtYXliZSBpbmNsdWRpbmcgYHJldF9zdGFja2AsIHRvIE5VTEwgb3IgemVybywgdGhlbiBtb3ZpbmcgaXQgZWFybGllciBtZWFucyB0aGVzZSBmaWVsZHMgd29uJ3QgaG9sZCB0aGUgcGFyZW50J3MgZGF0YSBhbnltb3JlLCBkdXJpbmcgYW4gZXJyb3IgcGF0aCB3aGVuIG90aGVyIHN0ZXBzIChlLmcuLCBgY29weV9leGVjX3N0YXRlYCkgbWlnaHQgZmFpbC4gVGhpcyBpcyBjcnVjaWFsOiBpZiB0aG9zZSBlcnJvciBwYXRocyB3ZXJlIHRvIHJlbGVhc2UgdGhlIG1lbW9yeSBwb2ludGVkIHRvIGJ5IHRoZSAqcGFyZW50J3MqIGByZXRfc3RhY2tgLCBhbmQgdGhlbiB0aGUgcGFyZW50IGNvbnRpbnVlZCB0byB1c2UgaXQsIGl0IHdvdWxkIGJlIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBvciBhIGRvdWJsZSBmcmVlISAgVGhlIHBhcmVudCdzIGByZXRfc3RhY2tgIG1pZ2h0IGJlIGEgcG9pbnRlciB0byBpdHMgb3duIHN0cnVjdHVyZXMuXG5cbldhaXQsIGlzIHRoaXMgcmVhbGx5IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICppc3N1ZSogdGhvdWdoPyBUaGlzIGlzIGEgZml4IGZvciBhICp1c2UtYWZ0ZXItZnJlZSogb3IgKmRvdWJsZS1mcmVlKiwgd2hpY2ggS0FTQU4gd291bGQgZGVmaW5pdGVseSBjYXRjaC4gYGR1cF90YXNrX3N0cnVjdGAgaW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSB0byB0aGUgcGFyZW50J3MgdmFsdWVzLCBzbyBpdCdzIG5vdCB1bmluaXRpYWxpemVkIGluIHRoZSBzdHJpY3Qgc2Vuc2UuIFRoZSB3b3JyeSBpcyB0aGF0IGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBwcm9iYWJseSBzZXRzIHNvbWV0aGluZyBsaWtlIGBwLVx1MDAzZXJldF9zdGFjayA9IE5VTExgIG9yIHNpbWlsYXIsIGFmdGVyIHRoZSBjb3B5LiAgTW92aW5nIHRoaXMgb3BlcmF0aW9uIGVhcmxpZXIgbWVhbnMgYHAtXHUwMDNlcmV0X3N0YWNrYCAqd29uJ3QqIGhhdmUgdGhlIHBhcmVudCdzIHBvdGVudGlhbGx5IGludmFsaWQgcG9pbnRlciBhbnltb3JlIGluIGNhc2Ugb2YgYW4gZXJyb3IuIFRoaXMgaXMgYSBkYW5nbGluZyBwb2ludGVyL2RvdWJsZS1mcmVlIGlzc3VlLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIHNob3VsZCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgY29kZSBmb3IgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIHRvIGNvbmZpcm0gdGhpcyBodW5jaCBhbmQgcnVsZSBvdXQgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3JzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDY6MjguOTAyMjQ4NTE5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM0NDkxODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzQyPWV4dGVybiB0cmFjZV9mdW5jX2dyYXBoX2VudF90IGZ0cmFjZV9ncmFwaF9lbnRyeTtcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNDMtXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzQ0OmV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KTtcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNDUtZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzU2PXN0YXRpYyBpbmxpbmUgdm9pZCB1bnBhdXNlX2dyYXBoX3RyYWNpbmcodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM2My1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNjQ6c3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNjUtc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cXG4tLVxcbmtlcm5lbC9mb3JrLmM9MjAxOD1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxcbi0tXFxua2VybmVsL2ZvcmsuYy0yMTQ1LVxcdCAqL1xcbmtlcm5lbC9mb3JrLmM6MjE0NjpcXHRmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApO1xcbmtlcm5lbC9mb3JrLmMtMjE0Ny1cXHRyZXR2YWwgPSBjb3B5X2V4ZWNfc3RhdGUoY2xvbmVfZmxhZ3MsIHApO1xcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTExMzE9dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF9pZGxlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY3B1KVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTExNTktLyogQWxsb2NhdGUgYSByZXR1cm4gc3RhY2sgZm9yIG5ld2x5IGNyZWF0ZWQgdGFzayAqL1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMTYwOnZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTExNjEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NjozMC4zMzY3NDYxMDlaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3MDUyNDk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgZ3V0cyBvZiB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2VyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AuICBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gYGtlcm5lbC90cmFjZS9mZ3JhcGguY2AuIEknbSBnb2luZyB0byBzdGFydCBmcm9tIHRoZXJlLiBJIGV4cGVjdCB0aGF0IHRoaXMgcm91dGluZSBtdXN0IGJlIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBuZWNlc3NhcnkgY29udGV4dCBvciBpbnRlcm5hbCBzdHJ1Y3R1cmVzIHdoZW4gYSBuZXcgdGFzayBpcyBpbml0aWFsaXplZC4gUGVyaGFwcyBJIGNhbiB3b3JrIG91dCBob3cgYSB0YXNrJ3MgZnVuY3Rpb24gZ3JhcGggc3RhdGUgaXMgaW5pdGlhbGl6ZWQsIHdoYXQgZmxhZ3Mgb3IgdmFyaWFibGVzIGFyZSBzZXQgYW5kIHRoZSByb2xlIGl0IHBsYXlzIGluIHRoZSBvdmVyYWxsIGBmdHJhY2VgIGFyY2hpdGVjdHVyZS4gVW5kZXJzdGFuZGluZyB0aGlzIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgd2lsbCBwcm92aWRlIHZhbHVhYmxlIGluc2lnaHQgaW50byBpdHMgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHRyYWNlci4gSSBhbnRpY2lwYXRlIHRoYXQgdGhpcyBmdW5jdGlvbiBjYWxsIGlzIGF0IHRoZSBoZWFydCBvZiB0aGUgdHJhY2VyJ3MgcGVyLXRhc2sgdHJhY2tpbmcgd2hpY2ggaXMgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGlubmVyIHdvcmtpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDgwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDY6MzQuMDA3Mjc0MjkzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9mZ3JhcGguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTU5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTU5OlxcdC8qIEFsbG9jYXRlIGEgcmV0dXJuIHN0YWNrIGZvciBuZXdseSBjcmVhdGVkIHRhc2sgKi9cXG4xMTYwOlxcdHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxuMTE2MTpcXHR7XFxuMTE2MjpcXHRcXHQvKiBNYWtlIHN1cmUgd2UgZG8gbm90IHVzZSB0aGUgcGFyZW50IHJldF9zdGFjayAqL1xcbjExNjM6XFx0XFx0dC1cXHUwMDNlcmV0X3N0YWNrID0gTlVMTDtcXG4xMTY0OlxcdFxcdHQtXFx1MDAzZWN1cnJfcmV0X3N0YWNrID0gMDtcXG4xMTY1OlxcdFxcdHQtXFx1MDAzZWN1cnJfcmV0X2RlcHRoID0gLTE7XFxuMTE2NjpcXHRcXG4xMTY3OlxcdFxcdGlmIChmdHJhY2VfZ3JhcGhfYWN0aXZlKSB7XFxuMTE2ODpcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpyZXRfc3RhY2s7XFxuMTE2OTpcXHRcXG4xMTcwOlxcdFxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWZncmFwaF9zdGFja19jYWNoZXApKVxcbjExNzE6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjExNzI6XFx0XFxuMTE3MzpcXHRcXHRcXHRyZXRfc3RhY2sgPSBrbWVtX2NhY2hlX2FsbG9jKGZncmFwaF9zdGFja19jYWNoZXAsIEdGUF9LRVJORUwpO1xcbjExNzQ6XFx0XFx0XFx0aWYgKCFyZXRfc3RhY2spXFxuMTE3NTpcXHRcXHRcXHRcXHRyZXR1cm47XFxuMTE3NjpcXHRcXHRcXHRncmFwaF9pbml0X3Rhc2sodCwgcmV0X3N0YWNrKTtcXG4xMTc3OlxcdFxcdH1cXG4xMTc4OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDY6MzQuMDA3MzY0NjAyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3Njg2MzQ1ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBjb3B5X3Byb2Nlc3MoKWAgQnVnIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgZGlzYXN0ZXIgaW4gYGNvcHlfcHJvY2VzcygpYC4gRnJvbSB3aGF0IEkgZ2F0aGVyLCB0aGUgaXNzdWUgYm9pbHMgZG93biB0byBob3cgYHQtXHUwMDNlcmV0X3N0YWNrYCBpbnRlcmFjdHMgd2l0aCBlcnJvciBoYW5kbGluZy4gRXNzZW50aWFsbHksIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIHByb2Nlc3MgY3JlYXRpb24gYW5kIHRoZSBgcmV0X3N0YWNrYCBtaXN0YWtlbmx5IGhvbGRzIG9udG8gdGhlIHBhcmVudCdzIHZhbHVlLCBhbmQgdGhlbiB0aGUgZXJyb3IgaGFuZGxpbmcgcm91dGluZSAobGlrZSBgZnJlZV90YXNrKClgKSByZWxlYXNlcyBpdCwgYm9vbeKAlHdlIGhhdmUgYSB1c2UtYWZ0ZXItZnJlZSBvciwgZXZlbiB3b3JzZSwgYSBkb3VibGUtZnJlZSB2dWxuZXJhYmlsaXR5LiBLQVNBTiByaWdodGZ1bGx5IGZsYWdzIHRoaXMgYXMgYSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZSwgYSBjbGFzc2ljIFVBRiBidWcuIFRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBhbnkgaW5mb3JtYXRpb24gbGVha2FnZSBpbnZvbHZlZCBoZXJlLlxuXG5HaXZlbiB0aGF0IHRoaXMgaXMgcHVyZWx5IGEgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUsIGFuZCBLQVNBTiBpcyBhbHJlYWR5IG9uIHRoZSBjYXNlLCBLTVNBTiBpc24ndCBnb2luZyB0byBhZGQgYW55IHZhbHVlLiBJdCdzIG5vdCB0aGUgcmlnaHQgdG9vbCBmb3IgdGhpcyBqb2IuIFNvLCBJIHdpbGwgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYC4gTXkgcmF0aW9uYWxlIGlzIGNsZWFyOiBLQVNBTiBjb3ZlcnMgdGhlIGtleSBhc3BlY3RzIG9mIHRoaXMgYnVn4oCUc3BlY2lmaWNhbGx5LCB0aGUgZGV0ZWN0aW9uIG9mIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnPigJR3aGlsZSBLTVNBTidzIGZvY3VzIG9uIGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBkb2Vzbid0IGFsaWduIHdpdGggdGhlIG5hdHVyZSBvZiB0aGlzIHBhcnRpY3VsYXIgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNTIsIk91dHB1dFRva2VucyI6MjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDY6NDAuNzc2MDAxMzI1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgZWFybGllciBpbiBgY29weV9wcm9jZXNzKClgIHRvIGVuc3VyZSB0aGF0IGBwLVxcdTAwM2VyZXRfc3RhY2tgIGFuZCByZWxhdGVkIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgKHNldCB0byBOVUxMIG9yIG5ld2x5IGFsbG9jYXRlZCkgYmVmb3JlIGFueSBmYWxsaWJsZSBvcGVyYXRpb25zIG9jY3VyLiBQcmlvciB0byB0aGlzIGNoYW5nZSwgaWYgYW4gZXJyb3Igb2NjdXJyZWQgZWFybHkgaW4gYGNvcHlfcHJvY2VzcygpYCAoZS5nLiwgaW4gYGNvcHlfZXhlY19zdGF0ZSgpYCksIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGNvdWxkIGZyZWUgdGhlIG5ldyB0YXNrIHN0cnVjdHVyZSB3aGlsZSBpdCBzdGlsbCBoZWxkIGEgY29weSBvZiB0aGUgcGFyZW50J3MgYHJldF9zdGFja2AgcG9pbnRlciAoZHVlIHRvIGBkdXBfdGFza19zdHJ1Y3QoKWApLiBUaGlzIHdvdWxkIHJlc3VsdCBpbiBmcmVlaW5nIHRoZSBwYXJlbnQncyBgcmV0X3N0YWNrYCwgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGJ1Zy5cXG5cXG5UaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBidWdzICh1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUpIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIGlzc3VlIGRvZXMgbm90IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQsIGFzIHN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIGJ1ZyB0aGlzIHBhdGNoIGFkZHJlc3Nlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgZWFybGllciBpbiBgY29weV9wcm9jZXNzKClgIHRvIGVuc3VyZSB0aGF0IGBwLVxcdTAwM2VyZXRfc3RhY2tgIGFuZCByZWxhdGVkIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgKHNldCB0byBOVUxMIG9yIG5ld2x5IGFsbG9jYXRlZCkgYmVmb3JlIGFueSBmYWxsaWJsZSBvcGVyYXRpb25zIG9jY3VyLiBQcmlvciB0byB0aGlzIGNoYW5nZSwgaWYgYW4gZXJyb3Igb2NjdXJyZWQgZWFybHkgaW4gYGNvcHlfcHJvY2VzcygpYCAoZS5nLiwgaW4gYGNvcHlfZXhlY19zdGF0ZSgpYCksIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGNvdWxkIGZyZWUgdGhlIG5ldyB0YXNrIHN0cnVjdHVyZSB3aGlsZSBpdCBzdGlsbCBoZWxkIGEgY29weSBvZiB0aGUgcGFyZW50J3MgYHJldF9zdGFja2AgcG9pbnRlciAoZHVlIHRvIGBkdXBfdGFza19zdHJ1Y3QoKWApLiBUaGlzIHdvdWxkIHJlc3VsdCBpbiBmcmVlaW5nIHRoZSBwYXJlbnQncyBgcmV0X3N0YWNrYCwgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGJ1Zy5cXG5cXG5UaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBidWdzICh1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUpIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIGlzc3VlIGRvZXMgbm90IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQsIGFzIHN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIGJ1ZyB0aGlzIHBhdGNoIGFkZHJlc3Nlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4jnp9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-22 09:00:58 +0000 UTC FinishedAt: 2026-08-22 09:46:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "55ab7e14222e5f0b0fd9f7711ca391d2924b35e3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FTRACE", "FUNCTION_TRACER", "FUNCTION_GRAPH_TRACER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "55ab7e14222e5f0b0fd9f7711ca391d2924b35e3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FTRACE", "FUNCTION_TRACER", "FUNCTION_GRAPH_TRACER" ], "series_id": "a6c4011e-5e1d-421d-a646-8928694800c7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZUUkFDRSYjMzQ7LAogICAgJiMzNDtGVU5DVElPTl9UUkFDRVImIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fR1JBUEhfVFJBQ0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socClgIGVhcmxpZXIgaW4gYGNvcHlfcHJvY2VzcygpYCB0byBlbnN1cmUgdGhhdCBgcC1cdTAwM2VyZXRfc3RhY2tgIGFuZCByZWxhdGVkIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgKHNldCB0byBOVUxMIG9yIG5ld2x5IGFsbG9jYXRlZCkgYmVmb3JlIGFueSBmYWxsaWJsZSBvcGVyYXRpb25zIG9jY3VyLiBQcmlvciB0byB0aGlzIGNoYW5nZSwgaWYgYW4gZXJyb3Igb2NjdXJyZWQgZWFybHkgaW4gYGNvcHlfcHJvY2VzcygpYCAoZS5nLiwgaW4gYGNvcHlfZXhlY19zdGF0ZSgpYCksIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGNvdWxkIGZyZWUgdGhlIG5ldyB0YXNrIHN0cnVjdHVyZSB3aGlsZSBpdCBzdGlsbCBoZWxkIGEgY29weSBvZiB0aGUgcGFyZW50JiMzOTtzIGByZXRfc3RhY2tgIHBvaW50ZXIgKGR1ZSB0byBgZHVwX3Rhc2tfc3RydWN0KClgKS4gVGhpcyB3b3VsZCByZXN1bHQgaW4gZnJlZWluZyB0aGUgcGFyZW50JiMzOTtzIGByZXRfc3RhY2tgLCBsZWFkaW5nIHRvIGEgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgYnVnLlxuXG5UaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBidWdzICh1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUpIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIGlzc3VlIGRvZXMgbm90IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQsIGFzIHN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIGJ1ZyB0aGlzIHBhdGNoIGFkZHJlc3Nlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gdGhlIGVycm9yIHBhdGhzIG9mIGNvcHlfcHJvY2VzcygpLiBXaGVuIGEgdGFzayBpcyBkdXBsaWNhdGVkIHZpYSBkdXBfdGFza19zdHJ1Y3QoKSwgdGhlIGNoaWxkIHRhc2sgaW5oZXJpdHMgdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2sgcG9pbnRlci4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBwcm9jZXNzIGNyZWF0aW9uIGJlZm9yZSBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKCkgY2xlYXJzIHRoZSBjaGlsZCYjMzk7cyByZXRfc3RhY2ssIHRoZSBlcnJvciBwYXRoIChmcmVlX3Rhc2sgLVx1MDAzZSBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKSB3aWxsIGVycm9uZW91c2x5IGZyZWUgdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2ssIGxlYWRpbmcgdG8gYSB1c2UtYWZ0ZXItZnJlZSB3aGVuIHRoZSBwYXJlbnQgcmVzdW1lcyBleGVjdXRpb24uIFRoZSBwYXRjaCBtb3ZlcyBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKCkgYmVmb3JlIGFueSBmYWxsaWJsZSBvcGVyYXRpb25zIHRvIHByZXZlbnQgdGhpcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGZvciBhIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBidWcsIHJlcXVpcmluZyBmdHJhY2UgZ3JhcGggdHJhY2luZyBjb25maWdzIHRvIGJlIGVuYWJsZWQuIE5vIHNwZWNpZmljIGZvY3VzIHN5bWJvbHMgYXJlIG5lZWRlZCBzaW5jZSBjb3B5X3Byb2Nlc3MoKSBpcyBhbHJlYWR5IGhlYXZpbHkgZnV6emVkIHZpYSBjbG9uZS9mb3JrIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOGE4YTEzZWE5NDhiNjBhYjgxNjc0NDUwMDNkODdkNmQyYWYyNDg1NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDIyIDA5OjQ0OjE4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jXG5pbmRleCAxZTY4NDA0YmQ3NzNlLi4wZDFhZDkyZTJkMzM3IDEwMDY0NFxuLS0tIGEva2VybmVsL2ZvcmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2ZvcmsuY1xuQEAgLTIxMzksNiAmIzQzOzIxMzksMTEgQEAgX19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcyhcbiBcdHAgPSBkdXBfdGFza19zdHJ1Y3QoY3VycmVudCwgbm9kZSk7XG4gXHRpZiAoIXApXG4gXHRcdGdvdG8gZm9ya19vdXQ7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNdXN0IHJ1biBiZWZvcmUgdGhlIGZpcnN0IGZhbGxpYmxlIG9wLCBzbyBlcnJvciBwYXRocyBuZXZlclxuJiM0MztcdCAqIGZyZWUgdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2suXG4mIzQzO1x0ICovXG4mIzQzO1x0ZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTtcbiBcdHJldHZhbCA9IGNvcHlfZXhlY19zdGF0ZShjbG9uZV9mbGFncywgcCk7XG4gXHRpZiAocmV0dmFsKVxuIFx0XHRnb3RvIGJhZF9mb3JrX2ZyZWU7XG5AQCAtMjE2NSw4ICYjNDM7MjE3MCw2IEBAIF9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXG4gXHQgKi9cbiBcdHAtXHUwMDNlY2xlYXJfY2hpbGRfdGlkID0gKGNsb25lX2ZsYWdzIFx1MDAyNiBDTE9ORV9DSElMRF9DTEVBUlRJRCkgPyBhcmdzLVx1MDAzZWNoaWxkX3RpZCA6IE5VTEw7XG4gXG4tXHRmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApO1xuLVxuIFx0cnRfbXV0ZXhfaW5pdF90YXNrKHApO1xuIFx0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNnAtXHUwMDNlYmxvY2tlZF9sb2NrKTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTo0NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlRSQUNFJiMzNDssCiAgICAmIzM0O0ZVTkNUSU9OX1RSQUNFUiYjMzQ7LAogICAgJiMzNDtGVU5DVElPTl9HUkFQSF9UUkFDRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gdGhlIGVycm9yIHBhdGhzIG9mIGNvcHlfcHJvY2VzcygpLiBXaGVuIGEgdGFzayBpcyBkdXBsaWNhdGVkIHZpYSBkdXBfdGFza19zdHJ1Y3QoKSwgdGhlIGNoaWxkIHRhc2sgaW5oZXJpdHMgdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2sgcG9pbnRlci4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBwcm9jZXNzIGNyZWF0aW9uIGJlZm9yZSBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKCkgY2xlYXJzIHRoZSBjaGlsZCYjMzk7cyByZXRfc3RhY2ssIHRoZSBlcnJvciBwYXRoIChmcmVlX3Rhc2sgLVx1MDAzZSBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKSB3aWxsIGVycm9uZW91c2x5IGZyZWUgdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2ssIGxlYWRpbmcgdG8gYSB1c2UtYWZ0ZXItZnJlZSB3aGVuIHRoZSBwYXJlbnQgcmVzdW1lcyBleGVjdXRpb24uIFRoZSBwYXRjaCBtb3ZlcyBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKCkgYmVmb3JlIGFueSBmYWxsaWJsZSBvcGVyYXRpb25zIHRvIHByZXZlbnQgdGhpcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGZvciBhIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBidWcsIHJlcXVpcmluZyBmdHJhY2UgZ3JhcGggdHJhY2luZyBjb25maWdzIHRvIGJlIGVuYWJsZWQuIE5vIHNwZWNpZmljIGZvY3VzIHN5bWJvbHMgYXJlIG5lZWRlZCBzaW5jZSBjb3B5X3Byb2Nlc3MoKSBpcyBhbHJlYWR5IGhlYXZpbHkgZnV6emVkIHZpYSBjbG9uZS9mb3JrIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGE4YTEzZWE5NDhiNjBhYjgxNjc0NDUwMDNkODdkNmQyYWYyNDg1NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDA5OjQ0OjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggMWU2ODQwNGJkNzczZS4uMGQxYWQ5MmUyZDMzNyAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZm9yay5jCkBAIC0yMTM5LDYgJiM0MzsyMTM5LDExIEBAIF9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoCiAJcCA9IGR1cF90YXNrX3N0cnVjdChjdXJyZW50LCBub2RlKTsKIAlpZiAoIXApCiAJCWdvdG8gZm9ya19vdXQ7CiYjNDM7CS8qCiYjNDM7CSAqIE11c3QgcnVuIGJlZm9yZSB0aGUgZmlyc3QgZmFsbGlibGUgb3AsIHNvIGVycm9yIHBhdGhzIG5ldmVyCiYjNDM7CSAqIGZyZWUgdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2suCiYjNDM7CSAqLwomIzQzOwlmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApOwogCXJldHZhbCA9IGNvcHlfZXhlY19zdGF0ZShjbG9uZV9mbGFncywgcCk7CiAJaWYgKHJldHZhbCkKIAkJZ290byBiYWRfZm9ya19mcmVlOwpAQCAtMjE2NSw4ICYjNDM7MjE3MCw2IEBAIF9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoCiAJICovCiAJcC0mZ3Q7Y2xlYXJfY2hpbGRfdGlkID0gKGNsb25lX2ZsYWdzICZhbXA7IENMT05FX0NISUxEX0NMRUFSVElEKSA/IGFyZ3MtJmd0O2NoaWxkX3RpZCA6IE5VTEw7CiAKLQlmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApOwotCiAJcnRfbXV0ZXhfaW5pdF90YXNrKHApOwogCXJhd19zcGluX2xvY2tfaW5pdCgmYW1wO3AtJmd0O2Jsb2NrZWRfbG9jayk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDUyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IEZ0cmFjZSBhbmQgYGNvcHlfcHJvY2VzcygpYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgYGtlcm5lbC9mb3JrLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBjb3B5X3Byb2Nlc3MoKWAgZnVuY3Rpb24uIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXMgYSByZW9yZGVyaW5nIG9mIGZ1bmN0aW9uIGNhbGxzLiBXZSYjMzk7cmUgbW92aW5nIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCBlYXJsaWVyIGluIHRoZSBwcm9jZXNzLiAgVGhlIGdvYWwgaXMgdG8gZW5zdXJlIGl0IGhhcHBlbnMgKmJlZm9yZSogb3RoZXIgcG90ZW50aWFsbHkgZmFpbGluZyBvcGVyYXRpb25zLCBsaWtlIGBjb3B5X2V4ZWNfc3RhdGUoKWAuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiBpZiBhbiBlcnJvciBvY2N1cnMgKmFmdGVyKiBgZnRyYWNlX2dyYXBoX2luaXRfdGFzaygpYCwgdGhlIGVycm9yIGNsZWFudXAgcGF0aHMgZG9uJiMzOTt0IGhhdmUgdG8gd29ycnkgYWJvdXQgY2xlYW5pbmcgdXAgdGhlIHBhcmVudCYjMzk7cyBgcmV0X3N0YWNrYC4gVGhpcyBpcyBhIGRlZmVuc2l2ZSBtb3ZlIHRvIGF2b2lkIG1lbW9yeSBsZWFrcyBvciBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLgoKVGhlIGNvbW1lbnQgaW4gdGhlIGNvZGUgaGlnaGxpZ2h0cyB0aGlzIHBvaW50IGNsZWFybHk6ICYjMzQ7TXVzdCBydW4gYmVmb3JlIHRoZSBmaXJzdCBmYWxsaWJsZSBvcCwgc28gZXJyb3IgcGF0aHMgbmV2ZXIgZnJlZSB0aGUgcGFyZW50JiMzOTtzIHJldF9zdGFjay4mIzM0OyBJIGdldCBpdC4gIGBjb3B5X3Byb2Nlc3MoKWAgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgZnVuZGFtZW50YWwgdG8gcHJvY2VzcyBjcmVhdGlvbiB2aWEgYGNsb25lYCwgYGZvcmtgLCBhbmQgYHZmb3JrYC4gIFNpbmNlIGBjb3B5X3Byb2Nlc3NgIGlzIGFscmVhZHkgaGVhdmlseSBmdXp6ZWQsIHRoaXMgY2hhbmdlIGlzIHdvcnRoIGZ1enppbmcgYXMgaXQgZXhwbGljaXRseSBhZGRyZXNzZXMgZXJyb3IgcGF0aHMuCgpUaGUga2V5IGlzIHRoYXQgdGhpcyByZW9yZGVyaW5nIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFpbWVkIGF0IHByZXZlbnRpbmcgYSByZXNvdXJjZSBsZWFrIG9yLCB3b3JzZSwgYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LiAgQmVjYXVzZSB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgY29weV9wcm9jZXNzYCwgYSBjb3JlIGtlcm5lbCBmdW5jdGlvbiwgYW55IGNoYW5nZSB3YXJyYW50cyBjYXJlZnVsIHNjcnV0aW55IGFuZCBmdXp6aW5nLCBldmVuIGlmIHRoZSBjaGFuZ2UgdG91Y2hlcyBvbiBhbiBhcmVhIGxpa2UgZnRyYWNlIHRoYXQgbWlnaHQgbm90IGJlIGEgdXN1YWwgZnV6emluZyB0YXJnZXQuCgpXYWl0IGEgc2Vjb25kLiBOb3cgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AuICBUaGF04oCZcyBwYXJ0IG9mIHRoZSBmdHJhY2UgaW5mcmFzdHJ1Y3R1cmUuICBHZW5lcmFsbHksIHdlIGRvbiYjMzk7dCB6ZXJvIGluIG9uIHRyYWNpbmcgZmVhdHVyZXMgZHVyaW5nIGZ1enppbmcsIGJ1dCB0aGUgcHJveGltaXR5IHRvIGEgY29yZSBmdW5jdGlvbiBkb2VzIG1ha2UgaXQgYSBwb3RlbnRpYWwgZm9jdXMuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnRyYWNlX2dyYXBoX2luaXRfdGFzayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEzNDI9ZXh0ZXJuIHRyYWNlX2Z1bmNfZ3JhcGhfZW50X3QgZnRyYWNlX2dyYXBoX2VudHJ5O1xuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzQzLVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzQ0OmV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KTtcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM0NS1leHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XG4tLVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzU2PXN0YXRpYyBpbmxpbmUgdm9pZCB1bnBhdXNlX2dyYXBoX3RyYWNpbmcodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNjMtXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNjQ6c3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM2NS1zdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgfVxuLS1cbmtlcm5lbC9mb3JrLmM9MjAxOD1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxuLS1cbmtlcm5lbC9mb3JrLmMtMjE0NS1cdCAqL1xua2VybmVsL2ZvcmsuYzoyMTQ2Olx0ZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTtcbmtlcm5lbC9mb3JrLmMtMjE0Ny1cdHJldHZhbCA9IGNvcHlfZXhlY19zdGF0ZShjbG9uZV9mbGFncywgcCk7XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTExMzE9dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF9pZGxlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY3B1KVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMTU5LS8qIEFsbG9jYXRlIGEgcmV0dXJuIHN0YWNrIGZvciBuZXdseSBjcmVhdGVkIHRhc2sgKi9cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMTYwOnZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE2MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUzOAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgVGhvdWdodHMgb24gYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgKioKCk9rYXksIHNvIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBpcyBkZWZpbmVkIGluIGBrZXJuZWwvdHJhY2UvZmdyYXBoLmNgLiBJbW1lZGlhdGVseSwgbXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nIOKAkyBpdCYjMzk7cyBsaWtlbHkgZGVwZW5kZW50IG9uIGBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYC4gVGhhdCYjMzk7cyB0aGUgdHlwaWNhbCBwYXR0ZXJuLCBhbmQgdGhpcyBpcyB0cmFjaW5nLXJlbGF0ZWQgY29kZSwgc28gaXQmIzM5O3MgYSB2ZXJ5IGhpZ2ggcHJvYmFiaWxpdHkuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgcXVpY2tseTsgaXQmIzM5O3MgYmFzaWMgZHVlIGRpbGlnZW5jZS4gVGhlIG1vc3QgZGlyZWN0IHBhdGhzIHdvdWxkIGJlIGVpdGhlciB0byBjaGVjayB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgYGtlcm5lbC90cmFjZWAgZGlyZWN0b3J5LCBvciBtYXliZSBldmVuIGxvb2sgYXQgdGhlIGluY2x1ZGUgZ3VhcmRzIGRpcmVjdGx5IHdpdGhpbiBgZmdyYXBoLmNgIGl0c2VsZi4gSXTigJlzIGEgdHJpdmlhbCBjaGVjayBmb3IgbWUsIGJ1dCBpdCBpcyBpbXBvcnRhbnQgdG8gYmUgY29uZmlkZW50IG9uIGJ1aWxkIHByZXJlcXVpc2l0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmdyYXBoLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdHJhY2UuaD0yODQ9ZnRyYWNlX2Z1bmNfdCBmdHJhY2Vfb3BzX2dldF9mdW5jKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMpO1xuLS1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMzQxLSAqIFNVQk9QICAtIElzIGNvbnRyb2xsZWQgYnkgYW5vdGhlciBvcCBpbiBmaWVsZCBtYW5hZ2VkLlxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDozNDI6ICogR1JBUEggIC0gSXMgYSBjb21wb25lbnQgb2YgdGhlIGZncmFwaF9vcHMgc3RydWN0dXJlXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTM0My0gKi9cbi0tXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEyMzE9c3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQge1xuLS1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTI0MC1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTI0MTpzdHJ1Y3QgZmdyYXBoX29wcztcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTI0Mi1cbi0tXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEyNDQ9dHlwZWRlZiB2b2lkICgqdHJhY2VfZnVuY19ncmFwaF9yZXRfdCkoc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKixcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTI0NTpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZmdyYXBoX29wcyAqLFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMjQ2LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqKTsgLyogcmV0dXJuICovXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEyNDc9dHlwZWRlZiBpbnQgKCp0cmFjZV9mdW5jX2dyYXBoX2VudF90KShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqLFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMjQ4Olx0XHRcdFx0ICAgICAgc3RydWN0IGZncmFwaF9vcHMgKixcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTI0OS1cdFx0XHRcdCAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqKTsgLyogZW50cnkgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEyNTE9ZXh0ZXJuIGludCBmdHJhY2VfZ3JhcGhfZW50cnlfc3R1YihzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEyNTI6XHRcdFx0XHQgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTI1My1cdFx0XHRcdCAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpO1xuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMjU0PWJvb2wgZnRyYWNlX3BpZHNfZW5hYmxlZChzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEyNTctXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEyNTg6c3RydWN0IGZncmFwaF9vcHMge1xuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMjU5LVx0dHJhY2VfZnVuY19ncmFwaF9lbnRfdFx0XHRlbnRyeWZ1bmM7XG4tLVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzA3PXVuc2lnbmVkIGxvbmcgZnRyYWNlX2dyYXBoX3JldF9hZGRyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50ICppZHgsXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzMDgtXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyByZXQsIHVuc2lnbmVkIGxvbmcgKnJldHApO1xuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzA5OnVuc2lnbmVkIGxvbmcgKmZncmFwaF9nZXRfdGFza192YXIoc3RydWN0IGZncmFwaF9vcHMgKmdvcHMpO1xuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzEwLVxuLS1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTMyMC1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTMyMTpleHRlcm4gaW50IHJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChzdHJ1Y3QgZmdyYXBoX29wcyAqb3BzKTtcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTMyMjpleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChzdHJ1Y3QgZmdyYXBoX29wcyAqb3BzKTtcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTMyMy1cbi0tXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEzNjY9c3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X2lkbGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjcHUpIHsgfVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzY3LVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzY4Oi8qIERlZmluZSBhcyBtYWNyb3MgYXMgZmdyYXBoX29wcyBtYXkgbm90IGJlIGRlZmluZWQgKi9cbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM2OS0jZGVmaW5lIHJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChvcHMpICh7IC0xOyB9KVxuLS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZT05Mj1vYmotJChDT05GSUdfQkxLX0RFVl9JT19UUkFDRSkgJiM0Mzs9IGJsa3RyYWNlLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo5MzpvYmotJChDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSKSAmIzQzOz0gZmdyYXBoLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS05NC1pZmVxICgkKENPTkZJR19CTE9DSykseSlcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDEtICogRm9yIHR5cGUgd2l0aCBcJiMzNDtiaXRtYXAgb2YgZmdyYXBoX2FycmF5IGluZGV4XCYjMzQ7IChGR1JBUEhfVFlQRV9CSVRNQVApOlxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjQyOiAqICBiaXRzOiAxMiAtIDI3XHRUaGUgYml0bWFwIG9mIGZncmFwaF9vcHMgZmdyYXBoX2FycmF5IGluZGV4XG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDMtICpcdFx0XHRUaGF0IGlzLCBpdCYjMzk7cyBhIGJpdG1hc2sgb2YgMC0xNSAoMTYgYml0cylcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNTYtICogVGhhdCBpcywgYXQgdGhlIGVuZCBvZiBmdW5jdGlvbl9ncmFwaF9lbnRlciwgaWYgdGhlIGZpcnN0IGFuZCBmb3J0aFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjU3OiAqIGZncmFwaF9vcHMgb24gdGhlIGZncmFwaF9hcnJheVtdIChpbmRleCAwIGFuZCAzKSBuZWVkcyB0aGVpciByZXRmdW5jIGNhbGxlZFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjU4OiAqIG9uIHRoZSByZXR1cm4gb2YgdGhlIGZ1bmN0aW9uIGJlaW5nIHRyYWNlZCwgYW5kIHRoZSBmb3J0aCBmZ3JhcGhfb3BzXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNTktICogc3RvcmVkIHR3byB3b3JkcyBvZiBkYXRhLCB0aGlzIGlzIHdoYXQgd2lsbCBiZSBvbiB0aGUgdGFzayYjMzk7cyBzaGFkb3dcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNzEtICogfCAgICAgICAgICpvciBwdXQgYW5vdGhlciB3YXkqICAgICAgICAgICAgICAgfFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjcyOiAqIHwgKDMgXHUwMDNjXHUwMDNjIEZHUkFQSF9EQVRBX0lOREVYX1NISUZUKXwgXFwgICAgICAgICAgfCBUaGlzIGlzIGZvciBmZ3JhcGhfb3BzWzNdLlxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTczLSAqIHwgKCgyIC0gMSkgXHUwMDNjXHUwMDNjIEZHUkFQSF9EQVRBX1NISUZUKXwgXFwgICAgICAgICAgfCBUaGUgZGF0YSBzaXplIGlzIDIgd29yZHMuXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTExNT1lbnVtIHtcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTY1LS8qXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTY2OiAqIEVhY2ggZmdyYXBoX29wcyBoYXMgYSByZXNlcnZlZCB1bnNpZ25lZCBsb25nIGF0IHRoZSBlbmQgKHRvcCkgb2YgdGhlXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTY3LSAqIHJldF9zdGFjayB0byBzdG9yZSB0YXNrIHNwZWNpZmljIHN0YXRlLlxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xNzU9c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpmZ3JhcGhfc3RhY2tfY2FjaGVwO1xua2VybmVsL3RyYWNlL2ZncmFwaC5jLTE3Ni1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxNzc6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzICpmZ3JhcGhfYXJyYXlbRkdSQVBIX0FSUkFZX1NJWkVdO1xua2VybmVsL3RyYWNlL2ZncmFwaC5jLTE3OC1zdGF0aWMgdW5zaWduZWQgbG9uZyBmZ3JhcGhfYXJyYXlfYml0bWFzaztcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9Mjg3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtYWtlX2RhdGFfdHlwZV92YWwoaW50IGlkeCwgaW50IHNpemUsIGludCBvZmZzZXQpXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTI5NC0vKiBmdHJhY2VfZ3JhcGhfZW50cnkgc2V0IHRvIHRoaXMgdG8gdGVsbCBzb21lIGFyY2hzIHRvIHJ1biBmdW5jdGlvbiBncmFwaCAqL1xua2VybmVsL3RyYWNlL2ZncmFwaC5jOjI5NTpzdGF0aWMgaW50IGVudHJ5X3J1bihzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsIHN0cnVjdCBmZ3JhcGhfb3BzICpvcHMsXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMjk2LVx0XHQgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTMwMS0vKiBmdHJhY2VfZ3JhcGhfcmV0dXJuIHNldCB0byB0aGlzIHRvIHRlbGwgc29tZSBhcmNocyB0byBydW4gZnVuY3Rpb24gZ3JhcGggKi9cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzozMDI6c3RhdGljIHZvaWQgcmV0dXJuX3J1bihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsIHN0cnVjdCBmZ3JhcGhfb3BzICpvcHMsXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzAzLVx0XHQgICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9MzIyPXN0YXRpYyB2b2lkIHJldF9zdGFja19pbml0X3Rhc2tfdmFycyh1bnNpZ25lZCBsb25nICpyZXRfc3RhY2spXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTMzNC0gKiBSZXNlcnZlcyBzcGFjZSBvZiB1cCB0byBGR1JBUEhfTUFYX0RBVEFfU0laRSBieXRlcyBvbiB0aGVcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzozMzU6ICogdGFzayYjMzk7cyByZXRfc3RhY2sgc2hhZG93IHN0YWNrLCBmb3IgYSBnaXZlbiBmZ3JhcGhfb3BzIGR1cmluZ1xua2VybmVsL3RyYWNlL2ZncmFwaC5jLTMzNi0gKiB0aGUgZW50cnlmdW5jKCkgY2FsbC4gSWYgZW50cnlmdW5jKCkgcmV0dXJucyB6ZXJvLCB0aGUgc3RvcmFnZVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTMzNy0gKiBpcyBkaXNjYXJkZWQuIEFuIGVudHJ5ZnVuYygpIGNhbiBvbmx5IGNhbGwgdGhpcyBvbmNlIHBlciBpdGVyYXRpb24uXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MzM4OiAqIFRoZSBmZ3JhcGhfb3BzIHJldGZ1bmMoKSBjYW4gcmV0cmlldmUgdGhpcyBzdG9yZWQgZGF0YSB3aXRoXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzM5LSAqIGZncmFwaF9yZXRyaWV2ZV9kYXRhKCkuXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTM0Nj12b2lkICpmZ3JhcGhfcmVzZXJ2ZV9kYXRhKGludCBpZHgsIGludCBzaXplX2J5dGVzKVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zODEtICogZmdyYXBoX3JldHJpZXZlX2RhdGEgLSBSZXRyaWV2ZSBzdG9yZWQgZGF0YSBmcm9tIGZncmFwaF9yZXNlcnZlX2RhdGEoKVxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjM4MjogKiBAaWR4Olx0dGhlIGluZGV4IG9mIGZncmFwaF9hcnJheSAoZmdyYXBoX29wczo6aWR4KVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTM4My0gKiBAc2l6ZV9ieXRlczogcG9pbnRlciB0byByZXRyaWV2ZWQgZGF0YSBzaXplLlxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTM4NC0gKlxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjM4NTogKiBUaGlzIGlzIHRvIGJlIGNhbGxlZCBieSBhIGZncmFwaF9vcHMgcmV0ZnVuYygpLCB0byByZXRyaWV2ZSBkYXRhIHRoYXRcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzozODY6ICogd2FzIHN0b3JlZCBieSB0aGUgZmdyYXBoX29wcyBlbnRyeWZ1bmMoKSBvbiB0aGUgZnVuY3Rpb24gZW50cnkuXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzg3LSAqIFRoYXQgaXMsIHRoaXMgd2lsbCByZXRyaWV2ZSB0aGUgZGF0YSB0aGF0IHdhcyByZXNlcnZlZCBvbiB0aGVcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zODgtICogZW50cnkgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGV4aXQgb2YgdGhlIGZ1bmN0aW9uXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6Mzg5OiAqIHRoYXQgdGhlIGZncmFwaF9vcHMgcmV0ZnVuYygpIGlzIGNhbGxlZCBvbi5cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zOTAtICpcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9Mzk1PXZvaWQgKmZncmFwaF9yZXRyaWV2ZV9kYXRhKGludCBpZHgsIGludCAqc2l6ZV9ieXRlcylcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDAzLSAqXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6NDA0OiAqIEV2ZXJ5IHJlZ2lzdGVyZWQgZmdyYXBoX29wcyBoYXMgYSB0YXNrIHN0YXRlIHZhcmlhYmxlXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDA1LSAqIHJlc2VydmVkIG9uIHRoZSB0YXNrJiMzOTtzIHJldF9zdGFjay4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy00MDctICpcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo0MDg6ICogUmV0dXJucyB0aGUgYWRkcmVzcyB0byB0aGUgZmdyYXBoX29wcyBAZ29wcyB0YXNrcyBzcGVjaWZpY1xua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQwOS0gKiB1bnNpZ25lZCBsb25nIHZhcmlhYmxlLlxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQxMC0gKi9cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo0MTE6dW5zaWduZWQgbG9uZyAqZmdyYXBoX2dldF90YXNrX3ZhcihzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcylcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy00MTIte1xuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYz00MzQ9Z2V0X3JldF9zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBvZmZzZXQsIGludCAqZnJhbWVfb2Zmc2V0KVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy00NTQtICogZmdyYXBoX3JldHJpZXZlX3BhcmVudF9kYXRhIC0gZ2V0IGRhdGEgZnJvbSBhIHBhcmVudCBmdW5jdGlvblxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjQ1NTogKiBAaWR4OiBUaGUgaW5kZXggaW50byB0aGUgZmdyYXBoX2FycmF5IChmZ3JhcGhfb3BzOjppZHgpXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDU2LSAqIEBzaXplX2J5dGVzOiBBIHBvaW50ZXIgdG8gcmV0cmlldmVkIGRhdGEgc2l6ZVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYz01MjE9aW50IGZ0cmFjZV9ncmFwaF9lbnRyeV9zdHViKHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo1MjI6XHRcdFx0ICAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTUyMy1cdFx0XHQgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9NTI4PXN0YXRpYyB2b2lkIGZ0cmFjZV9ncmFwaF9yZXRfc3R1YihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6NTI5Olx0XHRcdFx0ICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy01MzAtXHRcdFx0XHQgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTUzMy1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo1MzQ6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzIGZncmFwaF9zdHViID0ge1xua2VybmVsL3RyYWNlL2ZncmFwaC5jLTUzNS1cdC5lbnRyeWZ1bmMgPSBmdHJhY2VfZ3JhcGhfZW50cnlfc3R1Yixcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNTM4LVxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjUzOTpzdGF0aWMgc3RydWN0IGZncmFwaF9vcHMgKmZncmFwaF9kaXJlY3RfZ29wcyA9IFx1MDAyNmZncmFwaF9zdHViO1xua2VybmVsL3RyYWNlL2ZncmFwaC5jLTU0MC1ERUZJTkVfU1RBVElDX0NBTEwoZmdyYXBoX2Z1bmMsIGZ0cmFjZV9ncmFwaF9lbnRyeV9zdHViKTtcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9NjUyPWludCBmdW5jdGlvbl9ncmFwaF9lbnRlcl9yZWdzKHVuc2lnbmVkIGxvbmcgcmV0LCB1bnNpZ25lZCBsb25nIGZ1bmMsXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTY4Ni1cdFx0XHRcdFx0IHNpemVvZihmZ3JhcGhfYXJyYXlfYml0bWFzaykgKiBCSVRTX1BFUl9CWVRFKSB7XG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6Njg3Olx0XHRcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzID0gUkVBRF9PTkNFKGZncmFwaF9hcnJheVtpXSk7XG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNjg4LVx0XHRcdGludCBzYXZlX2N1cnJfcmV0X3N0YWNrO1xuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYz04MTI9X19mdHJhY2VfcmV0dXJuX3RvX2hhbmRsZXIoc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncywgdW5zaWduZWQgbG9uZyBmcmFtZV9wb2ludGVyKVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy04NTYtXHRcdGZvcl9lYWNoX3NldF9iaXQoaSwgXHUwMDI2Yml0bWFwLCBzaXplb2YoYml0bWFwKSAqIEJJVFNfUEVSX0JZVEUpIHtcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo4NTc6XHRcdFx0c3RydWN0IGZncmFwaF9vcHMgKmdvcHMgPSBSRUFEX09OQ0UoZmdyYXBoX2FycmF5W2ldKTtcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy04NTgtXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTEwMTI9dm9pZCBmZ3JhcGhfaW5pdF9vcHMoc3RydWN0IGZ0cmFjZV9vcHMgKmRzdF9vcHMsXG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEwMzEtICovXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTAzMjp2b2lkIGZ0cmFjZV9zdHViX2dyYXBoKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSwgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTAzMy1cdFx0ICAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpO1xuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMTk2PXN0YXRpYyBpbnQgZmdyYXBoX3BpZF9mdW5jKHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMTk3Olx0XHRcdCAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTExOTgtXHRcdFx0ICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9MTIxNT12b2lkIGZncmFwaF91cGRhdGVfcGlkX2Z1bmModm9pZClcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMjE2LXtcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMjE3Olx0c3RydWN0IGZncmFwaF9vcHMgKmdvcHM7XG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTIxOC1cdHN0cnVjdCBmdHJhY2Vfb3BzICpvcDtcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTIyNC1cdFx0aWYgKG9wLVx1MDAzZWZsYWdzIFx1MDAyNiBGVFJBQ0VfT1BTX0ZMX1BJRCkge1xua2VybmVsL3RyYWNlL2ZncmFwaC5jOjEyMjU6XHRcdFx0Z29wcyA9IGNvbnRhaW5lcl9vZihvcCwgc3RydWN0IGZncmFwaF9vcHMsIG9wcyk7XG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTIyNi1cdFx0XHRnb3BzLVx1MDAzZWVudHJ5ZnVuYyA9IGZ0cmFjZV9waWRzX2VuYWJsZWQob3ApID9cbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9MTI2OD1zdGF0aWMgdm9pZCBpbml0X3Rhc2tfdmFycyhpbnQgaWR4KVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMjg1LVxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjEyODY6c3RhdGljIHZvaWQgZnRyYWNlX2dyYXBoX2VuYWJsZV9kaXJlY3QoYm9vbCBlbmFibGVfYnJhbmNoLCBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcylcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMjg3LXtcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9MTMyOT1zdGF0aWMgaW50IGZncmFwaF9jcHVfaW5pdCh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMzM1LVxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjEzMzY6aW50IHJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcylcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMzM3LXtcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTM1Ny1cdGlmICghZmdyYXBoX2luaXRpYWxpemVkKSB7XG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTM1ODpcdFx0cmV0ID0gY3B1aHBfc2V0dXBfc3RhdGUoQ1BVSFBfQVBfT05MSU5FX0RZTiwgXCYjMzQ7ZmdyYXBoOm9ubGluZVwmIzM0Oyxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMzU5LVx0XHRcdFx0XHRmZ3JhcGhfY3B1X2luaXQsIE5VTEwpO1xuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xNDI1LVxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjE0MjY6dm9pZCB1bnJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcylcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xNDI3LXtcbi0tXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM9NDc9c3RhdGljIERFRklORV9NVVRFWChmcHJvYmVfbXV0ZXgpO1xua2VybmVsL3RyYWNlL2Zwcm9iZS5jOjQ4OnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyBmcHJvYmVfZ3JhcGhfb3BzO1xua2VybmVsL3RyYWNlL2Zwcm9iZS5jLTQ5LVxuLS1cbmtlcm5lbC90cmFjZS9mcHJvYmUuYz0yMDE9c3RhdGljIGlubGluZSB2b2lkIHJlYWRfZnByb2JlX2hlYWRlcih1bnNpZ25lZCBsb25nICpzdGFjayxcbi0tXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtMjEzLSAqIGZwcm9iZSBzaGFkb3cgc3RhY2sgbWFuYWdlbWVudDpcbmtlcm5lbC90cmFjZS9mcHJvYmUuYzoyMTQ6ICogU2luY2UgZnByb2JlIHNoYXJlcyBhIHNpbmdsZSBmZ3JhcGhfb3BzLCBpdCBuZWVkcyB0byBzaGFyZSB0aGUgc3RhY2sgZW50cnlcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy0yMTUtICogYW1vbmcgdGhlIHByb2JlcyBvbiB0aGUgc2FtZSBmdW5jdGlvbiBleGl0LiBOb3RlIHRoYXQgYSBuZXcgcHJvYmUgY2FuIGJlXG4tLVxua2VybmVsL3RyYWNlL2Zwcm9iZS5jPTIzMT1zdGF0aWMgaW5saW5lIGludCBfX2Zwcm9iZV9rcHJvYmVfaGFuZGxlcih1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCxcbi0tXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtMjUyLVxua2VybmVsL3RyYWNlL2Zwcm9iZS5jOjI1MzpzdGF0aWMgaW50IGZwcm9iZV9mZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLCBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy0yNTQtXHRcdFx0ICAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpO1xua2VybmVsL3RyYWNlL2Zwcm9iZS5jPTI1NT1zdGF0aWMgdm9pZCBmcHJvYmVfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYzoyNTY6XHRcdFx0ICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy0yNTctXHRcdFx0ICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKTtcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy0yNTgtXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM6MjU5OnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyBmcHJvYmVfZ3JhcGhfb3BzID0ge1xua2VybmVsL3RyYWNlL2Zwcm9iZS5jLTI2MC1cdC5lbnRyeWZ1bmNcdD0gZnByb2JlX2ZncmFwaF9lbnRyeSxcbi0tXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM9NTQzPXN0YXRpYyB2b2lkIGZwcm9iZV9yZW1vdmVfaXBzKHVuc2lnbmVkIGxvbmcgKmlwcywgdW5zaWduZWQgaW50IGNudClcbi0tXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtNTUyLVxua2VybmVsL3RyYWNlL2Zwcm9iZS5jOjU1MzovKiBmZ3JhcGhfb3BzIGNhbGxiYWNrLCB0aGlzIHByb2Nlc3NlcyBmcHJvYmVzIHdoaWNoIGhhdmUgZXhpdF9oYW5kbGVyLiAqL1xua2VybmVsL3RyYWNlL2Zwcm9iZS5jOjU1NDpzdGF0aWMgaW50IGZwcm9iZV9mZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLCBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy01NTUtXHRcdFx0ICAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL2Zwcm9iZS5jPTY1MD1zdGF0aWMgdm9pZCBmcHJvYmVfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYzo2NTE6XHRcdFx0ICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy02NTItXHRcdFx0ICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxuLS1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYz04NDE9c3RhdGljIGludCBwcm9maWxlX2dyYXBoX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYzo4NDI6XHRcdFx0ICAgICAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTg0My1cdFx0XHQgICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbi0tXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM9ODY2PXN0YXRpYyB2b2lkIHByb2ZpbGVfZ3JhcGhfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYzo4Njc6XHRcdFx0XHQgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtODY4LVx0XHRcdFx0IHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTkxNi1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYzo5MTc6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzIGZwcm9maWxlcl9vcHMgPSB7XG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtOTE4LVx0LmVudHJ5ZnVuYyA9IFx1MDAyNnByb2ZpbGVfZ3JhcGhfZW50cnksXG4tLVxua2VybmVsL3RyYWNlL2Z0cmFjZS5jPTQ0NTE9c3RhdGljIHZvaWQgcHJpbnRfc3Vib3BzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgc3RydWN0IGR5bl9mdHJhY2UgKnJlYylcbi0tXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtNDQ2NS1cdFx0aWYgKHN1Ym9wcy1cdTAwM2VmbGFncyBcdTAwMjYgRlRSQUNFX09QU19GTF9HUkFQSCkge1xua2VybmVsL3RyYWNlL2Z0cmFjZS5jOjQ0NjY6XHRcdFx0c3RydWN0IGZncmFwaF9vcHMgKmdvcHM7XG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtNDQ2Ny1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYzo0NDY4Olx0XHRcdGdvcHMgPSBjb250YWluZXJfb2Yoc3Vib3BzLCBzdHJ1Y3QgZmdyYXBoX29wcywgb3BzKTtcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy00NDY5LVx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7IHtlbnQ6JXBTIHJldDolcFN9XCYjMzQ7LFxuLS1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYz04NDk3PV9faW5pdCB2b2lkIGZ0cmFjZV9pbml0X2dsb2JhbF9hcnJheV9vcHMoc3RydWN0IHRyYWNlX2FycmF5ICp0cilcbi0tXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtODUwMi1cdGZ0cmFjZV9pbml0X3RyYWNlX2FycmF5KHRyKTtcbmtlcm5lbC90cmFjZS9mdHJhY2UuYzo4NTAzOlx0aW5pdF9hcnJheV9mZ3JhcGhfb3BzKHRyLCB0ci1cdTAwM2VvcHMpO1xua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTg1MDQtfVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5oPTMzMz1zdHJ1Y3QgdHJhY2VfYXJyYXkge1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5oLTQzNy0jaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUlxua2VybmVsL3RyYWNlL3RyYWNlLmg6NDM4Olx0c3RydWN0IGZncmFwaF9vcHNcdCpnb3BzO1xua2VybmVsL3RyYWNlL3RyYWNlLmgtNDM5LSNlbmRpZlxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5oPTgxNz12b2lkIHByaW50X3RyYWNlX2hlYWRlcihzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcik7XG5rZXJuZWwvdHJhY2UvdHJhY2UuaC04MTgtXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDo4MTk6dm9pZCB0cmFjZV9ncmFwaF9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLCBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS90cmFjZS5oLTgyMC1cdFx0XHRzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKTtcbmtlcm5lbC90cmFjZS90cmFjZS5oOjgyMTppbnQgdHJhY2VfZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLCBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS90cmFjZS5oLTgyMi1cdFx0ICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncyk7XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmg9MTA2MD1leHRlcm4gdm9pZCBfX3RyYWNlX2dyYXBoX3JldHVybihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLFxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5oLTEwNjQtXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMDY1OmV4dGVybiB2b2lkIGluaXRfYXJyYXlfZmdyYXBoX29wcyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKTtcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEwNjY6ZXh0ZXJuIGludCBhbGxvY2F0ZV9mZ3JhcGhfb3BzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMpO1xua2VybmVsL3RyYWNlL3RyYWNlLmg6MTA2NzpleHRlcm4gdm9pZCBmcmVlX2ZncmFwaF9vcHMoc3RydWN0IHRyYWNlX2FycmF5ICp0cik7XG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0xMDY4LVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5oPTExNjM9c3RhdGljIGlubGluZSB2b2lkXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMTY0OmZ0cmFjZV9ncmFwaF9hZGRyX2ZpbmlzaChzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcywgc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlKVxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTE2NS17XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmg9MTIwMT1zdGF0aWMgaW5saW5lIGludCBmdHJhY2VfZ3JhcGhfbm90cmFjZV9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0xMjA0LX1cbmtlcm5lbC90cmFjZS90cmFjZS5oOjEyMDU6c3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9hZGRyX2ZpbmlzaChzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcywgc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlKVxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTIwNi17IH1cbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuaD0xMjEzPXN0YXRpYyBpbmxpbmUgYm9vbFxua2VybmVsL3RyYWNlL3RyYWNlLmg6MTIxNDpmdHJhY2VfZ3JhcGhfaWdub3JlX2Z1bmMoc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsIHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSlcbmtlcm5lbC90cmFjZS90cmFjZS5oLTEyMTUte1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5oPTEyMzA9cHJpbnRfZ3JhcGhfZnVuY3Rpb25fZmxhZ3Moc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCB1MzIgZmxhZ3MpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTIzMy19XG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMjM0OnN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX2ZncmFwaF9vcHMoc3RydWN0IHRyYWNlX2FycmF5ICp0cikgeyB9XG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0xMjM1LS8qIGZ0cmFjZV9vcHMgbWF5IG5vdCBiZSBkZWZpbmVkICovXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMjM2OiNkZWZpbmUgaW5pdF9hcnJheV9mZ3JhcGhfb3BzKHRyLCBvcHMpIGRvIHsgfSB3aGlsZSAoMClcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEyMzc6I2RlZmluZSBhbGxvY2F0ZV9mZ3JhcGhfb3BzKHRyLCBvcHMpICh7IDA7IH0pXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0xMjM4LSNlbmRpZiAvKiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSICovXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jPTg0PWludCBmdHJhY2VfY3JlYXRlX2Z1bmN0aW9uX2ZpbGVzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jLTk3LVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jOjk4Olx0cmV0ID0gYWxsb2NhdGVfZmdyYXBoX29wcyh0ciwgdHItXHUwMDNlb3BzKTtcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYy05OS1cdGlmIChyZXQpIHtcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmM9MTA5PXZvaWQgZnRyYWNlX2Rlc3Ryb3lfZnVuY3Rpb25fZmlsZXMoc3RydWN0IHRyYWNlX2FycmF5ICp0cilcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMtMTEyLVx0ZnRyYWNlX2ZyZWVfZnRyYWNlX29wcyh0cik7XG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmM6MTEzOlx0ZnJlZV9mZ3JhcGhfb3BzKHRyKTtcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYy0xMTQtfVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYz0yMjU9c3RhdGljIGludCBncmFwaF9lbnRyeShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM6MjI2Olx0XHQgICAgICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtMjI3LVx0XHQgICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM9Mjk0PWludCB0cmFjZV9ncmFwaF9lbnRyeShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM6Mjk1Olx0XHQgICAgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy0yOTYtXHRcdCAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jPTMwMT1zdGF0aWMgaW50IHRyYWNlX2dyYXBoX2VudHJ5X2FyZ3Moc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jOjMwMjpcdFx0XHRcdCAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtMzAzLVx0XHRcdFx0ICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYz0zNjg9dm9pZCB0cmFjZV9ncmFwaF9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jOjM2OTpcdFx0XHRzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcywgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy0zNzAte1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYz0zOTk9c3RhdGljIHZvaWQgdHJhY2VfZ3JhcGhfdGhyZXNoX3JldHVybihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM6NDAwOlx0XHRcdFx0ICAgICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtNDAxLVx0XHRcdFx0ICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtNDM0LVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jOjQzNTpzdGF0aWMgc3RydWN0IGZncmFwaF9vcHMgZnVuY2dyYXBoX29wcyA9IHtcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00MzYtXHQuZW50cnlmdW5jID0gXHUwMDI2dHJhY2VfZ3JhcGhfZW50cnksXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTQzOS1cbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzo0NDA6aW50IGFsbG9jYXRlX2ZncmFwaF9vcHMoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgc3RydWN0IGZ0cmFjZV9vcHMgKm9wcylcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00NDEte1xua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jOjQ0MjpcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzO1xua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTQ0My1cbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtNDU4LVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jOjQ1OTp2b2lkIGZyZWVfZmdyYXBoX29wcyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTQ2MC17XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTQ2My1cbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzo0NjQ6X19pbml0IHZvaWQgaW5pdF9hcnJheV9mZ3JhcGhfb3BzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMpXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtNDY1LXtcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jPTE3OD1zdGF0aWMgaW50IGlycXNvZmZfZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYzoxNzk6XHRcdFx0ICAgICAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYy0xODAtXHRcdFx0ICAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYz0yMTU9c3RhdGljIHZvaWQgaXJxc29mZl9ncmFwaF9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYzoyMTY6XHRcdFx0XHQgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jLTIxNy1cdFx0XHRcdCBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMtMjQwLVxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYzoyNDE6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzIGZncmFwaF9vcHMgPSB7XG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jLTI0Mi1cdC5lbnRyeWZ1bmNcdFx0PSBcdTAwMjZpcnFzb2ZmX2dyYXBoX2VudHJ5LFxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmM9NDg0PXN0YXRpYyBpbnQgcmVnaXN0ZXJfaXJxc29mZl9mdW5jdGlvbihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBpbnQgZ3JhcGgsIGludCBzZXQpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYy00OTItXHRpZiAoZ3JhcGgpXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jOjQ5MzpcdFx0cmV0ID0gcmVnaXN0ZXJfZnRyYWNlX2dyYXBoKFx1MDAyNmZncmFwaF9vcHMpO1xua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYy00OTQtXHRlbHNlXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYz01MDM9c3RhdGljIHZvaWQgdW5yZWdpc3Rlcl9pcnFzb2ZmX2Z1bmN0aW9uKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIGludCBncmFwaClcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jLTUwOC1cdGlmIChncmFwaClcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmM6NTA5Olx0XHR1bnJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChcdTAwMjZmZ3JhcGhfb3BzKTtcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMtNTEwLVx0ZWxzZVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYz0xMTU9c3RhdGljIGludCB3YWtldXBfZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLFxua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jOjExNjpcdFx0XHQgICAgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYy0xMTctXHRcdFx0ICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmM9MTUxPXN0YXRpYyB2b2lkIHdha2V1cF9ncmFwaF9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jOjE1MjpcdFx0XHRcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jLTE1My1cdFx0XHRcdHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jLTE3Ny1cbmtlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYzoxNzg6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzIGZncmFwaF93YWtldXBfb3BzID0ge1xua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jLTE3OS1cdC5lbnRyeWZ1bmMgPSBcdTAwMjZ3YWtldXBfZ3JhcGhfZW50cnksXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM9NzY4PXN0cnVjdCBmZ3JhcGhfZml4dHVyZSB7XG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzo3Njk6XHRzdHJ1Y3QgZmdyYXBoX29wcyBnb3BzO1xua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtNzcwLVx0aW50IHN0b3JlX3NpemU7XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM9Nzc2PXN0YXRpYyBfX2luaXQgaW50IHN0b3JlX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjc3NzpcdFx0XHQgICAgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTc3OC1cdFx0XHQgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jPTgxMD1zdGF0aWMgX19pbml0IHZvaWQgc3RvcmVfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjgxMTpcdFx0XHRcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtODEyLVx0XHRcdFx0c3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYz0xMDI5PXN0YXRpYyBpbnQgdHJhY2VfZ3JhcGhfZW50cnlfd2F0Y2hkb2coc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6MTAzMDpcdFx0XHRcdCAgICAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTAzMS1cdFx0XHRcdCAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTA0Ny1cbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjEwNDg6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzIGZncmFwaF9vcHMgX19pbml0ZGF0YSAgPSB7XG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMDQ5LVx0LmVudHJ5ZnVuY1x0XHQ9IFx1MDAyNnRyYWNlX2dyYXBoX2VudHJ5X3dhdGNoZG9nLFxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jPTEwNjI9dHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9mdW5jdGlvbl9ncmFwaChzdHJ1Y3QgdHJhY2VyICp0cmFjZSxcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMDgwLVx0dHJhY2luZ19yZXNldF9vbmxpbmVfY3B1cyhcdTAwMjZ0ci1cdTAwM2VhcnJheV9idWZmZXIpO1xua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6MTA4MTpcdGZncmFwaF9vcHMucHJpdmF0ZSA9IHRyO1xua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6MTA4MjpcdHJldCA9IHJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChcdTAwMjZmZ3JhcGhfb3BzKTtcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTEwODMtXHRpZiAocmV0KSB7XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTEwMy1cbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjExMDQ6XHQvKiBOZWVkIHRvIGFsc28gc2ltdWxhdGUgdGhlIHRyLVx1MDAzZXJlc2V0IHRvIHJlbW92ZSB0aGlzIGZncmFwaF9vcHMgKi9cbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTExMDUtXHR0cmFjaW5nX3N0b3BfY21kbGluZV9yZWNvcmQoKTtcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjExMDY6XHR1bnJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChcdTAwMjZmZ3JhcGhfb3BzKTtcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTExMDctXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTEyMy1cdHRyYWNpbmdfcmVzZXRfb25saW5lX2NwdXMoXHUwMDI2dHItXHUwMDNlYXJyYXlfYnVmZmVyKTtcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjExMjQ6XHRmZ3JhcGhfb3BzLnByaXZhdGUgPSB0cjtcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTExMjUtXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTE0NS1cbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjExNDY6XHRyZXQgPSByZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoXHUwMDI2ZmdyYXBoX29wcyk7XG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMTQ3LVx0aWYgKHJldCkge1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTExNTktXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzoxMTYwOlx0dW5yZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoXHUwMDI2ZmdyYXBoX29wcyk7XG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMTYxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTc5CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOgoKKipLZXJuZWwgUGF0Y2ggQW5hbHlzaXM6IEZ0cmFjZSBhbmQgVGFzayBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyB0aGUgcHJvcG9zZWQgcGF0Y2ggdGFyZ2V0cyBga2VybmVsL2ZvcmsuY2AsIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIG1vdmluZyB0aGUgY2FsbCB0byBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgZWFybGllciBpbiB0aGUgYGZvcmtgIHByb2Nlc3MuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgcHJvYmFibHkgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRpbWluZyBvciByZXNvdXJjZSBhbGxvY2F0aW9uIGR1cmluZyB0aGUgdGFzayBjcmVhdGlvbi4KCkxldCYjMzk7cyBzZWXigKYgcmlnaHQsIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCDigJMgdGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRoZSByZXR1cm4gc3RhY2sgYWxsb2NhdGlvbiBmb3IgYSBuZXcgdGFzaywgYnV0IG9ubHkgaWYgYENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVJgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2U7IGl04oCZcyBjb25kaXRpb25hbCBvbiB0aGUgdHJhY2luZyBmZWF0dXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24sIEkga25vdyBpdC4gSG9sZCBvbiwgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgLi4uIHdhaXQgYSBtaW51dGUsIGl04oCZcyBkZWZpbmVkIGluIGBrZXJuZWwvdHJhY2UvZmdyYXBoLmNgLCBub3QgZGlyZWN0bHkgaW4gYGtlcm5lbC9mb3JrLmNgLiBCZXR0ZXIgY2hlY2sgdGhhdC4gT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgdGhpcyBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZnRyYWNlLmg9MTM0Mj1leHRlcm4gdHJhY2VfZnVuY19ncmFwaF9lbnRfdCBmdHJhY2VfZ3JhcGhfZW50cnk7XG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNDMtXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNDQ6ZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzQ1LWV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEzNTY9c3RhdGljIGlubGluZSB2b2lkIHVucGF1c2VfZ3JhcGhfdHJhY2luZyh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM2My1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTM2NDpzdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgfVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzY1LXN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkgeyB9XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTExMzE9dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF9pZGxlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY3B1KVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMTU5LS8qIEFsbG9jYXRlIGEgcmV0dXJuIHN0YWNrIGZvciBuZXdseSBjcmVhdGVkIHRhc2sgKi9cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMTYwOnZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE2MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyOTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGZncmFwaC5jIGZvciBGdW5jdGlvbiBHcmFwaCBUcmFjaW5nKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGBrZXJuZWwvdHJhY2UvZmdyYXBoLmNgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMTYwLiBNeSBndXQgdGVsbHMgbWUgdGhhdCYjMzk7cyB3aGVyZSB3ZSYjMzk7bGwgZmluZCB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2luZyBtZWNoYW5pc20uIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBjYXB0dXJpbmcgYW5kIG1hbmFnaW5nIHRoZSBjYWxsIGdyYXBoIGRhdGEuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9uIGNhbGxzIHJlc3BvbnNpYmxlIGZvciB0aGUgaW5zdHJ1bWVudGF0aW9uLCBwZXJoYXBzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSB0cmFjZXBvaW50IGluZnJhc3RydWN0dXJlIGFuZCB0aGUgY29udHJvbCBmbG93IGFzcGVjdHMsIHRvby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvZmdyYXBoLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNTA6XHRcdFx0XHRyZXRfc3RhY2sgPSBrbWVtX2NhY2hlX2FsbG9jKGZncmFwaF9zdGFja19jYWNoZXAsIEdGUF9LRVJORUwpO1xuMTE1MTpcdFx0XHRcdGlmICghcmV0X3N0YWNrKVxuMTE1MjpcdFx0XHRcdFx0cmV0dXJuO1xuMTE1MzpcdFx0XHRcdHBlcl9jcHUoaWRsZV9yZXRfc3RhY2ssIGNwdSkgPSByZXRfc3RhY2s7XG4xMTU0Olx0XHRcdH1cbjExNTU6XHRcdFx0Z3JhcGhfaW5pdF90YXNrKHQsIHJldF9zdGFjayk7XG4xMTU2Olx0XHR9XG4xMTU3Olx0fVxuMTE1ODpcdFxuMTE1OTpcdC8qIEFsbG9jYXRlIGEgcmV0dXJuIHN0YWNrIGZvciBuZXdseSBjcmVhdGVkIHRhc2sgKi9cbjExNjA6XHR2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KVxuMTE2MTpcdHtcbjExNjI6XHRcdC8qIE1ha2Ugc3VyZSB3ZSBkbyBub3QgdXNlIHRoZSBwYXJlbnQgcmV0X3N0YWNrICovXG4xMTYzOlx0XHR0LVx1MDAzZXJldF9zdGFjayA9IE5VTEw7XG4xMTY0Olx0XHR0LVx1MDAzZWN1cnJfcmV0X3N0YWNrID0gMDtcbjExNjU6XHRcdHQtXHUwMDNlY3Vycl9yZXRfZGVwdGggPSAtMTtcbjExNjY6XHRcbjExNjc6XHRcdGlmIChmdHJhY2VfZ3JhcGhfYWN0aXZlKSB7XG4xMTY4Olx0XHRcdHVuc2lnbmVkIGxvbmcgKnJldF9zdGFjaztcbjExNjk6XHRcbjExNzA6XHRcdFx0aWYgKFdBUk5fT05fT05DRSghZmdyYXBoX3N0YWNrX2NhY2hlcCkpXG4xMTcxOlx0XHRcdFx0cmV0dXJuO1xuMTE3MjpcdFxuMTE3MzpcdFx0XHRyZXRfc3RhY2sgPSBrbWVtX2NhY2hlX2FsbG9jKGZncmFwaF9zdGFja19jYWNoZXAsIEdGUF9LRVJORUwpO1xuMTE3NDpcdFx0XHRpZiAoIXJldF9zdGFjaylcbjExNzU6XHRcdFx0XHRyZXR1cm47XG4xMTc2Olx0XHRcdGdyYXBoX2luaXRfdGFzayh0LCByZXRfc3RhY2spO1xuMTE3NzpcdFx0fVxuMTE3ODpcdH1cbjExNzk6XHRcbjExODA6XHR2b2lkIGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KVxuMTE4MTpcdHtcbjExODI6XHRcdHVuc2lnbmVkIGxvbmcgKnJldF9zdGFjayA9IHQtXHUwMDNlcmV0X3N0YWNrO1xuMTE4MzpcdFxuMTE4NDpcdFx0dC1cdTAwM2VyZXRfc3RhY2sgPSBOVUxMO1xuMTE4NTpcdFx0LyogTlVMTCBtdXN0IGJlY29tZSB2aXNpYmxlIHRvIElSUXMgYmVmb3JlIHdlIGZyZWUgaXQ6ICovXG4xMTg2Olx0XHRiYXJyaWVyKCk7XG4xMTg3Olx0XG4xMTg4Olx0XHRpZiAocmV0X3N0YWNrKSB7XG4xMTg5Olx0XHRcdGlmIChXQVJOX09OX09OQ0UoIWZncmFwaF9zdGFja19jYWNoZXApKVxuMTE5MDpcdFx0XHRcdHJldHVybjtcbjExOTE6XHRcdFx0a21lbV9jYWNoZV9mcmVlKGZncmFwaF9zdGFja19jYWNoZXAsIHJldF9zdGFjayk7XG4xMTkyOlx0XHR9XG4xMTkzOlx0fVxuMTE5NDpcdFxuMTE5NTpcdCNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VcbjExOTY6XHRzdGF0aWMgaW50IGZncmFwaF9waWRfZnVuYyhzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXG4xMTk3Olx0XHRcdFx0ICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG4xMTk4Olx0XHRcdFx0ICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbjExOTk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjMzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogODk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFN1YnRsZSBSYWNlIENvbmRpdGlvbiBpbiBgY29weV9wcm9jZXNzYCBhbmQgdGhlIEZ0cmFjZSBHcmFwaCBUcmFjZXIqKgoKT2theSwgc28gaGVyZSYjMzk7cyB0aGUgZGVhbC4gSSYjMzk7dmUgc3R1bWJsZWQgdXBvbiBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZSBpbiB0aGUga2VybmVsLCBhbmQgaXQmIzM5O3MgcmVsYXRlZCB0byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgY29weV9wcm9jZXNzYCAoc3BlY2lmaWNhbGx5IGluIGl0cyBlcnJvciBoYW5kbGluZyBwYXRocykgYW5kIHRoZSBGdW5jdGlvbiBHcmFwaCBUcmFjZXIgKGBmdHJhY2VgKS4gSSYjMzk7dmUgbm90aWNlZCB0aGF0IGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBzZXRzIGB0LSZndDtyZXRfc3RhY2tgIHRvIGBOVUxMYC4gVGhlIHByb2JsZW0gYXJpc2VzIHdoZW4gdGhpcyBjYWxsIGhhcHBlbnMgKmFmdGVyKiBvdGhlciBvcGVyYXRpb25zIHdpdGhpbiBgY29weV9wcm9jZXNzYCB3aGljaCBjb3VsZCBwb3RlbnRpYWxseSBmYWlsLCBsaWtlIGBjb3B5X2V4ZWNfc3RhdGVgLgoKSWYgYW55IG9mIHRob3NlIGZhbGxpYmxlIG9wZXJhdGlvbnMgZmFpbCwgd2UgaGl0IGFuIGVycm9yIHBhdGggKGxpa2UgYGJhZF9mb3JrX2ZyZWVgKS4gSGVyZSYjMzk7cyB0aGUga2lja2VyOiBgZHVwX3Rhc2tfc3RydWN0YCBjb3BpZXMgdGhlICplbnRpcmUqIGB0YXNrX3N0cnVjdGAsIGluY2x1ZGluZyBgdC0mZ3Q7cmV0X3N0YWNrYC4gSWYgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGhhc24mIzM5O3QgcnVuIHlldCwgYHQtJmd0O3JldF9zdGFja2Agc3RpbGwgcG9pbnRzIHRvIHRoZSAqcGFyZW50JiMzOTtzKiByZXR1cm4gc3RhY2suCgpOb3csIGluIHRoZSBlcnJvciBwYXRoIChlLmcuLCB3aXRoaW4gYGZyZWVfdGFza2Agb3IgYHB1dF90YXNrX3N0cnVjdGApLCBgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayh0KWAgZ2V0cyBjYWxsZWQsIHdoaWNoLCBjcml0aWNhbGx5LCAqZnJlZXMqIGB0LSZndDtyZXRfc3RhY2tgLiBCdXQgaGV5ISBgdC0mZ3Q7cmV0X3N0YWNrYCBpcyB0aGUgKnBhcmVudCYjMzk7cyogc3RhY2ssIHNvIHdlJiMzOTtyZSBmcmVlaW5nIG1lbW9yeSB0aGF0IHN0aWxsIGJlbG9uZ3MgdG8gdGhlIHBhcmVudCB0YXNrLiBUaGlzIGxlYWRzIHRvIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZS4KClRoZSBmaXggc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBtb3ZlIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCByaWdodCBhZnRlciBgZHVwX3Rhc2tfc3RydWN0YC4gVGhpcyB3YXksIGB0LSZndDtyZXRfc3RhY2tgIGlzIGNsZWFyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGNvcHkuIFRoaXMgc2VlbXMgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZvciBzdXJlLCBhbmQgZGVmaW5pdGVseSBmaXhlcyBhIGJ1Zy4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgaXQmIzM5O3Mgd29ydGggZnV6emluZyB0aGlzIGZpeD8gQWJzb2x1dGVseS4gVGhpcyBpcyBhIHVzZS1hZnRlci1mcmVlLCBzbyBpdCYjMzk7cyBhIGhpZ2gtcHJpb3JpdHkgdGFyZ2V0LgoKVG8gdHJpZ2dlciB0aGUgYnVnLCBgZnRyYWNlX2dyYXBoX2FjdGl2ZWAgZG9lc24mIzM5O3QgbmVlZCB0byBiZSB0cnVlLiBJdCYjMzk7cyBlbm91Z2ggdG8gaGF2ZSBgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgZW5hYmxlZC4gYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIGlzIGNvbXBpbGVkIGFuZCBsaW5rZWQgaW4gaWYgdGhpcyBpcyBzZXQsIGFuZCBpdCYjMzk7cyBgZnRyYWNlX2dyYXBoX2V4aXRfdGFza2AgdGhhdCBjYXVzZXMgdGhlIGlzc3VlIGJ5IGZyZWVpbmcgYHQtJmd0O3JldF9zdGFja2AgaWYgaXQmIzM5O3Mgbm9uLU5VTEwuCgpTbywgYENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVJgIGlzIG91ciBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24uIFdlIGFsc28gbmVlZCB0byBmb2N1cyBvbiBmdXp6aW5nIHRoZSBlcnJvciBwYXRocyB3aXRoaW4gYGNvcHlfcHJvY2Vzc2AuIFNwZWNpZmljIGZ1bmN0aW9ucyB0byB0YXJnZXQgd291bGQgYmU6IGBjb3B5X3Byb2Nlc3NgLCBgY29weV9leGVjX3N0YXRlYCwgYW5kIGBkdXBfdGFza19zdHJ1Y3RgLiBHaXZlbiB0aGF0IGBjb3B5X3Byb2Nlc3NgIGlzIGEgaG90LXBhdGggYW5kIGFscmVhZHkgaGVhdmlseSBmdXp6ZWQsIGl0IG1heSBub3QgYmUgbmVjZXNzYXJ5IHRvIHNwZWNpZnkgaXQgZXhwbGljaXRseSwgYnV0IHdlIHNob3VsZCBzcGVjaWZ5IGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBhbmQgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIHRvIGVuc3VyZSB0aGUgZnV6emVyIGhpdHMgdGhlIHNwZWNpZmljIHRyYWNpbmcgaW5pdC9leGl0IHBhdGhzLiBFc3BlY2lhbGx5IHNpbmNlIHRoZSBpc3N1ZSBpcyBsaWtlbHkgdG8gYmUgZXhwb3NlZCB3aGVuIHRyYWNpbmcgaXMgZW5hYmxlZCBhbmQgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGlzIGJlaW5nIGNhbGxlZCBhdCBldmVyeSBmb3JrL2Nsb25lLiBUaGlzIHdvbiYjMzk7dCBiZSBvbiBieSBkZWZhdWx0LCBzbyB3ZSYjMzk7cmUgZ29pbmcgdG8gbmVlZCB0byBlbmFibGUgYENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVJgLgoKUmlnaHQsIGxldCBtZSBkb3VibGUgY2hlY2sgdGhhdCBgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgaXMgc3VmZmljaWVudC4gQWhhLCBldmVuIGlmIGBmdHJhY2VfZ3JhcGhfYWN0aXZlYCBpcyAqZmFsc2UqLCB0aGlzIGNhbiBzdGlsbCBoYXBwZW4hIEJlY2F1c2UgYGR1cF90YXNrX3N0cnVjdGAgY29waWVzIGB0LSZndDtyZXRfc3RhY2tgIGZyb20gdGhlIHBhcmVudCByZWdhcmRsZXNzLiBBcyBsb25nIGFzIHRoZSBwYXJlbnQgaGFzIGhhZCB0cmFjaW5nIGVuYWJsZWQgYXQgc29tZSBwb2ludCwgYHQtJmd0O3JldF9zdGFja2AgbWlnaHQgYmUgbm9uLU5VTEwuIFRoZW4gdGhlIGVycm9yIHBhdGggdHJpZ2dlcnMgdGhlIFVBRi4KCk9rYXksIHNvIHRoZSBmaXggaXM6IHdlIG1vdmUgdGhhdCBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgY2FsbCAqYmVmb3JlKiBhbnkgZmFsbGlibGUgb3BlcmF0aW9ucy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IGBmcmVlX3Rhc2tgIGlzIGFjdHVhbGx5IHRoZSBvbmUgY2FsbGluZyBgZnRyYWNlX2dyYXBoX2V4aXRfdGFza2AgdGhvdWdoLCB0byBjb25maXJtIHRoZSBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdHJhY2VfZ3JhcGhfZXhpdF90YXNrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZnRyYWNlLmg9MTM0ND1leHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNDU6ZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzQ2LWV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X2lkbGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjcHUpO1xuLS1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmg9MTM2ND1zdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgfVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzY1OnN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkgeyB9XG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNjYtc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X2lkbGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjcHUpIHsgfVxuLS1cbmtlcm5lbC9mb3JrLmM9NTMzPXZvaWQgZnJlZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuLS1cbmtlcm5lbC9mb3JrLmMtNTU1LVx0cnRfbXV0ZXhfZGVidWdfdGFza19mcmVlKHRzayk7XG5rZXJuZWwvZm9yay5jOjU1NjpcdGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2sodHNrKTtcbmtlcm5lbC9mb3JrLmMtNTU3LVx0YXJjaF9yZWxlYXNlX3Rhc2tfc3RydWN0KHRzayk7XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTExNjA9dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE3OS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMTgwOnZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE4MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDUyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHJldF9zdGFja2AgVXNlLUFmdGVyLUZyZWUgQnVnKioKCk9rYXksIHNvIGBmcmVlX3Rhc2tgICpkb2VzKiBjYWxsIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYC4gRXhjZWxsZW50LCB0aGUgYnVnIGlzIGV4YWN0bHkgYXMgSSBpbml0aWFsbHkgc3VzcGVjdGVkLiBMZXQmIzM5O3MgYnJlYWsgaXQgZG93biBhZ2FpbiBpbiBteSBtaW5kOgoKMS4gIEEgcGFyZW50IHByb2Nlc3MgaGFzIGl0cyBgcmV0X3N0YWNrYCBtZW1vcnkgYWxsb2NhdGVkLgoyLiAgYGZvcmsoKWAgaXMgaW52b2tlZCwgY3JlYXRpbmcgYSBjaGlsZCBwcm9jZXNzLgozLiAgYGR1cF90YXNrX3N0cnVjdGAgY29waWVzIHRoZSBgdGFza19zdHJ1Y3RgLCBtZWFuaW5nIHRoZSBjaGlsZCBwcm9jZXNzJiMzOTtzIGByZXRfc3RhY2tgIHBvaW50ZXIgKmFsc28qIHBvaW50cyB0byB0aGUgcGFyZW50JiMzOTtzIGByZXRfc3RhY2tgIG1lbW9yeS4gTWFrZXMgc2Vuc2UuCjQuICBUaGVuLCBhIGZhbGxpYmxlIG9wZXJhdGlvbiBsaWtlIGBjb3B5X2V4ZWNfc3RhdGVgIG9yIGBjb3B5X2NyZWRzYCBmYWlscy4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBwb2ludC4KNS4gIENvbnRyb2wganVtcHMgdG8gYSBgYmFkX2ZvcmtfZnJlZWAgcGF0aCAob3Igc2ltaWxhciksIHVsdGltYXRlbHkgbGVhZGluZyB0byBgZnJlZV90YXNrKGNoaWxkKWAuCjYuICBIZXJlJiMzOTtzIHdoZXJlIGl0IGdvZXMgc291dGg6IGBmcmVlX3Rhc2tgIGNhbGxzIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKGNoaWxkKWAuCjcuICBgZnRyYWNlX2dyYXBoX2V4aXRfdGFza2AgdGhlbiBmcmVlcyBgY2hpbGQtJmd0O3JldF9zdGFja2AsIHdoaWNoIGlzLCBpbiByZWFsaXR5LCAqdGhlIHBhcmVudCYjMzk7cyogYHJldF9zdGFja2AgbWVtb3J5LiBBIGNsYXNzaWMuCjguICBUaGUgcGFyZW50LCBvYmxpdmlvdXMgdG8gdGhpcywgY29udGludWVzIGV4ZWN1dGluZyBhbmQsIGluZXZpdGFibHksIHVzZXMgaXRzIChub3cgZnJlZWQpIGByZXRfc3RhY2tgLCByZXN1bHRpbmcgaW4gYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LgoKVGhlIGZpeCwgbW92aW5nIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCDigJMgd2hpY2gsIGNyaXRpY2FsbHksICpzZXRzKiBgdC0mZ3Q7cmV0X3N0YWNrID0gTlVMTGAg4oCTICpiZWZvcmUqIGFueSBwb3RlbnRpYWxseSBmYWlsaW5nIG9wZXJhdGlvbnMgYWZ0ZXIgYGR1cF90YXNrX3N0cnVjdGAsIGlzIGNsZWFuLiBJdCBlbnN1cmVzIHRoYXQgdGhlIGNoaWxkJiMzOTtzIGByZXRfc3RhY2tgIGlzIGV4cGxpY2l0bHkgbnVsbGlmaWVkICpiZWZvcmUqIGFueSBjaGFuY2Ugb2YgY2xlYW51cC4gSXQmIzM5O3MgYSBuaWNlLCBmdW5jdGlvbmFsIGZpeC4gTXkgc3BpZGV5LXNlbnNlIHNheXMgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBXZSYjMzk7bGwgbmVlZCBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCB0byByZXByb2R1Y2UgdGhlIGJ1Zy4gVGltZSB0byBjaGVjayBga2VybmVsL3RyYWNlL0tjb25maWdgIHRvIGNvbmZpcm0gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZVTkNUSU9OX0dSQVBIX1RSQUNFUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZz0yMzU9Y29uZmlnIEZVTkNUSU9OX1RSQUNFUlxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTI1My1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjI1NDpjb25maWcgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0yNTUtXHRib29sIFwmIzM0O0tlcm5lbCBGdW5jdGlvbiBHcmFwaCBUcmFjZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczMjIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlcGVuZGVuY3kgRGVlcCBEaXZlKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYC4gSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhLCBzbyBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSBsaWtlbHkgY3VscHJpdHMuIEkga25vdyB0aGF0IHN1Y2ggYSB0cmFjZXIgbGlrZWx5IGhvb2tzIGludG8gdGhlIGV4ZWN1dGlvbiBvZiBhIGZ1bmN0aW9uIGdyYXBoIGluIHNvbWUgd2F5LiBTbywgZmlyc3QsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgY29yZSBjb21wb25lbnRzIGl0IGludGVyYWN0cyB3aXRoLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHN0YXRpYyBvciBkeW5hbWljIGFuYWx5c2lzIHRvb2w/IERvZXMgaXQgcmVseSBvbiBpbnN0cnVtZW50YXRpb24sIGJ5dGVjb2RlIG1hbmlwdWxhdGlvbiwgb3IgcGVyaGFwcyBwcm9maWxpbmcgZGF0YT8gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB0aGUgdHJhY2VyIHVzZXMgYW55IGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB0byBzdG9yZSB0aGUgZ3JhcGggaW5mb3JtYXRpb24sIGFuZCB3aGV0aGVyIGl0IGludGVyYWN0cyB3aXRoIGFueSBzcGVjaWZpYyBydW50aW1lIGVudmlyb25tZW50cyBvciBsaWJyYXJpZXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgcG90ZW50aWFsIHJpc2tzLCBwb2ludHMgb2YgZmFpbHVyZSBhbmQgYXJlYXMgdGhhdCBhcmUgbW9yZSBjb21wbGljYXRlZCB0aGFuIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTA6XHRcdCAgKHRoZSBib290dXAgZGVmYXVsdCksIHRoZW4gdGhlIG92ZXJoZWFkIG9mIHRoZSBpbnN0cnVjdGlvbnMgaXMgdmVyeVxuIDI1MTpcdFx0ICBzbWFsbCBhbmQgbm90IG1lYXN1cmFibGUgZXZlbiBpbiBtaWNyby1iZW5jaG1hcmtzIChhdCBsZWFzdCBvblxuIDI1MjpcdFx0ICB4ODYsIGJ1dCBtYXkgaGF2ZSBpbXBhY3Qgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcykuXG4gMjUzOlx0XG4gMjU0Olx0Y29uZmlnIEZVTkNUSU9OX0dSQVBIX1RSQUNFUlxuIDI1NTpcdFx0Ym9vbCBcJiMzNDtLZXJuZWwgRnVuY3Rpb24gR3JhcGggVHJhY2VyXCYjMzQ7XG4gMjU2Olx0XHRkZXBlbmRzIG9uIEhBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXG4gMjU3Olx0XHRkZXBlbmRzIG9uIEZVTkNUSU9OX1RSQUNFUlxuIDI1ODpcdFx0ZGVwZW5kcyBvbiAhWDg2XzMyIHx8ICFDQ19PUFRJTUlaRV9GT1JfU0laRVxuIDI1OTpcdFx0ZGVmYXVsdCB5XG4gMjYwOlx0XHRoZWxwXG4gMjYxOlx0XHQgIEVuYWJsZSB0aGUga2VybmVsIHRvIHRyYWNlIGEgZnVuY3Rpb24gYXQgYm90aCBpdHMgcmV0dXJuXG4gMjYyOlx0XHQgIGFuZCBpdHMgZW50cnkuXG4gMjYzOlx0XHQgIEl0cyBmaXJzdCBwdXJwb3NlIGlzIHRvIHRyYWNlIHRoZSBkdXJhdGlvbiBvZiBmdW5jdGlvbnMgYW5kXG4gMjY0Olx0XHQgIGRyYXcgYSBjYWxsIGdyYXBoIGZvciBlYWNoIHRocmVhZCB3aXRoIHNvbWUgaW5mb3JtYXRpb24gbGlrZVxuIDI2NTpcdFx0ICB0aGUgcmV0dXJuIHZhbHVlLiBUaGlzIGlzIGRvbmUgYnkgc2V0dGluZyB0aGUgY3VycmVudCByZXR1cm5cbiAyNjY6XHRcdCAgYWRkcmVzcyBvbiB0aGUgY3VycmVudCB0YXNrIHN0cnVjdHVyZSBpbnRvIGEgc3RhY2sgb2YgY2FsbHMuXG4gMjY3Olx0XG4gMjY4Olx0Y29uZmlnIEZVTkNUSU9OX0dSQVBIX1JFVFZBTFxuIDI2OTpcdFx0Ym9vbCBcJiMzNDtLZXJuZWwgRnVuY3Rpb24gR3JhcGggUmV0dXJuIFZhbHVlXCYjMzQ7XG4gMjcwOlx0XHRkZXBlbmRzIG9uIEhBVkVfRlVOQ1RJT05fR1JBUEhfRlJFR1NcbiAyNzE6XHRcdGRlcGVuZHMgb24gRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXG4gMjcyOlx0XHRkZWZhdWx0IG5cbiAyNzM6XHRcdGhlbHBcbiAyNzQ6XHRcdCAgU3VwcG9ydCByZWNvcmRpbmcgYW5kIHByaW50aW5nIHRoZSBmdW5jdGlvbiByZXR1cm4gdmFsdWUgd2hlblxuIDI3NTpcdFx0ICB1c2luZyBmdW5jdGlvbiBncmFwaCB0cmFjZXIuIEl0IGNhbiBiZSBoZWxwZnVsIHRvIGxvY2F0ZSBmdW5jdGlvbnNcbiAyNzY6XHRcdCAgdGhhdCByZXR1cm4gZXJyb3JzLiBUaGlzIGZlYXR1cmUgaXMgb2ZmIGJ5IGRlZmF1bHQsIGFuZCB5b3UgY2FuXG4gMjc3Olx0XHQgIGVuYWJsZSBpdCB2aWEgdGhlIHRyYWNlIG9wdGlvbiBmdW5jZ3JhcGgtcmV0dmFsLlxuIDI3ODpcdFx0ICBTZWUgRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0XG4gMjc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDMxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGVwZW5kZW5jaWVzIGFuZCBUcmFjaW5nKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyB0aGF0IGBGVU5DVElPTl9HUkFQSF9UUkFDRVJgIHJlbGllcyBvbiBgRlVOQ1RJT05fVFJBQ0VSYC4gVGhhdCYjMzk7cyBub3QgdW5leHBlY3RlZDsgZ3JhcGggdHJhY2luZyBvZnRlbiBidWlsZHMgdXBvbiBtb3JlIGJhc2ljIGZ1bmN0aW9uLWxldmVsIHRyYWNpbmcuIFRvIGJlIGNlcnRhaW4gYWJvdXQgaG93IHRoZXkgcmVsYXRlLCB0aGUgcGxhY2UgdG8gc3RhcnQgaXMgd2l0aCBgRlVOQ1RJT05fVFJBQ0VSYC4gTGV0JiMzOTtzIHRha2UgYSBsb29rIGF0ICppdCogZmlyc3QuIFVuZGVyc3RhbmRpbmcgKnRoYXQqIGNvbXBvbmVudCYjMzk7cyBjb3JlIGZ1bmN0aW9uYWxpdHkgaXMgZ29pbmcgdG8gaW5mb3JtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHdob2xlIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjMwOlx0XHRoZWxwXG4gMjMxOlx0XHQgIEVuYWJsZSBkZXZlbG9wZXIgdG8gc2V0dXAgZnRyYWNlIHN1YnN5c3RlbSB2aWEgc3VwcGxlbWVudGFsXG4gMjMyOlx0XHQgIGtlcm5lbCBjbWRsaW5lIGF0IGJvb3QgdGltZSBmb3IgZGVidWdnaW5nICh0cmFjaW5nKSBkcml2ZXJcbiAyMzM6XHRcdCAgaW5pdGlhbGl6YXRpb24gYW5kIGJvb3QgcHJvY2Vzcy5cbiAyMzQ6XHRcbiAyMzU6XHRjb25maWcgRlVOQ1RJT05fVFJBQ0VSXG4gMjM2Olx0XHRib29sIFwmIzM0O0tlcm5lbCBGdW5jdGlvbiBUcmFjZXJcJiMzNDtcbiAyMzc6XHRcdGRlcGVuZHMgb24gSEFWRV9GVU5DVElPTl9UUkFDRVJcbiAyMzg6XHRcdHNlbGVjdCBLQUxMU1lNU1xuIDIzOTpcdFx0c2VsZWN0IEdFTkVSSUNfVFJBQ0VSXG4gMjQwOlx0XHRzZWxlY3QgQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSXG4gMjQxOlx0XHRzZWxlY3QgR0xPQlxuIDI0MjpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gMjQzOlx0XHRzZWxlY3QgVEFTS1NfUlVERV9SQ1VcbiAyNDQ6XHRcdGhlbHBcbiAyNDU6XHRcdCAgRW5hYmxlIHRoZSBrZXJuZWwgdG8gdHJhY2UgZXZlcnkga2VybmVsIGZ1bmN0aW9uLiBUaGlzIGlzIGRvbmVcbiAyNDY6XHRcdCAgYnkgdXNpbmcgYSBjb21waWxlciBmZWF0dXJlIHRvIGluc2VydCBhIHNtYWxsLCA1LWJ5dGUgTm8tT3BlcmF0aW9uXG4gMjQ3Olx0XHQgIGluc3RydWN0aW9uIGF0IHRoZSBiZWdpbm5pbmcgb2YgZXZlcnkga2VybmVsIGZ1bmN0aW9uLCB3aGljaCBOT1BcbiAyNDg6XHRcdCAgc2VxdWVuY2UgaXMgdGhlbiBkeW5hbWljYWxseSBwYXRjaGVkIGludG8gYSB0cmFjZXIgY2FsbCB3aGVuXG4gMjQ5Olx0XHQgIHRyYWNpbmcgaXMgZW5hYmxlZCBieSB0aGUgYWRtaW5pc3RyYXRvci4gSWYgaXQmIzM5O3MgcnVudGltZSBkaXNhYmxlZFxuIDI1MDpcdFx0ICAodGhlIGJvb3R1cCBkZWZhdWx0KSwgdGhlbiB0aGUgb3ZlcmhlYWQgb2YgdGhlIGluc3RydWN0aW9ucyBpcyB2ZXJ5XG4gMjUxOlx0XHQgIHNtYWxsIGFuZCBub3QgbWVhc3VyYWJsZSBldmVuIGluIG1pY3JvLWJlbmNobWFya3MgKGF0IGxlYXN0IG9uXG4gMjUyOlx0XHQgIHg4NiwgYnV0IG1heSBoYXZlIGltcGFjdCBvbiBvdGhlciBhcmNoaXRlY3R1cmVzKS5cbiAyNTM6XHRcbiAyNTQ6XHRjb25maWcgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXG4gMjU1Olx0XHRib29sIFwmIzM0O0tlcm5lbCBGdW5jdGlvbiBHcmFwaCBUcmFjZXJcJiMzNDtcbiAyNTY6XHRcdGRlcGVuZHMgb24gSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVJcbiAyNTc6XHRcdGRlcGVuZHMgb24gRlVOQ1RJT05fVFJBQ0VSXG4gMjU4Olx0XHRkZXBlbmRzIG9uICFYODZfMzIgfHwgIUNDX09QVElNSVpFX0ZPUl9TSVpFXG4gMjU5Olx0XHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3MDAKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgSSBuZWVkIHRvIGdldCB0aGlzIHRyYWNpbmcgc3lzdGVtIHNxdWFyZWQgYXdheS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgd2UmIzM5O2xsIG5lZWQgYm90aCBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCBhbmQganVzdCBhIGJhc2ljIGBGVU5DVElPTl9UUkFDRVJgLiBIb2xkIG9uIHRob3VnaCwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIGBGVU5DVElPTl9UUkFDRVJgIGlzbiYjMzk7dCBhIHNpbXBsZSBvbi9vZmYgc3dpdGNoOyBpdCBoaW5nZXMgb24gYEhBVkVfRlVOQ1RJT05fVFJBQ0VSYCwgYW5kIHRoYXQmIzM5O3MgdXN1YWxseSBzZWxlY3RlZCBhdCB0aGUgYXJjaGl0ZWN0dXJlIGxldmVsLCBtZWFuaW5nIGl0JiMzOTtzIGRlcGVuZGVudCBvbiB0aGUgaGFyZHdhcmUuIFJpZ2h0LiBBbmQgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhpcywgSSBzaG91bGQgcHJvYmFibHkgY29uZmlybSB3aGV0aGVyIGBGVFJBQ0VgIGl0c2VsZiBpcyBldmVuIGVuYWJsZWQuIGBGVFJBQ0VgIGlzIHRoZSBiaWcga2FodW5hLCB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgYWxsIHRoaXMgdHJhY2luZy4gQmV0dGVyIGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBzZWxlY3RlZCBmaXJzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZUUkFDRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZz0xOTg9Y29uZmlnIFRSQUNJTkdfU1VQUE9SVFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTIwMy1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjIwNDptZW51Y29uZmlnIEZUUkFDRVxua2VybmVsL3RyYWNlL0tjb25maWctMjA1LVx0Ym9vbCBcJiMzNDtUcmFjZXJzXCYjMzQ7XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9NTg4PWNvbmZpZyBFTkFCTEVfREVGQVVMVF9UUkFDRVJTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctNTk2LVxua2VybmVsL3RyYWNlL0tjb25maWc6NTk3OmNvbmZpZyBGVFJBQ0VfU1lTQ0FMTFNcbmtlcm5lbC90cmFjZS9LY29uZmlnLTU5OC1cdGJvb2wgXCYjMzQ7VHJhY2Ugc3lzY2FsbHNcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz04Njg9Y29uZmlnIEJQRl9LUFJPQkVfT1ZFUlJJREVcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NzYtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4Nzc6Y29uZmlnIEZUUkFDRV9NQ09VTlRfVVNFX1BBVENIQUJMRV9GVU5DVElPTl9FTlRSWVxua2VybmVsL3RyYWNlL0tjb25maWctODc4LVx0Ym9vbFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTg4MC1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjg4MTpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfQ0Ncbmtlcm5lbC90cmFjZS9LY29uZmlnLTg4Mi1cdGRlZl9ib29sIHlcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04ODYtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4ODc6Y29uZmlnIEZUUkFDRV9NQ09VTlRfVVNFX09CSlRPT0xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg4OC1cdGRlZl9ib29sIHlcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04OTQtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4OTU6Y29uZmlnIEZUUkFDRV9NQ09VTlRfVVNFX1JFQ09SRE1DT1VOVFxua2VybmVsL3RyYWNlL0tjb25maWctODk2LVx0ZGVmX2Jvb2wgeVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTEwMjE9Y29uZmlnIFRSQUNFX0VWQUxfTUFQX0ZJTEVcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDQ4LVxua2VybmVsL3RyYWNlL0tjb25maWc6MTA0OTpjb25maWcgRlRSQUNFX1JFQ09SRF9SRUNVUlNJT05cbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNTAtXHRib29sIFwmIzM0O1JlY29yZCBmdW5jdGlvbnMgdGhhdCByZWN1cnNlIGluIGZ1bmN0aW9uIHRyYWNpbmdcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDYyLVxua2VybmVsL3RyYWNlL0tjb25maWc6MTA2Mzpjb25maWcgRlRSQUNFX1JFQ09SRF9SRUNVUlNJT05fU0laRVxua2VybmVsL3RyYWNlL0tjb25maWctMTA2NC1cdGludCBcJiMzNDtNYXggbnVtYmVyIG9mIHJlY3Vyc2VkIGZ1bmN0aW9ucyB0byByZWNvcmRcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDczLVxua2VybmVsL3RyYWNlL0tjb25maWc6MTA3NDpjb25maWcgRlRSQUNFX1ZBTElEQVRFX1JDVV9JU19XQVRDSElOR1xua2VybmVsL3RyYWNlL0tjb25maWctMTA3NS1cdGJvb2wgXCYjMzQ7VmFsaWRhdGUgUkNVIGlzIG9uIGR1cmluZyBmdHJhY2UgZXhlY3V0aW9uXCYjMzQ7XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9MTEwMT1jb25maWcgR0NPVl9QUk9GSUxFX0ZUUkFDRVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMTItXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMTEzOmNvbmZpZyBGVFJBQ0VfU0VMRlRFU1Rcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMTQtXHRib29sXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTE1LVxua2VybmVsL3RyYWNlL0tjb25maWc6MTExNjpjb25maWcgRlRSQUNFX1NUQVJUVVBfVEVTVFxua2VybmVsL3RyYWNlL0tjb25maWctMTExNy1cdGJvb2wgXCYjMzQ7UGVyZm9ybSBhIHN0YXJ0dXAgdGVzdCBvbiBmdHJhY2VcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMTM2PWNvbmZpZyBFVkVOVF9UUkFDRV9URVNUX1NZU0NBTExTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMTE0Ny1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjExNDg6Y29uZmlnIEZUUkFDRV9TT1JUX1NUQVJUVVBfVEVTVFxua2VybmVsL3RyYWNlL0tjb25maWctMTE0OS0gICAgICAgYm9vbCBcJiMzNDtWZXJpZnkgY29tcGlsZSB0aW1lIHNvcnRpbmcgb2YgZnRyYWNlIGZ1bmN0aW9uc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc4OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZUUkFDRSBDb25maWd1cmF0aW9uIEFuYWx5c2lzKioKCk9rYXksIHNvIGBGVFJBQ0VgIGlzIGRlZmluaXRlbHkgYSBtZW51Y29uZmlnIG9wdGlvbi4gVGhhdCBtZWFucyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gY29uc2lkZXJpbmcgYWxsIHRoZSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zOiBgRlRSQUNFYCwgYEZVTkNUSU9OX1RSQUNFUmAsIGFuZCBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYC4gSG9sZCBvbiBhIHNlY29uZCwgd2FzbiYjMzk7dCBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgaWYgYEZVTkNUSU9OX1RSQUNFUmAgd2FzIGVuYWJsZWQ/IFllcywgSSBiZWxpZXZlIHRoYXQmIzM5O3MgcmlnaHQuIEp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9mIGBGVFJBQ0VgIGl0c2VsZiBhbmQgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBkZXBlbmRlbnQgY29uZmlndXJhdGlvbnMgSSYjMzk7bSBtaXNzaW5nLiBUaW1lIHRvIGRpZyBpbiBhbmQgY29uZmlybSB0aGUgZXhhY3QgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDA6XHRcdGRlcGVuZHMgb24gVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVFxuIDIwMTpcdFx0ZGVwZW5kcyBvbiBTVEFDS1RSQUNFX1NVUFBPUlRcbiAyMDI6XHRcdGRlZmF1bHQgeVxuIDIwMzpcdFxuIDIwNDpcdG1lbnVjb25maWcgRlRSQUNFXG4gMjA1Olx0XHRib29sIFwmIzM0O1RyYWNlcnNcJiMzNDtcbiAyMDY6XHRcdGRlcGVuZHMgb24gVFJBQ0lOR19TVVBQT1JUXG4gMjA3Olx0XHRkZWZhdWx0IHkgaWYgREVCVUdfS0VSTkVMXG4gMjA4Olx0XHRoZWxwXG4gMjA5Olx0XHQgIEVuYWJsZSB0aGUga2VybmVsIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUuXG4gMjEwOlx0XG4gMjExOlx0aWYgRlRSQUNFXG4gMjEyOlx0XG4gMjEzOlx0Y29uZmlnIFRSQUNFRlNfQVVUT01PVU5UX0RFUFJFQ0FURURcbiAyMTQ6XHRcdGJvb2wgXCYjMzQ7QXV0b21vdW50IHRyYWNlZnMgb24gZGVidWdmcyBbREVQUkVDQVRFRF1cJiMzNDtcbiAyMTU6XHRcdGRlcGVuZHMgb24gVFJBQ0lOR1xuIDIxNjpcdFx0ZGVmYXVsdCB5XG4gMjE3Olx0XHRoZWxwXG4gMjE4Olx0XHQgIFRoZSB0cmFjaW5nIGludGVyZmFjZSB3YXMgbW92ZWQgZnJvbSAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nXG4gMjE5Olx0XHQgIHRvIC9zeXMva2VybmVsL3RyYWNpbmcgaW4gMjAxNSwgYnV0IHRoZSB0cmFjaW5nIGZpbGUgc3lzdGVtXG4gMjIwOlx0XHQgIHdhcyBzdGlsbCBhdXRvbW91bnRlZCBpbiAvc3lzL2tlcm5lbC9kZWJ1ZyBmb3IgYmFja3dhcmRcbiAyMjE6XHRcdCAgY29tcGF0aWJpbGl0eSB3aXRoIHRvb2xpbmcuXG4gMjIyOlx0XG4gMjIzOlx0XHQgIFRoZSBuZXcgaW50ZXJmYWNlIGhhcyBiZWVuIGFyb3VuZCBmb3IgbW9yZSB0aGFuIDEwIHllYXJzIGFuZFxuIDIyNDpcdFx0ICB0aGUgb2xkIGRlYnVnIG1vdW50IHdpbGwgc29vbiBiZSByZW1vdmVkLlxuIDIyNTpcdFxuIDIyNjpcdGNvbmZpZyBCT09UVElNRV9UUkFDSU5HXG4gMjI3Olx0XHRib29sIFwmIzM0O0Jvb3QtdGltZSBUcmFjaW5nIHN1cHBvcnRcJiMzNDtcbiAyMjg6XHRcdGRlcGVuZHMgb24gVFJBQ0lOR1xuIDIyOTpcdFx0c2VsZWN0IEJPT1RfQ09ORklHXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDQ1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGdW5jdGlvbiBUcmFjaW5nIGFuZCBCdWcgVHJpZ2dlcmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRvIGJlc3QgYXBwcm9hY2ggZnV6emluZyBhcm91bmQgYSBzcGVjaWZpYyBidWcgcmVsYXRlZCB0byBmdW5jdGlvbiB0cmFjaW5nLiAgYEZUUkFDRWAsIGBGVU5DVElPTl9UUkFDRVJgLCBhbmQgYEZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgYXJlIHRoZSByZWxldmFudCBjb25maWdzIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIFRoZSBjb3JlIGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkIGlzIGBjb3B5X3Byb2Nlc3NgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBmb2N1cyB0aGUgZnV6emVyIGRpcmVjdGx5IG9uIGBjb3B5X3Byb2Nlc3NgLiBIb3dldmVyLCB0aGF0JiMzOTtzIGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiwgY2FsbGVkIG9uIGV2ZXJ5IGZvcmsgYW5kIGNsb25lLiBUaGUgZnV6emVyIGFscmVhZHkgaGVhdmlseSB0YXJnZXRzIHRoZXNlIHN5c3RlbSBjYWxscy4gIElmIEkgemVybyBpbiBvbiBgY29weV9wcm9jZXNzYCwgaXQgd2lsbCBsaWtlbHkganVzdCBnaXZlIG1lIGEgc2tld2VkIGRpc3RyaWJ1dGlvbiwgYW5kIHByb2JhYmx5IG5vdCByZXZlYWwgYW55dGhpbmcgbmV3LgoKVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogY2FuIEkgc3RlZXIgdGhlIGZ1enplciB0b3dhcmQgdGhlICplcnJvciogcGF0aCBvZiBgY29weV9wcm9jZXNzYD8gVGhlc2UgZXJyb3IgcGF0aHMgYXJpc2UgZnJvbSBmYWlsdXJlcyB3aXRoaW4gdGhpbmdzIGxpa2UgYGNvcHlfZXhlY19zdGF0ZWAsIGBjb3B5X2NyZWRzYCwgYGNvcHlfbW1gLCBvciBgY29weV9uYW1lc3BhY2VzYC4gVGhvc2UgZmFpbHVyZXMgYXJlIHVzdWFsbHkgZHVlIHRvIG1lbW9yeSBhbGxvY2F0aW9uIHByb2JsZW1zICh3aGljaCBzeXprYWxsZXIgY2FuIGluZHVjZSB1c2luZyBmYXVsdCBpbmplY3Rpb24pIG9yIGludmFsaWQgYXJndW1lbnRzIHBhc3NlZCB0byBgY2xvbmUzYC4KCkNvbnNpZGVyaW5nIGBzeXNfY2xvbmUzYCBvciBgc3lzX2Nsb25lYCBhcmUgYWxzbyBnZW5lcmljLCB0aGF0IGRvZXNuJiMzOTt0IHNlZW0gcHJvbWlzaW5nIGVpdGhlci4gV2FpdCwgYnV0IHRoZSBidWcgcmVwb3J0IHNwZWNpZmljYWxseSBtZW50aW9ucyBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgYW5kIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYC4KCk15IGZpcnN0IGluY2xpbmF0aW9uIHdhcyB0byBhZGQgdGhvc2UgZnVuY3Rpb25zIHRvIGBGb2N1c1N5bWJvbHNgLCBob3Bpbmcgc3l6a2FsbGVyIHdvdWxkIHRyeSB0byByZWFjaCB0aGVtLiBUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZXkgYXJlIGNhbGxlZCB1bmNvbmRpdGlvbmFsbHkgZnJvbSB3aXRoaW4gYGNvcHlfcHJvY2Vzc2AgYW5kIGBmcmVlX3Rhc2tgLCAqaWYqIGBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCBpcyBlbmFibGVkLiAgU28sIHRoZXkmIzM5O3JlIGFsc28gaG90LXBhdGggZnVuY3Rpb25zLCBleGVjdXRlZCB3aXRoIGV2ZXJ5IGZvcmsvZXhpdC4KCk5vdywgd2FpdCBhIG1pbnV0ZSwgdGhlIHByb21wdCBzYXlzIHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLiBUaGlzIGlzIGltcG9ydGFudCB0byBhdm9pZCBhIHNrZXdlZCBkaXN0cmlidXRpb24uIEl0IGFsc28gc3RhdGVzIEkgc2hvdWxkIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiAgU28sIGxpc3RpbmcgYGNvcHlfcHJvY2Vzc2AsIGBmcmVlX3Rhc2tgIGFuZCBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgbWlnaHQgbm90IGJlIHRoZSByaWdodCBtb3ZlIGhlcmUsIGV2ZW4gdGhvdWdoIHRoZXkmIzM5O3JlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGZ1bmN0aW9ucyBpZGVudGlmaWVkIGluIHRoZSBidWcgcmVwb3J0LgoKQnV0IHdhaXQsIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBkb2VzIGEgY2hlY2s6IGl0IG9ubHkgZXhlY3V0ZXMgaWYgYGZ0cmFjZV9ncmFwaF9hY3RpdmVgIGlzIHRydWUuIEhtbSwgSSBuZWVkIHRvIHJldmlzaXQgYGtlcm5lbC90cmFjZS9mZ3JhcGguY2AgYW5kIHVuZGVyc3RhbmQgaG93IHRvIGdldCB0aGF0IGNvbmRpdGlvbiB0byBiZSB0cnVlLiBMZXQgbWUgZGl2ZSBiYWNrIGludG8gdGhhdCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9mZ3JhcGguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE1OTpcdC8qIEFsbG9jYXRlIGEgcmV0dXJuIHN0YWNrIGZvciBuZXdseSBjcmVhdGVkIHRhc2sgKi9cbjExNjA6XHR2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KVxuMTE2MTpcdHtcbjExNjI6XHRcdC8qIE1ha2Ugc3VyZSB3ZSBkbyBub3QgdXNlIHRoZSBwYXJlbnQgcmV0X3N0YWNrICovXG4xMTYzOlx0XHR0LVx1MDAzZXJldF9zdGFjayA9IE5VTEw7XG4xMTY0Olx0XHR0LVx1MDAzZWN1cnJfcmV0X3N0YWNrID0gMDtcbjExNjU6XHRcdHQtXHUwMDNlY3Vycl9yZXRfZGVwdGggPSAtMTtcbjExNjY6XHRcbjExNjc6XHRcdGlmIChmdHJhY2VfZ3JhcGhfYWN0aXZlKSB7XG4xMTY4Olx0XHRcdHVuc2lnbmVkIGxvbmcgKnJldF9zdGFjaztcbjExNjk6XHRcbjExNzA6XHRcdFx0aWYgKFdBUk5fT05fT05DRSghZmdyYXBoX3N0YWNrX2NhY2hlcCkpXG4xMTcxOlx0XHRcdFx0cmV0dXJuO1xuMTE3MjpcdFxuMTE3MzpcdFx0XHRyZXRfc3RhY2sgPSBrbWVtX2NhY2hlX2FsbG9jKGZncmFwaF9zdGFja19jYWNoZXAsIEdGUF9LRVJORUwpO1xuMTE3NDpcdFx0XHRpZiAoIXJldF9zdGFjaylcbjExNzU6XHRcdFx0XHRyZXR1cm47XG4xMTc2Olx0XHRcdGdyYXBoX2luaXRfdGFzayh0LCByZXRfc3RhY2spO1xuMTE3NzpcdFx0fVxuMTE3ODpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3NzQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMTk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJ1ZyBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneSBmb3IgS2VybmVsIFVzZS1BZnRlci1GcmVlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgaXMgZXhwb3J0ZWQsIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGNhbGxlZCBvbiBldmVyeSBmb3JrLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBjb3B5X3Byb2Nlc3NgLiBUaGUgY29yZSBvZiB0aGUgYnVnIGxpZXMgaW4gdGhlIGVycm9yIGhhbmRsaW5nIG9mIGBjb3B5X3Byb2Nlc3NgLiBJZiBhIGZhbGxpYmxlIG9wZXJhdGlvbiB3aXRoaW4gYGNvcHlfcHJvY2Vzc2AgZmFpbHMgKmJlZm9yZSogYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGlzIGNhbGxlZCwgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIGluIHRoZSBlcnJvciBwYXRoIGVuZHMgdXAgZnJlZWluZyB0aGUgcGFyZW50JiMzOTtzIGByZXRfc3RhY2tgLiBUaGlzIGlzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gVGhpcyBvY2N1cnMgcmVnYXJkbGVzcyBvZiBgZnRyYWNlX2dyYXBoX2FjdGl2ZWAsIGFzIGxvbmcgYXMgdGhlIHBhcmVudCB0YXNrIGF0IHNvbWUgcG9pbnQgaGFkIGBmdHJhY2VfZ3JhcGhfYWN0aXZlYCBzZXQgdG8gdHJ1ZS4KClRoZSBrZXkgdG8gdHJpZ2dlcmluZyB0aGlzIGxpZXMgaW4gdGhlIHRpbWluZyBvZiB0aGUgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGNhbGwgd2l0aGluIGBjb3B5X3Byb2Nlc3NgLiBUaGUgcGF0Y2ggZml4ZXMgdGhpcyBieSBtb3ZpbmcgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGVhcmxpZXIsIHJpZ2h0IGFmdGVyIGBkdXBfdGFza19zdHJ1Y3RgLgoKSG93IGRvIHdlIHRyaWdnZXIgdGhpcz8gV2UgbmVlZCB0byBlbmFibGUgZnRyYWNlIGdyYXBoIHRyYWNpbmcuIFRoYXQmIzM5O3MgZG9uZSB2aWEgdHJhY2Vmcywgd2hpY2ggc3l6a2FsbGVyIGFscmVhZHkga25vd3MgaG93IHRvIGZ1enouIFNvLCB3ZSYjMzk7cmUgbm90IHN0cmljdGx5IGZvY3VzaW5nIG9uIHRyYWNlZnMgZnVuY3Rpb25zIGhlcmUsIGJ1dCB0aGUgdHJhY2luZyAqbmVlZHMqIHRvIGJlIGVuYWJsZWQuCgpTaW5jZSB0aGUgZml4IG1vZGlmaWVzIGBjb3B5X3Byb2Nlc3NgLCB3aGljaCBpcyBhICpob3QgcGF0aCosIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggYEZvY3VzU3ltYm9sc2AuIExpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgd291bGQgc2tldyB0aGUgdGVzdCBkaXN0cmlidXRpb24uIEkgbmVlZCB0byBhdm9pZCBsaXN0aW5nIGBjb3B5X3Byb2Nlc3NgLCBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AsIG9yIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYC4gR2l2ZW4gdGhlIGJ1ZyYjMzk7cyBuYXR1cmUgYW5kIHRoZSBob3QgcGF0aCBjb25zaWRlcmF0aW9ucywgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIGJlIGVtcHR5LgoKTm93LCBhYm91dCB0aGUgY29uZmlncy4gV2UgbmVlZCBgRlRSQUNFYCwgYEZVTkNUSU9OX1RSQUNFUmAsIGFuZCBlc3BlY2lhbGx5IGBGVU5DVElPTl9HUkFQSF9UUkFDRVJgIHRvIGJlIGVuYWJsZWQuIGBGVU5DVElPTl9HUkFQSF9UUkFDRVJgIHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBvbmUuCgpMZXQmIzM5O3MgcXVpY2tseSByZXZpZXcgdGhlIGJ1ZyBhZ2FpbiB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyYjMzk7cyBjbGVhci4gSW4gdGhlIHByZS1wYXRjaCBjb2RlLCB0aGUgY2FsbCB0byBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgaGFwcGVuZWQgKmFmdGVyKiBtYW55IHBvdGVudGlhbGx5IGZhaWxpbmcgb3BlcmF0aW9ucywgd2hpY2ggY291bGQgbGVhZCB0byBgZnRyYWNlX2dyYXBoX2V4aXRfdGFza2AgZnJlZWluZyB0aGUgcGFyZW50JiMzOTtzIHN0YWNrIGluIGFuIGVycm9yIHBhdGguIFRoZSBmaXggbW92ZXMgdGhlIGluaXRpYWxpemF0aW9uIGVhcmxpZXIsIHdoaWNoIGlzIHRoZSBrZXkuCgpUaGlzIGlzIGEgdmVyeSBjbGVhciBhbmQgaW1wb3J0YW50IGZ1bmN0aW9uYWwgZml4IQoKVGhlcmVmb3JlLCB0aGUgc3RyYXRlZ3kgd2lsbCBiZToKCiogICAqKldvcnRoRnV6emluZyoqOiBUcnVlCiogICAqKkZvY3VzU3ltYm9scyoqOiBFbXB0eSBcW1xdICh0byBhdm9pZCBob3QgcGF0aCBpc3N1ZXMpCiogICAqKkVuYWJsZUNvbmZpZ3MqKjogXFsmIzM0O0ZUUkFDRSYjMzQ7LCAmIzM0O0ZVTkNUSU9OX1RSQUNFUiYjMzQ7LCAmIzM0O0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiYjMzQ7XF0KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHVwX3Rhc2tfc3RydWN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdD0zNjg2PWNhbiBjdXJyZW50bHkgb25seSBoYXZlIGV2ZW50cyBlbmFibGVkIGZvciB0aGVtLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdC0zNzEyLSAgICAgICAgICAgICAgYmFzaC0yMDQ0ICBbMDAyXSBkLi4uIDEwNTk0LjQ4MTAzNDogX19pbmNfem9uZV9zdGF0ZSBcdTAwM2Mtem9uZV9zdGF0aXN0aWNzXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3Q6MzcxMzogICAgICAgICAgICAgIGJhc2gtMjA0NCAgWzAwMl0gLi4uLiAxMDU5NC40ODEwMzU6IGFyY2hfZHVwX3Rhc2tfc3RydWN0IFx1MDAzYy1jb3B5X3Byb2Nlc3NcbkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdC0zNzE0LSAgWy4uLl1cbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmM9MjMyPWludCBjb3B5X3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMtMjYzLVx0ICAgdmFsdWUgZnJvbSB0aGUgcGFyZW50LCB3aGljaCB3aWxsIGhhdmUgYmVlbiBzZXQgYnkgdGhlIGJsb2NrXG5hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmM6MjY0Olx0ICAgY29weSBpbiBkdXBfdGFza19zdHJ1Y3QuICBUaGlzIGlzIG5vbi1pbnR1aXRpdmUsIGJ1dCBpc1xuYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jLTI2NS1cdCAgIHJlcXVpcmVkIGZvciBwcm9wZXIgb3BlcmF0aW9uIGluIHRoZSBjYXNlIG9mIGEgdGhyZWFkZWRcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9mcHNpbWQuYz0xNzY0PXZvaWQgZnBzaW1kX3Jlc3RvcmVfY3VycmVudF9zdGF0ZSh2b2lkKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2Zwc2ltZC5jLTE3NjctXHQgKiBUSUZfRk9SRUlHTl9GUFNUQVRFIGlzIHNldCBvbiB0aGUgaW5pdCB0YXNrIGFuZCBjb3BpZWQgYnlcbmFyY2gvYXJtNjQva2VybmVsL2Zwc2ltZC5jOjE3Njg6XHQgKiBhcmNoX2R1cF90YXNrX3N0cnVjdCgpIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBGUC9TSU1EIGlzIGRldGVjdGVkLlxuYXJjaC9hcm02NC9rZXJuZWwvZnBzaW1kLmMtMTc2OS1cdCAqIFRodXMgdXNlciB0aHJlYWRzIGNhbiBoYXZlIHRoaXMgc2V0IGV2ZW4gd2hlbiBGUC9TSU1EIGhhc24mIzM5O3QgYmVlblxuLS1cbmFyY2gvYXJtNjQva2VybmVsL3Byb2Nlc3MuYz0zNDQ9dm9pZCBhcmNoX3JlbGVhc2VfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvcHJvY2Vzcy5jLTM0OC1cbmFyY2gvYXJtNjQva2VybmVsL3Byb2Nlc3MuYzozNDk6aW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYylcbmFyY2gvYXJtNjQva2VybmVsL3Byb2Nlc3MuYy0zNTAte1xuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9wcm9jZXNzLmM9MTEwPXZvaWQgZXhpdF90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Byb2Nlc3MuYy0xMTMtXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvcHJvY2Vzcy5jOjExNDppbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Byb2Nlc3MuYy0xMTUte1xuLS1cbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaD0zMT1leHRlcm4gdW5zaWduZWQgaW50IHZjZWRfY291bnQsIHZjZWlfY291bnQ7XG5hcmNoL21pcHMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6MzI6ZXh0ZXJuIGludCBhcmNoX2R1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCwgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMpO1xuYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTMzLVxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jPTcxPXZvaWQgZXhpdF90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxuYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMtODAtXG5hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYzo4MTppbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKVxuYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMtODIte1xuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oPTU0PXN0cnVjdCB0aHJlYWRfaW5mbyB7XG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgtODgtLyogaG93IHRvIGdldCB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdCBmcm9tIEMgKi9cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oOjg5OmV4dGVybiBpbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKTtcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oLTkwLVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jPTE2NzY9RVhQT1JUX1NZTUJPTF9HUEwoc2V0X3RocmVhZF90aWRyKTtcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYy0xNjgzLSAqL1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmM6MTY4NDppbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMtMTY4NS17XG4tLVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaD0xODk9ZXh0ZXJuIHZvaWQgcmlzY3ZfZmlsbF9od2NhcCh2b2lkKTtcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6MTkwOmV4dGVybiBpbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKTtcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtMTkxLVxuLS1cbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaD0xMDE9dm9pZCBhcmNoX3JlbGVhc2VfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oOjEwMjppbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKTtcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaC0xMDMtXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvcHJvY2Vzcy5jPTIwOT12b2lkIGFyY2hfcmVsZWFzZV90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9wcm9jZXNzLmMtMjE1LVxuYXJjaC9yaXNjdi9rZXJuZWwvcHJvY2Vzcy5jOjIxNjppbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKVxuYXJjaC9yaXNjdi9rZXJuZWwvcHJvY2Vzcy5jLTIxNy17XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmM9Nzk9dm9pZCBhcmNoX3JlbGVhc2VfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMtODQtXG5hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYzo4NTppbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKVxuYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMtODYte1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jPTEwNj1pbnQgY29weV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMtMTYxLVx0ICogQ2xlYXIgdGhlIHJ1bnRpbWUgaW5zdHJ1bWVudGF0aW9uIGZsYWcgYWZ0ZXIgdGhlIGFib3ZlIGNoaWxkcmVnc1xuYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmM6MTYyOlx0ICogY29weS4gVGhlIENCIHBvaW50ZXIgd2FzIGFscmVhZHkgY2xlYXJlZCBpbiBhcmNoX2R1cF90YXNrX3N0cnVjdCgpLlxuYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMtMTYzLVx0ICovXG4tLVxuYXJjaC9zaC9rZXJuZWwvcHJvY2Vzcy5jPTE3PUVYUE9SVF9TWU1CT0woX19zdGFja19jaGtfZ3VhcmQpO1xuLS1cbmFyY2gvc2gva2VybmVsL3Byb2Nlc3MuYy0yMy0gKi9cbmFyY2gvc2gva2VybmVsL3Byb2Nlc3MuYzoyNDppbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKVxuYXJjaC9zaC9rZXJuZWwvcHJvY2Vzcy5jLTI1LXtcbi0tXG5hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzY0LmM9NTcwPWludCBjb3B5X3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylcbi0tXG5hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzY0LmMtNjUwLSAqL1xuYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc182NC5jOjY1MTppbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKVxuYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc182NC5jLTY1Mi17XG4tLVxuYXJjaC91bS9rZXJuZWwvcHJvY2Vzcy5jPTE4OD12b2lkIGluaXRpYWxfdGhyZWFkX2NiKHZvaWQgKCpwcm9jKSh2b2lkICopLCB2b2lkICphcmcpXG4tLVxuYXJjaC91bS9rZXJuZWwvcHJvY2Vzcy5jLTE5Mi1cbmFyY2gvdW0va2VybmVsL3Byb2Nlc3MuYzoxOTM6aW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LFxuYXJjaC91bS9rZXJuZWwvcHJvY2Vzcy5jLTE5NC1cdFx0XHQgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMpXG4tLVxuYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYz05OT1ERUZJTkVfUEVSX0NQVShib29sLCBjYWNoZV9zdGF0ZV9pbmNvaGVyZW50KTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jLTEwNC0gKi9cbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmM6MTA1OmludCBhcmNoX2R1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCwgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMpXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jLTEwNi17XG4tLVxuYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYz0yMDQ9dm9pZCBmbHVzaF90aHJlYWQodm9pZClcbi0tXG5hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jLTIxNi0gKi9cbmFyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmM6MjE3OmludCBhcmNoX2R1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCwgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMpXG5hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jLTIxOC17XG4tLVxuaW5jbHVkZS9saW51eC90aHJlYWRfaW5mby5oPTIzMj12b2lkIGFyY2hfcmVsZWFzZV90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7XG5pbmNsdWRlL2xpbnV4L3RocmVhZF9pbmZvLmg6MjMzOmludCBhcmNoX2R1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCxcbmluY2x1ZGUvbGludXgvdGhyZWFkX2luZm8uaC0yMzQtXHRcdFx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYyk7XG4tLVxua2VybmVsL2ZvcmsuYz04NTU9dm9pZCBfX2luaXQgZm9ya19pbml0KHZvaWQpXG4tLVxua2VybmVsL2ZvcmsuYy04OTktXG5rZXJuZWwvZm9yay5jOjkwMDppbnQgX193ZWFrIGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LFxua2VybmVsL2ZvcmsuYy05MDEtXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYylcbi0tXG5rZXJuZWwvZm9yay5jPTkwNz12b2lkIHNldF90YXNrX3N0YWNrX2VuZF9tYWdpYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbi0tXG5rZXJuZWwvZm9yay5jLTkxNC1cbmtlcm5lbC9mb3JrLmM6OTE1OnN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmR1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9yaWcsIGludCBub2RlKVxua2VybmVsL2ZvcmsuYy05MTYte1xuLS1cbmtlcm5lbC9mb3JrLmMtOTI1LVxua2VybmVsL2ZvcmsuYzo5MjY6XHRlcnIgPSBhcmNoX2R1cF90YXNrX3N0cnVjdCh0c2ssIG9yaWcpO1xua2VybmVsL2ZvcmsuYy05MjctXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9mb3JrLmM9MjAxOD1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxuLS1cbmtlcm5lbC9mb3JrLmMtMjEzOC1cdHJldHZhbCA9IC1FTk9NRU07XG5rZXJuZWwvZm9yay5jOjIxMzk6XHRwID0gZHVwX3Rhc2tfc3RydWN0KGN1cnJlbnQsIG5vZGUpO1xua2VybmVsL2ZvcmsuYy0yMTQwLVx0aWYgKCFwKVxuLS1cbmtlcm5lbC9mb3JrLmMtMjIwMC1cbmtlcm5lbC9mb3JrLmM6MjIwMTpcdGRlbGF5YWNjdF90c2tfaW5pdChwKTtcdC8qIE11c3QgcmVtYWluIGFmdGVyIGR1cF90YXNrX3N0cnVjdCgpICovXG5rZXJuZWwvZm9yay5jLTIyMDItXHRwLVx1MDAzZWZsYWdzIFx1MDAyNj0gfihQRl9TVVBFUlBSSVYgfCBQRl9XUV9XT1JLRVIgfCBQRl9JRExFIHwgUEZfTk9fU0VUQUZGSU5JVFkpO1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9NDM3OD12b2lkIGluaXRfbnVtYV9iYWxhbmNpbmcodTY0IGNsb25lX2ZsYWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy00NDEyLVx0ICogTmV3IHRocmVhZCwga2VlcCBleGlzdGluZyBudW1hX3ByZWZlcnJlZF9uaWQgd2hpY2ggc2hvdWxkIGJlIGNvcGllZFxua2VybmVsL3NjaGVkL2ZhaXIuYzo0NDEzOlx0ICogYWxyZWFkeSBieSBhcmNoX2R1cF90YXNrX3N0cnVjdCBidXQgc3RhZ2dlciB3aGVuIHNjYW5zIHN0YXJ0Llxua2VybmVsL3NjaGVkL2ZhaXIuYy00NDE0LVx0ICovXG4tLVxua2VybmVsL3NtcC5jPTg4OT1zdGF0aWMgdm9pZCBzbXBfY2FsbF9mdW5jdGlvbl9tYW55X2NvbmQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssXG4tLVxua2VybmVsL3NtcC5jLTk4OC1cdCAqIFRoZSBJUEkgd29yayBoYXMgYmVlbiBxdWV1ZWQgYW5kIGRpc3BhdGNoZWQuIE9uIFBSRUVNUFQga2VybmVscyxcbmtlcm5lbC9zbXAuYzo5ODk6XHQgKiB0YXNrcyBjcmVhdGVkIHRocm91Z2ggZHVwX3Rhc2tfc3RydWN0KCkgaGF2ZSB0YXNrLWxvY2FsIHdhaXQgbWFza3MuXG5rZXJuZWwvc21wLmMtOTkwLVx0ICogVGhlIGJvb3QgaW5pdF90YXNrIGNhbiBmYWxsIGJhY2sgdG8gY2ZkLVx1MDAzZWNwdW1hc2sgd2hlbiB0aGUgbWFzayBpc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQ4NwoJCQkJCQkJb3V0cHV0OiAyMzIKCQkJCQkJCXRob3VnaHRzOiAzMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBjb3B5X3Byb2Nlc3NgIEJ1ZyBGaXgqKgoKT2theSwgc28gaGVyZSYjMzk7cyB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSB3YXMgcmlnaHQ7IHRoZSByb290IG9mIHRoaXMgbGllcyB3aXRoaW4gYGtlcm5lbC9mb3JrLmNgLCBzcGVjaWZpY2FsbHkgaW4gYGR1cF90YXNrX3N0cnVjdGAuIFdlIGFsbCBrbm93IHRoaXMgZnVuY3Rpb24sIG9yIGl0cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY291bnRlcnBhcnQgYGFyY2hfZHVwX3Rhc2tfc3RydWN0YCwgZXNzZW50aWFsbHkgZG9lcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjb3B5IOKAkyBgKnRzayA9ICpvcmlnYCwgZWZmZWN0aXZlbHkgZHVwbGljYXRpbmcgdGhlIHRhc2sgc3RydWN0dXJlLiBUaGlzIG1lYW5zIHRoZSBgcmV0X3N0YWNrYCBwb2ludGVyIGZyb20gdGhlIHBhcmVudCBwcm9jZXNzIChgY3VycmVudC0mZ3Q7cmV0X3N0YWNrYCkgaXMgZ2V0dGluZyBkaXJlY3RseSBjb3BpZWQgaW50byB0aGUgY2hpbGQgcHJvY2Vzcy4KClRoZSBjcnV4IG9mIHRoZSBwcm9ibGVtIGFyaXNlcyB3aGVuIHRoaXMgY29weSBoYXBwZW5zLCBidXQgYW4gZXJyb3Igb2NjdXJzICpiZWZvcmUqIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBoYXMgYSBjaGFuY2UgdG8gY2xlYXIgdGhlIGNoaWxkJiMzOTtzIGByZXRfc3RhY2tgLiBUaGVuIHdlJiMzOTtyZSBpbiB0cm91YmxlLiBUaGUgZXJyb3IgcGF0aCBzdWJzZXF1ZW50bHkgaW52b2tlcyBgZnJlZV90YXNrYCwgd2hpY2ggaW4gdHVybiBjYWxscyBgZnRyYWNlX2dyYXBoX2V4aXRfdGFza2AuIEFuZCB0aGVyZSwgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIGZyZWVzIHRoZSAqcGFyZW50JiMzOTtzKiBgcmV0X3N0YWNrYC4gVGhlIGNoaWxkIHN0aWxsIGhhcyBhIGRhbmdsaW5nIHBvaW50ZXIgdG8gdGhlIGZyZWUmIzM5O2QgbWVtb3J5LiBBIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUsIHBsYWluIGFuZCBzaW1wbGUuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIGVsZWdhbnQgaW4gaXRzIHNpbXBsaWNpdHkuIEl0IGp1c3Qgc2hpZnRzIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCB1cHdhcmRzLCB0byBiZSBleGVjdXRlZCAqYmVmb3JlKiBhbnkgcG90ZW50aWFsbHkgZmFpbGluZyBvcGVyYXRpb25zIGluIHRoZSBgY29weV9wcm9jZXNzYCBlcnJvciBwYXRocy4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGNoaWxkJiMzOTtzIGByZXRfc3RhY2tgIGlzIHplcm9lZCBvdXQgYmVmb3JlIGFueXRoaW5nIGNhbiBnbyB3cm9uZy4KCk5hdHVyYWxseSwgdGhpcyBmaXggb25seSBhcHBsaWVzIGlmIGBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCBpcyBlbmFibGVkLCBhcyB0aGF0JiMzOTtzIHdoYXQgYnJpbmdzIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYCBhbmQgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGludG8gdGhlIHBpY3R1cmUuIFRoYXQgYWxzbyByZXF1aXJlcyB0aGUgc3RhbmRhcmQgZGVwZW5kZW5jaWVzIG9mIGBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSYCBhbmQgYENPTkZJR19GVFJBQ0VgLgoKR2l2ZW4gaG93IGhlYXZpbHkgZnV6emVkIGBjb3B5X3Byb2Nlc3NgIGlzIGFzIGEgaG90IHBhdGgsIHRoaXMgaXMgYSB2ZXJ5IGhpZ2ggaW1wYWN0IGZpeC4gTm8gbmVlZCB0byBnbyBodW50aW5nIGZvciBzcGVjaWZpYyBzeW1ib2xzIGZvciB0aGlzIG9uZS4KClRpbWUgdG8gZmVlZCB0aGlzIGludG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZUUkFDRSYjMzQ7LAogICAgJiMzNDtGVU5DVElPTl9UUkFDRVImIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fR1JBUEhfVFJBQ0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGluIHRoZSBlcnJvciBwYXRocyBvZiBjb3B5X3Byb2Nlc3MoKS4gV2hlbiBhIHRhc2sgaXMgZHVwbGljYXRlZCB2aWEgZHVwX3Rhc2tfc3RydWN0KCksIHRoZSBjaGlsZCB0YXNrIGluaGVyaXRzIHRoZSBwYXJlbnQmIzM5O3MgcmV0X3N0YWNrIHBvaW50ZXIuIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgcHJvY2VzcyBjcmVhdGlvbiBiZWZvcmUgZnRyYWNlX2dyYXBoX2luaXRfdGFzaygpIGNsZWFycyB0aGUgY2hpbGQmIzM5O3MgcmV0X3N0YWNrLCB0aGUgZXJyb3IgcGF0aCAoZnJlZV90YXNrIC1cdTAwM2UgZnRyYWNlX2dyYXBoX2V4aXRfdGFzaykgd2lsbCBlcnJvbmVvdXNseSBmcmVlIHRoZSBwYXJlbnQmIzM5O3MgcmV0X3N0YWNrLCBsZWFkaW5nIHRvIGEgdXNlLWFmdGVyLWZyZWUgd2hlbiB0aGUgcGFyZW50IHJlc3VtZXMgZXhlY3V0aW9uLiBUaGUgcGF0Y2ggbW92ZXMgZnRyYWNlX2dyYXBoX2luaXRfdGFzaygpIGJlZm9yZSBhbnkgZmFsbGlibGUgb3BlcmF0aW9ucyB0byBwcmV2ZW50IHRoaXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCBmb3IgYSByZWFjaGFibGUgY29yZSBrZXJuZWwgYnVnLCByZXF1aXJpbmcgZnRyYWNlIGdyYXBoIHRyYWNpbmcgY29uZmlncyB0byBiZSBlbmFibGVkLiBObyBzcGVjaWZpYyBmb2N1cyBzeW1ib2xzIGFyZSBuZWVkZWQgc2luY2UgY29weV9wcm9jZXNzKCkgaXMgYWxyZWFkeSBoZWF2aWx5IGZ1enplZCB2aWEgY2xvbmUvZm9yayBzeXNjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlRSQUNFJiMzNDssCiAgICAmIzM0O0ZVTkNUSU9OX1RSQUNFUiYjMzQ7LAogICAgJiMzNDtGVU5DVElPTl9HUkFQSF9UUkFDRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gdGhlIGVycm9yIHBhdGhzIG9mIGNvcHlfcHJvY2VzcygpLiBXaGVuIGEgdGFzayBpcyBkdXBsaWNhdGVkIHZpYSBkdXBfdGFza19zdHJ1Y3QoKSwgdGhlIGNoaWxkIHRhc2sgaW5oZXJpdHMgdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2sgcG9pbnRlci4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBwcm9jZXNzIGNyZWF0aW9uIGJlZm9yZSBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKCkgY2xlYXJzIHRoZSBjaGlsZCYjMzk7cyByZXRfc3RhY2ssIHRoZSBlcnJvciBwYXRoIChmcmVlX3Rhc2sgLVx1MDAzZSBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKSB3aWxsIGVycm9uZW91c2x5IGZyZWUgdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2ssIGxlYWRpbmcgdG8gYSB1c2UtYWZ0ZXItZnJlZSB3aGVuIHRoZSBwYXJlbnQgcmVzdW1lcyBleGVjdXRpb24uIFRoZSBwYXRjaCBtb3ZlcyBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKCkgYmVmb3JlIGFueSBmYWxsaWJsZSBvcGVyYXRpb25zIHRvIHByZXZlbnQgdGhpcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGZvciBhIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBidWcsIHJlcXVpcmluZyBmdHJhY2UgZ3JhcGggdHJhY2luZyBjb25maWdzIHRvIGJlIGVuYWJsZWQuIE5vIHNwZWNpZmljIGZvY3VzIHN5bWJvbHMgYXJlIG5lZWRlZCBzaW5jZSBjb3B5X3Byb2Nlc3MoKSBpcyBhbHJlYWR5IGhlYXZpbHkgZnV6emVkIHZpYSBjbG9uZS9mb3JrIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTo0NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCBlYXJsaWVyIGluIGBjb3B5X3Byb2Nlc3MoKWAgdG8gZW5zdXJlIHRoYXQgYHAtXHUwMDNlcmV0X3N0YWNrYCBhbmQgcmVsYXRlZCBmaWVsZHMgYXJlIGluaXRpYWxpemVkIChzZXQgdG8gTlVMTCBvciBuZXdseSBhbGxvY2F0ZWQpIGJlZm9yZSBhbnkgZmFsbGlibGUgb3BlcmF0aW9ucyBvY2N1ci4gUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIGlmIGFuIGVycm9yIG9jY3VycmVkIGVhcmx5IGluIGBjb3B5X3Byb2Nlc3MoKWAgKGUuZy4sIGluIGBjb3B5X2V4ZWNfc3RhdGUoKWApLCB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBjb3VsZCBmcmVlIHRoZSBuZXcgdGFzayBzdHJ1Y3R1cmUgd2hpbGUgaXQgc3RpbGwgaGVsZCBhIGNvcHkgb2YgdGhlIHBhcmVudCYjMzk7cyBgcmV0X3N0YWNrYCBwb2ludGVyIChkdWUgdG8gYGR1cF90YXNrX3N0cnVjdCgpYCkuIFRoaXMgd291bGQgcmVzdWx0IGluIGZyZWVpbmcgdGhlIHBhcmVudCYjMzk7cyBgcmV0X3N0YWNrYCwgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGJ1Zy5cblxuVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAodXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlKSBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBpc3N1ZSBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGludm9sdmUgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLCBhcyBzdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBidWcgdGhpcyBwYXRjaCBhZGRyZXNzZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhhOGExM2VhOTQ4YjYwYWI4MTY3NDQ1MDAzZDg3ZDZkMmFmMjQ4NTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyMiAwOTo0NDoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IDFlNjg0MDRiZDc3M2UuLjBkMWFkOTJlMmQzMzcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2ZvcmsuYwpAQCAtMjEzOSw2ICYjNDM7MjEzOSwxMSBAQCBfX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKAogCXAgPSBkdXBfdGFza19zdHJ1Y3QoY3VycmVudCwgbm9kZSk7CiAJaWYgKCFwKQogCQlnb3RvIGZvcmtfb3V0OwomIzQzOwkvKgomIzQzOwkgKiBNdXN0IHJ1biBiZWZvcmUgdGhlIGZpcnN0IGZhbGxpYmxlIG9wLCBzbyBlcnJvciBwYXRocyBuZXZlcgomIzQzOwkgKiBmcmVlIHRoZSBwYXJlbnQmIzM5O3MgcmV0X3N0YWNrLgomIzQzOwkgKi8KJiM0MzsJZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTsKIAlyZXR2YWwgPSBjb3B5X2V4ZWNfc3RhdGUoY2xvbmVfZmxhZ3MsIHApOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gYmFkX2ZvcmtfZnJlZTsKQEAgLTIxNjUsOCAmIzQzOzIxNzAsNiBAQCBfX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKAogCSAqLwogCXAtJmd0O2NsZWFyX2NoaWxkX3RpZCA9IChjbG9uZV9mbGFncyAmYW1wOyBDTE9ORV9DSElMRF9DTEVBUlRJRCkgPyBhcmdzLSZndDtjaGlsZF90aWQgOiBOVUxMOwogCi0JZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTsKLQogCXJ0X211dGV4X2luaXRfdGFzayhwKTsKIAlyYXdfc3Bpbl9sb2NrX2luaXQoJmFtcDtwLSZndDtibG9ja2VkX2xvY2spOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2gmIzM5O3MgSW1wYWN0IG9uIE1lbW9yeSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1vdmluZyBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgZWFybGllciBpbiBgY29weV9wcm9jZXNzKClgLCByaWdodCBhZnRlciBgZHVwX3Rhc2tfc3RydWN0KClgLiBUaGUgY29tbWVudCBtZW50aW9ucyB0aGF0IHRoaXMgaXMgY3J1Y2lhbCB0byBwcmV2ZW50IGZyZWVpbmcgdGhlIHBhcmVudCYjMzk7cyBgcmV0X3N0YWNrYCBpbiBlcnJvciBwYXRocy4gIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgcHJldmVudHMgYSBwcm9ibGVtIHdpdGggdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2ssIGFuZCB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyB0aGF0IEtNU0FOIG1pZ2h0IGNhdGNoLgoKTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYGR1cF90YXNrX3N0cnVjdCgpYCBpcyBhbGxvY2F0aW5nIGEgbmV3IGB0YXNrX3N0cnVjdGAgYW5kIGNvcHlpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBwYXJlbnQmIzM5O3MgYHRhc2tfc3RydWN0YCBpbnRvIGl0LiAgTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaWYgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socClgIHNldHMgc29tZSBmaWVsZHMsIG1heWJlIGluY2x1ZGluZyBgcmV0X3N0YWNrYCwgdG8gTlVMTCBvciB6ZXJvLCB0aGVuIG1vdmluZyBpdCBlYXJsaWVyIG1lYW5zIHRoZXNlIGZpZWxkcyB3b24mIzM5O3QgaG9sZCB0aGUgcGFyZW50JiMzOTtzIGRhdGEgYW55bW9yZSwgZHVyaW5nIGFuIGVycm9yIHBhdGggd2hlbiBvdGhlciBzdGVwcyAoZS5nLiwgYGNvcHlfZXhlY19zdGF0ZWApIG1pZ2h0IGZhaWwuIFRoaXMgaXMgY3J1Y2lhbDogaWYgdGhvc2UgZXJyb3IgcGF0aHMgd2VyZSB0byByZWxlYXNlIHRoZSBtZW1vcnkgcG9pbnRlZCB0byBieSB0aGUgKnBhcmVudCYjMzk7cyogYHJldF9zdGFja2AsIGFuZCB0aGVuIHRoZSBwYXJlbnQgY29udGludWVkIHRvIHVzZSBpdCwgaXQgd291bGQgYmUgYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIG9yIGEgZG91YmxlIGZyZWUhICBUaGUgcGFyZW50JiMzOTtzIGByZXRfc3RhY2tgIG1pZ2h0IGJlIGEgcG9pbnRlciB0byBpdHMgb3duIHN0cnVjdHVyZXMuCgpXYWl0LCBpcyB0aGlzIHJlYWxseSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSAqaXNzdWUqIHRob3VnaD8gVGhpcyBpcyBhIGZpeCBmb3IgYSAqdXNlLWFmdGVyLWZyZWUqIG9yICpkb3VibGUtZnJlZSosIHdoaWNoIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2guIGBkdXBfdGFza19zdHJ1Y3RgIGluaXRpYWxpemVzIHRoZSBtZW1vcnkgdG8gdGhlIHBhcmVudCYjMzk7cyB2YWx1ZXMsIHNvIGl0JiMzOTtzIG5vdCB1bmluaXRpYWxpemVkIGluIHRoZSBzdHJpY3Qgc2Vuc2UuIFRoZSB3b3JyeSBpcyB0aGF0IGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBwcm9iYWJseSBzZXRzIHNvbWV0aGluZyBsaWtlIGBwLSZndDtyZXRfc3RhY2sgPSBOVUxMYCBvciBzaW1pbGFyLCBhZnRlciB0aGUgY29weS4gIE1vdmluZyB0aGlzIG9wZXJhdGlvbiBlYXJsaWVyIG1lYW5zIGBwLSZndDtyZXRfc3RhY2tgICp3b24mIzM5O3QqIGhhdmUgdGhlIHBhcmVudCYjMzk7cyBwb3RlbnRpYWxseSBpbnZhbGlkIHBvaW50ZXIgYW55bW9yZSBpbiBjYXNlIG9mIGFuIGVycm9yLiBUaGlzIGlzIGEgZGFuZ2xpbmcgcG9pbnRlci9kb3VibGUtZnJlZSBpc3N1ZSwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgc2hvdWxkIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBjb2RlIGZvciBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgdG8gY29uZmlybSB0aGlzIGh1bmNoIGFuZCBydWxlIG91dCBhbnkgdW5leHBlY3RlZCBiZWhhdmlvcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z0cmFjZV9ncmFwaF9pbml0X3Rhc2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzQyPWV4dGVybiB0cmFjZV9mdW5jX2dyYXBoX2VudF90IGZ0cmFjZV9ncmFwaF9lbnRyeTtcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM0My1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTM0NDpleHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNDUtZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xuLS1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmg9MTM1Nj1zdGF0aWMgaW5saW5lIHZvaWQgdW5wYXVzZV9ncmFwaF90cmFjaW5nKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzYzLVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzY0OnN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkgeyB9XG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNjUtc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cbi0tXG5rZXJuZWwvZm9yay5jPTIwMTg9X19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2Vzcyhcbi0tXG5rZXJuZWwvZm9yay5jLTIxNDUtXHQgKi9cbmtlcm5lbC9mb3JrLmM6MjE0NjpcdGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socCk7XG5rZXJuZWwvZm9yay5jLTIxNDctXHRyZXR2YWwgPSBjb3B5X2V4ZWNfc3RhdGUoY2xvbmVfZmxhZ3MsIHApO1xuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMTMxPXZvaWQgZnRyYWNlX2dyYXBoX2luaXRfaWRsZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgaW50IGNwdSlcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE1OS0vKiBBbGxvY2F0ZSBhIHJldHVybiBzdGFjayBmb3IgbmV3bHkgY3JlYXRlZCB0YXNrICovXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTE2MDp2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTExNjEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDgwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgdGhlIGZ1bmN0aW9uIGdyYXBoIHRyYWNlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgLiAgTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gYGtlcm5lbC90cmFjZS9mZ3JhcGguY2AuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgZnJvbSB0aGVyZS4gSSBleHBlY3QgdGhhdCB0aGlzIHJvdXRpbmUgbXVzdCBiZSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgb3IgaW50ZXJuYWwgc3RydWN0dXJlcyB3aGVuIGEgbmV3IHRhc2sgaXMgaW5pdGlhbGl6ZWQuIFBlcmhhcHMgSSBjYW4gd29yayBvdXQgaG93IGEgdGFzayYjMzk7cyBmdW5jdGlvbiBncmFwaCBzdGF0ZSBpcyBpbml0aWFsaXplZCwgd2hhdCBmbGFncyBvciB2YXJpYWJsZXMgYXJlIHNldCBhbmQgdGhlIHJvbGUgaXQgcGxheXMgaW4gdGhlIG92ZXJhbGwgYGZ0cmFjZWAgYXJjaGl0ZWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoaXMgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyB3aWxsIHByb3ZpZGUgdmFsdWFibGUgaW5zaWdodCBpbnRvIGl0cyBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgdHJhY2VyLiBJIGFudGljaXBhdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbGwgaXMgYXQgdGhlIGhlYXJ0IG9mIHRoZSB0cmFjZXImIzM5O3MgcGVyLXRhc2sgdHJhY2tpbmcgd2hpY2ggaXMgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGlubmVyIHdvcmtpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9mZ3JhcGguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE1OTpcdC8qIEFsbG9jYXRlIGEgcmV0dXJuIHN0YWNrIGZvciBuZXdseSBjcmVhdGVkIHRhc2sgKi9cbjExNjA6XHR2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KVxuMTE2MTpcdHtcbjExNjI6XHRcdC8qIE1ha2Ugc3VyZSB3ZSBkbyBub3QgdXNlIHRoZSBwYXJlbnQgcmV0X3N0YWNrICovXG4xMTYzOlx0XHR0LVx1MDAzZXJldF9zdGFjayA9IE5VTEw7XG4xMTY0Olx0XHR0LVx1MDAzZWN1cnJfcmV0X3N0YWNrID0gMDtcbjExNjU6XHRcdHQtXHUwMDNlY3Vycl9yZXRfZGVwdGggPSAtMTtcbjExNjY6XHRcbjExNjc6XHRcdGlmIChmdHJhY2VfZ3JhcGhfYWN0aXZlKSB7XG4xMTY4Olx0XHRcdHVuc2lnbmVkIGxvbmcgKnJldF9zdGFjaztcbjExNjk6XHRcbjExNzA6XHRcdFx0aWYgKFdBUk5fT05fT05DRSghZmdyYXBoX3N0YWNrX2NhY2hlcCkpXG4xMTcxOlx0XHRcdFx0cmV0dXJuO1xuMTE3MjpcdFxuMTE3MzpcdFx0XHRyZXRfc3RhY2sgPSBrbWVtX2NhY2hlX2FsbG9jKGZncmFwaF9zdGFja19jYWNoZXAsIEdGUF9LRVJORUwpO1xuMTE3NDpcdFx0XHRpZiAoIXJldF9zdGFjaylcbjExNzU6XHRcdFx0XHRyZXR1cm47XG4xMTc2Olx0XHRcdGdyYXBoX2luaXRfdGFzayh0LCByZXRfc3RhY2spO1xuMTE3NzpcdFx0fVxuMTE3ODpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA1MgoJCQkJCQkJb3V0cHV0OiAyNTEKCQkJCQkJCXRob3VnaHRzOiAxMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBjb3B5X3Byb2Nlc3MoKWAgQnVnIEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIGRpc2FzdGVyIGluIGBjb3B5X3Byb2Nlc3MoKWAuIEZyb20gd2hhdCBJIGdhdGhlciwgdGhlIGlzc3VlIGJvaWxzIGRvd24gdG8gaG93IGB0LSZndDtyZXRfc3RhY2tgIGludGVyYWN0cyB3aXRoIGVycm9yIGhhbmRsaW5nLiBFc3NlbnRpYWxseSwgaWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgcHJvY2VzcyBjcmVhdGlvbiBhbmQgdGhlIGByZXRfc3RhY2tgIG1pc3Rha2VubHkgaG9sZHMgb250byB0aGUgcGFyZW50JiMzOTtzIHZhbHVlLCBhbmQgdGhlbiB0aGUgZXJyb3IgaGFuZGxpbmcgcm91dGluZSAobGlrZSBgZnJlZV90YXNrKClgKSByZWxlYXNlcyBpdCwgYm9vbeKAlHdlIGhhdmUgYSB1c2UtYWZ0ZXItZnJlZSBvciwgZXZlbiB3b3JzZSwgYSBkb3VibGUtZnJlZSB2dWxuZXJhYmlsaXR5LiBLQVNBTiByaWdodGZ1bGx5IGZsYWdzIHRoaXMgYXMgYSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZSwgYSBjbGFzc2ljIFVBRiBidWcuIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgYW55IGluZm9ybWF0aW9uIGxlYWthZ2UgaW52b2x2ZWQgaGVyZS4KCkdpdmVuIHRoYXQgdGhpcyBpcyBwdXJlbHkgYSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZSwgYW5kIEtBU0FOIGlzIGFscmVhZHkgb24gdGhlIGNhc2UsIEtNU0FOIGlzbiYjMzk7dCBnb2luZyB0byBhZGQgYW55IHZhbHVlLiBJdCYjMzk7cyBub3QgdGhlIHJpZ2h0IHRvb2wgZm9yIHRoaXMgam9iLiBTbywgSSB3aWxsIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAuIE15IHJhdGlvbmFsZSBpcyBjbGVhcjogS0FTQU4gY292ZXJzIHRoZSBrZXkgYXNwZWN0cyBvZiB0aGlzIGJ1Z+KAlHNwZWNpZmljYWxseSwgdGhlIGRldGVjdGlvbiBvZiB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25z4oCUd2hpbGUgS01TQU4mIzM5O3MgZm9jdXMgb24gZGV0ZWN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGRvZXNuJiMzOTt0IGFsaWduIHdpdGggdGhlIG5hdHVyZSBvZiB0aGlzIHBhcnRpY3VsYXIgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCBlYXJsaWVyIGluIGBjb3B5X3Byb2Nlc3MoKWAgdG8gZW5zdXJlIHRoYXQgYHAtXHUwMDNlcmV0X3N0YWNrYCBhbmQgcmVsYXRlZCBmaWVsZHMgYXJlIGluaXRpYWxpemVkIChzZXQgdG8gTlVMTCBvciBuZXdseSBhbGxvY2F0ZWQpIGJlZm9yZSBhbnkgZmFsbGlibGUgb3BlcmF0aW9ucyBvY2N1ci4gUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIGlmIGFuIGVycm9yIG9jY3VycmVkIGVhcmx5IGluIGBjb3B5X3Byb2Nlc3MoKWAgKGUuZy4sIGluIGBjb3B5X2V4ZWNfc3RhdGUoKWApLCB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBjb3VsZCBmcmVlIHRoZSBuZXcgdGFzayBzdHJ1Y3R1cmUgd2hpbGUgaXQgc3RpbGwgaGVsZCBhIGNvcHkgb2YgdGhlIHBhcmVudCYjMzk7cyBgcmV0X3N0YWNrYCBwb2ludGVyIChkdWUgdG8gYGR1cF90YXNrX3N0cnVjdCgpYCkuIFRoaXMgd291bGQgcmVzdWx0IGluIGZyZWVpbmcgdGhlIHBhcmVudCYjMzk7cyBgcmV0X3N0YWNrYCwgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGJ1Zy5cblxuVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAodXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlKSBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBpc3N1ZSBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGludm9sdmUgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLCBhcyBzdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBidWcgdGhpcyBwYXRjaCBhZGRyZXNzZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgZWFybGllciBpbiBgY29weV9wcm9jZXNzKClgIHRvIGVuc3VyZSB0aGF0IGBwLVx1MDAzZXJldF9zdGFja2AgYW5kIHJlbGF0ZWQgZmllbGRzIGFyZSBpbml0aWFsaXplZCAoc2V0IHRvIE5VTEwgb3IgbmV3bHkgYWxsb2NhdGVkKSBiZWZvcmUgYW55IGZhbGxpYmxlIG9wZXJhdGlvbnMgb2NjdXIuIFByaW9yIHRvIHRoaXMgY2hhbmdlLCBpZiBhbiBlcnJvciBvY2N1cnJlZCBlYXJseSBpbiBgY29weV9wcm9jZXNzKClgIChlLmcuLCBpbiBgY29weV9leGVjX3N0YXRlKClgKSwgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggY291bGQgZnJlZSB0aGUgbmV3IHRhc2sgc3RydWN0dXJlIHdoaWxlIGl0IHN0aWxsIGhlbGQgYSBjb3B5IG9mIHRoZSBwYXJlbnQmIzM5O3MgYHJldF9zdGFja2AgcG9pbnRlciAoZHVlIHRvIGBkdXBfdGFza19zdHJ1Y3QoKWApLiBUaGlzIHdvdWxkIHJlc3VsdCBpbiBmcmVlaW5nIHRoZSBwYXJlbnQmIzM5O3MgYHJldF9zdGFja2AsIGxlYWRpbmcgdG8gYSB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSBidWcuXG5cblRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSkgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgaXNzdWUgZG9lcyBub3QgaW52b2x2ZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBpbnZvbHZlIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZCwgYXMgc3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgYnVnIHRoaXMgcGF0Y2ggYWRkcmVzc2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NDoyMC41Mjk5OTc3ODRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAyNDYwMzIzMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlRSQUNFXCIsXG4gICAgXCJGVU5DVElPTl9UUkFDRVJcIixcbiAgICBcIkZVTkNUSU9OX0dSQVBIX1RSQUNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCBlYXJsaWVyIGluIGBjb3B5X3Byb2Nlc3MoKWAgdG8gZW5zdXJlIHRoYXQgYHAtXFx1MDAzZXJldF9zdGFja2AgYW5kIHJlbGF0ZWQgZmllbGRzIGFyZSBpbml0aWFsaXplZCAoc2V0IHRvIE5VTEwgb3IgbmV3bHkgYWxsb2NhdGVkKSBiZWZvcmUgYW55IGZhbGxpYmxlIG9wZXJhdGlvbnMgb2NjdXIuIFByaW9yIHRvIHRoaXMgY2hhbmdlLCBpZiBhbiBlcnJvciBvY2N1cnJlZCBlYXJseSBpbiBgY29weV9wcm9jZXNzKClgIChlLmcuLCBpbiBgY29weV9leGVjX3N0YXRlKClgKSwgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggY291bGQgZnJlZSB0aGUgbmV3IHRhc2sgc3RydWN0dXJlIHdoaWxlIGl0IHN0aWxsIGhlbGQgYSBjb3B5IG9mIHRoZSBwYXJlbnQncyBgcmV0X3N0YWNrYCBwb2ludGVyIChkdWUgdG8gYGR1cF90YXNrX3N0cnVjdCgpYCkuIFRoaXMgd291bGQgcmVzdWx0IGluIGZyZWVpbmcgdGhlIHBhcmVudCdzIGByZXRfc3RhY2tgLCBsZWFkaW5nIHRvIGEgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgYnVnLlxcblxcblRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSkgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgaXNzdWUgZG9lcyBub3QgaW52b2x2ZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBpbnZvbHZlIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZCwgYXMgc3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgYnVnIHRoaXMgcGF0Y2ggYWRkcmVzc2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGluIHRoZSBlcnJvciBwYXRocyBvZiBjb3B5X3Byb2Nlc3MoKS4gV2hlbiBhIHRhc2sgaXMgZHVwbGljYXRlZCB2aWEgZHVwX3Rhc2tfc3RydWN0KCksIHRoZSBjaGlsZCB0YXNrIGluaGVyaXRzIHRoZSBwYXJlbnQncyByZXRfc3RhY2sgcG9pbnRlci4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBwcm9jZXNzIGNyZWF0aW9uIGJlZm9yZSBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKCkgY2xlYXJzIHRoZSBjaGlsZCdzIHJldF9zdGFjaywgdGhlIGVycm9yIHBhdGggKGZyZWVfdGFzayAtXFx1MDAzZSBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKSB3aWxsIGVycm9uZW91c2x5IGZyZWUgdGhlIHBhcmVudCdzIHJldF9zdGFjaywgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlIHdoZW4gdGhlIHBhcmVudCByZXN1bWVzIGV4ZWN1dGlvbi4gVGhlIHBhdGNoIG1vdmVzIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKSBiZWZvcmUgYW55IGZhbGxpYmxlIG9wZXJhdGlvbnMgdG8gcHJldmVudCB0aGlzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggZm9yIGEgcmVhY2hhYmxlIGNvcmUga2VybmVsIGJ1ZywgcmVxdWlyaW5nIGZ0cmFjZSBncmFwaCB0cmFjaW5nIGNvbmZpZ3MgdG8gYmUgZW5hYmxlZC4gTm8gc3BlY2lmaWMgZm9jdXMgc3ltYm9scyBhcmUgbmVlZGVkIHNpbmNlIGNvcHlfcHJvY2VzcygpIGlzIGFscmVhZHkgaGVhdmlseSBmdXp6ZWQgdmlhIGNsb25lL2Zvcmsgc3lzY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ0OjIwLjUzMDAwMjAyNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NDk1ODI1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDhhOGExM2VhOTQ4YjYwYWI4MTY3NDQ1MDAzZDg3ZDZkMmFmMjQ4NTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjIgMDk6NDQ6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmNcXG5pbmRleCAxZTY4NDA0YmQ3NzNlLi4wZDFhZDkyZTJkMzM3IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9mb3JrLmNcXG4rKysgYi9rZXJuZWwvZm9yay5jXFxuQEAgLTIxMzksNiArMjEzOSwxMSBAQCBfX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxcbiBcXHRwID0gZHVwX3Rhc2tfc3RydWN0KGN1cnJlbnQsIG5vZGUpO1xcbiBcXHRpZiAoIXApXFxuIFxcdFxcdGdvdG8gZm9ya19vdXQ7XFxuK1xcdC8qXFxuK1xcdCAqIE11c3QgcnVuIGJlZm9yZSB0aGUgZmlyc3QgZmFsbGlibGUgb3AsIHNvIGVycm9yIHBhdGhzIG5ldmVyXFxuK1xcdCAqIGZyZWUgdGhlIHBhcmVudCdzIHJldF9zdGFjay5cXG4rXFx0ICovXFxuK1xcdGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socCk7XFxuIFxcdHJldHZhbCA9IGNvcHlfZXhlY19zdGF0ZShjbG9uZV9mbGFncywgcCk7XFxuIFxcdGlmIChyZXR2YWwpXFxuIFxcdFxcdGdvdG8gYmFkX2ZvcmtfZnJlZTtcXG5AQCAtMjE2NSw4ICsyMTcwLDYgQEAgX19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcyhcXG4gXFx0ICovXFxuIFxcdHAtXFx1MDAzZWNsZWFyX2NoaWxkX3RpZCA9IChjbG9uZV9mbGFncyBcXHUwMDI2IENMT05FX0NISUxEX0NMRUFSVElEKSA/IGFyZ3MtXFx1MDAzZWNoaWxkX3RpZCA6IE5VTEw7XFxuIFxcbi1cXHRmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApO1xcbi1cXG4gXFx0cnRfbXV0ZXhfaW5pdF90YXNrKHApO1xcbiBcXHRyYXdfc3Bpbl9sb2NrX2luaXQoXFx1MDAyNnAtXFx1MDAzZWJsb2NrZWRfbG9jayk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NDoyMS45OTU0ODE3MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExODY2NzU1NTU5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVFJBQ0VcIixcbiAgICBcIkZVTkNUSU9OX1RSQUNFUlwiLFxuICAgIFwiRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGluIHRoZSBlcnJvciBwYXRocyBvZiBjb3B5X3Byb2Nlc3MoKS4gV2hlbiBhIHRhc2sgaXMgZHVwbGljYXRlZCB2aWEgZHVwX3Rhc2tfc3RydWN0KCksIHRoZSBjaGlsZCB0YXNrIGluaGVyaXRzIHRoZSBwYXJlbnQncyByZXRfc3RhY2sgcG9pbnRlci4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBwcm9jZXNzIGNyZWF0aW9uIGJlZm9yZSBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKCkgY2xlYXJzIHRoZSBjaGlsZCdzIHJldF9zdGFjaywgdGhlIGVycm9yIHBhdGggKGZyZWVfdGFzayAtXFx1MDAzZSBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKSB3aWxsIGVycm9uZW91c2x5IGZyZWUgdGhlIHBhcmVudCdzIHJldF9zdGFjaywgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlIHdoZW4gdGhlIHBhcmVudCByZXN1bWVzIGV4ZWN1dGlvbi4gVGhlIHBhdGNoIG1vdmVzIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKSBiZWZvcmUgYW55IGZhbGxpYmxlIG9wZXJhdGlvbnMgdG8gcHJldmVudCB0aGlzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggZm9yIGEgcmVhY2hhYmxlIGNvcmUga2VybmVsIGJ1ZywgcmVxdWlyaW5nIGZ0cmFjZSBncmFwaCB0cmFjaW5nIGNvbmZpZ3MgdG8gYmUgZW5hYmxlZC4gTm8gc3BlY2lmaWMgZm9jdXMgc3ltYm9scyBhcmUgbmVlZGVkIHNpbmNlIGNvcHlfcHJvY2VzcygpIGlzIGFscmVhZHkgaGVhdmlseSBmdXp6ZWQgdmlhIGNsb25lL2Zvcmsgc3lzY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDhhOGExM2VhOTQ4YjYwYWI4MTY3NDQ1MDAzZDg3ZDZkMmFmMjQ4NTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAwOTo0NDoxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jXG5pbmRleCAxZTY4NDA0YmQ3NzNlLi4wZDFhZDkyZTJkMzM3IDEwMDY0NFxuLS0tIGEva2VybmVsL2ZvcmsuY1xuKysrIGIva2VybmVsL2ZvcmsuY1xuQEAgLTIxMzksNiArMjEzOSwxMSBAQCBfX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxuIFx0cCA9IGR1cF90YXNrX3N0cnVjdChjdXJyZW50LCBub2RlKTtcbiBcdGlmICghcClcbiBcdFx0Z290byBmb3JrX291dDtcbitcdC8qXG4rXHQgKiBNdXN0IHJ1biBiZWZvcmUgdGhlIGZpcnN0IGZhbGxpYmxlIG9wLCBzbyBlcnJvciBwYXRocyBuZXZlclxuK1x0ICogZnJlZSB0aGUgcGFyZW50J3MgcmV0X3N0YWNrLlxuK1x0ICovXG4rXHRmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApO1xuIFx0cmV0dmFsID0gY29weV9leGVjX3N0YXRlKGNsb25lX2ZsYWdzLCBwKTtcbiBcdGlmIChyZXR2YWwpXG4gXHRcdGdvdG8gYmFkX2ZvcmtfZnJlZTtcbkBAIC0yMTY1LDggKzIxNzAsNiBAQCBfX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxuIFx0ICovXG4gXHRwLVx1MDAzZWNsZWFyX2NoaWxkX3RpZCA9IChjbG9uZV9mbGFncyBcdTAwMjYgQ0xPTkVfQ0hJTERfQ0xFQVJUSUQpID8gYXJncy1cdTAwM2VjaGlsZF90aWQgOiBOVUxMO1xuIFxuLVx0ZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTtcbi1cbiBcdHJ0X211dGV4X2luaXRfdGFzayhwKTtcbiBcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZwLVx1MDAzZWJsb2NrZWRfbG9jayk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NDoyMS45OTU0ODI5MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NzIxMTg5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBGdHJhY2UgYW5kIGBjb3B5X3Byb2Nlc3MoKWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGZvciBga2VybmVsL2ZvcmsuY2AsIHNwZWNpZmljYWxseSB0aGUgYGNvcHlfcHJvY2VzcygpYCBmdW5jdGlvbi4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpcyBhIHJlb3JkZXJpbmcgb2YgZnVuY3Rpb24gY2FsbHMuIFdlJ3JlIG1vdmluZyBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgZWFybGllciBpbiB0aGUgcHJvY2Vzcy4gIFRoZSBnb2FsIGlzIHRvIGVuc3VyZSBpdCBoYXBwZW5zICpiZWZvcmUqIG90aGVyIHBvdGVudGlhbGx5IGZhaWxpbmcgb3BlcmF0aW9ucywgbGlrZSBgY29weV9leGVjX3N0YXRlKClgLiBUaGUgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaWYgYW4gZXJyb3Igb2NjdXJzICphZnRlciogYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKWAsIHRoZSBlcnJvciBjbGVhbnVwIHBhdGhzIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgY2xlYW5pbmcgdXAgdGhlIHBhcmVudCdzIGByZXRfc3RhY2tgLiBUaGlzIGlzIGEgZGVmZW5zaXZlIG1vdmUgdG8gYXZvaWQgbWVtb3J5IGxlYWtzIG9yIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uXG5cblRoZSBjb21tZW50IGluIHRoZSBjb2RlIGhpZ2hsaWdodHMgdGhpcyBwb2ludCBjbGVhcmx5OiBcIk11c3QgcnVuIGJlZm9yZSB0aGUgZmlyc3QgZmFsbGlibGUgb3AsIHNvIGVycm9yIHBhdGhzIG5ldmVyIGZyZWUgdGhlIHBhcmVudCdzIHJldF9zdGFjay5cIiBJIGdldCBpdC4gIGBjb3B5X3Byb2Nlc3MoKWAgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgZnVuZGFtZW50YWwgdG8gcHJvY2VzcyBjcmVhdGlvbiB2aWEgYGNsb25lYCwgYGZvcmtgLCBhbmQgYHZmb3JrYC4gIFNpbmNlIGBjb3B5X3Byb2Nlc3NgIGlzIGFscmVhZHkgaGVhdmlseSBmdXp6ZWQsIHRoaXMgY2hhbmdlIGlzIHdvcnRoIGZ1enppbmcgYXMgaXQgZXhwbGljaXRseSBhZGRyZXNzZXMgZXJyb3IgcGF0aHMuXG5cblRoZSBrZXkgaXMgdGhhdCB0aGlzIHJlb3JkZXJpbmcgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYWltZWQgYXQgcHJldmVudGluZyBhIHJlc291cmNlIGxlYWsgb3IsIHdvcnNlLCBhIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkuICBCZWNhdXNlIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYGNvcHlfcHJvY2Vzc2AsIGEgY29yZSBrZXJuZWwgZnVuY3Rpb24sIGFueSBjaGFuZ2Ugd2FycmFudHMgY2FyZWZ1bCBzY3J1dGlueSBhbmQgZnV6emluZywgZXZlbiBpZiB0aGUgY2hhbmdlIHRvdWNoZXMgb24gYW4gYXJlYSBsaWtlIGZ0cmFjZSB0aGF0IG1pZ2h0IG5vdCBiZSBhIHVzdWFsIGZ1enppbmcgdGFyZ2V0LlxuXG5XYWl0IGEgc2Vjb25kLiBOb3cgSSdtIHRoaW5raW5nIGFib3V0IGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYC4gIFRoYXTigJlzIHBhcnQgb2YgdGhlIGZ0cmFjZSBpbmZyYXN0cnVjdHVyZS4gIEdlbmVyYWxseSwgd2UgZG9uJ3QgemVybyBpbiBvbiB0cmFjaW5nIGZlYXR1cmVzIGR1cmluZyBmdXp6aW5nLCBidXQgdGhlIHByb3hpbWl0eSB0byBhIGNvcmUgZnVuY3Rpb24gZG9lcyBtYWtlIGl0IGEgcG90ZW50aWFsIGZvY3VzLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE3LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDQ6MjkuODY3NjA0MDIyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTY4NjUyNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnRyYWNlX2dyYXBoX2luaXRfdGFza1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEzNDI9ZXh0ZXJuIHRyYWNlX2Z1bmNfZ3JhcGhfZW50X3QgZnRyYWNlX2dyYXBoX2VudHJ5O1xcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM0My1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNDQ6ZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM0NS1leHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEzNTY9c3RhdGljIGlubGluZSB2b2lkIHVucGF1c2VfZ3JhcGhfdHJhY2luZyh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzYzLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTM2NDpzdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgfVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM2NS1zdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgfVxcbi0tXFxua2VybmVsL2ZvcmsuYz0yMDE4PV9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXFxuLS1cXG5rZXJuZWwvZm9yay5jLTIxNDUtXFx0ICovXFxua2VybmVsL2ZvcmsuYzoyMTQ2OlxcdGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socCk7XFxua2VybmVsL2ZvcmsuYy0yMTQ3LVxcdHJldHZhbCA9IGNvcHlfZXhlY19zdGF0ZShjbG9uZV9mbGFncywgcCk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9MTEzMT12b2lkIGZ0cmFjZV9ncmFwaF9pbml0X2lkbGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjcHUpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE1OS0vKiBBbGxvY2F0ZSBhIHJldHVybiBzdGFjayBmb3IgbmV3bHkgY3JlYXRlZCB0YXNrICovXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjExNjA6dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE2MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ0OjMxLjc2NDQ3NzU3NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODg0NTk4MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW5pdGlhbCBUaG91Z2h0cyBvbiBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AqKlxuXG5Pa2F5LCBzbyBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgaXMgZGVmaW5lZCBpbiBga2VybmVsL3RyYWNlL2ZncmFwaC5jYC4gSW1tZWRpYXRlbHksIG15IHNwaWRleS1zZW5zZSBpcyB0aW5nbGluZyDigJMgaXQncyBsaWtlbHkgZGVwZW5kZW50IG9uIGBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYC4gVGhhdCdzIHRoZSB0eXBpY2FsIHBhdHRlcm4sIGFuZCB0aGlzIGlzIHRyYWNpbmctcmVsYXRlZCBjb2RlLCBzbyBpdCdzIGEgdmVyeSBoaWdoIHByb2JhYmlsaXR5LiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHF1aWNrbHk7IGl0J3MgYmFzaWMgZHVlIGRpbGlnZW5jZS4gVGhlIG1vc3QgZGlyZWN0IHBhdGhzIHdvdWxkIGJlIGVpdGhlciB0byBjaGVjayB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgYGtlcm5lbC90cmFjZWAgZGlyZWN0b3J5LCBvciBtYXliZSBldmVuIGxvb2sgYXQgdGhlIGluY2x1ZGUgZ3VhcmRzIGRpcmVjdGx5IHdpdGhpbiBgZmdyYXBoLmNgIGl0c2VsZi4gSXTigJlzIGEgdHJpdmlhbCBjaGVjayBmb3IgbWUsIGJ1dCBpdCBpcyBpbXBvcnRhbnQgdG8gYmUgY29uZmlkZW50IG9uIGJ1aWxkIHByZXJlcXVpc2l0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MzgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NDozNS4yNTI5NDAwMTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwMTM5Njk5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmZ3JhcGgub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTI4ND1mdHJhY2VfZnVuY190IGZ0cmFjZV9vcHNfZ2V0X2Z1bmMoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTM0MS0gKiBTVUJPUCAgLSBJcyBjb250cm9sbGVkIGJ5IGFub3RoZXIgb3AgaW4gZmllbGQgbWFuYWdlZC5cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjM0MjogKiBHUkFQSCAgLSBJcyBhIGNvbXBvbmVudCBvZiB0aGUgZmdyYXBoX29wcyBzdHJ1Y3R1cmVcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTM0My0gKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg9MTIzMT1zdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEyNDAtXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMjQxOnN0cnVjdCBmZ3JhcGhfb3BzO1xcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTI0Mi1cXG4tLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg9MTI0ND10eXBlZGVmIHZvaWQgKCp0cmFjZV9mdW5jX2dyYXBoX3JldF90KShzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqLFxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTI0NTpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGZncmFwaF9vcHMgKixcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEyNDYtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqKTsgLyogcmV0dXJuICovXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMjQ3PXR5cGVkZWYgaW50ICgqdHJhY2VfZnVuY19ncmFwaF9lbnRfdCkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKixcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEyNDg6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGZncmFwaF9vcHMgKixcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEyNDktXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICopOyAvKiBlbnRyeSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMjUxPWV4dGVybiBpbnQgZnRyYWNlX2dyYXBoX2VudHJ5X3N0dWIoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLFxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTI1MjpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEyNTMtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncyk7XFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMjU0PWJvb2wgZnRyYWNlX3BpZHNfZW5hYmxlZChzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTI1Ny1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEyNTg6c3RydWN0IGZncmFwaF9vcHMge1xcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTI1OS1cXHR0cmFjZV9mdW5jX2dyYXBoX2VudF90XFx0XFx0ZW50cnlmdW5jO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzA3PXVuc2lnbmVkIGxvbmcgZnRyYWNlX2dyYXBoX3JldF9hZGRyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50ICppZHgsXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzA4LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIHJldCwgdW5zaWduZWQgbG9uZyAqcmV0cCk7XFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzA5OnVuc2lnbmVkIGxvbmcgKmZncmFwaF9nZXRfdGFza192YXIoc3RydWN0IGZncmFwaF9vcHMgKmdvcHMpO1xcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTMxMC1cXG4tLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTMyMC1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzMjE6ZXh0ZXJuIGludCByZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoc3RydWN0IGZncmFwaF9vcHMgKm9wcyk7XFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzIyOmV4dGVybiB2b2lkIHVucmVnaXN0ZXJfZnRyYWNlX2dyYXBoKHN0cnVjdCBmZ3JhcGhfb3BzICpvcHMpO1xcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTMyMy1cXG4tLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg9MTM2Nj1zdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfaWRsZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgaW50IGNwdSkgeyB9XFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzY3LVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTM2ODovKiBEZWZpbmUgYXMgbWFjcm9zIGFzIGZncmFwaF9vcHMgbWF5IG5vdCBiZSBkZWZpbmVkICovXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzY5LSNkZWZpbmUgcmVnaXN0ZXJfZnRyYWNlX2dyYXBoKG9wcykgKHsgLTE7IH0pXFxuLS1cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU9OTI9b2JqLSQoQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UpICs9IGJsa3RyYWNlLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6OTM6b2JqLSQoQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUikgKz0gZmdyYXBoLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtOTQtaWZlcSAoJChDT05GSUdfQkxPQ0spLHkpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDEtICogRm9yIHR5cGUgd2l0aCBcXFwiYml0bWFwIG9mIGZncmFwaF9hcnJheSBpbmRleFxcXCIgKEZHUkFQSF9UWVBFX0JJVE1BUCk6XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjQyOiAqICBiaXRzOiAxMiAtIDI3XFx0VGhlIGJpdG1hcCBvZiBmZ3JhcGhfb3BzIGZncmFwaF9hcnJheSBpbmRleFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy00My0gKlxcdFxcdFxcdFRoYXQgaXMsIGl0J3MgYSBiaXRtYXNrIG9mIDAtMTUgKDE2IGJpdHMpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNTYtICogVGhhdCBpcywgYXQgdGhlIGVuZCBvZiBmdW5jdGlvbl9ncmFwaF9lbnRlciwgaWYgdGhlIGZpcnN0IGFuZCBmb3J0aFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo1NzogKiBmZ3JhcGhfb3BzIG9uIHRoZSBmZ3JhcGhfYXJyYXlbXSAoaW5kZXggMCBhbmQgMykgbmVlZHMgdGhlaXIgcmV0ZnVuYyBjYWxsZWRcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6NTg6ICogb24gdGhlIHJldHVybiBvZiB0aGUgZnVuY3Rpb24gYmVpbmcgdHJhY2VkLCBhbmQgdGhlIGZvcnRoIGZncmFwaF9vcHNcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNTktICogc3RvcmVkIHR3byB3b3JkcyBvZiBkYXRhLCB0aGlzIGlzIHdoYXQgd2lsbCBiZSBvbiB0aGUgdGFzaydzIHNoYWRvd1xcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTcxLSAqIHwgICAgICAgICAqb3IgcHV0IGFub3RoZXIgd2F5KiAgICAgICAgICAgICAgIHxcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6NzI6ICogfCAoMyBcXHUwMDNjXFx1MDAzYyBGR1JBUEhfREFUQV9JTkRFWF9TSElGVCl8IFxcXFwgICAgICAgICAgfCBUaGlzIGlzIGZvciBmZ3JhcGhfb3BzWzNdLlxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy03My0gKiB8ICgoMiAtIDEpIFxcdTAwM2NcXHUwMDNjIEZHUkFQSF9EQVRBX1NISUZUKXwgXFxcXCAgICAgICAgICB8IFRoZSBkYXRhIHNpemUgaXMgMiB3b3Jkcy5cXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMTU9ZW51bSB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTY1LS8qXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjE2NjogKiBFYWNoIGZncmFwaF9vcHMgaGFzIGEgcmVzZXJ2ZWQgdW5zaWduZWQgbG9uZyBhdCB0aGUgZW5kICh0b3ApIG9mIHRoZVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xNjctICogcmV0X3N0YWNrIHRvIHN0b3JlIHRhc2sgc3BlY2lmaWMgc3RhdGUuXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9MTc1PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZmdyYXBoX3N0YWNrX2NhY2hlcDtcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTc2LVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxNzc6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzICpmZ3JhcGhfYXJyYXlbRkdSQVBIX0FSUkFZX1NJWkVdO1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xNzgtc3RhdGljIHVuc2lnbmVkIGxvbmcgZmdyYXBoX2FycmF5X2JpdG1hc2s7XFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9Mjg3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtYWtlX2RhdGFfdHlwZV92YWwoaW50IGlkeCwgaW50IHNpemUsIGludCBvZmZzZXQpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMjk0LS8qIGZ0cmFjZV9ncmFwaF9lbnRyeSBzZXQgdG8gdGhpcyB0byB0ZWxsIHNvbWUgYXJjaHMgdG8gcnVuIGZ1bmN0aW9uIGdyYXBoICovXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjI5NTpzdGF0aWMgaW50IGVudHJ5X3J1bihzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsIHN0cnVjdCBmZ3JhcGhfb3BzICpvcHMsXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTI5Ni1cXHRcXHQgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzAxLS8qIGZ0cmFjZV9ncmFwaF9yZXR1cm4gc2V0IHRvIHRoaXMgdG8gdGVsbCBzb21lIGFyY2hzIHRvIHJ1biBmdW5jdGlvbiBncmFwaCAqL1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzozMDI6c3RhdGljIHZvaWQgcmV0dXJuX3J1bihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsIHN0cnVjdCBmZ3JhcGhfb3BzICpvcHMsXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTMwMy1cXHRcXHQgICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0zMjI9c3RhdGljIHZvaWQgcmV0X3N0YWNrX2luaXRfdGFza192YXJzKHVuc2lnbmVkIGxvbmcgKnJldF9zdGFjaylcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zMzQtICogUmVzZXJ2ZXMgc3BhY2Ugb2YgdXAgdG8gRkdSQVBIX01BWF9EQVRBX1NJWkUgYnl0ZXMgb24gdGhlXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjMzNTogKiB0YXNrJ3MgcmV0X3N0YWNrIHNoYWRvdyBzdGFjaywgZm9yIGEgZ2l2ZW4gZmdyYXBoX29wcyBkdXJpbmdcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzM2LSAqIHRoZSBlbnRyeWZ1bmMoKSBjYWxsLiBJZiBlbnRyeWZ1bmMoKSByZXR1cm5zIHplcm8sIHRoZSBzdG9yYWdlXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTMzNy0gKiBpcyBkaXNjYXJkZWQuIEFuIGVudHJ5ZnVuYygpIGNhbiBvbmx5IGNhbGwgdGhpcyBvbmNlIHBlciBpdGVyYXRpb24uXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjMzODogKiBUaGUgZmdyYXBoX29wcyByZXRmdW5jKCkgY2FuIHJldHJpZXZlIHRoaXMgc3RvcmVkIGRhdGEgd2l0aFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zMzktICogZmdyYXBoX3JldHJpZXZlX2RhdGEoKS5cXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0zNDY9dm9pZCAqZmdyYXBoX3Jlc2VydmVfZGF0YShpbnQgaWR4LCBpbnQgc2l6ZV9ieXRlcylcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zODEtICogZmdyYXBoX3JldHJpZXZlX2RhdGEgLSBSZXRyaWV2ZSBzdG9yZWQgZGF0YSBmcm9tIGZncmFwaF9yZXNlcnZlX2RhdGEoKVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzozODI6ICogQGlkeDpcXHR0aGUgaW5kZXggb2YgZmdyYXBoX2FycmF5IChmZ3JhcGhfb3BzOjppZHgpXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTM4My0gKiBAc2l6ZV9ieXRlczogcG9pbnRlciB0byByZXRyaWV2ZWQgZGF0YSBzaXplLlxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0zODQtICpcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6Mzg1OiAqIFRoaXMgaXMgdG8gYmUgY2FsbGVkIGJ5IGEgZmdyYXBoX29wcyByZXRmdW5jKCksIHRvIHJldHJpZXZlIGRhdGEgdGhhdFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzozODY6ICogd2FzIHN0b3JlZCBieSB0aGUgZmdyYXBoX29wcyBlbnRyeWZ1bmMoKSBvbiB0aGUgZnVuY3Rpb24gZW50cnkuXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTM4Ny0gKiBUaGF0IGlzLCB0aGlzIHdpbGwgcmV0cmlldmUgdGhlIGRhdGEgdGhhdCB3YXMgcmVzZXJ2ZWQgb24gdGhlXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTM4OC0gKiBlbnRyeSBvZiB0aGUgZnVuY3Rpb24gdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgZXhpdCBvZiB0aGUgZnVuY3Rpb25cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6Mzg5OiAqIHRoYXQgdGhlIGZncmFwaF9vcHMgcmV0ZnVuYygpIGlzIGNhbGxlZCBvbi5cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMzkwLSAqXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9Mzk1PXZvaWQgKmZncmFwaF9yZXRyaWV2ZV9kYXRhKGludCBpZHgsIGludCAqc2l6ZV9ieXRlcylcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy00MDMtICpcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6NDA0OiAqIEV2ZXJ5IHJlZ2lzdGVyZWQgZmdyYXBoX29wcyBoYXMgYSB0YXNrIHN0YXRlIHZhcmlhYmxlXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQwNS0gKiByZXNlcnZlZCBvbiB0aGUgdGFzaydzIHJldF9zdGFjay4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQwNy0gKlxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo0MDg6ICogUmV0dXJucyB0aGUgYWRkcmVzcyB0byB0aGUgZmdyYXBoX29wcyBAZ29wcyB0YXNrcyBzcGVjaWZpY1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy00MDktICogdW5zaWduZWQgbG9uZyB2YXJpYWJsZS5cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDEwLSAqL1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo0MTE6dW5zaWduZWQgbG9uZyAqZmdyYXBoX2dldF90YXNrX3ZhcihzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcylcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNDEyLXtcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz00MzQ9Z2V0X3JldF9zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBvZmZzZXQsIGludCAqZnJhbWVfb2Zmc2V0KVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQ1NC0gKiBmZ3JhcGhfcmV0cmlldmVfcGFyZW50X2RhdGEgLSBnZXQgZGF0YSBmcm9tIGEgcGFyZW50IGZ1bmN0aW9uXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjQ1NTogKiBAaWR4OiBUaGUgaW5kZXggaW50byB0aGUgZmdyYXBoX2FycmF5IChmZ3JhcGhfb3BzOjppZHgpXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTQ1Ni0gKiBAc2l6ZV9ieXRlczogQSBwb2ludGVyIHRvIHJldHJpZXZlZCBkYXRhIHNpemVcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz01MjE9aW50IGZ0cmFjZV9ncmFwaF9lbnRyeV9zdHViKHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6NTIyOlxcdFxcdFxcdCAgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNTIzLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTUyOD1zdGF0aWMgdm9pZCBmdHJhY2VfZ3JhcGhfcmV0X3N0dWIoc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo1Mjk6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNTMwLVxcdFxcdFxcdFxcdCAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy01MzMtXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjUzNDpzdGF0aWMgc3RydWN0IGZncmFwaF9vcHMgZmdyYXBoX3N0dWIgPSB7XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTUzNS1cXHQuZW50cnlmdW5jID0gZnRyYWNlX2dyYXBoX2VudHJ5X3N0dWIsXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtNTM4LVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzo1Mzk6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzICpmZ3JhcGhfZGlyZWN0X2dvcHMgPSBcXHUwMDI2ZmdyYXBoX3N0dWI7XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTU0MC1ERUZJTkVfU1RBVElDX0NBTEwoZmdyYXBoX2Z1bmMsIGZ0cmFjZV9ncmFwaF9lbnRyeV9zdHViKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz02NTI9aW50IGZ1bmN0aW9uX2dyYXBoX2VudGVyX3JlZ3ModW5zaWduZWQgbG9uZyByZXQsIHVuc2lnbmVkIGxvbmcgZnVuYyxcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy02ODYtXFx0XFx0XFx0XFx0XFx0IHNpemVvZihmZ3JhcGhfYXJyYXlfYml0bWFzaykgKiBCSVRTX1BFUl9CWVRFKSB7XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjY4NzpcXHRcXHRcXHRzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyA9IFJFQURfT05DRShmZ3JhcGhfYXJyYXlbaV0pO1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy02ODgtXFx0XFx0XFx0aW50IHNhdmVfY3Vycl9yZXRfc3RhY2s7XFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9ODEyPV9fZnRyYWNlX3JldHVybl90b19oYW5kbGVyKHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MsIHVuc2lnbmVkIGxvbmcgZnJhbWVfcG9pbnRlcilcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy04NTYtXFx0XFx0Zm9yX2VhY2hfc2V0X2JpdChpLCBcXHUwMDI2Yml0bWFwLCBzaXplb2YoYml0bWFwKSAqIEJJVFNfUEVSX0JZVEUpIHtcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6ODU3OlxcdFxcdFxcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzID0gUkVBRF9PTkNFKGZncmFwaF9hcnJheVtpXSk7XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTg1OC1cXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMDEyPXZvaWQgZmdyYXBoX2luaXRfb3BzKHN0cnVjdCBmdHJhY2Vfb3BzICpkc3Rfb3BzLFxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEwMzEtICovXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjEwMzI6dm9pZCBmdHJhY2Vfc3R1Yl9ncmFwaChzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMDMzLVxcdFxcdCAgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMTk2PXN0YXRpYyBpbnQgZmdyYXBoX3BpZF9mdW5jKHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTE5NzpcXHRcXHRcXHQgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE5OC1cXHRcXHRcXHQgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTEyMTU9dm9pZCBmZ3JhcGhfdXBkYXRlX3BpZF9mdW5jKHZvaWQpXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTEyMTYte1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMjE3OlxcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzO1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMjE4LVxcdHN0cnVjdCBmdHJhY2Vfb3BzICpvcDtcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMjI0LVxcdFxcdGlmIChvcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGVFJBQ0VfT1BTX0ZMX1BJRCkge1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMjI1OlxcdFxcdFxcdGdvcHMgPSBjb250YWluZXJfb2Yob3AsIHN0cnVjdCBmZ3JhcGhfb3BzLCBvcHMpO1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMjI2LVxcdFxcdFxcdGdvcHMtXFx1MDAzZWVudHJ5ZnVuYyA9IGZ0cmFjZV9waWRzX2VuYWJsZWQob3ApID9cXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMjY4PXN0YXRpYyB2b2lkIGluaXRfdGFza192YXJzKGludCBpZHgpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTI4NS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTI4NjpzdGF0aWMgdm9pZCBmdHJhY2VfZ3JhcGhfZW5hYmxlX2RpcmVjdChib29sIGVuYWJsZV9icmFuY2gsIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzKVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMjg3LXtcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMzI5PXN0YXRpYyBpbnQgZmdyYXBoX2NwdV9pbml0KHVuc2lnbmVkIGludCBjcHUpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTMzNS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTMzNjppbnQgcmVnaXN0ZXJfZnRyYWNlX2dyYXBoKHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzKVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMzM3LXtcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMzU3LVxcdGlmICghZmdyYXBoX2luaXRpYWxpemVkKSB7XFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjEzNTg6XFx0XFx0cmV0ID0gY3B1aHBfc2V0dXBfc3RhdGUoQ1BVSFBfQVBfT05MSU5FX0RZTiwgXFxcImZncmFwaDpvbmxpbmVcXFwiLFxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMzU5LVxcdFxcdFxcdFxcdFxcdGZncmFwaF9jcHVfaW5pdCwgTlVMTCk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTQyNS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTQyNjp2b2lkIHVucmVnaXN0ZXJfZnRyYWNlX2dyYXBoKHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzKVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xNDI3LXtcXG4tLVxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYz00Nz1zdGF0aWMgREVGSU5FX01VVEVYKGZwcm9iZV9tdXRleCk7XFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jOjQ4OnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyBmcHJvYmVfZ3JhcGhfb3BzO1xcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy00OS1cXG4tLVxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYz0yMDE9c3RhdGljIGlubGluZSB2b2lkIHJlYWRfZnByb2JlX2hlYWRlcih1bnNpZ25lZCBsb25nICpzdGFjayxcXG4tLVxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy0yMTMtICogZnByb2JlIHNoYWRvdyBzdGFjayBtYW5hZ2VtZW50Olxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYzoyMTQ6ICogU2luY2UgZnByb2JlIHNoYXJlcyBhIHNpbmdsZSBmZ3JhcGhfb3BzLCBpdCBuZWVkcyB0byBzaGFyZSB0aGUgc3RhY2sgZW50cnlcXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtMjE1LSAqIGFtb25nIHRoZSBwcm9iZXMgb24gdGhlIHNhbWUgZnVuY3Rpb24gZXhpdC4gTm90ZSB0aGF0IGEgbmV3IHByb2JlIGNhbiBiZVxcbi0tXFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jPTIzMT1zdGF0aWMgaW5saW5lIGludCBfX2Zwcm9iZV9rcHJvYmVfaGFuZGxlcih1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCxcXG4tLVxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy0yNTItXFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jOjI1MzpzdGF0aWMgaW50IGZwcm9iZV9mZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLCBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtMjU0LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKTtcXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM9MjU1PXN0YXRpYyB2b2lkIGZwcm9iZV9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYzoyNTY6XFx0XFx0XFx0ICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtMjU3LVxcdFxcdFxcdCAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncyk7XFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jLTI1OC1cXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM6MjU5OnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyBmcHJvYmVfZ3JhcGhfb3BzID0ge1xcbmtlcm5lbC90cmFjZS9mcHJvYmUuYy0yNjAtXFx0LmVudHJ5ZnVuY1xcdD0gZnByb2JlX2ZncmFwaF9lbnRyeSxcXG4tLVxcbmtlcm5lbC90cmFjZS9mcHJvYmUuYz01NDM9c3RhdGljIHZvaWQgZnByb2JlX3JlbW92ZV9pcHModW5zaWduZWQgbG9uZyAqaXBzLCB1bnNpZ25lZCBpbnQgY250KVxcbi0tXFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jLTU1Mi1cXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM6NTUzOi8qIGZncmFwaF9vcHMgY2FsbGJhY2ssIHRoaXMgcHJvY2Vzc2VzIGZwcm9iZXMgd2hpY2ggaGF2ZSBleGl0X2hhbmRsZXIuICovXFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jOjU1NDpzdGF0aWMgaW50IGZwcm9iZV9mZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLCBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvZnByb2JlLmMtNTU1LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jPTY1MD1zdGF0aWMgdm9pZCBmcHJvYmVfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSxcXG5rZXJuZWwvdHJhY2UvZnByb2JlLmM6NjUxOlxcdFxcdFxcdCAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL2Zwcm9iZS5jLTY1Mi1cXHRcXHRcXHQgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM9ODQxPXN0YXRpYyBpbnQgcHJvZmlsZV9ncmFwaF9lbnRyeShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jOjg0MjpcXHRcXHRcXHQgICAgICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTg0My1cXHRcXHRcXHQgICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYz04NjY9c3RhdGljIHZvaWQgcHJvZmlsZV9ncmFwaF9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYzo4Njc6XFx0XFx0XFx0XFx0IHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy04NjgtXFx0XFx0XFx0XFx0IHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtOTE2LVxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYzo5MTc6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzIGZwcm9maWxlcl9vcHMgPSB7XFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTkxOC1cXHQuZW50cnlmdW5jID0gXFx1MDAyNnByb2ZpbGVfZ3JhcGhfZW50cnksXFxuLS1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM9NDQ1MT1zdGF0aWMgdm9pZCBwcmludF9zdWJvcHMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCBzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKVxcbi0tXFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTQ0NjUtXFx0XFx0aWYgKHN1Ym9wcy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGVFJBQ0VfT1BTX0ZMX0dSQVBIKSB7XFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jOjQ0NjY6XFx0XFx0XFx0c3RydWN0IGZncmFwaF9vcHMgKmdvcHM7XFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTQ0NjctXFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jOjQ0Njg6XFx0XFx0XFx0Z29wcyA9IGNvbnRhaW5lcl9vZihzdWJvcHMsIHN0cnVjdCBmZ3JhcGhfb3BzLCBvcHMpO1xcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy00NDY5LVxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiB7ZW50OiVwUyByZXQ6JXBTfVxcXCIsXFxuLS1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM9ODQ5Nz1fX2luaXQgdm9pZCBmdHJhY2VfaW5pdF9nbG9iYWxfYXJyYXlfb3BzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtODUwMi1cXHRmdHJhY2VfaW5pdF90cmFjZV9hcnJheSh0cik7XFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jOjg1MDM6XFx0aW5pdF9hcnJheV9mZ3JhcGhfb3BzKHRyLCB0ci1cXHUwMDNlb3BzKTtcXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtODUwNC19XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuaD0zMzM9c3RydWN0IHRyYWNlX2FycmF5IHtcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5oLTQzNy0jaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUlxcbmtlcm5lbC90cmFjZS90cmFjZS5oOjQzODpcXHRzdHJ1Y3QgZmdyYXBoX29wc1xcdCpnb3BzO1xcbmtlcm5lbC90cmFjZS90cmFjZS5oLTQzOS0jZW5kaWZcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5oPTgxNz12b2lkIHByaW50X3RyYWNlX2hlYWRlcihzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcik7XFxua2VybmVsL3RyYWNlL3RyYWNlLmgtODE4LVxcbmtlcm5lbC90cmFjZS90cmFjZS5oOjgxOTp2b2lkIHRyYWNlX2dyYXBoX3JldHVybihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS90cmFjZS5oLTgyMC1cXHRcXHRcXHRzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKTtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDo4MjE6aW50IHRyYWNlX2dyYXBoX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSwgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL3RyYWNlLmgtODIyLVxcdFxcdCAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpO1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmg9MTA2MD1leHRlcm4gdm9pZCBfX3RyYWNlX2dyYXBoX3JldHVybihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLFxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTA2NC1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMDY1OmV4dGVybiB2b2lkIGluaXRfYXJyYXlfZmdyYXBoX29wcyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKTtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMDY2OmV4dGVybiBpbnQgYWxsb2NhdGVfZmdyYXBoX29wcyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKTtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMDY3OmV4dGVybiB2b2lkIGZyZWVfZmdyYXBoX29wcyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKTtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0xMDY4LVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmg9MTE2Mz1zdGF0aWMgaW5saW5lIHZvaWRcXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMTY0OmZ0cmFjZV9ncmFwaF9hZGRyX2ZpbmlzaChzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcywgc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlKVxcbmtlcm5lbC90cmFjZS90cmFjZS5oLTExNjUte1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmg9MTIwMT1zdGF0aWMgaW5saW5lIGludCBmdHJhY2VfZ3JhcGhfbm90cmFjZV9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5oLTEyMDQtfVxcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEyMDU6c3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9hZGRyX2ZpbmlzaChzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcywgc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlKVxcbmtlcm5lbC90cmFjZS90cmFjZS5oLTEyMDYteyB9XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuaD0xMjEzPXN0YXRpYyBpbmxpbmUgYm9vbFxcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEyMTQ6ZnRyYWNlX2dyYXBoX2lnbm9yZV9mdW5jKHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLCBzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UpXFxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTIxNS17XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuaD0xMjMwPXByaW50X2dyYXBoX2Z1bmN0aW9uX2ZsYWdzKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgdTMyIGZsYWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTIzMy19XFxua2VybmVsL3RyYWNlL3RyYWNlLmg6MTIzNDpzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9mZ3JhcGhfb3BzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpIHsgfVxcbmtlcm5lbC90cmFjZS90cmFjZS5oLTEyMzUtLyogZnRyYWNlX29wcyBtYXkgbm90IGJlIGRlZmluZWQgKi9cXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMjM2OiNkZWZpbmUgaW5pdF9hcnJheV9mZ3JhcGhfb3BzKHRyLCBvcHMpIGRvIHsgfSB3aGlsZSAoMClcXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMjM3OiNkZWZpbmUgYWxsb2NhdGVfZmdyYXBoX29wcyh0ciwgb3BzKSAoeyAwOyB9KVxcbmtlcm5lbC90cmFjZS90cmFjZS5oLTEyMzgtI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIgKi9cXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYz04ND1pbnQgZnRyYWNlX2NyZWF0ZV9mdW5jdGlvbl9maWxlcyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLFxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jLTk3LVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYzo5ODpcXHRyZXQgPSBhbGxvY2F0ZV9mZ3JhcGhfb3BzKHRyLCB0ci1cXHUwMDNlb3BzKTtcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMtOTktXFx0aWYgKHJldCkge1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jPTEwOT12b2lkIGZ0cmFjZV9kZXN0cm95X2Z1bmN0aW9uX2ZpbGVzKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMtMTEyLVxcdGZ0cmFjZV9mcmVlX2Z0cmFjZV9vcHModHIpO1xcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYzoxMTM6XFx0ZnJlZV9mZ3JhcGhfb3BzKHRyKTtcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMtMTE0LX1cXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYz0yMjU9c3RhdGljIGludCBncmFwaF9lbnRyeShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jOjIyNjpcXHRcXHQgICAgICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTIyNy1cXHRcXHQgICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYz0yOTQ9aW50IHRyYWNlX2dyYXBoX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM6Mjk1OlxcdFxcdCAgICAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy0yOTYtXFx0XFx0ICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYz0zMDE9c3RhdGljIGludCB0cmFjZV9ncmFwaF9lbnRyeV9hcmdzKHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSxcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM6MzAyOlxcdFxcdFxcdFxcdCAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jLTMwMy1cXHRcXHRcXHRcXHQgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM9MzY4PXZvaWQgdHJhY2VfZ3JhcGhfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSxcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM6MzY5OlxcdFxcdFxcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLCBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy0zNzAte1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jPTM5OT1zdGF0aWMgdm9pZCB0cmFjZV9ncmFwaF90aHJlc2hfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSxcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM6NDAwOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00MDEtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00MzQtXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jOjQzNTpzdGF0aWMgc3RydWN0IGZncmFwaF9vcHMgZnVuY2dyYXBoX29wcyA9IHtcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtNDM2LVxcdC5lbnRyeWZ1bmMgPSBcXHUwMDI2dHJhY2VfZ3JhcGhfZW50cnksXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtNDM5LVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzo0NDA6aW50IGFsbG9jYXRlX2ZncmFwaF9vcHMoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgc3RydWN0IGZ0cmFjZV9vcHMgKm9wcylcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtNDQxLXtcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmM6NDQyOlxcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzO1xcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00NDMtXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtNDU4LVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYzo0NTk6dm9pZCBmcmVlX2ZncmFwaF9vcHMoc3RydWN0IHRyYWNlX2FycmF5ICp0cilcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtNDYwLXtcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYy00NjMtXFxua2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jOjQ2NDpfX2luaXQgdm9pZCBpbml0X2FycmF5X2ZncmFwaF9vcHMoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgc3RydWN0IGZ0cmFjZV9vcHMgKm9wcylcXG5rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMtNDY1LXtcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmM9MTc4PXN0YXRpYyBpbnQgaXJxc29mZl9ncmFwaF9lbnRyeShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYzoxNzk6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMtMTgwLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYz0yMTU9c3RhdGljIHZvaWQgaXJxc29mZl9ncmFwaF9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmM6MjE2OlxcdFxcdFxcdFxcdCBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jLTIxNy1cXHRcXHRcXHRcXHQgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMtMjQwLVxcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmM6MjQxOnN0YXRpYyBzdHJ1Y3QgZmdyYXBoX29wcyBmZ3JhcGhfb3BzID0ge1xcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMtMjQyLVxcdC5lbnRyeWZ1bmNcXHRcXHQ9IFxcdTAwMjZpcnFzb2ZmX2dyYXBoX2VudHJ5LFxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYz00ODQ9c3RhdGljIGludCByZWdpc3Rlcl9pcnFzb2ZmX2Z1bmN0aW9uKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIGludCBncmFwaCwgaW50IHNldClcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMtNDkyLVxcdGlmIChncmFwaClcXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jOjQ5MzpcXHRcXHRyZXQgPSByZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoXFx1MDAyNmZncmFwaF9vcHMpO1xcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMtNDk0LVxcdGVsc2VcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmM9NTAzPXN0YXRpYyB2b2lkIHVucmVnaXN0ZXJfaXJxc29mZl9mdW5jdGlvbihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBpbnQgZ3JhcGgpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jLTUwOC1cXHRpZiAoZ3JhcGgpXFxua2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYzo1MDk6XFx0XFx0dW5yZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoXFx1MDAyNmZncmFwaF9vcHMpO1xcbmtlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMtNTEwLVxcdGVsc2VcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYz0xMTU9c3RhdGljIGludCB3YWtldXBfZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYzoxMTY6XFx0XFx0XFx0ICAgICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXFxua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jLTExNy1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jPTE1MT1zdGF0aWMgdm9pZCB3YWtldXBfZ3JhcGhfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSxcXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmM6MTUyOlxcdFxcdFxcdFxcdHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYy0xNTMtXFx0XFx0XFx0XFx0c3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYy0xNzctXFxua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jOjE3ODpzdGF0aWMgc3RydWN0IGZncmFwaF9vcHMgZmdyYXBoX3dha2V1cF9vcHMgPSB7XFxua2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jLTE3OS1cXHQuZW50cnlmdW5jID0gXFx1MDAyNndha2V1cF9ncmFwaF9lbnRyeSxcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jPTc2OD1zdHJ1Y3QgZmdyYXBoX2ZpeHR1cmUge1xcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjc2OTpcXHRzdHJ1Y3QgZmdyYXBoX29wcyBnb3BzO1xcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTc3MC1cXHRpbnQgc3RvcmVfc2l6ZTtcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jPTc3Nj1zdGF0aWMgX19pbml0IGludCBzdG9yZV9lbnRyeShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6Nzc3OlxcdFxcdFxcdCAgICAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTc3OC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgZnRyYWNlX3JlZ3MgKmZyZWdzKVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM9ODEwPXN0YXRpYyBfX2luaXQgdm9pZCBzdG9yZV9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLFxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjgxMTpcXHRcXHRcXHRcXHRzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy04MTItXFx0XFx0XFx0XFx0c3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jPTEwMjk9c3RhdGljIGludCB0cmFjZV9ncmFwaF9lbnRyeV93YXRjaGRvZyhzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6MTAzMDpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMDMxLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMDQ3LVxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjEwNDg6c3RhdGljIHN0cnVjdCBmZ3JhcGhfb3BzIGZncmFwaF9vcHMgX19pbml0ZGF0YSAgPSB7XFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTA0OS1cXHQuZW50cnlmdW5jXFx0XFx0PSBcXHUwMDI2dHJhY2VfZ3JhcGhfZW50cnlfd2F0Y2hkb2csXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYz0xMDYyPXRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfZnVuY3Rpb25fZ3JhcGgoc3RydWN0IHRyYWNlciAqdHJhY2UsXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMDgwLVxcdHRyYWNpbmdfcmVzZXRfb25saW5lX2NwdXMoXFx1MDAyNnRyLVxcdTAwM2VhcnJheV9idWZmZXIpO1xcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjEwODE6XFx0ZmdyYXBoX29wcy5wcml2YXRlID0gdHI7XFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6MTA4MjpcXHRyZXQgPSByZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoXFx1MDAyNmZncmFwaF9vcHMpO1xcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTEwODMtXFx0aWYgKHJldCkge1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTEwMy1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzoxMTA0OlxcdC8qIE5lZWQgdG8gYWxzbyBzaW11bGF0ZSB0aGUgdHItXFx1MDAzZXJlc2V0IHRvIHJlbW92ZSB0aGlzIGZncmFwaF9vcHMgKi9cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMTA1LVxcdHRyYWNpbmdfc3RvcF9jbWRsaW5lX3JlY29yZCgpO1xcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjExMDY6XFx0dW5yZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoXFx1MDAyNmZncmFwaF9vcHMpO1xcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTExMDctXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMTIzLVxcdHRyYWNpbmdfcmVzZXRfb25saW5lX2NwdXMoXFx1MDAyNnRyLVxcdTAwM2VhcnJheV9idWZmZXIpO1xcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jOjExMjQ6XFx0ZmdyYXBoX29wcy5wcml2YXRlID0gdHI7XFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTEyNS1cXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTExNDUtXFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmM6MTE0NjpcXHRyZXQgPSByZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoXFx1MDAyNmZncmFwaF9vcHMpO1xcbmtlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jLTExNDctXFx0aWYgKHJldCkge1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMtMTE1OS1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYzoxMTYwOlxcdHVucmVnaXN0ZXJfZnRyYWNlX2dyYXBoKFxcdTAwMjZmZ3JhcGhfb3BzKTtcXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYy0xMTYxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NDozNy41NTQzNDE5OThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzQ3MzUyMDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOlxuXG4qKktlcm5lbCBQYXRjaCBBbmFseXNpczogRnRyYWNlIGFuZCBUYXNrIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gdGhlIHByb3Bvc2VkIHBhdGNoIHRhcmdldHMgYGtlcm5lbC9mb3JrLmNgLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIG1vdmluZyB0aGUgY2FsbCB0byBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgZWFybGllciBpbiB0aGUgYGZvcmtgIHByb2Nlc3MuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgcHJvYmFibHkgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRpbWluZyBvciByZXNvdXJjZSBhbGxvY2F0aW9uIGR1cmluZyB0aGUgdGFzayBjcmVhdGlvbi5cblxuTGV0J3Mgc2Vl4oCmIHJpZ2h0LCBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2Ag4oCTIHRoYXQncyB0aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRoZSByZXR1cm4gc3RhY2sgYWxsb2NhdGlvbiBmb3IgYSBuZXcgdGFzaywgYnV0IG9ubHkgaWYgYENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVJgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2U7IGl04oCZcyBjb25kaXRpb25hbCBvbiB0aGUgdHJhY2luZyBmZWF0dXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24sIEkga25vdyBpdC4gSG9sZCBvbiwgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgLi4uIHdhaXQgYSBtaW51dGUsIGl04oCZcyBkZWZpbmVkIGluIGBrZXJuZWwvdHJhY2UvZmdyYXBoLmNgLCBub3QgZGlyZWN0bHkgaW4gYGtlcm5lbC9mb3JrLmNgLiBCZXR0ZXIgY2hlY2sgdGhhdC4gT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgdGhpcyBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTc5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDQ6NDQuOTAxNjk2MThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczNjY0MjIzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzQyPWV4dGVybiB0cmFjZV9mdW5jX2dyYXBoX2VudF90IGZ0cmFjZV9ncmFwaF9lbnRyeTtcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNDMtXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzQ0OmV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KTtcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNDUtZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzU2PXN0YXRpYyBpbmxpbmUgdm9pZCB1bnBhdXNlX2dyYXBoX3RyYWNpbmcodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM2My1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNjQ6c3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNjUtc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMTMxPXZvaWQgZnRyYWNlX2dyYXBoX2luaXRfaWRsZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgaW50IGNwdSlcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMTU5LS8qIEFsbG9jYXRlIGEgcmV0dXJuIHN0YWNrIGZvciBuZXdseSBjcmVhdGVkIHRhc2sgKi9cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTE2MDp2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMTYxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDQ6NDYuNjM4MzQzMTAyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI5MzY2NzY1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gZmdyYXBoLmMgZm9yIEZ1bmN0aW9uIEdyYXBoIFRyYWNpbmcqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRoaW5raW5nIHdlIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgYGtlcm5lbC90cmFjZS9mZ3JhcGguY2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDExNjAuIE15IGd1dCB0ZWxscyBtZSB0aGF0J3Mgd2hlcmUgd2UnbGwgZmluZCB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2luZyBtZWNoYW5pc20uIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBjYXB0dXJpbmcgYW5kIG1hbmFnaW5nIHRoZSBjYWxsIGdyYXBoIGRhdGEuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb24gY2FsbHMgcmVzcG9uc2libGUgZm9yIHRoZSBpbnN0cnVtZW50YXRpb24sIHBlcmhhcHMgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHRyYWNlcG9pbnQgaW5mcmFzdHJ1Y3R1cmUgYW5kIHRoZSBjb250cm9sIGZsb3cgYXNwZWN0cywgdG9vLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI5OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ0OjU5LjU3NTAyMTgzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvZmdyYXBoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE1MDpcXHRcXHRcXHRcXHRyZXRfc3RhY2sgPSBrbWVtX2NhY2hlX2FsbG9jKGZncmFwaF9zdGFja19jYWNoZXAsIEdGUF9LRVJORUwpO1xcbjExNTE6XFx0XFx0XFx0XFx0aWYgKCFyZXRfc3RhY2spXFxuMTE1MjpcXHRcXHRcXHRcXHRcXHRyZXR1cm47XFxuMTE1MzpcXHRcXHRcXHRcXHRwZXJfY3B1KGlkbGVfcmV0X3N0YWNrLCBjcHUpID0gcmV0X3N0YWNrO1xcbjExNTQ6XFx0XFx0XFx0fVxcbjExNTU6XFx0XFx0XFx0Z3JhcGhfaW5pdF90YXNrKHQsIHJldF9zdGFjayk7XFxuMTE1NjpcXHRcXHR9XFxuMTE1NzpcXHR9XFxuMTE1ODpcXHRcXG4xMTU5OlxcdC8qIEFsbG9jYXRlIGEgcmV0dXJuIHN0YWNrIGZvciBuZXdseSBjcmVhdGVkIHRhc2sgKi9cXG4xMTYwOlxcdHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxuMTE2MTpcXHR7XFxuMTE2MjpcXHRcXHQvKiBNYWtlIHN1cmUgd2UgZG8gbm90IHVzZSB0aGUgcGFyZW50IHJldF9zdGFjayAqL1xcbjExNjM6XFx0XFx0dC1cXHUwMDNlcmV0X3N0YWNrID0gTlVMTDtcXG4xMTY0OlxcdFxcdHQtXFx1MDAzZWN1cnJfcmV0X3N0YWNrID0gMDtcXG4xMTY1OlxcdFxcdHQtXFx1MDAzZWN1cnJfcmV0X2RlcHRoID0gLTE7XFxuMTE2NjpcXHRcXG4xMTY3OlxcdFxcdGlmIChmdHJhY2VfZ3JhcGhfYWN0aXZlKSB7XFxuMTE2ODpcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpyZXRfc3RhY2s7XFxuMTE2OTpcXHRcXG4xMTcwOlxcdFxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWZncmFwaF9zdGFja19jYWNoZXApKVxcbjExNzE6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjExNzI6XFx0XFxuMTE3MzpcXHRcXHRcXHRyZXRfc3RhY2sgPSBrbWVtX2NhY2hlX2FsbG9jKGZncmFwaF9zdGFja19jYWNoZXAsIEdGUF9LRVJORUwpO1xcbjExNzQ6XFx0XFx0XFx0aWYgKCFyZXRfc3RhY2spXFxuMTE3NTpcXHRcXHRcXHRcXHRyZXR1cm47XFxuMTE3NjpcXHRcXHRcXHRncmFwaF9pbml0X3Rhc2sodCwgcmV0X3N0YWNrKTtcXG4xMTc3OlxcdFxcdH1cXG4xMTc4OlxcdH1cXG4xMTc5OlxcdFxcbjExODA6XFx0dm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG4xMTgxOlxcdHtcXG4xMTgyOlxcdFxcdHVuc2lnbmVkIGxvbmcgKnJldF9zdGFjayA9IHQtXFx1MDAzZXJldF9zdGFjaztcXG4xMTgzOlxcdFxcbjExODQ6XFx0XFx0dC1cXHUwMDNlcmV0X3N0YWNrID0gTlVMTDtcXG4xMTg1OlxcdFxcdC8qIE5VTEwgbXVzdCBiZWNvbWUgdmlzaWJsZSB0byBJUlFzIGJlZm9yZSB3ZSBmcmVlIGl0OiAqL1xcbjExODY6XFx0XFx0YmFycmllcigpO1xcbjExODc6XFx0XFxuMTE4ODpcXHRcXHRpZiAocmV0X3N0YWNrKSB7XFxuMTE4OTpcXHRcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFmZ3JhcGhfc3RhY2tfY2FjaGVwKSlcXG4xMTkwOlxcdFxcdFxcdFxcdHJldHVybjtcXG4xMTkxOlxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShmZ3JhcGhfc3RhY2tfY2FjaGVwLCByZXRfc3RhY2spO1xcbjExOTI6XFx0XFx0fVxcbjExOTM6XFx0fVxcbjExOTQ6XFx0XFxuMTE5NTpcXHQjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFXFxuMTE5NjpcXHRzdGF0aWMgaW50IGZncmFwaF9waWRfZnVuYyhzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXFxuMTE5NzpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG4xMTk4OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuMTE5OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ0OjU5LjU3NTExODA2OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjgyOTgwMzI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTdWJ0bGUgUmFjZSBDb25kaXRpb24gaW4gYGNvcHlfcHJvY2Vzc2AgYW5kIHRoZSBGdHJhY2UgR3JhcGggVHJhY2VyKipcblxuT2theSwgc28gaGVyZSdzIHRoZSBkZWFsLiBJJ3ZlIHN0dW1ibGVkIHVwb24gYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaXNzdWUgaW4gdGhlIGtlcm5lbCwgYW5kIGl0J3MgcmVsYXRlZCB0byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgY29weV9wcm9jZXNzYCAoc3BlY2lmaWNhbGx5IGluIGl0cyBlcnJvciBoYW5kbGluZyBwYXRocykgYW5kIHRoZSBGdW5jdGlvbiBHcmFwaCBUcmFjZXIgKGBmdHJhY2VgKS4gSSd2ZSBub3RpY2VkIHRoYXQgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIHNldHMgYHQtXHUwMDNlcmV0X3N0YWNrYCB0byBgTlVMTGAuIFRoZSBwcm9ibGVtIGFyaXNlcyB3aGVuIHRoaXMgY2FsbCBoYXBwZW5zICphZnRlciogb3RoZXIgb3BlcmF0aW9ucyB3aXRoaW4gYGNvcHlfcHJvY2Vzc2Agd2hpY2ggY291bGQgcG90ZW50aWFsbHkgZmFpbCwgbGlrZSBgY29weV9leGVjX3N0YXRlYC5cblxuSWYgYW55IG9mIHRob3NlIGZhbGxpYmxlIG9wZXJhdGlvbnMgZmFpbCwgd2UgaGl0IGFuIGVycm9yIHBhdGggKGxpa2UgYGJhZF9mb3JrX2ZyZWVgKS4gSGVyZSdzIHRoZSBraWNrZXI6IGBkdXBfdGFza19zdHJ1Y3RgIGNvcGllcyB0aGUgKmVudGlyZSogYHRhc2tfc3RydWN0YCwgaW5jbHVkaW5nIGB0LVx1MDAzZXJldF9zdGFja2AuIElmIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBoYXNuJ3QgcnVuIHlldCwgYHQtXHUwMDNlcmV0X3N0YWNrYCBzdGlsbCBwb2ludHMgdG8gdGhlICpwYXJlbnQncyogcmV0dXJuIHN0YWNrLlxuXG5Ob3csIGluIHRoZSBlcnJvciBwYXRoIChlLmcuLCB3aXRoaW4gYGZyZWVfdGFza2Agb3IgYHB1dF90YXNrX3N0cnVjdGApLCBgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayh0KWAgZ2V0cyBjYWxsZWQsIHdoaWNoLCBjcml0aWNhbGx5LCAqZnJlZXMqIGB0LVx1MDAzZXJldF9zdGFja2AuIEJ1dCBoZXkhIGB0LVx1MDAzZXJldF9zdGFja2AgaXMgdGhlICpwYXJlbnQncyogc3RhY2ssIHNvIHdlJ3JlIGZyZWVpbmcgbWVtb3J5IHRoYXQgc3RpbGwgYmVsb25ncyB0byB0aGUgcGFyZW50IHRhc2suIFRoaXMgbGVhZHMgdG8gYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlLlxuXG5UaGUgZml4IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogbW92ZSBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgcmlnaHQgYWZ0ZXIgYGR1cF90YXNrX3N0cnVjdGAuIFRoaXMgd2F5LCBgdC1cdTAwM2VyZXRfc3RhY2tgIGlzIGNsZWFyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGNvcHkuIFRoaXMgc2VlbXMgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZvciBzdXJlLCBhbmQgZGVmaW5pdGVseSBmaXhlcyBhIGJ1Zy5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciBpdCdzIHdvcnRoIGZ1enppbmcgdGhpcyBmaXg/IEFic29sdXRlbHkuIFRoaXMgaXMgYSB1c2UtYWZ0ZXItZnJlZSwgc28gaXQncyBhIGhpZ2gtcHJpb3JpdHkgdGFyZ2V0LlxuXG5UbyB0cmlnZ2VyIHRoZSBidWcsIGBmdHJhY2VfZ3JhcGhfYWN0aXZlYCBkb2Vzbid0IG5lZWQgdG8gYmUgdHJ1ZS4gSXQncyBlbm91Z2ggdG8gaGF2ZSBgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgZW5hYmxlZC4gYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIGlzIGNvbXBpbGVkIGFuZCBsaW5rZWQgaW4gaWYgdGhpcyBpcyBzZXQsIGFuZCBpdCdzIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYCB0aGF0IGNhdXNlcyB0aGUgaXNzdWUgYnkgZnJlZWluZyBgdC1cdTAwM2VyZXRfc3RhY2tgIGlmIGl0J3Mgbm9uLU5VTEwuXG5cblNvLCBgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgaXMgb3VyIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbi4gV2UgYWxzbyBuZWVkIHRvIGZvY3VzIG9uIGZ1enppbmcgdGhlIGVycm9yIHBhdGhzIHdpdGhpbiBgY29weV9wcm9jZXNzYC4gU3BlY2lmaWMgZnVuY3Rpb25zIHRvIHRhcmdldCB3b3VsZCBiZTogYGNvcHlfcHJvY2Vzc2AsIGBjb3B5X2V4ZWNfc3RhdGVgLCBhbmQgYGR1cF90YXNrX3N0cnVjdGAuIEdpdmVuIHRoYXQgYGNvcHlfcHJvY2Vzc2AgaXMgYSBob3QtcGF0aCBhbmQgYWxyZWFkeSBoZWF2aWx5IGZ1enplZCwgaXQgbWF5IG5vdCBiZSBuZWNlc3NhcnkgdG8gc3BlY2lmeSBpdCBleHBsaWNpdGx5LCBidXQgd2Ugc2hvdWxkIHNwZWNpZnkgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGFuZCBgZnRyYWNlX2dyYXBoX2V4aXRfdGFza2AgdG8gZW5zdXJlIHRoZSBmdXp6ZXIgaGl0cyB0aGUgc3BlY2lmaWMgdHJhY2luZyBpbml0L2V4aXQgcGF0aHMuIEVzcGVjaWFsbHkgc2luY2UgdGhlIGlzc3VlIGlzIGxpa2VseSB0byBiZSBleHBvc2VkIHdoZW4gdHJhY2luZyBpcyBlbmFibGVkIGFuZCBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgaXMgYmVpbmcgY2FsbGVkIGF0IGV2ZXJ5IGZvcmsvY2xvbmUuIFRoaXMgd29uJ3QgYmUgb24gYnkgZGVmYXVsdCwgc28gd2UncmUgZ29pbmcgdG8gbmVlZCB0byBlbmFibGUgYENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVJgLlxuXG5SaWdodCwgbGV0IG1lIGRvdWJsZSBjaGVjayB0aGF0IGBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCBpcyBzdWZmaWNpZW50LiBBaGEsIGV2ZW4gaWYgYGZ0cmFjZV9ncmFwaF9hY3RpdmVgIGlzICpmYWxzZSosIHRoaXMgY2FuIHN0aWxsIGhhcHBlbiEgQmVjYXVzZSBgZHVwX3Rhc2tfc3RydWN0YCBjb3BpZXMgYHQtXHUwMDNlcmV0X3N0YWNrYCBmcm9tIHRoZSBwYXJlbnQgcmVnYXJkbGVzcy4gQXMgbG9uZyBhcyB0aGUgcGFyZW50IGhhcyBoYWQgdHJhY2luZyBlbmFibGVkIGF0IHNvbWUgcG9pbnQsIGB0LVx1MDAzZXJldF9zdGFja2AgbWlnaHQgYmUgbm9uLU5VTEwuIFRoZW4gdGhlIGVycm9yIHBhdGggdHJpZ2dlcnMgdGhlIFVBRi5cblxuT2theSwgc28gdGhlIGZpeCBpczogd2UgbW92ZSB0aGF0IGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBjYWxsICpiZWZvcmUqIGFueSBmYWxsaWJsZSBvcGVyYXRpb25zLiBMZXQncyBtYWtlIHN1cmUgdGhhdCBgZnJlZV90YXNrYCBpcyBhY3R1YWxseSB0aGUgb25lIGNhbGxpbmcgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIHRob3VnaCwgdG8gY29uZmlybSB0aGUgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyMzMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NToxMi40MDQ5MjQ3MzNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTg1ODA4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnRyYWNlX2dyYXBoX2V4aXRfdGFza1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEzNDQ9ZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTM0NTpleHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzQ2LWV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X2lkbGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjcHUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzY0PXN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkgeyB9XFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzY1OnN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkgeyB9XFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzY2LXN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF9pZGxlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY3B1KSB7IH1cXG4tLVxcbmtlcm5lbC9mb3JrLmM9NTMzPXZvaWQgZnJlZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxua2VybmVsL2ZvcmsuYy01NTUtXFx0cnRfbXV0ZXhfZGVidWdfdGFza19mcmVlKHRzayk7XFxua2VybmVsL2ZvcmsuYzo1NTY6XFx0ZnRyYWNlX2dyYXBoX2V4aXRfdGFzayh0c2spO1xcbmtlcm5lbC9mb3JrLmMtNTU3LVxcdGFyY2hfcmVsZWFzZV90YXNrX3N0cnVjdCh0c2spO1xcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTExNjA9dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMTc5LVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMTgwOnZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTExODEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NToxNC4xMjM1MTIzNTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA5MjkzNjk4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGByZXRfc3RhY2tgIFVzZS1BZnRlci1GcmVlIEJ1ZyoqXG5cbk9rYXksIHNvIGBmcmVlX3Rhc2tgICpkb2VzKiBjYWxsIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYC4gRXhjZWxsZW50LCB0aGUgYnVnIGlzIGV4YWN0bHkgYXMgSSBpbml0aWFsbHkgc3VzcGVjdGVkLiBMZXQncyBicmVhayBpdCBkb3duIGFnYWluIGluIG15IG1pbmQ6XG5cbjEuICBBIHBhcmVudCBwcm9jZXNzIGhhcyBpdHMgYHJldF9zdGFja2AgbWVtb3J5IGFsbG9jYXRlZC5cbjIuICBgZm9yaygpYCBpcyBpbnZva2VkLCBjcmVhdGluZyBhIGNoaWxkIHByb2Nlc3MuXG4zLiAgYGR1cF90YXNrX3N0cnVjdGAgY29waWVzIHRoZSBgdGFza19zdHJ1Y3RgLCBtZWFuaW5nIHRoZSBjaGlsZCBwcm9jZXNzJ3MgYHJldF9zdGFja2AgcG9pbnRlciAqYWxzbyogcG9pbnRzIHRvIHRoZSBwYXJlbnQncyBgcmV0X3N0YWNrYCBtZW1vcnkuIE1ha2VzIHNlbnNlLlxuNC4gIFRoZW4sIGEgZmFsbGlibGUgb3BlcmF0aW9uIGxpa2UgYGNvcHlfZXhlY19zdGF0ZWAgb3IgYGNvcHlfY3JlZHNgIGZhaWxzLiBUaGlzIGlzIHRoZSBjcnVjaWFsIHBvaW50LlxuNS4gIENvbnRyb2wganVtcHMgdG8gYSBgYmFkX2ZvcmtfZnJlZWAgcGF0aCAob3Igc2ltaWxhciksIHVsdGltYXRlbHkgbGVhZGluZyB0byBgZnJlZV90YXNrKGNoaWxkKWAuXG42LiAgSGVyZSdzIHdoZXJlIGl0IGdvZXMgc291dGg6IGBmcmVlX3Rhc2tgIGNhbGxzIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKGNoaWxkKWAuXG43LiAgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIHRoZW4gZnJlZXMgYGNoaWxkLVx1MDAzZXJldF9zdGFja2AsIHdoaWNoIGlzLCBpbiByZWFsaXR5LCAqdGhlIHBhcmVudCdzKiBgcmV0X3N0YWNrYCBtZW1vcnkuIEEgY2xhc3NpYy5cbjguICBUaGUgcGFyZW50LCBvYmxpdmlvdXMgdG8gdGhpcywgY29udGludWVzIGV4ZWN1dGluZyBhbmQsIGluZXZpdGFibHksIHVzZXMgaXRzIChub3cgZnJlZWQpIGByZXRfc3RhY2tgLCByZXN1bHRpbmcgaW4gYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LlxuXG5UaGUgZml4LCBtb3ZpbmcgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socClgIOKAkyB3aGljaCwgY3JpdGljYWxseSwgKnNldHMqIGB0LVx1MDAzZXJldF9zdGFjayA9IE5VTExgIOKAkyAqYmVmb3JlKiBhbnkgcG90ZW50aWFsbHkgZmFpbGluZyBvcGVyYXRpb25zIGFmdGVyIGBkdXBfdGFza19zdHJ1Y3RgLCBpcyBjbGVhbi4gSXQgZW5zdXJlcyB0aGF0IHRoZSBjaGlsZCdzIGByZXRfc3RhY2tgIGlzIGV4cGxpY2l0bHkgbnVsbGlmaWVkICpiZWZvcmUqIGFueSBjaGFuY2Ugb2YgY2xlYW51cC4gSXQncyBhIG5pY2UsIGZ1bmN0aW9uYWwgZml4LiBNeSBzcGlkZXktc2Vuc2Ugc2F5cyB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIFdlJ2xsIG5lZWQgYEZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgdG8gcmVwcm9kdWNlIHRoZSBidWcuIFRpbWUgdG8gY2hlY2sgYGtlcm5lbC90cmFjZS9LY29uZmlnYCB0byBjb25maXJtIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDUyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ1OjIxLjIxNjQ1Mjk2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ1NTQ1ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGVU5DVElPTl9HUkFQSF9UUkFDRVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWc9MjM1PWNvbmZpZyBGVU5DVElPTl9UUkFDRVJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTI1My1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoyNTQ6Y29uZmlnIEZVTkNUSU9OX0dSQVBIX1RSQUNFUlxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTI1NS1cXHRib29sIFxcXCJLZXJuZWwgRnVuY3Rpb24gR3JhcGggVHJhY2VyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NToyMi42NjIwMDI4NzNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3MzMzMTU0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZXBlbmRlbmN5IERlZXAgRGl2ZSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYC4gSSdtIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEsIHNvIEknbSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgbGlrZWx5IGN1bHByaXRzLiBJIGtub3cgdGhhdCBzdWNoIGEgdHJhY2VyIGxpa2VseSBob29rcyBpbnRvIHRoZSBleGVjdXRpb24gb2YgYSBmdW5jdGlvbiBncmFwaCBpbiBzb21lIHdheS4gU28sIGZpcnN0LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGNvcmUgY29tcG9uZW50cyBpdCBpbnRlcmFjdHMgd2l0aC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzdGF0aWMgb3IgZHluYW1pYyBhbmFseXNpcyB0b29sPyBEb2VzIGl0IHJlbHkgb24gaW5zdHJ1bWVudGF0aW9uLCBieXRlY29kZSBtYW5pcHVsYXRpb24sIG9yIHBlcmhhcHMgcHJvZmlsaW5nIGRhdGE/IEknbGwgbmVlZCB0byBjaGVjayBpZiB0aGUgdHJhY2VyIHVzZXMgYW55IGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB0byBzdG9yZSB0aGUgZ3JhcGggaW5mb3JtYXRpb24sIGFuZCB3aGV0aGVyIGl0IGludGVyYWN0cyB3aXRoIGFueSBzcGVjaWZpYyBydW50aW1lIGVudmlyb25tZW50cyBvciBsaWJyYXJpZXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgcG90ZW50aWFsIHJpc2tzLCBwb2ludHMgb2YgZmFpbHVyZSBhbmQgYXJlYXMgdGhhdCBhcmUgbW9yZSBjb21wbGljYXRlZCB0aGFuIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzMyMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ1OjI1LjkzNTMzNjY2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI1MDpcXHRcXHQgICh0aGUgYm9vdHVwIGRlZmF1bHQpLCB0aGVuIHRoZSBvdmVyaGVhZCBvZiB0aGUgaW5zdHJ1Y3Rpb25zIGlzIHZlcnlcXG4gMjUxOlxcdFxcdCAgc21hbGwgYW5kIG5vdCBtZWFzdXJhYmxlIGV2ZW4gaW4gbWljcm8tYmVuY2htYXJrcyAoYXQgbGVhc3Qgb25cXG4gMjUyOlxcdFxcdCAgeDg2LCBidXQgbWF5IGhhdmUgaW1wYWN0IG9uIG90aGVyIGFyY2hpdGVjdHVyZXMpLlxcbiAyNTM6XFx0XFxuIDI1NDpcXHRjb25maWcgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXFxuIDI1NTpcXHRcXHRib29sIFxcXCJLZXJuZWwgRnVuY3Rpb24gR3JhcGggVHJhY2VyXFxcIlxcbiAyNTY6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUlxcbiAyNTc6XFx0XFx0ZGVwZW5kcyBvbiBGVU5DVElPTl9UUkFDRVJcXG4gMjU4OlxcdFxcdGRlcGVuZHMgb24gIVg4Nl8zMiB8fCAhQ0NfT1BUSU1JWkVfRk9SX1NJWkVcXG4gMjU5OlxcdFxcdGRlZmF1bHQgeVxcbiAyNjA6XFx0XFx0aGVscFxcbiAyNjE6XFx0XFx0ICBFbmFibGUgdGhlIGtlcm5lbCB0byB0cmFjZSBhIGZ1bmN0aW9uIGF0IGJvdGggaXRzIHJldHVyblxcbiAyNjI6XFx0XFx0ICBhbmQgaXRzIGVudHJ5LlxcbiAyNjM6XFx0XFx0ICBJdHMgZmlyc3QgcHVycG9zZSBpcyB0byB0cmFjZSB0aGUgZHVyYXRpb24gb2YgZnVuY3Rpb25zIGFuZFxcbiAyNjQ6XFx0XFx0ICBkcmF3IGEgY2FsbCBncmFwaCBmb3IgZWFjaCB0aHJlYWQgd2l0aCBzb21lIGluZm9ybWF0aW9uIGxpa2VcXG4gMjY1OlxcdFxcdCAgdGhlIHJldHVybiB2YWx1ZS4gVGhpcyBpcyBkb25lIGJ5IHNldHRpbmcgdGhlIGN1cnJlbnQgcmV0dXJuXFxuIDI2NjpcXHRcXHQgIGFkZHJlc3Mgb24gdGhlIGN1cnJlbnQgdGFzayBzdHJ1Y3R1cmUgaW50byBhIHN0YWNrIG9mIGNhbGxzLlxcbiAyNjc6XFx0XFxuIDI2ODpcXHRjb25maWcgRlVOQ1RJT05fR1JBUEhfUkVUVkFMXFxuIDI2OTpcXHRcXHRib29sIFxcXCJLZXJuZWwgRnVuY3Rpb24gR3JhcGggUmV0dXJuIFZhbHVlXFxcIlxcbiAyNzA6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0ZVTkNUSU9OX0dSQVBIX0ZSRUdTXFxuIDI3MTpcXHRcXHRkZXBlbmRzIG9uIEZVTkNUSU9OX0dSQVBIX1RSQUNFUlxcbiAyNzI6XFx0XFx0ZGVmYXVsdCBuXFxuIDI3MzpcXHRcXHRoZWxwXFxuIDI3NDpcXHRcXHQgIFN1cHBvcnQgcmVjb3JkaW5nIGFuZCBwcmludGluZyB0aGUgZnVuY3Rpb24gcmV0dXJuIHZhbHVlIHdoZW5cXG4gMjc1OlxcdFxcdCAgdXNpbmcgZnVuY3Rpb24gZ3JhcGggdHJhY2VyLiBJdCBjYW4gYmUgaGVscGZ1bCB0byBsb2NhdGUgZnVuY3Rpb25zXFxuIDI3NjpcXHRcXHQgIHRoYXQgcmV0dXJuIGVycm9ycy4gVGhpcyBmZWF0dXJlIGlzIG9mZiBieSBkZWZhdWx0LCBhbmQgeW91IGNhblxcbiAyNzc6XFx0XFx0ICBlbmFibGUgaXQgdmlhIHRoZSB0cmFjZSBvcHRpb24gZnVuY2dyYXBoLXJldHZhbC5cXG4gMjc4OlxcdFxcdCAgU2VlIERvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdFxcbiAyNzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ1OjI1LjkzNTQzMDlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE2MTk5NDMwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGVwZW5kZW5jaWVzIGFuZCBUcmFjaW5nKipcblxuUmlnaHQsIHNvIEknbSBzZWVpbmcgdGhhdCBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCByZWxpZXMgb24gYEZVTkNUSU9OX1RSQUNFUmAuIFRoYXQncyBub3QgdW5leHBlY3RlZDsgZ3JhcGggdHJhY2luZyBvZnRlbiBidWlsZHMgdXBvbiBtb3JlIGJhc2ljIGZ1bmN0aW9uLWxldmVsIHRyYWNpbmcuIFRvIGJlIGNlcnRhaW4gYWJvdXQgaG93IHRoZXkgcmVsYXRlLCB0aGUgcGxhY2UgdG8gc3RhcnQgaXMgd2l0aCBgRlVOQ1RJT05fVFJBQ0VSYC4gTGV0J3MgdGFrZSBhIGxvb2sgYXQgKml0KiBmaXJzdC4gVW5kZXJzdGFuZGluZyAqdGhhdCogY29tcG9uZW50J3MgY29yZSBmdW5jdGlvbmFsaXR5IGlzIGdvaW5nIHRvIGluZm9ybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB3aG9sZSBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDMxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NTozMi4wOTc0MjcyMTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTUzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjMwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjMwOlxcdFxcdGhlbHBcXG4gMjMxOlxcdFxcdCAgRW5hYmxlIGRldmVsb3BlciB0byBzZXR1cCBmdHJhY2Ugc3Vic3lzdGVtIHZpYSBzdXBwbGVtZW50YWxcXG4gMjMyOlxcdFxcdCAga2VybmVsIGNtZGxpbmUgYXQgYm9vdCB0aW1lIGZvciBkZWJ1Z2dpbmcgKHRyYWNpbmcpIGRyaXZlclxcbiAyMzM6XFx0XFx0ICBpbml0aWFsaXphdGlvbiBhbmQgYm9vdCBwcm9jZXNzLlxcbiAyMzQ6XFx0XFxuIDIzNTpcXHRjb25maWcgRlVOQ1RJT05fVFJBQ0VSXFxuIDIzNjpcXHRcXHRib29sIFxcXCJLZXJuZWwgRnVuY3Rpb24gVHJhY2VyXFxcIlxcbiAyMzc6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0ZVTkNUSU9OX1RSQUNFUlxcbiAyMzg6XFx0XFx0c2VsZWN0IEtBTExTWU1TXFxuIDIzOTpcXHRcXHRzZWxlY3QgR0VORVJJQ19UUkFDRVJcXG4gMjQwOlxcdFxcdHNlbGVjdCBDT05URVhUX1NXSVRDSF9UUkFDRVJcXG4gMjQxOlxcdFxcdHNlbGVjdCBHTE9CXFxuIDI0MjpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gMjQzOlxcdFxcdHNlbGVjdCBUQVNLU19SVURFX1JDVVxcbiAyNDQ6XFx0XFx0aGVscFxcbiAyNDU6XFx0XFx0ICBFbmFibGUgdGhlIGtlcm5lbCB0byB0cmFjZSBldmVyeSBrZXJuZWwgZnVuY3Rpb24uIFRoaXMgaXMgZG9uZVxcbiAyNDY6XFx0XFx0ICBieSB1c2luZyBhIGNvbXBpbGVyIGZlYXR1cmUgdG8gaW5zZXJ0IGEgc21hbGwsIDUtYnl0ZSBOby1PcGVyYXRpb25cXG4gMjQ3OlxcdFxcdCAgaW5zdHJ1Y3Rpb24gYXQgdGhlIGJlZ2lubmluZyBvZiBldmVyeSBrZXJuZWwgZnVuY3Rpb24sIHdoaWNoIE5PUFxcbiAyNDg6XFx0XFx0ICBzZXF1ZW5jZSBpcyB0aGVuIGR5bmFtaWNhbGx5IHBhdGNoZWQgaW50byBhIHRyYWNlciBjYWxsIHdoZW5cXG4gMjQ5OlxcdFxcdCAgdHJhY2luZyBpcyBlbmFibGVkIGJ5IHRoZSBhZG1pbmlzdHJhdG9yLiBJZiBpdCdzIHJ1bnRpbWUgZGlzYWJsZWRcXG4gMjUwOlxcdFxcdCAgKHRoZSBib290dXAgZGVmYXVsdCksIHRoZW4gdGhlIG92ZXJoZWFkIG9mIHRoZSBpbnN0cnVjdGlvbnMgaXMgdmVyeVxcbiAyNTE6XFx0XFx0ICBzbWFsbCBhbmQgbm90IG1lYXN1cmFibGUgZXZlbiBpbiBtaWNyby1iZW5jaG1hcmtzIChhdCBsZWFzdCBvblxcbiAyNTI6XFx0XFx0ICB4ODYsIGJ1dCBtYXkgaGF2ZSBpbXBhY3Qgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcykuXFxuIDI1MzpcXHRcXG4gMjU0OlxcdGNvbmZpZyBGVU5DVElPTl9HUkFQSF9UUkFDRVJcXG4gMjU1OlxcdFxcdGJvb2wgXFxcIktlcm5lbCBGdW5jdGlvbiBHcmFwaCBUcmFjZXJcXFwiXFxuIDI1NjpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXFxuIDI1NzpcXHRcXHRkZXBlbmRzIG9uIEZVTkNUSU9OX1RSQUNFUlxcbiAyNTg6XFx0XFx0ZGVwZW5kcyBvbiAhWDg2XzMyIHx8ICFDQ19PUFRJTUlaRV9GT1JfU0laRVxcbiAyNTk6XFx0XFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ1OjMyLjA5NzUyNDEyN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjEwNzc0NjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIEkgbmVlZCB0byBnZXQgdGhpcyB0cmFjaW5nIHN5c3RlbSBzcXVhcmVkIGF3YXkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHdlJ2xsIG5lZWQgYm90aCBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCBhbmQganVzdCBhIGJhc2ljIGBGVU5DVElPTl9UUkFDRVJgLiBIb2xkIG9uIHRob3VnaCwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIGBGVU5DVElPTl9UUkFDRVJgIGlzbid0IGEgc2ltcGxlIG9uL29mZiBzd2l0Y2g7IGl0IGhpbmdlcyBvbiBgSEFWRV9GVU5DVElPTl9UUkFDRVJgLCBhbmQgdGhhdCdzIHVzdWFsbHkgc2VsZWN0ZWQgYXQgdGhlIGFyY2hpdGVjdHVyZSBsZXZlbCwgbWVhbmluZyBpdCdzIGRlcGVuZGVudCBvbiB0aGUgaGFyZHdhcmUuIFJpZ2h0LiBBbmQgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhpcywgSSBzaG91bGQgcHJvYmFibHkgY29uZmlybSB3aGV0aGVyIGBGVFJBQ0VgIGl0c2VsZiBpcyBldmVuIGVuYWJsZWQuIGBGVFJBQ0VgIGlzIHRoZSBiaWcga2FodW5hLCB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgYWxsIHRoaXMgdHJhY2luZy4gQmV0dGVyIGNvbmZpcm0gdGhhdCBpdCdzIHNlbGVjdGVkIGZpcnN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODcwMCwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDU6MzcuMzA4MzAxNDM1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ3NjE2NDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGVFJBQ0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWc9MTk4PWNvbmZpZyBUUkFDSU5HX1NVUFBPUlRcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTIwMy1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoyMDQ6bWVudWNvbmZpZyBGVFJBQ0VcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0yMDUtXFx0Ym9vbCBcXFwiVHJhY2Vyc1xcXCJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTU4OD1jb25maWcgRU5BQkxFX0RFRkFVTFRfVFJBQ0VSU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctNTk2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjU5Nzpjb25maWcgRlRSQUNFX1NZU0NBTExTXFxua2VybmVsL3RyYWNlL0tjb25maWctNTk4LVxcdGJvb2wgXFxcIlRyYWNlIHN5c2NhbGxzXFxcIlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9ODY4PWNvbmZpZyBCUEZfS1BST0JFX09WRVJSSURFXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NzYtXFxua2VybmVsL3RyYWNlL0tjb25maWc6ODc3OmNvbmZpZyBGVFJBQ0VfTUNPVU5UX1VTRV9QQVRDSEFCTEVfRlVOQ1RJT05fRU5UUllcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NzgtXFx0Ym9vbFxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODgwLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg4MTpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfQ0NcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04ODItXFx0ZGVmX2Jvb2wgeVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODg2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg4Nzpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfT0JKVE9PTFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg4OC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04OTQtXFxua2VybmVsL3RyYWNlL0tjb25maWc6ODk1OmNvbmZpZyBGVFJBQ0VfTUNPVU5UX1VTRV9SRUNPUkRNQ09VTlRcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04OTYtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9MTAyMT1jb25maWcgVFJBQ0VfRVZBTF9NQVBfRklMRVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMTA0OC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDQ5OmNvbmZpZyBGVFJBQ0VfUkVDT1JEX1JFQ1VSU0lPTlxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNTAtXFx0Ym9vbCBcXFwiUmVjb3JkIGZ1bmN0aW9ucyB0aGF0IHJlY3Vyc2UgaW4gZnVuY3Rpb24gdHJhY2luZ1xcXCJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNjItXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTA2Mzpjb25maWcgRlRSQUNFX1JFQ09SRF9SRUNVUlNJT05fU0laRVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNjQtXFx0aW50IFxcXCJNYXggbnVtYmVyIG9mIHJlY3Vyc2VkIGZ1bmN0aW9ucyB0byByZWNvcmRcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDczLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjEwNzQ6Y29uZmlnIEZUUkFDRV9WQUxJREFURV9SQ1VfSVNfV0FUQ0hJTkdcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDc1LVxcdGJvb2wgXFxcIlZhbGlkYXRlIFJDVSBpcyBvbiBkdXJpbmcgZnRyYWNlIGV4ZWN1dGlvblxcXCJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTExMDE9Y29uZmlnIEdDT1ZfUFJPRklMRV9GVFJBQ0VcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMTItXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTExMzpjb25maWcgRlRSQUNFX1NFTEZURVNUXFxua2VybmVsL3RyYWNlL0tjb25maWctMTExNC1cXHRib29sXFxua2VybmVsL3RyYWNlL0tjb25maWctMTExNS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMTE2OmNvbmZpZyBGVFJBQ0VfU1RBUlRVUF9URVNUXFxua2VybmVsL3RyYWNlL0tjb25maWctMTExNy1cXHRib29sIFxcXCJQZXJmb3JtIGEgc3RhcnR1cCB0ZXN0IG9uIGZ0cmFjZVxcXCJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTExMzY9Y29uZmlnIEVWRU5UX1RSQUNFX1RFU1RfU1lTQ0FMTFNcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExNDctXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTE0ODpjb25maWcgRlRSQUNFX1NPUlRfU1RBUlRVUF9URVNUXFxua2VybmVsL3RyYWNlL0tjb25maWctMTE0OS0gICAgICAgYm9vbCBcXFwiVmVyaWZ5IGNvbXBpbGUgdGltZSBzb3J0aW5nIG9mIGZ0cmFjZSBmdW5jdGlvbnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ1OjM4Ljc1NTkyMTM3NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI1ODE4ODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZUUkFDRSBDb25maWd1cmF0aW9uIEFuYWx5c2lzKipcblxuT2theSwgc28gYEZUUkFDRWAgaXMgZGVmaW5pdGVseSBhIG1lbnVjb25maWcgb3B0aW9uLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGNvbnNpZGVyaW5nIGFsbCB0aGUgcmVsYXRlZCBjb25maWd1cmF0aW9uczogYEZUUkFDRWAsIGBGVU5DVElPTl9UUkFDRVJgLCBhbmQgYEZVTkNUSU9OX0dSQVBIX1RSQUNFUmAuIEhvbGQgb24gYSBzZWNvbmQsIHdhc24ndCBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgaWYgYEZVTkNUSU9OX1RSQUNFUmAgd2FzIGVuYWJsZWQ/IFllcywgSSBiZWxpZXZlIHRoYXQncyByaWdodC4gSnVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUsIGxldCdzIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBvZiBgRlRSQUNFYCBpdHNlbGYgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgZGVwZW5kZW50IGNvbmZpZ3VyYXRpb25zIEknbSBtaXNzaW5nLiBUaW1lIHRvIGRpZyBpbiBhbmQgY29uZmlybSB0aGUgZXhhY3QgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc4OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ1OjQyLjE4MTc0MjUwN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzg3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjAwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjAwOlxcdFxcdGRlcGVuZHMgb24gVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVFxcbiAyMDE6XFx0XFx0ZGVwZW5kcyBvbiBTVEFDS1RSQUNFX1NVUFBPUlRcXG4gMjAyOlxcdFxcdGRlZmF1bHQgeVxcbiAyMDM6XFx0XFxuIDIwNDpcXHRtZW51Y29uZmlnIEZUUkFDRVxcbiAyMDU6XFx0XFx0Ym9vbCBcXFwiVHJhY2Vyc1xcXCJcXG4gMjA2OlxcdFxcdGRlcGVuZHMgb24gVFJBQ0lOR19TVVBQT1JUXFxuIDIwNzpcXHRcXHRkZWZhdWx0IHkgaWYgREVCVUdfS0VSTkVMXFxuIDIwODpcXHRcXHRoZWxwXFxuIDIwOTpcXHRcXHQgIEVuYWJsZSB0aGUga2VybmVsIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUuXFxuIDIxMDpcXHRcXG4gMjExOlxcdGlmIEZUUkFDRVxcbiAyMTI6XFx0XFxuIDIxMzpcXHRjb25maWcgVFJBQ0VGU19BVVRPTU9VTlRfREVQUkVDQVRFRFxcbiAyMTQ6XFx0XFx0Ym9vbCBcXFwiQXV0b21vdW50IHRyYWNlZnMgb24gZGVidWdmcyBbREVQUkVDQVRFRF1cXFwiXFxuIDIxNTpcXHRcXHRkZXBlbmRzIG9uIFRSQUNJTkdcXG4gMjE2OlxcdFxcdGRlZmF1bHQgeVxcbiAyMTc6XFx0XFx0aGVscFxcbiAyMTg6XFx0XFx0ICBUaGUgdHJhY2luZyBpbnRlcmZhY2Ugd2FzIG1vdmVkIGZyb20gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZ1xcbiAyMTk6XFx0XFx0ICB0byAvc3lzL2tlcm5lbC90cmFjaW5nIGluIDIwMTUsIGJ1dCB0aGUgdHJhY2luZyBmaWxlIHN5c3RlbVxcbiAyMjA6XFx0XFx0ICB3YXMgc3RpbGwgYXV0b21vdW50ZWQgaW4gL3N5cy9rZXJuZWwvZGVidWcgZm9yIGJhY2t3YXJkXFxuIDIyMTpcXHRcXHQgIGNvbXBhdGliaWxpdHkgd2l0aCB0b29saW5nLlxcbiAyMjI6XFx0XFxuIDIyMzpcXHRcXHQgIFRoZSBuZXcgaW50ZXJmYWNlIGhhcyBiZWVuIGFyb3VuZCBmb3IgbW9yZSB0aGFuIDEwIHllYXJzIGFuZFxcbiAyMjQ6XFx0XFx0ICB0aGUgb2xkIGRlYnVnIG1vdW50IHdpbGwgc29vbiBiZSByZW1vdmVkLlxcbiAyMjU6XFx0XFxuIDIyNjpcXHRjb25maWcgQk9PVFRJTUVfVFJBQ0lOR1xcbiAyMjc6XFx0XFx0Ym9vbCBcXFwiQm9vdC10aW1lIFRyYWNpbmcgc3VwcG9ydFxcXCJcXG4gMjI4OlxcdFxcdGRlcGVuZHMgb24gVFJBQ0lOR1xcbiAyMjk6XFx0XFx0c2VsZWN0IEJPT1RfQ09ORklHXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ1OjQyLjE4MTkyMjcxN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzUxNjYzNjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBGdW5jdGlvbiBUcmFjaW5nIGFuZCBCdWcgVHJpZ2dlcmluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0byBiZXN0IGFwcHJvYWNoIGZ1enppbmcgYXJvdW5kIGEgc3BlY2lmaWMgYnVnIHJlbGF0ZWQgdG8gZnVuY3Rpb24gdHJhY2luZy4gIGBGVFJBQ0VgLCBgRlVOQ1RJT05fVFJBQ0VSYCwgYW5kIGBGVU5DVElPTl9HUkFQSF9UUkFDRVJgIGFyZSB0aGUgcmVsZXZhbnQgY29uZmlncyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBUaGUgY29yZSBmdW5jdGlvbiBiZWluZyBtb2RpZmllZCBpcyBgY29weV9wcm9jZXNzYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBmb2N1cyB0aGUgZnV6emVyIGRpcmVjdGx5IG9uIGBjb3B5X3Byb2Nlc3NgLiBIb3dldmVyLCB0aGF0J3MgYSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9uLCBjYWxsZWQgb24gZXZlcnkgZm9yayBhbmQgY2xvbmUuIFRoZSBmdXp6ZXIgYWxyZWFkeSBoZWF2aWx5IHRhcmdldHMgdGhlc2Ugc3lzdGVtIGNhbGxzLiAgSWYgSSB6ZXJvIGluIG9uIGBjb3B5X3Byb2Nlc3NgLCBpdCB3aWxsIGxpa2VseSBqdXN0IGdpdmUgbWUgYSBza2V3ZWQgZGlzdHJpYnV0aW9uLCBhbmQgcHJvYmFibHkgbm90IHJldmVhbCBhbnl0aGluZyBuZXcuXG5cblRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGNhbiBJIHN0ZWVyIHRoZSBmdXp6ZXIgdG93YXJkIHRoZSAqZXJyb3IqIHBhdGggb2YgYGNvcHlfcHJvY2Vzc2A/IFRoZXNlIGVycm9yIHBhdGhzIGFyaXNlIGZyb20gZmFpbHVyZXMgd2l0aGluIHRoaW5ncyBsaWtlIGBjb3B5X2V4ZWNfc3RhdGVgLCBgY29weV9jcmVkc2AsIGBjb3B5X21tYCwgb3IgYGNvcHlfbmFtZXNwYWNlc2AuIFRob3NlIGZhaWx1cmVzIGFyZSB1c3VhbGx5IGR1ZSB0byBtZW1vcnkgYWxsb2NhdGlvbiBwcm9ibGVtcyAod2hpY2ggc3l6a2FsbGVyIGNhbiBpbmR1Y2UgdXNpbmcgZmF1bHQgaW5qZWN0aW9uKSBvciBpbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8gYGNsb25lM2AuXG5cbkNvbnNpZGVyaW5nIGBzeXNfY2xvbmUzYCBvciBgc3lzX2Nsb25lYCBhcmUgYWxzbyBnZW5lcmljLCB0aGF0IGRvZXNuJ3Qgc2VlbSBwcm9taXNpbmcgZWl0aGVyLiBXYWl0LCBidXQgdGhlIGJ1ZyByZXBvcnQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBhbmQgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgLlxuXG5NeSBmaXJzdCBpbmNsaW5hdGlvbiB3YXMgdG8gYWRkIHRob3NlIGZ1bmN0aW9ucyB0byBgRm9jdXNTeW1ib2xzYCwgaG9waW5nIHN5emthbGxlciB3b3VsZCB0cnkgdG8gcmVhY2ggdGhlbS4gVGhlIHByb2JsZW0gaXMgdGhhdCB0aGV5IGFyZSBjYWxsZWQgdW5jb25kaXRpb25hbGx5IGZyb20gd2l0aGluIGBjb3B5X3Byb2Nlc3NgIGFuZCBgZnJlZV90YXNrYCwgKmlmKiBgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgaXMgZW5hYmxlZC4gIFNvLCB0aGV5J3JlIGFsc28gaG90LXBhdGggZnVuY3Rpb25zLCBleGVjdXRlZCB3aXRoIGV2ZXJ5IGZvcmsvZXhpdC5cblxuTm93LCB3YWl0IGEgbWludXRlLCB0aGUgcHJvbXB0IHNheXMgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGF2b2lkIGEgc2tld2VkIGRpc3RyaWJ1dGlvbi4gSXQgYWxzbyBzdGF0ZXMgSSBzaG91bGQgcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuICBTbywgbGlzdGluZyBgY29weV9wcm9jZXNzYCwgYGZyZWVfdGFza2AgYW5kIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBtaWdodCBub3QgYmUgdGhlIHJpZ2h0IG1vdmUgaGVyZSwgZXZlbiB0aG91Z2ggdGhleSdyZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBmdW5jdGlvbnMgaWRlbnRpZmllZCBpbiB0aGUgYnVnIHJlcG9ydC5cblxuQnV0IHdhaXQsIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBkb2VzIGEgY2hlY2s6IGl0IG9ubHkgZXhlY3V0ZXMgaWYgYGZ0cmFjZV9ncmFwaF9hY3RpdmVgIGlzIHRydWUuIEhtbSwgSSBuZWVkIHRvIHJldmlzaXQgYGtlcm5lbC90cmFjZS9mZ3JhcGguY2AgYW5kIHVuZGVyc3RhbmQgaG93IHRvIGdldCB0aGF0IGNvbmRpdGlvbiB0byBiZSB0cnVlLiBMZXQgbWUgZGl2ZSBiYWNrIGludG8gdGhhdCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ0NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ1OjUxLjUzMzU4OTI5MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDkxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL2ZncmFwaC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNTksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNTk6XFx0LyogQWxsb2NhdGUgYSByZXR1cm4gc3RhY2sgZm9yIG5ld2x5IGNyZWF0ZWQgdGFzayAqL1xcbjExNjA6XFx0dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG4xMTYxOlxcdHtcXG4xMTYyOlxcdFxcdC8qIE1ha2Ugc3VyZSB3ZSBkbyBub3QgdXNlIHRoZSBwYXJlbnQgcmV0X3N0YWNrICovXFxuMTE2MzpcXHRcXHR0LVxcdTAwM2VyZXRfc3RhY2sgPSBOVUxMO1xcbjExNjQ6XFx0XFx0dC1cXHUwMDNlY3Vycl9yZXRfc3RhY2sgPSAwO1xcbjExNjU6XFx0XFx0dC1cXHUwMDNlY3Vycl9yZXRfZGVwdGggPSAtMTtcXG4xMTY2OlxcdFxcbjExNjc6XFx0XFx0aWYgKGZ0cmFjZV9ncmFwaF9hY3RpdmUpIHtcXG4xMTY4OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKnJldF9zdGFjaztcXG4xMTY5OlxcdFxcbjExNzA6XFx0XFx0XFx0aWYgKFdBUk5fT05fT05DRSghZmdyYXBoX3N0YWNrX2NhY2hlcCkpXFxuMTE3MTpcXHRcXHRcXHRcXHRyZXR1cm47XFxuMTE3MjpcXHRcXG4xMTczOlxcdFxcdFxcdHJldF9zdGFjayA9IGttZW1fY2FjaGVfYWxsb2MoZmdyYXBoX3N0YWNrX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XFxuMTE3NDpcXHRcXHRcXHRpZiAoIXJldF9zdGFjaylcXG4xMTc1OlxcdFxcdFxcdFxcdHJldHVybjtcXG4xMTc2OlxcdFxcdFxcdGdyYXBoX2luaXRfdGFzayh0LCByZXRfc3RhY2spO1xcbjExNzc6XFx0XFx0fVxcbjExNzg6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NTo1MS41MzM2OTk2OTFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc4Nzk1NTYzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQnVnIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5IGZvciBLZXJuZWwgVXNlLUFmdGVyLUZyZWUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgaXMgZXhwb3J0ZWQsIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgY2FsbGVkIG9uIGV2ZXJ5IGZvcmssIHNwZWNpZmljYWxseSB3aXRoaW4gYGNvcHlfcHJvY2Vzc2AuIFRoZSBjb3JlIG9mIHRoZSBidWcgbGllcyBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGNvcHlfcHJvY2Vzc2AuIElmIGEgZmFsbGlibGUgb3BlcmF0aW9uIHdpdGhpbiBgY29weV9wcm9jZXNzYCBmYWlscyAqYmVmb3JlKiBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgaXMgY2FsbGVkLCBgZnRyYWNlX2dyYXBoX2V4aXRfdGFza2AgaW4gdGhlIGVycm9yIHBhdGggZW5kcyB1cCBmcmVlaW5nIHRoZSBwYXJlbnQncyBgcmV0X3N0YWNrYC4gVGhpcyBpcyBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIFRoaXMgb2NjdXJzIHJlZ2FyZGxlc3Mgb2YgYGZ0cmFjZV9ncmFwaF9hY3RpdmVgLCBhcyBsb25nIGFzIHRoZSBwYXJlbnQgdGFzayBhdCBzb21lIHBvaW50IGhhZCBgZnRyYWNlX2dyYXBoX2FjdGl2ZWAgc2V0IHRvIHRydWUuXG5cblRoZSBrZXkgdG8gdHJpZ2dlcmluZyB0aGlzIGxpZXMgaW4gdGhlIHRpbWluZyBvZiB0aGUgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGNhbGwgd2l0aGluIGBjb3B5X3Byb2Nlc3NgLiBUaGUgcGF0Y2ggZml4ZXMgdGhpcyBieSBtb3ZpbmcgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGVhcmxpZXIsIHJpZ2h0IGFmdGVyIGBkdXBfdGFza19zdHJ1Y3RgLlxuXG5Ib3cgZG8gd2UgdHJpZ2dlciB0aGlzPyBXZSBuZWVkIHRvIGVuYWJsZSBmdHJhY2UgZ3JhcGggdHJhY2luZy4gVGhhdCdzIGRvbmUgdmlhIHRyYWNlZnMsIHdoaWNoIHN5emthbGxlciBhbHJlYWR5IGtub3dzIGhvdyB0byBmdXp6LiBTbywgd2UncmUgbm90IHN0cmljdGx5IGZvY3VzaW5nIG9uIHRyYWNlZnMgZnVuY3Rpb25zIGhlcmUsIGJ1dCB0aGUgdHJhY2luZyAqbmVlZHMqIHRvIGJlIGVuYWJsZWQuXG5cblNpbmNlIHRoZSBmaXggbW9kaWZpZXMgYGNvcHlfcHJvY2Vzc2AsIHdoaWNoIGlzIGEgKmhvdCBwYXRoKiwgSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCBgRm9jdXNTeW1ib2xzYC4gTGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB3b3VsZCBza2V3IHRoZSB0ZXN0IGRpc3RyaWJ1dGlvbi4gSSBuZWVkIHRvIGF2b2lkIGxpc3RpbmcgYGNvcHlfcHJvY2Vzc2AsIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCwgb3IgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgLiBHaXZlbiB0aGUgYnVnJ3MgbmF0dXJlIGFuZCB0aGUgaG90IHBhdGggY29uc2lkZXJhdGlvbnMsIGBGb2N1c1N5bWJvbHNgIHNob3VsZCBiZSBlbXB0eS5cblxuTm93LCBhYm91dCB0aGUgY29uZmlncy4gV2UgbmVlZCBgRlRSQUNFYCwgYEZVTkNUSU9OX1RSQUNFUmAsIGFuZCBlc3BlY2lhbGx5IGBGVU5DVElPTl9HUkFQSF9UUkFDRVJgIHRvIGJlIGVuYWJsZWQuIGBGVU5DVElPTl9HUkFQSF9UUkFDRVJgIHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBvbmUuXG5cbkxldCdzIHF1aWNrbHkgcmV2aWV3IHRoZSBidWcgYWdhaW4gdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcncyBjbGVhci4gSW4gdGhlIHByZS1wYXRjaCBjb2RlLCB0aGUgY2FsbCB0byBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgaGFwcGVuZWQgKmFmdGVyKiBtYW55IHBvdGVudGlhbGx5IGZhaWxpbmcgb3BlcmF0aW9ucywgd2hpY2ggY291bGQgbGVhZCB0byBgZnRyYWNlX2dyYXBoX2V4aXRfdGFza2AgZnJlZWluZyB0aGUgcGFyZW50J3Mgc3RhY2sgaW4gYW4gZXJyb3IgcGF0aC4gVGhlIGZpeCBtb3ZlcyB0aGUgaW5pdGlhbGl6YXRpb24gZWFybGllciwgd2hpY2ggaXMgdGhlIGtleS5cblxuVGhpcyBpcyBhIHZlcnkgY2xlYXIgYW5kIGltcG9ydGFudCBmdW5jdGlvbmFsIGZpeCFcblxuVGhlcmVmb3JlLCB0aGUgc3RyYXRlZ3kgd2lsbCBiZTpcblxuKiAgICoqV29ydGhGdXp6aW5nKio6IFRydWVcbiogICAqKkZvY3VzU3ltYm9scyoqOiBFbXB0eSBcXFtcXF0gKHRvIGF2b2lkIGhvdCBwYXRoIGlzc3VlcylcbiogICAqKkVuYWJsZUNvbmZpZ3MqKjogXFxbXCJGVFJBQ0VcIiwgXCJGVU5DVElPTl9UUkFDRVJcIiwgXCJGVU5DVElPTl9HUkFQSF9UUkFDRVJcIlxcXVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc3NCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NjowOS40MTMyNTkyOTlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjQ5NzI0NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHVwX3Rhc2tfc3RydWN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdD0zNjg2PWNhbiBjdXJyZW50bHkgb25seSBoYXZlIGV2ZW50cyBlbmFibGVkIGZvciB0aGVtLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0LTM3MTItICAgICAgICAgICAgICBiYXNoLTIwNDQgIFswMDJdIGQuLi4gMTA1OTQuNDgxMDM0OiBfX2luY196b25lX3N0YXRlIFxcdTAwM2Mtem9uZV9zdGF0aXN0aWNzXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0OjM3MTM6ICAgICAgICAgICAgICBiYXNoLTIwNDQgIFswMDJdIC4uLi4gMTA1OTQuNDgxMDM1OiBhcmNoX2R1cF90YXNrX3N0cnVjdCBcXHUwMDNjLWNvcHlfcHJvY2Vzc1xcbkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdC0zNzE0LSAgWy4uLl1cXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL3Byb2Nlc3MuYz0yMzI9aW50IGNvcHlfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jLTI2My1cXHQgICB2YWx1ZSBmcm9tIHRoZSBwYXJlbnQsIHdoaWNoIHdpbGwgaGF2ZSBiZWVuIHNldCBieSB0aGUgYmxvY2tcXG5hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmM6MjY0OlxcdCAgIGNvcHkgaW4gZHVwX3Rhc2tfc3RydWN0LiAgVGhpcyBpcyBub24taW50dWl0aXZlLCBidXQgaXNcXG5hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMtMjY1LVxcdCAgIHJlcXVpcmVkIGZvciBwcm9wZXIgb3BlcmF0aW9uIGluIHRoZSBjYXNlIG9mIGEgdGhyZWFkZWRcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2Zwc2ltZC5jPTE3NjQ9dm9pZCBmcHNpbWRfcmVzdG9yZV9jdXJyZW50X3N0YXRlKHZvaWQpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9mcHNpbWQuYy0xNzY3LVxcdCAqIFRJRl9GT1JFSUdOX0ZQU1RBVEUgaXMgc2V0IG9uIHRoZSBpbml0IHRhc2sgYW5kIGNvcGllZCBieVxcbmFyY2gvYXJtNjQva2VybmVsL2Zwc2ltZC5jOjE3Njg6XFx0ICogYXJjaF9kdXBfdGFza19zdHJ1Y3QoKSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgRlAvU0lNRCBpcyBkZXRlY3RlZC5cXG5hcmNoL2FybTY0L2tlcm5lbC9mcHNpbWQuYy0xNzY5LVxcdCAqIFRodXMgdXNlciB0aHJlYWRzIGNhbiBoYXZlIHRoaXMgc2V0IGV2ZW4gd2hlbiBGUC9TSU1EIGhhc24ndCBiZWVuXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9jZXNzLmM9MzQ0PXZvaWQgYXJjaF9yZWxlYXNlX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvcHJvY2Vzcy5jLTM0OC1cXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9jZXNzLmM6MzQ5OmludCBhcmNoX2R1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCwgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMpXFxuYXJjaC9hcm02NC9rZXJuZWwvcHJvY2Vzcy5jLTM1MC17XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvcHJvY2Vzcy5jPTExMD12b2lkIGV4aXRfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Byb2Nlc3MuYy0xMTMtXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Byb2Nlc3MuYzoxMTQ6aW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYylcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvcHJvY2Vzcy5jLTExNS17XFxuLS1cXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg9MzE9ZXh0ZXJuIHVuc2lnbmVkIGludCB2Y2VkX2NvdW50LCB2Y2VpX2NvdW50O1xcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaDozMjpleHRlcm4gaW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYyk7XFxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTMzLVxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmM9NzE9dm9pZCBleGl0X3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jLTgwLVxcbmFyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jOjgxOmludCBhcmNoX2R1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCwgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMpXFxuYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMtODIte1xcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmg9NTQ9c3RydWN0IHRocmVhZF9pbmZvIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oLTg4LS8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmg6ODk6ZXh0ZXJuIGludCBhcmNoX2R1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCwgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMpO1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oLTkwLVxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmM9MTY3Nj1FWFBPUlRfU1lNQk9MX0dQTChzZXRfdGhyZWFkX3RpZHIpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMtMTY4My0gKi9cXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYzoxNjg0OmludCBhcmNoX2R1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCwgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMpXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMtMTY4NS17XFxuLS1cXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oPTE4OT1leHRlcm4gdm9pZCByaXNjdl9maWxsX2h3Y2FwKHZvaWQpO1xcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6MTkwOmV4dGVybiBpbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKTtcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTE5MS1cXG4tLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaD0xMDE9dm9pZCBhcmNoX3JlbGVhc2VfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaDoxMDI6aW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYyk7XFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oLTEwMy1cXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL3Byb2Nlc3MuYz0yMDk9dm9pZCBhcmNoX3JlbGVhc2VfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9wcm9jZXNzLmMtMjE1LVxcbmFyY2gvcmlzY3Yva2VybmVsL3Byb2Nlc3MuYzoyMTY6aW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYylcXG5hcmNoL3Jpc2N2L2tlcm5lbC9wcm9jZXNzLmMtMjE3LXtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jPTc5PXZvaWQgYXJjaF9yZWxlYXNlX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMtODQtXFxuYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmM6ODU6aW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYylcXG5hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYy04Ni17XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYz0xMDY9aW50IGNvcHlfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMtMTYxLVxcdCAqIENsZWFyIHRoZSBydW50aW1lIGluc3RydW1lbnRhdGlvbiBmbGFnIGFmdGVyIHRoZSBhYm92ZSBjaGlsZHJlZ3NcXG5hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYzoxNjI6XFx0ICogY29weS4gVGhlIENCIHBvaW50ZXIgd2FzIGFscmVhZHkgY2xlYXJlZCBpbiBhcmNoX2R1cF90YXNrX3N0cnVjdCgpLlxcbmFyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jLTE2My1cXHQgKi9cXG4tLVxcbmFyY2gvc2gva2VybmVsL3Byb2Nlc3MuYz0xNz1FWFBPUlRfU1lNQk9MKF9fc3RhY2tfY2hrX2d1YXJkKTtcXG4tLVxcbmFyY2gvc2gva2VybmVsL3Byb2Nlc3MuYy0yMy0gKi9cXG5hcmNoL3NoL2tlcm5lbC9wcm9jZXNzLmM6MjQ6aW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYylcXG5hcmNoL3NoL2tlcm5lbC9wcm9jZXNzLmMtMjUte1xcbi0tXFxuYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc182NC5jPTU3MD1pbnQgY29weV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXFxuLS1cXG5hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzY0LmMtNjUwLSAqL1xcbmFyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfNjQuYzo2NTE6aW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYylcXG5hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzY0LmMtNjUyLXtcXG4tLVxcbmFyY2gvdW0va2VybmVsL3Byb2Nlc3MuYz0xODg9dm9pZCBpbml0aWFsX3RocmVhZF9jYih2b2lkICgqcHJvYykodm9pZCAqKSwgdm9pZCAqYXJnKVxcbi0tXFxuYXJjaC91bS9rZXJuZWwvcHJvY2Vzcy5jLTE5Mi1cXG5hcmNoL3VtL2tlcm5lbC9wcm9jZXNzLmM6MTkzOmludCBhcmNoX2R1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCxcXG5hcmNoL3VtL2tlcm5lbC9wcm9jZXNzLmMtMTk0LVxcdFxcdFxcdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYylcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmM9OTk9REVGSU5FX1BFUl9DUFUoYm9vbCwgY2FjaGVfc3RhdGVfaW5jb2hlcmVudCk7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jLTEwNC0gKi9cXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jOjEwNTppbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKVxcbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMtMTA2LXtcXG4tLVxcbmFyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmM9MjA0PXZvaWQgZmx1c2hfdGhyZWFkKHZvaWQpXFxuLS1cXG5hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jLTIxNi0gKi9cXG5hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jOjIxNzppbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKVxcbmFyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmMtMjE4LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvdGhyZWFkX2luZm8uaD0yMzI9dm9pZCBhcmNoX3JlbGVhc2VfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xcbmluY2x1ZGUvbGludXgvdGhyZWFkX2luZm8uaDoyMzM6aW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LFxcbmluY2x1ZGUvbGludXgvdGhyZWFkX2luZm8uaC0yMzQtXFx0XFx0XFx0XFx0c3RydWN0IHRhc2tfc3RydWN0ICpzcmMpO1xcbi0tXFxua2VybmVsL2ZvcmsuYz04NTU9dm9pZCBfX2luaXQgZm9ya19pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvZm9yay5jLTg5OS1cXG5rZXJuZWwvZm9yay5jOjkwMDppbnQgX193ZWFrIGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LFxcbmtlcm5lbC9mb3JrLmMtOTAxLVxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYylcXG4tLVxcbmtlcm5lbC9mb3JrLmM9OTA3PXZvaWQgc2V0X3Rhc2tfc3RhY2tfZW5kX21hZ2ljKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxua2VybmVsL2ZvcmsuYy05MTQtXFxua2VybmVsL2ZvcmsuYzo5MTU6c3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqb3JpZywgaW50IG5vZGUpXFxua2VybmVsL2ZvcmsuYy05MTYte1xcbi0tXFxua2VybmVsL2ZvcmsuYy05MjUtXFxua2VybmVsL2ZvcmsuYzo5MjY6XFx0ZXJyID0gYXJjaF9kdXBfdGFza19zdHJ1Y3QodHNrLCBvcmlnKTtcXG5rZXJuZWwvZm9yay5jLTkyNy1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2ZvcmsuYz0yMDE4PV9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXFxuLS1cXG5rZXJuZWwvZm9yay5jLTIxMzgtXFx0cmV0dmFsID0gLUVOT01FTTtcXG5rZXJuZWwvZm9yay5jOjIxMzk6XFx0cCA9IGR1cF90YXNrX3N0cnVjdChjdXJyZW50LCBub2RlKTtcXG5rZXJuZWwvZm9yay5jLTIxNDAtXFx0aWYgKCFwKVxcbi0tXFxua2VybmVsL2ZvcmsuYy0yMjAwLVxcbmtlcm5lbC9mb3JrLmM6MjIwMTpcXHRkZWxheWFjY3RfdHNrX2luaXQocCk7XFx0LyogTXVzdCByZW1haW4gYWZ0ZXIgZHVwX3Rhc2tfc3RydWN0KCkgKi9cXG5rZXJuZWwvZm9yay5jLTIyMDItXFx0cC1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfihQRl9TVVBFUlBSSVYgfCBQRl9XUV9XT1JLRVIgfCBQRl9JRExFIHwgUEZfTk9fU0VUQUZGSU5JVFkpO1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz00Mzc4PXZvaWQgaW5pdF9udW1hX2JhbGFuY2luZyh1NjQgY2xvbmVfZmxhZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtNDQxMi1cXHQgKiBOZXcgdGhyZWFkLCBrZWVwIGV4aXN0aW5nIG51bWFfcHJlZmVycmVkX25pZCB3aGljaCBzaG91bGQgYmUgY29waWVkXFxua2VybmVsL3NjaGVkL2ZhaXIuYzo0NDEzOlxcdCAqIGFscmVhZHkgYnkgYXJjaF9kdXBfdGFza19zdHJ1Y3QgYnV0IHN0YWdnZXIgd2hlbiBzY2FucyBzdGFydC5cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTQ0MTQtXFx0ICovXFxuLS1cXG5rZXJuZWwvc21wLmM9ODg5PXN0YXRpYyB2b2lkIHNtcF9jYWxsX2Z1bmN0aW9uX21hbnlfY29uZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayxcXG4tLVxcbmtlcm5lbC9zbXAuYy05ODgtXFx0ICogVGhlIElQSSB3b3JrIGhhcyBiZWVuIHF1ZXVlZCBhbmQgZGlzcGF0Y2hlZC4gT24gUFJFRU1QVCBrZXJuZWxzLFxcbmtlcm5lbC9zbXAuYzo5ODk6XFx0ICogdGFza3MgY3JlYXRlZCB0aHJvdWdoIGR1cF90YXNrX3N0cnVjdCgpIGhhdmUgdGFzay1sb2NhbCB3YWl0IG1hc2tzLlxcbmtlcm5lbC9zbXAuYy05OTAtXFx0ICogVGhlIGJvb3QgaW5pdF90YXNrIGNhbiBmYWxsIGJhY2sgdG8gY2ZkLVxcdTAwM2VjcHVtYXNrIHdoZW4gdGhlIG1hc2sgaXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDY6MTAuODM4MjM5Nzc3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3NTU3NDkwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBjb3B5X3Byb2Nlc3NgIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBoZXJlJ3Mgd2hhdCdzIGhhcHBlbmluZy4gSSB3YXMgcmlnaHQ7IHRoZSByb290IG9mIHRoaXMgbGllcyB3aXRoaW4gYGtlcm5lbC9mb3JrLmNgLCBzcGVjaWZpY2FsbHkgaW4gYGR1cF90YXNrX3N0cnVjdGAuIFdlIGFsbCBrbm93IHRoaXMgZnVuY3Rpb24sIG9yIGl0cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY291bnRlcnBhcnQgYGFyY2hfZHVwX3Rhc2tfc3RydWN0YCwgZXNzZW50aWFsbHkgZG9lcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjb3B5IOKAkyBgKnRzayA9ICpvcmlnYCwgZWZmZWN0aXZlbHkgZHVwbGljYXRpbmcgdGhlIHRhc2sgc3RydWN0dXJlLiBUaGlzIG1lYW5zIHRoZSBgcmV0X3N0YWNrYCBwb2ludGVyIGZyb20gdGhlIHBhcmVudCBwcm9jZXNzIChgY3VycmVudC1cdTAwM2VyZXRfc3RhY2tgKSBpcyBnZXR0aW5nIGRpcmVjdGx5IGNvcGllZCBpbnRvIHRoZSBjaGlsZCBwcm9jZXNzLlxuXG5UaGUgY3J1eCBvZiB0aGUgcHJvYmxlbSBhcmlzZXMgd2hlbiB0aGlzIGNvcHkgaGFwcGVucywgYnV0IGFuIGVycm9yIG9jY3VycyAqYmVmb3JlKiBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgaGFzIGEgY2hhbmNlIHRvIGNsZWFyIHRoZSBjaGlsZCdzIGByZXRfc3RhY2tgLiBUaGVuIHdlJ3JlIGluIHRyb3VibGUuIFRoZSBlcnJvciBwYXRoIHN1YnNlcXVlbnRseSBpbnZva2VzIGBmcmVlX3Rhc2tgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYC4gQW5kIHRoZXJlLCBgZnRyYWNlX2dyYXBoX2V4aXRfdGFza2AgZnJlZXMgdGhlICpwYXJlbnQncyogYHJldF9zdGFja2AuIFRoZSBjaGlsZCBzdGlsbCBoYXMgYSBkYW5nbGluZyBwb2ludGVyIHRvIHRoZSBmcmVlJ2QgbWVtb3J5LiBBIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUsIHBsYWluIGFuZCBzaW1wbGUuXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgZWxlZ2FudCBpbiBpdHMgc2ltcGxpY2l0eS4gSXQganVzdCBzaGlmdHMgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIHVwd2FyZHMsIHRvIGJlIGV4ZWN1dGVkICpiZWZvcmUqIGFueSBwb3RlbnRpYWxseSBmYWlsaW5nIG9wZXJhdGlvbnMgaW4gdGhlIGBjb3B5X3Byb2Nlc3NgIGVycm9yIHBhdGhzLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgY2hpbGQncyBgcmV0X3N0YWNrYCBpcyB6ZXJvZWQgb3V0IGJlZm9yZSBhbnl0aGluZyBjYW4gZ28gd3JvbmcuXG5cbk5hdHVyYWxseSwgdGhpcyBmaXggb25seSBhcHBsaWVzIGlmIGBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCBpcyBlbmFibGVkLCBhcyB0aGF0J3Mgd2hhdCBicmluZ3MgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIGFuZCBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgaW50byB0aGUgcGljdHVyZS4gVGhhdCBhbHNvIHJlcXVpcmVzIHRoZSBzdGFuZGFyZCBkZXBlbmRlbmNpZXMgb2YgYENPTkZJR19GVU5DVElPTl9UUkFDRVJgIGFuZCBgQ09ORklHX0ZUUkFDRWAuXG5cbkdpdmVuIGhvdyBoZWF2aWx5IGZ1enplZCBgY29weV9wcm9jZXNzYCBpcyBhcyBhIGhvdCBwYXRoLCB0aGlzIGlzIGEgdmVyeSBoaWdoIGltcGFjdCBmaXguIE5vIG5lZWQgdG8gZ28gaHVudGluZyBmb3Igc3BlY2lmaWMgc3ltYm9scyBmb3IgdGhpcyBvbmUuXG5cblRpbWUgdG8gZmVlZCB0aGlzIGludG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY0ODcsIk91dHB1dFRva2VucyI6MjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ2OjIwLjU5Mzk5MTI0NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MDQ0MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVFJBQ0VcIixcbiAgICBcIkZVTkNUSU9OX1RSQUNFUlwiLFxuICAgIFwiRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGluIHRoZSBlcnJvciBwYXRocyBvZiBjb3B5X3Byb2Nlc3MoKS4gV2hlbiBhIHRhc2sgaXMgZHVwbGljYXRlZCB2aWEgZHVwX3Rhc2tfc3RydWN0KCksIHRoZSBjaGlsZCB0YXNrIGluaGVyaXRzIHRoZSBwYXJlbnQncyByZXRfc3RhY2sgcG9pbnRlci4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBwcm9jZXNzIGNyZWF0aW9uIGJlZm9yZSBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKCkgY2xlYXJzIHRoZSBjaGlsZCdzIHJldF9zdGFjaywgdGhlIGVycm9yIHBhdGggKGZyZWVfdGFzayAtXFx1MDAzZSBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKSB3aWxsIGVycm9uZW91c2x5IGZyZWUgdGhlIHBhcmVudCdzIHJldF9zdGFjaywgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlIHdoZW4gdGhlIHBhcmVudCByZXN1bWVzIGV4ZWN1dGlvbi4gVGhlIHBhdGNoIG1vdmVzIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKSBiZWZvcmUgYW55IGZhbGxpYmxlIG9wZXJhdGlvbnMgdG8gcHJldmVudCB0aGlzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggZm9yIGEgcmVhY2hhYmxlIGNvcmUga2VybmVsIGJ1ZywgcmVxdWlyaW5nIGZ0cmFjZSBncmFwaCB0cmFjaW5nIGNvbmZpZ3MgdG8gYmUgZW5hYmxlZC4gTm8gc3BlY2lmaWMgZm9jdXMgc3ltYm9scyBhcmUgbmVlZGVkIHNpbmNlIGNvcHlfcHJvY2VzcygpIGlzIGFscmVhZHkgaGVhdmlseSBmdXp6ZWQgdmlhIGNsb25lL2Zvcmsgc3lzY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlRSQUNFXCIsXG4gICAgXCJGVU5DVElPTl9UUkFDRVJcIixcbiAgICBcIkZVTkNUSU9OX0dSQVBIX1RSQUNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBpbiB0aGUgZXJyb3IgcGF0aHMgb2YgY29weV9wcm9jZXNzKCkuIFdoZW4gYSB0YXNrIGlzIGR1cGxpY2F0ZWQgdmlhIGR1cF90YXNrX3N0cnVjdCgpLCB0aGUgY2hpbGQgdGFzayBpbmhlcml0cyB0aGUgcGFyZW50J3MgcmV0X3N0YWNrIHBvaW50ZXIuIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgcHJvY2VzcyBjcmVhdGlvbiBiZWZvcmUgZnRyYWNlX2dyYXBoX2luaXRfdGFzaygpIGNsZWFycyB0aGUgY2hpbGQncyByZXRfc3RhY2ssIHRoZSBlcnJvciBwYXRoIChmcmVlX3Rhc2sgLVxcdTAwM2UgZnRyYWNlX2dyYXBoX2V4aXRfdGFzaykgd2lsbCBlcnJvbmVvdXNseSBmcmVlIHRoZSBwYXJlbnQncyByZXRfc3RhY2ssIGxlYWRpbmcgdG8gYSB1c2UtYWZ0ZXItZnJlZSB3aGVuIHRoZSBwYXJlbnQgcmVzdW1lcyBleGVjdXRpb24uIFRoZSBwYXRjaCBtb3ZlcyBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKCkgYmVmb3JlIGFueSBmYWxsaWJsZSBvcGVyYXRpb25zIHRvIHByZXZlbnQgdGhpcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGZvciBhIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBidWcsIHJlcXVpcmluZyBmdHJhY2UgZ3JhcGggdHJhY2luZyBjb25maWdzIHRvIGJlIGVuYWJsZWQuIE5vIHNwZWNpZmljIGZvY3VzIHN5bWJvbHMgYXJlIG5lZWRlZCBzaW5jZSBjb3B5X3Byb2Nlc3MoKSBpcyBhbHJlYWR5IGhlYXZpbHkgZnV6emVkIHZpYSBjbG9uZS9mb3JrIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NjoyMC42NjMwNDExMDNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTEyOTgwMDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDY6MjAuNjYzNDY5NjczWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIwMTEyNTQ3NTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgZWFybGllciBpbiBgY29weV9wcm9jZXNzKClgIHRvIGVuc3VyZSB0aGF0IGBwLVxcdTAwM2VyZXRfc3RhY2tgIGFuZCByZWxhdGVkIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgKHNldCB0byBOVUxMIG9yIG5ld2x5IGFsbG9jYXRlZCkgYmVmb3JlIGFueSBmYWxsaWJsZSBvcGVyYXRpb25zIG9jY3VyLiBQcmlvciB0byB0aGlzIGNoYW5nZSwgaWYgYW4gZXJyb3Igb2NjdXJyZWQgZWFybHkgaW4gYGNvcHlfcHJvY2VzcygpYCAoZS5nLiwgaW4gYGNvcHlfZXhlY19zdGF0ZSgpYCksIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGNvdWxkIGZyZWUgdGhlIG5ldyB0YXNrIHN0cnVjdHVyZSB3aGlsZSBpdCBzdGlsbCBoZWxkIGEgY29weSBvZiB0aGUgcGFyZW50J3MgYHJldF9zdGFja2AgcG9pbnRlciAoZHVlIHRvIGBkdXBfdGFza19zdHJ1Y3QoKWApLiBUaGlzIHdvdWxkIHJlc3VsdCBpbiBmcmVlaW5nIHRoZSBwYXJlbnQncyBgcmV0X3N0YWNrYCwgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGJ1Zy5cXG5cXG5UaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBidWdzICh1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUpIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIGlzc3VlIGRvZXMgbm90IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQsIGFzIHN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIGJ1ZyB0aGlzIHBhdGNoIGFkZHJlc3Nlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4YThhMTNlYTk0OGI2MGFiODE2NzQ0NTAwM2Q4N2Q2ZDJhZjI0ODU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMDk6NDQ6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuY1xuaW5kZXggMWU2ODQwNGJkNzczZS4uMGQxYWQ5MmUyZDMzNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mb3JrLmNcbisrKyBiL2tlcm5lbC9mb3JrLmNcbkBAIC0yMTM5LDYgKzIxMzksMTEgQEAgX19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcyhcbiBcdHAgPSBkdXBfdGFza19zdHJ1Y3QoY3VycmVudCwgbm9kZSk7XG4gXHRpZiAoIXApXG4gXHRcdGdvdG8gZm9ya19vdXQ7XG4rXHQvKlxuK1x0ICogTXVzdCBydW4gYmVmb3JlIHRoZSBmaXJzdCBmYWxsaWJsZSBvcCwgc28gZXJyb3IgcGF0aHMgbmV2ZXJcbitcdCAqIGZyZWUgdGhlIHBhcmVudCdzIHJldF9zdGFjay5cbitcdCAqL1xuK1x0ZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTtcbiBcdHJldHZhbCA9IGNvcHlfZXhlY19zdGF0ZShjbG9uZV9mbGFncywgcCk7XG4gXHRpZiAocmV0dmFsKVxuIFx0XHRnb3RvIGJhZF9mb3JrX2ZyZWU7XG5AQCAtMjE2NSw4ICsyMTcwLDYgQEAgX19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcyhcbiBcdCAqL1xuIFx0cC1cdTAwM2VjbGVhcl9jaGlsZF90aWQgPSAoY2xvbmVfZmxhZ3MgXHUwMDI2IENMT05FX0NISUxEX0NMRUFSVElEKSA/IGFyZ3MtXHUwMDNlY2hpbGRfdGlkIDogTlVMTDtcbiBcbi1cdGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socCk7XG4tXG4gXHRydF9tdXRleF9pbml0X3Rhc2socCk7XG4gXHRyYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2cC1cdTAwM2VibG9ja2VkX2xvY2spO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDY6MjAuNjYzNDcwNDYzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMzg3NzQ0NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIEltcGFjdCBvbiBNZW1vcnkgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1vdmluZyBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgZWFybGllciBpbiBgY29weV9wcm9jZXNzKClgLCByaWdodCBhZnRlciBgZHVwX3Rhc2tfc3RydWN0KClgLiBUaGUgY29tbWVudCBtZW50aW9ucyB0aGF0IHRoaXMgaXMgY3J1Y2lhbCB0byBwcmV2ZW50IGZyZWVpbmcgdGhlIHBhcmVudCdzIGByZXRfc3RhY2tgIGluIGVycm9yIHBhdGhzLiAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBwcmV2ZW50cyBhIHByb2JsZW0gd2l0aCB0aGUgcGFyZW50J3MgcmV0X3N0YWNrLCBhbmQgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgdGhhdCBLTVNBTiBtaWdodCBjYXRjaC5cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBgZHVwX3Rhc2tfc3RydWN0KClgIGlzIGFsbG9jYXRpbmcgYSBuZXcgYHRhc2tfc3RydWN0YCBhbmQgY29weWluZyB0aGUgY29udGVudHMgb2YgdGhlIHBhcmVudCdzIGB0YXNrX3N0cnVjdGAgaW50byBpdC4gIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGlmIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCBzZXRzIHNvbWUgZmllbGRzLCBtYXliZSBpbmNsdWRpbmcgYHJldF9zdGFja2AsIHRvIE5VTEwgb3IgemVybywgdGhlbiBtb3ZpbmcgaXQgZWFybGllciBtZWFucyB0aGVzZSBmaWVsZHMgd29uJ3QgaG9sZCB0aGUgcGFyZW50J3MgZGF0YSBhbnltb3JlLCBkdXJpbmcgYW4gZXJyb3IgcGF0aCB3aGVuIG90aGVyIHN0ZXBzIChlLmcuLCBgY29weV9leGVjX3N0YXRlYCkgbWlnaHQgZmFpbC4gVGhpcyBpcyBjcnVjaWFsOiBpZiB0aG9zZSBlcnJvciBwYXRocyB3ZXJlIHRvIHJlbGVhc2UgdGhlIG1lbW9yeSBwb2ludGVkIHRvIGJ5IHRoZSAqcGFyZW50J3MqIGByZXRfc3RhY2tgLCBhbmQgdGhlbiB0aGUgcGFyZW50IGNvbnRpbnVlZCB0byB1c2UgaXQsIGl0IHdvdWxkIGJlIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBvciBhIGRvdWJsZSBmcmVlISAgVGhlIHBhcmVudCdzIGByZXRfc3RhY2tgIG1pZ2h0IGJlIGEgcG9pbnRlciB0byBpdHMgb3duIHN0cnVjdHVyZXMuXG5cbldhaXQsIGlzIHRoaXMgcmVhbGx5IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICppc3N1ZSogdGhvdWdoPyBUaGlzIGlzIGEgZml4IGZvciBhICp1c2UtYWZ0ZXItZnJlZSogb3IgKmRvdWJsZS1mcmVlKiwgd2hpY2ggS0FTQU4gd291bGQgZGVmaW5pdGVseSBjYXRjaC4gYGR1cF90YXNrX3N0cnVjdGAgaW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSB0byB0aGUgcGFyZW50J3MgdmFsdWVzLCBzbyBpdCdzIG5vdCB1bmluaXRpYWxpemVkIGluIHRoZSBzdHJpY3Qgc2Vuc2UuIFRoZSB3b3JyeSBpcyB0aGF0IGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBwcm9iYWJseSBzZXRzIHNvbWV0aGluZyBsaWtlIGBwLVx1MDAzZXJldF9zdGFjayA9IE5VTExgIG9yIHNpbWlsYXIsIGFmdGVyIHRoZSBjb3B5LiAgTW92aW5nIHRoaXMgb3BlcmF0aW9uIGVhcmxpZXIgbWVhbnMgYHAtXHUwMDNlcmV0X3N0YWNrYCAqd29uJ3QqIGhhdmUgdGhlIHBhcmVudCdzIHBvdGVudGlhbGx5IGludmFsaWQgcG9pbnRlciBhbnltb3JlIGluIGNhc2Ugb2YgYW4gZXJyb3IuIFRoaXMgaXMgYSBkYW5nbGluZyBwb2ludGVyL2RvdWJsZS1mcmVlIGlzc3VlLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIHNob3VsZCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgY29kZSBmb3IgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIHRvIGNvbmZpcm0gdGhpcyBodW5jaCBhbmQgcnVsZSBvdXQgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3JzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDY6MjguOTAyMjQ4NTE5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM0NDkxODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzQyPWV4dGVybiB0cmFjZV9mdW5jX2dyYXBoX2VudF90IGZ0cmFjZV9ncmFwaF9lbnRyeTtcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNDMtXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzQ0OmV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KTtcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNDUtZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzU2PXN0YXRpYyBpbmxpbmUgdm9pZCB1bnBhdXNlX2dyYXBoX3RyYWNpbmcodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM2My1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNjQ6c3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNjUtc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cXG4tLVxcbmtlcm5lbC9mb3JrLmM9MjAxOD1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxcbi0tXFxua2VybmVsL2ZvcmsuYy0yMTQ1LVxcdCAqL1xcbmtlcm5lbC9mb3JrLmM6MjE0NjpcXHRmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApO1xcbmtlcm5lbC9mb3JrLmMtMjE0Ny1cXHRyZXR2YWwgPSBjb3B5X2V4ZWNfc3RhdGUoY2xvbmVfZmxhZ3MsIHApO1xcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTExMzE9dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF9pZGxlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY3B1KVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTExNTktLyogQWxsb2NhdGUgYSByZXR1cm4gc3RhY2sgZm9yIG5ld2x5IGNyZWF0ZWQgdGFzayAqL1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMTYwOnZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTExNjEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NjozMC4zMzY3NDYxMDlaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3MDUyNDk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgZ3V0cyBvZiB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2VyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AuICBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gYGtlcm5lbC90cmFjZS9mZ3JhcGguY2AuIEknbSBnb2luZyB0byBzdGFydCBmcm9tIHRoZXJlLiBJIGV4cGVjdCB0aGF0IHRoaXMgcm91dGluZSBtdXN0IGJlIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBuZWNlc3NhcnkgY29udGV4dCBvciBpbnRlcm5hbCBzdHJ1Y3R1cmVzIHdoZW4gYSBuZXcgdGFzayBpcyBpbml0aWFsaXplZC4gUGVyaGFwcyBJIGNhbiB3b3JrIG91dCBob3cgYSB0YXNrJ3MgZnVuY3Rpb24gZ3JhcGggc3RhdGUgaXMgaW5pdGlhbGl6ZWQsIHdoYXQgZmxhZ3Mgb3IgdmFyaWFibGVzIGFyZSBzZXQgYW5kIHRoZSByb2xlIGl0IHBsYXlzIGluIHRoZSBvdmVyYWxsIGBmdHJhY2VgIGFyY2hpdGVjdHVyZS4gVW5kZXJzdGFuZGluZyB0aGlzIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgd2lsbCBwcm92aWRlIHZhbHVhYmxlIGluc2lnaHQgaW50byBpdHMgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHRyYWNlci4gSSBhbnRpY2lwYXRlIHRoYXQgdGhpcyBmdW5jdGlvbiBjYWxsIGlzIGF0IHRoZSBoZWFydCBvZiB0aGUgdHJhY2VyJ3MgcGVyLXRhc2sgdHJhY2tpbmcgd2hpY2ggaXMgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGlubmVyIHdvcmtpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDgwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDY6MzQuMDA3Mjc0MjkzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9mZ3JhcGguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTU5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTU5OlxcdC8qIEFsbG9jYXRlIGEgcmV0dXJuIHN0YWNrIGZvciBuZXdseSBjcmVhdGVkIHRhc2sgKi9cXG4xMTYwOlxcdHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxuMTE2MTpcXHR7XFxuMTE2MjpcXHRcXHQvKiBNYWtlIHN1cmUgd2UgZG8gbm90IHVzZSB0aGUgcGFyZW50IHJldF9zdGFjayAqL1xcbjExNjM6XFx0XFx0dC1cXHUwMDNlcmV0X3N0YWNrID0gTlVMTDtcXG4xMTY0OlxcdFxcdHQtXFx1MDAzZWN1cnJfcmV0X3N0YWNrID0gMDtcXG4xMTY1OlxcdFxcdHQtXFx1MDAzZWN1cnJfcmV0X2RlcHRoID0gLTE7XFxuMTE2NjpcXHRcXG4xMTY3OlxcdFxcdGlmIChmdHJhY2VfZ3JhcGhfYWN0aXZlKSB7XFxuMTE2ODpcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpyZXRfc3RhY2s7XFxuMTE2OTpcXHRcXG4xMTcwOlxcdFxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWZncmFwaF9zdGFja19jYWNoZXApKVxcbjExNzE6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjExNzI6XFx0XFxuMTE3MzpcXHRcXHRcXHRyZXRfc3RhY2sgPSBrbWVtX2NhY2hlX2FsbG9jKGZncmFwaF9zdGFja19jYWNoZXAsIEdGUF9LRVJORUwpO1xcbjExNzQ6XFx0XFx0XFx0aWYgKCFyZXRfc3RhY2spXFxuMTE3NTpcXHRcXHRcXHRcXHRyZXR1cm47XFxuMTE3NjpcXHRcXHRcXHRncmFwaF9pbml0X3Rhc2sodCwgcmV0X3N0YWNrKTtcXG4xMTc3OlxcdFxcdH1cXG4xMTc4OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDY6MzQuMDA3MzY0NjAyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3Njg2MzQ1ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBjb3B5X3Byb2Nlc3MoKWAgQnVnIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgZGlzYXN0ZXIgaW4gYGNvcHlfcHJvY2VzcygpYC4gRnJvbSB3aGF0IEkgZ2F0aGVyLCB0aGUgaXNzdWUgYm9pbHMgZG93biB0byBob3cgYHQtXHUwMDNlcmV0X3N0YWNrYCBpbnRlcmFjdHMgd2l0aCBlcnJvciBoYW5kbGluZy4gRXNzZW50aWFsbHksIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIHByb2Nlc3MgY3JlYXRpb24gYW5kIHRoZSBgcmV0X3N0YWNrYCBtaXN0YWtlbmx5IGhvbGRzIG9udG8gdGhlIHBhcmVudCdzIHZhbHVlLCBhbmQgdGhlbiB0aGUgZXJyb3IgaGFuZGxpbmcgcm91dGluZSAobGlrZSBgZnJlZV90YXNrKClgKSByZWxlYXNlcyBpdCwgYm9vbeKAlHdlIGhhdmUgYSB1c2UtYWZ0ZXItZnJlZSBvciwgZXZlbiB3b3JzZSwgYSBkb3VibGUtZnJlZSB2dWxuZXJhYmlsaXR5LiBLQVNBTiByaWdodGZ1bGx5IGZsYWdzIHRoaXMgYXMgYSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZSwgYSBjbGFzc2ljIFVBRiBidWcuIFRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBhbnkgaW5mb3JtYXRpb24gbGVha2FnZSBpbnZvbHZlZCBoZXJlLlxuXG5HaXZlbiB0aGF0IHRoaXMgaXMgcHVyZWx5IGEgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUsIGFuZCBLQVNBTiBpcyBhbHJlYWR5IG9uIHRoZSBjYXNlLCBLTVNBTiBpc24ndCBnb2luZyB0byBhZGQgYW55IHZhbHVlLiBJdCdzIG5vdCB0aGUgcmlnaHQgdG9vbCBmb3IgdGhpcyBqb2IuIFNvLCBJIHdpbGwgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYC4gTXkgcmF0aW9uYWxlIGlzIGNsZWFyOiBLQVNBTiBjb3ZlcnMgdGhlIGtleSBhc3BlY3RzIG9mIHRoaXMgYnVn4oCUc3BlY2lmaWNhbGx5LCB0aGUgZGV0ZWN0aW9uIG9mIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnPigJR3aGlsZSBLTVNBTidzIGZvY3VzIG9uIGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBkb2Vzbid0IGFsaWduIHdpdGggdGhlIG5hdHVyZSBvZiB0aGlzIHBhcnRpY3VsYXIgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNTIsIk91dHB1dFRva2VucyI6MjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDY6NDAuNzc2MDAxMzI1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgZWFybGllciBpbiBgY29weV9wcm9jZXNzKClgIHRvIGVuc3VyZSB0aGF0IGBwLVxcdTAwM2VyZXRfc3RhY2tgIGFuZCByZWxhdGVkIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgKHNldCB0byBOVUxMIG9yIG5ld2x5IGFsbG9jYXRlZCkgYmVmb3JlIGFueSBmYWxsaWJsZSBvcGVyYXRpb25zIG9jY3VyLiBQcmlvciB0byB0aGlzIGNoYW5nZSwgaWYgYW4gZXJyb3Igb2NjdXJyZWQgZWFybHkgaW4gYGNvcHlfcHJvY2VzcygpYCAoZS5nLiwgaW4gYGNvcHlfZXhlY19zdGF0ZSgpYCksIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGNvdWxkIGZyZWUgdGhlIG5ldyB0YXNrIHN0cnVjdHVyZSB3aGlsZSBpdCBzdGlsbCBoZWxkIGEgY29weSBvZiB0aGUgcGFyZW50J3MgYHJldF9zdGFja2AgcG9pbnRlciAoZHVlIHRvIGBkdXBfdGFza19zdHJ1Y3QoKWApLiBUaGlzIHdvdWxkIHJlc3VsdCBpbiBmcmVlaW5nIHRoZSBwYXJlbnQncyBgcmV0X3N0YWNrYCwgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGJ1Zy5cXG5cXG5UaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBidWdzICh1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUpIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIGlzc3VlIGRvZXMgbm90IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQsIGFzIHN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIGJ1ZyB0aGlzIHBhdGNoIGFkZHJlc3Nlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgZWFybGllciBpbiBgY29weV9wcm9jZXNzKClgIHRvIGVuc3VyZSB0aGF0IGBwLVxcdTAwM2VyZXRfc3RhY2tgIGFuZCByZWxhdGVkIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgKHNldCB0byBOVUxMIG9yIG5ld2x5IGFsbG9jYXRlZCkgYmVmb3JlIGFueSBmYWxsaWJsZSBvcGVyYXRpb25zIG9jY3VyLiBQcmlvciB0byB0aGlzIGNoYW5nZSwgaWYgYW4gZXJyb3Igb2NjdXJyZWQgZWFybHkgaW4gYGNvcHlfcHJvY2VzcygpYCAoZS5nLiwgaW4gYGNvcHlfZXhlY19zdGF0ZSgpYCksIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGNvdWxkIGZyZWUgdGhlIG5ldyB0YXNrIHN0cnVjdHVyZSB3aGlsZSBpdCBzdGlsbCBoZWxkIGEgY29weSBvZiB0aGUgcGFyZW50J3MgYHJldF9zdGFja2AgcG9pbnRlciAoZHVlIHRvIGBkdXBfdGFza19zdHJ1Y3QoKWApLiBUaGlzIHdvdWxkIHJlc3VsdCBpbiBmcmVlaW5nIHRoZSBwYXJlbnQncyBgcmV0X3N0YWNrYCwgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGJ1Zy5cXG5cXG5UaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBidWdzICh1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUpIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIGlzc3VlIGRvZXMgbm90IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQsIGFzIHN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIGJ1ZyB0aGlzIHBhdGNoIGFkZHJlc3Nlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4jnp9[1] Phase: Succeeded StartedAt: 2026-08-22 09:46:51 +0000 UTC FinishedAt: 2026-08-22 09:46:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jnp9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-22 09:46:51 +0000 UTC FinishedAt: 2026-08-22 09:46:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jnp9[2] Phase: Succeeded StartedAt: 2026-08-22 09:46:51 +0000 UTC FinishedAt: 2026-08-22 13:27:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-22 09:46:51 +0000 UTC FinishedAt: 2026-08-22 13:27:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-22 09:46:51 +0000 UTC FinishedAt: 2026-08-22 09:47:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-22 09:46:51 +0000 UTC FinishedAt: 2026-08-22 09:46:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4jnp9/series-workflow4jnp9-convert-artifact-2790747308/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-22 09:47:01 +0000 UTC FinishedAt: 2026-08-22 10:03:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-22 09:47:01 +0000 UTC FinishedAt: 2026-08-22 10:03:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d8350c4e-4919-42d4-9b8e-33a33515bc9c,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-workflow4jnp9/series-workflow4jnp9-convert-artifact-2790747308/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": "24abf3fa-fd52-4baf-acda-5e31249aeb5e", "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-workflow4jnp9/series-workflow4jnp9-build-action-1880781530/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-22 09:47:01 +0000 UTC FinishedAt: 2026-08-22 10:03:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d8350c4e-4919-42d4-9b8e-33a33515bc9c,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-workflow4jnp9/series-workflow4jnp9-convert-artifact-2790747308/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": "24abf3fa-fd52-4baf-acda-5e31249aeb5e", "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-workflow4jnp9/series-workflow4jnp9-build-action-1880781530/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-22 10:03:10 +0000 UTC FinishedAt: 2026-08-22 10:03:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-22 10:03:10 +0000 UTC FinishedAt: 2026-08-22 10:03:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-22 10:03:10 +0000 UTC FinishedAt: 2026-08-22 10:03:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-22 10:03:10 +0000 UTC FinishedAt: 2026-08-22 10:03:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4jnp9/series-workflow4jnp9-convert-artifact-1177511531/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-22 10:03:20 +0000 UTC FinishedAt: 2026-08-22 10:05:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-22 10:03:20 +0000 UTC FinishedAt: 2026-08-22 10:05:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*24abf3fa-fd52-4baf-acda-5e31249aeb5e,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-workflow4jnp9/series-workflow4jnp9-build-action-1880781530/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-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-22 10:05:37 +0000 UTC FinishedAt: 2026-08-22 10:05:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-22 10:05:37 +0000 UTC FinishedAt: 2026-08-22 10:05:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-22 10:05:37 +0000 UTC FinishedAt: 2026-08-22 10:22:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-22 10:05:37 +0000 UTC FinishedAt: 2026-08-22 10:22:09 +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:*d8350c4e-4919-42d4-9b8e-33a33515bc9c,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-workflow4jnp9/series-workflow4jnp9-convert-artifact-1177511531/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": "ab9c401a-21bb-4bfc-bd43-1455316accb2", "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-workflow4jnp9/series-workflow4jnp9-build-action-2758058895/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-22 10:05:37 +0000 UTC FinishedAt: 2026-08-22 10:21:59 +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:*d8350c4e-4919-42d4-9b8e-33a33515bc9c,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-workflow4jnp9/series-workflow4jnp9-convert-artifact-1177511531/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": "ab9c401a-21bb-4bfc-bd43-1455316accb2", "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-workflow4jnp9/series-workflow4jnp9-build-action-2758058895/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-22 10:22:09 +0000 UTC FinishedAt: 2026-08-22 10:22:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-22 10:22:09 +0000 UTC FinishedAt: 2026-08-22 10:22:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-22 10:22:09 +0000 UTC FinishedAt: 2026-08-22 10:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-22 10:22:09 +0000 UTC FinishedAt: 2026-08-22 10:24:09 +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:*ab9c401a-21bb-4bfc-bd43-1455316accb2,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-workflow4jnp9/series-workflow4jnp9-build-action-2758058895/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-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-22 10:24:19 +0000 UTC FinishedAt: 2026-08-22 13:27:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-22 10:24:19 +0000 UTC FinishedAt: 2026-08-22 13:27:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*24abf3fa-fd52-4baf-acda-5e31249aeb5e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ab9c401a-21bb-4bfc-bd43-1455316accb2,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-workflow4jnp9/series-workflow4jnp9-build-action-1880781530/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-workflow4jnp9/series-workflow4jnp9-build-action-2758058895/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-22 10:24:19 +0000 UTC FinishedAt: 2026-08-22 10:24:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-22 10:24:19 +0000 UTC FinishedAt: 2026-08-22 10:24:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4jnp9/series-workflow4jnp9-convert-artifact-290468740/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-22 10:24:19 +0000 UTC FinishedAt: 2026-08-22 10:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-22 10:24:19 +0000 UTC FinishedAt: 2026-08-22 10:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-22 10:24:19 +0000 UTC FinishedAt: 2026-08-22 10:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-22 10:24:29 +0000 UTC FinishedAt: 2026-08-22 13:27:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jnp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"a6c4011e-5e1d-421d-a646-8928694800c7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-22 10:24:29 +0000 UTC FinishedAt: 2026-08-22 13:27:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*24abf3fa-fd52-4baf-acda-5e31249aeb5e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ab9c401a-21bb-4bfc-bd43-1455316accb2,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-workflow4jnp9/series-workflow4jnp9-build-action-1880781530/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-workflow4jnp9/series-workflow4jnp9-build-action-2758058895/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-workflow4jnp9/series-workflow4jnp9-convert-artifact-290468740/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,}