Name: series-workflowfj9fx Phase: Succeeded StartedAt: 2026-08-26 11:04:13 +0000 UTC FinishedAt: 2026-08-26 13:26:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfj9fx[0] Phase: Succeeded StartedAt: 2026-08-26 11:04:13 +0000 UTC FinishedAt: 2026-08-26 11:54:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfj9fx[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 11:04:13 +0000 UTC FinishedAt: 2026-08-26 11:54:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dc4b95b8fee95113587e93ca116356032d271371", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SLIP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dc4b95b8fee95113587e93ca116356032d271371", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SLIP" ], "series_id": "7cecbdf8-9990-49ef-bc74-c1fd2c19cd29" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "slip_close", "slip_open" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NMSVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbGlwX2Nsb3NlJiMzNDssCiAgICAmIzM0O3NsaXBfb3BlbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBzbGlwX2hhbmd1cGAgZnVuY3Rpb24gYW5kIGl0cyBhc3NpZ25tZW50IHRvIHRoZSBgaGFuZ3VwYCBmaWVsZCBpbiB0aGUgYHNsX2xkaXNjYCAoYHR0eV9sZGlzY19vcHNgKSBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBTTElQIG5ldHdvcmsgZHJpdmVyLiBUaGlzIGNoYW5nZSBhbHRlcnMgdGhlIGNvbnRyb2wgZmxvdyBkdXJpbmcgYSBUVFkgaGFuZ3VwIGV2ZW50LCBtZWFuaW5nIHRoZSBTTElQIGNoYW5uZWwgbWlnaHQgbm90IGJlIGV4cGxpY2l0bHkgY2xvc2VkIG9uIGhhbmd1cC4gSWYgdGhpcyBvbWlzc2lvbiBpbnRyb2R1Y2VzIGFueSBidWdzLCB0aGV5IHdvdWxkIGxpa2VseSBtYW5pZmVzdCBhcyByZXNvdXJjZSBsZWFrcywgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0aWVzIChlLmcuLCBpZiB0aGUgVFRZIGlzIGRlc3Ryb3llZCBidXQgdGhlIFNMSVAgY2hhbm5lbCBjb250aW51ZXMgdG8gcmVmZXJlbmNlIGl0KSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyAoaWYgdGhlIFRUWSBsYXllciBhdHRlbXB0cyB0byBjYWxsIGEgTlVMTCBgaGFuZ3VwYCBwb2ludGVyKS4gXG5cblRoZXNlIGNsYXNzZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBzdWNoIGFzIEtBU0FOICh3aGljaCBjYXRjaGVzIHVzZS1hZnRlci1mcmVlIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhbmQgc3RhbmRhcmQga2VybmVsIG9vcHMvcGFuaWNzICh3aGljaCBjYXRjaCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFkZCBsb2dpYyB0aGF0IGNvdWxkIG9wZXJhdGUgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBzbGlwX2hhbmd1cGAgY2FsbGJhY2sgZnJvbSB0aGUgU0xJUCBsaW5lIGRpc2NpcGxpbmUuIFRoaXMgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgdGhlIFNMSVAgZHJpdmVyIG9uIGhhbmd1cCwgYXMgYHNsaXBfY2xvc2VgIGlzIG5vIGxvbmdlciBjYWxsZWQgZGlyZWN0bHkgZnJvbSB0aGUgaGFuZ3VwIHBhdGgsIGJ1dCByYXRoZXIgZGVmZXJyZWQgdW50aWwgdGhlIGxkaXNjIGlzIGNsb3NlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSB0ZWFyZG93biBzZXF1ZW5jZSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBUVFkgaGFuZ3VwIG9wZXJhdGlvbnMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTg1N2ZmN2JhYmM0NjFjZjcyMDAyYjc0Y2Q1YTljZDZhNTY1MDIzOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDExOjUxOjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jIGIvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNcbmluZGV4IGZhYWU3MTFjZjc5M2QuLmFjMGZjNTljOGMyNTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9zbGlwL3NsaXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNcbkBAIC04ODEsOCAmIzQzOzg4MSw2IEBAIHN0YXRpYyBpbnQgc2xpcF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4gICogQ2xvc2UgZG93biBhIFNMSVAgY2hhbm5lbC5cbiAgKiBUaGlzIG1lYW5zIGZsdXNoaW5nIG91dCBhbnkgcGVuZGluZyBxdWV1ZXMsIGFuZCB0aGVuIHJldHVybmluZy4gVGhpc1xuICAqIGNhbGwgaXMgc2VyaWFsaXplZCBhZ2FpbnN0IG90aGVyIGxkaXNjIGZ1bmN0aW9ucy5cbi0gKlxuLSAqIFdlIGFsc28gdXNlIHRoaXMgbWV0aG9kIGZvIGEgaGFuZ3VwIGV2ZW50XG4gICovXG4gXG4gc3RhdGljIHZvaWQgc2xpcF9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuQEAgLTkxMCwxMSAmIzQzOzkwOCw2IEBAIHN0YXRpYyB2b2lkIHNsaXBfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2KHNsLVx1MDAzZWRldik7XG4gXHQvKiBUaGlzIHdpbGwgY29tcGxldGUgdmlhIHNsX2ZyZWVfbmV0ZGV2ICovXG4gfVxuLVxuLXN0YXRpYyB2b2lkIHNsaXBfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4te1xuLVx0c2xpcF9jbG9zZSh0dHkpO1xuLX1cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKlx0XHRcdFNUQU5EQVJEIFNMSVAgRU5DQVBTVUxBVElPTlx0XHQgIFx0ICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbkBAIC0xMjc1LDcgJiM0MzsxMjY4LDYgQEAgc3RhdGljIHN0cnVjdCB0dHlfbGRpc2Nfb3BzIHNsX2xkaXNjID0ge1xuIFx0Lm5hbWUgXHRcdD0gXCYjMzQ7c2xpcFwmIzM0OyxcbiBcdC5vcGVuIFx0XHQ9IHNsaXBfb3BlbixcbiBcdC5jbG9zZVx0IFx0PSBzbGlwX2Nsb3NlLFxuLVx0Lmhhbmd1cFx0IFx0PSBzbGlwX2hhbmd1cCxcbiBcdC5pb2N0bFx0XHQ9IHNsaXBfaW9jdGwsXG4gXHQucmVjZWl2ZV9idWZcdD0gc2xpcF9yZWNlaXZlX2J1ZixcbiBcdC53cml0ZV93YWtldXBcdD0gc2xpcF93cml0ZV93YWtldXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NMSVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbGlwX2Nsb3NlJiMzNDssCiAgICAmIzM0O3NsaXBfb3BlbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHRoZSBgc2xpcF9oYW5ndXBgIGNhbGxiYWNrIGZyb20gdGhlIFNMSVAgbGluZSBkaXNjaXBsaW5lLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBTTElQIGRyaXZlciBvbiBoYW5ndXAsIGFzIGBzbGlwX2Nsb3NlYCBpcyBubyBsb25nZXIgY2FsbGVkIGRpcmVjdGx5IGZyb20gdGhlIGhhbmd1cCBwYXRoLCBidXQgcmF0aGVyIGRlZmVycmVkIHVudGlsIHRoZSBsZGlzYyBpcyBjbG9zZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyB0aGUgdGVhcmRvd24gc2VxdWVuY2UgYW5kIGlzIHJlYWNoYWJsZSB2aWEgVFRZIGhhbmd1cCBvcGVyYXRpb25zLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE4NTdmZjdiYWJjNDYxY2Y3MjAwMmI3NGNkNWE5Y2Q2YTU2NTAyMzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAxMTo1MTo1MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jIGIvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMKaW5kZXggZmFhZTcxMWNmNzkzZC4uYWMwZmM1OWM4YzI1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMKQEAgLTg4MSw4ICYjNDM7ODgxLDYgQEAgc3RhdGljIGludCBzbGlwX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKICAqIENsb3NlIGRvd24gYSBTTElQIGNoYW5uZWwuCiAgKiBUaGlzIG1lYW5zIGZsdXNoaW5nIG91dCBhbnkgcGVuZGluZyBxdWV1ZXMsIGFuZCB0aGVuIHJldHVybmluZy4gVGhpcwogICogY2FsbCBpcyBzZXJpYWxpemVkIGFnYWluc3Qgb3RoZXIgbGRpc2MgZnVuY3Rpb25zLgotICoKLSAqIFdlIGFsc28gdXNlIHRoaXMgbWV0aG9kIGZvIGEgaGFuZ3VwIGV2ZW50CiAgKi8KIAogc3RhdGljIHZvaWQgc2xpcF9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQpAQCAtOTEwLDExICYjNDM7OTA4LDYgQEAgc3RhdGljIHZvaWQgc2xpcF9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogCXVucmVnaXN0ZXJfbmV0ZGV2KHNsLSZndDtkZXYpOwogCS8qIFRoaXMgd2lsbCBjb21wbGV0ZSB2aWEgc2xfZnJlZV9uZXRkZXYgKi8KIH0KLQotc3RhdGljIHZvaWQgc2xpcF9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQlzbGlwX2Nsb3NlKHR0eSk7Ci19CiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqCQkJU1RBTkRBUkQgU0xJUCBFTkNBUFNVTEFUSU9OCQkgIAkgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMjc1LDcgJiM0MzsxMjY4LDYgQEAgc3RhdGljIHN0cnVjdCB0dHlfbGRpc2Nfb3BzIHNsX2xkaXNjID0gewogCS5uYW1lIAkJPSAmIzM0O3NsaXAmIzM0OywKIAkub3BlbiAJCT0gc2xpcF9vcGVuLAogCS5jbG9zZQkgCT0gc2xpcF9jbG9zZSwKLQkuaGFuZ3VwCSAJPSBzbGlwX2hhbmd1cCwKIAkuaW9jdGwJCT0gc2xpcF9pb2N0bCwKIAkucmVjZWl2ZV9idWYJPSBzbGlwX3JlY2VpdmVfYnVmLAogCS53cml0ZV93YWtldXAJPSBzbGlwX3dyaXRlX3dha2V1cCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwOAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9zbGlwL3NsaXAuY2AuIEkgc2VlIGl0JiMzOTtzIHJlbW92aW5nIGBzbGlwX2hhbmd1cGAsIHdoaWNoIHdhcyBlc3NlbnRpYWxseSBqdXN0IGEgcmVkdW5kYW50IGNhbGwgdG8gYHNsaXBfY2xvc2VgLiBUaGF0JiMzOTtzIGZpbmU7IGNvbnNvbGlkYXRpb24gaXMgdXN1YWxseSBhIGdvb2QgdGhpbmcuIEFuZCwgaXQmIzM5O3MgYWxzbyByZW1vdmluZyB0aGUgYXNzaWdubWVudCBvZiBgLmhhbmd1cCA9IHNsaXBfaGFuZ3VwYCBmcm9tIGBzbF9sZGlzY2AuCgpIb2xkIG9uLi4uIGlmIGBzbF9sZGlzY2Agbm8gbG9uZ2VyIGhhcyBhIGAuaGFuZ3VwYCBmdW5jdGlvbiBwb2ludGVyLCB3aGF0JiMzOTtzIGdvaW5nIHRvIGhhcHBlbiB3aGVuIGEgaGFuZ3VwIGV2ZW50IGFjdHVhbGx5ICpvY2N1cnMqPyBJdCYjMzk7cyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBoZXJlLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHR0eSBsYXllci4gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IGBpbmNsdWRlL2xpbnV4L3R0eV9sZGlzYy5oYCB0byBjaGVjayB0aGUgYHR0eV9sZGlzY19vcHNgIHN0cnVjdHVyZSBkZWZpbml0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBiZWhhdmlvciBpcyB3aGVuIGEgYC5oYW5ndXBgIGZ1bmN0aW9uIGlzIE5VTEwuIERvZXMgdGhlIHR0eSBsYXllciBncmFjZWZ1bGx5IGhhbmRsZSB0aGUgc2l0dWF0aW9uLCBvciBkb2VzIGl0IGxlYWQgdG8gc29tZSB1bmV4cGVjdGVkIHJlc3VsdD8KClJpZ2h0LCB0aGUgcGF0Y2ggKnJlbW92ZXMqIGBzbGlwX2hhbmd1cGAgKmFuZCogdGhlIGFzc2lnbm1lbnQuIFNvIHRoaXMgaXMgYSBwb3RlbnRpYWwgZnVuY3Rpb25hbCBjaGFuZ2UsIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIHdhdGNoIG91dCBmb3IuIElmIHRoZSBoYW5ndXAgZnVuY3Rpb24gaXMgTlVMTCwgdGhlIHR0eSBsYXllciBtaWdodCBkbyBzb21ldGhpbmcgZGlmZmVyZW50IHRoYW4gY2FsbGluZyB0aGUgYHNsaXBfaGFuZ3VwYCBmdW5jdGlvbi4gT3IsIG1vcmUgbGlrZWx5LCBpdCBqdXN0IHNpbXBseSBkb2VzbiYjMzk7dCBjYWxsIGEgaGFuZ3VwIGZ1bmN0aW9uIGluIHRoYXQgY2FzZS4gSSYjMzk7ZCBiZXR0ZXIgY29uZmlybSB0aGF0LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdHR5X2xkaXNjX2hhbmd1cGAgaXRzZWxmIGluIGBkcml2ZXJzL3R0eS90dHlfbGRpc2MuY2AgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIGEgTlVMTCBmdW5jdGlvbiBwb2ludGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R0eV9sZGlzY19oYW5ndXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy90dHkvdHR5Lmg9ODM9c3BlZWRfdCB0dHlfdGVybWlvc19pbnB1dF9iYXVkX3JhdGUoY29uc3Qgc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zKTtcbmRyaXZlcnMvdHR5L3R0eS5oOjg0OnZvaWQgdHR5X2xkaXNjX2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBib29sIHJlc2V0KTtcbmRyaXZlcnMvdHR5L3R0eS5oLTg1LWludCB0dHlfbGRpc2NfcmVpbml0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBkaXNjKTtcbi0tXG5kcml2ZXJzL3R0eS90dHlfaW8uYz01Njg9c3RhdGljIHZvaWQgX190dHlfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBleGl0X3Nlc3Npb24pXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmMtNjIwLVxuZHJpdmVycy90dHkvdHR5X2lvLmM6NjIxOlx0dHR5X2xkaXNjX2hhbmd1cCh0dHksIGNvbnNfZmlscCAhPSBOVUxMKTtcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTYyMi1cbi0tXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYz02NDc9aW50IHR0eV9sZGlzY19yZWluaXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGRpc2MpXG4tLVxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjc1LS8qKlxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM6Njc2OiAqIHR0eV9sZGlzY19oYW5ndXBcdC1cdGhhbmd1cCBsZGlzYyByZXNldFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjc3LSAqIEB0dHk6IHR0eSBiZWluZyBodW5nIHVwXG4tLVxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjg5LSAqL1xuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM6NjkwOnZvaWQgdHR5X2xkaXNjX2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBib29sIHJlaW5pdClcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTY5MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE4OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBjb2RlOgoKKipEaXZpbmcgaW50byB0aGUgVFRZIExpbmUgRGlzY2lwbGluZSBIYW5ndXAqKgoKT2theSwgdGltZSB0byBkaXNzZWN0IGB0dHlfbGRpc2NfaGFuZ3VwYC4gTGV0JiMzOTtzIHplcm8gaW4gb24gdGhhdCBmdW5jdGlvbiBpbiBgZHJpdmVycy90dHkvdHR5X2xkaXNjLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGhlcmU/JiMzNDsgVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb24gcmVsYXRlZCB0byBsaW5lIGRpc2NpcGxpbmUsIHNvIEkga25vdyBpdCYjMzk7cyBhIGNyaXRpY2FsIHBhcnQgb2YgaG93IHRoZSB0ZXJtaW5hbCBpbnRlcmFjdHMgd2l0aCBhcHBsaWNhdGlvbnMuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgd2UmIzM5O2xsIGJlIGRlYWxpbmcgd2l0aCBjb25uZWN0aW9uIHRlcm1pbmF0aW9uIGFuZCByZXNvdXJjZSBjbGVhbnVwLCBsaWtlbHkgYWZ0ZXIgYSBkZXZpY2UgZGlzY29ubmVjdCBvciBzaW1pbGFyIGV2ZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgaGFwcGVucyB0byB0aGUgbGluZSBkaXNjaXBsaW5lIHN0YXRlIHdoZW4gYSAmIzM0O2hhbmd1cCYjMzQ7IHNpZ25hbCBpcyByZWNlaXZlZC4gV2hhdCByZXNvdXJjZXMgYXJlIHJlbGVhc2VkPyBXaGF0IHNpZ25hbHMgYXJlIHNlbnQ/IEFuZCBtb3N0IGltcG9ydGFudGx5LCBob3cgaXMgdGhlIGNvcmUgVFRZIGxheWVyIG5vdGlmaWVkIG9mIHRoaXMgdGVybWluYXRpb24/IEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgYSBrZXkgcGxheWVyIGluIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IGFuZCBwcmV2ZW50aW5nIHJlc291cmNlIGxlYWtzIHdoZW4gYSBUVFkgY29ubmVjdGlvbiBpcyBzZXZlcmVkLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCBvcmNoZXN0cmF0ZXMgdGhlIHRyYW5zaXRpb24gdG8gYSBkaXNjb25uZWN0ZWQgc3RhdGUsIGFuZCBob3cgY2xlYW5seSBpdCBoYW5kbGVzIHRoZSBjbGVhbnVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy90dHkvdHR5X2xkaXNjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5MDpcdHZvaWQgdHR5X2xkaXNjX2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBib29sIHJlaW5pdClcbiA2OTE6XHR7XG4gNjkyOlx0XHRzdHJ1Y3QgdHR5X2xkaXNjICpsZDtcbiA2OTM6XHRcbiA2OTQ6XHRcdHR0eV9sZGlzY19kZWJ1Zyh0dHksIFwmIzM0OyVwOiBoYW5ndXBcXG5cJiMzNDssIHR0eS1cdTAwM2VsZGlzYyk7XG4gNjk1Olx0XG4gNjk2Olx0XHRsZCA9IHR0eV9sZGlzY19yZWYodHR5KTtcbiA2OTc6XHRcdGlmIChsZCAhPSBOVUxMKSB7XG4gNjk4Olx0XHRcdGlmIChsZC1cdTAwM2VvcHMtXHUwMDNlZmx1c2hfYnVmZmVyKVxuIDY5OTpcdFx0XHRcdGxkLVx1MDAzZW9wcy1cdTAwM2VmbHVzaF9idWZmZXIodHR5KTtcbiA3MDA6XHRcdFx0dHR5X2RyaXZlcl9mbHVzaF9idWZmZXIodHR5KTtcbiA3MDE6XHRcdFx0aWYgKCh0ZXN0X2JpdChUVFlfRE9fV1JJVEVfV0FLRVVQLCBcdTAwMjZ0dHktXHUwMDNlZmxhZ3MpKSBcdTAwMjZcdTAwMjZcbiA3MDI6XHRcdFx0ICAgIGxkLVx1MDAzZW9wcy1cdTAwM2V3cml0ZV93YWtldXApXG4gNzAzOlx0XHRcdFx0bGQtXHUwMDNlb3BzLVx1MDAzZXdyaXRlX3dha2V1cCh0dHkpO1xuIDcwNDpcdFx0XHRpZiAobGQtXHUwMDNlb3BzLVx1MDAzZWhhbmd1cClcbiA3MDU6XHRcdFx0XHRsZC1cdTAwM2VvcHMtXHUwMDNlaGFuZ3VwKHR0eSk7XG4gNzA2Olx0XHRcdHR0eV9sZGlzY19kZXJlZihsZCk7XG4gNzA3Olx0XHR9XG4gNzA4Olx0XG4gNzA5Olx0XHR3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbChcdTAwMjZ0dHktXHUwMDNld3JpdGVfd2FpdCwgRVBPTExPVVQpO1xuIDcxMDpcdFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGwoXHUwMDI2dHR5LVx1MDAzZXJlYWRfd2FpdCwgRVBPTExJTik7XG4gNzExOlx0XG4gNzEyOlx0XHQvKlxuIDcxMzpcdFx0ICogU2h1dGRvd24gdGhlIGN1cnJlbnQgbGluZSBkaXNjaXBsaW5lLCBhbmQgcmVzZXQgaXQgdG9cbiA3MTQ6XHRcdCAqIE5fVFRZIGlmIG5lZWQgYmUuXG4gNzE1Olx0XHQgKlxuIDcxNjpcdFx0ICogQXZvaWQgcmFjaW5nIHNldF9sZGlzYyBvciB0dHlfbGRpc2NfcmVsZWFzZVxuIDcxNzpcdFx0ICovXG4gNzE4Olx0XHR0dHlfbGRpc2NfbG9jayh0dHksIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTtcbiA3MTk6XHRcbiA3MjA6XHRcdGlmICh0dHktXHUwMDNlZHJpdmVyLVx1MDAzZWZsYWdzIFx1MDAyNiBUVFlfRFJJVkVSX1JFU0VUX1RFUk1JT1MpXG4gNzIxOlx0XHRcdHR0eV9yZXNldF90ZXJtaW9zKHR0eSk7XG4gNzIyOlx0XG4gNzIzOlx0XHRpZiAodHR5LVx1MDAzZWxkaXNjKSB7XG4gNzI0Olx0XHRcdGlmIChyZWluaXQpIHtcbiA3MjU6XHRcdFx0XHRpZiAodHR5X2xkaXNjX3JlaW5pdCh0dHksIHR0eS1cdTAwM2V0ZXJtaW9zLmNfbGluZSkgXHUwMDNjIDAgXHUwMDI2XHUwMDI2XG4gNzI2Olx0XHRcdFx0ICAgIHR0eV9sZGlzY19yZWluaXQodHR5LCBOX1RUWSkgXHUwMDNjIDApXG4gNzI3Olx0XHRcdFx0XHRXQVJOX09OKHR0eV9sZGlzY19yZWluaXQodHR5LCBOX05VTEwpIFx1MDAzYyAwKTtcbiA3Mjg6XHRcdFx0fSBlbHNlXG4gNzI5Olx0XHRcdFx0dHR5X2xkaXNjX2tpbGwodHR5KTtcbiA3MzA6XHRcdH1cbiA3MzE6XHRcdHR0eV9sZGlzY191bmxvY2sodHR5KTtcbiA3MzI6XHR9XG4gNzMzOlx0XG4gNzM0Olx0LyoqXG4gNzM1Olx0ICogdHR5X2xkaXNjX3NldHVwXHQtXHRvcGVuIGxpbmUgZGlzY2lwbGluZVxuIDczNjpcdCAqIEB0dHk6IHR0eSBiZWluZyBzaHV0IGRvd25cbiA3Mzc6XHQgKiBAb190dHk6IHBhaXIgdHR5IGZvciBwdHkvdHR5IHBhaXJzXG4gNzM4Olx0ICpcbiA3Mzk6XHQgKiBDYWxsZWQgZHVyaW5nIHRoZSBpbml0aWFsIG9wZW4gb2YgYSB0dHkvcHR5IHBhaXIgaW4gb3JkZXIgdG8gc2V0IHVwIHRoZSBsaW5lXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMwMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExpbmUgRGlzY2lwbGluZSBIYW5ndXAgUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBoYW5ndXAgc2VxdWVuY2UgZm9yIHRoZSBsaW5lIGRpc2NpcGxpbmUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpZiBgbGQtJmd0O29wcy0mZ3Q7aGFuZ3VwYCBpcyBOVUxMLCBpdCYjMzk7cyBzaW1wbHkgbm90IGNhbGxlZC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gQnV0IHRoZW4gSSByZW1lbWJlciB0aGF0IGBzbGlwX2hhbmd1cGAgKnVzZWQqIHRvIGNhbGwgYHNsaXBfY2xvc2VgLCBhbmQgdGhhdCBgc2xpcF9jbG9zZWAgaXMgcmVzcG9uc2libGUgZm9yIHVucmVnaXN0ZXJpbmcgdGhlIG5ldGRldiBhbmQgZnJlZWluZyBpdC4KClNvLCBpZiB3ZSAqcmVtb3ZlKiB0aGUgY2FsbCB0byBgc2xpcF9oYW5ndXBgLCB0aGUgaGFuZ3VwIHJvdXRpbmUgbWlnaHQgKm5vdCogY2FsbCBgc2xpcF9jbG9zZWAuIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgcHJvYmxlbSEgTGV0IG1lIGNoZWNrIHRoZSBzZXF1ZW5jZSB1c2luZyBgdHR5X2xkaXNjX2hhbmd1cGAsIGFzIEkgcmVjYWxsIGl0LiBBaCwgeWVzLCBpdCBjYWxscyBgbGQtJmd0O29wcy0mZ3Q7aGFuZ3VwYCBpZiBpdCBleGlzdHM6CgpgYGBjCglpZiAobGQtJmd0O29wcy0mZ3Q7aGFuZ3VwKQoJCWxkLSZndDtvcHMtJmd0O2hhbmd1cCh0dHkpOwpgYGAKClRoZW4sIGNydWNpYWxseSwgaXQgcHJvY2VlZHMgdG8gY2hlY2sgYW5kLCBwb3RlbnRpYWxseSwgcmVpbml0aWFsaXplIHRoZSBsaW5lIGRpc2NpcGxpbmU6CgpgYGBjCglpZiAodHR5LSZndDtsZGlzYykgewoJCWlmIChyZWluaXQpIHsKCQkJaWYgKHR0eV9sZGlzY19yZWluaXQodHR5LCB0dHktJmd0O3Rlcm1pb3MuY19saW5lKSAmbHQ7IDAgJmFtcDsmYW1wOwoJCQkgICAgdHR5X2xkaXNjX3JlaW5pdCh0dHksIE5fVFRZKSAmbHQ7IDApCgkJCQlXQVJOX09OKHR0eV9sZGlzY19yZWluaXQodHR5LCBOX05VTEwpICZsdDsgMCk7CgkJfSBlbHNlCgkJCXR0eV9sZGlzY19raWxsKHR0eSk7Cgl9CmBgYAoKT2theSwgbm93IGl0IG1ha2VzIHNlbnNlLiBgdHR5X2xkaXNjX3JlaW5pdGAgYWN0dWFsbHkgY2FsbHMgYHR0eV9sZGlzY19jbG9zZSh0dHksIHR0eS0mZ3Q7bGRpc2MpYCwgd2hpY2ggaW4gdHVybiBjYWxscyBgbGQtJmd0O29wcy0mZ3Q7Y2xvc2UodHR5KWAuIEFoLCBzbyB0aGF0ICpzaG91bGQqIGNsZWFuIHVwLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYSBjdXN0b20gYGhhbmd1cGAgcm91dGluZSBleGlzdHMhCgpCdXQgbGV0IG1lIHZlcmlmeSB0aGF0IHRoZSBgdHR5X2xkaXNjX3JlaW5pdGAgYW5kIGB0dHlfbGRpc2NfY2xvc2VgIHJvdXRpbmVzIGFyZSBpbmRlZWQgYmVoYXZpbmcgYXMgSSBleHBlY3QuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhY3R1YWxseSBmcmVlaW5nIHRoZSByZXNvdXJjZXMgcHJvcGVybHkuIExldCBtZSBnbyBjaGVjayB0aG9zZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3R0eS90dHlfbGRpc2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY0NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjQ3Olx0aW50IHR0eV9sZGlzY19yZWluaXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGRpc2MpXG4gNjQ4Olx0e1xuIDY0OTpcdFx0c3RydWN0IHR0eV9sZGlzYyAqbGQ7XG4gNjUwOlx0XHRpbnQgcmV0dmFsO1xuIDY1MTpcdFxuIDY1MjpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZ0dHktXHUwMDNlbGRpc2Nfc2VtKTtcbiA2NTM6XHRcdGxkID0gdHR5X2xkaXNjX2dldCh0dHksIGRpc2MpO1xuIDY1NDpcdFx0aWYgKElTX0VSUihsZCkpIHtcbiA2NTU6XHRcdFx0QlVHX09OKGRpc2MgPT0gTl9UVFkpO1xuIDY1NjpcdFx0XHRyZXR1cm4gUFRSX0VSUihsZCk7XG4gNjU3Olx0XHR9XG4gNjU4Olx0XG4gNjU5Olx0XHRpZiAodHR5LVx1MDAzZWxkaXNjKSB7XG4gNjYwOlx0XHRcdHR0eV9sZGlzY19jbG9zZSh0dHksIHR0eS1cdTAwM2VsZGlzYyk7XG4gNjYxOlx0XHRcdHR0eV9sZGlzY19wdXQodHR5LVx1MDAzZWxkaXNjKTtcbiA2NjI6XHRcdH1cbiA2NjM6XHRcbiA2NjQ6XHRcdC8qIHN3aXRjaCB0aGUgbGluZSBkaXNjaXBsaW5lICovXG4gNjY1Olx0XHR0dHktXHUwMDNlbGRpc2MgPSBsZDtcbiA2NjY6XHRcdHR0eV9zZXRfdGVybWlvc19sZGlzYyh0dHksIGRpc2MpO1xuIDY2NzpcdFx0cmV0dmFsID0gdHR5X2xkaXNjX29wZW4odHR5LCB0dHktXHUwMDNlbGRpc2MpO1xuIDY2ODpcdFx0aWYgKHJldHZhbCkge1xuIDY2OTpcdFx0XHR0dHlfbGRpc2NfcHV0KHR0eS1cdTAwM2VsZGlzYyk7XG4gNjcwOlx0XHRcdHR0eS1cdTAwM2VsZGlzYyA9IE5VTEw7XG4gNjcxOlx0XHR9XG4gNjcyOlx0XHRyZXR1cm4gcmV0dmFsO1xuIDY3MzpcdH1cbiA2NzQ6XHRcbiA2NzU6XHQvKipcbiA2NzY6XHQgKiB0dHlfbGRpc2NfaGFuZ3VwXHQtXHRoYW5ndXAgbGRpc2MgcmVzZXRcbiA2Nzc6XHQgKiBAdHR5OiB0dHkgYmVpbmcgaHVuZyB1cFxuIDY3ODpcdCAqIEByZWluaXQ6IHdoZXRoZXIgdG8gcmUtaW5pdGlhbGlzZSB0aGUgdHR5XG4gNjc5Olx0ICpcbiA2ODA6XHQgKiBTb21lIHR0eSBkZXZpY2VzIHJlc2V0IHRoZWlyIHRlcm1pb3Mgd2hlbiB0aGV5IHJlY2VpdmUgYSBoYW5ndXAgZXZlbnQuIEluXG4gNjgxOlx0ICogdGhhdCBzaXR1YXRpb24gd2UgbXVzdCBhbHNvIHN3aXRjaCBiYWNrIHRvICVOX1RUWSBwcm9wZXJseSBiZWZvcmUgd2UgcmVzZXRcbiA2ODI6XHQgKiB0aGUgdGVybWlvcyBkYXRhLlxuIDY4MzpcdCAqXG4gNjg0Olx0ICogTG9ja2luZzogV2UgY2FuIHRha2UgdGhlIGxkaXNjIG11dGV4IGFzIHRoZSByZXN0IG9mIHRoZSBjb2RlIGlzIGNhcmVmdWwgdG9cbiA2ODU6XHQgKiBhbGxvdyBmb3IgdGhpcy5cbiA2ODY6XHQgKlxuIDY4NzpcdCAqIEluIHRoZSBwdHkgcGFpciBjYXNlIHRoaXMgb2NjdXJzIGluIHRoZSBjbG9zZSgpIHBhdGggb2YgdGhlIHR0eSBpdHNlbGYgc28gd2VcbiA2ODg6XHQgKiBtdXN0IGJlIGNhcmVmdWwgYWJvdXQgbG9ja2luZyBydWxlcy5cbiA2ODk6XHQgKi9cbiA2OTA6XHR2b2lkIHR0eV9sZGlzY19oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgYm9vbCByZWluaXQpXG4gNjkxOlx0e1xuIDY5MjpcdFx0c3RydWN0IHR0eV9sZGlzYyAqbGQ7XG4gNjkzOlx0XG4gNjk0Olx0XHR0dHlfbGRpc2NfZGVidWcodHR5LCBcJiMzNDslcDogaGFuZ3VwXFxuXCYjMzQ7LCB0dHktXHUwMDNlbGRpc2MpO1xuIDY5NTpcdFxuIDY5NjpcdFx0bGQgPSB0dHlfbGRpc2NfcmVmKHR0eSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg3NQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBzeXN0ZW1zIGVuZ2luZWVyOgoKKipEZWNvbnN0cnVjdGluZyBMaW5lIERpc2NpcGxpbmUgUmUtSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBgdHR5X2xkaXNjX3JlaW5pdGAgZnVuY3Rpb24uIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmTigJRpdHMgam9iIGlzIHRvIGVzc2VudGlhbGx5IHJlZnJlc2ggb3IgcmVzZXQgdGhlIGxpbmUgZGlzY2lwbGluZSBhc3NvY2lhdGVkIHdpdGggYSB0ZXJtaW5hbC4gVGhlIGNvcmUgb2YgdGhpcyBwcm9jZXNzIHNlZW1zIHRvIGJlIGEgY2FsbCB0byBgdHR5X2xkaXNjX2Nsb3NlYCwgYW5kIHRoZSBrZXkgaGVyZSBpcyB0aGUgYXJndW1lbnRzOiB0aGUgYHR0eWAgc3RydWN0dXJlIGl0c2VsZiwgd2hpY2ggcmVwcmVzZW50cyB0aGUgdGVybWluYWwgZGV2aWNlLCBhbmQsIGNydWNpYWxseSwgYHR0eS0mZ3Q7bGRpc2NgLCB3aGljaCBnaXZlcyBhIGhhbmRsZSB0byB0aGUgY3VycmVudGx5IGFjdGl2ZSBsaW5lIGRpc2NpcGxpbmUuIFRoYXQgc2VlbXMgbG9naWNhbCDigJMgdG8gcmUtaW5pdGlhbGl6ZSwgeW91IGZpcnN0IGhhdmUgdG8gc2h1dCBkb3duIHRoZSBvbGQgb25lLgoKTm93LCB0aGlzIHBpcXVlcyBteSBpbnRlcmVzdC4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgY2FsbCB0byBgdHR5X2xkaXNjX2Nsb3NlYC4gV2hhdCYjMzk7cyB0aGUgc3BlY2lmaWMgYmVoYXZpb3IgdGhlcmU/IFdoYXQgcmVzb3VyY2VzIGRvZXMgaXQgcmVsZWFzZT8gQXJlIHRoZXJlIHN1YnRsZSBsb2NraW5nIGNvbnNpZGVyYXRpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIG9yIHBlcmhhcHMgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgZXhpc3QgYmV0d2VlbiBgdHR5X2xkaXNjX3JlaW5pdGAgYW5kIG90aGVyIGtlcm5lbCBvcGVyYXRpb25zPyBBbmQsIGluIHRoYXQgY29udGV4dCwgd2hhdCBhYm91dCB0aGF0IGB0dHlfbGRpc2Nfa2lsbGA/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCBgdHR5X2xkaXNjX2Nsb3NlYD8gQXJlIHRoZXkgYW5hbG9nb3VzIGZ1bmN0aW9ucywgb3IgYXJlIHRoZXkgbWVhbnQgZm9yIGRpc3RpbmN0IG9wZXJhdGlvbnM/IElzIGB0dHlfbGRpc2Nfa2lsbGAgbWVhbnQgdG8gdmlvbGVudGx5IGVqZWN0IGEgbGluZSBkaXNjaXBsaW5lLCB3aGVyZSBgdHR5X2xkaXNjX2Nsb3NlYCBpcyBtb3JlIGdyYWNlZnVsPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dHlfbGRpc2Nfa2lsbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3R0eS90dHlfbGRpc2MuYz01OTc9RVhQT1JUX1NZTUJPTF9HUEwodHR5X3NldF9sZGlzYyk7XG4tLVxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNTk5LS8qKlxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM6NjAwOiAqIHR0eV9sZGlzY19raWxsXHQtXHR0ZWFyZG93biBsZGlzY1xuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjAxLSAqIEB0dHk6IHR0eSBiZWluZyByZWxlYXNlZFxuLS1cbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTYwNC0gKi9cbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jOjYwNTpzdGF0aWMgdm9pZCB0dHlfbGRpc2Nfa2lsbChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjA2LXtcbi0tXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYz02OTA9dm9pZCB0dHlfbGRpc2NfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGJvb2wgcmVpbml0KVxuLS1cbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTcyOC1cdFx0fSBlbHNlXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYzo3Mjk6XHRcdFx0dHR5X2xkaXNjX2tpbGwodHR5KTtcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTczMC1cdH1cbi0tXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYz03NzE9dm9pZCB0dHlfbGRpc2NfcmVsZWFzZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuLS1cbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTc4MC1cdHR0eV9sZGlzY19sb2NrX3BhaXIodHR5LCBvX3R0eSk7XG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYzo3ODE6XHR0dHlfbGRpc2Nfa2lsbCh0dHkpO1xuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNzgyLVx0aWYgKG9fdHR5KVxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM6NzgzOlx0XHR0dHlfbGRpc2Nfa2lsbChvX3R0eSk7XG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy03ODQtXHR0dHlfbGRpc2NfdW5sb2NrX3BhaXIodHR5LCBvX3R0eSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MTAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYHR0eV9sZGlzY19raWxsYCoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IG1lbnRpb25zIGB0dHlfbGRpc2Nfa2lsbGAuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgbGluZSBkaXNjaXBsaW5lcyB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBUVFkgc3Vic3lzdGVtLiBJJiMzOTttIGFzc3VtaW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgcmVzcG9uc2libGUgZm9yLCB3ZWxsLCBraWxsaW5nIGEgbGluZSBkaXNjaXBsaW5lLCBsaWtlbHkgYXMgcGFydCBvZiBpdHMgZGUtaW5pdGlhbGl6YXRpb24gb3Igd2hlbiB0aGUgYXNzb2NpYXRlZCBUVFkgZGV2aWNlIGlzIGJlaW5nIGNsb3NlZCBvciByZWNvbmZpZ3VyZWQuCgpNeSBpbml0aWFsIHRob3VnaHRzIGFyZSBhcm91bmQgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIHdoYXQga2luZCBvZiBjbGVhbnVwIGRvZXMgdGhpcyBmdW5jdGlvbiBwZXJmb3JtPyBEb2VzIGl0IGZyZWUgYW55IGFsbG9jYXRlZCBidWZmZXJzLCByZWxlYXNlIGxvY2tzLCBvciBkZXJlZ2lzdGVyIGFueSBjYWxsYmFja3MgYXNzb2NpYXRlZCB3aXRoIHRoYXQgbGluZSBkaXNjaXBsaW5lPyBJJiMzOTttIHBpY3R1cmluZyBzY2VuYXJpb3Mgd2hlcmUgYSByb2d1ZSBsaW5lIGRpc2NpcGxpbmUgY291bGQgbGVhayByZXNvdXJjZXMgaWYgdGhpcyBmdW5jdGlvbiBpc24mIzM5O3QgaW1wbGVtZW50ZWQgY29ycmVjdGx5LCBsZWFkaW5nIHRvIGtlcm5lbCBpbnN0YWJpbGl0eSBvciBldmVuIGNyYXNoZXMuIEkgYWxzbyB3YW50IHRvIGNvbnNpZGVyIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucyB3aXRoIG90aGVyIGtlcm5lbCB0aHJlYWRzIHRoYXQgbWlnaHQgc3RpbGwgYmUgdXNpbmcgdGhlIGxpbmUgZGlzY2lwbGluZSBvciByZWZlcmVuY2luZyBpdHMgZGF0YSBzdHJ1Y3R1cmVzLgoKVGhlbiBJIGdldCB0aGlua2luZyBhYm91dCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVFRZIGRyaXZlci4gRG9lcyBgdHR5X2xkaXNjX2tpbGxgIHNpZ25hbCB0aGUgZHJpdmVyIGluIGFueSB3YXk/IERvZXMgaXQgbmVlZCB0byBjb29yZGluYXRlIHdpdGggdGhlIGRyaXZlciB0byBlbnN1cmUgYSBjbGVhbiB0ZWFyZG93bj8gSSYjMzk7bSBtZW50YWxseSBjaGVja2luZyB0aGUgdHlwaWNhbCBzdHJ1Y3R1cmUgb2YgdGhlIFRUWSBkcml2ZXIgYW5kIGxpbmUgZGlzY2lwbGluZSBpbnRlcmFjdGlvbiwgYW5kIHRoZSBsaWtlbHkgcGxhY2VzIHdoZXJlIHRoaXMgaW50ZXJhY3Rpb24gd291bGQgYmUgbmVjZXNzYXJ5LiBJcyB0aGVyZSBhIGNoYWluIG9mIGZ1bmN0aW9uIGNhbGxzPyBXaGF0IGxvY2tzIGFyZSBpbnZvbHZlZD8gV2hhdCYjMzk7cyB0aGUgZXJyb3IgaGFuZGxpbmcgbGlrZSwgYW5kIHdoYXQgaGFwcGVucyBpbiB0aGUgY2FzZSBvZiBhIGZhaWxlZCBjbGVhbi11cD8KCkZ1cnRoZXJtb3JlLCBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgaG93IGxpbmUgZGlzY2lwbGluZXMgYXJlIGluc3RhbGxlZCBhbmQgcmVtb3ZlZCBpbiBnZW5lcmFsLiBJcyB0aGVyZSBhIGNsZWFyIG9yZGVyaW5nIG9mIG9wZXJhdGlvbnM/IERvZXMgYHR0eV9sZGlzY19raWxsYCBhY2NvdW50IGZvciBkaWZmZXJlbnQgc2l0dWF0aW9ucyBvZiBhIGxpbmUgZGlzY2lwbGluZT8gSSB3aWxsIGNvbnNpZGVyIGRpZmZlcmVudCBsaW5lIGRpc2NpcGxpbmVzIHdpdGggZGlmZmVyZW50IGNhcGFiaWxpdGllcy4KCkZpbmFsbHksIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBjb25jdXJyZW5jeSBhbmQgc3luY2hyb25pemF0aW9uLiBJJiMzOTtkIHdhbnQgdG8gY2hlY2sgaG93IHRoaXMgZnVuY3Rpb24gaXMgcHJvdGVjdGVkLCBhbmQgd2hldGhlciBpdCYjMzk7cyBzYWZlIHRvIGNhbGwgZnJvbSBtdWx0aXBsZSBjb250ZXh0cy4gRG9lcyBpdCB1c2Ugc3BpbmxvY2tzLCBtdXRleGVzLCBvciBSQ1U/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGRlYWRsb2Nrcz8gSXQmIzM5O3MgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGF0IGFueSBjbGVhbnVwIGlzIGF0b21pYyBhbmQgZG9lc24mIzM5O3QgbGVhdmUgdGhlIHN5c3RlbSBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGB0dHlfc3RydWN0YCwgdGhlIGBsZGlzY2Agc3RydWN0dXJlIGl0c2VsZiwgYW5kIHRoZSBkcml2ZXImIzM5O3MgcHJpdmF0ZSBkYXRhLiBTbywgbXkgbWluZCBpcyBhbHJlYWR5IHJ1bm5pbmcgdGhyb3VnaCBkaWZmZXJlbnQgY29kZSBwYXRocyBhbmQgcG9zc2libGUgZmFpbHVyZSBzY2VuYXJpb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy90dHkvdHR5X2xkaXNjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYwNTpcdHN0YXRpYyB2b2lkIHR0eV9sZGlzY19raWxsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4gNjA2Olx0e1xuIDYwNzpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZ0dHktXHUwMDNlbGRpc2Nfc2VtKTtcbiA2MDg6XHRcdGlmICghdHR5LVx1MDAzZWxkaXNjKVxuIDYwOTpcdFx0XHRyZXR1cm47XG4gNjEwOlx0XHQvKlxuIDYxMTpcdFx0ICogTm93IGtpbGwgb2ZmIHRoZSBsZGlzY1xuIDYxMjpcdFx0ICovXG4gNjEzOlx0XHR0dHlfbGRpc2NfY2xvc2UodHR5LCB0dHktXHUwMDNlbGRpc2MpO1xuIDYxNDpcdFx0dHR5X2xkaXNjX3B1dCh0dHktXHUwMDNlbGRpc2MpO1xuIDYxNTpcdFx0LyogRm9yY2UgYW4gb29wcyBpZiB3ZSBtZXNzIHRoaXMgdXAgKi9cbiA2MTY6XHRcdHR0eS1cdTAwM2VsZGlzYyA9IE5VTEw7XG4gNjE3Olx0fVxuIDYxODpcdFxuIDYxOTpcdC8qKlxuIDYyMDpcdCAqIHR0eV9yZXNldF90ZXJtaW9zXHQtXHRyZXNldCB0ZXJtaW5hbCBzdGF0ZVxuIDYyMTpcdCAqIEB0dHk6IHR0eSB0byByZXNldFxuIDYyMjpcdCAqXG4gNjIzOlx0ICogUmVzdG9yZSBhIHRlcm1pbmFsIHRvIHRoZSBkcml2ZXIgZGVmYXVsdCBzdGF0ZS5cbiA2MjQ6XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU1MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEb3VibGUtQ2hlY2tpbmcgdGhlIExpbmUgRGlzY2lwbGluZSBDbGVhbnVwKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNsZWFudXAgc2VxdWVuY2UgZm9yIHRoZSBUVFkgbGluZSBkaXNjaXBsaW5lLCBhbmQgc29tZXRoaW5nJiMzOTtzIGJ1Z2dpbmcgbWUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgYHR0eV9sZGlzY19raWxsYCBpcyBjYWxsaW5nIGB0dHlfbGRpc2NfY2xvc2VgLiBOb3csIHJlbWVtYmVyIHRoYXQgYHNsaXBfaGFuZ3VwYCB3YXMgYWxyZWFkeSwgaW5kZXBlbmRlbnRseSwgY2FsbGluZyBgc2xpcF9jbG9zZWAuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSYjMzk7cyBhbiB1bm5lY2Vzc2FyeSBkb3VibGUgY2FsbC4KCkhlcmUmIzM5O3MgdGhlIGNoYWluOiBgc2xpcF9oYW5ndXBgIGNhbGxzIGBzbGlwX2Nsb3NlYC4gVGhlbiwgYHR0eV9sZGlzY19oYW5ndXBgIGNhbGxzIGVpdGhlciBgdHR5X2xkaXNjX3JlaW5pdGAgb3IgYHR0eV9sZGlzY19raWxsYC4gQm90aCBvZiB0aG9zZSBjYWxsIGB0dHlfbGRpc2NfY2xvc2VgLCBhbmQgKnRoYXQqIGNhbGxzIGBzbGlwX2Nsb3NlYC4gU28sIGlmIHRoYXQmIzM5O3MgdGhlIGNhc2UsIGBzbGlwX2Nsb3NlYCB3b3VsZCBiZSBleGVjdXRlZCB0d2ljZSBmb3Igd2hhdCBzaG91bGQgYmUgYSBzaW5nbGUgYWN0aW9uLiBUaGF0IGNhbiYjMzk7dCBiZSByaWdodC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gVGltZSB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHR0eV9sZGlzY19jbG9zZWAgYW5kIHZlcmlmeSB3aGV0aGVyIG15IHN1c3BpY2lvbiBpcyBhY2N1cmF0ZSwgb3Igd2hldGhlciB0aGVyZSYjMzk7cyBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIEkmIzM5O20gbWlzc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3R0eS90dHlfbGRpc2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDYwOlx0ICogdHR5X2xkaXNjX2ZhaWx0b1x0LVx0aGVscGVyIGZvciBsZGlzYyBmYWlsYmFja1xuIDQ2MTpcdCAqIEB0dHk6IHR0eSB0byBvcGVuIHRoZSBsZGlzYyBvblxuIDQ2MjpcdCAqIEBsZDogbGRpc2Mgd2UgYXJlIHRyeWluZyB0byBmYWlsIGJhY2sgdG9cbiA0NjM6XHQgKlxuIDQ2NDpcdCAqIEhlbHBlciB0byB0cnkgYW5kIHJlY292ZXIgYSB0dHkgd2hlbiBzd2l0Y2hpbmcgYmFjayB0byB0aGUgb2xkIGxkaXNjIGZhaWxzXG4gNDY1Olx0ICogYW5kIHdlIG5lZWQgc29tZXRoaW5nIGF0dGFjaGVkLlxuIDQ2NjpcdCAqL1xuIDQ2NzpcdHN0YXRpYyBpbnQgdHR5X2xkaXNjX2ZhaWx0byhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgbGQpXG4gNDY4Olx0e1xuIDQ2OTpcdFx0c3RydWN0IHR0eV9sZGlzYyAqZGlzYyA9IHR0eV9sZGlzY19nZXQodHR5LCBsZCk7XG4gNDcwOlx0XHRpbnQgcjtcbiA0NzE6XHRcbiA0NzI6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2dHR5LVx1MDAzZWxkaXNjX3NlbSk7XG4gNDczOlx0XHRpZiAoSVNfRVJSKGRpc2MpKVxuIDQ3NDpcdFx0XHRyZXR1cm4gUFRSX0VSUihkaXNjKTtcbiA0NzU6XHRcdHR0eS1cdTAwM2VsZGlzYyA9IGRpc2M7XG4gNDc2Olx0XHR0dHlfc2V0X3Rlcm1pb3NfbGRpc2ModHR5LCBsZCk7XG4gNDc3Olx0XHRyID0gdHR5X2xkaXNjX29wZW4odHR5LCBkaXNjKTtcbiA0Nzg6XHRcdGlmIChyIFx1MDAzYyAwKVxuIDQ3OTpcdFx0XHR0dHlfbGRpc2NfcHV0KGRpc2MpO1xuIDQ4MDpcdFx0cmV0dXJuIHI7XG4gNDgxOlx0fVxuIDQ4MjpcdFxuIDQ4MzpcdC8qKlxuIDQ4NDpcdCAqIHR0eV9sZGlzY19yZXN0b3JlXHQtXHRoZWxwZXIgZm9yIHR0eSBsZGlzYyBjaGFuZ2VcbiA0ODU6XHQgKiBAdHR5OiB0dHkgdG8gcmVjb3ZlclxuIDQ4NjpcdCAqIEBvbGQ6IHByZXZpb3VzIGxkaXNjXG4gNDg3Olx0ICpcbiA0ODg6XHQgKiBSZXN0b3JlIHRoZSBwcmV2aW91cyBsaW5lIGRpc2NpcGxpbmUgb3IgJU5fVFRZIHdoZW4gYSBsaW5lIGRpc2NpcGxpbmUgY2hhbmdlXG4gNDg5Olx0ICogZmFpbHMgZHVlIHRvIGFuIG9wZW4gZXJyb3JcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQyNwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSHVudGluZyBEb3duIGB0dHlfbGRpc2NfY2xvc2VgKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdHR5X2xkaXNjX2Nsb3NlYC4gSXQmIzM5O3MgYSBzdGFuZGFyZCBmdW5jdGlvbiwgc28gSSYjMzk7bSBub3QgZXhwZWN0aW5nIGFueXRoaW5nIHRvbyBlc290ZXJpYywgYnV0IEkgc3RpbGwgd2FudCB0byBiZSBwcmVjaXNlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGp1c3Qgc2VhcmNoIHRoZSBzb3VyY2UgY29kZSBkaXJlY3RseSwgbGlrZWx5IHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIGEgc2ltaWxhciB0b29sIHRvIHBpbnBvaW50IGl0cyBkZWZpbml0aW9uLiBLbm93aW5nIHRoZSBsaWtlbHkgY29udGV4dCwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBpdCBpbiB0aGUgY29yZSB0dHkgZHJpdmVyIGNvZGUsIHBlcmhhcHMgdW5kZXIgdGhlIGBkcml2ZXJzL3R0eS9gIGRpcmVjdG9yeSwgb3IgbWF5YmUgd2l0aGluIHNvbWUgZ2VuZXJpYyBsaW5lIGRpc2NpcGxpbmUgKGxkaXNjKSBpbmZyYXN0cnVjdHVyZSBmaWxlcy4KCknigJlsbCBhbHNvIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBkZWZpbml0aW9uIG1pZ2h0IGJlIG1hY3JvLWRlZmluZWQsIG9yIHBhcnQgb2YgYSBzdHJ1Y3R1cmUsIHJhdGhlciB0aGFuIGEgc2luZ2xlIGZ1bmN0aW9uIGRlZmluaXRpb24sIHNvIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBvdXQgZm9yIHRob3NlIHBvc3NpYmlsaXRpZXMgYXMgd2VsbC4gSWYgdGhlIGltbWVkaWF0ZSBzZWFyY2ggaXMgdW5mcnVpdGZ1bCwgSSYjMzk7bGwgZXhwYW5kIHRoZSBzZWFyY2gsIGxvb2tpbmcgYXQgaGVhZGVyIGZpbGVzIGFuZCBpbmNsdWRlIGRpcmVjdG9yaWVzIHRvIHRyeSBhbmQgaWRlbnRpZnkgZnVuY3Rpb24gcHJvdG90eXBlcyBvciBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdGhlIGZ1bmN0aW9uIGlzIHJlZmVyZW5jZWQsIGRlZmluZWQsIG9yIHVzZWQuCgpJJiMzOTtsbCBiZSBtaW5kZnVsIG9mIHBvdGVudGlhbCBjb21wbGV4aXRpZXMsIHN1Y2ggYXMgd2hldGhlciBgdHR5X2xkaXNjX2Nsb3NlYCBpcyBpbXBsZW1lbnRlZCBhcyBhIGRpcmVjdCBjYWxsLCBvciBpbmRpcmVjdGx5LCB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzIGluIGEgYHR0eV9sZGlzY19vcHNgIHN0cnVjdHVyZS4gSW4gdGhhdCBjYXNlLCBJJiMzOTtsbCBuZWVkIHRvIGZpbmQgd2hlcmUgdGhvc2Ugb3BlcmF0aW9ucyBhcmUgcmVnaXN0ZXJlZC4gSeKAmWxsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHNwZWNpZmljIGxpbmUgZGlzY2lwbGluZSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlaXIgb3duIGJlaGF2aW9yLiBJIGFudGljaXBhdGUgbmVlZGluZyB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgdHR5IGRyaXZlciBjb3JlLCB0aGUgbGluZSBkaXNjaXBsaW5lLCBhbmQgdGhlIGRldmljZSBkcml2ZXJzIHRvIGZ1bGx5IGdyYXNwIGl0cyBmdW5jdGlvbmFsaXR5IGFuZCBpdHMgaW1wYWN0LiBVbHRpbWF0ZWx5LCBJJiMzOTttIGFpbWluZyBmb3IgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBgdHR5X2xkaXNjX2Nsb3NlYCBkb2VzLCBob3cgaXQmIzM5O3MgY2FsbGVkLCBhbmQgd2hhdCB0aGUgaW1wb3J0YW50IHNpZGUtZWZmZWN0cyBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R0eV9sZGlzY19jbG9zZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3R0eS90dHlfbGRpc2MuYz00MjY9c3RhdGljIGludCB0dHlfbGRpc2Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdHR5X2xkaXNjICpsZClcbi0tXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy00NDItLyoqXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYzo0NDM6ICogdHR5X2xkaXNjX2Nsb3NlXHRcdC1cdGNsb3NlIGEgbGluZSBkaXNjaXBsaW5lXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy00NDQtICogQHR0eTogdHR5IHdlIGFyZSBvcGVuaW5nIHRoZSBsZGlzYyBvblxuLS1cbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTQ0OC0gKi9cbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jOjQ0OTpzdGF0aWMgdm9pZCB0dHlfbGRpc2NfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHR0eV9sZGlzYyAqbGQpXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy00NTAte1xuLS1cbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jPTUxOT1pbnQgdHR5X3NldF9sZGlzYyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgZGlzYylcbi0tXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy01NTYtXHQvKiBTaHV0ZG93biB0aGUgb2xkIGRpc2NpcGxpbmUuICovXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYzo1NTc6XHR0dHlfbGRpc2NfY2xvc2UodHR5LCBvbGRfbGRpc2MpO1xuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNTU4LVxuLS1cbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jPTYwNT1zdGF0aWMgdm9pZCB0dHlfbGRpc2Nfa2lsbChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuLS1cbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTYxMi1cdCAqL1xuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM6NjEzOlx0dHR5X2xkaXNjX2Nsb3NlKHR0eSwgdHR5LVx1MDAzZWxkaXNjKTtcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTYxNC1cdHR0eV9sZGlzY19wdXQodHR5LVx1MDAzZWxkaXNjKTtcbi0tXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYz02NDc9aW50IHR0eV9sZGlzY19yZWluaXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGRpc2MpXG4tLVxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjU5LVx0aWYgKHR0eS1cdTAwM2VsZGlzYykge1xuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM6NjYwOlx0XHR0dHlfbGRpc2NfY2xvc2UodHR5LCB0dHktXHUwMDNlbGRpc2MpO1xuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjYxLVx0XHR0dHlfbGRpc2NfcHV0KHR0eS1cdTAwM2VsZGlzYyk7XG4tLVxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM9NzQzPWludCB0dHlfbGRpc2Nfc2V0dXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHR0eV9zdHJ1Y3QgKm9fdHR5KVxuLS1cbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTc1Ni1cdFx0aWYgKHJldHZhbCkge1xuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM6NzU3Olx0XHRcdHR0eV9sZGlzY19jbG9zZSh0dHksIHR0eS1cdTAwM2VsZGlzYyk7XG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy03NTgtXHRcdFx0cmV0dXJuIHJldHZhbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU0NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsIGluIHRoZSBmaWVsZCwgc3BlYWtpbmcgZGlyZWN0bHkgdG8gYW5vdGhlciBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIGB0dHlfbGRpc2NfY2xvc2VgKioKCkFscmlnaHQsIGxldCYjMzk7cyBjcmFjayBvcGVuIGB0dHlfbGRpc2NfY2xvc2VgLiBJbW1lZGlhdGVseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBUaGlzIGlzIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIGZvciBhIGxpbmUgZGlzY2lwbGluZSwgYW5kIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGNsb3NpbmcgaXQuIFNvLCBJIGtub3cgdGhpcyBpcyB3aGVyZSB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHBhcnRpY3VsYXIgbGluZSBkaXNjaXBsaW5lIGluc3RhbmNlIGFyZSBnb2luZyB0byBiZSByZWxlYXNlZC4gVGhpcyBtZWFucyBidWZmZXJzLCB0aW1lcnMsIGFueSBjdXN0b20gc3RhdGUgdGhlIGRpc2NpcGxpbmUgbWFpbnRhaW5zIOKAkyBhbGwgb2YgaXQgbmVlZHMgdG8gYmUgaGFuZGxlZCBoZXJlLgoKRmlyc3QsIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIENsb3NpbmcgYSBsaW5lIGRpc2NpcGxpbmUgY2FuIGhhcHBlbiBhdCBhbnkgdGltZSwgcG9zc2libHkgd2hpbGUgZGF0YSBpcyBzdGlsbCBiZWluZyBwcm9jZXNzZWQgb3IgdHJhbnNtaXR0ZWQuIFN5bmNocm9uaXphdGlvbiBpcyBrZXkuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgbm8gb3RoZXIgdGhyZWFkIGlzIHN0aWxsIGFjY2Vzc2luZyB0aGUgbGluZSBkaXNjaXBsaW5lJiMzOTtzIHN0cnVjdHVyZXMgb3IgYnVmZmVycyBkdXJpbmcgdGhlIGNsZWFudXAuIFNwaW5sb2NrcywgbXV0ZXhlcy4uLiBJJiMzOTtsbCBiZSBzZWFyY2hpbmcgZm9yIGhvdyB0aGV5IGFyZSBpbXBsZW1lbnRlZCBoZXJlLCBhbmQgbWFraW5nIHN1cmUgdGhhdCB0aGUgbG9ja3MgYXJlIGhlbGQgd2hlcmUgYXBwcm9wcmlhdGUuIEkmIzM5O20gYWxzbyB3YXRjaGluZyBvdXQgZm9yIGlzc3VlcyBsaWtlIGRvdWJsZSBmcmVlcyBvciBtZW1vcnkgbGVha3MuIFdlIHdhbnQgdG8gYmUgY2VydGFpbiB0aGF0IGV2ZXJ5IGFsbG9jYXRlZCByZXNvdXJjZSBpcyBmcmVlZCBjb3JyZWN0bHkgd2hlbiB0aGUgbGluZSBkaXNjaXBsaW5lIGlzIGNsb3NlZC4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBUVFkgbGF5ZXIgaXRzZWxmLiBJcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBkaXJlY3RseSBieSB0aGUgVFRZIGNvcmUsIG9yIGFyZSB0aGVyZSBjYWxsYmFja3MgaW52b2x2ZWQ/IEhvdyBpcyB0aGUgbGluZSBkaXNjaXBsaW5lJiMzOTtzIHN0YXRlIHVwZGF0ZWQgaW4gcmVsYXRpb24gdG8gdGhlIFRUWSYjMzk7cyBzdGF0ZT8gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgVFRZIHN0cnVjdHVyZXMgdGhhdCBuZWVkIHRvIGJlIGNsZWFyZWQgb3IgcmVzZXQ/CgpJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIGEgcmVzb3VyY2UgY2FuJiMzOTt0IGJlIGZyZWVkPyBEb2VzIGl0IHJldHVybiBhbiBlcnJvciBjb2RlPyBMb2cgYSB3YXJuaW5nPyBIb3cgaXMgdGhhdCBlcnJvciBwcm9wYWdhdGVkIHVwIHRoZSBzdGFjaywgYW5kIGhvdyBkb2VzIHRoZSBUVFkgc3lzdGVtIHJlc3BvbmQgdG8gaXQ/CgpGaW5hbGx5LCBsZXQmIzM5O3Mgc2VlIGhvdyB0aGUgbGluZSBkaXNjaXBsaW5lIGlzIHJlbW92ZWQgZnJvbSB0aGUgVFRZIGFuZCBkZWFsbG9jYXRlZC4gQXJlIHRoZXJlIGFueSBjdXN0b20gYWN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZSB0dHkgaXRzZWxmPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3R0eV9sZGlzYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQ5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NDk6XHRzdGF0aWMgdm9pZCB0dHlfbGRpc2NfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHR0eV9sZGlzYyAqbGQpXG4gNDUwOlx0e1xuIDQ1MTpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZ0dHktXHUwMDNlbGRpc2Nfc2VtKTtcbiA0NTI6XHRcdFdBUk5fT04oIXRlc3RfYml0KFRUWV9MRElTQ19PUEVOLCBcdTAwMjZ0dHktXHUwMDNlZmxhZ3MpKTtcbiA0NTM6XHRcdGNsZWFyX2JpdChUVFlfTERJU0NfT1BFTiwgXHUwMDI2dHR5LVx1MDAzZWZsYWdzKTtcbiA0NTQ6XHRcdGlmIChsZC1cdTAwM2VvcHMtXHUwMDNlY2xvc2UpXG4gNDU1Olx0XHRcdGxkLVx1MDAzZW9wcy1cdTAwM2VjbG9zZSh0dHkpO1xuIDQ1NjpcdFx0dHR5X2xkaXNjX2RlYnVnKHR0eSwgXCYjMzQ7JXA6IGNsb3NlZFxcblwmIzM0OywgbGQpO1xuIDQ1NzpcdH1cbiA0NTg6XHRcbiA0NTk6XHQvKipcbiA0NjA6XHQgKiB0dHlfbGRpc2NfZmFpbHRvXHQtXHRoZWxwZXIgZm9yIGxkaXNjIGZhaWxiYWNrXG4gNDYxOlx0ICogQHR0eTogdHR5IHRvIG9wZW4gdGhlIGxkaXNjIG9uXG4gNDYyOlx0ICogQGxkOiBsZGlzYyB3ZSBhcmUgdHJ5aW5nIHRvIGZhaWwgYmFjayB0b1xuIDQ2MzpcdCAqXG4gNDY0Olx0ICogSGVscGVyIHRvIHRyeSBhbmQgcmVjb3ZlciBhIHR0eSB3aGVuIHN3aXRjaGluZyBiYWNrIHRvIHRoZSBvbGQgbGRpc2MgZmFpbHNcbiA0NjU6XHQgKiBhbmQgd2UgbmVlZCBzb21ldGhpbmcgYXR0YWNoZWQuXG4gNDY2Olx0ICovXG4gNDY3Olx0c3RhdGljIGludCB0dHlfbGRpc2NfZmFpbHRvKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBsZClcbiA0Njg6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzc1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTZXJpYWwgTGluZSBEaXNjaXBsaW5lIENsb3NlIFByb2Nlc3MqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gU28sIGB0dHlfbGRpc2NfY2xvc2VgIGlzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIGhlcmUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgaXQgZG9lcyBpcyBjYWxsIGBsZC0mZ3Q7b3BzLSZndDtjbG9zZSh0dHkpYC4gT2theSwgdGhhdCYjMzk7cyB0aGUgc3RhbmRhcmQgY2xvc2UgcHJvY2VkdXJlIGZvciBhIGxpbmUgZGlzY2lwbGluZS4gQnV0LCBpZiBgc2xpcF9oYW5ndXBgIHdhcywgaW4gZmFjdCwgY2FsbGluZyBgc2xpcF9jbG9zZWAsIHdvdWxkbiYjMzk7dCB0aGF0IHJlc3VsdCBpbiBgc2xpcF9jbG9zZWAgYmVpbmcgY2FsbGVkICp0d2ljZSo/IFRoYXQgc2VlbXMuLi4gaW5jb3JyZWN0LCBhIHBvdGVudGlhbCBkb3VibGUtZnJlZSBvciBvdGhlciB1bmRlc2lyYWJsZSBvdXRjb21lLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2xpcF9jbG9zZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCB0byB2ZXJpZnkgaWYgdGhpcyBkb3VibGUtY2FsbCBzY2VuYXJpbyBpcyBldmVuIHBvc3NpYmxlIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgd291bGQgYmUgaWYgaXQgd2VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9zbGlwL3NsaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODgwOlx0LypcbiA4ODE6XHQgKiBDbG9zZSBkb3duIGEgU0xJUCBjaGFubmVsLlxuIDg4MjpcdCAqIFRoaXMgbWVhbnMgZmx1c2hpbmcgb3V0IGFueSBwZW5kaW5nIHF1ZXVlcywgYW5kIHRoZW4gcmV0dXJuaW5nLiBUaGlzXG4gODgzOlx0ICogY2FsbCBpcyBzZXJpYWxpemVkIGFnYWluc3Qgb3RoZXIgbGRpc2MgZnVuY3Rpb25zLlxuIDg4NDpcdCAqL1xuIDg4NTpcdFxuIDg4NjpcdHN0YXRpYyB2b2lkIHNsaXBfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcbiA4ODc6XHR7XG4gODg4Olx0XHRzdHJ1Y3Qgc2xpcCAqc2wgPSB0dHktXHUwMDNlZGlzY19kYXRhO1xuIDg4OTpcdFxuIDg5MDpcdFx0LyogRmlyc3QgbWFrZSBzdXJlIHdlJiMzOTtyZSBjb25uZWN0ZWQuICovXG4gODkxOlx0XHRpZiAoIXNsIHx8IHNsLVx1MDAzZW1hZ2ljICE9IFNMSVBfTUFHSUMgfHwgc2wtXHUwMDNldHR5ICE9IHR0eSlcbiA4OTI6XHRcdFx0cmV0dXJuO1xuIDg5MzpcdFxuIDg5NDpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNsLVx1MDAzZWxvY2spO1xuIDg5NTpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHR0eS1cdTAwM2VkaXNjX2RhdGEsIE5VTEwpO1xuIDg5NjpcdFx0c2wtXHUwMDNldHR5ID0gTlVMTDtcbiA4OTc6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNsLVx1MDAzZWxvY2spO1xuIDg5ODpcdFxuIDg5OTpcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gOTAwOlx0XHRmbHVzaF93b3JrKFx1MDAyNnNsLVx1MDAzZXR4X3dvcmspO1xuIDkwMTpcdFxuIDkwMjpcdFx0LyogVlNWID0gdmVyeSBpbXBvcnRhbnQgdG8gcmVtb3ZlIHRpbWVycyAqL1xuIDkwMzpcdCNpZmRlZiBDT05GSUdfU0xJUF9TTUFSVFxuIDkwNDpcdFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2c2wtXHUwMDNla2VlcGFsaXZlX3RpbWVyKTtcbiA5MDU6XHRcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnNsLVx1MDAzZW91dGZpbGxfdGltZXIpO1xuIDkwNjpcdCNlbmRpZlxuIDkwNzpcdFx0LyogRmx1c2ggbmV0d29yayBzaWRlICovXG4gOTA4Olx0XHR1bnJlZ2lzdGVyX25ldGRldihzbC1cdTAwM2VkZXYpO1xuIDkwOTpcdFx0LyogVGhpcyB3aWxsIGNvbXBsZXRlIHZpYSBzbF9mcmVlX25ldGRldiAqL1xuIDkxMDpcdH1cbiA5MTE6XHQgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIDkxMjpcdCAgKlx0XHRcdFNUQU5EQVJEIFNMSVAgRU5DQVBTVUxBVElPTlx0XHQgIFx0ICpcbiA5MTM6XHQgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiA5MTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNTQKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxMDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIFJlbW92aW5nIGBzbGlwX2hhbmd1cGAqKgoKT2theSwgc28gdGhlIGNvZGUmIzM5O3MgbG9naWMgaXMgdGhpczogYHNsaXBfY2xvc2VgIGdldHMgY2FsbGVkLCBwb3RlbnRpYWxseSBtdWx0aXBsZSB0aW1lcywgZHVlIHRvIGludGVyYWN0aW9ucyBiZXR3ZWVuIGBzbGlwX2hhbmd1cGAsIGB0dHlfbGRpc2NfaGFuZ3VwYCwgYW5kIHRoZSBsaW5lIGRpc2NpcGxpbmUgbWFuYWdlbWVudC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHJlbW92aW5nIGBzbGlwX2hhbmd1cGAgd291bGQganVzdCBtYWtlIHRoaW5ncyBzaW1wbGVyLCBidXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgbW9yZSBzdWJ0bGUuCgpMZXQmIzM5O3MgYnJlYWsgaXQgZG93bjogb3JpZ2luYWxseSwgYHNsaXBfaGFuZ3VwYCBjYWxsZWQgYHNsaXBfY2xvc2VgLiBUaGVuLCBgdHR5X2xkaXNjX2hhbmd1cGAgd291bGQgYWxzbyB0cmlnZ2VyIG90aGVyIGNsb3NlIGNhbGxzIHRocm91Z2ggYHR0eV9sZGlzY19yZWluaXRgLCBgdHR5X2xkaXNjX2tpbGxgLCBhbmQgdWx0aW1hdGVseSBgdHR5X2xkaXNjX2Nsb3NlYCwgd2hpY2ggYWxzbyBjYWxscyBgc2xpcF9jbG9zZWAuICBTbywgeW91IGdldCBhIGRvdWJsZSBjYWxsLgoKTm93LCBpZiBgc2xpcF9oYW5ndXBgIGlzIHJlbW92ZWQsIHRoZSBmbG93IGNoYW5nZXMuICBgdHR5X2xkaXNjX2hhbmd1cGAgd2lsbCAqc3RpbGwqIGNhbGwgZnVuY3Rpb25zIHdoaWNoIGluZGlyZWN0bHkgaW52b2tlIGBzbGlwX2Nsb3NlYCwgc28gaXQmIzM5O3Mgbm90IGEgY29tcGxldGUgcmVtb3ZhbCBvZiBmdW5jdGlvbmFsaXR5LiBUaGUgKm9yZGVyKiBvZiBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIHRpbWluZyBvZiBgdW5yZWdpc3Rlcl9uZXRkZXZgLCBzaGlmdHMuICBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGJ1ZyBmaXggbGllcy4gIGBzbGlwX2Nsb3NlYCBub3cgZ2V0cyBjYWxsZWQgKmxhdGVyKiBpbiB0aGUgc2h1dGRvd24gc2VxdWVuY2UsIHdoaWNoIHJlZHVjZXMgdGhlIHBvdGVudGlhbCBmb3IgdXNlLWFmdGVyLWZyZWUgb3Igb3RoZXIgY29uY3VycmVuY3kgaXNzdWVzLCBiZWNhdXNlIHRoZSBsaW5lIGRpc2NpcGxpbmUgaXNuJiMzOTt0IGZ1bGx5IHNodXQgZG93biB3aGVuIHRoZSBuZXRkZXYgaXMgdW5yZWdpc3RlcmVkLiBUaGlzIGlzIHRoZSBrZXkgZGlmZmVyZW5jZS4KClNvLCBpcyB0aGlzIGNoYW5nZSB3b3J0aCBmdXp6aW5nPyAgV2hpbGUgdGhlIHBhdGNoIGl0c2VsZiBvbmx5ICpyZW1vdmVzKiBhIGZ1bmN0aW9uLCBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJlY2F1c2UgaXQgY2hhbmdlcyB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGRyaXZlci4gSXQgZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gYnkgZGVsYXlpbmcgdGhlIG5ldGRldiB1bnJlZ2lzdHJhdGlvbi4gR2l2ZW4gdGhhdCwgSSYjMzk7ZCBzYXkgdGhhdCB3aGlsZSB0aGVyZSBhcmUgbm8gKm5ldyogY29kZSBwYXRocyB0byBmdXp6LCB0aGUgY2hhbmdlICpkb2VzKiBhZmZlY3QgdGhlIHRpbWluZyBvZiBleGlzdGluZyBvcGVyYXRpb25zLCBhbmQgdGhhdCYjMzk7cyB3b3J0aCBjaGVja2luZy4gIFdlIGNhbiB1c2Ugc3l6a2FsbGVyIHRvIGNyZWF0ZSBhIFBUWSwgc2V0IHRoZSBsaW5lIGRpc2NpcGxpbmUgdG8gU0xJUCwgYW5kIHRyaWdnZXIgYSBoYW5ndXAuCgpUaGVyZWZvcmUsIGJlY2F1c2UgaXQgKmNoYW5nZXMqIHRoZSBleGVjdXRpb24gZmxvdywgYW5kIGZpeGVzIGEgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgcmFjZSBjb25kaXRpb24sIEkmIzM5O20gdGhpbmtpbmcgeWVzLCB0aGVyZSYjMzk7cyBhIHJlYXNvbiB0byBjaGVjayBpdCB3aXRoIGZ1enppbmcuIEZvY3VzU3ltYm9scz8gIFRoZXJlIGFyZW4mIzM5O3QgbmV3IGZ1bmN0aW9uLCBidXQgZm9jdXNpbmcgb24gYHNsaXBfY2xvc2VgIGFuZC9vciBgc2xpcF9vcGVuYCB3b3VsZCBiZSByZWFzb25hYmxlLCBnaXZlbiB0aGF0IHRoZSB0aW1pbmcgb2YgYHNsaXBfY2xvc2VgIGlzIHRoZSBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NsaXBfY2xvc2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9NzkyPXN0YXRpYyBpbnQgc2xpcF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtODg1LVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6ODg2OnN0YXRpYyB2b2lkIHNsaXBfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTg4Ny17XG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9MTI2NT1zdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgc2xfbGRpc2MgPSB7XG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTI2OS1cdC5vcGVuIFx0XHQ9IHNsaXBfb3BlbixcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jOjEyNzA6XHQuY2xvc2VcdCBcdD0gc2xpcF9jbG9zZSxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEyNzEtXHQuaW9jdGxcdFx0PSBzbGlwX2lvY3RsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk2NAoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkNoZWNraW5nIGBzbGlwX29wZW5gKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgZXhhbWluZSB0aGF0IGBzbGlwX29wZW5gIGZ1bmN0aW9uIG9yIHZhcmlhYmxlIOKAkyB3aGF0ZXZlciBpdCBtYXkgYmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgcHJvY2VzcyBvciBzeXN0ZW0uIElzIGl0IGEgZmxhZz8gQSBzdGF0ZSB2YXJpYWJsZT8gQSBmdW5jdGlvbiBjYWxsPyBXaGF0IGFyZSBpdHMgaW5wdXRzIGFuZCBleHBlY3RlZCBvdXRwdXRzPyBXaGF0IGRlcGVuZGVuY2llcyBkb2VzIGl0IGhhdmU/IEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCBpdHMgYmVoYXZpb3IsIGFuZCBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgY2FsbGVkLCBpcyBnb2luZyB0byBiZSBjcnVjaWFsIHRvIGRldGVybWluaW5nIHRoZSBmbG93IGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBsb29rIGZvciBpdHMgZGVmaW5pdGlvbiBhbmQgYW55IHJlZmVyZW5jZXMgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGltcGFjdC4gVGhlIGNvbnRleHQgb2YgaXRzIHVzZSB3aWxsIGluZm9ybSBteSB1bmRlcnN0YW5kaW5nLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIGl0JiMzOTtzIHRocmVhZC1zYWZlIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW52b2x2aW5nIGl0LiBJJiMzOTttIGFsc28gbG9va2luZyBmb3IgYW55IG9idmlvdXMgZWRnZSBjYXNlcyBvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGluIGl0cyBsb2dpYy4gQmFzaWNhbGx5LCBJIHdhbnQgdG8gZ2FpbiBhIHN0cm9uZyBtZW50YWwgbW9kZWwgb2YgaG93IGBzbGlwX29wZW5gIHdvcmtzIHNvIEkgY2FuIGJ1aWxkIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbGlwX29wZW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9Njg4PXN0YXRpYyB2b2lkIHNsaXBfcmVjZWl2ZV9idWYoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdTggKmNwLCBjb25zdCB1OCAqZnAsXG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtNzE3LS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jOjcxODogKiAgc2xpcF9vcGVuIGhlbHBlciByb3V0aW5lcy5cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTcxOS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLS1cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jPTc0Mz1zdGF0aWMgc3RydWN0IHNsaXAgKnNsX2FsbG9jKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtNzkxLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6NzkyOnN0YXRpYyBpbnQgc2xpcF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy03OTMte1xuLS1cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jPTEyNjU9c3RhdGljIHN0cnVjdCB0dHlfbGRpc2Nfb3BzIHNsX2xkaXNjID0ge1xuLS1cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEyNjgtXHQubmFtZSBcdFx0PSBcJiMzNDtzbGlwXCYjMzQ7LFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6MTI2OTpcdC5vcGVuIFx0XHQ9IHNsaXBfb3BlbixcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEyNzAtXHQuY2xvc2VcdCBcdD0gc2xpcF9jbG9zZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1NTAKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgU0xJUCBEcml2ZXIgQnVnKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHBpbnBvaW50IHRoaXMgYnVnLiBMZXQgbWUgdGhpbmsuLi4gQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgaW4gcGxheSBoZXJlIGJlc2lkZXMgdGhlIG9idmlvdXMgb25lcyBJJiMzOTt2ZSBiZWVuIHdvcmtpbmcgd2l0aD8gUGVyaGFwcyBgc2xpcF9yZWNlaXZlX2J1ZmAsIGBzbGlwX3dyaXRlX3dha2V1cGAsIG9yIGV2ZW4gYHNsaXBfaW9jdGxgPyBIbW0sIG5vLCB3YWl0IGEgbWludXRlLCB0aGUgY29yZSBpc3N1ZSB3YXMgc29tZXRoaW5nIHRvIGRvIHdpdGggYSBoYW5ndXAsIHdhc24mIzM5O3QgaXQ/IFJpZ2h0LiBXaGVuIGEgaGFuZ3VwIGhhcHBlbnMsIHRoYXQmIzM5O3Mgd2hlbiBgdHR5X2xkaXNjX2hhbmd1cGAgZ2V0cyBjYWxsZWQuCgpBbHJpZ2h0LCBzbyB0aGUga2V5IGFyZWFzIHRvIHJlYWxseSBmb2N1cyBvbiBhcmUgYHNsaXBfY2xvc2VgLCBgc2xpcF9vcGVuYCwgYW5kLCBjcnVjaWFsbHksIGB0dHlfbGRpc2NfaGFuZ3VwYC4gTm93LCB3aGVyZSBkb2VzIGB0dHlfbGRpc2NfaGFuZ3VwYCBsaXZlPyBPaCB5ZWFoLCB0aGF0JiMzOTtzIGluIGBkcml2ZXJzL3R0eS90dHlfbGRpc2MuY2AuIEFuZCB0aGUgcGF0Y2ggaXRzZWxmLCB0aGUgb25lIHRoYXQmIzM5O3Mgc3VwcG9zZWQgdG8gZml4IHRoaXMsIGl0JiMzOTtzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jYC4KCk9rYXksIG5leHQgc3RlcCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHRvIG1ha2Ugc3VyZSBTTElQIGlzIGV2ZW4gZW5hYmxlZCBpbiB0aGlzIHNwZWNpZmljIHNldHVwLCBqdXN0IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBjaGFzaW5nIGEgcGhhbnRvbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNMSVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc6Njpjb25maWcgU0xJUFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtTTElQIChzZXJpYWwgbGluZSkgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZz00Mz1pZiBTTElQXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNDQtXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc6NDU6Y29uZmlnIFNMSVBfQ09NUFJFU1NFRFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtDU0xJUCBjb21wcmVzc2VkIGhlYWRlcnNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNjAtXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc6NjE6Y29uZmlnIFNMSVBfU01BUlRcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZy02Mi1cdGJvb2wgXCYjMzQ7S2VlcGFsaXZlIGFuZCBsaW5lZmlsbFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZy02OC1cbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZzo2OTpjb25maWcgU0xJUF9NT0RFX1NMSVA2XG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNzAtXHRib29sIFwmIzM0O1NpeCBiaXQgU0xJUCBlbmNhcHN1bGF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjExCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgU0xJUGAg4oCTIHRoYXQmIzM5O3MgdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIG9yIG1vZHVsZSB3ZSYjMzk7cmUgd29ya2luZyB3aXRoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtkb2VzIGBTTElQYCBoYXZlIGFueSBkZXBlbmRlbmNpZXM/IFdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgY29tcG9uZW50cyBkb2VzIGl0IHJlbHkgb24gdG8gZnVuY3Rpb24gY29ycmVjdGx5PyYjMzQ7IFVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBjb25maWd1cmF0aW9ucyBpcyBjcml0aWNhbCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBjb21wbGV4IHN5c3RlbXMuIElkZW50aWZ5aW5nIHRoZXNlIGRlcGVuZGVuY2llcyBlYXJseSBvbiBwcmV2ZW50cyBjYXNjYWRpbmcgaXNzdWVzIGxhdGVyLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHRoZSBjaGFpbiBvZiBjb25uZWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9zbGlwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBTTElQIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIFNMSVBcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O1NMSVAgKHNlcmlhbCBsaW5lKSBzdXBwb3J0XCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIFRUWVxuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBTYXkgWSBpZiB5b3UgaW50ZW5kIHRvIHVzZSBTTElQIG9yIENTTElQIChjb21wcmVzc2VkIFNMSVApIHRvXG4gIDExOlx0XHQgIGNvbm5lY3QgdG8geW91ciBJbnRlcm5ldCBzZXJ2aWNlIHByb3ZpZGVyIG9yIHRvIGNvbm5lY3QgdG8gc29tZVxuICAxMjpcdFx0ICBvdGhlciBsb2NhbCBVbml4IGJveCBvciBpZiB5b3Ugd2FudCB0byBjb25maWd1cmUgeW91ciBMaW51eCBib3ggYXMgYVxuICAxMzpcdFx0ICBTbGlwL0NTbGlwIHNlcnZlciBmb3Igb3RoZXIgcGVvcGxlIHRvIGRpYWwgaW4uIFNMSVAgKFNlcmlhbCBMaW5lXG4gIDE0Olx0XHQgIEludGVybmV0IFByb3RvY29sKSBpcyBhIHByb3RvY29sIHVzZWQgdG8gc2VuZCBJbnRlcm5ldCB0cmFmZmljIG92ZXJcbiAgMTU6XHRcdCAgc2VyaWFsIGNvbm5lY3Rpb25zIHN1Y2ggYXMgdGVsZXBob25lIGxpbmVzIG9yIG51bGwgbW9kZW0gY2FibGVzO1xuICAxNjpcdFx0ICBub3dhZGF5cywgdGhlIHByb3RvY29sIFBQUCBpcyBtb3JlIGNvbW1vbmx5IHVzZWQgZm9yIHRoaXMgc2FtZVxuICAxNzpcdFx0ICBwdXJwb3NlLlxuICAxODpcdFxuICAxOTpcdFx0ICBOb3JtYWxseSwgeW91ciBhY2Nlc3MgcHJvdmlkZXIgaGFzIHRvIHN1cHBvcnQgU0xJUCBpbiBvcmRlciBmb3IgeW91XG4gIDIwOlx0XHQgIHRvIGJlIGFibGUgdG8gdXNlIGl0LCBidXQgdGhlcmUgaXMgbm93IGEgU0xJUCBlbXVsYXRvciBjYWxsZWQgU0xpUlBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2OTYKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFNMSVAgRHJpdmVyIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoZSBkZXBlbmRlbmN5OiBgU0xJUGAgcmVsaWVzIG9uIGBUVFlgLiBNYWtlcyBzZW5zZS4gVGhlIGNvbmZpZyBuZWVkZWQgdG8gZW5hYmxlIGl0IGlzIGNsZWFybHkgYFNMSVBgLiBCdXQsIHRoZSByZWFsIG1lYXQgb2YgdGhpcyBzZWVtcyB0byBiZSB0aGUgcmVtb3ZhbCBvZiBgc2xpcF9oYW5ndXBgLiBIbW0sIGlzIHRoaXMgYWN0dWFsbHkgYSBmdW5jdGlvbmFsIGNoYW5nZT8KClllcywgaXQgaXMhIEl0JiMzOTtzIGNoYW5naW5nIGhvdyB0aGUgU0xJUCBkcml2ZXIgYmVoYXZlcyBvbiBoYW5ndXAsIHdoaWNoIGlzIGRlZmluaXRlbHkgc2lnbmlmaWNhbnQuIEJlZm9yZSB0aGlzIHBhdGNoLCBgc2xpcF9oYW5ndXBgIHdhcyBjYWxsZWQsIHdoaWNoIGluIHR1cm4gY2FsbGVkIGBzbGlwX2Nsb3NlYC4gTm93LCBgc2xpcF9oYW5ndXBgIGlzIGJ5cGFzc2VkIGVudGlyZWx5LCBhbmQgYHNsaXBfY2xvc2VgIGlzIG9ubHkgaW52b2tlZCB3aGVuIHRoZSBsaW5lIGRpc2NpcGxpbmUgKGxkaXNjKSBpcyBjbG9zZWQuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBiZWhhdmlvcmFsIHNoaWZ0LCBhbmQgdGhhdCB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZy4KCk15IGZvY3VzIHNob3VsZCBiZSBzcXVhcmVseSBvbiB0aG9zZSBmdW5jdGlvbnM6IGBzbGlwX2Nsb3NlYCBhbmQgYHNsaXBfb3BlbmAuIFRoZSBjb25maWcgcmVtYWlucyBgU0xJUGAuCgpOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgc2NhbiB0aGUgY29kZSB0byBlbnN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYWxzbyBiZSBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZS4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NsX2xkaXNjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jPTExODM9c3RhdGljIGludCBzbF9zaW9jZGV2cHJpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLFxuLS1cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEyNjQtXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzoxMjY1OnN0YXRpYyBzdHJ1Y3QgdHR5X2xkaXNjX29wcyBzbF9sZGlzYyA9IHtcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEyNjYtXHQub3duZXIgXHRcdD0gVEhJU19NT0RVTEUsXG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9MTI3Nj1zdGF0aWMgaW50IF9faW5pdCBzbGlwX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy0xMzAwLVx0LyogRmlsbCBpbiBvdXIgbGluZSBwcm90b2NvbCBkaXNjaXBsaW5lLCBhbmQgcmVnaXN0ZXIgaXQgKi9cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jOjEzMDE6XHRzdGF0dXMgPSB0dHlfcmVnaXN0ZXJfbGRpc2MoXHUwMDI2c2xfbGRpc2MpO1xuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTMwMi1cdGlmIChzdGF0dXMgIT0gMCkge1xuLS1cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jPTEzMDk9c3RhdGljIHZvaWQgX19leGl0IHNsaXBfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEzNjEtXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzoxMzYyOlx0dHR5X3VucmVnaXN0ZXJfbGRpc2MoXHUwMDI2c2xfbGRpc2MpO1xuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTM2My19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDM3CgkJCQkJCQlvdXRwdXQ6IDEzMQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGZyYW1lZCBhcyBhIHNlcmllcyBvZiB0aG91Z2h0czoKCioqRm9jdXNpbmcgb24gS2V5IEZ1bmN0aW9ucyBhbmQgU2V0dGluZyBSZXN1bHRzKioKCk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgb3BlcmF0aW9uIGhpbmdlcyBvbiBgc2xpcF9jbG9zZWAgYW5kIGBzbGlwX29wZW5gLiBUaG9zZSBhcmUgdGhlIHR3byBmdW5jdGlvbnMgdGhhdCByZWFsbHkgbWF0dGVyIGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBmdWxseSB1bmRlcnN0YW5kaW5nIHRoZWlyIGlucHV0cywgb3V0cHV0cywgYW5kIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLgoKT25jZSBJIGhhdmUgYSBzb2xpZCBncmFzcCBvZiB0aG9zZSB0d28sIHRoZSBuZXh0IHN0ZXAgaXMgc3RyYWlnaHRmb3J3YXJkOiBJJiMzOTtsbCBuZWVkIHRvIHN0cmF0ZWdpY2FsbHkgc2V0IHRoZSByZXN1bHRzLiBUaGF0IG1lYW5zIGNhcmVmdWxseSBjcmFmdGluZyB0aGUgcmV0dXJuIHZhbHVlcyBvciBtb2RpZnlpbmcgYW55IHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyBhY2NvcmRpbmcgdG8gaG93IHRob3NlIGZ1bmN0aW9ucyBhcmUgaW50ZXJhY3RpbmcgYW5kIHdoYXQgdGhlIGRlc2lyZWQgb3ZlcmFsbCBvdXRjb21lIGlzLiBFZmZpY2llbmN5IGFuZCBhY2N1cmFjeSBhcmUsIG9mIGNvdXJzZSwgcGFyYW1vdW50LCBidXQgSSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHByb2Nlc3MgY2FuIGJlIHJlcHJvZHVjZWQgaWYgbmVjZXNzYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0xJUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NsaXBfY2xvc2UmIzM0OywKICAgICYjMzQ7c2xpcF9vcGVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBzbGlwX2hhbmd1cGAgY2FsbGJhY2sgZnJvbSB0aGUgU0xJUCBsaW5lIGRpc2NpcGxpbmUuIFRoaXMgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgdGhlIFNMSVAgZHJpdmVyIG9uIGhhbmd1cCwgYXMgYHNsaXBfY2xvc2VgIGlzIG5vIGxvbmdlciBjYWxsZWQgZGlyZWN0bHkgZnJvbSB0aGUgaGFuZ3VwIHBhdGgsIGJ1dCByYXRoZXIgZGVmZXJyZWQgdW50aWwgdGhlIGxkaXNjIGlzIGNsb3NlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSB0ZWFyZG93biBzZXF1ZW5jZSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBUVFkgaGFuZ3VwIG9wZXJhdGlvbnMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTElQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2xpcF9jbG9zZSYjMzQ7LAogICAgJiMzNDtzbGlwX29wZW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYHNsaXBfaGFuZ3VwYCBjYWxsYmFjayBmcm9tIHRoZSBTTElQIGxpbmUgZGlzY2lwbGluZS4gVGhpcyBjaGFuZ2VzIHRoZSBiZWhhdmlvciBvZiB0aGUgU0xJUCBkcml2ZXIgb24gaGFuZ3VwLCBhcyBgc2xpcF9jbG9zZWAgaXMgbm8gbG9uZ2VyIGNhbGxlZCBkaXJlY3RseSBmcm9tIHRoZSBoYW5ndXAgcGF0aCwgYnV0IHJhdGhlciBkZWZlcnJlZCB1bnRpbCB0aGUgbGRpc2MgaXMgY2xvc2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgdGhlIHRlYXJkb3duIHNlcXVlbmNlIGFuZCBpcyByZWFjaGFibGUgdmlhIFRUWSBoYW5ndXAgb3BlcmF0aW9ucywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYHNsaXBfaGFuZ3VwYCBmdW5jdGlvbiBhbmQgaXRzIGFzc2lnbm1lbnQgdG8gdGhlIGBoYW5ndXBgIGZpZWxkIGluIHRoZSBgc2xfbGRpc2NgIChgdHR5X2xkaXNjX29wc2ApIHN0cnVjdHVyZSB3aXRoaW4gdGhlIFNMSVAgbmV0d29yayBkcml2ZXIuIFRoaXMgY2hhbmdlIGFsdGVycyB0aGUgY29udHJvbCBmbG93IGR1cmluZyBhIFRUWSBoYW5ndXAgZXZlbnQsIG1lYW5pbmcgdGhlIFNMSVAgY2hhbm5lbCBtaWdodCBub3QgYmUgZXhwbGljaXRseSBjbG9zZWQgb24gaGFuZ3VwLiBJZiB0aGlzIG9taXNzaW9uIGludHJvZHVjZXMgYW55IGJ1Z3MsIHRoZXkgd291bGQgbGlrZWx5IG1hbmlmZXN0IGFzIHJlc291cmNlIGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXRpZXMgKGUuZy4sIGlmIHRoZSBUVFkgaXMgZGVzdHJveWVkIGJ1dCB0aGUgU0xJUCBjaGFubmVsIGNvbnRpbnVlcyB0byByZWZlcmVuY2UgaXQpLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIChpZiB0aGUgVFRZIGxheWVyIGF0dGVtcHRzIHRvIGNhbGwgYSBOVUxMIGBoYW5ndXBgIHBvaW50ZXIpLiBcblxuVGhlc2UgY2xhc3NlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIHN1Y2ggYXMgS0FTQU4gKHdoaWNoIGNhdGNoZXMgdXNlLWFmdGVyLWZyZWUgYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGFuZCBzdGFuZGFyZCBrZXJuZWwgb29wcy9wYW5pY3MgKHdoaWNoIGNhdGNoIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWRkIGxvZ2ljIHRoYXQgY291bGQgb3BlcmF0ZSBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTg1N2ZmN2JhYmM0NjFjZjcyMDAyYjc0Y2Q1YTljZDZhNTY1MDIzOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDExOjUxOjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMgYi9kcml2ZXJzL25ldC9zbGlwL3NsaXAuYwppbmRleCBmYWFlNzExY2Y3OTNkLi5hYzBmYzU5YzhjMjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbGlwL3NsaXAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9zbGlwL3NsaXAuYwpAQCAtODgxLDggJiM0Mzs4ODEsNiBAQCBzdGF0aWMgaW50IHNsaXBfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogICogQ2xvc2UgZG93biBhIFNMSVAgY2hhbm5lbC4KICAqIFRoaXMgbWVhbnMgZmx1c2hpbmcgb3V0IGFueSBwZW5kaW5nIHF1ZXVlcywgYW5kIHRoZW4gcmV0dXJuaW5nLiBUaGlzCiAgKiBjYWxsIGlzIHNlcmlhbGl6ZWQgYWdhaW5zdCBvdGhlciBsZGlzYyBmdW5jdGlvbnMuCi0gKgotICogV2UgYWxzbyB1c2UgdGhpcyBtZXRob2QgZm8gYSBoYW5ndXAgZXZlbnQKICAqLwogCiBzdGF0aWMgdm9pZCBzbGlwX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCkBAIC05MTAsMTEgJiM0Mzs5MDgsNiBAQCBzdGF0aWMgdm9pZCBzbGlwX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiAJdW5yZWdpc3Rlcl9uZXRkZXYoc2wtJmd0O2Rldik7CiAJLyogVGhpcyB3aWxsIGNvbXBsZXRlIHZpYSBzbF9mcmVlX25ldGRldiAqLwogfQotCi1zdGF0aWMgdm9pZCBzbGlwX2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCXNsaXBfY2xvc2UodHR5KTsKLX0KICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICoJCQlTVEFOREFSRCBTTElQIEVOQ0FQU1VMQVRJT04JCSAgCSAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTEyNzUsNyAmIzQzOzEyNjgsNiBAQCBzdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgc2xfbGRpc2MgPSB7CiAJLm5hbWUgCQk9ICYjMzQ7c2xpcCYjMzQ7LAogCS5vcGVuIAkJPSBzbGlwX29wZW4sCiAJLmNsb3NlCSAJPSBzbGlwX2Nsb3NlLAotCS5oYW5ndXAJIAk9IHNsaXBfaGFuZ3VwLAogCS5pb2N0bAkJPSBzbGlwX2lvY3RsLAogCS5yZWNlaXZlX2J1Zgk9IHNsaXBfcmVjZWl2ZV9idWYsCiAJLndyaXRlX3dha2V1cAk9IHNsaXBfd3JpdGVfd2FrZXVwLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwNQoJCQkJCQkJb3V0cHV0OiAyNzMKCQkJCQkJCXRob3VnaHRzOiA2NTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTTElQIERyaXZlciBIYW5ndXAgUmVtb3ZhbCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRha2luZyBvdXQgdGhlIGBzbGlwX2hhbmd1cGAgZnVuY3Rpb24gYW5kLCBjcnVjaWFsbHksIGl0cyBhc3NvY2lhdGlvbiB3aXRoIHRoZSBgaGFuZ3VwYCBmaWVsZCBpbiB0aGUgYHR0eV9sZGlzY19vcHNgIHN0cnVjdHVyZSBmb3IgdGhlIFNMSVAgZHJpdmVyLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiB3aGF0IGhhcHBlbnMgdG8gdGhlIGhhbmd1cCBoYW5kbGluZyBub3c/IGBzbGlwX2hhbmd1cGAgd2FzIGp1c3QgY2FsbGluZyBgc2xpcF9jbG9zZWAsIHNvIHJlbW92aW5nIGl0IGVzc2VudGlhbGx5IHNraXBzIHRoYXQgc3RlcCBkdXJpbmcgYSBoYW5ndXAuCgpNeSBpbml0aWFsIGNvbmNlcm4gd2FzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gQnV0IHdhaXQsIHRoaXMgaXMganVzdCBhIGZ1bmN0aW9uIHBvaW50ZXIgYXNzaWdubWVudCBiZWluZyByZW1vdmVkLiBUaGVyZSYjMzk7cyBubyBuZXcgZGF0YSBiZWluZyBhbGxvY2F0ZWQgb3IgY29waWVkLCBzbyB0aGUgcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIGlzIGJhc2ljYWxseSB6ZXJvLiBUaGlzIGlzbiYjMzk7dCBhIEtNU0FOIHNpdHVhdGlvbi4KCkJ1dCB0aGUgcmVhbCBxdWVzdGlvbiBpczogd2hhdCYjMzk7cyB0aGUgYmVoYXZpb3Igd2hlbiBgaGFuZ3VwYCBpcyAqTlVMTCo/IERvZXMgdGhlIFRUWSBsYXllciBoYW5kbGUgdGhhdCBncmFjZWZ1bGx5PyBJJiMzOTttIHRoaW5raW5nIHRoZSBUVFkgbGF5ZXIgbWlnaHQganVzdCBub3QgY2FsbCBhbnl0aGluZywgb3IgcG9zc2libHkgY2FsbCBhIGRlZmF1bHQgaGFuZGxlci4gVGhlIGRvY3VtZW50YXRpb24gZm9yIGB0dHlfbGRpc2Nfb3BzYCBpbiBgaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaGAgc2hvdWxkIGNsZWFyIHRoYXQgdXAuCgpJZiB0aGUgVFRZIGxheWVyIGRvZXNuJiMzOTt0IGhhbmRsZSB0aGUgTlVMTCBwb2ludGVyLCB3ZSYjMzk7ZCBoYXZlIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBhIHN0cmFpZ2h0Zm9yd2FyZCBvb3BzIHRoYXQgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRlc3RpbmcgKEtBU0FOIG9yIHNvbWV0aGluZyBzaW1pbGFyKS4gSWYgbm90LCB3ZSBydW4gdGhlIHJpc2sgb2YgcmVzb3VyY2UgbGVha3MsIGEgc2xpcCBjaGFubmVsIG1pZ2h0IG5vdCBiZSBjbG9zZWQgd2hlbiB0aGUgdHR5IGhhbmdzIHVwLCBsZWFkaW5nIHRvIGEgcG9zc2libGUgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gaWYgdGhlIFRUWSBpcyBkZXN0cm95ZWQgYnV0IHRoZSBzbGlwIGNoYW5uZWwgc3RpbGwgcmVmZXJlbmNlcyBpdC4gSG93ZXZlciwgdG9vbHMgbGlrZSBLQVNBTiBhbmQgS01FTUxFQUsgc2hvdWxkIGRldGVjdCB0aGF0IHJpZ2h0IGF3YXkuCgpTbywgaW4gc3VtbWFyeTogdGhlIG1haW4gY29uY2VybiBoZXJlIGlzIHJlc291cmNlIG1hbmFnZW1lbnQsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvIGxlYWtzLiBUaGUgcGF0Y2ggY291bGQgaW50cm9kdWNlIHJlc291cmNlIGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlLCBvciBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgYnV0IGFsbCBvZiB0aG9zZSBzaG91bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nL21lbW9yeSBzYWZldHkgdG9vbHMuIFRoZXJlJiMzOTtzIG5vIEtNU0FOIHJpc2sgaGVyZSwgYW5kIHRoZSBpbXBhY3QgaXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCB0byByZWFzb24gYWJvdXQuIFRoZSBwYXRjaCBpcyBwcm9iYWJseSBzYWZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHRoZSBgc2xpcF9oYW5ndXBgIGZ1bmN0aW9uIGFuZCBpdHMgYXNzaWdubWVudCB0byB0aGUgYGhhbmd1cGAgZmllbGQgaW4gdGhlIGBzbF9sZGlzY2AgKGB0dHlfbGRpc2Nfb3BzYCkgc3RydWN0dXJlIHdpdGhpbiB0aGUgU0xJUCBuZXR3b3JrIGRyaXZlci4gVGhpcyBjaGFuZ2UgYWx0ZXJzIHRoZSBjb250cm9sIGZsb3cgZHVyaW5nIGEgVFRZIGhhbmd1cCBldmVudCwgbWVhbmluZyB0aGUgU0xJUCBjaGFubmVsIG1pZ2h0IG5vdCBiZSBleHBsaWNpdGx5IGNsb3NlZCBvbiBoYW5ndXAuIElmIHRoaXMgb21pc3Npb24gaW50cm9kdWNlcyBhbnkgYnVncywgdGhleSB3b3VsZCBsaWtlbHkgbWFuaWZlc3QgYXMgcmVzb3VyY2UgbGVha3MsIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcyAoZS5nLiwgaWYgdGhlIFRUWSBpcyBkZXN0cm95ZWQgYnV0IHRoZSBTTElQIGNoYW5uZWwgY29udGludWVzIHRvIHJlZmVyZW5jZSBpdCksIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgKGlmIHRoZSBUVFkgbGF5ZXIgYXR0ZW1wdHMgdG8gY2FsbCBhIE5VTEwgYGhhbmd1cGAgcG9pbnRlcikuIFxuXG5UaGVzZSBjbGFzc2VzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgc3VjaCBhcyBLQVNBTiAod2hpY2ggY2F0Y2hlcyB1c2UtYWZ0ZXItZnJlZSBhbmQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgYW5kIHN0YW5kYXJkIGtlcm5lbCBvb3BzL3BhbmljcyAod2hpY2ggY2F0Y2ggTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgZG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhZGQgbG9naWMgdGhhdCBjb3VsZCBvcGVyYXRlIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYHNsaXBfaGFuZ3VwYCBmdW5jdGlvbiBhbmQgaXRzIGFzc2lnbm1lbnQgdG8gdGhlIGBoYW5ndXBgIGZpZWxkIGluIHRoZSBgc2xfbGRpc2NgIChgdHR5X2xkaXNjX29wc2ApIHN0cnVjdHVyZSB3aXRoaW4gdGhlIFNMSVAgbmV0d29yayBkcml2ZXIuIFRoaXMgY2hhbmdlIGFsdGVycyB0aGUgY29udHJvbCBmbG93IGR1cmluZyBhIFRUWSBoYW5ndXAgZXZlbnQsIG1lYW5pbmcgdGhlIFNMSVAgY2hhbm5lbCBtaWdodCBub3QgYmUgZXhwbGljaXRseSBjbG9zZWQgb24gaGFuZ3VwLiBJZiB0aGlzIG9taXNzaW9uIGludHJvZHVjZXMgYW55IGJ1Z3MsIHRoZXkgd291bGQgbGlrZWx5IG1hbmlmZXN0IGFzIHJlc291cmNlIGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXRpZXMgKGUuZy4sIGlmIHRoZSBUVFkgaXMgZGVzdHJveWVkIGJ1dCB0aGUgU0xJUCBjaGFubmVsIGNvbnRpbnVlcyB0byByZWZlcmVuY2UgaXQpLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIChpZiB0aGUgVFRZIGxheWVyIGF0dGVtcHRzIHRvIGNhbGwgYSBOVUxMIGBoYW5ndXBgIHBvaW50ZXIpLiBcblxuVGhlc2UgY2xhc3NlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIHN1Y2ggYXMgS0FTQU4gKHdoaWNoIGNhdGNoZXMgdXNlLWFmdGVyLWZyZWUgYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGFuZCBzdGFuZGFyZCBrZXJuZWwgb29wcy9wYW5pY3MgKHdoaWNoIGNhdGNoIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWRkIGxvZ2ljIHRoYXQgY291bGQgb3BlcmF0ZSBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NTE6NTQuNDY4NzIxMDI2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyNjYzNDgxNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNMSVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbGlwX2Nsb3NlXCIsXG4gICAgXCJzbGlwX29wZW5cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBzbGlwX2hhbmd1cGAgZnVuY3Rpb24gYW5kIGl0cyBhc3NpZ25tZW50IHRvIHRoZSBgaGFuZ3VwYCBmaWVsZCBpbiB0aGUgYHNsX2xkaXNjYCAoYHR0eV9sZGlzY19vcHNgKSBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBTTElQIG5ldHdvcmsgZHJpdmVyLiBUaGlzIGNoYW5nZSBhbHRlcnMgdGhlIGNvbnRyb2wgZmxvdyBkdXJpbmcgYSBUVFkgaGFuZ3VwIGV2ZW50LCBtZWFuaW5nIHRoZSBTTElQIGNoYW5uZWwgbWlnaHQgbm90IGJlIGV4cGxpY2l0bHkgY2xvc2VkIG9uIGhhbmd1cC4gSWYgdGhpcyBvbWlzc2lvbiBpbnRyb2R1Y2VzIGFueSBidWdzLCB0aGV5IHdvdWxkIGxpa2VseSBtYW5pZmVzdCBhcyByZXNvdXJjZSBsZWFrcywgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0aWVzIChlLmcuLCBpZiB0aGUgVFRZIGlzIGRlc3Ryb3llZCBidXQgdGhlIFNMSVAgY2hhbm5lbCBjb250aW51ZXMgdG8gcmVmZXJlbmNlIGl0KSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyAoaWYgdGhlIFRUWSBsYXllciBhdHRlbXB0cyB0byBjYWxsIGEgTlVMTCBgaGFuZ3VwYCBwb2ludGVyKS4gXFxuXFxuVGhlc2UgY2xhc3NlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIHN1Y2ggYXMgS0FTQU4gKHdoaWNoIGNhdGNoZXMgdXNlLWFmdGVyLWZyZWUgYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGFuZCBzdGFuZGFyZCBrZXJuZWwgb29wcy9wYW5pY3MgKHdoaWNoIGNhdGNoIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWRkIGxvZ2ljIHRoYXQgY291bGQgb3BlcmF0ZSBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBgc2xpcF9oYW5ndXBgIGNhbGxiYWNrIGZyb20gdGhlIFNMSVAgbGluZSBkaXNjaXBsaW5lLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBTTElQIGRyaXZlciBvbiBoYW5ndXAsIGFzIGBzbGlwX2Nsb3NlYCBpcyBubyBsb25nZXIgY2FsbGVkIGRpcmVjdGx5IGZyb20gdGhlIGhhbmd1cCBwYXRoLCBidXQgcmF0aGVyIGRlZmVycmVkIHVudGlsIHRoZSBsZGlzYyBpcyBjbG9zZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyB0aGUgdGVhcmRvd24gc2VxdWVuY2UgYW5kIGlzIHJlYWNoYWJsZSB2aWEgVFRZIGhhbmd1cCBvcGVyYXRpb25zLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NTE6NTQuNDY4NzI1MDA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ3NjYzNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTg1N2ZmN2JhYmM0NjFjZjcyMDAyYjc0Y2Q1YTljZDZhNTY1MDIzOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxMTo1MTo1MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbGlwL3NsaXAuYyBiL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jXFxuaW5kZXggZmFhZTcxMWNmNzkzZC4uYWMwZmM1OWM4YzI1OSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9zbGlwL3NsaXAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jXFxuQEAgLTg4MSw4ICs4ODEsNiBAQCBzdGF0aWMgaW50IHNsaXBfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxcbiAgKiBDbG9zZSBkb3duIGEgU0xJUCBjaGFubmVsLlxcbiAgKiBUaGlzIG1lYW5zIGZsdXNoaW5nIG91dCBhbnkgcGVuZGluZyBxdWV1ZXMsIGFuZCB0aGVuIHJldHVybmluZy4gVGhpc1xcbiAgKiBjYWxsIGlzIHNlcmlhbGl6ZWQgYWdhaW5zdCBvdGhlciBsZGlzYyBmdW5jdGlvbnMuXFxuLSAqXFxuLSAqIFdlIGFsc28gdXNlIHRoaXMgbWV0aG9kIGZvIGEgaGFuZ3VwIGV2ZW50XFxuICAqL1xcbiBcXG4gc3RhdGljIHZvaWQgc2xpcF9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxcbkBAIC05MTAsMTEgKzkwOCw2IEBAIHN0YXRpYyB2b2lkIHNsaXBfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG4gXFx0dW5yZWdpc3Rlcl9uZXRkZXYoc2wtXFx1MDAzZWRldik7XFxuIFxcdC8qIFRoaXMgd2lsbCBjb21wbGV0ZSB2aWEgc2xfZnJlZV9uZXRkZXYgKi9cXG4gfVxcbi1cXG4tc3RhdGljIHZvaWQgc2xpcF9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG4te1xcbi1cXHRzbGlwX2Nsb3NlKHR0eSk7XFxuLX1cXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4gICAqXFx0XFx0XFx0U1RBTkRBUkQgU0xJUCBFTkNBUFNVTEFUSU9OXFx0XFx0ICBcXHQgKlxcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5AQCAtMTI3NSw3ICsxMjY4LDYgQEAgc3RhdGljIHN0cnVjdCB0dHlfbGRpc2Nfb3BzIHNsX2xkaXNjID0ge1xcbiBcXHQubmFtZSBcXHRcXHQ9IFxcXCJzbGlwXFxcIixcXG4gXFx0Lm9wZW4gXFx0XFx0PSBzbGlwX29wZW4sXFxuIFxcdC5jbG9zZVxcdCBcXHQ9IHNsaXBfY2xvc2UsXFxuLVxcdC5oYW5ndXBcXHQgXFx0PSBzbGlwX2hhbmd1cCxcXG4gXFx0LmlvY3RsXFx0XFx0PSBzbGlwX2lvY3RsLFxcbiBcXHQucmVjZWl2ZV9idWZcXHQ9IHNsaXBfcmVjZWl2ZV9idWYsXFxuIFxcdC53cml0ZV93YWtldXBcXHQ9IHNsaXBfd3JpdGVfd2FrZXVwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1MTo1NS45MTY5MTg2NjNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDk2NTM0MTM3NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0xJUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNsaXBfY2xvc2VcIixcbiAgICBcInNsaXBfb3BlblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBzbGlwX2hhbmd1cGAgY2FsbGJhY2sgZnJvbSB0aGUgU0xJUCBsaW5lIGRpc2NpcGxpbmUuIFRoaXMgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgdGhlIFNMSVAgZHJpdmVyIG9uIGhhbmd1cCwgYXMgYHNsaXBfY2xvc2VgIGlzIG5vIGxvbmdlciBjYWxsZWQgZGlyZWN0bHkgZnJvbSB0aGUgaGFuZ3VwIHBhdGgsIGJ1dCByYXRoZXIgZGVmZXJyZWQgdW50aWwgdGhlIGxkaXNjIGlzIGNsb3NlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSB0ZWFyZG93biBzZXF1ZW5jZSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBUVFkgaGFuZ3VwIG9wZXJhdGlvbnMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhODU3ZmY3YmFiYzQ2MWNmNzIwMDJiNzRjZDVhOWNkNmE1NjUwMjM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTE6NTE6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbGlwL3NsaXAuYyBiL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jXG5pbmRleCBmYWFlNzExY2Y3OTNkLi5hYzBmYzU5YzhjMjU5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNcbisrKyBiL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jXG5AQCAtODgxLDggKzg4MSw2IEBAIHN0YXRpYyBpbnQgc2xpcF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4gICogQ2xvc2UgZG93biBhIFNMSVAgY2hhbm5lbC5cbiAgKiBUaGlzIG1lYW5zIGZsdXNoaW5nIG91dCBhbnkgcGVuZGluZyBxdWV1ZXMsIGFuZCB0aGVuIHJldHVybmluZy4gVGhpc1xuICAqIGNhbGwgaXMgc2VyaWFsaXplZCBhZ2FpbnN0IG90aGVyIGxkaXNjIGZ1bmN0aW9ucy5cbi0gKlxuLSAqIFdlIGFsc28gdXNlIHRoaXMgbWV0aG9kIGZvIGEgaGFuZ3VwIGV2ZW50XG4gICovXG4gXG4gc3RhdGljIHZvaWQgc2xpcF9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuQEAgLTkxMCwxMSArOTA4LDYgQEAgc3RhdGljIHZvaWQgc2xpcF9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuIFx0dW5yZWdpc3Rlcl9uZXRkZXYoc2wtXHUwMDNlZGV2KTtcbiBcdC8qIFRoaXMgd2lsbCBjb21wbGV0ZSB2aWEgc2xfZnJlZV9uZXRkZXYgKi9cbiB9XG4tXG4tc3RhdGljIHZvaWQgc2xpcF9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcbi17XG4tXHRzbGlwX2Nsb3NlKHR0eSk7XG4tfVxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqXHRcdFx0U1RBTkRBUkQgU0xJUCBFTkNBUFNVTEFUSU9OXHRcdCAgXHQgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQEAgLTEyNzUsNyArMTI2OCw2IEBAIHN0YXRpYyBzdHJ1Y3QgdHR5X2xkaXNjX29wcyBzbF9sZGlzYyA9IHtcbiBcdC5uYW1lIFx0XHQ9IFwic2xpcFwiLFxuIFx0Lm9wZW4gXHRcdD0gc2xpcF9vcGVuLFxuIFx0LmNsb3NlXHQgXHQ9IHNsaXBfY2xvc2UsXG4tXHQuaGFuZ3VwXHQgXHQ9IHNsaXBfaGFuZ3VwLFxuIFx0LmlvY3RsXHRcdD0gc2xpcF9pb2N0bCxcbiBcdC5yZWNlaXZlX2J1Zlx0PSBzbGlwX3JlY2VpdmVfYnVmLFxuIFx0LndyaXRlX3dha2V1cFx0PSBzbGlwX3dyaXRlX3dha2V1cCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjUxOjU1LjkxNjkxOTk3M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzMzk4Mjc5MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29yayBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9zbGlwL3NsaXAuY2AuIEkgc2VlIGl0J3MgcmVtb3ZpbmcgYHNsaXBfaGFuZ3VwYCwgd2hpY2ggd2FzIGVzc2VudGlhbGx5IGp1c3QgYSByZWR1bmRhbnQgY2FsbCB0byBgc2xpcF9jbG9zZWAuIFRoYXQncyBmaW5lOyBjb25zb2xpZGF0aW9uIGlzIHVzdWFsbHkgYSBnb29kIHRoaW5nLiBBbmQsIGl0J3MgYWxzbyByZW1vdmluZyB0aGUgYXNzaWdubWVudCBvZiBgLmhhbmd1cCA9IHNsaXBfaGFuZ3VwYCBmcm9tIGBzbF9sZGlzY2AuXG5cbkhvbGQgb24uLi4gaWYgYHNsX2xkaXNjYCBubyBsb25nZXIgaGFzIGEgYC5oYW5ndXBgIGZ1bmN0aW9uIHBvaW50ZXIsIHdoYXQncyBnb2luZyB0byBoYXBwZW4gd2hlbiBhIGhhbmd1cCBldmVudCBhY3R1YWxseSAqb2NjdXJzKj8gSXQncyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBoZXJlLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHR0eSBsYXllci4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgYGluY2x1ZGUvbGludXgvdHR5X2xkaXNjLmhgIHRvIGNoZWNrIHRoZSBgdHR5X2xkaXNjX29wc2Agc3RydWN0dXJlIGRlZmluaXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGJlaGF2aW9yIGlzIHdoZW4gYSBgLmhhbmd1cGAgZnVuY3Rpb24gaXMgTlVMTC4gRG9lcyB0aGUgdHR5IGxheWVyIGdyYWNlZnVsbHkgaGFuZGxlIHRoZSBzaXR1YXRpb24sIG9yIGRvZXMgaXQgbGVhZCB0byBzb21lIHVuZXhwZWN0ZWQgcmVzdWx0P1xuXG5SaWdodCwgdGhlIHBhdGNoICpyZW1vdmVzKiBgc2xpcF9oYW5ndXBgICphbmQqIHRoZSBhc3NpZ25tZW50LiBTbyB0aGlzIGlzIGEgcG90ZW50aWFsIGZ1bmN0aW9uYWwgY2hhbmdlLCBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byB3YXRjaCBvdXQgZm9yLiBJZiB0aGUgaGFuZ3VwIGZ1bmN0aW9uIGlzIE5VTEwsIHRoZSB0dHkgbGF5ZXIgbWlnaHQgZG8gc29tZXRoaW5nIGRpZmZlcmVudCB0aGFuIGNhbGxpbmcgdGhlIGBzbGlwX2hhbmd1cGAgZnVuY3Rpb24uIE9yLCBtb3JlIGxpa2VseSwgaXQganVzdCBzaW1wbHkgZG9lc24ndCBjYWxsIGEgaGFuZ3VwIGZ1bmN0aW9uIGluIHRoYXQgY2FzZS4gSSdkIGJldHRlciBjb25maXJtIHRoYXQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHR0eV9sZGlzY19oYW5ndXBgIGl0c2VsZiBpbiBgZHJpdmVycy90dHkvdHR5X2xkaXNjLmNgIHRvIHNlZSBob3cgaXQgaGFuZGxlcyBhIE5VTEwgZnVuY3Rpb24gcG9pbnRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwOCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjUyOjA0LjI1Njc1MDA1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTAxMDM2NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHR5X2xkaXNjX2hhbmd1cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3R0eS90dHkuaD04Mz1zcGVlZF90IHR0eV90ZXJtaW9zX2lucHV0X2JhdWRfcmF0ZShjb25zdCBzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MpO1xcbmRyaXZlcnMvdHR5L3R0eS5oOjg0OnZvaWQgdHR5X2xkaXNjX2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBib29sIHJlc2V0KTtcXG5kcml2ZXJzL3R0eS90dHkuaC04NS1pbnQgdHR5X2xkaXNjX3JlaW5pdChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgZGlzYyk7XFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYz01Njg9c3RhdGljIHZvaWQgX190dHlfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBleGl0X3Nlc3Npb24pXFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYy02MjAtXFxuZHJpdmVycy90dHkvdHR5X2lvLmM6NjIxOlxcdHR0eV9sZGlzY19oYW5ndXAodHR5LCBjb25zX2ZpbHAgIT0gTlVMTCk7XFxuZHJpdmVycy90dHkvdHR5X2lvLmMtNjIyLVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM9NjQ3PWludCB0dHlfbGRpc2NfcmVpbml0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBkaXNjKVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjc1LS8qKlxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jOjY3NjogKiB0dHlfbGRpc2NfaGFuZ3VwXFx0LVxcdGhhbmd1cCBsZGlzYyByZXNldFxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTY3Ny0gKiBAdHR5OiB0dHkgYmVpbmcgaHVuZyB1cFxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjg5LSAqL1xcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jOjY5MDp2b2lkIHR0eV9sZGlzY19oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgYm9vbCByZWluaXQpXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjkxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NTI6MDYuNDQ2ODU3Nzg1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4MDg2MDk4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIFRUWSBMaW5lIERpc2NpcGxpbmUgSGFuZ3VwKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IGB0dHlfbGRpc2NfaGFuZ3VwYC4gTGV0J3MgemVybyBpbiBvbiB0aGF0IGZ1bmN0aW9uIGluIGBkcml2ZXJzL3R0eS90dHlfbGRpc2MuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQncyB0aGUgY29udGV4dCBoZXJlP1wiIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gbGluZSBkaXNjaXBsaW5lLCBzbyBJIGtub3cgaXQncyBhIGNyaXRpY2FsIHBhcnQgb2YgaG93IHRoZSB0ZXJtaW5hbCBpbnRlcmFjdHMgd2l0aCBhcHBsaWNhdGlvbnMuIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB3ZSdsbCBiZSBkZWFsaW5nIHdpdGggY29ubmVjdGlvbiB0ZXJtaW5hdGlvbiBhbmQgcmVzb3VyY2UgY2xlYW51cCwgbGlrZWx5IGFmdGVyIGEgZGV2aWNlIGRpc2Nvbm5lY3Qgb3Igc2ltaWxhciBldmVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGhhcHBlbnMgdG8gdGhlIGxpbmUgZGlzY2lwbGluZSBzdGF0ZSB3aGVuIGEgXCJoYW5ndXBcIiBzaWduYWwgaXMgcmVjZWl2ZWQuIFdoYXQgcmVzb3VyY2VzIGFyZSByZWxlYXNlZD8gV2hhdCBzaWduYWxzIGFyZSBzZW50PyBBbmQgbW9zdCBpbXBvcnRhbnRseSwgaG93IGlzIHRoZSBjb3JlIFRUWSBsYXllciBub3RpZmllZCBvZiB0aGlzIHRlcm1pbmF0aW9uPyBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgYSBrZXkgcGxheWVyIGluIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IGFuZCBwcmV2ZW50aW5nIHJlc291cmNlIGxlYWtzIHdoZW4gYSBUVFkgY29ubmVjdGlvbiBpcyBzZXZlcmVkLiBMZXQncyBzZWUgaG93IGl0IG9yY2hlc3RyYXRlcyB0aGUgdHJhbnNpdGlvbiB0byBhIGRpc2Nvbm5lY3RlZCBzdGF0ZSwgYW5kIGhvdyBjbGVhbmx5IGl0IGhhbmRsZXMgdGhlIGNsZWFudXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxODksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1MjoxMC4yMjc3MjA2MjVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3R0eS90dHlfbGRpc2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTA6XFx0dm9pZCB0dHlfbGRpc2NfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGJvb2wgcmVpbml0KVxcbiA2OTE6XFx0e1xcbiA2OTI6XFx0XFx0c3RydWN0IHR0eV9sZGlzYyAqbGQ7XFxuIDY5MzpcXHRcXG4gNjk0OlxcdFxcdHR0eV9sZGlzY19kZWJ1Zyh0dHksIFxcXCIlcDogaGFuZ3VwXFxcXG5cXFwiLCB0dHktXFx1MDAzZWxkaXNjKTtcXG4gNjk1OlxcdFxcbiA2OTY6XFx0XFx0bGQgPSB0dHlfbGRpc2NfcmVmKHR0eSk7XFxuIDY5NzpcXHRcXHRpZiAobGQgIT0gTlVMTCkge1xcbiA2OTg6XFx0XFx0XFx0aWYgKGxkLVxcdTAwM2VvcHMtXFx1MDAzZWZsdXNoX2J1ZmZlcilcXG4gNjk5OlxcdFxcdFxcdFxcdGxkLVxcdTAwM2VvcHMtXFx1MDAzZWZsdXNoX2J1ZmZlcih0dHkpO1xcbiA3MDA6XFx0XFx0XFx0dHR5X2RyaXZlcl9mbHVzaF9idWZmZXIodHR5KTtcXG4gNzAxOlxcdFxcdFxcdGlmICgodGVzdF9iaXQoVFRZX0RPX1dSSVRFX1dBS0VVUCwgXFx1MDAyNnR0eS1cXHUwMDNlZmxhZ3MpKSBcXHUwMDI2XFx1MDAyNlxcbiA3MDI6XFx0XFx0XFx0ICAgIGxkLVxcdTAwM2VvcHMtXFx1MDAzZXdyaXRlX3dha2V1cClcXG4gNzAzOlxcdFxcdFxcdFxcdGxkLVxcdTAwM2VvcHMtXFx1MDAzZXdyaXRlX3dha2V1cCh0dHkpO1xcbiA3MDQ6XFx0XFx0XFx0aWYgKGxkLVxcdTAwM2VvcHMtXFx1MDAzZWhhbmd1cClcXG4gNzA1OlxcdFxcdFxcdFxcdGxkLVxcdTAwM2VvcHMtXFx1MDAzZWhhbmd1cCh0dHkpO1xcbiA3MDY6XFx0XFx0XFx0dHR5X2xkaXNjX2RlcmVmKGxkKTtcXG4gNzA3OlxcdFxcdH1cXG4gNzA4OlxcdFxcbiA3MDk6XFx0XFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGwoXFx1MDAyNnR0eS1cXHUwMDNld3JpdGVfd2FpdCwgRVBPTExPVVQpO1xcbiA3MTA6XFx0XFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGwoXFx1MDAyNnR0eS1cXHUwMDNlcmVhZF93YWl0LCBFUE9MTElOKTtcXG4gNzExOlxcdFxcbiA3MTI6XFx0XFx0LypcXG4gNzEzOlxcdFxcdCAqIFNodXRkb3duIHRoZSBjdXJyZW50IGxpbmUgZGlzY2lwbGluZSwgYW5kIHJlc2V0IGl0IHRvXFxuIDcxNDpcXHRcXHQgKiBOX1RUWSBpZiBuZWVkIGJlLlxcbiA3MTU6XFx0XFx0ICpcXG4gNzE2OlxcdFxcdCAqIEF2b2lkIHJhY2luZyBzZXRfbGRpc2Mgb3IgdHR5X2xkaXNjX3JlbGVhc2VcXG4gNzE3OlxcdFxcdCAqL1xcbiA3MTg6XFx0XFx0dHR5X2xkaXNjX2xvY2sodHR5LCBNQVhfU0NIRURVTEVfVElNRU9VVCk7XFxuIDcxOTpcXHRcXG4gNzIwOlxcdFxcdGlmICh0dHktXFx1MDAzZWRyaXZlci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUVFlfRFJJVkVSX1JFU0VUX1RFUk1JT1MpXFxuIDcyMTpcXHRcXHRcXHR0dHlfcmVzZXRfdGVybWlvcyh0dHkpO1xcbiA3MjI6XFx0XFxuIDcyMzpcXHRcXHRpZiAodHR5LVxcdTAwM2VsZGlzYykge1xcbiA3MjQ6XFx0XFx0XFx0aWYgKHJlaW5pdCkge1xcbiA3MjU6XFx0XFx0XFx0XFx0aWYgKHR0eV9sZGlzY19yZWluaXQodHR5LCB0dHktXFx1MDAzZXRlcm1pb3MuY19saW5lKSBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjZcXG4gNzI2OlxcdFxcdFxcdFxcdCAgICB0dHlfbGRpc2NfcmVpbml0KHR0eSwgTl9UVFkpIFxcdTAwM2MgMClcXG4gNzI3OlxcdFxcdFxcdFxcdFxcdFdBUk5fT04odHR5X2xkaXNjX3JlaW5pdCh0dHksIE5fTlVMTCkgXFx1MDAzYyAwKTtcXG4gNzI4OlxcdFxcdFxcdH0gZWxzZVxcbiA3Mjk6XFx0XFx0XFx0XFx0dHR5X2xkaXNjX2tpbGwodHR5KTtcXG4gNzMwOlxcdFxcdH1cXG4gNzMxOlxcdFxcdHR0eV9sZGlzY191bmxvY2sodHR5KTtcXG4gNzMyOlxcdH1cXG4gNzMzOlxcdFxcbiA3MzQ6XFx0LyoqXFxuIDczNTpcXHQgKiB0dHlfbGRpc2Nfc2V0dXBcXHQtXFx0b3BlbiBsaW5lIGRpc2NpcGxpbmVcXG4gNzM2OlxcdCAqIEB0dHk6IHR0eSBiZWluZyBzaHV0IGRvd25cXG4gNzM3OlxcdCAqIEBvX3R0eTogcGFpciB0dHkgZm9yIHB0eS90dHkgcGFpcnNcXG4gNzM4OlxcdCAqXFxuIDczOTpcXHQgKiBDYWxsZWQgZHVyaW5nIHRoZSBpbml0aWFsIG9wZW4gb2YgYSB0dHkvcHR5IHBhaXIgaW4gb3JkZXIgdG8gc2V0IHVwIHRoZSBsaW5lXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjUyOjEwLjIyNzgxMTQ4NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMzg5NDgzMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMaW5lIERpc2NpcGxpbmUgSGFuZ3VwIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGhhbmd1cCBzZXF1ZW5jZSBmb3IgdGhlIGxpbmUgZGlzY2lwbGluZSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGlmIGBsZC1cdTAwM2VvcHMtXHUwMDNlaGFuZ3VwYCBpcyBOVUxMLCBpdCdzIHNpbXBseSBub3QgY2FsbGVkLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBCdXQgdGhlbiBJIHJlbWVtYmVyIHRoYXQgYHNsaXBfaGFuZ3VwYCAqdXNlZCogdG8gY2FsbCBgc2xpcF9jbG9zZWAsIGFuZCB0aGF0IGBzbGlwX2Nsb3NlYCBpcyByZXNwb25zaWJsZSBmb3IgdW5yZWdpc3RlcmluZyB0aGUgbmV0ZGV2IGFuZCBmcmVlaW5nIGl0LlxuXG5TbywgaWYgd2UgKnJlbW92ZSogdGhlIGNhbGwgdG8gYHNsaXBfaGFuZ3VwYCwgdGhlIGhhbmd1cCByb3V0aW5lIG1pZ2h0ICpub3QqIGNhbGwgYHNsaXBfY2xvc2VgLiBUaGF0J3MgYSBwb3RlbnRpYWwgcHJvYmxlbSEgTGV0IG1lIGNoZWNrIHRoZSBzZXF1ZW5jZSB1c2luZyBgdHR5X2xkaXNjX2hhbmd1cGAsIGFzIEkgcmVjYWxsIGl0LiBBaCwgeWVzLCBpdCBjYWxscyBgbGQtXHUwMDNlb3BzLVx1MDAzZWhhbmd1cGAgaWYgaXQgZXhpc3RzOlxuXG5gYGBjXG5cdGlmIChsZC1cdTAwM2VvcHMtXHUwMDNlaGFuZ3VwKVxuXHRcdGxkLVx1MDAzZW9wcy1cdTAwM2VoYW5ndXAodHR5KTtcbmBgYFxuXG5UaGVuLCBjcnVjaWFsbHksIGl0IHByb2NlZWRzIHRvIGNoZWNrIGFuZCwgcG90ZW50aWFsbHksIHJlaW5pdGlhbGl6ZSB0aGUgbGluZSBkaXNjaXBsaW5lOlxuXG5gYGBjXG5cdGlmICh0dHktXHUwMDNlbGRpc2MpIHtcblx0XHRpZiAocmVpbml0KSB7XG5cdFx0XHRpZiAodHR5X2xkaXNjX3JlaW5pdCh0dHksIHR0eS1cdTAwM2V0ZXJtaW9zLmNfbGluZSkgXHUwMDNjIDAgXHUwMDI2XHUwMDI2XG5cdFx0XHQgICAgdHR5X2xkaXNjX3JlaW5pdCh0dHksIE5fVFRZKSBcdTAwM2MgMClcblx0XHRcdFx0V0FSTl9PTih0dHlfbGRpc2NfcmVpbml0KHR0eSwgTl9OVUxMKSBcdTAwM2MgMCk7XG5cdFx0fSBlbHNlXG5cdFx0XHR0dHlfbGRpc2Nfa2lsbCh0dHkpO1xuXHR9XG5gYGBcblxuT2theSwgbm93IGl0IG1ha2VzIHNlbnNlLiBgdHR5X2xkaXNjX3JlaW5pdGAgYWN0dWFsbHkgY2FsbHMgYHR0eV9sZGlzY19jbG9zZSh0dHksIHR0eS1cdTAwM2VsZGlzYylgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBsZC1cdTAwM2VvcHMtXHUwMDNlY2xvc2UodHR5KWAuIEFoLCBzbyB0aGF0ICpzaG91bGQqIGNsZWFuIHVwLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYSBjdXN0b20gYGhhbmd1cGAgcm91dGluZSBleGlzdHMhXG5cbkJ1dCBsZXQgbWUgdmVyaWZ5IHRoYXQgdGhlIGB0dHlfbGRpc2NfcmVpbml0YCBhbmQgYHR0eV9sZGlzY19jbG9zZWAgcm91dGluZXMgYXJlIGluZGVlZCBiZWhhdmluZyBhcyBJIGV4cGVjdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGFjdHVhbGx5IGZyZWVpbmcgdGhlIHJlc291cmNlcyBwcm9wZXJseS4gTGV0IG1lIGdvIGNoZWNrIHRob3NlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMwMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjUyOjE3LjI2Njc2MTg0M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY0NyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY0NzpcXHRpbnQgdHR5X2xkaXNjX3JlaW5pdChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgZGlzYylcXG4gNjQ4OlxcdHtcXG4gNjQ5OlxcdFxcdHN0cnVjdCB0dHlfbGRpc2MgKmxkO1xcbiA2NTA6XFx0XFx0aW50IHJldHZhbDtcXG4gNjUxOlxcdFxcbiA2NTI6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcXHUwMDI2dHR5LVxcdTAwM2VsZGlzY19zZW0pO1xcbiA2NTM6XFx0XFx0bGQgPSB0dHlfbGRpc2NfZ2V0KHR0eSwgZGlzYyk7XFxuIDY1NDpcXHRcXHRpZiAoSVNfRVJSKGxkKSkge1xcbiA2NTU6XFx0XFx0XFx0QlVHX09OKGRpc2MgPT0gTl9UVFkpO1xcbiA2NTY6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIobGQpO1xcbiA2NTc6XFx0XFx0fVxcbiA2NTg6XFx0XFxuIDY1OTpcXHRcXHRpZiAodHR5LVxcdTAwM2VsZGlzYykge1xcbiA2NjA6XFx0XFx0XFx0dHR5X2xkaXNjX2Nsb3NlKHR0eSwgdHR5LVxcdTAwM2VsZGlzYyk7XFxuIDY2MTpcXHRcXHRcXHR0dHlfbGRpc2NfcHV0KHR0eS1cXHUwMDNlbGRpc2MpO1xcbiA2NjI6XFx0XFx0fVxcbiA2NjM6XFx0XFxuIDY2NDpcXHRcXHQvKiBzd2l0Y2ggdGhlIGxpbmUgZGlzY2lwbGluZSAqL1xcbiA2NjU6XFx0XFx0dHR5LVxcdTAwM2VsZGlzYyA9IGxkO1xcbiA2NjY6XFx0XFx0dHR5X3NldF90ZXJtaW9zX2xkaXNjKHR0eSwgZGlzYyk7XFxuIDY2NzpcXHRcXHRyZXR2YWwgPSB0dHlfbGRpc2Nfb3Blbih0dHksIHR0eS1cXHUwMDNlbGRpc2MpO1xcbiA2Njg6XFx0XFx0aWYgKHJldHZhbCkge1xcbiA2Njk6XFx0XFx0XFx0dHR5X2xkaXNjX3B1dCh0dHktXFx1MDAzZWxkaXNjKTtcXG4gNjcwOlxcdFxcdFxcdHR0eS1cXHUwMDNlbGRpc2MgPSBOVUxMO1xcbiA2NzE6XFx0XFx0fVxcbiA2NzI6XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gNjczOlxcdH1cXG4gNjc0OlxcdFxcbiA2NzU6XFx0LyoqXFxuIDY3NjpcXHQgKiB0dHlfbGRpc2NfaGFuZ3VwXFx0LVxcdGhhbmd1cCBsZGlzYyByZXNldFxcbiA2Nzc6XFx0ICogQHR0eTogdHR5IGJlaW5nIGh1bmcgdXBcXG4gNjc4OlxcdCAqIEByZWluaXQ6IHdoZXRoZXIgdG8gcmUtaW5pdGlhbGlzZSB0aGUgdHR5XFxuIDY3OTpcXHQgKlxcbiA2ODA6XFx0ICogU29tZSB0dHkgZGV2aWNlcyByZXNldCB0aGVpciB0ZXJtaW9zIHdoZW4gdGhleSByZWNlaXZlIGEgaGFuZ3VwIGV2ZW50LiBJblxcbiA2ODE6XFx0ICogdGhhdCBzaXR1YXRpb24gd2UgbXVzdCBhbHNvIHN3aXRjaCBiYWNrIHRvICVOX1RUWSBwcm9wZXJseSBiZWZvcmUgd2UgcmVzZXRcXG4gNjgyOlxcdCAqIHRoZSB0ZXJtaW9zIGRhdGEuXFxuIDY4MzpcXHQgKlxcbiA2ODQ6XFx0ICogTG9ja2luZzogV2UgY2FuIHRha2UgdGhlIGxkaXNjIG11dGV4IGFzIHRoZSByZXN0IG9mIHRoZSBjb2RlIGlzIGNhcmVmdWwgdG9cXG4gNjg1OlxcdCAqIGFsbG93IGZvciB0aGlzLlxcbiA2ODY6XFx0ICpcXG4gNjg3OlxcdCAqIEluIHRoZSBwdHkgcGFpciBjYXNlIHRoaXMgb2NjdXJzIGluIHRoZSBjbG9zZSgpIHBhdGggb2YgdGhlIHR0eSBpdHNlbGYgc28gd2VcXG4gNjg4OlxcdCAqIG11c3QgYmUgY2FyZWZ1bCBhYm91dCBsb2NraW5nIHJ1bGVzLlxcbiA2ODk6XFx0ICovXFxuIDY5MDpcXHR2b2lkIHR0eV9sZGlzY19oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgYm9vbCByZWluaXQpXFxuIDY5MTpcXHR7XFxuIDY5MjpcXHRcXHRzdHJ1Y3QgdHR5X2xkaXNjICpsZDtcXG4gNjkzOlxcdFxcbiA2OTQ6XFx0XFx0dHR5X2xkaXNjX2RlYnVnKHR0eSwgXFxcIiVwOiBoYW5ndXBcXFxcblxcXCIsIHR0eS1cXHUwMDNlbGRpc2MpO1xcbiA2OTU6XFx0XFxuIDY5NjpcXHRcXHRsZCA9IHR0eV9sZGlzY19yZWYodHR5KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NTI6MTcuMjY2ODYyOTMzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5MjE0OTI4NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2Vhc29uZWQgc3lzdGVtcyBlbmdpbmVlcjpcblxuKipEZWNvbnN0cnVjdGluZyBMaW5lIERpc2NpcGxpbmUgUmUtSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgYHR0eV9sZGlzY19yZWluaXRgIGZ1bmN0aW9uLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJk4oCUaXRzIGpvYiBpcyB0byBlc3NlbnRpYWxseSByZWZyZXNoIG9yIHJlc2V0IHRoZSBsaW5lIGRpc2NpcGxpbmUgYXNzb2NpYXRlZCB3aXRoIGEgdGVybWluYWwuIFRoZSBjb3JlIG9mIHRoaXMgcHJvY2VzcyBzZWVtcyB0byBiZSBhIGNhbGwgdG8gYHR0eV9sZGlzY19jbG9zZWAsIGFuZCB0aGUga2V5IGhlcmUgaXMgdGhlIGFyZ3VtZW50czogdGhlIGB0dHlgIHN0cnVjdHVyZSBpdHNlbGYsIHdoaWNoIHJlcHJlc2VudHMgdGhlIHRlcm1pbmFsIGRldmljZSwgYW5kLCBjcnVjaWFsbHksIGB0dHktXHUwMDNlbGRpc2NgLCB3aGljaCBnaXZlcyBhIGhhbmRsZSB0byB0aGUgY3VycmVudGx5IGFjdGl2ZSBsaW5lIGRpc2NpcGxpbmUuIFRoYXQgc2VlbXMgbG9naWNhbCDigJMgdG8gcmUtaW5pdGlhbGl6ZSwgeW91IGZpcnN0IGhhdmUgdG8gc2h1dCBkb3duIHRoZSBvbGQgb25lLlxuXG5Ob3csIHRoaXMgcGlxdWVzIG15IGludGVyZXN0LiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGNhbGwgdG8gYHR0eV9sZGlzY19jbG9zZWAuIFdoYXQncyB0aGUgc3BlY2lmaWMgYmVoYXZpb3IgdGhlcmU/IFdoYXQgcmVzb3VyY2VzIGRvZXMgaXQgcmVsZWFzZT8gQXJlIHRoZXJlIHN1YnRsZSBsb2NraW5nIGNvbnNpZGVyYXRpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIG9yIHBlcmhhcHMgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgZXhpc3QgYmV0d2VlbiBgdHR5X2xkaXNjX3JlaW5pdGAgYW5kIG90aGVyIGtlcm5lbCBvcGVyYXRpb25zPyBBbmQsIGluIHRoYXQgY29udGV4dCwgd2hhdCBhYm91dCB0aGF0IGB0dHlfbGRpc2Nfa2lsbGA/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCBgdHR5X2xkaXNjX2Nsb3NlYD8gQXJlIHRoZXkgYW5hbG9nb3VzIGZ1bmN0aW9ucywgb3IgYXJlIHRoZXkgbWVhbnQgZm9yIGRpc3RpbmN0IG9wZXJhdGlvbnM/IElzIGB0dHlfbGRpc2Nfa2lsbGAgbWVhbnQgdG8gdmlvbGVudGx5IGVqZWN0IGEgbGluZSBkaXNjaXBsaW5lLCB3aGVyZSBgdHR5X2xkaXNjX2Nsb3NlYCBpcyBtb3JlIGdyYWNlZnVsP1xuXG5cbiIsIklucHV0VG9rZW5zIjo1ODc1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1Mjo0Ni4xODgzNTc4MzNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTAyNDM3NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHR5X2xkaXNjX2tpbGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy90dHkvdHR5X2xkaXNjLmM9NTk3PUVYUE9SVF9TWU1CT0xfR1BMKHR0eV9zZXRfbGRpc2MpO1xcbi0tXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNTk5LS8qKlxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jOjYwMDogKiB0dHlfbGRpc2Nfa2lsbFxcdC1cXHR0ZWFyZG93biBsZGlzY1xcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTYwMS0gKiBAdHR5OiB0dHkgYmVpbmcgcmVsZWFzZWRcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTYwNC0gKi9cXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYzo2MDU6c3RhdGljIHZvaWQgdHR5X2xkaXNjX2tpbGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy02MDYte1xcbi0tXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM9NjkwPXZvaWQgdHR5X2xkaXNjX2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBib29sIHJlaW5pdClcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTcyOC1cXHRcXHR9IGVsc2VcXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYzo3Mjk6XFx0XFx0XFx0dHR5X2xkaXNjX2tpbGwodHR5KTtcXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy03MzAtXFx0fVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM9NzcxPXZvaWQgdHR5X2xkaXNjX3JlbGVhc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTc4MC1cXHR0dHlfbGRpc2NfbG9ja19wYWlyKHR0eSwgb190dHkpO1xcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jOjc4MTpcXHR0dHlfbGRpc2Nfa2lsbCh0dHkpO1xcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTc4Mi1cXHRpZiAob190dHkpXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM6NzgzOlxcdFxcdHR0eV9sZGlzY19raWxsKG9fdHR5KTtcXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy03ODQtXFx0dHR5X2xkaXNjX3VubG9ja19wYWlyKHR0eSwgb190dHkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1Mjo0OC4xNzg2MDU4NTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE0NDMxMzY3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGB0dHlfbGRpc2Nfa2lsbGAqKlxuXG5Pa2F5LCBzbyB0aGUgcHJvbXB0IG1lbnRpb25zIGB0dHlfbGRpc2Nfa2lsbGAuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgbGluZSBkaXNjaXBsaW5lcyB3aXRoaW4gdGhlIGtlcm5lbCdzIFRUWSBzdWJzeXN0ZW0uIEknbSBhc3N1bWluZyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGZ1bmN0aW9uIHRoYXQncyByZXNwb25zaWJsZSBmb3IsIHdlbGwsIGtpbGxpbmcgYSBsaW5lIGRpc2NpcGxpbmUsIGxpa2VseSBhcyBwYXJ0IG9mIGl0cyBkZS1pbml0aWFsaXphdGlvbiBvciB3aGVuIHRoZSBhc3NvY2lhdGVkIFRUWSBkZXZpY2UgaXMgYmVpbmcgY2xvc2VkIG9yIHJlY29uZmlndXJlZC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgYXJvdW5kIG1lbW9yeSBtYW5hZ2VtZW50IOKAkyB3aGF0IGtpbmQgb2YgY2xlYW51cCBkb2VzIHRoaXMgZnVuY3Rpb24gcGVyZm9ybT8gRG9lcyBpdCBmcmVlIGFueSBhbGxvY2F0ZWQgYnVmZmVycywgcmVsZWFzZSBsb2Nrcywgb3IgZGVyZWdpc3RlciBhbnkgY2FsbGJhY2tzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGxpbmUgZGlzY2lwbGluZT8gSSdtIHBpY3R1cmluZyBzY2VuYXJpb3Mgd2hlcmUgYSByb2d1ZSBsaW5lIGRpc2NpcGxpbmUgY291bGQgbGVhayByZXNvdXJjZXMgaWYgdGhpcyBmdW5jdGlvbiBpc24ndCBpbXBsZW1lbnRlZCBjb3JyZWN0bHksIGxlYWRpbmcgdG8ga2VybmVsIGluc3RhYmlsaXR5IG9yIGV2ZW4gY3Jhc2hlcy4gSSBhbHNvIHdhbnQgdG8gY29uc2lkZXIgcG9zc2libGUgcmFjZSBjb25kaXRpb25zIHdpdGggb3RoZXIga2VybmVsIHRocmVhZHMgdGhhdCBtaWdodCBzdGlsbCBiZSB1c2luZyB0aGUgbGluZSBkaXNjaXBsaW5lIG9yIHJlZmVyZW5jaW5nIGl0cyBkYXRhIHN0cnVjdHVyZXMuXG5cblRoZW4gSSBnZXQgdGhpbmtpbmcgYWJvdXQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIFRUWSBkcml2ZXIuIERvZXMgYHR0eV9sZGlzY19raWxsYCBzaWduYWwgdGhlIGRyaXZlciBpbiBhbnkgd2F5PyBEb2VzIGl0IG5lZWQgdG8gY29vcmRpbmF0ZSB3aXRoIHRoZSBkcml2ZXIgdG8gZW5zdXJlIGEgY2xlYW4gdGVhcmRvd24/IEknbSBtZW50YWxseSBjaGVja2luZyB0aGUgdHlwaWNhbCBzdHJ1Y3R1cmUgb2YgdGhlIFRUWSBkcml2ZXIgYW5kIGxpbmUgZGlzY2lwbGluZSBpbnRlcmFjdGlvbiwgYW5kIHRoZSBsaWtlbHkgcGxhY2VzIHdoZXJlIHRoaXMgaW50ZXJhY3Rpb24gd291bGQgYmUgbmVjZXNzYXJ5LiBJcyB0aGVyZSBhIGNoYWluIG9mIGZ1bmN0aW9uIGNhbGxzPyBXaGF0IGxvY2tzIGFyZSBpbnZvbHZlZD8gV2hhdCdzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlLCBhbmQgd2hhdCBoYXBwZW5zIGluIHRoZSBjYXNlIG9mIGEgZmFpbGVkIGNsZWFuLXVwP1xuXG5GdXJ0aGVybW9yZSwgSSBoYXZlIHRvIHRoaW5rIGFib3V0IGhvdyBsaW5lIGRpc2NpcGxpbmVzIGFyZSBpbnN0YWxsZWQgYW5kIHJlbW92ZWQgaW4gZ2VuZXJhbC4gSXMgdGhlcmUgYSBjbGVhciBvcmRlcmluZyBvZiBvcGVyYXRpb25zPyBEb2VzIGB0dHlfbGRpc2Nfa2lsbGAgYWNjb3VudCBmb3IgZGlmZmVyZW50IHNpdHVhdGlvbnMgb2YgYSBsaW5lIGRpc2NpcGxpbmU/IEkgd2lsbCBjb25zaWRlciBkaWZmZXJlbnQgbGluZSBkaXNjaXBsaW5lcyB3aXRoIGRpZmZlcmVudCBjYXBhYmlsaXRpZXMuXG5cbkZpbmFsbHksIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24uIEknZCB3YW50IHRvIGNoZWNrIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHByb3RlY3RlZCwgYW5kIHdoZXRoZXIgaXQncyBzYWZlIHRvIGNhbGwgZnJvbSBtdWx0aXBsZSBjb250ZXh0cy4gRG9lcyBpdCB1c2Ugc3BpbmxvY2tzLCBtdXRleGVzLCBvciBSQ1U/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGRlYWRsb2Nrcz8gSXQncyBlc3NlbnRpYWwgdG8gZW5zdXJlIHRoYXQgYW55IGNsZWFudXAgaXMgYXRvbWljIGFuZCBkb2Vzbid0IGxlYXZlIHRoZSBzeXN0ZW0gaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGB0dHlfc3RydWN0YCwgdGhlIGBsZGlzY2Agc3RydWN0dXJlIGl0c2VsZiwgYW5kIHRoZSBkcml2ZXIncyBwcml2YXRlIGRhdGEuIFNvLCBteSBtaW5kIGlzIGFscmVhZHkgcnVubmluZyB0aHJvdWdoIGRpZmZlcmVudCBjb2RlIHBhdGhzIGFuZCBwb3NzaWJsZSBmYWlsdXJlIHNjZW5hcmlvcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcxMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjUyOjUzLjMyMjkyMjA0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwNTpcXHRzdGF0aWMgdm9pZCB0dHlfbGRpc2Nfa2lsbChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxcbiA2MDY6XFx0e1xcbiA2MDc6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcXHUwMDI2dHR5LVxcdTAwM2VsZGlzY19zZW0pO1xcbiA2MDg6XFx0XFx0aWYgKCF0dHktXFx1MDAzZWxkaXNjKVxcbiA2MDk6XFx0XFx0XFx0cmV0dXJuO1xcbiA2MTA6XFx0XFx0LypcXG4gNjExOlxcdFxcdCAqIE5vdyBraWxsIG9mZiB0aGUgbGRpc2NcXG4gNjEyOlxcdFxcdCAqL1xcbiA2MTM6XFx0XFx0dHR5X2xkaXNjX2Nsb3NlKHR0eSwgdHR5LVxcdTAwM2VsZGlzYyk7XFxuIDYxNDpcXHRcXHR0dHlfbGRpc2NfcHV0KHR0eS1cXHUwMDNlbGRpc2MpO1xcbiA2MTU6XFx0XFx0LyogRm9yY2UgYW4gb29wcyBpZiB3ZSBtZXNzIHRoaXMgdXAgKi9cXG4gNjE2OlxcdFxcdHR0eS1cXHUwMDNlbGRpc2MgPSBOVUxMO1xcbiA2MTc6XFx0fVxcbiA2MTg6XFx0XFxuIDYxOTpcXHQvKipcXG4gNjIwOlxcdCAqIHR0eV9yZXNldF90ZXJtaW9zXFx0LVxcdHJlc2V0IHRlcm1pbmFsIHN0YXRlXFxuIDYyMTpcXHQgKiBAdHR5OiB0dHkgdG8gcmVzZXRcXG4gNjIyOlxcdCAqXFxuIDYyMzpcXHQgKiBSZXN0b3JlIGEgdGVybWluYWwgdG8gdGhlIGRyaXZlciBkZWZhdWx0IHN0YXRlLlxcbiA2MjQ6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjUyOjUzLjMyMjk5NzQxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NTA5NjkzMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRG91YmxlLUNoZWNraW5nIHRoZSBMaW5lIERpc2NpcGxpbmUgQ2xlYW51cCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY2xlYW51cCBzZXF1ZW5jZSBmb3IgdGhlIFRUWSBsaW5lIGRpc2NpcGxpbmUsIGFuZCBzb21ldGhpbmcncyBidWdnaW5nIG1lLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBob3cgYHR0eV9sZGlzY19raWxsYCBpcyBjYWxsaW5nIGB0dHlfbGRpc2NfY2xvc2VgLiBOb3csIHJlbWVtYmVyIHRoYXQgYHNsaXBfaGFuZ3VwYCB3YXMgYWxyZWFkeSwgaW5kZXBlbmRlbnRseSwgY2FsbGluZyBgc2xpcF9jbG9zZWAuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSdzIGFuIHVubmVjZXNzYXJ5IGRvdWJsZSBjYWxsLlxuXG5IZXJlJ3MgdGhlIGNoYWluOiBgc2xpcF9oYW5ndXBgIGNhbGxzIGBzbGlwX2Nsb3NlYC4gVGhlbiwgYHR0eV9sZGlzY19oYW5ndXBgIGNhbGxzIGVpdGhlciBgdHR5X2xkaXNjX3JlaW5pdGAgb3IgYHR0eV9sZGlzY19raWxsYC4gQm90aCBvZiB0aG9zZSBjYWxsIGB0dHlfbGRpc2NfY2xvc2VgLCBhbmQgKnRoYXQqIGNhbGxzIGBzbGlwX2Nsb3NlYC4gU28sIGlmIHRoYXQncyB0aGUgY2FzZSwgYHNsaXBfY2xvc2VgIHdvdWxkIGJlIGV4ZWN1dGVkIHR3aWNlIGZvciB3aGF0IHNob3VsZCBiZSBhIHNpbmdsZSBhY3Rpb24uIFRoYXQgY2FuJ3QgYmUgcmlnaHQuIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIFRpbWUgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGB0dHlfbGRpc2NfY2xvc2VgIGFuZCB2ZXJpZnkgd2hldGhlciBteSBzdXNwaWNpb24gaXMgYWNjdXJhdGUsIG9yIHdoZXRoZXIgdGhlcmUncyBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIEknbSBtaXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTUzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NTI6NTguMDczOTcwMDE2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2MDpcXHQgKiB0dHlfbGRpc2NfZmFpbHRvXFx0LVxcdGhlbHBlciBmb3IgbGRpc2MgZmFpbGJhY2tcXG4gNDYxOlxcdCAqIEB0dHk6IHR0eSB0byBvcGVuIHRoZSBsZGlzYyBvblxcbiA0NjI6XFx0ICogQGxkOiBsZGlzYyB3ZSBhcmUgdHJ5aW5nIHRvIGZhaWwgYmFjayB0b1xcbiA0NjM6XFx0ICpcXG4gNDY0OlxcdCAqIEhlbHBlciB0byB0cnkgYW5kIHJlY292ZXIgYSB0dHkgd2hlbiBzd2l0Y2hpbmcgYmFjayB0byB0aGUgb2xkIGxkaXNjIGZhaWxzXFxuIDQ2NTpcXHQgKiBhbmQgd2UgbmVlZCBzb21ldGhpbmcgYXR0YWNoZWQuXFxuIDQ2NjpcXHQgKi9cXG4gNDY3OlxcdHN0YXRpYyBpbnQgdHR5X2xkaXNjX2ZhaWx0byhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgbGQpXFxuIDQ2ODpcXHR7XFxuIDQ2OTpcXHRcXHRzdHJ1Y3QgdHR5X2xkaXNjICpkaXNjID0gdHR5X2xkaXNjX2dldCh0dHksIGxkKTtcXG4gNDcwOlxcdFxcdGludCByO1xcbiA0NzE6XFx0XFxuIDQ3MjpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFxcdTAwMjZ0dHktXFx1MDAzZWxkaXNjX3NlbSk7XFxuIDQ3MzpcXHRcXHRpZiAoSVNfRVJSKGRpc2MpKVxcbiA0NzQ6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoZGlzYyk7XFxuIDQ3NTpcXHRcXHR0dHktXFx1MDAzZWxkaXNjID0gZGlzYztcXG4gNDc2OlxcdFxcdHR0eV9zZXRfdGVybWlvc19sZGlzYyh0dHksIGxkKTtcXG4gNDc3OlxcdFxcdHIgPSB0dHlfbGRpc2Nfb3Blbih0dHksIGRpc2MpO1xcbiA0Nzg6XFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcbiA0Nzk6XFx0XFx0XFx0dHR5X2xkaXNjX3B1dChkaXNjKTtcXG4gNDgwOlxcdFxcdHJldHVybiByO1xcbiA0ODE6XFx0fVxcbiA0ODI6XFx0XFxuIDQ4MzpcXHQvKipcXG4gNDg0OlxcdCAqIHR0eV9sZGlzY19yZXN0b3JlXFx0LVxcdGhlbHBlciBmb3IgdHR5IGxkaXNjIGNoYW5nZVxcbiA0ODU6XFx0ICogQHR0eTogdHR5IHRvIHJlY292ZXJcXG4gNDg2OlxcdCAqIEBvbGQ6IHByZXZpb3VzIGxkaXNjXFxuIDQ4NzpcXHQgKlxcbiA0ODg6XFx0ICogUmVzdG9yZSB0aGUgcHJldmlvdXMgbGluZSBkaXNjaXBsaW5lIG9yICVOX1RUWSB3aGVuIGEgbGluZSBkaXNjaXBsaW5lIGNoYW5nZVxcbiA0ODk6XFx0ICogZmFpbHMgZHVlIHRvIGFuIG9wZW4gZXJyb3JcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NTI6NTguMDc0MDUxMjE2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MzQ4OTk0OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSHVudGluZyBEb3duIGB0dHlfbGRpc2NfY2xvc2VgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGltcGxlbWVudGF0aW9uIG9mIGB0dHlfbGRpc2NfY2xvc2VgLiBJdCdzIGEgc3RhbmRhcmQgZnVuY3Rpb24sIHNvIEknbSBub3QgZXhwZWN0aW5nIGFueXRoaW5nIHRvbyBlc290ZXJpYywgYnV0IEkgc3RpbGwgd2FudCB0byBiZSBwcmVjaXNlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGp1c3Qgc2VhcmNoIHRoZSBzb3VyY2UgY29kZSBkaXJlY3RseSwgbGlrZWx5IHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3IgYSBzaW1pbGFyIHRvb2wgdG8gcGlucG9pbnQgaXRzIGRlZmluaXRpb24uIEtub3dpbmcgdGhlIGxpa2VseSBjb250ZXh0LCBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgaXQgaW4gdGhlIGNvcmUgdHR5IGRyaXZlciBjb2RlLCBwZXJoYXBzIHVuZGVyIHRoZSBgZHJpdmVycy90dHkvYCBkaXJlY3RvcnksIG9yIG1heWJlIHdpdGhpbiBzb21lIGdlbmVyaWMgbGluZSBkaXNjaXBsaW5lIChsZGlzYykgaW5mcmFzdHJ1Y3R1cmUgZmlsZXMuXG5cbknigJlsbCBhbHNvIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBkZWZpbml0aW9uIG1pZ2h0IGJlIG1hY3JvLWRlZmluZWQsIG9yIHBhcnQgb2YgYSBzdHJ1Y3R1cmUsIHJhdGhlciB0aGFuIGEgc2luZ2xlIGZ1bmN0aW9uIGRlZmluaXRpb24sIHNvIEknbGwgbmVlZCB0byBsb29rIG91dCBmb3IgdGhvc2UgcG9zc2liaWxpdGllcyBhcyB3ZWxsLiBJZiB0aGUgaW1tZWRpYXRlIHNlYXJjaCBpcyB1bmZydWl0ZnVsLCBJJ2xsIGV4cGFuZCB0aGUgc2VhcmNoLCBsb29raW5nIGF0IGhlYWRlciBmaWxlcyBhbmQgaW5jbHVkZSBkaXJlY3RvcmllcyB0byB0cnkgYW5kIGlkZW50aWZ5IGZ1bmN0aW9uIHByb3RvdHlwZXMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHRoZSBmdW5jdGlvbiBpcyByZWZlcmVuY2VkLCBkZWZpbmVkLCBvciB1c2VkLlxuXG5JJ2xsIGJlIG1pbmRmdWwgb2YgcG90ZW50aWFsIGNvbXBsZXhpdGllcywgc3VjaCBhcyB3aGV0aGVyIGB0dHlfbGRpc2NfY2xvc2VgIGlzIGltcGxlbWVudGVkIGFzIGEgZGlyZWN0IGNhbGwsIG9yIGluZGlyZWN0bHksIHRocm91Z2ggZnVuY3Rpb24gcG9pbnRlcnMgaW4gYSBgdHR5X2xkaXNjX29wc2Agc3RydWN0dXJlLiBJbiB0aGF0IGNhc2UsIEknbGwgbmVlZCB0byBmaW5kIHdoZXJlIHRob3NlIG9wZXJhdGlvbnMgYXJlIHJlZ2lzdGVyZWQuIEnigJlsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSBzcGVjaWZpYyBsaW5lIGRpc2NpcGxpbmUgaW1wbGVtZW50YXRpb25zIHRoYXQgb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiB3aXRoIHRoZWlyIG93biBiZWhhdmlvci4gSSBhbnRpY2lwYXRlIG5lZWRpbmcgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR0eSBkcml2ZXIgY29yZSwgdGhlIGxpbmUgZGlzY2lwbGluZSwgYW5kIHRoZSBkZXZpY2UgZHJpdmVycyB0byBmdWxseSBncmFzcCBpdHMgZnVuY3Rpb25hbGl0eSBhbmQgaXRzIGltcGFjdC4gVWx0aW1hdGVseSwgSSdtIGFpbWluZyBmb3IgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBgdHR5X2xkaXNjX2Nsb3NlYCBkb2VzLCBob3cgaXQncyBjYWxsZWQsIGFuZCB3aGF0IHRoZSBpbXBvcnRhbnQgc2lkZS1lZmZlY3RzIGFyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQyNywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NTM6MDMuMDA4OTUyNTc5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTIzOTM4NDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR0eV9sZGlzY19jbG9zZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3R0eS90dHlfbGRpc2MuYz00MjY9c3RhdGljIGludCB0dHlfbGRpc2Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdHR5X2xkaXNjICpsZClcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTQ0Mi0vKipcXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYzo0NDM6ICogdHR5X2xkaXNjX2Nsb3NlXFx0XFx0LVxcdGNsb3NlIGEgbGluZSBkaXNjaXBsaW5lXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNDQ0LSAqIEB0dHk6IHR0eSB3ZSBhcmUgb3BlbmluZyB0aGUgbGRpc2Mgb25cXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTQ0OC0gKi9cXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYzo0NDk6c3RhdGljIHZvaWQgdHR5X2xkaXNjX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0dHlfbGRpc2MgKmxkKVxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTQ1MC17XFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYz01MTk9aW50IHR0eV9zZXRfbGRpc2Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGRpc2MpXFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy01NTYtXFx0LyogU2h1dGRvd24gdGhlIG9sZCBkaXNjaXBsaW5lLiAqL1xcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jOjU1NzpcXHR0dHlfbGRpc2NfY2xvc2UodHR5LCBvbGRfbGRpc2MpO1xcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTU1OC1cXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jPTYwNT1zdGF0aWMgdm9pZCB0dHlfbGRpc2Nfa2lsbChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjEyLVxcdCAqL1xcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jOjYxMzpcXHR0dHlfbGRpc2NfY2xvc2UodHR5LCB0dHktXFx1MDAzZWxkaXNjKTtcXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy02MTQtXFx0dHR5X2xkaXNjX3B1dCh0dHktXFx1MDAzZWxkaXNjKTtcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jPTY0Nz1pbnQgdHR5X2xkaXNjX3JlaW5pdChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgZGlzYylcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTY1OS1cXHRpZiAodHR5LVxcdTAwM2VsZGlzYykge1xcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jOjY2MDpcXHRcXHR0dHlfbGRpc2NfY2xvc2UodHR5LCB0dHktXFx1MDAzZWxkaXNjKTtcXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy02NjEtXFx0XFx0dHR5X2xkaXNjX3B1dCh0dHktXFx1MDAzZWxkaXNjKTtcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jPTc0Mz1pbnQgdHR5X2xkaXNjX3NldHVwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0dHlfc3RydWN0ICpvX3R0eSlcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTc1Ni1cXHRcXHRpZiAocmV0dmFsKSB7XFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM6NzU3OlxcdFxcdFxcdHR0eV9sZGlzY19jbG9zZSh0dHksIHR0eS1cXHUwMDNlbGRpc2MpO1xcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTc1OC1cXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1MzowNC41MzI4OTU3MjVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEzNzAzNTUzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsIGluIHRoZSBmaWVsZCwgc3BlYWtpbmcgZGlyZWN0bHkgdG8gYW5vdGhlciBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gYHR0eV9sZGlzY19jbG9zZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBjcmFjayBvcGVuIGB0dHlfbGRpc2NfY2xvc2VgLiBJbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIFRoaXMgaXMgdGhlIGNsZWFudXAgZnVuY3Rpb24gZm9yIGEgbGluZSBkaXNjaXBsaW5lLCBhbmQgd2UncmUgdGFsa2luZyBhYm91dCBjbG9zaW5nIGl0LiBTbywgSSBrbm93IHRoaXMgaXMgd2hlcmUgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBwYXJ0aWN1bGFyIGxpbmUgZGlzY2lwbGluZSBpbnN0YW5jZSBhcmUgZ29pbmcgdG8gYmUgcmVsZWFzZWQuIFRoaXMgbWVhbnMgYnVmZmVycywgdGltZXJzLCBhbnkgY3VzdG9tIHN0YXRlIHRoZSBkaXNjaXBsaW5lIG1haW50YWlucyDigJMgYWxsIG9mIGl0IG5lZWRzIHRvIGJlIGhhbmRsZWQgaGVyZS5cblxuRmlyc3QsIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gQ2xvc2luZyBhIGxpbmUgZGlzY2lwbGluZSBjYW4gaGFwcGVuIGF0IGFueSB0aW1lLCBwb3NzaWJseSB3aGlsZSBkYXRhIGlzIHN0aWxsIGJlaW5nIHByb2Nlc3NlZCBvciB0cmFuc21pdHRlZC4gU3luY2hyb25pemF0aW9uIGlzIGtleS4gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBubyBvdGhlciB0aHJlYWQgaXMgc3RpbGwgYWNjZXNzaW5nIHRoZSBsaW5lIGRpc2NpcGxpbmUncyBzdHJ1Y3R1cmVzIG9yIGJ1ZmZlcnMgZHVyaW5nIHRoZSBjbGVhbnVwLiBTcGlubG9ja3MsIG11dGV4ZXMuLi4gSSdsbCBiZSBzZWFyY2hpbmcgZm9yIGhvdyB0aGV5IGFyZSBpbXBsZW1lbnRlZCBoZXJlLCBhbmQgbWFraW5nIHN1cmUgdGhhdCB0aGUgbG9ja3MgYXJlIGhlbGQgd2hlcmUgYXBwcm9wcmlhdGUuIEknbSBhbHNvIHdhdGNoaW5nIG91dCBmb3IgaXNzdWVzIGxpa2UgZG91YmxlIGZyZWVzIG9yIG1lbW9yeSBsZWFrcy4gV2Ugd2FudCB0byBiZSBjZXJ0YWluIHRoYXQgZXZlcnkgYWxsb2NhdGVkIHJlc291cmNlIGlzIGZyZWVkIGNvcnJlY3RseSB3aGVuIHRoZSBsaW5lIGRpc2NpcGxpbmUgaXMgY2xvc2VkLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVFRZIGxheWVyIGl0c2VsZi4gSXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgZGlyZWN0bHkgYnkgdGhlIFRUWSBjb3JlLCBvciBhcmUgdGhlcmUgY2FsbGJhY2tzIGludm9sdmVkPyBIb3cgaXMgdGhlIGxpbmUgZGlzY2lwbGluZSdzIHN0YXRlIHVwZGF0ZWQgaW4gcmVsYXRpb24gdG8gdGhlIFRUWSdzIHN0YXRlPyBBcmUgdGhlcmUgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBUVFkgc3RydWN0dXJlcyB0aGF0IG5lZWQgdG8gYmUgY2xlYXJlZCBvciByZXNldD9cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIGEgcmVzb3VyY2UgY2FuJ3QgYmUgZnJlZWQ/IERvZXMgaXQgcmV0dXJuIGFuIGVycm9yIGNvZGU/IExvZyBhIHdhcm5pbmc/IEhvdyBpcyB0aGF0IGVycm9yIHByb3BhZ2F0ZWQgdXAgdGhlIHN0YWNrLCBhbmQgaG93IGRvZXMgdGhlIFRUWSBzeXN0ZW0gcmVzcG9uZCB0byBpdD9cblxuRmluYWxseSwgbGV0J3Mgc2VlIGhvdyB0aGUgbGluZSBkaXNjaXBsaW5lIGlzIHJlbW92ZWQgZnJvbSB0aGUgVFRZIGFuZCBkZWFsbG9jYXRlZC4gQXJlIHRoZXJlIGFueSBjdXN0b20gYWN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZSB0dHkgaXRzZWxmP1xuXG5cbiIsIklucHV0VG9rZW5zIjo5NTQ0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NTM6MDkuNjY5OTMzMzczWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0OSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ0OTpcXHRzdGF0aWMgdm9pZCB0dHlfbGRpc2NfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHR0eV9sZGlzYyAqbGQpXFxuIDQ1MDpcXHR7XFxuIDQ1MTpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFxcdTAwMjZ0dHktXFx1MDAzZWxkaXNjX3NlbSk7XFxuIDQ1MjpcXHRcXHRXQVJOX09OKCF0ZXN0X2JpdChUVFlfTERJU0NfT1BFTiwgXFx1MDAyNnR0eS1cXHUwMDNlZmxhZ3MpKTtcXG4gNDUzOlxcdFxcdGNsZWFyX2JpdChUVFlfTERJU0NfT1BFTiwgXFx1MDAyNnR0eS1cXHUwMDNlZmxhZ3MpO1xcbiA0NTQ6XFx0XFx0aWYgKGxkLVxcdTAwM2VvcHMtXFx1MDAzZWNsb3NlKVxcbiA0NTU6XFx0XFx0XFx0bGQtXFx1MDAzZW9wcy1cXHUwMDNlY2xvc2UodHR5KTtcXG4gNDU2OlxcdFxcdHR0eV9sZGlzY19kZWJ1Zyh0dHksIFxcXCIlcDogY2xvc2VkXFxcXG5cXFwiLCBsZCk7XFxuIDQ1NzpcXHR9XFxuIDQ1ODpcXHRcXG4gNDU5OlxcdC8qKlxcbiA0NjA6XFx0ICogdHR5X2xkaXNjX2ZhaWx0b1xcdC1cXHRoZWxwZXIgZm9yIGxkaXNjIGZhaWxiYWNrXFxuIDQ2MTpcXHQgKiBAdHR5OiB0dHkgdG8gb3BlbiB0aGUgbGRpc2Mgb25cXG4gNDYyOlxcdCAqIEBsZDogbGRpc2Mgd2UgYXJlIHRyeWluZyB0byBmYWlsIGJhY2sgdG9cXG4gNDYzOlxcdCAqXFxuIDQ2NDpcXHQgKiBIZWxwZXIgdG8gdHJ5IGFuZCByZWNvdmVyIGEgdHR5IHdoZW4gc3dpdGNoaW5nIGJhY2sgdG8gdGhlIG9sZCBsZGlzYyBmYWlsc1xcbiA0NjU6XFx0ICogYW5kIHdlIG5lZWQgc29tZXRoaW5nIGF0dGFjaGVkLlxcbiA0NjY6XFx0ICovXFxuIDQ2NzpcXHRzdGF0aWMgaW50IHR0eV9sZGlzY19mYWlsdG8oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGxkKVxcbiA0Njg6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1MzowOS42NzAwMDk1OTNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY5NDIzMzg3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNlcmlhbCBMaW5lIERpc2NpcGxpbmUgQ2xvc2UgUHJvY2VzcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gU28sIGB0dHlfbGRpc2NfY2xvc2VgIGlzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIGhlcmUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgaXQgZG9lcyBpcyBjYWxsIGBsZC1cdTAwM2VvcHMtXHUwMDNlY2xvc2UodHR5KWAuIE9rYXksIHRoYXQncyB0aGUgc3RhbmRhcmQgY2xvc2UgcHJvY2VkdXJlIGZvciBhIGxpbmUgZGlzY2lwbGluZS4gQnV0LCBpZiBgc2xpcF9oYW5ndXBgIHdhcywgaW4gZmFjdCwgY2FsbGluZyBgc2xpcF9jbG9zZWAsIHdvdWxkbid0IHRoYXQgcmVzdWx0IGluIGBzbGlwX2Nsb3NlYCBiZWluZyBjYWxsZWQgKnR3aWNlKj8gVGhhdCBzZWVtcy4uLiBpbmNvcnJlY3QsIGEgcG90ZW50aWFsIGRvdWJsZS1mcmVlIG9yIG90aGVyIHVuZGVzaXJhYmxlIG91dGNvbWUuIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBzbGlwX2Nsb3NlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbiwgdG8gdmVyaWZ5IGlmIHRoaXMgZG91YmxlLWNhbGwgc2NlbmFyaW8gaXMgZXZlbiBwb3NzaWJsZSBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIHdvdWxkIGJlIGlmIGl0IHdlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzc1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1MzoxNC4zNjQyNDUyMDhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODgwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODgwOlxcdC8qXFxuIDg4MTpcXHQgKiBDbG9zZSBkb3duIGEgU0xJUCBjaGFubmVsLlxcbiA4ODI6XFx0ICogVGhpcyBtZWFucyBmbHVzaGluZyBvdXQgYW55IHBlbmRpbmcgcXVldWVzLCBhbmQgdGhlbiByZXR1cm5pbmcuIFRoaXNcXG4gODgzOlxcdCAqIGNhbGwgaXMgc2VyaWFsaXplZCBhZ2FpbnN0IG90aGVyIGxkaXNjIGZ1bmN0aW9ucy5cXG4gODg0OlxcdCAqL1xcbiA4ODU6XFx0XFxuIDg4NjpcXHRzdGF0aWMgdm9pZCBzbGlwX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXFxuIDg4NzpcXHR7XFxuIDg4ODpcXHRcXHRzdHJ1Y3Qgc2xpcCAqc2wgPSB0dHktXFx1MDAzZWRpc2NfZGF0YTtcXG4gODg5OlxcdFxcbiA4OTA6XFx0XFx0LyogRmlyc3QgbWFrZSBzdXJlIHdlJ3JlIGNvbm5lY3RlZC4gKi9cXG4gODkxOlxcdFxcdGlmICghc2wgfHwgc2wtXFx1MDAzZW1hZ2ljICE9IFNMSVBfTUFHSUMgfHwgc2wtXFx1MDAzZXR0eSAhPSB0dHkpXFxuIDg5MjpcXHRcXHRcXHRyZXR1cm47XFxuIDg5MzpcXHRcXG4gODk0OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2c2wtXFx1MDAzZWxvY2spO1xcbiA4OTU6XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHR0eS1cXHUwMDNlZGlzY19kYXRhLCBOVUxMKTtcXG4gODk2OlxcdFxcdHNsLVxcdTAwM2V0dHkgPSBOVUxMO1xcbiA4OTc6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNsLVxcdTAwM2Vsb2NrKTtcXG4gODk4OlxcdFxcbiA4OTk6XFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxuIDkwMDpcXHRcXHRmbHVzaF93b3JrKFxcdTAwMjZzbC1cXHUwMDNldHhfd29yayk7XFxuIDkwMTpcXHRcXG4gOTAyOlxcdFxcdC8qIFZTViA9IHZlcnkgaW1wb3J0YW50IHRvIHJlbW92ZSB0aW1lcnMgKi9cXG4gOTAzOlxcdCNpZmRlZiBDT05GSUdfU0xJUF9TTUFSVFxcbiA5MDQ6XFx0XFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnNsLVxcdTAwM2VrZWVwYWxpdmVfdGltZXIpO1xcbiA5MDU6XFx0XFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnNsLVxcdTAwM2VvdXRmaWxsX3RpbWVyKTtcXG4gOTA2OlxcdCNlbmRpZlxcbiA5MDc6XFx0XFx0LyogRmx1c2ggbmV0d29yayBzaWRlICovXFxuIDkwODpcXHRcXHR1bnJlZ2lzdGVyX25ldGRldihzbC1cXHUwMDNlZGV2KTtcXG4gOTA5OlxcdFxcdC8qIFRoaXMgd2lsbCBjb21wbGV0ZSB2aWEgc2xfZnJlZV9uZXRkZXYgKi9cXG4gOTEwOlxcdH1cXG4gOTExOlxcdCAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuIDkxMjpcXHQgICpcXHRcXHRcXHRTVEFOREFSRCBTTElQIEVOQ0FQU1VMQVRJT05cXHRcXHQgIFxcdCAqXFxuIDkxMzpcXHQgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4gOTE0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1MzoxNC4zNjQzMzcwNDhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM2MjI5NzMwMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgUmVtb3ZpbmcgYHNsaXBfaGFuZ3VwYCoqXG5cbk9rYXksIHNvIHRoZSBjb2RlJ3MgbG9naWMgaXMgdGhpczogYHNsaXBfY2xvc2VgIGdldHMgY2FsbGVkLCBwb3RlbnRpYWxseSBtdWx0aXBsZSB0aW1lcywgZHVlIHRvIGludGVyYWN0aW9ucyBiZXR3ZWVuIGBzbGlwX2hhbmd1cGAsIGB0dHlfbGRpc2NfaGFuZ3VwYCwgYW5kIHRoZSBsaW5lIGRpc2NpcGxpbmUgbWFuYWdlbWVudC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHJlbW92aW5nIGBzbGlwX2hhbmd1cGAgd291bGQganVzdCBtYWtlIHRoaW5ncyBzaW1wbGVyLCBidXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgbW9yZSBzdWJ0bGUuXG5cbkxldCdzIGJyZWFrIGl0IGRvd246IG9yaWdpbmFsbHksIGBzbGlwX2hhbmd1cGAgY2FsbGVkIGBzbGlwX2Nsb3NlYC4gVGhlbiwgYHR0eV9sZGlzY19oYW5ndXBgIHdvdWxkIGFsc28gdHJpZ2dlciBvdGhlciBjbG9zZSBjYWxscyB0aHJvdWdoIGB0dHlfbGRpc2NfcmVpbml0YCwgYHR0eV9sZGlzY19raWxsYCwgYW5kIHVsdGltYXRlbHkgYHR0eV9sZGlzY19jbG9zZWAsIHdoaWNoIGFsc28gY2FsbHMgYHNsaXBfY2xvc2VgLiAgU28sIHlvdSBnZXQgYSBkb3VibGUgY2FsbC5cblxuTm93LCBpZiBgc2xpcF9oYW5ndXBgIGlzIHJlbW92ZWQsIHRoZSBmbG93IGNoYW5nZXMuICBgdHR5X2xkaXNjX2hhbmd1cGAgd2lsbCAqc3RpbGwqIGNhbGwgZnVuY3Rpb25zIHdoaWNoIGluZGlyZWN0bHkgaW52b2tlIGBzbGlwX2Nsb3NlYCwgc28gaXQncyBub3QgYSBjb21wbGV0ZSByZW1vdmFsIG9mIGZ1bmN0aW9uYWxpdHkuIFRoZSAqb3JkZXIqIG9mIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgdGltaW5nIG9mIGB1bnJlZ2lzdGVyX25ldGRldmAsIHNoaWZ0cy4gIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBidWcgZml4IGxpZXMuICBgc2xpcF9jbG9zZWAgbm93IGdldHMgY2FsbGVkICpsYXRlciogaW4gdGhlIHNodXRkb3duIHNlcXVlbmNlLCB3aGljaCByZWR1Y2VzIHRoZSBwb3RlbnRpYWwgZm9yIHVzZS1hZnRlci1mcmVlIG9yIG90aGVyIGNvbmN1cnJlbmN5IGlzc3VlcywgYmVjYXVzZSB0aGUgbGluZSBkaXNjaXBsaW5lIGlzbid0IGZ1bGx5IHNodXQgZG93biB3aGVuIHRoZSBuZXRkZXYgaXMgdW5yZWdpc3RlcmVkLiBUaGlzIGlzIHRoZSBrZXkgZGlmZmVyZW5jZS5cblxuU28sIGlzIHRoaXMgY2hhbmdlIHdvcnRoIGZ1enppbmc/ICBXaGlsZSB0aGUgcGF0Y2ggaXRzZWxmIG9ubHkgKnJlbW92ZXMqIGEgZnVuY3Rpb24sIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGl0IGNoYW5nZXMgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBkcml2ZXIuIEl0IGZpeGVzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGJ5IGRlbGF5aW5nIHRoZSBuZXRkZXYgdW5yZWdpc3RyYXRpb24uIEdpdmVuIHRoYXQsIEknZCBzYXkgdGhhdCB3aGlsZSB0aGVyZSBhcmUgbm8gKm5ldyogY29kZSBwYXRocyB0byBmdXp6LCB0aGUgY2hhbmdlICpkb2VzKiBhZmZlY3QgdGhlIHRpbWluZyBvZiBleGlzdGluZyBvcGVyYXRpb25zLCBhbmQgdGhhdCdzIHdvcnRoIGNoZWNraW5nLiAgV2UgY2FuIHVzZSBzeXprYWxsZXIgdG8gY3JlYXRlIGEgUFRZLCBzZXQgdGhlIGxpbmUgZGlzY2lwbGluZSB0byBTTElQLCBhbmQgdHJpZ2dlciBhIGhhbmd1cC5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIGl0ICpjaGFuZ2VzKiB0aGUgZXhlY3V0aW9uIGZsb3csIGFuZCBmaXhlcyBhIHBvdGVudGlhbGx5IGV4cGxvaXRhYmxlIHJhY2UgY29uZGl0aW9uLCBJJ20gdGhpbmtpbmcgeWVzLCB0aGVyZSdzIGEgcmVhc29uIHRvIGNoZWNrIGl0IHdpdGggZnV6emluZy4gRm9jdXNTeW1ib2xzPyAgVGhlcmUgYXJlbid0IG5ldyBmdW5jdGlvbiwgYnV0IGZvY3VzaW5nIG9uIGBzbGlwX2Nsb3NlYCBhbmQvb3IgYHNsaXBfb3BlbmAgd291bGQgYmUgcmVhc29uYWJsZSwgZ2l2ZW4gdGhhdCB0aGUgdGltaW5nIG9mIGBzbGlwX2Nsb3NlYCBpcyB0aGUgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE1NCwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1MzoyNy45ODczMTMxMDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDM5Nzc5NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2xpcF9jbG9zZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9zbGlwL3NsaXAuYz03OTI9c3RhdGljIGludCBzbGlwX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTg4NS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzo4ODY6c3RhdGljIHZvaWQgc2xpcF9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTg4Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYz0xMjY1PXN0YXRpYyBzdHJ1Y3QgdHR5X2xkaXNjX29wcyBzbF9sZGlzYyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEyNjktXFx0Lm9wZW4gXFx0XFx0PSBzbGlwX29wZW4sXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6MTI3MDpcXHQuY2xvc2VcXHQgXFx0PSBzbGlwX2Nsb3NlLFxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEyNzEtXFx0LmlvY3RsXFx0XFx0PSBzbGlwX2lvY3RsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1MzoyOS45OTEzMDE2OTlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc1NTQ1OTQzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipDaGVja2luZyBgc2xpcF9vcGVuYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgZmlyc3QgdGhpbmcgSSdtIGdvaW5nIHRvIGRvIGlzIGV4YW1pbmUgdGhhdCBgc2xpcF9vcGVuYCBmdW5jdGlvbiBvciB2YXJpYWJsZSDigJMgd2hhdGV2ZXIgaXQgbWF5IGJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIHByb2Nlc3Mgb3Igc3lzdGVtLiBJcyBpdCBhIGZsYWc/IEEgc3RhdGUgdmFyaWFibGU/IEEgZnVuY3Rpb24gY2FsbD8gV2hhdCBhcmUgaXRzIGlucHV0cyBhbmQgZXhwZWN0ZWQgb3V0cHV0cz8gV2hhdCBkZXBlbmRlbmNpZXMgZG9lcyBpdCBoYXZlPyBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCBpdHMgYmVoYXZpb3IsIGFuZCBob3cgaXQncyBkZWZpbmVkIGFuZCBjYWxsZWQsIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgdG8gZGV0ZXJtaW5pbmcgdGhlIGZsb3cgaGVyZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgbG9vayBmb3IgaXRzIGRlZmluaXRpb24gYW5kIGFueSByZWZlcmVuY2VzIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBhY3QuIFRoZSBjb250ZXh0IG9mIGl0cyB1c2Ugd2lsbCBpbmZvcm0gbXkgdW5kZXJzdGFuZGluZy4gSSdsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIGl0J3MgdGhyZWFkLXNhZmUgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbnZvbHZpbmcgaXQuIEknbSBhbHNvIGxvb2tpbmcgZm9yIGFueSBvYnZpb3VzIGVkZ2UgY2FzZXMgb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBpbiBpdHMgbG9naWMuIEJhc2ljYWxseSwgSSB3YW50IHRvIGdhaW4gYSBzdHJvbmcgbWVudGFsIG1vZGVsIG9mIGhvdyBgc2xpcF9vcGVuYCB3b3JrcyBzbyBJIGNhbiBidWlsZCBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NjQsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjUzOjQ3LjU0NTg5ODc1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODMzNDYzNjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNsaXBfb3BlblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9zbGlwL3NsaXAuYz02ODg9c3RhdGljIHZvaWQgc2xpcF9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1OCAqY3AsIGNvbnN0IHU4ICpmcCxcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTcxNy0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6NzE4OiAqICBzbGlwX29wZW4gaGVscGVyIHJvdXRpbmVzLlxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTcxOS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi0tXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9NzQzPXN0YXRpYyBzdHJ1Y3Qgc2xpcCAqc2xfYWxsb2Modm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTc5MS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzo3OTI6c3RhdGljIGludCBzbGlwX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy03OTMte1xcbi0tXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9MTI2NT1zdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgc2xfbGRpc2MgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy0xMjY4LVxcdC5uYW1lIFxcdFxcdD0gXFxcInNsaXBcXFwiLFxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jOjEyNjk6XFx0Lm9wZW4gXFx0XFx0PSBzbGlwX29wZW4sXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTI3MC1cXHQuY2xvc2VcXHQgXFx0PSBzbGlwX2Nsb3NlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1Mzo0OS4zNzkzNjcwMDFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU3MzEzODgxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBTTElQIERyaXZlciBCdWcqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHBpbnBvaW50IHRoaXMgYnVnLiBMZXQgbWUgdGhpbmsuLi4gQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgaW4gcGxheSBoZXJlIGJlc2lkZXMgdGhlIG9idmlvdXMgb25lcyBJJ3ZlIGJlZW4gd29ya2luZyB3aXRoPyBQZXJoYXBzIGBzbGlwX3JlY2VpdmVfYnVmYCwgYHNsaXBfd3JpdGVfd2FrZXVwYCwgb3IgZXZlbiBgc2xpcF9pb2N0bGA/IEhtbSwgbm8sIHdhaXQgYSBtaW51dGUsIHRoZSBjb3JlIGlzc3VlIHdhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBhIGhhbmd1cCwgd2Fzbid0IGl0PyBSaWdodC4gV2hlbiBhIGhhbmd1cCBoYXBwZW5zLCB0aGF0J3Mgd2hlbiBgdHR5X2xkaXNjX2hhbmd1cGAgZ2V0cyBjYWxsZWQuXG5cbkFscmlnaHQsIHNvIHRoZSBrZXkgYXJlYXMgdG8gcmVhbGx5IGZvY3VzIG9uIGFyZSBgc2xpcF9jbG9zZWAsIGBzbGlwX29wZW5gLCBhbmQsIGNydWNpYWxseSwgYHR0eV9sZGlzY19oYW5ndXBgLiBOb3csIHdoZXJlIGRvZXMgYHR0eV9sZGlzY19oYW5ndXBgIGxpdmU/IE9oIHllYWgsIHRoYXQncyBpbiBgZHJpdmVycy90dHkvdHR5X2xkaXNjLmNgLiBBbmQgdGhlIHBhdGNoIGl0c2VsZiwgdGhlIG9uZSB0aGF0J3Mgc3VwcG9zZWQgdG8gZml4IHRoaXMsIGl0J3MgbG9jYXRlZCBpbiBgZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNgLlxuXG5Pa2F5LCBuZXh0IHN0ZXAsIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiB0byBtYWtlIHN1cmUgU0xJUCBpcyBldmVuIGVuYWJsZWQgaW4gdGhpcyBzcGVjaWZpYyBzZXR1cCwganVzdCB0byBtYWtlIHN1cmUgSSdtIG5vdCBjaGFzaW5nIGEgcGhhbnRvbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1NTAsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NTM6NTQuOTUyNTA3ODUyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzkzOTI5MzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTElQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZy01LVxcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZzo2OmNvbmZpZyBTTElQXFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlNMSVAgKHNlcmlhbCBsaW5lKSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnPTQzPWlmIFNMSVBcXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNDQtXFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnOjQ1OmNvbmZpZyBTTElQX0NPTVBSRVNTRURcXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNDYtXFx0Ym9vbCBcXFwiQ1NMSVAgY29tcHJlc3NlZCBoZWFkZXJzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTYwLVxcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZzo2MTpjb25maWcgU0xJUF9TTUFSVFxcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZy02Mi1cXHRib29sIFxcXCJLZWVwYWxpdmUgYW5kIGxpbmVmaWxsXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTY4LVxcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZzo2OTpjb25maWcgU0xJUF9NT0RFX1NMSVA2XFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIlNpeCBiaXQgU0xJUCBlbmNhcHN1bGF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1Mzo1Ni4zNDY0NDE3N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzcyNjg5NzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cbk9rYXksIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBgU0xJUGAg4oCTIHRoYXQncyB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgb3IgbW9kdWxlIHdlJ3JlIHdvcmtpbmcgd2l0aC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiZG9lcyBgU0xJUGAgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzPyBXaGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIGNvbXBvbmVudHMgZG9lcyBpdCByZWx5IG9uIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT9cIiBVbmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gY29uZmlndXJhdGlvbnMgaXMgY3JpdGljYWwsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggY29tcGxleCBzeXN0ZW1zLiBJZGVudGlmeWluZyB0aGVzZSBkZXBlbmRlbmNpZXMgZWFybHkgb24gcHJldmVudHMgY2FzY2FkaW5nIGlzc3VlcyBsYXRlci4gTGV0J3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHRoZSBjaGFpbiBvZiBjb25uZWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyMTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1NDowNS43MTkxMzQ1NjFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFNMSVAgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgU0xJUFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlNMSVAgKHNlcmlhbCBsaW5lKSBzdXBwb3J0XFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBUVFlcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgU2F5IFkgaWYgeW91IGludGVuZCB0byB1c2UgU0xJUCBvciBDU0xJUCAoY29tcHJlc3NlZCBTTElQKSB0b1xcbiAgMTE6XFx0XFx0ICBjb25uZWN0IHRvIHlvdXIgSW50ZXJuZXQgc2VydmljZSBwcm92aWRlciBvciB0byBjb25uZWN0IHRvIHNvbWVcXG4gIDEyOlxcdFxcdCAgb3RoZXIgbG9jYWwgVW5peCBib3ggb3IgaWYgeW91IHdhbnQgdG8gY29uZmlndXJlIHlvdXIgTGludXggYm94IGFzIGFcXG4gIDEzOlxcdFxcdCAgU2xpcC9DU2xpcCBzZXJ2ZXIgZm9yIG90aGVyIHBlb3BsZSB0byBkaWFsIGluLiBTTElQIChTZXJpYWwgTGluZVxcbiAgMTQ6XFx0XFx0ICBJbnRlcm5ldCBQcm90b2NvbCkgaXMgYSBwcm90b2NvbCB1c2VkIHRvIHNlbmQgSW50ZXJuZXQgdHJhZmZpYyBvdmVyXFxuICAxNTpcXHRcXHQgIHNlcmlhbCBjb25uZWN0aW9ucyBzdWNoIGFzIHRlbGVwaG9uZSBsaW5lcyBvciBudWxsIG1vZGVtIGNhYmxlcztcXG4gIDE2OlxcdFxcdCAgbm93YWRheXMsIHRoZSBwcm90b2NvbCBQUFAgaXMgbW9yZSBjb21tb25seSB1c2VkIGZvciB0aGlzIHNhbWVcXG4gIDE3OlxcdFxcdCAgcHVycG9zZS5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBOb3JtYWxseSwgeW91ciBhY2Nlc3MgcHJvdmlkZXIgaGFzIHRvIHN1cHBvcnQgU0xJUCBpbiBvcmRlciBmb3IgeW91XFxuICAyMDpcXHRcXHQgIHRvIGJlIGFibGUgdG8gdXNlIGl0LCBidXQgdGhlcmUgaXMgbm93IGEgU0xJUCBlbXVsYXRvciBjYWxsZWQgU0xpUlBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NTQ6MDUuNzE5MjA0MzYxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MDc3NjU5MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNMSVAgRHJpdmVyIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGUgZGVwZW5kZW5jeTogYFNMSVBgIHJlbGllcyBvbiBgVFRZYC4gTWFrZXMgc2Vuc2UuIFRoZSBjb25maWcgbmVlZGVkIHRvIGVuYWJsZSBpdCBpcyBjbGVhcmx5IGBTTElQYC4gQnV0LCB0aGUgcmVhbCBtZWF0IG9mIHRoaXMgc2VlbXMgdG8gYmUgdGhlIHJlbW92YWwgb2YgYHNsaXBfaGFuZ3VwYC4gSG1tLCBpcyB0aGlzIGFjdHVhbGx5IGEgZnVuY3Rpb25hbCBjaGFuZ2U/XG5cblllcywgaXQgaXMhIEl0J3MgY2hhbmdpbmcgaG93IHRoZSBTTElQIGRyaXZlciBiZWhhdmVzIG9uIGhhbmd1cCwgd2hpY2ggaXMgZGVmaW5pdGVseSBzaWduaWZpY2FudC4gQmVmb3JlIHRoaXMgcGF0Y2gsIGBzbGlwX2hhbmd1cGAgd2FzIGNhbGxlZCwgd2hpY2ggaW4gdHVybiBjYWxsZWQgYHNsaXBfY2xvc2VgLiBOb3csIGBzbGlwX2hhbmd1cGAgaXMgYnlwYXNzZWQgZW50aXJlbHksIGFuZCBgc2xpcF9jbG9zZWAgaXMgb25seSBpbnZva2VkIHdoZW4gdGhlIGxpbmUgZGlzY2lwbGluZSAobGRpc2MpIGlzIGNsb3NlZC4gVGhhdCdzIGEgZGVmaW5pdGUgYmVoYXZpb3JhbCBzaGlmdCwgYW5kIHRoYXQgd2FycmFudHMgc29tZSBzZXJpb3VzIGZ1enppbmcuXG5cbk15IGZvY3VzIHNob3VsZCBiZSBzcXVhcmVseSBvbiB0aG9zZSBmdW5jdGlvbnM6IGBzbGlwX2Nsb3NlYCBhbmQgYHNsaXBfb3BlbmAuIFRoZSBjb25maWcgcmVtYWlucyBgU0xJUGAuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBzY2FuIHRoZSBjb2RlIHRvIGVuc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGFsc28gYmUgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY5NiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjU0OjExLjIyNjk3MzE1OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyODI4OTY1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbF9sZGlzY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9zbGlwL3NsaXAuYz0xMTgzPXN0YXRpYyBpbnQgc2xfc2lvY2RldnByaXZhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSxcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEyNjQtXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6MTI2NTpzdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgc2xfbGRpc2MgPSB7XFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTI2Ni1cXHQub3duZXIgXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jPTEyNzY9c3RhdGljIGludCBfX2luaXQgc2xpcF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy0xMzAwLVxcdC8qIEZpbGwgaW4gb3VyIGxpbmUgcHJvdG9jb2wgZGlzY2lwbGluZSwgYW5kIHJlZ2lzdGVyIGl0ICovXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6MTMwMTpcXHRzdGF0dXMgPSB0dHlfcmVnaXN0ZXJfbGRpc2MoXFx1MDAyNnNsX2xkaXNjKTtcXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy0xMzAyLVxcdGlmIChzdGF0dXMgIT0gMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9MTMwOT1zdGF0aWMgdm9pZCBfX2V4aXQgc2xpcF9leGl0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy0xMzYxLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jOjEzNjI6XFx0dHR5X3VucmVnaXN0ZXJfbGRpc2MoXFx1MDAyNnNsX2xkaXNjKTtcXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy0xMzYzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NTQ6MTIuNzU1MjY3NTQzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNzQ0MTQyMjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgZnJhbWVkIGFzIGEgc2VyaWVzIG9mIHRob3VnaHRzOlxuXG4qKkZvY3VzaW5nIG9uIEtleSBGdW5jdGlvbnMgYW5kIFNldHRpbmcgUmVzdWx0cyoqXG5cbk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgb3BlcmF0aW9uIGhpbmdlcyBvbiBgc2xpcF9jbG9zZWAgYW5kIGBzbGlwX29wZW5gLiBUaG9zZSBhcmUgdGhlIHR3byBmdW5jdGlvbnMgdGhhdCByZWFsbHkgbWF0dGVyIGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGZ1bGx5IHVuZGVyc3RhbmRpbmcgdGhlaXIgaW5wdXRzLCBvdXRwdXRzLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuXG5cbk9uY2UgSSBoYXZlIGEgc29saWQgZ3Jhc3Agb2YgdGhvc2UgdHdvLCB0aGUgbmV4dCBzdGVwIGlzIHN0cmFpZ2h0Zm9yd2FyZDogSSdsbCBuZWVkIHRvIHN0cmF0ZWdpY2FsbHkgc2V0IHRoZSByZXN1bHRzLiBUaGF0IG1lYW5zIGNhcmVmdWxseSBjcmFmdGluZyB0aGUgcmV0dXJuIHZhbHVlcyBvciBtb2RpZnlpbmcgYW55IHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyBhY2NvcmRpbmcgdG8gaG93IHRob3NlIGZ1bmN0aW9ucyBhcmUgaW50ZXJhY3RpbmcgYW5kIHdoYXQgdGhlIGRlc2lyZWQgb3ZlcmFsbCBvdXRjb21lIGlzLiBFZmZpY2llbmN5IGFuZCBhY2N1cmFjeSBhcmUsIG9mIGNvdXJzZSwgcGFyYW1vdW50LCBidXQgSSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHByb2Nlc3MgY2FuIGJlIHJlcHJvZHVjZWQgaWYgbmVjZXNzYXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQzNywiT3V0cHV0VG9rZW5zIjoxMzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1NDoyNS40OTk0MTMyMTdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDkxNjU0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0xJUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNsaXBfY2xvc2VcIixcbiAgICBcInNsaXBfb3BlblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBzbGlwX2hhbmd1cGAgY2FsbGJhY2sgZnJvbSB0aGUgU0xJUCBsaW5lIGRpc2NpcGxpbmUuIFRoaXMgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgdGhlIFNMSVAgZHJpdmVyIG9uIGhhbmd1cCwgYXMgYHNsaXBfY2xvc2VgIGlzIG5vIGxvbmdlciBjYWxsZWQgZGlyZWN0bHkgZnJvbSB0aGUgaGFuZ3VwIHBhdGgsIGJ1dCByYXRoZXIgZGVmZXJyZWQgdW50aWwgdGhlIGxkaXNjIGlzIGNsb3NlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSB0ZWFyZG93biBzZXF1ZW5jZSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBUVFkgaGFuZ3VwIG9wZXJhdGlvbnMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNMSVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbGlwX2Nsb3NlXCIsXG4gICAgXCJzbGlwX29wZW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBgc2xpcF9oYW5ndXBgIGNhbGxiYWNrIGZyb20gdGhlIFNMSVAgbGluZSBkaXNjaXBsaW5lLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBTTElQIGRyaXZlciBvbiBoYW5ndXAsIGFzIGBzbGlwX2Nsb3NlYCBpcyBubyBsb25nZXIgY2FsbGVkIGRpcmVjdGx5IGZyb20gdGhlIGhhbmd1cCBwYXRoLCBidXQgcmF0aGVyIGRlZmVycmVkIHVudGlsIHRoZSBsZGlzYyBpcyBjbG9zZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyB0aGUgdGVhcmRvd24gc2VxdWVuY2UgYW5kIGlzIHJlYWNoYWJsZSB2aWEgVFRZIGhhbmd1cCBvcGVyYXRpb25zLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NTQ6MjUuNTcwMzM2MDI1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU2MTg1NjY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjU0OjI1LjU3MDc2ODIwNVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTU2MTQyMTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYHNsaXBfaGFuZ3VwYCBmdW5jdGlvbiBhbmQgaXRzIGFzc2lnbm1lbnQgdG8gdGhlIGBoYW5ndXBgIGZpZWxkIGluIHRoZSBgc2xfbGRpc2NgIChgdHR5X2xkaXNjX29wc2ApIHN0cnVjdHVyZSB3aXRoaW4gdGhlIFNMSVAgbmV0d29yayBkcml2ZXIuIFRoaXMgY2hhbmdlIGFsdGVycyB0aGUgY29udHJvbCBmbG93IGR1cmluZyBhIFRUWSBoYW5ndXAgZXZlbnQsIG1lYW5pbmcgdGhlIFNMSVAgY2hhbm5lbCBtaWdodCBub3QgYmUgZXhwbGljaXRseSBjbG9zZWQgb24gaGFuZ3VwLiBJZiB0aGlzIG9taXNzaW9uIGludHJvZHVjZXMgYW55IGJ1Z3MsIHRoZXkgd291bGQgbGlrZWx5IG1hbmlmZXN0IGFzIHJlc291cmNlIGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXRpZXMgKGUuZy4sIGlmIHRoZSBUVFkgaXMgZGVzdHJveWVkIGJ1dCB0aGUgU0xJUCBjaGFubmVsIGNvbnRpbnVlcyB0byByZWZlcmVuY2UgaXQpLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIChpZiB0aGUgVFRZIGxheWVyIGF0dGVtcHRzIHRvIGNhbGwgYSBOVUxMIGBoYW5ndXBgIHBvaW50ZXIpLiBcXG5cXG5UaGVzZSBjbGFzc2VzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgc3VjaCBhcyBLQVNBTiAod2hpY2ggY2F0Y2hlcyB1c2UtYWZ0ZXItZnJlZSBhbmQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgYW5kIHN0YW5kYXJkIGtlcm5lbCBvb3BzL3BhbmljcyAod2hpY2ggY2F0Y2ggTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgZG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhZGQgbG9naWMgdGhhdCBjb3VsZCBvcGVyYXRlIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE4NTdmZjdiYWJjNDYxY2Y3MjAwMmI3NGNkNWE5Y2Q2YTU2NTAyMzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxMTo1MTo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jIGIvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNcbmluZGV4IGZhYWU3MTFjZjc5M2QuLmFjMGZjNTljOGMyNTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9zbGlwL3NsaXAuY1xuKysrIGIvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNcbkBAIC04ODEsOCArODgxLDYgQEAgc3RhdGljIGludCBzbGlwX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcbiAgKiBDbG9zZSBkb3duIGEgU0xJUCBjaGFubmVsLlxuICAqIFRoaXMgbWVhbnMgZmx1c2hpbmcgb3V0IGFueSBwZW5kaW5nIHF1ZXVlcywgYW5kIHRoZW4gcmV0dXJuaW5nLiBUaGlzXG4gICogY2FsbCBpcyBzZXJpYWxpemVkIGFnYWluc3Qgb3RoZXIgbGRpc2MgZnVuY3Rpb25zLlxuLSAqXG4tICogV2UgYWxzbyB1c2UgdGhpcyBtZXRob2QgZm8gYSBoYW5ndXAgZXZlbnRcbiAgKi9cbiBcbiBzdGF0aWMgdm9pZCBzbGlwX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG5AQCAtOTEwLDExICs5MDgsNiBAQCBzdGF0aWMgdm9pZCBzbGlwX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4gXHR1bnJlZ2lzdGVyX25ldGRldihzbC1cdTAwM2VkZXYpO1xuIFx0LyogVGhpcyB3aWxsIGNvbXBsZXRlIHZpYSBzbF9mcmVlX25ldGRldiAqL1xuIH1cbi1cbi1zdGF0aWMgdm9pZCBzbGlwX2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuLXtcbi1cdHNsaXBfY2xvc2UodHR5KTtcbi19XG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICpcdFx0XHRTVEFOREFSRCBTTElQIEVOQ0FQU1VMQVRJT05cdFx0ICBcdCAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5AQCAtMTI3NSw3ICsxMjY4LDYgQEAgc3RhdGljIHN0cnVjdCB0dHlfbGRpc2Nfb3BzIHNsX2xkaXNjID0ge1xuIFx0Lm5hbWUgXHRcdD0gXCJzbGlwXCIsXG4gXHQub3BlbiBcdFx0PSBzbGlwX29wZW4sXG4gXHQuY2xvc2VcdCBcdD0gc2xpcF9jbG9zZSxcbi1cdC5oYW5ndXBcdCBcdD0gc2xpcF9oYW5ndXAsXG4gXHQuaW9jdGxcdFx0PSBzbGlwX2lvY3RsLFxuIFx0LnJlY2VpdmVfYnVmXHQ9IHNsaXBfcmVjZWl2ZV9idWYsXG4gXHQud3JpdGVfd2FrZXVwXHQ9IHNsaXBfd3JpdGVfd2FrZXVwLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NTQ6MjUuNTcwNzY5MDM2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNTYxNDA0NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0xJUCBEcml2ZXIgSGFuZ3VwIFJlbW92YWwqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRha2luZyBvdXQgdGhlIGBzbGlwX2hhbmd1cGAgZnVuY3Rpb24gYW5kLCBjcnVjaWFsbHksIGl0cyBhc3NvY2lhdGlvbiB3aXRoIHRoZSBgaGFuZ3VwYCBmaWVsZCBpbiB0aGUgYHR0eV9sZGlzY19vcHNgIHN0cnVjdHVyZSBmb3IgdGhlIFNMSVAgZHJpdmVyLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiB3aGF0IGhhcHBlbnMgdG8gdGhlIGhhbmd1cCBoYW5kbGluZyBub3c/IGBzbGlwX2hhbmd1cGAgd2FzIGp1c3QgY2FsbGluZyBgc2xpcF9jbG9zZWAsIHNvIHJlbW92aW5nIGl0IGVzc2VudGlhbGx5IHNraXBzIHRoYXQgc3RlcCBkdXJpbmcgYSBoYW5ndXAuXG5cbk15IGluaXRpYWwgY29uY2VybiB3YXMgYXJvdW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBCdXQgd2FpdCwgdGhpcyBpcyBqdXN0IGEgZnVuY3Rpb24gcG9pbnRlciBhc3NpZ25tZW50IGJlaW5nIHJlbW92ZWQuIFRoZXJlJ3Mgbm8gbmV3IGRhdGEgYmVpbmcgYWxsb2NhdGVkIG9yIGNvcGllZCwgc28gdGhlIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBpcyBiYXNpY2FsbHkgemVyby4gVGhpcyBpc24ndCBhIEtNU0FOIHNpdHVhdGlvbi5cblxuQnV0IHRoZSByZWFsIHF1ZXN0aW9uIGlzOiB3aGF0J3MgdGhlIGJlaGF2aW9yIHdoZW4gYGhhbmd1cGAgaXMgKk5VTEwqPyBEb2VzIHRoZSBUVFkgbGF5ZXIgaGFuZGxlIHRoYXQgZ3JhY2VmdWxseT8gSSdtIHRoaW5raW5nIHRoZSBUVFkgbGF5ZXIgbWlnaHQganVzdCBub3QgY2FsbCBhbnl0aGluZywgb3IgcG9zc2libHkgY2FsbCBhIGRlZmF1bHQgaGFuZGxlci4gVGhlIGRvY3VtZW50YXRpb24gZm9yIGB0dHlfbGRpc2Nfb3BzYCBpbiBgaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaGAgc2hvdWxkIGNsZWFyIHRoYXQgdXAuXG5cbklmIHRoZSBUVFkgbGF5ZXIgZG9lc24ndCBoYW5kbGUgdGhlIE5VTEwgcG9pbnRlciwgd2UnZCBoYXZlIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBhIHN0cmFpZ2h0Zm9yd2FyZCBvb3BzIHRoYXQgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRlc3RpbmcgKEtBU0FOIG9yIHNvbWV0aGluZyBzaW1pbGFyKS4gSWYgbm90LCB3ZSBydW4gdGhlIHJpc2sgb2YgcmVzb3VyY2UgbGVha3MsIGEgc2xpcCBjaGFubmVsIG1pZ2h0IG5vdCBiZSBjbG9zZWQgd2hlbiB0aGUgdHR5IGhhbmdzIHVwLCBsZWFkaW5nIHRvIGEgcG9zc2libGUgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gaWYgdGhlIFRUWSBpcyBkZXN0cm95ZWQgYnV0IHRoZSBzbGlwIGNoYW5uZWwgc3RpbGwgcmVmZXJlbmNlcyBpdC4gSG93ZXZlciwgdG9vbHMgbGlrZSBLQVNBTiBhbmQgS01FTUxFQUsgc2hvdWxkIGRldGVjdCB0aGF0IHJpZ2h0IGF3YXkuXG5cblNvLCBpbiBzdW1tYXJ5OiB0aGUgbWFpbiBjb25jZXJuIGhlcmUgaXMgcmVzb3VyY2UgbWFuYWdlbWVudCwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8gbGVha3MuIFRoZSBwYXRjaCBjb3VsZCBpbnRyb2R1Y2UgcmVzb3VyY2UgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUsIG9yIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBidXQgYWxsIG9mIHRob3NlIHNob3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcvbWVtb3J5IHNhZmV0eSB0b29scy4gVGhlcmUncyBubyBLTVNBTiByaXNrIGhlcmUsIGFuZCB0aGUgaW1wYWN0IGlzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggdG8gcmVhc29uIGFib3V0LiBUaGUgcGF0Y2ggaXMgcHJvYmFibHkgc2FmZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwNSwiT3V0cHV0VG9rZW5zIjoyNzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1NDozNy4xMzIxNzU4ODZaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBzbGlwX2hhbmd1cGAgZnVuY3Rpb24gYW5kIGl0cyBhc3NpZ25tZW50IHRvIHRoZSBgaGFuZ3VwYCBmaWVsZCBpbiB0aGUgYHNsX2xkaXNjYCAoYHR0eV9sZGlzY19vcHNgKSBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBTTElQIG5ldHdvcmsgZHJpdmVyLiBUaGlzIGNoYW5nZSBhbHRlcnMgdGhlIGNvbnRyb2wgZmxvdyBkdXJpbmcgYSBUVFkgaGFuZ3VwIGV2ZW50LCBtZWFuaW5nIHRoZSBTTElQIGNoYW5uZWwgbWlnaHQgbm90IGJlIGV4cGxpY2l0bHkgY2xvc2VkIG9uIGhhbmd1cC4gSWYgdGhpcyBvbWlzc2lvbiBpbnRyb2R1Y2VzIGFueSBidWdzLCB0aGV5IHdvdWxkIGxpa2VseSBtYW5pZmVzdCBhcyByZXNvdXJjZSBsZWFrcywgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0aWVzIChlLmcuLCBpZiB0aGUgVFRZIGlzIGRlc3Ryb3llZCBidXQgdGhlIFNMSVAgY2hhbm5lbCBjb250aW51ZXMgdG8gcmVmZXJlbmNlIGl0KSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyAoaWYgdGhlIFRUWSBsYXllciBhdHRlbXB0cyB0byBjYWxsIGEgTlVMTCBgaGFuZ3VwYCBwb2ludGVyKS4gXFxuXFxuVGhlc2UgY2xhc3NlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIHN1Y2ggYXMgS0FTQU4gKHdoaWNoIGNhdGNoZXMgdXNlLWFmdGVyLWZyZWUgYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGFuZCBzdGFuZGFyZCBrZXJuZWwgb29wcy9wYW5pY3MgKHdoaWNoIGNhdGNoIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWRkIGxvZ2ljIHRoYXQgY291bGQgb3BlcmF0ZSBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBgc2xpcF9oYW5ndXBgIGZ1bmN0aW9uIGFuZCBpdHMgYXNzaWdubWVudCB0byB0aGUgYGhhbmd1cGAgZmllbGQgaW4gdGhlIGBzbF9sZGlzY2AgKGB0dHlfbGRpc2Nfb3BzYCkgc3RydWN0dXJlIHdpdGhpbiB0aGUgU0xJUCBuZXR3b3JrIGRyaXZlci4gVGhpcyBjaGFuZ2UgYWx0ZXJzIHRoZSBjb250cm9sIGZsb3cgZHVyaW5nIGEgVFRZIGhhbmd1cCBldmVudCwgbWVhbmluZyB0aGUgU0xJUCBjaGFubmVsIG1pZ2h0IG5vdCBiZSBleHBsaWNpdGx5IGNsb3NlZCBvbiBoYW5ndXAuIElmIHRoaXMgb21pc3Npb24gaW50cm9kdWNlcyBhbnkgYnVncywgdGhleSB3b3VsZCBsaWtlbHkgbWFuaWZlc3QgYXMgcmVzb3VyY2UgbGVha3MsIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcyAoZS5nLiwgaWYgdGhlIFRUWSBpcyBkZXN0cm95ZWQgYnV0IHRoZSBTTElQIGNoYW5uZWwgY29udGludWVzIHRvIHJlZmVyZW5jZSBpdCksIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgKGlmIHRoZSBUVFkgbGF5ZXIgYXR0ZW1wdHMgdG8gY2FsbCBhIE5VTEwgYGhhbmd1cGAgcG9pbnRlcikuIFxcblxcblRoZXNlIGNsYXNzZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBzdWNoIGFzIEtBU0FOICh3aGljaCBjYXRjaGVzIHVzZS1hZnRlci1mcmVlIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhbmQgc3RhbmRhcmQga2VybmVsIG9vcHMvcGFuaWNzICh3aGljaCBjYXRjaCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFkZCBsb2dpYyB0aGF0IGNvdWxkIG9wZXJhdGUgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowfj9fx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 11:04:13 +0000 UTC FinishedAt: 2026-08-26 11:54:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dc4b95b8fee95113587e93ca116356032d271371", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SLIP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dc4b95b8fee95113587e93ca116356032d271371", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SLIP" ], "series_id": "7cecbdf8-9990-49ef-bc74-c1fd2c19cd29" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "slip_close", "slip_open" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NMSVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbGlwX2Nsb3NlJiMzNDssCiAgICAmIzM0O3NsaXBfb3BlbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBzbGlwX2hhbmd1cGAgZnVuY3Rpb24gYW5kIGl0cyBhc3NpZ25tZW50IHRvIHRoZSBgaGFuZ3VwYCBmaWVsZCBpbiB0aGUgYHNsX2xkaXNjYCAoYHR0eV9sZGlzY19vcHNgKSBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBTTElQIG5ldHdvcmsgZHJpdmVyLiBUaGlzIGNoYW5nZSBhbHRlcnMgdGhlIGNvbnRyb2wgZmxvdyBkdXJpbmcgYSBUVFkgaGFuZ3VwIGV2ZW50LCBtZWFuaW5nIHRoZSBTTElQIGNoYW5uZWwgbWlnaHQgbm90IGJlIGV4cGxpY2l0bHkgY2xvc2VkIG9uIGhhbmd1cC4gSWYgdGhpcyBvbWlzc2lvbiBpbnRyb2R1Y2VzIGFueSBidWdzLCB0aGV5IHdvdWxkIGxpa2VseSBtYW5pZmVzdCBhcyByZXNvdXJjZSBsZWFrcywgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0aWVzIChlLmcuLCBpZiB0aGUgVFRZIGlzIGRlc3Ryb3llZCBidXQgdGhlIFNMSVAgY2hhbm5lbCBjb250aW51ZXMgdG8gcmVmZXJlbmNlIGl0KSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyAoaWYgdGhlIFRUWSBsYXllciBhdHRlbXB0cyB0byBjYWxsIGEgTlVMTCBgaGFuZ3VwYCBwb2ludGVyKS4gXG5cblRoZXNlIGNsYXNzZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBzdWNoIGFzIEtBU0FOICh3aGljaCBjYXRjaGVzIHVzZS1hZnRlci1mcmVlIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhbmQgc3RhbmRhcmQga2VybmVsIG9vcHMvcGFuaWNzICh3aGljaCBjYXRjaCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFkZCBsb2dpYyB0aGF0IGNvdWxkIG9wZXJhdGUgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBzbGlwX2hhbmd1cGAgY2FsbGJhY2sgZnJvbSB0aGUgU0xJUCBsaW5lIGRpc2NpcGxpbmUuIFRoaXMgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgdGhlIFNMSVAgZHJpdmVyIG9uIGhhbmd1cCwgYXMgYHNsaXBfY2xvc2VgIGlzIG5vIGxvbmdlciBjYWxsZWQgZGlyZWN0bHkgZnJvbSB0aGUgaGFuZ3VwIHBhdGgsIGJ1dCByYXRoZXIgZGVmZXJyZWQgdW50aWwgdGhlIGxkaXNjIGlzIGNsb3NlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSB0ZWFyZG93biBzZXF1ZW5jZSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBUVFkgaGFuZ3VwIG9wZXJhdGlvbnMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTg1N2ZmN2JhYmM0NjFjZjcyMDAyYjc0Y2Q1YTljZDZhNTY1MDIzOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDExOjUxOjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jIGIvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNcbmluZGV4IGZhYWU3MTFjZjc5M2QuLmFjMGZjNTljOGMyNTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9zbGlwL3NsaXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNcbkBAIC04ODEsOCAmIzQzOzg4MSw2IEBAIHN0YXRpYyBpbnQgc2xpcF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4gICogQ2xvc2UgZG93biBhIFNMSVAgY2hhbm5lbC5cbiAgKiBUaGlzIG1lYW5zIGZsdXNoaW5nIG91dCBhbnkgcGVuZGluZyBxdWV1ZXMsIGFuZCB0aGVuIHJldHVybmluZy4gVGhpc1xuICAqIGNhbGwgaXMgc2VyaWFsaXplZCBhZ2FpbnN0IG90aGVyIGxkaXNjIGZ1bmN0aW9ucy5cbi0gKlxuLSAqIFdlIGFsc28gdXNlIHRoaXMgbWV0aG9kIGZvIGEgaGFuZ3VwIGV2ZW50XG4gICovXG4gXG4gc3RhdGljIHZvaWQgc2xpcF9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuQEAgLTkxMCwxMSAmIzQzOzkwOCw2IEBAIHN0YXRpYyB2b2lkIHNsaXBfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2KHNsLVx1MDAzZWRldik7XG4gXHQvKiBUaGlzIHdpbGwgY29tcGxldGUgdmlhIHNsX2ZyZWVfbmV0ZGV2ICovXG4gfVxuLVxuLXN0YXRpYyB2b2lkIHNsaXBfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4te1xuLVx0c2xpcF9jbG9zZSh0dHkpO1xuLX1cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKlx0XHRcdFNUQU5EQVJEIFNMSVAgRU5DQVBTVUxBVElPTlx0XHQgIFx0ICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbkBAIC0xMjc1LDcgJiM0MzsxMjY4LDYgQEAgc3RhdGljIHN0cnVjdCB0dHlfbGRpc2Nfb3BzIHNsX2xkaXNjID0ge1xuIFx0Lm5hbWUgXHRcdD0gXCYjMzQ7c2xpcFwmIzM0OyxcbiBcdC5vcGVuIFx0XHQ9IHNsaXBfb3BlbixcbiBcdC5jbG9zZVx0IFx0PSBzbGlwX2Nsb3NlLFxuLVx0Lmhhbmd1cFx0IFx0PSBzbGlwX2hhbmd1cCxcbiBcdC5pb2N0bFx0XHQ9IHNsaXBfaW9jdGwsXG4gXHQucmVjZWl2ZV9idWZcdD0gc2xpcF9yZWNlaXZlX2J1ZixcbiBcdC53cml0ZV93YWtldXBcdD0gc2xpcF93cml0ZV93YWtldXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NMSVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbGlwX2Nsb3NlJiMzNDssCiAgICAmIzM0O3NsaXBfb3BlbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHRoZSBgc2xpcF9oYW5ndXBgIGNhbGxiYWNrIGZyb20gdGhlIFNMSVAgbGluZSBkaXNjaXBsaW5lLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBTTElQIGRyaXZlciBvbiBoYW5ndXAsIGFzIGBzbGlwX2Nsb3NlYCBpcyBubyBsb25nZXIgY2FsbGVkIGRpcmVjdGx5IGZyb20gdGhlIGhhbmd1cCBwYXRoLCBidXQgcmF0aGVyIGRlZmVycmVkIHVudGlsIHRoZSBsZGlzYyBpcyBjbG9zZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyB0aGUgdGVhcmRvd24gc2VxdWVuY2UgYW5kIGlzIHJlYWNoYWJsZSB2aWEgVFRZIGhhbmd1cCBvcGVyYXRpb25zLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE4NTdmZjdiYWJjNDYxY2Y3MjAwMmI3NGNkNWE5Y2Q2YTU2NTAyMzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAxMTo1MTo1MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jIGIvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMKaW5kZXggZmFhZTcxMWNmNzkzZC4uYWMwZmM1OWM4YzI1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMKQEAgLTg4MSw4ICYjNDM7ODgxLDYgQEAgc3RhdGljIGludCBzbGlwX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKICAqIENsb3NlIGRvd24gYSBTTElQIGNoYW5uZWwuCiAgKiBUaGlzIG1lYW5zIGZsdXNoaW5nIG91dCBhbnkgcGVuZGluZyBxdWV1ZXMsIGFuZCB0aGVuIHJldHVybmluZy4gVGhpcwogICogY2FsbCBpcyBzZXJpYWxpemVkIGFnYWluc3Qgb3RoZXIgbGRpc2MgZnVuY3Rpb25zLgotICoKLSAqIFdlIGFsc28gdXNlIHRoaXMgbWV0aG9kIGZvIGEgaGFuZ3VwIGV2ZW50CiAgKi8KIAogc3RhdGljIHZvaWQgc2xpcF9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQpAQCAtOTEwLDExICYjNDM7OTA4LDYgQEAgc3RhdGljIHZvaWQgc2xpcF9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogCXVucmVnaXN0ZXJfbmV0ZGV2KHNsLSZndDtkZXYpOwogCS8qIFRoaXMgd2lsbCBjb21wbGV0ZSB2aWEgc2xfZnJlZV9uZXRkZXYgKi8KIH0KLQotc3RhdGljIHZvaWQgc2xpcF9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQlzbGlwX2Nsb3NlKHR0eSk7Ci19CiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqCQkJU1RBTkRBUkQgU0xJUCBFTkNBUFNVTEFUSU9OCQkgIAkgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMjc1LDcgJiM0MzsxMjY4LDYgQEAgc3RhdGljIHN0cnVjdCB0dHlfbGRpc2Nfb3BzIHNsX2xkaXNjID0gewogCS5uYW1lIAkJPSAmIzM0O3NsaXAmIzM0OywKIAkub3BlbiAJCT0gc2xpcF9vcGVuLAogCS5jbG9zZQkgCT0gc2xpcF9jbG9zZSwKLQkuaGFuZ3VwCSAJPSBzbGlwX2hhbmd1cCwKIAkuaW9jdGwJCT0gc2xpcF9pb2N0bCwKIAkucmVjZWl2ZV9idWYJPSBzbGlwX3JlY2VpdmVfYnVmLAogCS53cml0ZV93YWtldXAJPSBzbGlwX3dyaXRlX3dha2V1cCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwOAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9zbGlwL3NsaXAuY2AuIEkgc2VlIGl0JiMzOTtzIHJlbW92aW5nIGBzbGlwX2hhbmd1cGAsIHdoaWNoIHdhcyBlc3NlbnRpYWxseSBqdXN0IGEgcmVkdW5kYW50IGNhbGwgdG8gYHNsaXBfY2xvc2VgLiBUaGF0JiMzOTtzIGZpbmU7IGNvbnNvbGlkYXRpb24gaXMgdXN1YWxseSBhIGdvb2QgdGhpbmcuIEFuZCwgaXQmIzM5O3MgYWxzbyByZW1vdmluZyB0aGUgYXNzaWdubWVudCBvZiBgLmhhbmd1cCA9IHNsaXBfaGFuZ3VwYCBmcm9tIGBzbF9sZGlzY2AuCgpIb2xkIG9uLi4uIGlmIGBzbF9sZGlzY2Agbm8gbG9uZ2VyIGhhcyBhIGAuaGFuZ3VwYCBmdW5jdGlvbiBwb2ludGVyLCB3aGF0JiMzOTtzIGdvaW5nIHRvIGhhcHBlbiB3aGVuIGEgaGFuZ3VwIGV2ZW50IGFjdHVhbGx5ICpvY2N1cnMqPyBJdCYjMzk7cyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBoZXJlLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHR0eSBsYXllci4gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IGBpbmNsdWRlL2xpbnV4L3R0eV9sZGlzYy5oYCB0byBjaGVjayB0aGUgYHR0eV9sZGlzY19vcHNgIHN0cnVjdHVyZSBkZWZpbml0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBiZWhhdmlvciBpcyB3aGVuIGEgYC5oYW5ndXBgIGZ1bmN0aW9uIGlzIE5VTEwuIERvZXMgdGhlIHR0eSBsYXllciBncmFjZWZ1bGx5IGhhbmRsZSB0aGUgc2l0dWF0aW9uLCBvciBkb2VzIGl0IGxlYWQgdG8gc29tZSB1bmV4cGVjdGVkIHJlc3VsdD8KClJpZ2h0LCB0aGUgcGF0Y2ggKnJlbW92ZXMqIGBzbGlwX2hhbmd1cGAgKmFuZCogdGhlIGFzc2lnbm1lbnQuIFNvIHRoaXMgaXMgYSBwb3RlbnRpYWwgZnVuY3Rpb25hbCBjaGFuZ2UsIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIHdhdGNoIG91dCBmb3IuIElmIHRoZSBoYW5ndXAgZnVuY3Rpb24gaXMgTlVMTCwgdGhlIHR0eSBsYXllciBtaWdodCBkbyBzb21ldGhpbmcgZGlmZmVyZW50IHRoYW4gY2FsbGluZyB0aGUgYHNsaXBfaGFuZ3VwYCBmdW5jdGlvbi4gT3IsIG1vcmUgbGlrZWx5LCBpdCBqdXN0IHNpbXBseSBkb2VzbiYjMzk7dCBjYWxsIGEgaGFuZ3VwIGZ1bmN0aW9uIGluIHRoYXQgY2FzZS4gSSYjMzk7ZCBiZXR0ZXIgY29uZmlybSB0aGF0LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdHR5X2xkaXNjX2hhbmd1cGAgaXRzZWxmIGluIGBkcml2ZXJzL3R0eS90dHlfbGRpc2MuY2AgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIGEgTlVMTCBmdW5jdGlvbiBwb2ludGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R0eV9sZGlzY19oYW5ndXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy90dHkvdHR5Lmg9ODM9c3BlZWRfdCB0dHlfdGVybWlvc19pbnB1dF9iYXVkX3JhdGUoY29uc3Qgc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zKTtcbmRyaXZlcnMvdHR5L3R0eS5oOjg0OnZvaWQgdHR5X2xkaXNjX2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBib29sIHJlc2V0KTtcbmRyaXZlcnMvdHR5L3R0eS5oLTg1LWludCB0dHlfbGRpc2NfcmVpbml0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBkaXNjKTtcbi0tXG5kcml2ZXJzL3R0eS90dHlfaW8uYz01Njg9c3RhdGljIHZvaWQgX190dHlfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBleGl0X3Nlc3Npb24pXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmMtNjIwLVxuZHJpdmVycy90dHkvdHR5X2lvLmM6NjIxOlx0dHR5X2xkaXNjX2hhbmd1cCh0dHksIGNvbnNfZmlscCAhPSBOVUxMKTtcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTYyMi1cbi0tXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYz02NDc9aW50IHR0eV9sZGlzY19yZWluaXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGRpc2MpXG4tLVxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjc1LS8qKlxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM6Njc2OiAqIHR0eV9sZGlzY19oYW5ndXBcdC1cdGhhbmd1cCBsZGlzYyByZXNldFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjc3LSAqIEB0dHk6IHR0eSBiZWluZyBodW5nIHVwXG4tLVxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjg5LSAqL1xuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM6NjkwOnZvaWQgdHR5X2xkaXNjX2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBib29sIHJlaW5pdClcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTY5MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE4OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBjb2RlOgoKKipEaXZpbmcgaW50byB0aGUgVFRZIExpbmUgRGlzY2lwbGluZSBIYW5ndXAqKgoKT2theSwgdGltZSB0byBkaXNzZWN0IGB0dHlfbGRpc2NfaGFuZ3VwYC4gTGV0JiMzOTtzIHplcm8gaW4gb24gdGhhdCBmdW5jdGlvbiBpbiBgZHJpdmVycy90dHkvdHR5X2xkaXNjLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGhlcmU/JiMzNDsgVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb24gcmVsYXRlZCB0byBsaW5lIGRpc2NpcGxpbmUsIHNvIEkga25vdyBpdCYjMzk7cyBhIGNyaXRpY2FsIHBhcnQgb2YgaG93IHRoZSB0ZXJtaW5hbCBpbnRlcmFjdHMgd2l0aCBhcHBsaWNhdGlvbnMuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgd2UmIzM5O2xsIGJlIGRlYWxpbmcgd2l0aCBjb25uZWN0aW9uIHRlcm1pbmF0aW9uIGFuZCByZXNvdXJjZSBjbGVhbnVwLCBsaWtlbHkgYWZ0ZXIgYSBkZXZpY2UgZGlzY29ubmVjdCBvciBzaW1pbGFyIGV2ZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgaGFwcGVucyB0byB0aGUgbGluZSBkaXNjaXBsaW5lIHN0YXRlIHdoZW4gYSAmIzM0O2hhbmd1cCYjMzQ7IHNpZ25hbCBpcyByZWNlaXZlZC4gV2hhdCByZXNvdXJjZXMgYXJlIHJlbGVhc2VkPyBXaGF0IHNpZ25hbHMgYXJlIHNlbnQ/IEFuZCBtb3N0IGltcG9ydGFudGx5LCBob3cgaXMgdGhlIGNvcmUgVFRZIGxheWVyIG5vdGlmaWVkIG9mIHRoaXMgdGVybWluYXRpb24/IEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgYSBrZXkgcGxheWVyIGluIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IGFuZCBwcmV2ZW50aW5nIHJlc291cmNlIGxlYWtzIHdoZW4gYSBUVFkgY29ubmVjdGlvbiBpcyBzZXZlcmVkLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCBvcmNoZXN0cmF0ZXMgdGhlIHRyYW5zaXRpb24gdG8gYSBkaXNjb25uZWN0ZWQgc3RhdGUsIGFuZCBob3cgY2xlYW5seSBpdCBoYW5kbGVzIHRoZSBjbGVhbnVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy90dHkvdHR5X2xkaXNjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5MDpcdHZvaWQgdHR5X2xkaXNjX2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBib29sIHJlaW5pdClcbiA2OTE6XHR7XG4gNjkyOlx0XHRzdHJ1Y3QgdHR5X2xkaXNjICpsZDtcbiA2OTM6XHRcbiA2OTQ6XHRcdHR0eV9sZGlzY19kZWJ1Zyh0dHksIFwmIzM0OyVwOiBoYW5ndXBcXG5cJiMzNDssIHR0eS1cdTAwM2VsZGlzYyk7XG4gNjk1Olx0XG4gNjk2Olx0XHRsZCA9IHR0eV9sZGlzY19yZWYodHR5KTtcbiA2OTc6XHRcdGlmIChsZCAhPSBOVUxMKSB7XG4gNjk4Olx0XHRcdGlmIChsZC1cdTAwM2VvcHMtXHUwMDNlZmx1c2hfYnVmZmVyKVxuIDY5OTpcdFx0XHRcdGxkLVx1MDAzZW9wcy1cdTAwM2VmbHVzaF9idWZmZXIodHR5KTtcbiA3MDA6XHRcdFx0dHR5X2RyaXZlcl9mbHVzaF9idWZmZXIodHR5KTtcbiA3MDE6XHRcdFx0aWYgKCh0ZXN0X2JpdChUVFlfRE9fV1JJVEVfV0FLRVVQLCBcdTAwMjZ0dHktXHUwMDNlZmxhZ3MpKSBcdTAwMjZcdTAwMjZcbiA3MDI6XHRcdFx0ICAgIGxkLVx1MDAzZW9wcy1cdTAwM2V3cml0ZV93YWtldXApXG4gNzAzOlx0XHRcdFx0bGQtXHUwMDNlb3BzLVx1MDAzZXdyaXRlX3dha2V1cCh0dHkpO1xuIDcwNDpcdFx0XHRpZiAobGQtXHUwMDNlb3BzLVx1MDAzZWhhbmd1cClcbiA3MDU6XHRcdFx0XHRsZC1cdTAwM2VvcHMtXHUwMDNlaGFuZ3VwKHR0eSk7XG4gNzA2Olx0XHRcdHR0eV9sZGlzY19kZXJlZihsZCk7XG4gNzA3Olx0XHR9XG4gNzA4Olx0XG4gNzA5Olx0XHR3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbChcdTAwMjZ0dHktXHUwMDNld3JpdGVfd2FpdCwgRVBPTExPVVQpO1xuIDcxMDpcdFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGwoXHUwMDI2dHR5LVx1MDAzZXJlYWRfd2FpdCwgRVBPTExJTik7XG4gNzExOlx0XG4gNzEyOlx0XHQvKlxuIDcxMzpcdFx0ICogU2h1dGRvd24gdGhlIGN1cnJlbnQgbGluZSBkaXNjaXBsaW5lLCBhbmQgcmVzZXQgaXQgdG9cbiA3MTQ6XHRcdCAqIE5fVFRZIGlmIG5lZWQgYmUuXG4gNzE1Olx0XHQgKlxuIDcxNjpcdFx0ICogQXZvaWQgcmFjaW5nIHNldF9sZGlzYyBvciB0dHlfbGRpc2NfcmVsZWFzZVxuIDcxNzpcdFx0ICovXG4gNzE4Olx0XHR0dHlfbGRpc2NfbG9jayh0dHksIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTtcbiA3MTk6XHRcbiA3MjA6XHRcdGlmICh0dHktXHUwMDNlZHJpdmVyLVx1MDAzZWZsYWdzIFx1MDAyNiBUVFlfRFJJVkVSX1JFU0VUX1RFUk1JT1MpXG4gNzIxOlx0XHRcdHR0eV9yZXNldF90ZXJtaW9zKHR0eSk7XG4gNzIyOlx0XG4gNzIzOlx0XHRpZiAodHR5LVx1MDAzZWxkaXNjKSB7XG4gNzI0Olx0XHRcdGlmIChyZWluaXQpIHtcbiA3MjU6XHRcdFx0XHRpZiAodHR5X2xkaXNjX3JlaW5pdCh0dHksIHR0eS1cdTAwM2V0ZXJtaW9zLmNfbGluZSkgXHUwMDNjIDAgXHUwMDI2XHUwMDI2XG4gNzI2Olx0XHRcdFx0ICAgIHR0eV9sZGlzY19yZWluaXQodHR5LCBOX1RUWSkgXHUwMDNjIDApXG4gNzI3Olx0XHRcdFx0XHRXQVJOX09OKHR0eV9sZGlzY19yZWluaXQodHR5LCBOX05VTEwpIFx1MDAzYyAwKTtcbiA3Mjg6XHRcdFx0fSBlbHNlXG4gNzI5Olx0XHRcdFx0dHR5X2xkaXNjX2tpbGwodHR5KTtcbiA3MzA6XHRcdH1cbiA3MzE6XHRcdHR0eV9sZGlzY191bmxvY2sodHR5KTtcbiA3MzI6XHR9XG4gNzMzOlx0XG4gNzM0Olx0LyoqXG4gNzM1Olx0ICogdHR5X2xkaXNjX3NldHVwXHQtXHRvcGVuIGxpbmUgZGlzY2lwbGluZVxuIDczNjpcdCAqIEB0dHk6IHR0eSBiZWluZyBzaHV0IGRvd25cbiA3Mzc6XHQgKiBAb190dHk6IHBhaXIgdHR5IGZvciBwdHkvdHR5IHBhaXJzXG4gNzM4Olx0ICpcbiA3Mzk6XHQgKiBDYWxsZWQgZHVyaW5nIHRoZSBpbml0aWFsIG9wZW4gb2YgYSB0dHkvcHR5IHBhaXIgaW4gb3JkZXIgdG8gc2V0IHVwIHRoZSBsaW5lXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMwMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExpbmUgRGlzY2lwbGluZSBIYW5ndXAgUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBoYW5ndXAgc2VxdWVuY2UgZm9yIHRoZSBsaW5lIGRpc2NpcGxpbmUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpZiBgbGQtJmd0O29wcy0mZ3Q7aGFuZ3VwYCBpcyBOVUxMLCBpdCYjMzk7cyBzaW1wbHkgbm90IGNhbGxlZC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gQnV0IHRoZW4gSSByZW1lbWJlciB0aGF0IGBzbGlwX2hhbmd1cGAgKnVzZWQqIHRvIGNhbGwgYHNsaXBfY2xvc2VgLCBhbmQgdGhhdCBgc2xpcF9jbG9zZWAgaXMgcmVzcG9uc2libGUgZm9yIHVucmVnaXN0ZXJpbmcgdGhlIG5ldGRldiBhbmQgZnJlZWluZyBpdC4KClNvLCBpZiB3ZSAqcmVtb3ZlKiB0aGUgY2FsbCB0byBgc2xpcF9oYW5ndXBgLCB0aGUgaGFuZ3VwIHJvdXRpbmUgbWlnaHQgKm5vdCogY2FsbCBgc2xpcF9jbG9zZWAuIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgcHJvYmxlbSEgTGV0IG1lIGNoZWNrIHRoZSBzZXF1ZW5jZSB1c2luZyBgdHR5X2xkaXNjX2hhbmd1cGAsIGFzIEkgcmVjYWxsIGl0LiBBaCwgeWVzLCBpdCBjYWxscyBgbGQtJmd0O29wcy0mZ3Q7aGFuZ3VwYCBpZiBpdCBleGlzdHM6CgpgYGBjCglpZiAobGQtJmd0O29wcy0mZ3Q7aGFuZ3VwKQoJCWxkLSZndDtvcHMtJmd0O2hhbmd1cCh0dHkpOwpgYGAKClRoZW4sIGNydWNpYWxseSwgaXQgcHJvY2VlZHMgdG8gY2hlY2sgYW5kLCBwb3RlbnRpYWxseSwgcmVpbml0aWFsaXplIHRoZSBsaW5lIGRpc2NpcGxpbmU6CgpgYGBjCglpZiAodHR5LSZndDtsZGlzYykgewoJCWlmIChyZWluaXQpIHsKCQkJaWYgKHR0eV9sZGlzY19yZWluaXQodHR5LCB0dHktJmd0O3Rlcm1pb3MuY19saW5lKSAmbHQ7IDAgJmFtcDsmYW1wOwoJCQkgICAgdHR5X2xkaXNjX3JlaW5pdCh0dHksIE5fVFRZKSAmbHQ7IDApCgkJCQlXQVJOX09OKHR0eV9sZGlzY19yZWluaXQodHR5LCBOX05VTEwpICZsdDsgMCk7CgkJfSBlbHNlCgkJCXR0eV9sZGlzY19raWxsKHR0eSk7Cgl9CmBgYAoKT2theSwgbm93IGl0IG1ha2VzIHNlbnNlLiBgdHR5X2xkaXNjX3JlaW5pdGAgYWN0dWFsbHkgY2FsbHMgYHR0eV9sZGlzY19jbG9zZSh0dHksIHR0eS0mZ3Q7bGRpc2MpYCwgd2hpY2ggaW4gdHVybiBjYWxscyBgbGQtJmd0O29wcy0mZ3Q7Y2xvc2UodHR5KWAuIEFoLCBzbyB0aGF0ICpzaG91bGQqIGNsZWFuIHVwLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYSBjdXN0b20gYGhhbmd1cGAgcm91dGluZSBleGlzdHMhCgpCdXQgbGV0IG1lIHZlcmlmeSB0aGF0IHRoZSBgdHR5X2xkaXNjX3JlaW5pdGAgYW5kIGB0dHlfbGRpc2NfY2xvc2VgIHJvdXRpbmVzIGFyZSBpbmRlZWQgYmVoYXZpbmcgYXMgSSBleHBlY3QuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhY3R1YWxseSBmcmVlaW5nIHRoZSByZXNvdXJjZXMgcHJvcGVybHkuIExldCBtZSBnbyBjaGVjayB0aG9zZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3R0eS90dHlfbGRpc2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY0NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjQ3Olx0aW50IHR0eV9sZGlzY19yZWluaXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGRpc2MpXG4gNjQ4Olx0e1xuIDY0OTpcdFx0c3RydWN0IHR0eV9sZGlzYyAqbGQ7XG4gNjUwOlx0XHRpbnQgcmV0dmFsO1xuIDY1MTpcdFxuIDY1MjpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZ0dHktXHUwMDNlbGRpc2Nfc2VtKTtcbiA2NTM6XHRcdGxkID0gdHR5X2xkaXNjX2dldCh0dHksIGRpc2MpO1xuIDY1NDpcdFx0aWYgKElTX0VSUihsZCkpIHtcbiA2NTU6XHRcdFx0QlVHX09OKGRpc2MgPT0gTl9UVFkpO1xuIDY1NjpcdFx0XHRyZXR1cm4gUFRSX0VSUihsZCk7XG4gNjU3Olx0XHR9XG4gNjU4Olx0XG4gNjU5Olx0XHRpZiAodHR5LVx1MDAzZWxkaXNjKSB7XG4gNjYwOlx0XHRcdHR0eV9sZGlzY19jbG9zZSh0dHksIHR0eS1cdTAwM2VsZGlzYyk7XG4gNjYxOlx0XHRcdHR0eV9sZGlzY19wdXQodHR5LVx1MDAzZWxkaXNjKTtcbiA2NjI6XHRcdH1cbiA2NjM6XHRcbiA2NjQ6XHRcdC8qIHN3aXRjaCB0aGUgbGluZSBkaXNjaXBsaW5lICovXG4gNjY1Olx0XHR0dHktXHUwMDNlbGRpc2MgPSBsZDtcbiA2NjY6XHRcdHR0eV9zZXRfdGVybWlvc19sZGlzYyh0dHksIGRpc2MpO1xuIDY2NzpcdFx0cmV0dmFsID0gdHR5X2xkaXNjX29wZW4odHR5LCB0dHktXHUwMDNlbGRpc2MpO1xuIDY2ODpcdFx0aWYgKHJldHZhbCkge1xuIDY2OTpcdFx0XHR0dHlfbGRpc2NfcHV0KHR0eS1cdTAwM2VsZGlzYyk7XG4gNjcwOlx0XHRcdHR0eS1cdTAwM2VsZGlzYyA9IE5VTEw7XG4gNjcxOlx0XHR9XG4gNjcyOlx0XHRyZXR1cm4gcmV0dmFsO1xuIDY3MzpcdH1cbiA2NzQ6XHRcbiA2NzU6XHQvKipcbiA2NzY6XHQgKiB0dHlfbGRpc2NfaGFuZ3VwXHQtXHRoYW5ndXAgbGRpc2MgcmVzZXRcbiA2Nzc6XHQgKiBAdHR5OiB0dHkgYmVpbmcgaHVuZyB1cFxuIDY3ODpcdCAqIEByZWluaXQ6IHdoZXRoZXIgdG8gcmUtaW5pdGlhbGlzZSB0aGUgdHR5XG4gNjc5Olx0ICpcbiA2ODA6XHQgKiBTb21lIHR0eSBkZXZpY2VzIHJlc2V0IHRoZWlyIHRlcm1pb3Mgd2hlbiB0aGV5IHJlY2VpdmUgYSBoYW5ndXAgZXZlbnQuIEluXG4gNjgxOlx0ICogdGhhdCBzaXR1YXRpb24gd2UgbXVzdCBhbHNvIHN3aXRjaCBiYWNrIHRvICVOX1RUWSBwcm9wZXJseSBiZWZvcmUgd2UgcmVzZXRcbiA2ODI6XHQgKiB0aGUgdGVybWlvcyBkYXRhLlxuIDY4MzpcdCAqXG4gNjg0Olx0ICogTG9ja2luZzogV2UgY2FuIHRha2UgdGhlIGxkaXNjIG11dGV4IGFzIHRoZSByZXN0IG9mIHRoZSBjb2RlIGlzIGNhcmVmdWwgdG9cbiA2ODU6XHQgKiBhbGxvdyBmb3IgdGhpcy5cbiA2ODY6XHQgKlxuIDY4NzpcdCAqIEluIHRoZSBwdHkgcGFpciBjYXNlIHRoaXMgb2NjdXJzIGluIHRoZSBjbG9zZSgpIHBhdGggb2YgdGhlIHR0eSBpdHNlbGYgc28gd2VcbiA2ODg6XHQgKiBtdXN0IGJlIGNhcmVmdWwgYWJvdXQgbG9ja2luZyBydWxlcy5cbiA2ODk6XHQgKi9cbiA2OTA6XHR2b2lkIHR0eV9sZGlzY19oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgYm9vbCByZWluaXQpXG4gNjkxOlx0e1xuIDY5MjpcdFx0c3RydWN0IHR0eV9sZGlzYyAqbGQ7XG4gNjkzOlx0XG4gNjk0Olx0XHR0dHlfbGRpc2NfZGVidWcodHR5LCBcJiMzNDslcDogaGFuZ3VwXFxuXCYjMzQ7LCB0dHktXHUwMDNlbGRpc2MpO1xuIDY5NTpcdFxuIDY5NjpcdFx0bGQgPSB0dHlfbGRpc2NfcmVmKHR0eSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg3NQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBzeXN0ZW1zIGVuZ2luZWVyOgoKKipEZWNvbnN0cnVjdGluZyBMaW5lIERpc2NpcGxpbmUgUmUtSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBgdHR5X2xkaXNjX3JlaW5pdGAgZnVuY3Rpb24uIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmTigJRpdHMgam9iIGlzIHRvIGVzc2VudGlhbGx5IHJlZnJlc2ggb3IgcmVzZXQgdGhlIGxpbmUgZGlzY2lwbGluZSBhc3NvY2lhdGVkIHdpdGggYSB0ZXJtaW5hbC4gVGhlIGNvcmUgb2YgdGhpcyBwcm9jZXNzIHNlZW1zIHRvIGJlIGEgY2FsbCB0byBgdHR5X2xkaXNjX2Nsb3NlYCwgYW5kIHRoZSBrZXkgaGVyZSBpcyB0aGUgYXJndW1lbnRzOiB0aGUgYHR0eWAgc3RydWN0dXJlIGl0c2VsZiwgd2hpY2ggcmVwcmVzZW50cyB0aGUgdGVybWluYWwgZGV2aWNlLCBhbmQsIGNydWNpYWxseSwgYHR0eS0mZ3Q7bGRpc2NgLCB3aGljaCBnaXZlcyBhIGhhbmRsZSB0byB0aGUgY3VycmVudGx5IGFjdGl2ZSBsaW5lIGRpc2NpcGxpbmUuIFRoYXQgc2VlbXMgbG9naWNhbCDigJMgdG8gcmUtaW5pdGlhbGl6ZSwgeW91IGZpcnN0IGhhdmUgdG8gc2h1dCBkb3duIHRoZSBvbGQgb25lLgoKTm93LCB0aGlzIHBpcXVlcyBteSBpbnRlcmVzdC4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgY2FsbCB0byBgdHR5X2xkaXNjX2Nsb3NlYC4gV2hhdCYjMzk7cyB0aGUgc3BlY2lmaWMgYmVoYXZpb3IgdGhlcmU/IFdoYXQgcmVzb3VyY2VzIGRvZXMgaXQgcmVsZWFzZT8gQXJlIHRoZXJlIHN1YnRsZSBsb2NraW5nIGNvbnNpZGVyYXRpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIG9yIHBlcmhhcHMgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgZXhpc3QgYmV0d2VlbiBgdHR5X2xkaXNjX3JlaW5pdGAgYW5kIG90aGVyIGtlcm5lbCBvcGVyYXRpb25zPyBBbmQsIGluIHRoYXQgY29udGV4dCwgd2hhdCBhYm91dCB0aGF0IGB0dHlfbGRpc2Nfa2lsbGA/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCBgdHR5X2xkaXNjX2Nsb3NlYD8gQXJlIHRoZXkgYW5hbG9nb3VzIGZ1bmN0aW9ucywgb3IgYXJlIHRoZXkgbWVhbnQgZm9yIGRpc3RpbmN0IG9wZXJhdGlvbnM/IElzIGB0dHlfbGRpc2Nfa2lsbGAgbWVhbnQgdG8gdmlvbGVudGx5IGVqZWN0IGEgbGluZSBkaXNjaXBsaW5lLCB3aGVyZSBgdHR5X2xkaXNjX2Nsb3NlYCBpcyBtb3JlIGdyYWNlZnVsPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dHlfbGRpc2Nfa2lsbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3R0eS90dHlfbGRpc2MuYz01OTc9RVhQT1JUX1NZTUJPTF9HUEwodHR5X3NldF9sZGlzYyk7XG4tLVxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNTk5LS8qKlxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM6NjAwOiAqIHR0eV9sZGlzY19raWxsXHQtXHR0ZWFyZG93biBsZGlzY1xuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjAxLSAqIEB0dHk6IHR0eSBiZWluZyByZWxlYXNlZFxuLS1cbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTYwNC0gKi9cbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jOjYwNTpzdGF0aWMgdm9pZCB0dHlfbGRpc2Nfa2lsbChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjA2LXtcbi0tXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYz02OTA9dm9pZCB0dHlfbGRpc2NfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGJvb2wgcmVpbml0KVxuLS1cbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTcyOC1cdFx0fSBlbHNlXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYzo3Mjk6XHRcdFx0dHR5X2xkaXNjX2tpbGwodHR5KTtcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTczMC1cdH1cbi0tXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYz03NzE9dm9pZCB0dHlfbGRpc2NfcmVsZWFzZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuLS1cbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTc4MC1cdHR0eV9sZGlzY19sb2NrX3BhaXIodHR5LCBvX3R0eSk7XG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYzo3ODE6XHR0dHlfbGRpc2Nfa2lsbCh0dHkpO1xuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNzgyLVx0aWYgKG9fdHR5KVxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM6NzgzOlx0XHR0dHlfbGRpc2Nfa2lsbChvX3R0eSk7XG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy03ODQtXHR0dHlfbGRpc2NfdW5sb2NrX3BhaXIodHR5LCBvX3R0eSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MTAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYHR0eV9sZGlzY19raWxsYCoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IG1lbnRpb25zIGB0dHlfbGRpc2Nfa2lsbGAuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgbGluZSBkaXNjaXBsaW5lcyB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBUVFkgc3Vic3lzdGVtLiBJJiMzOTttIGFzc3VtaW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgcmVzcG9uc2libGUgZm9yLCB3ZWxsLCBraWxsaW5nIGEgbGluZSBkaXNjaXBsaW5lLCBsaWtlbHkgYXMgcGFydCBvZiBpdHMgZGUtaW5pdGlhbGl6YXRpb24gb3Igd2hlbiB0aGUgYXNzb2NpYXRlZCBUVFkgZGV2aWNlIGlzIGJlaW5nIGNsb3NlZCBvciByZWNvbmZpZ3VyZWQuCgpNeSBpbml0aWFsIHRob3VnaHRzIGFyZSBhcm91bmQgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIHdoYXQga2luZCBvZiBjbGVhbnVwIGRvZXMgdGhpcyBmdW5jdGlvbiBwZXJmb3JtPyBEb2VzIGl0IGZyZWUgYW55IGFsbG9jYXRlZCBidWZmZXJzLCByZWxlYXNlIGxvY2tzLCBvciBkZXJlZ2lzdGVyIGFueSBjYWxsYmFja3MgYXNzb2NpYXRlZCB3aXRoIHRoYXQgbGluZSBkaXNjaXBsaW5lPyBJJiMzOTttIHBpY3R1cmluZyBzY2VuYXJpb3Mgd2hlcmUgYSByb2d1ZSBsaW5lIGRpc2NpcGxpbmUgY291bGQgbGVhayByZXNvdXJjZXMgaWYgdGhpcyBmdW5jdGlvbiBpc24mIzM5O3QgaW1wbGVtZW50ZWQgY29ycmVjdGx5LCBsZWFkaW5nIHRvIGtlcm5lbCBpbnN0YWJpbGl0eSBvciBldmVuIGNyYXNoZXMuIEkgYWxzbyB3YW50IHRvIGNvbnNpZGVyIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucyB3aXRoIG90aGVyIGtlcm5lbCB0aHJlYWRzIHRoYXQgbWlnaHQgc3RpbGwgYmUgdXNpbmcgdGhlIGxpbmUgZGlzY2lwbGluZSBvciByZWZlcmVuY2luZyBpdHMgZGF0YSBzdHJ1Y3R1cmVzLgoKVGhlbiBJIGdldCB0aGlua2luZyBhYm91dCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVFRZIGRyaXZlci4gRG9lcyBgdHR5X2xkaXNjX2tpbGxgIHNpZ25hbCB0aGUgZHJpdmVyIGluIGFueSB3YXk/IERvZXMgaXQgbmVlZCB0byBjb29yZGluYXRlIHdpdGggdGhlIGRyaXZlciB0byBlbnN1cmUgYSBjbGVhbiB0ZWFyZG93bj8gSSYjMzk7bSBtZW50YWxseSBjaGVja2luZyB0aGUgdHlwaWNhbCBzdHJ1Y3R1cmUgb2YgdGhlIFRUWSBkcml2ZXIgYW5kIGxpbmUgZGlzY2lwbGluZSBpbnRlcmFjdGlvbiwgYW5kIHRoZSBsaWtlbHkgcGxhY2VzIHdoZXJlIHRoaXMgaW50ZXJhY3Rpb24gd291bGQgYmUgbmVjZXNzYXJ5LiBJcyB0aGVyZSBhIGNoYWluIG9mIGZ1bmN0aW9uIGNhbGxzPyBXaGF0IGxvY2tzIGFyZSBpbnZvbHZlZD8gV2hhdCYjMzk7cyB0aGUgZXJyb3IgaGFuZGxpbmcgbGlrZSwgYW5kIHdoYXQgaGFwcGVucyBpbiB0aGUgY2FzZSBvZiBhIGZhaWxlZCBjbGVhbi11cD8KCkZ1cnRoZXJtb3JlLCBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgaG93IGxpbmUgZGlzY2lwbGluZXMgYXJlIGluc3RhbGxlZCBhbmQgcmVtb3ZlZCBpbiBnZW5lcmFsLiBJcyB0aGVyZSBhIGNsZWFyIG9yZGVyaW5nIG9mIG9wZXJhdGlvbnM/IERvZXMgYHR0eV9sZGlzY19raWxsYCBhY2NvdW50IGZvciBkaWZmZXJlbnQgc2l0dWF0aW9ucyBvZiBhIGxpbmUgZGlzY2lwbGluZT8gSSB3aWxsIGNvbnNpZGVyIGRpZmZlcmVudCBsaW5lIGRpc2NpcGxpbmVzIHdpdGggZGlmZmVyZW50IGNhcGFiaWxpdGllcy4KCkZpbmFsbHksIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBjb25jdXJyZW5jeSBhbmQgc3luY2hyb25pemF0aW9uLiBJJiMzOTtkIHdhbnQgdG8gY2hlY2sgaG93IHRoaXMgZnVuY3Rpb24gaXMgcHJvdGVjdGVkLCBhbmQgd2hldGhlciBpdCYjMzk7cyBzYWZlIHRvIGNhbGwgZnJvbSBtdWx0aXBsZSBjb250ZXh0cy4gRG9lcyBpdCB1c2Ugc3BpbmxvY2tzLCBtdXRleGVzLCBvciBSQ1U/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGRlYWRsb2Nrcz8gSXQmIzM5O3MgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGF0IGFueSBjbGVhbnVwIGlzIGF0b21pYyBhbmQgZG9lc24mIzM5O3QgbGVhdmUgdGhlIHN5c3RlbSBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGB0dHlfc3RydWN0YCwgdGhlIGBsZGlzY2Agc3RydWN0dXJlIGl0c2VsZiwgYW5kIHRoZSBkcml2ZXImIzM5O3MgcHJpdmF0ZSBkYXRhLiBTbywgbXkgbWluZCBpcyBhbHJlYWR5IHJ1bm5pbmcgdGhyb3VnaCBkaWZmZXJlbnQgY29kZSBwYXRocyBhbmQgcG9zc2libGUgZmFpbHVyZSBzY2VuYXJpb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy90dHkvdHR5X2xkaXNjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYwNTpcdHN0YXRpYyB2b2lkIHR0eV9sZGlzY19raWxsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4gNjA2Olx0e1xuIDYwNzpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZ0dHktXHUwMDNlbGRpc2Nfc2VtKTtcbiA2MDg6XHRcdGlmICghdHR5LVx1MDAzZWxkaXNjKVxuIDYwOTpcdFx0XHRyZXR1cm47XG4gNjEwOlx0XHQvKlxuIDYxMTpcdFx0ICogTm93IGtpbGwgb2ZmIHRoZSBsZGlzY1xuIDYxMjpcdFx0ICovXG4gNjEzOlx0XHR0dHlfbGRpc2NfY2xvc2UodHR5LCB0dHktXHUwMDNlbGRpc2MpO1xuIDYxNDpcdFx0dHR5X2xkaXNjX3B1dCh0dHktXHUwMDNlbGRpc2MpO1xuIDYxNTpcdFx0LyogRm9yY2UgYW4gb29wcyBpZiB3ZSBtZXNzIHRoaXMgdXAgKi9cbiA2MTY6XHRcdHR0eS1cdTAwM2VsZGlzYyA9IE5VTEw7XG4gNjE3Olx0fVxuIDYxODpcdFxuIDYxOTpcdC8qKlxuIDYyMDpcdCAqIHR0eV9yZXNldF90ZXJtaW9zXHQtXHRyZXNldCB0ZXJtaW5hbCBzdGF0ZVxuIDYyMTpcdCAqIEB0dHk6IHR0eSB0byByZXNldFxuIDYyMjpcdCAqXG4gNjIzOlx0ICogUmVzdG9yZSBhIHRlcm1pbmFsIHRvIHRoZSBkcml2ZXIgZGVmYXVsdCBzdGF0ZS5cbiA2MjQ6XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU1MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEb3VibGUtQ2hlY2tpbmcgdGhlIExpbmUgRGlzY2lwbGluZSBDbGVhbnVwKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNsZWFudXAgc2VxdWVuY2UgZm9yIHRoZSBUVFkgbGluZSBkaXNjaXBsaW5lLCBhbmQgc29tZXRoaW5nJiMzOTtzIGJ1Z2dpbmcgbWUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgYHR0eV9sZGlzY19raWxsYCBpcyBjYWxsaW5nIGB0dHlfbGRpc2NfY2xvc2VgLiBOb3csIHJlbWVtYmVyIHRoYXQgYHNsaXBfaGFuZ3VwYCB3YXMgYWxyZWFkeSwgaW5kZXBlbmRlbnRseSwgY2FsbGluZyBgc2xpcF9jbG9zZWAuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSYjMzk7cyBhbiB1bm5lY2Vzc2FyeSBkb3VibGUgY2FsbC4KCkhlcmUmIzM5O3MgdGhlIGNoYWluOiBgc2xpcF9oYW5ndXBgIGNhbGxzIGBzbGlwX2Nsb3NlYC4gVGhlbiwgYHR0eV9sZGlzY19oYW5ndXBgIGNhbGxzIGVpdGhlciBgdHR5X2xkaXNjX3JlaW5pdGAgb3IgYHR0eV9sZGlzY19raWxsYC4gQm90aCBvZiB0aG9zZSBjYWxsIGB0dHlfbGRpc2NfY2xvc2VgLCBhbmQgKnRoYXQqIGNhbGxzIGBzbGlwX2Nsb3NlYC4gU28sIGlmIHRoYXQmIzM5O3MgdGhlIGNhc2UsIGBzbGlwX2Nsb3NlYCB3b3VsZCBiZSBleGVjdXRlZCB0d2ljZSBmb3Igd2hhdCBzaG91bGQgYmUgYSBzaW5nbGUgYWN0aW9uLiBUaGF0IGNhbiYjMzk7dCBiZSByaWdodC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gVGltZSB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHR0eV9sZGlzY19jbG9zZWAgYW5kIHZlcmlmeSB3aGV0aGVyIG15IHN1c3BpY2lvbiBpcyBhY2N1cmF0ZSwgb3Igd2hldGhlciB0aGVyZSYjMzk7cyBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIEkmIzM5O20gbWlzc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3R0eS90dHlfbGRpc2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDYwOlx0ICogdHR5X2xkaXNjX2ZhaWx0b1x0LVx0aGVscGVyIGZvciBsZGlzYyBmYWlsYmFja1xuIDQ2MTpcdCAqIEB0dHk6IHR0eSB0byBvcGVuIHRoZSBsZGlzYyBvblxuIDQ2MjpcdCAqIEBsZDogbGRpc2Mgd2UgYXJlIHRyeWluZyB0byBmYWlsIGJhY2sgdG9cbiA0NjM6XHQgKlxuIDQ2NDpcdCAqIEhlbHBlciB0byB0cnkgYW5kIHJlY292ZXIgYSB0dHkgd2hlbiBzd2l0Y2hpbmcgYmFjayB0byB0aGUgb2xkIGxkaXNjIGZhaWxzXG4gNDY1Olx0ICogYW5kIHdlIG5lZWQgc29tZXRoaW5nIGF0dGFjaGVkLlxuIDQ2NjpcdCAqL1xuIDQ2NzpcdHN0YXRpYyBpbnQgdHR5X2xkaXNjX2ZhaWx0byhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgbGQpXG4gNDY4Olx0e1xuIDQ2OTpcdFx0c3RydWN0IHR0eV9sZGlzYyAqZGlzYyA9IHR0eV9sZGlzY19nZXQodHR5LCBsZCk7XG4gNDcwOlx0XHRpbnQgcjtcbiA0NzE6XHRcbiA0NzI6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2dHR5LVx1MDAzZWxkaXNjX3NlbSk7XG4gNDczOlx0XHRpZiAoSVNfRVJSKGRpc2MpKVxuIDQ3NDpcdFx0XHRyZXR1cm4gUFRSX0VSUihkaXNjKTtcbiA0NzU6XHRcdHR0eS1cdTAwM2VsZGlzYyA9IGRpc2M7XG4gNDc2Olx0XHR0dHlfc2V0X3Rlcm1pb3NfbGRpc2ModHR5LCBsZCk7XG4gNDc3Olx0XHRyID0gdHR5X2xkaXNjX29wZW4odHR5LCBkaXNjKTtcbiA0Nzg6XHRcdGlmIChyIFx1MDAzYyAwKVxuIDQ3OTpcdFx0XHR0dHlfbGRpc2NfcHV0KGRpc2MpO1xuIDQ4MDpcdFx0cmV0dXJuIHI7XG4gNDgxOlx0fVxuIDQ4MjpcdFxuIDQ4MzpcdC8qKlxuIDQ4NDpcdCAqIHR0eV9sZGlzY19yZXN0b3JlXHQtXHRoZWxwZXIgZm9yIHR0eSBsZGlzYyBjaGFuZ2VcbiA0ODU6XHQgKiBAdHR5OiB0dHkgdG8gcmVjb3ZlclxuIDQ4NjpcdCAqIEBvbGQ6IHByZXZpb3VzIGxkaXNjXG4gNDg3Olx0ICpcbiA0ODg6XHQgKiBSZXN0b3JlIHRoZSBwcmV2aW91cyBsaW5lIGRpc2NpcGxpbmUgb3IgJU5fVFRZIHdoZW4gYSBsaW5lIGRpc2NpcGxpbmUgY2hhbmdlXG4gNDg5Olx0ICogZmFpbHMgZHVlIHRvIGFuIG9wZW4gZXJyb3JcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQyNwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSHVudGluZyBEb3duIGB0dHlfbGRpc2NfY2xvc2VgKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdHR5X2xkaXNjX2Nsb3NlYC4gSXQmIzM5O3MgYSBzdGFuZGFyZCBmdW5jdGlvbiwgc28gSSYjMzk7bSBub3QgZXhwZWN0aW5nIGFueXRoaW5nIHRvbyBlc290ZXJpYywgYnV0IEkgc3RpbGwgd2FudCB0byBiZSBwcmVjaXNlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGp1c3Qgc2VhcmNoIHRoZSBzb3VyY2UgY29kZSBkaXJlY3RseSwgbGlrZWx5IHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIGEgc2ltaWxhciB0b29sIHRvIHBpbnBvaW50IGl0cyBkZWZpbml0aW9uLiBLbm93aW5nIHRoZSBsaWtlbHkgY29udGV4dCwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBpdCBpbiB0aGUgY29yZSB0dHkgZHJpdmVyIGNvZGUsIHBlcmhhcHMgdW5kZXIgdGhlIGBkcml2ZXJzL3R0eS9gIGRpcmVjdG9yeSwgb3IgbWF5YmUgd2l0aGluIHNvbWUgZ2VuZXJpYyBsaW5lIGRpc2NpcGxpbmUgKGxkaXNjKSBpbmZyYXN0cnVjdHVyZSBmaWxlcy4KCknigJlsbCBhbHNvIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBkZWZpbml0aW9uIG1pZ2h0IGJlIG1hY3JvLWRlZmluZWQsIG9yIHBhcnQgb2YgYSBzdHJ1Y3R1cmUsIHJhdGhlciB0aGFuIGEgc2luZ2xlIGZ1bmN0aW9uIGRlZmluaXRpb24sIHNvIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBvdXQgZm9yIHRob3NlIHBvc3NpYmlsaXRpZXMgYXMgd2VsbC4gSWYgdGhlIGltbWVkaWF0ZSBzZWFyY2ggaXMgdW5mcnVpdGZ1bCwgSSYjMzk7bGwgZXhwYW5kIHRoZSBzZWFyY2gsIGxvb2tpbmcgYXQgaGVhZGVyIGZpbGVzIGFuZCBpbmNsdWRlIGRpcmVjdG9yaWVzIHRvIHRyeSBhbmQgaWRlbnRpZnkgZnVuY3Rpb24gcHJvdG90eXBlcyBvciBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdGhlIGZ1bmN0aW9uIGlzIHJlZmVyZW5jZWQsIGRlZmluZWQsIG9yIHVzZWQuCgpJJiMzOTtsbCBiZSBtaW5kZnVsIG9mIHBvdGVudGlhbCBjb21wbGV4aXRpZXMsIHN1Y2ggYXMgd2hldGhlciBgdHR5X2xkaXNjX2Nsb3NlYCBpcyBpbXBsZW1lbnRlZCBhcyBhIGRpcmVjdCBjYWxsLCBvciBpbmRpcmVjdGx5LCB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzIGluIGEgYHR0eV9sZGlzY19vcHNgIHN0cnVjdHVyZS4gSW4gdGhhdCBjYXNlLCBJJiMzOTtsbCBuZWVkIHRvIGZpbmQgd2hlcmUgdGhvc2Ugb3BlcmF0aW9ucyBhcmUgcmVnaXN0ZXJlZC4gSeKAmWxsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHNwZWNpZmljIGxpbmUgZGlzY2lwbGluZSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlaXIgb3duIGJlaGF2aW9yLiBJIGFudGljaXBhdGUgbmVlZGluZyB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgdHR5IGRyaXZlciBjb3JlLCB0aGUgbGluZSBkaXNjaXBsaW5lLCBhbmQgdGhlIGRldmljZSBkcml2ZXJzIHRvIGZ1bGx5IGdyYXNwIGl0cyBmdW5jdGlvbmFsaXR5IGFuZCBpdHMgaW1wYWN0LiBVbHRpbWF0ZWx5LCBJJiMzOTttIGFpbWluZyBmb3IgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBgdHR5X2xkaXNjX2Nsb3NlYCBkb2VzLCBob3cgaXQmIzM5O3MgY2FsbGVkLCBhbmQgd2hhdCB0aGUgaW1wb3J0YW50IHNpZGUtZWZmZWN0cyBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R0eV9sZGlzY19jbG9zZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3R0eS90dHlfbGRpc2MuYz00MjY9c3RhdGljIGludCB0dHlfbGRpc2Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdHR5X2xkaXNjICpsZClcbi0tXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy00NDItLyoqXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYzo0NDM6ICogdHR5X2xkaXNjX2Nsb3NlXHRcdC1cdGNsb3NlIGEgbGluZSBkaXNjaXBsaW5lXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy00NDQtICogQHR0eTogdHR5IHdlIGFyZSBvcGVuaW5nIHRoZSBsZGlzYyBvblxuLS1cbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTQ0OC0gKi9cbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jOjQ0OTpzdGF0aWMgdm9pZCB0dHlfbGRpc2NfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHR0eV9sZGlzYyAqbGQpXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy00NTAte1xuLS1cbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jPTUxOT1pbnQgdHR5X3NldF9sZGlzYyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgZGlzYylcbi0tXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy01NTYtXHQvKiBTaHV0ZG93biB0aGUgb2xkIGRpc2NpcGxpbmUuICovXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYzo1NTc6XHR0dHlfbGRpc2NfY2xvc2UodHR5LCBvbGRfbGRpc2MpO1xuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNTU4LVxuLS1cbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jPTYwNT1zdGF0aWMgdm9pZCB0dHlfbGRpc2Nfa2lsbChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuLS1cbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTYxMi1cdCAqL1xuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM6NjEzOlx0dHR5X2xkaXNjX2Nsb3NlKHR0eSwgdHR5LVx1MDAzZWxkaXNjKTtcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTYxNC1cdHR0eV9sZGlzY19wdXQodHR5LVx1MDAzZWxkaXNjKTtcbi0tXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYz02NDc9aW50IHR0eV9sZGlzY19yZWluaXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGRpc2MpXG4tLVxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjU5LVx0aWYgKHR0eS1cdTAwM2VsZGlzYykge1xuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM6NjYwOlx0XHR0dHlfbGRpc2NfY2xvc2UodHR5LCB0dHktXHUwMDNlbGRpc2MpO1xuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjYxLVx0XHR0dHlfbGRpc2NfcHV0KHR0eS1cdTAwM2VsZGlzYyk7XG4tLVxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM9NzQzPWludCB0dHlfbGRpc2Nfc2V0dXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHR0eV9zdHJ1Y3QgKm9fdHR5KVxuLS1cbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTc1Ni1cdFx0aWYgKHJldHZhbCkge1xuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM6NzU3Olx0XHRcdHR0eV9sZGlzY19jbG9zZSh0dHksIHR0eS1cdTAwM2VsZGlzYyk7XG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy03NTgtXHRcdFx0cmV0dXJuIHJldHZhbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU0NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsIGluIHRoZSBmaWVsZCwgc3BlYWtpbmcgZGlyZWN0bHkgdG8gYW5vdGhlciBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIGB0dHlfbGRpc2NfY2xvc2VgKioKCkFscmlnaHQsIGxldCYjMzk7cyBjcmFjayBvcGVuIGB0dHlfbGRpc2NfY2xvc2VgLiBJbW1lZGlhdGVseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBUaGlzIGlzIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIGZvciBhIGxpbmUgZGlzY2lwbGluZSwgYW5kIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGNsb3NpbmcgaXQuIFNvLCBJIGtub3cgdGhpcyBpcyB3aGVyZSB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHBhcnRpY3VsYXIgbGluZSBkaXNjaXBsaW5lIGluc3RhbmNlIGFyZSBnb2luZyB0byBiZSByZWxlYXNlZC4gVGhpcyBtZWFucyBidWZmZXJzLCB0aW1lcnMsIGFueSBjdXN0b20gc3RhdGUgdGhlIGRpc2NpcGxpbmUgbWFpbnRhaW5zIOKAkyBhbGwgb2YgaXQgbmVlZHMgdG8gYmUgaGFuZGxlZCBoZXJlLgoKRmlyc3QsIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIENsb3NpbmcgYSBsaW5lIGRpc2NpcGxpbmUgY2FuIGhhcHBlbiBhdCBhbnkgdGltZSwgcG9zc2libHkgd2hpbGUgZGF0YSBpcyBzdGlsbCBiZWluZyBwcm9jZXNzZWQgb3IgdHJhbnNtaXR0ZWQuIFN5bmNocm9uaXphdGlvbiBpcyBrZXkuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgbm8gb3RoZXIgdGhyZWFkIGlzIHN0aWxsIGFjY2Vzc2luZyB0aGUgbGluZSBkaXNjaXBsaW5lJiMzOTtzIHN0cnVjdHVyZXMgb3IgYnVmZmVycyBkdXJpbmcgdGhlIGNsZWFudXAuIFNwaW5sb2NrcywgbXV0ZXhlcy4uLiBJJiMzOTtsbCBiZSBzZWFyY2hpbmcgZm9yIGhvdyB0aGV5IGFyZSBpbXBsZW1lbnRlZCBoZXJlLCBhbmQgbWFraW5nIHN1cmUgdGhhdCB0aGUgbG9ja3MgYXJlIGhlbGQgd2hlcmUgYXBwcm9wcmlhdGUuIEkmIzM5O20gYWxzbyB3YXRjaGluZyBvdXQgZm9yIGlzc3VlcyBsaWtlIGRvdWJsZSBmcmVlcyBvciBtZW1vcnkgbGVha3MuIFdlIHdhbnQgdG8gYmUgY2VydGFpbiB0aGF0IGV2ZXJ5IGFsbG9jYXRlZCByZXNvdXJjZSBpcyBmcmVlZCBjb3JyZWN0bHkgd2hlbiB0aGUgbGluZSBkaXNjaXBsaW5lIGlzIGNsb3NlZC4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBUVFkgbGF5ZXIgaXRzZWxmLiBJcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBkaXJlY3RseSBieSB0aGUgVFRZIGNvcmUsIG9yIGFyZSB0aGVyZSBjYWxsYmFja3MgaW52b2x2ZWQ/IEhvdyBpcyB0aGUgbGluZSBkaXNjaXBsaW5lJiMzOTtzIHN0YXRlIHVwZGF0ZWQgaW4gcmVsYXRpb24gdG8gdGhlIFRUWSYjMzk7cyBzdGF0ZT8gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgVFRZIHN0cnVjdHVyZXMgdGhhdCBuZWVkIHRvIGJlIGNsZWFyZWQgb3IgcmVzZXQ/CgpJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIGEgcmVzb3VyY2UgY2FuJiMzOTt0IGJlIGZyZWVkPyBEb2VzIGl0IHJldHVybiBhbiBlcnJvciBjb2RlPyBMb2cgYSB3YXJuaW5nPyBIb3cgaXMgdGhhdCBlcnJvciBwcm9wYWdhdGVkIHVwIHRoZSBzdGFjaywgYW5kIGhvdyBkb2VzIHRoZSBUVFkgc3lzdGVtIHJlc3BvbmQgdG8gaXQ/CgpGaW5hbGx5LCBsZXQmIzM5O3Mgc2VlIGhvdyB0aGUgbGluZSBkaXNjaXBsaW5lIGlzIHJlbW92ZWQgZnJvbSB0aGUgVFRZIGFuZCBkZWFsbG9jYXRlZC4gQXJlIHRoZXJlIGFueSBjdXN0b20gYWN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZSB0dHkgaXRzZWxmPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3R0eV9sZGlzYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQ5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NDk6XHRzdGF0aWMgdm9pZCB0dHlfbGRpc2NfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHR0eV9sZGlzYyAqbGQpXG4gNDUwOlx0e1xuIDQ1MTpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZ0dHktXHUwMDNlbGRpc2Nfc2VtKTtcbiA0NTI6XHRcdFdBUk5fT04oIXRlc3RfYml0KFRUWV9MRElTQ19PUEVOLCBcdTAwMjZ0dHktXHUwMDNlZmxhZ3MpKTtcbiA0NTM6XHRcdGNsZWFyX2JpdChUVFlfTERJU0NfT1BFTiwgXHUwMDI2dHR5LVx1MDAzZWZsYWdzKTtcbiA0NTQ6XHRcdGlmIChsZC1cdTAwM2VvcHMtXHUwMDNlY2xvc2UpXG4gNDU1Olx0XHRcdGxkLVx1MDAzZW9wcy1cdTAwM2VjbG9zZSh0dHkpO1xuIDQ1NjpcdFx0dHR5X2xkaXNjX2RlYnVnKHR0eSwgXCYjMzQ7JXA6IGNsb3NlZFxcblwmIzM0OywgbGQpO1xuIDQ1NzpcdH1cbiA0NTg6XHRcbiA0NTk6XHQvKipcbiA0NjA6XHQgKiB0dHlfbGRpc2NfZmFpbHRvXHQtXHRoZWxwZXIgZm9yIGxkaXNjIGZhaWxiYWNrXG4gNDYxOlx0ICogQHR0eTogdHR5IHRvIG9wZW4gdGhlIGxkaXNjIG9uXG4gNDYyOlx0ICogQGxkOiBsZGlzYyB3ZSBhcmUgdHJ5aW5nIHRvIGZhaWwgYmFjayB0b1xuIDQ2MzpcdCAqXG4gNDY0Olx0ICogSGVscGVyIHRvIHRyeSBhbmQgcmVjb3ZlciBhIHR0eSB3aGVuIHN3aXRjaGluZyBiYWNrIHRvIHRoZSBvbGQgbGRpc2MgZmFpbHNcbiA0NjU6XHQgKiBhbmQgd2UgbmVlZCBzb21ldGhpbmcgYXR0YWNoZWQuXG4gNDY2Olx0ICovXG4gNDY3Olx0c3RhdGljIGludCB0dHlfbGRpc2NfZmFpbHRvKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBsZClcbiA0Njg6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzc1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTZXJpYWwgTGluZSBEaXNjaXBsaW5lIENsb3NlIFByb2Nlc3MqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gU28sIGB0dHlfbGRpc2NfY2xvc2VgIGlzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIGhlcmUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgaXQgZG9lcyBpcyBjYWxsIGBsZC0mZ3Q7b3BzLSZndDtjbG9zZSh0dHkpYC4gT2theSwgdGhhdCYjMzk7cyB0aGUgc3RhbmRhcmQgY2xvc2UgcHJvY2VkdXJlIGZvciBhIGxpbmUgZGlzY2lwbGluZS4gQnV0LCBpZiBgc2xpcF9oYW5ndXBgIHdhcywgaW4gZmFjdCwgY2FsbGluZyBgc2xpcF9jbG9zZWAsIHdvdWxkbiYjMzk7dCB0aGF0IHJlc3VsdCBpbiBgc2xpcF9jbG9zZWAgYmVpbmcgY2FsbGVkICp0d2ljZSo/IFRoYXQgc2VlbXMuLi4gaW5jb3JyZWN0LCBhIHBvdGVudGlhbCBkb3VibGUtZnJlZSBvciBvdGhlciB1bmRlc2lyYWJsZSBvdXRjb21lLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2xpcF9jbG9zZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCB0byB2ZXJpZnkgaWYgdGhpcyBkb3VibGUtY2FsbCBzY2VuYXJpbyBpcyBldmVuIHBvc3NpYmxlIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgd291bGQgYmUgaWYgaXQgd2VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9zbGlwL3NsaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODgwOlx0LypcbiA4ODE6XHQgKiBDbG9zZSBkb3duIGEgU0xJUCBjaGFubmVsLlxuIDg4MjpcdCAqIFRoaXMgbWVhbnMgZmx1c2hpbmcgb3V0IGFueSBwZW5kaW5nIHF1ZXVlcywgYW5kIHRoZW4gcmV0dXJuaW5nLiBUaGlzXG4gODgzOlx0ICogY2FsbCBpcyBzZXJpYWxpemVkIGFnYWluc3Qgb3RoZXIgbGRpc2MgZnVuY3Rpb25zLlxuIDg4NDpcdCAqL1xuIDg4NTpcdFxuIDg4NjpcdHN0YXRpYyB2b2lkIHNsaXBfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcbiA4ODc6XHR7XG4gODg4Olx0XHRzdHJ1Y3Qgc2xpcCAqc2wgPSB0dHktXHUwMDNlZGlzY19kYXRhO1xuIDg4OTpcdFxuIDg5MDpcdFx0LyogRmlyc3QgbWFrZSBzdXJlIHdlJiMzOTtyZSBjb25uZWN0ZWQuICovXG4gODkxOlx0XHRpZiAoIXNsIHx8IHNsLVx1MDAzZW1hZ2ljICE9IFNMSVBfTUFHSUMgfHwgc2wtXHUwMDNldHR5ICE9IHR0eSlcbiA4OTI6XHRcdFx0cmV0dXJuO1xuIDg5MzpcdFxuIDg5NDpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNsLVx1MDAzZWxvY2spO1xuIDg5NTpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHR0eS1cdTAwM2VkaXNjX2RhdGEsIE5VTEwpO1xuIDg5NjpcdFx0c2wtXHUwMDNldHR5ID0gTlVMTDtcbiA4OTc6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNsLVx1MDAzZWxvY2spO1xuIDg5ODpcdFxuIDg5OTpcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gOTAwOlx0XHRmbHVzaF93b3JrKFx1MDAyNnNsLVx1MDAzZXR4X3dvcmspO1xuIDkwMTpcdFxuIDkwMjpcdFx0LyogVlNWID0gdmVyeSBpbXBvcnRhbnQgdG8gcmVtb3ZlIHRpbWVycyAqL1xuIDkwMzpcdCNpZmRlZiBDT05GSUdfU0xJUF9TTUFSVFxuIDkwNDpcdFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2c2wtXHUwMDNla2VlcGFsaXZlX3RpbWVyKTtcbiA5MDU6XHRcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnNsLVx1MDAzZW91dGZpbGxfdGltZXIpO1xuIDkwNjpcdCNlbmRpZlxuIDkwNzpcdFx0LyogRmx1c2ggbmV0d29yayBzaWRlICovXG4gOTA4Olx0XHR1bnJlZ2lzdGVyX25ldGRldihzbC1cdTAwM2VkZXYpO1xuIDkwOTpcdFx0LyogVGhpcyB3aWxsIGNvbXBsZXRlIHZpYSBzbF9mcmVlX25ldGRldiAqL1xuIDkxMDpcdH1cbiA5MTE6XHQgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIDkxMjpcdCAgKlx0XHRcdFNUQU5EQVJEIFNMSVAgRU5DQVBTVUxBVElPTlx0XHQgIFx0ICpcbiA5MTM6XHQgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiA5MTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNTQKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxMDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIFJlbW92aW5nIGBzbGlwX2hhbmd1cGAqKgoKT2theSwgc28gdGhlIGNvZGUmIzM5O3MgbG9naWMgaXMgdGhpczogYHNsaXBfY2xvc2VgIGdldHMgY2FsbGVkLCBwb3RlbnRpYWxseSBtdWx0aXBsZSB0aW1lcywgZHVlIHRvIGludGVyYWN0aW9ucyBiZXR3ZWVuIGBzbGlwX2hhbmd1cGAsIGB0dHlfbGRpc2NfaGFuZ3VwYCwgYW5kIHRoZSBsaW5lIGRpc2NpcGxpbmUgbWFuYWdlbWVudC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHJlbW92aW5nIGBzbGlwX2hhbmd1cGAgd291bGQganVzdCBtYWtlIHRoaW5ncyBzaW1wbGVyLCBidXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgbW9yZSBzdWJ0bGUuCgpMZXQmIzM5O3MgYnJlYWsgaXQgZG93bjogb3JpZ2luYWxseSwgYHNsaXBfaGFuZ3VwYCBjYWxsZWQgYHNsaXBfY2xvc2VgLiBUaGVuLCBgdHR5X2xkaXNjX2hhbmd1cGAgd291bGQgYWxzbyB0cmlnZ2VyIG90aGVyIGNsb3NlIGNhbGxzIHRocm91Z2ggYHR0eV9sZGlzY19yZWluaXRgLCBgdHR5X2xkaXNjX2tpbGxgLCBhbmQgdWx0aW1hdGVseSBgdHR5X2xkaXNjX2Nsb3NlYCwgd2hpY2ggYWxzbyBjYWxscyBgc2xpcF9jbG9zZWAuICBTbywgeW91IGdldCBhIGRvdWJsZSBjYWxsLgoKTm93LCBpZiBgc2xpcF9oYW5ndXBgIGlzIHJlbW92ZWQsIHRoZSBmbG93IGNoYW5nZXMuICBgdHR5X2xkaXNjX2hhbmd1cGAgd2lsbCAqc3RpbGwqIGNhbGwgZnVuY3Rpb25zIHdoaWNoIGluZGlyZWN0bHkgaW52b2tlIGBzbGlwX2Nsb3NlYCwgc28gaXQmIzM5O3Mgbm90IGEgY29tcGxldGUgcmVtb3ZhbCBvZiBmdW5jdGlvbmFsaXR5LiBUaGUgKm9yZGVyKiBvZiBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIHRpbWluZyBvZiBgdW5yZWdpc3Rlcl9uZXRkZXZgLCBzaGlmdHMuICBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGJ1ZyBmaXggbGllcy4gIGBzbGlwX2Nsb3NlYCBub3cgZ2V0cyBjYWxsZWQgKmxhdGVyKiBpbiB0aGUgc2h1dGRvd24gc2VxdWVuY2UsIHdoaWNoIHJlZHVjZXMgdGhlIHBvdGVudGlhbCBmb3IgdXNlLWFmdGVyLWZyZWUgb3Igb3RoZXIgY29uY3VycmVuY3kgaXNzdWVzLCBiZWNhdXNlIHRoZSBsaW5lIGRpc2NpcGxpbmUgaXNuJiMzOTt0IGZ1bGx5IHNodXQgZG93biB3aGVuIHRoZSBuZXRkZXYgaXMgdW5yZWdpc3RlcmVkLiBUaGlzIGlzIHRoZSBrZXkgZGlmZmVyZW5jZS4KClNvLCBpcyB0aGlzIGNoYW5nZSB3b3J0aCBmdXp6aW5nPyAgV2hpbGUgdGhlIHBhdGNoIGl0c2VsZiBvbmx5ICpyZW1vdmVzKiBhIGZ1bmN0aW9uLCBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJlY2F1c2UgaXQgY2hhbmdlcyB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGRyaXZlci4gSXQgZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gYnkgZGVsYXlpbmcgdGhlIG5ldGRldiB1bnJlZ2lzdHJhdGlvbi4gR2l2ZW4gdGhhdCwgSSYjMzk7ZCBzYXkgdGhhdCB3aGlsZSB0aGVyZSBhcmUgbm8gKm5ldyogY29kZSBwYXRocyB0byBmdXp6LCB0aGUgY2hhbmdlICpkb2VzKiBhZmZlY3QgdGhlIHRpbWluZyBvZiBleGlzdGluZyBvcGVyYXRpb25zLCBhbmQgdGhhdCYjMzk7cyB3b3J0aCBjaGVja2luZy4gIFdlIGNhbiB1c2Ugc3l6a2FsbGVyIHRvIGNyZWF0ZSBhIFBUWSwgc2V0IHRoZSBsaW5lIGRpc2NpcGxpbmUgdG8gU0xJUCwgYW5kIHRyaWdnZXIgYSBoYW5ndXAuCgpUaGVyZWZvcmUsIGJlY2F1c2UgaXQgKmNoYW5nZXMqIHRoZSBleGVjdXRpb24gZmxvdywgYW5kIGZpeGVzIGEgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgcmFjZSBjb25kaXRpb24sIEkmIzM5O20gdGhpbmtpbmcgeWVzLCB0aGVyZSYjMzk7cyBhIHJlYXNvbiB0byBjaGVjayBpdCB3aXRoIGZ1enppbmcuIEZvY3VzU3ltYm9scz8gIFRoZXJlIGFyZW4mIzM5O3QgbmV3IGZ1bmN0aW9uLCBidXQgZm9jdXNpbmcgb24gYHNsaXBfY2xvc2VgIGFuZC9vciBgc2xpcF9vcGVuYCB3b3VsZCBiZSByZWFzb25hYmxlLCBnaXZlbiB0aGF0IHRoZSB0aW1pbmcgb2YgYHNsaXBfY2xvc2VgIGlzIHRoZSBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NsaXBfY2xvc2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9NzkyPXN0YXRpYyBpbnQgc2xpcF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtODg1LVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6ODg2OnN0YXRpYyB2b2lkIHNsaXBfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTg4Ny17XG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9MTI2NT1zdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgc2xfbGRpc2MgPSB7XG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTI2OS1cdC5vcGVuIFx0XHQ9IHNsaXBfb3BlbixcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jOjEyNzA6XHQuY2xvc2VcdCBcdD0gc2xpcF9jbG9zZSxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEyNzEtXHQuaW9jdGxcdFx0PSBzbGlwX2lvY3RsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk2NAoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkNoZWNraW5nIGBzbGlwX29wZW5gKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgZXhhbWluZSB0aGF0IGBzbGlwX29wZW5gIGZ1bmN0aW9uIG9yIHZhcmlhYmxlIOKAkyB3aGF0ZXZlciBpdCBtYXkgYmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgcHJvY2VzcyBvciBzeXN0ZW0uIElzIGl0IGEgZmxhZz8gQSBzdGF0ZSB2YXJpYWJsZT8gQSBmdW5jdGlvbiBjYWxsPyBXaGF0IGFyZSBpdHMgaW5wdXRzIGFuZCBleHBlY3RlZCBvdXRwdXRzPyBXaGF0IGRlcGVuZGVuY2llcyBkb2VzIGl0IGhhdmU/IEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCBpdHMgYmVoYXZpb3IsIGFuZCBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgY2FsbGVkLCBpcyBnb2luZyB0byBiZSBjcnVjaWFsIHRvIGRldGVybWluaW5nIHRoZSBmbG93IGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBsb29rIGZvciBpdHMgZGVmaW5pdGlvbiBhbmQgYW55IHJlZmVyZW5jZXMgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGltcGFjdC4gVGhlIGNvbnRleHQgb2YgaXRzIHVzZSB3aWxsIGluZm9ybSBteSB1bmRlcnN0YW5kaW5nLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIGl0JiMzOTtzIHRocmVhZC1zYWZlIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW52b2x2aW5nIGl0LiBJJiMzOTttIGFsc28gbG9va2luZyBmb3IgYW55IG9idmlvdXMgZWRnZSBjYXNlcyBvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGluIGl0cyBsb2dpYy4gQmFzaWNhbGx5LCBJIHdhbnQgdG8gZ2FpbiBhIHN0cm9uZyBtZW50YWwgbW9kZWwgb2YgaG93IGBzbGlwX29wZW5gIHdvcmtzIHNvIEkgY2FuIGJ1aWxkIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbGlwX29wZW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9Njg4PXN0YXRpYyB2b2lkIHNsaXBfcmVjZWl2ZV9idWYoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdTggKmNwLCBjb25zdCB1OCAqZnAsXG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtNzE3LS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jOjcxODogKiAgc2xpcF9vcGVuIGhlbHBlciByb3V0aW5lcy5cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTcxOS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLS1cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jPTc0Mz1zdGF0aWMgc3RydWN0IHNsaXAgKnNsX2FsbG9jKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtNzkxLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6NzkyOnN0YXRpYyBpbnQgc2xpcF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy03OTMte1xuLS1cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jPTEyNjU9c3RhdGljIHN0cnVjdCB0dHlfbGRpc2Nfb3BzIHNsX2xkaXNjID0ge1xuLS1cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEyNjgtXHQubmFtZSBcdFx0PSBcJiMzNDtzbGlwXCYjMzQ7LFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6MTI2OTpcdC5vcGVuIFx0XHQ9IHNsaXBfb3BlbixcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEyNzAtXHQuY2xvc2VcdCBcdD0gc2xpcF9jbG9zZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1NTAKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgU0xJUCBEcml2ZXIgQnVnKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHBpbnBvaW50IHRoaXMgYnVnLiBMZXQgbWUgdGhpbmsuLi4gQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgaW4gcGxheSBoZXJlIGJlc2lkZXMgdGhlIG9idmlvdXMgb25lcyBJJiMzOTt2ZSBiZWVuIHdvcmtpbmcgd2l0aD8gUGVyaGFwcyBgc2xpcF9yZWNlaXZlX2J1ZmAsIGBzbGlwX3dyaXRlX3dha2V1cGAsIG9yIGV2ZW4gYHNsaXBfaW9jdGxgPyBIbW0sIG5vLCB3YWl0IGEgbWludXRlLCB0aGUgY29yZSBpc3N1ZSB3YXMgc29tZXRoaW5nIHRvIGRvIHdpdGggYSBoYW5ndXAsIHdhc24mIzM5O3QgaXQ/IFJpZ2h0LiBXaGVuIGEgaGFuZ3VwIGhhcHBlbnMsIHRoYXQmIzM5O3Mgd2hlbiBgdHR5X2xkaXNjX2hhbmd1cGAgZ2V0cyBjYWxsZWQuCgpBbHJpZ2h0LCBzbyB0aGUga2V5IGFyZWFzIHRvIHJlYWxseSBmb2N1cyBvbiBhcmUgYHNsaXBfY2xvc2VgLCBgc2xpcF9vcGVuYCwgYW5kLCBjcnVjaWFsbHksIGB0dHlfbGRpc2NfaGFuZ3VwYC4gTm93LCB3aGVyZSBkb2VzIGB0dHlfbGRpc2NfaGFuZ3VwYCBsaXZlPyBPaCB5ZWFoLCB0aGF0JiMzOTtzIGluIGBkcml2ZXJzL3R0eS90dHlfbGRpc2MuY2AuIEFuZCB0aGUgcGF0Y2ggaXRzZWxmLCB0aGUgb25lIHRoYXQmIzM5O3Mgc3VwcG9zZWQgdG8gZml4IHRoaXMsIGl0JiMzOTtzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jYC4KCk9rYXksIG5leHQgc3RlcCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHRvIG1ha2Ugc3VyZSBTTElQIGlzIGV2ZW4gZW5hYmxlZCBpbiB0aGlzIHNwZWNpZmljIHNldHVwLCBqdXN0IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBjaGFzaW5nIGEgcGhhbnRvbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNMSVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc6Njpjb25maWcgU0xJUFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtTTElQIChzZXJpYWwgbGluZSkgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZz00Mz1pZiBTTElQXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNDQtXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc6NDU6Y29uZmlnIFNMSVBfQ09NUFJFU1NFRFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtDU0xJUCBjb21wcmVzc2VkIGhlYWRlcnNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNjAtXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc6NjE6Y29uZmlnIFNMSVBfU01BUlRcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZy02Mi1cdGJvb2wgXCYjMzQ7S2VlcGFsaXZlIGFuZCBsaW5lZmlsbFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZy02OC1cbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZzo2OTpjb25maWcgU0xJUF9NT0RFX1NMSVA2XG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNzAtXHRib29sIFwmIzM0O1NpeCBiaXQgU0xJUCBlbmNhcHN1bGF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjExCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgU0xJUGAg4oCTIHRoYXQmIzM5O3MgdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIG9yIG1vZHVsZSB3ZSYjMzk7cmUgd29ya2luZyB3aXRoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtkb2VzIGBTTElQYCBoYXZlIGFueSBkZXBlbmRlbmNpZXM/IFdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgY29tcG9uZW50cyBkb2VzIGl0IHJlbHkgb24gdG8gZnVuY3Rpb24gY29ycmVjdGx5PyYjMzQ7IFVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBjb25maWd1cmF0aW9ucyBpcyBjcml0aWNhbCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBjb21wbGV4IHN5c3RlbXMuIElkZW50aWZ5aW5nIHRoZXNlIGRlcGVuZGVuY2llcyBlYXJseSBvbiBwcmV2ZW50cyBjYXNjYWRpbmcgaXNzdWVzIGxhdGVyLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHRoZSBjaGFpbiBvZiBjb25uZWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9zbGlwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBTTElQIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIFNMSVBcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O1NMSVAgKHNlcmlhbCBsaW5lKSBzdXBwb3J0XCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIFRUWVxuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBTYXkgWSBpZiB5b3UgaW50ZW5kIHRvIHVzZSBTTElQIG9yIENTTElQIChjb21wcmVzc2VkIFNMSVApIHRvXG4gIDExOlx0XHQgIGNvbm5lY3QgdG8geW91ciBJbnRlcm5ldCBzZXJ2aWNlIHByb3ZpZGVyIG9yIHRvIGNvbm5lY3QgdG8gc29tZVxuICAxMjpcdFx0ICBvdGhlciBsb2NhbCBVbml4IGJveCBvciBpZiB5b3Ugd2FudCB0byBjb25maWd1cmUgeW91ciBMaW51eCBib3ggYXMgYVxuICAxMzpcdFx0ICBTbGlwL0NTbGlwIHNlcnZlciBmb3Igb3RoZXIgcGVvcGxlIHRvIGRpYWwgaW4uIFNMSVAgKFNlcmlhbCBMaW5lXG4gIDE0Olx0XHQgIEludGVybmV0IFByb3RvY29sKSBpcyBhIHByb3RvY29sIHVzZWQgdG8gc2VuZCBJbnRlcm5ldCB0cmFmZmljIG92ZXJcbiAgMTU6XHRcdCAgc2VyaWFsIGNvbm5lY3Rpb25zIHN1Y2ggYXMgdGVsZXBob25lIGxpbmVzIG9yIG51bGwgbW9kZW0gY2FibGVzO1xuICAxNjpcdFx0ICBub3dhZGF5cywgdGhlIHByb3RvY29sIFBQUCBpcyBtb3JlIGNvbW1vbmx5IHVzZWQgZm9yIHRoaXMgc2FtZVxuICAxNzpcdFx0ICBwdXJwb3NlLlxuICAxODpcdFxuICAxOTpcdFx0ICBOb3JtYWxseSwgeW91ciBhY2Nlc3MgcHJvdmlkZXIgaGFzIHRvIHN1cHBvcnQgU0xJUCBpbiBvcmRlciBmb3IgeW91XG4gIDIwOlx0XHQgIHRvIGJlIGFibGUgdG8gdXNlIGl0LCBidXQgdGhlcmUgaXMgbm93IGEgU0xJUCBlbXVsYXRvciBjYWxsZWQgU0xpUlBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2OTYKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFNMSVAgRHJpdmVyIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoZSBkZXBlbmRlbmN5OiBgU0xJUGAgcmVsaWVzIG9uIGBUVFlgLiBNYWtlcyBzZW5zZS4gVGhlIGNvbmZpZyBuZWVkZWQgdG8gZW5hYmxlIGl0IGlzIGNsZWFybHkgYFNMSVBgLiBCdXQsIHRoZSByZWFsIG1lYXQgb2YgdGhpcyBzZWVtcyB0byBiZSB0aGUgcmVtb3ZhbCBvZiBgc2xpcF9oYW5ndXBgLiBIbW0sIGlzIHRoaXMgYWN0dWFsbHkgYSBmdW5jdGlvbmFsIGNoYW5nZT8KClllcywgaXQgaXMhIEl0JiMzOTtzIGNoYW5naW5nIGhvdyB0aGUgU0xJUCBkcml2ZXIgYmVoYXZlcyBvbiBoYW5ndXAsIHdoaWNoIGlzIGRlZmluaXRlbHkgc2lnbmlmaWNhbnQuIEJlZm9yZSB0aGlzIHBhdGNoLCBgc2xpcF9oYW5ndXBgIHdhcyBjYWxsZWQsIHdoaWNoIGluIHR1cm4gY2FsbGVkIGBzbGlwX2Nsb3NlYC4gTm93LCBgc2xpcF9oYW5ndXBgIGlzIGJ5cGFzc2VkIGVudGlyZWx5LCBhbmQgYHNsaXBfY2xvc2VgIGlzIG9ubHkgaW52b2tlZCB3aGVuIHRoZSBsaW5lIGRpc2NpcGxpbmUgKGxkaXNjKSBpcyBjbG9zZWQuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBiZWhhdmlvcmFsIHNoaWZ0LCBhbmQgdGhhdCB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZy4KCk15IGZvY3VzIHNob3VsZCBiZSBzcXVhcmVseSBvbiB0aG9zZSBmdW5jdGlvbnM6IGBzbGlwX2Nsb3NlYCBhbmQgYHNsaXBfb3BlbmAuIFRoZSBjb25maWcgcmVtYWlucyBgU0xJUGAuCgpOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgc2NhbiB0aGUgY29kZSB0byBlbnN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYWxzbyBiZSBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZS4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NsX2xkaXNjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jPTExODM9c3RhdGljIGludCBzbF9zaW9jZGV2cHJpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLFxuLS1cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEyNjQtXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzoxMjY1OnN0YXRpYyBzdHJ1Y3QgdHR5X2xkaXNjX29wcyBzbF9sZGlzYyA9IHtcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEyNjYtXHQub3duZXIgXHRcdD0gVEhJU19NT0RVTEUsXG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9MTI3Nj1zdGF0aWMgaW50IF9faW5pdCBzbGlwX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy0xMzAwLVx0LyogRmlsbCBpbiBvdXIgbGluZSBwcm90b2NvbCBkaXNjaXBsaW5lLCBhbmQgcmVnaXN0ZXIgaXQgKi9cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jOjEzMDE6XHRzdGF0dXMgPSB0dHlfcmVnaXN0ZXJfbGRpc2MoXHUwMDI2c2xfbGRpc2MpO1xuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTMwMi1cdGlmIChzdGF0dXMgIT0gMCkge1xuLS1cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jPTEzMDk9c3RhdGljIHZvaWQgX19leGl0IHNsaXBfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEzNjEtXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzoxMzYyOlx0dHR5X3VucmVnaXN0ZXJfbGRpc2MoXHUwMDI2c2xfbGRpc2MpO1xuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTM2My19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDM3CgkJCQkJCQlvdXRwdXQ6IDEzMQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGZyYW1lZCBhcyBhIHNlcmllcyBvZiB0aG91Z2h0czoKCioqRm9jdXNpbmcgb24gS2V5IEZ1bmN0aW9ucyBhbmQgU2V0dGluZyBSZXN1bHRzKioKCk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgb3BlcmF0aW9uIGhpbmdlcyBvbiBgc2xpcF9jbG9zZWAgYW5kIGBzbGlwX29wZW5gLiBUaG9zZSBhcmUgdGhlIHR3byBmdW5jdGlvbnMgdGhhdCByZWFsbHkgbWF0dGVyIGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBmdWxseSB1bmRlcnN0YW5kaW5nIHRoZWlyIGlucHV0cywgb3V0cHV0cywgYW5kIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLgoKT25jZSBJIGhhdmUgYSBzb2xpZCBncmFzcCBvZiB0aG9zZSB0d28sIHRoZSBuZXh0IHN0ZXAgaXMgc3RyYWlnaHRmb3J3YXJkOiBJJiMzOTtsbCBuZWVkIHRvIHN0cmF0ZWdpY2FsbHkgc2V0IHRoZSByZXN1bHRzLiBUaGF0IG1lYW5zIGNhcmVmdWxseSBjcmFmdGluZyB0aGUgcmV0dXJuIHZhbHVlcyBvciBtb2RpZnlpbmcgYW55IHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyBhY2NvcmRpbmcgdG8gaG93IHRob3NlIGZ1bmN0aW9ucyBhcmUgaW50ZXJhY3RpbmcgYW5kIHdoYXQgdGhlIGRlc2lyZWQgb3ZlcmFsbCBvdXRjb21lIGlzLiBFZmZpY2llbmN5IGFuZCBhY2N1cmFjeSBhcmUsIG9mIGNvdXJzZSwgcGFyYW1vdW50LCBidXQgSSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHByb2Nlc3MgY2FuIGJlIHJlcHJvZHVjZWQgaWYgbmVjZXNzYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0xJUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NsaXBfY2xvc2UmIzM0OywKICAgICYjMzQ7c2xpcF9vcGVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBzbGlwX2hhbmd1cGAgY2FsbGJhY2sgZnJvbSB0aGUgU0xJUCBsaW5lIGRpc2NpcGxpbmUuIFRoaXMgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgdGhlIFNMSVAgZHJpdmVyIG9uIGhhbmd1cCwgYXMgYHNsaXBfY2xvc2VgIGlzIG5vIGxvbmdlciBjYWxsZWQgZGlyZWN0bHkgZnJvbSB0aGUgaGFuZ3VwIHBhdGgsIGJ1dCByYXRoZXIgZGVmZXJyZWQgdW50aWwgdGhlIGxkaXNjIGlzIGNsb3NlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSB0ZWFyZG93biBzZXF1ZW5jZSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBUVFkgaGFuZ3VwIG9wZXJhdGlvbnMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTElQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2xpcF9jbG9zZSYjMzQ7LAogICAgJiMzNDtzbGlwX29wZW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYHNsaXBfaGFuZ3VwYCBjYWxsYmFjayBmcm9tIHRoZSBTTElQIGxpbmUgZGlzY2lwbGluZS4gVGhpcyBjaGFuZ2VzIHRoZSBiZWhhdmlvciBvZiB0aGUgU0xJUCBkcml2ZXIgb24gaGFuZ3VwLCBhcyBgc2xpcF9jbG9zZWAgaXMgbm8gbG9uZ2VyIGNhbGxlZCBkaXJlY3RseSBmcm9tIHRoZSBoYW5ndXAgcGF0aCwgYnV0IHJhdGhlciBkZWZlcnJlZCB1bnRpbCB0aGUgbGRpc2MgaXMgY2xvc2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgdGhlIHRlYXJkb3duIHNlcXVlbmNlIGFuZCBpcyByZWFjaGFibGUgdmlhIFRUWSBoYW5ndXAgb3BlcmF0aW9ucywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDExOjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYHNsaXBfaGFuZ3VwYCBmdW5jdGlvbiBhbmQgaXRzIGFzc2lnbm1lbnQgdG8gdGhlIGBoYW5ndXBgIGZpZWxkIGluIHRoZSBgc2xfbGRpc2NgIChgdHR5X2xkaXNjX29wc2ApIHN0cnVjdHVyZSB3aXRoaW4gdGhlIFNMSVAgbmV0d29yayBkcml2ZXIuIFRoaXMgY2hhbmdlIGFsdGVycyB0aGUgY29udHJvbCBmbG93IGR1cmluZyBhIFRUWSBoYW5ndXAgZXZlbnQsIG1lYW5pbmcgdGhlIFNMSVAgY2hhbm5lbCBtaWdodCBub3QgYmUgZXhwbGljaXRseSBjbG9zZWQgb24gaGFuZ3VwLiBJZiB0aGlzIG9taXNzaW9uIGludHJvZHVjZXMgYW55IGJ1Z3MsIHRoZXkgd291bGQgbGlrZWx5IG1hbmlmZXN0IGFzIHJlc291cmNlIGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXRpZXMgKGUuZy4sIGlmIHRoZSBUVFkgaXMgZGVzdHJveWVkIGJ1dCB0aGUgU0xJUCBjaGFubmVsIGNvbnRpbnVlcyB0byByZWZlcmVuY2UgaXQpLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIChpZiB0aGUgVFRZIGxheWVyIGF0dGVtcHRzIHRvIGNhbGwgYSBOVUxMIGBoYW5ndXBgIHBvaW50ZXIpLiBcblxuVGhlc2UgY2xhc3NlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIHN1Y2ggYXMgS0FTQU4gKHdoaWNoIGNhdGNoZXMgdXNlLWFmdGVyLWZyZWUgYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGFuZCBzdGFuZGFyZCBrZXJuZWwgb29wcy9wYW5pY3MgKHdoaWNoIGNhdGNoIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWRkIGxvZ2ljIHRoYXQgY291bGQgb3BlcmF0ZSBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTg1N2ZmN2JhYmM0NjFjZjcyMDAyYjc0Y2Q1YTljZDZhNTY1MDIzOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDExOjUxOjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMgYi9kcml2ZXJzL25ldC9zbGlwL3NsaXAuYwppbmRleCBmYWFlNzExY2Y3OTNkLi5hYzBmYzU5YzhjMjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbGlwL3NsaXAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9zbGlwL3NsaXAuYwpAQCAtODgxLDggJiM0Mzs4ODEsNiBAQCBzdGF0aWMgaW50IHNsaXBfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogICogQ2xvc2UgZG93biBhIFNMSVAgY2hhbm5lbC4KICAqIFRoaXMgbWVhbnMgZmx1c2hpbmcgb3V0IGFueSBwZW5kaW5nIHF1ZXVlcywgYW5kIHRoZW4gcmV0dXJuaW5nLiBUaGlzCiAgKiBjYWxsIGlzIHNlcmlhbGl6ZWQgYWdhaW5zdCBvdGhlciBsZGlzYyBmdW5jdGlvbnMuCi0gKgotICogV2UgYWxzbyB1c2UgdGhpcyBtZXRob2QgZm8gYSBoYW5ndXAgZXZlbnQKICAqLwogCiBzdGF0aWMgdm9pZCBzbGlwX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCkBAIC05MTAsMTEgJiM0Mzs5MDgsNiBAQCBzdGF0aWMgdm9pZCBzbGlwX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiAJdW5yZWdpc3Rlcl9uZXRkZXYoc2wtJmd0O2Rldik7CiAJLyogVGhpcyB3aWxsIGNvbXBsZXRlIHZpYSBzbF9mcmVlX25ldGRldiAqLwogfQotCi1zdGF0aWMgdm9pZCBzbGlwX2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCXNsaXBfY2xvc2UodHR5KTsKLX0KICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICoJCQlTVEFOREFSRCBTTElQIEVOQ0FQU1VMQVRJT04JCSAgCSAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTEyNzUsNyAmIzQzOzEyNjgsNiBAQCBzdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgc2xfbGRpc2MgPSB7CiAJLm5hbWUgCQk9ICYjMzQ7c2xpcCYjMzQ7LAogCS5vcGVuIAkJPSBzbGlwX29wZW4sCiAJLmNsb3NlCSAJPSBzbGlwX2Nsb3NlLAotCS5oYW5ndXAJIAk9IHNsaXBfaGFuZ3VwLAogCS5pb2N0bAkJPSBzbGlwX2lvY3RsLAogCS5yZWNlaXZlX2J1Zgk9IHNsaXBfcmVjZWl2ZV9idWYsCiAJLndyaXRlX3dha2V1cAk9IHNsaXBfd3JpdGVfd2FrZXVwLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTE6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwNQoJCQkJCQkJb3V0cHV0OiAyNzMKCQkJCQkJCXRob3VnaHRzOiA2NTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTTElQIERyaXZlciBIYW5ndXAgUmVtb3ZhbCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRha2luZyBvdXQgdGhlIGBzbGlwX2hhbmd1cGAgZnVuY3Rpb24gYW5kLCBjcnVjaWFsbHksIGl0cyBhc3NvY2lhdGlvbiB3aXRoIHRoZSBgaGFuZ3VwYCBmaWVsZCBpbiB0aGUgYHR0eV9sZGlzY19vcHNgIHN0cnVjdHVyZSBmb3IgdGhlIFNMSVAgZHJpdmVyLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiB3aGF0IGhhcHBlbnMgdG8gdGhlIGhhbmd1cCBoYW5kbGluZyBub3c/IGBzbGlwX2hhbmd1cGAgd2FzIGp1c3QgY2FsbGluZyBgc2xpcF9jbG9zZWAsIHNvIHJlbW92aW5nIGl0IGVzc2VudGlhbGx5IHNraXBzIHRoYXQgc3RlcCBkdXJpbmcgYSBoYW5ndXAuCgpNeSBpbml0aWFsIGNvbmNlcm4gd2FzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gQnV0IHdhaXQsIHRoaXMgaXMganVzdCBhIGZ1bmN0aW9uIHBvaW50ZXIgYXNzaWdubWVudCBiZWluZyByZW1vdmVkLiBUaGVyZSYjMzk7cyBubyBuZXcgZGF0YSBiZWluZyBhbGxvY2F0ZWQgb3IgY29waWVkLCBzbyB0aGUgcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIGlzIGJhc2ljYWxseSB6ZXJvLiBUaGlzIGlzbiYjMzk7dCBhIEtNU0FOIHNpdHVhdGlvbi4KCkJ1dCB0aGUgcmVhbCBxdWVzdGlvbiBpczogd2hhdCYjMzk7cyB0aGUgYmVoYXZpb3Igd2hlbiBgaGFuZ3VwYCBpcyAqTlVMTCo/IERvZXMgdGhlIFRUWSBsYXllciBoYW5kbGUgdGhhdCBncmFjZWZ1bGx5PyBJJiMzOTttIHRoaW5raW5nIHRoZSBUVFkgbGF5ZXIgbWlnaHQganVzdCBub3QgY2FsbCBhbnl0aGluZywgb3IgcG9zc2libHkgY2FsbCBhIGRlZmF1bHQgaGFuZGxlci4gVGhlIGRvY3VtZW50YXRpb24gZm9yIGB0dHlfbGRpc2Nfb3BzYCBpbiBgaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaGAgc2hvdWxkIGNsZWFyIHRoYXQgdXAuCgpJZiB0aGUgVFRZIGxheWVyIGRvZXNuJiMzOTt0IGhhbmRsZSB0aGUgTlVMTCBwb2ludGVyLCB3ZSYjMzk7ZCBoYXZlIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBhIHN0cmFpZ2h0Zm9yd2FyZCBvb3BzIHRoYXQgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRlc3RpbmcgKEtBU0FOIG9yIHNvbWV0aGluZyBzaW1pbGFyKS4gSWYgbm90LCB3ZSBydW4gdGhlIHJpc2sgb2YgcmVzb3VyY2UgbGVha3MsIGEgc2xpcCBjaGFubmVsIG1pZ2h0IG5vdCBiZSBjbG9zZWQgd2hlbiB0aGUgdHR5IGhhbmdzIHVwLCBsZWFkaW5nIHRvIGEgcG9zc2libGUgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gaWYgdGhlIFRUWSBpcyBkZXN0cm95ZWQgYnV0IHRoZSBzbGlwIGNoYW5uZWwgc3RpbGwgcmVmZXJlbmNlcyBpdC4gSG93ZXZlciwgdG9vbHMgbGlrZSBLQVNBTiBhbmQgS01FTUxFQUsgc2hvdWxkIGRldGVjdCB0aGF0IHJpZ2h0IGF3YXkuCgpTbywgaW4gc3VtbWFyeTogdGhlIG1haW4gY29uY2VybiBoZXJlIGlzIHJlc291cmNlIG1hbmFnZW1lbnQsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvIGxlYWtzLiBUaGUgcGF0Y2ggY291bGQgaW50cm9kdWNlIHJlc291cmNlIGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlLCBvciBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgYnV0IGFsbCBvZiB0aG9zZSBzaG91bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nL21lbW9yeSBzYWZldHkgdG9vbHMuIFRoZXJlJiMzOTtzIG5vIEtNU0FOIHJpc2sgaGVyZSwgYW5kIHRoZSBpbXBhY3QgaXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCB0byByZWFzb24gYWJvdXQuIFRoZSBwYXRjaCBpcyBwcm9iYWJseSBzYWZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHRoZSBgc2xpcF9oYW5ndXBgIGZ1bmN0aW9uIGFuZCBpdHMgYXNzaWdubWVudCB0byB0aGUgYGhhbmd1cGAgZmllbGQgaW4gdGhlIGBzbF9sZGlzY2AgKGB0dHlfbGRpc2Nfb3BzYCkgc3RydWN0dXJlIHdpdGhpbiB0aGUgU0xJUCBuZXR3b3JrIGRyaXZlci4gVGhpcyBjaGFuZ2UgYWx0ZXJzIHRoZSBjb250cm9sIGZsb3cgZHVyaW5nIGEgVFRZIGhhbmd1cCBldmVudCwgbWVhbmluZyB0aGUgU0xJUCBjaGFubmVsIG1pZ2h0IG5vdCBiZSBleHBsaWNpdGx5IGNsb3NlZCBvbiBoYW5ndXAuIElmIHRoaXMgb21pc3Npb24gaW50cm9kdWNlcyBhbnkgYnVncywgdGhleSB3b3VsZCBsaWtlbHkgbWFuaWZlc3QgYXMgcmVzb3VyY2UgbGVha3MsIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcyAoZS5nLiwgaWYgdGhlIFRUWSBpcyBkZXN0cm95ZWQgYnV0IHRoZSBTTElQIGNoYW5uZWwgY29udGludWVzIHRvIHJlZmVyZW5jZSBpdCksIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgKGlmIHRoZSBUVFkgbGF5ZXIgYXR0ZW1wdHMgdG8gY2FsbCBhIE5VTEwgYGhhbmd1cGAgcG9pbnRlcikuIFxuXG5UaGVzZSBjbGFzc2VzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgc3VjaCBhcyBLQVNBTiAod2hpY2ggY2F0Y2hlcyB1c2UtYWZ0ZXItZnJlZSBhbmQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgYW5kIHN0YW5kYXJkIGtlcm5lbCBvb3BzL3BhbmljcyAod2hpY2ggY2F0Y2ggTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgZG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhZGQgbG9naWMgdGhhdCBjb3VsZCBvcGVyYXRlIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYHNsaXBfaGFuZ3VwYCBmdW5jdGlvbiBhbmQgaXRzIGFzc2lnbm1lbnQgdG8gdGhlIGBoYW5ndXBgIGZpZWxkIGluIHRoZSBgc2xfbGRpc2NgIChgdHR5X2xkaXNjX29wc2ApIHN0cnVjdHVyZSB3aXRoaW4gdGhlIFNMSVAgbmV0d29yayBkcml2ZXIuIFRoaXMgY2hhbmdlIGFsdGVycyB0aGUgY29udHJvbCBmbG93IGR1cmluZyBhIFRUWSBoYW5ndXAgZXZlbnQsIG1lYW5pbmcgdGhlIFNMSVAgY2hhbm5lbCBtaWdodCBub3QgYmUgZXhwbGljaXRseSBjbG9zZWQgb24gaGFuZ3VwLiBJZiB0aGlzIG9taXNzaW9uIGludHJvZHVjZXMgYW55IGJ1Z3MsIHRoZXkgd291bGQgbGlrZWx5IG1hbmlmZXN0IGFzIHJlc291cmNlIGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXRpZXMgKGUuZy4sIGlmIHRoZSBUVFkgaXMgZGVzdHJveWVkIGJ1dCB0aGUgU0xJUCBjaGFubmVsIGNvbnRpbnVlcyB0byByZWZlcmVuY2UgaXQpLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIChpZiB0aGUgVFRZIGxheWVyIGF0dGVtcHRzIHRvIGNhbGwgYSBOVUxMIGBoYW5ndXBgIHBvaW50ZXIpLiBcblxuVGhlc2UgY2xhc3NlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIHN1Y2ggYXMgS0FTQU4gKHdoaWNoIGNhdGNoZXMgdXNlLWFmdGVyLWZyZWUgYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGFuZCBzdGFuZGFyZCBrZXJuZWwgb29wcy9wYW5pY3MgKHdoaWNoIGNhdGNoIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWRkIGxvZ2ljIHRoYXQgY291bGQgb3BlcmF0ZSBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NTE6NTQuNDY4NzIxMDI2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyNjYzNDgxNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNMSVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbGlwX2Nsb3NlXCIsXG4gICAgXCJzbGlwX29wZW5cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBzbGlwX2hhbmd1cGAgZnVuY3Rpb24gYW5kIGl0cyBhc3NpZ25tZW50IHRvIHRoZSBgaGFuZ3VwYCBmaWVsZCBpbiB0aGUgYHNsX2xkaXNjYCAoYHR0eV9sZGlzY19vcHNgKSBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBTTElQIG5ldHdvcmsgZHJpdmVyLiBUaGlzIGNoYW5nZSBhbHRlcnMgdGhlIGNvbnRyb2wgZmxvdyBkdXJpbmcgYSBUVFkgaGFuZ3VwIGV2ZW50LCBtZWFuaW5nIHRoZSBTTElQIGNoYW5uZWwgbWlnaHQgbm90IGJlIGV4cGxpY2l0bHkgY2xvc2VkIG9uIGhhbmd1cC4gSWYgdGhpcyBvbWlzc2lvbiBpbnRyb2R1Y2VzIGFueSBidWdzLCB0aGV5IHdvdWxkIGxpa2VseSBtYW5pZmVzdCBhcyByZXNvdXJjZSBsZWFrcywgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0aWVzIChlLmcuLCBpZiB0aGUgVFRZIGlzIGRlc3Ryb3llZCBidXQgdGhlIFNMSVAgY2hhbm5lbCBjb250aW51ZXMgdG8gcmVmZXJlbmNlIGl0KSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyAoaWYgdGhlIFRUWSBsYXllciBhdHRlbXB0cyB0byBjYWxsIGEgTlVMTCBgaGFuZ3VwYCBwb2ludGVyKS4gXFxuXFxuVGhlc2UgY2xhc3NlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIHN1Y2ggYXMgS0FTQU4gKHdoaWNoIGNhdGNoZXMgdXNlLWFmdGVyLWZyZWUgYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGFuZCBzdGFuZGFyZCBrZXJuZWwgb29wcy9wYW5pY3MgKHdoaWNoIGNhdGNoIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWRkIGxvZ2ljIHRoYXQgY291bGQgb3BlcmF0ZSBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBgc2xpcF9oYW5ndXBgIGNhbGxiYWNrIGZyb20gdGhlIFNMSVAgbGluZSBkaXNjaXBsaW5lLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBTTElQIGRyaXZlciBvbiBoYW5ndXAsIGFzIGBzbGlwX2Nsb3NlYCBpcyBubyBsb25nZXIgY2FsbGVkIGRpcmVjdGx5IGZyb20gdGhlIGhhbmd1cCBwYXRoLCBidXQgcmF0aGVyIGRlZmVycmVkIHVudGlsIHRoZSBsZGlzYyBpcyBjbG9zZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyB0aGUgdGVhcmRvd24gc2VxdWVuY2UgYW5kIGlzIHJlYWNoYWJsZSB2aWEgVFRZIGhhbmd1cCBvcGVyYXRpb25zLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NTE6NTQuNDY4NzI1MDA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ3NjYzNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTg1N2ZmN2JhYmM0NjFjZjcyMDAyYjc0Y2Q1YTljZDZhNTY1MDIzOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxMTo1MTo1MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbGlwL3NsaXAuYyBiL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jXFxuaW5kZXggZmFhZTcxMWNmNzkzZC4uYWMwZmM1OWM4YzI1OSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9zbGlwL3NsaXAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jXFxuQEAgLTg4MSw4ICs4ODEsNiBAQCBzdGF0aWMgaW50IHNsaXBfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxcbiAgKiBDbG9zZSBkb3duIGEgU0xJUCBjaGFubmVsLlxcbiAgKiBUaGlzIG1lYW5zIGZsdXNoaW5nIG91dCBhbnkgcGVuZGluZyBxdWV1ZXMsIGFuZCB0aGVuIHJldHVybmluZy4gVGhpc1xcbiAgKiBjYWxsIGlzIHNlcmlhbGl6ZWQgYWdhaW5zdCBvdGhlciBsZGlzYyBmdW5jdGlvbnMuXFxuLSAqXFxuLSAqIFdlIGFsc28gdXNlIHRoaXMgbWV0aG9kIGZvIGEgaGFuZ3VwIGV2ZW50XFxuICAqL1xcbiBcXG4gc3RhdGljIHZvaWQgc2xpcF9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxcbkBAIC05MTAsMTEgKzkwOCw2IEBAIHN0YXRpYyB2b2lkIHNsaXBfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG4gXFx0dW5yZWdpc3Rlcl9uZXRkZXYoc2wtXFx1MDAzZWRldik7XFxuIFxcdC8qIFRoaXMgd2lsbCBjb21wbGV0ZSB2aWEgc2xfZnJlZV9uZXRkZXYgKi9cXG4gfVxcbi1cXG4tc3RhdGljIHZvaWQgc2xpcF9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG4te1xcbi1cXHRzbGlwX2Nsb3NlKHR0eSk7XFxuLX1cXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4gICAqXFx0XFx0XFx0U1RBTkRBUkQgU0xJUCBFTkNBUFNVTEFUSU9OXFx0XFx0ICBcXHQgKlxcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5AQCAtMTI3NSw3ICsxMjY4LDYgQEAgc3RhdGljIHN0cnVjdCB0dHlfbGRpc2Nfb3BzIHNsX2xkaXNjID0ge1xcbiBcXHQubmFtZSBcXHRcXHQ9IFxcXCJzbGlwXFxcIixcXG4gXFx0Lm9wZW4gXFx0XFx0PSBzbGlwX29wZW4sXFxuIFxcdC5jbG9zZVxcdCBcXHQ9IHNsaXBfY2xvc2UsXFxuLVxcdC5oYW5ndXBcXHQgXFx0PSBzbGlwX2hhbmd1cCxcXG4gXFx0LmlvY3RsXFx0XFx0PSBzbGlwX2lvY3RsLFxcbiBcXHQucmVjZWl2ZV9idWZcXHQ9IHNsaXBfcmVjZWl2ZV9idWYsXFxuIFxcdC53cml0ZV93YWtldXBcXHQ9IHNsaXBfd3JpdGVfd2FrZXVwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1MTo1NS45MTY5MTg2NjNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDk2NTM0MTM3NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0xJUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNsaXBfY2xvc2VcIixcbiAgICBcInNsaXBfb3BlblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBzbGlwX2hhbmd1cGAgY2FsbGJhY2sgZnJvbSB0aGUgU0xJUCBsaW5lIGRpc2NpcGxpbmUuIFRoaXMgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgdGhlIFNMSVAgZHJpdmVyIG9uIGhhbmd1cCwgYXMgYHNsaXBfY2xvc2VgIGlzIG5vIGxvbmdlciBjYWxsZWQgZGlyZWN0bHkgZnJvbSB0aGUgaGFuZ3VwIHBhdGgsIGJ1dCByYXRoZXIgZGVmZXJyZWQgdW50aWwgdGhlIGxkaXNjIGlzIGNsb3NlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSB0ZWFyZG93biBzZXF1ZW5jZSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBUVFkgaGFuZ3VwIG9wZXJhdGlvbnMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhODU3ZmY3YmFiYzQ2MWNmNzIwMDJiNzRjZDVhOWNkNmE1NjUwMjM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTE6NTE6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbGlwL3NsaXAuYyBiL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jXG5pbmRleCBmYWFlNzExY2Y3OTNkLi5hYzBmYzU5YzhjMjU5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNcbisrKyBiL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jXG5AQCAtODgxLDggKzg4MSw2IEBAIHN0YXRpYyBpbnQgc2xpcF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4gICogQ2xvc2UgZG93biBhIFNMSVAgY2hhbm5lbC5cbiAgKiBUaGlzIG1lYW5zIGZsdXNoaW5nIG91dCBhbnkgcGVuZGluZyBxdWV1ZXMsIGFuZCB0aGVuIHJldHVybmluZy4gVGhpc1xuICAqIGNhbGwgaXMgc2VyaWFsaXplZCBhZ2FpbnN0IG90aGVyIGxkaXNjIGZ1bmN0aW9ucy5cbi0gKlxuLSAqIFdlIGFsc28gdXNlIHRoaXMgbWV0aG9kIGZvIGEgaGFuZ3VwIGV2ZW50XG4gICovXG4gXG4gc3RhdGljIHZvaWQgc2xpcF9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuQEAgLTkxMCwxMSArOTA4LDYgQEAgc3RhdGljIHZvaWQgc2xpcF9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuIFx0dW5yZWdpc3Rlcl9uZXRkZXYoc2wtXHUwMDNlZGV2KTtcbiBcdC8qIFRoaXMgd2lsbCBjb21wbGV0ZSB2aWEgc2xfZnJlZV9uZXRkZXYgKi9cbiB9XG4tXG4tc3RhdGljIHZvaWQgc2xpcF9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcbi17XG4tXHRzbGlwX2Nsb3NlKHR0eSk7XG4tfVxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqXHRcdFx0U1RBTkRBUkQgU0xJUCBFTkNBUFNVTEFUSU9OXHRcdCAgXHQgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQEAgLTEyNzUsNyArMTI2OCw2IEBAIHN0YXRpYyBzdHJ1Y3QgdHR5X2xkaXNjX29wcyBzbF9sZGlzYyA9IHtcbiBcdC5uYW1lIFx0XHQ9IFwic2xpcFwiLFxuIFx0Lm9wZW4gXHRcdD0gc2xpcF9vcGVuLFxuIFx0LmNsb3NlXHQgXHQ9IHNsaXBfY2xvc2UsXG4tXHQuaGFuZ3VwXHQgXHQ9IHNsaXBfaGFuZ3VwLFxuIFx0LmlvY3RsXHRcdD0gc2xpcF9pb2N0bCxcbiBcdC5yZWNlaXZlX2J1Zlx0PSBzbGlwX3JlY2VpdmVfYnVmLFxuIFx0LndyaXRlX3dha2V1cFx0PSBzbGlwX3dyaXRlX3dha2V1cCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjUxOjU1LjkxNjkxOTk3M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzMzk4Mjc5MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29yayBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9zbGlwL3NsaXAuY2AuIEkgc2VlIGl0J3MgcmVtb3ZpbmcgYHNsaXBfaGFuZ3VwYCwgd2hpY2ggd2FzIGVzc2VudGlhbGx5IGp1c3QgYSByZWR1bmRhbnQgY2FsbCB0byBgc2xpcF9jbG9zZWAuIFRoYXQncyBmaW5lOyBjb25zb2xpZGF0aW9uIGlzIHVzdWFsbHkgYSBnb29kIHRoaW5nLiBBbmQsIGl0J3MgYWxzbyByZW1vdmluZyB0aGUgYXNzaWdubWVudCBvZiBgLmhhbmd1cCA9IHNsaXBfaGFuZ3VwYCBmcm9tIGBzbF9sZGlzY2AuXG5cbkhvbGQgb24uLi4gaWYgYHNsX2xkaXNjYCBubyBsb25nZXIgaGFzIGEgYC5oYW5ndXBgIGZ1bmN0aW9uIHBvaW50ZXIsIHdoYXQncyBnb2luZyB0byBoYXBwZW4gd2hlbiBhIGhhbmd1cCBldmVudCBhY3R1YWxseSAqb2NjdXJzKj8gSXQncyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBoZXJlLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHR0eSBsYXllci4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgYGluY2x1ZGUvbGludXgvdHR5X2xkaXNjLmhgIHRvIGNoZWNrIHRoZSBgdHR5X2xkaXNjX29wc2Agc3RydWN0dXJlIGRlZmluaXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGJlaGF2aW9yIGlzIHdoZW4gYSBgLmhhbmd1cGAgZnVuY3Rpb24gaXMgTlVMTC4gRG9lcyB0aGUgdHR5IGxheWVyIGdyYWNlZnVsbHkgaGFuZGxlIHRoZSBzaXR1YXRpb24sIG9yIGRvZXMgaXQgbGVhZCB0byBzb21lIHVuZXhwZWN0ZWQgcmVzdWx0P1xuXG5SaWdodCwgdGhlIHBhdGNoICpyZW1vdmVzKiBgc2xpcF9oYW5ndXBgICphbmQqIHRoZSBhc3NpZ25tZW50LiBTbyB0aGlzIGlzIGEgcG90ZW50aWFsIGZ1bmN0aW9uYWwgY2hhbmdlLCBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byB3YXRjaCBvdXQgZm9yLiBJZiB0aGUgaGFuZ3VwIGZ1bmN0aW9uIGlzIE5VTEwsIHRoZSB0dHkgbGF5ZXIgbWlnaHQgZG8gc29tZXRoaW5nIGRpZmZlcmVudCB0aGFuIGNhbGxpbmcgdGhlIGBzbGlwX2hhbmd1cGAgZnVuY3Rpb24uIE9yLCBtb3JlIGxpa2VseSwgaXQganVzdCBzaW1wbHkgZG9lc24ndCBjYWxsIGEgaGFuZ3VwIGZ1bmN0aW9uIGluIHRoYXQgY2FzZS4gSSdkIGJldHRlciBjb25maXJtIHRoYXQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHR0eV9sZGlzY19oYW5ndXBgIGl0c2VsZiBpbiBgZHJpdmVycy90dHkvdHR5X2xkaXNjLmNgIHRvIHNlZSBob3cgaXQgaGFuZGxlcyBhIE5VTEwgZnVuY3Rpb24gcG9pbnRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwOCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjUyOjA0LjI1Njc1MDA1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTAxMDM2NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHR5X2xkaXNjX2hhbmd1cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3R0eS90dHkuaD04Mz1zcGVlZF90IHR0eV90ZXJtaW9zX2lucHV0X2JhdWRfcmF0ZShjb25zdCBzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MpO1xcbmRyaXZlcnMvdHR5L3R0eS5oOjg0OnZvaWQgdHR5X2xkaXNjX2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBib29sIHJlc2V0KTtcXG5kcml2ZXJzL3R0eS90dHkuaC04NS1pbnQgdHR5X2xkaXNjX3JlaW5pdChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgZGlzYyk7XFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYz01Njg9c3RhdGljIHZvaWQgX190dHlfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBleGl0X3Nlc3Npb24pXFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYy02MjAtXFxuZHJpdmVycy90dHkvdHR5X2lvLmM6NjIxOlxcdHR0eV9sZGlzY19oYW5ndXAodHR5LCBjb25zX2ZpbHAgIT0gTlVMTCk7XFxuZHJpdmVycy90dHkvdHR5X2lvLmMtNjIyLVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM9NjQ3PWludCB0dHlfbGRpc2NfcmVpbml0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBkaXNjKVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjc1LS8qKlxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jOjY3NjogKiB0dHlfbGRpc2NfaGFuZ3VwXFx0LVxcdGhhbmd1cCBsZGlzYyByZXNldFxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTY3Ny0gKiBAdHR5OiB0dHkgYmVpbmcgaHVuZyB1cFxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjg5LSAqL1xcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jOjY5MDp2b2lkIHR0eV9sZGlzY19oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgYm9vbCByZWluaXQpXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjkxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NTI6MDYuNDQ2ODU3Nzg1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4MDg2MDk4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIFRUWSBMaW5lIERpc2NpcGxpbmUgSGFuZ3VwKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IGB0dHlfbGRpc2NfaGFuZ3VwYC4gTGV0J3MgemVybyBpbiBvbiB0aGF0IGZ1bmN0aW9uIGluIGBkcml2ZXJzL3R0eS90dHlfbGRpc2MuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQncyB0aGUgY29udGV4dCBoZXJlP1wiIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gbGluZSBkaXNjaXBsaW5lLCBzbyBJIGtub3cgaXQncyBhIGNyaXRpY2FsIHBhcnQgb2YgaG93IHRoZSB0ZXJtaW5hbCBpbnRlcmFjdHMgd2l0aCBhcHBsaWNhdGlvbnMuIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB3ZSdsbCBiZSBkZWFsaW5nIHdpdGggY29ubmVjdGlvbiB0ZXJtaW5hdGlvbiBhbmQgcmVzb3VyY2UgY2xlYW51cCwgbGlrZWx5IGFmdGVyIGEgZGV2aWNlIGRpc2Nvbm5lY3Qgb3Igc2ltaWxhciBldmVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGhhcHBlbnMgdG8gdGhlIGxpbmUgZGlzY2lwbGluZSBzdGF0ZSB3aGVuIGEgXCJoYW5ndXBcIiBzaWduYWwgaXMgcmVjZWl2ZWQuIFdoYXQgcmVzb3VyY2VzIGFyZSByZWxlYXNlZD8gV2hhdCBzaWduYWxzIGFyZSBzZW50PyBBbmQgbW9zdCBpbXBvcnRhbnRseSwgaG93IGlzIHRoZSBjb3JlIFRUWSBsYXllciBub3RpZmllZCBvZiB0aGlzIHRlcm1pbmF0aW9uPyBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgYSBrZXkgcGxheWVyIGluIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IGFuZCBwcmV2ZW50aW5nIHJlc291cmNlIGxlYWtzIHdoZW4gYSBUVFkgY29ubmVjdGlvbiBpcyBzZXZlcmVkLiBMZXQncyBzZWUgaG93IGl0IG9yY2hlc3RyYXRlcyB0aGUgdHJhbnNpdGlvbiB0byBhIGRpc2Nvbm5lY3RlZCBzdGF0ZSwgYW5kIGhvdyBjbGVhbmx5IGl0IGhhbmRsZXMgdGhlIGNsZWFudXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxODksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1MjoxMC4yMjc3MjA2MjVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3R0eS90dHlfbGRpc2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTA6XFx0dm9pZCB0dHlfbGRpc2NfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGJvb2wgcmVpbml0KVxcbiA2OTE6XFx0e1xcbiA2OTI6XFx0XFx0c3RydWN0IHR0eV9sZGlzYyAqbGQ7XFxuIDY5MzpcXHRcXG4gNjk0OlxcdFxcdHR0eV9sZGlzY19kZWJ1Zyh0dHksIFxcXCIlcDogaGFuZ3VwXFxcXG5cXFwiLCB0dHktXFx1MDAzZWxkaXNjKTtcXG4gNjk1OlxcdFxcbiA2OTY6XFx0XFx0bGQgPSB0dHlfbGRpc2NfcmVmKHR0eSk7XFxuIDY5NzpcXHRcXHRpZiAobGQgIT0gTlVMTCkge1xcbiA2OTg6XFx0XFx0XFx0aWYgKGxkLVxcdTAwM2VvcHMtXFx1MDAzZWZsdXNoX2J1ZmZlcilcXG4gNjk5OlxcdFxcdFxcdFxcdGxkLVxcdTAwM2VvcHMtXFx1MDAzZWZsdXNoX2J1ZmZlcih0dHkpO1xcbiA3MDA6XFx0XFx0XFx0dHR5X2RyaXZlcl9mbHVzaF9idWZmZXIodHR5KTtcXG4gNzAxOlxcdFxcdFxcdGlmICgodGVzdF9iaXQoVFRZX0RPX1dSSVRFX1dBS0VVUCwgXFx1MDAyNnR0eS1cXHUwMDNlZmxhZ3MpKSBcXHUwMDI2XFx1MDAyNlxcbiA3MDI6XFx0XFx0XFx0ICAgIGxkLVxcdTAwM2VvcHMtXFx1MDAzZXdyaXRlX3dha2V1cClcXG4gNzAzOlxcdFxcdFxcdFxcdGxkLVxcdTAwM2VvcHMtXFx1MDAzZXdyaXRlX3dha2V1cCh0dHkpO1xcbiA3MDQ6XFx0XFx0XFx0aWYgKGxkLVxcdTAwM2VvcHMtXFx1MDAzZWhhbmd1cClcXG4gNzA1OlxcdFxcdFxcdFxcdGxkLVxcdTAwM2VvcHMtXFx1MDAzZWhhbmd1cCh0dHkpO1xcbiA3MDY6XFx0XFx0XFx0dHR5X2xkaXNjX2RlcmVmKGxkKTtcXG4gNzA3OlxcdFxcdH1cXG4gNzA4OlxcdFxcbiA3MDk6XFx0XFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGwoXFx1MDAyNnR0eS1cXHUwMDNld3JpdGVfd2FpdCwgRVBPTExPVVQpO1xcbiA3MTA6XFx0XFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGwoXFx1MDAyNnR0eS1cXHUwMDNlcmVhZF93YWl0LCBFUE9MTElOKTtcXG4gNzExOlxcdFxcbiA3MTI6XFx0XFx0LypcXG4gNzEzOlxcdFxcdCAqIFNodXRkb3duIHRoZSBjdXJyZW50IGxpbmUgZGlzY2lwbGluZSwgYW5kIHJlc2V0IGl0IHRvXFxuIDcxNDpcXHRcXHQgKiBOX1RUWSBpZiBuZWVkIGJlLlxcbiA3MTU6XFx0XFx0ICpcXG4gNzE2OlxcdFxcdCAqIEF2b2lkIHJhY2luZyBzZXRfbGRpc2Mgb3IgdHR5X2xkaXNjX3JlbGVhc2VcXG4gNzE3OlxcdFxcdCAqL1xcbiA3MTg6XFx0XFx0dHR5X2xkaXNjX2xvY2sodHR5LCBNQVhfU0NIRURVTEVfVElNRU9VVCk7XFxuIDcxOTpcXHRcXG4gNzIwOlxcdFxcdGlmICh0dHktXFx1MDAzZWRyaXZlci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUVFlfRFJJVkVSX1JFU0VUX1RFUk1JT1MpXFxuIDcyMTpcXHRcXHRcXHR0dHlfcmVzZXRfdGVybWlvcyh0dHkpO1xcbiA3MjI6XFx0XFxuIDcyMzpcXHRcXHRpZiAodHR5LVxcdTAwM2VsZGlzYykge1xcbiA3MjQ6XFx0XFx0XFx0aWYgKHJlaW5pdCkge1xcbiA3MjU6XFx0XFx0XFx0XFx0aWYgKHR0eV9sZGlzY19yZWluaXQodHR5LCB0dHktXFx1MDAzZXRlcm1pb3MuY19saW5lKSBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjZcXG4gNzI2OlxcdFxcdFxcdFxcdCAgICB0dHlfbGRpc2NfcmVpbml0KHR0eSwgTl9UVFkpIFxcdTAwM2MgMClcXG4gNzI3OlxcdFxcdFxcdFxcdFxcdFdBUk5fT04odHR5X2xkaXNjX3JlaW5pdCh0dHksIE5fTlVMTCkgXFx1MDAzYyAwKTtcXG4gNzI4OlxcdFxcdFxcdH0gZWxzZVxcbiA3Mjk6XFx0XFx0XFx0XFx0dHR5X2xkaXNjX2tpbGwodHR5KTtcXG4gNzMwOlxcdFxcdH1cXG4gNzMxOlxcdFxcdHR0eV9sZGlzY191bmxvY2sodHR5KTtcXG4gNzMyOlxcdH1cXG4gNzMzOlxcdFxcbiA3MzQ6XFx0LyoqXFxuIDczNTpcXHQgKiB0dHlfbGRpc2Nfc2V0dXBcXHQtXFx0b3BlbiBsaW5lIGRpc2NpcGxpbmVcXG4gNzM2OlxcdCAqIEB0dHk6IHR0eSBiZWluZyBzaHV0IGRvd25cXG4gNzM3OlxcdCAqIEBvX3R0eTogcGFpciB0dHkgZm9yIHB0eS90dHkgcGFpcnNcXG4gNzM4OlxcdCAqXFxuIDczOTpcXHQgKiBDYWxsZWQgZHVyaW5nIHRoZSBpbml0aWFsIG9wZW4gb2YgYSB0dHkvcHR5IHBhaXIgaW4gb3JkZXIgdG8gc2V0IHVwIHRoZSBsaW5lXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjUyOjEwLjIyNzgxMTQ4NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMzg5NDgzMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMaW5lIERpc2NpcGxpbmUgSGFuZ3VwIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGhhbmd1cCBzZXF1ZW5jZSBmb3IgdGhlIGxpbmUgZGlzY2lwbGluZSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGlmIGBsZC1cdTAwM2VvcHMtXHUwMDNlaGFuZ3VwYCBpcyBOVUxMLCBpdCdzIHNpbXBseSBub3QgY2FsbGVkLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBCdXQgdGhlbiBJIHJlbWVtYmVyIHRoYXQgYHNsaXBfaGFuZ3VwYCAqdXNlZCogdG8gY2FsbCBgc2xpcF9jbG9zZWAsIGFuZCB0aGF0IGBzbGlwX2Nsb3NlYCBpcyByZXNwb25zaWJsZSBmb3IgdW5yZWdpc3RlcmluZyB0aGUgbmV0ZGV2IGFuZCBmcmVlaW5nIGl0LlxuXG5TbywgaWYgd2UgKnJlbW92ZSogdGhlIGNhbGwgdG8gYHNsaXBfaGFuZ3VwYCwgdGhlIGhhbmd1cCByb3V0aW5lIG1pZ2h0ICpub3QqIGNhbGwgYHNsaXBfY2xvc2VgLiBUaGF0J3MgYSBwb3RlbnRpYWwgcHJvYmxlbSEgTGV0IG1lIGNoZWNrIHRoZSBzZXF1ZW5jZSB1c2luZyBgdHR5X2xkaXNjX2hhbmd1cGAsIGFzIEkgcmVjYWxsIGl0LiBBaCwgeWVzLCBpdCBjYWxscyBgbGQtXHUwMDNlb3BzLVx1MDAzZWhhbmd1cGAgaWYgaXQgZXhpc3RzOlxuXG5gYGBjXG5cdGlmIChsZC1cdTAwM2VvcHMtXHUwMDNlaGFuZ3VwKVxuXHRcdGxkLVx1MDAzZW9wcy1cdTAwM2VoYW5ndXAodHR5KTtcbmBgYFxuXG5UaGVuLCBjcnVjaWFsbHksIGl0IHByb2NlZWRzIHRvIGNoZWNrIGFuZCwgcG90ZW50aWFsbHksIHJlaW5pdGlhbGl6ZSB0aGUgbGluZSBkaXNjaXBsaW5lOlxuXG5gYGBjXG5cdGlmICh0dHktXHUwMDNlbGRpc2MpIHtcblx0XHRpZiAocmVpbml0KSB7XG5cdFx0XHRpZiAodHR5X2xkaXNjX3JlaW5pdCh0dHksIHR0eS1cdTAwM2V0ZXJtaW9zLmNfbGluZSkgXHUwMDNjIDAgXHUwMDI2XHUwMDI2XG5cdFx0XHQgICAgdHR5X2xkaXNjX3JlaW5pdCh0dHksIE5fVFRZKSBcdTAwM2MgMClcblx0XHRcdFx0V0FSTl9PTih0dHlfbGRpc2NfcmVpbml0KHR0eSwgTl9OVUxMKSBcdTAwM2MgMCk7XG5cdFx0fSBlbHNlXG5cdFx0XHR0dHlfbGRpc2Nfa2lsbCh0dHkpO1xuXHR9XG5gYGBcblxuT2theSwgbm93IGl0IG1ha2VzIHNlbnNlLiBgdHR5X2xkaXNjX3JlaW5pdGAgYWN0dWFsbHkgY2FsbHMgYHR0eV9sZGlzY19jbG9zZSh0dHksIHR0eS1cdTAwM2VsZGlzYylgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBsZC1cdTAwM2VvcHMtXHUwMDNlY2xvc2UodHR5KWAuIEFoLCBzbyB0aGF0ICpzaG91bGQqIGNsZWFuIHVwLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYSBjdXN0b20gYGhhbmd1cGAgcm91dGluZSBleGlzdHMhXG5cbkJ1dCBsZXQgbWUgdmVyaWZ5IHRoYXQgdGhlIGB0dHlfbGRpc2NfcmVpbml0YCBhbmQgYHR0eV9sZGlzY19jbG9zZWAgcm91dGluZXMgYXJlIGluZGVlZCBiZWhhdmluZyBhcyBJIGV4cGVjdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGFjdHVhbGx5IGZyZWVpbmcgdGhlIHJlc291cmNlcyBwcm9wZXJseS4gTGV0IG1lIGdvIGNoZWNrIHRob3NlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMwMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjUyOjE3LjI2Njc2MTg0M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY0NyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY0NzpcXHRpbnQgdHR5X2xkaXNjX3JlaW5pdChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgZGlzYylcXG4gNjQ4OlxcdHtcXG4gNjQ5OlxcdFxcdHN0cnVjdCB0dHlfbGRpc2MgKmxkO1xcbiA2NTA6XFx0XFx0aW50IHJldHZhbDtcXG4gNjUxOlxcdFxcbiA2NTI6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcXHUwMDI2dHR5LVxcdTAwM2VsZGlzY19zZW0pO1xcbiA2NTM6XFx0XFx0bGQgPSB0dHlfbGRpc2NfZ2V0KHR0eSwgZGlzYyk7XFxuIDY1NDpcXHRcXHRpZiAoSVNfRVJSKGxkKSkge1xcbiA2NTU6XFx0XFx0XFx0QlVHX09OKGRpc2MgPT0gTl9UVFkpO1xcbiA2NTY6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIobGQpO1xcbiA2NTc6XFx0XFx0fVxcbiA2NTg6XFx0XFxuIDY1OTpcXHRcXHRpZiAodHR5LVxcdTAwM2VsZGlzYykge1xcbiA2NjA6XFx0XFx0XFx0dHR5X2xkaXNjX2Nsb3NlKHR0eSwgdHR5LVxcdTAwM2VsZGlzYyk7XFxuIDY2MTpcXHRcXHRcXHR0dHlfbGRpc2NfcHV0KHR0eS1cXHUwMDNlbGRpc2MpO1xcbiA2NjI6XFx0XFx0fVxcbiA2NjM6XFx0XFxuIDY2NDpcXHRcXHQvKiBzd2l0Y2ggdGhlIGxpbmUgZGlzY2lwbGluZSAqL1xcbiA2NjU6XFx0XFx0dHR5LVxcdTAwM2VsZGlzYyA9IGxkO1xcbiA2NjY6XFx0XFx0dHR5X3NldF90ZXJtaW9zX2xkaXNjKHR0eSwgZGlzYyk7XFxuIDY2NzpcXHRcXHRyZXR2YWwgPSB0dHlfbGRpc2Nfb3Blbih0dHksIHR0eS1cXHUwMDNlbGRpc2MpO1xcbiA2Njg6XFx0XFx0aWYgKHJldHZhbCkge1xcbiA2Njk6XFx0XFx0XFx0dHR5X2xkaXNjX3B1dCh0dHktXFx1MDAzZWxkaXNjKTtcXG4gNjcwOlxcdFxcdFxcdHR0eS1cXHUwMDNlbGRpc2MgPSBOVUxMO1xcbiA2NzE6XFx0XFx0fVxcbiA2NzI6XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gNjczOlxcdH1cXG4gNjc0OlxcdFxcbiA2NzU6XFx0LyoqXFxuIDY3NjpcXHQgKiB0dHlfbGRpc2NfaGFuZ3VwXFx0LVxcdGhhbmd1cCBsZGlzYyByZXNldFxcbiA2Nzc6XFx0ICogQHR0eTogdHR5IGJlaW5nIGh1bmcgdXBcXG4gNjc4OlxcdCAqIEByZWluaXQ6IHdoZXRoZXIgdG8gcmUtaW5pdGlhbGlzZSB0aGUgdHR5XFxuIDY3OTpcXHQgKlxcbiA2ODA6XFx0ICogU29tZSB0dHkgZGV2aWNlcyByZXNldCB0aGVpciB0ZXJtaW9zIHdoZW4gdGhleSByZWNlaXZlIGEgaGFuZ3VwIGV2ZW50LiBJblxcbiA2ODE6XFx0ICogdGhhdCBzaXR1YXRpb24gd2UgbXVzdCBhbHNvIHN3aXRjaCBiYWNrIHRvICVOX1RUWSBwcm9wZXJseSBiZWZvcmUgd2UgcmVzZXRcXG4gNjgyOlxcdCAqIHRoZSB0ZXJtaW9zIGRhdGEuXFxuIDY4MzpcXHQgKlxcbiA2ODQ6XFx0ICogTG9ja2luZzogV2UgY2FuIHRha2UgdGhlIGxkaXNjIG11dGV4IGFzIHRoZSByZXN0IG9mIHRoZSBjb2RlIGlzIGNhcmVmdWwgdG9cXG4gNjg1OlxcdCAqIGFsbG93IGZvciB0aGlzLlxcbiA2ODY6XFx0ICpcXG4gNjg3OlxcdCAqIEluIHRoZSBwdHkgcGFpciBjYXNlIHRoaXMgb2NjdXJzIGluIHRoZSBjbG9zZSgpIHBhdGggb2YgdGhlIHR0eSBpdHNlbGYgc28gd2VcXG4gNjg4OlxcdCAqIG11c3QgYmUgY2FyZWZ1bCBhYm91dCBsb2NraW5nIHJ1bGVzLlxcbiA2ODk6XFx0ICovXFxuIDY5MDpcXHR2b2lkIHR0eV9sZGlzY19oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgYm9vbCByZWluaXQpXFxuIDY5MTpcXHR7XFxuIDY5MjpcXHRcXHRzdHJ1Y3QgdHR5X2xkaXNjICpsZDtcXG4gNjkzOlxcdFxcbiA2OTQ6XFx0XFx0dHR5X2xkaXNjX2RlYnVnKHR0eSwgXFxcIiVwOiBoYW5ndXBcXFxcblxcXCIsIHR0eS1cXHUwMDNlbGRpc2MpO1xcbiA2OTU6XFx0XFxuIDY5NjpcXHRcXHRsZCA9IHR0eV9sZGlzY19yZWYodHR5KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NTI6MTcuMjY2ODYyOTMzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5MjE0OTI4NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2Vhc29uZWQgc3lzdGVtcyBlbmdpbmVlcjpcblxuKipEZWNvbnN0cnVjdGluZyBMaW5lIERpc2NpcGxpbmUgUmUtSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgYHR0eV9sZGlzY19yZWluaXRgIGZ1bmN0aW9uLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJk4oCUaXRzIGpvYiBpcyB0byBlc3NlbnRpYWxseSByZWZyZXNoIG9yIHJlc2V0IHRoZSBsaW5lIGRpc2NpcGxpbmUgYXNzb2NpYXRlZCB3aXRoIGEgdGVybWluYWwuIFRoZSBjb3JlIG9mIHRoaXMgcHJvY2VzcyBzZWVtcyB0byBiZSBhIGNhbGwgdG8gYHR0eV9sZGlzY19jbG9zZWAsIGFuZCB0aGUga2V5IGhlcmUgaXMgdGhlIGFyZ3VtZW50czogdGhlIGB0dHlgIHN0cnVjdHVyZSBpdHNlbGYsIHdoaWNoIHJlcHJlc2VudHMgdGhlIHRlcm1pbmFsIGRldmljZSwgYW5kLCBjcnVjaWFsbHksIGB0dHktXHUwMDNlbGRpc2NgLCB3aGljaCBnaXZlcyBhIGhhbmRsZSB0byB0aGUgY3VycmVudGx5IGFjdGl2ZSBsaW5lIGRpc2NpcGxpbmUuIFRoYXQgc2VlbXMgbG9naWNhbCDigJMgdG8gcmUtaW5pdGlhbGl6ZSwgeW91IGZpcnN0IGhhdmUgdG8gc2h1dCBkb3duIHRoZSBvbGQgb25lLlxuXG5Ob3csIHRoaXMgcGlxdWVzIG15IGludGVyZXN0LiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGNhbGwgdG8gYHR0eV9sZGlzY19jbG9zZWAuIFdoYXQncyB0aGUgc3BlY2lmaWMgYmVoYXZpb3IgdGhlcmU/IFdoYXQgcmVzb3VyY2VzIGRvZXMgaXQgcmVsZWFzZT8gQXJlIHRoZXJlIHN1YnRsZSBsb2NraW5nIGNvbnNpZGVyYXRpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIG9yIHBlcmhhcHMgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgZXhpc3QgYmV0d2VlbiBgdHR5X2xkaXNjX3JlaW5pdGAgYW5kIG90aGVyIGtlcm5lbCBvcGVyYXRpb25zPyBBbmQsIGluIHRoYXQgY29udGV4dCwgd2hhdCBhYm91dCB0aGF0IGB0dHlfbGRpc2Nfa2lsbGA/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCBgdHR5X2xkaXNjX2Nsb3NlYD8gQXJlIHRoZXkgYW5hbG9nb3VzIGZ1bmN0aW9ucywgb3IgYXJlIHRoZXkgbWVhbnQgZm9yIGRpc3RpbmN0IG9wZXJhdGlvbnM/IElzIGB0dHlfbGRpc2Nfa2lsbGAgbWVhbnQgdG8gdmlvbGVudGx5IGVqZWN0IGEgbGluZSBkaXNjaXBsaW5lLCB3aGVyZSBgdHR5X2xkaXNjX2Nsb3NlYCBpcyBtb3JlIGdyYWNlZnVsP1xuXG5cbiIsIklucHV0VG9rZW5zIjo1ODc1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1Mjo0Ni4xODgzNTc4MzNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTAyNDM3NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHR5X2xkaXNjX2tpbGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy90dHkvdHR5X2xkaXNjLmM9NTk3PUVYUE9SVF9TWU1CT0xfR1BMKHR0eV9zZXRfbGRpc2MpO1xcbi0tXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNTk5LS8qKlxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jOjYwMDogKiB0dHlfbGRpc2Nfa2lsbFxcdC1cXHR0ZWFyZG93biBsZGlzY1xcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTYwMS0gKiBAdHR5OiB0dHkgYmVpbmcgcmVsZWFzZWRcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTYwNC0gKi9cXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYzo2MDU6c3RhdGljIHZvaWQgdHR5X2xkaXNjX2tpbGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy02MDYte1xcbi0tXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM9NjkwPXZvaWQgdHR5X2xkaXNjX2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBib29sIHJlaW5pdClcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTcyOC1cXHRcXHR9IGVsc2VcXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYzo3Mjk6XFx0XFx0XFx0dHR5X2xkaXNjX2tpbGwodHR5KTtcXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy03MzAtXFx0fVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM9NzcxPXZvaWQgdHR5X2xkaXNjX3JlbGVhc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTc4MC1cXHR0dHlfbGRpc2NfbG9ja19wYWlyKHR0eSwgb190dHkpO1xcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jOjc4MTpcXHR0dHlfbGRpc2Nfa2lsbCh0dHkpO1xcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTc4Mi1cXHRpZiAob190dHkpXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM6NzgzOlxcdFxcdHR0eV9sZGlzY19raWxsKG9fdHR5KTtcXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy03ODQtXFx0dHR5X2xkaXNjX3VubG9ja19wYWlyKHR0eSwgb190dHkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1Mjo0OC4xNzg2MDU4NTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE0NDMxMzY3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGB0dHlfbGRpc2Nfa2lsbGAqKlxuXG5Pa2F5LCBzbyB0aGUgcHJvbXB0IG1lbnRpb25zIGB0dHlfbGRpc2Nfa2lsbGAuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgbGluZSBkaXNjaXBsaW5lcyB3aXRoaW4gdGhlIGtlcm5lbCdzIFRUWSBzdWJzeXN0ZW0uIEknbSBhc3N1bWluZyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGZ1bmN0aW9uIHRoYXQncyByZXNwb25zaWJsZSBmb3IsIHdlbGwsIGtpbGxpbmcgYSBsaW5lIGRpc2NpcGxpbmUsIGxpa2VseSBhcyBwYXJ0IG9mIGl0cyBkZS1pbml0aWFsaXphdGlvbiBvciB3aGVuIHRoZSBhc3NvY2lhdGVkIFRUWSBkZXZpY2UgaXMgYmVpbmcgY2xvc2VkIG9yIHJlY29uZmlndXJlZC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgYXJvdW5kIG1lbW9yeSBtYW5hZ2VtZW50IOKAkyB3aGF0IGtpbmQgb2YgY2xlYW51cCBkb2VzIHRoaXMgZnVuY3Rpb24gcGVyZm9ybT8gRG9lcyBpdCBmcmVlIGFueSBhbGxvY2F0ZWQgYnVmZmVycywgcmVsZWFzZSBsb2Nrcywgb3IgZGVyZWdpc3RlciBhbnkgY2FsbGJhY2tzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGxpbmUgZGlzY2lwbGluZT8gSSdtIHBpY3R1cmluZyBzY2VuYXJpb3Mgd2hlcmUgYSByb2d1ZSBsaW5lIGRpc2NpcGxpbmUgY291bGQgbGVhayByZXNvdXJjZXMgaWYgdGhpcyBmdW5jdGlvbiBpc24ndCBpbXBsZW1lbnRlZCBjb3JyZWN0bHksIGxlYWRpbmcgdG8ga2VybmVsIGluc3RhYmlsaXR5IG9yIGV2ZW4gY3Jhc2hlcy4gSSBhbHNvIHdhbnQgdG8gY29uc2lkZXIgcG9zc2libGUgcmFjZSBjb25kaXRpb25zIHdpdGggb3RoZXIga2VybmVsIHRocmVhZHMgdGhhdCBtaWdodCBzdGlsbCBiZSB1c2luZyB0aGUgbGluZSBkaXNjaXBsaW5lIG9yIHJlZmVyZW5jaW5nIGl0cyBkYXRhIHN0cnVjdHVyZXMuXG5cblRoZW4gSSBnZXQgdGhpbmtpbmcgYWJvdXQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIFRUWSBkcml2ZXIuIERvZXMgYHR0eV9sZGlzY19raWxsYCBzaWduYWwgdGhlIGRyaXZlciBpbiBhbnkgd2F5PyBEb2VzIGl0IG5lZWQgdG8gY29vcmRpbmF0ZSB3aXRoIHRoZSBkcml2ZXIgdG8gZW5zdXJlIGEgY2xlYW4gdGVhcmRvd24/IEknbSBtZW50YWxseSBjaGVja2luZyB0aGUgdHlwaWNhbCBzdHJ1Y3R1cmUgb2YgdGhlIFRUWSBkcml2ZXIgYW5kIGxpbmUgZGlzY2lwbGluZSBpbnRlcmFjdGlvbiwgYW5kIHRoZSBsaWtlbHkgcGxhY2VzIHdoZXJlIHRoaXMgaW50ZXJhY3Rpb24gd291bGQgYmUgbmVjZXNzYXJ5LiBJcyB0aGVyZSBhIGNoYWluIG9mIGZ1bmN0aW9uIGNhbGxzPyBXaGF0IGxvY2tzIGFyZSBpbnZvbHZlZD8gV2hhdCdzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlLCBhbmQgd2hhdCBoYXBwZW5zIGluIHRoZSBjYXNlIG9mIGEgZmFpbGVkIGNsZWFuLXVwP1xuXG5GdXJ0aGVybW9yZSwgSSBoYXZlIHRvIHRoaW5rIGFib3V0IGhvdyBsaW5lIGRpc2NpcGxpbmVzIGFyZSBpbnN0YWxsZWQgYW5kIHJlbW92ZWQgaW4gZ2VuZXJhbC4gSXMgdGhlcmUgYSBjbGVhciBvcmRlcmluZyBvZiBvcGVyYXRpb25zPyBEb2VzIGB0dHlfbGRpc2Nfa2lsbGAgYWNjb3VudCBmb3IgZGlmZmVyZW50IHNpdHVhdGlvbnMgb2YgYSBsaW5lIGRpc2NpcGxpbmU/IEkgd2lsbCBjb25zaWRlciBkaWZmZXJlbnQgbGluZSBkaXNjaXBsaW5lcyB3aXRoIGRpZmZlcmVudCBjYXBhYmlsaXRpZXMuXG5cbkZpbmFsbHksIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24uIEknZCB3YW50IHRvIGNoZWNrIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHByb3RlY3RlZCwgYW5kIHdoZXRoZXIgaXQncyBzYWZlIHRvIGNhbGwgZnJvbSBtdWx0aXBsZSBjb250ZXh0cy4gRG9lcyBpdCB1c2Ugc3BpbmxvY2tzLCBtdXRleGVzLCBvciBSQ1U/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGRlYWRsb2Nrcz8gSXQncyBlc3NlbnRpYWwgdG8gZW5zdXJlIHRoYXQgYW55IGNsZWFudXAgaXMgYXRvbWljIGFuZCBkb2Vzbid0IGxlYXZlIHRoZSBzeXN0ZW0gaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGB0dHlfc3RydWN0YCwgdGhlIGBsZGlzY2Agc3RydWN0dXJlIGl0c2VsZiwgYW5kIHRoZSBkcml2ZXIncyBwcml2YXRlIGRhdGEuIFNvLCBteSBtaW5kIGlzIGFscmVhZHkgcnVubmluZyB0aHJvdWdoIGRpZmZlcmVudCBjb2RlIHBhdGhzIGFuZCBwb3NzaWJsZSBmYWlsdXJlIHNjZW5hcmlvcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcxMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjUyOjUzLjMyMjkyMjA0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwNTpcXHRzdGF0aWMgdm9pZCB0dHlfbGRpc2Nfa2lsbChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxcbiA2MDY6XFx0e1xcbiA2MDc6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcXHUwMDI2dHR5LVxcdTAwM2VsZGlzY19zZW0pO1xcbiA2MDg6XFx0XFx0aWYgKCF0dHktXFx1MDAzZWxkaXNjKVxcbiA2MDk6XFx0XFx0XFx0cmV0dXJuO1xcbiA2MTA6XFx0XFx0LypcXG4gNjExOlxcdFxcdCAqIE5vdyBraWxsIG9mZiB0aGUgbGRpc2NcXG4gNjEyOlxcdFxcdCAqL1xcbiA2MTM6XFx0XFx0dHR5X2xkaXNjX2Nsb3NlKHR0eSwgdHR5LVxcdTAwM2VsZGlzYyk7XFxuIDYxNDpcXHRcXHR0dHlfbGRpc2NfcHV0KHR0eS1cXHUwMDNlbGRpc2MpO1xcbiA2MTU6XFx0XFx0LyogRm9yY2UgYW4gb29wcyBpZiB3ZSBtZXNzIHRoaXMgdXAgKi9cXG4gNjE2OlxcdFxcdHR0eS1cXHUwMDNlbGRpc2MgPSBOVUxMO1xcbiA2MTc6XFx0fVxcbiA2MTg6XFx0XFxuIDYxOTpcXHQvKipcXG4gNjIwOlxcdCAqIHR0eV9yZXNldF90ZXJtaW9zXFx0LVxcdHJlc2V0IHRlcm1pbmFsIHN0YXRlXFxuIDYyMTpcXHQgKiBAdHR5OiB0dHkgdG8gcmVzZXRcXG4gNjIyOlxcdCAqXFxuIDYyMzpcXHQgKiBSZXN0b3JlIGEgdGVybWluYWwgdG8gdGhlIGRyaXZlciBkZWZhdWx0IHN0YXRlLlxcbiA2MjQ6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjUyOjUzLjMyMjk5NzQxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NTA5NjkzMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRG91YmxlLUNoZWNraW5nIHRoZSBMaW5lIERpc2NpcGxpbmUgQ2xlYW51cCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY2xlYW51cCBzZXF1ZW5jZSBmb3IgdGhlIFRUWSBsaW5lIGRpc2NpcGxpbmUsIGFuZCBzb21ldGhpbmcncyBidWdnaW5nIG1lLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBob3cgYHR0eV9sZGlzY19raWxsYCBpcyBjYWxsaW5nIGB0dHlfbGRpc2NfY2xvc2VgLiBOb3csIHJlbWVtYmVyIHRoYXQgYHNsaXBfaGFuZ3VwYCB3YXMgYWxyZWFkeSwgaW5kZXBlbmRlbnRseSwgY2FsbGluZyBgc2xpcF9jbG9zZWAuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSdzIGFuIHVubmVjZXNzYXJ5IGRvdWJsZSBjYWxsLlxuXG5IZXJlJ3MgdGhlIGNoYWluOiBgc2xpcF9oYW5ndXBgIGNhbGxzIGBzbGlwX2Nsb3NlYC4gVGhlbiwgYHR0eV9sZGlzY19oYW5ndXBgIGNhbGxzIGVpdGhlciBgdHR5X2xkaXNjX3JlaW5pdGAgb3IgYHR0eV9sZGlzY19raWxsYC4gQm90aCBvZiB0aG9zZSBjYWxsIGB0dHlfbGRpc2NfY2xvc2VgLCBhbmQgKnRoYXQqIGNhbGxzIGBzbGlwX2Nsb3NlYC4gU28sIGlmIHRoYXQncyB0aGUgY2FzZSwgYHNsaXBfY2xvc2VgIHdvdWxkIGJlIGV4ZWN1dGVkIHR3aWNlIGZvciB3aGF0IHNob3VsZCBiZSBhIHNpbmdsZSBhY3Rpb24uIFRoYXQgY2FuJ3QgYmUgcmlnaHQuIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIFRpbWUgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGB0dHlfbGRpc2NfY2xvc2VgIGFuZCB2ZXJpZnkgd2hldGhlciBteSBzdXNwaWNpb24gaXMgYWNjdXJhdGUsIG9yIHdoZXRoZXIgdGhlcmUncyBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIEknbSBtaXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTUzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NTI6NTguMDczOTcwMDE2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2MDpcXHQgKiB0dHlfbGRpc2NfZmFpbHRvXFx0LVxcdGhlbHBlciBmb3IgbGRpc2MgZmFpbGJhY2tcXG4gNDYxOlxcdCAqIEB0dHk6IHR0eSB0byBvcGVuIHRoZSBsZGlzYyBvblxcbiA0NjI6XFx0ICogQGxkOiBsZGlzYyB3ZSBhcmUgdHJ5aW5nIHRvIGZhaWwgYmFjayB0b1xcbiA0NjM6XFx0ICpcXG4gNDY0OlxcdCAqIEhlbHBlciB0byB0cnkgYW5kIHJlY292ZXIgYSB0dHkgd2hlbiBzd2l0Y2hpbmcgYmFjayB0byB0aGUgb2xkIGxkaXNjIGZhaWxzXFxuIDQ2NTpcXHQgKiBhbmQgd2UgbmVlZCBzb21ldGhpbmcgYXR0YWNoZWQuXFxuIDQ2NjpcXHQgKi9cXG4gNDY3OlxcdHN0YXRpYyBpbnQgdHR5X2xkaXNjX2ZhaWx0byhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgbGQpXFxuIDQ2ODpcXHR7XFxuIDQ2OTpcXHRcXHRzdHJ1Y3QgdHR5X2xkaXNjICpkaXNjID0gdHR5X2xkaXNjX2dldCh0dHksIGxkKTtcXG4gNDcwOlxcdFxcdGludCByO1xcbiA0NzE6XFx0XFxuIDQ3MjpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFxcdTAwMjZ0dHktXFx1MDAzZWxkaXNjX3NlbSk7XFxuIDQ3MzpcXHRcXHRpZiAoSVNfRVJSKGRpc2MpKVxcbiA0NzQ6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoZGlzYyk7XFxuIDQ3NTpcXHRcXHR0dHktXFx1MDAzZWxkaXNjID0gZGlzYztcXG4gNDc2OlxcdFxcdHR0eV9zZXRfdGVybWlvc19sZGlzYyh0dHksIGxkKTtcXG4gNDc3OlxcdFxcdHIgPSB0dHlfbGRpc2Nfb3Blbih0dHksIGRpc2MpO1xcbiA0Nzg6XFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcbiA0Nzk6XFx0XFx0XFx0dHR5X2xkaXNjX3B1dChkaXNjKTtcXG4gNDgwOlxcdFxcdHJldHVybiByO1xcbiA0ODE6XFx0fVxcbiA0ODI6XFx0XFxuIDQ4MzpcXHQvKipcXG4gNDg0OlxcdCAqIHR0eV9sZGlzY19yZXN0b3JlXFx0LVxcdGhlbHBlciBmb3IgdHR5IGxkaXNjIGNoYW5nZVxcbiA0ODU6XFx0ICogQHR0eTogdHR5IHRvIHJlY292ZXJcXG4gNDg2OlxcdCAqIEBvbGQ6IHByZXZpb3VzIGxkaXNjXFxuIDQ4NzpcXHQgKlxcbiA0ODg6XFx0ICogUmVzdG9yZSB0aGUgcHJldmlvdXMgbGluZSBkaXNjaXBsaW5lIG9yICVOX1RUWSB3aGVuIGEgbGluZSBkaXNjaXBsaW5lIGNoYW5nZVxcbiA0ODk6XFx0ICogZmFpbHMgZHVlIHRvIGFuIG9wZW4gZXJyb3JcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NTI6NTguMDc0MDUxMjE2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MzQ4OTk0OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSHVudGluZyBEb3duIGB0dHlfbGRpc2NfY2xvc2VgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGltcGxlbWVudGF0aW9uIG9mIGB0dHlfbGRpc2NfY2xvc2VgLiBJdCdzIGEgc3RhbmRhcmQgZnVuY3Rpb24sIHNvIEknbSBub3QgZXhwZWN0aW5nIGFueXRoaW5nIHRvbyBlc290ZXJpYywgYnV0IEkgc3RpbGwgd2FudCB0byBiZSBwcmVjaXNlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGp1c3Qgc2VhcmNoIHRoZSBzb3VyY2UgY29kZSBkaXJlY3RseSwgbGlrZWx5IHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3IgYSBzaW1pbGFyIHRvb2wgdG8gcGlucG9pbnQgaXRzIGRlZmluaXRpb24uIEtub3dpbmcgdGhlIGxpa2VseSBjb250ZXh0LCBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgaXQgaW4gdGhlIGNvcmUgdHR5IGRyaXZlciBjb2RlLCBwZXJoYXBzIHVuZGVyIHRoZSBgZHJpdmVycy90dHkvYCBkaXJlY3RvcnksIG9yIG1heWJlIHdpdGhpbiBzb21lIGdlbmVyaWMgbGluZSBkaXNjaXBsaW5lIChsZGlzYykgaW5mcmFzdHJ1Y3R1cmUgZmlsZXMuXG5cbknigJlsbCBhbHNvIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBkZWZpbml0aW9uIG1pZ2h0IGJlIG1hY3JvLWRlZmluZWQsIG9yIHBhcnQgb2YgYSBzdHJ1Y3R1cmUsIHJhdGhlciB0aGFuIGEgc2luZ2xlIGZ1bmN0aW9uIGRlZmluaXRpb24sIHNvIEknbGwgbmVlZCB0byBsb29rIG91dCBmb3IgdGhvc2UgcG9zc2liaWxpdGllcyBhcyB3ZWxsLiBJZiB0aGUgaW1tZWRpYXRlIHNlYXJjaCBpcyB1bmZydWl0ZnVsLCBJJ2xsIGV4cGFuZCB0aGUgc2VhcmNoLCBsb29raW5nIGF0IGhlYWRlciBmaWxlcyBhbmQgaW5jbHVkZSBkaXJlY3RvcmllcyB0byB0cnkgYW5kIGlkZW50aWZ5IGZ1bmN0aW9uIHByb3RvdHlwZXMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHRoZSBmdW5jdGlvbiBpcyByZWZlcmVuY2VkLCBkZWZpbmVkLCBvciB1c2VkLlxuXG5JJ2xsIGJlIG1pbmRmdWwgb2YgcG90ZW50aWFsIGNvbXBsZXhpdGllcywgc3VjaCBhcyB3aGV0aGVyIGB0dHlfbGRpc2NfY2xvc2VgIGlzIGltcGxlbWVudGVkIGFzIGEgZGlyZWN0IGNhbGwsIG9yIGluZGlyZWN0bHksIHRocm91Z2ggZnVuY3Rpb24gcG9pbnRlcnMgaW4gYSBgdHR5X2xkaXNjX29wc2Agc3RydWN0dXJlLiBJbiB0aGF0IGNhc2UsIEknbGwgbmVlZCB0byBmaW5kIHdoZXJlIHRob3NlIG9wZXJhdGlvbnMgYXJlIHJlZ2lzdGVyZWQuIEnigJlsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSBzcGVjaWZpYyBsaW5lIGRpc2NpcGxpbmUgaW1wbGVtZW50YXRpb25zIHRoYXQgb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiB3aXRoIHRoZWlyIG93biBiZWhhdmlvci4gSSBhbnRpY2lwYXRlIG5lZWRpbmcgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR0eSBkcml2ZXIgY29yZSwgdGhlIGxpbmUgZGlzY2lwbGluZSwgYW5kIHRoZSBkZXZpY2UgZHJpdmVycyB0byBmdWxseSBncmFzcCBpdHMgZnVuY3Rpb25hbGl0eSBhbmQgaXRzIGltcGFjdC4gVWx0aW1hdGVseSwgSSdtIGFpbWluZyBmb3IgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBgdHR5X2xkaXNjX2Nsb3NlYCBkb2VzLCBob3cgaXQncyBjYWxsZWQsIGFuZCB3aGF0IHRoZSBpbXBvcnRhbnQgc2lkZS1lZmZlY3RzIGFyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQyNywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NTM6MDMuMDA4OTUyNTc5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTIzOTM4NDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR0eV9sZGlzY19jbG9zZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3R0eS90dHlfbGRpc2MuYz00MjY9c3RhdGljIGludCB0dHlfbGRpc2Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdHR5X2xkaXNjICpsZClcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTQ0Mi0vKipcXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYzo0NDM6ICogdHR5X2xkaXNjX2Nsb3NlXFx0XFx0LVxcdGNsb3NlIGEgbGluZSBkaXNjaXBsaW5lXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNDQ0LSAqIEB0dHk6IHR0eSB3ZSBhcmUgb3BlbmluZyB0aGUgbGRpc2Mgb25cXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTQ0OC0gKi9cXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYzo0NDk6c3RhdGljIHZvaWQgdHR5X2xkaXNjX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0dHlfbGRpc2MgKmxkKVxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTQ1MC17XFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYz01MTk9aW50IHR0eV9zZXRfbGRpc2Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGRpc2MpXFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy01NTYtXFx0LyogU2h1dGRvd24gdGhlIG9sZCBkaXNjaXBsaW5lLiAqL1xcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jOjU1NzpcXHR0dHlfbGRpc2NfY2xvc2UodHR5LCBvbGRfbGRpc2MpO1xcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTU1OC1cXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jPTYwNT1zdGF0aWMgdm9pZCB0dHlfbGRpc2Nfa2lsbChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjEyLVxcdCAqL1xcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jOjYxMzpcXHR0dHlfbGRpc2NfY2xvc2UodHR5LCB0dHktXFx1MDAzZWxkaXNjKTtcXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy02MTQtXFx0dHR5X2xkaXNjX3B1dCh0dHktXFx1MDAzZWxkaXNjKTtcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jPTY0Nz1pbnQgdHR5X2xkaXNjX3JlaW5pdChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgZGlzYylcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTY1OS1cXHRpZiAodHR5LVxcdTAwM2VsZGlzYykge1xcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jOjY2MDpcXHRcXHR0dHlfbGRpc2NfY2xvc2UodHR5LCB0dHktXFx1MDAzZWxkaXNjKTtcXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy02NjEtXFx0XFx0dHR5X2xkaXNjX3B1dCh0dHktXFx1MDAzZWxkaXNjKTtcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jPTc0Mz1pbnQgdHR5X2xkaXNjX3NldHVwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0dHlfc3RydWN0ICpvX3R0eSlcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTc1Ni1cXHRcXHRpZiAocmV0dmFsKSB7XFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM6NzU3OlxcdFxcdFxcdHR0eV9sZGlzY19jbG9zZSh0dHksIHR0eS1cXHUwMDNlbGRpc2MpO1xcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTc1OC1cXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1MzowNC41MzI4OTU3MjVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEzNzAzNTUzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsIGluIHRoZSBmaWVsZCwgc3BlYWtpbmcgZGlyZWN0bHkgdG8gYW5vdGhlciBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gYHR0eV9sZGlzY19jbG9zZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBjcmFjayBvcGVuIGB0dHlfbGRpc2NfY2xvc2VgLiBJbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIFRoaXMgaXMgdGhlIGNsZWFudXAgZnVuY3Rpb24gZm9yIGEgbGluZSBkaXNjaXBsaW5lLCBhbmQgd2UncmUgdGFsa2luZyBhYm91dCBjbG9zaW5nIGl0LiBTbywgSSBrbm93IHRoaXMgaXMgd2hlcmUgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBwYXJ0aWN1bGFyIGxpbmUgZGlzY2lwbGluZSBpbnN0YW5jZSBhcmUgZ29pbmcgdG8gYmUgcmVsZWFzZWQuIFRoaXMgbWVhbnMgYnVmZmVycywgdGltZXJzLCBhbnkgY3VzdG9tIHN0YXRlIHRoZSBkaXNjaXBsaW5lIG1haW50YWlucyDigJMgYWxsIG9mIGl0IG5lZWRzIHRvIGJlIGhhbmRsZWQgaGVyZS5cblxuRmlyc3QsIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gQ2xvc2luZyBhIGxpbmUgZGlzY2lwbGluZSBjYW4gaGFwcGVuIGF0IGFueSB0aW1lLCBwb3NzaWJseSB3aGlsZSBkYXRhIGlzIHN0aWxsIGJlaW5nIHByb2Nlc3NlZCBvciB0cmFuc21pdHRlZC4gU3luY2hyb25pemF0aW9uIGlzIGtleS4gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBubyBvdGhlciB0aHJlYWQgaXMgc3RpbGwgYWNjZXNzaW5nIHRoZSBsaW5lIGRpc2NpcGxpbmUncyBzdHJ1Y3R1cmVzIG9yIGJ1ZmZlcnMgZHVyaW5nIHRoZSBjbGVhbnVwLiBTcGlubG9ja3MsIG11dGV4ZXMuLi4gSSdsbCBiZSBzZWFyY2hpbmcgZm9yIGhvdyB0aGV5IGFyZSBpbXBsZW1lbnRlZCBoZXJlLCBhbmQgbWFraW5nIHN1cmUgdGhhdCB0aGUgbG9ja3MgYXJlIGhlbGQgd2hlcmUgYXBwcm9wcmlhdGUuIEknbSBhbHNvIHdhdGNoaW5nIG91dCBmb3IgaXNzdWVzIGxpa2UgZG91YmxlIGZyZWVzIG9yIG1lbW9yeSBsZWFrcy4gV2Ugd2FudCB0byBiZSBjZXJ0YWluIHRoYXQgZXZlcnkgYWxsb2NhdGVkIHJlc291cmNlIGlzIGZyZWVkIGNvcnJlY3RseSB3aGVuIHRoZSBsaW5lIGRpc2NpcGxpbmUgaXMgY2xvc2VkLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVFRZIGxheWVyIGl0c2VsZi4gSXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgZGlyZWN0bHkgYnkgdGhlIFRUWSBjb3JlLCBvciBhcmUgdGhlcmUgY2FsbGJhY2tzIGludm9sdmVkPyBIb3cgaXMgdGhlIGxpbmUgZGlzY2lwbGluZSdzIHN0YXRlIHVwZGF0ZWQgaW4gcmVsYXRpb24gdG8gdGhlIFRUWSdzIHN0YXRlPyBBcmUgdGhlcmUgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBUVFkgc3RydWN0dXJlcyB0aGF0IG5lZWQgdG8gYmUgY2xlYXJlZCBvciByZXNldD9cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIGEgcmVzb3VyY2UgY2FuJ3QgYmUgZnJlZWQ/IERvZXMgaXQgcmV0dXJuIGFuIGVycm9yIGNvZGU/IExvZyBhIHdhcm5pbmc/IEhvdyBpcyB0aGF0IGVycm9yIHByb3BhZ2F0ZWQgdXAgdGhlIHN0YWNrLCBhbmQgaG93IGRvZXMgdGhlIFRUWSBzeXN0ZW0gcmVzcG9uZCB0byBpdD9cblxuRmluYWxseSwgbGV0J3Mgc2VlIGhvdyB0aGUgbGluZSBkaXNjaXBsaW5lIGlzIHJlbW92ZWQgZnJvbSB0aGUgVFRZIGFuZCBkZWFsbG9jYXRlZC4gQXJlIHRoZXJlIGFueSBjdXN0b20gYWN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZSB0dHkgaXRzZWxmP1xuXG5cbiIsIklucHV0VG9rZW5zIjo5NTQ0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NTM6MDkuNjY5OTMzMzczWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0OSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ0OTpcXHRzdGF0aWMgdm9pZCB0dHlfbGRpc2NfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHR0eV9sZGlzYyAqbGQpXFxuIDQ1MDpcXHR7XFxuIDQ1MTpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFxcdTAwMjZ0dHktXFx1MDAzZWxkaXNjX3NlbSk7XFxuIDQ1MjpcXHRcXHRXQVJOX09OKCF0ZXN0X2JpdChUVFlfTERJU0NfT1BFTiwgXFx1MDAyNnR0eS1cXHUwMDNlZmxhZ3MpKTtcXG4gNDUzOlxcdFxcdGNsZWFyX2JpdChUVFlfTERJU0NfT1BFTiwgXFx1MDAyNnR0eS1cXHUwMDNlZmxhZ3MpO1xcbiA0NTQ6XFx0XFx0aWYgKGxkLVxcdTAwM2VvcHMtXFx1MDAzZWNsb3NlKVxcbiA0NTU6XFx0XFx0XFx0bGQtXFx1MDAzZW9wcy1cXHUwMDNlY2xvc2UodHR5KTtcXG4gNDU2OlxcdFxcdHR0eV9sZGlzY19kZWJ1Zyh0dHksIFxcXCIlcDogY2xvc2VkXFxcXG5cXFwiLCBsZCk7XFxuIDQ1NzpcXHR9XFxuIDQ1ODpcXHRcXG4gNDU5OlxcdC8qKlxcbiA0NjA6XFx0ICogdHR5X2xkaXNjX2ZhaWx0b1xcdC1cXHRoZWxwZXIgZm9yIGxkaXNjIGZhaWxiYWNrXFxuIDQ2MTpcXHQgKiBAdHR5OiB0dHkgdG8gb3BlbiB0aGUgbGRpc2Mgb25cXG4gNDYyOlxcdCAqIEBsZDogbGRpc2Mgd2UgYXJlIHRyeWluZyB0byBmYWlsIGJhY2sgdG9cXG4gNDYzOlxcdCAqXFxuIDQ2NDpcXHQgKiBIZWxwZXIgdG8gdHJ5IGFuZCByZWNvdmVyIGEgdHR5IHdoZW4gc3dpdGNoaW5nIGJhY2sgdG8gdGhlIG9sZCBsZGlzYyBmYWlsc1xcbiA0NjU6XFx0ICogYW5kIHdlIG5lZWQgc29tZXRoaW5nIGF0dGFjaGVkLlxcbiA0NjY6XFx0ICovXFxuIDQ2NzpcXHRzdGF0aWMgaW50IHR0eV9sZGlzY19mYWlsdG8oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGxkKVxcbiA0Njg6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1MzowOS42NzAwMDk1OTNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY5NDIzMzg3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNlcmlhbCBMaW5lIERpc2NpcGxpbmUgQ2xvc2UgUHJvY2VzcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gU28sIGB0dHlfbGRpc2NfY2xvc2VgIGlzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIGhlcmUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgaXQgZG9lcyBpcyBjYWxsIGBsZC1cdTAwM2VvcHMtXHUwMDNlY2xvc2UodHR5KWAuIE9rYXksIHRoYXQncyB0aGUgc3RhbmRhcmQgY2xvc2UgcHJvY2VkdXJlIGZvciBhIGxpbmUgZGlzY2lwbGluZS4gQnV0LCBpZiBgc2xpcF9oYW5ndXBgIHdhcywgaW4gZmFjdCwgY2FsbGluZyBgc2xpcF9jbG9zZWAsIHdvdWxkbid0IHRoYXQgcmVzdWx0IGluIGBzbGlwX2Nsb3NlYCBiZWluZyBjYWxsZWQgKnR3aWNlKj8gVGhhdCBzZWVtcy4uLiBpbmNvcnJlY3QsIGEgcG90ZW50aWFsIGRvdWJsZS1mcmVlIG9yIG90aGVyIHVuZGVzaXJhYmxlIG91dGNvbWUuIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBzbGlwX2Nsb3NlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbiwgdG8gdmVyaWZ5IGlmIHRoaXMgZG91YmxlLWNhbGwgc2NlbmFyaW8gaXMgZXZlbiBwb3NzaWJsZSBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIHdvdWxkIGJlIGlmIGl0IHdlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzc1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1MzoxNC4zNjQyNDUyMDhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODgwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODgwOlxcdC8qXFxuIDg4MTpcXHQgKiBDbG9zZSBkb3duIGEgU0xJUCBjaGFubmVsLlxcbiA4ODI6XFx0ICogVGhpcyBtZWFucyBmbHVzaGluZyBvdXQgYW55IHBlbmRpbmcgcXVldWVzLCBhbmQgdGhlbiByZXR1cm5pbmcuIFRoaXNcXG4gODgzOlxcdCAqIGNhbGwgaXMgc2VyaWFsaXplZCBhZ2FpbnN0IG90aGVyIGxkaXNjIGZ1bmN0aW9ucy5cXG4gODg0OlxcdCAqL1xcbiA4ODU6XFx0XFxuIDg4NjpcXHRzdGF0aWMgdm9pZCBzbGlwX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXFxuIDg4NzpcXHR7XFxuIDg4ODpcXHRcXHRzdHJ1Y3Qgc2xpcCAqc2wgPSB0dHktXFx1MDAzZWRpc2NfZGF0YTtcXG4gODg5OlxcdFxcbiA4OTA6XFx0XFx0LyogRmlyc3QgbWFrZSBzdXJlIHdlJ3JlIGNvbm5lY3RlZC4gKi9cXG4gODkxOlxcdFxcdGlmICghc2wgfHwgc2wtXFx1MDAzZW1hZ2ljICE9IFNMSVBfTUFHSUMgfHwgc2wtXFx1MDAzZXR0eSAhPSB0dHkpXFxuIDg5MjpcXHRcXHRcXHRyZXR1cm47XFxuIDg5MzpcXHRcXG4gODk0OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2c2wtXFx1MDAzZWxvY2spO1xcbiA4OTU6XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHR0eS1cXHUwMDNlZGlzY19kYXRhLCBOVUxMKTtcXG4gODk2OlxcdFxcdHNsLVxcdTAwM2V0dHkgPSBOVUxMO1xcbiA4OTc6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNsLVxcdTAwM2Vsb2NrKTtcXG4gODk4OlxcdFxcbiA4OTk6XFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxuIDkwMDpcXHRcXHRmbHVzaF93b3JrKFxcdTAwMjZzbC1cXHUwMDNldHhfd29yayk7XFxuIDkwMTpcXHRcXG4gOTAyOlxcdFxcdC8qIFZTViA9IHZlcnkgaW1wb3J0YW50IHRvIHJlbW92ZSB0aW1lcnMgKi9cXG4gOTAzOlxcdCNpZmRlZiBDT05GSUdfU0xJUF9TTUFSVFxcbiA5MDQ6XFx0XFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnNsLVxcdTAwM2VrZWVwYWxpdmVfdGltZXIpO1xcbiA5MDU6XFx0XFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnNsLVxcdTAwM2VvdXRmaWxsX3RpbWVyKTtcXG4gOTA2OlxcdCNlbmRpZlxcbiA5MDc6XFx0XFx0LyogRmx1c2ggbmV0d29yayBzaWRlICovXFxuIDkwODpcXHRcXHR1bnJlZ2lzdGVyX25ldGRldihzbC1cXHUwMDNlZGV2KTtcXG4gOTA5OlxcdFxcdC8qIFRoaXMgd2lsbCBjb21wbGV0ZSB2aWEgc2xfZnJlZV9uZXRkZXYgKi9cXG4gOTEwOlxcdH1cXG4gOTExOlxcdCAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuIDkxMjpcXHQgICpcXHRcXHRcXHRTVEFOREFSRCBTTElQIEVOQ0FQU1VMQVRJT05cXHRcXHQgIFxcdCAqXFxuIDkxMzpcXHQgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4gOTE0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1MzoxNC4zNjQzMzcwNDhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM2MjI5NzMwMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgUmVtb3ZpbmcgYHNsaXBfaGFuZ3VwYCoqXG5cbk9rYXksIHNvIHRoZSBjb2RlJ3MgbG9naWMgaXMgdGhpczogYHNsaXBfY2xvc2VgIGdldHMgY2FsbGVkLCBwb3RlbnRpYWxseSBtdWx0aXBsZSB0aW1lcywgZHVlIHRvIGludGVyYWN0aW9ucyBiZXR3ZWVuIGBzbGlwX2hhbmd1cGAsIGB0dHlfbGRpc2NfaGFuZ3VwYCwgYW5kIHRoZSBsaW5lIGRpc2NpcGxpbmUgbWFuYWdlbWVudC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHJlbW92aW5nIGBzbGlwX2hhbmd1cGAgd291bGQganVzdCBtYWtlIHRoaW5ncyBzaW1wbGVyLCBidXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgbW9yZSBzdWJ0bGUuXG5cbkxldCdzIGJyZWFrIGl0IGRvd246IG9yaWdpbmFsbHksIGBzbGlwX2hhbmd1cGAgY2FsbGVkIGBzbGlwX2Nsb3NlYC4gVGhlbiwgYHR0eV9sZGlzY19oYW5ndXBgIHdvdWxkIGFsc28gdHJpZ2dlciBvdGhlciBjbG9zZSBjYWxscyB0aHJvdWdoIGB0dHlfbGRpc2NfcmVpbml0YCwgYHR0eV9sZGlzY19raWxsYCwgYW5kIHVsdGltYXRlbHkgYHR0eV9sZGlzY19jbG9zZWAsIHdoaWNoIGFsc28gY2FsbHMgYHNsaXBfY2xvc2VgLiAgU28sIHlvdSBnZXQgYSBkb3VibGUgY2FsbC5cblxuTm93LCBpZiBgc2xpcF9oYW5ndXBgIGlzIHJlbW92ZWQsIHRoZSBmbG93IGNoYW5nZXMuICBgdHR5X2xkaXNjX2hhbmd1cGAgd2lsbCAqc3RpbGwqIGNhbGwgZnVuY3Rpb25zIHdoaWNoIGluZGlyZWN0bHkgaW52b2tlIGBzbGlwX2Nsb3NlYCwgc28gaXQncyBub3QgYSBjb21wbGV0ZSByZW1vdmFsIG9mIGZ1bmN0aW9uYWxpdHkuIFRoZSAqb3JkZXIqIG9mIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgdGltaW5nIG9mIGB1bnJlZ2lzdGVyX25ldGRldmAsIHNoaWZ0cy4gIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBidWcgZml4IGxpZXMuICBgc2xpcF9jbG9zZWAgbm93IGdldHMgY2FsbGVkICpsYXRlciogaW4gdGhlIHNodXRkb3duIHNlcXVlbmNlLCB3aGljaCByZWR1Y2VzIHRoZSBwb3RlbnRpYWwgZm9yIHVzZS1hZnRlci1mcmVlIG9yIG90aGVyIGNvbmN1cnJlbmN5IGlzc3VlcywgYmVjYXVzZSB0aGUgbGluZSBkaXNjaXBsaW5lIGlzbid0IGZ1bGx5IHNodXQgZG93biB3aGVuIHRoZSBuZXRkZXYgaXMgdW5yZWdpc3RlcmVkLiBUaGlzIGlzIHRoZSBrZXkgZGlmZmVyZW5jZS5cblxuU28sIGlzIHRoaXMgY2hhbmdlIHdvcnRoIGZ1enppbmc/ICBXaGlsZSB0aGUgcGF0Y2ggaXRzZWxmIG9ubHkgKnJlbW92ZXMqIGEgZnVuY3Rpb24sIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGl0IGNoYW5nZXMgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBkcml2ZXIuIEl0IGZpeGVzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGJ5IGRlbGF5aW5nIHRoZSBuZXRkZXYgdW5yZWdpc3RyYXRpb24uIEdpdmVuIHRoYXQsIEknZCBzYXkgdGhhdCB3aGlsZSB0aGVyZSBhcmUgbm8gKm5ldyogY29kZSBwYXRocyB0byBmdXp6LCB0aGUgY2hhbmdlICpkb2VzKiBhZmZlY3QgdGhlIHRpbWluZyBvZiBleGlzdGluZyBvcGVyYXRpb25zLCBhbmQgdGhhdCdzIHdvcnRoIGNoZWNraW5nLiAgV2UgY2FuIHVzZSBzeXprYWxsZXIgdG8gY3JlYXRlIGEgUFRZLCBzZXQgdGhlIGxpbmUgZGlzY2lwbGluZSB0byBTTElQLCBhbmQgdHJpZ2dlciBhIGhhbmd1cC5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIGl0ICpjaGFuZ2VzKiB0aGUgZXhlY3V0aW9uIGZsb3csIGFuZCBmaXhlcyBhIHBvdGVudGlhbGx5IGV4cGxvaXRhYmxlIHJhY2UgY29uZGl0aW9uLCBJJ20gdGhpbmtpbmcgeWVzLCB0aGVyZSdzIGEgcmVhc29uIHRvIGNoZWNrIGl0IHdpdGggZnV6emluZy4gRm9jdXNTeW1ib2xzPyAgVGhlcmUgYXJlbid0IG5ldyBmdW5jdGlvbiwgYnV0IGZvY3VzaW5nIG9uIGBzbGlwX2Nsb3NlYCBhbmQvb3IgYHNsaXBfb3BlbmAgd291bGQgYmUgcmVhc29uYWJsZSwgZ2l2ZW4gdGhhdCB0aGUgdGltaW5nIG9mIGBzbGlwX2Nsb3NlYCBpcyB0aGUgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE1NCwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1MzoyNy45ODczMTMxMDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDM5Nzc5NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2xpcF9jbG9zZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9zbGlwL3NsaXAuYz03OTI9c3RhdGljIGludCBzbGlwX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTg4NS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzo4ODY6c3RhdGljIHZvaWQgc2xpcF9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTg4Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYz0xMjY1PXN0YXRpYyBzdHJ1Y3QgdHR5X2xkaXNjX29wcyBzbF9sZGlzYyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEyNjktXFx0Lm9wZW4gXFx0XFx0PSBzbGlwX29wZW4sXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6MTI3MDpcXHQuY2xvc2VcXHQgXFx0PSBzbGlwX2Nsb3NlLFxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEyNzEtXFx0LmlvY3RsXFx0XFx0PSBzbGlwX2lvY3RsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1MzoyOS45OTEzMDE2OTlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc1NTQ1OTQzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipDaGVja2luZyBgc2xpcF9vcGVuYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgZmlyc3QgdGhpbmcgSSdtIGdvaW5nIHRvIGRvIGlzIGV4YW1pbmUgdGhhdCBgc2xpcF9vcGVuYCBmdW5jdGlvbiBvciB2YXJpYWJsZSDigJMgd2hhdGV2ZXIgaXQgbWF5IGJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIHByb2Nlc3Mgb3Igc3lzdGVtLiBJcyBpdCBhIGZsYWc/IEEgc3RhdGUgdmFyaWFibGU/IEEgZnVuY3Rpb24gY2FsbD8gV2hhdCBhcmUgaXRzIGlucHV0cyBhbmQgZXhwZWN0ZWQgb3V0cHV0cz8gV2hhdCBkZXBlbmRlbmNpZXMgZG9lcyBpdCBoYXZlPyBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCBpdHMgYmVoYXZpb3IsIGFuZCBob3cgaXQncyBkZWZpbmVkIGFuZCBjYWxsZWQsIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgdG8gZGV0ZXJtaW5pbmcgdGhlIGZsb3cgaGVyZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgbG9vayBmb3IgaXRzIGRlZmluaXRpb24gYW5kIGFueSByZWZlcmVuY2VzIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBhY3QuIFRoZSBjb250ZXh0IG9mIGl0cyB1c2Ugd2lsbCBpbmZvcm0gbXkgdW5kZXJzdGFuZGluZy4gSSdsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIGl0J3MgdGhyZWFkLXNhZmUgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbnZvbHZpbmcgaXQuIEknbSBhbHNvIGxvb2tpbmcgZm9yIGFueSBvYnZpb3VzIGVkZ2UgY2FzZXMgb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBpbiBpdHMgbG9naWMuIEJhc2ljYWxseSwgSSB3YW50IHRvIGdhaW4gYSBzdHJvbmcgbWVudGFsIG1vZGVsIG9mIGhvdyBgc2xpcF9vcGVuYCB3b3JrcyBzbyBJIGNhbiBidWlsZCBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NjQsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjUzOjQ3LjU0NTg5ODc1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODMzNDYzNjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNsaXBfb3BlblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9zbGlwL3NsaXAuYz02ODg9c3RhdGljIHZvaWQgc2xpcF9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1OCAqY3AsIGNvbnN0IHU4ICpmcCxcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTcxNy0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6NzE4OiAqICBzbGlwX29wZW4gaGVscGVyIHJvdXRpbmVzLlxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTcxOS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi0tXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9NzQzPXN0YXRpYyBzdHJ1Y3Qgc2xpcCAqc2xfYWxsb2Modm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTc5MS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzo3OTI6c3RhdGljIGludCBzbGlwX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy03OTMte1xcbi0tXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9MTI2NT1zdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgc2xfbGRpc2MgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy0xMjY4LVxcdC5uYW1lIFxcdFxcdD0gXFxcInNsaXBcXFwiLFxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jOjEyNjk6XFx0Lm9wZW4gXFx0XFx0PSBzbGlwX29wZW4sXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTI3MC1cXHQuY2xvc2VcXHQgXFx0PSBzbGlwX2Nsb3NlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1Mzo0OS4zNzkzNjcwMDFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU3MzEzODgxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBTTElQIERyaXZlciBCdWcqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHBpbnBvaW50IHRoaXMgYnVnLiBMZXQgbWUgdGhpbmsuLi4gQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgaW4gcGxheSBoZXJlIGJlc2lkZXMgdGhlIG9idmlvdXMgb25lcyBJJ3ZlIGJlZW4gd29ya2luZyB3aXRoPyBQZXJoYXBzIGBzbGlwX3JlY2VpdmVfYnVmYCwgYHNsaXBfd3JpdGVfd2FrZXVwYCwgb3IgZXZlbiBgc2xpcF9pb2N0bGA/IEhtbSwgbm8sIHdhaXQgYSBtaW51dGUsIHRoZSBjb3JlIGlzc3VlIHdhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBhIGhhbmd1cCwgd2Fzbid0IGl0PyBSaWdodC4gV2hlbiBhIGhhbmd1cCBoYXBwZW5zLCB0aGF0J3Mgd2hlbiBgdHR5X2xkaXNjX2hhbmd1cGAgZ2V0cyBjYWxsZWQuXG5cbkFscmlnaHQsIHNvIHRoZSBrZXkgYXJlYXMgdG8gcmVhbGx5IGZvY3VzIG9uIGFyZSBgc2xpcF9jbG9zZWAsIGBzbGlwX29wZW5gLCBhbmQsIGNydWNpYWxseSwgYHR0eV9sZGlzY19oYW5ndXBgLiBOb3csIHdoZXJlIGRvZXMgYHR0eV9sZGlzY19oYW5ndXBgIGxpdmU/IE9oIHllYWgsIHRoYXQncyBpbiBgZHJpdmVycy90dHkvdHR5X2xkaXNjLmNgLiBBbmQgdGhlIHBhdGNoIGl0c2VsZiwgdGhlIG9uZSB0aGF0J3Mgc3VwcG9zZWQgdG8gZml4IHRoaXMsIGl0J3MgbG9jYXRlZCBpbiBgZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNgLlxuXG5Pa2F5LCBuZXh0IHN0ZXAsIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiB0byBtYWtlIHN1cmUgU0xJUCBpcyBldmVuIGVuYWJsZWQgaW4gdGhpcyBzcGVjaWZpYyBzZXR1cCwganVzdCB0byBtYWtlIHN1cmUgSSdtIG5vdCBjaGFzaW5nIGEgcGhhbnRvbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1NTAsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NTM6NTQuOTUyNTA3ODUyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzkzOTI5MzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTElQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZy01LVxcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZzo2OmNvbmZpZyBTTElQXFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlNMSVAgKHNlcmlhbCBsaW5lKSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnPTQzPWlmIFNMSVBcXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNDQtXFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnOjQ1OmNvbmZpZyBTTElQX0NPTVBSRVNTRURcXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNDYtXFx0Ym9vbCBcXFwiQ1NMSVAgY29tcHJlc3NlZCBoZWFkZXJzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTYwLVxcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZzo2MTpjb25maWcgU0xJUF9TTUFSVFxcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZy02Mi1cXHRib29sIFxcXCJLZWVwYWxpdmUgYW5kIGxpbmVmaWxsXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTY4LVxcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZzo2OTpjb25maWcgU0xJUF9NT0RFX1NMSVA2XFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIlNpeCBiaXQgU0xJUCBlbmNhcHN1bGF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1Mzo1Ni4zNDY0NDE3N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzcyNjg5NzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cbk9rYXksIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBgU0xJUGAg4oCTIHRoYXQncyB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgb3IgbW9kdWxlIHdlJ3JlIHdvcmtpbmcgd2l0aC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiZG9lcyBgU0xJUGAgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzPyBXaGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIGNvbXBvbmVudHMgZG9lcyBpdCByZWx5IG9uIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT9cIiBVbmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gY29uZmlndXJhdGlvbnMgaXMgY3JpdGljYWwsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggY29tcGxleCBzeXN0ZW1zLiBJZGVudGlmeWluZyB0aGVzZSBkZXBlbmRlbmNpZXMgZWFybHkgb24gcHJldmVudHMgY2FzY2FkaW5nIGlzc3VlcyBsYXRlci4gTGV0J3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHRoZSBjaGFpbiBvZiBjb25uZWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyMTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1NDowNS43MTkxMzQ1NjFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFNMSVAgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgU0xJUFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlNMSVAgKHNlcmlhbCBsaW5lKSBzdXBwb3J0XFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBUVFlcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgU2F5IFkgaWYgeW91IGludGVuZCB0byB1c2UgU0xJUCBvciBDU0xJUCAoY29tcHJlc3NlZCBTTElQKSB0b1xcbiAgMTE6XFx0XFx0ICBjb25uZWN0IHRvIHlvdXIgSW50ZXJuZXQgc2VydmljZSBwcm92aWRlciBvciB0byBjb25uZWN0IHRvIHNvbWVcXG4gIDEyOlxcdFxcdCAgb3RoZXIgbG9jYWwgVW5peCBib3ggb3IgaWYgeW91IHdhbnQgdG8gY29uZmlndXJlIHlvdXIgTGludXggYm94IGFzIGFcXG4gIDEzOlxcdFxcdCAgU2xpcC9DU2xpcCBzZXJ2ZXIgZm9yIG90aGVyIHBlb3BsZSB0byBkaWFsIGluLiBTTElQIChTZXJpYWwgTGluZVxcbiAgMTQ6XFx0XFx0ICBJbnRlcm5ldCBQcm90b2NvbCkgaXMgYSBwcm90b2NvbCB1c2VkIHRvIHNlbmQgSW50ZXJuZXQgdHJhZmZpYyBvdmVyXFxuICAxNTpcXHRcXHQgIHNlcmlhbCBjb25uZWN0aW9ucyBzdWNoIGFzIHRlbGVwaG9uZSBsaW5lcyBvciBudWxsIG1vZGVtIGNhYmxlcztcXG4gIDE2OlxcdFxcdCAgbm93YWRheXMsIHRoZSBwcm90b2NvbCBQUFAgaXMgbW9yZSBjb21tb25seSB1c2VkIGZvciB0aGlzIHNhbWVcXG4gIDE3OlxcdFxcdCAgcHVycG9zZS5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBOb3JtYWxseSwgeW91ciBhY2Nlc3MgcHJvdmlkZXIgaGFzIHRvIHN1cHBvcnQgU0xJUCBpbiBvcmRlciBmb3IgeW91XFxuICAyMDpcXHRcXHQgIHRvIGJlIGFibGUgdG8gdXNlIGl0LCBidXQgdGhlcmUgaXMgbm93IGEgU0xJUCBlbXVsYXRvciBjYWxsZWQgU0xpUlBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NTQ6MDUuNzE5MjA0MzYxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MDc3NjU5MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNMSVAgRHJpdmVyIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGUgZGVwZW5kZW5jeTogYFNMSVBgIHJlbGllcyBvbiBgVFRZYC4gTWFrZXMgc2Vuc2UuIFRoZSBjb25maWcgbmVlZGVkIHRvIGVuYWJsZSBpdCBpcyBjbGVhcmx5IGBTTElQYC4gQnV0LCB0aGUgcmVhbCBtZWF0IG9mIHRoaXMgc2VlbXMgdG8gYmUgdGhlIHJlbW92YWwgb2YgYHNsaXBfaGFuZ3VwYC4gSG1tLCBpcyB0aGlzIGFjdHVhbGx5IGEgZnVuY3Rpb25hbCBjaGFuZ2U/XG5cblllcywgaXQgaXMhIEl0J3MgY2hhbmdpbmcgaG93IHRoZSBTTElQIGRyaXZlciBiZWhhdmVzIG9uIGhhbmd1cCwgd2hpY2ggaXMgZGVmaW5pdGVseSBzaWduaWZpY2FudC4gQmVmb3JlIHRoaXMgcGF0Y2gsIGBzbGlwX2hhbmd1cGAgd2FzIGNhbGxlZCwgd2hpY2ggaW4gdHVybiBjYWxsZWQgYHNsaXBfY2xvc2VgLiBOb3csIGBzbGlwX2hhbmd1cGAgaXMgYnlwYXNzZWQgZW50aXJlbHksIGFuZCBgc2xpcF9jbG9zZWAgaXMgb25seSBpbnZva2VkIHdoZW4gdGhlIGxpbmUgZGlzY2lwbGluZSAobGRpc2MpIGlzIGNsb3NlZC4gVGhhdCdzIGEgZGVmaW5pdGUgYmVoYXZpb3JhbCBzaGlmdCwgYW5kIHRoYXQgd2FycmFudHMgc29tZSBzZXJpb3VzIGZ1enppbmcuXG5cbk15IGZvY3VzIHNob3VsZCBiZSBzcXVhcmVseSBvbiB0aG9zZSBmdW5jdGlvbnM6IGBzbGlwX2Nsb3NlYCBhbmQgYHNsaXBfb3BlbmAuIFRoZSBjb25maWcgcmVtYWlucyBgU0xJUGAuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBzY2FuIHRoZSBjb2RlIHRvIGVuc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGFsc28gYmUgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY5NiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjU0OjExLjIyNjk3MzE1OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyODI4OTY1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbF9sZGlzY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9zbGlwL3NsaXAuYz0xMTgzPXN0YXRpYyBpbnQgc2xfc2lvY2RldnByaXZhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSxcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEyNjQtXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6MTI2NTpzdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgc2xfbGRpc2MgPSB7XFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTI2Ni1cXHQub3duZXIgXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jPTEyNzY9c3RhdGljIGludCBfX2luaXQgc2xpcF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy0xMzAwLVxcdC8qIEZpbGwgaW4gb3VyIGxpbmUgcHJvdG9jb2wgZGlzY2lwbGluZSwgYW5kIHJlZ2lzdGVyIGl0ICovXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6MTMwMTpcXHRzdGF0dXMgPSB0dHlfcmVnaXN0ZXJfbGRpc2MoXFx1MDAyNnNsX2xkaXNjKTtcXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy0xMzAyLVxcdGlmIChzdGF0dXMgIT0gMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9MTMwOT1zdGF0aWMgdm9pZCBfX2V4aXQgc2xpcF9leGl0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy0xMzYxLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jOjEzNjI6XFx0dHR5X3VucmVnaXN0ZXJfbGRpc2MoXFx1MDAyNnNsX2xkaXNjKTtcXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy0xMzYzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NTQ6MTIuNzU1MjY3NTQzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNzQ0MTQyMjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgZnJhbWVkIGFzIGEgc2VyaWVzIG9mIHRob3VnaHRzOlxuXG4qKkZvY3VzaW5nIG9uIEtleSBGdW5jdGlvbnMgYW5kIFNldHRpbmcgUmVzdWx0cyoqXG5cbk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgb3BlcmF0aW9uIGhpbmdlcyBvbiBgc2xpcF9jbG9zZWAgYW5kIGBzbGlwX29wZW5gLiBUaG9zZSBhcmUgdGhlIHR3byBmdW5jdGlvbnMgdGhhdCByZWFsbHkgbWF0dGVyIGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGZ1bGx5IHVuZGVyc3RhbmRpbmcgdGhlaXIgaW5wdXRzLCBvdXRwdXRzLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuXG5cbk9uY2UgSSBoYXZlIGEgc29saWQgZ3Jhc3Agb2YgdGhvc2UgdHdvLCB0aGUgbmV4dCBzdGVwIGlzIHN0cmFpZ2h0Zm9yd2FyZDogSSdsbCBuZWVkIHRvIHN0cmF0ZWdpY2FsbHkgc2V0IHRoZSByZXN1bHRzLiBUaGF0IG1lYW5zIGNhcmVmdWxseSBjcmFmdGluZyB0aGUgcmV0dXJuIHZhbHVlcyBvciBtb2RpZnlpbmcgYW55IHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyBhY2NvcmRpbmcgdG8gaG93IHRob3NlIGZ1bmN0aW9ucyBhcmUgaW50ZXJhY3RpbmcgYW5kIHdoYXQgdGhlIGRlc2lyZWQgb3ZlcmFsbCBvdXRjb21lIGlzLiBFZmZpY2llbmN5IGFuZCBhY2N1cmFjeSBhcmUsIG9mIGNvdXJzZSwgcGFyYW1vdW50LCBidXQgSSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHByb2Nlc3MgY2FuIGJlIHJlcHJvZHVjZWQgaWYgbmVjZXNzYXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQzNywiT3V0cHV0VG9rZW5zIjoxMzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1NDoyNS40OTk0MTMyMTdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDkxNjU0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0xJUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNsaXBfY2xvc2VcIixcbiAgICBcInNsaXBfb3BlblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBzbGlwX2hhbmd1cGAgY2FsbGJhY2sgZnJvbSB0aGUgU0xJUCBsaW5lIGRpc2NpcGxpbmUuIFRoaXMgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgdGhlIFNMSVAgZHJpdmVyIG9uIGhhbmd1cCwgYXMgYHNsaXBfY2xvc2VgIGlzIG5vIGxvbmdlciBjYWxsZWQgZGlyZWN0bHkgZnJvbSB0aGUgaGFuZ3VwIHBhdGgsIGJ1dCByYXRoZXIgZGVmZXJyZWQgdW50aWwgdGhlIGxkaXNjIGlzIGNsb3NlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSB0ZWFyZG93biBzZXF1ZW5jZSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBUVFkgaGFuZ3VwIG9wZXJhdGlvbnMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNMSVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbGlwX2Nsb3NlXCIsXG4gICAgXCJzbGlwX29wZW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBgc2xpcF9oYW5ndXBgIGNhbGxiYWNrIGZyb20gdGhlIFNMSVAgbGluZSBkaXNjaXBsaW5lLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBTTElQIGRyaXZlciBvbiBoYW5ndXAsIGFzIGBzbGlwX2Nsb3NlYCBpcyBubyBsb25nZXIgY2FsbGVkIGRpcmVjdGx5IGZyb20gdGhlIGhhbmd1cCBwYXRoLCBidXQgcmF0aGVyIGRlZmVycmVkIHVudGlsIHRoZSBsZGlzYyBpcyBjbG9zZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyB0aGUgdGVhcmRvd24gc2VxdWVuY2UgYW5kIGlzIHJlYWNoYWJsZSB2aWEgVFRZIGhhbmd1cCBvcGVyYXRpb25zLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NTQ6MjUuNTcwMzM2MDI1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU2MTg1NjY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDExOjU0OjI1LjU3MDc2ODIwNVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTU2MTQyMTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYHNsaXBfaGFuZ3VwYCBmdW5jdGlvbiBhbmQgaXRzIGFzc2lnbm1lbnQgdG8gdGhlIGBoYW5ndXBgIGZpZWxkIGluIHRoZSBgc2xfbGRpc2NgIChgdHR5X2xkaXNjX29wc2ApIHN0cnVjdHVyZSB3aXRoaW4gdGhlIFNMSVAgbmV0d29yayBkcml2ZXIuIFRoaXMgY2hhbmdlIGFsdGVycyB0aGUgY29udHJvbCBmbG93IGR1cmluZyBhIFRUWSBoYW5ndXAgZXZlbnQsIG1lYW5pbmcgdGhlIFNMSVAgY2hhbm5lbCBtaWdodCBub3QgYmUgZXhwbGljaXRseSBjbG9zZWQgb24gaGFuZ3VwLiBJZiB0aGlzIG9taXNzaW9uIGludHJvZHVjZXMgYW55IGJ1Z3MsIHRoZXkgd291bGQgbGlrZWx5IG1hbmlmZXN0IGFzIHJlc291cmNlIGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXRpZXMgKGUuZy4sIGlmIHRoZSBUVFkgaXMgZGVzdHJveWVkIGJ1dCB0aGUgU0xJUCBjaGFubmVsIGNvbnRpbnVlcyB0byByZWZlcmVuY2UgaXQpLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIChpZiB0aGUgVFRZIGxheWVyIGF0dGVtcHRzIHRvIGNhbGwgYSBOVUxMIGBoYW5ndXBgIHBvaW50ZXIpLiBcXG5cXG5UaGVzZSBjbGFzc2VzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgc3VjaCBhcyBLQVNBTiAod2hpY2ggY2F0Y2hlcyB1c2UtYWZ0ZXItZnJlZSBhbmQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgYW5kIHN0YW5kYXJkIGtlcm5lbCBvb3BzL3BhbmljcyAod2hpY2ggY2F0Y2ggTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgZG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhZGQgbG9naWMgdGhhdCBjb3VsZCBvcGVyYXRlIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE4NTdmZjdiYWJjNDYxY2Y3MjAwMmI3NGNkNWE5Y2Q2YTU2NTAyMzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxMTo1MTo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jIGIvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNcbmluZGV4IGZhYWU3MTFjZjc5M2QuLmFjMGZjNTljOGMyNTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9zbGlwL3NsaXAuY1xuKysrIGIvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNcbkBAIC04ODEsOCArODgxLDYgQEAgc3RhdGljIGludCBzbGlwX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcbiAgKiBDbG9zZSBkb3duIGEgU0xJUCBjaGFubmVsLlxuICAqIFRoaXMgbWVhbnMgZmx1c2hpbmcgb3V0IGFueSBwZW5kaW5nIHF1ZXVlcywgYW5kIHRoZW4gcmV0dXJuaW5nLiBUaGlzXG4gICogY2FsbCBpcyBzZXJpYWxpemVkIGFnYWluc3Qgb3RoZXIgbGRpc2MgZnVuY3Rpb25zLlxuLSAqXG4tICogV2UgYWxzbyB1c2UgdGhpcyBtZXRob2QgZm8gYSBoYW5ndXAgZXZlbnRcbiAgKi9cbiBcbiBzdGF0aWMgdm9pZCBzbGlwX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG5AQCAtOTEwLDExICs5MDgsNiBAQCBzdGF0aWMgdm9pZCBzbGlwX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4gXHR1bnJlZ2lzdGVyX25ldGRldihzbC1cdTAwM2VkZXYpO1xuIFx0LyogVGhpcyB3aWxsIGNvbXBsZXRlIHZpYSBzbF9mcmVlX25ldGRldiAqL1xuIH1cbi1cbi1zdGF0aWMgdm9pZCBzbGlwX2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuLXtcbi1cdHNsaXBfY2xvc2UodHR5KTtcbi19XG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICpcdFx0XHRTVEFOREFSRCBTTElQIEVOQ0FQU1VMQVRJT05cdFx0ICBcdCAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5AQCAtMTI3NSw3ICsxMjY4LDYgQEAgc3RhdGljIHN0cnVjdCB0dHlfbGRpc2Nfb3BzIHNsX2xkaXNjID0ge1xuIFx0Lm5hbWUgXHRcdD0gXCJzbGlwXCIsXG4gXHQub3BlbiBcdFx0PSBzbGlwX29wZW4sXG4gXHQuY2xvc2VcdCBcdD0gc2xpcF9jbG9zZSxcbi1cdC5oYW5ndXBcdCBcdD0gc2xpcF9oYW5ndXAsXG4gXHQuaW9jdGxcdFx0PSBzbGlwX2lvY3RsLFxuIFx0LnJlY2VpdmVfYnVmXHQ9IHNsaXBfcmVjZWl2ZV9idWYsXG4gXHQud3JpdGVfd2FrZXVwXHQ9IHNsaXBfd3JpdGVfd2FrZXVwLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTE6NTQ6MjUuNTcwNzY5MDM2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNTYxNDA0NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0xJUCBEcml2ZXIgSGFuZ3VwIFJlbW92YWwqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRha2luZyBvdXQgdGhlIGBzbGlwX2hhbmd1cGAgZnVuY3Rpb24gYW5kLCBjcnVjaWFsbHksIGl0cyBhc3NvY2lhdGlvbiB3aXRoIHRoZSBgaGFuZ3VwYCBmaWVsZCBpbiB0aGUgYHR0eV9sZGlzY19vcHNgIHN0cnVjdHVyZSBmb3IgdGhlIFNMSVAgZHJpdmVyLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiB3aGF0IGhhcHBlbnMgdG8gdGhlIGhhbmd1cCBoYW5kbGluZyBub3c/IGBzbGlwX2hhbmd1cGAgd2FzIGp1c3QgY2FsbGluZyBgc2xpcF9jbG9zZWAsIHNvIHJlbW92aW5nIGl0IGVzc2VudGlhbGx5IHNraXBzIHRoYXQgc3RlcCBkdXJpbmcgYSBoYW5ndXAuXG5cbk15IGluaXRpYWwgY29uY2VybiB3YXMgYXJvdW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBCdXQgd2FpdCwgdGhpcyBpcyBqdXN0IGEgZnVuY3Rpb24gcG9pbnRlciBhc3NpZ25tZW50IGJlaW5nIHJlbW92ZWQuIFRoZXJlJ3Mgbm8gbmV3IGRhdGEgYmVpbmcgYWxsb2NhdGVkIG9yIGNvcGllZCwgc28gdGhlIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBpcyBiYXNpY2FsbHkgemVyby4gVGhpcyBpc24ndCBhIEtNU0FOIHNpdHVhdGlvbi5cblxuQnV0IHRoZSByZWFsIHF1ZXN0aW9uIGlzOiB3aGF0J3MgdGhlIGJlaGF2aW9yIHdoZW4gYGhhbmd1cGAgaXMgKk5VTEwqPyBEb2VzIHRoZSBUVFkgbGF5ZXIgaGFuZGxlIHRoYXQgZ3JhY2VmdWxseT8gSSdtIHRoaW5raW5nIHRoZSBUVFkgbGF5ZXIgbWlnaHQganVzdCBub3QgY2FsbCBhbnl0aGluZywgb3IgcG9zc2libHkgY2FsbCBhIGRlZmF1bHQgaGFuZGxlci4gVGhlIGRvY3VtZW50YXRpb24gZm9yIGB0dHlfbGRpc2Nfb3BzYCBpbiBgaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaGAgc2hvdWxkIGNsZWFyIHRoYXQgdXAuXG5cbklmIHRoZSBUVFkgbGF5ZXIgZG9lc24ndCBoYW5kbGUgdGhlIE5VTEwgcG9pbnRlciwgd2UnZCBoYXZlIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBhIHN0cmFpZ2h0Zm9yd2FyZCBvb3BzIHRoYXQgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRlc3RpbmcgKEtBU0FOIG9yIHNvbWV0aGluZyBzaW1pbGFyKS4gSWYgbm90LCB3ZSBydW4gdGhlIHJpc2sgb2YgcmVzb3VyY2UgbGVha3MsIGEgc2xpcCBjaGFubmVsIG1pZ2h0IG5vdCBiZSBjbG9zZWQgd2hlbiB0aGUgdHR5IGhhbmdzIHVwLCBsZWFkaW5nIHRvIGEgcG9zc2libGUgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gaWYgdGhlIFRUWSBpcyBkZXN0cm95ZWQgYnV0IHRoZSBzbGlwIGNoYW5uZWwgc3RpbGwgcmVmZXJlbmNlcyBpdC4gSG93ZXZlciwgdG9vbHMgbGlrZSBLQVNBTiBhbmQgS01FTUxFQUsgc2hvdWxkIGRldGVjdCB0aGF0IHJpZ2h0IGF3YXkuXG5cblNvLCBpbiBzdW1tYXJ5OiB0aGUgbWFpbiBjb25jZXJuIGhlcmUgaXMgcmVzb3VyY2UgbWFuYWdlbWVudCwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8gbGVha3MuIFRoZSBwYXRjaCBjb3VsZCBpbnRyb2R1Y2UgcmVzb3VyY2UgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUsIG9yIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBidXQgYWxsIG9mIHRob3NlIHNob3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcvbWVtb3J5IHNhZmV0eSB0b29scy4gVGhlcmUncyBubyBLTVNBTiByaXNrIGhlcmUsIGFuZCB0aGUgaW1wYWN0IGlzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggdG8gcmVhc29uIGFib3V0LiBUaGUgcGF0Y2ggaXMgcHJvYmFibHkgc2FmZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwNSwiT3V0cHV0VG9rZW5zIjoyNzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMTo1NDozNy4xMzIxNzU4ODZaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBzbGlwX2hhbmd1cGAgZnVuY3Rpb24gYW5kIGl0cyBhc3NpZ25tZW50IHRvIHRoZSBgaGFuZ3VwYCBmaWVsZCBpbiB0aGUgYHNsX2xkaXNjYCAoYHR0eV9sZGlzY19vcHNgKSBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBTTElQIG5ldHdvcmsgZHJpdmVyLiBUaGlzIGNoYW5nZSBhbHRlcnMgdGhlIGNvbnRyb2wgZmxvdyBkdXJpbmcgYSBUVFkgaGFuZ3VwIGV2ZW50LCBtZWFuaW5nIHRoZSBTTElQIGNoYW5uZWwgbWlnaHQgbm90IGJlIGV4cGxpY2l0bHkgY2xvc2VkIG9uIGhhbmd1cC4gSWYgdGhpcyBvbWlzc2lvbiBpbnRyb2R1Y2VzIGFueSBidWdzLCB0aGV5IHdvdWxkIGxpa2VseSBtYW5pZmVzdCBhcyByZXNvdXJjZSBsZWFrcywgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0aWVzIChlLmcuLCBpZiB0aGUgVFRZIGlzIGRlc3Ryb3llZCBidXQgdGhlIFNMSVAgY2hhbm5lbCBjb250aW51ZXMgdG8gcmVmZXJlbmNlIGl0KSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyAoaWYgdGhlIFRUWSBsYXllciBhdHRlbXB0cyB0byBjYWxsIGEgTlVMTCBgaGFuZ3VwYCBwb2ludGVyKS4gXFxuXFxuVGhlc2UgY2xhc3NlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIHN1Y2ggYXMgS0FTQU4gKHdoaWNoIGNhdGNoZXMgdXNlLWFmdGVyLWZyZWUgYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGFuZCBzdGFuZGFyZCBrZXJuZWwgb29wcy9wYW5pY3MgKHdoaWNoIGNhdGNoIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWRkIGxvZ2ljIHRoYXQgY291bGQgb3BlcmF0ZSBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBgc2xpcF9oYW5ndXBgIGZ1bmN0aW9uIGFuZCBpdHMgYXNzaWdubWVudCB0byB0aGUgYGhhbmd1cGAgZmllbGQgaW4gdGhlIGBzbF9sZGlzY2AgKGB0dHlfbGRpc2Nfb3BzYCkgc3RydWN0dXJlIHdpdGhpbiB0aGUgU0xJUCBuZXR3b3JrIGRyaXZlci4gVGhpcyBjaGFuZ2UgYWx0ZXJzIHRoZSBjb250cm9sIGZsb3cgZHVyaW5nIGEgVFRZIGhhbmd1cCBldmVudCwgbWVhbmluZyB0aGUgU0xJUCBjaGFubmVsIG1pZ2h0IG5vdCBiZSBleHBsaWNpdGx5IGNsb3NlZCBvbiBoYW5ndXAuIElmIHRoaXMgb21pc3Npb24gaW50cm9kdWNlcyBhbnkgYnVncywgdGhleSB3b3VsZCBsaWtlbHkgbWFuaWZlc3QgYXMgcmVzb3VyY2UgbGVha3MsIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcyAoZS5nLiwgaWYgdGhlIFRUWSBpcyBkZXN0cm95ZWQgYnV0IHRoZSBTTElQIGNoYW5uZWwgY29udGludWVzIHRvIHJlZmVyZW5jZSBpdCksIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgKGlmIHRoZSBUVFkgbGF5ZXIgYXR0ZW1wdHMgdG8gY2FsbCBhIE5VTEwgYGhhbmd1cGAgcG9pbnRlcikuIFxcblxcblRoZXNlIGNsYXNzZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBzdWNoIGFzIEtBU0FOICh3aGljaCBjYXRjaGVzIHVzZS1hZnRlci1mcmVlIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhbmQgc3RhbmRhcmQga2VybmVsIG9vcHMvcGFuaWNzICh3aGljaCBjYXRjaCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFkZCBsb2dpYyB0aGF0IGNvdWxkIG9wZXJhdGUgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowfj9fx[1] Phase: Succeeded StartedAt: 2026-08-26 11:54:48 +0000 UTC FinishedAt: 2026-08-26 11:54:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfj9fx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 11:54:48 +0000 UTC FinishedAt: 2026-08-26 11:54:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfj9fx[2] Phase: Succeeded StartedAt: 2026-08-26 11:54:48 +0000 UTC FinishedAt: 2026-08-26 13:26:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-26 11:54:48 +0000 UTC FinishedAt: 2026-08-26 13:26:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-26 11:54:48 +0000 UTC FinishedAt: 2026-08-26 11:54:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-26 11:54:48 +0000 UTC FinishedAt: 2026-08-26 11:54:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowfj9fx/series-workflowfj9fx-convert-artifact-3940874274/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-26 11:54:58 +0000 UTC FinishedAt: 2026-08-26 12:11:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-26 11:54:58 +0000 UTC FinishedAt: 2026-08-26 12:11:13 +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:*1a89acb4-cba5-47c2-8da3-e85f5f4103ca,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-workflowfj9fx/series-workflowfj9fx-convert-artifact-3940874274/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": "48b0b613-1f1c-4f2b-b9e6-0f899510de8c", "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-workflowfj9fx/series-workflowfj9fx-build-action-2531424736/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-26 11:54:58 +0000 UTC FinishedAt: 2026-08-26 12:11:03 +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:*1a89acb4-cba5-47c2-8da3-e85f5f4103ca,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-workflowfj9fx/series-workflowfj9fx-convert-artifact-3940874274/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": "48b0b613-1f1c-4f2b-b9e6-0f899510de8c", "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-workflowfj9fx/series-workflowfj9fx-build-action-2531424736/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-26 12:11:13 +0000 UTC FinishedAt: 2026-08-26 12:11:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-26 12:11:13 +0000 UTC FinishedAt: 2026-08-26 12:11:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-26 12:11:13 +0000 UTC FinishedAt: 2026-08-26 12:11:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-26 12:11:13 +0000 UTC FinishedAt: 2026-08-26 12:11:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowfj9fx/series-workflowfj9fx-convert-artifact-629609085/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-26 12:11:23 +0000 UTC FinishedAt: 2026-08-26 12:13:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-26 12:11:23 +0000 UTC FinishedAt: 2026-08-26 12:13:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*48b0b613-1f1c-4f2b-b9e6-0f899510de8c,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-workflowfj9fx/series-workflowfj9fx-build-action-2531424736/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-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-26 12:13:13 +0000 UTC FinishedAt: 2026-08-26 12:13:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-26 12:13:13 +0000 UTC FinishedAt: 2026-08-26 12:13:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-26 12:13:13 +0000 UTC FinishedAt: 2026-08-26 12:29:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-26 12:13:13 +0000 UTC FinishedAt: 2026-08-26 12:29:33 +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:*1a89acb4-cba5-47c2-8da3-e85f5f4103ca,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-workflowfj9fx/series-workflowfj9fx-convert-artifact-629609085/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": "243b1d05-aafe-479c-8ee4-be1795fe97e5", "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-workflowfj9fx/series-workflowfj9fx-build-action-1845940953/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-26 12:13:13 +0000 UTC FinishedAt: 2026-08-26 12:29:23 +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:*1a89acb4-cba5-47c2-8da3-e85f5f4103ca,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-workflowfj9fx/series-workflowfj9fx-convert-artifact-629609085/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": "243b1d05-aafe-479c-8ee4-be1795fe97e5", "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-workflowfj9fx/series-workflowfj9fx-build-action-1845940953/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-26 12:29:33 +0000 UTC FinishedAt: 2026-08-26 12:29:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-26 12:29:33 +0000 UTC FinishedAt: 2026-08-26 12:29:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-26 12:29:33 +0000 UTC FinishedAt: 2026-08-26 12:31:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-26 12:29:33 +0000 UTC FinishedAt: 2026-08-26 12:31:26 +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:*243b1d05-aafe-479c-8ee4-be1795fe97e5,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-workflowfj9fx/series-workflowfj9fx-build-action-1845940953/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-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-26 12:31:36 +0000 UTC FinishedAt: 2026-08-26 13:26:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-26 12:31:36 +0000 UTC FinishedAt: 2026-08-26 13:26:10 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*48b0b613-1f1c-4f2b-b9e6-0f899510de8c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*243b1d05-aafe-479c-8ee4-be1795fe97e5,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-workflowfj9fx/series-workflowfj9fx-build-action-2531424736/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-workflowfj9fx/series-workflowfj9fx-build-action-1845940953/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-26 12:31:36 +0000 UTC FinishedAt: 2026-08-26 12:31:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-26 12:31:36 +0000 UTC FinishedAt: 2026-08-26 12:31:41 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfj9fx/series-workflowfj9fx-convert-artifact-189508098/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-26 12:31:36 +0000 UTC FinishedAt: 2026-08-26 12:31:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-26 12:31:36 +0000 UTC FinishedAt: 2026-08-26 12:31:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-26 12:31:36 +0000 UTC FinishedAt: 2026-08-26 12:31:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-26 12:31:46 +0000 UTC FinishedAt: 2026-08-26 13:26:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfj9fx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_close","slip_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"7cecbdf8-9990-49ef-bc74-c1fd2c19cd29","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-26 12:31:46 +0000 UTC FinishedAt: 2026-08-26 13:26:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*48b0b613-1f1c-4f2b-b9e6-0f899510de8c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*243b1d05-aafe-479c-8ee4-be1795fe97e5,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-workflowfj9fx/series-workflowfj9fx-build-action-2531424736/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-workflowfj9fx/series-workflowfj9fx-build-action-1845940953/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-workflowfj9fx/series-workflowfj9fx-convert-artifact-189508098/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,}