Name: series-workflowhlbg7 Phase: Succeeded StartedAt: 2026-08-17 07:23:21 +0000 UTC FinishedAt: 2026-08-17 11:37:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlbg7[0] Phase: Succeeded StartedAt: 2026-08-17 07:23:21 +0000 UTC FinishedAt: 2026-08-17 07:54:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlbg7[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 07:23:21 +0000 UTC FinishedAt: 2026-08-17 07:54:20 +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": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG", "NUMA" ], "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": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG", "NUMA" ], "series_id": "58c65a32-515c-4711-87e7-c69737ce7797" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "try_to_free_pages", "try_to_free_mem_cgroup_pages", "node_reclaim", "wakeup_kswapd" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgICAmIzM0O25vZGVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDt3YWtldXBfa3N3YXBkJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBwYWdlIHJlY2xhaW0gdGhyb3R0bGluZyBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIGJ5IGludHJvZHVjaW5nIGEgbmV3IGhlbHBlciBmdW5jdGlvbiBgdGhyb3R0bGVfaXNvbGF0ZWRgLiBJdCB1c2VzIGEgbG9jYWwgYm9vbGVhbiB2YXJpYWJsZSBgZmF0YWxgIHBhc3NlZCBieSByZWZlcmVuY2UgdG8gdHJhY2sgaWYgYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZy4gVGhlIHZhcmlhYmxlIGBmYXRhbGAgaXMgdW5jb25kaXRpb25hbGx5IGluaXRpYWxpemVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYHRocm90dGxlX2lzb2xhdGVkYCBiZWZvcmUgYW55IHJlYWRzIG9jY3VyLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbGVhdmUgYW55IGZpZWxkcyB1bmluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGxvZ2ljIGVycm9ycywgdXNlLWFmdGVyLWZyZWUsIG9yIGRlYWRsb2Nrcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBvciBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IHJlY2xhaW0gbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYC4gSXQgaW50cm9kdWNlcyBgdGhyb3R0bGVfaXNvbGF0ZWQoKWAgdG8gdGhyb3R0bGUgcmVjbGFpbWVycyB3aGVuIHRvbyBtYW55IGZvbGlvcyBhcmUgaXNvbGF0ZWQsIGFuZCBhcHBsaWVzIHRoaXMgbG9naWMgdG8gYm90aCB0aGUgbGVnYWN5IExSVSAoYHNocmlua19pbmFjdGl2ZV9saXN0YCkgYW5kIHRoZSBNdWx0aS1HZW4gTFJVIChgZXZpY3RfZm9saW9zYCkuIEl0IGFsc28gYWRkcyBhY2NvdW50aW5nIGZvciBpc29sYXRlZCBmb2xpb3MgaW4gTUdMUlUuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtZW1vcnkgcHJlc3N1cmUgYW5kIGNvbmN1cnJlbnQgcGFnZSByZWNsYWltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTYzMmQ4ZWMyMzlkZmFiYmRjZmZmZmQ1NTg0OWRiMDM1MjI5OWE1OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDA3OjUxOjM5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGMxNDA0YTU5NTIzZDYuLjg4NmE1M2Y1NjNhYjcgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC0xODE5LDcgJiM0MzsxODE5LDcgQEAgYm9vbCBmb2xpb19pc29sYXRlX2xydShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuICAqIHRoZSBMUlUgbGlzdCB3aWxsIGdvIHNtYWxsIGFuZCBiZSBzY2FubmVkIGZhc3RlciB0aGFuIG5lY2Vzc2FyeSwgbGVhZGluZyB0b1xuICAqIHVubmVjZXNzYXJ5IHN3YXBwaW5nLCB0aHJhc2hpbmcgYW5kIE9PTS5cbiAgKi9cbi1zdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSxcbiYjNDM7c3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmaWxlLFxuIFx0XHRzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGluYWN0aXZlLCBpc29sYXRlZDtcbkBAIC0xODU2LDYgJiM0MzsxODU2LDM3IEBAIHN0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGludCBmaWxlLFxuIFx0cmV0dXJuIHRvb19tYW55O1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogVGhyb3R0bGUgcmVjbGFpbSBpZiB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MgYXJlIHBpbGluZyB1cC4gSWYgdGhpcyBtYWtlc1xuJiM0MzsgKiBubyBwcm9ncmVzcywgdGhlIGNhbGxlciBpcyBwcm9iYWJseSBsb29waW5nIG9uIHVuZXZpY3RhYmxlIGZvbGlvcywgc28gZ2l2ZVxuJiM0MzsgKiB1cC4gUmV0dXJucyBmYWxzZSB0byB0ZWxsIHRoZSBjYWxsZXIgdG8gc3RvcCByZWNsYWltaW5nLCBhbmQgc2V0cyBAZmF0YWxcbiYjNDM7ICogaWYgdGhlIHRhc2sgcmVjZWl2ZWQgYSBmYXRhbCBzaWduYWwgd2hpbGUgd2FpdGluZywgc28gdGhhdCB0aGUgY2FsbGVyIGNhblxuJiM0MzsgKiBiYWlsIG91dCBmYXN0ZXIuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCB0aHJvdHRsZV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZpbGUsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBib29sICpmYXRhbClcbiYjNDM7e1xuJiM0MztcdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHQqZmF0YWwgPSBmYWxzZTtcbiYjNDM7XHR3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHtcbiYjNDM7XHRcdGlmIChzdGFsbGVkKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0Lyogd2FpdCBhIGJpdCBmb3IgdGhlIHJlY2xhaW1lci4gKi9cbiYjNDM7XHRcdHN0YWxsZWQgPSB0cnVlO1xuJiM0MztcdFx0cmVjbGFpbV90aHJvdHRsZShwZ2RhdCwgVk1TQ0FOX1RIUk9UVExFX0lTT0xBVEVEKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIFJldHVybiBub3cuICovXG4mIzQzO1x0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbiYjNDM7XHRcdFx0KmZhdGFsID0gdHJ1ZTtcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBtb3ZlX2ZvbGlvc190b19scnUoKSBtb3ZlcyBmb2xpb3MgZnJvbSBwcml2YXRlIEBsaXN0IHRvIGFwcHJvcHJpYXRlIExSVSBsaXN0LlxuICAqXG5AQCAtMTk5MiwxOSAmIzQzOzIwMjMsMTQgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIFx0Ym9vbCBmaWxlID0gaXNfZmlsZV9scnUobHJ1KTtcbiBcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbi1cdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xuLVxuLVx0d2hpbGUgKHVubGlrZWx5KHRvb19tYW55X2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYykpKSB7XG4tXHRcdGlmIChzdGFsbGVkKVxuLVx0XHRcdHJldHVybiAwO1xuLVxuLVx0XHQvKiB3YWl0IGEgYml0IGZvciB0aGUgcmVjbGFpbWVyLiAqL1xuLVx0XHRzdGFsbGVkID0gdHJ1ZTtcbi1cdFx0cmVjbGFpbV90aHJvdHRsZShwZ2RhdCwgVk1TQ0FOX1RIUk9UVExFX0lTT0xBVEVEKTtcbiYjNDM7XHRib29sIGZhdGFsO1xuIFxuJiM0MztcdGlmICghdGhyb3R0bGVfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjLCBcdTAwMjZmYXRhbCkpIHtcbiBcdFx0LyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqL1xuLVx0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4mIzQzO1x0XHRpZiAoZmF0YWwpXG4gXHRcdFx0cmV0dXJuIFNXQVBfQ0xVU1RFUl9NQVg7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4gXHRscnVfYWRkX2RyYWluKCk7XG5AQCAtNDg4Myw2ICYjNDM7NDkwOSwyNSBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdGJvb2wgc2tpcF9yZXRyeSA9IGZhbHNlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG4mIzQzO1x0Ym9vbCBmYXRhbDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgdHlwZSB0byBpc29sYXRlIGlzIHVua25vd24gdW50aWwgaXNvbGF0aW9uLCBzbyBwcmVkaWN0IGl0IGZvclxuJiM0MztcdCAqIHRoZSB0aHJvdHRsaW5nIGNoZWNrLiBpc29sYXRlX2ZvbGlvcygpIG1heSBzdGlsbCBmYWxsIGJhY2sgdG8gdGhlXG4mIzQzO1x0ICogb3RoZXIgdHlwZSwgd2hpY2ggaXMgZmluZSBmb3IgdGhpcyBoZXVyaXN0aWMuXG4mIzQzO1x0ICovXG4mIzQzO1x0dHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcbiYjNDM7XHRpZiAoIXRocm90dGxlX2lzb2xhdGVkKHBnZGF0LCB0eXBlLCBzYywgXHUwMDI2ZmF0YWwpKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBMaWtlIHRoZSBsZWdhY3lcbiYjNDM7XHRcdCAqIHBhdGgsIHByZXRlbmQgc29tZSBwYWdlcyB3ZXJlIHJlY2xhaW1lZCBzbyByZWNsYWltIHVud2luZHNcbiYjNDM7XHRcdCAqIHF1aWNrbHkgaW5zdGVhZCBvZiBsb29waW5nIGJhY2sgaW50byB0aGUgdGhyb3R0bGUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChmYXRhbClcbiYjNDM7XHRcdFx0c2MtXHUwMDNlbnJfcmVjbGFpbWVkICYjNDM7PSBTV0FQX0NMVVNURVJfTUFYO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiBcbiBcdGxydXZlY19sb2NrX2lycShscnV2ZWMpO1xuIFxuQEAgLTQ4OTIsNiAmIzQzOzQ5MzcsOSBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdHNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLFxuIFx0XHRcdFx0IFx1MDAyNmxpc3QsIFx1MDAyNmlzb2xhdGVkLCBcdTAwMjZ0eXBlLCBcdTAwMjZ0eXBlX3NjYW5uZWQpO1xuIFx0bnJfaXNvbGF0ZWQgPSBpc29sYXRlZDtcbiYjNDM7XHRpZiAobnJfaXNvbGF0ZWQpXG4mIzQzO1x0XHRfX21vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZSxcbiYjNDM7XHRcdFx0XHQgICAgICBucl9pc29sYXRlZCk7XG4gXG4gXHQvKiBTY2FubmluZyBtYXkgaGF2ZSBlbXB0aWVkIHRoZSBvbGRlc3QgZ2VuLCBmbHVzaCBpdCAqL1xuIFx0aWYgKHNjYW5uZWQpXG5AQCAtNDk1NCw2ICYjNDM7NTAwMiwxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0Z290byByZXRyeTtcbiBcdH1cbiBcbiYjNDM7XHRpZiAobnJfaXNvbGF0ZWQpXG4mIzQzO1x0XHRtb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IHR5cGUsXG4mIzQzO1x0XHRcdFx0ICAgIC1ucl9pc29sYXRlZCk7XG4mIzQzO1xuIFx0aWYgKG5yX2lzb2xhdGVkIFx1MDAzZSB0b3RhbF9yZWNsYWltZWQpXG4gXHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IHR5cGUsXG4gXHRcdFx0XHQgbnJfaXNvbGF0ZWQgLSB0b3RhbF9yZWNsYWltZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtOVU1BJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7LAogICAgJiMzNDtub2RlX3JlY2xhaW0mIzM0OywKICAgICYjMzQ7d2FrZXVwX2tzd2FwZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgLiBJdCBpbnRyb2R1Y2VzIGB0aHJvdHRsZV9pc29sYXRlZCgpYCB0byB0aHJvdHRsZSByZWNsYWltZXJzIHdoZW4gdG9vIG1hbnkgZm9saW9zIGFyZSBpc29sYXRlZCwgYW5kIGFwcGxpZXMgdGhpcyBsb2dpYyB0byBib3RoIHRoZSBsZWdhY3kgTFJVIChgc2hyaW5rX2luYWN0aXZlX2xpc3RgKSBhbmQgdGhlIE11bHRpLUdlbiBMUlUgKGBldmljdF9mb2xpb3NgKS4gSXQgYWxzbyBhZGRzIGFjY291bnRpbmcgZm9yIGlzb2xhdGVkIGZvbGlvcyBpbiBNR0xSVS4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIG1lbW9yeSBwcmVzc3VyZSBhbmQgY29uY3VycmVudCBwYWdlIHJlY2xhaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1NjMyZDhlYzIzOWRmYWJiZGNmZmZmZDU1ODQ5ZGIwMzUyMjk5YTU4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMDc6NTE6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGMxNDA0YTU5NTIzZDYuLjg4NmE1M2Y1NjNhYjcgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0xODE5LDcgJiM0MzsxODE5LDcgQEAgYm9vbCBmb2xpb19pc29sYXRlX2xydShzdHJ1Y3QgZm9saW8gKmZvbGlvKQogICogdGhlIExSVSBsaXN0IHdpbGwgZ28gc21hbGwgYW5kIGJlIHNjYW5uZWQgZmFzdGVyIHRoYW4gbmVjZXNzYXJ5LCBsZWFkaW5nIHRvCiAgKiB1bm5lY2Vzc2FyeSBzd2FwcGluZywgdGhyYXNoaW5nIGFuZCBPT00uCiAgKi8KLXN0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGludCBmaWxlLAomIzQzO3N0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZmlsZSwKIAkJc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiB7CiAJdW5zaWduZWQgbG9uZyBpbmFjdGl2ZSwgaXNvbGF0ZWQ7CkBAIC0xODU2LDYgJiM0MzsxODU2LDM3IEBAIHN0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGludCBmaWxlLAogCXJldHVybiB0b29fbWFueTsKIH0KIAomIzQzOy8qCiYjNDM7ICogVGhyb3R0bGUgcmVjbGFpbSBpZiB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MgYXJlIHBpbGluZyB1cC4gSWYgdGhpcyBtYWtlcwomIzQzOyAqIG5vIHByb2dyZXNzLCB0aGUgY2FsbGVyIGlzIHByb2JhYmx5IGxvb3Bpbmcgb24gdW5ldmljdGFibGUgZm9saW9zLCBzbyBnaXZlCiYjNDM7ICogdXAuIFJldHVybnMgZmFsc2UgdG8gdGVsbCB0aGUgY2FsbGVyIHRvIHN0b3AgcmVjbGFpbWluZywgYW5kIHNldHMgQGZhdGFsCiYjNDM7ICogaWYgdGhlIHRhc2sgcmVjZWl2ZWQgYSBmYXRhbCBzaWduYWwgd2hpbGUgd2FpdGluZywgc28gdGhhdCB0aGUgY2FsbGVyIGNhbgomIzQzOyAqIGJhaWwgb3V0IGZhc3Rlci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCB0aHJvdHRsZV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZpbGUsCiYjNDM7CQkJICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGJvb2wgKmZhdGFsKQomIzQzO3sKJiM0MzsJYm9vbCBzdGFsbGVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CSpmYXRhbCA9IGZhbHNlOwomIzQzOwl3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHsKJiM0MzsJCWlmIChzdGFsbGVkKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCS8qIHdhaXQgYSBiaXQgZm9yIHRoZSByZWNsYWltZXIuICovCiYjNDM7CQlzdGFsbGVkID0gdHJ1ZTsKJiM0MzsJCXJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7CiYjNDM7CiYjNDM7CQkvKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIFJldHVybiBub3cuICovCiYjNDM7CQlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKJiM0MzsJCQkqZmF0YWwgPSB0cnVlOwomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogbW92ZV9mb2xpb3NfdG9fbHJ1KCkgbW92ZXMgZm9saW9zIGZyb20gcHJpdmF0ZSBAbGlzdCB0byBhcHByb3ByaWF0ZSBMUlUgbGlzdC4KICAqCkBAIC0xOTkyLDE5ICYjNDM7MjAyMywxNCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCiAJYm9vbCBmaWxlID0gaXNfZmlsZV9scnUobHJ1KTsKIAllbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwotCWJvb2wgc3RhbGxlZCA9IGZhbHNlOwotCi0Jd2hpbGUgKHVubGlrZWx5KHRvb19tYW55X2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYykpKSB7Ci0JCWlmIChzdGFsbGVkKQotCQkJcmV0dXJuIDA7Ci0KLQkJLyogd2FpdCBhIGJpdCBmb3IgdGhlIHJlY2xhaW1lci4gKi8KLQkJc3RhbGxlZCA9IHRydWU7Ci0JCXJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7CiYjNDM7CWJvb2wgZmF0YWw7CiAKJiM0MzsJaWYgKCF0aHJvdHRsZV9pc29sYXRlZChwZ2RhdCwgZmlsZSwgc2MsICZhbXA7ZmF0YWwpKSB7CiAJCS8qIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gUmV0dXJuIG5vdy4gKi8KLQkJaWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQomIzQzOwkJaWYgKGZhdGFsKQogCQkJcmV0dXJuIFNXQVBfQ0xVU1RFUl9NQVg7CiYjNDM7CiYjNDM7CQlyZXR1cm4gMDsKIAl9CiAKIAlscnVfYWRkX2RyYWluKCk7CkBAIC00ODgzLDYgJiM0Mzs0OTA5LDI1IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCWJvb2wgc2tpcF9yZXRyeSA9IGZhbHNlOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpOwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTsKJiM0MzsJYm9vbCBmYXRhbDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIHR5cGUgdG8gaXNvbGF0ZSBpcyB1bmtub3duIHVudGlsIGlzb2xhdGlvbiwgc28gcHJlZGljdCBpdCBmb3IKJiM0MzsJICogdGhlIHRocm90dGxpbmcgY2hlY2suIGlzb2xhdGVfZm9saW9zKCkgbWF5IHN0aWxsIGZhbGwgYmFjayB0byB0aGUKJiM0MzsJICogb3RoZXIgdHlwZSwgd2hpY2ggaXMgZmluZSBmb3IgdGhpcyBoZXVyaXN0aWMuCiYjNDM7CSAqLwomIzQzOwl0eXBlID0gZ2V0X3R5cGVfdG9fc2NhbihscnV2ZWMsIHN3YXBwaW5lc3MpOwomIzQzOwlpZiAoIXRocm90dGxlX2lzb2xhdGVkKHBnZGF0LCB0eXBlLCBzYywgJmFtcDtmYXRhbCkpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIExpa2UgdGhlIGxlZ2FjeQomIzQzOwkJICogcGF0aCwgcHJldGVuZCBzb21lIHBhZ2VzIHdlcmUgcmVjbGFpbWVkIHNvIHJlY2xhaW0gdW53aW5kcwomIzQzOwkJICogcXVpY2tseSBpbnN0ZWFkIG9mIGxvb3BpbmcgYmFjayBpbnRvIHRoZSB0aHJvdHRsZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGZhdGFsKQomIzQzOwkJCXNjLSZndDtucl9yZWNsYWltZWQgJiM0Mzs9IFNXQVBfQ0xVU1RFUl9NQVg7CiYjNDM7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQogCiAJbHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7CiAKQEAgLTQ4OTIsNiAmIzQzOzQ5MzcsOSBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAlzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcywKIAkJCQkgJmFtcDtsaXN0LCAmYW1wO2lzb2xhdGVkLCAmYW1wO3R5cGUsICZhbXA7dHlwZV9zY2FubmVkKTsKIAlucl9pc29sYXRlZCA9IGlzb2xhdGVkOwomIzQzOwlpZiAobnJfaXNvbGF0ZWQpCiYjNDM7CQlfX21vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZSwKJiM0MzsJCQkJICAgICAgbnJfaXNvbGF0ZWQpOwogCiAJLyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi8KIAlpZiAoc2Nhbm5lZCkKQEAgLTQ5NTQsNiAmIzQzOzUwMDIsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWdvdG8gcmV0cnk7CiAJfQogCiYjNDM7CWlmIChucl9pc29sYXRlZCkKJiM0MzsJCW1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZSwKJiM0MzsJCQkJICAgIC1ucl9pc29sYXRlZCk7CiYjNDM7CiAJaWYgKG5yX2lzb2xhdGVkICZndDsgdG90YWxfcmVjbGFpbWVkKQogCQltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiAmIzQzOyB0eXBlLAogCQkJCSBucl9pc29sYXRlZCAtIHRvdGFsX3JlY2xhaW1lZCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIGRlZXAgd2l0aGluIHRoZSBgbW0vdm1zY2FuLmNgIGZpbGUg4oCTIHRoYXQgc2NyZWFtcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgbWVzc2luZyB3aXRoIHBhZ2UgcmVjbGFpbSwgd2hpY2ggbWVhbnMgd2UmIzM5O3JlIHByb2JhYmx5IGRlYWxpbmcgd2l0aCB0aGUgTGVhc3QgUmVjZW50bHkgVXNlZCAoTFJVKSBsaXN0cywgYm90aCB0aGUgdHJhZGl0aW9uYWwgbGVnYWN5IExSVSBhbmQgTUdMUlUuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYHRocm90dGxlX2lzb2xhdGVkKClgIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZSBhcyBhIHBvdGVudGlhbCBwb2ludCBvZiBjb250ZW50aW9uIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2s7IGl0JiMzOTtzIHVzZWQgd2l0aGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpYCAobGVnYWN5IExSVSkgYW5kIGBldmljdF9mb2xpb3MoKWAgKE1HTFJVKS4gSW50ZXJlc3RpbmcuIFRoZSBhZGRpdGlvbnMgb2YgYF9fbW9kX25vZGVfcGFnZV9zdGF0ZWAgY2FsbHMgZm9yIGBOUl9JU09MQVRFRF9BTk9OYCBhbmQgcG90ZW50aWFsbHkgb3RoZXIgdHlwZXMgZHVyaW5nIGV2aWN0aW9uIHdpdGhpbiBgZXZpY3RfZm9saW9zKClgIHNob3cgdGhhdCB0aGUgaXNvbGF0aW9uIGNvdW50ZXIgaXMgYWRqdXN0ZWQuCgpOb3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzICYjMzQ7V2hlcmUgYXJlIHRoZSBlbnRyeSBwb2ludHM/JiMzNDsuICBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgZXZpY3RfZm9saW9zYCBhcmUgYm90aCBzdGF0aWMsIG1lYW5pbmcgdGhleSYjMzk7cmUgbm90IGRpcmVjdGx5IGV4cG9zZWQuICBgdGhyb3R0bGVfaXNvbGF0ZWRgIGlzIGFsc28gc3RhdGljLiBTbywgSSBuZWVkIHRvIGxvb2sgdXBzdHJlYW0uIFdoYXQgZnVuY3Rpb25zIGNhbGwgdGhlc2Ugb3IgYXJlIHJlbGF0ZWQgdG8gcGFnZSByZWNsYWltIHRoYXQgKmFyZW4mIzM5O3QqIHN0YXRpYz8gTGV0JiMzOTtzIHNlZS4uLiBgc2hyaW5rX25vZGVgPyBgc2hyaW5rX2xydXZlY2A/IGB0cnlfdG9fZnJlZV9wYWdlc2A/IElzIGBrc3dhcGRgIGludm9sdmVkPyBJJiMzOTttIGdvaW5nIHRvIGhlYWQgdG8gYG1tL3Ztc2Nhbi5jYCBhbmQgc3RhcnQgdHJhY2luZyBiYWNrIHRvIHNlZSB3aGVyZSB0aGlzIGFsbCBmaXRzIGluLiAgVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgbGFyZ2VyIHBpY3R1cmUgSSBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V2aWN0X2ZvbGlvcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ4NjI9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00ODk1LVxubW0vdm1zY2FuLmM6NDg5NjpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbm1tL3Ztc2Nhbi5jLTQ4OTctXHRcdFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jPTUwOTk9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTIyLVx0XHRucl9iYXRjaCA9IG1pbihucl90b19zY2FuLCBNSU5fTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjUxMjM6XHRcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcbm1tL3Ztc2Nhbi5jLTUxMjQtXHRcdGlmICghZGVsdGEpXG4tLVxubW0vdm1zY2FuLmM9NTcyNj1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy01NzQ2LVx0XHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXHUwMDNlbnJfcmVjbGFpbWVkLCBNQVhfTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjU3NDc6XHRcdGlmICghZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKSlcbm1tL3Ztc2Nhbi5jLTU3NDgtXHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI5MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyB0aGUgRXZpY3Rpb24gUGF0aCBpbiB0aGUgTFJVIFZlY3RvcioqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBldmljdF9mb2xpb3NgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGJvdGggYHRyeV90b19zaHJpbmtfbHJ1dmVjYCBhbmQgYHJ1bl9ldmljdGlvbmAuIFRoYXQmIzM5O3MgYSBwcmV0dHkgY2xlYXIgaW5kaWNhdGlvbiB0aGF0IGl0JiMzOTtzIHRoZSBjb3JlIGZ1bmN0aW9uIGZvciBhY3R1YWxseSByZW1vdmluZyBmb2xpb3MsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBuYW1lcy4gTm93LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGggZnVydGhlciB1cHN0cmVhbS4gTXkgZm9jdXMgaXMgdW5kZXJzdGFuZGluZyB0aGUgdHJpZ2dlcnMgZm9yIGZvbGlvIGV2aWN0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgcnVuX2V2aWN0aW9uYCBhcmUgYmVpbmcgKmNhbGxlZCogZnJvbS4gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBsaW5rIOKAkyB0aG9zZSBhcmUgdGhlIHBvaW50cyBpbiB0aGUgc3lzdGVtIHRoYXQgYXJlIGluaXRpYXRpbmcgdGhlIGV2aWN0aW9uIHByb2Nlc3MgYmFzZWQgb24gd2hhdGV2ZXIgY29uZGl0aW9ucyBhcmUgaW4gcGxheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvc2UgY29uZGl0aW9ucyB0byBncmFzcCB0aGUgb3ZlcmFsbCBldmljdGlvbiBwb2xpY3kuIEFyZSB3ZSBkZWFsaW5nIHdpdGggbWVtb3J5IHByZXNzdXJlLCBhZ2luZyBvZiBlbnRyaWVzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGltZSB0byBkaWcgZGVlcGVyIGFuZCBmaW5kIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfdG9fc2hyaW5rX2xydXZlYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTUwNjQ9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MDk4LSAqL1xubW0vdm1zY2FuLmM6NTA5OTpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTEwMC17XG4tLVxubW0vdm1zY2FuLmM9NTE0ND1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTYzLVxubW0vdm1zY2FuLmM6NTE2NDpcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG5tbS92bXNjYW4uYy01MTY1LVxuLS1cbm1tL3Ztc2Nhbi5jPTUyNTU9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTI2Ny1cbm1tL3Ztc2Nhbi5jOjUyNjg6XHRpZiAodHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYykpXG5tbS92bXNjYW4uYy01MjY5LVx0XHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9ZT1VORyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkzMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AuIEl0JiMzOTtzIGNsZWFyIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3Igc2hyaW5raW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIGFuIExSVSB2ZWN0b3IsIGFuZCBpdCYjMzk7cyBjYWxsaW5nIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgaW4gdGhlIHByb2Nlc3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1dobyYjMzk7cyB0aGUgY2FsbGVyIGhlcmU/IFdoYXQgdXBzdHJlYW0gZnVuY3Rpb24gb3IgcHJvY2VzcyBpcyB0cmlnZ2VyaW5nIHRoaXMgd2hvbGUgc2hyaW5raW5nIG9wZXJhdGlvbj8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93OyBrbm93aW5nIHdoYXQgaW5pdGlhdGVzIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgKndoeSogdGhlIExSVSB2ZWN0b3IgaXMgYmVpbmcgc2hydW5rLCB1bmRlciB3aGF0IGNvbmRpdGlvbnMsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIHN5c3RlbSBpbXBsaWNhdGlvbnMgYXJlLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgdG8gcGlucG9pbnQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgaXMgcGFyYW1vdW50IGZvciBhbnkgZWZmZWN0aXZlIHN5c3RlbSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX3Nocmlua19scnV2ZWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01MTg1PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyNTQtXG5tbS92bXNjYW4uYzo1MjU1OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTI1Ni17XG4tLVxubW0vdm1zY2FuLmM9NTk5OT1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwMDMtXG5tbS92bXNjYW4uYzo2MDA0OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjAwNS17XG4tLVxubW0vdm1zY2FuLmM9NjAxNj1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjAyNy1cdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXHUwMDI2XHUwMDI2ICFyb290X3JlY2xhaW0oc2MpKSB7XG5tbS92bXNjYW4uYzo2MDI4Olx0XHRscnVfZ2VuX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG5tbS92bXNjYW4uYy02MDI5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MzkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBzaHJpbmtfbHJ1dmVjYCBGdW5jdGlvbiYjMzk7cyBDYWxsZXJzKioKCk9rYXksIHNvIEkgc2VlIGBzaHJpbmtfbHJ1dmVjYCBpcyBjYWxsaW5nIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgLiBUaGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIGxpa2VseSBleHBlY3RlZCBnaXZlbiB0aGUgbmFtaW5nLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24sIHRob3VnaCwgaXMgd2hhdCAqdHJpZ2dlcnMqIHRoaXMgY2FsbCB0byBgc2hyaW5rX2xydXZlY2AgaW4gdGhlIGZpcnN0IHBsYWNlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LiBJcyBpdCBpbnZva2VkIHBlcmlvZGljYWxseSBiYXNlZCBvbiBhIHRpbWVyLCB0cmlnZ2VyZWQgYnkgYSBzcGVjaWZpYyBldmVudCB3aXRoaW4gdGhlIExSVSBjYWNoZSYjMzk7cyBvcGVyYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUbyByZWFsbHkgdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvZiB0aGUgTFJVIGNhY2hlLCBJIGhhdmUgdG8gdHJhY2UgYmFjayB0aGUgY2FsbCBzdGFjay4gVW5kZXJzdGFuZGluZyAqd2hvKiBvciAqd2hhdCogaXMgY2FsbGluZyBgc2hyaW5rX2xydXZlY2AgaXMgY3J1Y2lhbCB0byBldmFsdWF0aW5nIHRoZSBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kgb2YgdGhlIExSVSBpbXBsZW1lbnRhdGlvbi4gSXMgdGhlIHNocmlua2luZyBhZ2dyZXNzaXZlLCBvciBjb25zZXJ2YXRpdmU/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBjYW5kaWRhdGVzIGZvciBvcHRpbWl6YXRpb24gd2hlbiByZXZpZXdpbmcgd2hlcmUgdGhpcyBmdW5jdGlvbiBzaXRzIGluIHRoZSBjb2RlPyBMZXQmIzM5O3MgdHJhY2UgdGhpcyBhbmQgdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19scnV2ZWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01MDY0PXN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTA5OC0gKi9cbm1tL3Ztc2Nhbi5jOjUwOTk6c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTUxMDAte1xuLS1cbm1tL3Ztc2Nhbi5jPTUxNDQ9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTE2My1cbm1tL3Ztc2Nhbi5jOjUxNjQ6XHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xubW0vdm1zY2FuLmMtNTE2NS1cbi0tXG5tbS92bXNjYW4uYz01MTg1PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyNTQtXG5tbS92bXNjYW4uYzo1MjU1OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTI1Ni17XG4tLVxubW0vdm1zY2FuLmMtNTI2Ny1cbm1tL3Ztc2Nhbi5jOjUyNjg6XHRpZiAodHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYykpXG5tbS92bXNjYW4uYy01MjY5LVx0XHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9ZT1VORyk7XG4tLVxubW0vdm1zY2FuLmM9NTk5OT1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwMDMtXG5tbS92bXNjYW4uYzo2MDA0OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjAwNS17XG4tLVxubW0vdm1zY2FuLmM9NjAwOT1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwMTUtXG5tbS92bXNjYW4uYzo2MDE2OnN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTYwMTcte1xuLS1cbm1tL3Ztc2Nhbi5jLTYwMjctXHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFx1MDAyNlx1MDAyNiAhcm9vdF9yZWNsYWltKHNjKSkge1xubW0vdm1zY2FuLmM6NjAyODpcdFx0bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xubW0vdm1zY2FuLmMtNjAyOS1cbi0tXG5tbS92bXNjYW4uYz02MjA3PXN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MjY2LVxubW0vdm1zY2FuLmM6NjI2NzpcdFx0c2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYyNjgtXG4tLVxubW0vdm1zY2FuLmM9Njg2Mj11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4OTItXHQgKi9cbm1tL3Ztc2Nhbi5jOjY4OTM6XHRzaHJpbmtfbHJ1dmVjKGxydXZlYywgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNjg5NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjczMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UgaGF2ZSBoZXJlLgoKKipEZWNvbnN0cnVjdGluZyBNZW1vcnkgQ2dyb3VwIFNocmlua2FnZSoqCgpSaWdodCwgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgIGlzbiYjMzk7dCBzdGF0aWMsIGludGVyZXN0aW5nLiBPa2F5LCBzbyB0aGF0IG1lYW5zIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIGNhbGxpbmcgaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGNoYWluIGhlcmUsIHdoYXQmIzM5O3MgdHJpZ2dlcmluZyB0aGF0IGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGBzaHJpbmtfbHJ1dmVjYCBpcyBjYWxsZWQgd2l0aGluIGl0LiBTbywgd2hvIGVsc2UgY2FsbHMgYHNocmlua19scnV2ZWNgPyBBaCwgeWVzLCBgc2hyaW5rX25vZGVfbWVtY2dzYCBpcyBvbmUuIE9rYXksIGFuZCB3aGF0IGlzIHRyaWdnZXJpbmcgKnRoYXQqIGZ1bmN0aW9uLCBgc2hyaW5rX25vZGVfbWVtY2dzYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gSSBuZWVkIHRvIGtlZXAgdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19ub2RlX21lbWNncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTYxNTU9c3RhdGljIGlubGluZSBib29sIHNob3VsZF9jb250aW51ZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4tLVxubW0vdm1zY2FuLmMtNjIwNi1cbm1tL3Ztc2Nhbi5jOjYyMDc6c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjIwOC17XG4tLVxubW0vdm1zY2FuLmM9NjI4Nj1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MzEwLVxubW0vdm1zY2FuLmM6NjMxMTpcdHNocmlua19ub2RlX21lbWNncyhwZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNjMxMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE5MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgZ2l2ZW4gbXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYToKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIE1lbW9yeSBTaHJpbmthZ2UgUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHNocmlua19ub2RlYC4gVGhpcyBpcyBjbGVhcmx5IHRoZSBjb3JlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciwgd2VsbCwgc2hyaW5raW5nIGEgbm9kZSYjMzk7cyBtZW1vcnkgZm9vdHByaW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHdoYXQgc3BlY2lmaWNhbGx5IHRyaWdnZXJzIHRoaXMgc2hyaW5rYWdlPyBNeSBhbmFseXNpcyBzaG93cyB0aGF0IGBzaHJpbmtfbm9kZWAgaXMgY2FsbGluZyBgc2hyaW5rX25vZGVfbWVtY2dzYC4gVGhhdCBtYWtlcyBzZW5zZTsgYG1lbWNnc2AgKG1lbW9yeSBjZ3JvdXBzKSBhcmUgYSBtYWpvciBwbGF5ZXIgd2hlbiBpdCBjb21lcyB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVzb3VyY2UgbGltaXRzLiBTbywgYHNocmlua19ub2RlYCBpcyB1c2luZyBgc2hyaW5rX25vZGVfbWVtY2dzYCB0byBpbnRlcmFjdCB3aXRoIGFuZCBtYW5hZ2UgbWVtb3J5IHdpdGhpbiB0aGUgY2dyb3VwIGhpZXJhcmNoeS4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgbW9kdWxhciBkZXNpZ24uIEJ1dCBJIG5lZWQgdG8gZ28gZGVlcGVyLiBXaGF0IGFyZSB0aGUgY2FsbGluZyBmdW5jdGlvbnMgd2hpY2ggbGVhZCB0byB0aGUgaW52b2NhdGlvbiBvZiBgc2hyaW5rX25vZGVgPyBJZGVudGlmeWluZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgdHJpZ2dlcnMgb3IgZXZlbnRzIGluIHRoZSBzeXN0ZW0uIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgaW5zaWdodHMgbGllLCB1bmRlcnN0YW5kaW5nIHRoZSBjaXJjdW1zdGFuY2VzIHdoZW4gdGhlIHN5c3RlbSBuZWVkcyB0byBzaGVkIG1lbW9yeSBmcm9tIGEgbm9kZS4gSXMgaXQgYSBwZXJpb2RpYyBwcm9jZXNzPyBBIHJlc3BvbnNlIHRvIG1lbW9yeSBwcmVzc3VyZT8gT3IgdHJpZ2dlcmVkIGJ5IHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBGaW5kaW5nIHRoZSBjYWxsZXJzIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0xOTcyPXN0YXRpYyB2b2lkIGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayh1bnNpZ25lZCBsb25nIG5yX3Rha2VuLFxuLS1cbm1tL3Ztc2Nhbi5jLTIwMTAtLypcbm1tL3Ztc2Nhbi5jOjIwMTE6ICogc2hyaW5rX2luYWN0aXZlX2xpc3QoKSBpcyBhIGhlbHBlciBmb3Igc2hyaW5rX25vZGUoKS4gIEl0IHJldHVybnMgdGhlIG51bWJlclxubW0vdm1zY2FuLmMtMjAxMi0gKiBvZiByZWNsYWltZWQgcGFnZXNcbi0tXG5tbS92bXNjYW4uYz01MjU1PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyNzUtXG5tbS92bXNjYW4uYzo1Mjc2OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01Mjc3LXtcbi0tXG5tbS92bXNjYW4uYz02MDA0PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwMDgtXG5tbS92bXNjYW4uYzo2MDA5OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy02MDEwLXtcbi0tXG5tbS92bXNjYW4uYz02MTU1PXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfY29udGludWVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuLS1cbm1tL3Ztc2Nhbi5jLTYyMDYtXG5tbS92bXNjYW4uYzo2MjA3OnN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTYyMDgte1xuLS1cbm1tL3Ztc2Nhbi5jLTYyODUtXG5tbS92bXNjYW4uYzo2Mjg2OnN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjI4Ny17XG4tLVxubW0vdm1zY2FuLmMtNjI5My1cdFx0bWVtc2V0KFx1MDAyNnNjLVx1MDAzZW5yLCAwLCBzaXplb2Yoc2MtXHUwMDNlbnIpKTtcbm1tL3Ztc2Nhbi5jOjYyOTQ6XHRcdGxydV9nZW5fc2hyaW5rX25vZGUocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYyOTUtXG4tLVxubW0vdm1zY2FuLmMtNjMxMC1cbm1tL3Ztc2Nhbi5jOjYzMTE6XHRzaHJpbmtfbm9kZV9tZW1jZ3MocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYzMTItXG4tLVxubW0vdm1zY2FuLmM9NjQ3MT1zdGF0aWMgdm9pZCBzaHJpbmtfem9uZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjU0OS1cdFx0bGFzdF9wZ2RhdCA9IHpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbm1tL3Ztc2Nhbi5jOjY1NTA6XHRcdHNocmlua19ub2RlKHpvbmUtXHUwMDNlem9uZV9wZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNjU1MS1cdH1cbi0tXG5tbS92bXNjYW4uYz02ODE2PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4NjEtLyogT25seSB1c2VkIGJ5IHNvZnQgbGltaXQgcmVjbGFpbS4gRG8gbm90IHJldXNlIGZvciBhbnl0aGluZyBlbHNlLiAqL1xubW0vdm1zY2FuLmM6Njg2Mjp1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNjg2My1cdFx0XHRcdFx0XHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXG4tLVxubW0vdm1zY2FuLmMtNjg4OC1cdCAqIGhlcmUgaXMgbm90IGEgZ29vZCBpZGVhLCBzaW5jZSBpdCBsaW1pdHMgdGhlIHBhZ2VzIHdlIGNhbiBzY2FuLlxubW0vdm1zY2FuLmM6Njg4OTpcdCAqIGlmIHdlIGRvbiYjMzk7dCByZWNsYWltIGhlcmUsIHRoZSBzaHJpbmtfbm9kZSBmcm9tIGJhbGFuY2VfcGdkYXRcbm1tL3Ztc2Nhbi5jLTY4OTAtXHQgKiB3aWxsIHBpY2sgdXAgcGFnZXMgZnJvbSBvdGhlciBtZW0gY2dyb3VwJiMzOTtzIGFzIHdlbGwuIFdlIGhhY2tcbi0tXG5tbS92bXNjYW4uYz03MDEwPXN0YXRpYyBib29sIHBnZGF0X2JhbGFuY2VkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy03MDM0LVx0XHQgKiBpdHMgb3duIGFuZCBuZWVkcyBrY29tcGFjdGQgc3VwcG9ydC4gT25jZSBpdCYjMzk7c1xubW0vdm1zY2FuLmM6NzAzNTpcdFx0ICogcmVjbGFpbWVkIGEgY29tcGFjdGlvbiBnYXAsIGFuZCBrc3dhcGRfc2hyaW5rX25vZGVcbm1tL3Ztc2Nhbi5jLTcwMzYtXHRcdCAqIGhhcyBkcm9wcGVkIG9yZGVyLCBzaW1wbHkgZW5zdXJlIHRoZXJlIGFyZSBlbm91Z2hcbi0tXG5tbS92bXNjYW4uYz03MDkyPXN0YXRpYyBib29sIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy03MTMwLSAqL1xubW0vdm1zY2FuLmM6NzEzMTpzdGF0aWMgYm9vbCBrc3dhcGRfc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTcxMzItXHRcdFx0ICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTcxNDctXHQgKi9cbm1tL3Ztc2Nhbi5jOjcxNDg6XHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNzE0OS1cbi0tXG5tbS92bXNjYW4uYz03MjA0PXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzMxMy1cbm1tL3Ztc2Nhbi5jOjczMTQ6XHRcdC8qIENhbGwgc29mdCBsaW1pdCByZWNsYWltIGJlZm9yZSBjYWxsaW5nIHNocmlua19ub2RlLiAqL1xubW0vdm1zY2FuLmMtNzMxNS1cdFx0c2MubnJfc2Nhbm5lZCA9IDA7XG4tLVxubW0vdm1zY2FuLmMtNzMyNS1cdFx0ICovXG5tbS92bXNjYW4uYzo3MzI2Olx0XHRpZiAoa3N3YXBkX3Nocmlua19ub2RlKHBnZGF0LCBcdTAwMjZzYykpXG5tbS92bXNjYW4uYy03MzI3LVx0XHRcdHJhaXNlX3ByaW9yaXR5ID0gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmM9Nzg4MD1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuLS1cbm1tL3Ztc2Nhbi5jLTc5MDctXHRcdGRvIHtcbm1tL3Ztc2Nhbi5jOjc5MDg6XHRcdFx0c2hyaW5rX25vZGUocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTc5MDktXHRcdH0gd2hpbGUgKHNjLVx1MDAzZW5yX3JlY2xhaW1lZCBcdTAwM2MgbnJfcGFnZXMgXHUwMDI2XHUwMDI2IC0tc2MtXHUwMDNlcHJpb3JpdHkgXHUwMDNlPSAwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAxMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDExNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFJlY2xhaW0gQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIG1lbW9yeSByZWNsYWltIHByb2Nlc3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHN0YXJ0IHdpdGggdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQuIEkgc2VlIGB0cnlfdG9fZnJlZV9wYWdlc2Ag4oCTIHRoYXQmIzM5O3MgYSBub24tc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZywgaXQgc2VlbXMgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdHJpZ2dlcmluZyB0aGUgcmVjbGFpbS4gVGhlbiB0aGVyZSYjMzk7cyBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAsIGFsc28gbm9uLXN0YXRpYzsgdGhpcyBzdWdnZXN0cyBpdCBwbGF5cyBhIHJvbGUgaW4gc2hyaW5raW5nIG1lbW9yeSB3aXRoaW4gY2dyb3Vwcywgd2hpY2ggd2lsbCBiZSB2aXRhbCBmb3IgbWFuYWdpbmcgcmVzb3VyY2VzLgoKSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBjb3JlIG1lY2hhbmljcy4gYGJhbGFuY2VfcGdkYXRgLCB3aGlsZSBzdGF0aWMsIGxvb2tzIGxpa2UgdGhlIGNlbnRyYWwgbG9vcCB3aXRoaW4gYGtzd2FwZGAsIHdoaWNoIG1ha2VzIGl0IGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gSSBhbHNvIG5vdGUgdGhhdCBgX19ub2RlX3JlY2xhaW1gIGlzIHN0YXRpYyBidXQgbGlua2VkIHRvIGBub2RlX3JlY2xhaW1gLCBzbyB0cmFjaW5nIHRob3NlIGNhbGxzIHdpbGwgcHJvdmlkZSB0aGUgb3ZlcnZpZXcgb2Ygb3ZlcmFsbCBub2RlIHJlY2xhaW0uCgpUaGVyZWZvcmUsIG15IGltbWVkaWF0ZSBwbGFuIGlzIHRvIGZvY3VzIG15IGludmVzdGlnYXRpb24gb24gdGhlc2UgY3JpdGljYWwgcG9pbnRzOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBub2RlX3JlY2xhaW1gLCBhbmQgYGtzd2FwZGAuIEV4YW1pbmluZyB0aGVpciBpbnRlcmFjdGlvbnMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlY2xhaW0gc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19mcmVlX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NjU2Mz1zdGF0aWMgdm9pZCBzbmFwc2hvdF9yZWZhdWx0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTY1OTMtICovXG5tbS92bXNjYW4uYzo2NTk0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRvX3RyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXG5tbS92bXNjYW4uYy02NTk1LVx0XHRcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jPTY3MzY9c3RhdGljIGJvb2wgdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXG4tLVxubW0vdm1zY2FuLmMtNjgxNS1cbm1tL3Ztc2Nhbi5jOjY4MTY6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG5tbS92bXNjYW4uYy02ODE3LVx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIGNvbnN0IG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuLS1cbm1tL3Ztc2Nhbi5jLTY4NTAtXG5tbS92bXNjYW4uYzo2ODUxOlx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTY4NTItXG4tLVxubW0vdm1zY2FuLmM9NjkwMj11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY5MzMtXG5tbS92bXNjYW4uYzo2OTM0Olx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTY5MzUtXG4tLVxubW0vdm1zY2FuLmM9NzcwMD11bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcbi0tXG5tbS92bXNjYW4uYy03NzE5LVxubW0vdm1zY2FuLmM6NzcyMDpcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy03NzIxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTE2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1lbW9yeSBSZWNsYWltIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIG1lbW9yeSByZWNsYWltIHBhdGNoLCBhbmQgdGhlIGltbWVkaWF0ZSBlbnRyeSBwb2ludHMgZm9yIGRpcmVjdCByZWNsYWltIGp1bXAgb3V0IGF0IG1lOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBzaHJpbmtfYWxsX21lbW9yeWAsIGFuZCBgbm9kZV9yZWNsYWltYC4gRm9yIHRoZSBga3N3YXBkYCBkYWVtb24sIHdlJiMzOTtyZSBsb29raW5nIGF0IHRoZSBga3N3YXBkYCB0aHJlYWQgZnVuY3Rpb24gaXRzZWxmIGFzIHRoZSBlbnRyeSBwb2ludC4KCkdpdmVuIHRoYXQgdGhpcyBwYXRjaCB0b3VjaGVzIG1lbW9yeSByZWNsYWltIGxvZ2ljLCBmdXp6aW5nIGlzIGFuIGFic29sdXRlIG11c3QtZG8uIFRoZSBtb2RpZmljYXRpb25zIGFyZSBkZWVwIGluIGBtbS92bXNjYW4uY2Ag4oCTIHRoYXQmIzM5O3MgY29yZSBrZXJuZWwgY29kZSwgZWFzaWx5IHJlYWNoYWJsZSwgYW5kIHRodXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcgZWZmb3J0cy4gSSBzZWUgdGhlIHBhdGNoIGludHJvZHVjZXMgYHRocm90dGxlX2lzb2xhdGVkYCBhbmQgbW9kaWZpZXMgYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYGV2aWN0X2ZvbGlvc2AuCgpNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aG9zZSBrZXkgc3ltYm9sczogYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBgbm9kZV9yZWNsYWltYCwgYW5kIGBrc3dhcGRgLgoKTm93LCByZWdhcmRpbmcgYGV2aWN0X2ZvbGlvc2AsIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCYjMzk7cyBNR0xSVS1zcGVjaWZpYy4gQWgsIHllcywgaXQmIzM5O3MgcmlnaHQgdGhlcmUgaW4gdGhlIE1HTFJVIHNlY3Rpb24gb2YgYG1tL3Ztc2Nhbi5jYC4gQSBxdWljayBjaGVjay4gSXMgTUdMUlUgZW5hYmxlZCBieSBkZWZhdWx0PyBJIG5lZWQgdG8gY2hlY2sgYENPTkZJR19MUlVfR0VOYC4gSSYjMzk7bGwgZ28gbG9vayBpbiBgbW0vS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM5Mz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xNDAzLSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjE0MDQ6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQwNS1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxMi1cbm1tL0tjb25maWc6MTQxMzpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MTQtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDE4LVxubW0vS2NvbmZpZzoxNDE5OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MjAtXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQyNy1cbm1tL0tjb25maWc6MTQyODpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQyOS1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NjcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTUdMUlUgVGVzdGluZyBQbGFuKioKCk9rYXksIHNvIHRvIHJlYWxseSBwdXQgTUdMUlUgdGhyb3VnaCBpdHMgcGFjZXMsIEkgc2hvdWxkIGVuYWJsZSBib3RoIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAuIFRoYXQgbWFrZXMgc2Vuc2UuIEl0IGFsbG93cyBmb3IgYSBtb3JlIGZvY3VzZWQgY29tcGFyaXNvbiwgc2luY2UgdGhlIGxlZ2FjeSBMUlUgcGF0aCwgc3BlY2lmaWNhbGx5IHRoZSBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGZ1bmN0aW9uLCBoYXMgYWxzbyBiZWVuIHRvdWNoZWQuIEV2ZW4gdGhvdWdoIE1HTFJVIGlzbiYjMzk7dCBzdHJpY3RseSBuZWNlc3NhcnkgZ2l2ZW4gdGhlIGxlZ2FjeSBjaGFuZ2VzLCB0aG9yb3VnaCB0ZXN0aW5nIG9mIGJvdGggaXMgYWx3YXlzIHRoZSByaWdodCBjYWxsLiBJdCYjMzk7cyB0aGUgb25seSB3YXkgdG8gYmUgY29tcGxldGVseSBzdXJlLgoKSSBjYW4gZWFzaWx5IGFkZCB0aG9zZSBjb25maWd1cmF0aW9ucyB0byB0aGUgRW5hYmxlQ29uZmlncy4gTm8gcHJvYmxlbSB0aGVyZS4KCk5leHQsIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgbW0vdm1zY2FuLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBub2RlX3JlY2xhaW1gIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSByZWNsYWltIHByb2Nlc3MsIHNvIEkgc2hvdWxkIHNlZSBob3cgdGhpcyBhZmZlY3RzIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtub2RlX3JlY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz02Mjg2PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjI4Ny17XG5tbS92bXNjYW4uYzo2Mjg4Olx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQsIG5yX3NjYW5uZWQsIG5yX25vZGVfcmVjbGFpbWVkO1xubW0vdm1zY2FuLmMtNjI4OS1cdHN0cnVjdCBscnV2ZWMgKnRhcmdldF9scnV2ZWM7XG4tLVxubW0vdm1zY2FuLmMtNjMxNC1cbm1tL3Ztc2Nhbi5jOjYzMTU6XHRucl9ub2RlX3JlY2xhaW1lZCA9IHNjLVx1MDAzZW5yX3JlY2xhaW1lZCAtIG5yX3JlY2xhaW1lZDtcbm1tL3Ztc2Nhbi5jLTYzMTYtXG4tLVxubW0vdm1zY2FuLmMtNjMxOS1cdFx0dm1wcmVzc3VyZShzYy1cdTAwM2VnZnBfbWFzaywgc2MtXHUwMDNlb3JkZXIsIHNjLVx1MDAzZXRhcmdldF9tZW1fY2dyb3VwLCB0cnVlLFxubW0vdm1zY2FuLmM6NjMyMDpcdFx0XHQgICBzYy1cdTAwM2Vucl9zY2FubmVkIC0gbnJfc2Nhbm5lZCwgbnJfbm9kZV9yZWNsYWltZWQpO1xubW0vdm1zY2FuLmMtNjMyMS1cbm1tL3Ztc2Nhbi5jOjYzMjI6XHRpZiAobnJfbm9kZV9yZWNsYWltZWQpXG5tbS92bXNjYW4uYy02MzIzLVx0XHRyZWNsYWltYWJsZSA9IHRydWU7XG4tLVxubW0vdm1zY2FuLmMtNjM4My1cbm1tL3Ztc2Nhbi5jOjYzODQ6XHRpZiAoc2hvdWxkX2NvbnRpbnVlX3JlY2xhaW0ocGdkYXQsIG5yX25vZGVfcmVjbGFpbWVkLCBzYykpXG5tbS92bXNjYW4uYy02Mzg1LVx0XHRnb3RvIGFnYWluO1xuLS1cbm1tL3Ztc2Nhbi5jPTc3NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdm1zY2FuX3N5c2N0bF90YWJsZVtdID0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTc3ODMtXHRcdC5wcm9jbmFtZVx0PSBcJiMzNDt6b25lX3JlY2xhaW1fbW9kZVwmIzM0Oyxcbm1tL3Ztc2Nhbi5jOjc3ODQ6XHRcdC5kYXRhXHRcdD0gXHUwMDI2bm9kZV9yZWNsYWltX21vZGUsXG5tbS92bXNjYW4uYzo3Nzg1Olx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKG5vZGVfcmVjbGFpbV9tb2RlKSxcbm1tL3Ztc2Nhbi5jLTc3ODYtXHRcdC5tb2RlXHRcdD0gMDY0NCxcbi0tXG5tbS92bXNjYW4uYz03ODAzPW1vZHVsZV9pbml0KGtzd2FwZF9pbml0KVxuLS1cbm1tL3Ztc2Nhbi5jLTc4MDgtICpcbm1tL3Ztc2Nhbi5jOjc4MDk6ICogSWYgbm9uLXplcm8gY2FsbCBub2RlX3JlY2xhaW0gd2hlbiB0aGUgbnVtYmVyIG9mIGZyZWUgcGFnZXMgZmFsbHMgYmVsb3dcbm1tL3Ztc2Nhbi5jLTc4MTAtICogdGhlIHdhdGVybWFya3MuXG5tbS92bXNjYW4uYy03ODExLSAqL1xubW0vdm1zY2FuLmM6NzgxMjppbnQgbm9kZV9yZWNsYWltX21vZGUgX19yZWFkX21vc3RseTtcbm1tL3Ztc2Nhbi5jLTc4MTMtXG4tLVxubW0vdm1zY2FuLmMtNzgyMS0vKlxubW0vdm1zY2FuLmM6NzgyMjogKiBQZXJjZW50YWdlIG9mIHBhZ2VzIGluIGEgem9uZSB0aGF0IG11c3QgYmUgdW5tYXBwZWQgZm9yIG5vZGVfcmVjbGFpbSB0b1xubW0vdm1zY2FuLmMtNzgyMy0gKiBvY2N1ci5cbi0tXG5tbS92bXNjYW4uYz03ODQ4PXN0YXRpYyB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNzg1OC1cdCAqL1xubW0vdm1zY2FuLmM6Nzg1OTpcdGlmIChub2RlX3JlY2xhaW1fbW9kZSBcdTAwMjYgUkVDTEFJTV9VTk1BUClcbm1tL3Ztc2Nhbi5jLTc4NjAtXHRcdG5yX3BhZ2VjYWNoZV9yZWNsYWltYWJsZSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfRklMRV9QQUdFUyk7XG4tLVxubW0vdm1zY2FuLmMtNzg3OS0gKi9cbm1tL3Ztc2Nhbi5jOjc4ODA6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTc4ODEtXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS92bXNjYW4uYy03ODg3LVxubW0vdm1zY2FuLmM6Nzg4ODpcdHRyYWNlX21tX3Ztc2Nhbl9ub2RlX3JlY2xhaW1fYmVnaW4ocGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MtXHUwMDNlb3JkZXIsXG5tbS92bXNjYW4uYy03ODg5LVx0XHRcdFx0XHQgICBzYy1cdTAwM2VnZnBfbWFzayk7XG4tLVxubW0vdm1zY2FuLmMtNzkxNy1cbm1tL3Ztc2Nhbi5jOjc5MTg6XHR0cmFjZV9tbV92bXNjYW5fbm9kZV9yZWNsYWltX2VuZChzYy1cdTAwM2Vucl9yZWNsYWltZWQsIE5VTEwpO1xubW0vdm1zY2FuLmMtNzkxOS1cbi0tXG5tbS92bXNjYW4uYy03OTIyLVxubW0vdm1zY2FuLmM6NzkyMzp1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxubW0vdm1zY2FuLmMtNzkyNC17XG4tLVxubW0vdm1zY2FuLmMtNzkzMi1cdFx0LnByaW9yaXR5ID0gTk9ERV9SRUNMQUlNX1BSSU9SSVRZLFxubW0vdm1zY2FuLmM6NzkzMzpcdFx0Lm1heV93cml0ZXBhZ2UgPSAhIShub2RlX3JlY2xhaW1fbW9kZSBcdTAwMjYgUkVDTEFJTV9XUklURSksXG5tbS92bXNjYW4uYzo3OTM0Olx0XHQubWF5X3VubWFwID0gISEobm9kZV9yZWNsYWltX21vZGUgXHUwMDI2IFJFQ0xBSU1fVU5NQVApLFxubW0vdm1zY2FuLmMtNzkzNS1cdFx0Lm1heV9zd2FwID0gMSxcbi0tXG5tbS92bXNjYW4uYy03OTcxLVxubW0vdm1zY2FuLmM6Nzk3MjpcdHJldCA9IF9fbm9kZV9yZWNsYWltKHBnZGF0LCBucl9wYWdlcywgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNzk3My1cdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKTtcbi0tXG5tbS92bXNjYW4uYy03OTg0LVxubW0vdm1zY2FuLmM6Nzk4NTpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxubW0vdm1zY2FuLmMtNzk4Ni1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL3Ztc2Nhbi5jPTgwMDU9aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxuLS1cbm1tL3Ztc2Nhbi5jLTgwOTctXG5tbS92bXNjYW4uYzo4MDk4Olx0XHRcdHJlY2xhaW1lZCA9IF9fbm9kZV9yZWNsYWltKHBnZGF0LCBiYXRjaF9zaXplLCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy04MDk5LVx0XHRcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NzMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgTWVtb3J5IFJlY2xhbWF0aW9uIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IG1lbW9yeSByZWNsYWltIGZ1bmN0aW9ucyBoZXJlLiBgbm9kZV9yZWNsYWltYCBpcyBhIHNvbGlkIHBpZWNlLCBhbHdheXMgcmVsaWFibGUuIFRoZW4gdGhlcmUmIzM5O3MgYHNocmlua19hbGxfbWVtb3J5YCDigJMgdGhhdCBvbmUmIzM5O3MgZ290IGEgYnJvYWQgaW1wYWN0IGFuZCBJIGxpa2UgaXRzIGFwcHJvYWNoLiBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIGFub3RoZXIgZ29vZCBjYW5kaWRhdGUgZm9yIHRhcmdldGVkIHBhZ2UgZnJlZWluZywgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBpcyBlc3NlbnRpYWwgZm9yIGNncm91cCBtYW5hZ2VtZW50LgoKTm93LCBhIGNydWNpYWwgcXVlc3Rpb24gcG9wcyB1cCByZWdhcmRpbmcgYHNocmlua19hbGxfbWVtb3J5YDogaXMgaXQgcmVhZGlseSBhdmFpbGFibGUgd2hlbiBhbmQgd2hlcmUgSSBuZWVkIGl0PyBJcyBpdCBleHBvcnRlZCBwcm9wZXJseT8gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGl0cyByZWFjaGFiaWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSB2aXNpYmlsaXR5IG9mIHRoaXMgY3J1Y2lhbCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX2FsbF9tZW1vcnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz03Njg2PWJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy03Njk5LSAqL1xubW0vdm1zY2FuLmM6NzcwMDp1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcbm1tL3Ztc2Nhbi5jLTc3MDEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjkzNgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipDaGVja2luZyBmb3IgSGliZXJuYXRpb24gSW50ZXJmZXJlbmNlKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBpc3N1ZS4uLiBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlbGF0ZWQgdG8gaGliZXJuYXRpb24sIHRoYXQgbXVjaCBpcyBjbGVhci4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBhY3Rpdml0eSBvZiBga3N3YXBkYC4gSXQmIzM5O3MgdGhlIGtlcm5lbCB0aHJlYWQgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIG1lbW9yeSBzd2FwcGluZywgYW5kIGl0JiMzOTtzIGEgcHJpbWUgc3VzcGVjdCB3aGVuZXZlciBoaWJlcm5hdGlvbi1yZWxhdGVkIGlzc3VlcyBwb3AgdXAuIEkgbmVlZCB0byBzZWUgaWYgaXQmIzM5O3MgYmVoYXZpbmcgYXMgZXhwZWN0ZWQgb3IgaWYgc29tZXRoaW5nIGlzIGJvdHRsZW5lY2tpbmcgdGhlcmUuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IGBrc3dhcGRgIGlzIHVwIHRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrc3dhcGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTI0IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5tbS92bXNjYW4uYy01LSAqICBTd2FwIHJlb3JnYW5pc2VkIDI5LjEyLjk1LCBTdGVwaGVuIFR3ZWVkaWUuXG5tbS92bXNjYW4uYzo2OiAqICBrc3dhcGQgYWRkZWQ6IDcuMS45NiAgc2N0XG5tbS92bXNjYW4uYzo3OiAqICBSZW1vdmVkIGtzd2FwZF9jdGwgbGltaXRzLCBhbmQgc3dhcCBvdXQgYXMgbWFueSBwYWdlcyBhcyBuZWVkZWRcbm1tL3Ztc2Nhbi5jLTgtICogIHRvIGJyaW5nIHRoZSBzeXN0ZW0gYmFjayB0byBmcmVlcGFnZXMuaGlnaDogMi40Ljk3LCBSaWsgdmFuIFJpZWwuXG5tbS92bXNjYW4uYzo5OiAqICBab25lIGF3YXJlIGtzd2FwZCBzdGFydGVkIDAyLzAwLCBLYW5vaiBTYXJjYXIgKGthbm9qQHNnaS5jb20pLlxubW0vdm1zY2FuLmMtMTAtICogIE11bHRpcXVldWUgVk0gc3RhcnRlZCA1LjguMDAsIFJpayB2YW4gUmllbC5cbi0tXG5tbS92bXNjYW4uYz00NDc9c3RhdGljIGludCByZWNsYWltZXJfb2Zmc2V0KHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ1Mi1cbm1tL3Ztc2Nhbi5jOjQ1MzpcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxubW0vdm1zY2FuLmMtNDU0LVx0XHRyZXR1cm4gMDtcbi0tXG5tbS92bXNjYW4uYz00ODM9c3RhdGljIGJvb2wgc2tpcF90aHJvdHRsZV9ub3Byb2dyZXNzKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNDg4LVx0Lypcbm1tL3Ztc2Nhbi5jOjQ4OTpcdCAqIElmIGtzd2FwZCBpcyBkaXNhYmxlZCwgcmVzY2hlZHVsZSBpZiBuZWNlc3NhcnkgYnV0IGRvIG5vdFxubW0vdm1zY2FuLmMtNDkwLVx0ICogdGhyb3R0bGUgYXMgdGhlIHN5c3RlbSBpcyBsaWtlbHkgbmVhciBPT00uXG5tbS92bXNjYW4uYy00OTEtXHQgKi9cbm1tL3Ztc2Nhbi5jOjQ5MjpcdGlmIChrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ2RhdCkpXG5tbS92bXNjYW4uYy00OTMtXHRcdHJldHVybiB0cnVlO1xuLS1cbm1tL3Ztc2Nhbi5jPTUxMT12b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxNy1cdC8qXG5tbS92bXNjYW4uYzo1MTg6XHQgKiBEbyBub3QgdGhyb3R0bGUgdXNlciB3b3JrZXJzLCBrdGhyZWFkcyBvdGhlciB0aGFuIGtzd2FwZCBvclxubW0vdm1zY2FuLmMtNTE5LVx0ICogd29ya3F1ZXVlcy4gVGhleSBtYXkgYmUgcmVxdWlyZWQgZm9yIHJlY2xhaW0gdG8gbWFrZVxuLS1cbm1tL3Ztc2Nhbi5jLTUyMS1cdCAqL1xubW0vdm1zY2FuLmM6NTIyOlx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmMtNTIzLVx0ICAgIGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IChQRl9VU0VSX1dPUktFUnxQRl9LVEhSRUFEKSkge1xuLS1cbm1tL3Ztc2Nhbi5jPTk2Nj1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19kZW1vdGVfZm9saW8oc3RydWN0IGZvbGlvICpzcmMsXG4tLVxubW0vdm1zY2FuLmMtOTc1LVx0ICogbWFrZSBzdXJlIHdlIGFsbG9jYXRlIGZyb20gdGhlIHRhcmdldCBub2RlIGZpcnN0IGFsc28gdHJ5aW5nIHRvXG5tbS92bXNjYW4uYzo5NzY6XHQgKiBkZW1vdGUgb3IgcmVjbGFpbSBwYWdlcyBmcm9tIHRoZSB0YXJnZXQgbm9kZSB2aWEga3N3YXBkIGlmIHdlIGFyZVxubW0vdm1zY2FuLmMtOTc3LVx0ICogbG93IG9uIGZyZWUgbWVtb3J5IG9uIHRhcmdldCBub2RlLiBJZiB3ZSBkb24mIzM5O3QgZG8gdGhpcyBhbmQgaWZcbi0tXG5tbS92bXNjYW4uYz0xMDU4PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS92bXNjYW4uYy0xMTIxLVx0XHQgKiBUaGUgbnVtYmVyIG9mIGRpcnR5IHBhZ2VzIGRldGVybWluZXMgaWYgYSBub2RlIGlzIG1hcmtlZFxubW0vdm1zY2FuLmM6MTEyMjpcdFx0ICogcmVjbGFpbV9jb25nZXN0ZWQuIGtzd2FwZCB3aWxsIHN0YWxsIGFuZCBzdGFydCB3cml0aW5nXG5tbS92bXNjYW4uYy0xMTIzLVx0XHQgKiBmb2xpb3MgaWYgdGhlIHRhaWwgb2YgdGhlIExSVSBpcyBhbGwgZGlydHkgdW5xdWV1ZWQgZm9saW9zLlxuLS1cbm1tL3Ztc2Nhbi5jLTExOTAtXHRcdFx0LyogQ2FzZSAxIGFib3ZlICovXG5tbS92bXNjYW4uYzoxMTkxOlx0XHRcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmMtMTE5Mi1cdFx0XHQgICAgZm9saW9fdGVzdF9yZWNsYWltKGZvbGlvKSBcdTAwMjZcdTAwMjZcbi0tXG5tbS92bXNjYW4uYz0xNTg5PXVuc2lnbmVkIGludCByZWNsYWltX2NsZWFuX3BhZ2VzX2Zyb21fbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSxcbi0tXG5tbS92bXNjYW4uYy0xNjE0LVx0ICogV2Ugc2hvdWxkIGJlIHNhZmUgaGVyZSBzaW5jZSB3ZSBhcmUgb25seSBkZWFsaW5nIHdpdGggZmlsZSBwYWdlcyBhbmRcbm1tL3Ztc2Nhbi5jOjE2MTU6XHQgKiB3ZSBhcmUgbm90IGtzd2FwZCBhbmQgdGhlcmVmb3JlIGNhbm5vdCB3cml0ZSBkaXJ0eSBmaWxlIHBhZ2VzLiBCdXRcbm1tL3Ztc2Nhbi5jLTE2MTYtXHQgKiBjYWxsIG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKCkgYW55d2F5LCBqdXN0IGluIGNhc2UgdGhlc2UgY29uZGl0aW9uc1xuLS1cbm1tL3Ztc2Nhbi5jPTE4MjI9c3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmaWxlLFxuLS1cbm1tL3Ztc2Nhbi5jLTE4MjctXG5tbS92bXNjYW4uYzoxODI4Olx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG5tbS92bXNjYW4uYy0xODI5LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmM9Mzg5Mz1zdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqc2V0X21tX3dhbGsoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmb3JjZV9hbGxvYylcbi0tXG5tbS92bXNjYW4uYy0zODk2LVxubW0vdm1zY2FuLmM6Mzg5NzpcdGlmIChwZ2RhdCBcdTAwMjZcdTAwMjYgY3VycmVudF9pc19rc3dhcGQoKSkge1xubW0vdm1zY2FuLmMtMzg5OC1cdFx0Vk1fV0FSTl9PTl9PTkNFKHdhbGspO1xuLS1cbm1tL3Ztc2Nhbi5jLTM5MDEtXHR9IGVsc2UgaWYgKCF3YWxrIFx1MDAyNlx1MDAyNiBmb3JjZV9hbGxvYykge1xubW0vdm1zY2FuLmM6MzkwMjpcdFx0Vk1fV0FSTl9PTl9PTkNFKGN1cnJlbnRfaXNfa3N3YXBkKCkpO1xubW0vdm1zY2FuLmMtMzkwMy1cbi0tXG5tbS92bXNjYW4uYz0zOTEzPXN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcbi0tXG5tbS92bXNjYW4uYy0zOTIxLVxubW0vdm1zY2FuLmM6MzkyMjpcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSlcbm1tL3Ztc2Nhbi5jLTM5MjMtXHRcdGtmcmVlKHdhbGspO1xuLS1cbm1tL3Ztc2Nhbi5jPTQyMzU9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00MjQwLVxubW0vdm1zY2FuLmM6NDI0MTpcdFZNX1dBUk5fT05fT05DRSghY3VycmVudF9pc19rc3dhcGQoKSk7XG5tbS92bXNjYW4uYy00MjQyLVxuLS1cbm1tL3Ztc2Nhbi5jPTUwNjQ9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MDc1LVx0LyogY2hlY2sgdGhlIG9yZGVyIHRvIGV4Y2x1ZGUgY29tcGFjdGlvbi1pbmR1Y2VkIHJlY2xhaW0gKi9cbm1tL3Ztc2Nhbi5jOjUwNzY6XHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgc2MtXHUwMDNlb3JkZXIpXG5tbS92bXNjYW4uYy01MDc3LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmMtNTA4OS1cbm1tL3Ztc2Nhbi5jOjUwOTA6XHQvKiBrc3dhcGQgc2hvdWxkIGFib3J0IGlmIGFsbCBlbGlnaWJsZSB6b25lcyBhcmUgc2FmZSAqL1xubW0vdm1zY2FuLmMtNTA5MS1cdHJldHVybiB0cnVlO1xuLS1cbm1tL3Ztc2Nhbi5jPTUyNzY9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01Mjk4LVxubW0vdm1zY2FuLmM6NTI5OTpcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxubW0vdm1zY2FuLmMtNTMwMC1cdFx0c2MtXHUwMDNlbnJfcmVjbGFpbWVkID0gMDtcbi0tXG5tbS92bXNjYW4uYy01MzA2LVxubW0vdm1zY2FuLmM6NTMwNzpcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxubW0vdm1zY2FuLmMtNTMwOC1cdFx0c2MtXHUwMDNlbnJfcmVjbGFpbWVkICYjNDM7PSByZWNsYWltZWQ7XG4tLVxubW0vdm1zY2FuLmMtNTMxNC1cdGlmIChzYy1cdTAwM2Vucl9yZWNsYWltZWQgXHUwMDNlIHJlY2xhaW1lZClcbm1tL3Ztc2Nhbi5jOjUzMTU6XHRcdGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3MocGdkYXQsIHNjLVx1MDAzZW9yZGVyLCBzYy1cdTAwM2VyZWNsYWltX2lkeCk7XG5tbS92bXNjYW4uYy01MzE2LX1cbi0tXG5tbS92bXNjYW4uYz02MDE2PXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MDQ1LVx0ICogREVGX1BSSU9SSVRZIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGZhY3Qgd2UgYXJlIGRpcmVjdFxubW0vdm1zY2FuLmM6NjA0NjpcdCAqIHJlY2xhaW1pbmcgaW1wbGllcyB0aGF0IGtzd2FwZCBpcyBub3Qga2VlcGluZyB1cCBhbmQgaXQgaXMgYmVzdCB0b1xubW0vdm1zY2FuLmMtNjA0Ny1cdCAqIGRvIGEgYmF0Y2ggb2Ygd29yayBhdCBvbmNlLiBGb3IgbWVtY2cgcmVjbGFpbSBvbmUgY2hlY2sgaXMgbWFkZSB0b1xuLS1cbm1tL3Ztc2Nhbi5jLTYwNTAtXHQgKi9cbm1tL3Ztc2Nhbi5jOjYwNTE6XHRwcm9wb3J0aW9uYWxfcmVjbGFpbSA9ICghY2dyb3VwX3JlY2xhaW0oc2MpIFx1MDAyNlx1MDAyNiAhY3VycmVudF9pc19rc3dhcGQoKSBcdTAwMjZcdTAwMjZcbm1tL3Ztc2Nhbi5jLTYwNTItXHRcdFx0XHRzYy1cdTAwM2Vwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkpO1xuLS1cbm1tL3Ztc2Nhbi5jLTYwNzUtXHRcdC8qXG5tbS92bXNjYW4uYzo2MDc2Olx0XHQgKiBGb3Iga3N3YXBkIGFuZCBtZW1jZywgcmVjbGFpbSBhdCBsZWFzdCB0aGUgbnVtYmVyIG9mIHBhZ2VzXG5tbS92bXNjYW4uYy02MDc3LVx0XHQgKiByZXF1ZXN0ZWQuIEVuc3VyZSB0aGF0IHRoZSBhbm9uIGFuZCBmaWxlIExSVXMgYXJlIHNjYW5uZWRcbi0tXG5tbS92bXNjYW4uYz02MjA3PXN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MjIxLVx0ICpcbm1tL3Ztc2Nhbi5jOjYyMjI6XHQgKiBGb3Iga3N3YXBkLCByZWxpYWJsZSBmb3J3YXJkIHByb2dyZXNzIGlzIG1vcmUgaW1wb3J0YW50XG5tbS92bXNjYW4uYy02MjIzLVx0ICogdGhhbiBhIHF1aWNrIHJldHVybiB0byBpZGxlLiBBbHdheXMgZG8gZnVsbCB3YWxrcy5cbm1tL3Ztc2Nhbi5jLTYyMjQtXHQgKi9cbm1tL3Ztc2Nhbi5jOjYyMjU6XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSB8fCBzYy1cdTAwM2VtZW1jZ19mdWxsX3dhbGspXG5tbS92bXNjYW4uYy02MjI2LVx0XHRwYXJ0aWFsID0gTlVMTDtcbi0tXG5tbS92bXNjYW4uYz02Mjg2PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYzMjQtXG5tbS92bXNjYW4uYzo2MzI1Olx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpIHtcbm1tL3Ztc2Nhbi5jLTYzMjYtXHRcdC8qXG4tLVxubW0vdm1zY2FuLmMtNjMzNy1cdFx0ICpcbm1tL3Ztc2Nhbi5jOjYzMzg6XHRcdCAqIE9uY2UgYSBub2RlIGlzIGZsYWdnZWQgUEdEQVRfV1JJVEVCQUNLLCBrc3dhcGQgd2lsbFxubW0vdm1zY2FuLmMtNjMzOS1cdFx0ICogY291bnQgdGhlIG51bWJlciBvZiBwYWdlcyB1bmRlciBwYWdlcyBmbGFnZ2VkIGZvclxuLS1cbm1tL3Ztc2Nhbi5jLTYzNDYtXHRcdC8qXG5tbS92bXNjYW4uYzo2MzQ3Olx0XHQgKiBJZiBrc3dhcGQgc2NhbnMgcGFnZXMgbWFya2VkIGZvciBpbW1lZGlhdGVcbm1tL3Ztc2Nhbi5jLTYzNDgtXHRcdCAqIHJlY2xhaW0gYW5kIHVuZGVyIHdyaXRlYmFjayAobnJfaW1tZWRpYXRlKSwgaXRcbi0tXG5tbS92bXNjYW4uYy02MzY3LVxubW0vdm1zY2FuLmM6NjM2ODpcdFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG5tbS92bXNjYW4uYy02MzY5LVx0XHRcdHNldF9iaXQoTFJVVkVDX05PREVfQ09OR0VTVEVELCBcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWZsYWdzKTtcbi0tXG5tbS92bXNjYW4uYy02MzczLVx0ICogU3RhbGwgZGlyZWN0IHJlY2xhaW0gZm9yIElPIGNvbXBsZXRpb25zIGlmIHRoZSBscnV2ZWMgaXNcbm1tL3Ztc2Nhbi5jOjYzNzQ6XHQgKiBub2RlIGlzIGNvbmdlc3RlZC4gQWxsb3cga3N3YXBkIHRvIGNvbnRpbnVlIHVudGlsIGl0XG5tbS92bXNjYW4uYy02Mzc1LVx0ICogc3RhcnRzIGVuY291bnRlcmluZyB1bnF1ZXVlZCBkaXJ0eSBwYWdlcyBvciBjeWNsaW5nIHRocm91Z2hcbi0tXG5tbS92bXNjYW4uYy02Mzc3LVx0ICovXG5tbS92bXNjYW4uYzo2Mzc4Olx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpIFx1MDAyNlx1MDAyNiBjdXJyZW50X21heV90aHJvdHRsZSgpIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmMtNjM3OS1cdCAgICAhc2MtXHUwMDNlaGliZXJuYXRpb25fbW9kZSBcdTAwMjZcdTAwMjZcbi0tXG5tbS92bXNjYW4uYy02MzkwLVx0ICogc2xlZXAuIE9uIHJlY2xhaW0gcHJvZ3Jlc3MsIHJlc2V0IHRoZSBmYWlsdXJlIGNvdW50ZXIuIEFcbm1tL3Ztc2Nhbi5jOjYzOTE6XHQgKiBzdWNjZXNzZnVsIGRpcmVjdCByZWNsYWltIHJ1biB3aWxsIHJldml2ZSBhIGRvcm1hbnQga3N3YXBkLlxubW0vdm1zY2FuLmMtNjM5Mi1cdCAqL1xubW0vdm1zY2FuLmMtNjM5My1cdGlmIChyZWNsYWltYWJsZSlcbm1tL3Ztc2Nhbi5jOjYzOTQ6XHRcdGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3MocGdkYXQsIHNjLVx1MDAzZW9yZGVyLCBzYy1cdTAwM2VyZWNsYWltX2lkeCk7XG5tbS92bXNjYW4uYy02Mzk1LVx0ZWxzZSBpZiAoc2MtXHUwMDNlY2FjaGVfdHJpbV9tb2RlKVxuLS1cbm1tL3Ztc2Nhbi5jPTY0MzM9c3RhdGljIHZvaWQgY29uc2lkZXJfcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02NDQ5LVx0Lypcbm1tL3Ztc2Nhbi5jOjY0NTA6XHQgKiBEbyBub3QgdGhyb3R0bGUga3N3YXBkIG9yIGNncm91cCByZWNsYWltIG9uIE5PUFJPR1JFU1MgYXMgaXQgd2lsbFxubW0vdm1zY2FuLmMtNjQ1MS1cdCAqIHRocm90dGxlIG9uIFZNU0NBTl9USFJPVFRMRV9XUklURUJBQ0sgaWYgdGhlcmUgYXJlIHRvbyBtYW55IHBhZ2VzXG4tLVxubW0vdm1zY2FuLmMtNjQ1NC1cdCAqL1xubW0vdm1zY2FuLmM6NjQ1NTpcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpIHx8IGNncm91cF9yZWNsYWltKHNjKSlcbm1tL3Ztc2Nhbi5jLTY0NTYtXHRcdHJldHVybjtcbi0tXG5tbS92bXNjYW4uYz02NjkxPXN0YXRpYyBib29sIGFsbG93X2RpcmVjdF9yZWNsYWltKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNjY5OC1cbm1tL3Ztc2Nhbi5jOjY2OTk6XHRpZiAoa3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdkYXQpKVxubW0vdm1zY2FuLmMtNjcwMC1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vdm1zY2FuLmMtNjcxNS1cbm1tL3Ztc2Nhbi5jOjY3MTY6XHQvKiBrc3dhcGQgbXVzdCBiZSBhd2FrZSBpZiBwcm9jZXNzZXMgYXJlIGJlaW5nIHRocm90dGxlZCAqL1xubW0vdm1zY2FuLmM6NjcxNzpcdGlmICghd21hcmtfb2sgXHUwMDI2XHUwMDI2IHdhaXRxdWV1ZV9hY3RpdmUoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX3dhaXQpKSB7XG5tbS92bXNjYW4uYzo2NzE4Olx0XHRpZiAoUkVBRF9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgpIFx1MDAzZSBaT05FX05PUk1BTClcbm1tL3Ztc2Nhbi5jOjY3MTk6XHRcdFx0V1JJVEVfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LCBaT05FX05PUk1BTCk7XG5tbS92bXNjYW4uYy02NzIwLVxubW0vdm1zY2FuLmM6NjcyMTpcdFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFx1MDAyNnBnZGF0LVx1MDAzZWtzd2FwZF93YWl0KTtcbm1tL3Ztc2Nhbi5jLTY3MjItXHR9XG4tLVxubW0vdm1zY2FuLmMtNjcyOS0gKiBhbmQgdGhlIFBGTUVNQUxMT0MgcmVzZXJ2ZSBmb3IgdGhlIHByZWZlcnJlZCBub2RlIGlzIGdldHRpbmcgZGFuZ2Vyb3VzbHlcbm1tL3Ztc2Nhbi5jOjY3MzA6ICogZGVwbGV0ZWQuIGtzd2FwZCB3aWxsIGNvbnRpbnVlIHRvIG1ha2UgcHJvZ3Jlc3MgYW5kIHdha2UgdGhlIHByb2Nlc3Nlc1xubW0vdm1zY2FuLmMtNjczMS0gKiB3aGVuIHRoZSBsb3cgd2F0ZXJtYXJrIGlzIHJlYWNoZWQuXG4tLVxubW0vdm1zY2FuLmM9NjczNj1zdGF0aWMgYm9vbCB0aHJvdHRsZV9kaXJlY3RfcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcbi0tXG5tbS92bXNjYW4uYy02NzY2LVx0ICogVGhyb3R0bGluZyBpcyBiYXNlZCBvbiB0aGUgZmlyc3QgdXNhYmxlIG5vZGUgYW5kIHRocm90dGxlZCBwcm9jZXNzZXNcbm1tL3Ztc2Nhbi5jOjY3Njc6XHQgKiB3YWl0IG9uIGEgcXVldWUgdW50aWwga3N3YXBkIG1ha2VzIHByb2dyZXNzIGFuZCB3YWtlcyB0aGVtLiBUaGVyZVxubW0vdm1zY2FuLmMtNjc2OC1cdCAqIGlzIGFuIGFmZmluaXR5IHRoZW4gYmV0d2VlbiBwcm9jZXNzZXMgd2FraW5nIHVwIGFuZCB3aGVyZSByZWNsYWltXG4tLVxubW0vdm1zY2FuLmMtNjc5Ni1cdCAqIHRyYW5zYWN0aW9uIGluIHRoZSBjYXNlIG9mIGEgZmlsZXN5c3RlbSBsaWtlIGV4dFszfDRdLiBJbiB0aGlzIGNhc2UsXG5tbS92bXNjYW4uYzo2Nzk3Olx0ICogaXQgaXMgbm90IHNhZmUgdG8gYmxvY2sgb24gcGZtZW1hbGxvY193YWl0IGFzIGtzd2FwZCBjb3VsZCBiZVxubW0vdm1zY2FuLmMtNjc5OC1cdCAqIGJsb2NrZWQgd2FpdGluZyBvbiB0aGUgc2FtZSBsb2NrLiBJbnN0ZWFkLCB0aHJvdHRsZSBmb3IgdXAgdG8gYVxuLS1cbm1tL3Ztc2Nhbi5jLTY4MDQtXHRlbHNlXG5tbS92bXNjYW4uYzo2ODA1Olx0XHQvKiBUaHJvdHRsZSB1bnRpbCBrc3dhcGQgd2FrZXMgdGhlIHByb2Nlc3MgKi9cbm1tL3Ztc2Nhbi5jLTY4MDYtXHRcdHdhaXRfZXZlbnRfa2lsbGFibGUoem9uZS1cdTAwM2V6b25lX3BnZGF0LVx1MDAzZXBmbWVtYWxsb2Nfd2FpdCxcbi0tXG5tbS92bXNjYW4uYz02OTQzPXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNjk1Mi1cbm1tL3Ztc2Nhbi5jOjY5NTM6c3RhdGljIHZvaWQga3N3YXBkX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjk1NC17XG4tLVxubW0vdm1zY2FuLmM9NzAxMD1zdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzAzMi1cdFx0ICpcbm1tL3Ztc2Nhbi5jOjcwMzM6XHRcdCAqIEhvd2V2ZXIsIGtzd2FwZCB1c3VhbGx5IGNhbm5vdCBhY2NvbXBsaXNoIHRoaXMgb25cbm1tL3Ztc2Nhbi5jLTcwMzQtXHRcdCAqIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LiBPbmNlIGl0JiMzOTtzXG5tbS92bXNjYW4uYzo3MDM1Olx0XHQgKiByZWNsYWltZWQgYSBjb21wYWN0aW9uIGdhcCwgYW5kIGtzd2FwZF9zaHJpbmtfbm9kZVxubW0vdm1zY2FuLmMtNzAzNi1cdFx0ICogaGFzIGRyb3BwZWQgb3JkZXIsIHNpbXBseSBlbnN1cmUgdGhlcmUgYXJlIGVub3VnaFxuLS1cbm1tL3Ztc2Nhbi5jLTcwNjctXHQgKiBuZWVkIGJhbGFuY2luZyBieSBkZWZpbml0aW9uLiBUaGlzIGNhbiBoYXBwZW4gaWYgYSB6b25lLXJlc3RyaWN0ZWRcbm1tL3Ztc2Nhbi5jOjcwNjg6XHQgKiBhbGxvY2F0aW9uIHRyaWVzIHRvIHdha2UgYSByZW1vdGUga3N3YXBkLlxubW0vdm1zY2FuLmMtNzA2OS1cdCAqL1xuLS1cbm1tL3Ztc2Nhbi5jPTcwNzc9c3RhdGljIHZvaWQgY2xlYXJfcGdkYXRfY29uZ2VzdGVkKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNzA4Ni0vKlxubW0vdm1zY2FuLmM6NzA4NzogKiBQcmVwYXJlIGtzd2FwZCBmb3Igc2xlZXBpbmcuIFRoaXMgdmVyaWZpZXMgdGhhdCB0aGVyZSBhcmUgbm8gcHJvY2Vzc2VzXG5tbS92bXNjYW4uYy03MDg4LSAqIHdhaXRpbmcgaW4gdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oKSBhbmQgdGhhdCB3YXRlcm1hcmtzIGhhdmUgYmVlbiBtZXQuXG5tbS92bXNjYW4uYy03MDg5LSAqXG5tbS92bXNjYW4uYzo3MDkwOiAqIFJldHVybnMgdHJ1ZSBpZiBrc3dhcGQgaXMgcmVhZHkgdG8gc2xlZXBcbm1tL3Ztc2Nhbi5jLTcwOTEtICovXG5tbS92bXNjYW4uYzo3MDkyOnN0YXRpYyBib29sIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcbm1tL3Ztc2Nhbi5jLTcwOTMtXHRcdFx0XHRpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTcwOTctXHQgKiBzb29uIGFzIGFsbG93X2RpcmVjdF9yZWNsYWltKCkgaXMgdHJ1ZS4gQnV0IHRoZXJlIGlzIGEgcG90ZW50aWFsXG5tbS92bXNjYW4uYzo3MDk4Olx0ICogcmFjZSBiZXR3ZWVuIHdoZW4ga3N3YXBkIGNoZWNrcyB0aGUgd2F0ZXJtYXJrcyBhbmQgYSBwcm9jZXNzIGdldHNcbm1tL3Ztc2Nhbi5jLTcwOTktXHQgKiB0aHJvdHRsZWQuIFRoZXJlIGlzIGFsc28gYSBwb3RlbnRpYWwgcmFjZSBpZiBwcm9jZXNzZXMgZ2V0XG5tbS92bXNjYW4uYzo3MTAwOlx0ICogdGhyb3R0bGVkLCBrc3dhcGQgd2FrZXMsIGEgbGFyZ2UgcHJvY2VzcyBleGl0cyB0aGVyZWJ5IGJhbGFuY2luZyB0aGVcbm1tL3Ztc2Nhbi5jOjcxMDE6XHQgKiB6b25lcywgd2hpY2ggY2F1c2VzIGtzd2FwZCB0byBleGl0IGJhbGFuY2VfcGdkYXQoKSBiZWZvcmUgcmVhY2hpbmdcbm1tL3Ztc2Nhbi5jOjcxMDI6XHQgKiB0aGUgd2FrZSB1cCBjaGVja3MuIElmIGtzd2FwZCBpcyBnb2luZyB0byBzbGVlcCwgbm8gcHJvY2VzcyBzaG91bGRcbm1tL3Ztc2Nhbi5jLTcxMDMtXHQgKiBiZSBzbGVlcGluZyBvbiBwZm1lbWFsbG9jX3dhaXQsIHNvIHdha2UgdGhlbSBub3cgaWYgbmVjZXNzYXJ5LiBJZlxubW0vdm1zY2FuLmM6NzEwNDpcdCAqIHRoZSB3YWtlIHVwIGlzIHByZW1hdHVyZSwgcHJvY2Vzc2VzIHdpbGwgd2FrZSBrc3dhcGQgYW5kIGdldFxubW0vdm1zY2FuLmMtNzEwNS1cdCAqIHRocm90dGxlZCBhZ2Fpbi4gVGhlIGRpZmZlcmVuY2UgZnJvbSB3YWtlIHVwcyBpbiBiYWxhbmNlX3BnZGF0KCkgaXNcbi0tXG5tbS92bXNjYW4uYy03MTExLVx0LyogSG9wZWxlc3Mgbm9kZSwgbGVhdmUgaXQgdG8gZGlyZWN0IHJlY2xhaW0gKi9cbm1tL3Ztc2Nhbi5jOjcxMTI6XHRpZiAoa3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdkYXQpKVxubW0vdm1zY2FuLmMtNzExMy1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vdm1zY2FuLmMtNzEyMy0vKlxubW0vdm1zY2FuLmM6NzEyNDogKiBrc3dhcGQgc2hyaW5rcyBhIG5vZGUgb2YgcGFnZXMgdGhhdCBhcmUgYXQgb3IgYmVsb3cgdGhlIGhpZ2hlc3QgdXNhYmxlXG5tbS92bXNjYW4uYy03MTI1LSAqIHpvbmUgdGhhdCBpcyBjdXJyZW50bHkgdW5iYWxhbmNlZC5cbm1tL3Ztc2Nhbi5jLTcxMjYtICpcbm1tL3Ztc2Nhbi5jOjcxMjc6ICogUmV0dXJucyB0cnVlIGlmIGtzd2FwZCBzY2FubmVkIGF0IGxlYXN0IHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIHBhZ2VzIHRvXG5tbS92bXNjYW4uYy03MTI4LSAqIHJlY2xhaW0gb3IgaWYgdGhlIGxhY2sgb2YgcHJvZ3Jlc3Mgd2FzIGR1ZSB0byBwYWdlcyB1bmRlciB3cml0ZWJhY2suXG4tLVxubW0vdm1zY2FuLmMtNzEzMC0gKi9cbm1tL3Ztc2Nhbi5jOjcxMzE6c3RhdGljIGJvb2wga3N3YXBkX3Nocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsXG5tbS92bXNjYW4uYy03MTMyLVx0XHRcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYz03MTg2PWNsZWFyX3JlY2xhaW1fYWN0aXZlKHBnX2RhdGFfdCAqcGdkYXQsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzE5MS0vKlxubW0vdm1zY2FuLmM6NzE5MjogKiBGb3Iga3N3YXBkLCBiYWxhbmNlX3BnZGF0KCkgd2lsbCByZWNsYWltIHBhZ2VzIGFjcm9zcyBhIG5vZGUgZnJvbSB6b25lc1xubW0vdm1zY2FuLmMtNzE5My0gKiB0aGF0IGFyZSBlbGlnaWJsZSBmb3IgdXNlIGJ5IHRoZSBjYWxsZXIgdW50aWwgYXQgbGVhc3Qgb25lIHpvbmUgaXNcbi0tXG5tbS92bXNjYW4uYy03MTk1LSAqXG5tbS92bXNjYW4uYzo3MTk2OiAqIFJldHVybnMgdGhlIG9yZGVyIGtzd2FwZCBmaW5pc2hlZCByZWNsYWltaW5nIGF0LlxubW0vdm1zY2FuLmMtNzE5Ny0gKlxubW0vdm1zY2FuLmM6NzE5ODogKiBrc3dhcGQgc2NhbnMgdGhlIHpvbmVzIGluIHRoZSBoaWdobWVtLVx1MDAzZW5vcm1hbC1cdTAwM2VkbWEgZGlyZWN0aW9uLiAgSXQgc2tpcHNcbm1tL3Ztc2Nhbi5jLTcxOTktICogem9uZXMgd2hpY2ggaGF2ZSBmcmVlX3BhZ2VzIFx1MDAzZSBoaWdoX3dtYXJrX3BhZ2VzKHpvbmUpLCBidXQgb25jZSBhIHpvbmUgaXNcbi0tXG5tbS92bXNjYW4uYz03MjA0PXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzIzMC1cdCAqIHBsYWNlIHNvIHRoYXQgcGFyYWxsZWwgYWxsb2NhdGlvbnMgdGhhdCBhcmUgbmVhciB0aGUgd2F0ZXJtYXJrIHdpbGxcbm1tL3Ztc2Nhbi5jOjcyMzE6XHQgKiBzdGFsbCBvciBkaXJlY3QgcmVjbGFpbSB1bnRpbCBrc3dhcGQgaXMgZmluaXNoZWQuXG5tbS92bXNjYW4uYy03MjMyLVx0ICovXG4tLVxubW0vdm1zY2FuLmMtNzI1OS1cdFx0ICogZ28gYWhlYWQgaWYgYWxsIGVsaWdpYmxlIHpvbmVzIGZvciB0aGUgb3JpZ2luYWwgYWxsb2NhdGlvblxubW0vdm1zY2FuLmM6NzI2MDpcdFx0ICogcmVxdWVzdCBhcmUgYmFsYW5jZWQgdG8gYXZvaWQgZXhjZXNzaXZlIHJlY2xhaW0gZnJvbSBrc3dhcGQuXG5tbS92bXNjYW4uYy03MjYxLVx0XHQgKi9cbi0tXG5tbS92bXNjYW4uYy03Mjc3LVx0XHQgKiBvbiB0aGUgZ3JvdW5kcyB0aGF0IHRoZSBub3JtYWwgcmVjbGFpbSBzaG91bGQgYmUgZW5vdWdoIHRvXG5tbS92bXNjYW4uYzo3Mjc4Olx0XHQgKiByZS1ldmFsdWF0ZSBpZiBib29zdGluZyBpcyByZXF1aXJlZCB3aGVuIGtzd2FwZCBuZXh0IHdha2VzLlxubW0vdm1zY2FuLmMtNzI3OS1cdFx0ICovXG4tLVxubW0vdm1zY2FuLmMtNzMxMS1cdFx0ICovXG5tbS92bXNjYW4uYzo3MzEyOlx0XHRrc3dhcGRfYWdlX25vZGUocGdkYXQsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTczMTMtXG4tLVxubW0vdm1zY2FuLmMtNzMyNS1cdFx0ICovXG5tbS92bXNjYW4uYzo3MzI2Olx0XHRpZiAoa3N3YXBkX3Nocmlua19ub2RlKHBnZGF0LCBcdTAwMjZzYykpXG5tbS92bXNjYW4uYy03MzI3LVx0XHRcdHJhaXNlX3ByaW9yaXR5ID0gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmMtNzMzNy1cbm1tL3Ztc2Nhbi5jOjczMzg6XHRcdC8qIENoZWNrIGlmIGtzd2FwZCBzaG91bGQgYmUgc3VzcGVuZGluZyAqL1xubW0vdm1zY2FuLmMtNzMzOS1cdFx0X19mc19yZWNsYWltX3JlbGVhc2UoX1RISVNfSVBfKTtcbi0tXG5tbS92bXNjYW4uYy03Mzc2LVx0ICogd2F0ZXJtYXJrX2hpZ2ggYXQgdGhpcyBwb2ludC4gV2UgbmVlZCB0byBhdm9pZCBpbmNyZWFzaW5nIHRoZVxubW0vdm1zY2FuLmM6NzM3NzpcdCAqIGZhaWx1cmUgY291bnQgdG8gcHJldmVudCB0aGUga3N3YXBkIHRocmVhZCBmcm9tIHN0b3BwaW5nLlxubW0vdm1zY2FuLmMtNzM3OC1cdCAqL1xubW0vdm1zY2FuLmMtNzM3OS1cdGlmICghc2MubnJfcmVjbGFpbWVkIFx1MDAyNlx1MDAyNiAhYm9vc3RlZCkge1xubW0vdm1zY2FuLmM6NzM4MDpcdFx0aW50IGZhaWxfY250ID0gYXRvbWljX2luY19yZXR1cm4oXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX2ZhaWx1cmVzKTtcbm1tL3Ztc2Nhbi5jOjczODE6XHRcdC8qIGtzd2FwZCBjb250ZXh0LCBsb3cgb3ZlcmhlYWQgdG8gdHJhY2UgZXZlcnkgZmFpbHVyZSAqL1xubW0vdm1zY2FuLmM6NzM4MjpcdFx0dHJhY2VfbW1fdm1zY2FuX2tzd2FwZF9yZWNsYWltX2ZhaWwocGdkYXQtXHUwMDNlbm9kZV9pZCwgZmFpbF9jbnQpO1xubW0vdm1zY2FuLmMtNzM4My1cdH1cbi0tXG5tbS92bXNjYW4uYy03NDE4LVx0Lypcbm1tL3Ztc2Nhbi5jOjc0MTk6XHQgKiBSZXR1cm4gdGhlIG9yZGVyIGtzd2FwZCBzdG9wcGVkIHJlY2xhaW1pbmcgYXQgYXNcbm1tL3Ztc2Nhbi5jOjc0MjA6XHQgKiBwcmVwYXJlX2tzd2FwZF9zbGVlcCgpIHRha2VzIGl0IGludG8gYWNjb3VudC4gSWYgYW5vdGhlciBjYWxsZXJcbm1tL3Ztc2Nhbi5jOjc0MjE6XHQgKiBlbnRlcmVkIHRoZSBhbGxvY2F0b3Igc2xvdyBwYXRoIHdoaWxlIGtzd2FwZCB3YXMgYXdha2UsIG9yZGVyIHdpbGxcbm1tL3Ztc2Nhbi5jLTc0MjItXHQgKiByZW1haW4gYXQgdGhlIGhpZ2hlciBsZXZlbC5cbi0tXG5tbS92bXNjYW4uYy03NDI3LS8qXG5tbS92bXNjYW4uYzo3NDI4OiAqIFRoZSBwZ2RhdC1cdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4IGlzIHVzZWQgdG8gcGFzcyB0aGUgaGlnaGVzdCB6b25lIGluZGV4IHRvXG5tbS92bXNjYW4uYzo3NDI5OiAqIGJlIHJlY2xhaW1lZCBieSBrc3dhcGQgZnJvbSB0aGUgd2FrZXIuIElmIHRoZSB2YWx1ZSBpcyBNQVhfTlJfWk9ORVMgd2hpY2ggaXNcbm1tL3Ztc2Nhbi5jOjc0MzA6ICogbm90IGEgdmFsaWQgaW5kZXggdGhlbiBlaXRoZXIga3N3YXBkIHJ1bnMgZm9yIGZpcnN0IHRpbWUgb3Iga3N3YXBkIGNvdWxkbiYjMzk7dFxubW0vdm1zY2FuLmMtNzQzMS0gKiBzbGVlcCBhZnRlciBwcmV2aW91cyByZWNsYWltIGF0dGVtcHQgKG5vZGUgaXMgc3RpbGwgdW5iYWxhbmNlZCkuIEluIHRoYXRcbm1tL3Ztc2Nhbi5jOjc0MzI6ICogY2FzZSByZXR1cm4gdGhlIHpvbmUgaW5kZXggb2YgdGhlIHByZXZpb3VzIGtzd2FwZCByZWNsYWltIGN5Y2xlLlxubW0vdm1zY2FuLmMtNzQzMy0gKi9cbm1tL3Ztc2Nhbi5jOjc0MzQ6c3RhdGljIGVudW0gem9uZV90eXBlIGtzd2FwZF9oaWdoZXN0X3pvbmVpZHgocGdfZGF0YV90ICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTc0MzUtXHRcdFx0XHRcdCAgIGVudW0gem9uZV90eXBlIHByZXZfaGlnaGVzdF96b25laWR4KVxubW0vdm1zY2FuLmMtNzQzNi17XG5tbS92bXNjYW4uYzo3NDM3Olx0ZW51bSB6b25lX3R5cGUgY3Vycl9pZHggPSBSRUFEX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCk7XG5tbS92bXNjYW4uYy03NDM4LVxuLS1cbm1tL3Ztc2Nhbi5jLTc0NDEtXG5tbS92bXNjYW4uYzo3NDQyOnN0YXRpYyB2b2lkIGtzd2FwZF90cnlfdG9fc2xlZXAocGdfZGF0YV90ICpwZ2RhdCwgaW50IGFsbG9jX29yZGVyLCBpbnQgcmVjbGFpbV9vcmRlcixcbm1tL3Ztc2Nhbi5jLTc0NDMtXHRcdFx0XHR1bnNpZ25lZCBpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTc0NTAtXG5tbS92bXNjYW4uYzo3NDUxOlx0cHJlcGFyZV90b193YWl0KFx1MDAyNnBnZGF0LVx1MDAzZWtzd2FwZF93YWl0LCBcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xubW0vdm1zY2FuLmMtNzQ1Mi1cbi0tXG5tbS92bXNjYW4uYy03NDU5LVx0ICovXG5tbS92bXNjYW4uYzo3NDYwOlx0aWYgKHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnZGF0LCByZWNsYWltX29yZGVyLCBoaWdoZXN0X3pvbmVpZHgpKSB7XG5tbS92bXNjYW4uYy03NDYxLVx0XHQvKlxuLS1cbm1tL3Ztc2Nhbi5jLTc0NjMtXHRcdCAqIGlzb2xhdGUgcGFnZXMgZnJvbSBhbmQgc2tpcHMgdGhlbSBpbiB0aGUgZnV0dXJlIHNjYW5uaW5nLlxubW0vdm1zY2FuLmM6NzQ2NDpcdFx0ICogV2hlbiBrc3dhcGQgaXMgZ29pbmcgdG8gc2xlZXAsIGl0IGlzIHJlYXNvbmFibGUgdG8gYXNzdW1lXG5tbS92bXNjYW4uYy03NDY1LVx0XHQgKiB0aGF0IHBhZ2VzIGFuZCBjb21wYWN0aW9uIG1heSBzdWNjZWVkIHNvIHJlc2V0IHRoZSBjYWNoZS5cbi0tXG5tbS92bXNjYW4uYy03NDc3LVx0XHQvKlxubW0vdm1zY2FuLmM6NzQ3ODpcdFx0ICogSWYgd29rZW4gcHJlbWF0dXJlbHkgdGhlbiByZXNldCBrc3dhcGRfaGlnaGVzdF96b25laWR4IGFuZFxubW0vdm1zY2FuLmMtNzQ3OS1cdFx0ICogb3JkZXIuIFRoZSB2YWx1ZXMgd2lsbCBlaXRoZXIgYmUgZnJvbSBhIHdha2V1cCByZXF1ZXN0IG9yXG4tLVxubW0vdm1zY2FuLmMtNzQ4Mi1cdFx0aWYgKHJlbWFpbmluZykge1xubW0vdm1zY2FuLmM6NzQ4MzpcdFx0XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsXG5tbS92bXNjYW4uYzo3NDg0Olx0XHRcdFx0XHRrc3dhcGRfaGlnaGVzdF96b25laWR4KHBnZGF0LFxubW0vdm1zY2FuLmMtNzQ4NS1cdFx0XHRcdFx0XHRcdGhpZ2hlc3Rfem9uZWlkeCkpO1xubW0vdm1zY2FuLmMtNzQ4Ni1cbm1tL3Ztc2Nhbi5jOjc0ODc6XHRcdFx0aWYgKFJFQURfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfb3JkZXIpIFx1MDAzYyByZWNsYWltX29yZGVyKVxubW0vdm1zY2FuLmM6NzQ4ODpcdFx0XHRcdFdSSVRFX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX29yZGVyLCByZWNsYWltX29yZGVyKTtcbm1tL3Ztc2Nhbi5jLTc0ODktXHRcdH1cbm1tL3Ztc2Nhbi5jLTc0OTAtXG5tbS92bXNjYW4uYzo3NDkxOlx0XHRmaW5pc2hfd2FpdChcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfd2FpdCwgXHUwMDI2d2FpdCk7XG5tbS92bXNjYW4uYzo3NDkyOlx0XHRwcmVwYXJlX3RvX3dhaXQoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX3dhaXQsIFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XG5tbS92bXNjYW4uYy03NDkzLVx0fVxuLS1cbm1tL3Ztc2Nhbi5jLTc0OTktXHRpZiAoIXJlbWFpbmluZyBcdTAwMjZcdTAwMjZcbm1tL3Ztc2Nhbi5jOjc1MDA6XHQgICAgcHJlcGFyZV9rc3dhcGRfc2xlZXAocGdkYXQsIHJlY2xhaW1fb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkpIHtcbm1tL3Ztc2Nhbi5jOjc1MDE6XHRcdHRyYWNlX21tX3Ztc2Nhbl9rc3dhcGRfc2xlZXAocGdkYXQtXHUwMDNlbm9kZV9pZCk7XG5tbS92bXNjYW4uYy03NTAyLVxuLS1cbm1tL3Ztc2Nhbi5jLTc1MDctXHRcdCAqIHdhdGVybWFya3MgYmVpbmcgYnJlYWNoZWQgd2hpbGUgdW5kZXIgcHJlc3N1cmUsIHdlIHJlZHVjZSB0aGVcbm1tL3Ztc2Nhbi5jOjc1MDg6XHRcdCAqIHBlci1jcHUgdm1zdGF0IHRocmVzaG9sZCB3aGlsZSBrc3dhcGQgaXMgYXdha2UgYW5kIHJlc3RvcmVcbm1tL3Ztc2Nhbi5jLTc1MDktXHRcdCAqIHRoZW0gYmVmb3JlIGdvaW5nIGJhY2sgdG8gc2xlZXAuXG4tLVxubW0vdm1zY2FuLmMtNzUyMi1cdH1cbm1tL3Ztc2Nhbi5jOjc1MjM6XHRmaW5pc2hfd2FpdChcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfd2FpdCwgXHUwMDI2d2FpdCk7XG5tbS92bXNjYW4uYy03NTI0LX1cbi0tXG5tbS92bXNjYW4uYy03NTM4LSAqL1xubW0vdm1zY2FuLmM6NzUzOTpzdGF0aWMgaW50IGtzd2FwZCh2b2lkICpwKVxubW0vdm1zY2FuLmMtNzU0MC17XG4tLVxubW0vdm1zY2FuLmMtNzU0OC1cdCAqIGFuZCB0aGF0IGlmIHdlIG5lZWQgbW9yZSBtZW1vcnkgd2Ugc2hvdWxkIGdldCBhY2Nlc3MgdG8gaXRcbm1tL3Ztc2Nhbi5jOjc1NDk6XHQgKiByZWdhcmRsZXNzIChzZWUgXCYjMzQ7X19hbGxvY19wYWdlcygpXCYjMzQ7KS4gXCYjMzQ7a3N3YXBkXCYjMzQ7IHNob3VsZFxubW0vdm1zY2FuLmMtNzU1MC1cdCAqIG5ldmVyIGdldCBjYXVnaHQgaW4gdGhlIG5vcm1hbCBwYWdlIGZyZWVpbmcgbG9naWMuXG4tLVxubW0vdm1zY2FuLmMtNzU2MC1cbm1tL3Ztc2Nhbi5jOjc1NjE6XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9vcmRlciwgMCk7XG5tbS92bXNjYW4uYzo3NTYyOlx0V1JJVEVfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LCBNQVhfTlJfWk9ORVMpO1xubW0vdm1zY2FuLmMtNzU2My1cdGF0b21pY19zZXQoXHUwMDI2cGdkYXQtXHUwMDNlbnJfd3JpdGViYWNrX3Rocm90dGxlZCwgMCk7XG4tLVxubW0vdm1zY2FuLmMtNzU2Ni1cbm1tL3Ztc2Nhbi5jOjc1Njc6XHRcdGFsbG9jX29yZGVyID0gcmVjbGFpbV9vcmRlciA9IFJFQURfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfb3JkZXIpO1xubW0vdm1zY2FuLmM6NzU2ODpcdFx0aGlnaGVzdF96b25laWR4ID0ga3N3YXBkX2hpZ2hlc3Rfem9uZWlkeChwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTc1NjktXHRcdFx0XHRcdFx0XHRoaWdoZXN0X3pvbmVpZHgpO1xubW0vdm1zY2FuLmMtNzU3MC1cbm1tL3Ztc2Nhbi5jOjc1NzE6a3N3YXBkX3RyeV9zbGVlcDpcbm1tL3Ztc2Nhbi5jOjc1NzI6XHRcdGtzd2FwZF90cnlfdG9fc2xlZXAocGdkYXQsIGFsbG9jX29yZGVyLCByZWNsYWltX29yZGVyLFxubW0vdm1zY2FuLmMtNzU3My1cdFx0XHRcdFx0aGlnaGVzdF96b25laWR4KTtcbi0tXG5tbS92bXNjYW4uYy03NTc1LVx0XHQvKiBSZWFkIHRoZSBuZXcgb3JkZXIgYW5kIGhpZ2hlc3Rfem9uZWlkeCAqL1xubW0vdm1zY2FuLmM6NzU3NjpcdFx0YWxsb2Nfb3JkZXIgPSBSRUFEX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX29yZGVyKTtcbm1tL3Ztc2Nhbi5jOjc1Nzc6XHRcdGhpZ2hlc3Rfem9uZWlkeCA9IGtzd2FwZF9oaWdoZXN0X3pvbmVpZHgocGdkYXQsXG5tbS92bXNjYW4uYy03NTc4LVx0XHRcdFx0XHRcdFx0aGlnaGVzdF96b25laWR4KTtcbm1tL3Ztc2Nhbi5jOjc1Nzk6XHRcdFdSSVRFX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX29yZGVyLCAwKTtcbm1tL3Ztc2Nhbi5jOjc1ODA6XHRcdFdSSVRFX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCwgTUFYX05SX1pPTkVTKTtcbm1tL3Ztc2Nhbi5jLTc1ODEtXG4tLVxubW0vdm1zY2FuLmMtNzU5My1cdFx0ICogUmVjbGFpbSBiZWdpbnMgYXQgdGhlIHJlcXVlc3RlZCBvcmRlciBidXQgaWYgYSBoaWdoLW9yZGVyXG5tbS92bXNjYW4uYzo3NTk0Olx0XHQgKiByZWNsYWltIGZhaWxzIHRoZW4ga3N3YXBkIGZhbGxzIGJhY2sgdG8gcmVjbGFpbWluZyBmb3Jcbm1tL3Ztc2Nhbi5jOjc1OTU6XHRcdCAqIG9yZGVyLTAuIElmIHRoYXQgaGFwcGVucywga3N3YXBkIHdpbGwgY29uc2lkZXIgc2xlZXBpbmdcbm1tL3Ztc2Nhbi5jLTc1OTYtXHRcdCAqIGZvciB0aGUgb3JkZXIgaXQgZmluaXNoZWQgcmVjbGFpbWluZyBhdCAocmVjbGFpbV9vcmRlcilcbi0tXG5tbS92bXNjYW4uYy03NTk5LVx0XHQgKi9cbm1tL3Ztc2Nhbi5jOjc2MDA6XHRcdHRyYWNlX21tX3Ztc2Nhbl9rc3dhcGRfd2FrZShwZ2RhdC1cdTAwM2Vub2RlX2lkLCBoaWdoZXN0X3pvbmVpZHgsXG5tbS92bXNjYW4uYy03NjAxLVx0XHRcdFx0XHRcdGFsbG9jX29yZGVyKTtcbi0tXG5tbS92bXNjYW4uYy03NjA0LVx0XHRpZiAocmVjbGFpbV9vcmRlciBcdTAwM2MgYWxsb2Nfb3JkZXIpXG5tbS92bXNjYW4uYzo3NjA1Olx0XHRcdGdvdG8ga3N3YXBkX3RyeV9zbGVlcDtcbm1tL3Ztc2Nhbi5jLTc2MDYtXHR9XG4tLVxubW0vdm1zY2FuLmMtNzYxNC0gKiBBIHpvbmUgaXMgbG93IG9uIGZyZWUgbWVtb3J5IG9yIHRvbyBmcmFnbWVudGVkIGZvciBoaWdoLW9yZGVyIG1lbW9yeS4gIElmXG5tbS92bXNjYW4uYzo3NjE1OiAqIGtzd2FwZCBzaG91bGQgcmVjbGFpbSAoZGlyZWN0IHJlY2xhaW0gaXMgZGVmZXJyZWQpLCB3YWtlIGl0IHVwIGZvciB0aGUgem9uZSYjMzk7c1xubW0vdm1zY2FuLmM6NzYxNjogKiBwZ2RhdC4gIEl0IHdpbGwgd2FrZSB1cCBrY29tcGFjdGQgYWZ0ZXIgcmVjbGFpbWluZyBtZW1vcnkuICBJZiBrc3dhcGQgcmVjbGFpbVxubW0vdm1zY2FuLmMtNzYxNy0gKiBoYXMgZmFpbGVkIG9yIGlzIG5vdCBuZWVkZWQsIHN0aWxsIHdha2UgdXAga2NvbXBhY3RkIGlmIG9ubHkgY29tcGFjdGlvbiBpc1xuLS1cbm1tL3Ztc2Nhbi5jLTc2MTktICovXG5tbS92bXNjYW4uYzo3NjIwOnZvaWQgd2FrZXVwX2tzd2FwZChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgb3JkZXIsXG5tbS92bXNjYW4uYy03NjIxLVx0XHQgICBlbnVtIHpvbmVfdHlwZSBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzYzMi1cdHBnZGF0ID0gem9uZS1cdTAwM2V6b25lX3BnZGF0O1xubW0vdm1zY2FuLmM6NzYzMzpcdGN1cnJfaWR4ID0gUkVBRF9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgpO1xubW0vdm1zY2FuLmMtNzYzNC1cbm1tL3Ztc2Nhbi5jLTc2MzUtXHRpZiAoY3Vycl9pZHggPT0gTUFYX05SX1pPTkVTIHx8IGN1cnJfaWR4IFx1MDAzYyBoaWdoZXN0X3pvbmVpZHgpXG5tbS92bXNjYW4uYzo3NjM2Olx0XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsIGhpZ2hlc3Rfem9uZWlkeCk7XG5tbS92bXNjYW4uYy03NjM3LVxubW0vdm1zY2FuLmM6NzYzODpcdGlmIChSRUFEX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX29yZGVyKSBcdTAwM2Mgb3JkZXIpXG5tbS92bXNjYW4uYzo3NjM5Olx0XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9vcmRlciwgb3JkZXIpO1xubW0vdm1zY2FuLmMtNzY0MC1cbm1tL3Ztc2Nhbi5jOjc2NDE6XHRpZiAoIXdhaXRxdWV1ZV9hY3RpdmUoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX3dhaXQpKVxubW0vdm1zY2FuLmMtNzY0Mi1cdFx0cmV0dXJuO1xuLS1cbm1tL3Ztc2Nhbi5jLTc2NDQtXHQvKiBIb3BlbGVzcyBub2RlLCBsZWF2ZSBpdCB0byBkaXJlY3QgcmVjbGFpbSBpZiBwb3NzaWJsZSAqL1xubW0vdm1zY2FuLmM6NzY0NTpcdGlmIChrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ2RhdCkgfHxcbm1tL3Ztc2Nhbi5jLTc2NDYtXHQgICAgKHBnZGF0X2JhbGFuY2VkKHBnZGF0LCBvcmRlciwgaGlnaGVzdF96b25laWR4KSBcdTAwMjZcdTAwMjZcbi0tXG5tbS92bXNjYW4uYy03NjU5LVxubW0vdm1zY2FuLmM6NzY2MDpcdHRyYWNlX21tX3Ztc2Nhbl93YWtldXBfa3N3YXBkKHBnZGF0LVx1MDAzZW5vZGVfaWQsIGhpZ2hlc3Rfem9uZWlkeCwgb3JkZXIsXG5tbS92bXNjYW4uYy03NjYxLVx0XHRcdFx0ICAgICAgZ2ZwX2ZsYWdzKTtcbm1tL3Ztc2Nhbi5jOjc2NjI6XHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX3dhaXQpO1xubW0vdm1zY2FuLmMtNzY2My19XG5tbS92bXNjYW4uYy03NjY0LVxubW0vdm1zY2FuLmM6NzY2NTp2b2lkIGtzd2FwZF9jbGVhcl9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0LCBlbnVtIGtzd2FwZF9jbGVhcl9ob3BlbGVzc19yZWFzb24gcmVhc29uKVxubW0vdm1zY2FuLmMtNzY2Ni17XG5tbS92bXNjYW4uYy03NjY3LVx0LyogT25seSB0cmFjZSBhY3R1YWwgcmVzZXRzLCBub3QgcmVkdW5kYW50IHplcm8tdG8temVybyAqL1xubW0vdm1zY2FuLmM6NzY2ODpcdGlmIChhdG9taWNfeGNoZyhcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfZmFpbHVyZXMsIDApKVxubW0vdm1zY2FuLmM6NzY2OTpcdFx0dHJhY2VfbW1fdm1zY2FuX2tzd2FwZF9jbGVhcl9ob3BlbGVzcyhwZ2RhdC1cdTAwM2Vub2RlX2lkLCByZWFzb24pO1xubW0vdm1zY2FuLmMtNzY3MC19XG4tLVxubW0vdm1zY2FuLmMtNzY3Mi0vKlxubW0vdm1zY2FuLmM6NzY3MzogKiBSZXNldCBrc3dhcGRfZmFpbHVyZXMgb25seSB3aGVuIHRoZSBub2RlIGlzIGJhbGFuY2VkLiBXaXRob3V0IHRoaXNcbm1tL3Ztc2Nhbi5jLTc2NzQtICogY2hlY2ssIHN1Y2Nlc3NmdWwgZGlyZWN0IHJlY2xhaW0gKGUuZy4sIGZyb20gY2dyb3VwIG1lbW9yeS5oaWdoXG5tbS92bXNjYW4uYzo3Njc1OiAqIHRocm90dGxpbmcpIGNhbiBrZWVwIHJlc2V0dGluZyBrc3dhcGRfZmFpbHVyZXMgZXZlbiB3aGVuIHRoZSBub2RlXG5tbS92bXNjYW4uYzo3Njc2OiAqIGNhbm5vdCBiZSBiYWxhbmNlZCwgY2F1c2luZyBrc3dhcGQgdG8gcnVuIGVuZGxlc3NseS5cbm1tL3Ztc2Nhbi5jLTc2NzctICovXG5tbS92bXNjYW4uYzo3Njc4OnZvaWQga3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzcyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxubW0vdm1zY2FuLmMtNzY3OS1cdFx0XHQgICAgICAgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTc2ODEtXHRpZiAocGdkYXRfYmFsYW5jZWQocGdkYXQsIG9yZGVyLCBoaWdoZXN0X3pvbmVpZHgpKVxubW0vdm1zY2FuLmM6NzY4MjpcdFx0a3N3YXBkX2NsZWFyX2hvcGVsZXNzKHBnZGF0LCBjdXJyZW50X2lzX2tzd2FwZCgpID9cbm1tL3Ztc2Nhbi5jLTc2ODMtXHRcdFx0S1NXQVBEX0NMRUFSX0hPUEVMRVNTX0tTV0FQRCA6IEtTV0FQRF9DTEVBUl9IT1BFTEVTU19ESVJFQ1QpO1xuLS1cbm1tL3Ztc2Nhbi5jLTc2ODUtXG5tbS92bXNjYW4uYzo3Njg2OmJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcbm1tL3Ztc2Nhbi5jLTc2ODcte1xubW0vdm1zY2FuLmM6NzY4ODpcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfZmFpbHVyZXMpIFx1MDAzZT0gTUFYX1JFQ0xBSU1fUkVUUklFUztcbm1tL3Ztc2Nhbi5jLTc2ODktfVxuLS1cbm1tL3Ztc2Nhbi5jPTc3MDA9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXG4tLVxubW0vdm1zY2FuLmMtNzczMC0vKlxubW0vdm1zY2FuLmM6NzczMTogKiBUaGlzIGtzd2FwZCBzdGFydCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSBpbml0IGFuZCBub2RlLWhvdC1hZGQuXG5tbS92bXNjYW4uYy03NzMyLSAqL1xubW0vdm1zY2FuLmM6NzczMzp2b2lkIF9fbWVtaW5pdCBrc3dhcGRfcnVuKGludCBuaWQpXG5tbS92bXNjYW4uYy03NzM0LXtcbi0tXG5tbS92bXNjYW4uYy03NzM2LVxubW0vdm1zY2FuLmM6NzczNzpcdHBnZGF0X2tzd2FwZF9sb2NrKHBnZGF0KTtcbm1tL3Ztc2Nhbi5jOjc3Mzg6XHRpZiAoIXBnZGF0LVx1MDAzZWtzd2FwZCkge1xubW0vdm1zY2FuLmM6NzczOTpcdFx0cGdkYXQtXHUwMDNla3N3YXBkID0ga3RocmVhZF9jcmVhdGVfb25fbm9kZShrc3dhcGQsIHBnZGF0LCBuaWQsIFwmIzM0O2tzd2FwZCVkXCYjMzQ7LCBuaWQpO1xubW0vdm1zY2FuLmM6Nzc0MDpcdFx0aWYgKElTX0VSUihwZ2RhdC1cdTAwM2Vrc3dhcGQpKSB7XG5tbS92bXNjYW4uYy03NzQxLVx0XHRcdC8qIGZhaWx1cmUgYXQgYm9vdCBpcyBmYXRhbCAqL1xubW0vdm1zY2FuLmM6Nzc0MjpcdFx0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIHN0YXJ0IGtzd2FwZCBvbiBub2RlICVkLCByZXQ9JXBlXFxuXCYjMzQ7LFxubW0vdm1zY2FuLmM6Nzc0MzpcdFx0XHRcdCAgIG5pZCwgcGdkYXQtXHUwMDNla3N3YXBkKTtcbm1tL3Ztc2Nhbi5jLTc3NDQtXHRcdFx0QlVHX09OKHN5c3RlbV9zdGF0ZSBcdTAwM2MgU1lTVEVNX1JVTk5JTkcpO1xubW0vdm1zY2FuLmM6Nzc0NTpcdFx0XHRwZ2RhdC1cdTAwM2Vrc3dhcGQgPSBOVUxMO1xubW0vdm1zY2FuLmMtNzc0Ni1cdFx0fSBlbHNlIHtcbm1tL3Ztc2Nhbi5jOjc3NDc6XHRcdFx0d2FrZV91cF9wcm9jZXNzKHBnZGF0LVx1MDAzZWtzd2FwZCk7XG5tbS92bXNjYW4uYy03NzQ4LVx0XHR9XG5tbS92bXNjYW4uYy03NzQ5LVx0fVxubW0vdm1zY2FuLmM6Nzc1MDpcdHBnZGF0X2tzd2FwZF91bmxvY2socGdkYXQpO1xubW0vdm1zY2FuLmMtNzc1MS19XG4tLVxubW0vdm1zY2FuLmMtNzc1Ni0gKi9cbm1tL3Ztc2Nhbi5jOjc3NTc6dm9pZCBfX21lbWluaXQga3N3YXBkX3N0b3AoaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTc3NTgte1xubW0vdm1zY2FuLmMtNzc1OS1cdHBnX2RhdGFfdCAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzE1NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IFJlY2xhaW0gUGF0aHMgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gdHJpZ2dlciBpbnRlcmVzdGluZyBtZW1vcnkgcmVjbGFpbSBwYXRocyB1c2luZyBzeXprYWxsZXIuIEkga25vdyBga3N3YXBkYCBpcyBhIHRocmVhZCBmdW5jdGlvbiwgc28gSSBjYW4mIzM5O3QgY2FsbCBpdCBkaXJlY3RseS4gQnV0IGB3YWtldXBfa3N3YXBkYCBpcyBjYWxsYWJsZSwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGNvbnRyb2wgdGhlIGBrc3dhcGRgIHRocmVhZC4KCk5vdywgdGhlIG1haW4gZnVuY3Rpb25zIEkgc2hvdWxkIGZvY3VzIG9uIGFyZSBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGFuZCBgbm9kZV9yZWNsYWltYCwgc28gSSBzaG91bGQgaW5zcGVjdCB0aG9zZSBmdW5jdGlvbnMgaW4gYG1tL3Ztc2Nhbi5jYCBtb3JlIGNsb3NlbHkuIFdhaXQsIGB0cnlfdG9fZnJlZV9wYWdlc2AgaXMgYWN0dWFsbHkgY2FsbGVkIGJ5IGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCBpbiBgbW0vcGFnZV9hbGxvYy5jYC4uLiBUaGF0JiMzOTtzIGEga2V5IGRldGFpbCEgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGlzIGxpa2VseSBjYWxsZWQgYnkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbWVtY2cgbGltaXRzLiBJIHRoaW5rIGBtZW1vcnlfaGlnaF93cml0ZWAgb3Igc2ltaWxhciBpbiBgbW0vbWVtY29udHJvbC5jYCBhcmUgcHJvYmFibHkgaW52b2x2ZWQuIGBub2RlX3JlY2xhaW1gIGlzIGFsc28gY3JpdGljYWwsIGFuZCBpdCYjMzk7cyBjYWxsZWQgYnkgYGdldF9wYWdlX2Zyb21fZnJlZWxpc3RgIGluIGBtbS9wYWdlX2FsbG9jLmNgLgoKU28gdGhlIG1vc3QgZWZmZWN0aXZlIGZ1enppbmcgc3RyYXRlZ3kgaXMgY2xlYXI6IEkgbmVlZCB0byB0YXJnZXQgbWVtb3J5IGFsbG9jYXRpb24gYW5kIG1lbWNnIGxpbWl0cyB0byBoaXQgdGhlc2UgcmVjbGFpbSBwYXRocy4gVGhlIHBhdGNoIEkmIzM5O20gZXhhbWluaW5nIG1vZGlmaWVzIGB0aHJvdHRsZV9pc29sYXRlZGAsIGFuZCB0aGF0JiMzOTtzIGNhbGxlZCB3aGVuIHRvbyBtYW55IHBhZ2VzIGFyZSBiZWluZyBpc29sYXRlZCwgYW5kIHRoaXMgc2l0dWF0aW9uIGhhcHBlbnMgd2hlbiBtdWx0aXBsZSB0aHJlYWRzIGFyZSBjb25jdXJyZW50bHkgcmVjbGFpbWluZyBtZW1vcnkuIFRodXMsIGZ1enppbmcgd2l0aCBtYW55IHRocmVhZHMgYWxsb2NhdGluZyBtZW1vcnkgb3IgaGl0dGluZyBtZW1jZyBsaW1pdHMgaXMgdGhlIHdheSB0byBnbyBoZXJlLgoKTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlIGtleSBzeW1ib2xzOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBub2RlX3JlY2xhaW1gLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YC4gSXQmIzM5O3Mgd29ydGggZG91YmxlLWNoZWNraW5nIHRoYXQgYHRyeV90b19mcmVlX3BhZ2VzYCBpcyBleHBvcnRlZCBvciByZWFjaGFibGUuIEl0JiMzOTtzIGNhbGxlZCBieSBgX19hbGxvY19wYWdlc19zbG93cGF0aGAsIHdoaWNoIGlzIHJpZ2h0IGF0IHRoZSBjb3JlIG9mIHBhZ2UgYWxsb2NhdGlvbi4gYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGlzIGRlZmluaXRlbHkgdGllZCB0byBtZW1jZyByZWNsYWltLiBUaW1lIHRvIGdvIGJhY2sgdG8gYG1tL3Ztc2Nhbi5jYCBhbmQgdGFrZSBhbm90aGVyIGxvb2sgYXQgYHRocm90dGxlX2lzb2xhdGVkYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGhyb3R0bGVfaXNvbGF0ZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0xODIyPXN0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZmlsZSxcbi0tXG5tbS92bXNjYW4uYy0xODUzLVx0aWYgKCF0b29fbWFueSlcbm1tL3Ztc2Nhbi5jOjE4NTQ6XHRcdHdha2VfdGhyb3R0bGVfaXNvbGF0ZWQocGdkYXQpO1xubW0vdm1zY2FuLmMtMTg1NS1cbi0tXG5tbS92bXNjYW4uYy0xODY1LSAqL1xubW0vdm1zY2FuLmM6MTg2NjpzdGF0aWMgYm9vbCB0aHJvdHRsZV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZpbGUsXG5tbS92bXNjYW4uYy0xODY3LVx0XHRcdCAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBib29sICpmYXRhbClcbi0tXG5tbS92bXNjYW4uYz0yMDE0PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbixcbi0tXG5tbS92bXNjYW4uYy0yMDI3LVxubW0vdm1zY2FuLmM6MjAyODpcdGlmICghdGhyb3R0bGVfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjLCBcdTAwMjZmYXRhbCkpIHtcbm1tL3Ztc2Nhbi5jLTIwMjktXHRcdC8qIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gUmV0dXJuIG5vdy4gKi9cbi0tXG5tbS92bXNjYW4uYz00ODk2PXN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ5MTktXHR0eXBlID0gZ2V0X3R5cGVfdG9fc2NhbihscnV2ZWMsIHN3YXBwaW5lc3MpO1xubW0vdm1zY2FuLmM6NDkyMDpcdGlmICghdGhyb3R0bGVfaXNvbGF0ZWQocGdkYXQsIHR5cGUsIHNjLCBcdTAwMjZmYXRhbCkpIHtcbm1tL3Ztc2Nhbi5jLTQ5MjEtXHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NDgyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBgd2FrZV90aHJvdHRsZV9pc29sYXRlZGAgaXMgc2hvd2luZyB1cCBpbiB0aGUgb3V0cHV0LiBUaGF0IG1lYW5zIHRoaXMgcGF0Y2ggaXNuJiMzOTt0ICppbnRyb2R1Y2luZyogaXQ7IGl0JiMzOTtzIGVpdGhlciBwcmUtZXhpc3Rpbmcgb3IgYmVpbmcgYWRkZWQgaW4gYSBkaWZmZXJlbnQgcGFydCBvZiB0aGUgc2VyaWVzLiBHb29kLCB0aGF0IGNsYXJpZmllcyB0aGluZ3MuCgpMZXQmIzM5O3MgZm9jdXMgb24gdGhlIGFjdHVhbCBjaGFuZ2VzIGhlcmUuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgcmVmYWN0b3JpbmcgdGhlIHRocm90dGxpbmcgbG9naWMgcmVsYXRlZCB0byBpc29sYXRlZCBmb2xpb3MuIFRoZXkmIzM5O3ZlIG1vdmVkIHRoZSBsb2dpYyBpbnRvIGEgbmV3IGZ1bmN0aW9uLCBgdGhyb3R0bGVfaXNvbGF0ZWRgLCBhbmQgY3J1Y2lhbGx5LCB0aGV5JiMzOTtyZSBub3cgYXBwbHlpbmcgaXQgdG8gTUdMUlUmIzM5O3MgYGV2aWN0X2ZvbGlvc2AuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgYmVjYXVzZSBub3cgdGhlIE1HTFJVIGNvZGUgcGF0aCB3aWxsIGFsc28gdGhyb3R0bGUgd2hlbiB0aGVyZSBhcmUgdG9vIG1hbnkgaXNvbGF0ZWQgZm9saW9zLiBJdCBhbHNvIGluY2x1ZGVzIGZhdGFsIHNpZ25hbCBoYW5kbGluZyBkdXJpbmcgdGhlIHRocm90dGxpbmcgcHJvY2Vzcy4gVGhpcyBpcyBhIG5vdGljZWFibGUgaW1wYWN0IG9uIGhvdyBtZW1vcnkgcmVjbGFpbSBiZWhhdmVzLgoKVGhpcyBib2lscyBkb3duIHRvOgoKKiAgIFJlZmFjdG9yaW5nOiBTZXBhcmF0aW5nIG91dCB0aGUgdGhyb3R0bGluZyBsb2dpYy4KKiAgIEZ1bmN0aW9uYWwgQ2hhbmdlOiBBcHBseWluZyB0aGlzIHRocm90dGxpbmcgdG8gTUdMUlUsIHdoaWNoIGlzIHNpZ25pZmljYW50LCBwbHVzIGEgY2hhbmdlIGluIGhvdyBmYXRhbCBzaWduYWxzIGFyZSBoYW5kbGVkLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgYGluaXQvS2NvbmZpZ2Agb3IgYG1tL0tjb25maWdgLCB0byB2ZXJpZnkgdGhhdCBgTUVNQ0dgLCBgTFJVX0dFTmAsIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBhcmUgc2V0IGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDY3PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDc2LVxuaW5pdC9LY29uZmlnOjEwNzc6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA3OC1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA4NS1cbmluaXQvS2NvbmZpZzoxMDg2OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA4Ny1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5Mi1cbmluaXQvS2NvbmZpZzoxMDkzOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTEwOTQtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwOTktXG5pbml0L0tjb25maWc6MTEwMDpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTAxLVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NDY0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb25zLCBzcGVjaWZpY2FsbHkgYE1FTUNHYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBhIGZldyBjcnVjaWFsIHN5bWJvbHM6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYG5vZGVfcmVjbGFpbWAsIGBzaHJpbmtfYWxsX21lbW9yeWAsIGFuZCBgd2FrZXVwX2tzd2FwZGAuIFRoZXNlIGFyZSB0aGUga2V5IHBsYXllcnMgaW4gdGhpcyBtZW1vcnkgZ2FtZS4KCkdpdmVuIHRoYXQgSSYjMzk7bSB3b3JraW5nIHdpdGggYHNocmlua19hbGxfbWVtb3J5YCwgbXkgZmlyc3QgbW92ZSBpcyB0byBkZXRlcm1pbmUgaWYgaXRzIGJlaGF2aW9yIGlzIGNvbnRpbmdlbnQgb24gYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIEl0JiMzOTtzIHZpdGFsIHRvIGtub3cgaWYgaXRzIGV4ZWN1dGlvbiBhbmQgb3V0Y29tZXMgYXJlIGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoZSBzZXR1cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIHVuaXZlcnNhbGx5IGFjdGl2ZSBvciBpZiBpdCYjMzk7cyBzZWxlY3RpdmVseSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBlbnZpcm9ubWVudC4gVW5kZXJzdGFuZGluZyB0aGlzIGRlcGVuZGVuY3kgd2lsbCBiZSBrZXkgdG8gZGVjaXBoZXJpbmcgaXRzIG92ZXJhbGwgcm9sZSB3aXRoaW4gdGhpcyBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaHJpbmtfYWxsX21lbW9yeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTc2ODY9Ym9vbCBrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTc2OTktICovXG5tbS92bXNjYW4uYzo3NzAwOnVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxubW0vdm1zY2FuLmMtNzcwMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1ODY0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgSGliZXJuYXRpb24tUmVsYXRlZCBDb2RlIGluIHZtc2Nhbi5jKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYG1tL3Ztc2Nhbi5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gYSBjZXJ0YWluIHNlY3Rpb24sIHNvIEkmIzM5O2xsIHplcm8gaW4gb24gdGhlIHZpY2luaXR5IG9mIGxpbmUgNzcwMC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc2VlIGlmIHRoaXMgcGFydGljdWxhciBwaWVjZSBvZiBjb2RlIGlzIGd1YXJkZWQgYnkgYSBgI2lmZGVmIENPTkZJR19ISUJFUk5BVElPTmAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4gSSYjMzk7bSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZSBsb2dpYyBJJiMzOTttIGludmVzdGlnYXRpbmcgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB0aGUgc3lzdGVtJiMzOTtzIGhpYmVybmF0aW9uIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIHByb2JsZW0gSSYjMzk7bSB0cnlpbmcgdG8gc29sdmUuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHdpbGwgaGVscCBwaW5wb2ludCBob3cgdGhlIHN5c3RlbSBiZWhhdmVzIHVuZGVyIGRpZmZlcmVudCBjaXJjdW1zdGFuY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzY5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3NjkwOlx0XG43NjkxOlx0I2lmZGVmIENPTkZJR19ISUJFUk5BVElPTlxuNzY5MjpcdC8qXG43NjkzOlx0ICogVHJ5IHRvIGZyZWUgYG5yX3RvX3JlY2xhaW0mIzM5OyBvZiBtZW1vcnksIHN5c3RlbS13aWRlLCBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2Zcbjc2OTQ6XHQgKiBmcmVlZCBwYWdlcy5cbjc2OTU6XHQgKlxuNzY5NjpcdCAqIFJhdGhlciB0aGFuIHRyeWluZyB0byBhZ2UgTFJVcyB0aGUgYWltIGlzIHRvIHByZXNlcnZlIHRoZSBvdmVyYWxsXG43Njk3Olx0ICogTFJVIG9yZGVyIGJ5IHJlY2xhaW1pbmcgcHJlZmVyZW50aWFsbHlcbjc2OTg6XHQgKiBpbmFjdGl2ZSBcdTAwM2UgYWN0aXZlIFx1MDAzZSBhY3RpdmUgcmVmZXJlbmNlZCBcdTAwM2UgYWN0aXZlIG1hcHBlZFxuNzY5OTpcdCAqL1xuNzcwMDpcdHVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxuNzcwMTpcdHtcbjc3MDI6XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XG43NzAzOlx0XHRcdC5ucl90b19yZWNsYWltID0gbnJfdG9fcmVjbGFpbSxcbjc3MDQ6XHRcdFx0LmdmcF9tYXNrID0gR0ZQX0hJR0hVU0VSX01PVkFCTEUsXG43NzA1Olx0XHRcdC5yZWNsYWltX2lkeCA9IE1BWF9OUl9aT05FUyAtIDEsXG43NzA2Olx0XHRcdC5wcmlvcml0eSA9IERFRl9QUklPUklUWSxcbjc3MDc6XHRcdFx0Lm1heV93cml0ZXBhZ2UgPSAxLFxuNzcwODpcdFx0XHQubWF5X3VubWFwID0gMSxcbjc3MDk6XHRcdFx0Lm1heV9zd2FwID0gMSxcbjc3MTA6XHRcdFx0LmhpYmVybmF0aW9uX21vZGUgPSAxLFxuNzcxMTpcdFx0fTtcbjc3MTI6XHRcdHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QgPSBub2RlX3pvbmVsaXN0KG51bWFfbm9kZV9pZCgpLCBzYy5nZnBfbWFzayk7XG43NzEzOlx0XHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDtcbjc3MTQ6XHRcdHVuc2lnbmVkIGludCBub3JlY2xhaW1fZmxhZztcbjc3MTU6XHRcbjc3MTY6XHRcdGZzX3JlY2xhaW1fYWNxdWlyZShzYy5nZnBfbWFzayk7XG43NzE3Olx0XHRub3JlY2xhaW1fZmxhZyA9IG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKCk7XG43NzE4Olx0XHRzZXRfdGFza19yZWNsYWltX3N0YXRlKGN1cnJlbnQsIFx1MDAyNnNjLnJlY2xhaW1fc3RhdGUpO1xuNzcxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjU3NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDExOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBcHByb2FjaCB0byBIaWJlcm5hdGlvbiBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHdlJiMzOTtyZSBoYW5kbGluZyBtZW1vcnkgcmVjbGFpbSBkdXJpbmcgaGliZXJuYXRpb24sIGFuZCBpdCYjMzk7cyBhbGwgdHVja2VkIGF3YXkgdW5kZXIgYENPTkZJR19ISUJFUk5BVElPTmAuIFRoYXQmIzM5O3MgdGhlIGtleS4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGhvdyBkbyB3ZSBiZXN0IGhhbmRsZSB0aGUgbWVtb3J5IHNocmlua2luZyBhc3BlY3Q/IEkgc2VlIHR3byBwcmltYXJ5IHBhdGhzIGZvcndhcmQuCgpPcHRpb24gb25lOiBXZSBjb3VsZCBleHBsaWNpdGx5IGFkZCBgSElCRVJOQVRJT05gIHRvIGBFbmFibGVDb25maWdzYCwgYnV0IEkmIzM5O20gbGVhbmluZyB0b3dhcmQgYSBzaW1wbGVyIGFwcHJvYWNoLiBJIHRoaW5rIHdlIGNhbiBwcm9iYWJseSBqdXN0IG9taXQgdGhlIGBzaHJpbmtfYWxsX21lbW9yeWAgY2FsbCBhbHRvZ2V0aGVyLiBUaGlzIHdvdWxkIG1lYW4gcmVseWluZyBwcmltYXJpbHkgb24gdGhlIGJ1aWx0LWluIG1lY2hhbmlzbXMsIG5hbWVseSBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGFuZCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AuIFRob3NlIHNlZW0gdG8gYmUgdGhlIHR5cGljYWwsIG1vc3Qtb2Z0ZW4tdXNlZCBwYXRocyBpbiBtb3N0IHN5c3RlbXMuIFRoYXQgd291bGQgcHJvdmlkZSBnb29kIHN1cHBvcnQgZm9yIHRoZSBnZW5lcmFsIGNhc2VzLgoKV2hpbGUgSSYjMzk7bSBoZXJlLCBJIHNob3VsZCBtYWtlIHN1cmUgdGhhdCBgbm9kZV9yZWNsYWltYCBpcyBiZWhhdmluZyBjb3JyZWN0bHkgaW4gdGhpcyBjb250ZXh0LCB0b28uIEl04oCZcyBvYnZpb3VzbHkgZGVwZW5kZW50IG9uIGBDT05GSUdfTlVNQWAsIHNvIEnigJlsbCBtYWtlIHN1cmUgdG8gZG91YmxlLWNoZWNrIHRoYXQgaW50ZXJhY3Rpb24gYXMgd2VsbC4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25vZGVfcmVjbGFpbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTYyODY9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy02Mjg3LXtcbm1tL3Ztc2Nhbi5jOjYyODg6XHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZCwgbnJfc2Nhbm5lZCwgbnJfbm9kZV9yZWNsYWltZWQ7XG5tbS92bXNjYW4uYy02Mjg5LVx0c3RydWN0IGxydXZlYyAqdGFyZ2V0X2xydXZlYztcbi0tXG5tbS92bXNjYW4uYy02MzE0LVxubW0vdm1zY2FuLmM6NjMxNTpcdG5yX25vZGVfcmVjbGFpbWVkID0gc2MtXHUwMDNlbnJfcmVjbGFpbWVkIC0gbnJfcmVjbGFpbWVkO1xubW0vdm1zY2FuLmMtNjMxNi1cbi0tXG5tbS92bXNjYW4uYy02MzE5LVx0XHR2bXByZXNzdXJlKHNjLVx1MDAzZWdmcF9tYXNrLCBzYy1cdTAwM2VvcmRlciwgc2MtXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsIHRydWUsXG5tbS92bXNjYW4uYzo2MzIwOlx0XHRcdCAgIHNjLVx1MDAzZW5yX3NjYW5uZWQgLSBucl9zY2FubmVkLCBucl9ub2RlX3JlY2xhaW1lZCk7XG5tbS92bXNjYW4uYy02MzIxLVxubW0vdm1zY2FuLmM6NjMyMjpcdGlmIChucl9ub2RlX3JlY2xhaW1lZClcbm1tL3Ztc2Nhbi5jLTYzMjMtXHRcdHJlY2xhaW1hYmxlID0gdHJ1ZTtcbi0tXG5tbS92bXNjYW4uYy02MzgzLVxubW0vdm1zY2FuLmM6NjM4NDpcdGlmIChzaG91bGRfY29udGludWVfcmVjbGFpbShwZ2RhdCwgbnJfbm9kZV9yZWNsYWltZWQsIHNjKSlcbm1tL3Ztc2Nhbi5jLTYzODUtXHRcdGdvdG8gYWdhaW47XG4tLVxubW0vdm1zY2FuLmM9Nzc3MT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2bXNjYW5fc3lzY3RsX3RhYmxlW10gPSB7XG4tLVxubW0vdm1zY2FuLmMtNzc4My1cdFx0LnByb2NuYW1lXHQ9IFwmIzM0O3pvbmVfcmVjbGFpbV9tb2RlXCYjMzQ7LFxubW0vdm1zY2FuLmM6Nzc4NDpcdFx0LmRhdGFcdFx0PSBcdTAwMjZub2RlX3JlY2xhaW1fbW9kZSxcbm1tL3Ztc2Nhbi5jOjc3ODU6XHRcdC5tYXhsZW5cdFx0PSBzaXplb2Yobm9kZV9yZWNsYWltX21vZGUpLFxubW0vdm1zY2FuLmMtNzc4Ni1cdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuLS1cbm1tL3Ztc2Nhbi5jPTc4MDM9bW9kdWxlX2luaXQoa3N3YXBkX2luaXQpXG4tLVxubW0vdm1zY2FuLmMtNzgwOC0gKlxubW0vdm1zY2FuLmM6NzgwOTogKiBJZiBub24temVybyBjYWxsIG5vZGVfcmVjbGFpbSB3aGVuIHRoZSBudW1iZXIgb2YgZnJlZSBwYWdlcyBmYWxscyBiZWxvd1xubW0vdm1zY2FuLmMtNzgxMC0gKiB0aGUgd2F0ZXJtYXJrcy5cbm1tL3Ztc2Nhbi5jLTc4MTEtICovXG5tbS92bXNjYW4uYzo3ODEyOmludCBub2RlX3JlY2xhaW1fbW9kZSBfX3JlYWRfbW9zdGx5O1xubW0vdm1zY2FuLmMtNzgxMy1cbi0tXG5tbS92bXNjYW4uYy03ODIxLS8qXG5tbS92bXNjYW4uYzo3ODIyOiAqIFBlcmNlbnRhZ2Ugb2YgcGFnZXMgaW4gYSB6b25lIHRoYXQgbXVzdCBiZSB1bm1hcHBlZCBmb3Igbm9kZV9yZWNsYWltIHRvXG5tbS92bXNjYW4uYy03ODIzLSAqIG9jY3VyLlxuLS1cbm1tL3Ztc2Nhbi5jPTc4NDg9c3RhdGljIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlY2FjaGVfcmVjbGFpbWFibGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy03ODU4LVx0ICovXG5tbS92bXNjYW4uYzo3ODU5Olx0aWYgKG5vZGVfcmVjbGFpbV9tb2RlIFx1MDAyNiBSRUNMQUlNX1VOTUFQKVxubW0vdm1zY2FuLmMtNzg2MC1cdFx0bnJfcGFnZWNhY2hlX3JlY2xhaW1hYmxlID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9GSUxFX1BBR0VTKTtcbi0tXG5tbS92bXNjYW4uYy03ODc5LSAqL1xubW0vdm1zY2FuLmM6Nzg4MDpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxubW0vdm1zY2FuLmMtNzg4MS1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL3Ztc2Nhbi5jLTc4ODctXG5tbS92bXNjYW4uYzo3ODg4Olx0dHJhY2VfbW1fdm1zY2FuX25vZGVfcmVjbGFpbV9iZWdpbihwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYy1cdTAwM2VvcmRlcixcbm1tL3Ztc2Nhbi5jLTc4ODktXHRcdFx0XHRcdCAgIHNjLVx1MDAzZWdmcF9tYXNrKTtcbi0tXG5tbS92bXNjYW4uYy03OTE3LVxubW0vdm1zY2FuLmM6NzkxODpcdHRyYWNlX21tX3Ztc2Nhbl9ub2RlX3JlY2xhaW1fZW5kKHNjLVx1MDAzZW5yX3JlY2xhaW1lZCwgTlVMTCk7XG5tbS92bXNjYW4uYy03OTE5LVxuLS1cbm1tL3Ztc2Nhbi5jLTc5MjItXG5tbS92bXNjYW4uYzo3OTIzOnVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG5tbS92bXNjYW4uYy03OTI0LXtcbi0tXG5tbS92bXNjYW4uYy03OTMyLVx0XHQucHJpb3JpdHkgPSBOT0RFX1JFQ0xBSU1fUFJJT1JJVFksXG5tbS92bXNjYW4uYzo3OTMzOlx0XHQubWF5X3dyaXRlcGFnZSA9ICEhKG5vZGVfcmVjbGFpbV9tb2RlIFx1MDAyNiBSRUNMQUlNX1dSSVRFKSxcbm1tL3Ztc2Nhbi5jOjc5MzQ6XHRcdC5tYXlfdW5tYXAgPSAhIShub2RlX3JlY2xhaW1fbW9kZSBcdTAwMjYgUkVDTEFJTV9VTk1BUCksXG5tbS92bXNjYW4uYy03OTM1LVx0XHQubWF5X3N3YXAgPSAxLFxuLS1cbm1tL3Ztc2Nhbi5jLTc5NzEtXG5tbS92bXNjYW4uYzo3OTcyOlx0cmV0ID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIG5yX3BhZ2VzLCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy03OTczLVx0Y2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXHUwMDI2cGdkYXQtXHUwMDNlZmxhZ3MpO1xuLS1cbm1tL3Ztc2Nhbi5jLTc5ODQtXG5tbS92bXNjYW4uYzo3OTg1OnN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG5tbS92bXNjYW4uYy03OTg2LVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vdm1zY2FuLmM9ODAwNT1pbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG4tLVxubW0vdm1zY2FuLmMtODA5Ny1cbm1tL3Ztc2Nhbi5jOjgwOTg6XHRcdFx0cmVjbGFpbWVkID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGJhdGNoX3NpemUsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTgwOTktXHRcdFx0Y2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXHUwMDI2cGdkYXQtXHUwMDNlZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQ2MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDExOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEZvY3VzOiBOVU1BIGFuZCBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBgbm9kZV9yZWNsYWltYCByZWxpZXMgb24gYENPTkZJR19OVU1BYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZSBpbiB0aGUgY29udGV4dCBvZiBOb24tVW5pZm9ybSBNZW1vcnkgQWNjZXNzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBOVU1BYCBpcyBwcm9wZXJseSBlbmFibGVkLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBhZGQgYE5VTUFgIHRvIG15IGBFbmFibGVDb25maWdzYCBsaXN0LiBUaGF0IGxpc3QgaXMgZ3Jvd2luZywgaXQmIzM5O3Mgbm93OgoKKiAgIGBMUlVfR0VOYAoqICAgYExSVV9HRU5fRU5BQkxFRGAKKiAgIGBNRU1DR2AKKiAgIGBOVU1BYAoKTm93LCBJIG5lZWQgdG8gcmVhbGx5IGRpZyBpbnRvIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBUaGUga2V5IHN5bWJvbHMgSSYjMzk7bSBmb2N1c2luZyBvbiBhcmU6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYG5vZGVfcmVjbGFpbWAsIGFuZCBgd2FrZXVwX2tzd2FwZGAuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlciwgZXNwZWNpYWxseSBjb25jZXJuaW5nIE5VTUEgYXJjaGl0ZWN0dXJlcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gdG8gY2hlY2sgYW5kIGNvbmZpcm0gaWYgYHdha2V1cF9rc3dhcGRgIGlzIGV4cG9ydGVkLCBhcyB0aGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGluIHRoZSBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKndha2V1cF9rc3dhcGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODg1MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudDogVW5yYXZlbGluZyB0aGUgJiMzOTtOb3QtU3RhdGljLCBCdXQgTm90LUV4cG9ydGVkJiMzOTsgTXlzdGVyeSoqCgpSaWdodCwgc28gdGhpcyB0aGluZyBJJiMzOTttIGxvb2tpbmcgYXQgaXNuJiMzOTt0ICpleHBvcnRlZCog4oCTIHRoYXQmIzM5O3MgdGhlIGZpcnN0IGNsdWUuIEJ1dCBpdCYjMzk7cyBhbHNvICpub3QqIHN0YXRpYywgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBoYXMgdG8gYmUgY2FsbGVkIGZyb20gKnNvbWV3aGVyZSogd2l0aGluIHRoZSBrZXJuZWwsIGFuZCB0aGUgaGludCBwb2ludHMgZGlyZWN0bHkgdG8gYG1tL3BhZ2VfYWxsb2MuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIGxldCYjMzk7cyB0cmFjZSB0aGlzIGJhY2sgdG8gdGhlIGNhbGxlci4mIzM0OwoKVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZnJvbSB3aXRoaW4gcGFnZV9hbGxvYyBpcyBpbnRlcmVzdGluZywgdGhpcyBpcyBhIGNvcmUgY29tcG9uZW50LiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjYWxsIGdyYXBoIGFuZCBmb2xsb3cgdGhlIHBhdGggdGhpcyBjb2RlIGlzIGZvbGxvd2luZy4gVGhlIGtleSBub3cgaXMgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBpbnRlcm5hbCwgbm9uLXN0YXRpYyBmdW5jdGlvbiBpbnRlZ3JhdGVzIHdpdGggdGhlIHBhZ2UgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcHJvY2Vzcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgdHJ5X3RvX2ZyZWVfcGFnZXNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLiBVbmRlcnN0YW5kaW5nIHRoaXMgbW9kdWxlIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qdHJ5X3RvX2ZyZWVfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTE3NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgYSBNZW1vcnkgQWxsb2NhdGlvbiBGdW5jdGlvbiYjMzk7cyBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gc29tZXRoaW5nIGhlcmUuIExvb2tzIGxpa2UgdGhlcmUmIzM5O3Mgc29tZSBjb2RlIHRoYXQgaXNuJiMzOTt0IGJlaW5nIGRpcmVjdGx5IGV4cG9ydGVkLCBtZWFuaW5nIGl0JiMzOTtzIG9ubHkgYmVpbmcgY2FsbGVkIGludGVybmFsbHkgd2l0aGluIHRoZSBrZXJuZWwuIEl0JiMzOTtzIGNhbGxlZCBmcm9tIGBtbS9wYWdlX2FsbG9jLmNgLCBzbyBpdCYjMzk7cyBjbGVhcmx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgYWxsb2NhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgY29kZSBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4KClRoZSBmdW5jdGlvbiBJIG5lZWQgdG8gbG9vayBhdCBpcyBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGl0JiMzOTtzIHRyeWluZyB0byBhY2NvbXBsaXNoLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdC4gUGVyaGFwcyBpdCYjMzk7cyBwYXJ0IG9mIGEgbWVjaGFuaXNtIGZvciByZWNsYWltaW5nIG1lbW9yeSB3aXRoaW4gYSBtZW1vcnkgY2dyb3VwLCBvciBtYXliZSBpdCYjMzk7cyBoYW5kbGluZyBzb21lIGVkZ2UgY2FzZSByZWxhdGVkIHRvIGZyZWVpbmcgcGFnZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5IHRvIGRldGVybWluZSBpZiBpdCBoYXMgYW55IHJlbGV2YW5jZSB0byB0aGUgcHJvYmxlbSBJJiMzOTttIHRyeWluZyB0byBzb2x2ZS4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byBmaW5kIG91dCBwcmVjaXNlbHkgd2hlcmUgYW5kIHdoZW4gaXQgZ2V0cyBpbnZva2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTUwMQoJCQkJCQkJb3V0cHV0OiAxOTIKCQkJCQkJCXRob3VnaHRzOiA3MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTWVtb3J5IFJlY2xhaW0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgdGFrZW4gYSBsb29rIGF0IHRoaXMgcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgY3JpdGljYWwgYXJlYSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyB0b3VjaGluZyBgbW0vdm1zY2FuLmNgIGltbWVkaWF0ZWx5IHNpZ25hbHMgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBjb3JlIG9mIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbWVtb3J5IHByZXNzdXJlIGFuZCByZWNsYW1hdGlvbi4KClNwZWNpZmljYWxseSwgaXQgc2VlbXMgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBtZWNoYW5pc20gdG8gdGhyb3R0bGUgcmVjbGFpbWVycyB3aGVuIGEgc3Vic3RhbnRpYWwgbnVtYmVyIG9mIGZvbGlvcyBhcmUgaW4gYW4gaXNvbGF0ZWQgc3RhdGUuIFRoaXMgaXMgZXNwZWNpYWxseSByZWxldmFudCB0byBNdWx0aS1HZW4gTFJVIChNR0xSVSksIGFzIHRoZSBjb2RlIG5vdyAqY29ycmVjdGx5KiBhY2NvdW50cyBmb3IgdGhlc2UgaXNvbGF0ZWQgcGFnZXMuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYHRocm90dGxlX2lzb2xhdGVkYCBhbmQgaXRzIGludGVncmF0aW9uIGludG8gYm90aCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIChmb3IgdGhlIGxlZ2FjeSBMUlUpIGFuZCBgZXZpY3RfZm9saW9zYCAoZm9yIE1HTFJVKSBpbXBsaWVzIGEgZnVuZGFtZW50YWwgaW1wcm92ZW1lbnQgaW4gaG93IHRoZSBrZXJuZWwgcmVzcG9uZHMgdG8gc2l0dWF0aW9ucyB3aGVyZSBjb25jdXJyZW50IHJlY2xhaW0gaXMgY2F1c2luZyBwcm9ibGVtcywgcG90ZW50aWFsbHkgcHJldmVudGluZyBPdXQtb2YtTWVtb3J5IChPT00pIGNvbmRpdGlvbnMgYW5kIHRocmFzaGluZy4gSSBhbSBhbHNvIHRoaW5raW5nIHRoYXQgYF9fbW9kX25vZGVfcGFnZV9zdGF0ZWAgYW5kIGBtb2Rfbm9kZV9wYWdlX3N0YXRlYCBhcmUgaW1wb3J0YW50LCBoZXJlLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCBzZWVtcyBsaWtlIHRoZSBwYXRjaCYjMzk7cyBwdXJwb3NlIGlzIHRvIG1hbmFnZSBtZW1vcnkgcmVjbGFpbSBpbiBhIG1vcmUgZWZmaWNpZW50IG1hbm5lciwgcGFydGljdWxhcmx5IHdoZW4gZmFjZWQgd2l0aCBhIGhpZ2ggbnVtYmVyIG9mIGNvbmN1cnJlbnQgdGhyZWFkcyB2eWluZyBmb3IgbWVtb3J5LiBJIGJlbGlldmUgdGhpcyB3aWxsIG1ha2Ugb3VyIHN5c3RlbXMgbW9yZSByb2J1c3QuIEl0JiMzOTtzIGxpa2VseSB0cnlpbmcgdG8gYXZvaWQgYSBzY2VuYXJpbyB3aGVyZSB0aGUgTFJVIGxpc3QgYmVjb21lcyB0b28gc21hbGwsIHJlc3VsdGluZyBpbiB0aGUgc3lzdGVtIHN3YXBwaW5nIHVubmVjZXNzYXJpbHkgYW5kIGZ1cnRoZXIgZXhhY2VyYmF0aW5nIHRoZSBtZW1vcnkgcHJlc3N1cmUuCgpDb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBtZW1vcnkgbWFuYWdlbWVudCwgZXNwZWNpYWxseSBpbiBOVU1BIG9yIE1FTUNHIGVudmlyb25tZW50cywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IG5lZWRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbiB0byBlbnN1cmUgc3RhYmlsaXR5IGFuZCBjYXRjaCBhbnkgc3VidGxlIHJlZ3Jlc3Npb25zLiBUaGlzIGNoYW5nZSB3aWxsIGxpa2VseSBpbnRlcmFjdCB3aXRoOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBub2RlX3JlY2xhaW1gLCBhbmQgYHdha2V1cF9rc3dhcGRgLgoKU28sIHllYWgsIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtOVU1BJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7LAogICAgJiMzNDtub2RlX3JlY2xhaW0mIzM0OywKICAgICYjMzQ7d2FrZXVwX2tzd2FwZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgLiBJdCBpbnRyb2R1Y2VzIGB0aHJvdHRsZV9pc29sYXRlZCgpYCB0byB0aHJvdHRsZSByZWNsYWltZXJzIHdoZW4gdG9vIG1hbnkgZm9saW9zIGFyZSBpc29sYXRlZCwgYW5kIGFwcGxpZXMgdGhpcyBsb2dpYyB0byBib3RoIHRoZSBsZWdhY3kgTFJVIChgc2hyaW5rX2luYWN0aXZlX2xpc3RgKSBhbmQgdGhlIE11bHRpLUdlbiBMUlUgKGBldmljdF9mb2xpb3NgKS4gSXQgYWxzbyBhZGRzIGFjY291bnRpbmcgZm9yIGlzb2xhdGVkIGZvbGlvcyBpbiBNR0xSVS4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIG1lbW9yeSBwcmVzc3VyZSBhbmQgY29uY3VycmVudCBwYWdlIHJlY2xhaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgICAmIzM0O25vZGVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDt3YWtldXBfa3N3YXBkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AuIEl0IGludHJvZHVjZXMgYHRocm90dGxlX2lzb2xhdGVkKClgIHRvIHRocm90dGxlIHJlY2xhaW1lcnMgd2hlbiB0b28gbWFueSBmb2xpb3MgYXJlIGlzb2xhdGVkLCBhbmQgYXBwbGllcyB0aGlzIGxvZ2ljIHRvIGJvdGggdGhlIGxlZ2FjeSBMUlUgKGBzaHJpbmtfaW5hY3RpdmVfbGlzdGApIGFuZCB0aGUgTXVsdGktR2VuIExSVSAoYGV2aWN0X2ZvbGlvc2ApLiBJdCBhbHNvIGFkZHMgYWNjb3VudGluZyBmb3IgaXNvbGF0ZWQgZm9saW9zIGluIE1HTFJVLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbWVtb3J5IHByZXNzdXJlIGFuZCBjb25jdXJyZW50IHBhZ2UgcmVjbGFpbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHBhZ2UgcmVjbGFpbSB0aHJvdHRsaW5nIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AgYnkgaW50cm9kdWNpbmcgYSBuZXcgaGVscGVyIGZ1bmN0aW9uIGB0aHJvdHRsZV9pc29sYXRlZGAuIEl0IHVzZXMgYSBsb2NhbCBib29sZWFuIHZhcmlhYmxlIGBmYXRhbGAgcGFzc2VkIGJ5IHJlZmVyZW5jZSB0byB0cmFjayBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nLiBUaGUgdmFyaWFibGUgYGZhdGFsYCBpcyB1bmNvbmRpdGlvbmFsbHkgaW5pdGlhbGl6ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBgdGhyb3R0bGVfaXNvbGF0ZWRgIGJlZm9yZSBhbnkgcmVhZHMgb2NjdXIuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBsZWF2ZSBhbnkgZmllbGRzIHVuaW5pdGlhbGl6ZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbG9naWMgZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgZGVhZGxvY2tzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1NjMyZDhlYzIzOWRmYWJiZGNmZmZmZDU1ODQ5ZGIwMzUyMjk5YTU4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMDc6NTE6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGMxNDA0YTU5NTIzZDYuLjg4NmE1M2Y1NjNhYjcgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0xODE5LDcgJiM0MzsxODE5LDcgQEAgYm9vbCBmb2xpb19pc29sYXRlX2xydShzdHJ1Y3QgZm9saW8gKmZvbGlvKQogICogdGhlIExSVSBsaXN0IHdpbGwgZ28gc21hbGwgYW5kIGJlIHNjYW5uZWQgZmFzdGVyIHRoYW4gbmVjZXNzYXJ5LCBsZWFkaW5nIHRvCiAgKiB1bm5lY2Vzc2FyeSBzd2FwcGluZywgdGhyYXNoaW5nIGFuZCBPT00uCiAgKi8KLXN0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGludCBmaWxlLAomIzQzO3N0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZmlsZSwKIAkJc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiB7CiAJdW5zaWduZWQgbG9uZyBpbmFjdGl2ZSwgaXNvbGF0ZWQ7CkBAIC0xODU2LDYgJiM0MzsxODU2LDM3IEBAIHN0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGludCBmaWxlLAogCXJldHVybiB0b29fbWFueTsKIH0KIAomIzQzOy8qCiYjNDM7ICogVGhyb3R0bGUgcmVjbGFpbSBpZiB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MgYXJlIHBpbGluZyB1cC4gSWYgdGhpcyBtYWtlcwomIzQzOyAqIG5vIHByb2dyZXNzLCB0aGUgY2FsbGVyIGlzIHByb2JhYmx5IGxvb3Bpbmcgb24gdW5ldmljdGFibGUgZm9saW9zLCBzbyBnaXZlCiYjNDM7ICogdXAuIFJldHVybnMgZmFsc2UgdG8gdGVsbCB0aGUgY2FsbGVyIHRvIHN0b3AgcmVjbGFpbWluZywgYW5kIHNldHMgQGZhdGFsCiYjNDM7ICogaWYgdGhlIHRhc2sgcmVjZWl2ZWQgYSBmYXRhbCBzaWduYWwgd2hpbGUgd2FpdGluZywgc28gdGhhdCB0aGUgY2FsbGVyIGNhbgomIzQzOyAqIGJhaWwgb3V0IGZhc3Rlci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCB0aHJvdHRsZV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZpbGUsCiYjNDM7CQkJICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGJvb2wgKmZhdGFsKQomIzQzO3sKJiM0MzsJYm9vbCBzdGFsbGVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CSpmYXRhbCA9IGZhbHNlOwomIzQzOwl3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHsKJiM0MzsJCWlmIChzdGFsbGVkKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCS8qIHdhaXQgYSBiaXQgZm9yIHRoZSByZWNsYWltZXIuICovCiYjNDM7CQlzdGFsbGVkID0gdHJ1ZTsKJiM0MzsJCXJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7CiYjNDM7CiYjNDM7CQkvKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIFJldHVybiBub3cuICovCiYjNDM7CQlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKJiM0MzsJCQkqZmF0YWwgPSB0cnVlOwomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogbW92ZV9mb2xpb3NfdG9fbHJ1KCkgbW92ZXMgZm9saW9zIGZyb20gcHJpdmF0ZSBAbGlzdCB0byBhcHByb3ByaWF0ZSBMUlUgbGlzdC4KICAqCkBAIC0xOTkyLDE5ICYjNDM7MjAyMywxNCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCiAJYm9vbCBmaWxlID0gaXNfZmlsZV9scnUobHJ1KTsKIAllbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwotCWJvb2wgc3RhbGxlZCA9IGZhbHNlOwotCi0Jd2hpbGUgKHVubGlrZWx5KHRvb19tYW55X2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYykpKSB7Ci0JCWlmIChzdGFsbGVkKQotCQkJcmV0dXJuIDA7Ci0KLQkJLyogd2FpdCBhIGJpdCBmb3IgdGhlIHJlY2xhaW1lci4gKi8KLQkJc3RhbGxlZCA9IHRydWU7Ci0JCXJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7CiYjNDM7CWJvb2wgZmF0YWw7CiAKJiM0MzsJaWYgKCF0aHJvdHRsZV9pc29sYXRlZChwZ2RhdCwgZmlsZSwgc2MsICZhbXA7ZmF0YWwpKSB7CiAJCS8qIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gUmV0dXJuIG5vdy4gKi8KLQkJaWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQomIzQzOwkJaWYgKGZhdGFsKQogCQkJcmV0dXJuIFNXQVBfQ0xVU1RFUl9NQVg7CiYjNDM7CiYjNDM7CQlyZXR1cm4gMDsKIAl9CiAKIAlscnVfYWRkX2RyYWluKCk7CkBAIC00ODgzLDYgJiM0Mzs0OTA5LDI1IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCWJvb2wgc2tpcF9yZXRyeSA9IGZhbHNlOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpOwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTsKJiM0MzsJYm9vbCBmYXRhbDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIHR5cGUgdG8gaXNvbGF0ZSBpcyB1bmtub3duIHVudGlsIGlzb2xhdGlvbiwgc28gcHJlZGljdCBpdCBmb3IKJiM0MzsJICogdGhlIHRocm90dGxpbmcgY2hlY2suIGlzb2xhdGVfZm9saW9zKCkgbWF5IHN0aWxsIGZhbGwgYmFjayB0byB0aGUKJiM0MzsJICogb3RoZXIgdHlwZSwgd2hpY2ggaXMgZmluZSBmb3IgdGhpcyBoZXVyaXN0aWMuCiYjNDM7CSAqLwomIzQzOwl0eXBlID0gZ2V0X3R5cGVfdG9fc2NhbihscnV2ZWMsIHN3YXBwaW5lc3MpOwomIzQzOwlpZiAoIXRocm90dGxlX2lzb2xhdGVkKHBnZGF0LCB0eXBlLCBzYywgJmFtcDtmYXRhbCkpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIExpa2UgdGhlIGxlZ2FjeQomIzQzOwkJICogcGF0aCwgcHJldGVuZCBzb21lIHBhZ2VzIHdlcmUgcmVjbGFpbWVkIHNvIHJlY2xhaW0gdW53aW5kcwomIzQzOwkJICogcXVpY2tseSBpbnN0ZWFkIG9mIGxvb3BpbmcgYmFjayBpbnRvIHRoZSB0aHJvdHRsZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGZhdGFsKQomIzQzOwkJCXNjLSZndDtucl9yZWNsYWltZWQgJiM0Mzs9IFNXQVBfQ0xVU1RFUl9NQVg7CiYjNDM7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQogCiAJbHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7CiAKQEAgLTQ4OTIsNiAmIzQzOzQ5MzcsOSBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAlzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcywKIAkJCQkgJmFtcDtsaXN0LCAmYW1wO2lzb2xhdGVkLCAmYW1wO3R5cGUsICZhbXA7dHlwZV9zY2FubmVkKTsKIAlucl9pc29sYXRlZCA9IGlzb2xhdGVkOwomIzQzOwlpZiAobnJfaXNvbGF0ZWQpCiYjNDM7CQlfX21vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZSwKJiM0MzsJCQkJICAgICAgbnJfaXNvbGF0ZWQpOwogCiAJLyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi8KIAlpZiAoc2Nhbm5lZCkKQEAgLTQ5NTQsNiAmIzQzOzUwMDIsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWdvdG8gcmV0cnk7CiAJfQogCiYjNDM7CWlmIChucl9pc29sYXRlZCkKJiM0MzsJCW1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZSwKJiM0MzsJCQkJICAgIC1ucl9pc29sYXRlZCk7CiYjNDM7CiAJaWYgKG5yX2lzb2xhdGVkICZndDsgdG90YWxfcmVjbGFpbWVkKQogCQltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiAmIzQzOyB0eXBlLAogCQkJCSBucl9pc29sYXRlZCAtIHRvdGFsX3JlY2xhaW1lZCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjU2CgkJCQkJCQlvdXRwdXQ6IDE4NwoJCQkJCQkJdGhvdWdodHM6IDk2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGluIGBtbS92bXNjYW4uY2AgbG9va3MgbGlrZSBpdCYjMzk7cyByZWZhY3RvcmluZyB0aGUgaXNvbGF0ZWQgcGFnZSB0aHJvdHRsaW5nIGxvZ2ljLiBNeSBtYWluIGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBjYW4gbGVhZCB0byBuYXN0eSBidWdzLiBMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgYGZhdGFsYCB2YXJpYWJsZS4gVGhleSYjMzk7dmUgbW92ZWQgdGhlIGB0b29fbWFueV9pc29sYXRlZGAgY2hlY2sgaW50byBhIG5ldyBgdGhyb3R0bGVfaXNvbGF0ZWRgIGZ1bmN0aW9uIGFuZCBub3cgdGhleSYjMzk7cmUgcGFzc2luZyBhIGBib29sIGZhdGFsYCBieSByZWZlcmVuY2UuIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIGBmYXRhbGAgaXMgYWx3YXlzIGluaXRpYWxpemVkIGJlZm9yZSBpdCYjMzk7cyByZWFkLgoKTG9va2luZyBhdCBgdGhyb3R0bGVfaXNvbGF0ZWRgLCB0aGUgdmVyeSBmaXJzdCB0aGluZyBpdCBkb2VzIGlzIHNldCBgKmZhdGFsID0gZmFsc2VgLiBHb29kLCB0aGF0JiMzOTtzIHJlYXNzdXJpbmcuIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgYWx3YXlzIGluaXRpYWxpemVkLCB3aGV0aGVyIG9yIG5vdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgdHJ1ZWAgb3IgYGZhbHNlYC4gVGhlbiwgaW4gYm90aCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgZXZpY3RfZm9saW9zYCwgYGZhdGFsYCBpcyBvbmx5IHJlYWQgaWYgYHRocm90dGxlX2lzb2xhdGVkYCByZXR1cm5zIGBmYWxzZWAsIHdoaWNoIGlzIHdoZXJlIHRoZSByZXR1cm4gaGFwcGVucyBpbW1lZGlhdGVseSBhZnRlciB0aGUgYGZhdGFsYCB2YXJpYWJsZSBpcyBzZXQuCgpPa2F5LCBzbyBJIHRoaW5rIGBmYXRhbGAgaXMgZmluZSwgYnV0IEkgc2hvdWxkIGxvb2sgZGVlcGVyIGp1c3QgaW4gY2FzZS4gTm93IHRoYXQgSSB0aGluayBhYm91dCBpdCwgdGhlIHBhdGNoIGZvY3VzZXMgb24gcGFnZSByZWNsYWltIGFuZCB0aHJvdHRsaW5nLCBub3Qgb24gZGF0YSBjb3B5aW5nIG9yIGNvbXBsZXggc3RydWN0cy4gVGhlIGBmYXRhbGAgdmFyaWFibGUgaXMgbG9jYWwgYW5kIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIEkmIzM5O20gcmVhc29uYWJseSBjb25maWRlbnQgdGhhdCB0aGlzIGlzICpub3QqIGEgS01TQU4gc2l0dWF0aW9uLiBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgc3VidGxlIGlzc3VlcyBsaWtlIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzLCBvciBjb25jdXJyZW5jeSBwcm9ibGVtcy4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBgZXZpY3RfZm9saW9zYCBjaGFuZ2VzLiBUaGV5IGFyZSB1cGRhdGluZyBzdGF0aXN0aWNzIGZvciBpc29sYXRlZCBwYWdlcywgd2hpY2ggc2hvdWxkIGFsc28gYmUgZmluZS4gTm8gcmVkIGZsYWdzIHRoZXJlIGVpdGhlci4gQWxsIGdvb2QuIE5vIEtNU0FOIG5lZWRlZCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHBhZ2UgcmVjbGFpbSB0aHJvdHRsaW5nIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AgYnkgaW50cm9kdWNpbmcgYSBuZXcgaGVscGVyIGZ1bmN0aW9uIGB0aHJvdHRsZV9pc29sYXRlZGAuIEl0IHVzZXMgYSBsb2NhbCBib29sZWFuIHZhcmlhYmxlIGBmYXRhbGAgcGFzc2VkIGJ5IHJlZmVyZW5jZSB0byB0cmFjayBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nLiBUaGUgdmFyaWFibGUgYGZhdGFsYCBpcyB1bmNvbmRpdGlvbmFsbHkgaW5pdGlhbGl6ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBgdGhyb3R0bGVfaXNvbGF0ZWRgIGJlZm9yZSBhbnkgcmVhZHMgb2NjdXIuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBsZWF2ZSBhbnkgZmllbGRzIHVuaW5pdGlhbGl6ZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbG9naWMgZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgZGVhZGxvY2tzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBwYWdlIHJlY2xhaW0gdGhyb3R0bGluZyBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIGJ5IGludHJvZHVjaW5nIGEgbmV3IGhlbHBlciBmdW5jdGlvbiBgdGhyb3R0bGVfaXNvbGF0ZWRgLiBJdCB1c2VzIGEgbG9jYWwgYm9vbGVhbiB2YXJpYWJsZSBgZmF0YWxgIHBhc3NlZCBieSByZWZlcmVuY2UgdG8gdHJhY2sgaWYgYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZy4gVGhlIHZhcmlhYmxlIGBmYXRhbGAgaXMgdW5jb25kaXRpb25hbGx5IGluaXRpYWxpemVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYHRocm90dGxlX2lzb2xhdGVkYCBiZWZvcmUgYW55IHJlYWRzIG9jY3VyLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbGVhdmUgYW55IGZpZWxkcyB1bmluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGxvZ2ljIGVycm9ycywgdXNlLWFmdGVyLWZyZWUsIG9yIGRlYWRsb2Nrcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBvciBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTE6NDAuMjQwMTY2MzA0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNDQ4ODc0ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnlfdG9fZnJlZV9wYWdlc1wiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiLFxuICAgIFwibm9kZV9yZWNsYWltXCIsXG4gICAgXCJ3YWtldXBfa3N3YXBkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHBhZ2UgcmVjbGFpbSB0aHJvdHRsaW5nIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AgYnkgaW50cm9kdWNpbmcgYSBuZXcgaGVscGVyIGZ1bmN0aW9uIGB0aHJvdHRsZV9pc29sYXRlZGAuIEl0IHVzZXMgYSBsb2NhbCBib29sZWFuIHZhcmlhYmxlIGBmYXRhbGAgcGFzc2VkIGJ5IHJlZmVyZW5jZSB0byB0cmFjayBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nLiBUaGUgdmFyaWFibGUgYGZhdGFsYCBpcyB1bmNvbmRpdGlvbmFsbHkgaW5pdGlhbGl6ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBgdGhyb3R0bGVfaXNvbGF0ZWRgIGJlZm9yZSBhbnkgcmVhZHMgb2NjdXIuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBsZWF2ZSBhbnkgZmllbGRzIHVuaW5pdGlhbGl6ZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbG9naWMgZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgZGVhZGxvY2tzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AuIEl0IGludHJvZHVjZXMgYHRocm90dGxlX2lzb2xhdGVkKClgIHRvIHRocm90dGxlIHJlY2xhaW1lcnMgd2hlbiB0b28gbWFueSBmb2xpb3MgYXJlIGlzb2xhdGVkLCBhbmQgYXBwbGllcyB0aGlzIGxvZ2ljIHRvIGJvdGggdGhlIGxlZ2FjeSBMUlUgKGBzaHJpbmtfaW5hY3RpdmVfbGlzdGApIGFuZCB0aGUgTXVsdGktR2VuIExSVSAoYGV2aWN0X2ZvbGlvc2ApLiBJdCBhbHNvIGFkZHMgYWNjb3VudGluZyBmb3IgaXNvbGF0ZWQgZm9saW9zIGluIE1HTFJVLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbWVtb3J5IHByZXNzdXJlIGFuZCBjb25jdXJyZW50IHBhZ2UgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTE6NDAuMjQwMTc0MjQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTIzODg0MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1NjMyZDhlYzIzOWRmYWJiZGNmZmZmZDU1ODQ5ZGIwMzUyMjk5YTU4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDE3IDA3OjUxOjM5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCBjMTQwNGE1OTUyM2Q2Li44ODZhNTNmNTYzYWI3IDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtMTgxOSw3ICsxODE5LDcgQEAgYm9vbCBmb2xpb19pc29sYXRlX2xydShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiAgKiB0aGUgTFJVIGxpc3Qgd2lsbCBnbyBzbWFsbCBhbmQgYmUgc2Nhbm5lZCBmYXN0ZXIgdGhhbiBuZWNlc3NhcnksIGxlYWRpbmcgdG9cXG4gICogdW5uZWNlc3Nhcnkgc3dhcHBpbmcsIHRocmFzaGluZyBhbmQgT09NLlxcbiAgKi9cXG4tc3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgaW50IGZpbGUsXFxuK3N0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZmlsZSxcXG4gXFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBpbmFjdGl2ZSwgaXNvbGF0ZWQ7XFxuQEAgLTE4NTYsNiArMTg1NiwzNyBAQCBzdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSxcXG4gXFx0cmV0dXJuIHRvb19tYW55O1xcbiB9XFxuIFxcbisvKlxcbisgKiBUaHJvdHRsZSByZWNsYWltIGlmIHRvbyBtYW55IGlzb2xhdGVkIGZvbGlvcyBhcmUgcGlsaW5nIHVwLiBJZiB0aGlzIG1ha2VzXFxuKyAqIG5vIHByb2dyZXNzLCB0aGUgY2FsbGVyIGlzIHByb2JhYmx5IGxvb3Bpbmcgb24gdW5ldmljdGFibGUgZm9saW9zLCBzbyBnaXZlXFxuKyAqIHVwLiBSZXR1cm5zIGZhbHNlIHRvIHRlbGwgdGhlIGNhbGxlciB0byBzdG9wIHJlY2xhaW1pbmcsIGFuZCBzZXRzIEBmYXRhbFxcbisgKiBpZiB0aGUgdGFzayByZWNlaXZlZCBhIGZhdGFsIHNpZ25hbCB3aGlsZSB3YWl0aW5nLCBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuXFxuKyAqIGJhaWwgb3V0IGZhc3Rlci5cXG4rICovXFxuK3N0YXRpYyBib29sIHRocm90dGxlX2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZmlsZSxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGJvb2wgKmZhdGFsKVxcbit7XFxuK1xcdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xcbitcXG4rXFx0KmZhdGFsID0gZmFsc2U7XFxuK1xcdHdoaWxlICh1bmxpa2VseSh0b29fbWFueV9pc29sYXRlZChwZ2RhdCwgZmlsZSwgc2MpKSkge1xcbitcXHRcXHRpZiAoc3RhbGxlZClcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0XFx0Lyogd2FpdCBhIGJpdCBmb3IgdGhlIHJlY2xhaW1lci4gKi9cXG4rXFx0XFx0c3RhbGxlZCA9IHRydWU7XFxuK1xcdFxcdHJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7XFxuK1xcbitcXHRcXHQvKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIFJldHVybiBub3cuICovXFxuK1xcdFxcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbitcXHRcXHRcXHQqZmF0YWwgPSB0cnVlO1xcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIC8qXFxuICAqIG1vdmVfZm9saW9zX3RvX2xydSgpIG1vdmVzIGZvbGlvcyBmcm9tIHByaXZhdGUgQGxpc3QgdG8gYXBwcm9wcmlhdGUgTFJVIGxpc3QuXFxuICAqXFxuQEAgLTE5OTIsMTkgKzIwMjMsMTQgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbiBcXHRib29sIGZpbGUgPSBpc19maWxlX2xydShscnUpO1xcbiBcXHRlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07XFxuIFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcXG4tXFx0Ym9vbCBzdGFsbGVkID0gZmFsc2U7XFxuLVxcbi1cXHR3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHtcXG4tXFx0XFx0aWYgKHN0YWxsZWQpXFxuLVxcdFxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0XFx0Lyogd2FpdCBhIGJpdCBmb3IgdGhlIHJlY2xhaW1lci4gKi9cXG4tXFx0XFx0c3RhbGxlZCA9IHRydWU7XFxuLVxcdFxcdHJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7XFxuK1xcdGJvb2wgZmF0YWw7XFxuIFxcbitcXHRpZiAoIXRocm90dGxlX2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYywgXFx1MDAyNmZhdGFsKSkge1xcbiBcXHRcXHQvKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIFJldHVybiBub3cuICovXFxuLVxcdFxcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSlcXG4rXFx0XFx0aWYgKGZhdGFsKVxcbiBcXHRcXHRcXHRyZXR1cm4gU1dBUF9DTFVTVEVSX01BWDtcXG4rXFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbiBcXHRscnVfYWRkX2RyYWluKCk7XFxuQEAgLTQ4ODMsNiArNDkwOSwyNSBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0Ym9vbCBza2lwX3JldHJ5ID0gZmFsc2U7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XFxuK1xcdGJvb2wgZmF0YWw7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgdHlwZSB0byBpc29sYXRlIGlzIHVua25vd24gdW50aWwgaXNvbGF0aW9uLCBzbyBwcmVkaWN0IGl0IGZvclxcbitcXHQgKiB0aGUgdGhyb3R0bGluZyBjaGVjay4gaXNvbGF0ZV9mb2xpb3MoKSBtYXkgc3RpbGwgZmFsbCBiYWNrIHRvIHRoZVxcbitcXHQgKiBvdGhlciB0eXBlLCB3aGljaCBpcyBmaW5lIGZvciB0aGlzIGhldXJpc3RpYy5cXG4rXFx0ICovXFxuK1xcdHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7XFxuK1xcdGlmICghdGhyb3R0bGVfaXNvbGF0ZWQocGdkYXQsIHR5cGUsIHNjLCBcXHUwMDI2ZmF0YWwpKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gTGlrZSB0aGUgbGVnYWN5XFxuK1xcdFxcdCAqIHBhdGgsIHByZXRlbmQgc29tZSBwYWdlcyB3ZXJlIHJlY2xhaW1lZCBzbyByZWNsYWltIHVud2luZHNcXG4rXFx0XFx0ICogcXVpY2tseSBpbnN0ZWFkIG9mIGxvb3BpbmcgYmFjayBpbnRvIHRoZSB0aHJvdHRsZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChmYXRhbClcXG4rXFx0XFx0XFx0c2MtXFx1MDAzZW5yX3JlY2xhaW1lZCArPSBTV0FQX0NMVVNURVJfTUFYO1xcbitcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4gXFxuIFxcdGxydXZlY19sb2NrX2lycShscnV2ZWMpO1xcbiBcXG5AQCAtNDg5Miw2ICs0OTM3LDkgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdHNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLFxcbiBcXHRcXHRcXHRcXHQgXFx1MDAyNmxpc3QsIFxcdTAwMjZpc29sYXRlZCwgXFx1MDAyNnR5cGUsIFxcdTAwMjZ0eXBlX3NjYW5uZWQpO1xcbiBcXHRucl9pc29sYXRlZCA9IGlzb2xhdGVkO1xcbitcXHRpZiAobnJfaXNvbGF0ZWQpXFxuK1xcdFxcdF9fbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIHR5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIG5yX2lzb2xhdGVkKTtcXG4gXFxuIFxcdC8qIFNjYW5uaW5nIG1heSBoYXZlIGVtcHRpZWQgdGhlIG9sZGVzdCBnZW4sIGZsdXNoIGl0ICovXFxuIFxcdGlmIChzY2FubmVkKVxcbkBAIC00OTU0LDYgKzUwMDIsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdGdvdG8gcmV0cnk7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChucl9pc29sYXRlZClcXG4rXFx0XFx0bW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIHR5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAtbnJfaXNvbGF0ZWQpO1xcbitcXG4gXFx0aWYgKG5yX2lzb2xhdGVkIFxcdTAwM2UgdG90YWxfcmVjbGFpbWVkKVxcbiBcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiArIHR5cGUsXFxuIFxcdFxcdFxcdFxcdCBucl9pc29sYXRlZCAtIHRvdGFsX3JlY2xhaW1lZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjUxOjQwLjczMzU4NDk2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTIxMjc1MzE2NjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnlfdG9fZnJlZV9wYWdlc1wiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiLFxuICAgIFwibm9kZV9yZWNsYWltXCIsXG4gICAgXCJ3YWtldXBfa3N3YXBkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IHJlY2xhaW0gbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYC4gSXQgaW50cm9kdWNlcyBgdGhyb3R0bGVfaXNvbGF0ZWQoKWAgdG8gdGhyb3R0bGUgcmVjbGFpbWVycyB3aGVuIHRvbyBtYW55IGZvbGlvcyBhcmUgaXNvbGF0ZWQsIGFuZCBhcHBsaWVzIHRoaXMgbG9naWMgdG8gYm90aCB0aGUgbGVnYWN5IExSVSAoYHNocmlua19pbmFjdGl2ZV9saXN0YCkgYW5kIHRoZSBNdWx0aS1HZW4gTFJVIChgZXZpY3RfZm9saW9zYCkuIEl0IGFsc28gYWRkcyBhY2NvdW50aW5nIGZvciBpc29sYXRlZCBmb2xpb3MgaW4gTUdMUlUuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtZW1vcnkgcHJlc3N1cmUgYW5kIGNvbmN1cnJlbnQgcGFnZSByZWNsYWltLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NjMyZDhlYzIzOWRmYWJiZGNmZmZmZDU1ODQ5ZGIwMzUyMjk5YTU4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDc6NTE6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBjMTQwNGE1OTUyM2Q2Li44ODZhNTNmNTYzYWI3IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTgxOSw3ICsxODE5LDcgQEAgYm9vbCBmb2xpb19pc29sYXRlX2xydShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuICAqIHRoZSBMUlUgbGlzdCB3aWxsIGdvIHNtYWxsIGFuZCBiZSBzY2FubmVkIGZhc3RlciB0aGFuIG5lY2Vzc2FyeSwgbGVhZGluZyB0b1xuICAqIHVubmVjZXNzYXJ5IHN3YXBwaW5nLCB0aHJhc2hpbmcgYW5kIE9PTS5cbiAgKi9cbi1zdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSxcbitzdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZpbGUsXG4gXHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgaW5hY3RpdmUsIGlzb2xhdGVkO1xuQEAgLTE4NTYsNiArMTg1NiwzNyBAQCBzdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSxcbiBcdHJldHVybiB0b29fbWFueTtcbiB9XG4gXG4rLypcbisgKiBUaHJvdHRsZSByZWNsYWltIGlmIHRvbyBtYW55IGlzb2xhdGVkIGZvbGlvcyBhcmUgcGlsaW5nIHVwLiBJZiB0aGlzIG1ha2VzXG4rICogbm8gcHJvZ3Jlc3MsIHRoZSBjYWxsZXIgaXMgcHJvYmFibHkgbG9vcGluZyBvbiB1bmV2aWN0YWJsZSBmb2xpb3MsIHNvIGdpdmVcbisgKiB1cC4gUmV0dXJucyBmYWxzZSB0byB0ZWxsIHRoZSBjYWxsZXIgdG8gc3RvcCByZWNsYWltaW5nLCBhbmQgc2V0cyBAZmF0YWxcbisgKiBpZiB0aGUgdGFzayByZWNlaXZlZCBhIGZhdGFsIHNpZ25hbCB3aGlsZSB3YWl0aW5nLCBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuXG4rICogYmFpbCBvdXQgZmFzdGVyLlxuKyAqL1xuK3N0YXRpYyBib29sIHRocm90dGxlX2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZmlsZSxcbitcdFx0XHQgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgYm9vbCAqZmF0YWwpXG4re1xuK1x0Ym9vbCBzdGFsbGVkID0gZmFsc2U7XG4rXG4rXHQqZmF0YWwgPSBmYWxzZTtcbitcdHdoaWxlICh1bmxpa2VseSh0b29fbWFueV9pc29sYXRlZChwZ2RhdCwgZmlsZSwgc2MpKSkge1xuK1x0XHRpZiAoc3RhbGxlZClcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRcdC8qIHdhaXQgYSBiaXQgZm9yIHRoZSByZWNsYWltZXIuICovXG4rXHRcdHN0YWxsZWQgPSB0cnVlO1xuK1x0XHRyZWNsYWltX3Rocm90dGxlKHBnZGF0LCBWTVNDQU5fVEhST1RUTEVfSVNPTEFURUQpO1xuK1xuK1x0XHQvKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIFJldHVybiBub3cuICovXG4rXHRcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuK1x0XHRcdCpmYXRhbCA9IHRydWU7XG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gLypcbiAgKiBtb3ZlX2ZvbGlvc190b19scnUoKSBtb3ZlcyBmb2xpb3MgZnJvbSBwcml2YXRlIEBsaXN0IHRvIGFwcHJvcHJpYXRlIExSVSBsaXN0LlxuICAqXG5AQCAtMTk5MiwxOSArMjAyMywxNCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRib29sIGZpbGUgPSBpc19maWxlX2xydShscnUpO1xuIFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuLVx0Ym9vbCBzdGFsbGVkID0gZmFsc2U7XG4tXG4tXHR3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHtcbi1cdFx0aWYgKHN0YWxsZWQpXG4tXHRcdFx0cmV0dXJuIDA7XG4tXG4tXHRcdC8qIHdhaXQgYSBiaXQgZm9yIHRoZSByZWNsYWltZXIuICovXG4tXHRcdHN0YWxsZWQgPSB0cnVlO1xuLVx0XHRyZWNsYWltX3Rocm90dGxlKHBnZGF0LCBWTVNDQU5fVEhST1RUTEVfSVNPTEFURUQpO1xuK1x0Ym9vbCBmYXRhbDtcbiBcbitcdGlmICghdGhyb3R0bGVfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjLCBcdTAwMjZmYXRhbCkpIHtcbiBcdFx0LyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqL1xuLVx0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4rXHRcdGlmIChmYXRhbClcbiBcdFx0XHRyZXR1cm4gU1dBUF9DTFVTVEVSX01BWDtcbitcbitcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4gXHRscnVfYWRkX2RyYWluKCk7XG5AQCAtNDg4Myw2ICs0OTA5LDI1IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0Ym9vbCBza2lwX3JldHJ5ID0gZmFsc2U7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbitcdGJvb2wgZmF0YWw7XG4rXG4rXHQvKlxuK1x0ICogVGhlIHR5cGUgdG8gaXNvbGF0ZSBpcyB1bmtub3duIHVudGlsIGlzb2xhdGlvbiwgc28gcHJlZGljdCBpdCBmb3JcbitcdCAqIHRoZSB0aHJvdHRsaW5nIGNoZWNrLiBpc29sYXRlX2ZvbGlvcygpIG1heSBzdGlsbCBmYWxsIGJhY2sgdG8gdGhlXG4rXHQgKiBvdGhlciB0eXBlLCB3aGljaCBpcyBmaW5lIGZvciB0aGlzIGhldXJpc3RpYy5cbitcdCAqL1xuK1x0dHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcbitcdGlmICghdGhyb3R0bGVfaXNvbGF0ZWQocGdkYXQsIHR5cGUsIHNjLCBcdTAwMjZmYXRhbCkpIHtcbitcdFx0LypcbitcdFx0ICogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBMaWtlIHRoZSBsZWdhY3lcbitcdFx0ICogcGF0aCwgcHJldGVuZCBzb21lIHBhZ2VzIHdlcmUgcmVjbGFpbWVkIHNvIHJlY2xhaW0gdW53aW5kc1xuK1x0XHQgKiBxdWlja2x5IGluc3RlYWQgb2YgbG9vcGluZyBiYWNrIGludG8gdGhlIHRocm90dGxlLlxuK1x0XHQgKi9cbitcdFx0aWYgKGZhdGFsKVxuK1x0XHRcdHNjLVx1MDAzZW5yX3JlY2xhaW1lZCArPSBTV0FQX0NMVVNURVJfTUFYO1xuK1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbiBcbiBcdGxydXZlY19sb2NrX2lycShscnV2ZWMpO1xuIFxuQEAgLTQ4OTIsNiArNDkzNyw5IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0c2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsXG4gXHRcdFx0XHQgXHUwMDI2bGlzdCwgXHUwMDI2aXNvbGF0ZWQsIFx1MDAyNnR5cGUsIFx1MDAyNnR5cGVfc2Nhbm5lZCk7XG4gXHRucl9pc29sYXRlZCA9IGlzb2xhdGVkO1xuK1x0aWYgKG5yX2lzb2xhdGVkKVxuK1x0XHRfX21vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyB0eXBlLFxuK1x0XHRcdFx0ICAgICAgbnJfaXNvbGF0ZWQpO1xuIFxuIFx0LyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi9cbiBcdGlmIChzY2FubmVkKVxuQEAgLTQ5NTQsNiArNTAwMiwxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0Z290byByZXRyeTtcbiBcdH1cbiBcbitcdGlmIChucl9pc29sYXRlZClcbitcdFx0bW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIHR5cGUsXG4rXHRcdFx0XHQgICAgLW5yX2lzb2xhdGVkKTtcbitcbiBcdGlmIChucl9pc29sYXRlZCBcdTAwM2UgdG90YWxfcmVjbGFpbWVkKVxuIFx0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiArIHR5cGUsXG4gXHRcdFx0XHQgbnJfaXNvbGF0ZWQgLSB0b3RhbF9yZWNsYWltZWQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTE6NDAuNzMzNTg3MzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTM1MzA1MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyBkZWVwIHdpdGhpbiB0aGUgYG1tL3Ztc2Nhbi5jYCBmaWxlIOKAkyB0aGF0IHNjcmVhbXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2VzLiBTcGVjaWZpY2FsbHksIGl0J3MgbWVzc2luZyB3aXRoIHBhZ2UgcmVjbGFpbSwgd2hpY2ggbWVhbnMgd2UncmUgcHJvYmFibHkgZGVhbGluZyB3aXRoIHRoZSBMZWFzdCBSZWNlbnRseSBVc2VkIChMUlUpIGxpc3RzLCBib3RoIHRoZSB0cmFkaXRpb25hbCBsZWdhY3kgTFJVIGFuZCBNR0xSVS4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgdGhyb3R0bGVfaXNvbGF0ZWQoKWAgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllIGFzIGEgcG90ZW50aWFsIHBvaW50IG9mIGNvbnRlbnRpb24gb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVjazsgaXQncyB1c2VkIHdpdGhpbiBgc2hyaW5rX2luYWN0aXZlX2xpc3QoKWAgKGxlZ2FjeSBMUlUpIGFuZCBgZXZpY3RfZm9saW9zKClgIChNR0xSVSkuIEludGVyZXN0aW5nLiBUaGUgYWRkaXRpb25zIG9mIGBfX21vZF9ub2RlX3BhZ2Vfc3RhdGVgIGNhbGxzIGZvciBgTlJfSVNPTEFURURfQU5PTmAgYW5kIHBvdGVudGlhbGx5IG90aGVyIHR5cGVzIGR1cmluZyBldmljdGlvbiB3aXRoaW4gYGV2aWN0X2ZvbGlvcygpYCBzaG93IHRoYXQgdGhlIGlzb2xhdGlvbiBjb3VudGVyIGlzIGFkanVzdGVkLlxuXG5Ob3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIFwiV2hlcmUgYXJlIHRoZSBlbnRyeSBwb2ludHM/XCIuICBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgZXZpY3RfZm9saW9zYCBhcmUgYm90aCBzdGF0aWMsIG1lYW5pbmcgdGhleSdyZSBub3QgZGlyZWN0bHkgZXhwb3NlZC4gIGB0aHJvdHRsZV9pc29sYXRlZGAgaXMgYWxzbyBzdGF0aWMuIFNvLCBJIG5lZWQgdG8gbG9vayB1cHN0cmVhbS4gV2hhdCBmdW5jdGlvbnMgY2FsbCB0aGVzZSBvciBhcmUgcmVsYXRlZCB0byBwYWdlIHJlY2xhaW0gdGhhdCAqYXJlbid0KiBzdGF0aWM/IExldCdzIHNlZS4uLiBgc2hyaW5rX25vZGVgPyBgc2hyaW5rX2xydXZlY2A/IGB0cnlfdG9fZnJlZV9wYWdlc2A/IElzIGBrc3dhcGRgIGludm9sdmVkPyBJJ20gZ29pbmcgdG8gaGVhZCB0byBgbW0vdm1zY2FuLmNgIGFuZCBzdGFydCB0cmFjaW5nIGJhY2sgdG8gc2VlIHdoZXJlIHRoaXMgYWxsIGZpdHMgaW4uICBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBsYXJnZXIgcGljdHVyZSBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1MTo0Ni42Njg4OTQ5NDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg3MDY1NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXZpY3RfZm9saW9zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ4NjI9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ4OTUtXFxubW0vdm1zY2FuLmM6NDg5NjpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy00ODk3LVxcdFxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwOTk9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxMjItXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTEyMzpcXHRcXHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNTEyNC1cXHRcXHRpZiAoIWRlbHRhKVxcbi0tXFxubW0vdm1zY2FuLmM9NTcyNj1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU3NDYtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVxcdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xcbm1tL3Ztc2Nhbi5jOjU3NDc6XFx0XFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxcbm1tL3Ztc2Nhbi5jLTU3NDgtXFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjUxOjQ2LjcyNzYwNjMzMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MDU0MTA4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgRXZpY3Rpb24gUGF0aCBpbiB0aGUgTFJVIFZlY3RvcioqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYGV2aWN0X2ZvbGlvc2AgaXMgYmVpbmcgY2FsbGVkIGZyb20gYm90aCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgcnVuX2V2aWN0aW9uYC4gVGhhdCdzIGEgcHJldHR5IGNsZWFyIGluZGljYXRpb24gdGhhdCBpdCdzIHRoZSBjb3JlIGZ1bmN0aW9uIGZvciBhY3R1YWxseSByZW1vdmluZyBmb2xpb3MsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBuYW1lcy4gTm93LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGggZnVydGhlciB1cHN0cmVhbS4gTXkgZm9jdXMgaXMgdW5kZXJzdGFuZGluZyB0aGUgdHJpZ2dlcnMgZm9yIGZvbGlvIGV2aWN0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgcnVuX2V2aWN0aW9uYCBhcmUgYmVpbmcgKmNhbGxlZCogZnJvbS4gVGhhdCdzIHRoZSBjcnVjaWFsIGxpbmsg4oCTIHRob3NlIGFyZSB0aGUgcG9pbnRzIGluIHRoZSBzeXN0ZW0gdGhhdCBhcmUgaW5pdGlhdGluZyB0aGUgZXZpY3Rpb24gcHJvY2VzcyBiYXNlZCBvbiB3aGF0ZXZlciBjb25kaXRpb25zIGFyZSBpbiBwbGF5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aG9zZSBjb25kaXRpb25zIHRvIGdyYXNwIHRoZSBvdmVyYWxsIGV2aWN0aW9uIHBvbGljeS4gQXJlIHdlIGRlYWxpbmcgd2l0aCBtZW1vcnkgcHJlc3N1cmUsIGFnaW5nIG9mIGVudHJpZXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIGZpbmQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjkyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTE6NTEuNTMzMDIwMDc2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1OTAyODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19zaHJpbmtfbHJ1dmVjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTUwNjQ9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwOTgtICovXFxubW0vdm1zY2FuLmM6NTA5OTpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUxMDAte1xcbi0tXFxubW0vdm1zY2FuLmM9NTE0ND1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxNjMtXFxubW0vdm1zY2FuLmM6NTE2NDpcXHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTUxNjUtXFxuLS1cXG5tbS92bXNjYW4uYz01MjU1PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI2Ny1cXG5tbS92bXNjYW4uYzo1MjY4OlxcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYy01MjY5LVxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTE6NTEuNTg4OTM1MzM1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5NjQ5MDU0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYC4gSXQncyBjbGVhciB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHNocmlua2luZyBzb21ldGhpbmcgcmVsYXRlZCB0byBhbiBMUlUgdmVjdG9yLCBhbmQgaXQncyBjYWxsaW5nIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgaW4gdGhlIHByb2Nlc3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldobydzIHRoZSBjYWxsZXIgaGVyZT8gV2hhdCB1cHN0cmVhbSBmdW5jdGlvbiBvciBwcm9jZXNzIGlzIHRyaWdnZXJpbmcgdGhpcyB3aG9sZSBzaHJpbmtpbmcgb3BlcmF0aW9uP1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3c7IGtub3dpbmcgd2hhdCBpbml0aWF0ZXMgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyAqd2h5KiB0aGUgTFJVIHZlY3RvciBpcyBiZWluZyBzaHJ1bmssIHVuZGVyIHdoYXQgY29uZGl0aW9ucywgYW5kIHdoYXQgdGhlIG92ZXJhbGwgc3lzdGVtIGltcGxpY2F0aW9ucyBhcmUuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCB0byBwaW5wb2ludC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayBpcyBwYXJhbW91bnQgZm9yIGFueSBlZmZlY3RpdmUgc3lzdGVtIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTMzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTE6NTQuNTg1NDI5MzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyMjM3NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fc2hyaW5rX2xydXZlY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz01MTg1PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI1NC1cXG5tbS92bXNjYW4uYzo1MjU1OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUyNTYte1xcbi0tXFxubW0vdm1zY2FuLmM9NTk5OT1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjAwMy1cXG5tbS92bXNjYW4uYzo2MDA0OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYwMDUte1xcbi0tXFxubW0vdm1zY2FuLmM9NjAxNj1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MDI3LVxcdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXFx1MDAyNlxcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcXG5tbS92bXNjYW4uYzo2MDI4OlxcdFxcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcXG5tbS92bXNjYW4uYy02MDI5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1MTo1NC42ODc2NzA0OTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzYxNDU5MTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBzaHJpbmtfbHJ1dmVjYCBGdW5jdGlvbidzIENhbGxlcnMqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgc2hyaW5rX2xydXZlY2AgaXMgY2FsbGluZyBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYC4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIGxpa2VseSBleHBlY3RlZCBnaXZlbiB0aGUgbmFtaW5nLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24sIHRob3VnaCwgaXMgd2hhdCAqdHJpZ2dlcnMqIHRoaXMgY2FsbCB0byBgc2hyaW5rX2xydXZlY2AgaW4gdGhlIGZpcnN0IHBsYWNlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LiBJcyBpdCBpbnZva2VkIHBlcmlvZGljYWxseSBiYXNlZCBvbiBhIHRpbWVyLCB0cmlnZ2VyZWQgYnkgYSBzcGVjaWZpYyBldmVudCB3aXRoaW4gdGhlIExSVSBjYWNoZSdzIG9wZXJhdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9mIHRoZSBMUlUgY2FjaGUsIEkgaGF2ZSB0byB0cmFjZSBiYWNrIHRoZSBjYWxsIHN0YWNrLiBVbmRlcnN0YW5kaW5nICp3aG8qIG9yICp3aGF0KiBpcyBjYWxsaW5nIGBzaHJpbmtfbHJ1dmVjYCBpcyBjcnVjaWFsIHRvIGV2YWx1YXRpbmcgdGhlIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSBvZiB0aGUgTFJVIGltcGxlbWVudGF0aW9uLiBJcyB0aGUgc2hyaW5raW5nIGFnZ3Jlc3NpdmUsIG9yIGNvbnNlcnZhdGl2ZT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNhbmRpZGF0ZXMgZm9yIG9wdGltaXphdGlvbiB3aGVuIHJldmlld2luZyB3aGVyZSB0aGlzIGZ1bmN0aW9uIHNpdHMgaW4gdGhlIGNvZGU/IExldCdzIHRyYWNlIHRoaXMgYW5kIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTM5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTE6NTguNDQ5MTM0MDIxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTE0MDkzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfbHJ1dmVjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTUwNjQ9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwOTgtICovXFxubW0vdm1zY2FuLmM6NTA5OTpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUxMDAte1xcbi0tXFxubW0vdm1zY2FuLmM9NTE0ND1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxNjMtXFxubW0vdm1zY2FuLmM6NTE2NDpcXHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTUxNjUtXFxuLS1cXG5tbS92bXNjYW4uYz01MTg1PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI1NC1cXG5tbS92bXNjYW4uYzo1MjU1OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUyNTYte1xcbi0tXFxubW0vdm1zY2FuLmMtNTI2Ny1cXG5tbS92bXNjYW4uYzo1MjY4OlxcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYy01MjY5LVxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU5OTk9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwMDMtXFxubW0vdm1zY2FuLmM6NjAwNDpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy02MDA1LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwMDk9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwMTUtXFxubW0vdm1zY2FuLmM6NjAxNjpzdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNjAxNy17XFxuLS1cXG5tbS92bXNjYW4uYy02MDI3LVxcdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXFx1MDAyNlxcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcXG5tbS92bXNjYW4uYzo2MDI4OlxcdFxcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcXG5tbS92bXNjYW4uYy02MDI5LVxcbi0tXFxubW0vdm1zY2FuLmM9NjIwNz1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MjY2LVxcbm1tL3Ztc2Nhbi5jOjYyNjc6XFx0XFx0c2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcXG5tbS92bXNjYW4uYy02MjY4LVxcbi0tXFxubW0vdm1zY2FuLmM9Njg2Mj11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtNjg5Mi1cXHQgKi9cXG5tbS92bXNjYW4uYzo2ODkzOlxcdHNocmlua19scnV2ZWMobHJ1dmVjLCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTY4OTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjUxOjU4LjUyMDI4NjU5OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODAyMjM0OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUgd2hhdCB3ZSBoYXZlIGhlcmUuXG5cbioqRGVjb25zdHJ1Y3RpbmcgTWVtb3J5IENncm91cCBTaHJpbmthZ2UqKlxuXG5SaWdodCwgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgIGlzbid0IHN0YXRpYywgaW50ZXJlc3RpbmcuIE9rYXksIHNvIHRoYXQgbWVhbnMgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBhcmUgY2FsbGluZyBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgY2hhaW4gaGVyZSwgd2hhdCdzIHRyaWdnZXJpbmcgdGhhdCBmdW5jdGlvbi4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGBzaHJpbmtfbHJ1dmVjYCBpcyBjYWxsZWQgd2l0aGluIGl0LiBTbywgd2hvIGVsc2UgY2FsbHMgYHNocmlua19scnV2ZWNgPyBBaCwgeWVzLCBgc2hyaW5rX25vZGVfbWVtY2dzYCBpcyBvbmUuIE9rYXksIGFuZCB3aGF0IGlzIHRyaWdnZXJpbmcgKnRoYXQqIGZ1bmN0aW9uLCBgc2hyaW5rX25vZGVfbWVtY2dzYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gSSBuZWVkIHRvIGtlZXAgdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MzIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1MjowMy4zMjI1MjQ4MDRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NjA1NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19ub2RlX21lbWNnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz02MTU1PXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfY29udGludWVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbi0tXFxubW0vdm1zY2FuLmMtNjIwNi1cXG5tbS92bXNjYW4uYzo2MjA3OnN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy02MjA4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYyODY9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MzEwLVxcbm1tL3Ztc2Nhbi5jOjYzMTE6XFx0c2hyaW5rX25vZGVfbWVtY2dzKHBnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNjMxMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTI6MDMuMzkwMTM0MjgyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MjU5OTA1MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGdpdmVuIG15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWE6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIE1lbW9yeSBTaHJpbmthZ2UgUHJvY2VzcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBzaHJpbmtfbm9kZWAuIFRoaXMgaXMgY2xlYXJseSB0aGUgY29yZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IsIHdlbGwsIHNocmlua2luZyBhIG5vZGUncyBtZW1vcnkgZm9vdHByaW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHdoYXQgc3BlY2lmaWNhbGx5IHRyaWdnZXJzIHRoaXMgc2hyaW5rYWdlPyBNeSBhbmFseXNpcyBzaG93cyB0aGF0IGBzaHJpbmtfbm9kZWAgaXMgY2FsbGluZyBgc2hyaW5rX25vZGVfbWVtY2dzYC4gVGhhdCBtYWtlcyBzZW5zZTsgYG1lbWNnc2AgKG1lbW9yeSBjZ3JvdXBzKSBhcmUgYSBtYWpvciBwbGF5ZXIgd2hlbiBpdCBjb21lcyB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVzb3VyY2UgbGltaXRzLiBTbywgYHNocmlua19ub2RlYCBpcyB1c2luZyBgc2hyaW5rX25vZGVfbWVtY2dzYCB0byBpbnRlcmFjdCB3aXRoIGFuZCBtYW5hZ2UgbWVtb3J5IHdpdGhpbiB0aGUgY2dyb3VwIGhpZXJhcmNoeS4gVGhhdCdzIGEgcmVhc29uYWJsZSBtb2R1bGFyIGRlc2lnbi4gQnV0IEkgbmVlZCB0byBnbyBkZWVwZXIuIFdoYXQgYXJlIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyB3aGljaCBsZWFkIHRvIHRoZSBpbnZvY2F0aW9uIG9mIGBzaHJpbmtfbm9kZWA/IElkZW50aWZ5aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0cmlnZ2VycyBvciBldmVudHMgaW4gdGhlIHN5c3RlbS4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIGluc2lnaHRzIGxpZSwgdW5kZXJzdGFuZGluZyB0aGUgY2lyY3Vtc3RhbmNlcyB3aGVuIHRoZSBzeXN0ZW0gbmVlZHMgdG8gc2hlZCBtZW1vcnkgZnJvbSBhIG5vZGUuIElzIGl0IGEgcGVyaW9kaWMgcHJvY2Vzcz8gQSByZXNwb25zZSB0byBtZW1vcnkgcHJlc3N1cmU/IE9yIHRyaWdnZXJlZCBieSBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gRmluZGluZyB0aGUgY2FsbGVycyBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxOTMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1MjowNy4zMTYxMjgxODJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMzI5MDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19ub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTE5NzI9c3RhdGljIHZvaWQgaGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4sXFxuLS1cXG5tbS92bXNjYW4uYy0yMDEwLS8qXFxubW0vdm1zY2FuLmM6MjAxMTogKiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpIGlzIGEgaGVscGVyIGZvciBzaHJpbmtfbm9kZSgpLiAgSXQgcmV0dXJucyB0aGUgbnVtYmVyXFxubW0vdm1zY2FuLmMtMjAxMi0gKiBvZiByZWNsYWltZWQgcGFnZXNcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUyNTU9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01Mjc1LVxcbm1tL3Ztc2Nhbi5jOjUyNzY6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01Mjc3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwMDQ9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MDA4LVxcbm1tL3Ztc2Nhbi5jOjYwMDk6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy02MDEwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYxNTU9c3RhdGljIGlubGluZSBib29sIHNob3VsZF9jb250aW51ZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS92bXNjYW4uYy02MjA2LVxcbm1tL3Ztc2Nhbi5jOjYyMDc6c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYyMDgte1xcbi0tXFxubW0vdm1zY2FuLmMtNjI4NS1cXG5tbS92bXNjYW4uYzo2Mjg2OnN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYyODcte1xcbi0tXFxubW0vdm1zY2FuLmMtNjI5My1cXHRcXHRtZW1zZXQoXFx1MDAyNnNjLVxcdTAwM2VuciwgMCwgc2l6ZW9mKHNjLVxcdTAwM2VucikpO1xcbm1tL3Ztc2Nhbi5jOjYyOTQ6XFx0XFx0bHJ1X2dlbl9zaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYyOTUtXFxuLS1cXG5tbS92bXNjYW4uYy02MzEwLVxcbm1tL3Ztc2Nhbi5jOjYzMTE6XFx0c2hyaW5rX25vZGVfbWVtY2dzKHBnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNjMxMi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY0NzE9c3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjU0OS1cXHRcXHRsYXN0X3BnZGF0ID0gem9uZS1cXHUwMDNlem9uZV9wZ2RhdDtcXG5tbS92bXNjYW4uYzo2NTUwOlxcdFxcdHNocmlua19ub2RlKHpvbmUtXFx1MDAzZXpvbmVfcGdkYXQsIHNjKTtcXG5tbS92bXNjYW4uYy02NTUxLVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4MTY9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy02ODYxLS8qIE9ubHkgdXNlZCBieSBzb2Z0IGxpbWl0IHJlY2xhaW0uIERvIG5vdCByZXVzZSBmb3IgYW55dGhpbmcgZWxzZS4gKi9cXG5tbS92bXNjYW4uYzo2ODYyOnVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vdm1zY2FuLmMtNjg2My1cXHRcXHRcXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXFxuLS1cXG5tbS92bXNjYW4uYy02ODg4LVxcdCAqIGhlcmUgaXMgbm90IGEgZ29vZCBpZGVhLCBzaW5jZSBpdCBsaW1pdHMgdGhlIHBhZ2VzIHdlIGNhbiBzY2FuLlxcbm1tL3Ztc2Nhbi5jOjY4ODk6XFx0ICogaWYgd2UgZG9uJ3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0XFxubW0vdm1zY2FuLmMtNjg5MC1cXHQgKiB3aWxsIHBpY2sgdXAgcGFnZXMgZnJvbSBvdGhlciBtZW0gY2dyb3VwJ3MgYXMgd2VsbC4gV2UgaGFja1xcbi0tXFxubW0vdm1zY2FuLmM9NzAxMD1zdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MDM0LVxcdFxcdCAqIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LiBPbmNlIGl0J3NcXG5tbS92bXNjYW4uYzo3MDM1OlxcdFxcdCAqIHJlY2xhaW1lZCBhIGNvbXBhY3Rpb24gZ2FwLCBhbmQga3N3YXBkX3Nocmlua19ub2RlXFxubW0vdm1zY2FuLmMtNzAzNi1cXHRcXHQgKiBoYXMgZHJvcHBlZCBvcmRlciwgc2ltcGx5IGVuc3VyZSB0aGVyZSBhcmUgZW5vdWdoXFxuLS1cXG5tbS92bXNjYW4uYz03MDkyPXN0YXRpYyBib29sIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcxMzAtICovXFxubW0vdm1zY2FuLmM6NzEzMTpzdGF0aWMgYm9vbCBrc3dhcGRfc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03MTMyLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcxNDctXFx0ICovXFxubW0vdm1zY2FuLmM6NzE0ODpcXHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTcxNDktXFxuLS1cXG5tbS92bXNjYW4uYz03MjA0PXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MzEzLVxcbm1tL3Ztc2Nhbi5jOjczMTQ6XFx0XFx0LyogQ2FsbCBzb2Z0IGxpbWl0IHJlY2xhaW0gYmVmb3JlIGNhbGxpbmcgc2hyaW5rX25vZGUuICovXFxubW0vdm1zY2FuLmMtNzMxNS1cXHRcXHRzYy5ucl9zY2FubmVkID0gMDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTczMjUtXFx0XFx0ICovXFxubW0vdm1zY2FuLmM6NzMyNjpcXHRcXHRpZiAoa3N3YXBkX3Nocmlua19ub2RlKHBnZGF0LCBcXHUwMDI2c2MpKVxcbm1tL3Ztc2Nhbi5jLTczMjctXFx0XFx0XFx0cmFpc2VfcHJpb3JpdHkgPSBmYWxzZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc4ODA9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc5MDctXFx0XFx0ZG8ge1xcbm1tL3Ztc2Nhbi5jOjc5MDg6XFx0XFx0XFx0c2hyaW5rX25vZGUocGdkYXQsIHNjKTtcXG5tbS92bXNjYW4uYy03OTA5LVxcdFxcdH0gd2hpbGUgKHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgXFx1MDAzYyBucl9wYWdlcyBcXHUwMDI2XFx1MDAyNiAtLXNjLVxcdTAwM2Vwcmlvcml0eSBcXHUwMDNlPSAwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTI6MDcuMzg5NDYyNjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyOTYwNzUyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFJlY2xhaW0gQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBtZW1vcnkgcmVjbGFpbSBwcm9jZXNzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBzdGFydCB3aXRoIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkLiBJIHNlZSBgdHJ5X3RvX2ZyZWVfcGFnZXNgIOKAkyB0aGF0J3MgYSBub24tc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZywgaXQgc2VlbXMgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdHJpZ2dlcmluZyB0aGUgcmVjbGFpbS4gVGhlbiB0aGVyZSdzIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCwgYWxzbyBub24tc3RhdGljOyB0aGlzIHN1Z2dlc3RzIGl0IHBsYXlzIGEgcm9sZSBpbiBzaHJpbmtpbmcgbWVtb3J5IHdpdGhpbiBjZ3JvdXBzLCB3aGljaCB3aWxsIGJlIHZpdGFsIGZvciBtYW5hZ2luZyByZXNvdXJjZXMuXG5cbkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgY29yZSBtZWNoYW5pY3MuIGBiYWxhbmNlX3BnZGF0YCwgd2hpbGUgc3RhdGljLCBsb29rcyBsaWtlIHRoZSBjZW50cmFsIGxvb3Agd2l0aGluIGBrc3dhcGRgLCB3aGljaCBtYWtlcyBpdCBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgYWxzbyBub3RlIHRoYXQgYF9fbm9kZV9yZWNsYWltYCBpcyBzdGF0aWMgYnV0IGxpbmtlZCB0byBgbm9kZV9yZWNsYWltYCwgc28gdHJhY2luZyB0aG9zZSBjYWxscyB3aWxsIHByb3ZpZGUgdGhlIG92ZXJ2aWV3IG9mIG92ZXJhbGwgbm9kZSByZWNsYWltLlxuXG5UaGVyZWZvcmUsIG15IGltbWVkaWF0ZSBwbGFuIGlzIHRvIGZvY3VzIG15IGludmVzdGlnYXRpb24gb24gdGhlc2UgY3JpdGljYWwgcG9pbnRzOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBub2RlX3JlY2xhaW1gLCBhbmQgYGtzd2FwZGAuIEV4YW1pbmluZyB0aGVpciBpbnRlcmFjdGlvbnMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlY2xhaW0gc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTI6MTEuNzE5MDczNzQ4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTQ1MDEyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fZnJlZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz02NTYzPXN0YXRpYyB2b2lkIHNuYXBzaG90X3JlZmF1bHRzKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy02NTkzLSAqL1xcbm1tL3Ztc2Nhbi5jOjY1OTQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcXG5tbS92bXNjYW4uYy02NTk1LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYz02NzM2PXN0YXRpYyBib29sIHRocm90dGxlX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtNjgxNS1cXG5tbS92bXNjYW4uYzo2ODE2OnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbm1tL3Ztc2Nhbi5jLTY4MTctXFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssIGNvbnN0IG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcbi0tXFxubW0vdm1zY2FuLmMtNjg1MC1cXG5tbS92bXNjYW4uYzo2ODUxOlxcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTY4NTItXFxuLS1cXG5tbS92bXNjYW4uYz02OTAyPXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy02OTMzLVxcbm1tL3Ztc2Nhbi5jOjY5MzQ6XFx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNjkzNS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTc3MDA9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXFxuLS1cXG5tbS92bXNjYW4uYy03NzE5LVxcbm1tL3Ztc2Nhbi5jOjc3MjA6XFx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNzcyMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTI6MTEuNzkwNTI4OTQ2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1OTc3OTc5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTWVtb3J5IFJlY2xhaW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIG1lbW9yeSByZWNsYWltIHBhdGNoLCBhbmQgdGhlIGltbWVkaWF0ZSBlbnRyeSBwb2ludHMgZm9yIGRpcmVjdCByZWNsYWltIGp1bXAgb3V0IGF0IG1lOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBzaHJpbmtfYWxsX21lbW9yeWAsIGFuZCBgbm9kZV9yZWNsYWltYC4gRm9yIHRoZSBga3N3YXBkYCBkYWVtb24sIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIGBrc3dhcGRgIHRocmVhZCBmdW5jdGlvbiBpdHNlbGYgYXMgdGhlIGVudHJ5IHBvaW50LlxuXG5HaXZlbiB0aGF0IHRoaXMgcGF0Y2ggdG91Y2hlcyBtZW1vcnkgcmVjbGFpbSBsb2dpYywgZnV6emluZyBpcyBhbiBhYnNvbHV0ZSBtdXN0LWRvLiBUaGUgbW9kaWZpY2F0aW9ucyBhcmUgZGVlcCBpbiBgbW0vdm1zY2FuLmNgIOKAkyB0aGF0J3MgY29yZSBrZXJuZWwgY29kZSwgZWFzaWx5IHJlYWNoYWJsZSwgYW5kIHRodXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcgZWZmb3J0cy4gSSBzZWUgdGhlIHBhdGNoIGludHJvZHVjZXMgYHRocm90dGxlX2lzb2xhdGVkYCBhbmQgbW9kaWZpZXMgYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYGV2aWN0X2ZvbGlvc2AuXG5cbk15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRob3NlIGtleSBzeW1ib2xzOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBzaHJpbmtfYWxsX21lbW9yeWAsIGBub2RlX3JlY2xhaW1gLCBhbmQgYGtzd2FwZGAuXG5cbk5vdywgcmVnYXJkaW5nIGBldmljdF9mb2xpb3NgLCBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgaXQncyBNR0xSVS1zcGVjaWZpYy4gQWgsIHllcywgaXQncyByaWdodCB0aGVyZSBpbiB0aGUgTUdMUlUgc2VjdGlvbiBvZiBgbW0vdm1zY2FuLmNgLiBBIHF1aWNrIGNoZWNrLiBJcyBNR0xSVSBlbmFibGVkIGJ5IGRlZmF1bHQ/IEkgbmVlZCB0byBjaGVjayBgQ09ORklHX0xSVV9HRU5gLiBJJ2xsIGdvIGxvb2sgaW4gYG1tL0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MTYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTI6MTcuMzg4MzI5MDk4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzIwNTQwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM5Mz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuLS1cXG5tbS9LY29uZmlnLTE0MDMtIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjE0MDQ6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MDUtXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxMi1cXG5tbS9LY29uZmlnOjE0MTM6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQxNC1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxOC1cXG5tbS9LY29uZmlnOjE0MTk6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MjAtXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDI3LVxcbm1tL0tjb25maWc6MTQyODpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MjktXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1MjoxNy40ODU1Mzk1MjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1MTY2NTg4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNR0xSVSBUZXN0aW5nIFBsYW4qKlxuXG5Pa2F5LCBzbyB0byByZWFsbHkgcHV0IE1HTFJVIHRocm91Z2ggaXRzIHBhY2VzLCBJIHNob3VsZCBlbmFibGUgYm90aCBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgLiBUaGF0IG1ha2VzIHNlbnNlLiBJdCBhbGxvd3MgZm9yIGEgbW9yZSBmb2N1c2VkIGNvbXBhcmlzb24sIHNpbmNlIHRoZSBsZWdhY3kgTFJVIHBhdGgsIHNwZWNpZmljYWxseSB0aGUgYHNocmlua19pbmFjdGl2ZV9saXN0YCBmdW5jdGlvbiwgaGFzIGFsc28gYmVlbiB0b3VjaGVkLiBFdmVuIHRob3VnaCBNR0xSVSBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgZ2l2ZW4gdGhlIGxlZ2FjeSBjaGFuZ2VzLCB0aG9yb3VnaCB0ZXN0aW5nIG9mIGJvdGggaXMgYWx3YXlzIHRoZSByaWdodCBjYWxsLiBJdCdzIHRoZSBvbmx5IHdheSB0byBiZSBjb21wbGV0ZWx5IHN1cmUuXG5cbkkgY2FuIGVhc2lseSBhZGQgdGhvc2UgY29uZmlndXJhdGlvbnMgdG8gdGhlIEVuYWJsZUNvbmZpZ3MuIE5vIHByb2JsZW0gdGhlcmUuXG5cbk5leHQsIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgbW0vdm1zY2FuLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBub2RlX3JlY2xhaW1gIGZ1bmN0aW9uLiBUaGF0J3MgdGhlIGNvcmUgb2YgdGhlIHJlY2xhaW0gcHJvY2Vzcywgc28gSSBzaG91bGQgc2VlIGhvdyB0aGlzIGFmZmVjdHMgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzY3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjUyOjIxLjQzNzIwODM5NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAxMzY1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibm9kZV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTYyODY9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNjI4Ny17XFxubW0vdm1zY2FuLmM6NjI4ODpcXHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZCwgbnJfc2Nhbm5lZCwgbnJfbm9kZV9yZWNsYWltZWQ7XFxubW0vdm1zY2FuLmMtNjI4OS1cXHRzdHJ1Y3QgbHJ1dmVjICp0YXJnZXRfbHJ1dmVjO1xcbi0tXFxubW0vdm1zY2FuLmMtNjMxNC1cXG5tbS92bXNjYW4uYzo2MzE1OlxcdG5yX25vZGVfcmVjbGFpbWVkID0gc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCAtIG5yX3JlY2xhaW1lZDtcXG5tbS92bXNjYW4uYy02MzE2LVxcbi0tXFxubW0vdm1zY2FuLmMtNjMxOS1cXHRcXHR2bXByZXNzdXJlKHNjLVxcdTAwM2VnZnBfbWFzaywgc2MtXFx1MDAzZW9yZGVyLCBzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsIHRydWUsXFxubW0vdm1zY2FuLmM6NjMyMDpcXHRcXHRcXHQgICBzYy1cXHUwMDNlbnJfc2Nhbm5lZCAtIG5yX3NjYW5uZWQsIG5yX25vZGVfcmVjbGFpbWVkKTtcXG5tbS92bXNjYW4uYy02MzIxLVxcbm1tL3Ztc2Nhbi5jOjYzMjI6XFx0aWYgKG5yX25vZGVfcmVjbGFpbWVkKVxcbm1tL3Ztc2Nhbi5jLTYzMjMtXFx0XFx0cmVjbGFpbWFibGUgPSB0cnVlO1xcbi0tXFxubW0vdm1zY2FuLmMtNjM4My1cXG5tbS92bXNjYW4uYzo2Mzg0OlxcdGlmIChzaG91bGRfY29udGludWVfcmVjbGFpbShwZ2RhdCwgbnJfbm9kZV9yZWNsYWltZWQsIHNjKSlcXG5tbS92bXNjYW4uYy02Mzg1LVxcdFxcdGdvdG8gYWdhaW47XFxuLS1cXG5tbS92bXNjYW4uYz03NzcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHZtc2Nhbl9zeXNjdGxfdGFibGVbXSA9IHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc3ODMtXFx0XFx0LnByb2NuYW1lXFx0PSBcXFwiem9uZV9yZWNsYWltX21vZGVcXFwiLFxcbm1tL3Ztc2Nhbi5jOjc3ODQ6XFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZub2RlX3JlY2xhaW1fbW9kZSxcXG5tbS92bXNjYW4uYzo3Nzg1OlxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihub2RlX3JlY2xhaW1fbW9kZSksXFxubW0vdm1zY2FuLmMtNzc4Ni1cXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc4MDM9bW9kdWxlX2luaXQoa3N3YXBkX2luaXQpXFxuLS1cXG5tbS92bXNjYW4uYy03ODA4LSAqXFxubW0vdm1zY2FuLmM6NzgwOTogKiBJZiBub24temVybyBjYWxsIG5vZGVfcmVjbGFpbSB3aGVuIHRoZSBudW1iZXIgb2YgZnJlZSBwYWdlcyBmYWxscyBiZWxvd1xcbm1tL3Ztc2Nhbi5jLTc4MTAtICogdGhlIHdhdGVybWFya3MuXFxubW0vdm1zY2FuLmMtNzgxMS0gKi9cXG5tbS92bXNjYW4uYzo3ODEyOmludCBub2RlX3JlY2xhaW1fbW9kZSBfX3JlYWRfbW9zdGx5O1xcbm1tL3Ztc2Nhbi5jLTc4MTMtXFxuLS1cXG5tbS92bXNjYW4uYy03ODIxLS8qXFxubW0vdm1zY2FuLmM6NzgyMjogKiBQZXJjZW50YWdlIG9mIHBhZ2VzIGluIGEgem9uZSB0aGF0IG11c3QgYmUgdW5tYXBwZWQgZm9yIG5vZGVfcmVjbGFpbSB0b1xcbm1tL3Ztc2Nhbi5jLTc4MjMtICogb2NjdXIuXFxuLS1cXG5tbS92bXNjYW4uYz03ODQ4PXN0YXRpYyB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy03ODU4LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjc4NTk6XFx0aWYgKG5vZGVfcmVjbGFpbV9tb2RlIFxcdTAwMjYgUkVDTEFJTV9VTk1BUClcXG5tbS92bXNjYW4uYy03ODYwLVxcdFxcdG5yX3BhZ2VjYWNoZV9yZWNsYWltYWJsZSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfRklMRV9QQUdFUyk7XFxuLS1cXG5tbS92bXNjYW4uYy03ODc5LSAqL1xcbm1tL3Ztc2Nhbi5jOjc4ODA6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03ODgxLVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmMtNzg4Ny1cXG5tbS92bXNjYW4uYzo3ODg4OlxcdHRyYWNlX21tX3Ztc2Nhbl9ub2RlX3JlY2xhaW1fYmVnaW4ocGdkYXQtXFx1MDAzZW5vZGVfaWQsIHNjLVxcdTAwM2VvcmRlcixcXG5tbS92bXNjYW4uYy03ODg5LVxcdFxcdFxcdFxcdFxcdCAgIHNjLVxcdTAwM2VnZnBfbWFzayk7XFxuLS1cXG5tbS92bXNjYW4uYy03OTE3LVxcbm1tL3Ztc2Nhbi5jOjc5MTg6XFx0dHJhY2VfbW1fdm1zY2FuX25vZGVfcmVjbGFpbV9lbmQoc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCwgTlVMTCk7XFxubW0vdm1zY2FuLmMtNzkxOS1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc5MjItXFxubW0vdm1zY2FuLmM6NzkyMzp1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxcbm1tL3Ztc2Nhbi5jLTc5MjQte1xcbi0tXFxubW0vdm1zY2FuLmMtNzkzMi1cXHRcXHQucHJpb3JpdHkgPSBOT0RFX1JFQ0xBSU1fUFJJT1JJVFksXFxubW0vdm1zY2FuLmM6NzkzMzpcXHRcXHQubWF5X3dyaXRlcGFnZSA9ICEhKG5vZGVfcmVjbGFpbV9tb2RlIFxcdTAwMjYgUkVDTEFJTV9XUklURSksXFxubW0vdm1zY2FuLmM6NzkzNDpcXHRcXHQubWF5X3VubWFwID0gISEobm9kZV9yZWNsYWltX21vZGUgXFx1MDAyNiBSRUNMQUlNX1VOTUFQKSxcXG5tbS92bXNjYW4uYy03OTM1LVxcdFxcdC5tYXlfc3dhcCA9IDEsXFxuLS1cXG5tbS92bXNjYW4uYy03OTcxLVxcbm1tL3Ztc2Nhbi5jOjc5NzI6XFx0cmV0ID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIG5yX3BhZ2VzLCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTc5NzMtXFx0Y2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXFx1MDAyNnBnZGF0LVxcdTAwM2VmbGFncyk7XFxuLS1cXG5tbS92bXNjYW4uYy03OTg0LVxcbm1tL3Ztc2Nhbi5jOjc5ODU6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03OTg2LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmM9ODAwNT1pbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuLS1cXG5tbS92bXNjYW4uYy04MDk3LVxcbm1tL3Ztc2Nhbi5jOjgwOTg6XFx0XFx0XFx0cmVjbGFpbWVkID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGJhdGNoX3NpemUsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtODA5OS1cXHRcXHRcXHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcXHUwMDI2cGdkYXQtXFx1MDAzZWZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTI6MjEuNDk3MzQ5NjIyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1ODM1Mzg2NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIE1lbW9yeSBSZWNsYW1hdGlvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IHJlY2xhaW0gZnVuY3Rpb25zIGhlcmUuIGBub2RlX3JlY2xhaW1gIGlzIGEgc29saWQgcGllY2UsIGFsd2F5cyByZWxpYWJsZS4gVGhlbiB0aGVyZSdzIGBzaHJpbmtfYWxsX21lbW9yeWAg4oCTIHRoYXQgb25lJ3MgZ290IGEgYnJvYWQgaW1wYWN0IGFuZCBJIGxpa2UgaXRzIGFwcHJvYWNoLiBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIGFub3RoZXIgZ29vZCBjYW5kaWRhdGUgZm9yIHRhcmdldGVkIHBhZ2UgZnJlZWluZywgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBpcyBlc3NlbnRpYWwgZm9yIGNncm91cCBtYW5hZ2VtZW50LlxuXG5Ob3csIGEgY3J1Y2lhbCBxdWVzdGlvbiBwb3BzIHVwIHJlZ2FyZGluZyBgc2hyaW5rX2FsbF9tZW1vcnlgOiBpcyBpdCByZWFkaWx5IGF2YWlsYWJsZSB3aGVuIGFuZCB3aGVyZSBJIG5lZWQgaXQ/IElzIGl0IGV4cG9ydGVkIHByb3Blcmx5PyBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaXRzIHJlYWNoYWJpbGl0eS4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgdmlzaWJpbGl0eSBvZiB0aGlzIGNydWNpYWwgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTczLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTI6MjkuMDgwODkxMDU5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDczNzUwMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rX2FsbF9tZW1vcnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NzY4Nj1ib29sIGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy03Njk5LSAqL1xcbm1tL3Ztc2Nhbi5jOjc3MDA6dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXFxubW0vdm1zY2FuLmMtNzcwMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjUyOjI5LjE4ODI3NDM4NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzE5NjY3MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgZm9yIEhpYmVybmF0aW9uIEludGVyZmVyZW5jZSoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGlzc3VlLi4uIGl0J3MgZGVmaW5pdGVseSByZWxhdGVkIHRvIGhpYmVybmF0aW9uLCB0aGF0IG11Y2ggaXMgY2xlYXIuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgYWN0aXZpdHkgb2YgYGtzd2FwZGAuIEl0J3MgdGhlIGtlcm5lbCB0aHJlYWQgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIG1lbW9yeSBzd2FwcGluZywgYW5kIGl0J3MgYSBwcmltZSBzdXNwZWN0IHdoZW5ldmVyIGhpYmVybmF0aW9uLXJlbGF0ZWQgaXNzdWVzIHBvcCB1cC4gSSBuZWVkIHRvIHNlZSBpZiBpdCdzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIG9yIGlmIHNvbWV0aGluZyBpcyBib3R0bGVuZWNraW5nIHRoZXJlLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0IGBrc3dhcGRgIGlzIHVwIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjkzNiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjUyOjM0LjUwNzk0Mzg5NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcwMTYyNTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtzd2FwZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDUyNCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubW0vdm1zY2FuLmMtNS0gKiAgU3dhcCByZW9yZ2FuaXNlZCAyOS4xMi45NSwgU3RlcGhlbiBUd2VlZGllLlxcbm1tL3Ztc2Nhbi5jOjY6ICogIGtzd2FwZCBhZGRlZDogNy4xLjk2ICBzY3RcXG5tbS92bXNjYW4uYzo3OiAqICBSZW1vdmVkIGtzd2FwZF9jdGwgbGltaXRzLCBhbmQgc3dhcCBvdXQgYXMgbWFueSBwYWdlcyBhcyBuZWVkZWRcXG5tbS92bXNjYW4uYy04LSAqICB0byBicmluZyB0aGUgc3lzdGVtIGJhY2sgdG8gZnJlZXBhZ2VzLmhpZ2g6IDIuNC45NywgUmlrIHZhbiBSaWVsLlxcbm1tL3Ztc2Nhbi5jOjk6ICogIFpvbmUgYXdhcmUga3N3YXBkIHN0YXJ0ZWQgMDIvMDAsIEthbm9qIFNhcmNhciAoa2Fub2pAc2dpLmNvbSkuXFxubW0vdm1zY2FuLmMtMTAtICogIE11bHRpcXVldWUgVk0gc3RhcnRlZCA1LjguMDAsIFJpayB2YW4gUmllbC5cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ0Nz1zdGF0aWMgaW50IHJlY2xhaW1lcl9vZmZzZXQoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00NTItXFxubW0vdm1zY2FuLmM6NDUzOlxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxcbm1tL3Ztc2Nhbi5jLTQ1NC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ4Mz1zdGF0aWMgYm9vbCBza2lwX3Rocm90dGxlX25vcHJvZ3Jlc3MocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ4OC1cXHQvKlxcbm1tL3Ztc2Nhbi5jOjQ4OTpcXHQgKiBJZiBrc3dhcGQgaXMgZGlzYWJsZWQsIHJlc2NoZWR1bGUgaWYgbmVjZXNzYXJ5IGJ1dCBkbyBub3RcXG5tbS92bXNjYW4uYy00OTAtXFx0ICogdGhyb3R0bGUgYXMgdGhlIHN5c3RlbSBpcyBsaWtlbHkgbmVhciBPT00uXFxubW0vdm1zY2FuLmMtNDkxLVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjQ5MjpcXHRpZiAoa3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdkYXQpKVxcbm1tL3Ztc2Nhbi5jLTQ5My1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxMT12b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE3LVxcdC8qXFxubW0vdm1zY2FuLmM6NTE4OlxcdCAqIERvIG5vdCB0aHJvdHRsZSB1c2VyIHdvcmtlcnMsIGt0aHJlYWRzIG90aGVyIHRoYW4ga3N3YXBkIG9yXFxubW0vdm1zY2FuLmMtNTE5LVxcdCAqIHdvcmtxdWV1ZXMuIFRoZXkgbWF5IGJlIHJlcXVpcmVkIGZvciByZWNsYWltIHRvIG1ha2VcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyMS1cXHQgKi9cXG5tbS92bXNjYW4uYzo1MjI6XFx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpIFxcdTAwMjZcXHUwMDI2XFxubW0vdm1zY2FuLmMtNTIzLVxcdCAgICBjdXJyZW50LVxcdTAwM2VmbGFncyBcXHUwMDI2IChQRl9VU0VSX1dPUktFUnxQRl9LVEhSRUFEKSkge1xcbi0tXFxubW0vdm1zY2FuLmM9OTY2PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2RlbW90ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKnNyYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTk3NS1cXHQgKiBtYWtlIHN1cmUgd2UgYWxsb2NhdGUgZnJvbSB0aGUgdGFyZ2V0IG5vZGUgZmlyc3QgYWxzbyB0cnlpbmcgdG9cXG5tbS92bXNjYW4uYzo5NzY6XFx0ICogZGVtb3RlIG9yIHJlY2xhaW0gcGFnZXMgZnJvbSB0aGUgdGFyZ2V0IG5vZGUgdmlhIGtzd2FwZCBpZiB3ZSBhcmVcXG5tbS92bXNjYW4uYy05NzctXFx0ICogbG93IG9uIGZyZWUgbWVtb3J5IG9uIHRhcmdldCBub2RlLiBJZiB3ZSBkb24ndCBkbyB0aGlzIGFuZCBpZlxcbi0tXFxubW0vdm1zY2FuLmM9MTA1OD1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0xMTIxLVxcdFxcdCAqIFRoZSBudW1iZXIgb2YgZGlydHkgcGFnZXMgZGV0ZXJtaW5lcyBpZiBhIG5vZGUgaXMgbWFya2VkXFxubW0vdm1zY2FuLmM6MTEyMjpcXHRcXHQgKiByZWNsYWltX2Nvbmdlc3RlZC4ga3N3YXBkIHdpbGwgc3RhbGwgYW5kIHN0YXJ0IHdyaXRpbmdcXG5tbS92bXNjYW4uYy0xMTIzLVxcdFxcdCAqIGZvbGlvcyBpZiB0aGUgdGFpbCBvZiB0aGUgTFJVIGlzIGFsbCBkaXJ0eSB1bnF1ZXVlZCBmb2xpb3MuXFxuLS1cXG5tbS92bXNjYW4uYy0xMTkwLVxcdFxcdFxcdC8qIENhc2UgMSBhYm92ZSAqL1xcbm1tL3Ztc2Nhbi5jOjExOTE6XFx0XFx0XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYy0xMTkyLVxcdFxcdFxcdCAgICBmb2xpb190ZXN0X3JlY2xhaW0oZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS92bXNjYW4uYz0xNTg5PXVuc2lnbmVkIGludCByZWNsYWltX2NsZWFuX3BhZ2VzX2Zyb21fbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE2MTQtXFx0ICogV2Ugc2hvdWxkIGJlIHNhZmUgaGVyZSBzaW5jZSB3ZSBhcmUgb25seSBkZWFsaW5nIHdpdGggZmlsZSBwYWdlcyBhbmRcXG5tbS92bXNjYW4uYzoxNjE1OlxcdCAqIHdlIGFyZSBub3Qga3N3YXBkIGFuZCB0aGVyZWZvcmUgY2Fubm90IHdyaXRlIGRpcnR5IGZpbGUgcGFnZXMuIEJ1dFxcbm1tL3Ztc2Nhbi5jLTE2MTYtXFx0ICogY2FsbCBtZW1hbGxvY19ub3JlY2xhaW1fc2F2ZSgpIGFueXdheSwganVzdCBpbiBjYXNlIHRoZXNlIGNvbmRpdGlvbnNcXG4tLVxcbm1tL3Ztc2Nhbi5jPTE4MjI9c3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmaWxlLFxcbi0tXFxubW0vdm1zY2FuLmMtMTgyNy1cXG5tbS92bXNjYW4uYzoxODI4OlxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxcbm1tL3Ztc2Nhbi5jLTE4MjktXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vdm1zY2FuLmM9Mzg5Mz1zdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqc2V0X21tX3dhbGsoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmb3JjZV9hbGxvYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM4OTYtXFxubW0vdm1zY2FuLmM6Mzg5NzpcXHRpZiAocGdkYXQgXFx1MDAyNlxcdTAwMjYgY3VycmVudF9pc19rc3dhcGQoKSkge1xcbm1tL3Ztc2Nhbi5jLTM4OTgtXFx0XFx0Vk1fV0FSTl9PTl9PTkNFKHdhbGspO1xcbi0tXFxubW0vdm1zY2FuLmMtMzkwMS1cXHR9IGVsc2UgaWYgKCF3YWxrIFxcdTAwMjZcXHUwMDI2IGZvcmNlX2FsbG9jKSB7XFxubW0vdm1zY2FuLmM6MzkwMjpcXHRcXHRWTV9XQVJOX09OX09OQ0UoY3VycmVudF9pc19rc3dhcGQoKSk7XFxubW0vdm1zY2FuLmMtMzkwMy1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTM5MTM9c3RhdGljIHZvaWQgY2xlYXJfbW1fd2Fsayh2b2lkKVxcbi0tXFxubW0vdm1zY2FuLmMtMzkyMS1cXG5tbS92bXNjYW4uYzozOTIyOlxcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSlcXG5tbS92bXNjYW4uYy0zOTIzLVxcdFxcdGtmcmVlKHdhbGspO1xcbi0tXFxubW0vdm1zY2FuLmM9NDIzNT1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDI0MC1cXG5tbS92bXNjYW4uYzo0MjQxOlxcdFZNX1dBUk5fT05fT05DRSghY3VycmVudF9pc19rc3dhcGQoKSk7XFxubW0vdm1zY2FuLmMtNDI0Mi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwNjQ9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwNzUtXFx0LyogY2hlY2sgdGhlIG9yZGVyIHRvIGV4Y2x1ZGUgY29tcGFjdGlvbi1pbmR1Y2VkIHJlY2xhaW0gKi9cXG5tbS92bXNjYW4uYzo1MDc2OlxcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSB8fCBzYy1cXHUwMDNlb3JkZXIpXFxubW0vdm1zY2FuLmMtNTA3Ny1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS92bXNjYW4uYy01MDg5LVxcbm1tL3Ztc2Nhbi5jOjUwOTA6XFx0Lyoga3N3YXBkIHNob3VsZCBhYm9ydCBpZiBhbGwgZWxpZ2libGUgem9uZXMgYXJlIHNhZmUgKi9cXG5tbS92bXNjYW4uYy01MDkxLVxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vdm1zY2FuLmM9NTI3Nj1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI5OC1cXG5tbS92bXNjYW4uYzo1Mjk5OlxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxcbm1tL3Ztc2Nhbi5jLTUzMDAtXFx0XFx0c2MtXFx1MDAzZW5yX3JlY2xhaW1lZCA9IDA7XFxuLS1cXG5tbS92bXNjYW4uYy01MzA2LVxcbm1tL3Ztc2Nhbi5jOjUzMDc6XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXFxubW0vdm1zY2FuLmMtNTMwOC1cXHRcXHRzYy1cXHUwMDNlbnJfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUzMTQtXFx0aWYgKHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgXFx1MDAzZSByZWNsYWltZWQpXFxubW0vdm1zY2FuLmM6NTMxNTpcXHRcXHRrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzKHBnZGF0LCBzYy1cXHUwMDNlb3JkZXIsIHNjLVxcdTAwM2VyZWNsYWltX2lkeCk7XFxubW0vdm1zY2FuLmMtNTMxNi19XFxuLS1cXG5tbS92bXNjYW4uYz02MDE2PXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwNDUtXFx0ICogREVGX1BSSU9SSVRZIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGZhY3Qgd2UgYXJlIGRpcmVjdFxcbm1tL3Ztc2Nhbi5jOjYwNDY6XFx0ICogcmVjbGFpbWluZyBpbXBsaWVzIHRoYXQga3N3YXBkIGlzIG5vdCBrZWVwaW5nIHVwIGFuZCBpdCBpcyBiZXN0IHRvXFxubW0vdm1zY2FuLmMtNjA0Ny1cXHQgKiBkbyBhIGJhdGNoIG9mIHdvcmsgYXQgb25jZS4gRm9yIG1lbWNnIHJlY2xhaW0gb25lIGNoZWNrIGlzIG1hZGUgdG9cXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwNTAtXFx0ICovXFxubW0vdm1zY2FuLmM6NjA1MTpcXHRwcm9wb3J0aW9uYWxfcmVjbGFpbSA9ICghY2dyb3VwX3JlY2xhaW0oc2MpIFxcdTAwMjZcXHUwMDI2ICFjdXJyZW50X2lzX2tzd2FwZCgpIFxcdTAwMjZcXHUwMDI2XFxubW0vdm1zY2FuLmMtNjA1Mi1cXHRcXHRcXHRcXHRzYy1cXHUwMDNlcHJpb3JpdHkgPT0gREVGX1BSSU9SSVRZKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwNzUtXFx0XFx0LypcXG5tbS92bXNjYW4uYzo2MDc2OlxcdFxcdCAqIEZvciBrc3dhcGQgYW5kIG1lbWNnLCByZWNsYWltIGF0IGxlYXN0IHRoZSBudW1iZXIgb2YgcGFnZXNcXG5tbS92bXNjYW4uYy02MDc3LVxcdFxcdCAqIHJlcXVlc3RlZC4gRW5zdXJlIHRoYXQgdGhlIGFub24gYW5kIGZpbGUgTFJVcyBhcmUgc2Nhbm5lZFxcbi0tXFxubW0vdm1zY2FuLmM9NjIwNz1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MjIxLVxcdCAqXFxubW0vdm1zY2FuLmM6NjIyMjpcXHQgKiBGb3Iga3N3YXBkLCByZWxpYWJsZSBmb3J3YXJkIHByb2dyZXNzIGlzIG1vcmUgaW1wb3J0YW50XFxubW0vdm1zY2FuLmMtNjIyMy1cXHQgKiB0aGFuIGEgcXVpY2sgcmV0dXJuIHRvIGlkbGUuIEFsd2F5cyBkbyBmdWxsIHdhbGtzLlxcbm1tL3Ztc2Nhbi5jLTYyMjQtXFx0ICovXFxubW0vdm1zY2FuLmM6NjIyNTpcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSB8fCBzYy1cXHUwMDNlbWVtY2dfZnVsbF93YWxrKVxcbm1tL3Ztc2Nhbi5jLTYyMjYtXFx0XFx0cGFydGlhbCA9IE5VTEw7XFxuLS1cXG5tbS92bXNjYW4uYz02Mjg2PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjMyNC1cXG5tbS92bXNjYW4uYzo2MzI1OlxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKSB7XFxubW0vdm1zY2FuLmMtNjMyNi1cXHRcXHQvKlxcbi0tXFxubW0vdm1zY2FuLmMtNjMzNy1cXHRcXHQgKlxcbm1tL3Ztc2Nhbi5jOjYzMzg6XFx0XFx0ICogT25jZSBhIG5vZGUgaXMgZmxhZ2dlZCBQR0RBVF9XUklURUJBQ0ssIGtzd2FwZCB3aWxsXFxubW0vdm1zY2FuLmMtNjMzOS1cXHRcXHQgKiBjb3VudCB0aGUgbnVtYmVyIG9mIHBhZ2VzIHVuZGVyIHBhZ2VzIGZsYWdnZWQgZm9yXFxuLS1cXG5tbS92bXNjYW4uYy02MzQ2LVxcdFxcdC8qXFxubW0vdm1zY2FuLmM6NjM0NzpcXHRcXHQgKiBJZiBrc3dhcGQgc2NhbnMgcGFnZXMgbWFya2VkIGZvciBpbW1lZGlhdGVcXG5tbS92bXNjYW4uYy02MzQ4LVxcdFxcdCAqIHJlY2xhaW0gYW5kIHVuZGVyIHdyaXRlYmFjayAobnJfaW1tZWRpYXRlKSwgaXRcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYzNjctXFxubW0vdm1zY2FuLmM6NjM2ODpcXHRcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcXG5tbS92bXNjYW4uYy02MzY5LVxcdFxcdFxcdHNldF9iaXQoTFJVVkVDX05PREVfQ09OR0VTVEVELCBcXHUwMDI2dGFyZ2V0X2xydXZlYy1cXHUwMDNlZmxhZ3MpO1xcbi0tXFxubW0vdm1zY2FuLmMtNjM3My1cXHQgKiBTdGFsbCBkaXJlY3QgcmVjbGFpbSBmb3IgSU8gY29tcGxldGlvbnMgaWYgdGhlIGxydXZlYyBpc1xcbm1tL3Ztc2Nhbi5jOjYzNzQ6XFx0ICogbm9kZSBpcyBjb25nZXN0ZWQuIEFsbG93IGtzd2FwZCB0byBjb250aW51ZSB1bnRpbCBpdFxcbm1tL3Ztc2Nhbi5jLTYzNzUtXFx0ICogc3RhcnRzIGVuY291bnRlcmluZyB1bnF1ZXVlZCBkaXJ0eSBwYWdlcyBvciBjeWNsaW5nIHRocm91Z2hcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYzNzctXFx0ICovXFxubW0vdm1zY2FuLmM6NjM3ODpcXHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgXFx1MDAyNlxcdTAwMjYgY3VycmVudF9tYXlfdGhyb3R0bGUoKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3Ztc2Nhbi5jLTYzNzktXFx0ICAgICFzYy1cXHUwMDNlaGliZXJuYXRpb25fbW9kZSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubW0vdm1zY2FuLmMtNjM5MC1cXHQgKiBzbGVlcC4gT24gcmVjbGFpbSBwcm9ncmVzcywgcmVzZXQgdGhlIGZhaWx1cmUgY291bnRlci4gQVxcbm1tL3Ztc2Nhbi5jOjYzOTE6XFx0ICogc3VjY2Vzc2Z1bCBkaXJlY3QgcmVjbGFpbSBydW4gd2lsbCByZXZpdmUgYSBkb3JtYW50IGtzd2FwZC5cXG5tbS92bXNjYW4uYy02MzkyLVxcdCAqL1xcbm1tL3Ztc2Nhbi5jLTYzOTMtXFx0aWYgKHJlY2xhaW1hYmxlKVxcbm1tL3Ztc2Nhbi5jOjYzOTQ6XFx0XFx0a3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzcyhwZ2RhdCwgc2MtXFx1MDAzZW9yZGVyLCBzYy1cXHUwMDNlcmVjbGFpbV9pZHgpO1xcbm1tL3Ztc2Nhbi5jLTYzOTUtXFx0ZWxzZSBpZiAoc2MtXFx1MDAzZWNhY2hlX3RyaW1fbW9kZSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY0MzM9c3RhdGljIHZvaWQgY29uc2lkZXJfcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY0NDktXFx0LypcXG5tbS92bXNjYW4uYzo2NDUwOlxcdCAqIERvIG5vdCB0aHJvdHRsZSBrc3dhcGQgb3IgY2dyb3VwIHJlY2xhaW0gb24gTk9QUk9HUkVTUyBhcyBpdCB3aWxsXFxubW0vdm1zY2FuLmMtNjQ1MS1cXHQgKiB0aHJvdHRsZSBvbiBWTVNDQU5fVEhST1RUTEVfV1JJVEVCQUNLIGlmIHRoZXJlIGFyZSB0b28gbWFueSBwYWdlc1xcbi0tXFxubW0vdm1zY2FuLmMtNjQ1NC1cXHQgKi9cXG5tbS92bXNjYW4uYzo2NDU1OlxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpIHx8IGNncm91cF9yZWNsYWltKHNjKSlcXG5tbS92bXNjYW4uYy02NDU2LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY2OTE9c3RhdGljIGJvb2wgYWxsb3dfZGlyZWN0X3JlY2xhaW0ocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY2OTgtXFxubW0vdm1zY2FuLmM6NjY5OTpcXHRpZiAoa3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdkYXQpKVxcbm1tL3Ztc2Nhbi5jLTY3MDAtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5tbS92bXNjYW4uYy02NzE1LVxcbm1tL3Ztc2Nhbi5jOjY3MTY6XFx0Lyoga3N3YXBkIG11c3QgYmUgYXdha2UgaWYgcHJvY2Vzc2VzIGFyZSBiZWluZyB0aHJvdHRsZWQgKi9cXG5tbS92bXNjYW4uYzo2NzE3OlxcdGlmICghd21hcmtfb2sgXFx1MDAyNlxcdTAwMjYgd2FpdHF1ZXVlX2FjdGl2ZShcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF93YWl0KSkge1xcbm1tL3Ztc2Nhbi5jOjY3MTg6XFx0XFx0aWYgKFJFQURfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCkgXFx1MDAzZSBaT05FX05PUk1BTClcXG5tbS92bXNjYW4uYzo2NzE5OlxcdFxcdFxcdFdSSVRFX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsIFpPTkVfTk9STUFMKTtcXG5tbS92bXNjYW4uYy02NzIwLVxcbm1tL3Ztc2Nhbi5jOjY3MjE6XFx0XFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX3dhaXQpO1xcbm1tL3Ztc2Nhbi5jLTY3MjItXFx0fVxcbi0tXFxubW0vdm1zY2FuLmMtNjcyOS0gKiBhbmQgdGhlIFBGTUVNQUxMT0MgcmVzZXJ2ZSBmb3IgdGhlIHByZWZlcnJlZCBub2RlIGlzIGdldHRpbmcgZGFuZ2Vyb3VzbHlcXG5tbS92bXNjYW4uYzo2NzMwOiAqIGRlcGxldGVkLiBrc3dhcGQgd2lsbCBjb250aW51ZSB0byBtYWtlIHByb2dyZXNzIGFuZCB3YWtlIHRoZSBwcm9jZXNzZXNcXG5tbS92bXNjYW4uYy02NzMxLSAqIHdoZW4gdGhlIGxvdyB3YXRlcm1hcmsgaXMgcmVhY2hlZC5cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY3MzY9c3RhdGljIGJvb2wgdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy02NzY2LVxcdCAqIFRocm90dGxpbmcgaXMgYmFzZWQgb24gdGhlIGZpcnN0IHVzYWJsZSBub2RlIGFuZCB0aHJvdHRsZWQgcHJvY2Vzc2VzXFxubW0vdm1zY2FuLmM6Njc2NzpcXHQgKiB3YWl0IG9uIGEgcXVldWUgdW50aWwga3N3YXBkIG1ha2VzIHByb2dyZXNzIGFuZCB3YWtlcyB0aGVtLiBUaGVyZVxcbm1tL3Ztc2Nhbi5jLTY3NjgtXFx0ICogaXMgYW4gYWZmaW5pdHkgdGhlbiBiZXR3ZWVuIHByb2Nlc3NlcyB3YWtpbmcgdXAgYW5kIHdoZXJlIHJlY2xhaW1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3OTYtXFx0ICogdHJhbnNhY3Rpb24gaW4gdGhlIGNhc2Ugb2YgYSBmaWxlc3lzdGVtIGxpa2UgZXh0WzN8NF0uIEluIHRoaXMgY2FzZSxcXG5tbS92bXNjYW4uYzo2Nzk3OlxcdCAqIGl0IGlzIG5vdCBzYWZlIHRvIGJsb2NrIG9uIHBmbWVtYWxsb2Nfd2FpdCBhcyBrc3dhcGQgY291bGQgYmVcXG5tbS92bXNjYW4uYy02Nzk4LVxcdCAqIGJsb2NrZWQgd2FpdGluZyBvbiB0aGUgc2FtZSBsb2NrLiBJbnN0ZWFkLCB0aHJvdHRsZSBmb3IgdXAgdG8gYVxcbi0tXFxubW0vdm1zY2FuLmMtNjgwNC1cXHRlbHNlXFxubW0vdm1zY2FuLmM6NjgwNTpcXHRcXHQvKiBUaHJvdHRsZSB1bnRpbCBrc3dhcGQgd2FrZXMgdGhlIHByb2Nlc3MgKi9cXG5tbS92bXNjYW4uYy02ODA2LVxcdFxcdHdhaXRfZXZlbnRfa2lsbGFibGUoem9uZS1cXHUwMDNlem9uZV9wZ2RhdC1cXHUwMDNlcGZtZW1hbGxvY193YWl0LFxcbi0tXFxubW0vdm1zY2FuLmM9Njk0Mz11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtNjk1Mi1cXG5tbS92bXNjYW4uYzo2OTUzOnN0YXRpYyB2b2lkIGtzd2FwZF9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy02OTU0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTcwMTA9c3RhdGljIGJvb2wgcGdkYXRfYmFsYW5jZWQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNzAzMi1cXHRcXHQgKlxcbm1tL3Ztc2Nhbi5jOjcwMzM6XFx0XFx0ICogSG93ZXZlciwga3N3YXBkIHVzdWFsbHkgY2Fubm90IGFjY29tcGxpc2ggdGhpcyBvblxcbm1tL3Ztc2Nhbi5jLTcwMzQtXFx0XFx0ICogaXRzIG93biBhbmQgbmVlZHMga2NvbXBhY3RkIHN1cHBvcnQuIE9uY2UgaXQnc1xcbm1tL3Ztc2Nhbi5jOjcwMzU6XFx0XFx0ICogcmVjbGFpbWVkIGEgY29tcGFjdGlvbiBnYXAsIGFuZCBrc3dhcGRfc2hyaW5rX25vZGVcXG5tbS92bXNjYW4uYy03MDM2LVxcdFxcdCAqIGhhcyBkcm9wcGVkIG9yZGVyLCBzaW1wbHkgZW5zdXJlIHRoZXJlIGFyZSBlbm91Z2hcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcwNjctXFx0ICogbmVlZCBiYWxhbmNpbmcgYnkgZGVmaW5pdGlvbi4gVGhpcyBjYW4gaGFwcGVuIGlmIGEgem9uZS1yZXN0cmljdGVkXFxubW0vdm1zY2FuLmM6NzA2ODpcXHQgKiBhbGxvY2F0aW9uIHRyaWVzIHRvIHdha2UgYSByZW1vdGUga3N3YXBkLlxcbm1tL3Ztc2Nhbi5jLTcwNjktXFx0ICovXFxuLS1cXG5tbS92bXNjYW4uYz03MDc3PXN0YXRpYyB2b2lkIGNsZWFyX3BnZGF0X2Nvbmdlc3RlZChwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNzA4Ni0vKlxcbm1tL3Ztc2Nhbi5jOjcwODc6ICogUHJlcGFyZSBrc3dhcGQgZm9yIHNsZWVwaW5nLiBUaGlzIHZlcmlmaWVzIHRoYXQgdGhlcmUgYXJlIG5vIHByb2Nlc3Nlc1xcbm1tL3Ztc2Nhbi5jLTcwODgtICogd2FpdGluZyBpbiB0aHJvdHRsZV9kaXJlY3RfcmVjbGFpbSgpIGFuZCB0aGF0IHdhdGVybWFya3MgaGF2ZSBiZWVuIG1ldC5cXG5tbS92bXNjYW4uYy03MDg5LSAqXFxubW0vdm1zY2FuLmM6NzA5MDogKiBSZXR1cm5zIHRydWUgaWYga3N3YXBkIGlzIHJlYWR5IHRvIHNsZWVwXFxubW0vdm1zY2FuLmMtNzA5MS0gKi9cXG5tbS92bXNjYW4uYzo3MDkyOnN0YXRpYyBib29sIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcXG5tbS92bXNjYW4uYy03MDkzLVxcdFxcdFxcdFxcdGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MDk3LVxcdCAqIHNvb24gYXMgYWxsb3dfZGlyZWN0X3JlY2xhaW0oKSBpcyB0cnVlLiBCdXQgdGhlcmUgaXMgYSBwb3RlbnRpYWxcXG5tbS92bXNjYW4uYzo3MDk4OlxcdCAqIHJhY2UgYmV0d2VlbiB3aGVuIGtzd2FwZCBjaGVja3MgdGhlIHdhdGVybWFya3MgYW5kIGEgcHJvY2VzcyBnZXRzXFxubW0vdm1zY2FuLmMtNzA5OS1cXHQgKiB0aHJvdHRsZWQuIFRoZXJlIGlzIGFsc28gYSBwb3RlbnRpYWwgcmFjZSBpZiBwcm9jZXNzZXMgZ2V0XFxubW0vdm1zY2FuLmM6NzEwMDpcXHQgKiB0aHJvdHRsZWQsIGtzd2FwZCB3YWtlcywgYSBsYXJnZSBwcm9jZXNzIGV4aXRzIHRoZXJlYnkgYmFsYW5jaW5nIHRoZVxcbm1tL3Ztc2Nhbi5jOjcxMDE6XFx0ICogem9uZXMsIHdoaWNoIGNhdXNlcyBrc3dhcGQgdG8gZXhpdCBiYWxhbmNlX3BnZGF0KCkgYmVmb3JlIHJlYWNoaW5nXFxubW0vdm1zY2FuLmM6NzEwMjpcXHQgKiB0aGUgd2FrZSB1cCBjaGVja3MuIElmIGtzd2FwZCBpcyBnb2luZyB0byBzbGVlcCwgbm8gcHJvY2VzcyBzaG91bGRcXG5tbS92bXNjYW4uYy03MTAzLVxcdCAqIGJlIHNsZWVwaW5nIG9uIHBmbWVtYWxsb2Nfd2FpdCwgc28gd2FrZSB0aGVtIG5vdyBpZiBuZWNlc3NhcnkuIElmXFxubW0vdm1zY2FuLmM6NzEwNDpcXHQgKiB0aGUgd2FrZSB1cCBpcyBwcmVtYXR1cmUsIHByb2Nlc3NlcyB3aWxsIHdha2Uga3N3YXBkIGFuZCBnZXRcXG5tbS92bXNjYW4uYy03MTA1LVxcdCAqIHRocm90dGxlZCBhZ2Fpbi4gVGhlIGRpZmZlcmVuY2UgZnJvbSB3YWtlIHVwcyBpbiBiYWxhbmNlX3BnZGF0KCkgaXNcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcxMTEtXFx0LyogSG9wZWxlc3Mgbm9kZSwgbGVhdmUgaXQgdG8gZGlyZWN0IHJlY2xhaW0gKi9cXG5tbS92bXNjYW4uYzo3MTEyOlxcdGlmIChrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ2RhdCkpXFxubW0vdm1zY2FuLmMtNzExMy1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcxMjMtLypcXG5tbS92bXNjYW4uYzo3MTI0OiAqIGtzd2FwZCBzaHJpbmtzIGEgbm9kZSBvZiBwYWdlcyB0aGF0IGFyZSBhdCBvciBiZWxvdyB0aGUgaGlnaGVzdCB1c2FibGVcXG5tbS92bXNjYW4uYy03MTI1LSAqIHpvbmUgdGhhdCBpcyBjdXJyZW50bHkgdW5iYWxhbmNlZC5cXG5tbS92bXNjYW4uYy03MTI2LSAqXFxubW0vdm1zY2FuLmM6NzEyNzogKiBSZXR1cm5zIHRydWUgaWYga3N3YXBkIHNjYW5uZWQgYXQgbGVhc3QgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgcGFnZXMgdG9cXG5tbS92bXNjYW4uYy03MTI4LSAqIHJlY2xhaW0gb3IgaWYgdGhlIGxhY2sgb2YgcHJvZ3Jlc3Mgd2FzIGR1ZSB0byBwYWdlcyB1bmRlciB3cml0ZWJhY2suXFxuLS1cXG5tbS92bXNjYW4uYy03MTMwLSAqL1xcbm1tL3Ztc2Nhbi5jOjcxMzE6c3RhdGljIGJvb2wga3N3YXBkX3Nocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsXFxubW0vdm1zY2FuLmMtNzEzMi1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYz03MTg2PWNsZWFyX3JlY2xhaW1fYWN0aXZlKHBnX2RhdGFfdCAqcGdkYXQsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MTkxLS8qXFxubW0vdm1zY2FuLmM6NzE5MjogKiBGb3Iga3N3YXBkLCBiYWxhbmNlX3BnZGF0KCkgd2lsbCByZWNsYWltIHBhZ2VzIGFjcm9zcyBhIG5vZGUgZnJvbSB6b25lc1xcbm1tL3Ztc2Nhbi5jLTcxOTMtICogdGhhdCBhcmUgZWxpZ2libGUgZm9yIHVzZSBieSB0aGUgY2FsbGVyIHVudGlsIGF0IGxlYXN0IG9uZSB6b25lIGlzXFxuLS1cXG5tbS92bXNjYW4uYy03MTk1LSAqXFxubW0vdm1zY2FuLmM6NzE5NjogKiBSZXR1cm5zIHRoZSBvcmRlciBrc3dhcGQgZmluaXNoZWQgcmVjbGFpbWluZyBhdC5cXG5tbS92bXNjYW4uYy03MTk3LSAqXFxubW0vdm1zY2FuLmM6NzE5ODogKiBrc3dhcGQgc2NhbnMgdGhlIHpvbmVzIGluIHRoZSBoaWdobWVtLVxcdTAwM2Vub3JtYWwtXFx1MDAzZWRtYSBkaXJlY3Rpb24uICBJdCBza2lwc1xcbm1tL3Ztc2Nhbi5jLTcxOTktICogem9uZXMgd2hpY2ggaGF2ZSBmcmVlX3BhZ2VzIFxcdTAwM2UgaGlnaF93bWFya19wYWdlcyh6b25lKSwgYnV0IG9uY2UgYSB6b25lIGlzXFxuLS1cXG5tbS92bXNjYW4uYz03MjA0PXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MjMwLVxcdCAqIHBsYWNlIHNvIHRoYXQgcGFyYWxsZWwgYWxsb2NhdGlvbnMgdGhhdCBhcmUgbmVhciB0aGUgd2F0ZXJtYXJrIHdpbGxcXG5tbS92bXNjYW4uYzo3MjMxOlxcdCAqIHN0YWxsIG9yIGRpcmVjdCByZWNsYWltIHVudGlsIGtzd2FwZCBpcyBmaW5pc2hlZC5cXG5tbS92bXNjYW4uYy03MjMyLVxcdCAqL1xcbi0tXFxubW0vdm1zY2FuLmMtNzI1OS1cXHRcXHQgKiBnbyBhaGVhZCBpZiBhbGwgZWxpZ2libGUgem9uZXMgZm9yIHRoZSBvcmlnaW5hbCBhbGxvY2F0aW9uXFxubW0vdm1zY2FuLmM6NzI2MDpcXHRcXHQgKiByZXF1ZXN0IGFyZSBiYWxhbmNlZCB0byBhdm9pZCBleGNlc3NpdmUgcmVjbGFpbSBmcm9tIGtzd2FwZC5cXG5tbS92bXNjYW4uYy03MjYxLVxcdFxcdCAqL1xcbi0tXFxubW0vdm1zY2FuLmMtNzI3Ny1cXHRcXHQgKiBvbiB0aGUgZ3JvdW5kcyB0aGF0IHRoZSBub3JtYWwgcmVjbGFpbSBzaG91bGQgYmUgZW5vdWdoIHRvXFxubW0vdm1zY2FuLmM6NzI3ODpcXHRcXHQgKiByZS1ldmFsdWF0ZSBpZiBib29zdGluZyBpcyByZXF1aXJlZCB3aGVuIGtzd2FwZCBuZXh0IHdha2VzLlxcbm1tL3Ztc2Nhbi5jLTcyNzktXFx0XFx0ICovXFxuLS1cXG5tbS92bXNjYW4uYy03MzExLVxcdFxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjczMTI6XFx0XFx0a3N3YXBkX2FnZV9ub2RlKHBnZGF0LCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTczMTMtXFxuLS1cXG5tbS92bXNjYW4uYy03MzI1LVxcdFxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjczMjY6XFx0XFx0aWYgKGtzd2FwZF9zaHJpbmtfbm9kZShwZ2RhdCwgXFx1MDAyNnNjKSlcXG5tbS92bXNjYW4uYy03MzI3LVxcdFxcdFxcdHJhaXNlX3ByaW9yaXR5ID0gZmFsc2U7XFxuLS1cXG5tbS92bXNjYW4uYy03MzM3LVxcbm1tL3Ztc2Nhbi5jOjczMzg6XFx0XFx0LyogQ2hlY2sgaWYga3N3YXBkIHNob3VsZCBiZSBzdXNwZW5kaW5nICovXFxubW0vdm1zY2FuLmMtNzMzOS1cXHRcXHRfX2ZzX3JlY2xhaW1fcmVsZWFzZShfVEhJU19JUF8pO1xcbi0tXFxubW0vdm1zY2FuLmMtNzM3Ni1cXHQgKiB3YXRlcm1hcmtfaGlnaCBhdCB0aGlzIHBvaW50LiBXZSBuZWVkIHRvIGF2b2lkIGluY3JlYXNpbmcgdGhlXFxubW0vdm1zY2FuLmM6NzM3NzpcXHQgKiBmYWlsdXJlIGNvdW50IHRvIHByZXZlbnQgdGhlIGtzd2FwZCB0aHJlYWQgZnJvbSBzdG9wcGluZy5cXG5tbS92bXNjYW4uYy03Mzc4LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jLTczNzktXFx0aWYgKCFzYy5ucl9yZWNsYWltZWQgXFx1MDAyNlxcdTAwMjYgIWJvb3N0ZWQpIHtcXG5tbS92bXNjYW4uYzo3MzgwOlxcdFxcdGludCBmYWlsX2NudCA9IGF0b21pY19pbmNfcmV0dXJuKFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX2ZhaWx1cmVzKTtcXG5tbS92bXNjYW4uYzo3MzgxOlxcdFxcdC8qIGtzd2FwZCBjb250ZXh0LCBsb3cgb3ZlcmhlYWQgdG8gdHJhY2UgZXZlcnkgZmFpbHVyZSAqL1xcbm1tL3Ztc2Nhbi5jOjczODI6XFx0XFx0dHJhY2VfbW1fdm1zY2FuX2tzd2FwZF9yZWNsYWltX2ZhaWwocGdkYXQtXFx1MDAzZW5vZGVfaWQsIGZhaWxfY250KTtcXG5tbS92bXNjYW4uYy03MzgzLVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0MTgtXFx0LypcXG5tbS92bXNjYW4uYzo3NDE5OlxcdCAqIFJldHVybiB0aGUgb3JkZXIga3N3YXBkIHN0b3BwZWQgcmVjbGFpbWluZyBhdCBhc1xcbm1tL3Ztc2Nhbi5jOjc0MjA6XFx0ICogcHJlcGFyZV9rc3dhcGRfc2xlZXAoKSB0YWtlcyBpdCBpbnRvIGFjY291bnQuIElmIGFub3RoZXIgY2FsbGVyXFxubW0vdm1zY2FuLmM6NzQyMTpcXHQgKiBlbnRlcmVkIHRoZSBhbGxvY2F0b3Igc2xvdyBwYXRoIHdoaWxlIGtzd2FwZCB3YXMgYXdha2UsIG9yZGVyIHdpbGxcXG5tbS92bXNjYW4uYy03NDIyLVxcdCAqIHJlbWFpbiBhdCB0aGUgaGlnaGVyIGxldmVsLlxcbi0tXFxubW0vdm1zY2FuLmMtNzQyNy0vKlxcbm1tL3Ztc2Nhbi5jOjc0Mjg6ICogVGhlIHBnZGF0LVxcdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4IGlzIHVzZWQgdG8gcGFzcyB0aGUgaGlnaGVzdCB6b25lIGluZGV4IHRvXFxubW0vdm1zY2FuLmM6NzQyOTogKiBiZSByZWNsYWltZWQgYnkga3N3YXBkIGZyb20gdGhlIHdha2VyLiBJZiB0aGUgdmFsdWUgaXMgTUFYX05SX1pPTkVTIHdoaWNoIGlzXFxubW0vdm1zY2FuLmM6NzQzMDogKiBub3QgYSB2YWxpZCBpbmRleCB0aGVuIGVpdGhlciBrc3dhcGQgcnVucyBmb3IgZmlyc3QgdGltZSBvciBrc3dhcGQgY291bGRuJ3RcXG5tbS92bXNjYW4uYy03NDMxLSAqIHNsZWVwIGFmdGVyIHByZXZpb3VzIHJlY2xhaW0gYXR0ZW1wdCAobm9kZSBpcyBzdGlsbCB1bmJhbGFuY2VkKS4gSW4gdGhhdFxcbm1tL3Ztc2Nhbi5jOjc0MzI6ICogY2FzZSByZXR1cm4gdGhlIHpvbmUgaW5kZXggb2YgdGhlIHByZXZpb3VzIGtzd2FwZCByZWNsYWltIGN5Y2xlLlxcbm1tL3Ztc2Nhbi5jLTc0MzMtICovXFxubW0vdm1zY2FuLmM6NzQzNDpzdGF0aWMgZW51bSB6b25lX3R5cGUga3N3YXBkX2hpZ2hlc3Rfem9uZWlkeChwZ19kYXRhX3QgKnBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTc0MzUtXFx0XFx0XFx0XFx0XFx0ICAgZW51bSB6b25lX3R5cGUgcHJldl9oaWdoZXN0X3pvbmVpZHgpXFxubW0vdm1zY2FuLmMtNzQzNi17XFxubW0vdm1zY2FuLmM6NzQzNzpcXHRlbnVtIHpvbmVfdHlwZSBjdXJyX2lkeCA9IFJFQURfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCk7XFxubW0vdm1zY2FuLmMtNzQzOC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0NDEtXFxubW0vdm1zY2FuLmM6NzQ0MjpzdGF0aWMgdm9pZCBrc3dhcGRfdHJ5X3RvX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBhbGxvY19vcmRlciwgaW50IHJlY2xhaW1fb3JkZXIsXFxubW0vdm1zY2FuLmMtNzQ0My1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNzQ1MC1cXG5tbS92bXNjYW4uYzo3NDUxOlxcdHByZXBhcmVfdG9fd2FpdChcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF93YWl0LCBcXHUwMDI2d2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTtcXG5tbS92bXNjYW4uYy03NDUyLVxcbi0tXFxubW0vdm1zY2FuLmMtNzQ1OS1cXHQgKi9cXG5tbS92bXNjYW4uYzo3NDYwOlxcdGlmIChwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ2RhdCwgcmVjbGFpbV9vcmRlciwgaGlnaGVzdF96b25laWR4KSkge1xcbm1tL3Ztc2Nhbi5jLTc0NjEtXFx0XFx0LypcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0NjMtXFx0XFx0ICogaXNvbGF0ZSBwYWdlcyBmcm9tIGFuZCBza2lwcyB0aGVtIGluIHRoZSBmdXR1cmUgc2Nhbm5pbmcuXFxubW0vdm1zY2FuLmM6NzQ2NDpcXHRcXHQgKiBXaGVuIGtzd2FwZCBpcyBnb2luZyB0byBzbGVlcCwgaXQgaXMgcmVhc29uYWJsZSB0byBhc3N1bWVcXG5tbS92bXNjYW4uYy03NDY1LVxcdFxcdCAqIHRoYXQgcGFnZXMgYW5kIGNvbXBhY3Rpb24gbWF5IHN1Y2NlZWQgc28gcmVzZXQgdGhlIGNhY2hlLlxcbi0tXFxubW0vdm1zY2FuLmMtNzQ3Ny1cXHRcXHQvKlxcbm1tL3Ztc2Nhbi5jOjc0Nzg6XFx0XFx0ICogSWYgd29rZW4gcHJlbWF0dXJlbHkgdGhlbiByZXNldCBrc3dhcGRfaGlnaGVzdF96b25laWR4IGFuZFxcbm1tL3Ztc2Nhbi5jLTc0NzktXFx0XFx0ICogb3JkZXIuIFRoZSB2YWx1ZXMgd2lsbCBlaXRoZXIgYmUgZnJvbSBhIHdha2V1cCByZXF1ZXN0IG9yXFxuLS1cXG5tbS92bXNjYW4uYy03NDgyLVxcdFxcdGlmIChyZW1haW5pbmcpIHtcXG5tbS92bXNjYW4uYzo3NDgzOlxcdFxcdFxcdFdSSVRFX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsXFxubW0vdm1zY2FuLmM6NzQ4NDpcXHRcXHRcXHRcXHRcXHRrc3dhcGRfaGlnaGVzdF96b25laWR4KHBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTc0ODUtXFx0XFx0XFx0XFx0XFx0XFx0XFx0aGlnaGVzdF96b25laWR4KSk7XFxubW0vdm1zY2FuLmMtNzQ4Ni1cXG5tbS92bXNjYW4uYzo3NDg3OlxcdFxcdFxcdGlmIChSRUFEX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9vcmRlcikgXFx1MDAzYyByZWNsYWltX29yZGVyKVxcbm1tL3Ztc2Nhbi5jOjc0ODg6XFx0XFx0XFx0XFx0V1JJVEVfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX29yZGVyLCByZWNsYWltX29yZGVyKTtcXG5tbS92bXNjYW4uYy03NDg5LVxcdFxcdH1cXG5tbS92bXNjYW4uYy03NDkwLVxcbm1tL3Ztc2Nhbi5jOjc0OTE6XFx0XFx0ZmluaXNoX3dhaXQoXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfd2FpdCwgXFx1MDAyNndhaXQpO1xcbm1tL3Ztc2Nhbi5jOjc0OTI6XFx0XFx0cHJlcGFyZV90b193YWl0KFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX3dhaXQsIFxcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xcbm1tL3Ztc2Nhbi5jLTc0OTMtXFx0fVxcbi0tXFxubW0vdm1zY2FuLmMtNzQ5OS1cXHRpZiAoIXJlbWFpbmluZyBcXHUwMDI2XFx1MDAyNlxcbm1tL3Ztc2Nhbi5jOjc1MDA6XFx0ICAgIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnZGF0LCByZWNsYWltX29yZGVyLCBoaWdoZXN0X3pvbmVpZHgpKSB7XFxubW0vdm1zY2FuLmM6NzUwMTpcXHRcXHR0cmFjZV9tbV92bXNjYW5fa3N3YXBkX3NsZWVwKHBnZGF0LVxcdTAwM2Vub2RlX2lkKTtcXG5tbS92bXNjYW4uYy03NTAyLVxcbi0tXFxubW0vdm1zY2FuLmMtNzUwNy1cXHRcXHQgKiB3YXRlcm1hcmtzIGJlaW5nIGJyZWFjaGVkIHdoaWxlIHVuZGVyIHByZXNzdXJlLCB3ZSByZWR1Y2UgdGhlXFxubW0vdm1zY2FuLmM6NzUwODpcXHRcXHQgKiBwZXItY3B1IHZtc3RhdCB0aHJlc2hvbGQgd2hpbGUga3N3YXBkIGlzIGF3YWtlIGFuZCByZXN0b3JlXFxubW0vdm1zY2FuLmMtNzUwOS1cXHRcXHQgKiB0aGVtIGJlZm9yZSBnb2luZyBiYWNrIHRvIHNsZWVwLlxcbi0tXFxubW0vdm1zY2FuLmMtNzUyMi1cXHR9XFxubW0vdm1zY2FuLmM6NzUyMzpcXHRmaW5pc2hfd2FpdChcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF93YWl0LCBcXHUwMDI2d2FpdCk7XFxubW0vdm1zY2FuLmMtNzUyNC19XFxuLS1cXG5tbS92bXNjYW4uYy03NTM4LSAqL1xcbm1tL3Ztc2Nhbi5jOjc1Mzk6c3RhdGljIGludCBrc3dhcGQodm9pZCAqcClcXG5tbS92bXNjYW4uYy03NTQwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1NDgtXFx0ICogYW5kIHRoYXQgaWYgd2UgbmVlZCBtb3JlIG1lbW9yeSB3ZSBzaG91bGQgZ2V0IGFjY2VzcyB0byBpdFxcbm1tL3Ztc2Nhbi5jOjc1NDk6XFx0ICogcmVnYXJkbGVzcyAoc2VlIFxcXCJfX2FsbG9jX3BhZ2VzKClcXFwiKS4gXFxcImtzd2FwZFxcXCIgc2hvdWxkXFxubW0vdm1zY2FuLmMtNzU1MC1cXHQgKiBuZXZlciBnZXQgY2F1Z2h0IGluIHRoZSBub3JtYWwgcGFnZSBmcmVlaW5nIGxvZ2ljLlxcbi0tXFxubW0vdm1zY2FuLmMtNzU2MC1cXG5tbS92bXNjYW4uYzo3NTYxOlxcdFdSSVRFX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9vcmRlciwgMCk7XFxubW0vdm1zY2FuLmM6NzU2MjpcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LCBNQVhfTlJfWk9ORVMpO1xcbm1tL3Ztc2Nhbi5jLTc1NjMtXFx0YXRvbWljX3NldChcXHUwMDI2cGdkYXQtXFx1MDAzZW5yX3dyaXRlYmFja190aHJvdHRsZWQsIDApO1xcbi0tXFxubW0vdm1zY2FuLmMtNzU2Ni1cXG5tbS92bXNjYW4uYzo3NTY3OlxcdFxcdGFsbG9jX29yZGVyID0gcmVjbGFpbV9vcmRlciA9IFJFQURfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX29yZGVyKTtcXG5tbS92bXNjYW4uYzo3NTY4OlxcdFxcdGhpZ2hlc3Rfem9uZWlkeCA9IGtzd2FwZF9oaWdoZXN0X3pvbmVpZHgocGdkYXQsXFxubW0vdm1zY2FuLmMtNzU2OS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRoaWdoZXN0X3pvbmVpZHgpO1xcbm1tL3Ztc2Nhbi5jLTc1NzAtXFxubW0vdm1zY2FuLmM6NzU3MTprc3dhcGRfdHJ5X3NsZWVwOlxcbm1tL3Ztc2Nhbi5jOjc1NzI6XFx0XFx0a3N3YXBkX3RyeV90b19zbGVlcChwZ2RhdCwgYWxsb2Nfb3JkZXIsIHJlY2xhaW1fb3JkZXIsXFxubW0vdm1zY2FuLmMtNzU3My1cXHRcXHRcXHRcXHRcXHRoaWdoZXN0X3pvbmVpZHgpO1xcbi0tXFxubW0vdm1zY2FuLmMtNzU3NS1cXHRcXHQvKiBSZWFkIHRoZSBuZXcgb3JkZXIgYW5kIGhpZ2hlc3Rfem9uZWlkeCAqL1xcbm1tL3Ztc2Nhbi5jOjc1NzY6XFx0XFx0YWxsb2Nfb3JkZXIgPSBSRUFEX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9vcmRlcik7XFxubW0vdm1zY2FuLmM6NzU3NzpcXHRcXHRoaWdoZXN0X3pvbmVpZHggPSBrc3dhcGRfaGlnaGVzdF96b25laWR4KHBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTc1NzgtXFx0XFx0XFx0XFx0XFx0XFx0XFx0aGlnaGVzdF96b25laWR4KTtcXG5tbS92bXNjYW4uYzo3NTc5OlxcdFxcdFdSSVRFX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9vcmRlciwgMCk7XFxubW0vdm1zY2FuLmM6NzU4MDpcXHRcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LCBNQVhfTlJfWk9ORVMpO1xcbm1tL3Ztc2Nhbi5jLTc1ODEtXFxuLS1cXG5tbS92bXNjYW4uYy03NTkzLVxcdFxcdCAqIFJlY2xhaW0gYmVnaW5zIGF0IHRoZSByZXF1ZXN0ZWQgb3JkZXIgYnV0IGlmIGEgaGlnaC1vcmRlclxcbm1tL3Ztc2Nhbi5jOjc1OTQ6XFx0XFx0ICogcmVjbGFpbSBmYWlscyB0aGVuIGtzd2FwZCBmYWxscyBiYWNrIHRvIHJlY2xhaW1pbmcgZm9yXFxubW0vdm1zY2FuLmM6NzU5NTpcXHRcXHQgKiBvcmRlci0wLiBJZiB0aGF0IGhhcHBlbnMsIGtzd2FwZCB3aWxsIGNvbnNpZGVyIHNsZWVwaW5nXFxubW0vdm1zY2FuLmMtNzU5Ni1cXHRcXHQgKiBmb3IgdGhlIG9yZGVyIGl0IGZpbmlzaGVkIHJlY2xhaW1pbmcgYXQgKHJlY2xhaW1fb3JkZXIpXFxuLS1cXG5tbS92bXNjYW4uYy03NTk5LVxcdFxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjc2MDA6XFx0XFx0dHJhY2VfbW1fdm1zY2FuX2tzd2FwZF93YWtlKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBoaWdoZXN0X3pvbmVpZHgsXFxubW0vdm1zY2FuLmMtNzYwMS1cXHRcXHRcXHRcXHRcXHRcXHRhbGxvY19vcmRlcik7XFxuLS1cXG5tbS92bXNjYW4uYy03NjA0LVxcdFxcdGlmIChyZWNsYWltX29yZGVyIFxcdTAwM2MgYWxsb2Nfb3JkZXIpXFxubW0vdm1zY2FuLmM6NzYwNTpcXHRcXHRcXHRnb3RvIGtzd2FwZF90cnlfc2xlZXA7XFxubW0vdm1zY2FuLmMtNzYwNi1cXHR9XFxuLS1cXG5tbS92bXNjYW4uYy03NjE0LSAqIEEgem9uZSBpcyBsb3cgb24gZnJlZSBtZW1vcnkgb3IgdG9vIGZyYWdtZW50ZWQgZm9yIGhpZ2gtb3JkZXIgbWVtb3J5LiAgSWZcXG5tbS92bXNjYW4uYzo3NjE1OiAqIGtzd2FwZCBzaG91bGQgcmVjbGFpbSAoZGlyZWN0IHJlY2xhaW0gaXMgZGVmZXJyZWQpLCB3YWtlIGl0IHVwIGZvciB0aGUgem9uZSdzXFxubW0vdm1zY2FuLmM6NzYxNjogKiBwZ2RhdC4gIEl0IHdpbGwgd2FrZSB1cCBrY29tcGFjdGQgYWZ0ZXIgcmVjbGFpbWluZyBtZW1vcnkuICBJZiBrc3dhcGQgcmVjbGFpbVxcbm1tL3Ztc2Nhbi5jLTc2MTctICogaGFzIGZhaWxlZCBvciBpcyBub3QgbmVlZGVkLCBzdGlsbCB3YWtlIHVwIGtjb21wYWN0ZCBpZiBvbmx5IGNvbXBhY3Rpb24gaXNcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2MTktICovXFxubW0vdm1zY2FuLmM6NzYyMDp2b2lkIHdha2V1cF9rc3dhcGQoc3RydWN0IHpvbmUgKnpvbmUsIGdmcF90IGdmcF9mbGFncywgaW50IG9yZGVyLFxcbm1tL3Ztc2Nhbi5jLTc2MjEtXFx0XFx0ICAgZW51bSB6b25lX3R5cGUgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNzYzMi1cXHRwZ2RhdCA9IHpvbmUtXFx1MDAzZXpvbmVfcGdkYXQ7XFxubW0vdm1zY2FuLmM6NzYzMzpcXHRjdXJyX2lkeCA9IFJFQURfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCk7XFxubW0vdm1zY2FuLmMtNzYzNC1cXG5tbS92bXNjYW4uYy03NjM1LVxcdGlmIChjdXJyX2lkeCA9PSBNQVhfTlJfWk9ORVMgfHwgY3Vycl9pZHggXFx1MDAzYyBoaWdoZXN0X3pvbmVpZHgpXFxubW0vdm1zY2FuLmM6NzYzNjpcXHRcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LCBoaWdoZXN0X3pvbmVpZHgpO1xcbm1tL3Ztc2Nhbi5jLTc2MzctXFxubW0vdm1zY2FuLmM6NzYzODpcXHRpZiAoUkVBRF9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfb3JkZXIpIFxcdTAwM2Mgb3JkZXIpXFxubW0vdm1zY2FuLmM6NzYzOTpcXHRcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfb3JkZXIsIG9yZGVyKTtcXG5tbS92bXNjYW4uYy03NjQwLVxcbm1tL3Ztc2Nhbi5jOjc2NDE6XFx0aWYgKCF3YWl0cXVldWVfYWN0aXZlKFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX3dhaXQpKVxcbm1tL3Ztc2Nhbi5jLTc2NDItXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vdm1zY2FuLmMtNzY0NC1cXHQvKiBIb3BlbGVzcyBub2RlLCBsZWF2ZSBpdCB0byBkaXJlY3QgcmVjbGFpbSBpZiBwb3NzaWJsZSAqL1xcbm1tL3Ztc2Nhbi5jOjc2NDU6XFx0aWYgKGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnZGF0KSB8fFxcbm1tL3Ztc2Nhbi5jLTc2NDYtXFx0ICAgIChwZ2RhdF9iYWxhbmNlZChwZ2RhdCwgb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2NTktXFxubW0vdm1zY2FuLmM6NzY2MDpcXHR0cmFjZV9tbV92bXNjYW5fd2FrZXVwX2tzd2FwZChwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgaGlnaGVzdF96b25laWR4LCBvcmRlcixcXG5tbS92bXNjYW4uYy03NjYxLVxcdFxcdFxcdFxcdCAgICAgIGdmcF9mbGFncyk7XFxubW0vdm1zY2FuLmM6NzY2MjpcXHR3YWtlX3VwX2ludGVycnVwdGlibGUoXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfd2FpdCk7XFxubW0vdm1zY2FuLmMtNzY2My19XFxubW0vdm1zY2FuLmMtNzY2NC1cXG5tbS92bXNjYW4uYzo3NjY1OnZvaWQga3N3YXBkX2NsZWFyX2hvcGVsZXNzKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0ga3N3YXBkX2NsZWFyX2hvcGVsZXNzX3JlYXNvbiByZWFzb24pXFxubW0vdm1zY2FuLmMtNzY2Ni17XFxubW0vdm1zY2FuLmMtNzY2Ny1cXHQvKiBPbmx5IHRyYWNlIGFjdHVhbCByZXNldHMsIG5vdCByZWR1bmRhbnQgemVyby10by16ZXJvICovXFxubW0vdm1zY2FuLmM6NzY2ODpcXHRpZiAoYXRvbWljX3hjaGcoXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfZmFpbHVyZXMsIDApKVxcbm1tL3Ztc2Nhbi5jOjc2Njk6XFx0XFx0dHJhY2VfbW1fdm1zY2FuX2tzd2FwZF9jbGVhcl9ob3BlbGVzcyhwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgcmVhc29uKTtcXG5tbS92bXNjYW4uYy03NjcwLX1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2NzItLypcXG5tbS92bXNjYW4uYzo3NjczOiAqIFJlc2V0IGtzd2FwZF9mYWlsdXJlcyBvbmx5IHdoZW4gdGhlIG5vZGUgaXMgYmFsYW5jZWQuIFdpdGhvdXQgdGhpc1xcbm1tL3Ztc2Nhbi5jLTc2NzQtICogY2hlY2ssIHN1Y2Nlc3NmdWwgZGlyZWN0IHJlY2xhaW0gKGUuZy4sIGZyb20gY2dyb3VwIG1lbW9yeS5oaWdoXFxubW0vdm1zY2FuLmM6NzY3NTogKiB0aHJvdHRsaW5nKSBjYW4ga2VlcCByZXNldHRpbmcga3N3YXBkX2ZhaWx1cmVzIGV2ZW4gd2hlbiB0aGUgbm9kZVxcbm1tL3Ztc2Nhbi5jOjc2NzY6ICogY2Fubm90IGJlIGJhbGFuY2VkLCBjYXVzaW5nIGtzd2FwZCB0byBydW4gZW5kbGVzc2x5Llxcbm1tL3Ztc2Nhbi5jLTc2NzctICovXFxubW0vdm1zY2FuLmM6NzY3ODp2b2lkIGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3Moc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03Njc5LVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03NjgxLVxcdGlmIChwZ2RhdF9iYWxhbmNlZChwZ2RhdCwgb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkpXFxubW0vdm1zY2FuLmM6NzY4MjpcXHRcXHRrc3dhcGRfY2xlYXJfaG9wZWxlc3MocGdkYXQsIGN1cnJlbnRfaXNfa3N3YXBkKCkgP1xcbm1tL3Ztc2Nhbi5jLTc2ODMtXFx0XFx0XFx0S1NXQVBEX0NMRUFSX0hPUEVMRVNTX0tTV0FQRCA6IEtTV0FQRF9DTEVBUl9IT1BFTEVTU19ESVJFQ1QpO1xcbi0tXFxubW0vdm1zY2FuLmMtNzY4NS1cXG5tbS92bXNjYW4uYzo3Njg2OmJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcXG5tbS92bXNjYW4uYy03Njg3LXtcXG5tbS92bXNjYW4uYzo3Njg4OlxcdHJldHVybiBhdG9taWNfcmVhZChcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF9mYWlsdXJlcykgXFx1MDAzZT0gTUFYX1JFQ0xBSU1fUkVUUklFUztcXG5tbS92bXNjYW4uYy03Njg5LX1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTc3MDA9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXFxuLS1cXG5tbS92bXNjYW4uYy03NzMwLS8qXFxubW0vdm1zY2FuLmM6NzczMTogKiBUaGlzIGtzd2FwZCBzdGFydCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSBpbml0IGFuZCBub2RlLWhvdC1hZGQuXFxubW0vdm1zY2FuLmMtNzczMi0gKi9cXG5tbS92bXNjYW4uYzo3NzMzOnZvaWQgX19tZW1pbml0IGtzd2FwZF9ydW4oaW50IG5pZClcXG5tbS92bXNjYW4uYy03NzM0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc3MzYtXFxubW0vdm1zY2FuLmM6NzczNzpcXHRwZ2RhdF9rc3dhcGRfbG9jayhwZ2RhdCk7XFxubW0vdm1zY2FuLmM6NzczODpcXHRpZiAoIXBnZGF0LVxcdTAwM2Vrc3dhcGQpIHtcXG5tbS92bXNjYW4uYzo3NzM5OlxcdFxcdHBnZGF0LVxcdTAwM2Vrc3dhcGQgPSBrdGhyZWFkX2NyZWF0ZV9vbl9ub2RlKGtzd2FwZCwgcGdkYXQsIG5pZCwgXFxcImtzd2FwZCVkXFxcIiwgbmlkKTtcXG5tbS92bXNjYW4uYzo3NzQwOlxcdFxcdGlmIChJU19FUlIocGdkYXQtXFx1MDAzZWtzd2FwZCkpIHtcXG5tbS92bXNjYW4uYy03NzQxLVxcdFxcdFxcdC8qIGZhaWx1cmUgYXQgYm9vdCBpcyBmYXRhbCAqL1xcbm1tL3Ztc2Nhbi5jOjc3NDI6XFx0XFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gc3RhcnQga3N3YXBkIG9uIG5vZGUgJWQsIHJldD0lcGVcXFxcblxcXCIsXFxubW0vdm1zY2FuLmM6Nzc0MzpcXHRcXHRcXHRcXHQgICBuaWQsIHBnZGF0LVxcdTAwM2Vrc3dhcGQpO1xcbm1tL3Ztc2Nhbi5jLTc3NDQtXFx0XFx0XFx0QlVHX09OKHN5c3RlbV9zdGF0ZSBcXHUwMDNjIFNZU1RFTV9SVU5OSU5HKTtcXG5tbS92bXNjYW4uYzo3NzQ1OlxcdFxcdFxcdHBnZGF0LVxcdTAwM2Vrc3dhcGQgPSBOVUxMO1xcbm1tL3Ztc2Nhbi5jLTc3NDYtXFx0XFx0fSBlbHNlIHtcXG5tbS92bXNjYW4uYzo3NzQ3OlxcdFxcdFxcdHdha2VfdXBfcHJvY2VzcyhwZ2RhdC1cXHUwMDNla3N3YXBkKTtcXG5tbS92bXNjYW4uYy03NzQ4LVxcdFxcdH1cXG5tbS92bXNjYW4uYy03NzQ5LVxcdH1cXG5tbS92bXNjYW4uYzo3NzUwOlxcdHBnZGF0X2tzd2FwZF91bmxvY2socGdkYXQpO1xcbm1tL3Ztc2Nhbi5jLTc3NTEtfVxcbi0tXFxubW0vdm1zY2FuLmMtNzc1Ni0gKi9cXG5tbS92bXNjYW4uYzo3NzU3OnZvaWQgX19tZW1pbml0IGtzd2FwZF9zdG9wKGludCBuaWQpXFxubW0vdm1zY2FuLmMtNzc1OC17XFxubW0vdm1zY2FuLmMtNzc1OS1cXHRwZ19kYXRhX3QgKnBnZGF0ID0gTk9ERV9EQVRBKG5pZCk7XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjUyOjM0Ljc3ODExMTIyOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjI5MzU3NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgUmVjbGFpbSBQYXRocyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gdHJpZ2dlciBpbnRlcmVzdGluZyBtZW1vcnkgcmVjbGFpbSBwYXRocyB1c2luZyBzeXprYWxsZXIuIEkga25vdyBga3N3YXBkYCBpcyBhIHRocmVhZCBmdW5jdGlvbiwgc28gSSBjYW4ndCBjYWxsIGl0IGRpcmVjdGx5LiBCdXQgYHdha2V1cF9rc3dhcGRgIGlzIGNhbGxhYmxlLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gY29udHJvbCB0aGUgYGtzd2FwZGAgdGhyZWFkLlxuXG5Ob3csIHRoZSBtYWluIGZ1bmN0aW9ucyBJIHNob3VsZCBmb2N1cyBvbiBhcmUgYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQgYG5vZGVfcmVjbGFpbWAsIHNvIEkgc2hvdWxkIGluc3BlY3QgdGhvc2UgZnVuY3Rpb25zIGluIGBtbS92bXNjYW4uY2AgbW9yZSBjbG9zZWx5LiBXYWl0LCBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIGFjdHVhbGx5IGNhbGxlZCBieSBgX19hbGxvY19wYWdlc19zbG93cGF0aGAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AuLi4gVGhhdCdzIGEga2V5IGRldGFpbCEgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGlzIGxpa2VseSBjYWxsZWQgYnkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbWVtY2cgbGltaXRzLiBJIHRoaW5rIGBtZW1vcnlfaGlnaF93cml0ZWAgb3Igc2ltaWxhciBpbiBgbW0vbWVtY29udHJvbC5jYCBhcmUgcHJvYmFibHkgaW52b2x2ZWQuIGBub2RlX3JlY2xhaW1gIGlzIGFsc28gY3JpdGljYWwsIGFuZCBpdCdzIGNhbGxlZCBieSBgZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdGAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AuXG5cblNvIHRoZSBtb3N0IGVmZmVjdGl2ZSBmdXp6aW5nIHN0cmF0ZWd5IGlzIGNsZWFyOiBJIG5lZWQgdG8gdGFyZ2V0IG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBtZW1jZyBsaW1pdHMgdG8gaGl0IHRoZXNlIHJlY2xhaW0gcGF0aHMuIFRoZSBwYXRjaCBJJ20gZXhhbWluaW5nIG1vZGlmaWVzIGB0aHJvdHRsZV9pc29sYXRlZGAsIGFuZCB0aGF0J3MgY2FsbGVkIHdoZW4gdG9vIG1hbnkgcGFnZXMgYXJlIGJlaW5nIGlzb2xhdGVkLCBhbmQgdGhpcyBzaXR1YXRpb24gaGFwcGVucyB3aGVuIG11bHRpcGxlIHRocmVhZHMgYXJlIGNvbmN1cnJlbnRseSByZWNsYWltaW5nIG1lbW9yeS4gVGh1cywgZnV6emluZyB3aXRoIG1hbnkgdGhyZWFkcyBhbGxvY2F0aW5nIG1lbW9yeSBvciBoaXR0aW5nIG1lbWNnIGxpbWl0cyBpcyB0aGUgd2F5IHRvIGdvIGhlcmUuXG5cbk15IGZvY3VzIHNob3VsZCBiZSBvbiB0aGVzZSBrZXkgc3ltYm9sczogYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgbm9kZV9yZWNsYWltYCwgYW5kIGBzaHJpbmtfYWxsX21lbW9yeWAuIEl0J3Mgd29ydGggZG91YmxlLWNoZWNraW5nIHRoYXQgYHRyeV90b19mcmVlX3BhZ2VzYCBpcyBleHBvcnRlZCBvciByZWFjaGFibGUuIEl0J3MgY2FsbGVkIGJ5IGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCwgd2hpY2ggaXMgcmlnaHQgYXQgdGhlIGNvcmUgb2YgcGFnZSBhbGxvY2F0aW9uLiBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgaXMgZGVmaW5pdGVseSB0aWVkIHRvIG1lbWNnIHJlY2xhaW0uIFRpbWUgdG8gZ28gYmFjayB0byBgbW0vdm1zY2FuLmNgIGFuZCB0YWtlIGFub3RoZXIgbG9vayBhdCBgdGhyb3R0bGVfaXNvbGF0ZWRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzE1NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1Mjo0Mi40MDc0NzE3MDRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjc1OTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRocm90dGxlX2lzb2xhdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTE4MjI9c3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmaWxlLFxcbi0tXFxubW0vdm1zY2FuLmMtMTg1My1cXHRpZiAoIXRvb19tYW55KVxcbm1tL3Ztc2Nhbi5jOjE4NTQ6XFx0XFx0d2FrZV90aHJvdHRsZV9pc29sYXRlZChwZ2RhdCk7XFxubW0vdm1zY2FuLmMtMTg1NS1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTE4NjUtICovXFxubW0vdm1zY2FuLmM6MTg2NjpzdGF0aWMgYm9vbCB0aHJvdHRsZV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZpbGUsXFxubW0vdm1zY2FuLmMtMTg2Ny1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgYm9vbCAqZmF0YWwpXFxuLS1cXG5tbS92bXNjYW4uYz0yMDE0PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIwMjctXFxubW0vdm1zY2FuLmM6MjAyODpcXHRpZiAoIXRocm90dGxlX2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYywgXFx1MDAyNmZhdGFsKSkge1xcbm1tL3Ztc2Nhbi5jLTIwMjktXFx0XFx0LyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqL1xcbi0tXFxubW0vdm1zY2FuLmM9NDg5Nj1zdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5MTktXFx0dHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcXG5tbS92bXNjYW4uYzo0OTIwOlxcdGlmICghdGhyb3R0bGVfaXNvbGF0ZWQocGdkYXQsIHR5cGUsIHNjLCBcXHUwMDI2ZmF0YWwpKSB7XFxubW0vdm1zY2FuLmMtNDkyMS1cXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1Mjo0Mi40NTA3NTM1OTJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQyMjUyNDQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBgd2FrZV90aHJvdHRsZV9pc29sYXRlZGAgaXMgc2hvd2luZyB1cCBpbiB0aGUgb3V0cHV0LiBUaGF0IG1lYW5zIHRoaXMgcGF0Y2ggaXNuJ3QgKmludHJvZHVjaW5nKiBpdDsgaXQncyBlaXRoZXIgcHJlLWV4aXN0aW5nIG9yIGJlaW5nIGFkZGVkIGluIGEgZGlmZmVyZW50IHBhcnQgb2YgdGhlIHNlcmllcy4gR29vZCwgdGhhdCBjbGFyaWZpZXMgdGhpbmdzLlxuXG5MZXQncyBmb2N1cyBvbiB0aGUgYWN0dWFsIGNoYW5nZXMgaGVyZS4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSByZWZhY3RvcmluZyB0aGUgdGhyb3R0bGluZyBsb2dpYyByZWxhdGVkIHRvIGlzb2xhdGVkIGZvbGlvcy4gVGhleSd2ZSBtb3ZlZCB0aGUgbG9naWMgaW50byBhIG5ldyBmdW5jdGlvbiwgYHRocm90dGxlX2lzb2xhdGVkYCwgYW5kIGNydWNpYWxseSwgdGhleSdyZSBub3cgYXBwbHlpbmcgaXQgdG8gTUdMUlUncyBgZXZpY3RfZm9saW9zYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIG5vdyB0aGUgTUdMUlUgY29kZSBwYXRoIHdpbGwgYWxzbyB0aHJvdHRsZSB3aGVuIHRoZXJlIGFyZSB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MuIEl0IGFsc28gaW5jbHVkZXMgZmF0YWwgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyB0aGUgdGhyb3R0bGluZyBwcm9jZXNzLiBUaGlzIGlzIGEgbm90aWNlYWJsZSBpbXBhY3Qgb24gaG93IG1lbW9yeSByZWNsYWltIGJlaGF2ZXMuXG5cblRoaXMgYm9pbHMgZG93biB0bzpcblxuKiAgIFJlZmFjdG9yaW5nOiBTZXBhcmF0aW5nIG91dCB0aGUgdGhyb3R0bGluZyBsb2dpYy5cbiogICBGdW5jdGlvbmFsIENoYW5nZTogQXBwbHlpbmcgdGhpcyB0aHJvdHRsaW5nIHRvIE1HTFJVLCB3aGljaCBpcyBzaWduaWZpY2FudCwgcGx1cyBhIGNoYW5nZSBpbiBob3cgZmF0YWwgc2lnbmFscyBhcmUgaGFuZGxlZC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMsIHNwZWNpZmljYWxseSBgaW5pdC9LY29uZmlnYCBvciBgbW0vS2NvbmZpZ2AsIHRvIHZlcmlmeSB0aGF0IGBNRU1DR2AsIGBMUlVfR0VOYCwgYW5kIGBMUlVfR0VOX0VOQUJMRURgIGFyZSBzZXQgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQ4MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1Mjo0OC44NzMyODE3NjJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTU0NDU3NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA2Nz1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDc2LVxcbmluaXQvS2NvbmZpZzoxMDc3OmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDc4LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwODUtXFxuaW5pdC9LY29uZmlnOjEwODY6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA4Ny1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTA5Mi1cXG5pbml0L0tjb25maWc6MTA5Mzpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTA5NC1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTA5OS1cXG5pbml0L0tjb25maWc6MTEwMDpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTEwMS1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1Mjo1MC40Njg3MzQ3NzdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg3NTk1MDMyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb25zLCBzcGVjaWZpY2FsbHkgYE1FTUNHYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBhIGZldyBjcnVjaWFsIHN5bWJvbHM6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYG5vZGVfcmVjbGFpbWAsIGBzaHJpbmtfYWxsX21lbW9yeWAsIGFuZCBgd2FrZXVwX2tzd2FwZGAuIFRoZXNlIGFyZSB0aGUga2V5IHBsYXllcnMgaW4gdGhpcyBtZW1vcnkgZ2FtZS5cblxuR2l2ZW4gdGhhdCBJJ20gd29ya2luZyB3aXRoIGBzaHJpbmtfYWxsX21lbW9yeWAsIG15IGZpcnN0IG1vdmUgaXMgdG8gZGV0ZXJtaW5lIGlmIGl0cyBiZWhhdmlvciBpcyBjb250aW5nZW50IG9uIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHNldHRpbmdzLiBJdCdzIHZpdGFsIHRvIGtub3cgaWYgaXRzIGV4ZWN1dGlvbiBhbmQgb3V0Y29tZXMgYXJlIGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoZSBzZXR1cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIHVuaXZlcnNhbGx5IGFjdGl2ZSBvciBpZiBpdCdzIHNlbGVjdGl2ZWx5IGVuYWJsZWQgb3IgZGlzYWJsZWQgYmFzZWQgb24gdGhlIGVudmlyb25tZW50LiBVbmRlcnN0YW5kaW5nIHRoaXMgZGVwZW5kZW5jeSB3aWxsIGJlIGtleSB0byBkZWNpcGhlcmluZyBpdHMgb3ZlcmFsbCByb2xlIHdpdGhpbiB0aGlzIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NDY0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTI6NTUuMzQ0NjkwMjc5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjMzMDY1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfYWxsX21lbW9yeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz03Njg2PWJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2OTktICovXFxubW0vdm1zY2FuLmM6NzcwMDp1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcXG5tbS92bXNjYW4uYy03NzAxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTI6NTUuMzkxMDI2NjY4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTc2Nzc4NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgSGliZXJuYXRpb24tUmVsYXRlZCBDb2RlIGluIHZtc2Nhbi5jKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBtbS92bXNjYW4uY2AuIFNwZWNpZmljYWxseSwgSSdtIGludGVyZXN0ZWQgaW4gYSBjZXJ0YWluIHNlY3Rpb24sIHNvIEknbGwgemVybyBpbiBvbiB0aGUgdmljaW5pdHkgb2YgbGluZSA3NzAwLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBzZWUgaWYgdGhpcyBwYXJ0aWN1bGFyIHBpZWNlIG9mIGNvZGUgaXMgZ3VhcmRlZCBieSBhIGAjaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBJJ20gdHJ5aW5nIHRvIGRldGVybWluZSBpZiB0aGUgbG9naWMgSSdtIGludmVzdGlnYXRpbmcgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB0aGUgc3lzdGVtJ3MgaGliZXJuYXRpb24gY29uZmlndXJhdGlvbi4gVGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgcHJvYmxlbSBJJ20gdHJ5aW5nIHRvIHNvbHZlLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB3aWxsIGhlbHAgcGlucG9pbnQgaG93IHRoZSBzeXN0ZW0gYmVoYXZlcyB1bmRlciBkaWZmZXJlbnQgY2lyY3Vtc3RhbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU4NjQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1Mjo1OC43MDg3MDY4NTVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAxNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc2OTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc2OTA6XFx0XFxuNzY5MTpcXHQjaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OXFxuNzY5MjpcXHQvKlxcbjc2OTM6XFx0ICogVHJ5IHRvIGZyZWUgYG5yX3RvX3JlY2xhaW0nIG9mIG1lbW9yeSwgc3lzdGVtLXdpZGUsIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZlxcbjc2OTQ6XFx0ICogZnJlZWQgcGFnZXMuXFxuNzY5NTpcXHQgKlxcbjc2OTY6XFx0ICogUmF0aGVyIHRoYW4gdHJ5aW5nIHRvIGFnZSBMUlVzIHRoZSBhaW0gaXMgdG8gcHJlc2VydmUgdGhlIG92ZXJhbGxcXG43Njk3OlxcdCAqIExSVSBvcmRlciBieSByZWNsYWltaW5nIHByZWZlcmVudGlhbGx5XFxuNzY5ODpcXHQgKiBpbmFjdGl2ZSBcXHUwMDNlIGFjdGl2ZSBcXHUwMDNlIGFjdGl2ZSByZWZlcmVuY2VkIFxcdTAwM2UgYWN0aXZlIG1hcHBlZFxcbjc2OTk6XFx0ICovXFxuNzcwMDpcXHR1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcXG43NzAxOlxcdHtcXG43NzAyOlxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XFxuNzcwMzpcXHRcXHRcXHQubnJfdG9fcmVjbGFpbSA9IG5yX3RvX3JlY2xhaW0sXFxuNzcwNDpcXHRcXHRcXHQuZ2ZwX21hc2sgPSBHRlBfSElHSFVTRVJfTU9WQUJMRSxcXG43NzA1OlxcdFxcdFxcdC5yZWNsYWltX2lkeCA9IE1BWF9OUl9aT05FUyAtIDEsXFxuNzcwNjpcXHRcXHRcXHQucHJpb3JpdHkgPSBERUZfUFJJT1JJVFksXFxuNzcwNzpcXHRcXHRcXHQubWF5X3dyaXRlcGFnZSA9IDEsXFxuNzcwODpcXHRcXHRcXHQubWF5X3VubWFwID0gMSxcXG43NzA5OlxcdFxcdFxcdC5tYXlfc3dhcCA9IDEsXFxuNzcxMDpcXHRcXHRcXHQuaGliZXJuYXRpb25fbW9kZSA9IDEsXFxuNzcxMTpcXHRcXHR9O1xcbjc3MTI6XFx0XFx0c3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCA9IG5vZGVfem9uZWxpc3QobnVtYV9ub2RlX2lkKCksIHNjLmdmcF9tYXNrKTtcXG43NzEzOlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkO1xcbjc3MTQ6XFx0XFx0dW5zaWduZWQgaW50IG5vcmVjbGFpbV9mbGFnO1xcbjc3MTU6XFx0XFxuNzcxNjpcXHRcXHRmc19yZWNsYWltX2FjcXVpcmUoc2MuZ2ZwX21hc2spO1xcbjc3MTc6XFx0XFx0bm9yZWNsYWltX2ZsYWcgPSBtZW1hbGxvY19ub3JlY2xhaW1fc2F2ZSgpO1xcbjc3MTg6XFx0XFx0c2V0X3Rhc2tfcmVjbGFpbV9zdGF0ZShjdXJyZW50LCBcXHUwMDI2c2MucmVjbGFpbV9zdGF0ZSk7XFxuNzcxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTI6NTguNzA5NTEzODU0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNDcwMjc3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXBwcm9hY2ggdG8gSGliZXJuYXRpb24gTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgd2UncmUgaGFuZGxpbmcgbWVtb3J5IHJlY2xhaW0gZHVyaW5nIGhpYmVybmF0aW9uLCBhbmQgaXQncyBhbGwgdHVja2VkIGF3YXkgdW5kZXIgYENPTkZJR19ISUJFUk5BVElPTmAuIFRoYXQncyB0aGUga2V5LiBOb3csIHRoZSBxdWVzdGlvbiBpcywgaG93IGRvIHdlIGJlc3QgaGFuZGxlIHRoZSBtZW1vcnkgc2hyaW5raW5nIGFzcGVjdD8gSSBzZWUgdHdvIHByaW1hcnkgcGF0aHMgZm9yd2FyZC5cblxuT3B0aW9uIG9uZTogV2UgY291bGQgZXhwbGljaXRseSBhZGQgYEhJQkVSTkFUSU9OYCB0byBgRW5hYmxlQ29uZmlnc2AsIGJ1dCBJJ20gbGVhbmluZyB0b3dhcmQgYSBzaW1wbGVyIGFwcHJvYWNoLiBJIHRoaW5rIHdlIGNhbiBwcm9iYWJseSBqdXN0IG9taXQgdGhlIGBzaHJpbmtfYWxsX21lbW9yeWAgY2FsbCBhbHRvZ2V0aGVyLiBUaGlzIHdvdWxkIG1lYW4gcmVseWluZyBwcmltYXJpbHkgb24gdGhlIGJ1aWx0LWluIG1lY2hhbmlzbXMsIG5hbWVseSBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGFuZCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AuIFRob3NlIHNlZW0gdG8gYmUgdGhlIHR5cGljYWwsIG1vc3Qtb2Z0ZW4tdXNlZCBwYXRocyBpbiBtb3N0IHN5c3RlbXMuIFRoYXQgd291bGQgcHJvdmlkZSBnb29kIHN1cHBvcnQgZm9yIHRoZSBnZW5lcmFsIGNhc2VzLlxuXG5XaGlsZSBJJ20gaGVyZSwgSSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgYG5vZGVfcmVjbGFpbWAgaXMgYmVoYXZpbmcgY29ycmVjdGx5IGluIHRoaXMgY29udGV4dCwgdG9vLiBJdOKAmXMgb2J2aW91c2x5IGRlcGVuZGVudCBvbiBgQ09ORklHX05VTUFgLCBzbyBJ4oCZbGwgbWFrZSBzdXJlIHRvIGRvdWJsZS1jaGVjayB0aGF0IGludGVyYWN0aW9uIGFzIHdlbGwuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjU3NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjUzOjA0Ljc1NjU0NTY4NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2MDc1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibm9kZV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTYyODY9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNjI4Ny17XFxubW0vdm1zY2FuLmM6NjI4ODpcXHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZCwgbnJfc2Nhbm5lZCwgbnJfbm9kZV9yZWNsYWltZWQ7XFxubW0vdm1zY2FuLmMtNjI4OS1cXHRzdHJ1Y3QgbHJ1dmVjICp0YXJnZXRfbHJ1dmVjO1xcbi0tXFxubW0vdm1zY2FuLmMtNjMxNC1cXG5tbS92bXNjYW4uYzo2MzE1OlxcdG5yX25vZGVfcmVjbGFpbWVkID0gc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCAtIG5yX3JlY2xhaW1lZDtcXG5tbS92bXNjYW4uYy02MzE2LVxcbi0tXFxubW0vdm1zY2FuLmMtNjMxOS1cXHRcXHR2bXByZXNzdXJlKHNjLVxcdTAwM2VnZnBfbWFzaywgc2MtXFx1MDAzZW9yZGVyLCBzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsIHRydWUsXFxubW0vdm1zY2FuLmM6NjMyMDpcXHRcXHRcXHQgICBzYy1cXHUwMDNlbnJfc2Nhbm5lZCAtIG5yX3NjYW5uZWQsIG5yX25vZGVfcmVjbGFpbWVkKTtcXG5tbS92bXNjYW4uYy02MzIxLVxcbm1tL3Ztc2Nhbi5jOjYzMjI6XFx0aWYgKG5yX25vZGVfcmVjbGFpbWVkKVxcbm1tL3Ztc2Nhbi5jLTYzMjMtXFx0XFx0cmVjbGFpbWFibGUgPSB0cnVlO1xcbi0tXFxubW0vdm1zY2FuLmMtNjM4My1cXG5tbS92bXNjYW4uYzo2Mzg0OlxcdGlmIChzaG91bGRfY29udGludWVfcmVjbGFpbShwZ2RhdCwgbnJfbm9kZV9yZWNsYWltZWQsIHNjKSlcXG5tbS92bXNjYW4uYy02Mzg1LVxcdFxcdGdvdG8gYWdhaW47XFxuLS1cXG5tbS92bXNjYW4uYz03NzcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHZtc2Nhbl9zeXNjdGxfdGFibGVbXSA9IHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc3ODMtXFx0XFx0LnByb2NuYW1lXFx0PSBcXFwiem9uZV9yZWNsYWltX21vZGVcXFwiLFxcbm1tL3Ztc2Nhbi5jOjc3ODQ6XFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZub2RlX3JlY2xhaW1fbW9kZSxcXG5tbS92bXNjYW4uYzo3Nzg1OlxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihub2RlX3JlY2xhaW1fbW9kZSksXFxubW0vdm1zY2FuLmMtNzc4Ni1cXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc4MDM9bW9kdWxlX2luaXQoa3N3YXBkX2luaXQpXFxuLS1cXG5tbS92bXNjYW4uYy03ODA4LSAqXFxubW0vdm1zY2FuLmM6NzgwOTogKiBJZiBub24temVybyBjYWxsIG5vZGVfcmVjbGFpbSB3aGVuIHRoZSBudW1iZXIgb2YgZnJlZSBwYWdlcyBmYWxscyBiZWxvd1xcbm1tL3Ztc2Nhbi5jLTc4MTAtICogdGhlIHdhdGVybWFya3MuXFxubW0vdm1zY2FuLmMtNzgxMS0gKi9cXG5tbS92bXNjYW4uYzo3ODEyOmludCBub2RlX3JlY2xhaW1fbW9kZSBfX3JlYWRfbW9zdGx5O1xcbm1tL3Ztc2Nhbi5jLTc4MTMtXFxuLS1cXG5tbS92bXNjYW4uYy03ODIxLS8qXFxubW0vdm1zY2FuLmM6NzgyMjogKiBQZXJjZW50YWdlIG9mIHBhZ2VzIGluIGEgem9uZSB0aGF0IG11c3QgYmUgdW5tYXBwZWQgZm9yIG5vZGVfcmVjbGFpbSB0b1xcbm1tL3Ztc2Nhbi5jLTc4MjMtICogb2NjdXIuXFxuLS1cXG5tbS92bXNjYW4uYz03ODQ4PXN0YXRpYyB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy03ODU4LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjc4NTk6XFx0aWYgKG5vZGVfcmVjbGFpbV9tb2RlIFxcdTAwMjYgUkVDTEFJTV9VTk1BUClcXG5tbS92bXNjYW4uYy03ODYwLVxcdFxcdG5yX3BhZ2VjYWNoZV9yZWNsYWltYWJsZSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfRklMRV9QQUdFUyk7XFxuLS1cXG5tbS92bXNjYW4uYy03ODc5LSAqL1xcbm1tL3Ztc2Nhbi5jOjc4ODA6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03ODgxLVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmMtNzg4Ny1cXG5tbS92bXNjYW4uYzo3ODg4OlxcdHRyYWNlX21tX3Ztc2Nhbl9ub2RlX3JlY2xhaW1fYmVnaW4ocGdkYXQtXFx1MDAzZW5vZGVfaWQsIHNjLVxcdTAwM2VvcmRlcixcXG5tbS92bXNjYW4uYy03ODg5LVxcdFxcdFxcdFxcdFxcdCAgIHNjLVxcdTAwM2VnZnBfbWFzayk7XFxuLS1cXG5tbS92bXNjYW4uYy03OTE3LVxcbm1tL3Ztc2Nhbi5jOjc5MTg6XFx0dHJhY2VfbW1fdm1zY2FuX25vZGVfcmVjbGFpbV9lbmQoc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCwgTlVMTCk7XFxubW0vdm1zY2FuLmMtNzkxOS1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc5MjItXFxubW0vdm1zY2FuLmM6NzkyMzp1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxcbm1tL3Ztc2Nhbi5jLTc5MjQte1xcbi0tXFxubW0vdm1zY2FuLmMtNzkzMi1cXHRcXHQucHJpb3JpdHkgPSBOT0RFX1JFQ0xBSU1fUFJJT1JJVFksXFxubW0vdm1zY2FuLmM6NzkzMzpcXHRcXHQubWF5X3dyaXRlcGFnZSA9ICEhKG5vZGVfcmVjbGFpbV9tb2RlIFxcdTAwMjYgUkVDTEFJTV9XUklURSksXFxubW0vdm1zY2FuLmM6NzkzNDpcXHRcXHQubWF5X3VubWFwID0gISEobm9kZV9yZWNsYWltX21vZGUgXFx1MDAyNiBSRUNMQUlNX1VOTUFQKSxcXG5tbS92bXNjYW4uYy03OTM1LVxcdFxcdC5tYXlfc3dhcCA9IDEsXFxuLS1cXG5tbS92bXNjYW4uYy03OTcxLVxcbm1tL3Ztc2Nhbi5jOjc5NzI6XFx0cmV0ID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIG5yX3BhZ2VzLCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTc5NzMtXFx0Y2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXFx1MDAyNnBnZGF0LVxcdTAwM2VmbGFncyk7XFxuLS1cXG5tbS92bXNjYW4uYy03OTg0LVxcbm1tL3Ztc2Nhbi5jOjc5ODU6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03OTg2LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmM9ODAwNT1pbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuLS1cXG5tbS92bXNjYW4uYy04MDk3LVxcbm1tL3Ztc2Nhbi5jOjgwOTg6XFx0XFx0XFx0cmVjbGFpbWVkID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGJhdGNoX3NpemUsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtODA5OS1cXHRcXHRcXHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcXHUwMDI2cGdkYXQtXFx1MDAzZWZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTM6MDQuODAzMTYwMTIzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTU0MzExODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBGb2N1czogTlVNQSBhbmQgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBgbm9kZV9yZWNsYWltYCByZWxpZXMgb24gYENPTkZJR19OVU1BYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZSBpbiB0aGUgY29udGV4dCBvZiBOb24tVW5pZm9ybSBNZW1vcnkgQWNjZXNzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBOVU1BYCBpcyBwcm9wZXJseSBlbmFibGVkLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBhZGQgYE5VTUFgIHRvIG15IGBFbmFibGVDb25maWdzYCBsaXN0LiBUaGF0IGxpc3QgaXMgZ3Jvd2luZywgaXQncyBub3c6XG5cbiogICBgTFJVX0dFTmBcbiogICBgTFJVX0dFTl9FTkFCTEVEYFxuKiAgIGBNRU1DR2BcbiogICBgTlVNQWBcblxuTm93LCBJIG5lZWQgdG8gcmVhbGx5IGRpZyBpbnRvIHdoYXQncyBoYXBwZW5pbmcuIFRoZSBrZXkgc3ltYm9scyBJJ20gZm9jdXNpbmcgb24gYXJlOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBub2RlX3JlY2xhaW1gLCBhbmQgYHdha2V1cF9rc3dhcGRgLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIsIGVzcGVjaWFsbHkgY29uY2VybmluZyBOVU1BIGFyY2hpdGVjdHVyZXMuIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gY2hlY2sgYW5kIGNvbmZpcm0gaWYgYHdha2V1cF9rc3dhcGRgIGlzIGV4cG9ydGVkLCBhcyB0aGF0J3MgYSBrZXkgZnVuY3Rpb24gaW4gdGhlIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDYzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjUzOjA4LjY1ODU5NDIyNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNzM3NDAwOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qd2FrZXVwX2tzd2FwZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjUzOjEwLjc5NTk3NTUyNFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mjg2NjczMDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQ6IFVucmF2ZWxpbmcgdGhlICdOb3QtU3RhdGljLCBCdXQgTm90LUV4cG9ydGVkJyBNeXN0ZXJ5KipcblxuUmlnaHQsIHNvIHRoaXMgdGhpbmcgSSdtIGxvb2tpbmcgYXQgaXNuJ3QgKmV4cG9ydGVkKiDigJMgdGhhdCdzIHRoZSBmaXJzdCBjbHVlLiBCdXQgaXQncyBhbHNvICpub3QqIHN0YXRpYywgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBoYXMgdG8gYmUgY2FsbGVkIGZyb20gKnNvbWV3aGVyZSogd2l0aGluIHRoZSBrZXJuZWwsIGFuZCB0aGUgaGludCBwb2ludHMgZGlyZWN0bHkgdG8gYG1tL3BhZ2VfYWxsb2MuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIGxldCdzIHRyYWNlIHRoaXMgYmFjayB0byB0aGUgY2FsbGVyLlwiXG5cblRoZSBmYWN0IHRoYXQgaXQncyBjYWxsZWQgZnJvbSB3aXRoaW4gcGFnZV9hbGxvYyBpcyBpbnRlcmVzdGluZywgdGhpcyBpcyBhIGNvcmUgY29tcG9uZW50LiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjYWxsIGdyYXBoIGFuZCBmb2xsb3cgdGhlIHBhdGggdGhpcyBjb2RlIGlzIGZvbGxvd2luZy4gVGhlIGtleSBub3cgaXMgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBpbnRlcm5hbCwgbm9uLXN0YXRpYyBmdW5jdGlvbiBpbnRlZ3JhdGVzIHdpdGggdGhlIHBhZ2UgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcHJvY2Vzcy4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGB0cnlfdG9fZnJlZV9wYWdlc2AuIFRoYXQncyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyB0byBzcGVhay4gVW5kZXJzdGFuZGluZyB0aGlzIG1vZHVsZSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODg1MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjUzOjE3LjA4MjY1MTU0N1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1MjU2NTA3NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qdHJ5X3RvX2ZyZWVfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1MzoxOS4wMzUyMjc3ODJaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg4NDAzMTg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBhIE1lbW9yeSBBbGxvY2F0aW9uIEZ1bmN0aW9uJ3MgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgSSdtIGRpZ2dpbmcgaW50byBzb21ldGhpbmcgaGVyZS4gTG9va3MgbGlrZSB0aGVyZSdzIHNvbWUgY29kZSB0aGF0IGlzbid0IGJlaW5nIGRpcmVjdGx5IGV4cG9ydGVkLCBtZWFuaW5nIGl0J3Mgb25seSBiZWluZyBjYWxsZWQgaW50ZXJuYWxseSB3aXRoaW4gdGhlIGtlcm5lbC4gSXQncyBjYWxsZWQgZnJvbSBgbW0vcGFnZV9hbGxvYy5jYCwgc28gaXQncyBjbGVhcmx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgYWxsb2NhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgY29kZSBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS5cblxuVGhlIGZ1bmN0aW9uIEkgbmVlZCB0byBsb29rIGF0IGlzIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBpdCdzIHRyeWluZyB0byBhY2NvbXBsaXNoLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdC4gUGVyaGFwcyBpdCdzIHBhcnQgb2YgYSBtZWNoYW5pc20gZm9yIHJlY2xhaW1pbmcgbWVtb3J5IHdpdGhpbiBhIG1lbW9yeSBjZ3JvdXAsIG9yIG1heWJlIGl0J3MgaGFuZGxpbmcgc29tZSBlZGdlIGNhc2UgcmVsYXRlZCB0byBmcmVlaW5nIHBhZ2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSB0byBkZXRlcm1pbmUgaWYgaXQgaGFzIGFueSByZWxldmFuY2UgdG8gdGhlIHByb2JsZW0gSSdtIHRyeWluZyB0byBzb2x2ZS4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHNpdGVzIHRvIGZpbmQgb3V0IHByZWNpc2VseSB3aGVyZSBhbmQgd2hlbiBpdCBnZXRzIGludm9rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MTc0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTM6MjguOTE5MjYzMDQ0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg3NjUyNDA0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLip0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTM6MzAuOTA2OTI0MTU4WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDIwNzA4MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1lbW9yeSBSZWNsYWltIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSB0YWtlbiBhIGxvb2sgYXQgdGhpcyBwYXRjaCwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgYWRkcmVzc2luZyBhIGNyaXRpY2FsIGFyZWEgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoZSBmYWN0IHRoYXQgaXQncyB0b3VjaGluZyBgbW0vdm1zY2FuLmNgIGltbWVkaWF0ZWx5IHNpZ25hbHMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGNvcmUgb2YgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtZW1vcnkgcHJlc3N1cmUgYW5kIHJlY2xhbWF0aW9uLlxuXG5TcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIHRocm90dGxlIHJlY2xhaW1lcnMgd2hlbiBhIHN1YnN0YW50aWFsIG51bWJlciBvZiBmb2xpb3MgYXJlIGluIGFuIGlzb2xhdGVkIHN0YXRlLiBUaGlzIGlzIGVzcGVjaWFsbHkgcmVsZXZhbnQgdG8gTXVsdGktR2VuIExSVSAoTUdMUlUpLCBhcyB0aGUgY29kZSBub3cgKmNvcnJlY3RseSogYWNjb3VudHMgZm9yIHRoZXNlIGlzb2xhdGVkIHBhZ2VzLiBUaGUgaW50cm9kdWN0aW9uIG9mIGB0aHJvdHRsZV9pc29sYXRlZGAgYW5kIGl0cyBpbnRlZ3JhdGlvbiBpbnRvIGJvdGggYHNocmlua19pbmFjdGl2ZV9saXN0YCAoZm9yIHRoZSBsZWdhY3kgTFJVKSBhbmQgYGV2aWN0X2ZvbGlvc2AgKGZvciBNR0xSVSkgaW1wbGllcyBhIGZ1bmRhbWVudGFsIGltcHJvdmVtZW50IGluIGhvdyB0aGUga2VybmVsIHJlc3BvbmRzIHRvIHNpdHVhdGlvbnMgd2hlcmUgY29uY3VycmVudCByZWNsYWltIGlzIGNhdXNpbmcgcHJvYmxlbXMsIHBvdGVudGlhbGx5IHByZXZlbnRpbmcgT3V0LW9mLU1lbW9yeSAoT09NKSBjb25kaXRpb25zIGFuZCB0aHJhc2hpbmcuIEkgYW0gYWxzbyB0aGlua2luZyB0aGF0IGBfX21vZF9ub2RlX3BhZ2Vfc3RhdGVgIGFuZCBgbW9kX25vZGVfcGFnZV9zdGF0ZWAgYXJlIGltcG9ydGFudCwgaGVyZS5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCBzZWVtcyBsaWtlIHRoZSBwYXRjaCdzIHB1cnBvc2UgaXMgdG8gbWFuYWdlIG1lbW9yeSByZWNsYWltIGluIGEgbW9yZSBlZmZpY2llbnQgbWFubmVyLCBwYXJ0aWN1bGFybHkgd2hlbiBmYWNlZCB3aXRoIGEgaGlnaCBudW1iZXIgb2YgY29uY3VycmVudCB0aHJlYWRzIHZ5aW5nIGZvciBtZW1vcnkuIEkgYmVsaWV2ZSB0aGlzIHdpbGwgbWFrZSBvdXIgc3lzdGVtcyBtb3JlIHJvYnVzdC4gSXQncyBsaWtlbHkgdHJ5aW5nIHRvIGF2b2lkIGEgc2NlbmFyaW8gd2hlcmUgdGhlIExSVSBsaXN0IGJlY29tZXMgdG9vIHNtYWxsLCByZXN1bHRpbmcgaW4gdGhlIHN5c3RlbSBzd2FwcGluZyB1bm5lY2Vzc2FyaWx5IGFuZCBmdXJ0aGVyIGV4YWNlcmJhdGluZyB0aGUgbWVtb3J5IHByZXNzdXJlLlxuXG5Db25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBtZW1vcnkgbWFuYWdlbWVudCwgZXNwZWNpYWxseSBpbiBOVU1BIG9yIE1FTUNHIGVudmlyb25tZW50cywgSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgaXMgc29tZXRoaW5nIHRoYXQgbmVlZHMgYSB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduIHRvIGVuc3VyZSBzdGFiaWxpdHkgYW5kIGNhdGNoIGFueSBzdWJ0bGUgcmVncmVzc2lvbnMuIFRoaXMgY2hhbmdlIHdpbGwgbGlrZWx5IGludGVyYWN0IHdpdGg6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYG5vZGVfcmVjbGFpbWAsIGFuZCBgd2FrZXVwX2tzd2FwZGAuXG5cblNvLCB5ZWFoLCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTAxLCJPdXRwdXRUb2tlbnMiOjE5MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1Mzo0MS45Mjc2MzQ1NThaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTI2MjA0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV90b19mcmVlX3BhZ2VzXCIsXG4gICAgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gICAgXCJub2RlX3JlY2xhaW1cIixcbiAgICBcIndha2V1cF9rc3dhcGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgLiBJdCBpbnRyb2R1Y2VzIGB0aHJvdHRsZV9pc29sYXRlZCgpYCB0byB0aHJvdHRsZSByZWNsYWltZXJzIHdoZW4gdG9vIG1hbnkgZm9saW9zIGFyZSBpc29sYXRlZCwgYW5kIGFwcGxpZXMgdGhpcyBsb2dpYyB0byBib3RoIHRoZSBsZWdhY3kgTFJVIChgc2hyaW5rX2luYWN0aXZlX2xpc3RgKSBhbmQgdGhlIE11bHRpLUdlbiBMUlUgKGBldmljdF9mb2xpb3NgKS4gSXQgYWxzbyBhZGRzIGFjY291bnRpbmcgZm9yIGlzb2xhdGVkIGZvbGlvcyBpbiBNR0xSVS4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIG1lbW9yeSBwcmVzc3VyZSBhbmQgY29uY3VycmVudCBwYWdlIHJlY2xhaW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV90b19mcmVlX3BhZ2VzXCIsXG4gICAgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gICAgXCJub2RlX3JlY2xhaW1cIixcbiAgICBcIndha2V1cF9rc3dhcGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgLiBJdCBpbnRyb2R1Y2VzIGB0aHJvdHRsZV9pc29sYXRlZCgpYCB0byB0aHJvdHRsZSByZWNsYWltZXJzIHdoZW4gdG9vIG1hbnkgZm9saW9zIGFyZSBpc29sYXRlZCwgYW5kIGFwcGxpZXMgdGhpcyBsb2dpYyB0byBib3RoIHRoZSBsZWdhY3kgTFJVIChgc2hyaW5rX2luYWN0aXZlX2xpc3RgKSBhbmQgdGhlIE11bHRpLUdlbiBMUlUgKGBldmljdF9mb2xpb3NgKS4gSXQgYWxzbyBhZGRzIGFjY291bnRpbmcgZm9yIGlzb2xhdGVkIGZvbGlvcyBpbiBNR0xSVS4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIG1lbW9yeSBwcmVzc3VyZSBhbmQgY29uY3VycmVudCBwYWdlIHJlY2xhaW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjUzOjQyLjAwODkwNzI4NloiLCJTZXEiOjQzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2ODAxMjQxNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1Mzo0Mi4wMDk4NDg4MjZaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTE2NzkxNzc4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgcGFnZSByZWNsYWltIHRocm90dGxpbmcgbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYCBieSBpbnRyb2R1Y2luZyBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gYHRocm90dGxlX2lzb2xhdGVkYC4gSXQgdXNlcyBhIGxvY2FsIGJvb2xlYW4gdmFyaWFibGUgYGZhdGFsYCBwYXNzZWQgYnkgcmVmZXJlbmNlIHRvIHRyYWNrIGlmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcuIFRoZSB2YXJpYWJsZSBgZmF0YWxgIGlzIHVuY29uZGl0aW9uYWxseSBpbml0aWFsaXplZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGB0aHJvdHRsZV9pc29sYXRlZGAgYmVmb3JlIGFueSByZWFkcyBvY2N1ci4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGxlYXZlIGFueSBmaWVsZHMgdW5pbml0aWFsaXplZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsb2dpYyBlcnJvcnMsIHVzZS1hZnRlci1mcmVlLCBvciBkZWFkbG9ja3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgb3Igb3RoZXIgZGVmYXVsdCBzYW5pdGl6ZXJzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTYzMmQ4ZWMyMzlkZmFiYmRjZmZmZmQ1NTg0OWRiMDM1MjI5OWE1OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDA3OjUxOjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggYzE0MDRhNTk1MjNkNi4uODg2YTUzZjU2M2FiNyAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTE4MTksNyArMTgxOSw3IEBAIGJvb2wgZm9saW9faXNvbGF0ZV9scnUoc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKiB0aGUgTFJVIGxpc3Qgd2lsbCBnbyBzbWFsbCBhbmQgYmUgc2Nhbm5lZCBmYXN0ZXIgdGhhbiBuZWNlc3NhcnksIGxlYWRpbmcgdG9cbiAgKiB1bm5lY2Vzc2FyeSBzd2FwcGluZywgdGhyYXNoaW5nIGFuZCBPT00uXG4gICovXG4tc3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgaW50IGZpbGUsXG4rc3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmaWxlLFxuIFx0XHRzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGluYWN0aXZlLCBpc29sYXRlZDtcbkBAIC0xODU2LDYgKzE4NTYsMzcgQEAgc3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgaW50IGZpbGUsXG4gXHRyZXR1cm4gdG9vX21hbnk7XG4gfVxuIFxuKy8qXG4rICogVGhyb3R0bGUgcmVjbGFpbSBpZiB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MgYXJlIHBpbGluZyB1cC4gSWYgdGhpcyBtYWtlc1xuKyAqIG5vIHByb2dyZXNzLCB0aGUgY2FsbGVyIGlzIHByb2JhYmx5IGxvb3Bpbmcgb24gdW5ldmljdGFibGUgZm9saW9zLCBzbyBnaXZlXG4rICogdXAuIFJldHVybnMgZmFsc2UgdG8gdGVsbCB0aGUgY2FsbGVyIHRvIHN0b3AgcmVjbGFpbWluZywgYW5kIHNldHMgQGZhdGFsXG4rICogaWYgdGhlIHRhc2sgcmVjZWl2ZWQgYSBmYXRhbCBzaWduYWwgd2hpbGUgd2FpdGluZywgc28gdGhhdCB0aGUgY2FsbGVyIGNhblxuKyAqIGJhaWwgb3V0IGZhc3Rlci5cbisgKi9cbitzdGF0aWMgYm9vbCB0aHJvdHRsZV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZpbGUsXG4rXHRcdFx0ICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGJvb2wgKmZhdGFsKVxuK3tcbitcdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xuK1xuK1x0KmZhdGFsID0gZmFsc2U7XG4rXHR3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHtcbitcdFx0aWYgKHN0YWxsZWQpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0XHQvKiB3YWl0IGEgYml0IGZvciB0aGUgcmVjbGFpbWVyLiAqL1xuK1x0XHRzdGFsbGVkID0gdHJ1ZTtcbitcdFx0cmVjbGFpbV90aHJvdHRsZShwZ2RhdCwgVk1TQ0FOX1RIUk9UVExFX0lTT0xBVEVEKTtcbitcbitcdFx0LyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqL1xuK1x0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbitcdFx0XHQqZmF0YWwgPSB0cnVlO1xuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIC8qXG4gICogbW92ZV9mb2xpb3NfdG9fbHJ1KCkgbW92ZXMgZm9saW9zIGZyb20gcHJpdmF0ZSBAbGlzdCB0byBhcHByb3ByaWF0ZSBMUlUgbGlzdC5cbiAgKlxuQEAgLTE5OTIsMTkgKzIwMjMsMTQgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIFx0Ym9vbCBmaWxlID0gaXNfZmlsZV9scnUobHJ1KTtcbiBcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbi1cdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xuLVxuLVx0d2hpbGUgKHVubGlrZWx5KHRvb19tYW55X2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYykpKSB7XG4tXHRcdGlmIChzdGFsbGVkKVxuLVx0XHRcdHJldHVybiAwO1xuLVxuLVx0XHQvKiB3YWl0IGEgYml0IGZvciB0aGUgcmVjbGFpbWVyLiAqL1xuLVx0XHRzdGFsbGVkID0gdHJ1ZTtcbi1cdFx0cmVjbGFpbV90aHJvdHRsZShwZ2RhdCwgVk1TQ0FOX1RIUk9UVExFX0lTT0xBVEVEKTtcbitcdGJvb2wgZmF0YWw7XG4gXG4rXHRpZiAoIXRocm90dGxlX2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYywgXHUwMDI2ZmF0YWwpKSB7XG4gXHRcdC8qIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gUmV0dXJuIG5vdy4gKi9cbi1cdFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuK1x0XHRpZiAoZmF0YWwpXG4gXHRcdFx0cmV0dXJuIFNXQVBfQ0xVU1RFUl9NQVg7XG4rXG4rXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIFx0bHJ1X2FkZF9kcmFpbigpO1xuQEAgLTQ4ODMsNiArNDkwOSwyNSBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdGJvb2wgc2tpcF9yZXRyeSA9IGZhbHNlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG4rXHRib29sIGZhdGFsO1xuK1xuK1x0LypcbitcdCAqIFRoZSB0eXBlIHRvIGlzb2xhdGUgaXMgdW5rbm93biB1bnRpbCBpc29sYXRpb24sIHNvIHByZWRpY3QgaXQgZm9yXG4rXHQgKiB0aGUgdGhyb3R0bGluZyBjaGVjay4gaXNvbGF0ZV9mb2xpb3MoKSBtYXkgc3RpbGwgZmFsbCBiYWNrIHRvIHRoZVxuK1x0ICogb3RoZXIgdHlwZSwgd2hpY2ggaXMgZmluZSBmb3IgdGhpcyBoZXVyaXN0aWMuXG4rXHQgKi9cbitcdHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7XG4rXHRpZiAoIXRocm90dGxlX2lzb2xhdGVkKHBnZGF0LCB0eXBlLCBzYywgXHUwMDI2ZmF0YWwpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gTGlrZSB0aGUgbGVnYWN5XG4rXHRcdCAqIHBhdGgsIHByZXRlbmQgc29tZSBwYWdlcyB3ZXJlIHJlY2xhaW1lZCBzbyByZWNsYWltIHVud2luZHNcbitcdFx0ICogcXVpY2tseSBpbnN0ZWFkIG9mIGxvb3BpbmcgYmFjayBpbnRvIHRoZSB0aHJvdHRsZS5cbitcdFx0ICovXG4rXHRcdGlmIChmYXRhbClcbitcdFx0XHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgKz0gU1dBUF9DTFVTVEVSX01BWDtcbitcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4gXG4gXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbiBcbkBAIC00ODkyLDYgKzQ5MzcsOSBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdHNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLFxuIFx0XHRcdFx0IFx1MDAyNmxpc3QsIFx1MDAyNmlzb2xhdGVkLCBcdTAwMjZ0eXBlLCBcdTAwMjZ0eXBlX3NjYW5uZWQpO1xuIFx0bnJfaXNvbGF0ZWQgPSBpc29sYXRlZDtcbitcdGlmIChucl9pc29sYXRlZClcbitcdFx0X19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICsgdHlwZSxcbitcdFx0XHRcdCAgICAgIG5yX2lzb2xhdGVkKTtcbiBcbiBcdC8qIFNjYW5uaW5nIG1heSBoYXZlIGVtcHRpZWQgdGhlIG9sZGVzdCBnZW4sIGZsdXNoIGl0ICovXG4gXHRpZiAoc2Nhbm5lZClcbkBAIC00OTU0LDYgKzUwMDIsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdGdvdG8gcmV0cnk7XG4gXHR9XG4gXG4rXHRpZiAobnJfaXNvbGF0ZWQpXG4rXHRcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyB0eXBlLFxuK1x0XHRcdFx0ICAgIC1ucl9pc29sYXRlZCk7XG4rXG4gXHRpZiAobnJfaXNvbGF0ZWQgXHUwMDNlIHRvdGFsX3JlY2xhaW1lZClcbiBcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gKyB0eXBlLFxuIFx0XHRcdFx0IG5yX2lzb2xhdGVkIC0gdG90YWxfcmVjbGFpbWVkKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjUzOjQyLjAwOTg1MTI5NVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTY3OTE1Mjk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW4gYG1tL3Ztc2Nhbi5jYCBsb29rcyBsaWtlIGl0J3MgcmVmYWN0b3JpbmcgdGhlIGlzb2xhdGVkIHBhZ2UgdGhyb3R0bGluZyBsb2dpYy4gTXkgbWFpbiBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggY2FuIGxlYWQgdG8gbmFzdHkgYnVncy4gTGV0J3MgYnJlYWsgZG93biB0aGUgYGZhdGFsYCB2YXJpYWJsZS4gVGhleSd2ZSBtb3ZlZCB0aGUgYHRvb19tYW55X2lzb2xhdGVkYCBjaGVjayBpbnRvIGEgbmV3IGB0aHJvdHRsZV9pc29sYXRlZGAgZnVuY3Rpb24gYW5kIG5vdyB0aGV5J3JlIHBhc3NpbmcgYSBgYm9vbCBmYXRhbGAgYnkgcmVmZXJlbmNlLiBJIG5lZWQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSBgZmF0YWxgIGlzIGFsd2F5cyBpbml0aWFsaXplZCBiZWZvcmUgaXQncyByZWFkLlxuXG5Mb29raW5nIGF0IGB0aHJvdHRsZV9pc29sYXRlZGAsIHRoZSB2ZXJ5IGZpcnN0IHRoaW5nIGl0IGRvZXMgaXMgc2V0IGAqZmF0YWwgPSBmYWxzZWAuIEdvb2QsIHRoYXQncyByZWFzc3VyaW5nLiBJdCBzZWVtcyBsaWtlIGl0J3MgYWx3YXlzIGluaXRpYWxpemVkLCB3aGV0aGVyIG9yIG5vdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgdHJ1ZWAgb3IgYGZhbHNlYC4gVGhlbiwgaW4gYm90aCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgZXZpY3RfZm9saW9zYCwgYGZhdGFsYCBpcyBvbmx5IHJlYWQgaWYgYHRocm90dGxlX2lzb2xhdGVkYCByZXR1cm5zIGBmYWxzZWAsIHdoaWNoIGlzIHdoZXJlIHRoZSByZXR1cm4gaGFwcGVucyBpbW1lZGlhdGVseSBhZnRlciB0aGUgYGZhdGFsYCB2YXJpYWJsZSBpcyBzZXQuXG5cbk9rYXksIHNvIEkgdGhpbmsgYGZhdGFsYCBpcyBmaW5lLCBidXQgSSBzaG91bGQgbG9vayBkZWVwZXIganVzdCBpbiBjYXNlLiBOb3cgdGhhdCBJIHRoaW5rIGFib3V0IGl0LCB0aGUgcGF0Y2ggZm9jdXNlcyBvbiBwYWdlIHJlY2xhaW0gYW5kIHRocm90dGxpbmcsIG5vdCBvbiBkYXRhIGNvcHlpbmcgb3IgY29tcGxleCBzdHJ1Y3RzLiBUaGUgYGZhdGFsYCB2YXJpYWJsZSBpcyBsb2NhbCBhbmQgZXhwbGljaXRseSBpbml0aWFsaXplZC4gSSdtIHJlYXNvbmFibHkgY29uZmlkZW50IHRoYXQgdGhpcyBpcyAqbm90KiBhIEtNU0FOIHNpdHVhdGlvbi4gS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHN1YnRsZSBpc3N1ZXMgbGlrZSB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcywgb3IgY29uY3VycmVuY3kgcHJvYmxlbXMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIGBldmljdF9mb2xpb3NgIGNoYW5nZXMuIFRoZXkgYXJlIHVwZGF0aW5nIHN0YXRpc3RpY3MgZm9yIGlzb2xhdGVkIHBhZ2VzLCB3aGljaCBzaG91bGQgYWxzbyBiZSBmaW5lLiBObyByZWQgZmxhZ3MgdGhlcmUgZWl0aGVyLiBBbGwgZ29vZC4gTm8gS01TQU4gbmVlZGVkIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTYsIk91dHB1dFRva2VucyI6MTg3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTM6NTMuNjg5MDA4NDU3WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHBhZ2UgcmVjbGFpbSB0aHJvdHRsaW5nIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AgYnkgaW50cm9kdWNpbmcgYSBuZXcgaGVscGVyIGZ1bmN0aW9uIGB0aHJvdHRsZV9pc29sYXRlZGAuIEl0IHVzZXMgYSBsb2NhbCBib29sZWFuIHZhcmlhYmxlIGBmYXRhbGAgcGFzc2VkIGJ5IHJlZmVyZW5jZSB0byB0cmFjayBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nLiBUaGUgdmFyaWFibGUgYGZhdGFsYCBpcyB1bmNvbmRpdGlvbmFsbHkgaW5pdGlhbGl6ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBgdGhyb3R0bGVfaXNvbGF0ZWRgIGJlZm9yZSBhbnkgcmVhZHMgb2NjdXIuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBsZWF2ZSBhbnkgZmllbGRzIHVuaW5pdGlhbGl6ZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbG9naWMgZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgZGVhZGxvY2tzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgcGFnZSByZWNsYWltIHRocm90dGxpbmcgbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYCBieSBpbnRyb2R1Y2luZyBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gYHRocm90dGxlX2lzb2xhdGVkYC4gSXQgdXNlcyBhIGxvY2FsIGJvb2xlYW4gdmFyaWFibGUgYGZhdGFsYCBwYXNzZWQgYnkgcmVmZXJlbmNlIHRvIHRyYWNrIGlmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcuIFRoZSB2YXJpYWJsZSBgZmF0YWxgIGlzIHVuY29uZGl0aW9uYWxseSBpbml0aWFsaXplZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGB0aHJvdHRsZV9pc29sYXRlZGAgYmVmb3JlIGFueSByZWFkcyBvY2N1ci4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGxlYXZlIGFueSBmaWVsZHMgdW5pbml0aWFsaXplZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsb2dpYyBlcnJvcnMsIHVzZS1hZnRlci1mcmVlLCBvciBkZWFkbG9ja3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgb3Igb3RoZXIgZGVmYXVsdCBzYW5pdGl6ZXJzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlbg7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 07:23:21 +0000 UTC FinishedAt: 2026-08-17 07:53:55 +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": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG", "NUMA" ], "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": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG", "NUMA" ], "series_id": "58c65a32-515c-4711-87e7-c69737ce7797" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "try_to_free_pages", "try_to_free_mem_cgroup_pages", "node_reclaim", "wakeup_kswapd" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgICAmIzM0O25vZGVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDt3YWtldXBfa3N3YXBkJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBwYWdlIHJlY2xhaW0gdGhyb3R0bGluZyBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIGJ5IGludHJvZHVjaW5nIGEgbmV3IGhlbHBlciBmdW5jdGlvbiBgdGhyb3R0bGVfaXNvbGF0ZWRgLiBJdCB1c2VzIGEgbG9jYWwgYm9vbGVhbiB2YXJpYWJsZSBgZmF0YWxgIHBhc3NlZCBieSByZWZlcmVuY2UgdG8gdHJhY2sgaWYgYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZy4gVGhlIHZhcmlhYmxlIGBmYXRhbGAgaXMgdW5jb25kaXRpb25hbGx5IGluaXRpYWxpemVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYHRocm90dGxlX2lzb2xhdGVkYCBiZWZvcmUgYW55IHJlYWRzIG9jY3VyLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbGVhdmUgYW55IGZpZWxkcyB1bmluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGxvZ2ljIGVycm9ycywgdXNlLWFmdGVyLWZyZWUsIG9yIGRlYWRsb2Nrcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBvciBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IHJlY2xhaW0gbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYC4gSXQgaW50cm9kdWNlcyBgdGhyb3R0bGVfaXNvbGF0ZWQoKWAgdG8gdGhyb3R0bGUgcmVjbGFpbWVycyB3aGVuIHRvbyBtYW55IGZvbGlvcyBhcmUgaXNvbGF0ZWQsIGFuZCBhcHBsaWVzIHRoaXMgbG9naWMgdG8gYm90aCB0aGUgbGVnYWN5IExSVSAoYHNocmlua19pbmFjdGl2ZV9saXN0YCkgYW5kIHRoZSBNdWx0aS1HZW4gTFJVIChgZXZpY3RfZm9saW9zYCkuIEl0IGFsc28gYWRkcyBhY2NvdW50aW5nIGZvciBpc29sYXRlZCBmb2xpb3MgaW4gTUdMUlUuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtZW1vcnkgcHJlc3N1cmUgYW5kIGNvbmN1cnJlbnQgcGFnZSByZWNsYWltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTYzMmQ4ZWMyMzlkZmFiYmRjZmZmZmQ1NTg0OWRiMDM1MjI5OWE1OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDA3OjUxOjM5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGMxNDA0YTU5NTIzZDYuLjg4NmE1M2Y1NjNhYjcgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC0xODE5LDcgJiM0MzsxODE5LDcgQEAgYm9vbCBmb2xpb19pc29sYXRlX2xydShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuICAqIHRoZSBMUlUgbGlzdCB3aWxsIGdvIHNtYWxsIGFuZCBiZSBzY2FubmVkIGZhc3RlciB0aGFuIG5lY2Vzc2FyeSwgbGVhZGluZyB0b1xuICAqIHVubmVjZXNzYXJ5IHN3YXBwaW5nLCB0aHJhc2hpbmcgYW5kIE9PTS5cbiAgKi9cbi1zdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSxcbiYjNDM7c3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmaWxlLFxuIFx0XHRzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGluYWN0aXZlLCBpc29sYXRlZDtcbkBAIC0xODU2LDYgJiM0MzsxODU2LDM3IEBAIHN0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGludCBmaWxlLFxuIFx0cmV0dXJuIHRvb19tYW55O1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogVGhyb3R0bGUgcmVjbGFpbSBpZiB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MgYXJlIHBpbGluZyB1cC4gSWYgdGhpcyBtYWtlc1xuJiM0MzsgKiBubyBwcm9ncmVzcywgdGhlIGNhbGxlciBpcyBwcm9iYWJseSBsb29waW5nIG9uIHVuZXZpY3RhYmxlIGZvbGlvcywgc28gZ2l2ZVxuJiM0MzsgKiB1cC4gUmV0dXJucyBmYWxzZSB0byB0ZWxsIHRoZSBjYWxsZXIgdG8gc3RvcCByZWNsYWltaW5nLCBhbmQgc2V0cyBAZmF0YWxcbiYjNDM7ICogaWYgdGhlIHRhc2sgcmVjZWl2ZWQgYSBmYXRhbCBzaWduYWwgd2hpbGUgd2FpdGluZywgc28gdGhhdCB0aGUgY2FsbGVyIGNhblxuJiM0MzsgKiBiYWlsIG91dCBmYXN0ZXIuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCB0aHJvdHRsZV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZpbGUsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBib29sICpmYXRhbClcbiYjNDM7e1xuJiM0MztcdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHQqZmF0YWwgPSBmYWxzZTtcbiYjNDM7XHR3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHtcbiYjNDM7XHRcdGlmIChzdGFsbGVkKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0Lyogd2FpdCBhIGJpdCBmb3IgdGhlIHJlY2xhaW1lci4gKi9cbiYjNDM7XHRcdHN0YWxsZWQgPSB0cnVlO1xuJiM0MztcdFx0cmVjbGFpbV90aHJvdHRsZShwZ2RhdCwgVk1TQ0FOX1RIUk9UVExFX0lTT0xBVEVEKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIFJldHVybiBub3cuICovXG4mIzQzO1x0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbiYjNDM7XHRcdFx0KmZhdGFsID0gdHJ1ZTtcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBtb3ZlX2ZvbGlvc190b19scnUoKSBtb3ZlcyBmb2xpb3MgZnJvbSBwcml2YXRlIEBsaXN0IHRvIGFwcHJvcHJpYXRlIExSVSBsaXN0LlxuICAqXG5AQCAtMTk5MiwxOSAmIzQzOzIwMjMsMTQgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIFx0Ym9vbCBmaWxlID0gaXNfZmlsZV9scnUobHJ1KTtcbiBcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbi1cdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xuLVxuLVx0d2hpbGUgKHVubGlrZWx5KHRvb19tYW55X2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYykpKSB7XG4tXHRcdGlmIChzdGFsbGVkKVxuLVx0XHRcdHJldHVybiAwO1xuLVxuLVx0XHQvKiB3YWl0IGEgYml0IGZvciB0aGUgcmVjbGFpbWVyLiAqL1xuLVx0XHRzdGFsbGVkID0gdHJ1ZTtcbi1cdFx0cmVjbGFpbV90aHJvdHRsZShwZ2RhdCwgVk1TQ0FOX1RIUk9UVExFX0lTT0xBVEVEKTtcbiYjNDM7XHRib29sIGZhdGFsO1xuIFxuJiM0MztcdGlmICghdGhyb3R0bGVfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjLCBcdTAwMjZmYXRhbCkpIHtcbiBcdFx0LyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqL1xuLVx0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4mIzQzO1x0XHRpZiAoZmF0YWwpXG4gXHRcdFx0cmV0dXJuIFNXQVBfQ0xVU1RFUl9NQVg7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4gXHRscnVfYWRkX2RyYWluKCk7XG5AQCAtNDg4Myw2ICYjNDM7NDkwOSwyNSBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdGJvb2wgc2tpcF9yZXRyeSA9IGZhbHNlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG4mIzQzO1x0Ym9vbCBmYXRhbDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgdHlwZSB0byBpc29sYXRlIGlzIHVua25vd24gdW50aWwgaXNvbGF0aW9uLCBzbyBwcmVkaWN0IGl0IGZvclxuJiM0MztcdCAqIHRoZSB0aHJvdHRsaW5nIGNoZWNrLiBpc29sYXRlX2ZvbGlvcygpIG1heSBzdGlsbCBmYWxsIGJhY2sgdG8gdGhlXG4mIzQzO1x0ICogb3RoZXIgdHlwZSwgd2hpY2ggaXMgZmluZSBmb3IgdGhpcyBoZXVyaXN0aWMuXG4mIzQzO1x0ICovXG4mIzQzO1x0dHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcbiYjNDM7XHRpZiAoIXRocm90dGxlX2lzb2xhdGVkKHBnZGF0LCB0eXBlLCBzYywgXHUwMDI2ZmF0YWwpKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBMaWtlIHRoZSBsZWdhY3lcbiYjNDM7XHRcdCAqIHBhdGgsIHByZXRlbmQgc29tZSBwYWdlcyB3ZXJlIHJlY2xhaW1lZCBzbyByZWNsYWltIHVud2luZHNcbiYjNDM7XHRcdCAqIHF1aWNrbHkgaW5zdGVhZCBvZiBsb29waW5nIGJhY2sgaW50byB0aGUgdGhyb3R0bGUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChmYXRhbClcbiYjNDM7XHRcdFx0c2MtXHUwMDNlbnJfcmVjbGFpbWVkICYjNDM7PSBTV0FQX0NMVVNURVJfTUFYO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiBcbiBcdGxydXZlY19sb2NrX2lycShscnV2ZWMpO1xuIFxuQEAgLTQ4OTIsNiAmIzQzOzQ5MzcsOSBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdHNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLFxuIFx0XHRcdFx0IFx1MDAyNmxpc3QsIFx1MDAyNmlzb2xhdGVkLCBcdTAwMjZ0eXBlLCBcdTAwMjZ0eXBlX3NjYW5uZWQpO1xuIFx0bnJfaXNvbGF0ZWQgPSBpc29sYXRlZDtcbiYjNDM7XHRpZiAobnJfaXNvbGF0ZWQpXG4mIzQzO1x0XHRfX21vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZSxcbiYjNDM7XHRcdFx0XHQgICAgICBucl9pc29sYXRlZCk7XG4gXG4gXHQvKiBTY2FubmluZyBtYXkgaGF2ZSBlbXB0aWVkIHRoZSBvbGRlc3QgZ2VuLCBmbHVzaCBpdCAqL1xuIFx0aWYgKHNjYW5uZWQpXG5AQCAtNDk1NCw2ICYjNDM7NTAwMiwxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0Z290byByZXRyeTtcbiBcdH1cbiBcbiYjNDM7XHRpZiAobnJfaXNvbGF0ZWQpXG4mIzQzO1x0XHRtb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IHR5cGUsXG4mIzQzO1x0XHRcdFx0ICAgIC1ucl9pc29sYXRlZCk7XG4mIzQzO1xuIFx0aWYgKG5yX2lzb2xhdGVkIFx1MDAzZSB0b3RhbF9yZWNsYWltZWQpXG4gXHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IHR5cGUsXG4gXHRcdFx0XHQgbnJfaXNvbGF0ZWQgLSB0b3RhbF9yZWNsYWltZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtOVU1BJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7LAogICAgJiMzNDtub2RlX3JlY2xhaW0mIzM0OywKICAgICYjMzQ7d2FrZXVwX2tzd2FwZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgLiBJdCBpbnRyb2R1Y2VzIGB0aHJvdHRsZV9pc29sYXRlZCgpYCB0byB0aHJvdHRsZSByZWNsYWltZXJzIHdoZW4gdG9vIG1hbnkgZm9saW9zIGFyZSBpc29sYXRlZCwgYW5kIGFwcGxpZXMgdGhpcyBsb2dpYyB0byBib3RoIHRoZSBsZWdhY3kgTFJVIChgc2hyaW5rX2luYWN0aXZlX2xpc3RgKSBhbmQgdGhlIE11bHRpLUdlbiBMUlUgKGBldmljdF9mb2xpb3NgKS4gSXQgYWxzbyBhZGRzIGFjY291bnRpbmcgZm9yIGlzb2xhdGVkIGZvbGlvcyBpbiBNR0xSVS4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIG1lbW9yeSBwcmVzc3VyZSBhbmQgY29uY3VycmVudCBwYWdlIHJlY2xhaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1NjMyZDhlYzIzOWRmYWJiZGNmZmZmZDU1ODQ5ZGIwMzUyMjk5YTU4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMDc6NTE6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGMxNDA0YTU5NTIzZDYuLjg4NmE1M2Y1NjNhYjcgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0xODE5LDcgJiM0MzsxODE5LDcgQEAgYm9vbCBmb2xpb19pc29sYXRlX2xydShzdHJ1Y3QgZm9saW8gKmZvbGlvKQogICogdGhlIExSVSBsaXN0IHdpbGwgZ28gc21hbGwgYW5kIGJlIHNjYW5uZWQgZmFzdGVyIHRoYW4gbmVjZXNzYXJ5LCBsZWFkaW5nIHRvCiAgKiB1bm5lY2Vzc2FyeSBzd2FwcGluZywgdGhyYXNoaW5nIGFuZCBPT00uCiAgKi8KLXN0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGludCBmaWxlLAomIzQzO3N0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZmlsZSwKIAkJc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiB7CiAJdW5zaWduZWQgbG9uZyBpbmFjdGl2ZSwgaXNvbGF0ZWQ7CkBAIC0xODU2LDYgJiM0MzsxODU2LDM3IEBAIHN0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGludCBmaWxlLAogCXJldHVybiB0b29fbWFueTsKIH0KIAomIzQzOy8qCiYjNDM7ICogVGhyb3R0bGUgcmVjbGFpbSBpZiB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MgYXJlIHBpbGluZyB1cC4gSWYgdGhpcyBtYWtlcwomIzQzOyAqIG5vIHByb2dyZXNzLCB0aGUgY2FsbGVyIGlzIHByb2JhYmx5IGxvb3Bpbmcgb24gdW5ldmljdGFibGUgZm9saW9zLCBzbyBnaXZlCiYjNDM7ICogdXAuIFJldHVybnMgZmFsc2UgdG8gdGVsbCB0aGUgY2FsbGVyIHRvIHN0b3AgcmVjbGFpbWluZywgYW5kIHNldHMgQGZhdGFsCiYjNDM7ICogaWYgdGhlIHRhc2sgcmVjZWl2ZWQgYSBmYXRhbCBzaWduYWwgd2hpbGUgd2FpdGluZywgc28gdGhhdCB0aGUgY2FsbGVyIGNhbgomIzQzOyAqIGJhaWwgb3V0IGZhc3Rlci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCB0aHJvdHRsZV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZpbGUsCiYjNDM7CQkJICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGJvb2wgKmZhdGFsKQomIzQzO3sKJiM0MzsJYm9vbCBzdGFsbGVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CSpmYXRhbCA9IGZhbHNlOwomIzQzOwl3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHsKJiM0MzsJCWlmIChzdGFsbGVkKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCS8qIHdhaXQgYSBiaXQgZm9yIHRoZSByZWNsYWltZXIuICovCiYjNDM7CQlzdGFsbGVkID0gdHJ1ZTsKJiM0MzsJCXJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7CiYjNDM7CiYjNDM7CQkvKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIFJldHVybiBub3cuICovCiYjNDM7CQlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKJiM0MzsJCQkqZmF0YWwgPSB0cnVlOwomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogbW92ZV9mb2xpb3NfdG9fbHJ1KCkgbW92ZXMgZm9saW9zIGZyb20gcHJpdmF0ZSBAbGlzdCB0byBhcHByb3ByaWF0ZSBMUlUgbGlzdC4KICAqCkBAIC0xOTkyLDE5ICYjNDM7MjAyMywxNCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCiAJYm9vbCBmaWxlID0gaXNfZmlsZV9scnUobHJ1KTsKIAllbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwotCWJvb2wgc3RhbGxlZCA9IGZhbHNlOwotCi0Jd2hpbGUgKHVubGlrZWx5KHRvb19tYW55X2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYykpKSB7Ci0JCWlmIChzdGFsbGVkKQotCQkJcmV0dXJuIDA7Ci0KLQkJLyogd2FpdCBhIGJpdCBmb3IgdGhlIHJlY2xhaW1lci4gKi8KLQkJc3RhbGxlZCA9IHRydWU7Ci0JCXJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7CiYjNDM7CWJvb2wgZmF0YWw7CiAKJiM0MzsJaWYgKCF0aHJvdHRsZV9pc29sYXRlZChwZ2RhdCwgZmlsZSwgc2MsICZhbXA7ZmF0YWwpKSB7CiAJCS8qIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gUmV0dXJuIG5vdy4gKi8KLQkJaWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQomIzQzOwkJaWYgKGZhdGFsKQogCQkJcmV0dXJuIFNXQVBfQ0xVU1RFUl9NQVg7CiYjNDM7CiYjNDM7CQlyZXR1cm4gMDsKIAl9CiAKIAlscnVfYWRkX2RyYWluKCk7CkBAIC00ODgzLDYgJiM0Mzs0OTA5LDI1IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCWJvb2wgc2tpcF9yZXRyeSA9IGZhbHNlOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpOwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTsKJiM0MzsJYm9vbCBmYXRhbDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIHR5cGUgdG8gaXNvbGF0ZSBpcyB1bmtub3duIHVudGlsIGlzb2xhdGlvbiwgc28gcHJlZGljdCBpdCBmb3IKJiM0MzsJICogdGhlIHRocm90dGxpbmcgY2hlY2suIGlzb2xhdGVfZm9saW9zKCkgbWF5IHN0aWxsIGZhbGwgYmFjayB0byB0aGUKJiM0MzsJICogb3RoZXIgdHlwZSwgd2hpY2ggaXMgZmluZSBmb3IgdGhpcyBoZXVyaXN0aWMuCiYjNDM7CSAqLwomIzQzOwl0eXBlID0gZ2V0X3R5cGVfdG9fc2NhbihscnV2ZWMsIHN3YXBwaW5lc3MpOwomIzQzOwlpZiAoIXRocm90dGxlX2lzb2xhdGVkKHBnZGF0LCB0eXBlLCBzYywgJmFtcDtmYXRhbCkpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIExpa2UgdGhlIGxlZ2FjeQomIzQzOwkJICogcGF0aCwgcHJldGVuZCBzb21lIHBhZ2VzIHdlcmUgcmVjbGFpbWVkIHNvIHJlY2xhaW0gdW53aW5kcwomIzQzOwkJICogcXVpY2tseSBpbnN0ZWFkIG9mIGxvb3BpbmcgYmFjayBpbnRvIHRoZSB0aHJvdHRsZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGZhdGFsKQomIzQzOwkJCXNjLSZndDtucl9yZWNsYWltZWQgJiM0Mzs9IFNXQVBfQ0xVU1RFUl9NQVg7CiYjNDM7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQogCiAJbHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7CiAKQEAgLTQ4OTIsNiAmIzQzOzQ5MzcsOSBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAlzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcywKIAkJCQkgJmFtcDtsaXN0LCAmYW1wO2lzb2xhdGVkLCAmYW1wO3R5cGUsICZhbXA7dHlwZV9zY2FubmVkKTsKIAlucl9pc29sYXRlZCA9IGlzb2xhdGVkOwomIzQzOwlpZiAobnJfaXNvbGF0ZWQpCiYjNDM7CQlfX21vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZSwKJiM0MzsJCQkJICAgICAgbnJfaXNvbGF0ZWQpOwogCiAJLyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi8KIAlpZiAoc2Nhbm5lZCkKQEAgLTQ5NTQsNiAmIzQzOzUwMDIsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWdvdG8gcmV0cnk7CiAJfQogCiYjNDM7CWlmIChucl9pc29sYXRlZCkKJiM0MzsJCW1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZSwKJiM0MzsJCQkJICAgIC1ucl9pc29sYXRlZCk7CiYjNDM7CiAJaWYgKG5yX2lzb2xhdGVkICZndDsgdG90YWxfcmVjbGFpbWVkKQogCQltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiAmIzQzOyB0eXBlLAogCQkJCSBucl9pc29sYXRlZCAtIHRvdGFsX3JlY2xhaW1lZCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIGRlZXAgd2l0aGluIHRoZSBgbW0vdm1zY2FuLmNgIGZpbGUg4oCTIHRoYXQgc2NyZWFtcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgbWVzc2luZyB3aXRoIHBhZ2UgcmVjbGFpbSwgd2hpY2ggbWVhbnMgd2UmIzM5O3JlIHByb2JhYmx5IGRlYWxpbmcgd2l0aCB0aGUgTGVhc3QgUmVjZW50bHkgVXNlZCAoTFJVKSBsaXN0cywgYm90aCB0aGUgdHJhZGl0aW9uYWwgbGVnYWN5IExSVSBhbmQgTUdMUlUuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYHRocm90dGxlX2lzb2xhdGVkKClgIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZSBhcyBhIHBvdGVudGlhbCBwb2ludCBvZiBjb250ZW50aW9uIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2s7IGl0JiMzOTtzIHVzZWQgd2l0aGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpYCAobGVnYWN5IExSVSkgYW5kIGBldmljdF9mb2xpb3MoKWAgKE1HTFJVKS4gSW50ZXJlc3RpbmcuIFRoZSBhZGRpdGlvbnMgb2YgYF9fbW9kX25vZGVfcGFnZV9zdGF0ZWAgY2FsbHMgZm9yIGBOUl9JU09MQVRFRF9BTk9OYCBhbmQgcG90ZW50aWFsbHkgb3RoZXIgdHlwZXMgZHVyaW5nIGV2aWN0aW9uIHdpdGhpbiBgZXZpY3RfZm9saW9zKClgIHNob3cgdGhhdCB0aGUgaXNvbGF0aW9uIGNvdW50ZXIgaXMgYWRqdXN0ZWQuCgpOb3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzICYjMzQ7V2hlcmUgYXJlIHRoZSBlbnRyeSBwb2ludHM/JiMzNDsuICBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgZXZpY3RfZm9saW9zYCBhcmUgYm90aCBzdGF0aWMsIG1lYW5pbmcgdGhleSYjMzk7cmUgbm90IGRpcmVjdGx5IGV4cG9zZWQuICBgdGhyb3R0bGVfaXNvbGF0ZWRgIGlzIGFsc28gc3RhdGljLiBTbywgSSBuZWVkIHRvIGxvb2sgdXBzdHJlYW0uIFdoYXQgZnVuY3Rpb25zIGNhbGwgdGhlc2Ugb3IgYXJlIHJlbGF0ZWQgdG8gcGFnZSByZWNsYWltIHRoYXQgKmFyZW4mIzM5O3QqIHN0YXRpYz8gTGV0JiMzOTtzIHNlZS4uLiBgc2hyaW5rX25vZGVgPyBgc2hyaW5rX2xydXZlY2A/IGB0cnlfdG9fZnJlZV9wYWdlc2A/IElzIGBrc3dhcGRgIGludm9sdmVkPyBJJiMzOTttIGdvaW5nIHRvIGhlYWQgdG8gYG1tL3Ztc2Nhbi5jYCBhbmQgc3RhcnQgdHJhY2luZyBiYWNrIHRvIHNlZSB3aGVyZSB0aGlzIGFsbCBmaXRzIGluLiAgVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgbGFyZ2VyIHBpY3R1cmUgSSBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V2aWN0X2ZvbGlvcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ4NjI9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00ODk1LVxubW0vdm1zY2FuLmM6NDg5NjpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbm1tL3Ztc2Nhbi5jLTQ4OTctXHRcdFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jPTUwOTk9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTIyLVx0XHRucl9iYXRjaCA9IG1pbihucl90b19zY2FuLCBNSU5fTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjUxMjM6XHRcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcbm1tL3Ztc2Nhbi5jLTUxMjQtXHRcdGlmICghZGVsdGEpXG4tLVxubW0vdm1zY2FuLmM9NTcyNj1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy01NzQ2LVx0XHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXHUwMDNlbnJfcmVjbGFpbWVkLCBNQVhfTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjU3NDc6XHRcdGlmICghZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKSlcbm1tL3Ztc2Nhbi5jLTU3NDgtXHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI5MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyB0aGUgRXZpY3Rpb24gUGF0aCBpbiB0aGUgTFJVIFZlY3RvcioqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBldmljdF9mb2xpb3NgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGJvdGggYHRyeV90b19zaHJpbmtfbHJ1dmVjYCBhbmQgYHJ1bl9ldmljdGlvbmAuIFRoYXQmIzM5O3MgYSBwcmV0dHkgY2xlYXIgaW5kaWNhdGlvbiB0aGF0IGl0JiMzOTtzIHRoZSBjb3JlIGZ1bmN0aW9uIGZvciBhY3R1YWxseSByZW1vdmluZyBmb2xpb3MsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBuYW1lcy4gTm93LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGggZnVydGhlciB1cHN0cmVhbS4gTXkgZm9jdXMgaXMgdW5kZXJzdGFuZGluZyB0aGUgdHJpZ2dlcnMgZm9yIGZvbGlvIGV2aWN0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgcnVuX2V2aWN0aW9uYCBhcmUgYmVpbmcgKmNhbGxlZCogZnJvbS4gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBsaW5rIOKAkyB0aG9zZSBhcmUgdGhlIHBvaW50cyBpbiB0aGUgc3lzdGVtIHRoYXQgYXJlIGluaXRpYXRpbmcgdGhlIGV2aWN0aW9uIHByb2Nlc3MgYmFzZWQgb24gd2hhdGV2ZXIgY29uZGl0aW9ucyBhcmUgaW4gcGxheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvc2UgY29uZGl0aW9ucyB0byBncmFzcCB0aGUgb3ZlcmFsbCBldmljdGlvbiBwb2xpY3kuIEFyZSB3ZSBkZWFsaW5nIHdpdGggbWVtb3J5IHByZXNzdXJlLCBhZ2luZyBvZiBlbnRyaWVzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGltZSB0byBkaWcgZGVlcGVyIGFuZCBmaW5kIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfdG9fc2hyaW5rX2xydXZlYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTUwNjQ9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MDk4LSAqL1xubW0vdm1zY2FuLmM6NTA5OTpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTEwMC17XG4tLVxubW0vdm1zY2FuLmM9NTE0ND1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTYzLVxubW0vdm1zY2FuLmM6NTE2NDpcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG5tbS92bXNjYW4uYy01MTY1LVxuLS1cbm1tL3Ztc2Nhbi5jPTUyNTU9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTI2Ny1cbm1tL3Ztc2Nhbi5jOjUyNjg6XHRpZiAodHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYykpXG5tbS92bXNjYW4uYy01MjY5LVx0XHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9ZT1VORyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkzMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AuIEl0JiMzOTtzIGNsZWFyIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3Igc2hyaW5raW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIGFuIExSVSB2ZWN0b3IsIGFuZCBpdCYjMzk7cyBjYWxsaW5nIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgaW4gdGhlIHByb2Nlc3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1dobyYjMzk7cyB0aGUgY2FsbGVyIGhlcmU/IFdoYXQgdXBzdHJlYW0gZnVuY3Rpb24gb3IgcHJvY2VzcyBpcyB0cmlnZ2VyaW5nIHRoaXMgd2hvbGUgc2hyaW5raW5nIG9wZXJhdGlvbj8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93OyBrbm93aW5nIHdoYXQgaW5pdGlhdGVzIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgKndoeSogdGhlIExSVSB2ZWN0b3IgaXMgYmVpbmcgc2hydW5rLCB1bmRlciB3aGF0IGNvbmRpdGlvbnMsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIHN5c3RlbSBpbXBsaWNhdGlvbnMgYXJlLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgdG8gcGlucG9pbnQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgaXMgcGFyYW1vdW50IGZvciBhbnkgZWZmZWN0aXZlIHN5c3RlbSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX3Nocmlua19scnV2ZWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01MTg1PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyNTQtXG5tbS92bXNjYW4uYzo1MjU1OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTI1Ni17XG4tLVxubW0vdm1zY2FuLmM9NTk5OT1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwMDMtXG5tbS92bXNjYW4uYzo2MDA0OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjAwNS17XG4tLVxubW0vdm1zY2FuLmM9NjAxNj1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjAyNy1cdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXHUwMDI2XHUwMDI2ICFyb290X3JlY2xhaW0oc2MpKSB7XG5tbS92bXNjYW4uYzo2MDI4Olx0XHRscnVfZ2VuX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG5tbS92bXNjYW4uYy02MDI5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MzkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBzaHJpbmtfbHJ1dmVjYCBGdW5jdGlvbiYjMzk7cyBDYWxsZXJzKioKCk9rYXksIHNvIEkgc2VlIGBzaHJpbmtfbHJ1dmVjYCBpcyBjYWxsaW5nIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgLiBUaGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIGxpa2VseSBleHBlY3RlZCBnaXZlbiB0aGUgbmFtaW5nLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24sIHRob3VnaCwgaXMgd2hhdCAqdHJpZ2dlcnMqIHRoaXMgY2FsbCB0byBgc2hyaW5rX2xydXZlY2AgaW4gdGhlIGZpcnN0IHBsYWNlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LiBJcyBpdCBpbnZva2VkIHBlcmlvZGljYWxseSBiYXNlZCBvbiBhIHRpbWVyLCB0cmlnZ2VyZWQgYnkgYSBzcGVjaWZpYyBldmVudCB3aXRoaW4gdGhlIExSVSBjYWNoZSYjMzk7cyBvcGVyYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUbyByZWFsbHkgdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvZiB0aGUgTFJVIGNhY2hlLCBJIGhhdmUgdG8gdHJhY2UgYmFjayB0aGUgY2FsbCBzdGFjay4gVW5kZXJzdGFuZGluZyAqd2hvKiBvciAqd2hhdCogaXMgY2FsbGluZyBgc2hyaW5rX2xydXZlY2AgaXMgY3J1Y2lhbCB0byBldmFsdWF0aW5nIHRoZSBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kgb2YgdGhlIExSVSBpbXBsZW1lbnRhdGlvbi4gSXMgdGhlIHNocmlua2luZyBhZ2dyZXNzaXZlLCBvciBjb25zZXJ2YXRpdmU/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBjYW5kaWRhdGVzIGZvciBvcHRpbWl6YXRpb24gd2hlbiByZXZpZXdpbmcgd2hlcmUgdGhpcyBmdW5jdGlvbiBzaXRzIGluIHRoZSBjb2RlPyBMZXQmIzM5O3MgdHJhY2UgdGhpcyBhbmQgdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19scnV2ZWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01MDY0PXN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTA5OC0gKi9cbm1tL3Ztc2Nhbi5jOjUwOTk6c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTUxMDAte1xuLS1cbm1tL3Ztc2Nhbi5jPTUxNDQ9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTE2My1cbm1tL3Ztc2Nhbi5jOjUxNjQ6XHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xubW0vdm1zY2FuLmMtNTE2NS1cbi0tXG5tbS92bXNjYW4uYz01MTg1PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyNTQtXG5tbS92bXNjYW4uYzo1MjU1OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTI1Ni17XG4tLVxubW0vdm1zY2FuLmMtNTI2Ny1cbm1tL3Ztc2Nhbi5jOjUyNjg6XHRpZiAodHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYykpXG5tbS92bXNjYW4uYy01MjY5LVx0XHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9ZT1VORyk7XG4tLVxubW0vdm1zY2FuLmM9NTk5OT1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwMDMtXG5tbS92bXNjYW4uYzo2MDA0OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjAwNS17XG4tLVxubW0vdm1zY2FuLmM9NjAwOT1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwMTUtXG5tbS92bXNjYW4uYzo2MDE2OnN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTYwMTcte1xuLS1cbm1tL3Ztc2Nhbi5jLTYwMjctXHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFx1MDAyNlx1MDAyNiAhcm9vdF9yZWNsYWltKHNjKSkge1xubW0vdm1zY2FuLmM6NjAyODpcdFx0bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xubW0vdm1zY2FuLmMtNjAyOS1cbi0tXG5tbS92bXNjYW4uYz02MjA3PXN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MjY2LVxubW0vdm1zY2FuLmM6NjI2NzpcdFx0c2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYyNjgtXG4tLVxubW0vdm1zY2FuLmM9Njg2Mj11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4OTItXHQgKi9cbm1tL3Ztc2Nhbi5jOjY4OTM6XHRzaHJpbmtfbHJ1dmVjKGxydXZlYywgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNjg5NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjczMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UgaGF2ZSBoZXJlLgoKKipEZWNvbnN0cnVjdGluZyBNZW1vcnkgQ2dyb3VwIFNocmlua2FnZSoqCgpSaWdodCwgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgIGlzbiYjMzk7dCBzdGF0aWMsIGludGVyZXN0aW5nLiBPa2F5LCBzbyB0aGF0IG1lYW5zIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIGNhbGxpbmcgaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGNoYWluIGhlcmUsIHdoYXQmIzM5O3MgdHJpZ2dlcmluZyB0aGF0IGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGBzaHJpbmtfbHJ1dmVjYCBpcyBjYWxsZWQgd2l0aGluIGl0LiBTbywgd2hvIGVsc2UgY2FsbHMgYHNocmlua19scnV2ZWNgPyBBaCwgeWVzLCBgc2hyaW5rX25vZGVfbWVtY2dzYCBpcyBvbmUuIE9rYXksIGFuZCB3aGF0IGlzIHRyaWdnZXJpbmcgKnRoYXQqIGZ1bmN0aW9uLCBgc2hyaW5rX25vZGVfbWVtY2dzYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gSSBuZWVkIHRvIGtlZXAgdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19ub2RlX21lbWNncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTYxNTU9c3RhdGljIGlubGluZSBib29sIHNob3VsZF9jb250aW51ZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4tLVxubW0vdm1zY2FuLmMtNjIwNi1cbm1tL3Ztc2Nhbi5jOjYyMDc6c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjIwOC17XG4tLVxubW0vdm1zY2FuLmM9NjI4Nj1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MzEwLVxubW0vdm1zY2FuLmM6NjMxMTpcdHNocmlua19ub2RlX21lbWNncyhwZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNjMxMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE5MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgZ2l2ZW4gbXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYToKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIE1lbW9yeSBTaHJpbmthZ2UgUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHNocmlua19ub2RlYC4gVGhpcyBpcyBjbGVhcmx5IHRoZSBjb3JlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciwgd2VsbCwgc2hyaW5raW5nIGEgbm9kZSYjMzk7cyBtZW1vcnkgZm9vdHByaW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHdoYXQgc3BlY2lmaWNhbGx5IHRyaWdnZXJzIHRoaXMgc2hyaW5rYWdlPyBNeSBhbmFseXNpcyBzaG93cyB0aGF0IGBzaHJpbmtfbm9kZWAgaXMgY2FsbGluZyBgc2hyaW5rX25vZGVfbWVtY2dzYC4gVGhhdCBtYWtlcyBzZW5zZTsgYG1lbWNnc2AgKG1lbW9yeSBjZ3JvdXBzKSBhcmUgYSBtYWpvciBwbGF5ZXIgd2hlbiBpdCBjb21lcyB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVzb3VyY2UgbGltaXRzLiBTbywgYHNocmlua19ub2RlYCBpcyB1c2luZyBgc2hyaW5rX25vZGVfbWVtY2dzYCB0byBpbnRlcmFjdCB3aXRoIGFuZCBtYW5hZ2UgbWVtb3J5IHdpdGhpbiB0aGUgY2dyb3VwIGhpZXJhcmNoeS4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgbW9kdWxhciBkZXNpZ24uIEJ1dCBJIG5lZWQgdG8gZ28gZGVlcGVyLiBXaGF0IGFyZSB0aGUgY2FsbGluZyBmdW5jdGlvbnMgd2hpY2ggbGVhZCB0byB0aGUgaW52b2NhdGlvbiBvZiBgc2hyaW5rX25vZGVgPyBJZGVudGlmeWluZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgdHJpZ2dlcnMgb3IgZXZlbnRzIGluIHRoZSBzeXN0ZW0uIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgaW5zaWdodHMgbGllLCB1bmRlcnN0YW5kaW5nIHRoZSBjaXJjdW1zdGFuY2VzIHdoZW4gdGhlIHN5c3RlbSBuZWVkcyB0byBzaGVkIG1lbW9yeSBmcm9tIGEgbm9kZS4gSXMgaXQgYSBwZXJpb2RpYyBwcm9jZXNzPyBBIHJlc3BvbnNlIHRvIG1lbW9yeSBwcmVzc3VyZT8gT3IgdHJpZ2dlcmVkIGJ5IHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBGaW5kaW5nIHRoZSBjYWxsZXJzIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0xOTcyPXN0YXRpYyB2b2lkIGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayh1bnNpZ25lZCBsb25nIG5yX3Rha2VuLFxuLS1cbm1tL3Ztc2Nhbi5jLTIwMTAtLypcbm1tL3Ztc2Nhbi5jOjIwMTE6ICogc2hyaW5rX2luYWN0aXZlX2xpc3QoKSBpcyBhIGhlbHBlciBmb3Igc2hyaW5rX25vZGUoKS4gIEl0IHJldHVybnMgdGhlIG51bWJlclxubW0vdm1zY2FuLmMtMjAxMi0gKiBvZiByZWNsYWltZWQgcGFnZXNcbi0tXG5tbS92bXNjYW4uYz01MjU1PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyNzUtXG5tbS92bXNjYW4uYzo1Mjc2OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01Mjc3LXtcbi0tXG5tbS92bXNjYW4uYz02MDA0PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwMDgtXG5tbS92bXNjYW4uYzo2MDA5OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy02MDEwLXtcbi0tXG5tbS92bXNjYW4uYz02MTU1PXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfY29udGludWVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuLS1cbm1tL3Ztc2Nhbi5jLTYyMDYtXG5tbS92bXNjYW4uYzo2MjA3OnN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTYyMDgte1xuLS1cbm1tL3Ztc2Nhbi5jLTYyODUtXG5tbS92bXNjYW4uYzo2Mjg2OnN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjI4Ny17XG4tLVxubW0vdm1zY2FuLmMtNjI5My1cdFx0bWVtc2V0KFx1MDAyNnNjLVx1MDAzZW5yLCAwLCBzaXplb2Yoc2MtXHUwMDNlbnIpKTtcbm1tL3Ztc2Nhbi5jOjYyOTQ6XHRcdGxydV9nZW5fc2hyaW5rX25vZGUocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYyOTUtXG4tLVxubW0vdm1zY2FuLmMtNjMxMC1cbm1tL3Ztc2Nhbi5jOjYzMTE6XHRzaHJpbmtfbm9kZV9tZW1jZ3MocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYzMTItXG4tLVxubW0vdm1zY2FuLmM9NjQ3MT1zdGF0aWMgdm9pZCBzaHJpbmtfem9uZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjU0OS1cdFx0bGFzdF9wZ2RhdCA9IHpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbm1tL3Ztc2Nhbi5jOjY1NTA6XHRcdHNocmlua19ub2RlKHpvbmUtXHUwMDNlem9uZV9wZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNjU1MS1cdH1cbi0tXG5tbS92bXNjYW4uYz02ODE2PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4NjEtLyogT25seSB1c2VkIGJ5IHNvZnQgbGltaXQgcmVjbGFpbS4gRG8gbm90IHJldXNlIGZvciBhbnl0aGluZyBlbHNlLiAqL1xubW0vdm1zY2FuLmM6Njg2Mjp1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNjg2My1cdFx0XHRcdFx0XHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXG4tLVxubW0vdm1zY2FuLmMtNjg4OC1cdCAqIGhlcmUgaXMgbm90IGEgZ29vZCBpZGVhLCBzaW5jZSBpdCBsaW1pdHMgdGhlIHBhZ2VzIHdlIGNhbiBzY2FuLlxubW0vdm1zY2FuLmM6Njg4OTpcdCAqIGlmIHdlIGRvbiYjMzk7dCByZWNsYWltIGhlcmUsIHRoZSBzaHJpbmtfbm9kZSBmcm9tIGJhbGFuY2VfcGdkYXRcbm1tL3Ztc2Nhbi5jLTY4OTAtXHQgKiB3aWxsIHBpY2sgdXAgcGFnZXMgZnJvbSBvdGhlciBtZW0gY2dyb3VwJiMzOTtzIGFzIHdlbGwuIFdlIGhhY2tcbi0tXG5tbS92bXNjYW4uYz03MDEwPXN0YXRpYyBib29sIHBnZGF0X2JhbGFuY2VkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy03MDM0LVx0XHQgKiBpdHMgb3duIGFuZCBuZWVkcyBrY29tcGFjdGQgc3VwcG9ydC4gT25jZSBpdCYjMzk7c1xubW0vdm1zY2FuLmM6NzAzNTpcdFx0ICogcmVjbGFpbWVkIGEgY29tcGFjdGlvbiBnYXAsIGFuZCBrc3dhcGRfc2hyaW5rX25vZGVcbm1tL3Ztc2Nhbi5jLTcwMzYtXHRcdCAqIGhhcyBkcm9wcGVkIG9yZGVyLCBzaW1wbHkgZW5zdXJlIHRoZXJlIGFyZSBlbm91Z2hcbi0tXG5tbS92bXNjYW4uYz03MDkyPXN0YXRpYyBib29sIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy03MTMwLSAqL1xubW0vdm1zY2FuLmM6NzEzMTpzdGF0aWMgYm9vbCBrc3dhcGRfc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTcxMzItXHRcdFx0ICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTcxNDctXHQgKi9cbm1tL3Ztc2Nhbi5jOjcxNDg6XHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNzE0OS1cbi0tXG5tbS92bXNjYW4uYz03MjA0PXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzMxMy1cbm1tL3Ztc2Nhbi5jOjczMTQ6XHRcdC8qIENhbGwgc29mdCBsaW1pdCByZWNsYWltIGJlZm9yZSBjYWxsaW5nIHNocmlua19ub2RlLiAqL1xubW0vdm1zY2FuLmMtNzMxNS1cdFx0c2MubnJfc2Nhbm5lZCA9IDA7XG4tLVxubW0vdm1zY2FuLmMtNzMyNS1cdFx0ICovXG5tbS92bXNjYW4uYzo3MzI2Olx0XHRpZiAoa3N3YXBkX3Nocmlua19ub2RlKHBnZGF0LCBcdTAwMjZzYykpXG5tbS92bXNjYW4uYy03MzI3LVx0XHRcdHJhaXNlX3ByaW9yaXR5ID0gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmM9Nzg4MD1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuLS1cbm1tL3Ztc2Nhbi5jLTc5MDctXHRcdGRvIHtcbm1tL3Ztc2Nhbi5jOjc5MDg6XHRcdFx0c2hyaW5rX25vZGUocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTc5MDktXHRcdH0gd2hpbGUgKHNjLVx1MDAzZW5yX3JlY2xhaW1lZCBcdTAwM2MgbnJfcGFnZXMgXHUwMDI2XHUwMDI2IC0tc2MtXHUwMDNlcHJpb3JpdHkgXHUwMDNlPSAwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAxMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDExNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFJlY2xhaW0gQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIG1lbW9yeSByZWNsYWltIHByb2Nlc3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHN0YXJ0IHdpdGggdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQuIEkgc2VlIGB0cnlfdG9fZnJlZV9wYWdlc2Ag4oCTIHRoYXQmIzM5O3MgYSBub24tc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZywgaXQgc2VlbXMgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdHJpZ2dlcmluZyB0aGUgcmVjbGFpbS4gVGhlbiB0aGVyZSYjMzk7cyBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAsIGFsc28gbm9uLXN0YXRpYzsgdGhpcyBzdWdnZXN0cyBpdCBwbGF5cyBhIHJvbGUgaW4gc2hyaW5raW5nIG1lbW9yeSB3aXRoaW4gY2dyb3Vwcywgd2hpY2ggd2lsbCBiZSB2aXRhbCBmb3IgbWFuYWdpbmcgcmVzb3VyY2VzLgoKSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBjb3JlIG1lY2hhbmljcy4gYGJhbGFuY2VfcGdkYXRgLCB3aGlsZSBzdGF0aWMsIGxvb2tzIGxpa2UgdGhlIGNlbnRyYWwgbG9vcCB3aXRoaW4gYGtzd2FwZGAsIHdoaWNoIG1ha2VzIGl0IGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gSSBhbHNvIG5vdGUgdGhhdCBgX19ub2RlX3JlY2xhaW1gIGlzIHN0YXRpYyBidXQgbGlua2VkIHRvIGBub2RlX3JlY2xhaW1gLCBzbyB0cmFjaW5nIHRob3NlIGNhbGxzIHdpbGwgcHJvdmlkZSB0aGUgb3ZlcnZpZXcgb2Ygb3ZlcmFsbCBub2RlIHJlY2xhaW0uCgpUaGVyZWZvcmUsIG15IGltbWVkaWF0ZSBwbGFuIGlzIHRvIGZvY3VzIG15IGludmVzdGlnYXRpb24gb24gdGhlc2UgY3JpdGljYWwgcG9pbnRzOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBub2RlX3JlY2xhaW1gLCBhbmQgYGtzd2FwZGAuIEV4YW1pbmluZyB0aGVpciBpbnRlcmFjdGlvbnMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlY2xhaW0gc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19mcmVlX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NjU2Mz1zdGF0aWMgdm9pZCBzbmFwc2hvdF9yZWZhdWx0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTY1OTMtICovXG5tbS92bXNjYW4uYzo2NTk0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRvX3RyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXG5tbS92bXNjYW4uYy02NTk1LVx0XHRcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jPTY3MzY9c3RhdGljIGJvb2wgdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXG4tLVxubW0vdm1zY2FuLmMtNjgxNS1cbm1tL3Ztc2Nhbi5jOjY4MTY6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG5tbS92bXNjYW4uYy02ODE3LVx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIGNvbnN0IG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuLS1cbm1tL3Ztc2Nhbi5jLTY4NTAtXG5tbS92bXNjYW4uYzo2ODUxOlx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTY4NTItXG4tLVxubW0vdm1zY2FuLmM9NjkwMj11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY5MzMtXG5tbS92bXNjYW4uYzo2OTM0Olx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTY5MzUtXG4tLVxubW0vdm1zY2FuLmM9NzcwMD11bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcbi0tXG5tbS92bXNjYW4uYy03NzE5LVxubW0vdm1zY2FuLmM6NzcyMDpcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy03NzIxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTE2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1lbW9yeSBSZWNsYWltIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIG1lbW9yeSByZWNsYWltIHBhdGNoLCBhbmQgdGhlIGltbWVkaWF0ZSBlbnRyeSBwb2ludHMgZm9yIGRpcmVjdCByZWNsYWltIGp1bXAgb3V0IGF0IG1lOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBzaHJpbmtfYWxsX21lbW9yeWAsIGFuZCBgbm9kZV9yZWNsYWltYC4gRm9yIHRoZSBga3N3YXBkYCBkYWVtb24sIHdlJiMzOTtyZSBsb29raW5nIGF0IHRoZSBga3N3YXBkYCB0aHJlYWQgZnVuY3Rpb24gaXRzZWxmIGFzIHRoZSBlbnRyeSBwb2ludC4KCkdpdmVuIHRoYXQgdGhpcyBwYXRjaCB0b3VjaGVzIG1lbW9yeSByZWNsYWltIGxvZ2ljLCBmdXp6aW5nIGlzIGFuIGFic29sdXRlIG11c3QtZG8uIFRoZSBtb2RpZmljYXRpb25zIGFyZSBkZWVwIGluIGBtbS92bXNjYW4uY2Ag4oCTIHRoYXQmIzM5O3MgY29yZSBrZXJuZWwgY29kZSwgZWFzaWx5IHJlYWNoYWJsZSwgYW5kIHRodXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcgZWZmb3J0cy4gSSBzZWUgdGhlIHBhdGNoIGludHJvZHVjZXMgYHRocm90dGxlX2lzb2xhdGVkYCBhbmQgbW9kaWZpZXMgYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYGV2aWN0X2ZvbGlvc2AuCgpNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aG9zZSBrZXkgc3ltYm9sczogYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBgbm9kZV9yZWNsYWltYCwgYW5kIGBrc3dhcGRgLgoKTm93LCByZWdhcmRpbmcgYGV2aWN0X2ZvbGlvc2AsIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCYjMzk7cyBNR0xSVS1zcGVjaWZpYy4gQWgsIHllcywgaXQmIzM5O3MgcmlnaHQgdGhlcmUgaW4gdGhlIE1HTFJVIHNlY3Rpb24gb2YgYG1tL3Ztc2Nhbi5jYC4gQSBxdWljayBjaGVjay4gSXMgTUdMUlUgZW5hYmxlZCBieSBkZWZhdWx0PyBJIG5lZWQgdG8gY2hlY2sgYENPTkZJR19MUlVfR0VOYC4gSSYjMzk7bGwgZ28gbG9vayBpbiBgbW0vS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM5Mz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xNDAzLSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjE0MDQ6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQwNS1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxMi1cbm1tL0tjb25maWc6MTQxMzpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MTQtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDE4LVxubW0vS2NvbmZpZzoxNDE5OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MjAtXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQyNy1cbm1tL0tjb25maWc6MTQyODpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQyOS1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NjcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTUdMUlUgVGVzdGluZyBQbGFuKioKCk9rYXksIHNvIHRvIHJlYWxseSBwdXQgTUdMUlUgdGhyb3VnaCBpdHMgcGFjZXMsIEkgc2hvdWxkIGVuYWJsZSBib3RoIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAuIFRoYXQgbWFrZXMgc2Vuc2UuIEl0IGFsbG93cyBmb3IgYSBtb3JlIGZvY3VzZWQgY29tcGFyaXNvbiwgc2luY2UgdGhlIGxlZ2FjeSBMUlUgcGF0aCwgc3BlY2lmaWNhbGx5IHRoZSBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGZ1bmN0aW9uLCBoYXMgYWxzbyBiZWVuIHRvdWNoZWQuIEV2ZW4gdGhvdWdoIE1HTFJVIGlzbiYjMzk7dCBzdHJpY3RseSBuZWNlc3NhcnkgZ2l2ZW4gdGhlIGxlZ2FjeSBjaGFuZ2VzLCB0aG9yb3VnaCB0ZXN0aW5nIG9mIGJvdGggaXMgYWx3YXlzIHRoZSByaWdodCBjYWxsLiBJdCYjMzk7cyB0aGUgb25seSB3YXkgdG8gYmUgY29tcGxldGVseSBzdXJlLgoKSSBjYW4gZWFzaWx5IGFkZCB0aG9zZSBjb25maWd1cmF0aW9ucyB0byB0aGUgRW5hYmxlQ29uZmlncy4gTm8gcHJvYmxlbSB0aGVyZS4KCk5leHQsIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgbW0vdm1zY2FuLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBub2RlX3JlY2xhaW1gIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSByZWNsYWltIHByb2Nlc3MsIHNvIEkgc2hvdWxkIHNlZSBob3cgdGhpcyBhZmZlY3RzIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtub2RlX3JlY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz02Mjg2PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjI4Ny17XG5tbS92bXNjYW4uYzo2Mjg4Olx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQsIG5yX3NjYW5uZWQsIG5yX25vZGVfcmVjbGFpbWVkO1xubW0vdm1zY2FuLmMtNjI4OS1cdHN0cnVjdCBscnV2ZWMgKnRhcmdldF9scnV2ZWM7XG4tLVxubW0vdm1zY2FuLmMtNjMxNC1cbm1tL3Ztc2Nhbi5jOjYzMTU6XHRucl9ub2RlX3JlY2xhaW1lZCA9IHNjLVx1MDAzZW5yX3JlY2xhaW1lZCAtIG5yX3JlY2xhaW1lZDtcbm1tL3Ztc2Nhbi5jLTYzMTYtXG4tLVxubW0vdm1zY2FuLmMtNjMxOS1cdFx0dm1wcmVzc3VyZShzYy1cdTAwM2VnZnBfbWFzaywgc2MtXHUwMDNlb3JkZXIsIHNjLVx1MDAzZXRhcmdldF9tZW1fY2dyb3VwLCB0cnVlLFxubW0vdm1zY2FuLmM6NjMyMDpcdFx0XHQgICBzYy1cdTAwM2Vucl9zY2FubmVkIC0gbnJfc2Nhbm5lZCwgbnJfbm9kZV9yZWNsYWltZWQpO1xubW0vdm1zY2FuLmMtNjMyMS1cbm1tL3Ztc2Nhbi5jOjYzMjI6XHRpZiAobnJfbm9kZV9yZWNsYWltZWQpXG5tbS92bXNjYW4uYy02MzIzLVx0XHRyZWNsYWltYWJsZSA9IHRydWU7XG4tLVxubW0vdm1zY2FuLmMtNjM4My1cbm1tL3Ztc2Nhbi5jOjYzODQ6XHRpZiAoc2hvdWxkX2NvbnRpbnVlX3JlY2xhaW0ocGdkYXQsIG5yX25vZGVfcmVjbGFpbWVkLCBzYykpXG5tbS92bXNjYW4uYy02Mzg1LVx0XHRnb3RvIGFnYWluO1xuLS1cbm1tL3Ztc2Nhbi5jPTc3NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdm1zY2FuX3N5c2N0bF90YWJsZVtdID0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTc3ODMtXHRcdC5wcm9jbmFtZVx0PSBcJiMzNDt6b25lX3JlY2xhaW1fbW9kZVwmIzM0Oyxcbm1tL3Ztc2Nhbi5jOjc3ODQ6XHRcdC5kYXRhXHRcdD0gXHUwMDI2bm9kZV9yZWNsYWltX21vZGUsXG5tbS92bXNjYW4uYzo3Nzg1Olx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKG5vZGVfcmVjbGFpbV9tb2RlKSxcbm1tL3Ztc2Nhbi5jLTc3ODYtXHRcdC5tb2RlXHRcdD0gMDY0NCxcbi0tXG5tbS92bXNjYW4uYz03ODAzPW1vZHVsZV9pbml0KGtzd2FwZF9pbml0KVxuLS1cbm1tL3Ztc2Nhbi5jLTc4MDgtICpcbm1tL3Ztc2Nhbi5jOjc4MDk6ICogSWYgbm9uLXplcm8gY2FsbCBub2RlX3JlY2xhaW0gd2hlbiB0aGUgbnVtYmVyIG9mIGZyZWUgcGFnZXMgZmFsbHMgYmVsb3dcbm1tL3Ztc2Nhbi5jLTc4MTAtICogdGhlIHdhdGVybWFya3MuXG5tbS92bXNjYW4uYy03ODExLSAqL1xubW0vdm1zY2FuLmM6NzgxMjppbnQgbm9kZV9yZWNsYWltX21vZGUgX19yZWFkX21vc3RseTtcbm1tL3Ztc2Nhbi5jLTc4MTMtXG4tLVxubW0vdm1zY2FuLmMtNzgyMS0vKlxubW0vdm1zY2FuLmM6NzgyMjogKiBQZXJjZW50YWdlIG9mIHBhZ2VzIGluIGEgem9uZSB0aGF0IG11c3QgYmUgdW5tYXBwZWQgZm9yIG5vZGVfcmVjbGFpbSB0b1xubW0vdm1zY2FuLmMtNzgyMy0gKiBvY2N1ci5cbi0tXG5tbS92bXNjYW4uYz03ODQ4PXN0YXRpYyB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNzg1OC1cdCAqL1xubW0vdm1zY2FuLmM6Nzg1OTpcdGlmIChub2RlX3JlY2xhaW1fbW9kZSBcdTAwMjYgUkVDTEFJTV9VTk1BUClcbm1tL3Ztc2Nhbi5jLTc4NjAtXHRcdG5yX3BhZ2VjYWNoZV9yZWNsYWltYWJsZSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfRklMRV9QQUdFUyk7XG4tLVxubW0vdm1zY2FuLmMtNzg3OS0gKi9cbm1tL3Ztc2Nhbi5jOjc4ODA6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTc4ODEtXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS92bXNjYW4uYy03ODg3LVxubW0vdm1zY2FuLmM6Nzg4ODpcdHRyYWNlX21tX3Ztc2Nhbl9ub2RlX3JlY2xhaW1fYmVnaW4ocGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MtXHUwMDNlb3JkZXIsXG5tbS92bXNjYW4uYy03ODg5LVx0XHRcdFx0XHQgICBzYy1cdTAwM2VnZnBfbWFzayk7XG4tLVxubW0vdm1zY2FuLmMtNzkxNy1cbm1tL3Ztc2Nhbi5jOjc5MTg6XHR0cmFjZV9tbV92bXNjYW5fbm9kZV9yZWNsYWltX2VuZChzYy1cdTAwM2Vucl9yZWNsYWltZWQsIE5VTEwpO1xubW0vdm1zY2FuLmMtNzkxOS1cbi0tXG5tbS92bXNjYW4uYy03OTIyLVxubW0vdm1zY2FuLmM6NzkyMzp1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxubW0vdm1zY2FuLmMtNzkyNC17XG4tLVxubW0vdm1zY2FuLmMtNzkzMi1cdFx0LnByaW9yaXR5ID0gTk9ERV9SRUNMQUlNX1BSSU9SSVRZLFxubW0vdm1zY2FuLmM6NzkzMzpcdFx0Lm1heV93cml0ZXBhZ2UgPSAhIShub2RlX3JlY2xhaW1fbW9kZSBcdTAwMjYgUkVDTEFJTV9XUklURSksXG5tbS92bXNjYW4uYzo3OTM0Olx0XHQubWF5X3VubWFwID0gISEobm9kZV9yZWNsYWltX21vZGUgXHUwMDI2IFJFQ0xBSU1fVU5NQVApLFxubW0vdm1zY2FuLmMtNzkzNS1cdFx0Lm1heV9zd2FwID0gMSxcbi0tXG5tbS92bXNjYW4uYy03OTcxLVxubW0vdm1zY2FuLmM6Nzk3MjpcdHJldCA9IF9fbm9kZV9yZWNsYWltKHBnZGF0LCBucl9wYWdlcywgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNzk3My1cdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKTtcbi0tXG5tbS92bXNjYW4uYy03OTg0LVxubW0vdm1zY2FuLmM6Nzk4NTpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxubW0vdm1zY2FuLmMtNzk4Ni1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL3Ztc2Nhbi5jPTgwMDU9aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxuLS1cbm1tL3Ztc2Nhbi5jLTgwOTctXG5tbS92bXNjYW4uYzo4MDk4Olx0XHRcdHJlY2xhaW1lZCA9IF9fbm9kZV9yZWNsYWltKHBnZGF0LCBiYXRjaF9zaXplLCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy04MDk5LVx0XHRcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NzMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgTWVtb3J5IFJlY2xhbWF0aW9uIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IG1lbW9yeSByZWNsYWltIGZ1bmN0aW9ucyBoZXJlLiBgbm9kZV9yZWNsYWltYCBpcyBhIHNvbGlkIHBpZWNlLCBhbHdheXMgcmVsaWFibGUuIFRoZW4gdGhlcmUmIzM5O3MgYHNocmlua19hbGxfbWVtb3J5YCDigJMgdGhhdCBvbmUmIzM5O3MgZ290IGEgYnJvYWQgaW1wYWN0IGFuZCBJIGxpa2UgaXRzIGFwcHJvYWNoLiBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIGFub3RoZXIgZ29vZCBjYW5kaWRhdGUgZm9yIHRhcmdldGVkIHBhZ2UgZnJlZWluZywgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBpcyBlc3NlbnRpYWwgZm9yIGNncm91cCBtYW5hZ2VtZW50LgoKTm93LCBhIGNydWNpYWwgcXVlc3Rpb24gcG9wcyB1cCByZWdhcmRpbmcgYHNocmlua19hbGxfbWVtb3J5YDogaXMgaXQgcmVhZGlseSBhdmFpbGFibGUgd2hlbiBhbmQgd2hlcmUgSSBuZWVkIGl0PyBJcyBpdCBleHBvcnRlZCBwcm9wZXJseT8gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGl0cyByZWFjaGFiaWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSB2aXNpYmlsaXR5IG9mIHRoaXMgY3J1Y2lhbCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX2FsbF9tZW1vcnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz03Njg2PWJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy03Njk5LSAqL1xubW0vdm1zY2FuLmM6NzcwMDp1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcbm1tL3Ztc2Nhbi5jLTc3MDEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjkzNgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipDaGVja2luZyBmb3IgSGliZXJuYXRpb24gSW50ZXJmZXJlbmNlKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBpc3N1ZS4uLiBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlbGF0ZWQgdG8gaGliZXJuYXRpb24sIHRoYXQgbXVjaCBpcyBjbGVhci4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBhY3Rpdml0eSBvZiBga3N3YXBkYC4gSXQmIzM5O3MgdGhlIGtlcm5lbCB0aHJlYWQgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIG1lbW9yeSBzd2FwcGluZywgYW5kIGl0JiMzOTtzIGEgcHJpbWUgc3VzcGVjdCB3aGVuZXZlciBoaWJlcm5hdGlvbi1yZWxhdGVkIGlzc3VlcyBwb3AgdXAuIEkgbmVlZCB0byBzZWUgaWYgaXQmIzM5O3MgYmVoYXZpbmcgYXMgZXhwZWN0ZWQgb3IgaWYgc29tZXRoaW5nIGlzIGJvdHRsZW5lY2tpbmcgdGhlcmUuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IGBrc3dhcGRgIGlzIHVwIHRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrc3dhcGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTI0IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5tbS92bXNjYW4uYy01LSAqICBTd2FwIHJlb3JnYW5pc2VkIDI5LjEyLjk1LCBTdGVwaGVuIFR3ZWVkaWUuXG5tbS92bXNjYW4uYzo2OiAqICBrc3dhcGQgYWRkZWQ6IDcuMS45NiAgc2N0XG5tbS92bXNjYW4uYzo3OiAqICBSZW1vdmVkIGtzd2FwZF9jdGwgbGltaXRzLCBhbmQgc3dhcCBvdXQgYXMgbWFueSBwYWdlcyBhcyBuZWVkZWRcbm1tL3Ztc2Nhbi5jLTgtICogIHRvIGJyaW5nIHRoZSBzeXN0ZW0gYmFjayB0byBmcmVlcGFnZXMuaGlnaDogMi40Ljk3LCBSaWsgdmFuIFJpZWwuXG5tbS92bXNjYW4uYzo5OiAqICBab25lIGF3YXJlIGtzd2FwZCBzdGFydGVkIDAyLzAwLCBLYW5vaiBTYXJjYXIgKGthbm9qQHNnaS5jb20pLlxubW0vdm1zY2FuLmMtMTAtICogIE11bHRpcXVldWUgVk0gc3RhcnRlZCA1LjguMDAsIFJpayB2YW4gUmllbC5cbi0tXG5tbS92bXNjYW4uYz00NDc9c3RhdGljIGludCByZWNsYWltZXJfb2Zmc2V0KHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ1Mi1cbm1tL3Ztc2Nhbi5jOjQ1MzpcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxubW0vdm1zY2FuLmMtNDU0LVx0XHRyZXR1cm4gMDtcbi0tXG5tbS92bXNjYW4uYz00ODM9c3RhdGljIGJvb2wgc2tpcF90aHJvdHRsZV9ub3Byb2dyZXNzKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNDg4LVx0Lypcbm1tL3Ztc2Nhbi5jOjQ4OTpcdCAqIElmIGtzd2FwZCBpcyBkaXNhYmxlZCwgcmVzY2hlZHVsZSBpZiBuZWNlc3NhcnkgYnV0IGRvIG5vdFxubW0vdm1zY2FuLmMtNDkwLVx0ICogdGhyb3R0bGUgYXMgdGhlIHN5c3RlbSBpcyBsaWtlbHkgbmVhciBPT00uXG5tbS92bXNjYW4uYy00OTEtXHQgKi9cbm1tL3Ztc2Nhbi5jOjQ5MjpcdGlmIChrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ2RhdCkpXG5tbS92bXNjYW4uYy00OTMtXHRcdHJldHVybiB0cnVlO1xuLS1cbm1tL3Ztc2Nhbi5jPTUxMT12b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxNy1cdC8qXG5tbS92bXNjYW4uYzo1MTg6XHQgKiBEbyBub3QgdGhyb3R0bGUgdXNlciB3b3JrZXJzLCBrdGhyZWFkcyBvdGhlciB0aGFuIGtzd2FwZCBvclxubW0vdm1zY2FuLmMtNTE5LVx0ICogd29ya3F1ZXVlcy4gVGhleSBtYXkgYmUgcmVxdWlyZWQgZm9yIHJlY2xhaW0gdG8gbWFrZVxuLS1cbm1tL3Ztc2Nhbi5jLTUyMS1cdCAqL1xubW0vdm1zY2FuLmM6NTIyOlx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmMtNTIzLVx0ICAgIGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IChQRl9VU0VSX1dPUktFUnxQRl9LVEhSRUFEKSkge1xuLS1cbm1tL3Ztc2Nhbi5jPTk2Nj1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19kZW1vdGVfZm9saW8oc3RydWN0IGZvbGlvICpzcmMsXG4tLVxubW0vdm1zY2FuLmMtOTc1LVx0ICogbWFrZSBzdXJlIHdlIGFsbG9jYXRlIGZyb20gdGhlIHRhcmdldCBub2RlIGZpcnN0IGFsc28gdHJ5aW5nIHRvXG5tbS92bXNjYW4uYzo5NzY6XHQgKiBkZW1vdGUgb3IgcmVjbGFpbSBwYWdlcyBmcm9tIHRoZSB0YXJnZXQgbm9kZSB2aWEga3N3YXBkIGlmIHdlIGFyZVxubW0vdm1zY2FuLmMtOTc3LVx0ICogbG93IG9uIGZyZWUgbWVtb3J5IG9uIHRhcmdldCBub2RlLiBJZiB3ZSBkb24mIzM5O3QgZG8gdGhpcyBhbmQgaWZcbi0tXG5tbS92bXNjYW4uYz0xMDU4PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS92bXNjYW4uYy0xMTIxLVx0XHQgKiBUaGUgbnVtYmVyIG9mIGRpcnR5IHBhZ2VzIGRldGVybWluZXMgaWYgYSBub2RlIGlzIG1hcmtlZFxubW0vdm1zY2FuLmM6MTEyMjpcdFx0ICogcmVjbGFpbV9jb25nZXN0ZWQuIGtzd2FwZCB3aWxsIHN0YWxsIGFuZCBzdGFydCB3cml0aW5nXG5tbS92bXNjYW4uYy0xMTIzLVx0XHQgKiBmb2xpb3MgaWYgdGhlIHRhaWwgb2YgdGhlIExSVSBpcyBhbGwgZGlydHkgdW5xdWV1ZWQgZm9saW9zLlxuLS1cbm1tL3Ztc2Nhbi5jLTExOTAtXHRcdFx0LyogQ2FzZSAxIGFib3ZlICovXG5tbS92bXNjYW4uYzoxMTkxOlx0XHRcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmMtMTE5Mi1cdFx0XHQgICAgZm9saW9fdGVzdF9yZWNsYWltKGZvbGlvKSBcdTAwMjZcdTAwMjZcbi0tXG5tbS92bXNjYW4uYz0xNTg5PXVuc2lnbmVkIGludCByZWNsYWltX2NsZWFuX3BhZ2VzX2Zyb21fbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSxcbi0tXG5tbS92bXNjYW4uYy0xNjE0LVx0ICogV2Ugc2hvdWxkIGJlIHNhZmUgaGVyZSBzaW5jZSB3ZSBhcmUgb25seSBkZWFsaW5nIHdpdGggZmlsZSBwYWdlcyBhbmRcbm1tL3Ztc2Nhbi5jOjE2MTU6XHQgKiB3ZSBhcmUgbm90IGtzd2FwZCBhbmQgdGhlcmVmb3JlIGNhbm5vdCB3cml0ZSBkaXJ0eSBmaWxlIHBhZ2VzLiBCdXRcbm1tL3Ztc2Nhbi5jLTE2MTYtXHQgKiBjYWxsIG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKCkgYW55d2F5LCBqdXN0IGluIGNhc2UgdGhlc2UgY29uZGl0aW9uc1xuLS1cbm1tL3Ztc2Nhbi5jPTE4MjI9c3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmaWxlLFxuLS1cbm1tL3Ztc2Nhbi5jLTE4MjctXG5tbS92bXNjYW4uYzoxODI4Olx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG5tbS92bXNjYW4uYy0xODI5LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmM9Mzg5Mz1zdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqc2V0X21tX3dhbGsoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmb3JjZV9hbGxvYylcbi0tXG5tbS92bXNjYW4uYy0zODk2LVxubW0vdm1zY2FuLmM6Mzg5NzpcdGlmIChwZ2RhdCBcdTAwMjZcdTAwMjYgY3VycmVudF9pc19rc3dhcGQoKSkge1xubW0vdm1zY2FuLmMtMzg5OC1cdFx0Vk1fV0FSTl9PTl9PTkNFKHdhbGspO1xuLS1cbm1tL3Ztc2Nhbi5jLTM5MDEtXHR9IGVsc2UgaWYgKCF3YWxrIFx1MDAyNlx1MDAyNiBmb3JjZV9hbGxvYykge1xubW0vdm1zY2FuLmM6MzkwMjpcdFx0Vk1fV0FSTl9PTl9PTkNFKGN1cnJlbnRfaXNfa3N3YXBkKCkpO1xubW0vdm1zY2FuLmMtMzkwMy1cbi0tXG5tbS92bXNjYW4uYz0zOTEzPXN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcbi0tXG5tbS92bXNjYW4uYy0zOTIxLVxubW0vdm1zY2FuLmM6MzkyMjpcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSlcbm1tL3Ztc2Nhbi5jLTM5MjMtXHRcdGtmcmVlKHdhbGspO1xuLS1cbm1tL3Ztc2Nhbi5jPTQyMzU9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00MjQwLVxubW0vdm1zY2FuLmM6NDI0MTpcdFZNX1dBUk5fT05fT05DRSghY3VycmVudF9pc19rc3dhcGQoKSk7XG5tbS92bXNjYW4uYy00MjQyLVxuLS1cbm1tL3Ztc2Nhbi5jPTUwNjQ9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MDc1LVx0LyogY2hlY2sgdGhlIG9yZGVyIHRvIGV4Y2x1ZGUgY29tcGFjdGlvbi1pbmR1Y2VkIHJlY2xhaW0gKi9cbm1tL3Ztc2Nhbi5jOjUwNzY6XHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgc2MtXHUwMDNlb3JkZXIpXG5tbS92bXNjYW4uYy01MDc3LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmMtNTA4OS1cbm1tL3Ztc2Nhbi5jOjUwOTA6XHQvKiBrc3dhcGQgc2hvdWxkIGFib3J0IGlmIGFsbCBlbGlnaWJsZSB6b25lcyBhcmUgc2FmZSAqL1xubW0vdm1zY2FuLmMtNTA5MS1cdHJldHVybiB0cnVlO1xuLS1cbm1tL3Ztc2Nhbi5jPTUyNzY9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01Mjk4LVxubW0vdm1zY2FuLmM6NTI5OTpcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxubW0vdm1zY2FuLmMtNTMwMC1cdFx0c2MtXHUwMDNlbnJfcmVjbGFpbWVkID0gMDtcbi0tXG5tbS92bXNjYW4uYy01MzA2LVxubW0vdm1zY2FuLmM6NTMwNzpcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxubW0vdm1zY2FuLmMtNTMwOC1cdFx0c2MtXHUwMDNlbnJfcmVjbGFpbWVkICYjNDM7PSByZWNsYWltZWQ7XG4tLVxubW0vdm1zY2FuLmMtNTMxNC1cdGlmIChzYy1cdTAwM2Vucl9yZWNsYWltZWQgXHUwMDNlIHJlY2xhaW1lZClcbm1tL3Ztc2Nhbi5jOjUzMTU6XHRcdGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3MocGdkYXQsIHNjLVx1MDAzZW9yZGVyLCBzYy1cdTAwM2VyZWNsYWltX2lkeCk7XG5tbS92bXNjYW4uYy01MzE2LX1cbi0tXG5tbS92bXNjYW4uYz02MDE2PXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MDQ1LVx0ICogREVGX1BSSU9SSVRZIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGZhY3Qgd2UgYXJlIGRpcmVjdFxubW0vdm1zY2FuLmM6NjA0NjpcdCAqIHJlY2xhaW1pbmcgaW1wbGllcyB0aGF0IGtzd2FwZCBpcyBub3Qga2VlcGluZyB1cCBhbmQgaXQgaXMgYmVzdCB0b1xubW0vdm1zY2FuLmMtNjA0Ny1cdCAqIGRvIGEgYmF0Y2ggb2Ygd29yayBhdCBvbmNlLiBGb3IgbWVtY2cgcmVjbGFpbSBvbmUgY2hlY2sgaXMgbWFkZSB0b1xuLS1cbm1tL3Ztc2Nhbi5jLTYwNTAtXHQgKi9cbm1tL3Ztc2Nhbi5jOjYwNTE6XHRwcm9wb3J0aW9uYWxfcmVjbGFpbSA9ICghY2dyb3VwX3JlY2xhaW0oc2MpIFx1MDAyNlx1MDAyNiAhY3VycmVudF9pc19rc3dhcGQoKSBcdTAwMjZcdTAwMjZcbm1tL3Ztc2Nhbi5jLTYwNTItXHRcdFx0XHRzYy1cdTAwM2Vwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkpO1xuLS1cbm1tL3Ztc2Nhbi5jLTYwNzUtXHRcdC8qXG5tbS92bXNjYW4uYzo2MDc2Olx0XHQgKiBGb3Iga3N3YXBkIGFuZCBtZW1jZywgcmVjbGFpbSBhdCBsZWFzdCB0aGUgbnVtYmVyIG9mIHBhZ2VzXG5tbS92bXNjYW4uYy02MDc3LVx0XHQgKiByZXF1ZXN0ZWQuIEVuc3VyZSB0aGF0IHRoZSBhbm9uIGFuZCBmaWxlIExSVXMgYXJlIHNjYW5uZWRcbi0tXG5tbS92bXNjYW4uYz02MjA3PXN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MjIxLVx0ICpcbm1tL3Ztc2Nhbi5jOjYyMjI6XHQgKiBGb3Iga3N3YXBkLCByZWxpYWJsZSBmb3J3YXJkIHByb2dyZXNzIGlzIG1vcmUgaW1wb3J0YW50XG5tbS92bXNjYW4uYy02MjIzLVx0ICogdGhhbiBhIHF1aWNrIHJldHVybiB0byBpZGxlLiBBbHdheXMgZG8gZnVsbCB3YWxrcy5cbm1tL3Ztc2Nhbi5jLTYyMjQtXHQgKi9cbm1tL3Ztc2Nhbi5jOjYyMjU6XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSB8fCBzYy1cdTAwM2VtZW1jZ19mdWxsX3dhbGspXG5tbS92bXNjYW4uYy02MjI2LVx0XHRwYXJ0aWFsID0gTlVMTDtcbi0tXG5tbS92bXNjYW4uYz02Mjg2PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYzMjQtXG5tbS92bXNjYW4uYzo2MzI1Olx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpIHtcbm1tL3Ztc2Nhbi5jLTYzMjYtXHRcdC8qXG4tLVxubW0vdm1zY2FuLmMtNjMzNy1cdFx0ICpcbm1tL3Ztc2Nhbi5jOjYzMzg6XHRcdCAqIE9uY2UgYSBub2RlIGlzIGZsYWdnZWQgUEdEQVRfV1JJVEVCQUNLLCBrc3dhcGQgd2lsbFxubW0vdm1zY2FuLmMtNjMzOS1cdFx0ICogY291bnQgdGhlIG51bWJlciBvZiBwYWdlcyB1bmRlciBwYWdlcyBmbGFnZ2VkIGZvclxuLS1cbm1tL3Ztc2Nhbi5jLTYzNDYtXHRcdC8qXG5tbS92bXNjYW4uYzo2MzQ3Olx0XHQgKiBJZiBrc3dhcGQgc2NhbnMgcGFnZXMgbWFya2VkIGZvciBpbW1lZGlhdGVcbm1tL3Ztc2Nhbi5jLTYzNDgtXHRcdCAqIHJlY2xhaW0gYW5kIHVuZGVyIHdyaXRlYmFjayAobnJfaW1tZWRpYXRlKSwgaXRcbi0tXG5tbS92bXNjYW4uYy02MzY3LVxubW0vdm1zY2FuLmM6NjM2ODpcdFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG5tbS92bXNjYW4uYy02MzY5LVx0XHRcdHNldF9iaXQoTFJVVkVDX05PREVfQ09OR0VTVEVELCBcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWZsYWdzKTtcbi0tXG5tbS92bXNjYW4uYy02MzczLVx0ICogU3RhbGwgZGlyZWN0IHJlY2xhaW0gZm9yIElPIGNvbXBsZXRpb25zIGlmIHRoZSBscnV2ZWMgaXNcbm1tL3Ztc2Nhbi5jOjYzNzQ6XHQgKiBub2RlIGlzIGNvbmdlc3RlZC4gQWxsb3cga3N3YXBkIHRvIGNvbnRpbnVlIHVudGlsIGl0XG5tbS92bXNjYW4uYy02Mzc1LVx0ICogc3RhcnRzIGVuY291bnRlcmluZyB1bnF1ZXVlZCBkaXJ0eSBwYWdlcyBvciBjeWNsaW5nIHRocm91Z2hcbi0tXG5tbS92bXNjYW4uYy02Mzc3LVx0ICovXG5tbS92bXNjYW4uYzo2Mzc4Olx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpIFx1MDAyNlx1MDAyNiBjdXJyZW50X21heV90aHJvdHRsZSgpIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmMtNjM3OS1cdCAgICAhc2MtXHUwMDNlaGliZXJuYXRpb25fbW9kZSBcdTAwMjZcdTAwMjZcbi0tXG5tbS92bXNjYW4uYy02MzkwLVx0ICogc2xlZXAuIE9uIHJlY2xhaW0gcHJvZ3Jlc3MsIHJlc2V0IHRoZSBmYWlsdXJlIGNvdW50ZXIuIEFcbm1tL3Ztc2Nhbi5jOjYzOTE6XHQgKiBzdWNjZXNzZnVsIGRpcmVjdCByZWNsYWltIHJ1biB3aWxsIHJldml2ZSBhIGRvcm1hbnQga3N3YXBkLlxubW0vdm1zY2FuLmMtNjM5Mi1cdCAqL1xubW0vdm1zY2FuLmMtNjM5My1cdGlmIChyZWNsYWltYWJsZSlcbm1tL3Ztc2Nhbi5jOjYzOTQ6XHRcdGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3MocGdkYXQsIHNjLVx1MDAzZW9yZGVyLCBzYy1cdTAwM2VyZWNsYWltX2lkeCk7XG5tbS92bXNjYW4uYy02Mzk1LVx0ZWxzZSBpZiAoc2MtXHUwMDNlY2FjaGVfdHJpbV9tb2RlKVxuLS1cbm1tL3Ztc2Nhbi5jPTY0MzM9c3RhdGljIHZvaWQgY29uc2lkZXJfcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02NDQ5LVx0Lypcbm1tL3Ztc2Nhbi5jOjY0NTA6XHQgKiBEbyBub3QgdGhyb3R0bGUga3N3YXBkIG9yIGNncm91cCByZWNsYWltIG9uIE5PUFJPR1JFU1MgYXMgaXQgd2lsbFxubW0vdm1zY2FuLmMtNjQ1MS1cdCAqIHRocm90dGxlIG9uIFZNU0NBTl9USFJPVFRMRV9XUklURUJBQ0sgaWYgdGhlcmUgYXJlIHRvbyBtYW55IHBhZ2VzXG4tLVxubW0vdm1zY2FuLmMtNjQ1NC1cdCAqL1xubW0vdm1zY2FuLmM6NjQ1NTpcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpIHx8IGNncm91cF9yZWNsYWltKHNjKSlcbm1tL3Ztc2Nhbi5jLTY0NTYtXHRcdHJldHVybjtcbi0tXG5tbS92bXNjYW4uYz02NjkxPXN0YXRpYyBib29sIGFsbG93X2RpcmVjdF9yZWNsYWltKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNjY5OC1cbm1tL3Ztc2Nhbi5jOjY2OTk6XHRpZiAoa3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdkYXQpKVxubW0vdm1zY2FuLmMtNjcwMC1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vdm1zY2FuLmMtNjcxNS1cbm1tL3Ztc2Nhbi5jOjY3MTY6XHQvKiBrc3dhcGQgbXVzdCBiZSBhd2FrZSBpZiBwcm9jZXNzZXMgYXJlIGJlaW5nIHRocm90dGxlZCAqL1xubW0vdm1zY2FuLmM6NjcxNzpcdGlmICghd21hcmtfb2sgXHUwMDI2XHUwMDI2IHdhaXRxdWV1ZV9hY3RpdmUoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX3dhaXQpKSB7XG5tbS92bXNjYW4uYzo2NzE4Olx0XHRpZiAoUkVBRF9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgpIFx1MDAzZSBaT05FX05PUk1BTClcbm1tL3Ztc2Nhbi5jOjY3MTk6XHRcdFx0V1JJVEVfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LCBaT05FX05PUk1BTCk7XG5tbS92bXNjYW4uYy02NzIwLVxubW0vdm1zY2FuLmM6NjcyMTpcdFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFx1MDAyNnBnZGF0LVx1MDAzZWtzd2FwZF93YWl0KTtcbm1tL3Ztc2Nhbi5jLTY3MjItXHR9XG4tLVxubW0vdm1zY2FuLmMtNjcyOS0gKiBhbmQgdGhlIFBGTUVNQUxMT0MgcmVzZXJ2ZSBmb3IgdGhlIHByZWZlcnJlZCBub2RlIGlzIGdldHRpbmcgZGFuZ2Vyb3VzbHlcbm1tL3Ztc2Nhbi5jOjY3MzA6ICogZGVwbGV0ZWQuIGtzd2FwZCB3aWxsIGNvbnRpbnVlIHRvIG1ha2UgcHJvZ3Jlc3MgYW5kIHdha2UgdGhlIHByb2Nlc3Nlc1xubW0vdm1zY2FuLmMtNjczMS0gKiB3aGVuIHRoZSBsb3cgd2F0ZXJtYXJrIGlzIHJlYWNoZWQuXG4tLVxubW0vdm1zY2FuLmM9NjczNj1zdGF0aWMgYm9vbCB0aHJvdHRsZV9kaXJlY3RfcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcbi0tXG5tbS92bXNjYW4uYy02NzY2LVx0ICogVGhyb3R0bGluZyBpcyBiYXNlZCBvbiB0aGUgZmlyc3QgdXNhYmxlIG5vZGUgYW5kIHRocm90dGxlZCBwcm9jZXNzZXNcbm1tL3Ztc2Nhbi5jOjY3Njc6XHQgKiB3YWl0IG9uIGEgcXVldWUgdW50aWwga3N3YXBkIG1ha2VzIHByb2dyZXNzIGFuZCB3YWtlcyB0aGVtLiBUaGVyZVxubW0vdm1zY2FuLmMtNjc2OC1cdCAqIGlzIGFuIGFmZmluaXR5IHRoZW4gYmV0d2VlbiBwcm9jZXNzZXMgd2FraW5nIHVwIGFuZCB3aGVyZSByZWNsYWltXG4tLVxubW0vdm1zY2FuLmMtNjc5Ni1cdCAqIHRyYW5zYWN0aW9uIGluIHRoZSBjYXNlIG9mIGEgZmlsZXN5c3RlbSBsaWtlIGV4dFszfDRdLiBJbiB0aGlzIGNhc2UsXG5tbS92bXNjYW4uYzo2Nzk3Olx0ICogaXQgaXMgbm90IHNhZmUgdG8gYmxvY2sgb24gcGZtZW1hbGxvY193YWl0IGFzIGtzd2FwZCBjb3VsZCBiZVxubW0vdm1zY2FuLmMtNjc5OC1cdCAqIGJsb2NrZWQgd2FpdGluZyBvbiB0aGUgc2FtZSBsb2NrLiBJbnN0ZWFkLCB0aHJvdHRsZSBmb3IgdXAgdG8gYVxuLS1cbm1tL3Ztc2Nhbi5jLTY4MDQtXHRlbHNlXG5tbS92bXNjYW4uYzo2ODA1Olx0XHQvKiBUaHJvdHRsZSB1bnRpbCBrc3dhcGQgd2FrZXMgdGhlIHByb2Nlc3MgKi9cbm1tL3Ztc2Nhbi5jLTY4MDYtXHRcdHdhaXRfZXZlbnRfa2lsbGFibGUoem9uZS1cdTAwM2V6b25lX3BnZGF0LVx1MDAzZXBmbWVtYWxsb2Nfd2FpdCxcbi0tXG5tbS92bXNjYW4uYz02OTQzPXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNjk1Mi1cbm1tL3Ztc2Nhbi5jOjY5NTM6c3RhdGljIHZvaWQga3N3YXBkX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjk1NC17XG4tLVxubW0vdm1zY2FuLmM9NzAxMD1zdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzAzMi1cdFx0ICpcbm1tL3Ztc2Nhbi5jOjcwMzM6XHRcdCAqIEhvd2V2ZXIsIGtzd2FwZCB1c3VhbGx5IGNhbm5vdCBhY2NvbXBsaXNoIHRoaXMgb25cbm1tL3Ztc2Nhbi5jLTcwMzQtXHRcdCAqIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LiBPbmNlIGl0JiMzOTtzXG5tbS92bXNjYW4uYzo3MDM1Olx0XHQgKiByZWNsYWltZWQgYSBjb21wYWN0aW9uIGdhcCwgYW5kIGtzd2FwZF9zaHJpbmtfbm9kZVxubW0vdm1zY2FuLmMtNzAzNi1cdFx0ICogaGFzIGRyb3BwZWQgb3JkZXIsIHNpbXBseSBlbnN1cmUgdGhlcmUgYXJlIGVub3VnaFxuLS1cbm1tL3Ztc2Nhbi5jLTcwNjctXHQgKiBuZWVkIGJhbGFuY2luZyBieSBkZWZpbml0aW9uLiBUaGlzIGNhbiBoYXBwZW4gaWYgYSB6b25lLXJlc3RyaWN0ZWRcbm1tL3Ztc2Nhbi5jOjcwNjg6XHQgKiBhbGxvY2F0aW9uIHRyaWVzIHRvIHdha2UgYSByZW1vdGUga3N3YXBkLlxubW0vdm1zY2FuLmMtNzA2OS1cdCAqL1xuLS1cbm1tL3Ztc2Nhbi5jPTcwNzc9c3RhdGljIHZvaWQgY2xlYXJfcGdkYXRfY29uZ2VzdGVkKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNzA4Ni0vKlxubW0vdm1zY2FuLmM6NzA4NzogKiBQcmVwYXJlIGtzd2FwZCBmb3Igc2xlZXBpbmcuIFRoaXMgdmVyaWZpZXMgdGhhdCB0aGVyZSBhcmUgbm8gcHJvY2Vzc2VzXG5tbS92bXNjYW4uYy03MDg4LSAqIHdhaXRpbmcgaW4gdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oKSBhbmQgdGhhdCB3YXRlcm1hcmtzIGhhdmUgYmVlbiBtZXQuXG5tbS92bXNjYW4uYy03MDg5LSAqXG5tbS92bXNjYW4uYzo3MDkwOiAqIFJldHVybnMgdHJ1ZSBpZiBrc3dhcGQgaXMgcmVhZHkgdG8gc2xlZXBcbm1tL3Ztc2Nhbi5jLTcwOTEtICovXG5tbS92bXNjYW4uYzo3MDkyOnN0YXRpYyBib29sIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcbm1tL3Ztc2Nhbi5jLTcwOTMtXHRcdFx0XHRpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTcwOTctXHQgKiBzb29uIGFzIGFsbG93X2RpcmVjdF9yZWNsYWltKCkgaXMgdHJ1ZS4gQnV0IHRoZXJlIGlzIGEgcG90ZW50aWFsXG5tbS92bXNjYW4uYzo3MDk4Olx0ICogcmFjZSBiZXR3ZWVuIHdoZW4ga3N3YXBkIGNoZWNrcyB0aGUgd2F0ZXJtYXJrcyBhbmQgYSBwcm9jZXNzIGdldHNcbm1tL3Ztc2Nhbi5jLTcwOTktXHQgKiB0aHJvdHRsZWQuIFRoZXJlIGlzIGFsc28gYSBwb3RlbnRpYWwgcmFjZSBpZiBwcm9jZXNzZXMgZ2V0XG5tbS92bXNjYW4uYzo3MTAwOlx0ICogdGhyb3R0bGVkLCBrc3dhcGQgd2FrZXMsIGEgbGFyZ2UgcHJvY2VzcyBleGl0cyB0aGVyZWJ5IGJhbGFuY2luZyB0aGVcbm1tL3Ztc2Nhbi5jOjcxMDE6XHQgKiB6b25lcywgd2hpY2ggY2F1c2VzIGtzd2FwZCB0byBleGl0IGJhbGFuY2VfcGdkYXQoKSBiZWZvcmUgcmVhY2hpbmdcbm1tL3Ztc2Nhbi5jOjcxMDI6XHQgKiB0aGUgd2FrZSB1cCBjaGVja3MuIElmIGtzd2FwZCBpcyBnb2luZyB0byBzbGVlcCwgbm8gcHJvY2VzcyBzaG91bGRcbm1tL3Ztc2Nhbi5jLTcxMDMtXHQgKiBiZSBzbGVlcGluZyBvbiBwZm1lbWFsbG9jX3dhaXQsIHNvIHdha2UgdGhlbSBub3cgaWYgbmVjZXNzYXJ5LiBJZlxubW0vdm1zY2FuLmM6NzEwNDpcdCAqIHRoZSB3YWtlIHVwIGlzIHByZW1hdHVyZSwgcHJvY2Vzc2VzIHdpbGwgd2FrZSBrc3dhcGQgYW5kIGdldFxubW0vdm1zY2FuLmMtNzEwNS1cdCAqIHRocm90dGxlZCBhZ2Fpbi4gVGhlIGRpZmZlcmVuY2UgZnJvbSB3YWtlIHVwcyBpbiBiYWxhbmNlX3BnZGF0KCkgaXNcbi0tXG5tbS92bXNjYW4uYy03MTExLVx0LyogSG9wZWxlc3Mgbm9kZSwgbGVhdmUgaXQgdG8gZGlyZWN0IHJlY2xhaW0gKi9cbm1tL3Ztc2Nhbi5jOjcxMTI6XHRpZiAoa3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdkYXQpKVxubW0vdm1zY2FuLmMtNzExMy1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vdm1zY2FuLmMtNzEyMy0vKlxubW0vdm1zY2FuLmM6NzEyNDogKiBrc3dhcGQgc2hyaW5rcyBhIG5vZGUgb2YgcGFnZXMgdGhhdCBhcmUgYXQgb3IgYmVsb3cgdGhlIGhpZ2hlc3QgdXNhYmxlXG5tbS92bXNjYW4uYy03MTI1LSAqIHpvbmUgdGhhdCBpcyBjdXJyZW50bHkgdW5iYWxhbmNlZC5cbm1tL3Ztc2Nhbi5jLTcxMjYtICpcbm1tL3Ztc2Nhbi5jOjcxMjc6ICogUmV0dXJucyB0cnVlIGlmIGtzd2FwZCBzY2FubmVkIGF0IGxlYXN0IHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIHBhZ2VzIHRvXG5tbS92bXNjYW4uYy03MTI4LSAqIHJlY2xhaW0gb3IgaWYgdGhlIGxhY2sgb2YgcHJvZ3Jlc3Mgd2FzIGR1ZSB0byBwYWdlcyB1bmRlciB3cml0ZWJhY2suXG4tLVxubW0vdm1zY2FuLmMtNzEzMC0gKi9cbm1tL3Ztc2Nhbi5jOjcxMzE6c3RhdGljIGJvb2wga3N3YXBkX3Nocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsXG5tbS92bXNjYW4uYy03MTMyLVx0XHRcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYz03MTg2PWNsZWFyX3JlY2xhaW1fYWN0aXZlKHBnX2RhdGFfdCAqcGdkYXQsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzE5MS0vKlxubW0vdm1zY2FuLmM6NzE5MjogKiBGb3Iga3N3YXBkLCBiYWxhbmNlX3BnZGF0KCkgd2lsbCByZWNsYWltIHBhZ2VzIGFjcm9zcyBhIG5vZGUgZnJvbSB6b25lc1xubW0vdm1zY2FuLmMtNzE5My0gKiB0aGF0IGFyZSBlbGlnaWJsZSBmb3IgdXNlIGJ5IHRoZSBjYWxsZXIgdW50aWwgYXQgbGVhc3Qgb25lIHpvbmUgaXNcbi0tXG5tbS92bXNjYW4uYy03MTk1LSAqXG5tbS92bXNjYW4uYzo3MTk2OiAqIFJldHVybnMgdGhlIG9yZGVyIGtzd2FwZCBmaW5pc2hlZCByZWNsYWltaW5nIGF0LlxubW0vdm1zY2FuLmMtNzE5Ny0gKlxubW0vdm1zY2FuLmM6NzE5ODogKiBrc3dhcGQgc2NhbnMgdGhlIHpvbmVzIGluIHRoZSBoaWdobWVtLVx1MDAzZW5vcm1hbC1cdTAwM2VkbWEgZGlyZWN0aW9uLiAgSXQgc2tpcHNcbm1tL3Ztc2Nhbi5jLTcxOTktICogem9uZXMgd2hpY2ggaGF2ZSBmcmVlX3BhZ2VzIFx1MDAzZSBoaWdoX3dtYXJrX3BhZ2VzKHpvbmUpLCBidXQgb25jZSBhIHpvbmUgaXNcbi0tXG5tbS92bXNjYW4uYz03MjA0PXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzIzMC1cdCAqIHBsYWNlIHNvIHRoYXQgcGFyYWxsZWwgYWxsb2NhdGlvbnMgdGhhdCBhcmUgbmVhciB0aGUgd2F0ZXJtYXJrIHdpbGxcbm1tL3Ztc2Nhbi5jOjcyMzE6XHQgKiBzdGFsbCBvciBkaXJlY3QgcmVjbGFpbSB1bnRpbCBrc3dhcGQgaXMgZmluaXNoZWQuXG5tbS92bXNjYW4uYy03MjMyLVx0ICovXG4tLVxubW0vdm1zY2FuLmMtNzI1OS1cdFx0ICogZ28gYWhlYWQgaWYgYWxsIGVsaWdpYmxlIHpvbmVzIGZvciB0aGUgb3JpZ2luYWwgYWxsb2NhdGlvblxubW0vdm1zY2FuLmM6NzI2MDpcdFx0ICogcmVxdWVzdCBhcmUgYmFsYW5jZWQgdG8gYXZvaWQgZXhjZXNzaXZlIHJlY2xhaW0gZnJvbSBrc3dhcGQuXG5tbS92bXNjYW4uYy03MjYxLVx0XHQgKi9cbi0tXG5tbS92bXNjYW4uYy03Mjc3LVx0XHQgKiBvbiB0aGUgZ3JvdW5kcyB0aGF0IHRoZSBub3JtYWwgcmVjbGFpbSBzaG91bGQgYmUgZW5vdWdoIHRvXG5tbS92bXNjYW4uYzo3Mjc4Olx0XHQgKiByZS1ldmFsdWF0ZSBpZiBib29zdGluZyBpcyByZXF1aXJlZCB3aGVuIGtzd2FwZCBuZXh0IHdha2VzLlxubW0vdm1zY2FuLmMtNzI3OS1cdFx0ICovXG4tLVxubW0vdm1zY2FuLmMtNzMxMS1cdFx0ICovXG5tbS92bXNjYW4uYzo3MzEyOlx0XHRrc3dhcGRfYWdlX25vZGUocGdkYXQsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTczMTMtXG4tLVxubW0vdm1zY2FuLmMtNzMyNS1cdFx0ICovXG5tbS92bXNjYW4uYzo3MzI2Olx0XHRpZiAoa3N3YXBkX3Nocmlua19ub2RlKHBnZGF0LCBcdTAwMjZzYykpXG5tbS92bXNjYW4uYy03MzI3LVx0XHRcdHJhaXNlX3ByaW9yaXR5ID0gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmMtNzMzNy1cbm1tL3Ztc2Nhbi5jOjczMzg6XHRcdC8qIENoZWNrIGlmIGtzd2FwZCBzaG91bGQgYmUgc3VzcGVuZGluZyAqL1xubW0vdm1zY2FuLmMtNzMzOS1cdFx0X19mc19yZWNsYWltX3JlbGVhc2UoX1RISVNfSVBfKTtcbi0tXG5tbS92bXNjYW4uYy03Mzc2LVx0ICogd2F0ZXJtYXJrX2hpZ2ggYXQgdGhpcyBwb2ludC4gV2UgbmVlZCB0byBhdm9pZCBpbmNyZWFzaW5nIHRoZVxubW0vdm1zY2FuLmM6NzM3NzpcdCAqIGZhaWx1cmUgY291bnQgdG8gcHJldmVudCB0aGUga3N3YXBkIHRocmVhZCBmcm9tIHN0b3BwaW5nLlxubW0vdm1zY2FuLmMtNzM3OC1cdCAqL1xubW0vdm1zY2FuLmMtNzM3OS1cdGlmICghc2MubnJfcmVjbGFpbWVkIFx1MDAyNlx1MDAyNiAhYm9vc3RlZCkge1xubW0vdm1zY2FuLmM6NzM4MDpcdFx0aW50IGZhaWxfY250ID0gYXRvbWljX2luY19yZXR1cm4oXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX2ZhaWx1cmVzKTtcbm1tL3Ztc2Nhbi5jOjczODE6XHRcdC8qIGtzd2FwZCBjb250ZXh0LCBsb3cgb3ZlcmhlYWQgdG8gdHJhY2UgZXZlcnkgZmFpbHVyZSAqL1xubW0vdm1zY2FuLmM6NzM4MjpcdFx0dHJhY2VfbW1fdm1zY2FuX2tzd2FwZF9yZWNsYWltX2ZhaWwocGdkYXQtXHUwMDNlbm9kZV9pZCwgZmFpbF9jbnQpO1xubW0vdm1zY2FuLmMtNzM4My1cdH1cbi0tXG5tbS92bXNjYW4uYy03NDE4LVx0Lypcbm1tL3Ztc2Nhbi5jOjc0MTk6XHQgKiBSZXR1cm4gdGhlIG9yZGVyIGtzd2FwZCBzdG9wcGVkIHJlY2xhaW1pbmcgYXQgYXNcbm1tL3Ztc2Nhbi5jOjc0MjA6XHQgKiBwcmVwYXJlX2tzd2FwZF9zbGVlcCgpIHRha2VzIGl0IGludG8gYWNjb3VudC4gSWYgYW5vdGhlciBjYWxsZXJcbm1tL3Ztc2Nhbi5jOjc0MjE6XHQgKiBlbnRlcmVkIHRoZSBhbGxvY2F0b3Igc2xvdyBwYXRoIHdoaWxlIGtzd2FwZCB3YXMgYXdha2UsIG9yZGVyIHdpbGxcbm1tL3Ztc2Nhbi5jLTc0MjItXHQgKiByZW1haW4gYXQgdGhlIGhpZ2hlciBsZXZlbC5cbi0tXG5tbS92bXNjYW4uYy03NDI3LS8qXG5tbS92bXNjYW4uYzo3NDI4OiAqIFRoZSBwZ2RhdC1cdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4IGlzIHVzZWQgdG8gcGFzcyB0aGUgaGlnaGVzdCB6b25lIGluZGV4IHRvXG5tbS92bXNjYW4uYzo3NDI5OiAqIGJlIHJlY2xhaW1lZCBieSBrc3dhcGQgZnJvbSB0aGUgd2FrZXIuIElmIHRoZSB2YWx1ZSBpcyBNQVhfTlJfWk9ORVMgd2hpY2ggaXNcbm1tL3Ztc2Nhbi5jOjc0MzA6ICogbm90IGEgdmFsaWQgaW5kZXggdGhlbiBlaXRoZXIga3N3YXBkIHJ1bnMgZm9yIGZpcnN0IHRpbWUgb3Iga3N3YXBkIGNvdWxkbiYjMzk7dFxubW0vdm1zY2FuLmMtNzQzMS0gKiBzbGVlcCBhZnRlciBwcmV2aW91cyByZWNsYWltIGF0dGVtcHQgKG5vZGUgaXMgc3RpbGwgdW5iYWxhbmNlZCkuIEluIHRoYXRcbm1tL3Ztc2Nhbi5jOjc0MzI6ICogY2FzZSByZXR1cm4gdGhlIHpvbmUgaW5kZXggb2YgdGhlIHByZXZpb3VzIGtzd2FwZCByZWNsYWltIGN5Y2xlLlxubW0vdm1zY2FuLmMtNzQzMy0gKi9cbm1tL3Ztc2Nhbi5jOjc0MzQ6c3RhdGljIGVudW0gem9uZV90eXBlIGtzd2FwZF9oaWdoZXN0X3pvbmVpZHgocGdfZGF0YV90ICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTc0MzUtXHRcdFx0XHRcdCAgIGVudW0gem9uZV90eXBlIHByZXZfaGlnaGVzdF96b25laWR4KVxubW0vdm1zY2FuLmMtNzQzNi17XG5tbS92bXNjYW4uYzo3NDM3Olx0ZW51bSB6b25lX3R5cGUgY3Vycl9pZHggPSBSRUFEX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCk7XG5tbS92bXNjYW4uYy03NDM4LVxuLS1cbm1tL3Ztc2Nhbi5jLTc0NDEtXG5tbS92bXNjYW4uYzo3NDQyOnN0YXRpYyB2b2lkIGtzd2FwZF90cnlfdG9fc2xlZXAocGdfZGF0YV90ICpwZ2RhdCwgaW50IGFsbG9jX29yZGVyLCBpbnQgcmVjbGFpbV9vcmRlcixcbm1tL3Ztc2Nhbi5jLTc0NDMtXHRcdFx0XHR1bnNpZ25lZCBpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTc0NTAtXG5tbS92bXNjYW4uYzo3NDUxOlx0cHJlcGFyZV90b193YWl0KFx1MDAyNnBnZGF0LVx1MDAzZWtzd2FwZF93YWl0LCBcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xubW0vdm1zY2FuLmMtNzQ1Mi1cbi0tXG5tbS92bXNjYW4uYy03NDU5LVx0ICovXG5tbS92bXNjYW4uYzo3NDYwOlx0aWYgKHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnZGF0LCByZWNsYWltX29yZGVyLCBoaWdoZXN0X3pvbmVpZHgpKSB7XG5tbS92bXNjYW4uYy03NDYxLVx0XHQvKlxuLS1cbm1tL3Ztc2Nhbi5jLTc0NjMtXHRcdCAqIGlzb2xhdGUgcGFnZXMgZnJvbSBhbmQgc2tpcHMgdGhlbSBpbiB0aGUgZnV0dXJlIHNjYW5uaW5nLlxubW0vdm1zY2FuLmM6NzQ2NDpcdFx0ICogV2hlbiBrc3dhcGQgaXMgZ29pbmcgdG8gc2xlZXAsIGl0IGlzIHJlYXNvbmFibGUgdG8gYXNzdW1lXG5tbS92bXNjYW4uYy03NDY1LVx0XHQgKiB0aGF0IHBhZ2VzIGFuZCBjb21wYWN0aW9uIG1heSBzdWNjZWVkIHNvIHJlc2V0IHRoZSBjYWNoZS5cbi0tXG5tbS92bXNjYW4uYy03NDc3LVx0XHQvKlxubW0vdm1zY2FuLmM6NzQ3ODpcdFx0ICogSWYgd29rZW4gcHJlbWF0dXJlbHkgdGhlbiByZXNldCBrc3dhcGRfaGlnaGVzdF96b25laWR4IGFuZFxubW0vdm1zY2FuLmMtNzQ3OS1cdFx0ICogb3JkZXIuIFRoZSB2YWx1ZXMgd2lsbCBlaXRoZXIgYmUgZnJvbSBhIHdha2V1cCByZXF1ZXN0IG9yXG4tLVxubW0vdm1zY2FuLmMtNzQ4Mi1cdFx0aWYgKHJlbWFpbmluZykge1xubW0vdm1zY2FuLmM6NzQ4MzpcdFx0XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsXG5tbS92bXNjYW4uYzo3NDg0Olx0XHRcdFx0XHRrc3dhcGRfaGlnaGVzdF96b25laWR4KHBnZGF0LFxubW0vdm1zY2FuLmMtNzQ4NS1cdFx0XHRcdFx0XHRcdGhpZ2hlc3Rfem9uZWlkeCkpO1xubW0vdm1zY2FuLmMtNzQ4Ni1cbm1tL3Ztc2Nhbi5jOjc0ODc6XHRcdFx0aWYgKFJFQURfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfb3JkZXIpIFx1MDAzYyByZWNsYWltX29yZGVyKVxubW0vdm1zY2FuLmM6NzQ4ODpcdFx0XHRcdFdSSVRFX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX29yZGVyLCByZWNsYWltX29yZGVyKTtcbm1tL3Ztc2Nhbi5jLTc0ODktXHRcdH1cbm1tL3Ztc2Nhbi5jLTc0OTAtXG5tbS92bXNjYW4uYzo3NDkxOlx0XHRmaW5pc2hfd2FpdChcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfd2FpdCwgXHUwMDI2d2FpdCk7XG5tbS92bXNjYW4uYzo3NDkyOlx0XHRwcmVwYXJlX3RvX3dhaXQoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX3dhaXQsIFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XG5tbS92bXNjYW4uYy03NDkzLVx0fVxuLS1cbm1tL3Ztc2Nhbi5jLTc0OTktXHRpZiAoIXJlbWFpbmluZyBcdTAwMjZcdTAwMjZcbm1tL3Ztc2Nhbi5jOjc1MDA6XHQgICAgcHJlcGFyZV9rc3dhcGRfc2xlZXAocGdkYXQsIHJlY2xhaW1fb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkpIHtcbm1tL3Ztc2Nhbi5jOjc1MDE6XHRcdHRyYWNlX21tX3Ztc2Nhbl9rc3dhcGRfc2xlZXAocGdkYXQtXHUwMDNlbm9kZV9pZCk7XG5tbS92bXNjYW4uYy03NTAyLVxuLS1cbm1tL3Ztc2Nhbi5jLTc1MDctXHRcdCAqIHdhdGVybWFya3MgYmVpbmcgYnJlYWNoZWQgd2hpbGUgdW5kZXIgcHJlc3N1cmUsIHdlIHJlZHVjZSB0aGVcbm1tL3Ztc2Nhbi5jOjc1MDg6XHRcdCAqIHBlci1jcHUgdm1zdGF0IHRocmVzaG9sZCB3aGlsZSBrc3dhcGQgaXMgYXdha2UgYW5kIHJlc3RvcmVcbm1tL3Ztc2Nhbi5jLTc1MDktXHRcdCAqIHRoZW0gYmVmb3JlIGdvaW5nIGJhY2sgdG8gc2xlZXAuXG4tLVxubW0vdm1zY2FuLmMtNzUyMi1cdH1cbm1tL3Ztc2Nhbi5jOjc1MjM6XHRmaW5pc2hfd2FpdChcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfd2FpdCwgXHUwMDI2d2FpdCk7XG5tbS92bXNjYW4uYy03NTI0LX1cbi0tXG5tbS92bXNjYW4uYy03NTM4LSAqL1xubW0vdm1zY2FuLmM6NzUzOTpzdGF0aWMgaW50IGtzd2FwZCh2b2lkICpwKVxubW0vdm1zY2FuLmMtNzU0MC17XG4tLVxubW0vdm1zY2FuLmMtNzU0OC1cdCAqIGFuZCB0aGF0IGlmIHdlIG5lZWQgbW9yZSBtZW1vcnkgd2Ugc2hvdWxkIGdldCBhY2Nlc3MgdG8gaXRcbm1tL3Ztc2Nhbi5jOjc1NDk6XHQgKiByZWdhcmRsZXNzIChzZWUgXCYjMzQ7X19hbGxvY19wYWdlcygpXCYjMzQ7KS4gXCYjMzQ7a3N3YXBkXCYjMzQ7IHNob3VsZFxubW0vdm1zY2FuLmMtNzU1MC1cdCAqIG5ldmVyIGdldCBjYXVnaHQgaW4gdGhlIG5vcm1hbCBwYWdlIGZyZWVpbmcgbG9naWMuXG4tLVxubW0vdm1zY2FuLmMtNzU2MC1cbm1tL3Ztc2Nhbi5jOjc1NjE6XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9vcmRlciwgMCk7XG5tbS92bXNjYW4uYzo3NTYyOlx0V1JJVEVfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LCBNQVhfTlJfWk9ORVMpO1xubW0vdm1zY2FuLmMtNzU2My1cdGF0b21pY19zZXQoXHUwMDI2cGdkYXQtXHUwMDNlbnJfd3JpdGViYWNrX3Rocm90dGxlZCwgMCk7XG4tLVxubW0vdm1zY2FuLmMtNzU2Ni1cbm1tL3Ztc2Nhbi5jOjc1Njc6XHRcdGFsbG9jX29yZGVyID0gcmVjbGFpbV9vcmRlciA9IFJFQURfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfb3JkZXIpO1xubW0vdm1zY2FuLmM6NzU2ODpcdFx0aGlnaGVzdF96b25laWR4ID0ga3N3YXBkX2hpZ2hlc3Rfem9uZWlkeChwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTc1NjktXHRcdFx0XHRcdFx0XHRoaWdoZXN0X3pvbmVpZHgpO1xubW0vdm1zY2FuLmMtNzU3MC1cbm1tL3Ztc2Nhbi5jOjc1NzE6a3N3YXBkX3RyeV9zbGVlcDpcbm1tL3Ztc2Nhbi5jOjc1NzI6XHRcdGtzd2FwZF90cnlfdG9fc2xlZXAocGdkYXQsIGFsbG9jX29yZGVyLCByZWNsYWltX29yZGVyLFxubW0vdm1zY2FuLmMtNzU3My1cdFx0XHRcdFx0aGlnaGVzdF96b25laWR4KTtcbi0tXG5tbS92bXNjYW4uYy03NTc1LVx0XHQvKiBSZWFkIHRoZSBuZXcgb3JkZXIgYW5kIGhpZ2hlc3Rfem9uZWlkeCAqL1xubW0vdm1zY2FuLmM6NzU3NjpcdFx0YWxsb2Nfb3JkZXIgPSBSRUFEX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX29yZGVyKTtcbm1tL3Ztc2Nhbi5jOjc1Nzc6XHRcdGhpZ2hlc3Rfem9uZWlkeCA9IGtzd2FwZF9oaWdoZXN0X3pvbmVpZHgocGdkYXQsXG5tbS92bXNjYW4uYy03NTc4LVx0XHRcdFx0XHRcdFx0aGlnaGVzdF96b25laWR4KTtcbm1tL3Ztc2Nhbi5jOjc1Nzk6XHRcdFdSSVRFX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX29yZGVyLCAwKTtcbm1tL3Ztc2Nhbi5jOjc1ODA6XHRcdFdSSVRFX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCwgTUFYX05SX1pPTkVTKTtcbm1tL3Ztc2Nhbi5jLTc1ODEtXG4tLVxubW0vdm1zY2FuLmMtNzU5My1cdFx0ICogUmVjbGFpbSBiZWdpbnMgYXQgdGhlIHJlcXVlc3RlZCBvcmRlciBidXQgaWYgYSBoaWdoLW9yZGVyXG5tbS92bXNjYW4uYzo3NTk0Olx0XHQgKiByZWNsYWltIGZhaWxzIHRoZW4ga3N3YXBkIGZhbGxzIGJhY2sgdG8gcmVjbGFpbWluZyBmb3Jcbm1tL3Ztc2Nhbi5jOjc1OTU6XHRcdCAqIG9yZGVyLTAuIElmIHRoYXQgaGFwcGVucywga3N3YXBkIHdpbGwgY29uc2lkZXIgc2xlZXBpbmdcbm1tL3Ztc2Nhbi5jLTc1OTYtXHRcdCAqIGZvciB0aGUgb3JkZXIgaXQgZmluaXNoZWQgcmVjbGFpbWluZyBhdCAocmVjbGFpbV9vcmRlcilcbi0tXG5tbS92bXNjYW4uYy03NTk5LVx0XHQgKi9cbm1tL3Ztc2Nhbi5jOjc2MDA6XHRcdHRyYWNlX21tX3Ztc2Nhbl9rc3dhcGRfd2FrZShwZ2RhdC1cdTAwM2Vub2RlX2lkLCBoaWdoZXN0X3pvbmVpZHgsXG5tbS92bXNjYW4uYy03NjAxLVx0XHRcdFx0XHRcdGFsbG9jX29yZGVyKTtcbi0tXG5tbS92bXNjYW4uYy03NjA0LVx0XHRpZiAocmVjbGFpbV9vcmRlciBcdTAwM2MgYWxsb2Nfb3JkZXIpXG5tbS92bXNjYW4uYzo3NjA1Olx0XHRcdGdvdG8ga3N3YXBkX3RyeV9zbGVlcDtcbm1tL3Ztc2Nhbi5jLTc2MDYtXHR9XG4tLVxubW0vdm1zY2FuLmMtNzYxNC0gKiBBIHpvbmUgaXMgbG93IG9uIGZyZWUgbWVtb3J5IG9yIHRvbyBmcmFnbWVudGVkIGZvciBoaWdoLW9yZGVyIG1lbW9yeS4gIElmXG5tbS92bXNjYW4uYzo3NjE1OiAqIGtzd2FwZCBzaG91bGQgcmVjbGFpbSAoZGlyZWN0IHJlY2xhaW0gaXMgZGVmZXJyZWQpLCB3YWtlIGl0IHVwIGZvciB0aGUgem9uZSYjMzk7c1xubW0vdm1zY2FuLmM6NzYxNjogKiBwZ2RhdC4gIEl0IHdpbGwgd2FrZSB1cCBrY29tcGFjdGQgYWZ0ZXIgcmVjbGFpbWluZyBtZW1vcnkuICBJZiBrc3dhcGQgcmVjbGFpbVxubW0vdm1zY2FuLmMtNzYxNy0gKiBoYXMgZmFpbGVkIG9yIGlzIG5vdCBuZWVkZWQsIHN0aWxsIHdha2UgdXAga2NvbXBhY3RkIGlmIG9ubHkgY29tcGFjdGlvbiBpc1xuLS1cbm1tL3Ztc2Nhbi5jLTc2MTktICovXG5tbS92bXNjYW4uYzo3NjIwOnZvaWQgd2FrZXVwX2tzd2FwZChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgb3JkZXIsXG5tbS92bXNjYW4uYy03NjIxLVx0XHQgICBlbnVtIHpvbmVfdHlwZSBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzYzMi1cdHBnZGF0ID0gem9uZS1cdTAwM2V6b25lX3BnZGF0O1xubW0vdm1zY2FuLmM6NzYzMzpcdGN1cnJfaWR4ID0gUkVBRF9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgpO1xubW0vdm1zY2FuLmMtNzYzNC1cbm1tL3Ztc2Nhbi5jLTc2MzUtXHRpZiAoY3Vycl9pZHggPT0gTUFYX05SX1pPTkVTIHx8IGN1cnJfaWR4IFx1MDAzYyBoaWdoZXN0X3pvbmVpZHgpXG5tbS92bXNjYW4uYzo3NjM2Olx0XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsIGhpZ2hlc3Rfem9uZWlkeCk7XG5tbS92bXNjYW4uYy03NjM3LVxubW0vdm1zY2FuLmM6NzYzODpcdGlmIChSRUFEX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX29yZGVyKSBcdTAwM2Mgb3JkZXIpXG5tbS92bXNjYW4uYzo3NjM5Olx0XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9vcmRlciwgb3JkZXIpO1xubW0vdm1zY2FuLmMtNzY0MC1cbm1tL3Ztc2Nhbi5jOjc2NDE6XHRpZiAoIXdhaXRxdWV1ZV9hY3RpdmUoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX3dhaXQpKVxubW0vdm1zY2FuLmMtNzY0Mi1cdFx0cmV0dXJuO1xuLS1cbm1tL3Ztc2Nhbi5jLTc2NDQtXHQvKiBIb3BlbGVzcyBub2RlLCBsZWF2ZSBpdCB0byBkaXJlY3QgcmVjbGFpbSBpZiBwb3NzaWJsZSAqL1xubW0vdm1zY2FuLmM6NzY0NTpcdGlmIChrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ2RhdCkgfHxcbm1tL3Ztc2Nhbi5jLTc2NDYtXHQgICAgKHBnZGF0X2JhbGFuY2VkKHBnZGF0LCBvcmRlciwgaGlnaGVzdF96b25laWR4KSBcdTAwMjZcdTAwMjZcbi0tXG5tbS92bXNjYW4uYy03NjU5LVxubW0vdm1zY2FuLmM6NzY2MDpcdHRyYWNlX21tX3Ztc2Nhbl93YWtldXBfa3N3YXBkKHBnZGF0LVx1MDAzZW5vZGVfaWQsIGhpZ2hlc3Rfem9uZWlkeCwgb3JkZXIsXG5tbS92bXNjYW4uYy03NjYxLVx0XHRcdFx0ICAgICAgZ2ZwX2ZsYWdzKTtcbm1tL3Ztc2Nhbi5jOjc2NjI6XHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX3dhaXQpO1xubW0vdm1zY2FuLmMtNzY2My19XG5tbS92bXNjYW4uYy03NjY0LVxubW0vdm1zY2FuLmM6NzY2NTp2b2lkIGtzd2FwZF9jbGVhcl9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0LCBlbnVtIGtzd2FwZF9jbGVhcl9ob3BlbGVzc19yZWFzb24gcmVhc29uKVxubW0vdm1zY2FuLmMtNzY2Ni17XG5tbS92bXNjYW4uYy03NjY3LVx0LyogT25seSB0cmFjZSBhY3R1YWwgcmVzZXRzLCBub3QgcmVkdW5kYW50IHplcm8tdG8temVybyAqL1xubW0vdm1zY2FuLmM6NzY2ODpcdGlmIChhdG9taWNfeGNoZyhcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfZmFpbHVyZXMsIDApKVxubW0vdm1zY2FuLmM6NzY2OTpcdFx0dHJhY2VfbW1fdm1zY2FuX2tzd2FwZF9jbGVhcl9ob3BlbGVzcyhwZ2RhdC1cdTAwM2Vub2RlX2lkLCByZWFzb24pO1xubW0vdm1zY2FuLmMtNzY3MC19XG4tLVxubW0vdm1zY2FuLmMtNzY3Mi0vKlxubW0vdm1zY2FuLmM6NzY3MzogKiBSZXNldCBrc3dhcGRfZmFpbHVyZXMgb25seSB3aGVuIHRoZSBub2RlIGlzIGJhbGFuY2VkLiBXaXRob3V0IHRoaXNcbm1tL3Ztc2Nhbi5jLTc2NzQtICogY2hlY2ssIHN1Y2Nlc3NmdWwgZGlyZWN0IHJlY2xhaW0gKGUuZy4sIGZyb20gY2dyb3VwIG1lbW9yeS5oaWdoXG5tbS92bXNjYW4uYzo3Njc1OiAqIHRocm90dGxpbmcpIGNhbiBrZWVwIHJlc2V0dGluZyBrc3dhcGRfZmFpbHVyZXMgZXZlbiB3aGVuIHRoZSBub2RlXG5tbS92bXNjYW4uYzo3Njc2OiAqIGNhbm5vdCBiZSBiYWxhbmNlZCwgY2F1c2luZyBrc3dhcGQgdG8gcnVuIGVuZGxlc3NseS5cbm1tL3Ztc2Nhbi5jLTc2NzctICovXG5tbS92bXNjYW4uYzo3Njc4OnZvaWQga3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzcyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxubW0vdm1zY2FuLmMtNzY3OS1cdFx0XHQgICAgICAgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTc2ODEtXHRpZiAocGdkYXRfYmFsYW5jZWQocGdkYXQsIG9yZGVyLCBoaWdoZXN0X3pvbmVpZHgpKVxubW0vdm1zY2FuLmM6NzY4MjpcdFx0a3N3YXBkX2NsZWFyX2hvcGVsZXNzKHBnZGF0LCBjdXJyZW50X2lzX2tzd2FwZCgpID9cbm1tL3Ztc2Nhbi5jLTc2ODMtXHRcdFx0S1NXQVBEX0NMRUFSX0hPUEVMRVNTX0tTV0FQRCA6IEtTV0FQRF9DTEVBUl9IT1BFTEVTU19ESVJFQ1QpO1xuLS1cbm1tL3Ztc2Nhbi5jLTc2ODUtXG5tbS92bXNjYW4uYzo3Njg2OmJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcbm1tL3Ztc2Nhbi5jLTc2ODcte1xubW0vdm1zY2FuLmM6NzY4ODpcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfZmFpbHVyZXMpIFx1MDAzZT0gTUFYX1JFQ0xBSU1fUkVUUklFUztcbm1tL3Ztc2Nhbi5jLTc2ODktfVxuLS1cbm1tL3Ztc2Nhbi5jPTc3MDA9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXG4tLVxubW0vdm1zY2FuLmMtNzczMC0vKlxubW0vdm1zY2FuLmM6NzczMTogKiBUaGlzIGtzd2FwZCBzdGFydCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSBpbml0IGFuZCBub2RlLWhvdC1hZGQuXG5tbS92bXNjYW4uYy03NzMyLSAqL1xubW0vdm1zY2FuLmM6NzczMzp2b2lkIF9fbWVtaW5pdCBrc3dhcGRfcnVuKGludCBuaWQpXG5tbS92bXNjYW4uYy03NzM0LXtcbi0tXG5tbS92bXNjYW4uYy03NzM2LVxubW0vdm1zY2FuLmM6NzczNzpcdHBnZGF0X2tzd2FwZF9sb2NrKHBnZGF0KTtcbm1tL3Ztc2Nhbi5jOjc3Mzg6XHRpZiAoIXBnZGF0LVx1MDAzZWtzd2FwZCkge1xubW0vdm1zY2FuLmM6NzczOTpcdFx0cGdkYXQtXHUwMDNla3N3YXBkID0ga3RocmVhZF9jcmVhdGVfb25fbm9kZShrc3dhcGQsIHBnZGF0LCBuaWQsIFwmIzM0O2tzd2FwZCVkXCYjMzQ7LCBuaWQpO1xubW0vdm1zY2FuLmM6Nzc0MDpcdFx0aWYgKElTX0VSUihwZ2RhdC1cdTAwM2Vrc3dhcGQpKSB7XG5tbS92bXNjYW4uYy03NzQxLVx0XHRcdC8qIGZhaWx1cmUgYXQgYm9vdCBpcyBmYXRhbCAqL1xubW0vdm1zY2FuLmM6Nzc0MjpcdFx0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIHN0YXJ0IGtzd2FwZCBvbiBub2RlICVkLCByZXQ9JXBlXFxuXCYjMzQ7LFxubW0vdm1zY2FuLmM6Nzc0MzpcdFx0XHRcdCAgIG5pZCwgcGdkYXQtXHUwMDNla3N3YXBkKTtcbm1tL3Ztc2Nhbi5jLTc3NDQtXHRcdFx0QlVHX09OKHN5c3RlbV9zdGF0ZSBcdTAwM2MgU1lTVEVNX1JVTk5JTkcpO1xubW0vdm1zY2FuLmM6Nzc0NTpcdFx0XHRwZ2RhdC1cdTAwM2Vrc3dhcGQgPSBOVUxMO1xubW0vdm1zY2FuLmMtNzc0Ni1cdFx0fSBlbHNlIHtcbm1tL3Ztc2Nhbi5jOjc3NDc6XHRcdFx0d2FrZV91cF9wcm9jZXNzKHBnZGF0LVx1MDAzZWtzd2FwZCk7XG5tbS92bXNjYW4uYy03NzQ4LVx0XHR9XG5tbS92bXNjYW4uYy03NzQ5LVx0fVxubW0vdm1zY2FuLmM6Nzc1MDpcdHBnZGF0X2tzd2FwZF91bmxvY2socGdkYXQpO1xubW0vdm1zY2FuLmMtNzc1MS19XG4tLVxubW0vdm1zY2FuLmMtNzc1Ni0gKi9cbm1tL3Ztc2Nhbi5jOjc3NTc6dm9pZCBfX21lbWluaXQga3N3YXBkX3N0b3AoaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTc3NTgte1xubW0vdm1zY2FuLmMtNzc1OS1cdHBnX2RhdGFfdCAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzE1NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IFJlY2xhaW0gUGF0aHMgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gdHJpZ2dlciBpbnRlcmVzdGluZyBtZW1vcnkgcmVjbGFpbSBwYXRocyB1c2luZyBzeXprYWxsZXIuIEkga25vdyBga3N3YXBkYCBpcyBhIHRocmVhZCBmdW5jdGlvbiwgc28gSSBjYW4mIzM5O3QgY2FsbCBpdCBkaXJlY3RseS4gQnV0IGB3YWtldXBfa3N3YXBkYCBpcyBjYWxsYWJsZSwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGNvbnRyb2wgdGhlIGBrc3dhcGRgIHRocmVhZC4KCk5vdywgdGhlIG1haW4gZnVuY3Rpb25zIEkgc2hvdWxkIGZvY3VzIG9uIGFyZSBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGFuZCBgbm9kZV9yZWNsYWltYCwgc28gSSBzaG91bGQgaW5zcGVjdCB0aG9zZSBmdW5jdGlvbnMgaW4gYG1tL3Ztc2Nhbi5jYCBtb3JlIGNsb3NlbHkuIFdhaXQsIGB0cnlfdG9fZnJlZV9wYWdlc2AgaXMgYWN0dWFsbHkgY2FsbGVkIGJ5IGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCBpbiBgbW0vcGFnZV9hbGxvYy5jYC4uLiBUaGF0JiMzOTtzIGEga2V5IGRldGFpbCEgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGlzIGxpa2VseSBjYWxsZWQgYnkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbWVtY2cgbGltaXRzLiBJIHRoaW5rIGBtZW1vcnlfaGlnaF93cml0ZWAgb3Igc2ltaWxhciBpbiBgbW0vbWVtY29udHJvbC5jYCBhcmUgcHJvYmFibHkgaW52b2x2ZWQuIGBub2RlX3JlY2xhaW1gIGlzIGFsc28gY3JpdGljYWwsIGFuZCBpdCYjMzk7cyBjYWxsZWQgYnkgYGdldF9wYWdlX2Zyb21fZnJlZWxpc3RgIGluIGBtbS9wYWdlX2FsbG9jLmNgLgoKU28gdGhlIG1vc3QgZWZmZWN0aXZlIGZ1enppbmcgc3RyYXRlZ3kgaXMgY2xlYXI6IEkgbmVlZCB0byB0YXJnZXQgbWVtb3J5IGFsbG9jYXRpb24gYW5kIG1lbWNnIGxpbWl0cyB0byBoaXQgdGhlc2UgcmVjbGFpbSBwYXRocy4gVGhlIHBhdGNoIEkmIzM5O20gZXhhbWluaW5nIG1vZGlmaWVzIGB0aHJvdHRsZV9pc29sYXRlZGAsIGFuZCB0aGF0JiMzOTtzIGNhbGxlZCB3aGVuIHRvbyBtYW55IHBhZ2VzIGFyZSBiZWluZyBpc29sYXRlZCwgYW5kIHRoaXMgc2l0dWF0aW9uIGhhcHBlbnMgd2hlbiBtdWx0aXBsZSB0aHJlYWRzIGFyZSBjb25jdXJyZW50bHkgcmVjbGFpbWluZyBtZW1vcnkuIFRodXMsIGZ1enppbmcgd2l0aCBtYW55IHRocmVhZHMgYWxsb2NhdGluZyBtZW1vcnkgb3IgaGl0dGluZyBtZW1jZyBsaW1pdHMgaXMgdGhlIHdheSB0byBnbyBoZXJlLgoKTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlIGtleSBzeW1ib2xzOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBub2RlX3JlY2xhaW1gLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YC4gSXQmIzM5O3Mgd29ydGggZG91YmxlLWNoZWNraW5nIHRoYXQgYHRyeV90b19mcmVlX3BhZ2VzYCBpcyBleHBvcnRlZCBvciByZWFjaGFibGUuIEl0JiMzOTtzIGNhbGxlZCBieSBgX19hbGxvY19wYWdlc19zbG93cGF0aGAsIHdoaWNoIGlzIHJpZ2h0IGF0IHRoZSBjb3JlIG9mIHBhZ2UgYWxsb2NhdGlvbi4gYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGlzIGRlZmluaXRlbHkgdGllZCB0byBtZW1jZyByZWNsYWltLiBUaW1lIHRvIGdvIGJhY2sgdG8gYG1tL3Ztc2Nhbi5jYCBhbmQgdGFrZSBhbm90aGVyIGxvb2sgYXQgYHRocm90dGxlX2lzb2xhdGVkYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGhyb3R0bGVfaXNvbGF0ZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0xODIyPXN0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZmlsZSxcbi0tXG5tbS92bXNjYW4uYy0xODUzLVx0aWYgKCF0b29fbWFueSlcbm1tL3Ztc2Nhbi5jOjE4NTQ6XHRcdHdha2VfdGhyb3R0bGVfaXNvbGF0ZWQocGdkYXQpO1xubW0vdm1zY2FuLmMtMTg1NS1cbi0tXG5tbS92bXNjYW4uYy0xODY1LSAqL1xubW0vdm1zY2FuLmM6MTg2NjpzdGF0aWMgYm9vbCB0aHJvdHRsZV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZpbGUsXG5tbS92bXNjYW4uYy0xODY3LVx0XHRcdCAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBib29sICpmYXRhbClcbi0tXG5tbS92bXNjYW4uYz0yMDE0PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbixcbi0tXG5tbS92bXNjYW4uYy0yMDI3LVxubW0vdm1zY2FuLmM6MjAyODpcdGlmICghdGhyb3R0bGVfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjLCBcdTAwMjZmYXRhbCkpIHtcbm1tL3Ztc2Nhbi5jLTIwMjktXHRcdC8qIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gUmV0dXJuIG5vdy4gKi9cbi0tXG5tbS92bXNjYW4uYz00ODk2PXN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ5MTktXHR0eXBlID0gZ2V0X3R5cGVfdG9fc2NhbihscnV2ZWMsIHN3YXBwaW5lc3MpO1xubW0vdm1zY2FuLmM6NDkyMDpcdGlmICghdGhyb3R0bGVfaXNvbGF0ZWQocGdkYXQsIHR5cGUsIHNjLCBcdTAwMjZmYXRhbCkpIHtcbm1tL3Ztc2Nhbi5jLTQ5MjEtXHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NDgyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBgd2FrZV90aHJvdHRsZV9pc29sYXRlZGAgaXMgc2hvd2luZyB1cCBpbiB0aGUgb3V0cHV0LiBUaGF0IG1lYW5zIHRoaXMgcGF0Y2ggaXNuJiMzOTt0ICppbnRyb2R1Y2luZyogaXQ7IGl0JiMzOTtzIGVpdGhlciBwcmUtZXhpc3Rpbmcgb3IgYmVpbmcgYWRkZWQgaW4gYSBkaWZmZXJlbnQgcGFydCBvZiB0aGUgc2VyaWVzLiBHb29kLCB0aGF0IGNsYXJpZmllcyB0aGluZ3MuCgpMZXQmIzM5O3MgZm9jdXMgb24gdGhlIGFjdHVhbCBjaGFuZ2VzIGhlcmUuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgcmVmYWN0b3JpbmcgdGhlIHRocm90dGxpbmcgbG9naWMgcmVsYXRlZCB0byBpc29sYXRlZCBmb2xpb3MuIFRoZXkmIzM5O3ZlIG1vdmVkIHRoZSBsb2dpYyBpbnRvIGEgbmV3IGZ1bmN0aW9uLCBgdGhyb3R0bGVfaXNvbGF0ZWRgLCBhbmQgY3J1Y2lhbGx5LCB0aGV5JiMzOTtyZSBub3cgYXBwbHlpbmcgaXQgdG8gTUdMUlUmIzM5O3MgYGV2aWN0X2ZvbGlvc2AuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgYmVjYXVzZSBub3cgdGhlIE1HTFJVIGNvZGUgcGF0aCB3aWxsIGFsc28gdGhyb3R0bGUgd2hlbiB0aGVyZSBhcmUgdG9vIG1hbnkgaXNvbGF0ZWQgZm9saW9zLiBJdCBhbHNvIGluY2x1ZGVzIGZhdGFsIHNpZ25hbCBoYW5kbGluZyBkdXJpbmcgdGhlIHRocm90dGxpbmcgcHJvY2Vzcy4gVGhpcyBpcyBhIG5vdGljZWFibGUgaW1wYWN0IG9uIGhvdyBtZW1vcnkgcmVjbGFpbSBiZWhhdmVzLgoKVGhpcyBib2lscyBkb3duIHRvOgoKKiAgIFJlZmFjdG9yaW5nOiBTZXBhcmF0aW5nIG91dCB0aGUgdGhyb3R0bGluZyBsb2dpYy4KKiAgIEZ1bmN0aW9uYWwgQ2hhbmdlOiBBcHBseWluZyB0aGlzIHRocm90dGxpbmcgdG8gTUdMUlUsIHdoaWNoIGlzIHNpZ25pZmljYW50LCBwbHVzIGEgY2hhbmdlIGluIGhvdyBmYXRhbCBzaWduYWxzIGFyZSBoYW5kbGVkLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgYGluaXQvS2NvbmZpZ2Agb3IgYG1tL0tjb25maWdgLCB0byB2ZXJpZnkgdGhhdCBgTUVNQ0dgLCBgTFJVX0dFTmAsIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBhcmUgc2V0IGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDY3PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDc2LVxuaW5pdC9LY29uZmlnOjEwNzc6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA3OC1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA4NS1cbmluaXQvS2NvbmZpZzoxMDg2OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA4Ny1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5Mi1cbmluaXQvS2NvbmZpZzoxMDkzOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTEwOTQtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwOTktXG5pbml0L0tjb25maWc6MTEwMDpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTAxLVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NDY0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb25zLCBzcGVjaWZpY2FsbHkgYE1FTUNHYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBhIGZldyBjcnVjaWFsIHN5bWJvbHM6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYG5vZGVfcmVjbGFpbWAsIGBzaHJpbmtfYWxsX21lbW9yeWAsIGFuZCBgd2FrZXVwX2tzd2FwZGAuIFRoZXNlIGFyZSB0aGUga2V5IHBsYXllcnMgaW4gdGhpcyBtZW1vcnkgZ2FtZS4KCkdpdmVuIHRoYXQgSSYjMzk7bSB3b3JraW5nIHdpdGggYHNocmlua19hbGxfbWVtb3J5YCwgbXkgZmlyc3QgbW92ZSBpcyB0byBkZXRlcm1pbmUgaWYgaXRzIGJlaGF2aW9yIGlzIGNvbnRpbmdlbnQgb24gYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIEl0JiMzOTtzIHZpdGFsIHRvIGtub3cgaWYgaXRzIGV4ZWN1dGlvbiBhbmQgb3V0Y29tZXMgYXJlIGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoZSBzZXR1cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIHVuaXZlcnNhbGx5IGFjdGl2ZSBvciBpZiBpdCYjMzk7cyBzZWxlY3RpdmVseSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBlbnZpcm9ubWVudC4gVW5kZXJzdGFuZGluZyB0aGlzIGRlcGVuZGVuY3kgd2lsbCBiZSBrZXkgdG8gZGVjaXBoZXJpbmcgaXRzIG92ZXJhbGwgcm9sZSB3aXRoaW4gdGhpcyBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaHJpbmtfYWxsX21lbW9yeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTc2ODY9Ym9vbCBrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTc2OTktICovXG5tbS92bXNjYW4uYzo3NzAwOnVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxubW0vdm1zY2FuLmMtNzcwMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1ODY0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgSGliZXJuYXRpb24tUmVsYXRlZCBDb2RlIGluIHZtc2Nhbi5jKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYG1tL3Ztc2Nhbi5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gYSBjZXJ0YWluIHNlY3Rpb24sIHNvIEkmIzM5O2xsIHplcm8gaW4gb24gdGhlIHZpY2luaXR5IG9mIGxpbmUgNzcwMC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc2VlIGlmIHRoaXMgcGFydGljdWxhciBwaWVjZSBvZiBjb2RlIGlzIGd1YXJkZWQgYnkgYSBgI2lmZGVmIENPTkZJR19ISUJFUk5BVElPTmAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4gSSYjMzk7bSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZSBsb2dpYyBJJiMzOTttIGludmVzdGlnYXRpbmcgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB0aGUgc3lzdGVtJiMzOTtzIGhpYmVybmF0aW9uIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIHByb2JsZW0gSSYjMzk7bSB0cnlpbmcgdG8gc29sdmUuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHdpbGwgaGVscCBwaW5wb2ludCBob3cgdGhlIHN5c3RlbSBiZWhhdmVzIHVuZGVyIGRpZmZlcmVudCBjaXJjdW1zdGFuY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzY5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3NjkwOlx0XG43NjkxOlx0I2lmZGVmIENPTkZJR19ISUJFUk5BVElPTlxuNzY5MjpcdC8qXG43NjkzOlx0ICogVHJ5IHRvIGZyZWUgYG5yX3RvX3JlY2xhaW0mIzM5OyBvZiBtZW1vcnksIHN5c3RlbS13aWRlLCBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2Zcbjc2OTQ6XHQgKiBmcmVlZCBwYWdlcy5cbjc2OTU6XHQgKlxuNzY5NjpcdCAqIFJhdGhlciB0aGFuIHRyeWluZyB0byBhZ2UgTFJVcyB0aGUgYWltIGlzIHRvIHByZXNlcnZlIHRoZSBvdmVyYWxsXG43Njk3Olx0ICogTFJVIG9yZGVyIGJ5IHJlY2xhaW1pbmcgcHJlZmVyZW50aWFsbHlcbjc2OTg6XHQgKiBpbmFjdGl2ZSBcdTAwM2UgYWN0aXZlIFx1MDAzZSBhY3RpdmUgcmVmZXJlbmNlZCBcdTAwM2UgYWN0aXZlIG1hcHBlZFxuNzY5OTpcdCAqL1xuNzcwMDpcdHVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxuNzcwMTpcdHtcbjc3MDI6XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XG43NzAzOlx0XHRcdC5ucl90b19yZWNsYWltID0gbnJfdG9fcmVjbGFpbSxcbjc3MDQ6XHRcdFx0LmdmcF9tYXNrID0gR0ZQX0hJR0hVU0VSX01PVkFCTEUsXG43NzA1Olx0XHRcdC5yZWNsYWltX2lkeCA9IE1BWF9OUl9aT05FUyAtIDEsXG43NzA2Olx0XHRcdC5wcmlvcml0eSA9IERFRl9QUklPUklUWSxcbjc3MDc6XHRcdFx0Lm1heV93cml0ZXBhZ2UgPSAxLFxuNzcwODpcdFx0XHQubWF5X3VubWFwID0gMSxcbjc3MDk6XHRcdFx0Lm1heV9zd2FwID0gMSxcbjc3MTA6XHRcdFx0LmhpYmVybmF0aW9uX21vZGUgPSAxLFxuNzcxMTpcdFx0fTtcbjc3MTI6XHRcdHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QgPSBub2RlX3pvbmVsaXN0KG51bWFfbm9kZV9pZCgpLCBzYy5nZnBfbWFzayk7XG43NzEzOlx0XHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDtcbjc3MTQ6XHRcdHVuc2lnbmVkIGludCBub3JlY2xhaW1fZmxhZztcbjc3MTU6XHRcbjc3MTY6XHRcdGZzX3JlY2xhaW1fYWNxdWlyZShzYy5nZnBfbWFzayk7XG43NzE3Olx0XHRub3JlY2xhaW1fZmxhZyA9IG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKCk7XG43NzE4Olx0XHRzZXRfdGFza19yZWNsYWltX3N0YXRlKGN1cnJlbnQsIFx1MDAyNnNjLnJlY2xhaW1fc3RhdGUpO1xuNzcxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjU3NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDExOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBcHByb2FjaCB0byBIaWJlcm5hdGlvbiBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHdlJiMzOTtyZSBoYW5kbGluZyBtZW1vcnkgcmVjbGFpbSBkdXJpbmcgaGliZXJuYXRpb24sIGFuZCBpdCYjMzk7cyBhbGwgdHVja2VkIGF3YXkgdW5kZXIgYENPTkZJR19ISUJFUk5BVElPTmAuIFRoYXQmIzM5O3MgdGhlIGtleS4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGhvdyBkbyB3ZSBiZXN0IGhhbmRsZSB0aGUgbWVtb3J5IHNocmlua2luZyBhc3BlY3Q/IEkgc2VlIHR3byBwcmltYXJ5IHBhdGhzIGZvcndhcmQuCgpPcHRpb24gb25lOiBXZSBjb3VsZCBleHBsaWNpdGx5IGFkZCBgSElCRVJOQVRJT05gIHRvIGBFbmFibGVDb25maWdzYCwgYnV0IEkmIzM5O20gbGVhbmluZyB0b3dhcmQgYSBzaW1wbGVyIGFwcHJvYWNoLiBJIHRoaW5rIHdlIGNhbiBwcm9iYWJseSBqdXN0IG9taXQgdGhlIGBzaHJpbmtfYWxsX21lbW9yeWAgY2FsbCBhbHRvZ2V0aGVyLiBUaGlzIHdvdWxkIG1lYW4gcmVseWluZyBwcmltYXJpbHkgb24gdGhlIGJ1aWx0LWluIG1lY2hhbmlzbXMsIG5hbWVseSBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGFuZCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AuIFRob3NlIHNlZW0gdG8gYmUgdGhlIHR5cGljYWwsIG1vc3Qtb2Z0ZW4tdXNlZCBwYXRocyBpbiBtb3N0IHN5c3RlbXMuIFRoYXQgd291bGQgcHJvdmlkZSBnb29kIHN1cHBvcnQgZm9yIHRoZSBnZW5lcmFsIGNhc2VzLgoKV2hpbGUgSSYjMzk7bSBoZXJlLCBJIHNob3VsZCBtYWtlIHN1cmUgdGhhdCBgbm9kZV9yZWNsYWltYCBpcyBiZWhhdmluZyBjb3JyZWN0bHkgaW4gdGhpcyBjb250ZXh0LCB0b28uIEl04oCZcyBvYnZpb3VzbHkgZGVwZW5kZW50IG9uIGBDT05GSUdfTlVNQWAsIHNvIEnigJlsbCBtYWtlIHN1cmUgdG8gZG91YmxlLWNoZWNrIHRoYXQgaW50ZXJhY3Rpb24gYXMgd2VsbC4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25vZGVfcmVjbGFpbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTYyODY9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy02Mjg3LXtcbm1tL3Ztc2Nhbi5jOjYyODg6XHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZCwgbnJfc2Nhbm5lZCwgbnJfbm9kZV9yZWNsYWltZWQ7XG5tbS92bXNjYW4uYy02Mjg5LVx0c3RydWN0IGxydXZlYyAqdGFyZ2V0X2xydXZlYztcbi0tXG5tbS92bXNjYW4uYy02MzE0LVxubW0vdm1zY2FuLmM6NjMxNTpcdG5yX25vZGVfcmVjbGFpbWVkID0gc2MtXHUwMDNlbnJfcmVjbGFpbWVkIC0gbnJfcmVjbGFpbWVkO1xubW0vdm1zY2FuLmMtNjMxNi1cbi0tXG5tbS92bXNjYW4uYy02MzE5LVx0XHR2bXByZXNzdXJlKHNjLVx1MDAzZWdmcF9tYXNrLCBzYy1cdTAwM2VvcmRlciwgc2MtXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsIHRydWUsXG5tbS92bXNjYW4uYzo2MzIwOlx0XHRcdCAgIHNjLVx1MDAzZW5yX3NjYW5uZWQgLSBucl9zY2FubmVkLCBucl9ub2RlX3JlY2xhaW1lZCk7XG5tbS92bXNjYW4uYy02MzIxLVxubW0vdm1zY2FuLmM6NjMyMjpcdGlmIChucl9ub2RlX3JlY2xhaW1lZClcbm1tL3Ztc2Nhbi5jLTYzMjMtXHRcdHJlY2xhaW1hYmxlID0gdHJ1ZTtcbi0tXG5tbS92bXNjYW4uYy02MzgzLVxubW0vdm1zY2FuLmM6NjM4NDpcdGlmIChzaG91bGRfY29udGludWVfcmVjbGFpbShwZ2RhdCwgbnJfbm9kZV9yZWNsYWltZWQsIHNjKSlcbm1tL3Ztc2Nhbi5jLTYzODUtXHRcdGdvdG8gYWdhaW47XG4tLVxubW0vdm1zY2FuLmM9Nzc3MT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2bXNjYW5fc3lzY3RsX3RhYmxlW10gPSB7XG4tLVxubW0vdm1zY2FuLmMtNzc4My1cdFx0LnByb2NuYW1lXHQ9IFwmIzM0O3pvbmVfcmVjbGFpbV9tb2RlXCYjMzQ7LFxubW0vdm1zY2FuLmM6Nzc4NDpcdFx0LmRhdGFcdFx0PSBcdTAwMjZub2RlX3JlY2xhaW1fbW9kZSxcbm1tL3Ztc2Nhbi5jOjc3ODU6XHRcdC5tYXhsZW5cdFx0PSBzaXplb2Yobm9kZV9yZWNsYWltX21vZGUpLFxubW0vdm1zY2FuLmMtNzc4Ni1cdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuLS1cbm1tL3Ztc2Nhbi5jPTc4MDM9bW9kdWxlX2luaXQoa3N3YXBkX2luaXQpXG4tLVxubW0vdm1zY2FuLmMtNzgwOC0gKlxubW0vdm1zY2FuLmM6NzgwOTogKiBJZiBub24temVybyBjYWxsIG5vZGVfcmVjbGFpbSB3aGVuIHRoZSBudW1iZXIgb2YgZnJlZSBwYWdlcyBmYWxscyBiZWxvd1xubW0vdm1zY2FuLmMtNzgxMC0gKiB0aGUgd2F0ZXJtYXJrcy5cbm1tL3Ztc2Nhbi5jLTc4MTEtICovXG5tbS92bXNjYW4uYzo3ODEyOmludCBub2RlX3JlY2xhaW1fbW9kZSBfX3JlYWRfbW9zdGx5O1xubW0vdm1zY2FuLmMtNzgxMy1cbi0tXG5tbS92bXNjYW4uYy03ODIxLS8qXG5tbS92bXNjYW4uYzo3ODIyOiAqIFBlcmNlbnRhZ2Ugb2YgcGFnZXMgaW4gYSB6b25lIHRoYXQgbXVzdCBiZSB1bm1hcHBlZCBmb3Igbm9kZV9yZWNsYWltIHRvXG5tbS92bXNjYW4uYy03ODIzLSAqIG9jY3VyLlxuLS1cbm1tL3Ztc2Nhbi5jPTc4NDg9c3RhdGljIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlY2FjaGVfcmVjbGFpbWFibGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy03ODU4LVx0ICovXG5tbS92bXNjYW4uYzo3ODU5Olx0aWYgKG5vZGVfcmVjbGFpbV9tb2RlIFx1MDAyNiBSRUNMQUlNX1VOTUFQKVxubW0vdm1zY2FuLmMtNzg2MC1cdFx0bnJfcGFnZWNhY2hlX3JlY2xhaW1hYmxlID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9GSUxFX1BBR0VTKTtcbi0tXG5tbS92bXNjYW4uYy03ODc5LSAqL1xubW0vdm1zY2FuLmM6Nzg4MDpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxubW0vdm1zY2FuLmMtNzg4MS1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL3Ztc2Nhbi5jLTc4ODctXG5tbS92bXNjYW4uYzo3ODg4Olx0dHJhY2VfbW1fdm1zY2FuX25vZGVfcmVjbGFpbV9iZWdpbihwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYy1cdTAwM2VvcmRlcixcbm1tL3Ztc2Nhbi5jLTc4ODktXHRcdFx0XHRcdCAgIHNjLVx1MDAzZWdmcF9tYXNrKTtcbi0tXG5tbS92bXNjYW4uYy03OTE3LVxubW0vdm1zY2FuLmM6NzkxODpcdHRyYWNlX21tX3Ztc2Nhbl9ub2RlX3JlY2xhaW1fZW5kKHNjLVx1MDAzZW5yX3JlY2xhaW1lZCwgTlVMTCk7XG5tbS92bXNjYW4uYy03OTE5LVxuLS1cbm1tL3Ztc2Nhbi5jLTc5MjItXG5tbS92bXNjYW4uYzo3OTIzOnVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG5tbS92bXNjYW4uYy03OTI0LXtcbi0tXG5tbS92bXNjYW4uYy03OTMyLVx0XHQucHJpb3JpdHkgPSBOT0RFX1JFQ0xBSU1fUFJJT1JJVFksXG5tbS92bXNjYW4uYzo3OTMzOlx0XHQubWF5X3dyaXRlcGFnZSA9ICEhKG5vZGVfcmVjbGFpbV9tb2RlIFx1MDAyNiBSRUNMQUlNX1dSSVRFKSxcbm1tL3Ztc2Nhbi5jOjc5MzQ6XHRcdC5tYXlfdW5tYXAgPSAhIShub2RlX3JlY2xhaW1fbW9kZSBcdTAwMjYgUkVDTEFJTV9VTk1BUCksXG5tbS92bXNjYW4uYy03OTM1LVx0XHQubWF5X3N3YXAgPSAxLFxuLS1cbm1tL3Ztc2Nhbi5jLTc5NzEtXG5tbS92bXNjYW4uYzo3OTcyOlx0cmV0ID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIG5yX3BhZ2VzLCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy03OTczLVx0Y2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXHUwMDI2cGdkYXQtXHUwMDNlZmxhZ3MpO1xuLS1cbm1tL3Ztc2Nhbi5jLTc5ODQtXG5tbS92bXNjYW4uYzo3OTg1OnN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG5tbS92bXNjYW4uYy03OTg2LVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vdm1zY2FuLmM9ODAwNT1pbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG4tLVxubW0vdm1zY2FuLmMtODA5Ny1cbm1tL3Ztc2Nhbi5jOjgwOTg6XHRcdFx0cmVjbGFpbWVkID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGJhdGNoX3NpemUsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTgwOTktXHRcdFx0Y2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXHUwMDI2cGdkYXQtXHUwMDNlZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQ2MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDExOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEZvY3VzOiBOVU1BIGFuZCBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBgbm9kZV9yZWNsYWltYCByZWxpZXMgb24gYENPTkZJR19OVU1BYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZSBpbiB0aGUgY29udGV4dCBvZiBOb24tVW5pZm9ybSBNZW1vcnkgQWNjZXNzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBOVU1BYCBpcyBwcm9wZXJseSBlbmFibGVkLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBhZGQgYE5VTUFgIHRvIG15IGBFbmFibGVDb25maWdzYCBsaXN0LiBUaGF0IGxpc3QgaXMgZ3Jvd2luZywgaXQmIzM5O3Mgbm93OgoKKiAgIGBMUlVfR0VOYAoqICAgYExSVV9HRU5fRU5BQkxFRGAKKiAgIGBNRU1DR2AKKiAgIGBOVU1BYAoKTm93LCBJIG5lZWQgdG8gcmVhbGx5IGRpZyBpbnRvIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBUaGUga2V5IHN5bWJvbHMgSSYjMzk7bSBmb2N1c2luZyBvbiBhcmU6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYG5vZGVfcmVjbGFpbWAsIGFuZCBgd2FrZXVwX2tzd2FwZGAuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlciwgZXNwZWNpYWxseSBjb25jZXJuaW5nIE5VTUEgYXJjaGl0ZWN0dXJlcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gdG8gY2hlY2sgYW5kIGNvbmZpcm0gaWYgYHdha2V1cF9rc3dhcGRgIGlzIGV4cG9ydGVkLCBhcyB0aGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGluIHRoZSBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKndha2V1cF9rc3dhcGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODg1MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudDogVW5yYXZlbGluZyB0aGUgJiMzOTtOb3QtU3RhdGljLCBCdXQgTm90LUV4cG9ydGVkJiMzOTsgTXlzdGVyeSoqCgpSaWdodCwgc28gdGhpcyB0aGluZyBJJiMzOTttIGxvb2tpbmcgYXQgaXNuJiMzOTt0ICpleHBvcnRlZCog4oCTIHRoYXQmIzM5O3MgdGhlIGZpcnN0IGNsdWUuIEJ1dCBpdCYjMzk7cyBhbHNvICpub3QqIHN0YXRpYywgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBoYXMgdG8gYmUgY2FsbGVkIGZyb20gKnNvbWV3aGVyZSogd2l0aGluIHRoZSBrZXJuZWwsIGFuZCB0aGUgaGludCBwb2ludHMgZGlyZWN0bHkgdG8gYG1tL3BhZ2VfYWxsb2MuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIGxldCYjMzk7cyB0cmFjZSB0aGlzIGJhY2sgdG8gdGhlIGNhbGxlci4mIzM0OwoKVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZnJvbSB3aXRoaW4gcGFnZV9hbGxvYyBpcyBpbnRlcmVzdGluZywgdGhpcyBpcyBhIGNvcmUgY29tcG9uZW50LiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjYWxsIGdyYXBoIGFuZCBmb2xsb3cgdGhlIHBhdGggdGhpcyBjb2RlIGlzIGZvbGxvd2luZy4gVGhlIGtleSBub3cgaXMgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBpbnRlcm5hbCwgbm9uLXN0YXRpYyBmdW5jdGlvbiBpbnRlZ3JhdGVzIHdpdGggdGhlIHBhZ2UgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcHJvY2Vzcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgdHJ5X3RvX2ZyZWVfcGFnZXNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLiBVbmRlcnN0YW5kaW5nIHRoaXMgbW9kdWxlIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qdHJ5X3RvX2ZyZWVfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTE3NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgYSBNZW1vcnkgQWxsb2NhdGlvbiBGdW5jdGlvbiYjMzk7cyBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gc29tZXRoaW5nIGhlcmUuIExvb2tzIGxpa2UgdGhlcmUmIzM5O3Mgc29tZSBjb2RlIHRoYXQgaXNuJiMzOTt0IGJlaW5nIGRpcmVjdGx5IGV4cG9ydGVkLCBtZWFuaW5nIGl0JiMzOTtzIG9ubHkgYmVpbmcgY2FsbGVkIGludGVybmFsbHkgd2l0aGluIHRoZSBrZXJuZWwuIEl0JiMzOTtzIGNhbGxlZCBmcm9tIGBtbS9wYWdlX2FsbG9jLmNgLCBzbyBpdCYjMzk7cyBjbGVhcmx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgYWxsb2NhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgY29kZSBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4KClRoZSBmdW5jdGlvbiBJIG5lZWQgdG8gbG9vayBhdCBpcyBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGl0JiMzOTtzIHRyeWluZyB0byBhY2NvbXBsaXNoLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdC4gUGVyaGFwcyBpdCYjMzk7cyBwYXJ0IG9mIGEgbWVjaGFuaXNtIGZvciByZWNsYWltaW5nIG1lbW9yeSB3aXRoaW4gYSBtZW1vcnkgY2dyb3VwLCBvciBtYXliZSBpdCYjMzk7cyBoYW5kbGluZyBzb21lIGVkZ2UgY2FzZSByZWxhdGVkIHRvIGZyZWVpbmcgcGFnZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5IHRvIGRldGVybWluZSBpZiBpdCBoYXMgYW55IHJlbGV2YW5jZSB0byB0aGUgcHJvYmxlbSBJJiMzOTttIHRyeWluZyB0byBzb2x2ZS4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byBmaW5kIG91dCBwcmVjaXNlbHkgd2hlcmUgYW5kIHdoZW4gaXQgZ2V0cyBpbnZva2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTUwMQoJCQkJCQkJb3V0cHV0OiAxOTIKCQkJCQkJCXRob3VnaHRzOiA3MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTWVtb3J5IFJlY2xhaW0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgdGFrZW4gYSBsb29rIGF0IHRoaXMgcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgY3JpdGljYWwgYXJlYSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyB0b3VjaGluZyBgbW0vdm1zY2FuLmNgIGltbWVkaWF0ZWx5IHNpZ25hbHMgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBjb3JlIG9mIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbWVtb3J5IHByZXNzdXJlIGFuZCByZWNsYW1hdGlvbi4KClNwZWNpZmljYWxseSwgaXQgc2VlbXMgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBtZWNoYW5pc20gdG8gdGhyb3R0bGUgcmVjbGFpbWVycyB3aGVuIGEgc3Vic3RhbnRpYWwgbnVtYmVyIG9mIGZvbGlvcyBhcmUgaW4gYW4gaXNvbGF0ZWQgc3RhdGUuIFRoaXMgaXMgZXNwZWNpYWxseSByZWxldmFudCB0byBNdWx0aS1HZW4gTFJVIChNR0xSVSksIGFzIHRoZSBjb2RlIG5vdyAqY29ycmVjdGx5KiBhY2NvdW50cyBmb3IgdGhlc2UgaXNvbGF0ZWQgcGFnZXMuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYHRocm90dGxlX2lzb2xhdGVkYCBhbmQgaXRzIGludGVncmF0aW9uIGludG8gYm90aCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIChmb3IgdGhlIGxlZ2FjeSBMUlUpIGFuZCBgZXZpY3RfZm9saW9zYCAoZm9yIE1HTFJVKSBpbXBsaWVzIGEgZnVuZGFtZW50YWwgaW1wcm92ZW1lbnQgaW4gaG93IHRoZSBrZXJuZWwgcmVzcG9uZHMgdG8gc2l0dWF0aW9ucyB3aGVyZSBjb25jdXJyZW50IHJlY2xhaW0gaXMgY2F1c2luZyBwcm9ibGVtcywgcG90ZW50aWFsbHkgcHJldmVudGluZyBPdXQtb2YtTWVtb3J5IChPT00pIGNvbmRpdGlvbnMgYW5kIHRocmFzaGluZy4gSSBhbSBhbHNvIHRoaW5raW5nIHRoYXQgYF9fbW9kX25vZGVfcGFnZV9zdGF0ZWAgYW5kIGBtb2Rfbm9kZV9wYWdlX3N0YXRlYCBhcmUgaW1wb3J0YW50LCBoZXJlLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCBzZWVtcyBsaWtlIHRoZSBwYXRjaCYjMzk7cyBwdXJwb3NlIGlzIHRvIG1hbmFnZSBtZW1vcnkgcmVjbGFpbSBpbiBhIG1vcmUgZWZmaWNpZW50IG1hbm5lciwgcGFydGljdWxhcmx5IHdoZW4gZmFjZWQgd2l0aCBhIGhpZ2ggbnVtYmVyIG9mIGNvbmN1cnJlbnQgdGhyZWFkcyB2eWluZyBmb3IgbWVtb3J5LiBJIGJlbGlldmUgdGhpcyB3aWxsIG1ha2Ugb3VyIHN5c3RlbXMgbW9yZSByb2J1c3QuIEl0JiMzOTtzIGxpa2VseSB0cnlpbmcgdG8gYXZvaWQgYSBzY2VuYXJpbyB3aGVyZSB0aGUgTFJVIGxpc3QgYmVjb21lcyB0b28gc21hbGwsIHJlc3VsdGluZyBpbiB0aGUgc3lzdGVtIHN3YXBwaW5nIHVubmVjZXNzYXJpbHkgYW5kIGZ1cnRoZXIgZXhhY2VyYmF0aW5nIHRoZSBtZW1vcnkgcHJlc3N1cmUuCgpDb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBtZW1vcnkgbWFuYWdlbWVudCwgZXNwZWNpYWxseSBpbiBOVU1BIG9yIE1FTUNHIGVudmlyb25tZW50cywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IG5lZWRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbiB0byBlbnN1cmUgc3RhYmlsaXR5IGFuZCBjYXRjaCBhbnkgc3VidGxlIHJlZ3Jlc3Npb25zLiBUaGlzIGNoYW5nZSB3aWxsIGxpa2VseSBpbnRlcmFjdCB3aXRoOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBub2RlX3JlY2xhaW1gLCBhbmQgYHdha2V1cF9rc3dhcGRgLgoKU28sIHllYWgsIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtOVU1BJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7LAogICAgJiMzNDtub2RlX3JlY2xhaW0mIzM0OywKICAgICYjMzQ7d2FrZXVwX2tzd2FwZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgLiBJdCBpbnRyb2R1Y2VzIGB0aHJvdHRsZV9pc29sYXRlZCgpYCB0byB0aHJvdHRsZSByZWNsYWltZXJzIHdoZW4gdG9vIG1hbnkgZm9saW9zIGFyZSBpc29sYXRlZCwgYW5kIGFwcGxpZXMgdGhpcyBsb2dpYyB0byBib3RoIHRoZSBsZWdhY3kgTFJVIChgc2hyaW5rX2luYWN0aXZlX2xpc3RgKSBhbmQgdGhlIE11bHRpLUdlbiBMUlUgKGBldmljdF9mb2xpb3NgKS4gSXQgYWxzbyBhZGRzIGFjY291bnRpbmcgZm9yIGlzb2xhdGVkIGZvbGlvcyBpbiBNR0xSVS4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIG1lbW9yeSBwcmVzc3VyZSBhbmQgY29uY3VycmVudCBwYWdlIHJlY2xhaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgICAmIzM0O25vZGVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDt3YWtldXBfa3N3YXBkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AuIEl0IGludHJvZHVjZXMgYHRocm90dGxlX2lzb2xhdGVkKClgIHRvIHRocm90dGxlIHJlY2xhaW1lcnMgd2hlbiB0b28gbWFueSBmb2xpb3MgYXJlIGlzb2xhdGVkLCBhbmQgYXBwbGllcyB0aGlzIGxvZ2ljIHRvIGJvdGggdGhlIGxlZ2FjeSBMUlUgKGBzaHJpbmtfaW5hY3RpdmVfbGlzdGApIGFuZCB0aGUgTXVsdGktR2VuIExSVSAoYGV2aWN0X2ZvbGlvc2ApLiBJdCBhbHNvIGFkZHMgYWNjb3VudGluZyBmb3IgaXNvbGF0ZWQgZm9saW9zIGluIE1HTFJVLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbWVtb3J5IHByZXNzdXJlIGFuZCBjb25jdXJyZW50IHBhZ2UgcmVjbGFpbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHBhZ2UgcmVjbGFpbSB0aHJvdHRsaW5nIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AgYnkgaW50cm9kdWNpbmcgYSBuZXcgaGVscGVyIGZ1bmN0aW9uIGB0aHJvdHRsZV9pc29sYXRlZGAuIEl0IHVzZXMgYSBsb2NhbCBib29sZWFuIHZhcmlhYmxlIGBmYXRhbGAgcGFzc2VkIGJ5IHJlZmVyZW5jZSB0byB0cmFjayBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nLiBUaGUgdmFyaWFibGUgYGZhdGFsYCBpcyB1bmNvbmRpdGlvbmFsbHkgaW5pdGlhbGl6ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBgdGhyb3R0bGVfaXNvbGF0ZWRgIGJlZm9yZSBhbnkgcmVhZHMgb2NjdXIuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBsZWF2ZSBhbnkgZmllbGRzIHVuaW5pdGlhbGl6ZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbG9naWMgZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgZGVhZGxvY2tzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1NjMyZDhlYzIzOWRmYWJiZGNmZmZmZDU1ODQ5ZGIwMzUyMjk5YTU4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMDc6NTE6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGMxNDA0YTU5NTIzZDYuLjg4NmE1M2Y1NjNhYjcgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0xODE5LDcgJiM0MzsxODE5LDcgQEAgYm9vbCBmb2xpb19pc29sYXRlX2xydShzdHJ1Y3QgZm9saW8gKmZvbGlvKQogICogdGhlIExSVSBsaXN0IHdpbGwgZ28gc21hbGwgYW5kIGJlIHNjYW5uZWQgZmFzdGVyIHRoYW4gbmVjZXNzYXJ5LCBsZWFkaW5nIHRvCiAgKiB1bm5lY2Vzc2FyeSBzd2FwcGluZywgdGhyYXNoaW5nIGFuZCBPT00uCiAgKi8KLXN0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGludCBmaWxlLAomIzQzO3N0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZmlsZSwKIAkJc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiB7CiAJdW5zaWduZWQgbG9uZyBpbmFjdGl2ZSwgaXNvbGF0ZWQ7CkBAIC0xODU2LDYgJiM0MzsxODU2LDM3IEBAIHN0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGludCBmaWxlLAogCXJldHVybiB0b29fbWFueTsKIH0KIAomIzQzOy8qCiYjNDM7ICogVGhyb3R0bGUgcmVjbGFpbSBpZiB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MgYXJlIHBpbGluZyB1cC4gSWYgdGhpcyBtYWtlcwomIzQzOyAqIG5vIHByb2dyZXNzLCB0aGUgY2FsbGVyIGlzIHByb2JhYmx5IGxvb3Bpbmcgb24gdW5ldmljdGFibGUgZm9saW9zLCBzbyBnaXZlCiYjNDM7ICogdXAuIFJldHVybnMgZmFsc2UgdG8gdGVsbCB0aGUgY2FsbGVyIHRvIHN0b3AgcmVjbGFpbWluZywgYW5kIHNldHMgQGZhdGFsCiYjNDM7ICogaWYgdGhlIHRhc2sgcmVjZWl2ZWQgYSBmYXRhbCBzaWduYWwgd2hpbGUgd2FpdGluZywgc28gdGhhdCB0aGUgY2FsbGVyIGNhbgomIzQzOyAqIGJhaWwgb3V0IGZhc3Rlci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCB0aHJvdHRsZV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZpbGUsCiYjNDM7CQkJICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGJvb2wgKmZhdGFsKQomIzQzO3sKJiM0MzsJYm9vbCBzdGFsbGVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CSpmYXRhbCA9IGZhbHNlOwomIzQzOwl3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHsKJiM0MzsJCWlmIChzdGFsbGVkKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCS8qIHdhaXQgYSBiaXQgZm9yIHRoZSByZWNsYWltZXIuICovCiYjNDM7CQlzdGFsbGVkID0gdHJ1ZTsKJiM0MzsJCXJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7CiYjNDM7CiYjNDM7CQkvKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIFJldHVybiBub3cuICovCiYjNDM7CQlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKJiM0MzsJCQkqZmF0YWwgPSB0cnVlOwomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogbW92ZV9mb2xpb3NfdG9fbHJ1KCkgbW92ZXMgZm9saW9zIGZyb20gcHJpdmF0ZSBAbGlzdCB0byBhcHByb3ByaWF0ZSBMUlUgbGlzdC4KICAqCkBAIC0xOTkyLDE5ICYjNDM7MjAyMywxNCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCiAJYm9vbCBmaWxlID0gaXNfZmlsZV9scnUobHJ1KTsKIAllbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwotCWJvb2wgc3RhbGxlZCA9IGZhbHNlOwotCi0Jd2hpbGUgKHVubGlrZWx5KHRvb19tYW55X2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYykpKSB7Ci0JCWlmIChzdGFsbGVkKQotCQkJcmV0dXJuIDA7Ci0KLQkJLyogd2FpdCBhIGJpdCBmb3IgdGhlIHJlY2xhaW1lci4gKi8KLQkJc3RhbGxlZCA9IHRydWU7Ci0JCXJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7CiYjNDM7CWJvb2wgZmF0YWw7CiAKJiM0MzsJaWYgKCF0aHJvdHRsZV9pc29sYXRlZChwZ2RhdCwgZmlsZSwgc2MsICZhbXA7ZmF0YWwpKSB7CiAJCS8qIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gUmV0dXJuIG5vdy4gKi8KLQkJaWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQomIzQzOwkJaWYgKGZhdGFsKQogCQkJcmV0dXJuIFNXQVBfQ0xVU1RFUl9NQVg7CiYjNDM7CiYjNDM7CQlyZXR1cm4gMDsKIAl9CiAKIAlscnVfYWRkX2RyYWluKCk7CkBAIC00ODgzLDYgJiM0Mzs0OTA5LDI1IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCWJvb2wgc2tpcF9yZXRyeSA9IGZhbHNlOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpOwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTsKJiM0MzsJYm9vbCBmYXRhbDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIHR5cGUgdG8gaXNvbGF0ZSBpcyB1bmtub3duIHVudGlsIGlzb2xhdGlvbiwgc28gcHJlZGljdCBpdCBmb3IKJiM0MzsJICogdGhlIHRocm90dGxpbmcgY2hlY2suIGlzb2xhdGVfZm9saW9zKCkgbWF5IHN0aWxsIGZhbGwgYmFjayB0byB0aGUKJiM0MzsJICogb3RoZXIgdHlwZSwgd2hpY2ggaXMgZmluZSBmb3IgdGhpcyBoZXVyaXN0aWMuCiYjNDM7CSAqLwomIzQzOwl0eXBlID0gZ2V0X3R5cGVfdG9fc2NhbihscnV2ZWMsIHN3YXBwaW5lc3MpOwomIzQzOwlpZiAoIXRocm90dGxlX2lzb2xhdGVkKHBnZGF0LCB0eXBlLCBzYywgJmFtcDtmYXRhbCkpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIExpa2UgdGhlIGxlZ2FjeQomIzQzOwkJICogcGF0aCwgcHJldGVuZCBzb21lIHBhZ2VzIHdlcmUgcmVjbGFpbWVkIHNvIHJlY2xhaW0gdW53aW5kcwomIzQzOwkJICogcXVpY2tseSBpbnN0ZWFkIG9mIGxvb3BpbmcgYmFjayBpbnRvIHRoZSB0aHJvdHRsZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGZhdGFsKQomIzQzOwkJCXNjLSZndDtucl9yZWNsYWltZWQgJiM0Mzs9IFNXQVBfQ0xVU1RFUl9NQVg7CiYjNDM7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQogCiAJbHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7CiAKQEAgLTQ4OTIsNiAmIzQzOzQ5MzcsOSBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAlzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcywKIAkJCQkgJmFtcDtsaXN0LCAmYW1wO2lzb2xhdGVkLCAmYW1wO3R5cGUsICZhbXA7dHlwZV9zY2FubmVkKTsKIAlucl9pc29sYXRlZCA9IGlzb2xhdGVkOwomIzQzOwlpZiAobnJfaXNvbGF0ZWQpCiYjNDM7CQlfX21vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZSwKJiM0MzsJCQkJICAgICAgbnJfaXNvbGF0ZWQpOwogCiAJLyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi8KIAlpZiAoc2Nhbm5lZCkKQEAgLTQ5NTQsNiAmIzQzOzUwMDIsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWdvdG8gcmV0cnk7CiAJfQogCiYjNDM7CWlmIChucl9pc29sYXRlZCkKJiM0MzsJCW1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZSwKJiM0MzsJCQkJICAgIC1ucl9pc29sYXRlZCk7CiYjNDM7CiAJaWYgKG5yX2lzb2xhdGVkICZndDsgdG90YWxfcmVjbGFpbWVkKQogCQltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiAmIzQzOyB0eXBlLAogCQkJCSBucl9pc29sYXRlZCAtIHRvdGFsX3JlY2xhaW1lZCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjU2CgkJCQkJCQlvdXRwdXQ6IDE4NwoJCQkJCQkJdGhvdWdodHM6IDk2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGluIGBtbS92bXNjYW4uY2AgbG9va3MgbGlrZSBpdCYjMzk7cyByZWZhY3RvcmluZyB0aGUgaXNvbGF0ZWQgcGFnZSB0aHJvdHRsaW5nIGxvZ2ljLiBNeSBtYWluIGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBjYW4gbGVhZCB0byBuYXN0eSBidWdzLiBMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgYGZhdGFsYCB2YXJpYWJsZS4gVGhleSYjMzk7dmUgbW92ZWQgdGhlIGB0b29fbWFueV9pc29sYXRlZGAgY2hlY2sgaW50byBhIG5ldyBgdGhyb3R0bGVfaXNvbGF0ZWRgIGZ1bmN0aW9uIGFuZCBub3cgdGhleSYjMzk7cmUgcGFzc2luZyBhIGBib29sIGZhdGFsYCBieSByZWZlcmVuY2UuIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIGBmYXRhbGAgaXMgYWx3YXlzIGluaXRpYWxpemVkIGJlZm9yZSBpdCYjMzk7cyByZWFkLgoKTG9va2luZyBhdCBgdGhyb3R0bGVfaXNvbGF0ZWRgLCB0aGUgdmVyeSBmaXJzdCB0aGluZyBpdCBkb2VzIGlzIHNldCBgKmZhdGFsID0gZmFsc2VgLiBHb29kLCB0aGF0JiMzOTtzIHJlYXNzdXJpbmcuIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgYWx3YXlzIGluaXRpYWxpemVkLCB3aGV0aGVyIG9yIG5vdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgdHJ1ZWAgb3IgYGZhbHNlYC4gVGhlbiwgaW4gYm90aCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgZXZpY3RfZm9saW9zYCwgYGZhdGFsYCBpcyBvbmx5IHJlYWQgaWYgYHRocm90dGxlX2lzb2xhdGVkYCByZXR1cm5zIGBmYWxzZWAsIHdoaWNoIGlzIHdoZXJlIHRoZSByZXR1cm4gaGFwcGVucyBpbW1lZGlhdGVseSBhZnRlciB0aGUgYGZhdGFsYCB2YXJpYWJsZSBpcyBzZXQuCgpPa2F5LCBzbyBJIHRoaW5rIGBmYXRhbGAgaXMgZmluZSwgYnV0IEkgc2hvdWxkIGxvb2sgZGVlcGVyIGp1c3QgaW4gY2FzZS4gTm93IHRoYXQgSSB0aGluayBhYm91dCBpdCwgdGhlIHBhdGNoIGZvY3VzZXMgb24gcGFnZSByZWNsYWltIGFuZCB0aHJvdHRsaW5nLCBub3Qgb24gZGF0YSBjb3B5aW5nIG9yIGNvbXBsZXggc3RydWN0cy4gVGhlIGBmYXRhbGAgdmFyaWFibGUgaXMgbG9jYWwgYW5kIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIEkmIzM5O20gcmVhc29uYWJseSBjb25maWRlbnQgdGhhdCB0aGlzIGlzICpub3QqIGEgS01TQU4gc2l0dWF0aW9uLiBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgc3VidGxlIGlzc3VlcyBsaWtlIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzLCBvciBjb25jdXJyZW5jeSBwcm9ibGVtcy4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBgZXZpY3RfZm9saW9zYCBjaGFuZ2VzLiBUaGV5IGFyZSB1cGRhdGluZyBzdGF0aXN0aWNzIGZvciBpc29sYXRlZCBwYWdlcywgd2hpY2ggc2hvdWxkIGFsc28gYmUgZmluZS4gTm8gcmVkIGZsYWdzIHRoZXJlIGVpdGhlci4gQWxsIGdvb2QuIE5vIEtNU0FOIG5lZWRlZCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHBhZ2UgcmVjbGFpbSB0aHJvdHRsaW5nIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AgYnkgaW50cm9kdWNpbmcgYSBuZXcgaGVscGVyIGZ1bmN0aW9uIGB0aHJvdHRsZV9pc29sYXRlZGAuIEl0IHVzZXMgYSBsb2NhbCBib29sZWFuIHZhcmlhYmxlIGBmYXRhbGAgcGFzc2VkIGJ5IHJlZmVyZW5jZSB0byB0cmFjayBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nLiBUaGUgdmFyaWFibGUgYGZhdGFsYCBpcyB1bmNvbmRpdGlvbmFsbHkgaW5pdGlhbGl6ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBgdGhyb3R0bGVfaXNvbGF0ZWRgIGJlZm9yZSBhbnkgcmVhZHMgb2NjdXIuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBsZWF2ZSBhbnkgZmllbGRzIHVuaW5pdGlhbGl6ZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbG9naWMgZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgZGVhZGxvY2tzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBwYWdlIHJlY2xhaW0gdGhyb3R0bGluZyBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIGJ5IGludHJvZHVjaW5nIGEgbmV3IGhlbHBlciBmdW5jdGlvbiBgdGhyb3R0bGVfaXNvbGF0ZWRgLiBJdCB1c2VzIGEgbG9jYWwgYm9vbGVhbiB2YXJpYWJsZSBgZmF0YWxgIHBhc3NlZCBieSByZWZlcmVuY2UgdG8gdHJhY2sgaWYgYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZy4gVGhlIHZhcmlhYmxlIGBmYXRhbGAgaXMgdW5jb25kaXRpb25hbGx5IGluaXRpYWxpemVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYHRocm90dGxlX2lzb2xhdGVkYCBiZWZvcmUgYW55IHJlYWRzIG9jY3VyLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbGVhdmUgYW55IGZpZWxkcyB1bmluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGxvZ2ljIGVycm9ycywgdXNlLWFmdGVyLWZyZWUsIG9yIGRlYWRsb2Nrcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBvciBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTE6NDAuMjQwMTY2MzA0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNDQ4ODc0ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnlfdG9fZnJlZV9wYWdlc1wiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiLFxuICAgIFwibm9kZV9yZWNsYWltXCIsXG4gICAgXCJ3YWtldXBfa3N3YXBkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHBhZ2UgcmVjbGFpbSB0aHJvdHRsaW5nIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AgYnkgaW50cm9kdWNpbmcgYSBuZXcgaGVscGVyIGZ1bmN0aW9uIGB0aHJvdHRsZV9pc29sYXRlZGAuIEl0IHVzZXMgYSBsb2NhbCBib29sZWFuIHZhcmlhYmxlIGBmYXRhbGAgcGFzc2VkIGJ5IHJlZmVyZW5jZSB0byB0cmFjayBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nLiBUaGUgdmFyaWFibGUgYGZhdGFsYCBpcyB1bmNvbmRpdGlvbmFsbHkgaW5pdGlhbGl6ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBgdGhyb3R0bGVfaXNvbGF0ZWRgIGJlZm9yZSBhbnkgcmVhZHMgb2NjdXIuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBsZWF2ZSBhbnkgZmllbGRzIHVuaW5pdGlhbGl6ZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbG9naWMgZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgZGVhZGxvY2tzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AuIEl0IGludHJvZHVjZXMgYHRocm90dGxlX2lzb2xhdGVkKClgIHRvIHRocm90dGxlIHJlY2xhaW1lcnMgd2hlbiB0b28gbWFueSBmb2xpb3MgYXJlIGlzb2xhdGVkLCBhbmQgYXBwbGllcyB0aGlzIGxvZ2ljIHRvIGJvdGggdGhlIGxlZ2FjeSBMUlUgKGBzaHJpbmtfaW5hY3RpdmVfbGlzdGApIGFuZCB0aGUgTXVsdGktR2VuIExSVSAoYGV2aWN0X2ZvbGlvc2ApLiBJdCBhbHNvIGFkZHMgYWNjb3VudGluZyBmb3IgaXNvbGF0ZWQgZm9saW9zIGluIE1HTFJVLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbWVtb3J5IHByZXNzdXJlIGFuZCBjb25jdXJyZW50IHBhZ2UgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTE6NDAuMjQwMTc0MjQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTIzODg0MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1NjMyZDhlYzIzOWRmYWJiZGNmZmZmZDU1ODQ5ZGIwMzUyMjk5YTU4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDE3IDA3OjUxOjM5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCBjMTQwNGE1OTUyM2Q2Li44ODZhNTNmNTYzYWI3IDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtMTgxOSw3ICsxODE5LDcgQEAgYm9vbCBmb2xpb19pc29sYXRlX2xydShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiAgKiB0aGUgTFJVIGxpc3Qgd2lsbCBnbyBzbWFsbCBhbmQgYmUgc2Nhbm5lZCBmYXN0ZXIgdGhhbiBuZWNlc3NhcnksIGxlYWRpbmcgdG9cXG4gICogdW5uZWNlc3Nhcnkgc3dhcHBpbmcsIHRocmFzaGluZyBhbmQgT09NLlxcbiAgKi9cXG4tc3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgaW50IGZpbGUsXFxuK3N0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZmlsZSxcXG4gXFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBpbmFjdGl2ZSwgaXNvbGF0ZWQ7XFxuQEAgLTE4NTYsNiArMTg1NiwzNyBAQCBzdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSxcXG4gXFx0cmV0dXJuIHRvb19tYW55O1xcbiB9XFxuIFxcbisvKlxcbisgKiBUaHJvdHRsZSByZWNsYWltIGlmIHRvbyBtYW55IGlzb2xhdGVkIGZvbGlvcyBhcmUgcGlsaW5nIHVwLiBJZiB0aGlzIG1ha2VzXFxuKyAqIG5vIHByb2dyZXNzLCB0aGUgY2FsbGVyIGlzIHByb2JhYmx5IGxvb3Bpbmcgb24gdW5ldmljdGFibGUgZm9saW9zLCBzbyBnaXZlXFxuKyAqIHVwLiBSZXR1cm5zIGZhbHNlIHRvIHRlbGwgdGhlIGNhbGxlciB0byBzdG9wIHJlY2xhaW1pbmcsIGFuZCBzZXRzIEBmYXRhbFxcbisgKiBpZiB0aGUgdGFzayByZWNlaXZlZCBhIGZhdGFsIHNpZ25hbCB3aGlsZSB3YWl0aW5nLCBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuXFxuKyAqIGJhaWwgb3V0IGZhc3Rlci5cXG4rICovXFxuK3N0YXRpYyBib29sIHRocm90dGxlX2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZmlsZSxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGJvb2wgKmZhdGFsKVxcbit7XFxuK1xcdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xcbitcXG4rXFx0KmZhdGFsID0gZmFsc2U7XFxuK1xcdHdoaWxlICh1bmxpa2VseSh0b29fbWFueV9pc29sYXRlZChwZ2RhdCwgZmlsZSwgc2MpKSkge1xcbitcXHRcXHRpZiAoc3RhbGxlZClcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0XFx0Lyogd2FpdCBhIGJpdCBmb3IgdGhlIHJlY2xhaW1lci4gKi9cXG4rXFx0XFx0c3RhbGxlZCA9IHRydWU7XFxuK1xcdFxcdHJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7XFxuK1xcbitcXHRcXHQvKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIFJldHVybiBub3cuICovXFxuK1xcdFxcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbitcXHRcXHRcXHQqZmF0YWwgPSB0cnVlO1xcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIC8qXFxuICAqIG1vdmVfZm9saW9zX3RvX2xydSgpIG1vdmVzIGZvbGlvcyBmcm9tIHByaXZhdGUgQGxpc3QgdG8gYXBwcm9wcmlhdGUgTFJVIGxpc3QuXFxuICAqXFxuQEAgLTE5OTIsMTkgKzIwMjMsMTQgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbiBcXHRib29sIGZpbGUgPSBpc19maWxlX2xydShscnUpO1xcbiBcXHRlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07XFxuIFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcXG4tXFx0Ym9vbCBzdGFsbGVkID0gZmFsc2U7XFxuLVxcbi1cXHR3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHtcXG4tXFx0XFx0aWYgKHN0YWxsZWQpXFxuLVxcdFxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0XFx0Lyogd2FpdCBhIGJpdCBmb3IgdGhlIHJlY2xhaW1lci4gKi9cXG4tXFx0XFx0c3RhbGxlZCA9IHRydWU7XFxuLVxcdFxcdHJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7XFxuK1xcdGJvb2wgZmF0YWw7XFxuIFxcbitcXHRpZiAoIXRocm90dGxlX2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYywgXFx1MDAyNmZhdGFsKSkge1xcbiBcXHRcXHQvKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIFJldHVybiBub3cuICovXFxuLVxcdFxcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSlcXG4rXFx0XFx0aWYgKGZhdGFsKVxcbiBcXHRcXHRcXHRyZXR1cm4gU1dBUF9DTFVTVEVSX01BWDtcXG4rXFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbiBcXHRscnVfYWRkX2RyYWluKCk7XFxuQEAgLTQ4ODMsNiArNDkwOSwyNSBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0Ym9vbCBza2lwX3JldHJ5ID0gZmFsc2U7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XFxuK1xcdGJvb2wgZmF0YWw7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgdHlwZSB0byBpc29sYXRlIGlzIHVua25vd24gdW50aWwgaXNvbGF0aW9uLCBzbyBwcmVkaWN0IGl0IGZvclxcbitcXHQgKiB0aGUgdGhyb3R0bGluZyBjaGVjay4gaXNvbGF0ZV9mb2xpb3MoKSBtYXkgc3RpbGwgZmFsbCBiYWNrIHRvIHRoZVxcbitcXHQgKiBvdGhlciB0eXBlLCB3aGljaCBpcyBmaW5lIGZvciB0aGlzIGhldXJpc3RpYy5cXG4rXFx0ICovXFxuK1xcdHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7XFxuK1xcdGlmICghdGhyb3R0bGVfaXNvbGF0ZWQocGdkYXQsIHR5cGUsIHNjLCBcXHUwMDI2ZmF0YWwpKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gTGlrZSB0aGUgbGVnYWN5XFxuK1xcdFxcdCAqIHBhdGgsIHByZXRlbmQgc29tZSBwYWdlcyB3ZXJlIHJlY2xhaW1lZCBzbyByZWNsYWltIHVud2luZHNcXG4rXFx0XFx0ICogcXVpY2tseSBpbnN0ZWFkIG9mIGxvb3BpbmcgYmFjayBpbnRvIHRoZSB0aHJvdHRsZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChmYXRhbClcXG4rXFx0XFx0XFx0c2MtXFx1MDAzZW5yX3JlY2xhaW1lZCArPSBTV0FQX0NMVVNURVJfTUFYO1xcbitcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4gXFxuIFxcdGxydXZlY19sb2NrX2lycShscnV2ZWMpO1xcbiBcXG5AQCAtNDg5Miw2ICs0OTM3LDkgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdHNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLFxcbiBcXHRcXHRcXHRcXHQgXFx1MDAyNmxpc3QsIFxcdTAwMjZpc29sYXRlZCwgXFx1MDAyNnR5cGUsIFxcdTAwMjZ0eXBlX3NjYW5uZWQpO1xcbiBcXHRucl9pc29sYXRlZCA9IGlzb2xhdGVkO1xcbitcXHRpZiAobnJfaXNvbGF0ZWQpXFxuK1xcdFxcdF9fbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIHR5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIG5yX2lzb2xhdGVkKTtcXG4gXFxuIFxcdC8qIFNjYW5uaW5nIG1heSBoYXZlIGVtcHRpZWQgdGhlIG9sZGVzdCBnZW4sIGZsdXNoIGl0ICovXFxuIFxcdGlmIChzY2FubmVkKVxcbkBAIC00OTU0LDYgKzUwMDIsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdGdvdG8gcmV0cnk7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChucl9pc29sYXRlZClcXG4rXFx0XFx0bW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIHR5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAtbnJfaXNvbGF0ZWQpO1xcbitcXG4gXFx0aWYgKG5yX2lzb2xhdGVkIFxcdTAwM2UgdG90YWxfcmVjbGFpbWVkKVxcbiBcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiArIHR5cGUsXFxuIFxcdFxcdFxcdFxcdCBucl9pc29sYXRlZCAtIHRvdGFsX3JlY2xhaW1lZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjUxOjQwLjczMzU4NDk2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTIxMjc1MzE2NjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnlfdG9fZnJlZV9wYWdlc1wiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiLFxuICAgIFwibm9kZV9yZWNsYWltXCIsXG4gICAgXCJ3YWtldXBfa3N3YXBkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IHJlY2xhaW0gbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYC4gSXQgaW50cm9kdWNlcyBgdGhyb3R0bGVfaXNvbGF0ZWQoKWAgdG8gdGhyb3R0bGUgcmVjbGFpbWVycyB3aGVuIHRvbyBtYW55IGZvbGlvcyBhcmUgaXNvbGF0ZWQsIGFuZCBhcHBsaWVzIHRoaXMgbG9naWMgdG8gYm90aCB0aGUgbGVnYWN5IExSVSAoYHNocmlua19pbmFjdGl2ZV9saXN0YCkgYW5kIHRoZSBNdWx0aS1HZW4gTFJVIChgZXZpY3RfZm9saW9zYCkuIEl0IGFsc28gYWRkcyBhY2NvdW50aW5nIGZvciBpc29sYXRlZCBmb2xpb3MgaW4gTUdMUlUuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtZW1vcnkgcHJlc3N1cmUgYW5kIGNvbmN1cnJlbnQgcGFnZSByZWNsYWltLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NjMyZDhlYzIzOWRmYWJiZGNmZmZmZDU1ODQ5ZGIwMzUyMjk5YTU4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDc6NTE6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBjMTQwNGE1OTUyM2Q2Li44ODZhNTNmNTYzYWI3IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTgxOSw3ICsxODE5LDcgQEAgYm9vbCBmb2xpb19pc29sYXRlX2xydShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuICAqIHRoZSBMUlUgbGlzdCB3aWxsIGdvIHNtYWxsIGFuZCBiZSBzY2FubmVkIGZhc3RlciB0aGFuIG5lY2Vzc2FyeSwgbGVhZGluZyB0b1xuICAqIHVubmVjZXNzYXJ5IHN3YXBwaW5nLCB0aHJhc2hpbmcgYW5kIE9PTS5cbiAgKi9cbi1zdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSxcbitzdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZpbGUsXG4gXHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgaW5hY3RpdmUsIGlzb2xhdGVkO1xuQEAgLTE4NTYsNiArMTg1NiwzNyBAQCBzdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSxcbiBcdHJldHVybiB0b29fbWFueTtcbiB9XG4gXG4rLypcbisgKiBUaHJvdHRsZSByZWNsYWltIGlmIHRvbyBtYW55IGlzb2xhdGVkIGZvbGlvcyBhcmUgcGlsaW5nIHVwLiBJZiB0aGlzIG1ha2VzXG4rICogbm8gcHJvZ3Jlc3MsIHRoZSBjYWxsZXIgaXMgcHJvYmFibHkgbG9vcGluZyBvbiB1bmV2aWN0YWJsZSBmb2xpb3MsIHNvIGdpdmVcbisgKiB1cC4gUmV0dXJucyBmYWxzZSB0byB0ZWxsIHRoZSBjYWxsZXIgdG8gc3RvcCByZWNsYWltaW5nLCBhbmQgc2V0cyBAZmF0YWxcbisgKiBpZiB0aGUgdGFzayByZWNlaXZlZCBhIGZhdGFsIHNpZ25hbCB3aGlsZSB3YWl0aW5nLCBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuXG4rICogYmFpbCBvdXQgZmFzdGVyLlxuKyAqL1xuK3N0YXRpYyBib29sIHRocm90dGxlX2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZmlsZSxcbitcdFx0XHQgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgYm9vbCAqZmF0YWwpXG4re1xuK1x0Ym9vbCBzdGFsbGVkID0gZmFsc2U7XG4rXG4rXHQqZmF0YWwgPSBmYWxzZTtcbitcdHdoaWxlICh1bmxpa2VseSh0b29fbWFueV9pc29sYXRlZChwZ2RhdCwgZmlsZSwgc2MpKSkge1xuK1x0XHRpZiAoc3RhbGxlZClcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRcdC8qIHdhaXQgYSBiaXQgZm9yIHRoZSByZWNsYWltZXIuICovXG4rXHRcdHN0YWxsZWQgPSB0cnVlO1xuK1x0XHRyZWNsYWltX3Rocm90dGxlKHBnZGF0LCBWTVNDQU5fVEhST1RUTEVfSVNPTEFURUQpO1xuK1xuK1x0XHQvKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIFJldHVybiBub3cuICovXG4rXHRcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuK1x0XHRcdCpmYXRhbCA9IHRydWU7XG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gLypcbiAgKiBtb3ZlX2ZvbGlvc190b19scnUoKSBtb3ZlcyBmb2xpb3MgZnJvbSBwcml2YXRlIEBsaXN0IHRvIGFwcHJvcHJpYXRlIExSVSBsaXN0LlxuICAqXG5AQCAtMTk5MiwxOSArMjAyMywxNCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRib29sIGZpbGUgPSBpc19maWxlX2xydShscnUpO1xuIFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuLVx0Ym9vbCBzdGFsbGVkID0gZmFsc2U7XG4tXG4tXHR3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHtcbi1cdFx0aWYgKHN0YWxsZWQpXG4tXHRcdFx0cmV0dXJuIDA7XG4tXG4tXHRcdC8qIHdhaXQgYSBiaXQgZm9yIHRoZSByZWNsYWltZXIuICovXG4tXHRcdHN0YWxsZWQgPSB0cnVlO1xuLVx0XHRyZWNsYWltX3Rocm90dGxlKHBnZGF0LCBWTVNDQU5fVEhST1RUTEVfSVNPTEFURUQpO1xuK1x0Ym9vbCBmYXRhbDtcbiBcbitcdGlmICghdGhyb3R0bGVfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjLCBcdTAwMjZmYXRhbCkpIHtcbiBcdFx0LyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqL1xuLVx0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4rXHRcdGlmIChmYXRhbClcbiBcdFx0XHRyZXR1cm4gU1dBUF9DTFVTVEVSX01BWDtcbitcbitcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4gXHRscnVfYWRkX2RyYWluKCk7XG5AQCAtNDg4Myw2ICs0OTA5LDI1IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0Ym9vbCBza2lwX3JldHJ5ID0gZmFsc2U7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbitcdGJvb2wgZmF0YWw7XG4rXG4rXHQvKlxuK1x0ICogVGhlIHR5cGUgdG8gaXNvbGF0ZSBpcyB1bmtub3duIHVudGlsIGlzb2xhdGlvbiwgc28gcHJlZGljdCBpdCBmb3JcbitcdCAqIHRoZSB0aHJvdHRsaW5nIGNoZWNrLiBpc29sYXRlX2ZvbGlvcygpIG1heSBzdGlsbCBmYWxsIGJhY2sgdG8gdGhlXG4rXHQgKiBvdGhlciB0eXBlLCB3aGljaCBpcyBmaW5lIGZvciB0aGlzIGhldXJpc3RpYy5cbitcdCAqL1xuK1x0dHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcbitcdGlmICghdGhyb3R0bGVfaXNvbGF0ZWQocGdkYXQsIHR5cGUsIHNjLCBcdTAwMjZmYXRhbCkpIHtcbitcdFx0LypcbitcdFx0ICogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBMaWtlIHRoZSBsZWdhY3lcbitcdFx0ICogcGF0aCwgcHJldGVuZCBzb21lIHBhZ2VzIHdlcmUgcmVjbGFpbWVkIHNvIHJlY2xhaW0gdW53aW5kc1xuK1x0XHQgKiBxdWlja2x5IGluc3RlYWQgb2YgbG9vcGluZyBiYWNrIGludG8gdGhlIHRocm90dGxlLlxuK1x0XHQgKi9cbitcdFx0aWYgKGZhdGFsKVxuK1x0XHRcdHNjLVx1MDAzZW5yX3JlY2xhaW1lZCArPSBTV0FQX0NMVVNURVJfTUFYO1xuK1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbiBcbiBcdGxydXZlY19sb2NrX2lycShscnV2ZWMpO1xuIFxuQEAgLTQ4OTIsNiArNDkzNyw5IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0c2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsXG4gXHRcdFx0XHQgXHUwMDI2bGlzdCwgXHUwMDI2aXNvbGF0ZWQsIFx1MDAyNnR5cGUsIFx1MDAyNnR5cGVfc2Nhbm5lZCk7XG4gXHRucl9pc29sYXRlZCA9IGlzb2xhdGVkO1xuK1x0aWYgKG5yX2lzb2xhdGVkKVxuK1x0XHRfX21vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyB0eXBlLFxuK1x0XHRcdFx0ICAgICAgbnJfaXNvbGF0ZWQpO1xuIFxuIFx0LyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi9cbiBcdGlmIChzY2FubmVkKVxuQEAgLTQ5NTQsNiArNTAwMiwxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0Z290byByZXRyeTtcbiBcdH1cbiBcbitcdGlmIChucl9pc29sYXRlZClcbitcdFx0bW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIHR5cGUsXG4rXHRcdFx0XHQgICAgLW5yX2lzb2xhdGVkKTtcbitcbiBcdGlmIChucl9pc29sYXRlZCBcdTAwM2UgdG90YWxfcmVjbGFpbWVkKVxuIFx0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiArIHR5cGUsXG4gXHRcdFx0XHQgbnJfaXNvbGF0ZWQgLSB0b3RhbF9yZWNsYWltZWQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTE6NDAuNzMzNTg3MzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTM1MzA1MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyBkZWVwIHdpdGhpbiB0aGUgYG1tL3Ztc2Nhbi5jYCBmaWxlIOKAkyB0aGF0IHNjcmVhbXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2VzLiBTcGVjaWZpY2FsbHksIGl0J3MgbWVzc2luZyB3aXRoIHBhZ2UgcmVjbGFpbSwgd2hpY2ggbWVhbnMgd2UncmUgcHJvYmFibHkgZGVhbGluZyB3aXRoIHRoZSBMZWFzdCBSZWNlbnRseSBVc2VkIChMUlUpIGxpc3RzLCBib3RoIHRoZSB0cmFkaXRpb25hbCBsZWdhY3kgTFJVIGFuZCBNR0xSVS4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgdGhyb3R0bGVfaXNvbGF0ZWQoKWAgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllIGFzIGEgcG90ZW50aWFsIHBvaW50IG9mIGNvbnRlbnRpb24gb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVjazsgaXQncyB1c2VkIHdpdGhpbiBgc2hyaW5rX2luYWN0aXZlX2xpc3QoKWAgKGxlZ2FjeSBMUlUpIGFuZCBgZXZpY3RfZm9saW9zKClgIChNR0xSVSkuIEludGVyZXN0aW5nLiBUaGUgYWRkaXRpb25zIG9mIGBfX21vZF9ub2RlX3BhZ2Vfc3RhdGVgIGNhbGxzIGZvciBgTlJfSVNPTEFURURfQU5PTmAgYW5kIHBvdGVudGlhbGx5IG90aGVyIHR5cGVzIGR1cmluZyBldmljdGlvbiB3aXRoaW4gYGV2aWN0X2ZvbGlvcygpYCBzaG93IHRoYXQgdGhlIGlzb2xhdGlvbiBjb3VudGVyIGlzIGFkanVzdGVkLlxuXG5Ob3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIFwiV2hlcmUgYXJlIHRoZSBlbnRyeSBwb2ludHM/XCIuICBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgZXZpY3RfZm9saW9zYCBhcmUgYm90aCBzdGF0aWMsIG1lYW5pbmcgdGhleSdyZSBub3QgZGlyZWN0bHkgZXhwb3NlZC4gIGB0aHJvdHRsZV9pc29sYXRlZGAgaXMgYWxzbyBzdGF0aWMuIFNvLCBJIG5lZWQgdG8gbG9vayB1cHN0cmVhbS4gV2hhdCBmdW5jdGlvbnMgY2FsbCB0aGVzZSBvciBhcmUgcmVsYXRlZCB0byBwYWdlIHJlY2xhaW0gdGhhdCAqYXJlbid0KiBzdGF0aWM/IExldCdzIHNlZS4uLiBgc2hyaW5rX25vZGVgPyBgc2hyaW5rX2xydXZlY2A/IGB0cnlfdG9fZnJlZV9wYWdlc2A/IElzIGBrc3dhcGRgIGludm9sdmVkPyBJJ20gZ29pbmcgdG8gaGVhZCB0byBgbW0vdm1zY2FuLmNgIGFuZCBzdGFydCB0cmFjaW5nIGJhY2sgdG8gc2VlIHdoZXJlIHRoaXMgYWxsIGZpdHMgaW4uICBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBsYXJnZXIgcGljdHVyZSBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1MTo0Ni42Njg4OTQ5NDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg3MDY1NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXZpY3RfZm9saW9zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ4NjI9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ4OTUtXFxubW0vdm1zY2FuLmM6NDg5NjpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy00ODk3LVxcdFxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwOTk9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxMjItXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTEyMzpcXHRcXHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNTEyNC1cXHRcXHRpZiAoIWRlbHRhKVxcbi0tXFxubW0vdm1zY2FuLmM9NTcyNj1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU3NDYtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVxcdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xcbm1tL3Ztc2Nhbi5jOjU3NDc6XFx0XFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxcbm1tL3Ztc2Nhbi5jLTU3NDgtXFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjUxOjQ2LjcyNzYwNjMzMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MDU0MTA4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgRXZpY3Rpb24gUGF0aCBpbiB0aGUgTFJVIFZlY3RvcioqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYGV2aWN0X2ZvbGlvc2AgaXMgYmVpbmcgY2FsbGVkIGZyb20gYm90aCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgcnVuX2V2aWN0aW9uYC4gVGhhdCdzIGEgcHJldHR5IGNsZWFyIGluZGljYXRpb24gdGhhdCBpdCdzIHRoZSBjb3JlIGZ1bmN0aW9uIGZvciBhY3R1YWxseSByZW1vdmluZyBmb2xpb3MsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBuYW1lcy4gTm93LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGggZnVydGhlciB1cHN0cmVhbS4gTXkgZm9jdXMgaXMgdW5kZXJzdGFuZGluZyB0aGUgdHJpZ2dlcnMgZm9yIGZvbGlvIGV2aWN0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgcnVuX2V2aWN0aW9uYCBhcmUgYmVpbmcgKmNhbGxlZCogZnJvbS4gVGhhdCdzIHRoZSBjcnVjaWFsIGxpbmsg4oCTIHRob3NlIGFyZSB0aGUgcG9pbnRzIGluIHRoZSBzeXN0ZW0gdGhhdCBhcmUgaW5pdGlhdGluZyB0aGUgZXZpY3Rpb24gcHJvY2VzcyBiYXNlZCBvbiB3aGF0ZXZlciBjb25kaXRpb25zIGFyZSBpbiBwbGF5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aG9zZSBjb25kaXRpb25zIHRvIGdyYXNwIHRoZSBvdmVyYWxsIGV2aWN0aW9uIHBvbGljeS4gQXJlIHdlIGRlYWxpbmcgd2l0aCBtZW1vcnkgcHJlc3N1cmUsIGFnaW5nIG9mIGVudHJpZXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIGZpbmQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjkyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTE6NTEuNTMzMDIwMDc2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1OTAyODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19zaHJpbmtfbHJ1dmVjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTUwNjQ9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwOTgtICovXFxubW0vdm1zY2FuLmM6NTA5OTpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUxMDAte1xcbi0tXFxubW0vdm1zY2FuLmM9NTE0ND1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxNjMtXFxubW0vdm1zY2FuLmM6NTE2NDpcXHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTUxNjUtXFxuLS1cXG5tbS92bXNjYW4uYz01MjU1PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI2Ny1cXG5tbS92bXNjYW4uYzo1MjY4OlxcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYy01MjY5LVxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTE6NTEuNTg4OTM1MzM1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5NjQ5MDU0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYC4gSXQncyBjbGVhciB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHNocmlua2luZyBzb21ldGhpbmcgcmVsYXRlZCB0byBhbiBMUlUgdmVjdG9yLCBhbmQgaXQncyBjYWxsaW5nIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgaW4gdGhlIHByb2Nlc3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldobydzIHRoZSBjYWxsZXIgaGVyZT8gV2hhdCB1cHN0cmVhbSBmdW5jdGlvbiBvciBwcm9jZXNzIGlzIHRyaWdnZXJpbmcgdGhpcyB3aG9sZSBzaHJpbmtpbmcgb3BlcmF0aW9uP1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3c7IGtub3dpbmcgd2hhdCBpbml0aWF0ZXMgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyAqd2h5KiB0aGUgTFJVIHZlY3RvciBpcyBiZWluZyBzaHJ1bmssIHVuZGVyIHdoYXQgY29uZGl0aW9ucywgYW5kIHdoYXQgdGhlIG92ZXJhbGwgc3lzdGVtIGltcGxpY2F0aW9ucyBhcmUuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCB0byBwaW5wb2ludC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayBpcyBwYXJhbW91bnQgZm9yIGFueSBlZmZlY3RpdmUgc3lzdGVtIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTMzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTE6NTQuNTg1NDI5MzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyMjM3NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fc2hyaW5rX2xydXZlY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz01MTg1PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI1NC1cXG5tbS92bXNjYW4uYzo1MjU1OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUyNTYte1xcbi0tXFxubW0vdm1zY2FuLmM9NTk5OT1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjAwMy1cXG5tbS92bXNjYW4uYzo2MDA0OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYwMDUte1xcbi0tXFxubW0vdm1zY2FuLmM9NjAxNj1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MDI3LVxcdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXFx1MDAyNlxcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcXG5tbS92bXNjYW4uYzo2MDI4OlxcdFxcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcXG5tbS92bXNjYW4uYy02MDI5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1MTo1NC42ODc2NzA0OTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzYxNDU5MTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBzaHJpbmtfbHJ1dmVjYCBGdW5jdGlvbidzIENhbGxlcnMqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgc2hyaW5rX2xydXZlY2AgaXMgY2FsbGluZyBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYC4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIGxpa2VseSBleHBlY3RlZCBnaXZlbiB0aGUgbmFtaW5nLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24sIHRob3VnaCwgaXMgd2hhdCAqdHJpZ2dlcnMqIHRoaXMgY2FsbCB0byBgc2hyaW5rX2xydXZlY2AgaW4gdGhlIGZpcnN0IHBsYWNlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LiBJcyBpdCBpbnZva2VkIHBlcmlvZGljYWxseSBiYXNlZCBvbiBhIHRpbWVyLCB0cmlnZ2VyZWQgYnkgYSBzcGVjaWZpYyBldmVudCB3aXRoaW4gdGhlIExSVSBjYWNoZSdzIG9wZXJhdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9mIHRoZSBMUlUgY2FjaGUsIEkgaGF2ZSB0byB0cmFjZSBiYWNrIHRoZSBjYWxsIHN0YWNrLiBVbmRlcnN0YW5kaW5nICp3aG8qIG9yICp3aGF0KiBpcyBjYWxsaW5nIGBzaHJpbmtfbHJ1dmVjYCBpcyBjcnVjaWFsIHRvIGV2YWx1YXRpbmcgdGhlIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSBvZiB0aGUgTFJVIGltcGxlbWVudGF0aW9uLiBJcyB0aGUgc2hyaW5raW5nIGFnZ3Jlc3NpdmUsIG9yIGNvbnNlcnZhdGl2ZT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNhbmRpZGF0ZXMgZm9yIG9wdGltaXphdGlvbiB3aGVuIHJldmlld2luZyB3aGVyZSB0aGlzIGZ1bmN0aW9uIHNpdHMgaW4gdGhlIGNvZGU/IExldCdzIHRyYWNlIHRoaXMgYW5kIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTM5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTE6NTguNDQ5MTM0MDIxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTE0MDkzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfbHJ1dmVjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTUwNjQ9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwOTgtICovXFxubW0vdm1zY2FuLmM6NTA5OTpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUxMDAte1xcbi0tXFxubW0vdm1zY2FuLmM9NTE0ND1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxNjMtXFxubW0vdm1zY2FuLmM6NTE2NDpcXHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTUxNjUtXFxuLS1cXG5tbS92bXNjYW4uYz01MTg1PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI1NC1cXG5tbS92bXNjYW4uYzo1MjU1OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUyNTYte1xcbi0tXFxubW0vdm1zY2FuLmMtNTI2Ny1cXG5tbS92bXNjYW4uYzo1MjY4OlxcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYy01MjY5LVxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU5OTk9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwMDMtXFxubW0vdm1zY2FuLmM6NjAwNDpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy02MDA1LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwMDk9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwMTUtXFxubW0vdm1zY2FuLmM6NjAxNjpzdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNjAxNy17XFxuLS1cXG5tbS92bXNjYW4uYy02MDI3LVxcdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXFx1MDAyNlxcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcXG5tbS92bXNjYW4uYzo2MDI4OlxcdFxcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcXG5tbS92bXNjYW4uYy02MDI5LVxcbi0tXFxubW0vdm1zY2FuLmM9NjIwNz1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MjY2LVxcbm1tL3Ztc2Nhbi5jOjYyNjc6XFx0XFx0c2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcXG5tbS92bXNjYW4uYy02MjY4LVxcbi0tXFxubW0vdm1zY2FuLmM9Njg2Mj11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtNjg5Mi1cXHQgKi9cXG5tbS92bXNjYW4uYzo2ODkzOlxcdHNocmlua19scnV2ZWMobHJ1dmVjLCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTY4OTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjUxOjU4LjUyMDI4NjU5OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODAyMjM0OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUgd2hhdCB3ZSBoYXZlIGhlcmUuXG5cbioqRGVjb25zdHJ1Y3RpbmcgTWVtb3J5IENncm91cCBTaHJpbmthZ2UqKlxuXG5SaWdodCwgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgIGlzbid0IHN0YXRpYywgaW50ZXJlc3RpbmcuIE9rYXksIHNvIHRoYXQgbWVhbnMgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBhcmUgY2FsbGluZyBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgY2hhaW4gaGVyZSwgd2hhdCdzIHRyaWdnZXJpbmcgdGhhdCBmdW5jdGlvbi4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGBzaHJpbmtfbHJ1dmVjYCBpcyBjYWxsZWQgd2l0aGluIGl0LiBTbywgd2hvIGVsc2UgY2FsbHMgYHNocmlua19scnV2ZWNgPyBBaCwgeWVzLCBgc2hyaW5rX25vZGVfbWVtY2dzYCBpcyBvbmUuIE9rYXksIGFuZCB3aGF0IGlzIHRyaWdnZXJpbmcgKnRoYXQqIGZ1bmN0aW9uLCBgc2hyaW5rX25vZGVfbWVtY2dzYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gSSBuZWVkIHRvIGtlZXAgdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MzIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1MjowMy4zMjI1MjQ4MDRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NjA1NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19ub2RlX21lbWNnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz02MTU1PXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfY29udGludWVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbi0tXFxubW0vdm1zY2FuLmMtNjIwNi1cXG5tbS92bXNjYW4uYzo2MjA3OnN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy02MjA4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYyODY9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MzEwLVxcbm1tL3Ztc2Nhbi5jOjYzMTE6XFx0c2hyaW5rX25vZGVfbWVtY2dzKHBnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNjMxMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTI6MDMuMzkwMTM0MjgyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MjU5OTA1MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGdpdmVuIG15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWE6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIE1lbW9yeSBTaHJpbmthZ2UgUHJvY2VzcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBzaHJpbmtfbm9kZWAuIFRoaXMgaXMgY2xlYXJseSB0aGUgY29yZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IsIHdlbGwsIHNocmlua2luZyBhIG5vZGUncyBtZW1vcnkgZm9vdHByaW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHdoYXQgc3BlY2lmaWNhbGx5IHRyaWdnZXJzIHRoaXMgc2hyaW5rYWdlPyBNeSBhbmFseXNpcyBzaG93cyB0aGF0IGBzaHJpbmtfbm9kZWAgaXMgY2FsbGluZyBgc2hyaW5rX25vZGVfbWVtY2dzYC4gVGhhdCBtYWtlcyBzZW5zZTsgYG1lbWNnc2AgKG1lbW9yeSBjZ3JvdXBzKSBhcmUgYSBtYWpvciBwbGF5ZXIgd2hlbiBpdCBjb21lcyB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVzb3VyY2UgbGltaXRzLiBTbywgYHNocmlua19ub2RlYCBpcyB1c2luZyBgc2hyaW5rX25vZGVfbWVtY2dzYCB0byBpbnRlcmFjdCB3aXRoIGFuZCBtYW5hZ2UgbWVtb3J5IHdpdGhpbiB0aGUgY2dyb3VwIGhpZXJhcmNoeS4gVGhhdCdzIGEgcmVhc29uYWJsZSBtb2R1bGFyIGRlc2lnbi4gQnV0IEkgbmVlZCB0byBnbyBkZWVwZXIuIFdoYXQgYXJlIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyB3aGljaCBsZWFkIHRvIHRoZSBpbnZvY2F0aW9uIG9mIGBzaHJpbmtfbm9kZWA/IElkZW50aWZ5aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0cmlnZ2VycyBvciBldmVudHMgaW4gdGhlIHN5c3RlbS4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIGluc2lnaHRzIGxpZSwgdW5kZXJzdGFuZGluZyB0aGUgY2lyY3Vtc3RhbmNlcyB3aGVuIHRoZSBzeXN0ZW0gbmVlZHMgdG8gc2hlZCBtZW1vcnkgZnJvbSBhIG5vZGUuIElzIGl0IGEgcGVyaW9kaWMgcHJvY2Vzcz8gQSByZXNwb25zZSB0byBtZW1vcnkgcHJlc3N1cmU/IE9yIHRyaWdnZXJlZCBieSBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gRmluZGluZyB0aGUgY2FsbGVycyBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxOTMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1MjowNy4zMTYxMjgxODJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMzI5MDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19ub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTE5NzI9c3RhdGljIHZvaWQgaGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4sXFxuLS1cXG5tbS92bXNjYW4uYy0yMDEwLS8qXFxubW0vdm1zY2FuLmM6MjAxMTogKiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpIGlzIGEgaGVscGVyIGZvciBzaHJpbmtfbm9kZSgpLiAgSXQgcmV0dXJucyB0aGUgbnVtYmVyXFxubW0vdm1zY2FuLmMtMjAxMi0gKiBvZiByZWNsYWltZWQgcGFnZXNcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUyNTU9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01Mjc1LVxcbm1tL3Ztc2Nhbi5jOjUyNzY6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01Mjc3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwMDQ9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MDA4LVxcbm1tL3Ztc2Nhbi5jOjYwMDk6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy02MDEwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYxNTU9c3RhdGljIGlubGluZSBib29sIHNob3VsZF9jb250aW51ZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS92bXNjYW4uYy02MjA2LVxcbm1tL3Ztc2Nhbi5jOjYyMDc6c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYyMDgte1xcbi0tXFxubW0vdm1zY2FuLmMtNjI4NS1cXG5tbS92bXNjYW4uYzo2Mjg2OnN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYyODcte1xcbi0tXFxubW0vdm1zY2FuLmMtNjI5My1cXHRcXHRtZW1zZXQoXFx1MDAyNnNjLVxcdTAwM2VuciwgMCwgc2l6ZW9mKHNjLVxcdTAwM2VucikpO1xcbm1tL3Ztc2Nhbi5jOjYyOTQ6XFx0XFx0bHJ1X2dlbl9zaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYyOTUtXFxuLS1cXG5tbS92bXNjYW4uYy02MzEwLVxcbm1tL3Ztc2Nhbi5jOjYzMTE6XFx0c2hyaW5rX25vZGVfbWVtY2dzKHBnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNjMxMi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY0NzE9c3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjU0OS1cXHRcXHRsYXN0X3BnZGF0ID0gem9uZS1cXHUwMDNlem9uZV9wZ2RhdDtcXG5tbS92bXNjYW4uYzo2NTUwOlxcdFxcdHNocmlua19ub2RlKHpvbmUtXFx1MDAzZXpvbmVfcGdkYXQsIHNjKTtcXG5tbS92bXNjYW4uYy02NTUxLVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4MTY9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy02ODYxLS8qIE9ubHkgdXNlZCBieSBzb2Z0IGxpbWl0IHJlY2xhaW0uIERvIG5vdCByZXVzZSBmb3IgYW55dGhpbmcgZWxzZS4gKi9cXG5tbS92bXNjYW4uYzo2ODYyOnVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vdm1zY2FuLmMtNjg2My1cXHRcXHRcXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXFxuLS1cXG5tbS92bXNjYW4uYy02ODg4LVxcdCAqIGhlcmUgaXMgbm90IGEgZ29vZCBpZGVhLCBzaW5jZSBpdCBsaW1pdHMgdGhlIHBhZ2VzIHdlIGNhbiBzY2FuLlxcbm1tL3Ztc2Nhbi5jOjY4ODk6XFx0ICogaWYgd2UgZG9uJ3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0XFxubW0vdm1zY2FuLmMtNjg5MC1cXHQgKiB3aWxsIHBpY2sgdXAgcGFnZXMgZnJvbSBvdGhlciBtZW0gY2dyb3VwJ3MgYXMgd2VsbC4gV2UgaGFja1xcbi0tXFxubW0vdm1zY2FuLmM9NzAxMD1zdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MDM0LVxcdFxcdCAqIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LiBPbmNlIGl0J3NcXG5tbS92bXNjYW4uYzo3MDM1OlxcdFxcdCAqIHJlY2xhaW1lZCBhIGNvbXBhY3Rpb24gZ2FwLCBhbmQga3N3YXBkX3Nocmlua19ub2RlXFxubW0vdm1zY2FuLmMtNzAzNi1cXHRcXHQgKiBoYXMgZHJvcHBlZCBvcmRlciwgc2ltcGx5IGVuc3VyZSB0aGVyZSBhcmUgZW5vdWdoXFxuLS1cXG5tbS92bXNjYW4uYz03MDkyPXN0YXRpYyBib29sIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcxMzAtICovXFxubW0vdm1zY2FuLmM6NzEzMTpzdGF0aWMgYm9vbCBrc3dhcGRfc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03MTMyLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcxNDctXFx0ICovXFxubW0vdm1zY2FuLmM6NzE0ODpcXHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTcxNDktXFxuLS1cXG5tbS92bXNjYW4uYz03MjA0PXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MzEzLVxcbm1tL3Ztc2Nhbi5jOjczMTQ6XFx0XFx0LyogQ2FsbCBzb2Z0IGxpbWl0IHJlY2xhaW0gYmVmb3JlIGNhbGxpbmcgc2hyaW5rX25vZGUuICovXFxubW0vdm1zY2FuLmMtNzMxNS1cXHRcXHRzYy5ucl9zY2FubmVkID0gMDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTczMjUtXFx0XFx0ICovXFxubW0vdm1zY2FuLmM6NzMyNjpcXHRcXHRpZiAoa3N3YXBkX3Nocmlua19ub2RlKHBnZGF0LCBcXHUwMDI2c2MpKVxcbm1tL3Ztc2Nhbi5jLTczMjctXFx0XFx0XFx0cmFpc2VfcHJpb3JpdHkgPSBmYWxzZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc4ODA9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc5MDctXFx0XFx0ZG8ge1xcbm1tL3Ztc2Nhbi5jOjc5MDg6XFx0XFx0XFx0c2hyaW5rX25vZGUocGdkYXQsIHNjKTtcXG5tbS92bXNjYW4uYy03OTA5LVxcdFxcdH0gd2hpbGUgKHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgXFx1MDAzYyBucl9wYWdlcyBcXHUwMDI2XFx1MDAyNiAtLXNjLVxcdTAwM2Vwcmlvcml0eSBcXHUwMDNlPSAwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTI6MDcuMzg5NDYyNjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyOTYwNzUyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFJlY2xhaW0gQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBtZW1vcnkgcmVjbGFpbSBwcm9jZXNzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBzdGFydCB3aXRoIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkLiBJIHNlZSBgdHJ5X3RvX2ZyZWVfcGFnZXNgIOKAkyB0aGF0J3MgYSBub24tc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZywgaXQgc2VlbXMgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdHJpZ2dlcmluZyB0aGUgcmVjbGFpbS4gVGhlbiB0aGVyZSdzIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCwgYWxzbyBub24tc3RhdGljOyB0aGlzIHN1Z2dlc3RzIGl0IHBsYXlzIGEgcm9sZSBpbiBzaHJpbmtpbmcgbWVtb3J5IHdpdGhpbiBjZ3JvdXBzLCB3aGljaCB3aWxsIGJlIHZpdGFsIGZvciBtYW5hZ2luZyByZXNvdXJjZXMuXG5cbkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgY29yZSBtZWNoYW5pY3MuIGBiYWxhbmNlX3BnZGF0YCwgd2hpbGUgc3RhdGljLCBsb29rcyBsaWtlIHRoZSBjZW50cmFsIGxvb3Agd2l0aGluIGBrc3dhcGRgLCB3aGljaCBtYWtlcyBpdCBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgYWxzbyBub3RlIHRoYXQgYF9fbm9kZV9yZWNsYWltYCBpcyBzdGF0aWMgYnV0IGxpbmtlZCB0byBgbm9kZV9yZWNsYWltYCwgc28gdHJhY2luZyB0aG9zZSBjYWxscyB3aWxsIHByb3ZpZGUgdGhlIG92ZXJ2aWV3IG9mIG92ZXJhbGwgbm9kZSByZWNsYWltLlxuXG5UaGVyZWZvcmUsIG15IGltbWVkaWF0ZSBwbGFuIGlzIHRvIGZvY3VzIG15IGludmVzdGlnYXRpb24gb24gdGhlc2UgY3JpdGljYWwgcG9pbnRzOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBub2RlX3JlY2xhaW1gLCBhbmQgYGtzd2FwZGAuIEV4YW1pbmluZyB0aGVpciBpbnRlcmFjdGlvbnMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlY2xhaW0gc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTI6MTEuNzE5MDczNzQ4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTQ1MDEyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fZnJlZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz02NTYzPXN0YXRpYyB2b2lkIHNuYXBzaG90X3JlZmF1bHRzKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy02NTkzLSAqL1xcbm1tL3Ztc2Nhbi5jOjY1OTQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcXG5tbS92bXNjYW4uYy02NTk1LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYz02NzM2PXN0YXRpYyBib29sIHRocm90dGxlX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtNjgxNS1cXG5tbS92bXNjYW4uYzo2ODE2OnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbm1tL3Ztc2Nhbi5jLTY4MTctXFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssIGNvbnN0IG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcbi0tXFxubW0vdm1zY2FuLmMtNjg1MC1cXG5tbS92bXNjYW4uYzo2ODUxOlxcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTY4NTItXFxuLS1cXG5tbS92bXNjYW4uYz02OTAyPXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy02OTMzLVxcbm1tL3Ztc2Nhbi5jOjY5MzQ6XFx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNjkzNS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTc3MDA9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXFxuLS1cXG5tbS92bXNjYW4uYy03NzE5LVxcbm1tL3Ztc2Nhbi5jOjc3MjA6XFx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNzcyMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTI6MTEuNzkwNTI4OTQ2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1OTc3OTc5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTWVtb3J5IFJlY2xhaW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIG1lbW9yeSByZWNsYWltIHBhdGNoLCBhbmQgdGhlIGltbWVkaWF0ZSBlbnRyeSBwb2ludHMgZm9yIGRpcmVjdCByZWNsYWltIGp1bXAgb3V0IGF0IG1lOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBzaHJpbmtfYWxsX21lbW9yeWAsIGFuZCBgbm9kZV9yZWNsYWltYC4gRm9yIHRoZSBga3N3YXBkYCBkYWVtb24sIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIGBrc3dhcGRgIHRocmVhZCBmdW5jdGlvbiBpdHNlbGYgYXMgdGhlIGVudHJ5IHBvaW50LlxuXG5HaXZlbiB0aGF0IHRoaXMgcGF0Y2ggdG91Y2hlcyBtZW1vcnkgcmVjbGFpbSBsb2dpYywgZnV6emluZyBpcyBhbiBhYnNvbHV0ZSBtdXN0LWRvLiBUaGUgbW9kaWZpY2F0aW9ucyBhcmUgZGVlcCBpbiBgbW0vdm1zY2FuLmNgIOKAkyB0aGF0J3MgY29yZSBrZXJuZWwgY29kZSwgZWFzaWx5IHJlYWNoYWJsZSwgYW5kIHRodXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcgZWZmb3J0cy4gSSBzZWUgdGhlIHBhdGNoIGludHJvZHVjZXMgYHRocm90dGxlX2lzb2xhdGVkYCBhbmQgbW9kaWZpZXMgYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYGV2aWN0X2ZvbGlvc2AuXG5cbk15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRob3NlIGtleSBzeW1ib2xzOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBzaHJpbmtfYWxsX21lbW9yeWAsIGBub2RlX3JlY2xhaW1gLCBhbmQgYGtzd2FwZGAuXG5cbk5vdywgcmVnYXJkaW5nIGBldmljdF9mb2xpb3NgLCBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgaXQncyBNR0xSVS1zcGVjaWZpYy4gQWgsIHllcywgaXQncyByaWdodCB0aGVyZSBpbiB0aGUgTUdMUlUgc2VjdGlvbiBvZiBgbW0vdm1zY2FuLmNgLiBBIHF1aWNrIGNoZWNrLiBJcyBNR0xSVSBlbmFibGVkIGJ5IGRlZmF1bHQ/IEkgbmVlZCB0byBjaGVjayBgQ09ORklHX0xSVV9HRU5gLiBJJ2xsIGdvIGxvb2sgaW4gYG1tL0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MTYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTI6MTcuMzg4MzI5MDk4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzIwNTQwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM5Mz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuLS1cXG5tbS9LY29uZmlnLTE0MDMtIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjE0MDQ6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MDUtXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxMi1cXG5tbS9LY29uZmlnOjE0MTM6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQxNC1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxOC1cXG5tbS9LY29uZmlnOjE0MTk6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MjAtXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDI3LVxcbm1tL0tjb25maWc6MTQyODpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MjktXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1MjoxNy40ODU1Mzk1MjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1MTY2NTg4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNR0xSVSBUZXN0aW5nIFBsYW4qKlxuXG5Pa2F5LCBzbyB0byByZWFsbHkgcHV0IE1HTFJVIHRocm91Z2ggaXRzIHBhY2VzLCBJIHNob3VsZCBlbmFibGUgYm90aCBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgLiBUaGF0IG1ha2VzIHNlbnNlLiBJdCBhbGxvd3MgZm9yIGEgbW9yZSBmb2N1c2VkIGNvbXBhcmlzb24sIHNpbmNlIHRoZSBsZWdhY3kgTFJVIHBhdGgsIHNwZWNpZmljYWxseSB0aGUgYHNocmlua19pbmFjdGl2ZV9saXN0YCBmdW5jdGlvbiwgaGFzIGFsc28gYmVlbiB0b3VjaGVkLiBFdmVuIHRob3VnaCBNR0xSVSBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgZ2l2ZW4gdGhlIGxlZ2FjeSBjaGFuZ2VzLCB0aG9yb3VnaCB0ZXN0aW5nIG9mIGJvdGggaXMgYWx3YXlzIHRoZSByaWdodCBjYWxsLiBJdCdzIHRoZSBvbmx5IHdheSB0byBiZSBjb21wbGV0ZWx5IHN1cmUuXG5cbkkgY2FuIGVhc2lseSBhZGQgdGhvc2UgY29uZmlndXJhdGlvbnMgdG8gdGhlIEVuYWJsZUNvbmZpZ3MuIE5vIHByb2JsZW0gdGhlcmUuXG5cbk5leHQsIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgbW0vdm1zY2FuLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBub2RlX3JlY2xhaW1gIGZ1bmN0aW9uLiBUaGF0J3MgdGhlIGNvcmUgb2YgdGhlIHJlY2xhaW0gcHJvY2Vzcywgc28gSSBzaG91bGQgc2VlIGhvdyB0aGlzIGFmZmVjdHMgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzY3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjUyOjIxLjQzNzIwODM5NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAxMzY1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibm9kZV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTYyODY9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNjI4Ny17XFxubW0vdm1zY2FuLmM6NjI4ODpcXHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZCwgbnJfc2Nhbm5lZCwgbnJfbm9kZV9yZWNsYWltZWQ7XFxubW0vdm1zY2FuLmMtNjI4OS1cXHRzdHJ1Y3QgbHJ1dmVjICp0YXJnZXRfbHJ1dmVjO1xcbi0tXFxubW0vdm1zY2FuLmMtNjMxNC1cXG5tbS92bXNjYW4uYzo2MzE1OlxcdG5yX25vZGVfcmVjbGFpbWVkID0gc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCAtIG5yX3JlY2xhaW1lZDtcXG5tbS92bXNjYW4uYy02MzE2LVxcbi0tXFxubW0vdm1zY2FuLmMtNjMxOS1cXHRcXHR2bXByZXNzdXJlKHNjLVxcdTAwM2VnZnBfbWFzaywgc2MtXFx1MDAzZW9yZGVyLCBzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsIHRydWUsXFxubW0vdm1zY2FuLmM6NjMyMDpcXHRcXHRcXHQgICBzYy1cXHUwMDNlbnJfc2Nhbm5lZCAtIG5yX3NjYW5uZWQsIG5yX25vZGVfcmVjbGFpbWVkKTtcXG5tbS92bXNjYW4uYy02MzIxLVxcbm1tL3Ztc2Nhbi5jOjYzMjI6XFx0aWYgKG5yX25vZGVfcmVjbGFpbWVkKVxcbm1tL3Ztc2Nhbi5jLTYzMjMtXFx0XFx0cmVjbGFpbWFibGUgPSB0cnVlO1xcbi0tXFxubW0vdm1zY2FuLmMtNjM4My1cXG5tbS92bXNjYW4uYzo2Mzg0OlxcdGlmIChzaG91bGRfY29udGludWVfcmVjbGFpbShwZ2RhdCwgbnJfbm9kZV9yZWNsYWltZWQsIHNjKSlcXG5tbS92bXNjYW4uYy02Mzg1LVxcdFxcdGdvdG8gYWdhaW47XFxuLS1cXG5tbS92bXNjYW4uYz03NzcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHZtc2Nhbl9zeXNjdGxfdGFibGVbXSA9IHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc3ODMtXFx0XFx0LnByb2NuYW1lXFx0PSBcXFwiem9uZV9yZWNsYWltX21vZGVcXFwiLFxcbm1tL3Ztc2Nhbi5jOjc3ODQ6XFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZub2RlX3JlY2xhaW1fbW9kZSxcXG5tbS92bXNjYW4uYzo3Nzg1OlxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihub2RlX3JlY2xhaW1fbW9kZSksXFxubW0vdm1zY2FuLmMtNzc4Ni1cXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc4MDM9bW9kdWxlX2luaXQoa3N3YXBkX2luaXQpXFxuLS1cXG5tbS92bXNjYW4uYy03ODA4LSAqXFxubW0vdm1zY2FuLmM6NzgwOTogKiBJZiBub24temVybyBjYWxsIG5vZGVfcmVjbGFpbSB3aGVuIHRoZSBudW1iZXIgb2YgZnJlZSBwYWdlcyBmYWxscyBiZWxvd1xcbm1tL3Ztc2Nhbi5jLTc4MTAtICogdGhlIHdhdGVybWFya3MuXFxubW0vdm1zY2FuLmMtNzgxMS0gKi9cXG5tbS92bXNjYW4uYzo3ODEyOmludCBub2RlX3JlY2xhaW1fbW9kZSBfX3JlYWRfbW9zdGx5O1xcbm1tL3Ztc2Nhbi5jLTc4MTMtXFxuLS1cXG5tbS92bXNjYW4uYy03ODIxLS8qXFxubW0vdm1zY2FuLmM6NzgyMjogKiBQZXJjZW50YWdlIG9mIHBhZ2VzIGluIGEgem9uZSB0aGF0IG11c3QgYmUgdW5tYXBwZWQgZm9yIG5vZGVfcmVjbGFpbSB0b1xcbm1tL3Ztc2Nhbi5jLTc4MjMtICogb2NjdXIuXFxuLS1cXG5tbS92bXNjYW4uYz03ODQ4PXN0YXRpYyB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy03ODU4LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjc4NTk6XFx0aWYgKG5vZGVfcmVjbGFpbV9tb2RlIFxcdTAwMjYgUkVDTEFJTV9VTk1BUClcXG5tbS92bXNjYW4uYy03ODYwLVxcdFxcdG5yX3BhZ2VjYWNoZV9yZWNsYWltYWJsZSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfRklMRV9QQUdFUyk7XFxuLS1cXG5tbS92bXNjYW4uYy03ODc5LSAqL1xcbm1tL3Ztc2Nhbi5jOjc4ODA6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03ODgxLVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmMtNzg4Ny1cXG5tbS92bXNjYW4uYzo3ODg4OlxcdHRyYWNlX21tX3Ztc2Nhbl9ub2RlX3JlY2xhaW1fYmVnaW4ocGdkYXQtXFx1MDAzZW5vZGVfaWQsIHNjLVxcdTAwM2VvcmRlcixcXG5tbS92bXNjYW4uYy03ODg5LVxcdFxcdFxcdFxcdFxcdCAgIHNjLVxcdTAwM2VnZnBfbWFzayk7XFxuLS1cXG5tbS92bXNjYW4uYy03OTE3LVxcbm1tL3Ztc2Nhbi5jOjc5MTg6XFx0dHJhY2VfbW1fdm1zY2FuX25vZGVfcmVjbGFpbV9lbmQoc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCwgTlVMTCk7XFxubW0vdm1zY2FuLmMtNzkxOS1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc5MjItXFxubW0vdm1zY2FuLmM6NzkyMzp1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxcbm1tL3Ztc2Nhbi5jLTc5MjQte1xcbi0tXFxubW0vdm1zY2FuLmMtNzkzMi1cXHRcXHQucHJpb3JpdHkgPSBOT0RFX1JFQ0xBSU1fUFJJT1JJVFksXFxubW0vdm1zY2FuLmM6NzkzMzpcXHRcXHQubWF5X3dyaXRlcGFnZSA9ICEhKG5vZGVfcmVjbGFpbV9tb2RlIFxcdTAwMjYgUkVDTEFJTV9XUklURSksXFxubW0vdm1zY2FuLmM6NzkzNDpcXHRcXHQubWF5X3VubWFwID0gISEobm9kZV9yZWNsYWltX21vZGUgXFx1MDAyNiBSRUNMQUlNX1VOTUFQKSxcXG5tbS92bXNjYW4uYy03OTM1LVxcdFxcdC5tYXlfc3dhcCA9IDEsXFxuLS1cXG5tbS92bXNjYW4uYy03OTcxLVxcbm1tL3Ztc2Nhbi5jOjc5NzI6XFx0cmV0ID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIG5yX3BhZ2VzLCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTc5NzMtXFx0Y2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXFx1MDAyNnBnZGF0LVxcdTAwM2VmbGFncyk7XFxuLS1cXG5tbS92bXNjYW4uYy03OTg0LVxcbm1tL3Ztc2Nhbi5jOjc5ODU6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03OTg2LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmM9ODAwNT1pbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuLS1cXG5tbS92bXNjYW4uYy04MDk3LVxcbm1tL3Ztc2Nhbi5jOjgwOTg6XFx0XFx0XFx0cmVjbGFpbWVkID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGJhdGNoX3NpemUsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtODA5OS1cXHRcXHRcXHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcXHUwMDI2cGdkYXQtXFx1MDAzZWZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTI6MjEuNDk3MzQ5NjIyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1ODM1Mzg2NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIE1lbW9yeSBSZWNsYW1hdGlvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IHJlY2xhaW0gZnVuY3Rpb25zIGhlcmUuIGBub2RlX3JlY2xhaW1gIGlzIGEgc29saWQgcGllY2UsIGFsd2F5cyByZWxpYWJsZS4gVGhlbiB0aGVyZSdzIGBzaHJpbmtfYWxsX21lbW9yeWAg4oCTIHRoYXQgb25lJ3MgZ290IGEgYnJvYWQgaW1wYWN0IGFuZCBJIGxpa2UgaXRzIGFwcHJvYWNoLiBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIGFub3RoZXIgZ29vZCBjYW5kaWRhdGUgZm9yIHRhcmdldGVkIHBhZ2UgZnJlZWluZywgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBpcyBlc3NlbnRpYWwgZm9yIGNncm91cCBtYW5hZ2VtZW50LlxuXG5Ob3csIGEgY3J1Y2lhbCBxdWVzdGlvbiBwb3BzIHVwIHJlZ2FyZGluZyBgc2hyaW5rX2FsbF9tZW1vcnlgOiBpcyBpdCByZWFkaWx5IGF2YWlsYWJsZSB3aGVuIGFuZCB3aGVyZSBJIG5lZWQgaXQ/IElzIGl0IGV4cG9ydGVkIHByb3Blcmx5PyBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaXRzIHJlYWNoYWJpbGl0eS4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgdmlzaWJpbGl0eSBvZiB0aGlzIGNydWNpYWwgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTczLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTI6MjkuMDgwODkxMDU5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDczNzUwMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rX2FsbF9tZW1vcnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NzY4Nj1ib29sIGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy03Njk5LSAqL1xcbm1tL3Ztc2Nhbi5jOjc3MDA6dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXFxubW0vdm1zY2FuLmMtNzcwMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjUyOjI5LjE4ODI3NDM4NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzE5NjY3MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgZm9yIEhpYmVybmF0aW9uIEludGVyZmVyZW5jZSoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGlzc3VlLi4uIGl0J3MgZGVmaW5pdGVseSByZWxhdGVkIHRvIGhpYmVybmF0aW9uLCB0aGF0IG11Y2ggaXMgY2xlYXIuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgYWN0aXZpdHkgb2YgYGtzd2FwZGAuIEl0J3MgdGhlIGtlcm5lbCB0aHJlYWQgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIG1lbW9yeSBzd2FwcGluZywgYW5kIGl0J3MgYSBwcmltZSBzdXNwZWN0IHdoZW5ldmVyIGhpYmVybmF0aW9uLXJlbGF0ZWQgaXNzdWVzIHBvcCB1cC4gSSBuZWVkIHRvIHNlZSBpZiBpdCdzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIG9yIGlmIHNvbWV0aGluZyBpcyBib3R0bGVuZWNraW5nIHRoZXJlLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0IGBrc3dhcGRgIGlzIHVwIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjkzNiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjUyOjM0LjUwNzk0Mzg5NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcwMTYyNTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtzd2FwZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDUyNCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubW0vdm1zY2FuLmMtNS0gKiAgU3dhcCByZW9yZ2FuaXNlZCAyOS4xMi45NSwgU3RlcGhlbiBUd2VlZGllLlxcbm1tL3Ztc2Nhbi5jOjY6ICogIGtzd2FwZCBhZGRlZDogNy4xLjk2ICBzY3RcXG5tbS92bXNjYW4uYzo3OiAqICBSZW1vdmVkIGtzd2FwZF9jdGwgbGltaXRzLCBhbmQgc3dhcCBvdXQgYXMgbWFueSBwYWdlcyBhcyBuZWVkZWRcXG5tbS92bXNjYW4uYy04LSAqICB0byBicmluZyB0aGUgc3lzdGVtIGJhY2sgdG8gZnJlZXBhZ2VzLmhpZ2g6IDIuNC45NywgUmlrIHZhbiBSaWVsLlxcbm1tL3Ztc2Nhbi5jOjk6ICogIFpvbmUgYXdhcmUga3N3YXBkIHN0YXJ0ZWQgMDIvMDAsIEthbm9qIFNhcmNhciAoa2Fub2pAc2dpLmNvbSkuXFxubW0vdm1zY2FuLmMtMTAtICogIE11bHRpcXVldWUgVk0gc3RhcnRlZCA1LjguMDAsIFJpayB2YW4gUmllbC5cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ0Nz1zdGF0aWMgaW50IHJlY2xhaW1lcl9vZmZzZXQoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00NTItXFxubW0vdm1zY2FuLmM6NDUzOlxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxcbm1tL3Ztc2Nhbi5jLTQ1NC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ4Mz1zdGF0aWMgYm9vbCBza2lwX3Rocm90dGxlX25vcHJvZ3Jlc3MocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ4OC1cXHQvKlxcbm1tL3Ztc2Nhbi5jOjQ4OTpcXHQgKiBJZiBrc3dhcGQgaXMgZGlzYWJsZWQsIHJlc2NoZWR1bGUgaWYgbmVjZXNzYXJ5IGJ1dCBkbyBub3RcXG5tbS92bXNjYW4uYy00OTAtXFx0ICogdGhyb3R0bGUgYXMgdGhlIHN5c3RlbSBpcyBsaWtlbHkgbmVhciBPT00uXFxubW0vdm1zY2FuLmMtNDkxLVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjQ5MjpcXHRpZiAoa3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdkYXQpKVxcbm1tL3Ztc2Nhbi5jLTQ5My1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxMT12b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE3LVxcdC8qXFxubW0vdm1zY2FuLmM6NTE4OlxcdCAqIERvIG5vdCB0aHJvdHRsZSB1c2VyIHdvcmtlcnMsIGt0aHJlYWRzIG90aGVyIHRoYW4ga3N3YXBkIG9yXFxubW0vdm1zY2FuLmMtNTE5LVxcdCAqIHdvcmtxdWV1ZXMuIFRoZXkgbWF5IGJlIHJlcXVpcmVkIGZvciByZWNsYWltIHRvIG1ha2VcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyMS1cXHQgKi9cXG5tbS92bXNjYW4uYzo1MjI6XFx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpIFxcdTAwMjZcXHUwMDI2XFxubW0vdm1zY2FuLmMtNTIzLVxcdCAgICBjdXJyZW50LVxcdTAwM2VmbGFncyBcXHUwMDI2IChQRl9VU0VSX1dPUktFUnxQRl9LVEhSRUFEKSkge1xcbi0tXFxubW0vdm1zY2FuLmM9OTY2PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2RlbW90ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKnNyYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTk3NS1cXHQgKiBtYWtlIHN1cmUgd2UgYWxsb2NhdGUgZnJvbSB0aGUgdGFyZ2V0IG5vZGUgZmlyc3QgYWxzbyB0cnlpbmcgdG9cXG5tbS92bXNjYW4uYzo5NzY6XFx0ICogZGVtb3RlIG9yIHJlY2xhaW0gcGFnZXMgZnJvbSB0aGUgdGFyZ2V0IG5vZGUgdmlhIGtzd2FwZCBpZiB3ZSBhcmVcXG5tbS92bXNjYW4uYy05NzctXFx0ICogbG93IG9uIGZyZWUgbWVtb3J5IG9uIHRhcmdldCBub2RlLiBJZiB3ZSBkb24ndCBkbyB0aGlzIGFuZCBpZlxcbi0tXFxubW0vdm1zY2FuLmM9MTA1OD1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0xMTIxLVxcdFxcdCAqIFRoZSBudW1iZXIgb2YgZGlydHkgcGFnZXMgZGV0ZXJtaW5lcyBpZiBhIG5vZGUgaXMgbWFya2VkXFxubW0vdm1zY2FuLmM6MTEyMjpcXHRcXHQgKiByZWNsYWltX2Nvbmdlc3RlZC4ga3N3YXBkIHdpbGwgc3RhbGwgYW5kIHN0YXJ0IHdyaXRpbmdcXG5tbS92bXNjYW4uYy0xMTIzLVxcdFxcdCAqIGZvbGlvcyBpZiB0aGUgdGFpbCBvZiB0aGUgTFJVIGlzIGFsbCBkaXJ0eSB1bnF1ZXVlZCBmb2xpb3MuXFxuLS1cXG5tbS92bXNjYW4uYy0xMTkwLVxcdFxcdFxcdC8qIENhc2UgMSBhYm92ZSAqL1xcbm1tL3Ztc2Nhbi5jOjExOTE6XFx0XFx0XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYy0xMTkyLVxcdFxcdFxcdCAgICBmb2xpb190ZXN0X3JlY2xhaW0oZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS92bXNjYW4uYz0xNTg5PXVuc2lnbmVkIGludCByZWNsYWltX2NsZWFuX3BhZ2VzX2Zyb21fbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE2MTQtXFx0ICogV2Ugc2hvdWxkIGJlIHNhZmUgaGVyZSBzaW5jZSB3ZSBhcmUgb25seSBkZWFsaW5nIHdpdGggZmlsZSBwYWdlcyBhbmRcXG5tbS92bXNjYW4uYzoxNjE1OlxcdCAqIHdlIGFyZSBub3Qga3N3YXBkIGFuZCB0aGVyZWZvcmUgY2Fubm90IHdyaXRlIGRpcnR5IGZpbGUgcGFnZXMuIEJ1dFxcbm1tL3Ztc2Nhbi5jLTE2MTYtXFx0ICogY2FsbCBtZW1hbGxvY19ub3JlY2xhaW1fc2F2ZSgpIGFueXdheSwganVzdCBpbiBjYXNlIHRoZXNlIGNvbmRpdGlvbnNcXG4tLVxcbm1tL3Ztc2Nhbi5jPTE4MjI9c3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmaWxlLFxcbi0tXFxubW0vdm1zY2FuLmMtMTgyNy1cXG5tbS92bXNjYW4uYzoxODI4OlxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxcbm1tL3Ztc2Nhbi5jLTE4MjktXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vdm1zY2FuLmM9Mzg5Mz1zdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqc2V0X21tX3dhbGsoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmb3JjZV9hbGxvYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM4OTYtXFxubW0vdm1zY2FuLmM6Mzg5NzpcXHRpZiAocGdkYXQgXFx1MDAyNlxcdTAwMjYgY3VycmVudF9pc19rc3dhcGQoKSkge1xcbm1tL3Ztc2Nhbi5jLTM4OTgtXFx0XFx0Vk1fV0FSTl9PTl9PTkNFKHdhbGspO1xcbi0tXFxubW0vdm1zY2FuLmMtMzkwMS1cXHR9IGVsc2UgaWYgKCF3YWxrIFxcdTAwMjZcXHUwMDI2IGZvcmNlX2FsbG9jKSB7XFxubW0vdm1zY2FuLmM6MzkwMjpcXHRcXHRWTV9XQVJOX09OX09OQ0UoY3VycmVudF9pc19rc3dhcGQoKSk7XFxubW0vdm1zY2FuLmMtMzkwMy1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTM5MTM9c3RhdGljIHZvaWQgY2xlYXJfbW1fd2Fsayh2b2lkKVxcbi0tXFxubW0vdm1zY2FuLmMtMzkyMS1cXG5tbS92bXNjYW4uYzozOTIyOlxcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSlcXG5tbS92bXNjYW4uYy0zOTIzLVxcdFxcdGtmcmVlKHdhbGspO1xcbi0tXFxubW0vdm1zY2FuLmM9NDIzNT1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDI0MC1cXG5tbS92bXNjYW4uYzo0MjQxOlxcdFZNX1dBUk5fT05fT05DRSghY3VycmVudF9pc19rc3dhcGQoKSk7XFxubW0vdm1zY2FuLmMtNDI0Mi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwNjQ9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwNzUtXFx0LyogY2hlY2sgdGhlIG9yZGVyIHRvIGV4Y2x1ZGUgY29tcGFjdGlvbi1pbmR1Y2VkIHJlY2xhaW0gKi9cXG5tbS92bXNjYW4uYzo1MDc2OlxcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSB8fCBzYy1cXHUwMDNlb3JkZXIpXFxubW0vdm1zY2FuLmMtNTA3Ny1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS92bXNjYW4uYy01MDg5LVxcbm1tL3Ztc2Nhbi5jOjUwOTA6XFx0Lyoga3N3YXBkIHNob3VsZCBhYm9ydCBpZiBhbGwgZWxpZ2libGUgem9uZXMgYXJlIHNhZmUgKi9cXG5tbS92bXNjYW4uYy01MDkxLVxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vdm1zY2FuLmM9NTI3Nj1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI5OC1cXG5tbS92bXNjYW4uYzo1Mjk5OlxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxcbm1tL3Ztc2Nhbi5jLTUzMDAtXFx0XFx0c2MtXFx1MDAzZW5yX3JlY2xhaW1lZCA9IDA7XFxuLS1cXG5tbS92bXNjYW4uYy01MzA2LVxcbm1tL3Ztc2Nhbi5jOjUzMDc6XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXFxubW0vdm1zY2FuLmMtNTMwOC1cXHRcXHRzYy1cXHUwMDNlbnJfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUzMTQtXFx0aWYgKHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgXFx1MDAzZSByZWNsYWltZWQpXFxubW0vdm1zY2FuLmM6NTMxNTpcXHRcXHRrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzKHBnZGF0LCBzYy1cXHUwMDNlb3JkZXIsIHNjLVxcdTAwM2VyZWNsYWltX2lkeCk7XFxubW0vdm1zY2FuLmMtNTMxNi19XFxuLS1cXG5tbS92bXNjYW4uYz02MDE2PXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwNDUtXFx0ICogREVGX1BSSU9SSVRZIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGZhY3Qgd2UgYXJlIGRpcmVjdFxcbm1tL3Ztc2Nhbi5jOjYwNDY6XFx0ICogcmVjbGFpbWluZyBpbXBsaWVzIHRoYXQga3N3YXBkIGlzIG5vdCBrZWVwaW5nIHVwIGFuZCBpdCBpcyBiZXN0IHRvXFxubW0vdm1zY2FuLmMtNjA0Ny1cXHQgKiBkbyBhIGJhdGNoIG9mIHdvcmsgYXQgb25jZS4gRm9yIG1lbWNnIHJlY2xhaW0gb25lIGNoZWNrIGlzIG1hZGUgdG9cXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwNTAtXFx0ICovXFxubW0vdm1zY2FuLmM6NjA1MTpcXHRwcm9wb3J0aW9uYWxfcmVjbGFpbSA9ICghY2dyb3VwX3JlY2xhaW0oc2MpIFxcdTAwMjZcXHUwMDI2ICFjdXJyZW50X2lzX2tzd2FwZCgpIFxcdTAwMjZcXHUwMDI2XFxubW0vdm1zY2FuLmMtNjA1Mi1cXHRcXHRcXHRcXHRzYy1cXHUwMDNlcHJpb3JpdHkgPT0gREVGX1BSSU9SSVRZKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwNzUtXFx0XFx0LypcXG5tbS92bXNjYW4uYzo2MDc2OlxcdFxcdCAqIEZvciBrc3dhcGQgYW5kIG1lbWNnLCByZWNsYWltIGF0IGxlYXN0IHRoZSBudW1iZXIgb2YgcGFnZXNcXG5tbS92bXNjYW4uYy02MDc3LVxcdFxcdCAqIHJlcXVlc3RlZC4gRW5zdXJlIHRoYXQgdGhlIGFub24gYW5kIGZpbGUgTFJVcyBhcmUgc2Nhbm5lZFxcbi0tXFxubW0vdm1zY2FuLmM9NjIwNz1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MjIxLVxcdCAqXFxubW0vdm1zY2FuLmM6NjIyMjpcXHQgKiBGb3Iga3N3YXBkLCByZWxpYWJsZSBmb3J3YXJkIHByb2dyZXNzIGlzIG1vcmUgaW1wb3J0YW50XFxubW0vdm1zY2FuLmMtNjIyMy1cXHQgKiB0aGFuIGEgcXVpY2sgcmV0dXJuIHRvIGlkbGUuIEFsd2F5cyBkbyBmdWxsIHdhbGtzLlxcbm1tL3Ztc2Nhbi5jLTYyMjQtXFx0ICovXFxubW0vdm1zY2FuLmM6NjIyNTpcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSB8fCBzYy1cXHUwMDNlbWVtY2dfZnVsbF93YWxrKVxcbm1tL3Ztc2Nhbi5jLTYyMjYtXFx0XFx0cGFydGlhbCA9IE5VTEw7XFxuLS1cXG5tbS92bXNjYW4uYz02Mjg2PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjMyNC1cXG5tbS92bXNjYW4uYzo2MzI1OlxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKSB7XFxubW0vdm1zY2FuLmMtNjMyNi1cXHRcXHQvKlxcbi0tXFxubW0vdm1zY2FuLmMtNjMzNy1cXHRcXHQgKlxcbm1tL3Ztc2Nhbi5jOjYzMzg6XFx0XFx0ICogT25jZSBhIG5vZGUgaXMgZmxhZ2dlZCBQR0RBVF9XUklURUJBQ0ssIGtzd2FwZCB3aWxsXFxubW0vdm1zY2FuLmMtNjMzOS1cXHRcXHQgKiBjb3VudCB0aGUgbnVtYmVyIG9mIHBhZ2VzIHVuZGVyIHBhZ2VzIGZsYWdnZWQgZm9yXFxuLS1cXG5tbS92bXNjYW4uYy02MzQ2LVxcdFxcdC8qXFxubW0vdm1zY2FuLmM6NjM0NzpcXHRcXHQgKiBJZiBrc3dhcGQgc2NhbnMgcGFnZXMgbWFya2VkIGZvciBpbW1lZGlhdGVcXG5tbS92bXNjYW4uYy02MzQ4LVxcdFxcdCAqIHJlY2xhaW0gYW5kIHVuZGVyIHdyaXRlYmFjayAobnJfaW1tZWRpYXRlKSwgaXRcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYzNjctXFxubW0vdm1zY2FuLmM6NjM2ODpcXHRcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcXG5tbS92bXNjYW4uYy02MzY5LVxcdFxcdFxcdHNldF9iaXQoTFJVVkVDX05PREVfQ09OR0VTVEVELCBcXHUwMDI2dGFyZ2V0X2xydXZlYy1cXHUwMDNlZmxhZ3MpO1xcbi0tXFxubW0vdm1zY2FuLmMtNjM3My1cXHQgKiBTdGFsbCBkaXJlY3QgcmVjbGFpbSBmb3IgSU8gY29tcGxldGlvbnMgaWYgdGhlIGxydXZlYyBpc1xcbm1tL3Ztc2Nhbi5jOjYzNzQ6XFx0ICogbm9kZSBpcyBjb25nZXN0ZWQuIEFsbG93IGtzd2FwZCB0byBjb250aW51ZSB1bnRpbCBpdFxcbm1tL3Ztc2Nhbi5jLTYzNzUtXFx0ICogc3RhcnRzIGVuY291bnRlcmluZyB1bnF1ZXVlZCBkaXJ0eSBwYWdlcyBvciBjeWNsaW5nIHRocm91Z2hcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYzNzctXFx0ICovXFxubW0vdm1zY2FuLmM6NjM3ODpcXHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgXFx1MDAyNlxcdTAwMjYgY3VycmVudF9tYXlfdGhyb3R0bGUoKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3Ztc2Nhbi5jLTYzNzktXFx0ICAgICFzYy1cXHUwMDNlaGliZXJuYXRpb25fbW9kZSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubW0vdm1zY2FuLmMtNjM5MC1cXHQgKiBzbGVlcC4gT24gcmVjbGFpbSBwcm9ncmVzcywgcmVzZXQgdGhlIGZhaWx1cmUgY291bnRlci4gQVxcbm1tL3Ztc2Nhbi5jOjYzOTE6XFx0ICogc3VjY2Vzc2Z1bCBkaXJlY3QgcmVjbGFpbSBydW4gd2lsbCByZXZpdmUgYSBkb3JtYW50IGtzd2FwZC5cXG5tbS92bXNjYW4uYy02MzkyLVxcdCAqL1xcbm1tL3Ztc2Nhbi5jLTYzOTMtXFx0aWYgKHJlY2xhaW1hYmxlKVxcbm1tL3Ztc2Nhbi5jOjYzOTQ6XFx0XFx0a3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzcyhwZ2RhdCwgc2MtXFx1MDAzZW9yZGVyLCBzYy1cXHUwMDNlcmVjbGFpbV9pZHgpO1xcbm1tL3Ztc2Nhbi5jLTYzOTUtXFx0ZWxzZSBpZiAoc2MtXFx1MDAzZWNhY2hlX3RyaW1fbW9kZSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY0MzM9c3RhdGljIHZvaWQgY29uc2lkZXJfcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY0NDktXFx0LypcXG5tbS92bXNjYW4uYzo2NDUwOlxcdCAqIERvIG5vdCB0aHJvdHRsZSBrc3dhcGQgb3IgY2dyb3VwIHJlY2xhaW0gb24gTk9QUk9HUkVTUyBhcyBpdCB3aWxsXFxubW0vdm1zY2FuLmMtNjQ1MS1cXHQgKiB0aHJvdHRsZSBvbiBWTVNDQU5fVEhST1RUTEVfV1JJVEVCQUNLIGlmIHRoZXJlIGFyZSB0b28gbWFueSBwYWdlc1xcbi0tXFxubW0vdm1zY2FuLmMtNjQ1NC1cXHQgKi9cXG5tbS92bXNjYW4uYzo2NDU1OlxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpIHx8IGNncm91cF9yZWNsYWltKHNjKSlcXG5tbS92bXNjYW4uYy02NDU2LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY2OTE9c3RhdGljIGJvb2wgYWxsb3dfZGlyZWN0X3JlY2xhaW0ocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY2OTgtXFxubW0vdm1zY2FuLmM6NjY5OTpcXHRpZiAoa3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdkYXQpKVxcbm1tL3Ztc2Nhbi5jLTY3MDAtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5tbS92bXNjYW4uYy02NzE1LVxcbm1tL3Ztc2Nhbi5jOjY3MTY6XFx0Lyoga3N3YXBkIG11c3QgYmUgYXdha2UgaWYgcHJvY2Vzc2VzIGFyZSBiZWluZyB0aHJvdHRsZWQgKi9cXG5tbS92bXNjYW4uYzo2NzE3OlxcdGlmICghd21hcmtfb2sgXFx1MDAyNlxcdTAwMjYgd2FpdHF1ZXVlX2FjdGl2ZShcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF93YWl0KSkge1xcbm1tL3Ztc2Nhbi5jOjY3MTg6XFx0XFx0aWYgKFJFQURfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCkgXFx1MDAzZSBaT05FX05PUk1BTClcXG5tbS92bXNjYW4uYzo2NzE5OlxcdFxcdFxcdFdSSVRFX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsIFpPTkVfTk9STUFMKTtcXG5tbS92bXNjYW4uYy02NzIwLVxcbm1tL3Ztc2Nhbi5jOjY3MjE6XFx0XFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX3dhaXQpO1xcbm1tL3Ztc2Nhbi5jLTY3MjItXFx0fVxcbi0tXFxubW0vdm1zY2FuLmMtNjcyOS0gKiBhbmQgdGhlIFBGTUVNQUxMT0MgcmVzZXJ2ZSBmb3IgdGhlIHByZWZlcnJlZCBub2RlIGlzIGdldHRpbmcgZGFuZ2Vyb3VzbHlcXG5tbS92bXNjYW4uYzo2NzMwOiAqIGRlcGxldGVkLiBrc3dhcGQgd2lsbCBjb250aW51ZSB0byBtYWtlIHByb2dyZXNzIGFuZCB3YWtlIHRoZSBwcm9jZXNzZXNcXG5tbS92bXNjYW4uYy02NzMxLSAqIHdoZW4gdGhlIGxvdyB3YXRlcm1hcmsgaXMgcmVhY2hlZC5cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY3MzY9c3RhdGljIGJvb2wgdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy02NzY2LVxcdCAqIFRocm90dGxpbmcgaXMgYmFzZWQgb24gdGhlIGZpcnN0IHVzYWJsZSBub2RlIGFuZCB0aHJvdHRsZWQgcHJvY2Vzc2VzXFxubW0vdm1zY2FuLmM6Njc2NzpcXHQgKiB3YWl0IG9uIGEgcXVldWUgdW50aWwga3N3YXBkIG1ha2VzIHByb2dyZXNzIGFuZCB3YWtlcyB0aGVtLiBUaGVyZVxcbm1tL3Ztc2Nhbi5jLTY3NjgtXFx0ICogaXMgYW4gYWZmaW5pdHkgdGhlbiBiZXR3ZWVuIHByb2Nlc3NlcyB3YWtpbmcgdXAgYW5kIHdoZXJlIHJlY2xhaW1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3OTYtXFx0ICogdHJhbnNhY3Rpb24gaW4gdGhlIGNhc2Ugb2YgYSBmaWxlc3lzdGVtIGxpa2UgZXh0WzN8NF0uIEluIHRoaXMgY2FzZSxcXG5tbS92bXNjYW4uYzo2Nzk3OlxcdCAqIGl0IGlzIG5vdCBzYWZlIHRvIGJsb2NrIG9uIHBmbWVtYWxsb2Nfd2FpdCBhcyBrc3dhcGQgY291bGQgYmVcXG5tbS92bXNjYW4uYy02Nzk4LVxcdCAqIGJsb2NrZWQgd2FpdGluZyBvbiB0aGUgc2FtZSBsb2NrLiBJbnN0ZWFkLCB0aHJvdHRsZSBmb3IgdXAgdG8gYVxcbi0tXFxubW0vdm1zY2FuLmMtNjgwNC1cXHRlbHNlXFxubW0vdm1zY2FuLmM6NjgwNTpcXHRcXHQvKiBUaHJvdHRsZSB1bnRpbCBrc3dhcGQgd2FrZXMgdGhlIHByb2Nlc3MgKi9cXG5tbS92bXNjYW4uYy02ODA2LVxcdFxcdHdhaXRfZXZlbnRfa2lsbGFibGUoem9uZS1cXHUwMDNlem9uZV9wZ2RhdC1cXHUwMDNlcGZtZW1hbGxvY193YWl0LFxcbi0tXFxubW0vdm1zY2FuLmM9Njk0Mz11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtNjk1Mi1cXG5tbS92bXNjYW4uYzo2OTUzOnN0YXRpYyB2b2lkIGtzd2FwZF9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy02OTU0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTcwMTA9c3RhdGljIGJvb2wgcGdkYXRfYmFsYW5jZWQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNzAzMi1cXHRcXHQgKlxcbm1tL3Ztc2Nhbi5jOjcwMzM6XFx0XFx0ICogSG93ZXZlciwga3N3YXBkIHVzdWFsbHkgY2Fubm90IGFjY29tcGxpc2ggdGhpcyBvblxcbm1tL3Ztc2Nhbi5jLTcwMzQtXFx0XFx0ICogaXRzIG93biBhbmQgbmVlZHMga2NvbXBhY3RkIHN1cHBvcnQuIE9uY2UgaXQnc1xcbm1tL3Ztc2Nhbi5jOjcwMzU6XFx0XFx0ICogcmVjbGFpbWVkIGEgY29tcGFjdGlvbiBnYXAsIGFuZCBrc3dhcGRfc2hyaW5rX25vZGVcXG5tbS92bXNjYW4uYy03MDM2LVxcdFxcdCAqIGhhcyBkcm9wcGVkIG9yZGVyLCBzaW1wbHkgZW5zdXJlIHRoZXJlIGFyZSBlbm91Z2hcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcwNjctXFx0ICogbmVlZCBiYWxhbmNpbmcgYnkgZGVmaW5pdGlvbi4gVGhpcyBjYW4gaGFwcGVuIGlmIGEgem9uZS1yZXN0cmljdGVkXFxubW0vdm1zY2FuLmM6NzA2ODpcXHQgKiBhbGxvY2F0aW9uIHRyaWVzIHRvIHdha2UgYSByZW1vdGUga3N3YXBkLlxcbm1tL3Ztc2Nhbi5jLTcwNjktXFx0ICovXFxuLS1cXG5tbS92bXNjYW4uYz03MDc3PXN0YXRpYyB2b2lkIGNsZWFyX3BnZGF0X2Nvbmdlc3RlZChwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNzA4Ni0vKlxcbm1tL3Ztc2Nhbi5jOjcwODc6ICogUHJlcGFyZSBrc3dhcGQgZm9yIHNsZWVwaW5nLiBUaGlzIHZlcmlmaWVzIHRoYXQgdGhlcmUgYXJlIG5vIHByb2Nlc3Nlc1xcbm1tL3Ztc2Nhbi5jLTcwODgtICogd2FpdGluZyBpbiB0aHJvdHRsZV9kaXJlY3RfcmVjbGFpbSgpIGFuZCB0aGF0IHdhdGVybWFya3MgaGF2ZSBiZWVuIG1ldC5cXG5tbS92bXNjYW4uYy03MDg5LSAqXFxubW0vdm1zY2FuLmM6NzA5MDogKiBSZXR1cm5zIHRydWUgaWYga3N3YXBkIGlzIHJlYWR5IHRvIHNsZWVwXFxubW0vdm1zY2FuLmMtNzA5MS0gKi9cXG5tbS92bXNjYW4uYzo3MDkyOnN0YXRpYyBib29sIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcXG5tbS92bXNjYW4uYy03MDkzLVxcdFxcdFxcdFxcdGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MDk3LVxcdCAqIHNvb24gYXMgYWxsb3dfZGlyZWN0X3JlY2xhaW0oKSBpcyB0cnVlLiBCdXQgdGhlcmUgaXMgYSBwb3RlbnRpYWxcXG5tbS92bXNjYW4uYzo3MDk4OlxcdCAqIHJhY2UgYmV0d2VlbiB3aGVuIGtzd2FwZCBjaGVja3MgdGhlIHdhdGVybWFya3MgYW5kIGEgcHJvY2VzcyBnZXRzXFxubW0vdm1zY2FuLmMtNzA5OS1cXHQgKiB0aHJvdHRsZWQuIFRoZXJlIGlzIGFsc28gYSBwb3RlbnRpYWwgcmFjZSBpZiBwcm9jZXNzZXMgZ2V0XFxubW0vdm1zY2FuLmM6NzEwMDpcXHQgKiB0aHJvdHRsZWQsIGtzd2FwZCB3YWtlcywgYSBsYXJnZSBwcm9jZXNzIGV4aXRzIHRoZXJlYnkgYmFsYW5jaW5nIHRoZVxcbm1tL3Ztc2Nhbi5jOjcxMDE6XFx0ICogem9uZXMsIHdoaWNoIGNhdXNlcyBrc3dhcGQgdG8gZXhpdCBiYWxhbmNlX3BnZGF0KCkgYmVmb3JlIHJlYWNoaW5nXFxubW0vdm1zY2FuLmM6NzEwMjpcXHQgKiB0aGUgd2FrZSB1cCBjaGVja3MuIElmIGtzd2FwZCBpcyBnb2luZyB0byBzbGVlcCwgbm8gcHJvY2VzcyBzaG91bGRcXG5tbS92bXNjYW4uYy03MTAzLVxcdCAqIGJlIHNsZWVwaW5nIG9uIHBmbWVtYWxsb2Nfd2FpdCwgc28gd2FrZSB0aGVtIG5vdyBpZiBuZWNlc3NhcnkuIElmXFxubW0vdm1zY2FuLmM6NzEwNDpcXHQgKiB0aGUgd2FrZSB1cCBpcyBwcmVtYXR1cmUsIHByb2Nlc3NlcyB3aWxsIHdha2Uga3N3YXBkIGFuZCBnZXRcXG5tbS92bXNjYW4uYy03MTA1LVxcdCAqIHRocm90dGxlZCBhZ2Fpbi4gVGhlIGRpZmZlcmVuY2UgZnJvbSB3YWtlIHVwcyBpbiBiYWxhbmNlX3BnZGF0KCkgaXNcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcxMTEtXFx0LyogSG9wZWxlc3Mgbm9kZSwgbGVhdmUgaXQgdG8gZGlyZWN0IHJlY2xhaW0gKi9cXG5tbS92bXNjYW4uYzo3MTEyOlxcdGlmIChrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ2RhdCkpXFxubW0vdm1zY2FuLmMtNzExMy1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcxMjMtLypcXG5tbS92bXNjYW4uYzo3MTI0OiAqIGtzd2FwZCBzaHJpbmtzIGEgbm9kZSBvZiBwYWdlcyB0aGF0IGFyZSBhdCBvciBiZWxvdyB0aGUgaGlnaGVzdCB1c2FibGVcXG5tbS92bXNjYW4uYy03MTI1LSAqIHpvbmUgdGhhdCBpcyBjdXJyZW50bHkgdW5iYWxhbmNlZC5cXG5tbS92bXNjYW4uYy03MTI2LSAqXFxubW0vdm1zY2FuLmM6NzEyNzogKiBSZXR1cm5zIHRydWUgaWYga3N3YXBkIHNjYW5uZWQgYXQgbGVhc3QgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgcGFnZXMgdG9cXG5tbS92bXNjYW4uYy03MTI4LSAqIHJlY2xhaW0gb3IgaWYgdGhlIGxhY2sgb2YgcHJvZ3Jlc3Mgd2FzIGR1ZSB0byBwYWdlcyB1bmRlciB3cml0ZWJhY2suXFxuLS1cXG5tbS92bXNjYW4uYy03MTMwLSAqL1xcbm1tL3Ztc2Nhbi5jOjcxMzE6c3RhdGljIGJvb2wga3N3YXBkX3Nocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsXFxubW0vdm1zY2FuLmMtNzEzMi1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYz03MTg2PWNsZWFyX3JlY2xhaW1fYWN0aXZlKHBnX2RhdGFfdCAqcGdkYXQsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MTkxLS8qXFxubW0vdm1zY2FuLmM6NzE5MjogKiBGb3Iga3N3YXBkLCBiYWxhbmNlX3BnZGF0KCkgd2lsbCByZWNsYWltIHBhZ2VzIGFjcm9zcyBhIG5vZGUgZnJvbSB6b25lc1xcbm1tL3Ztc2Nhbi5jLTcxOTMtICogdGhhdCBhcmUgZWxpZ2libGUgZm9yIHVzZSBieSB0aGUgY2FsbGVyIHVudGlsIGF0IGxlYXN0IG9uZSB6b25lIGlzXFxuLS1cXG5tbS92bXNjYW4uYy03MTk1LSAqXFxubW0vdm1zY2FuLmM6NzE5NjogKiBSZXR1cm5zIHRoZSBvcmRlciBrc3dhcGQgZmluaXNoZWQgcmVjbGFpbWluZyBhdC5cXG5tbS92bXNjYW4uYy03MTk3LSAqXFxubW0vdm1zY2FuLmM6NzE5ODogKiBrc3dhcGQgc2NhbnMgdGhlIHpvbmVzIGluIHRoZSBoaWdobWVtLVxcdTAwM2Vub3JtYWwtXFx1MDAzZWRtYSBkaXJlY3Rpb24uICBJdCBza2lwc1xcbm1tL3Ztc2Nhbi5jLTcxOTktICogem9uZXMgd2hpY2ggaGF2ZSBmcmVlX3BhZ2VzIFxcdTAwM2UgaGlnaF93bWFya19wYWdlcyh6b25lKSwgYnV0IG9uY2UgYSB6b25lIGlzXFxuLS1cXG5tbS92bXNjYW4uYz03MjA0PXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MjMwLVxcdCAqIHBsYWNlIHNvIHRoYXQgcGFyYWxsZWwgYWxsb2NhdGlvbnMgdGhhdCBhcmUgbmVhciB0aGUgd2F0ZXJtYXJrIHdpbGxcXG5tbS92bXNjYW4uYzo3MjMxOlxcdCAqIHN0YWxsIG9yIGRpcmVjdCByZWNsYWltIHVudGlsIGtzd2FwZCBpcyBmaW5pc2hlZC5cXG5tbS92bXNjYW4uYy03MjMyLVxcdCAqL1xcbi0tXFxubW0vdm1zY2FuLmMtNzI1OS1cXHRcXHQgKiBnbyBhaGVhZCBpZiBhbGwgZWxpZ2libGUgem9uZXMgZm9yIHRoZSBvcmlnaW5hbCBhbGxvY2F0aW9uXFxubW0vdm1zY2FuLmM6NzI2MDpcXHRcXHQgKiByZXF1ZXN0IGFyZSBiYWxhbmNlZCB0byBhdm9pZCBleGNlc3NpdmUgcmVjbGFpbSBmcm9tIGtzd2FwZC5cXG5tbS92bXNjYW4uYy03MjYxLVxcdFxcdCAqL1xcbi0tXFxubW0vdm1zY2FuLmMtNzI3Ny1cXHRcXHQgKiBvbiB0aGUgZ3JvdW5kcyB0aGF0IHRoZSBub3JtYWwgcmVjbGFpbSBzaG91bGQgYmUgZW5vdWdoIHRvXFxubW0vdm1zY2FuLmM6NzI3ODpcXHRcXHQgKiByZS1ldmFsdWF0ZSBpZiBib29zdGluZyBpcyByZXF1aXJlZCB3aGVuIGtzd2FwZCBuZXh0IHdha2VzLlxcbm1tL3Ztc2Nhbi5jLTcyNzktXFx0XFx0ICovXFxuLS1cXG5tbS92bXNjYW4uYy03MzExLVxcdFxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjczMTI6XFx0XFx0a3N3YXBkX2FnZV9ub2RlKHBnZGF0LCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTczMTMtXFxuLS1cXG5tbS92bXNjYW4uYy03MzI1LVxcdFxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjczMjY6XFx0XFx0aWYgKGtzd2FwZF9zaHJpbmtfbm9kZShwZ2RhdCwgXFx1MDAyNnNjKSlcXG5tbS92bXNjYW4uYy03MzI3LVxcdFxcdFxcdHJhaXNlX3ByaW9yaXR5ID0gZmFsc2U7XFxuLS1cXG5tbS92bXNjYW4uYy03MzM3LVxcbm1tL3Ztc2Nhbi5jOjczMzg6XFx0XFx0LyogQ2hlY2sgaWYga3N3YXBkIHNob3VsZCBiZSBzdXNwZW5kaW5nICovXFxubW0vdm1zY2FuLmMtNzMzOS1cXHRcXHRfX2ZzX3JlY2xhaW1fcmVsZWFzZShfVEhJU19JUF8pO1xcbi0tXFxubW0vdm1zY2FuLmMtNzM3Ni1cXHQgKiB3YXRlcm1hcmtfaGlnaCBhdCB0aGlzIHBvaW50LiBXZSBuZWVkIHRvIGF2b2lkIGluY3JlYXNpbmcgdGhlXFxubW0vdm1zY2FuLmM6NzM3NzpcXHQgKiBmYWlsdXJlIGNvdW50IHRvIHByZXZlbnQgdGhlIGtzd2FwZCB0aHJlYWQgZnJvbSBzdG9wcGluZy5cXG5tbS92bXNjYW4uYy03Mzc4LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jLTczNzktXFx0aWYgKCFzYy5ucl9yZWNsYWltZWQgXFx1MDAyNlxcdTAwMjYgIWJvb3N0ZWQpIHtcXG5tbS92bXNjYW4uYzo3MzgwOlxcdFxcdGludCBmYWlsX2NudCA9IGF0b21pY19pbmNfcmV0dXJuKFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX2ZhaWx1cmVzKTtcXG5tbS92bXNjYW4uYzo3MzgxOlxcdFxcdC8qIGtzd2FwZCBjb250ZXh0LCBsb3cgb3ZlcmhlYWQgdG8gdHJhY2UgZXZlcnkgZmFpbHVyZSAqL1xcbm1tL3Ztc2Nhbi5jOjczODI6XFx0XFx0dHJhY2VfbW1fdm1zY2FuX2tzd2FwZF9yZWNsYWltX2ZhaWwocGdkYXQtXFx1MDAzZW5vZGVfaWQsIGZhaWxfY250KTtcXG5tbS92bXNjYW4uYy03MzgzLVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0MTgtXFx0LypcXG5tbS92bXNjYW4uYzo3NDE5OlxcdCAqIFJldHVybiB0aGUgb3JkZXIga3N3YXBkIHN0b3BwZWQgcmVjbGFpbWluZyBhdCBhc1xcbm1tL3Ztc2Nhbi5jOjc0MjA6XFx0ICogcHJlcGFyZV9rc3dhcGRfc2xlZXAoKSB0YWtlcyBpdCBpbnRvIGFjY291bnQuIElmIGFub3RoZXIgY2FsbGVyXFxubW0vdm1zY2FuLmM6NzQyMTpcXHQgKiBlbnRlcmVkIHRoZSBhbGxvY2F0b3Igc2xvdyBwYXRoIHdoaWxlIGtzd2FwZCB3YXMgYXdha2UsIG9yZGVyIHdpbGxcXG5tbS92bXNjYW4uYy03NDIyLVxcdCAqIHJlbWFpbiBhdCB0aGUgaGlnaGVyIGxldmVsLlxcbi0tXFxubW0vdm1zY2FuLmMtNzQyNy0vKlxcbm1tL3Ztc2Nhbi5jOjc0Mjg6ICogVGhlIHBnZGF0LVxcdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4IGlzIHVzZWQgdG8gcGFzcyB0aGUgaGlnaGVzdCB6b25lIGluZGV4IHRvXFxubW0vdm1zY2FuLmM6NzQyOTogKiBiZSByZWNsYWltZWQgYnkga3N3YXBkIGZyb20gdGhlIHdha2VyLiBJZiB0aGUgdmFsdWUgaXMgTUFYX05SX1pPTkVTIHdoaWNoIGlzXFxubW0vdm1zY2FuLmM6NzQzMDogKiBub3QgYSB2YWxpZCBpbmRleCB0aGVuIGVpdGhlciBrc3dhcGQgcnVucyBmb3IgZmlyc3QgdGltZSBvciBrc3dhcGQgY291bGRuJ3RcXG5tbS92bXNjYW4uYy03NDMxLSAqIHNsZWVwIGFmdGVyIHByZXZpb3VzIHJlY2xhaW0gYXR0ZW1wdCAobm9kZSBpcyBzdGlsbCB1bmJhbGFuY2VkKS4gSW4gdGhhdFxcbm1tL3Ztc2Nhbi5jOjc0MzI6ICogY2FzZSByZXR1cm4gdGhlIHpvbmUgaW5kZXggb2YgdGhlIHByZXZpb3VzIGtzd2FwZCByZWNsYWltIGN5Y2xlLlxcbm1tL3Ztc2Nhbi5jLTc0MzMtICovXFxubW0vdm1zY2FuLmM6NzQzNDpzdGF0aWMgZW51bSB6b25lX3R5cGUga3N3YXBkX2hpZ2hlc3Rfem9uZWlkeChwZ19kYXRhX3QgKnBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTc0MzUtXFx0XFx0XFx0XFx0XFx0ICAgZW51bSB6b25lX3R5cGUgcHJldl9oaWdoZXN0X3pvbmVpZHgpXFxubW0vdm1zY2FuLmMtNzQzNi17XFxubW0vdm1zY2FuLmM6NzQzNzpcXHRlbnVtIHpvbmVfdHlwZSBjdXJyX2lkeCA9IFJFQURfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCk7XFxubW0vdm1zY2FuLmMtNzQzOC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0NDEtXFxubW0vdm1zY2FuLmM6NzQ0MjpzdGF0aWMgdm9pZCBrc3dhcGRfdHJ5X3RvX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBhbGxvY19vcmRlciwgaW50IHJlY2xhaW1fb3JkZXIsXFxubW0vdm1zY2FuLmMtNzQ0My1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNzQ1MC1cXG5tbS92bXNjYW4uYzo3NDUxOlxcdHByZXBhcmVfdG9fd2FpdChcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF93YWl0LCBcXHUwMDI2d2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTtcXG5tbS92bXNjYW4uYy03NDUyLVxcbi0tXFxubW0vdm1zY2FuLmMtNzQ1OS1cXHQgKi9cXG5tbS92bXNjYW4uYzo3NDYwOlxcdGlmIChwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ2RhdCwgcmVjbGFpbV9vcmRlciwgaGlnaGVzdF96b25laWR4KSkge1xcbm1tL3Ztc2Nhbi5jLTc0NjEtXFx0XFx0LypcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0NjMtXFx0XFx0ICogaXNvbGF0ZSBwYWdlcyBmcm9tIGFuZCBza2lwcyB0aGVtIGluIHRoZSBmdXR1cmUgc2Nhbm5pbmcuXFxubW0vdm1zY2FuLmM6NzQ2NDpcXHRcXHQgKiBXaGVuIGtzd2FwZCBpcyBnb2luZyB0byBzbGVlcCwgaXQgaXMgcmVhc29uYWJsZSB0byBhc3N1bWVcXG5tbS92bXNjYW4uYy03NDY1LVxcdFxcdCAqIHRoYXQgcGFnZXMgYW5kIGNvbXBhY3Rpb24gbWF5IHN1Y2NlZWQgc28gcmVzZXQgdGhlIGNhY2hlLlxcbi0tXFxubW0vdm1zY2FuLmMtNzQ3Ny1cXHRcXHQvKlxcbm1tL3Ztc2Nhbi5jOjc0Nzg6XFx0XFx0ICogSWYgd29rZW4gcHJlbWF0dXJlbHkgdGhlbiByZXNldCBrc3dhcGRfaGlnaGVzdF96b25laWR4IGFuZFxcbm1tL3Ztc2Nhbi5jLTc0NzktXFx0XFx0ICogb3JkZXIuIFRoZSB2YWx1ZXMgd2lsbCBlaXRoZXIgYmUgZnJvbSBhIHdha2V1cCByZXF1ZXN0IG9yXFxuLS1cXG5tbS92bXNjYW4uYy03NDgyLVxcdFxcdGlmIChyZW1haW5pbmcpIHtcXG5tbS92bXNjYW4uYzo3NDgzOlxcdFxcdFxcdFdSSVRFX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsXFxubW0vdm1zY2FuLmM6NzQ4NDpcXHRcXHRcXHRcXHRcXHRrc3dhcGRfaGlnaGVzdF96b25laWR4KHBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTc0ODUtXFx0XFx0XFx0XFx0XFx0XFx0XFx0aGlnaGVzdF96b25laWR4KSk7XFxubW0vdm1zY2FuLmMtNzQ4Ni1cXG5tbS92bXNjYW4uYzo3NDg3OlxcdFxcdFxcdGlmIChSRUFEX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9vcmRlcikgXFx1MDAzYyByZWNsYWltX29yZGVyKVxcbm1tL3Ztc2Nhbi5jOjc0ODg6XFx0XFx0XFx0XFx0V1JJVEVfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX29yZGVyLCByZWNsYWltX29yZGVyKTtcXG5tbS92bXNjYW4uYy03NDg5LVxcdFxcdH1cXG5tbS92bXNjYW4uYy03NDkwLVxcbm1tL3Ztc2Nhbi5jOjc0OTE6XFx0XFx0ZmluaXNoX3dhaXQoXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfd2FpdCwgXFx1MDAyNndhaXQpO1xcbm1tL3Ztc2Nhbi5jOjc0OTI6XFx0XFx0cHJlcGFyZV90b193YWl0KFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX3dhaXQsIFxcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xcbm1tL3Ztc2Nhbi5jLTc0OTMtXFx0fVxcbi0tXFxubW0vdm1zY2FuLmMtNzQ5OS1cXHRpZiAoIXJlbWFpbmluZyBcXHUwMDI2XFx1MDAyNlxcbm1tL3Ztc2Nhbi5jOjc1MDA6XFx0ICAgIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnZGF0LCByZWNsYWltX29yZGVyLCBoaWdoZXN0X3pvbmVpZHgpKSB7XFxubW0vdm1zY2FuLmM6NzUwMTpcXHRcXHR0cmFjZV9tbV92bXNjYW5fa3N3YXBkX3NsZWVwKHBnZGF0LVxcdTAwM2Vub2RlX2lkKTtcXG5tbS92bXNjYW4uYy03NTAyLVxcbi0tXFxubW0vdm1zY2FuLmMtNzUwNy1cXHRcXHQgKiB3YXRlcm1hcmtzIGJlaW5nIGJyZWFjaGVkIHdoaWxlIHVuZGVyIHByZXNzdXJlLCB3ZSByZWR1Y2UgdGhlXFxubW0vdm1zY2FuLmM6NzUwODpcXHRcXHQgKiBwZXItY3B1IHZtc3RhdCB0aHJlc2hvbGQgd2hpbGUga3N3YXBkIGlzIGF3YWtlIGFuZCByZXN0b3JlXFxubW0vdm1zY2FuLmMtNzUwOS1cXHRcXHQgKiB0aGVtIGJlZm9yZSBnb2luZyBiYWNrIHRvIHNsZWVwLlxcbi0tXFxubW0vdm1zY2FuLmMtNzUyMi1cXHR9XFxubW0vdm1zY2FuLmM6NzUyMzpcXHRmaW5pc2hfd2FpdChcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF93YWl0LCBcXHUwMDI2d2FpdCk7XFxubW0vdm1zY2FuLmMtNzUyNC19XFxuLS1cXG5tbS92bXNjYW4uYy03NTM4LSAqL1xcbm1tL3Ztc2Nhbi5jOjc1Mzk6c3RhdGljIGludCBrc3dhcGQodm9pZCAqcClcXG5tbS92bXNjYW4uYy03NTQwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1NDgtXFx0ICogYW5kIHRoYXQgaWYgd2UgbmVlZCBtb3JlIG1lbW9yeSB3ZSBzaG91bGQgZ2V0IGFjY2VzcyB0byBpdFxcbm1tL3Ztc2Nhbi5jOjc1NDk6XFx0ICogcmVnYXJkbGVzcyAoc2VlIFxcXCJfX2FsbG9jX3BhZ2VzKClcXFwiKS4gXFxcImtzd2FwZFxcXCIgc2hvdWxkXFxubW0vdm1zY2FuLmMtNzU1MC1cXHQgKiBuZXZlciBnZXQgY2F1Z2h0IGluIHRoZSBub3JtYWwgcGFnZSBmcmVlaW5nIGxvZ2ljLlxcbi0tXFxubW0vdm1zY2FuLmMtNzU2MC1cXG5tbS92bXNjYW4uYzo3NTYxOlxcdFdSSVRFX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9vcmRlciwgMCk7XFxubW0vdm1zY2FuLmM6NzU2MjpcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LCBNQVhfTlJfWk9ORVMpO1xcbm1tL3Ztc2Nhbi5jLTc1NjMtXFx0YXRvbWljX3NldChcXHUwMDI2cGdkYXQtXFx1MDAzZW5yX3dyaXRlYmFja190aHJvdHRsZWQsIDApO1xcbi0tXFxubW0vdm1zY2FuLmMtNzU2Ni1cXG5tbS92bXNjYW4uYzo3NTY3OlxcdFxcdGFsbG9jX29yZGVyID0gcmVjbGFpbV9vcmRlciA9IFJFQURfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX29yZGVyKTtcXG5tbS92bXNjYW4uYzo3NTY4OlxcdFxcdGhpZ2hlc3Rfem9uZWlkeCA9IGtzd2FwZF9oaWdoZXN0X3pvbmVpZHgocGdkYXQsXFxubW0vdm1zY2FuLmMtNzU2OS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRoaWdoZXN0X3pvbmVpZHgpO1xcbm1tL3Ztc2Nhbi5jLTc1NzAtXFxubW0vdm1zY2FuLmM6NzU3MTprc3dhcGRfdHJ5X3NsZWVwOlxcbm1tL3Ztc2Nhbi5jOjc1NzI6XFx0XFx0a3N3YXBkX3RyeV90b19zbGVlcChwZ2RhdCwgYWxsb2Nfb3JkZXIsIHJlY2xhaW1fb3JkZXIsXFxubW0vdm1zY2FuLmMtNzU3My1cXHRcXHRcXHRcXHRcXHRoaWdoZXN0X3pvbmVpZHgpO1xcbi0tXFxubW0vdm1zY2FuLmMtNzU3NS1cXHRcXHQvKiBSZWFkIHRoZSBuZXcgb3JkZXIgYW5kIGhpZ2hlc3Rfem9uZWlkeCAqL1xcbm1tL3Ztc2Nhbi5jOjc1NzY6XFx0XFx0YWxsb2Nfb3JkZXIgPSBSRUFEX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9vcmRlcik7XFxubW0vdm1zY2FuLmM6NzU3NzpcXHRcXHRoaWdoZXN0X3pvbmVpZHggPSBrc3dhcGRfaGlnaGVzdF96b25laWR4KHBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTc1NzgtXFx0XFx0XFx0XFx0XFx0XFx0XFx0aGlnaGVzdF96b25laWR4KTtcXG5tbS92bXNjYW4uYzo3NTc5OlxcdFxcdFdSSVRFX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9vcmRlciwgMCk7XFxubW0vdm1zY2FuLmM6NzU4MDpcXHRcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LCBNQVhfTlJfWk9ORVMpO1xcbm1tL3Ztc2Nhbi5jLTc1ODEtXFxuLS1cXG5tbS92bXNjYW4uYy03NTkzLVxcdFxcdCAqIFJlY2xhaW0gYmVnaW5zIGF0IHRoZSByZXF1ZXN0ZWQgb3JkZXIgYnV0IGlmIGEgaGlnaC1vcmRlclxcbm1tL3Ztc2Nhbi5jOjc1OTQ6XFx0XFx0ICogcmVjbGFpbSBmYWlscyB0aGVuIGtzd2FwZCBmYWxscyBiYWNrIHRvIHJlY2xhaW1pbmcgZm9yXFxubW0vdm1zY2FuLmM6NzU5NTpcXHRcXHQgKiBvcmRlci0wLiBJZiB0aGF0IGhhcHBlbnMsIGtzd2FwZCB3aWxsIGNvbnNpZGVyIHNsZWVwaW5nXFxubW0vdm1zY2FuLmMtNzU5Ni1cXHRcXHQgKiBmb3IgdGhlIG9yZGVyIGl0IGZpbmlzaGVkIHJlY2xhaW1pbmcgYXQgKHJlY2xhaW1fb3JkZXIpXFxuLS1cXG5tbS92bXNjYW4uYy03NTk5LVxcdFxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjc2MDA6XFx0XFx0dHJhY2VfbW1fdm1zY2FuX2tzd2FwZF93YWtlKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBoaWdoZXN0X3pvbmVpZHgsXFxubW0vdm1zY2FuLmMtNzYwMS1cXHRcXHRcXHRcXHRcXHRcXHRhbGxvY19vcmRlcik7XFxuLS1cXG5tbS92bXNjYW4uYy03NjA0LVxcdFxcdGlmIChyZWNsYWltX29yZGVyIFxcdTAwM2MgYWxsb2Nfb3JkZXIpXFxubW0vdm1zY2FuLmM6NzYwNTpcXHRcXHRcXHRnb3RvIGtzd2FwZF90cnlfc2xlZXA7XFxubW0vdm1zY2FuLmMtNzYwNi1cXHR9XFxuLS1cXG5tbS92bXNjYW4uYy03NjE0LSAqIEEgem9uZSBpcyBsb3cgb24gZnJlZSBtZW1vcnkgb3IgdG9vIGZyYWdtZW50ZWQgZm9yIGhpZ2gtb3JkZXIgbWVtb3J5LiAgSWZcXG5tbS92bXNjYW4uYzo3NjE1OiAqIGtzd2FwZCBzaG91bGQgcmVjbGFpbSAoZGlyZWN0IHJlY2xhaW0gaXMgZGVmZXJyZWQpLCB3YWtlIGl0IHVwIGZvciB0aGUgem9uZSdzXFxubW0vdm1zY2FuLmM6NzYxNjogKiBwZ2RhdC4gIEl0IHdpbGwgd2FrZSB1cCBrY29tcGFjdGQgYWZ0ZXIgcmVjbGFpbWluZyBtZW1vcnkuICBJZiBrc3dhcGQgcmVjbGFpbVxcbm1tL3Ztc2Nhbi5jLTc2MTctICogaGFzIGZhaWxlZCBvciBpcyBub3QgbmVlZGVkLCBzdGlsbCB3YWtlIHVwIGtjb21wYWN0ZCBpZiBvbmx5IGNvbXBhY3Rpb24gaXNcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2MTktICovXFxubW0vdm1zY2FuLmM6NzYyMDp2b2lkIHdha2V1cF9rc3dhcGQoc3RydWN0IHpvbmUgKnpvbmUsIGdmcF90IGdmcF9mbGFncywgaW50IG9yZGVyLFxcbm1tL3Ztc2Nhbi5jLTc2MjEtXFx0XFx0ICAgZW51bSB6b25lX3R5cGUgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNzYzMi1cXHRwZ2RhdCA9IHpvbmUtXFx1MDAzZXpvbmVfcGdkYXQ7XFxubW0vdm1zY2FuLmM6NzYzMzpcXHRjdXJyX2lkeCA9IFJFQURfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCk7XFxubW0vdm1zY2FuLmMtNzYzNC1cXG5tbS92bXNjYW4uYy03NjM1LVxcdGlmIChjdXJyX2lkeCA9PSBNQVhfTlJfWk9ORVMgfHwgY3Vycl9pZHggXFx1MDAzYyBoaWdoZXN0X3pvbmVpZHgpXFxubW0vdm1zY2FuLmM6NzYzNjpcXHRcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LCBoaWdoZXN0X3pvbmVpZHgpO1xcbm1tL3Ztc2Nhbi5jLTc2MzctXFxubW0vdm1zY2FuLmM6NzYzODpcXHRpZiAoUkVBRF9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfb3JkZXIpIFxcdTAwM2Mgb3JkZXIpXFxubW0vdm1zY2FuLmM6NzYzOTpcXHRcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfb3JkZXIsIG9yZGVyKTtcXG5tbS92bXNjYW4uYy03NjQwLVxcbm1tL3Ztc2Nhbi5jOjc2NDE6XFx0aWYgKCF3YWl0cXVldWVfYWN0aXZlKFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX3dhaXQpKVxcbm1tL3Ztc2Nhbi5jLTc2NDItXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vdm1zY2FuLmMtNzY0NC1cXHQvKiBIb3BlbGVzcyBub2RlLCBsZWF2ZSBpdCB0byBkaXJlY3QgcmVjbGFpbSBpZiBwb3NzaWJsZSAqL1xcbm1tL3Ztc2Nhbi5jOjc2NDU6XFx0aWYgKGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnZGF0KSB8fFxcbm1tL3Ztc2Nhbi5jLTc2NDYtXFx0ICAgIChwZ2RhdF9iYWxhbmNlZChwZ2RhdCwgb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2NTktXFxubW0vdm1zY2FuLmM6NzY2MDpcXHR0cmFjZV9tbV92bXNjYW5fd2FrZXVwX2tzd2FwZChwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgaGlnaGVzdF96b25laWR4LCBvcmRlcixcXG5tbS92bXNjYW4uYy03NjYxLVxcdFxcdFxcdFxcdCAgICAgIGdmcF9mbGFncyk7XFxubW0vdm1zY2FuLmM6NzY2MjpcXHR3YWtlX3VwX2ludGVycnVwdGlibGUoXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfd2FpdCk7XFxubW0vdm1zY2FuLmMtNzY2My19XFxubW0vdm1zY2FuLmMtNzY2NC1cXG5tbS92bXNjYW4uYzo3NjY1OnZvaWQga3N3YXBkX2NsZWFyX2hvcGVsZXNzKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0ga3N3YXBkX2NsZWFyX2hvcGVsZXNzX3JlYXNvbiByZWFzb24pXFxubW0vdm1zY2FuLmMtNzY2Ni17XFxubW0vdm1zY2FuLmMtNzY2Ny1cXHQvKiBPbmx5IHRyYWNlIGFjdHVhbCByZXNldHMsIG5vdCByZWR1bmRhbnQgemVyby10by16ZXJvICovXFxubW0vdm1zY2FuLmM6NzY2ODpcXHRpZiAoYXRvbWljX3hjaGcoXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfZmFpbHVyZXMsIDApKVxcbm1tL3Ztc2Nhbi5jOjc2Njk6XFx0XFx0dHJhY2VfbW1fdm1zY2FuX2tzd2FwZF9jbGVhcl9ob3BlbGVzcyhwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgcmVhc29uKTtcXG5tbS92bXNjYW4uYy03NjcwLX1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2NzItLypcXG5tbS92bXNjYW4uYzo3NjczOiAqIFJlc2V0IGtzd2FwZF9mYWlsdXJlcyBvbmx5IHdoZW4gdGhlIG5vZGUgaXMgYmFsYW5jZWQuIFdpdGhvdXQgdGhpc1xcbm1tL3Ztc2Nhbi5jLTc2NzQtICogY2hlY2ssIHN1Y2Nlc3NmdWwgZGlyZWN0IHJlY2xhaW0gKGUuZy4sIGZyb20gY2dyb3VwIG1lbW9yeS5oaWdoXFxubW0vdm1zY2FuLmM6NzY3NTogKiB0aHJvdHRsaW5nKSBjYW4ga2VlcCByZXNldHRpbmcga3N3YXBkX2ZhaWx1cmVzIGV2ZW4gd2hlbiB0aGUgbm9kZVxcbm1tL3Ztc2Nhbi5jOjc2NzY6ICogY2Fubm90IGJlIGJhbGFuY2VkLCBjYXVzaW5nIGtzd2FwZCB0byBydW4gZW5kbGVzc2x5Llxcbm1tL3Ztc2Nhbi5jLTc2NzctICovXFxubW0vdm1zY2FuLmM6NzY3ODp2b2lkIGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3Moc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03Njc5LVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03NjgxLVxcdGlmIChwZ2RhdF9iYWxhbmNlZChwZ2RhdCwgb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkpXFxubW0vdm1zY2FuLmM6NzY4MjpcXHRcXHRrc3dhcGRfY2xlYXJfaG9wZWxlc3MocGdkYXQsIGN1cnJlbnRfaXNfa3N3YXBkKCkgP1xcbm1tL3Ztc2Nhbi5jLTc2ODMtXFx0XFx0XFx0S1NXQVBEX0NMRUFSX0hPUEVMRVNTX0tTV0FQRCA6IEtTV0FQRF9DTEVBUl9IT1BFTEVTU19ESVJFQ1QpO1xcbi0tXFxubW0vdm1zY2FuLmMtNzY4NS1cXG5tbS92bXNjYW4uYzo3Njg2OmJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcXG5tbS92bXNjYW4uYy03Njg3LXtcXG5tbS92bXNjYW4uYzo3Njg4OlxcdHJldHVybiBhdG9taWNfcmVhZChcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF9mYWlsdXJlcykgXFx1MDAzZT0gTUFYX1JFQ0xBSU1fUkVUUklFUztcXG5tbS92bXNjYW4uYy03Njg5LX1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTc3MDA9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXFxuLS1cXG5tbS92bXNjYW4uYy03NzMwLS8qXFxubW0vdm1zY2FuLmM6NzczMTogKiBUaGlzIGtzd2FwZCBzdGFydCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSBpbml0IGFuZCBub2RlLWhvdC1hZGQuXFxubW0vdm1zY2FuLmMtNzczMi0gKi9cXG5tbS92bXNjYW4uYzo3NzMzOnZvaWQgX19tZW1pbml0IGtzd2FwZF9ydW4oaW50IG5pZClcXG5tbS92bXNjYW4uYy03NzM0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc3MzYtXFxubW0vdm1zY2FuLmM6NzczNzpcXHRwZ2RhdF9rc3dhcGRfbG9jayhwZ2RhdCk7XFxubW0vdm1zY2FuLmM6NzczODpcXHRpZiAoIXBnZGF0LVxcdTAwM2Vrc3dhcGQpIHtcXG5tbS92bXNjYW4uYzo3NzM5OlxcdFxcdHBnZGF0LVxcdTAwM2Vrc3dhcGQgPSBrdGhyZWFkX2NyZWF0ZV9vbl9ub2RlKGtzd2FwZCwgcGdkYXQsIG5pZCwgXFxcImtzd2FwZCVkXFxcIiwgbmlkKTtcXG5tbS92bXNjYW4uYzo3NzQwOlxcdFxcdGlmIChJU19FUlIocGdkYXQtXFx1MDAzZWtzd2FwZCkpIHtcXG5tbS92bXNjYW4uYy03NzQxLVxcdFxcdFxcdC8qIGZhaWx1cmUgYXQgYm9vdCBpcyBmYXRhbCAqL1xcbm1tL3Ztc2Nhbi5jOjc3NDI6XFx0XFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gc3RhcnQga3N3YXBkIG9uIG5vZGUgJWQsIHJldD0lcGVcXFxcblxcXCIsXFxubW0vdm1zY2FuLmM6Nzc0MzpcXHRcXHRcXHRcXHQgICBuaWQsIHBnZGF0LVxcdTAwM2Vrc3dhcGQpO1xcbm1tL3Ztc2Nhbi5jLTc3NDQtXFx0XFx0XFx0QlVHX09OKHN5c3RlbV9zdGF0ZSBcXHUwMDNjIFNZU1RFTV9SVU5OSU5HKTtcXG5tbS92bXNjYW4uYzo3NzQ1OlxcdFxcdFxcdHBnZGF0LVxcdTAwM2Vrc3dhcGQgPSBOVUxMO1xcbm1tL3Ztc2Nhbi5jLTc3NDYtXFx0XFx0fSBlbHNlIHtcXG5tbS92bXNjYW4uYzo3NzQ3OlxcdFxcdFxcdHdha2VfdXBfcHJvY2VzcyhwZ2RhdC1cXHUwMDNla3N3YXBkKTtcXG5tbS92bXNjYW4uYy03NzQ4LVxcdFxcdH1cXG5tbS92bXNjYW4uYy03NzQ5LVxcdH1cXG5tbS92bXNjYW4uYzo3NzUwOlxcdHBnZGF0X2tzd2FwZF91bmxvY2socGdkYXQpO1xcbm1tL3Ztc2Nhbi5jLTc3NTEtfVxcbi0tXFxubW0vdm1zY2FuLmMtNzc1Ni0gKi9cXG5tbS92bXNjYW4uYzo3NzU3OnZvaWQgX19tZW1pbml0IGtzd2FwZF9zdG9wKGludCBuaWQpXFxubW0vdm1zY2FuLmMtNzc1OC17XFxubW0vdm1zY2FuLmMtNzc1OS1cXHRwZ19kYXRhX3QgKnBnZGF0ID0gTk9ERV9EQVRBKG5pZCk7XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjUyOjM0Ljc3ODExMTIyOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjI5MzU3NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgUmVjbGFpbSBQYXRocyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gdHJpZ2dlciBpbnRlcmVzdGluZyBtZW1vcnkgcmVjbGFpbSBwYXRocyB1c2luZyBzeXprYWxsZXIuIEkga25vdyBga3N3YXBkYCBpcyBhIHRocmVhZCBmdW5jdGlvbiwgc28gSSBjYW4ndCBjYWxsIGl0IGRpcmVjdGx5LiBCdXQgYHdha2V1cF9rc3dhcGRgIGlzIGNhbGxhYmxlLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gY29udHJvbCB0aGUgYGtzd2FwZGAgdGhyZWFkLlxuXG5Ob3csIHRoZSBtYWluIGZ1bmN0aW9ucyBJIHNob3VsZCBmb2N1cyBvbiBhcmUgYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQgYG5vZGVfcmVjbGFpbWAsIHNvIEkgc2hvdWxkIGluc3BlY3QgdGhvc2UgZnVuY3Rpb25zIGluIGBtbS92bXNjYW4uY2AgbW9yZSBjbG9zZWx5LiBXYWl0LCBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIGFjdHVhbGx5IGNhbGxlZCBieSBgX19hbGxvY19wYWdlc19zbG93cGF0aGAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AuLi4gVGhhdCdzIGEga2V5IGRldGFpbCEgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGlzIGxpa2VseSBjYWxsZWQgYnkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbWVtY2cgbGltaXRzLiBJIHRoaW5rIGBtZW1vcnlfaGlnaF93cml0ZWAgb3Igc2ltaWxhciBpbiBgbW0vbWVtY29udHJvbC5jYCBhcmUgcHJvYmFibHkgaW52b2x2ZWQuIGBub2RlX3JlY2xhaW1gIGlzIGFsc28gY3JpdGljYWwsIGFuZCBpdCdzIGNhbGxlZCBieSBgZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdGAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AuXG5cblNvIHRoZSBtb3N0IGVmZmVjdGl2ZSBmdXp6aW5nIHN0cmF0ZWd5IGlzIGNsZWFyOiBJIG5lZWQgdG8gdGFyZ2V0IG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBtZW1jZyBsaW1pdHMgdG8gaGl0IHRoZXNlIHJlY2xhaW0gcGF0aHMuIFRoZSBwYXRjaCBJJ20gZXhhbWluaW5nIG1vZGlmaWVzIGB0aHJvdHRsZV9pc29sYXRlZGAsIGFuZCB0aGF0J3MgY2FsbGVkIHdoZW4gdG9vIG1hbnkgcGFnZXMgYXJlIGJlaW5nIGlzb2xhdGVkLCBhbmQgdGhpcyBzaXR1YXRpb24gaGFwcGVucyB3aGVuIG11bHRpcGxlIHRocmVhZHMgYXJlIGNvbmN1cnJlbnRseSByZWNsYWltaW5nIG1lbW9yeS4gVGh1cywgZnV6emluZyB3aXRoIG1hbnkgdGhyZWFkcyBhbGxvY2F0aW5nIG1lbW9yeSBvciBoaXR0aW5nIG1lbWNnIGxpbWl0cyBpcyB0aGUgd2F5IHRvIGdvIGhlcmUuXG5cbk15IGZvY3VzIHNob3VsZCBiZSBvbiB0aGVzZSBrZXkgc3ltYm9sczogYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgbm9kZV9yZWNsYWltYCwgYW5kIGBzaHJpbmtfYWxsX21lbW9yeWAuIEl0J3Mgd29ydGggZG91YmxlLWNoZWNraW5nIHRoYXQgYHRyeV90b19mcmVlX3BhZ2VzYCBpcyBleHBvcnRlZCBvciByZWFjaGFibGUuIEl0J3MgY2FsbGVkIGJ5IGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCwgd2hpY2ggaXMgcmlnaHQgYXQgdGhlIGNvcmUgb2YgcGFnZSBhbGxvY2F0aW9uLiBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgaXMgZGVmaW5pdGVseSB0aWVkIHRvIG1lbWNnIHJlY2xhaW0uIFRpbWUgdG8gZ28gYmFjayB0byBgbW0vdm1zY2FuLmNgIGFuZCB0YWtlIGFub3RoZXIgbG9vayBhdCBgdGhyb3R0bGVfaXNvbGF0ZWRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzE1NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1Mjo0Mi40MDc0NzE3MDRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjc1OTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRocm90dGxlX2lzb2xhdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTE4MjI9c3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmaWxlLFxcbi0tXFxubW0vdm1zY2FuLmMtMTg1My1cXHRpZiAoIXRvb19tYW55KVxcbm1tL3Ztc2Nhbi5jOjE4NTQ6XFx0XFx0d2FrZV90aHJvdHRsZV9pc29sYXRlZChwZ2RhdCk7XFxubW0vdm1zY2FuLmMtMTg1NS1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTE4NjUtICovXFxubW0vdm1zY2FuLmM6MTg2NjpzdGF0aWMgYm9vbCB0aHJvdHRsZV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZpbGUsXFxubW0vdm1zY2FuLmMtMTg2Ny1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgYm9vbCAqZmF0YWwpXFxuLS1cXG5tbS92bXNjYW4uYz0yMDE0PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIwMjctXFxubW0vdm1zY2FuLmM6MjAyODpcXHRpZiAoIXRocm90dGxlX2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYywgXFx1MDAyNmZhdGFsKSkge1xcbm1tL3Ztc2Nhbi5jLTIwMjktXFx0XFx0LyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqL1xcbi0tXFxubW0vdm1zY2FuLmM9NDg5Nj1zdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5MTktXFx0dHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcXG5tbS92bXNjYW4uYzo0OTIwOlxcdGlmICghdGhyb3R0bGVfaXNvbGF0ZWQocGdkYXQsIHR5cGUsIHNjLCBcXHUwMDI2ZmF0YWwpKSB7XFxubW0vdm1zY2FuLmMtNDkyMS1cXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1Mjo0Mi40NTA3NTM1OTJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQyMjUyNDQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBgd2FrZV90aHJvdHRsZV9pc29sYXRlZGAgaXMgc2hvd2luZyB1cCBpbiB0aGUgb3V0cHV0LiBUaGF0IG1lYW5zIHRoaXMgcGF0Y2ggaXNuJ3QgKmludHJvZHVjaW5nKiBpdDsgaXQncyBlaXRoZXIgcHJlLWV4aXN0aW5nIG9yIGJlaW5nIGFkZGVkIGluIGEgZGlmZmVyZW50IHBhcnQgb2YgdGhlIHNlcmllcy4gR29vZCwgdGhhdCBjbGFyaWZpZXMgdGhpbmdzLlxuXG5MZXQncyBmb2N1cyBvbiB0aGUgYWN0dWFsIGNoYW5nZXMgaGVyZS4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSByZWZhY3RvcmluZyB0aGUgdGhyb3R0bGluZyBsb2dpYyByZWxhdGVkIHRvIGlzb2xhdGVkIGZvbGlvcy4gVGhleSd2ZSBtb3ZlZCB0aGUgbG9naWMgaW50byBhIG5ldyBmdW5jdGlvbiwgYHRocm90dGxlX2lzb2xhdGVkYCwgYW5kIGNydWNpYWxseSwgdGhleSdyZSBub3cgYXBwbHlpbmcgaXQgdG8gTUdMUlUncyBgZXZpY3RfZm9saW9zYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIG5vdyB0aGUgTUdMUlUgY29kZSBwYXRoIHdpbGwgYWxzbyB0aHJvdHRsZSB3aGVuIHRoZXJlIGFyZSB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MuIEl0IGFsc28gaW5jbHVkZXMgZmF0YWwgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyB0aGUgdGhyb3R0bGluZyBwcm9jZXNzLiBUaGlzIGlzIGEgbm90aWNlYWJsZSBpbXBhY3Qgb24gaG93IG1lbW9yeSByZWNsYWltIGJlaGF2ZXMuXG5cblRoaXMgYm9pbHMgZG93biB0bzpcblxuKiAgIFJlZmFjdG9yaW5nOiBTZXBhcmF0aW5nIG91dCB0aGUgdGhyb3R0bGluZyBsb2dpYy5cbiogICBGdW5jdGlvbmFsIENoYW5nZTogQXBwbHlpbmcgdGhpcyB0aHJvdHRsaW5nIHRvIE1HTFJVLCB3aGljaCBpcyBzaWduaWZpY2FudCwgcGx1cyBhIGNoYW5nZSBpbiBob3cgZmF0YWwgc2lnbmFscyBhcmUgaGFuZGxlZC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMsIHNwZWNpZmljYWxseSBgaW5pdC9LY29uZmlnYCBvciBgbW0vS2NvbmZpZ2AsIHRvIHZlcmlmeSB0aGF0IGBNRU1DR2AsIGBMUlVfR0VOYCwgYW5kIGBMUlVfR0VOX0VOQUJMRURgIGFyZSBzZXQgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQ4MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1Mjo0OC44NzMyODE3NjJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTU0NDU3NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA2Nz1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDc2LVxcbmluaXQvS2NvbmZpZzoxMDc3OmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDc4LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwODUtXFxuaW5pdC9LY29uZmlnOjEwODY6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA4Ny1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTA5Mi1cXG5pbml0L0tjb25maWc6MTA5Mzpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTA5NC1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTA5OS1cXG5pbml0L0tjb25maWc6MTEwMDpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTEwMS1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1Mjo1MC40Njg3MzQ3NzdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg3NTk1MDMyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb25zLCBzcGVjaWZpY2FsbHkgYE1FTUNHYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBhIGZldyBjcnVjaWFsIHN5bWJvbHM6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYG5vZGVfcmVjbGFpbWAsIGBzaHJpbmtfYWxsX21lbW9yeWAsIGFuZCBgd2FrZXVwX2tzd2FwZGAuIFRoZXNlIGFyZSB0aGUga2V5IHBsYXllcnMgaW4gdGhpcyBtZW1vcnkgZ2FtZS5cblxuR2l2ZW4gdGhhdCBJJ20gd29ya2luZyB3aXRoIGBzaHJpbmtfYWxsX21lbW9yeWAsIG15IGZpcnN0IG1vdmUgaXMgdG8gZGV0ZXJtaW5lIGlmIGl0cyBiZWhhdmlvciBpcyBjb250aW5nZW50IG9uIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHNldHRpbmdzLiBJdCdzIHZpdGFsIHRvIGtub3cgaWYgaXRzIGV4ZWN1dGlvbiBhbmQgb3V0Y29tZXMgYXJlIGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoZSBzZXR1cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIHVuaXZlcnNhbGx5IGFjdGl2ZSBvciBpZiBpdCdzIHNlbGVjdGl2ZWx5IGVuYWJsZWQgb3IgZGlzYWJsZWQgYmFzZWQgb24gdGhlIGVudmlyb25tZW50LiBVbmRlcnN0YW5kaW5nIHRoaXMgZGVwZW5kZW5jeSB3aWxsIGJlIGtleSB0byBkZWNpcGhlcmluZyBpdHMgb3ZlcmFsbCByb2xlIHdpdGhpbiB0aGlzIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NDY0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTI6NTUuMzQ0NjkwMjc5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjMzMDY1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfYWxsX21lbW9yeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz03Njg2PWJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2OTktICovXFxubW0vdm1zY2FuLmM6NzcwMDp1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcXG5tbS92bXNjYW4uYy03NzAxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTI6NTUuMzkxMDI2NjY4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTc2Nzc4NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgSGliZXJuYXRpb24tUmVsYXRlZCBDb2RlIGluIHZtc2Nhbi5jKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBtbS92bXNjYW4uY2AuIFNwZWNpZmljYWxseSwgSSdtIGludGVyZXN0ZWQgaW4gYSBjZXJ0YWluIHNlY3Rpb24sIHNvIEknbGwgemVybyBpbiBvbiB0aGUgdmljaW5pdHkgb2YgbGluZSA3NzAwLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBzZWUgaWYgdGhpcyBwYXJ0aWN1bGFyIHBpZWNlIG9mIGNvZGUgaXMgZ3VhcmRlZCBieSBhIGAjaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBJJ20gdHJ5aW5nIHRvIGRldGVybWluZSBpZiB0aGUgbG9naWMgSSdtIGludmVzdGlnYXRpbmcgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB0aGUgc3lzdGVtJ3MgaGliZXJuYXRpb24gY29uZmlndXJhdGlvbi4gVGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgcHJvYmxlbSBJJ20gdHJ5aW5nIHRvIHNvbHZlLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB3aWxsIGhlbHAgcGlucG9pbnQgaG93IHRoZSBzeXN0ZW0gYmVoYXZlcyB1bmRlciBkaWZmZXJlbnQgY2lyY3Vtc3RhbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU4NjQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1Mjo1OC43MDg3MDY4NTVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAxNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc2OTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc2OTA6XFx0XFxuNzY5MTpcXHQjaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OXFxuNzY5MjpcXHQvKlxcbjc2OTM6XFx0ICogVHJ5IHRvIGZyZWUgYG5yX3RvX3JlY2xhaW0nIG9mIG1lbW9yeSwgc3lzdGVtLXdpZGUsIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZlxcbjc2OTQ6XFx0ICogZnJlZWQgcGFnZXMuXFxuNzY5NTpcXHQgKlxcbjc2OTY6XFx0ICogUmF0aGVyIHRoYW4gdHJ5aW5nIHRvIGFnZSBMUlVzIHRoZSBhaW0gaXMgdG8gcHJlc2VydmUgdGhlIG92ZXJhbGxcXG43Njk3OlxcdCAqIExSVSBvcmRlciBieSByZWNsYWltaW5nIHByZWZlcmVudGlhbGx5XFxuNzY5ODpcXHQgKiBpbmFjdGl2ZSBcXHUwMDNlIGFjdGl2ZSBcXHUwMDNlIGFjdGl2ZSByZWZlcmVuY2VkIFxcdTAwM2UgYWN0aXZlIG1hcHBlZFxcbjc2OTk6XFx0ICovXFxuNzcwMDpcXHR1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcXG43NzAxOlxcdHtcXG43NzAyOlxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XFxuNzcwMzpcXHRcXHRcXHQubnJfdG9fcmVjbGFpbSA9IG5yX3RvX3JlY2xhaW0sXFxuNzcwNDpcXHRcXHRcXHQuZ2ZwX21hc2sgPSBHRlBfSElHSFVTRVJfTU9WQUJMRSxcXG43NzA1OlxcdFxcdFxcdC5yZWNsYWltX2lkeCA9IE1BWF9OUl9aT05FUyAtIDEsXFxuNzcwNjpcXHRcXHRcXHQucHJpb3JpdHkgPSBERUZfUFJJT1JJVFksXFxuNzcwNzpcXHRcXHRcXHQubWF5X3dyaXRlcGFnZSA9IDEsXFxuNzcwODpcXHRcXHRcXHQubWF5X3VubWFwID0gMSxcXG43NzA5OlxcdFxcdFxcdC5tYXlfc3dhcCA9IDEsXFxuNzcxMDpcXHRcXHRcXHQuaGliZXJuYXRpb25fbW9kZSA9IDEsXFxuNzcxMTpcXHRcXHR9O1xcbjc3MTI6XFx0XFx0c3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCA9IG5vZGVfem9uZWxpc3QobnVtYV9ub2RlX2lkKCksIHNjLmdmcF9tYXNrKTtcXG43NzEzOlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkO1xcbjc3MTQ6XFx0XFx0dW5zaWduZWQgaW50IG5vcmVjbGFpbV9mbGFnO1xcbjc3MTU6XFx0XFxuNzcxNjpcXHRcXHRmc19yZWNsYWltX2FjcXVpcmUoc2MuZ2ZwX21hc2spO1xcbjc3MTc6XFx0XFx0bm9yZWNsYWltX2ZsYWcgPSBtZW1hbGxvY19ub3JlY2xhaW1fc2F2ZSgpO1xcbjc3MTg6XFx0XFx0c2V0X3Rhc2tfcmVjbGFpbV9zdGF0ZShjdXJyZW50LCBcXHUwMDI2c2MucmVjbGFpbV9zdGF0ZSk7XFxuNzcxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTI6NTguNzA5NTEzODU0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNDcwMjc3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXBwcm9hY2ggdG8gSGliZXJuYXRpb24gTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgd2UncmUgaGFuZGxpbmcgbWVtb3J5IHJlY2xhaW0gZHVyaW5nIGhpYmVybmF0aW9uLCBhbmQgaXQncyBhbGwgdHVja2VkIGF3YXkgdW5kZXIgYENPTkZJR19ISUJFUk5BVElPTmAuIFRoYXQncyB0aGUga2V5LiBOb3csIHRoZSBxdWVzdGlvbiBpcywgaG93IGRvIHdlIGJlc3QgaGFuZGxlIHRoZSBtZW1vcnkgc2hyaW5raW5nIGFzcGVjdD8gSSBzZWUgdHdvIHByaW1hcnkgcGF0aHMgZm9yd2FyZC5cblxuT3B0aW9uIG9uZTogV2UgY291bGQgZXhwbGljaXRseSBhZGQgYEhJQkVSTkFUSU9OYCB0byBgRW5hYmxlQ29uZmlnc2AsIGJ1dCBJJ20gbGVhbmluZyB0b3dhcmQgYSBzaW1wbGVyIGFwcHJvYWNoLiBJIHRoaW5rIHdlIGNhbiBwcm9iYWJseSBqdXN0IG9taXQgdGhlIGBzaHJpbmtfYWxsX21lbW9yeWAgY2FsbCBhbHRvZ2V0aGVyLiBUaGlzIHdvdWxkIG1lYW4gcmVseWluZyBwcmltYXJpbHkgb24gdGhlIGJ1aWx0LWluIG1lY2hhbmlzbXMsIG5hbWVseSBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGFuZCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AuIFRob3NlIHNlZW0gdG8gYmUgdGhlIHR5cGljYWwsIG1vc3Qtb2Z0ZW4tdXNlZCBwYXRocyBpbiBtb3N0IHN5c3RlbXMuIFRoYXQgd291bGQgcHJvdmlkZSBnb29kIHN1cHBvcnQgZm9yIHRoZSBnZW5lcmFsIGNhc2VzLlxuXG5XaGlsZSBJJ20gaGVyZSwgSSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgYG5vZGVfcmVjbGFpbWAgaXMgYmVoYXZpbmcgY29ycmVjdGx5IGluIHRoaXMgY29udGV4dCwgdG9vLiBJdOKAmXMgb2J2aW91c2x5IGRlcGVuZGVudCBvbiBgQ09ORklHX05VTUFgLCBzbyBJ4oCZbGwgbWFrZSBzdXJlIHRvIGRvdWJsZS1jaGVjayB0aGF0IGludGVyYWN0aW9uIGFzIHdlbGwuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjU3NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjUzOjA0Ljc1NjU0NTY4NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2MDc1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibm9kZV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTYyODY9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNjI4Ny17XFxubW0vdm1zY2FuLmM6NjI4ODpcXHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZCwgbnJfc2Nhbm5lZCwgbnJfbm9kZV9yZWNsYWltZWQ7XFxubW0vdm1zY2FuLmMtNjI4OS1cXHRzdHJ1Y3QgbHJ1dmVjICp0YXJnZXRfbHJ1dmVjO1xcbi0tXFxubW0vdm1zY2FuLmMtNjMxNC1cXG5tbS92bXNjYW4uYzo2MzE1OlxcdG5yX25vZGVfcmVjbGFpbWVkID0gc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCAtIG5yX3JlY2xhaW1lZDtcXG5tbS92bXNjYW4uYy02MzE2LVxcbi0tXFxubW0vdm1zY2FuLmMtNjMxOS1cXHRcXHR2bXByZXNzdXJlKHNjLVxcdTAwM2VnZnBfbWFzaywgc2MtXFx1MDAzZW9yZGVyLCBzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsIHRydWUsXFxubW0vdm1zY2FuLmM6NjMyMDpcXHRcXHRcXHQgICBzYy1cXHUwMDNlbnJfc2Nhbm5lZCAtIG5yX3NjYW5uZWQsIG5yX25vZGVfcmVjbGFpbWVkKTtcXG5tbS92bXNjYW4uYy02MzIxLVxcbm1tL3Ztc2Nhbi5jOjYzMjI6XFx0aWYgKG5yX25vZGVfcmVjbGFpbWVkKVxcbm1tL3Ztc2Nhbi5jLTYzMjMtXFx0XFx0cmVjbGFpbWFibGUgPSB0cnVlO1xcbi0tXFxubW0vdm1zY2FuLmMtNjM4My1cXG5tbS92bXNjYW4uYzo2Mzg0OlxcdGlmIChzaG91bGRfY29udGludWVfcmVjbGFpbShwZ2RhdCwgbnJfbm9kZV9yZWNsYWltZWQsIHNjKSlcXG5tbS92bXNjYW4uYy02Mzg1LVxcdFxcdGdvdG8gYWdhaW47XFxuLS1cXG5tbS92bXNjYW4uYz03NzcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHZtc2Nhbl9zeXNjdGxfdGFibGVbXSA9IHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc3ODMtXFx0XFx0LnByb2NuYW1lXFx0PSBcXFwiem9uZV9yZWNsYWltX21vZGVcXFwiLFxcbm1tL3Ztc2Nhbi5jOjc3ODQ6XFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZub2RlX3JlY2xhaW1fbW9kZSxcXG5tbS92bXNjYW4uYzo3Nzg1OlxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihub2RlX3JlY2xhaW1fbW9kZSksXFxubW0vdm1zY2FuLmMtNzc4Ni1cXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc4MDM9bW9kdWxlX2luaXQoa3N3YXBkX2luaXQpXFxuLS1cXG5tbS92bXNjYW4uYy03ODA4LSAqXFxubW0vdm1zY2FuLmM6NzgwOTogKiBJZiBub24temVybyBjYWxsIG5vZGVfcmVjbGFpbSB3aGVuIHRoZSBudW1iZXIgb2YgZnJlZSBwYWdlcyBmYWxscyBiZWxvd1xcbm1tL3Ztc2Nhbi5jLTc4MTAtICogdGhlIHdhdGVybWFya3MuXFxubW0vdm1zY2FuLmMtNzgxMS0gKi9cXG5tbS92bXNjYW4uYzo3ODEyOmludCBub2RlX3JlY2xhaW1fbW9kZSBfX3JlYWRfbW9zdGx5O1xcbm1tL3Ztc2Nhbi5jLTc4MTMtXFxuLS1cXG5tbS92bXNjYW4uYy03ODIxLS8qXFxubW0vdm1zY2FuLmM6NzgyMjogKiBQZXJjZW50YWdlIG9mIHBhZ2VzIGluIGEgem9uZSB0aGF0IG11c3QgYmUgdW5tYXBwZWQgZm9yIG5vZGVfcmVjbGFpbSB0b1xcbm1tL3Ztc2Nhbi5jLTc4MjMtICogb2NjdXIuXFxuLS1cXG5tbS92bXNjYW4uYz03ODQ4PXN0YXRpYyB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy03ODU4LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjc4NTk6XFx0aWYgKG5vZGVfcmVjbGFpbV9tb2RlIFxcdTAwMjYgUkVDTEFJTV9VTk1BUClcXG5tbS92bXNjYW4uYy03ODYwLVxcdFxcdG5yX3BhZ2VjYWNoZV9yZWNsYWltYWJsZSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfRklMRV9QQUdFUyk7XFxuLS1cXG5tbS92bXNjYW4uYy03ODc5LSAqL1xcbm1tL3Ztc2Nhbi5jOjc4ODA6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03ODgxLVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmMtNzg4Ny1cXG5tbS92bXNjYW4uYzo3ODg4OlxcdHRyYWNlX21tX3Ztc2Nhbl9ub2RlX3JlY2xhaW1fYmVnaW4ocGdkYXQtXFx1MDAzZW5vZGVfaWQsIHNjLVxcdTAwM2VvcmRlcixcXG5tbS92bXNjYW4uYy03ODg5LVxcdFxcdFxcdFxcdFxcdCAgIHNjLVxcdTAwM2VnZnBfbWFzayk7XFxuLS1cXG5tbS92bXNjYW4uYy03OTE3LVxcbm1tL3Ztc2Nhbi5jOjc5MTg6XFx0dHJhY2VfbW1fdm1zY2FuX25vZGVfcmVjbGFpbV9lbmQoc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCwgTlVMTCk7XFxubW0vdm1zY2FuLmMtNzkxOS1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc5MjItXFxubW0vdm1zY2FuLmM6NzkyMzp1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxcbm1tL3Ztc2Nhbi5jLTc5MjQte1xcbi0tXFxubW0vdm1zY2FuLmMtNzkzMi1cXHRcXHQucHJpb3JpdHkgPSBOT0RFX1JFQ0xBSU1fUFJJT1JJVFksXFxubW0vdm1zY2FuLmM6NzkzMzpcXHRcXHQubWF5X3dyaXRlcGFnZSA9ICEhKG5vZGVfcmVjbGFpbV9tb2RlIFxcdTAwMjYgUkVDTEFJTV9XUklURSksXFxubW0vdm1zY2FuLmM6NzkzNDpcXHRcXHQubWF5X3VubWFwID0gISEobm9kZV9yZWNsYWltX21vZGUgXFx1MDAyNiBSRUNMQUlNX1VOTUFQKSxcXG5tbS92bXNjYW4uYy03OTM1LVxcdFxcdC5tYXlfc3dhcCA9IDEsXFxuLS1cXG5tbS92bXNjYW4uYy03OTcxLVxcbm1tL3Ztc2Nhbi5jOjc5NzI6XFx0cmV0ID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIG5yX3BhZ2VzLCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTc5NzMtXFx0Y2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXFx1MDAyNnBnZGF0LVxcdTAwM2VmbGFncyk7XFxuLS1cXG5tbS92bXNjYW4uYy03OTg0LVxcbm1tL3Ztc2Nhbi5jOjc5ODU6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03OTg2LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmM9ODAwNT1pbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuLS1cXG5tbS92bXNjYW4uYy04MDk3LVxcbm1tL3Ztc2Nhbi5jOjgwOTg6XFx0XFx0XFx0cmVjbGFpbWVkID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGJhdGNoX3NpemUsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtODA5OS1cXHRcXHRcXHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcXHUwMDI2cGdkYXQtXFx1MDAzZWZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTM6MDQuODAzMTYwMTIzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTU0MzExODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBGb2N1czogTlVNQSBhbmQgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBgbm9kZV9yZWNsYWltYCByZWxpZXMgb24gYENPTkZJR19OVU1BYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZSBpbiB0aGUgY29udGV4dCBvZiBOb24tVW5pZm9ybSBNZW1vcnkgQWNjZXNzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBOVU1BYCBpcyBwcm9wZXJseSBlbmFibGVkLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBhZGQgYE5VTUFgIHRvIG15IGBFbmFibGVDb25maWdzYCBsaXN0LiBUaGF0IGxpc3QgaXMgZ3Jvd2luZywgaXQncyBub3c6XG5cbiogICBgTFJVX0dFTmBcbiogICBgTFJVX0dFTl9FTkFCTEVEYFxuKiAgIGBNRU1DR2BcbiogICBgTlVNQWBcblxuTm93LCBJIG5lZWQgdG8gcmVhbGx5IGRpZyBpbnRvIHdoYXQncyBoYXBwZW5pbmcuIFRoZSBrZXkgc3ltYm9scyBJJ20gZm9jdXNpbmcgb24gYXJlOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBub2RlX3JlY2xhaW1gLCBhbmQgYHdha2V1cF9rc3dhcGRgLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIsIGVzcGVjaWFsbHkgY29uY2VybmluZyBOVU1BIGFyY2hpdGVjdHVyZXMuIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gY2hlY2sgYW5kIGNvbmZpcm0gaWYgYHdha2V1cF9rc3dhcGRgIGlzIGV4cG9ydGVkLCBhcyB0aGF0J3MgYSBrZXkgZnVuY3Rpb24gaW4gdGhlIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDYzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjUzOjA4LjY1ODU5NDIyNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNzM3NDAwOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qd2FrZXVwX2tzd2FwZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjUzOjEwLjc5NTk3NTUyNFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mjg2NjczMDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQ6IFVucmF2ZWxpbmcgdGhlICdOb3QtU3RhdGljLCBCdXQgTm90LUV4cG9ydGVkJyBNeXN0ZXJ5KipcblxuUmlnaHQsIHNvIHRoaXMgdGhpbmcgSSdtIGxvb2tpbmcgYXQgaXNuJ3QgKmV4cG9ydGVkKiDigJMgdGhhdCdzIHRoZSBmaXJzdCBjbHVlLiBCdXQgaXQncyBhbHNvICpub3QqIHN0YXRpYywgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBoYXMgdG8gYmUgY2FsbGVkIGZyb20gKnNvbWV3aGVyZSogd2l0aGluIHRoZSBrZXJuZWwsIGFuZCB0aGUgaGludCBwb2ludHMgZGlyZWN0bHkgdG8gYG1tL3BhZ2VfYWxsb2MuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIGxldCdzIHRyYWNlIHRoaXMgYmFjayB0byB0aGUgY2FsbGVyLlwiXG5cblRoZSBmYWN0IHRoYXQgaXQncyBjYWxsZWQgZnJvbSB3aXRoaW4gcGFnZV9hbGxvYyBpcyBpbnRlcmVzdGluZywgdGhpcyBpcyBhIGNvcmUgY29tcG9uZW50LiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjYWxsIGdyYXBoIGFuZCBmb2xsb3cgdGhlIHBhdGggdGhpcyBjb2RlIGlzIGZvbGxvd2luZy4gVGhlIGtleSBub3cgaXMgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBpbnRlcm5hbCwgbm9uLXN0YXRpYyBmdW5jdGlvbiBpbnRlZ3JhdGVzIHdpdGggdGhlIHBhZ2UgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcHJvY2Vzcy4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGB0cnlfdG9fZnJlZV9wYWdlc2AuIFRoYXQncyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyB0byBzcGVhay4gVW5kZXJzdGFuZGluZyB0aGlzIG1vZHVsZSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODg1MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjUzOjE3LjA4MjY1MTU0N1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1MjU2NTA3NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qdHJ5X3RvX2ZyZWVfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1MzoxOS4wMzUyMjc3ODJaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg4NDAzMTg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBhIE1lbW9yeSBBbGxvY2F0aW9uIEZ1bmN0aW9uJ3MgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgSSdtIGRpZ2dpbmcgaW50byBzb21ldGhpbmcgaGVyZS4gTG9va3MgbGlrZSB0aGVyZSdzIHNvbWUgY29kZSB0aGF0IGlzbid0IGJlaW5nIGRpcmVjdGx5IGV4cG9ydGVkLCBtZWFuaW5nIGl0J3Mgb25seSBiZWluZyBjYWxsZWQgaW50ZXJuYWxseSB3aXRoaW4gdGhlIGtlcm5lbC4gSXQncyBjYWxsZWQgZnJvbSBgbW0vcGFnZV9hbGxvYy5jYCwgc28gaXQncyBjbGVhcmx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgYWxsb2NhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgY29kZSBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS5cblxuVGhlIGZ1bmN0aW9uIEkgbmVlZCB0byBsb29rIGF0IGlzIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBpdCdzIHRyeWluZyB0byBhY2NvbXBsaXNoLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdC4gUGVyaGFwcyBpdCdzIHBhcnQgb2YgYSBtZWNoYW5pc20gZm9yIHJlY2xhaW1pbmcgbWVtb3J5IHdpdGhpbiBhIG1lbW9yeSBjZ3JvdXAsIG9yIG1heWJlIGl0J3MgaGFuZGxpbmcgc29tZSBlZGdlIGNhc2UgcmVsYXRlZCB0byBmcmVlaW5nIHBhZ2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSB0byBkZXRlcm1pbmUgaWYgaXQgaGFzIGFueSByZWxldmFuY2UgdG8gdGhlIHByb2JsZW0gSSdtIHRyeWluZyB0byBzb2x2ZS4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHNpdGVzIHRvIGZpbmQgb3V0IHByZWNpc2VseSB3aGVyZSBhbmQgd2hlbiBpdCBnZXRzIGludm9rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MTc0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTM6MjguOTE5MjYzMDQ0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg3NjUyNDA0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLip0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTM6MzAuOTA2OTI0MTU4WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDIwNzA4MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1lbW9yeSBSZWNsYWltIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSB0YWtlbiBhIGxvb2sgYXQgdGhpcyBwYXRjaCwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgYWRkcmVzc2luZyBhIGNyaXRpY2FsIGFyZWEgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoZSBmYWN0IHRoYXQgaXQncyB0b3VjaGluZyBgbW0vdm1zY2FuLmNgIGltbWVkaWF0ZWx5IHNpZ25hbHMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGNvcmUgb2YgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtZW1vcnkgcHJlc3N1cmUgYW5kIHJlY2xhbWF0aW9uLlxuXG5TcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIHRocm90dGxlIHJlY2xhaW1lcnMgd2hlbiBhIHN1YnN0YW50aWFsIG51bWJlciBvZiBmb2xpb3MgYXJlIGluIGFuIGlzb2xhdGVkIHN0YXRlLiBUaGlzIGlzIGVzcGVjaWFsbHkgcmVsZXZhbnQgdG8gTXVsdGktR2VuIExSVSAoTUdMUlUpLCBhcyB0aGUgY29kZSBub3cgKmNvcnJlY3RseSogYWNjb3VudHMgZm9yIHRoZXNlIGlzb2xhdGVkIHBhZ2VzLiBUaGUgaW50cm9kdWN0aW9uIG9mIGB0aHJvdHRsZV9pc29sYXRlZGAgYW5kIGl0cyBpbnRlZ3JhdGlvbiBpbnRvIGJvdGggYHNocmlua19pbmFjdGl2ZV9saXN0YCAoZm9yIHRoZSBsZWdhY3kgTFJVKSBhbmQgYGV2aWN0X2ZvbGlvc2AgKGZvciBNR0xSVSkgaW1wbGllcyBhIGZ1bmRhbWVudGFsIGltcHJvdmVtZW50IGluIGhvdyB0aGUga2VybmVsIHJlc3BvbmRzIHRvIHNpdHVhdGlvbnMgd2hlcmUgY29uY3VycmVudCByZWNsYWltIGlzIGNhdXNpbmcgcHJvYmxlbXMsIHBvdGVudGlhbGx5IHByZXZlbnRpbmcgT3V0LW9mLU1lbW9yeSAoT09NKSBjb25kaXRpb25zIGFuZCB0aHJhc2hpbmcuIEkgYW0gYWxzbyB0aGlua2luZyB0aGF0IGBfX21vZF9ub2RlX3BhZ2Vfc3RhdGVgIGFuZCBgbW9kX25vZGVfcGFnZV9zdGF0ZWAgYXJlIGltcG9ydGFudCwgaGVyZS5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCBzZWVtcyBsaWtlIHRoZSBwYXRjaCdzIHB1cnBvc2UgaXMgdG8gbWFuYWdlIG1lbW9yeSByZWNsYWltIGluIGEgbW9yZSBlZmZpY2llbnQgbWFubmVyLCBwYXJ0aWN1bGFybHkgd2hlbiBmYWNlZCB3aXRoIGEgaGlnaCBudW1iZXIgb2YgY29uY3VycmVudCB0aHJlYWRzIHZ5aW5nIGZvciBtZW1vcnkuIEkgYmVsaWV2ZSB0aGlzIHdpbGwgbWFrZSBvdXIgc3lzdGVtcyBtb3JlIHJvYnVzdC4gSXQncyBsaWtlbHkgdHJ5aW5nIHRvIGF2b2lkIGEgc2NlbmFyaW8gd2hlcmUgdGhlIExSVSBsaXN0IGJlY29tZXMgdG9vIHNtYWxsLCByZXN1bHRpbmcgaW4gdGhlIHN5c3RlbSBzd2FwcGluZyB1bm5lY2Vzc2FyaWx5IGFuZCBmdXJ0aGVyIGV4YWNlcmJhdGluZyB0aGUgbWVtb3J5IHByZXNzdXJlLlxuXG5Db25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBtZW1vcnkgbWFuYWdlbWVudCwgZXNwZWNpYWxseSBpbiBOVU1BIG9yIE1FTUNHIGVudmlyb25tZW50cywgSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgaXMgc29tZXRoaW5nIHRoYXQgbmVlZHMgYSB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduIHRvIGVuc3VyZSBzdGFiaWxpdHkgYW5kIGNhdGNoIGFueSBzdWJ0bGUgcmVncmVzc2lvbnMuIFRoaXMgY2hhbmdlIHdpbGwgbGlrZWx5IGludGVyYWN0IHdpdGg6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYG5vZGVfcmVjbGFpbWAsIGFuZCBgd2FrZXVwX2tzd2FwZGAuXG5cblNvLCB5ZWFoLCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTAxLCJPdXRwdXRUb2tlbnMiOjE5MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1Mzo0MS45Mjc2MzQ1NThaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTI2MjA0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV90b19mcmVlX3BhZ2VzXCIsXG4gICAgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gICAgXCJub2RlX3JlY2xhaW1cIixcbiAgICBcIndha2V1cF9rc3dhcGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgLiBJdCBpbnRyb2R1Y2VzIGB0aHJvdHRsZV9pc29sYXRlZCgpYCB0byB0aHJvdHRsZSByZWNsYWltZXJzIHdoZW4gdG9vIG1hbnkgZm9saW9zIGFyZSBpc29sYXRlZCwgYW5kIGFwcGxpZXMgdGhpcyBsb2dpYyB0byBib3RoIHRoZSBsZWdhY3kgTFJVIChgc2hyaW5rX2luYWN0aXZlX2xpc3RgKSBhbmQgdGhlIE11bHRpLUdlbiBMUlUgKGBldmljdF9mb2xpb3NgKS4gSXQgYWxzbyBhZGRzIGFjY291bnRpbmcgZm9yIGlzb2xhdGVkIGZvbGlvcyBpbiBNR0xSVS4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIG1lbW9yeSBwcmVzc3VyZSBhbmQgY29uY3VycmVudCBwYWdlIHJlY2xhaW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV90b19mcmVlX3BhZ2VzXCIsXG4gICAgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gICAgXCJub2RlX3JlY2xhaW1cIixcbiAgICBcIndha2V1cF9rc3dhcGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgLiBJdCBpbnRyb2R1Y2VzIGB0aHJvdHRsZV9pc29sYXRlZCgpYCB0byB0aHJvdHRsZSByZWNsYWltZXJzIHdoZW4gdG9vIG1hbnkgZm9saW9zIGFyZSBpc29sYXRlZCwgYW5kIGFwcGxpZXMgdGhpcyBsb2dpYyB0byBib3RoIHRoZSBsZWdhY3kgTFJVIChgc2hyaW5rX2luYWN0aXZlX2xpc3RgKSBhbmQgdGhlIE11bHRpLUdlbiBMUlUgKGBldmljdF9mb2xpb3NgKS4gSXQgYWxzbyBhZGRzIGFjY291bnRpbmcgZm9yIGlzb2xhdGVkIGZvbGlvcyBpbiBNR0xSVS4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIG1lbW9yeSBwcmVzc3VyZSBhbmQgY29uY3VycmVudCBwYWdlIHJlY2xhaW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjUzOjQyLjAwODkwNzI4NloiLCJTZXEiOjQzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2ODAxMjQxNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzo1Mzo0Mi4wMDk4NDg4MjZaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTE2NzkxNzc4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgcGFnZSByZWNsYWltIHRocm90dGxpbmcgbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYCBieSBpbnRyb2R1Y2luZyBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gYHRocm90dGxlX2lzb2xhdGVkYC4gSXQgdXNlcyBhIGxvY2FsIGJvb2xlYW4gdmFyaWFibGUgYGZhdGFsYCBwYXNzZWQgYnkgcmVmZXJlbmNlIHRvIHRyYWNrIGlmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcuIFRoZSB2YXJpYWJsZSBgZmF0YWxgIGlzIHVuY29uZGl0aW9uYWxseSBpbml0aWFsaXplZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGB0aHJvdHRsZV9pc29sYXRlZGAgYmVmb3JlIGFueSByZWFkcyBvY2N1ci4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGxlYXZlIGFueSBmaWVsZHMgdW5pbml0aWFsaXplZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsb2dpYyBlcnJvcnMsIHVzZS1hZnRlci1mcmVlLCBvciBkZWFkbG9ja3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgb3Igb3RoZXIgZGVmYXVsdCBzYW5pdGl6ZXJzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTYzMmQ4ZWMyMzlkZmFiYmRjZmZmZmQ1NTg0OWRiMDM1MjI5OWE1OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDA3OjUxOjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggYzE0MDRhNTk1MjNkNi4uODg2YTUzZjU2M2FiNyAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTE4MTksNyArMTgxOSw3IEBAIGJvb2wgZm9saW9faXNvbGF0ZV9scnUoc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKiB0aGUgTFJVIGxpc3Qgd2lsbCBnbyBzbWFsbCBhbmQgYmUgc2Nhbm5lZCBmYXN0ZXIgdGhhbiBuZWNlc3NhcnksIGxlYWRpbmcgdG9cbiAgKiB1bm5lY2Vzc2FyeSBzd2FwcGluZywgdGhyYXNoaW5nIGFuZCBPT00uXG4gICovXG4tc3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgaW50IGZpbGUsXG4rc3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmaWxlLFxuIFx0XHRzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGluYWN0aXZlLCBpc29sYXRlZDtcbkBAIC0xODU2LDYgKzE4NTYsMzcgQEAgc3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgaW50IGZpbGUsXG4gXHRyZXR1cm4gdG9vX21hbnk7XG4gfVxuIFxuKy8qXG4rICogVGhyb3R0bGUgcmVjbGFpbSBpZiB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MgYXJlIHBpbGluZyB1cC4gSWYgdGhpcyBtYWtlc1xuKyAqIG5vIHByb2dyZXNzLCB0aGUgY2FsbGVyIGlzIHByb2JhYmx5IGxvb3Bpbmcgb24gdW5ldmljdGFibGUgZm9saW9zLCBzbyBnaXZlXG4rICogdXAuIFJldHVybnMgZmFsc2UgdG8gdGVsbCB0aGUgY2FsbGVyIHRvIHN0b3AgcmVjbGFpbWluZywgYW5kIHNldHMgQGZhdGFsXG4rICogaWYgdGhlIHRhc2sgcmVjZWl2ZWQgYSBmYXRhbCBzaWduYWwgd2hpbGUgd2FpdGluZywgc28gdGhhdCB0aGUgY2FsbGVyIGNhblxuKyAqIGJhaWwgb3V0IGZhc3Rlci5cbisgKi9cbitzdGF0aWMgYm9vbCB0aHJvdHRsZV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZpbGUsXG4rXHRcdFx0ICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGJvb2wgKmZhdGFsKVxuK3tcbitcdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xuK1xuK1x0KmZhdGFsID0gZmFsc2U7XG4rXHR3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHtcbitcdFx0aWYgKHN0YWxsZWQpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0XHQvKiB3YWl0IGEgYml0IGZvciB0aGUgcmVjbGFpbWVyLiAqL1xuK1x0XHRzdGFsbGVkID0gdHJ1ZTtcbitcdFx0cmVjbGFpbV90aHJvdHRsZShwZ2RhdCwgVk1TQ0FOX1RIUk9UVExFX0lTT0xBVEVEKTtcbitcbitcdFx0LyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqL1xuK1x0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbitcdFx0XHQqZmF0YWwgPSB0cnVlO1xuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIC8qXG4gICogbW92ZV9mb2xpb3NfdG9fbHJ1KCkgbW92ZXMgZm9saW9zIGZyb20gcHJpdmF0ZSBAbGlzdCB0byBhcHByb3ByaWF0ZSBMUlUgbGlzdC5cbiAgKlxuQEAgLTE5OTIsMTkgKzIwMjMsMTQgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIFx0Ym9vbCBmaWxlID0gaXNfZmlsZV9scnUobHJ1KTtcbiBcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbi1cdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xuLVxuLVx0d2hpbGUgKHVubGlrZWx5KHRvb19tYW55X2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYykpKSB7XG4tXHRcdGlmIChzdGFsbGVkKVxuLVx0XHRcdHJldHVybiAwO1xuLVxuLVx0XHQvKiB3YWl0IGEgYml0IGZvciB0aGUgcmVjbGFpbWVyLiAqL1xuLVx0XHRzdGFsbGVkID0gdHJ1ZTtcbi1cdFx0cmVjbGFpbV90aHJvdHRsZShwZ2RhdCwgVk1TQ0FOX1RIUk9UVExFX0lTT0xBVEVEKTtcbitcdGJvb2wgZmF0YWw7XG4gXG4rXHRpZiAoIXRocm90dGxlX2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYywgXHUwMDI2ZmF0YWwpKSB7XG4gXHRcdC8qIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gUmV0dXJuIG5vdy4gKi9cbi1cdFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuK1x0XHRpZiAoZmF0YWwpXG4gXHRcdFx0cmV0dXJuIFNXQVBfQ0xVU1RFUl9NQVg7XG4rXG4rXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIFx0bHJ1X2FkZF9kcmFpbigpO1xuQEAgLTQ4ODMsNiArNDkwOSwyNSBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdGJvb2wgc2tpcF9yZXRyeSA9IGZhbHNlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG4rXHRib29sIGZhdGFsO1xuK1xuK1x0LypcbitcdCAqIFRoZSB0eXBlIHRvIGlzb2xhdGUgaXMgdW5rbm93biB1bnRpbCBpc29sYXRpb24sIHNvIHByZWRpY3QgaXQgZm9yXG4rXHQgKiB0aGUgdGhyb3R0bGluZyBjaGVjay4gaXNvbGF0ZV9mb2xpb3MoKSBtYXkgc3RpbGwgZmFsbCBiYWNrIHRvIHRoZVxuK1x0ICogb3RoZXIgdHlwZSwgd2hpY2ggaXMgZmluZSBmb3IgdGhpcyBoZXVyaXN0aWMuXG4rXHQgKi9cbitcdHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7XG4rXHRpZiAoIXRocm90dGxlX2lzb2xhdGVkKHBnZGF0LCB0eXBlLCBzYywgXHUwMDI2ZmF0YWwpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gTGlrZSB0aGUgbGVnYWN5XG4rXHRcdCAqIHBhdGgsIHByZXRlbmQgc29tZSBwYWdlcyB3ZXJlIHJlY2xhaW1lZCBzbyByZWNsYWltIHVud2luZHNcbitcdFx0ICogcXVpY2tseSBpbnN0ZWFkIG9mIGxvb3BpbmcgYmFjayBpbnRvIHRoZSB0aHJvdHRsZS5cbitcdFx0ICovXG4rXHRcdGlmIChmYXRhbClcbitcdFx0XHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgKz0gU1dBUF9DTFVTVEVSX01BWDtcbitcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4gXG4gXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbiBcbkBAIC00ODkyLDYgKzQ5MzcsOSBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdHNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLFxuIFx0XHRcdFx0IFx1MDAyNmxpc3QsIFx1MDAyNmlzb2xhdGVkLCBcdTAwMjZ0eXBlLCBcdTAwMjZ0eXBlX3NjYW5uZWQpO1xuIFx0bnJfaXNvbGF0ZWQgPSBpc29sYXRlZDtcbitcdGlmIChucl9pc29sYXRlZClcbitcdFx0X19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICsgdHlwZSxcbitcdFx0XHRcdCAgICAgIG5yX2lzb2xhdGVkKTtcbiBcbiBcdC8qIFNjYW5uaW5nIG1heSBoYXZlIGVtcHRpZWQgdGhlIG9sZGVzdCBnZW4sIGZsdXNoIGl0ICovXG4gXHRpZiAoc2Nhbm5lZClcbkBAIC00OTU0LDYgKzUwMDIsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdGdvdG8gcmV0cnk7XG4gXHR9XG4gXG4rXHRpZiAobnJfaXNvbGF0ZWQpXG4rXHRcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyB0eXBlLFxuK1x0XHRcdFx0ICAgIC1ucl9pc29sYXRlZCk7XG4rXG4gXHRpZiAobnJfaXNvbGF0ZWQgXHUwMDNlIHRvdGFsX3JlY2xhaW1lZClcbiBcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gKyB0eXBlLFxuIFx0XHRcdFx0IG5yX2lzb2xhdGVkIC0gdG90YWxfcmVjbGFpbWVkKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjUzOjQyLjAwOTg1MTI5NVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTY3OTE1Mjk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW4gYG1tL3Ztc2Nhbi5jYCBsb29rcyBsaWtlIGl0J3MgcmVmYWN0b3JpbmcgdGhlIGlzb2xhdGVkIHBhZ2UgdGhyb3R0bGluZyBsb2dpYy4gTXkgbWFpbiBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggY2FuIGxlYWQgdG8gbmFzdHkgYnVncy4gTGV0J3MgYnJlYWsgZG93biB0aGUgYGZhdGFsYCB2YXJpYWJsZS4gVGhleSd2ZSBtb3ZlZCB0aGUgYHRvb19tYW55X2lzb2xhdGVkYCBjaGVjayBpbnRvIGEgbmV3IGB0aHJvdHRsZV9pc29sYXRlZGAgZnVuY3Rpb24gYW5kIG5vdyB0aGV5J3JlIHBhc3NpbmcgYSBgYm9vbCBmYXRhbGAgYnkgcmVmZXJlbmNlLiBJIG5lZWQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSBgZmF0YWxgIGlzIGFsd2F5cyBpbml0aWFsaXplZCBiZWZvcmUgaXQncyByZWFkLlxuXG5Mb29raW5nIGF0IGB0aHJvdHRsZV9pc29sYXRlZGAsIHRoZSB2ZXJ5IGZpcnN0IHRoaW5nIGl0IGRvZXMgaXMgc2V0IGAqZmF0YWwgPSBmYWxzZWAuIEdvb2QsIHRoYXQncyByZWFzc3VyaW5nLiBJdCBzZWVtcyBsaWtlIGl0J3MgYWx3YXlzIGluaXRpYWxpemVkLCB3aGV0aGVyIG9yIG5vdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgdHJ1ZWAgb3IgYGZhbHNlYC4gVGhlbiwgaW4gYm90aCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgZXZpY3RfZm9saW9zYCwgYGZhdGFsYCBpcyBvbmx5IHJlYWQgaWYgYHRocm90dGxlX2lzb2xhdGVkYCByZXR1cm5zIGBmYWxzZWAsIHdoaWNoIGlzIHdoZXJlIHRoZSByZXR1cm4gaGFwcGVucyBpbW1lZGlhdGVseSBhZnRlciB0aGUgYGZhdGFsYCB2YXJpYWJsZSBpcyBzZXQuXG5cbk9rYXksIHNvIEkgdGhpbmsgYGZhdGFsYCBpcyBmaW5lLCBidXQgSSBzaG91bGQgbG9vayBkZWVwZXIganVzdCBpbiBjYXNlLiBOb3cgdGhhdCBJIHRoaW5rIGFib3V0IGl0LCB0aGUgcGF0Y2ggZm9jdXNlcyBvbiBwYWdlIHJlY2xhaW0gYW5kIHRocm90dGxpbmcsIG5vdCBvbiBkYXRhIGNvcHlpbmcgb3IgY29tcGxleCBzdHJ1Y3RzLiBUaGUgYGZhdGFsYCB2YXJpYWJsZSBpcyBsb2NhbCBhbmQgZXhwbGljaXRseSBpbml0aWFsaXplZC4gSSdtIHJlYXNvbmFibHkgY29uZmlkZW50IHRoYXQgdGhpcyBpcyAqbm90KiBhIEtNU0FOIHNpdHVhdGlvbi4gS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHN1YnRsZSBpc3N1ZXMgbGlrZSB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcywgb3IgY29uY3VycmVuY3kgcHJvYmxlbXMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIGBldmljdF9mb2xpb3NgIGNoYW5nZXMuIFRoZXkgYXJlIHVwZGF0aW5nIHN0YXRpc3RpY3MgZm9yIGlzb2xhdGVkIHBhZ2VzLCB3aGljaCBzaG91bGQgYWxzbyBiZSBmaW5lLiBObyByZWQgZmxhZ3MgdGhlcmUgZWl0aGVyLiBBbGwgZ29vZC4gTm8gS01TQU4gbmVlZGVkIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTYsIk91dHB1dFRva2VucyI6MTg3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6NTM6NTMuNjg5MDA4NDU3WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHBhZ2UgcmVjbGFpbSB0aHJvdHRsaW5nIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AgYnkgaW50cm9kdWNpbmcgYSBuZXcgaGVscGVyIGZ1bmN0aW9uIGB0aHJvdHRsZV9pc29sYXRlZGAuIEl0IHVzZXMgYSBsb2NhbCBib29sZWFuIHZhcmlhYmxlIGBmYXRhbGAgcGFzc2VkIGJ5IHJlZmVyZW5jZSB0byB0cmFjayBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nLiBUaGUgdmFyaWFibGUgYGZhdGFsYCBpcyB1bmNvbmRpdGlvbmFsbHkgaW5pdGlhbGl6ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBgdGhyb3R0bGVfaXNvbGF0ZWRgIGJlZm9yZSBhbnkgcmVhZHMgb2NjdXIuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBsZWF2ZSBhbnkgZmllbGRzIHVuaW5pdGlhbGl6ZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbG9naWMgZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgZGVhZGxvY2tzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgcGFnZSByZWNsYWltIHRocm90dGxpbmcgbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYCBieSBpbnRyb2R1Y2luZyBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gYHRocm90dGxlX2lzb2xhdGVkYC4gSXQgdXNlcyBhIGxvY2FsIGJvb2xlYW4gdmFyaWFibGUgYGZhdGFsYCBwYXNzZWQgYnkgcmVmZXJlbmNlIHRvIHRyYWNrIGlmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcuIFRoZSB2YXJpYWJsZSBgZmF0YWxgIGlzIHVuY29uZGl0aW9uYWxseSBpbml0aWFsaXplZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGB0aHJvdHRsZV9pc29sYXRlZGAgYmVmb3JlIGFueSByZWFkcyBvY2N1ci4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGxlYXZlIGFueSBmaWVsZHMgdW5pbml0aWFsaXplZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsb2dpYyBlcnJvcnMsIHVzZS1hZnRlci1mcmVlLCBvciBkZWFkbG9ja3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgb3Igb3RoZXIgZGVmYXVsdCBzYW5pdGl6ZXJzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlbg7[1] Phase: Succeeded StartedAt: 2026-08-17 07:54:20 +0000 UTC FinishedAt: 2026-08-17 07:54:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlbg7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-17 07:54:20 +0000 UTC FinishedAt: 2026-08-17 07:54:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlbg7[2] Phase: Succeeded StartedAt: 2026-08-17 07:54:20 +0000 UTC FinishedAt: 2026-08-17 11:37:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 07:54:20 +0000 UTC FinishedAt: 2026-08-17 11:37:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 07:54:20 +0000 UTC FinishedAt: 2026-08-17 07:54:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 07:54:20 +0000 UTC FinishedAt: 2026-08-17 07:54:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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-workflowhlbg7/series-workflowhlbg7-convert-artifact-1547269510/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 07:54:30 +0000 UTC FinishedAt: 2026-08-17 08:15:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 07:54:30 +0000 UTC FinishedAt: 2026-08-17 08:15:01 +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:*3228f06b-ff02-4834-955f-c67f96726be7,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-workflowhlbg7/series-workflowhlbg7-convert-artifact-1547269510/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": "e99a02b3-3d80-4a80-ab01-b9b81d12a17b", "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-workflowhlbg7/series-workflowhlbg7-build-action-2625288476/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 07:54:30 +0000 UTC FinishedAt: 2026-08-17 08:14:38 +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:*3228f06b-ff02-4834-955f-c67f96726be7,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-workflowhlbg7/series-workflowhlbg7-convert-artifact-1547269510/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": "e99a02b3-3d80-4a80-ab01-b9b81d12a17b", "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-workflowhlbg7/series-workflowhlbg7-build-action-2625288476/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 08:15:01 +0000 UTC FinishedAt: 2026-08-17 08:15:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 08:15:01 +0000 UTC FinishedAt: 2026-08-17 08:15:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 08:15:01 +0000 UTC FinishedAt: 2026-08-17 08:15:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 08:15:01 +0000 UTC FinishedAt: 2026-08-17 08:15:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-workflowhlbg7/series-workflowhlbg7-convert-artifact-3155557081/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 08:15:11 +0000 UTC FinishedAt: 2026-08-17 08:17:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 08:15:11 +0000 UTC FinishedAt: 2026-08-17 08:17:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e99a02b3-3d80-4a80-ab01-b9b81d12a17b,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-workflowhlbg7/series-workflowhlbg7-build-action-2625288476/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-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 08:17:13 +0000 UTC FinishedAt: 2026-08-17 08:17:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 08:17:13 +0000 UTC FinishedAt: 2026-08-17 08:17:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 08:17:13 +0000 UTC FinishedAt: 2026-08-17 08:34:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 08:17:13 +0000 UTC FinishedAt: 2026-08-17 08:34:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3228f06b-ff02-4834-955f-c67f96726be7,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-workflowhlbg7/series-workflowhlbg7-convert-artifact-3155557081/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": "fcbf4351-ce3f-4549-901a-9484aee6872f", "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-workflowhlbg7/series-workflowhlbg7-build-action-1223499573/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 08:17:13 +0000 UTC FinishedAt: 2026-08-17 08:34:25 +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:*3228f06b-ff02-4834-955f-c67f96726be7,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-workflowhlbg7/series-workflowhlbg7-convert-artifact-3155557081/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": "fcbf4351-ce3f-4549-901a-9484aee6872f", "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-workflowhlbg7/series-workflowhlbg7-build-action-1223499573/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 08:34:35 +0000 UTC FinishedAt: 2026-08-17 08:34:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 08:34:35 +0000 UTC FinishedAt: 2026-08-17 08:34:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 08:34:35 +0000 UTC FinishedAt: 2026-08-17 08:36:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 08:34:35 +0000 UTC FinishedAt: 2026-08-17 08:36:12 +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:*fcbf4351-ce3f-4549-901a-9484aee6872f,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-workflowhlbg7/series-workflowhlbg7-build-action-1223499573/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-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 08:36:22 +0000 UTC FinishedAt: 2026-08-17 11:37:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 08:36:22 +0000 UTC FinishedAt: 2026-08-17 11:37:45 +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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"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:*e99a02b3-3d80-4a80-ab01-b9b81d12a17b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fcbf4351-ce3f-4549-901a-9484aee6872f,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-workflowhlbg7/series-workflowhlbg7-build-action-2625288476/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-workflowhlbg7/series-workflowhlbg7-build-action-1223499573/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 08:36:22 +0000 UTC FinishedAt: 2026-08-17 08:36:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 08:36:22 +0000 UTC FinishedAt: 2026-08-17 08:36:28 +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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"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-workflowhlbg7/series-workflowhlbg7-convert-artifact-2309652942/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 08:36:22 +0000 UTC FinishedAt: 2026-08-17 08:36:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 08:36:22 +0000 UTC FinishedAt: 2026-08-17 08:36:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 08:36:23 +0000 UTC FinishedAt: 2026-08-17 08:36:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 08:36:33 +0000 UTC FinishedAt: 2026-08-17 11:37:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlbg7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","node_reclaim","wakeup_kswapd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","NUMA"],"series_id":"58c65a32-515c-4711-87e7-c69737ce7797","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-17 08:36:33 +0000 UTC FinishedAt: 2026-08-17 11:37:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e99a02b3-3d80-4a80-ab01-b9b81d12a17b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fcbf4351-ce3f-4549-901a-9484aee6872f,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-workflowhlbg7/series-workflowhlbg7-build-action-2625288476/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-workflowhlbg7/series-workflowhlbg7-build-action-1223499573/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-workflowhlbg7/series-workflowhlbg7-convert-artifact-2309652942/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,}