Name: series-workflowj2dtm Phase: Succeeded StartedAt: 2026-07-30 00:05:17 +0000 UTC FinishedAt: 2026-07-30 03:37:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2dtm[0] Phase: Succeeded StartedAt: 2026-07-30 00:05:17 +0000 UTC FinishedAt: 2026-07-30 00:13:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2dtm[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 00:05:17 +0000 UTC FinishedAt: 2026-07-30 00:13:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "e095f249e2209674f6366f6db0383a2b96e19239", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "INFINIBAND", "DIBS", "DIBS_LO", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "e095f249e2209674f6366f6db0383a2b96e19239", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "INFINIBAND", "DIBS", "DIBS_LO", "INET" ], "series_id": "91c9aff2-05fe-4f62-ac1b-86fea6a4fce2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "smc_buf_create", "smcd_buf_attach", "smcd_cdc_msg_send", "smc_cdc_msg_send" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMwIDAwOjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0RJQlMmIzM0OywKICAgICYjMzQ7RElCU19MTyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c21jX2J1Zl9jcmVhdGUmIzM0OywKICAgICYjMzQ7c21jZF9idWZfYXR0YWNoJiMzNDssCiAgICAmIzM0O3NtY2RfY2RjX21zZ19zZW5kJiMzNDssCiAgICAmIzM0O3NtY19jZGNfbXNnX3NlbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgU01DLUQgRE1CLW5vY29weSBjb25uZWN0aW9uIHNldHVwIHBhdGggd2hlcmUgYSBjb25jdXJyZW50IENEQyByZWNlaXZlIGhhbmRsZXIgY291bGQgb2JzZXJ2ZSBhbiB1bmluaXRpYWxpemVkIHNlbmQgb3IgcmVjZWl2ZSBidWZmZXIuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGNvbm5lY3Rpb24gc2V0dXAgYW5kIGJ1ZmZlciBjcmVhdGlvbi9hdHRhY2htZW50LCBhcyB3ZWxsIGFzIENEQyBtZXNzYWdlIHNlbmRpbmcgdG8gdHJpZ2dlciB0aGUgcmVjZWl2ZSBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAwOjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjcwY2M5NDE0ZTdmMTc0NzFiMTU1NjE2NzM0NzU4ZDNjZjQwNDQ1Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDAwOjA5OjQ2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2NkYy5jIGIvbmV0L3NtYy9zbWNfY2RjLmNcbmluZGV4IDMyZDZkMDNkZjMyMTQuLmVhNjFiMWU3NWM3MmMgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19jZGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfY2RjLmNcbkBAIC0zMzIsOCAmIzQzOzMzMiwyMCBAQCBzdGF0aWMgdm9pZCBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbihzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcbiB7XG4gXHR1bmlvbiBzbWNfaG9zdF9jdXJzb3IgY29uc19vbGQsIHByb2Rfb2xkO1xuIFx0c3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uID0gXHUwMDI2c21jLVx1MDAzZWNvbm47XG4mIzQzO1x0c3RydWN0IHNtY19idWZfZGVzYyAqc25kYnVmX2Rlc2M7XG4gXHRpbnQgZGlmZl9jb25zLCBkaWZmX3Byb2QsIGRpZmZfdHg7XG4gXG4mIzQzO1x0LyogQWNxdWlyZSB0aGUgc2VuZCBidWZmZXIgb25jZSwgcGFpcmluZyB3aXRoIHRoZSBzbXBfc3RvcmVfcmVsZWFzZSgpIGluXG4mIzQzO1x0ICogX19zbWNfYnVmX2NyZWF0ZSgpL3NtY2RfYnVmX2F0dGFjaCgpLiAgT24gdGhlIFNNQy1EIERNQi1ub2NvcHkgcGF0aFxuJiM0MztcdCAqIHRoZSBnaG9zdCBzbmRidWZfZGVzYyBpcyBhdHRhY2hlZCBvbmx5IGFmdGVyIHRoZSBjb25uZWN0aW9uIGlzIGFscmVhZHlcbiYjNDM7XHQgKiByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UsIHNvIGl0IGNhbiBzdGlsbCBiZSB1bnNldCBoZXJlOyBldmVyeVxuJiM0MztcdCAqIHNuZGJ1Zl9kZXNjIGNvbnN1bWVyIGJlbG93ICh0aGUgbm9jb3B5IGFjY291bnRpbmcgYW5kIHRoZSBzbmRidWZcbiYjNDM7XHQgKiBjb25zdW1lciB0cmlnZ2VyLCB3aGljaCBkZXJlZmVyZW5jZXMgaXQgdmlhIHNtY190eF9wcmVwYXJlZF9zZW5kcygpKVxuJiM0MztcdCAqIGlzIHNraXBwZWQgd2hpbGUgaXQgaXMgTlVMTCB0byBhdm9pZCBhIE5VTEwgZGVyZWYgYW5kIGEgbG9hZCBvZiBhblxuJiM0MztcdCAqIHVuaW5pdGlhbGlzZWQgYnVmZmVyLlxuJiM0MztcdCAqL1xuJiM0MztcdHNuZGJ1Zl9kZXNjID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZjb25uLVx1MDAzZXNuZGJ1Zl9kZXNjKTtcbiYjNDM7XG4gXHRzbWNfY3Vyc19jb3B5KFx1MDAyNnByb2Rfb2xkLCBcdTAwMjZjb25uLVx1MDAzZWxvY2FsX3J4X2N0cmwucHJvZCwgY29ubik7XG4gXHRzbWNfY3Vyc19jb3B5KFx1MDAyNmNvbnNfb2xkLCBcdTAwMjZjb25uLVx1MDAzZWxvY2FsX3J4X2N0cmwuY29ucywgY29ubik7XG4gXHRzbWNfY2RjX21zZ190b19ob3N0KFx1MDAyNmNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybCwgY2RjLCBjb25uKTtcbkBAIC0zNTEsMTQgJiM0MzszNjMsMTcgQEAgc3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXG4gXG4gXHRcdC8qIGlmIGxvY2FsIHNuZGJ1ZiBzaGFyZXMgdGhlIHNhbWUgbWVtb3J5IHJlZ2lvbiB3aXRoXG4gXHRcdCAqIHBlZXIgUk1CLCB0aGVuIHVwZGF0ZSB0eF9jdXJzX2ZpbiBhbmQgc25kYnVmX3NwYWNlXG4tXHRcdCAqIGhlcmUgc2luY2UgcGVlciBoYXMgYWxyZWFkeSBjb25zdW1lZCB0aGUgZGF0YS5cbiYjNDM7XHRcdCAqIGhlcmUgc2luY2UgcGVlciBoYXMgYWxyZWFkeSBjb25zdW1lZCB0aGUgZGF0YS4gIFRoZSBnaG9zdFxuJiM0MztcdFx0ICogc25kYnVmX2Rlc2MgKGFjcXVpcmVkIGFib3ZlKSBtYXkgc3RpbGwgYmUgdW5zZXQgaW4gdGhlIFNNQy1EXG4mIzQzO1x0XHQgKiBETUItbm9jb3B5IHNldHVwIHdpbmRvdywgc28gc2tpcCB0aGUgdXBkYXRlIHdoaWxlIGl0IGlzIE5VTEwuXG4gXHRcdCAqL1xuIFx0XHRpZiAoY29ubi1cdTAwM2VsZ3ItXHUwMDNlaXNfc21jZCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KGNvbm4tXHUwMDNlbGdyLVx1MDAzZXNtY2QpKSB7XG4mIzQzO1x0XHQgICAgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi1cdTAwM2VsZ3ItXHUwMDNlc21jZCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgc25kYnVmX2Rlc2MpIHtcbiBcdFx0XHQvKiBDYWxjdWxhdGUgY29uc3VtZWQgZGF0YSBhbmRcbiBcdFx0XHQgKiBpbmNyZW1lbnQgZnJlZSBzZW5kIGJ1ZmZlciBzcGFjZS5cbiBcdFx0XHQgKi9cbi1cdFx0XHRkaWZmX3R4ID0gc21jX2N1cnNfZGlmZihjb25uLVx1MDAzZXNuZGJ1Zl9kZXNjLVx1MDAzZWxlbixcbiYjNDM7XHRcdFx0ZGlmZl90eCA9IHNtY19jdXJzX2RpZmYoc25kYnVmX2Rlc2MtXHUwMDNlbGVuLFxuIFx0XHRcdFx0XHRcdFx1MDAyNmNvbm4tXHUwMDNldHhfY3Vyc19maW4sXG4gXHRcdFx0XHRcdFx0XHUwMDI2Y29ubi1cdTAwM2Vsb2NhbF9yeF9jdHJsLmNvbnMpO1xuIFx0XHRcdC8qIGluY3JlYXNlIGxvY2FsIHNuZGJ1ZiBzcGFjZSBhbmQgZmluX2N1cnMgKi9cbkBAIC0zOTEsMTAgJiM0Mzs0MDYsMTUgQEAgc3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXG4gXHRcdFx0Y29ubi1cdTAwM2V1cmdfc3RhdGUgPSBTTUNfVVJHX05PVFlFVDtcbiBcdH1cbiBcbi1cdC8qIHRyaWdnZXIgc25kYnVmIGNvbnN1bWVyOiBSRE1BIHdyaXRlIGludG8gcGVlciBSTUJFIGFuZCBDREMgKi9cbi1cdGlmICgoZGlmZl9jb25zIFx1MDAyNlx1MDAyNiBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoY29ubikpIHx8XG4tXHQgICAgY29ubi1cdTAwM2Vsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MuY29uc19jdXJzX3VwZF9yZXEgfHxcbi1cdCAgICBjb25uLVx1MDAzZWxvY2FsX3J4X2N0cmwucHJvZF9mbGFncy51cmdfZGF0YV9wZW5kaW5nKSB7XG4mIzQzO1x0LyogdHJpZ2dlciBzbmRidWYgY29uc3VtZXI6IFJETUEgd3JpdGUgaW50byBwZWVyIFJNQkUgYW5kIENEQy5cbiYjNDM7XHQgKiBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoKSBhbmQgc21jX3R4X3BlbmRpbmcoKSBkZXJlZmVyZW5jZSBzbmRidWZfZGVzYyxcbiYjNDM7XHQgKiBzbyBza2lwIHRoZSB3aG9sZSB0cmlnZ2VyIHdoaWxlIGl0IGlzIHVuc2V0ICh0aGUgU01DLUQgRE1CLW5vY29weVxuJiM0MztcdCAqIHNldHVwIHdpbmRvdyk6IHRoZXJlIGlzIG5vdGhpbmcgdG8gc2VuZCB3aXRob3V0IGEgc2VuZCBidWZmZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNuZGJ1Zl9kZXNjIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoKGRpZmZfY29ucyBcdTAwMjZcdTAwMjYgc21jX3R4X3ByZXBhcmVkX3NlbmRzKGNvbm4pKSB8fFxuJiM0MztcdCAgICAgY29ubi1cdTAwM2Vsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MuY29uc19jdXJzX3VwZF9yZXEgfHxcbiYjNDM7XHQgICAgIGNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybC5wcm9kX2ZsYWdzLnVyZ19kYXRhX3BlbmRpbmcpKSB7XG4gXHRcdGlmICghc29ja19vd25lZF9ieV91c2VyKFx1MDAyNnNtYy1cdTAwM2VzaykpXG4gXHRcdFx0c21jX3R4X3BlbmRpbmcoY29ubik7XG4gXHRcdGVsc2VcbkBAIC00NDMsMTMgJiM0Mzs0NjMsMjEgQEAgc3RhdGljIHZvaWQgc21jZF9jZGNfcnhfdHNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcbiB7XG4gXHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBmcm9tX3Rhc2tsZXQoY29ubiwgdCwgcnhfdHNrbGV0KTtcbiBcdHN0cnVjdCBzbWNkX2NkY19tc2cgKmRhdGFfY2RjO1xuJiM0MztcdHN0cnVjdCBzbWNfYnVmX2Rlc2MgKnJtYl9kZXNjO1xuIFx0c3RydWN0IHNtY2RfY2RjX21zZyBjZGM7XG4gXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYztcbiBcbiBcdGlmICghY29ubiB8fCBjb25uLVx1MDAzZWtpbGxlZClcbiBcdFx0cmV0dXJuO1xuJiM0MztcdC8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogdGhlIGNvbm5lY3Rpb25cbiYjNDM7XHQgKiBpcyBwdWJsaXNoZWQgYmVmb3JlIGl0cyBSTUIgaXMgYWxsb2NhdGVkLCBzbyBiYWlsIHdoaWxlIHJtYl9kZXNjIGlzXG4mIzQzO1x0ICogdW5zZXQgdG8gYXZvaWQgYSBOVUxMIGRlcmVmIGFuZCBhIGxvYWQgb2YgYW4gdW5pbml0aWFsaXNlZCBidWZmZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0cm1iX2Rlc2MgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNmNvbm4tXHUwMDNlcm1iX2Rlc2MpO1xuJiM0MztcdGlmICghcm1iX2Rlc2MpXG4mIzQzO1x0XHRyZXR1cm47XG4gXG4tXHRkYXRhX2NkYyA9IChzdHJ1Y3Qgc21jZF9jZGNfbXNnICopY29ubi1cdTAwM2VybWJfZGVzYy1cdTAwM2VjcHVfYWRkcjtcbiYjNDM7XHRkYXRhX2NkYyA9IChzdHJ1Y3Qgc21jZF9jZGNfbXNnICopcm1iX2Rlc2MtXHUwMDNlY3B1X2FkZHI7XG4gXHRzbWNkX2N1cnNfY29weShcdTAwMjZjZGMucHJvZCwgXHUwMDI2ZGF0YV9jZGMtXHUwMDNlcHJvZCwgY29ubik7XG4gXHRzbWNkX2N1cnNfY29weShcdTAwMjZjZGMuY29ucywgXHUwMDI2ZGF0YV9jZGMtXHUwMDNlY29ucywgY29ubik7XG4gXHRzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcbkBAIC00ODMsNyAmIzQzOzUxMSwxMSBAQCBzdGF0aWMgdm9pZCBzbWNfY2RjX3J4X2hhbmRsZXIoc3RydWN0IGliX3djICp3Yywgdm9pZCAqYnVmKVxuIFx0bGdyID0gc21jX2dldF9sZ3IobGluayk7XG4gXHRyZWFkX2xvY2tfYmgoXHUwMDI2bGdyLVx1MDAzZWNvbm5zX2xvY2spO1xuIFx0Y29ubiA9IHNtY19sZ3JfZmluZF9jb25uKG50b2hsKGNkYy1cdTAwM2V0b2tlbiksIGxncik7XG4tXHRpZiAoIWNvbm4gfHwgY29ubi1cdTAwM2VvdXRfb2Zfc3luYykge1xuJiM0MztcdC8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogYmFpbCB3aGlsZSB0aGVcbiYjNDM7XHQgKiBSTUIgaXMgdW5zZXQgKHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKCkgZGVyZWZlcmVuY2VzIGl0KSB0byBhdm9pZCBhXG4mIzQzO1x0ICogTlVMTCBkZXJlZiBhbmQgYSBzdGFsZS1idWZmZXIgcmVhZCBpbiB0aGUgY29ubmVjdGlvbiBzZXR1cCB3aW5kb3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFjb25uIHx8IGNvbm4tXHUwMDNlb3V0X29mX3N5bmMgfHwgIXNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2Y29ubi1cdTAwM2VybWJfZGVzYykpIHtcbiBcdFx0cmVhZF91bmxvY2tfYmgoXHUwMDI2bGdyLVx1MDAzZWNvbm5zX2xvY2spO1xuIFx0XHRyZXR1cm47XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5jIGIvbmV0L3NtYy9zbWNfY29yZS5jXG5pbmRleCBiNDIwOGNiMTg2YzVlLi4zM2JmOWNjOTc5ZWZhIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19jb3JlLmNcbkBAIC0yNDk5LDE1ICYjNDM7MjQ5OSwyNiBAQCBzdGF0aWMgaW50IF9fc21jX2J1Zl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIGJvb2wgaXNfc21jZCwgYm9vbCBpc19ybWIpXG4gXHR9XG4gXG4gXHRpZiAoaXNfcm1iKSB7XG4tXHRcdGNvbm4tXHUwMDNlcm1iX2Rlc2MgPSBidWZfZGVzYztcbiBcdFx0Y29ubi1cdTAwM2VybWJlX3NpemVfY29tcCA9IGJ1ZnNpemVfY29tcDtcbiBcdFx0c21jLVx1MDAzZXNrLnNrX3JjdmJ1ZiA9IGJ1ZnNpemUgKiAyO1xuIFx0XHRhdG9taWNfc2V0KFx1MDAyNmNvbm4tXHUwMDNlYnl0ZXNfdG9fcmN2LCAwKTtcbiBcdFx0Y29ubi1cdTAwM2VybWJlX3VwZGF0ZV9saW1pdCA9XG4gXHRcdFx0c21jX3JtYl93bmRfdXBkYXRlX2xpbWl0KGJ1Zl9kZXNjLVx1MDAzZWxlbik7XG4mIzQzO1x0XHQvKiBQdWJsaXNoIHRoZSByZWNlaXZlIGJ1ZmZlciBsYXN0LCB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzOiB0aGVcbiYjNDM7XHRcdCAqIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSBpbiB0aGUgbGluayBncm91cCYjMzk7cyB0b2tlbiB0cmVlLCBzbyBhXG4mIzQzO1x0XHQgKiBjb25jdXJyZW50IENEQyByZWNlaXZlIGhhbmRsZXIgbXVzdCBvYnNlcnZlIHRoZSBmdWxseVxuJiM0MztcdFx0ICogaW5pdGlhbGlzZWQgcmVjZWl2ZSBzdGF0ZSBhYm92ZSAoYW5kIHRoZSBidWZmZXIpIG9uY2UgaXQgc2Vlc1xuJiM0MztcdFx0ICogYSBub24tTlVMTCBybWJfZGVzYy4gIFBhaXJzIHdpdGggdGhlIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiB0aGVcbiYjNDM7XHRcdCAqIENEQyByZWNlaXZlIHBhdGguXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmNvbm4tXHUwMDNlcm1iX2Rlc2MsIGJ1Zl9kZXNjKTtcbiBcdFx0aWYgKGlzX3NtY2QpXG4gXHRcdFx0c21jX2lzbV9zZXRfY29ubihjb25uKTsgLyogbWFwIFJNQi9zbWNkX2RldiB0byBjb25uICovXG4gXHR9IGVsc2Uge1xuJiM0MztcdFx0LyogUGxhaW4gc3RvcmU6IHRoaXMgc2VuZC1idWZmZXIgcGFzcyBydW5zIGJlZm9yZSB0aGUgUk1CIHBhc3MsXG4mIzQzO1x0XHQgKiB3aG9zZSBzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZjb25uLVx1MDAzZXJtYl9kZXNjKSB0aGVuIHB1Ymxpc2hlcyB0aGlzXG4mIzQzO1x0XHQgKiBzdG9yZSB0b28sIGFuZCB0aGUgQ0RDIHJlY2VpdmUgcGF0aCBpcyBnYXRlZCBvbiBybWJfZGVzYy5cbiYjNDM7XHRcdCAqL1xuIFx0XHRjb25uLVx1MDAzZXNuZGJ1Zl9kZXNjID0gYnVmX2Rlc2M7XG4gXHRcdHNtYy1cdTAwM2Vzay5za19zbmRidWYgPSBidWZzaXplICogMjtcbiBcdFx0YXRvbWljX3NldChcdTAwMjZjb25uLVx1MDAzZXNuZGJ1Zl9zcGFjZSwgYnVmc2l6ZSk7XG5AQCAtMjU5OSw5ICYjNDM7MjYxMCwxNiBAQCBpbnQgc21jZF9idWZfYXR0YWNoKHN0cnVjdCBzbWNfc29jayAqc21jKVxuIFx0YnVmX2Rlc2MtXHUwMDNlY3B1X2FkZHIgPVxuIFx0XHQodTggKilidWZfZGVzYy1cdTAwM2VjcHVfYWRkciAmIzQzOyBzaXplb2Yoc3RydWN0IHNtY2RfY2RjX21zZyk7XG4gXHRidWZfZGVzYy1cdTAwM2VsZW4gLT0gc2l6ZW9mKHN0cnVjdCBzbWNkX2NkY19tc2cpO1xuLVx0Y29ubi1cdTAwM2VzbmRidWZfZGVzYyA9IGJ1Zl9kZXNjO1xuLVx0Y29ubi1cdTAwM2VzbmRidWZfZGVzYy1cdTAwM2V1c2VkID0gMTtcbi1cdGF0b21pY19zZXQoXHUwMDI2Y29ubi1cdTAwM2VzbmRidWZfc3BhY2UsIGNvbm4tXHUwMDNlc25kYnVmX2Rlc2MtXHUwMDNlbGVuKTtcbiYjNDM7XHRidWZfZGVzYy1cdTAwM2V1c2VkID0gMTtcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNmNvbm4tXHUwMDNlc25kYnVmX3NwYWNlLCBidWZfZGVzYy1cdTAwM2VsZW4pO1xuJiM0MztcdC8qIFB1Ymxpc2ggdGhlIGdob3N0IHNlbmQgYnVmZmVyIGxhc3QsIHdpdGggcmVsZWFzZSBzZW1hbnRpY3M6IHRoZVxuJiM0MztcdCAqIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UgKHNtY19pc21fc2V0X2Nvbm4oKVxuJiM0MztcdCAqIHJhbiBpbiBfX3NtY19idWZfY3JlYXRlKCkpLCBzbyB0aGUgQ0RDIHJlY2VpdmUgdGFza2xldCBtdXN0IG9ic2VydmVcbiYjNDM7XHQgKiB0aGUgZnVsbHkgaW5pdGlhbGlzZWQgZ2hvc3QgYnVmZmVyIG9uY2UgaXQgc2VlcyBhIG5vbi1OVUxMXG4mIzQzO1x0ICogc25kYnVmX2Rlc2MuICBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpblxuJiM0MztcdCAqIHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2Y29ubi1cdTAwM2VzbmRidWZfZGVzYywgYnVmX2Rlc2MpO1xuIFx0cmV0dXJuIDA7XG4gXG4gZnJlZTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMDowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7LAogICAgJiMzNDtESUJTX0xPJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfYnVmX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtzbWNkX2J1Zl9hdHRhY2gmIzM0OywKICAgICYjMzQ7c21jZF9jZGNfbXNnX3NlbmQmIzM0OywKICAgICYjMzQ7c21jX2NkY19tc2dfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBTTUMtRCBETUItbm9jb3B5IGNvbm5lY3Rpb24gc2V0dXAgcGF0aCB3aGVyZSBhIGNvbmN1cnJlbnQgQ0RDIHJlY2VpdmUgaGFuZGxlciBjb3VsZCBvYnNlcnZlIGFuIHVuaW5pdGlhbGl6ZWQgc2VuZCBvciByZWNlaXZlIGJ1ZmZlci4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gY29ubmVjdGlvbiBzZXR1cCBhbmQgYnVmZmVyIGNyZWF0aW9uL2F0dGFjaG1lbnQsIGFzIHdlbGwgYXMgQ0RDIG1lc3NhZ2Ugc2VuZGluZyB0byB0cmlnZ2VyIHRoZSByZWNlaXZlIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNzBjYzk0MTRlN2YxNzQ3MWIxNTU2MTY3MzQ3NThkM2NmNDA0NDVjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMzAgMDA6MDk6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jZGMuYyBiL25ldC9zbWMvc21jX2NkYy5jCmluZGV4IDMyZDZkMDNkZjMyMTQuLmVhNjFiMWU3NWM3MmMgMTAwNjQ0Ci0tLSBhL25ldC9zbWMvc21jX2NkYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX2NkYy5jCkBAIC0zMzIsOCAmIzQzOzMzMiwyMCBAQCBzdGF0aWMgdm9pZCBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbihzdHJ1Y3Qgc21jX3NvY2sgKnNtYywKIHsKIAl1bmlvbiBzbWNfaG9zdF9jdXJzb3IgY29uc19vbGQsIHByb2Rfb2xkOwogCXN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiA9ICZhbXA7c21jLSZndDtjb25uOwomIzQzOwlzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpzbmRidWZfZGVzYzsKIAlpbnQgZGlmZl9jb25zLCBkaWZmX3Byb2QsIGRpZmZfdHg7CiAKJiM0MzsJLyogQWNxdWlyZSB0aGUgc2VuZCBidWZmZXIgb25jZSwgcGFpcmluZyB3aXRoIHRoZSBzbXBfc3RvcmVfcmVsZWFzZSgpIGluCiYjNDM7CSAqIF9fc21jX2J1Zl9jcmVhdGUoKS9zbWNkX2J1Zl9hdHRhY2goKS4gIE9uIHRoZSBTTUMtRCBETUItbm9jb3B5IHBhdGgKJiM0MzsJICogdGhlIGdob3N0IHNuZGJ1Zl9kZXNjIGlzIGF0dGFjaGVkIG9ubHkgYWZ0ZXIgdGhlIGNvbm5lY3Rpb24gaXMgYWxyZWFkeQomIzQzOwkgKiByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UsIHNvIGl0IGNhbiBzdGlsbCBiZSB1bnNldCBoZXJlOyBldmVyeQomIzQzOwkgKiBzbmRidWZfZGVzYyBjb25zdW1lciBiZWxvdyAodGhlIG5vY29weSBhY2NvdW50aW5nIGFuZCB0aGUgc25kYnVmCiYjNDM7CSAqIGNvbnN1bWVyIHRyaWdnZXIsIHdoaWNoIGRlcmVmZXJlbmNlcyBpdCB2aWEgc21jX3R4X3ByZXBhcmVkX3NlbmRzKCkpCiYjNDM7CSAqIGlzIHNraXBwZWQgd2hpbGUgaXQgaXMgTlVMTCB0byBhdm9pZCBhIE5VTEwgZGVyZWYgYW5kIGEgbG9hZCBvZiBhbgomIzQzOwkgKiB1bmluaXRpYWxpc2VkIGJ1ZmZlci4KJiM0MzsJICovCiYjNDM7CXNuZGJ1Zl9kZXNjID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO2Nvbm4tJmd0O3NuZGJ1Zl9kZXNjKTsKJiM0MzsKIAlzbWNfY3Vyc19jb3B5KCZhbXA7cHJvZF9vbGQsICZhbXA7Y29ubi0mZ3Q7bG9jYWxfcnhfY3RybC5wcm9kLCBjb25uKTsKIAlzbWNfY3Vyc19jb3B5KCZhbXA7Y29uc19vbGQsICZhbXA7Y29ubi0mZ3Q7bG9jYWxfcnhfY3RybC5jb25zLCBjb25uKTsKIAlzbWNfY2RjX21zZ190b19ob3N0KCZhbXA7Y29ubi0mZ3Q7bG9jYWxfcnhfY3RybCwgY2RjLCBjb25uKTsKQEAgLTM1MSwxNCAmIzQzOzM2MywxNyBAQCBzdGF0aWMgdm9pZCBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbihzdHJ1Y3Qgc21jX3NvY2sgKnNtYywKIAogCQkvKiBpZiBsb2NhbCBzbmRidWYgc2hhcmVzIHRoZSBzYW1lIG1lbW9yeSByZWdpb24gd2l0aAogCQkgKiBwZWVyIFJNQiwgdGhlbiB1cGRhdGUgdHhfY3Vyc19maW4gYW5kIHNuZGJ1Zl9zcGFjZQotCQkgKiBoZXJlIHNpbmNlIHBlZXIgaGFzIGFscmVhZHkgY29uc3VtZWQgdGhlIGRhdGEuCiYjNDM7CQkgKiBoZXJlIHNpbmNlIHBlZXIgaGFzIGFscmVhZHkgY29uc3VtZWQgdGhlIGRhdGEuICBUaGUgZ2hvc3QKJiM0MzsJCSAqIHNuZGJ1Zl9kZXNjIChhY3F1aXJlZCBhYm92ZSkgbWF5IHN0aWxsIGJlIHVuc2V0IGluIHRoZSBTTUMtRAomIzQzOwkJICogRE1CLW5vY29weSBzZXR1cCB3aW5kb3csIHNvIHNraXAgdGhlIHVwZGF0ZSB3aGlsZSBpdCBpcyBOVUxMLgogCQkgKi8KIAkJaWYgKGNvbm4tJmd0O2xnci0mZ3Q7aXNfc21jZCAmYW1wOyZhbXA7Ci0JCSAgICBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShjb25uLSZndDtsZ3ItJmd0O3NtY2QpKSB7CiYjNDM7CQkgICAgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi0mZ3Q7bGdyLSZndDtzbWNkKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgc25kYnVmX2Rlc2MpIHsKIAkJCS8qIENhbGN1bGF0ZSBjb25zdW1lZCBkYXRhIGFuZAogCQkJICogaW5jcmVtZW50IGZyZWUgc2VuZCBidWZmZXIgc3BhY2UuCiAJCQkgKi8KLQkJCWRpZmZfdHggPSBzbWNfY3Vyc19kaWZmKGNvbm4tJmd0O3NuZGJ1Zl9kZXNjLSZndDtsZW4sCiYjNDM7CQkJZGlmZl90eCA9IHNtY19jdXJzX2RpZmYoc25kYnVmX2Rlc2MtJmd0O2xlbiwKIAkJCQkJCSZhbXA7Y29ubi0mZ3Q7dHhfY3Vyc19maW4sCiAJCQkJCQkmYW1wO2Nvbm4tJmd0O2xvY2FsX3J4X2N0cmwuY29ucyk7CiAJCQkvKiBpbmNyZWFzZSBsb2NhbCBzbmRidWYgc3BhY2UgYW5kIGZpbl9jdXJzICovCkBAIC0zOTEsMTAgJiM0Mzs0MDYsMTUgQEAgc3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsCiAJCQljb25uLSZndDt1cmdfc3RhdGUgPSBTTUNfVVJHX05PVFlFVDsKIAl9CiAKLQkvKiB0cmlnZ2VyIHNuZGJ1ZiBjb25zdW1lcjogUkRNQSB3cml0ZSBpbnRvIHBlZXIgUk1CRSBhbmQgQ0RDICovCi0JaWYgKChkaWZmX2NvbnMgJmFtcDsmYW1wOyBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoY29ubikpIHx8Ci0JICAgIGNvbm4tJmd0O2xvY2FsX3J4X2N0cmwucHJvZF9mbGFncy5jb25zX2N1cnNfdXBkX3JlcSB8fAotCSAgICBjb25uLSZndDtsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MudXJnX2RhdGFfcGVuZGluZykgewomIzQzOwkvKiB0cmlnZ2VyIHNuZGJ1ZiBjb25zdW1lcjogUkRNQSB3cml0ZSBpbnRvIHBlZXIgUk1CRSBhbmQgQ0RDLgomIzQzOwkgKiBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoKSBhbmQgc21jX3R4X3BlbmRpbmcoKSBkZXJlZmVyZW5jZSBzbmRidWZfZGVzYywKJiM0MzsJICogc28gc2tpcCB0aGUgd2hvbGUgdHJpZ2dlciB3aGlsZSBpdCBpcyB1bnNldCAodGhlIFNNQy1EIERNQi1ub2NvcHkKJiM0MzsJICogc2V0dXAgd2luZG93KTogdGhlcmUgaXMgbm90aGluZyB0byBzZW5kIHdpdGhvdXQgYSBzZW5kIGJ1ZmZlci4KJiM0MzsJICovCiYjNDM7CWlmIChzbmRidWZfZGVzYyAmYW1wOyZhbXA7CiYjNDM7CSAgICAoKGRpZmZfY29ucyAmYW1wOyZhbXA7IHNtY190eF9wcmVwYXJlZF9zZW5kcyhjb25uKSkgfHwKJiM0MzsJICAgICBjb25uLSZndDtsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MuY29uc19jdXJzX3VwZF9yZXEgfHwKJiM0MzsJICAgICBjb25uLSZndDtsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MudXJnX2RhdGFfcGVuZGluZykpIHsKIAkJaWYgKCFzb2NrX293bmVkX2J5X3VzZXIoJmFtcDtzbWMtJmd0O3NrKSkKIAkJCXNtY190eF9wZW5kaW5nKGNvbm4pOwogCQllbHNlCkBAIC00NDMsMTMgJiM0Mzs0NjMsMjEgQEAgc3RhdGljIHZvaWQgc21jZF9jZGNfcnhfdHNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCkKIHsKIAlzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBmcm9tX3Rhc2tsZXQoY29ubiwgdCwgcnhfdHNrbGV0KTsKIAlzdHJ1Y3Qgc21jZF9jZGNfbXNnICpkYXRhX2NkYzsKJiM0MzsJc3RydWN0IHNtY19idWZfZGVzYyAqcm1iX2Rlc2M7CiAJc3RydWN0IHNtY2RfY2RjX21zZyBjZGM7CiAJc3RydWN0IHNtY19zb2NrICpzbWM7CiAKIAlpZiAoIWNvbm4gfHwgY29ubi0mZ3Q7a2lsbGVkKQogCQlyZXR1cm47CiYjNDM7CS8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogdGhlIGNvbm5lY3Rpb24KJiM0MzsJICogaXMgcHVibGlzaGVkIGJlZm9yZSBpdHMgUk1CIGlzIGFsbG9jYXRlZCwgc28gYmFpbCB3aGlsZSBybWJfZGVzYyBpcwomIzQzOwkgKiB1bnNldCB0byBhdm9pZCBhIE5VTEwgZGVyZWYgYW5kIGEgbG9hZCBvZiBhbiB1bmluaXRpYWxpc2VkIGJ1ZmZlci4KJiM0MzsJICovCiYjNDM7CXJtYl9kZXNjID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO2Nvbm4tJmd0O3JtYl9kZXNjKTsKJiM0MzsJaWYgKCFybWJfZGVzYykKJiM0MzsJCXJldHVybjsKIAotCWRhdGFfY2RjID0gKHN0cnVjdCBzbWNkX2NkY19tc2cgKiljb25uLSZndDtybWJfZGVzYy0mZ3Q7Y3B1X2FkZHI7CiYjNDM7CWRhdGFfY2RjID0gKHN0cnVjdCBzbWNkX2NkY19tc2cgKilybWJfZGVzYy0mZ3Q7Y3B1X2FkZHI7CiAJc21jZF9jdXJzX2NvcHkoJmFtcDtjZGMucHJvZCwgJmFtcDtkYXRhX2NkYy0mZ3Q7cHJvZCwgY29ubik7CiAJc21jZF9jdXJzX2NvcHkoJmFtcDtjZGMuY29ucywgJmFtcDtkYXRhX2NkYy0mZ3Q7Y29ucywgY29ubik7CiAJc21jID0gY29udGFpbmVyX29mKGNvbm4sIHN0cnVjdCBzbWNfc29jaywgY29ubik7CkBAIC00ODMsNyAmIzQzOzUxMSwxMSBAQCBzdGF0aWMgdm9pZCBzbWNfY2RjX3J4X2hhbmRsZXIoc3RydWN0IGliX3djICp3Yywgdm9pZCAqYnVmKQogCWxnciA9IHNtY19nZXRfbGdyKGxpbmspOwogCXJlYWRfbG9ja19iaCgmYW1wO2xnci0mZ3Q7Y29ubnNfbG9jayk7CiAJY29ubiA9IHNtY19sZ3JfZmluZF9jb25uKG50b2hsKGNkYy0mZ3Q7dG9rZW4pLCBsZ3IpOwotCWlmICghY29ubiB8fCBjb25uLSZndDtvdXRfb2Zfc3luYykgewomIzQzOwkvKiBQYWlyIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBfX3NtY19idWZfY3JlYXRlKCk6IGJhaWwgd2hpbGUgdGhlCiYjNDM7CSAqIFJNQiBpcyB1bnNldCAoc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oKSBkZXJlZmVyZW5jZXMgaXQpIHRvIGF2b2lkIGEKJiM0MzsJICogTlVMTCBkZXJlZiBhbmQgYSBzdGFsZS1idWZmZXIgcmVhZCBpbiB0aGUgY29ubmVjdGlvbiBzZXR1cCB3aW5kb3cuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWNvbm4gfHwgY29ubi0mZ3Q7b3V0X29mX3N5bmMgfHwgIXNtcF9sb2FkX2FjcXVpcmUoJmFtcDtjb25uLSZndDtybWJfZGVzYykpIHsKIAkJcmVhZF91bmxvY2tfYmgoJmFtcDtsZ3ItJmd0O2Nvbm5zX2xvY2spOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5jIGIvbmV0L3NtYy9zbWNfY29yZS5jCmluZGV4IGI0MjA4Y2IxODZjNWUuLjMzYmY5Y2M5NzllZmEgMTAwNjQ0Ci0tLSBhL25ldC9zbWMvc21jX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19jb3JlLmMKQEAgLTI0OTksMTUgJiM0MzsyNDk5LDI2IEBAIHN0YXRpYyBpbnQgX19zbWNfYnVmX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgYm9vbCBpc19zbWNkLCBib29sIGlzX3JtYikKIAl9CiAKIAlpZiAoaXNfcm1iKSB7Ci0JCWNvbm4tJmd0O3JtYl9kZXNjID0gYnVmX2Rlc2M7CiAJCWNvbm4tJmd0O3JtYmVfc2l6ZV9jb21wID0gYnVmc2l6ZV9jb21wOwogCQlzbWMtJmd0O3NrLnNrX3JjdmJ1ZiA9IGJ1ZnNpemUgKiAyOwogCQlhdG9taWNfc2V0KCZhbXA7Y29ubi0mZ3Q7Ynl0ZXNfdG9fcmN2LCAwKTsKIAkJY29ubi0mZ3Q7cm1iZV91cGRhdGVfbGltaXQgPQogCQkJc21jX3JtYl93bmRfdXBkYXRlX2xpbWl0KGJ1Zl9kZXNjLSZndDtsZW4pOwomIzQzOwkJLyogUHVibGlzaCB0aGUgcmVjZWl2ZSBidWZmZXIgbGFzdCwgd2l0aCByZWxlYXNlIHNlbWFudGljczogdGhlCiYjNDM7CQkgKiBjb25uZWN0aW9uIGlzIGFscmVhZHkgaW4gdGhlIGxpbmsgZ3JvdXAmIzM5O3MgdG9rZW4gdHJlZSwgc28gYQomIzQzOwkJICogY29uY3VycmVudCBDREMgcmVjZWl2ZSBoYW5kbGVyIG11c3Qgb2JzZXJ2ZSB0aGUgZnVsbHkKJiM0MzsJCSAqIGluaXRpYWxpc2VkIHJlY2VpdmUgc3RhdGUgYWJvdmUgKGFuZCB0aGUgYnVmZmVyKSBvbmNlIGl0IHNlZXMKJiM0MzsJCSAqIGEgbm9uLU5VTEwgcm1iX2Rlc2MuICBQYWlycyB3aXRoIHRoZSBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gdGhlCiYjNDM7CQkgKiBDREMgcmVjZWl2ZSBwYXRoLgomIzQzOwkJICovCiYjNDM7CQlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO2Nvbm4tJmd0O3JtYl9kZXNjLCBidWZfZGVzYyk7CiAJCWlmIChpc19zbWNkKQogCQkJc21jX2lzbV9zZXRfY29ubihjb25uKTsgLyogbWFwIFJNQi9zbWNkX2RldiB0byBjb25uICovCiAJfSBlbHNlIHsKJiM0MzsJCS8qIFBsYWluIHN0b3JlOiB0aGlzIHNlbmQtYnVmZmVyIHBhc3MgcnVucyBiZWZvcmUgdGhlIFJNQiBwYXNzLAomIzQzOwkJICogd2hvc2Ugc21wX3N0b3JlX3JlbGVhc2UoJmFtcDtjb25uLSZndDtybWJfZGVzYykgdGhlbiBwdWJsaXNoZXMgdGhpcwomIzQzOwkJICogc3RvcmUgdG9vLCBhbmQgdGhlIENEQyByZWNlaXZlIHBhdGggaXMgZ2F0ZWQgb24gcm1iX2Rlc2MuCiYjNDM7CQkgKi8KIAkJY29ubi0mZ3Q7c25kYnVmX2Rlc2MgPSBidWZfZGVzYzsKIAkJc21jLSZndDtzay5za19zbmRidWYgPSBidWZzaXplICogMjsKIAkJYXRvbWljX3NldCgmYW1wO2Nvbm4tJmd0O3NuZGJ1Zl9zcGFjZSwgYnVmc2l6ZSk7CkBAIC0yNTk5LDkgJiM0MzsyNjEwLDE2IEBAIGludCBzbWNkX2J1Zl9hdHRhY2goc3RydWN0IHNtY19zb2NrICpzbWMpCiAJYnVmX2Rlc2MtJmd0O2NwdV9hZGRyID0KIAkJKHU4ICopYnVmX2Rlc2MtJmd0O2NwdV9hZGRyICYjNDM7IHNpemVvZihzdHJ1Y3Qgc21jZF9jZGNfbXNnKTsKIAlidWZfZGVzYy0mZ3Q7bGVuIC09IHNpemVvZihzdHJ1Y3Qgc21jZF9jZGNfbXNnKTsKLQljb25uLSZndDtzbmRidWZfZGVzYyA9IGJ1Zl9kZXNjOwotCWNvbm4tJmd0O3NuZGJ1Zl9kZXNjLSZndDt1c2VkID0gMTsKLQlhdG9taWNfc2V0KCZhbXA7Y29ubi0mZ3Q7c25kYnVmX3NwYWNlLCBjb25uLSZndDtzbmRidWZfZGVzYy0mZ3Q7bGVuKTsKJiM0MzsJYnVmX2Rlc2MtJmd0O3VzZWQgPSAxOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7Y29ubi0mZ3Q7c25kYnVmX3NwYWNlLCBidWZfZGVzYy0mZ3Q7bGVuKTsKJiM0MzsJLyogUHVibGlzaCB0aGUgZ2hvc3Qgc2VuZCBidWZmZXIgbGFzdCwgd2l0aCByZWxlYXNlIHNlbWFudGljczogdGhlCiYjNDM7CSAqIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UgKHNtY19pc21fc2V0X2Nvbm4oKQomIzQzOwkgKiByYW4gaW4gX19zbWNfYnVmX2NyZWF0ZSgpKSwgc28gdGhlIENEQyByZWNlaXZlIHRhc2tsZXQgbXVzdCBvYnNlcnZlCiYjNDM7CSAqIHRoZSBmdWxseSBpbml0aWFsaXNlZCBnaG9zdCBidWZmZXIgb25jZSBpdCBzZWVzIGEgbm9uLU5VTEwKJiM0MzsJICogc25kYnVmX2Rlc2MuICBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbgomIzQzOwkgKiBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbigpLgomIzQzOwkgKi8KJiM0MzsJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDtjb25uLSZndDtzbmRidWZfZGVzYywgYnVmX2Rlc2MpOwogCXJldHVybiAwOwogCiBmcmVlOgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDcyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFNNQyBQYXRjaCBmb3IgUmFjZSBDb25kaXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBuZXQvc21jL3NtY19jZGMuY2AgYW5kIGBuZXQvc21jL3NtY19jb3JlLmNgLiBJdCBzZWVtcyB0aGV5JiMzOTtyZSBpbmplY3RpbmcgYHNtcF9sb2FkX2FjcXVpcmVgIGFuZCBgc21wX3N0b3JlX3JlbGVhc2VgIGludG8gYGNvbm4tJmd0O3NuZGJ1Zl9kZXNjYCBhbmQgYGNvbm4tJmd0O3JtYl9kZXNjYC4gVGhpcyByaW5ncyBhIGJlbGw7IHNvdW5kcyBsaWtlIHRoZXkmIzM5O3JlIHRyeWluZyB0byBhZGRyZXNzIGEgbmFzdHkgcmFjZSBjb25kaXRpb24uIFNwZWNpZmljYWxseSwgYSBjb25jdXJyZW50IENEQyByZWNlaXZlIGhhbmRsZXIgd2FzIGxpa2VseSBvYnNlcnZpbmcgYW4gdW5pbml0aWFsaXplZCBidWZmZXIsIG9yIHdvcnNlLCBhIG51bGwgcG9pbnRlci4gQWx3YXlzIGZ1biB3aGVuIGRlYWxpbmcgd2l0aCBzaGFyZWQgbWVtb3J5IGFuZCBjb25jdXJyZW5jeSwgZXNwZWNpYWxseSB3aXRoaW4gYSBjcml0aWNhbCBzdWJzeXN0ZW0gbGlrZSBTTUMuCgpUaGlzIGlzIGZ1bmN0aW9uYWwgY29kZSwgb2YgY291cnNlLCByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgc3Vic3lzdGVtLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYXBwbGllZCBjb3JyZWN0bHksIGJ1dCBhbHNvIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZpeCBmb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBTTUMgaXMgcmVhY2hhYmxlIGluIHZhcmlvdXMgdmlydHVhbGl6YXRpb24gc2NlbmFyaW9zIC0gU01DLUQgd2l0aCBJU00gbG9vcGJhY2sgb3IgZHVtbXkgSVNNLCBmb3IgaW5zdGFuY2UuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gdGVzdCBpbiB0aGVzZSBlbnZpcm9ubWVudHMgaWYgcG9zc2libGUuCgpOb3csIGxldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBjb25maWcgb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggU01DLiBJJiMzOTtsbCBmaXJlIHVwIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBzZWUgd2hhdCBvcHRpb25zIG1pZ2h0IGJlIHJlbGV2YW50IG9yIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2guIE5lZWQgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIGJlZm9yZSBkaXZpbmcgZGVlcGVyIGludG8gdGhlIGNvZGUgcmV2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTTUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvc21jL0tjb25maWc6Mjpjb25maWcgU01DXG5uZXQvc21jL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG4tLVxubmV0L3NtYy9LY29uZmlnLTEzLVxubmV0L3NtYy9LY29uZmlnOjE0OmNvbmZpZyBTTUNfRElBR1xubmV0L3NtYy9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvc21jL0tjb25maWctMjItXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxubmV0L3NtYy9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEzNwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KioKClJpZ2h0LCB0aGUga2V5IGNvbmZpZ3VyYXRpb24gc2V0dGluZyB3ZSYjMzk7cmUgbG9va2luZyBhdCBpcyBgU01DYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIE5vdywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBgU01DYCBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB0YWtlIGEgcXVpY2sgc3RlcCBiYWNrIGFuZCBjb25zaWRlciBwb3RlbnRpYWwgY2FzY2FkaW5nIGVmZmVjdHMuIFRoZXJlJiMzOTtzIGEgZGVjZW50IGNoYW5jZSB0aGlzIGBTTUNgIG9wdGlvbiB0aWVzIGludG8gb3RoZXIgZmVhdHVyZXMgb3IgbW9kdWxlcyB3aXRoaW4gdGhlIHN5c3RlbS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgKmltbWVkaWF0ZSogZGVwZW5kZW5jaWVzLCBlaXRoZXIgZXhwbGljaXQgd2l0aGluIHRoZSBjb2RlIG9yIGltcGxpZWQgYnkgYXJjaGl0ZWN0dXJhbCBkZXNpZ24sIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGJlZm9yZSBwcm9jZWVkaW5nIGZ1cnRoZXIuIEEgcXVpY2sgc2NhbiBmb3IgcmVsYXRlZCBzZXR0aW5ncywgY29kZSBwYXRocywgb3IgZXh0ZXJuYWwgaW50ZWdyYXRpb25zIGlzIGluIG9yZGVyLiBJdCYjMzk7cyBiZXN0IHRvIG1hcCBvdXQgdGhlIGJyb2FkZXIgY29udGV4dCBiZWZvcmUgem9vbWluZyBpbiBvbiB0aGUgc3BlY2lmaWNzIG9mIGBTTUNgIGl0c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZz0yPWNvbmZpZyBTTUNcbm5ldC9zbWMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbm5ldC9zbWMvS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBESUJTXG5uZXQvc21jL0tjb25maWctNS1cdGhlbHBcbi0tXG5uZXQvc21jL0tjb25maWc9MTQ9Y29uZmlnIFNNQ19ESUFHXG5uZXQvc21jL0tjb25maWctMTUtXHR0cmlzdGF0ZSBcJiMzNDtTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xubmV0L3NtYy9LY29uZmlnOjE2Olx0ZGVwZW5kcyBvbiBTTUNcbm5ldC9zbWMvS2NvbmZpZy0xNy1cdGhlbHBcbi0tXG5uZXQvc21jL0tjb25maWc9MjM9Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxubmV0L3NtYy9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XCYjMzQ7XG5uZXQvc21jL0tjb25maWc6MjU6XHRkZXBlbmRzIG9uIFNNQyBcdTAwMjZcdTAwMjYgQlBGX0pJVCBcdTAwMjZcdTAwMjYgQlBGX1NZU0NBTExcbm5ldC9zbWMvS2NvbmZpZy0yNi1cdGRlZmF1bHQgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MjMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKktjb25maWcgRGVwZW5kZW5jeSBDaGVjayoqCgpPa2F5LCBzbyB0aGUgY29kZSBpbiBxdWVzdGlvbiBoYXMgYSBkZXBlbmRlbmN5IGNoYWluIHRoYXQgaW52b2x2ZXMgYElORVRgLCBgSU5GSU5JQkFORGAsIGFuZCBgRElCU2AuIFRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhlc2UgZGVwZW5kZW5jaWVzLCBzbyByYXRoZXIgdGhhbiByZWx5IG9uIG1lbW9yeSBvciBwb3RlbnRpYWxseSBvdXRkYXRlZCBkb2N1bWVudGF0aW9uLCBsZXQmIzM5O3MgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGhlIEtjb25maWcgZmlsZSBpbiBgbmV0L3NtYy9LY29uZmlnYCBzaG91bGQgcHJvdmlkZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIEkmIzM5O2xsIG9wZW4gdGhhdCB1cCBhbmQgdmVyaWZ5IHRoZSBleGFjdCBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZXNlIGZlYXR1cmVzIGFyZSBlbmFibGVkIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gVGhpcyBpcyB0aGUgb25seSB3YXkgdG8gYmUgY2VydGFpbiBJIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIGNhbiBhc3Nlc3MgdGhlIGltcGFjdCBvZiBjaGFuZ2VzIG9yIHBvdGVudGlhbCBjb25mbGljdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgU01DXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBESUJTXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIFNNQy1SIHByb3ZpZGVzIGEgXCYjMzQ7c29ja2V0cyBvdmVyIFJETUFcJiMzNDsgc29sdXRpb24gbWFraW5nIHVzZSBvZlxuICAgNzpcdFx0ICBSRE1BIG92ZXIgQ29udmVyZ2VkIEV0aGVybmV0IChSb0NFKSB0ZWNobm9sb2d5IHRvIHVwZ3JhZGVcbiAgIDg6XHRcdCAgQUZfSU5FVCBUQ1AgY29ubmVjdGlvbnMgdHJhbnNwYXJlbnRseS5cbiAgIDk6XHRcdCAgVGhlIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTTUMtUiBzb2x1dGlvbiBpcyBkZXNpZ25lZCBhc1xuICAxMDpcdFx0ICBhIHNlcGFyYXRlIHNvY2tldCBmYW1pbHkgU01DLlxuICAxMTpcdFxuICAxMjpcdFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gcnVuIFNNQyBzb2NrZXQgYXBwbGljYXRpb25zXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIFNNQ19ESUFHXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBTTUNcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgU3VwcG9ydCBmb3IgU01DIHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRvb2xzIHN1Y2ggYXNcbiAgMTk6XHRcdCAgc21jc3MuXG4gIDIwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjExMAoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDEyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvZGluZyB0aGUgRGVwZW5kZW5jaWVzKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIGBESUJTYC4uLiB3aGF0IGluIHRoZSBrZXJuZWwmIzM5O3Mgd29ybGQgaXMgYERJQlNgPyBMZXQgbWUgcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdC4gQWgsIEkgc2VlLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGxpa2VseSBhIGRlcGVuZGVuY3kgcmVsYXRlZCB0byBgSU5FVGAgYW5kIGBJTkZJTklCQU5EYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgdXN1YWxseSBzZWUgdGhhdCBpbiB0aGUgc3RhbmRhcmQga2VybmVsIGNvbmZpZywgYnV0IHRoZSBkZXBlbmRlbmN5IGFsc28gaW5jbHVkZXMgYERJQlNgPyBIbW1tLi4uIEkgYW0gbm90IGZhbWlsaWFyIHdpdGggYERJQlNgLiBJIGtub3cgSSBzaG91bGQgZGVmaW5pdGVseSBpbmNsdWRlIGBTTUNgLCBgSU5FVGAsIGFuZCBgSU5GSU5JQkFORGAgYmVjYXVzZSBvZiB0aGUgY29udGV4dCwgYnV0IHRoYXQgYERJQlNgIGlzIHRocm93aW5nIG1lLiBJcyB0aGF0IGEgdHlwbz8gT3IsIGlzIHRoaXMgc29tZXRoaW5nIHNwZWNpZmljIHRvIHN5emthbGxlciwgcGVyaGFwcz8gT3IsIG1heWJlIGl0JiMzOTtzIHJlbGF0ZWQgdG8gYElQVjZgIGluIHNvbWUgd2F5PyBMZXQgbWUgZG8gYSBxdWljayBzZWFyY2ggYW5kIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBESUJTYCByZWZlcnMgdG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBESUJTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9kaWJzL0tjb25maWc6Mjpjb25maWcgRElCU1xuZHJpdmVycy9kaWJzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0RpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9kaWJzL0tjb25maWctMTMtXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoxNDpjb25maWcgRElCU19MT1xuZHJpdmVycy9kaWJzL0tjb25maWctMTUtXHRib29sIFwmIzM0O0ludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTY3CgkJCQkJCQlvdXRwdXQ6IDY5CgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wbGVtZW50YXRpb24gb2YgRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGFuZCBpdCBzZWVtcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBESUJTYCwgd2hpY2ggSSBhc3N1bWUgaXMgRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nLiBHaXZlbiB0aGF0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gdGFraW5nIGludG8gYWNjb3VudCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBgU01DYCBhbmQgYElORklOSUJBTkRgLiBJJiMzOTtsbCB3YW50IHRvIGVuc3VyZSB0aGF0IHRob3NlIGZ1bmN0aW9uYWxpdGllcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGZ1bmN0aW9uIGNhbGxzIGltcGFjdGVkIGJ5IHRoaXMgY2hhbmdlLiBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmAsIGBzbWNkX2NkY19yeF90c2tsZXRgLCBgc21jX2NkY19yeF9oYW5kbGVyYCwgYF9fc21jX2J1Zl9jcmVhdGVgLCBhbmQgYHNtY2RfYnVmX2F0dGFjaGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgYXJlYXMgYWZmZWN0ZWQgYnkgdGhlIGBESUJTYCBpbXBsZW1lbnRhdGlvbiwgbGlrZWx5IGRlYWxpbmcgd2l0aCBtZXNzYWdlIGhhbmRsaW5nLCByZWNlaXZlIHByb2Nlc3NpbmcsIGFuZCBidWZmZXIgbWFuYWdlbWVudC4KCk5leHQsIEkgbmVlZCB0byB2ZXJpZnkgd2hpY2ggb2YgdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgd2lsbCB0ZWxsIG1lIGFib3V0IHRoZWlyIHNjb3BlIGFuZCB3aGV0aGVyIHRoZXkgYXJlIG1lYW50IHRvIGJlIGF2YWlsYWJsZSBleHRlcm5hbGx5IG9yIGlmIHRoZXkgYXJlIGp1c3QgaW50ZXJuYWwgZnVuY3Rpb25zLiBUaGlzIGRldGFpbCBjYW4gcG90ZW50aWFsbHkgYWZmZWN0IG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX2NkY19tc2dfcmVjdl9hY3Rpb258c21jZF9jZGNfcnhfdHNrbGV0fHNtY19jZGNfcnhfaGFuZGxlcnxfX3NtY19idWZfY3JlYXRlfHNtY2RfYnVmX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvYWZfc21jLmM9MTQxNj1zdGF0aWMgaW50IHNtY19jb25uZWN0X2lzbShzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE0NjUtXHRpZiAoc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoc21jLVx1MDAzZWNvbm4ubGdyLVx1MDAzZXNtY2QpKSB7XG5uZXQvc21jL2FmX3NtYy5jOjE0NjY6XHRcdHJjID0gc21jZF9idWZfYXR0YWNoKHNtYyk7XG5uZXQvc21jL2FmX3NtYy5jLTE0NjctXHRcdGlmIChyYykge1xuLS1cbm5ldC9zbWMvYWZfc21jLmM9MjQ0OT1zdGF0aWMgdm9pZCBzbWNfbGlzdGVuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjU3My1cdCAgICBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShuZXdfc21jLVx1MDAzZWNvbm4ubGdyLVx1MDAzZXNtY2QpKSB7XG5uZXQvc21jL2FmX3NtYy5jOjI1NzQ6XHRcdHJjID0gc21jZF9idWZfYXR0YWNoKG5ld19zbWMpO1xubmV0L3NtYy9hZl9zbWMuYy0yNTc1LVx0XHRpZiAocmMpXG4tLVxubmV0L3NtYy9zbWNfY2RjLmM9MzA4PXN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3ZhbGlkYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2NkY19tc2cgKmNkYyxcbi0tXG5uZXQvc21jL3NtY19jZGMuYy0zMjktXG5uZXQvc21jL3NtY19jZGMuYzozMzA6c3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXG5uZXQvc21jL3NtY19jZGMuYy0zMzEtXHRcdFx0XHQgICAgc3RydWN0IHNtY19jZGNfbXNnICpjZGMpXG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtMzM4LVx0LyogQWNxdWlyZSB0aGUgc2VuZCBidWZmZXIgb25jZSwgcGFpcmluZyB3aXRoIHRoZSBzbXBfc3RvcmVfcmVsZWFzZSgpIGluXG5uZXQvc21jL3NtY19jZGMuYzozMzk6XHQgKiBfX3NtY19idWZfY3JlYXRlKCkvc21jZF9idWZfYXR0YWNoKCkuICBPbiB0aGUgU01DLUQgRE1CLW5vY29weSBwYXRoXG5uZXQvc21jL3NtY19jZGMuYy0zNDAtXHQgKiB0aGUgZ2hvc3Qgc25kYnVmX2Rlc2MgaXMgYXR0YWNoZWQgb25seSBhZnRlciB0aGUgY29ubmVjdGlvbiBpcyBhbHJlYWR5XG4tLVxubmV0L3NtYy9zbWNfY2RjLmM9NDQ3PXN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3JlY3Yoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfY2RjX21zZyAqY2RjKVxuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTQ1MC1cdGJoX2xvY2tfc29jayhcdTAwMjZzbWMtXHUwMDNlc2spO1xubmV0L3NtYy9zbWNfY2RjLmM6NDUxOlx0c21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc21jLCBjZGMpO1xubmV0L3NtYy9zbWNfY2RjLmMtNDUyLVx0YmhfdW5sb2NrX3NvY2soXHUwMDI2c21jLVx1MDAzZXNrKTtcbi0tXG5uZXQvc21jL3NtY19jZGMuYy00NjEtICovXG5uZXQvc21jL3NtY19jZGMuYzo0NjI6c3RhdGljIHZvaWQgc21jZF9jZGNfcnhfdHNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcbm5ldC9zbWMvc21jX2NkYy5jLTQ2My17XG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtNDcxLVx0XHRyZXR1cm47XG5uZXQvc21jL3NtY19jZGMuYzo0NzI6XHQvKiBQYWlyIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBfX3NtY19idWZfY3JlYXRlKCk6IHRoZSBjb25uZWN0aW9uXG5uZXQvc21jL3NtY19jZGMuYy00NzMtXHQgKiBpcyBwdWJsaXNoZWQgYmVmb3JlIGl0cyBSTUIgaXMgYWxsb2NhdGVkLCBzbyBiYWlsIHdoaWxlIHJtYl9kZXNjIGlzXG4tLVxubmV0L3NtYy9zbWNfY2RjLmM9NDkwPXZvaWQgc21jZF9jZGNfcnhfaW5pdChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG5uZXQvc21jL3NtY19jZGMuYy00OTEte1xubmV0L3NtYy9zbWNfY2RjLmM6NDkyOlx0dGFza2xldF9zZXR1cChcdTAwMjZjb25uLVx1MDAzZXJ4X3Rza2xldCwgc21jZF9jZGNfcnhfdHNrbGV0KTtcbm5ldC9zbWMvc21jX2NkYy5jLTQ5My19XG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtNDk2LVxubmV0L3NtYy9zbWNfY2RjLmM6NDk3OnN0YXRpYyB2b2lkIHNtY19jZGNfcnhfaGFuZGxlcihzdHJ1Y3QgaWJfd2MgKndjLCB2b2lkICpidWYpXG5uZXQvc21jL3NtY19jZGMuYy00OTgte1xuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTUxMy1cdGNvbm4gPSBzbWNfbGdyX2ZpbmRfY29ubihudG9obChjZGMtXHUwMDNldG9rZW4pLCBsZ3IpO1xubmV0L3NtYy9zbWNfY2RjLmM6NTE0Olx0LyogUGFpciB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gX19zbWNfYnVmX2NyZWF0ZSgpOiBiYWlsIHdoaWxlIHRoZVxubmV0L3NtYy9zbWNfY2RjLmM6NTE1Olx0ICogUk1CIGlzIHVuc2V0IChzbWNfY2RjX21zZ19yZWN2X2FjdGlvbigpIGRlcmVmZXJlbmNlcyBpdCkgdG8gYXZvaWQgYVxubmV0L3NtYy9zbWNfY2RjLmMtNTE2LVx0ICogTlVMTCBkZXJlZiBhbmQgYSBzdGFsZS1idWZmZXIgcmVhZCBpbiB0aGUgY29ubmVjdGlvbiBzZXR1cCB3aW5kb3cuXG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtNTM5LVxubmV0L3NtYy9zbWNfY2RjLmM6NTQwOnN0YXRpYyBzdHJ1Y3Qgc21jX3dyX3J4X2hhbmRsZXIgc21jX2NkY19yeF9oYW5kbGVyc1tdID0ge1xubmV0L3NtYy9zbWNfY2RjLmMtNTQxLVx0e1xubmV0L3NtYy9zbWNfY2RjLmM6NTQyOlx0XHQuaGFuZGxlclx0PSBzbWNfY2RjX3J4X2hhbmRsZXIsXG5uZXQvc21jL3NtY19jZGMuYy01NDMtXHRcdC50eXBlXHRcdD0gU01DX0NEQ19NU0dfVFlQRVxuLS1cbm5ldC9zbWMvc21jX2NkYy5jPTU1MD1pbnQgX19pbml0IHNtY19jZGNfaW5pdCh2b2lkKVxuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTU1NC1cbm5ldC9zbWMvc21jX2NkYy5jOjU1NTpcdGZvciAoaGFuZGxlciA9IHNtY19jZGNfcnhfaGFuZGxlcnM7IGhhbmRsZXItXHUwMDNlaGFuZGxlcjsgaGFuZGxlciYjNDM7JiM0MzspIHtcbm5ldC9zbWMvc21jX2NkYy5jLTU1Ni1cdFx0SU5JVF9ITElTVF9OT0RFKFx1MDAyNmhhbmRsZXItXHUwMDNlbGlzdCk7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTIzOTA9c3RhdGljIHN0cnVjdCBzbWNfYnVmX2Rlc2MgKnNtY2RfbmV3X2J1Zl9jcmVhdGUoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTI0MjUtXG5uZXQvc21jL3NtY19jb3JlLmM6MjQyNjpzdGF0aWMgaW50IF9fc21jX2J1Zl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIGJvb2wgaXNfc21jZCwgYm9vbCBpc19ybWIpXG5uZXQvc21jL3NtY19jb3JlLmMtMjQyNy17XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTI1NjE9aW50IHNtY19idWZfY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBib29sIGlzX3NtY2QpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTI1NjktXG5uZXQvc21jL3NtY19jb3JlLmM6MjU3MDpcdHJjID0gX19zbWNfYnVmX2NyZWF0ZShzbWMsIGlzX3NtY2QsIGZhbHNlKTtcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTcxLVx0aWYgKHJjKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0yNTc1LVx0LyogY3JlYXRlIHJtYiAqL1xubmV0L3NtYy9zbWNfY29yZS5jOjI1NzY6XHRyYyA9IF9fc21jX2J1Zl9jcmVhdGUoc21jLCBpc19zbWNkLCB0cnVlKTtcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTc3LVx0aWYgKHJjIFx1MDAyNlx1MDAyNiBzbWMtXHUwMDNlY29ubi5zbmRidWZfZGVzYykge1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0yNTg3LVxubmV0L3NtYy9zbWNfY29yZS5jOjI1ODg6aW50IHNtY2RfYnVmX2F0dGFjaChzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTg5LXtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMjYxNi1cdCAqIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UgKHNtY19pc21fc2V0X2Nvbm4oKVxubmV0L3NtYy9zbWNfY29yZS5jOjI2MTc6XHQgKiByYW4gaW4gX19zbWNfYnVmX2NyZWF0ZSgpKSwgc28gdGhlIENEQyByZWNlaXZlIHRhc2tsZXQgbXVzdCBvYnNlcnZlXG5uZXQvc21jL3NtY19jb3JlLmMtMjYxOC1cdCAqIHRoZSBmdWxseSBpbml0aWFsaXNlZCBnaG9zdCBidWZmZXIgb25jZSBpdCBzZWVzIGEgbm9uLU5VTExcbm5ldC9zbWMvc21jX2NvcmUuYy0yNjE5LVx0ICogc25kYnVmX2Rlc2MuICBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpblxubmV0L3NtYy9zbWNfY29yZS5jOjI2MjA6XHQgKiBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbigpLlxubmV0L3NtYy9zbWNfY29yZS5jLTI2MjEtXHQgKi9cbi0tXG5uZXQvc21jL3NtY19jb3JlLmg9NTgzPWludCBzbWNfYnVmX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgYm9vbCBpc19zbWNkKTtcbm5ldC9zbWMvc21jX2NvcmUuaDo1ODQ6aW50IHNtY2RfYnVmX2F0dGFjaChzdHJ1Y3Qgc21jX3NvY2sgKnNtYyk7XG5uZXQvc21jL3NtY19jb3JlLmgtNTg1LWludCBzbWNfdW5jb21wcmVzc19idWZzaXplKHU4IGNvbXByZXNzZWQpO1xuLS1cbm5ldC9zbWMvc21jX3J4LmMtMjktLyogY2FsbGJhY2sgaW1wbGVtZW50YXRpb24gdG8gd2FrZXVwIGNvbnN1bWVycyBibG9ja2VkIHdpdGggc21jX3J4X3dhaXQoKS5cbm5ldC9zbWMvc21jX3J4LmM6MzA6ICogaW5kaXJlY3RseSBjYWxsZWQgYnkgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oKS5cbm5ldC9zbWMvc21jX3J4LmMtMzEtICovXG4tLVxubmV0L3NtYy9zbWNfcnguYz0zNTI9aW50IHNtY19yeF9yZWN2bXNnKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L3NtYy9zbWNfcnguYy0zOTgtXHRcdGlmIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKSB7XG5uZXQvc21jL3NtY19yeC5jOjM5OTpcdFx0XHQvKiBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbigpIGNvdWxkIGhhdmUgcnVuIGFmdGVyXG5uZXQvc21jL3NtY19yeC5jLTQwMC1cdFx0XHQgKiBhYm92ZSBzbWNfcnhfcmVjdm1zZ19kYXRhX2F2YWlsYWJsZSgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzOTYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZXNzYWdlIFJlY2VwdGlvbiBhbmQgQnVmZmVyIE1hbmFnZW1lbnQgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgc21jX2NkY19tc2dfcmVjdl9hY3Rpb25gLCBgc21jZF9jZGNfcnhfdHNrbGV0YCwgYHNtY19jZGNfcnhfaGFuZGxlcmAsIGBfX3NtY19idWZfY3JlYXRlYCwgYW5kIGBzbWNkX2J1Zl9hdHRhY2hgLiBJdCBzZWVtcyBsaWtlIEkmIzM5O3ZlIG1hZGUgc29tZSBjaGFuZ2VzIHRvIGFsbCBvZiB0aGVtLiBJIHNlZSB0aGF0IGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmAsIGBzbWNkX2NkY19yeF90c2tsZXRgLCBgc21jX2NkY19yeF9oYW5kbGVyYCwgYW5kIGBfX3NtY19idWZfY3JlYXRlYCBhcmUgYWxsIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBSaWdodCwgbWVhbmluZyB0aGVpciBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBjdXJyZW50IHRyYW5zbGF0aW9uIHVuaXQuIEJ1dCBgc21jZF9idWZfYXR0YWNoYCBpcyAqbm90KiBzdGF0aWMsIHNvIHRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuCgpGdXJ0aGVybW9yZSwgYHNtY19idWZfY3JlYXRlYCBjYWxscyBgX19zbWNfYnVmX2NyZWF0ZWAsIHdoaWNoIG1ha2VzIHNlbnNlIGFzIGEga2luZCBvZiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24uIExvb2tpbmcgYXQgdGhlIGNhbGwgZmxvdywgYHNtY19jZGNfbXNnX3JlY3ZgIGNhbGxzIGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmAuIEFuZCwgZmluYWxseSwgYHNtY2RfY2RjX3J4X2luaXRgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIGBzbWNkX2NkY19yeF90c2tsZXRgLiBBbHNvLCBJJiMzOTt2ZSBnb3QgYHNtY19jZGNfcnhfaGFuZGxlcnNgIGNvbnRhaW5pbmcgYHNtY19jZGNfcnhfaGFuZGxlcmAuCgpHaXZlbiB0aGlzIG92ZXJ2aWV3LCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIHRoZSBvbmVzIEkgcmVhbGx5IG5lZWQgdG8gZm9jdXMgb24gcmlnaHQgbm93LiBUaGF0IG1lYW5zIGBzbWNkX2J1Zl9hdHRhY2hgIGFuZCBgc21jX2J1Zl9jcmVhdGVgIGFyZSB0aGUgcHJpb3JpdHkuIEkgc2hvdWxkIGNoZWNrIHdoZXRoZXIgYHNtY19jZGNfbXNnX3JlY3ZgIGlzIG5vbi1zdGF0aWMgb3Igbm90IHRvbywganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfY2RjX21zZ19yZWN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY2RjLmM9MzA4PXN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3ZhbGlkYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2NkY19tc2cgKmNkYyxcbi0tXG5uZXQvc21jL3NtY19jZGMuYy0zMjktXG5uZXQvc21jL3NtY19jZGMuYzozMzA6c3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXG5uZXQvc21jL3NtY19jZGMuYy0zMzEtXHRcdFx0XHQgICAgc3RydWN0IHNtY19jZGNfbXNnICpjZGMpXG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtNDQ2LS8qIGNhbGxlZCB1bmRlciB0YXNrbGV0IGNvbnRleHQgKi9cbm5ldC9zbWMvc21jX2NkYy5jOjQ0NzpzdGF0aWMgdm9pZCBzbWNfY2RjX21zZ19yZWN2KHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2NkY19tc2cgKmNkYylcbm5ldC9zbWMvc21jX2NkYy5jLTQ0OC17XG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtNDUwLVx0YmhfbG9ja19zb2NrKFx1MDAyNnNtYy1cdTAwM2Vzayk7XG5uZXQvc21jL3NtY19jZGMuYzo0NTE6XHRzbWNfY2RjX21zZ19yZWN2X2FjdGlvbihzbWMsIGNkYyk7XG5uZXQvc21jL3NtY19jZGMuYy00NTItXHRiaF91bmxvY2tfc29jayhcdTAwMjZzbWMtXHUwMDNlc2spO1xuLS1cbm5ldC9zbWMvc21jX2NkYy5jPTQ2Mj1zdGF0aWMgdm9pZCBzbWNkX2NkY19yeF90c2tsZXQoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KVxuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTQ4My1cdHNtYyA9IGNvbnRhaW5lcl9vZihjb25uLCBzdHJ1Y3Qgc21jX3NvY2ssIGNvbm4pO1xubmV0L3NtYy9zbWNfY2RjLmM6NDg0Olx0c21jX2NkY19tc2dfcmVjdihzbWMsIChzdHJ1Y3Qgc21jX2NkY19tc2cgKilcdTAwMjZjZGMpO1xubmV0L3NtYy9zbWNfY2RjLmMtNDg1LX1cbi0tXG5uZXQvc21jL3NtY19jZGMuYz00OTc9c3RhdGljIHZvaWQgc21jX2NkY19yeF9oYW5kbGVyKHN0cnVjdCBpYl93YyAqd2MsIHZvaWQgKmJ1Zilcbi0tXG5uZXQvc21jL3NtY19jZGMuYy01MTQtXHQvKiBQYWlyIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBfX3NtY19idWZfY3JlYXRlKCk6IGJhaWwgd2hpbGUgdGhlXG5uZXQvc21jL3NtY19jZGMuYzo1MTU6XHQgKiBSTUIgaXMgdW5zZXQgKHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKCkgZGVyZWZlcmVuY2VzIGl0KSB0byBhdm9pZCBhXG5uZXQvc21jL3NtY19jZGMuYy01MTYtXHQgKiBOVUxMIGRlcmVmIGFuZCBhIHN0YWxlLWJ1ZmZlciByZWFkIGluIHRoZSBjb25uZWN0aW9uIHNldHVwIHdpbmRvdy5cbi0tXG5uZXQvc21jL3NtY19jZGMuYy01MzQtXG5uZXQvc21jL3NtY19jZGMuYzo1MzU6XHRzbWNfY2RjX21zZ19yZWN2KHNtYywgY2RjKTtcbm5ldC9zbWMvc21jX2NkYy5jLTUzNi1vdXQ6XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTI1ODg9aW50IHNtY2RfYnVmX2F0dGFjaChzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMjYxOS1cdCAqIHNuZGJ1Zl9kZXNjLiAgUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW5cbm5ldC9zbWMvc21jX2NvcmUuYzoyNjIwOlx0ICogc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oKS5cbm5ldC9zbWMvc21jX2NvcmUuYy0yNjIxLVx0ICovXG4tLVxubmV0L3NtYy9zbWNfcnguYy0yOS0vKiBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbiB0byB3YWtldXAgY29uc3VtZXJzIGJsb2NrZWQgd2l0aCBzbWNfcnhfd2FpdCgpLlxubmV0L3NtYy9zbWNfcnguYzozMDogKiBpbmRpcmVjdGx5IGNhbGxlZCBieSBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbigpLlxubmV0L3NtYy9zbWNfcnguYy0zMS0gKi9cbi0tXG5uZXQvc21jL3NtY19yeC5jPTM1Mj1pbnQgc21jX3J4X3JlY3Ztc2coc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvc21jL3NtY19yeC5jLTM5OC1cdFx0aWYgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBSQ1ZfU0hVVERPV04pIHtcbm5ldC9zbWMvc21jX3J4LmM6Mzk5Olx0XHRcdC8qIHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKCkgY291bGQgaGF2ZSBydW4gYWZ0ZXJcbm5ldC9zbWMvc21jX3J4LmMtNDAwLVx0XHRcdCAqIGFib3ZlIHNtY19yeF9yZWN2bXNnX2RhdGFfYXZhaWxhYmxlKClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMTAKCQkJCQkJCW91dHB1dDogNjgKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNjb3BlIG9mIEZ1bmN0aW9ucyBpbiBgc21jX2NkYy5jYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHNtY19jZGNfbXNnX3JlY3ZgIGFuZCBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgbGltaXRlZCBpbiBzY29wZSB3aXRoaW4gdGhlIGBzbWNfY2RjLmNgIGZpbGUgaXRzZWxmLiBUaGF0IG1lYW5zIGl0IGNhbiYjMzk7dCBiZSBjYWxsZWQgZGlyZWN0bHkgZnJvbSBvdXRzaWRlIHRoZSBmaWxlLiBNeSBuZXh0IHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGZ1bmN0aW9ucyB0aGF0ICphcmUqIGFjY2Vzc2libGUgZnJvbSBlbHNld2hlcmUsIGFuZCB0aGVyZWZvcmUgcmVwcmVzZW50IGFuIGludGVyZmFjZSB0byB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBJIGtub3cgYHNtY2RfYnVmX2F0dGFjaGAgYW5kIGBzbWNfYnVmX2NyZWF0ZWAgYXJlIG5vbi1zdGF0aWMsIHNvIHRoZXkmIzM5O3JlIGRlZmluaXRlbHkgb24gbXkgcmFkYXIuIEJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGZpbGUgdGhhdCBhcmUgYWxzbyBleHBvc2VkIGV4dGVybmFsbHkuIExldCBtZSBxdWlja2x5IHNjYW4gdGhyb3VnaCB0aGUgc291cmNlIGFuZCBjb25maXJtIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBzbWNfY2RjLmNgIHRoYXQgSSYjMzk7dmUgbWlzc2VkLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGV4dGVybmFsIGludGVyZmFjZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jZGMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jZGMuYz0yNj1zdGF0aWMgdm9pZCBzbWNfY2RjX3R4X2hhbmRsZXIoc3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKnBuZF9zbmQsXG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtNzItXG5uZXQvc21jL3NtY19jZGMuYzo3MzppbnQgc21jX2NkY19nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcbm5ldC9zbWMvc21jX2NkYy5jLTc0LVx0XHRcdCAgc3RydWN0IHNtY19saW5rICpsaW5rLFxuLS1cbm5ldC9zbWMvc21jX2NkYy5jPTk0PXN0YXRpYyBpbmxpbmUgdm9pZCBzbWNfY2RjX2FkZF9wZW5kaW5nX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTExMS1cbm5ldC9zbWMvc21jX2NkYy5jOjExMjppbnQgc21jX2NkY19tc2dfc2VuZChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sXG5uZXQvc21jL3NtY19jZGMuYy0xMTMtXHRcdCAgICAgc3RydWN0IHNtY193cl9idWYgKndyX2J1Zixcbi0tXG5uZXQvc21jL3NtY19jZGMuYy0xNDItLyogc2VuZCBhIHZhbGlkYXRpb24gbXNnIGluZGljYXRpbmcgdGhlIG1vdmUgb2YgYSBjb25uIHRvIGFuIG90aGVyIFFQIGxpbmsgKi9cbm5ldC9zbWMvc21jX2NkYy5jOjE0MzppbnQgc21jcl9jZGNfbXNnX3NlbmRfdmFsaWRhdGlvbihzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sXG5uZXQvc21jL3NtY19jZGMuYy0xNDQtXHRcdFx0XHQgc3RydWN0IHNtY19jZGNfdHhfcGVuZCAqcGVuZCxcbi0tXG5uZXQvc21jL3NtY19jZGMuYz0xNzQ9c3RhdGljIGludCBzbWNyX2NkY19nZXRfc2xvdF9hbmRfbXNnX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTIwOC1cbm5ldC9zbWMvc21jX2NkYy5jOjIwOTppbnQgc21jX2NkY19nZXRfc2xvdF9hbmRfbXNnX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxubmV0L3NtYy9zbWNfY2RjLmMtMjEwLXtcbi0tXG5uZXQvc21jL3NtY19jZGMuYy0yMjctXG5uZXQvc21jL3NtY19jZGMuYzoyMjg6dm9pZCBzbWNfY2RjX3dhaXRfcGVuZF90eF93cihzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG5uZXQvc21jL3NtY19jZGMuYy0yMjkte1xuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTIzNi0gKi9cbm5ldC9zbWMvc21jX2NkYy5jOjIzNzppbnQgc21jZF9jZGNfbXNnX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxubmV0L3NtYy9zbWNfY2RjLmMtMjM4LXtcbi0tXG5uZXQvc21jL3NtY19jZGMuYz00NjI9c3RhdGljIHZvaWQgc21jZF9jZGNfcnhfdHNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcbi0tXG5uZXQvc21jL3NtY19jZGMuYy00ODktICovXG5uZXQvc21jL3NtY19jZGMuYzo0OTA6dm9pZCBzbWNkX2NkY19yeF9pbml0KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbm5ldC9zbWMvc21jX2NkYy5jLTQ5MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjAwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJbml0aWFsaXphdGlvbiBhbmQgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYWRkIGBzbWNkX2NkY19yeF9pbml0YCB0byB0aGUgbGlzdCBhcyB3ZWxsOyBpdOKAmXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGluaXRpYWxpemVzIHRoZSBSWCB0YXNrbGV0LiBBbmQgbGV0JiMzOTtzIG5vdCBmb3JnZXQgYHNtY19idWZfY3JlYXRlYCBhbmQgYHNtY2RfYnVmX2F0dGFjaGAuIEkmIzM5O20gZG91YmxlLWNoZWNraW5nIG5vdyB0byBjb25maXJtIHRoYXQgYHNtY2RfY2RjX3J4X2luaXRgIGlzbiYjMzk7dCBzdGF0aWMuIFllcywgZ29vZCwgaXQgaXNuJiMzOTt0LgoKQWgsIHJpZ2h0LCBub3cgSSByZW1lbWJlciwgYHNtY2RfY2RjX3J4X2luaXRgIGlzIGNhbGxlZCBkdXJpbmcgdGhlIGNvbm5lY3Rpb24gc2V0dXAgcGhhc2UuIFRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24gdGhhdCBjYW4gb2NjdXIgZHVyaW5nIHRoYXQgY29ubmVjdGlvbiBzZXR1cCwgd2hlcmUgYHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uYCBtaWdodCBiZSBjYWxsZWQgcHJlbWF0dXJlbHksIGJlZm9yZSBgY29ubi0mZ3Q7c25kYnVmX2Rlc2NgIGFuZCBgY29ubi0mZ3Q7cm1iX2Rlc2NgIGhhdmUgYmVlbiBmdWxseSBpbml0aWFsaXplZC4KCkxldCBtZSBxdWlja2x5IHJldmlldyB0aGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQ6IGBTTUNgLCBgSU5GSU5JQkFORGAsIGFuZCBgRElCU2AuIEhvbGQgb24gYSBtaW51dGXigKYgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgRElCU2AgaXMgc29tZXRoaW5nIHRoYXQmIzM5O3MgcGFydCBvZiB0aGUgc3RhbmRhcmQga2VybmVsLiBJICp0aGluayogSSBzYXcgYGRyaXZlcnMvZGlicy9LY29uZmlnYCBpbiB0aGF0IGdyZXBwZXIgb3V0cHV0LCBidXQgSSYjMzk7bSBqdXN0IHF1aWNrbHkgY29uZmlybWluZyBub3cuIEFoYSwgaXQgc2VlbXMgbGlrZSBgZHJpdmVycy9kaWJzL0tjb25maWdgIGlzbiYjMzk7dCBhY3R1YWxseSBpbiB0aGUgc3RhbmRhcmQgTGludXgga2VybmVsLiBJdCBjb3VsZCBiZSBzcGVjaWZpYyB0byBzeXprYWxsZXIsIG9yIHBlcmhhcHMgYSBjdXN0b20gZHJpdmVyLgoKT2theSwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoYXQgYERJQlNgIGlzIGluZGVlZCBsaXN0ZWQgaW4gYG5ldC9zbWMvS2NvbmZpZ2AuIFdhaXQsIHdhc24mIzM5O3Qgc3VyZSBpZiB0aGF0IHdhcyBqdXN0IGEgdHlwby4gQWgsIHllcywgYG5ldC9zbWMvS2NvbmZpZ2AgZG9lcyBoYXZlIGBkZXBlbmRzIG9uIElORVQgJmFtcDsmYW1wOyBJTkZJTklCQU5EICZhbXA7JmFtcDsgRElCU2AuIEJ1dCwgSSBkaWRuJiMzOTt0IHNlZSBESUJTIGluIHRoZSBzdGFuZGFyZCBrZXJuZWwuIFRoYXQmIzM5O3MgYSBwb2ludCBvZiBjb25mdXNpb24uIExldCBtZSBqdXN0IG9wZW4gYG5ldC9zbWMvS2NvbmZpZ2AgYWdhaW4gdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFNNQ1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU1xuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBTTUMtUiBwcm92aWRlcyBhIFwmIzM0O3NvY2tldHMgb3ZlciBSRE1BXCYjMzQ7IHNvbHV0aW9uIG1ha2luZyB1c2Ugb2ZcbiAgIDc6XHRcdCAgUkRNQSBvdmVyIENvbnZlcmdlZCBFdGhlcm5ldCAoUm9DRSkgdGVjaG5vbG9neSB0byB1cGdyYWRlXG4gICA4Olx0XHQgIEFGX0lORVQgVENQIGNvbm5lY3Rpb25zIHRyYW5zcGFyZW50bHkuXG4gICA5Olx0XHQgIFRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU01DLVIgc29sdXRpb24gaXMgZGVzaWduZWQgYXNcbiAgMTA6XHRcdCAgYSBzZXBhcmF0ZSBzb2NrZXQgZmFtaWx5IFNNQy5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHJ1biBTTUMgc29ja2V0IGFwcGxpY2F0aW9uc1xuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBTTUNfRElBR1xuICAxNTpcdFx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gU01DXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIFN1cHBvcnQgZm9yIFNNQyBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSB0b29scyBzdWNoIGFzXG4gIDE5Olx0XHQgIHNtY3NzLlxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzIyNgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlcGVuZGVuY2llcyBhbmQgQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gdGhpcyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGNvdmVyIGFsbCB0aGUgYmFzZXMuIEl0IGRlZmluaXRlbHkgaGluZ2VzIG9uIGBJTkVUYCwgYElORklOSUJBTkRgLCBhbmQgYERJQlNgLiBObyBxdWVzdGlvbiBhYm91dCB0aGF0LiBUaGVyZWZvcmUsIEkgbmVlZCB0byBiZSBzdXJlIHRvIGV4cGxpY2l0bHkgaW5jbHVkZSB0aG9zZS4gV2FpdCwgYElORVRgIGlzIGFsd2F5cyB0aGVyZSwgaXNuJiMzOTt0IGl0PyBJdCYjMzk7cyBwcmV0dHkgc3RhbmRhcmQsIGJ1dCBqdXN0IHRvIGJlIHN1cmUgSSYjMzk7bGwgc3RpbGwgaW5jbHVkZSBpdC4gTm8gaGFybSBpbiBiZWluZyBleHRyYSBjYXV0aW91cywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBjb3JlIGNvbXBvbmVudHMuIE5vdywgYmVmb3JlIEkgY29tbWl0IHRvIGFueXRoaW5nLCBsZXQgbWUgZG91YmxlLWNoZWNrIGlmIGBESUJTYCBoYXMgYW55ICpvdGhlciogZGVwZW5kZW5jaWVzIEkgbWlnaHQgYmUgbWlzc2luZy4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0Y29uZmlnIERJQlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0RpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZWZhdWx0IG5cbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIChESUJTKSBpcyBhIGNvbW11bmljYXRpb24gbWV0aG9kIHRoYXRcbiAgIDc6XHRcdCAgdXNlcyBjb21tb24gcGh5c2ljYWwgKGludGVybmFsKSBtZW1vcnkgZm9yIHN5bmNocm9ub3VzIGRpcmVjdCBhY2Nlc3NcbiAgIDg6XHRcdCAgaW50byBhIHJlbW90ZSBidWZmZXIuXG4gICA5Olx0XG4gIDEwOlx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBwcm92aWRlIHRoZSBhYnN0cmFjdGlvbiBsYXllciBiZXR3ZWVuXG4gIDExOlx0XHQgIGRpYnMgZGV2aWNlcyBhbmQgZGlicyBjbGllbnRzIGxpa2UgdGhlIFNNQyBwcm90b2NvbC5cbiAgMTI6XHRcdCAgVGhlIG1vZHVsZSBuYW1lIGlzIGRpYnMuXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIERJQlNfTE9cbiAgMTU6XHRcdGJvb2wgXCYjMzQ7SW50cmEtT1Mgc2hvcnRjdXQgd2l0aCBkaWJzIGxvb3BiYWNrXCYjMzQ7XG4gIDE2Olx0XHRkZXBlbmRzIG9uIERJQlNcbiAgMTc6XHRcdGRlZmF1bHQgblxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBESUJTX0xPIGVuYWJsZXMgdGhlIGNyZWF0aW9uIG9mIGFuIHNvZnR3YXJlLWVtdWxhdGVkIGRpYnMgZGV2aWNlXG4gIDIwOlx0XHQgIG5hbWVkIGxvIHdoaWNoIGNhbiBiZSB1c2VkIGZvciB0cmFuc2ZlcnJpbmcgZGF0YSB3aGVuIGNvbW11bmljYXRpb25cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NDEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uc2lkZXJpbmcgU01DLUQgYW5kIElTTSBTdXBwb3J0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgRElCU2AgYW5kIGBESUJTX0xPYC4gUmlnaHQsIGBESUJTX0xPYCBpcyB0aGUgc29mdHdhcmUtZW11bGF0ZWQgJiMzNDtsbyYjMzQ7IGRpYnMgZGV2aWNlLiBUaGF0JiMzOTtzIGdvb2QsIGJlY2F1c2UgU01DLUQgbmVlZHMgYW4gSVNNIGRldmljZSwgYW5kIHNpbmNlIGBESUJTX0xPYCBwcm92aWRlcyBhIHZpcnR1YWxpemVkIG9uZSwgd2UgYWJzb2x1dGVseSBuZWVkIHRvIGluY2x1ZGUgaXQuIEl0JiMzOTtsbCBtYWtlIHRoaW5ncyBtdWNoIGVhc2llciBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEhtbSwgbm93IEkmIzM5O20gdGhpbmtpbmcsIFNNQy1EICpkb2VzKiB1c2UgSVNNLCBzbyBgRElCU2AgaXMgcHJvYmFibHkgdGhlIGN1c3RvbSBuYW1lIGZvciBJU00gaW4gdGhpcyBrZXJuZWwgdHJlZS4gT3IgbWF5YmUgaXQmIzM5O3MgYSBuZXcgZmVhdHVyZSwgc29tZXRoaW5nIEkgaGF2ZW4mIzM5O3Qgc2VlbiBiZWZvcmUuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGJ5IGxvb2tpbmcgYXQgYHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTE0MTY9c3RhdGljIGludCBzbWNfY29ubmVjdF9pc20oc3RydWN0IHNtY19zb2NrICpzbWMsXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xNDY0LVxubmV0L3NtYy9hZl9zbWMuYzoxNDY1Olx0aWYgKHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KHNtYy1cdTAwM2Vjb25uLmxnci1cdTAwM2VzbWNkKSkge1xubmV0L3NtYy9hZl9zbWMuYy0xNDY2LVx0XHRyYyA9IHNtY2RfYnVmX2F0dGFjaChzbWMpO1xuLS1cbm5ldC9zbWMvYWZfc21jLmM9MjQ0OT1zdGF0aWMgdm9pZCBzbWNfbGlzdGVuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjU3Mi1cdGlmIChpbmktXHUwMDNlaXNfc21jZCBcdTAwMjZcdTAwMjZcbm5ldC9zbWMvYWZfc21jLmM6MjU3MzpcdCAgICBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShuZXdfc21jLVx1MDAzZWNvbm4ubGdyLVx1MDAzZXNtY2QpKSB7XG5uZXQvc21jL2FmX3NtYy5jLTI1NzQtXHRcdHJjID0gc21jZF9idWZfYXR0YWNoKG5ld19zbWMpO1xuLS1cbm5ldC9zbWMvc21jX2NkYy5jPTIzNz1pbnQgc21jZF9jZGNfbXNnX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTI1OS1cbm5ldC9zbWMvc21jX2NkYy5jOjI2MDpcdGlmIChzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShjb25uLVx1MDAzZWxnci1cdTAwM2VzbWNkKSlcbm5ldC9zbWMvc21jX2NkYy5jLTI2MS1cdFx0LyogaWYgbG9jYWwgc25kYnVmIHNoYXJlcyB0aGUgc2FtZSBtZW1vcnkgcmVnaW9uIHdpdGhcbi0tXG5uZXQvc21jL3NtY19jZGMuYz0zMzA9c3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtMzcwLVx0XHRpZiAoY29ubi1cdTAwM2VsZ3ItXHUwMDNlaXNfc21jZCBcdTAwMjZcdTAwMjZcbm5ldC9zbWMvc21jX2NkYy5jOjM3MTpcdFx0ICAgIHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KGNvbm4tXHUwMDNlbGdyLVx1MDAzZXNtY2QpIFx1MDAyNlx1MDAyNlxubmV0L3NtYy9zbWNfY2RjLmMtMzcyLVx0XHQgICAgc25kYnVmX2Rlc2MpIHtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MTI1Mz12b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xMjcyLVx0XHRcdHNtY19pc21fdW5zZXRfY29ubihjb25uKTtcbm5ldC9zbWMvc21jX2NvcmUuYzoxMjczOlx0XHRpZiAoc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkobGdyLVx1MDAzZXNtY2QpKVxubmV0L3NtYy9zbWNfY29yZS5jLTEyNzQtXHRcdFx0c21jZF9idWZfZGV0YWNoKGNvbm4pO1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuYz0xNTE1PXN0YXRpYyB2b2lkIHNtY19jb25uX2tpbGwoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLCBib29sIHNvZnQpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTE1MjctXHRcdHNtY19pc21fdW5zZXRfY29ubihjb25uKTtcbm5ldC9zbWMvc21jX2NvcmUuYzoxNTI4Olx0XHRpZiAoc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi1cdTAwM2VsZ3ItXHUwMDNlc21jZCkpXG5uZXQvc21jL3NtY19jb3JlLmMtMTUyOS1cdFx0XHRzbWNkX2J1Zl9kZXRhY2goY29ubik7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTI1NjE9aW50IHNtY19idWZfY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBib29sIGlzX3NtY2QpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTI1NjYtXHRpZiAoaXNfc21jZCBcdTAwMjZcdTAwMjZcbm5ldC9zbWMvc21jX2NvcmUuYzoyNTY3Olx0ICAgIHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KHNtYy1cdTAwM2Vjb25uLmxnci1cdTAwM2VzbWNkKSlcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTY4LVx0XHRnb3RvIGNyZWF0ZV9ybWI7XG4tLVxubmV0L3NtYy9zbWNfaXNtLmM9MjM1PWludCBzbWNfaXNtX3JlZ2lzdGVyX2RtYihzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciwgaW50IGRtYl9sZW4sXG4tLVxubmV0L3NtYy9zbWNfaXNtLmMtMjU5LVxubmV0L3NtYy9zbWNfaXNtLmM6MjYwOmJvb2wgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoc3RydWN0IHNtY2RfZGV2ICpzbWNkKVxubmV0L3NtYy9zbWNfaXNtLmMtMjYxLXtcbi0tXG5uZXQvc21jL3NtY19pc20uaD01MT12b2lkIHNtY19pc21fdW5yZWdpc3Rlcl9kbWIoc3RydWN0IHNtY2RfZGV2ICpkZXYsXG5uZXQvc21jL3NtY19pc20uaC01Mi1cdFx0XHQgICAgc3RydWN0IHNtY19idWZfZGVzYyAqZG1iX2Rlc2MpO1xubmV0L3NtYy9zbWNfaXNtLmg6NTM6Ym9vbCBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShzdHJ1Y3Qgc21jZF9kZXYgKnNtY2QpO1xubmV0L3NtYy9zbWNfaXNtLmgtNTQtaW50IHNtY19pc21fYXR0YWNoX2RtYihzdHJ1Y3Qgc21jZF9kZXYgKmRldiwgdTY0IHRva2VuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMyOQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIHBhdGNoIGhpZ2hsaWdodHMgbW9kaWZpY2F0aW9ucyB0byBzZXZlcmFsIGZ1bmN0aW9uczogYHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uYCwgYHNtY2RfY2RjX3J4X3Rza2xldGAsIGBzbWNfY2RjX3J4X2hhbmRsZXJgLCBgX19zbWNfYnVmX2NyZWF0ZWAsIGFuZCBgc21jZF9idWZfYXR0YWNoYC4gTG9va2luZyBhdCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMsIGl0IGxvb2tzIGxpa2UgYHNtY2RfYnVmX2F0dGFjaGAgYW5kIGBzbWNfYnVmX2NyZWF0ZWAgYXJlIHRoZSBmdW5jdGlvbnMgZXhwb3NlZCBleHRlcm5hbGx5LiBIb2xkIG9uLCBgc21jZF9jZGNfcnhfaW5pdGAgaXMgYWxzbyBub24tc3RhdGljLCB0aG91Z2ggaXQgc2ltcGx5IHNldHMgdXAgYSB0YXNrbGV0IGFuZCBJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgYXR0YWNrIHN1cmZhY2UgdGhlcmUuIFNvLCB0aGUgY29yZSB0YXJnZXRzIGZvciBmdXp6aW5nLCBnaXZlbiB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaCwgYXJlIHJlYWxseSBgc21jZF9idWZfYXR0YWNoYCBhbmQgYHNtY19idWZfY3JlYXRlYC4gSG1tbSwgYnV0IG5vdyB0aGF0IEkgdGhpbmsgYWJvdXQgaXQsIGBzbWNfYnVmX2NyZWF0ZWAgaXMgdGllZCB0byBjb25uZWN0aW9uIHNldHVwLCBzbyBJIHNob3VsZCBzZWUgaG93IGl0IGlzIGNhbGxlZCBhbmQgaWYgSSBjYW4gY29udHJvbCB0aGUgaW5wdXQuIExldCBtZSBzZWUgd2hlcmUgdGhpcyBgc21jX2J1Zl9jcmVhdGVgIGlzIGNhbGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX2J1Zl9jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTEyNjc9c3RhdGljIGludCBzbWNfY29ubmVjdF9yZG1hKHN0cnVjdCBzbWNfc29jayAqc21jLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTMyMi1cdC8qIGNyZWF0ZSBzZW5kIGJ1ZmZlciBhbmQgcm1iICovXG5uZXQvc21jL2FmX3NtYy5jOjEzMjM6XHRpZiAoc21jX2J1Zl9jcmVhdGUoc21jLCBmYWxzZSkpIHtcbm5ldC9zbWMvYWZfc21jLmMtMTMyNC1cdFx0cmVhc29uX2NvZGUgPSBTTUNfQ0xDX0RFQ0xfTUVNO1xuLS1cbm5ldC9zbWMvYWZfc21jLmM9MTQxNj1zdGF0aWMgaW50IHNtY19jb25uZWN0X2lzbShzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE0NTYtXHQvKiBDcmVhdGUgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXJzICovXG5uZXQvc21jL2FmX3NtYy5jOjE0NTc6XHRyYyA9IHNtY19idWZfY3JlYXRlKHNtYywgdHJ1ZSk7XG5uZXQvc21jL2FmX3NtYy5jLTE0NTgtXHRpZiAocmMpIHtcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTIwNzQ9c3RhdGljIGludCBzbWNfbGlzdGVuX3JkbWFfaW5pdChzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMsXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0yMDg0LVx0LyogY3JlYXRlIHNlbmQgYnVmZmVyIGFuZCBybWIgKi9cbm5ldC9zbWMvYWZfc21jLmM6MjA4NTpcdGlmIChzbWNfYnVmX2NyZWF0ZShuZXdfc21jLCBmYWxzZSkpIHtcbm5ldC9zbWMvYWZfc21jLmMtMjA4Ni1cdFx0c21jX2Nvbm5fYWJvcnQobmV3X3NtYywgaW5pLVx1MDAzZWZpcnN0X2NvbnRhY3RfbG9jYWwpO1xuLS1cbm5ldC9zbWMvYWZfc21jLmM9MjA5ND1zdGF0aWMgaW50IHNtY19saXN0ZW5faXNtX2luaXQoc3RydWN0IHNtY19zb2NrICpuZXdfc21jLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjEwMy1cdC8qIENyZWF0ZSBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlcnMgKi9cbm5ldC9zbWMvYWZfc21jLmM6MjEwNDpcdHJjID0gc21jX2J1Zl9jcmVhdGUobmV3X3NtYywgdHJ1ZSk7XG5uZXQvc21jL2FmX3NtYy5jLTIxMDUtXHRpZiAocmMpIHtcbi0tXG5uZXQvc21jL3NtY19jZGMuYz0zMzA9c3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtMzM4LVx0LyogQWNxdWlyZSB0aGUgc2VuZCBidWZmZXIgb25jZSwgcGFpcmluZyB3aXRoIHRoZSBzbXBfc3RvcmVfcmVsZWFzZSgpIGluXG5uZXQvc21jL3NtY19jZGMuYzozMzk6XHQgKiBfX3NtY19idWZfY3JlYXRlKCkvc21jZF9idWZfYXR0YWNoKCkuICBPbiB0aGUgU01DLUQgRE1CLW5vY29weSBwYXRoXG5uZXQvc21jL3NtY19jZGMuYy0zNDAtXHQgKiB0aGUgZ2hvc3Qgc25kYnVmX2Rlc2MgaXMgYXR0YWNoZWQgb25seSBhZnRlciB0aGUgY29ubmVjdGlvbiBpcyBhbHJlYWR5XG4tLVxubmV0L3NtYy9zbWNfY2RjLmM9NDYyPXN0YXRpYyB2b2lkIHNtY2RfY2RjX3J4X3Rza2xldChzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtNDcxLVx0XHRyZXR1cm47XG5uZXQvc21jL3NtY19jZGMuYzo0NzI6XHQvKiBQYWlyIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBfX3NtY19idWZfY3JlYXRlKCk6IHRoZSBjb25uZWN0aW9uXG5uZXQvc21jL3NtY19jZGMuYy00NzMtXHQgKiBpcyBwdWJsaXNoZWQgYmVmb3JlIGl0cyBSTUIgaXMgYWxsb2NhdGVkLCBzbyBiYWlsIHdoaWxlIHJtYl9kZXNjIGlzXG4tLVxubmV0L3NtYy9zbWNfY2RjLmM9NDk3PXN0YXRpYyB2b2lkIHNtY19jZGNfcnhfaGFuZGxlcihzdHJ1Y3QgaWJfd2MgKndjLCB2b2lkICpidWYpXG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtNTEzLVx0Y29ubiA9IHNtY19sZ3JfZmluZF9jb25uKG50b2hsKGNkYy1cdTAwM2V0b2tlbiksIGxncik7XG5uZXQvc21jL3NtY19jZGMuYzo1MTQ6XHQvKiBQYWlyIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBfX3NtY19idWZfY3JlYXRlKCk6IGJhaWwgd2hpbGUgdGhlXG5uZXQvc21jL3NtY19jZGMuYy01MTUtXHQgKiBSTUIgaXMgdW5zZXQgKHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKCkgZGVyZWZlcmVuY2VzIGl0KSB0byBhdm9pZCBhXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTIzOTA9c3RhdGljIHN0cnVjdCBzbWNfYnVmX2Rlc2MgKnNtY2RfbmV3X2J1Zl9jcmVhdGUoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTI0MjUtXG5uZXQvc21jL3NtY19jb3JlLmM6MjQyNjpzdGF0aWMgaW50IF9fc21jX2J1Zl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIGJvb2wgaXNfc21jZCwgYm9vbCBpc19ybWIpXG5uZXQvc21jL3NtY19jb3JlLmMtMjQyNy17XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTI1Mzk9dm9pZCBzbWNfcm1iX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTI1NjAtICovXG5uZXQvc21jL3NtY19jb3JlLmM6MjU2MTppbnQgc21jX2J1Zl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIGJvb2wgaXNfc21jZClcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTYyLXtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMjU2OS1cbm5ldC9zbWMvc21jX2NvcmUuYzoyNTcwOlx0cmMgPSBfX3NtY19idWZfY3JlYXRlKHNtYywgaXNfc21jZCwgZmFsc2UpO1xubmV0L3NtYy9zbWNfY29yZS5jLTI1NzEtXHRpZiAocmMpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTI1NzUtXHQvKiBjcmVhdGUgcm1iICovXG5uZXQvc21jL3NtY19jb3JlLmM6MjU3NjpcdHJjID0gX19zbWNfYnVmX2NyZWF0ZShzbWMsIGlzX3NtY2QsIHRydWUpO1xubmV0L3NtYy9zbWNfY29yZS5jLTI1NzctXHRpZiAocmMgXHUwMDI2XHUwMDI2IHNtYy1cdTAwM2Vjb25uLnNuZGJ1Zl9kZXNjKSB7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTI1ODg9aW50IHNtY2RfYnVmX2F0dGFjaChzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMjYxNi1cdCAqIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UgKHNtY19pc21fc2V0X2Nvbm4oKVxubmV0L3NtYy9zbWNfY29yZS5jOjI2MTc6XHQgKiByYW4gaW4gX19zbWNfYnVmX2NyZWF0ZSgpKSwgc28gdGhlIENEQyByZWNlaXZlIHRhc2tsZXQgbXVzdCBvYnNlcnZlXG5uZXQvc21jL3NtY19jb3JlLmMtMjYxOC1cdCAqIHRoZSBmdWxseSBpbml0aWFsaXNlZCBnaG9zdCBidWZmZXIgb25jZSBpdCBzZWVzIGEgbm9uLU5VTExcbi0tXG5uZXQvc21jL3NtY19jb3JlLmg9NTgyPXZvaWQgc21jX3NtY3JfdGVybWluYXRlX2FsbChzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYpO1xubmV0L3NtYy9zbWNfY29yZS5oOjU4MzppbnQgc21jX2J1Zl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIGJvb2wgaXNfc21jZCk7XG5uZXQvc21jL3NtY19jb3JlLmgtNTg0LWludCBzbWNkX2J1Zl9hdHRhY2goc3RydWN0IHNtY19zb2NrICpzbWMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ3MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDcxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogU01DIFJlY2VpdmUgUGF0aCBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgc21jX2J1Zl9jcmVhdGVgIGFuZCBgc21jZF9idWZfYXR0YWNoYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24uIFRoZXkgYXJlIHRoZSBjb3JlIG9mIGJ1ZmZlciBtYW5hZ2VtZW50IGluIHRoaXMgYXJlYSwgd2hpY2ggbWFrZXMgdGhlbSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBBZnRlciBhIGxpdHRsZSBtb3JlIGRpZ2dpbmcsIEkgcmVhbGl6ZSB0aGF0IGBzbWNkX2J1Zl9hdHRhY2hgIGlzIGNhbGxlZCB3aXRoaW4gY29ubmVjdGlvbiBzZXR1cCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgc21jX2Nvbm5lY3RfaXNtYCBhbmQgYHNtY19saXN0ZW5fd29ya2AuIFRoZXNlIGFyZSByZWxhdGVkIHRvIGNvbm5lY3Rpb24gaW5pdGlhbGl6YXRpb24sIGJ1dCB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBgc21jX2NkY19tc2dfcmVjdl9hY3Rpb25gIG1pZ2h0IGJlIHRyaWdnZXJlZCBiZWZvcmUga2V5IGJ1ZmZlcnMgKGBjb25uLSZndDtzbmRidWZfZGVzY2Agb3IgYGNvbm4tJmd0O3JtYl9kZXNjYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBUaGF0JiMzOTtzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBjb2RlIGFuZCBmdXp6aW5nIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBjb3VsZCBleHBvc2UgdGhpcyBraW5kIG9mIGJ1Zy4KClNpbmNlIHdlIGFyZSBmb2N1c2VkIG9uIHRoZSByYWNlIGNvbmRpdGlvbiwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBpbmNsdWRlIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZSByZWNlaXZlIHBhdGguIGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmAgaXMgc3RhdGljLCBidXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBzbWNfY2RjX21zZ19yZWN2YCwgd2hpY2ggaXMgYWxzbyBzdGF0aWMuIFRoZXNlIGFyZSwgaW4gdHVybiwgY2FsbGVkIGJ5IGBzbWNkX2NkY19yeF90c2tsZXRgIGFuZCBgc21jX2NkY19yeF9oYW5kbGVyYC4gSSBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGFuZCBpbmNsdWRlIHRoZXNlLiBgc21jZF9jZGNfcnhfdHNrbGV0YCBpcyBhIHRhc2tsZXQgaGFuZGxlciwgYW5kIGBzbWNfY2RjX3J4X2hhbmRsZXJgIGlzIGEgd29ya3F1ZXVlL3Rhc2tsZXQgaGFuZGxlci4gVGhlIHJlY2VpdmUgcGF0aCBpcyB1bHRpbWF0ZWx5IHRyaWdnZXJlZCBieSBlaXRoZXIgdGhlIElCIGRldmljZSBvciB0aGUgSVNNIGRldmljZS4gU2luY2UgYHNtY19idWZfY3JlYXRlYCBhbmQgYHNtY2RfYnVmX2F0dGFjaGAgYXJlIGZ1bmRhbWVudGFsIHRvIHRoZSByZWNlaXZlIHByb2Nlc3MsIEkgYmVsaWV2ZSBmdXp6aW5nIHRoZXNlIHNob3VsZCBleHBvc2UgdGhlIHZ1bG5lcmFiaWxpdHkuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBsb29rIGZvciBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYHNtY19jZGMuY2AgdGhhdCBtaWdodCBiZSByZWxldmFudC4gTGV0JiMzOTtzIHNlZS4uLkkmIzM5O3ZlIGdvdCBgc21jX2NkY19nZXRfZnJlZV9zbG90YCwgYHNtY19jZGNfbXNnX3NlbmRgLCBgc21jcl9jZGNfbXNnX3NlbmRfdmFsaWRhdGlvbmAsIGBzbWNfY2RjX2dldF9zbG90X2FuZF9tc2dfc2VuZGAsIGBzbWNfY2RjX3dhaXRfcGVuZF90eF93cmAsIGBzbWNkX2NkY19tc2dfc2VuZGAsIGFuZCBgc21jZF9jZGNfcnhfaW5pdGAuIGBzbWNfYnVmX2NyZWF0ZWAgYW5kIGBzbWNkX2J1Zl9hdHRhY2hgIHdpbGwgZ28gaW50byBgRm9jdXNTeW1ib2xzYC4gVGhlbiwgYHNtY2RfY2RjX21zZ19zZW5kYCBhbmQgYHNtY19jZGNfbXNnX3NlbmRgIGxvb2sgcmVsZXZhbnQgc2luY2UgdGhleSBhbHNvIGludGVyYWN0IHdpdGggdGhlIGJ1ZmZlcnMsIHNvIHRob3NlIHdpbGwgYmUgYWRkZWQgdG9vLgoKRmluYWxseSwgSSBuZWVkIHRvIHZlcmlmeSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMuIEkmIzM5O3ZlIGdvdCBgU01DYCwgYElORklOSUJBTkRgLCBgRElCU2AsIGFuZCBgRElCU19MT2AuIEkgcmVtZW1iZXIgc2VlaW5nIHNvbWV0aGluZyBhYm91dCBgZHJpdmVycy9kaWJzL0tjb25maWdgIHdoZW4gSSB3YXMgbG9va2luZyB0aHJvdWdoIHRoZSBncmVwcGVyIG91dHB1dCwgc28gdGhhdCBpcyBjb3JyZWN0LiBJIGZvdW5kIGBESUJTYCBpbiB0aGUgYEtjb25maWdgIGZpbGUsIHNvIHRoYXQgY29uZmlybXMgaXQuIFRoZW4sIEkgcmVtZW1iZXJlZCB0aGF0IGBJTkVUYCBpcyBhbHNvIHJlcXVpcmVkIGZvciBgU01DYC4gU28sIHRoZSBuZWNlc3NhcnkgY29uZmlncyBhcmUgYFNNQ2AsIGBJTkZJTklCQU5EYCwgYERJQlNgLCBgRElCU19MT2AsIGFuZCBgSU5FVGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAwOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBESUJTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmRyaXZlcnMvZGlicy9LY29uZmlnOjI6Y29uZmlnIERJQlNcbmRyaXZlcnMvZGlicy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvZGlicy9LY29uZmlnLTEzLVxuZHJpdmVycy9kaWJzL0tjb25maWc6MTQ6Y29uZmlnIERJQlNfTE9cbmRyaXZlcnMvZGlicy9LY29uZmlnLTE1LVx0Ym9vbCBcJiMzNDtJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDA6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwNDUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBc3Nlc3NpbmcgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIEkgc2VlIHRoZSBwaWVjZXMgYXJlIGluIHBsYWNlLCB0aGUgY29yZSBjb21wb25lbnQgaXMgaW5kZWVkIHByZXNlbnQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRlbHZlIGRlZXBlciBpbnRvIGl0cyBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBtYWtlIHN1cmUgYFNNQ2AgaXNuJiMzOTt0IHJlbHlpbmcgb24gYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGNyZWF0ZSBwcm9ibGVtcyBkb3duIHRoZSBsaW5lLCBvciBpbnRyb2R1Y2UgYSBjYXNjYWRlIG9mIGlzc3VlcyBpZiBvbmUgY29tcG9uZW50IGZhaWxzLiBHb3R0YSBiZSB0aG9yb3VnaC4gVGltZSB0byBjaGVjayB0aGUgZGVwZW5kZW5jeSB0cmVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZz0yPWNvbmZpZyBTTUNcbm5ldC9zbWMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbm5ldC9zbWMvS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBESUJTXG5uZXQvc21jL0tjb25maWctNS1cdGhlbHBcbi0tXG5uZXQvc21jL0tjb25maWc9MTQ9Y29uZmlnIFNNQ19ESUFHXG5uZXQvc21jL0tjb25maWctMTUtXHR0cmlzdGF0ZSBcJiMzNDtTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xubmV0L3NtYy9LY29uZmlnOjE2Olx0ZGVwZW5kcyBvbiBTTUNcbm5ldC9zbWMvS2NvbmZpZy0xNy1cdGhlbHBcbi0tXG5uZXQvc21jL0tjb25maWc9MjM9Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxubmV0L3NtYy9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XCYjMzQ7XG5uZXQvc21jL0tjb25maWc6MjU6XHRkZXBlbmRzIG9uIFNNQyBcdTAwMjZcdTAwMjYgQlBGX0pJVCBcdTAwMjZcdTAwMjYgQlBGX1NZU0NBTExcbm5ldC9zbWMvS2NvbmZpZy0yNi1cdGRlZmF1bHQgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ0MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgY29yZSBkZXBlbmRlbmNpZXMgaGVyZSwgYW5kIGl0IGxvb2tzIGxpa2UgYElORVRgLCBgSU5GSU5JQkFORGAsIGFuZCBgRElCU2AgYXJlIHRoZSBrZXkgb25lcyBJIG5lZWQgdG8gYWRkcmVzcy4gVG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgZXhwbGljaXRseSBlbmFibGVkIGFuZCB0aGF0IEkmIzM5O20gY292ZXJpbmcgYWxsIGJhc2VzLCBJJiMzOTttIGdvaW5nIHRvIGFkZCBgU01DYCwgYElORklOSUJBTkRgLCBgRElCU2AsIGFuZCBgRElCU19MT2AgdG8gYEVuYWJsZUNvbmZpZ3NgLiBXaGlsZSBgSU5FVGAgaXMgZ2VuZXJhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBtb3N0IHNldHVwcywgSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIGl0IGp1c3QgZm9yIGNsYXJpdHkgYW5kIHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2guCgpOZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgYElORklOSUJBTkRgIGl0c2VsZiBoYXMgYW55IGZ1cnRoZXIgZGVwZW5kZW5jaWVzIHRoYXQgSSBzaG91bGQgYWxzbyBiZSBhd2FyZSBvZi4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgbmVlZHMgZW5hYmxpbmcgdG8gZ2V0IHRoYXQgcnVubmluZyBzbW9vdGhseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORklOSUJBTkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzoyOm1lbnVjb25maWcgSU5GSU5JQkFORFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTE2PWlmIElORklOSUJBTkRcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTE3LVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6MTg6Y29uZmlnIElORklOSUJBTkRfVVNFUl9NQURcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTE5LVx0dHJpc3RhdGUgXCYjMzQ7SW5maW5pQmFuZCB1c2Vyc3BhY2UgTUFEIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0yNy1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjI4OmNvbmZpZyBJTkZJTklCQU5EX1VTRVJfQUNDRVNTXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgdXNlcnNwYWNlIGFjY2VzcyAodmVyYnMgYW5kIENNKVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTM5LVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NDA6Y29uZmlnIElORklOSUJBTkRfVVNFUl9BQ0NFU1NfQ09SRVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDEtXHRib29sXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDMtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo0NDpjb25maWcgSU5GSU5JQkFORF9VU0VSX01FTVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDUtXHRib29sXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNTAtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo1MTpjb25maWcgSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy01Mi1cdGJvb2wgXCYjMzQ7SW5maW5pQmFuZCBvbi1kZW1hbmQgcGFnaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy02My1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjY0OmNvbmZpZyBJTkZJTklCQU5EX0FERFJfVFJBTlNcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTY1LVx0Ym9vbCBcJiMzNDtSRE1BL0NNXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNzEtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo3Mjpjb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TX0NPTkZJR0ZTXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03My1cdGJvb2xcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy04MC1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjgxOmNvbmZpZyBJTkZJTklCQU5EX1ZJUlRfRE1BXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy04Mi1cdGRlZl9ib29sICFISUdITUVNXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JuZ19yZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm5nX3JlL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9CTkdfUkVcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibmdfcmUvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gTmV4dCBnZW5lcmF0aW9uIFJvQ0UgSENBIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfQk5YVF9SRVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gTmV0eHRyZW1lIEhDQSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfQ1hHQjRcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtDaGVsc2lvIFQ0L1Q1IFJETUEgRHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9LY29uZmlnLTYtXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL0tjb25maWc6Nzpjb25maWcgSU5GSU5JQkFORF9FRkFcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvS2NvbmZpZy04LVx0dHJpc3RhdGUgXCYjMzQ7QW1hem9uIEVsYXN0aWMgRmFicmljIEFkYXB0ZXIgKEVGQSkgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0VSRE1BXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QWxpYmFiYSBFbGFzdGljIFJETUEgQWRhcHRlciAoRVJETUEpIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSEZJMVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7Q29ybmVsaXMgT1BYIEdlbjEgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSE5TX0hJUDA4XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0hpc2lsaWNvbiBIaXAwOCBGYW1pbHkgUm9DRSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL0tjb25maWctMy1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9LY29uZmlnOjQ6Y29uZmlnIElORklOSUJBTkRfSU9OSUNcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9LY29uZmlnLTUtXHR0cmlzdGF0ZSBcJiMzNDtBTUQgUGVuc2FuZG8gRFNDIFJETUEvUm9DRSBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSVJETUFcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbChSKSBFdGhlcm5ldCBQcm90b2NvbCBEcml2ZXIgZm9yIFJETUFcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9NVEhDQVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01lbGxhbm94IEhDQSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWctOS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnOjEwOmNvbmZpZyBJTkZJTklCQU5EX01USENBX0RFQlVHXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0xMS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfT0NSRE1BXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0VtdWxleCBPbmUgQ29ubmVjdCBIQ0Egc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9xZWRyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9xZWRyL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9RRURSXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvcWVkci9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtRTG9naWMgUm9DRSBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9VU05JQ1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1ZlcmJzIHN1cHBvcnQgZm9yIENpc2NvIFZJQ1wmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody92bXdfcHZyZG1hL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody92bXdfcHZyZG1hL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9WTVdBUkVfUFZSRE1BXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdm13X3B2cmRtYS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtWTXdhcmUgUGFyYXZpcnR1YWxpemVkIFJETUEgRHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3JkbWF2dC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcmRtYXZ0L0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9SRE1BVlRcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yZG1hdnQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7UkRNQSB2ZXJicyB0cmFuc3BvcnQgbGlicmFyeVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSVBPSUJcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SVAtb3Zlci1JbmZpbmlCYW5kXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTExLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjEyOmNvbmZpZyBJTkZJTklCQU5EX0lQT0lCX0NNXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMTMtXHRib29sIFwmIzM0O0lQLW92ZXItSW5maW5pQmFuZCBDb25uZWN0ZWQgTW9kZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTI2LVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjI3OmNvbmZpZyBJTkZJTklCQU5EX0lQT0lCX0RFQlVHXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMjgtXHRib29sIFwmIzM0O0lQLW92ZXItSW5maW5pQmFuZCBkZWJ1Z2dpbmdcJiMzNDsgaWYgRVhQRVJUXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTQxLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjQyOmNvbmZpZyBJTkZJTklCQU5EX0lQT0lCX0RFQlVHX0RBVEFcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy00My1cdGJvb2wgXCYjMzQ7SVAtb3Zlci1JbmZpbmlCYW5kIGRhdGEgcGF0aCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JU0VSXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7aVNDU0kgRXh0ZW5zaW9ucyBmb3IgUkRNQSAoaVNFUilcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlcnQvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0lTRVJUXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O2lTQ1NJIEV4dGVuc2lvbnMgZm9yIFJETUEgKGlTRVIpIHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctMi1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnOjM6Y29uZmlnIElORklOSUJBTkRfUlRSU1xuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNC1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNi1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnOjc6Y29uZmlnIElORklOSUJBTkRfUlRSU19DTElFTlRcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTgtXHR0cmlzdGF0ZSBcJiMzNDtSVFJTIGNsaWVudCBtb2R1bGVcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy0xNy1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnOjE4OmNvbmZpZyBJTkZJTklCQU5EX1JUUlNfU0VSVkVSXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy0xOS1cdHRyaXN0YXRlIFwmIzM0O1JUUlMgc2VydmVyIG1vZHVsZVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9TUlBcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgU0NTSSBSRE1BIFByb3RvY29sXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnB0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwdC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfU1JQVFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnB0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgU0NTSSBSRE1BIFByb3RvY29sIHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjc1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gRGVjaXNpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gcHJvY2Vzcy4gSSBzZWUgYElORklOSUJBTkRgIOKAkyBhaCwgdGhhdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBgbWVudWNvbmZpZ2Agb3B0aW9uLiBMZXQmIzM5O3MgYWRkIHRoYXQgZGlyZWN0bHkgdG8gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LiBObyBuZWVkIHRvIG92ZXJ0aGluayBpdC4KCk5leHQsIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgYElORVRgLiBJdCYjMzk7cyBhIHN0YW5kYXJkIGNvbmZpZywgc28gSSYjMzk7bGwgaW5jbHVkZSB0aGF0IGFzIHdlbGwuIEZpbmUuCgpUaGVyZWZvcmUsIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCwgYXMgaXQgY3VycmVudGx5IHN0YW5kcywgaW5jbHVkZXMgYFNNQ2AsIGBJTkZJTklCQU5EYCwgYERJQlNgLCBgRElCU19MT2AsIGFuZCBgSU5FVGAuCgpOb3csIHRpbWUgdG8gZG91YmxlLWNoZWNrIHRoZSBgRm9jdXNTeW1ib2xzYC4gTGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgcmlnaHQgb25lcy4gSSBoYXZlIGBzbWNfYnVmX2NyZWF0ZWAsIGBzbWNkX2J1Zl9hdHRhY2hgLCBgc21jZF9jZGNfbXNnX3NlbmRgLCBhbmQgYHNtY19jZGNfbXNnX3NlbmRgLi4uIAoKV2FpdCwgaG9sZCBvbiBhIHNlY29uZC4gSXQgbG9va2VkIGZvciBhIG1vbWVudCBsaWtlIGBzbWNkX2NkY19tc2dfc2VuZGAgbWlnaHQgYmUgY2FsbGVkIGZyb20gd2l0aGluIGBzbWNfY2RjX21zZ19zZW5kYCwgd2hpY2ggd291bGQgc2ltcGxpZnkgdGhpcy4gQnV0IHRoYXQmIzM5O3Mgbm90IHJpZ2h0LiBUaGV5JiMzOTtyZSBkaXN0aW5jdC4gT2theSwgbm8gY29uZnVzaW9uIHRoZXJlLiBOb3cgSSBuZWVkIHRvIGNoZWNrIGBzbWNkX2NkY19tc2dfc2VuZGAgdG8gY2xhcmlmeSBob3cgdGhhdCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jZF9jZGNfbXNnX3NlbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jZGMuYz0yMDk9aW50IHNtY19jZGNfZ2V0X3Nsb3RfYW5kX21zZ19zZW5kKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbi0tXG5uZXQvc21jL3NtY19jZGMuYy0yMTgtXHRcdHNwaW5fbG9ja19iaChcdTAwMjZjb25uLVx1MDAzZXNlbmRfbG9jayk7XG5uZXQvc21jL3NtY19jZGMuYzoyMTk6XHRcdHJjID0gc21jZF9jZGNfbXNnX3NlbmQoY29ubik7XG5uZXQvc21jL3NtY19jZGMuYy0yMjAtXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNvbm4tXHUwMDNlc2VuZF9sb2NrKTtcbi0tXG5uZXQvc21jL3NtY19jZGMuYz0yMjg9dm9pZCBzbWNfY2RjX3dhaXRfcGVuZF90eF93cihzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtMjM2LSAqL1xubmV0L3NtYy9zbWNfY2RjLmM6MjM3OmludCBzbWNkX2NkY19tc2dfc2VuZChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG5uZXQvc21jL3NtY19jZGMuYy0yMzgte1xuLS1cbm5ldC9zbWMvc21jX2NkYy5oPTI5Nz1pbnQgc21jX2NkY19nZXRfc2xvdF9hbmRfbXNnX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcbm5ldC9zbWMvc21jX2NkYy5oOjI5ODppbnQgc21jZF9jZGNfbXNnX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcbm5ldC9zbWMvc21jX2NkYy5oLTI5OS1pbnQgc21jcl9jZGNfbXNnX3NlbmRfdmFsaWRhdGlvbihzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sXG4tLVxubmV0L3NtYy9zbWNfdHguYz02MDg9c3RhdGljIGludCBzbWNkX3R4X3NuZGJ1Zl9ub25lbXB0eShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG4tLVxubmV0L3NtYy9zbWNfdHguYy02MTYtXHRpZiAoIXJjKVxubmV0L3NtYy9zbWNfdHguYzo2MTc6XHRcdHJjID0gc21jZF9jZGNfbXNnX3NlbmQoY29ubik7XG5uZXQvc21jL3NtY190eC5jLTYxOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDA6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2NTAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIENEQyBNZXNzYWdlIFNlbmRpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IHRoZXNlIENEQyBtZXNzYWdlcyBhcmUgYmVpbmcgaGFuZGxlZC4gTXkgaW5pdGlhbCBmb2N1cyBoYXMgbGFuZGVkIG9uIGBzbWNkX2NkY19tc2dfc2VuZGAuIFRoYXQmIzM5O3MgdGhlIG9uZSB0aGF0IHNlZW1zIHRvIGJlIGluIHBsYXkgcmlnaHQgbm93LiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyB0aGF0ICp0aGUqIG9ubHkgb25lPyBJdCBqdXN0IHRyaWdnZXJlZCBhIHRob3VnaHQg4oCTIEkgbmVlZCB0byBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0IHdpdGggYHNtY19jZGNfbXNnX3NlbmRgLiBJIHdvbmRlciB3aGF0IHRoZSBkaWZmZXJlbmNlIGlzLCBpZiBhbnk/IEFyZSB0aGVzZSB0d28gZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQsIG9yIGlzIHRoZXJlIGEgc3VidGxlLCBvciBtYXliZSBldmVuIHNpZ25pZmljYW50LCBkaXN0aW5jdGlvbiBpbiB0aGVpciBpbXBsZW1lbnRhdGlvbiBvciB1c2UgY2FzZXM/IFRoaXMgd2FycmFudHMgYSBkZWVwZXIgbG9vazsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgaGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBjcml0aWNhbCBieSBhc3N1bWluZyB0aGUgdXNlIG9mIG9uZSBvdmVyIHRoZSBvdGhlci4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfY2RjX21zZ19zZW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWMuaD0xOTU9c3RydWN0IHNtY19jb25uZWN0aW9uIHtcbi0tXG5uZXQvc21jL3NtYy5oLTI0MC1cdHdhaXRfcXVldWVfaGVhZF90XHRjZGNfcGVuZF90eF93cTsgLyogd2FrZXVwIG9uIG5vIGNkY19wZW5kX3R4X3dyKi9cbm5ldC9zbWMvc21jLmg6MjQxOlx0c3RydWN0IGRlbGF5ZWRfd29ya1x0dHhfd29yaztcdC8qIHJldHJ5IG9mIHNtY19jZGNfbXNnX3NlbmQgKi9cbm5ldC9zbWMvc21jLmgtMjQyLVx0dTMyXHRcdFx0dHhfb2ZmO1x0XHQvKiBiYXNlIG9mZnNldCBpbiBwZWVyIHJtYiAqL1xuLS1cbm5ldC9zbWMvc21jX2NkYy5jPTk0PXN0YXRpYyBpbmxpbmUgdm9pZCBzbWNfY2RjX2FkZF9wZW5kaW5nX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTExMS1cbm5ldC9zbWMvc21jX2NkYy5jOjExMjppbnQgc21jX2NkY19tc2dfc2VuZChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sXG5uZXQvc21jL3NtY19jZGMuYy0xMTMtXHRcdCAgICAgc3RydWN0IHNtY193cl9idWYgKndyX2J1Zixcbi0tXG5uZXQvc21jL3NtY19jZGMuYz0xNzQ9c3RhdGljIGludCBzbWNyX2NkY19nZXRfc2xvdF9hbmRfbXNnX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTIwMS1cdH1cbm5ldC9zbWMvc21jX2NkYy5jOjIwMjpcdHJjID0gc21jX2NkY19tc2dfc2VuZChjb25uLCB3cl9idWYsIHBlbmQpO1xubmV0L3NtYy9zbWNfY2RjLmMtMjAzLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y29ubi1cdTAwM2VzZW5kX2xvY2spO1xuLS1cbm5ldC9zbWMvc21jX2NkYy5oPTI5ND12b2lkIHNtY19jZGNfd2FpdF9wZW5kX3R4X3dyKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubik7XG5uZXQvc21jL3NtY19jZGMuaDoyOTU6aW50IHNtY19jZGNfbXNnX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3Qgc21jX3dyX2J1ZiAqd3JfYnVmLFxubmV0L3NtYy9zbWNfY2RjLmgtMjk2LVx0XHQgICAgIHN0cnVjdCBzbWNfY2RjX3R4X3BlbmQgKnBlbmQpO1xuLS1cbm5ldC9zbWMvc21jX3R4LmM9NTUwPXN0YXRpYyBpbnQgc21jcl90eF9zbmRidWZfbm9uZW1wdHkoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9zbWMvc21jX3R4LmMtNTk1LVxubmV0L3NtYy9zbWNfdHguYzo1OTY6XHRyYyA9IHNtY19jZGNfbXNnX3NlbmQoY29ubiwgd3JfYnVmLCBwZW5kKTtcbm5ldC9zbWMvc21jX3R4LmMtNTk3LVx0aWYgKCFyYyBcdTAwMjZcdTAwMjYgcGZsYWdzLVx1MDAzZXVyZ19kYXRhX3ByZXNlbnQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDA6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ1NTQKCQkJCQkJCW91dHB1dDogMTU3CgkJCQkJCQl0aG91Z2h0czogNDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTTUMtRCBETUItbm9jb3B5IFBhdGgqKgoKT2theSwgSSYjMzk7dmUgZ290IHRoZSBjb250ZXh0IGhlcmUuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gdGhlIFNNQy1EIERNQi1ub2NvcHkgY29ubmVjdGlvbiBzZXR1cC4gQ2xlYXJseSwgYm90aCBgc21jX2J1Zl9jcmVhdGVgIGFuZCBgc21jZF9idWZfYXR0YWNoYCBhcmUgY3JpdGljYWwgZnVuY3Rpb25zIGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UsIGFsb25nIHdpdGggYHNtY2RfY2RjX21zZ19zZW5kYCBhbmQgYHNtY19jZGNfbXNnX3NlbmRgIGFyZSBpbmNsdWRlZCBpbiBteSBmdXp6aW5nIHRhcmdldCBsaXN0LCBzbyBJJiMzOTtsbCBhZGQgdGhlbSB0byB0aGUgYEZvY3VzU3ltYm9sc2AuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIG1vZGlmaWNhdGlvbnMgdGhhdCBhcmVuJiMzOTt0IHN0YXRpYy4gR29vZCwgYHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uYCwgYHNtY19jZGNfcnhfaGFuZGxlcmAsIGBzbWNkX2NkY19yeF90c2tsZXRgLCBhbmQgYF9fc21jX2J1Zl9jcmVhdGVgIGFyZSBhbGwgc3RhdGljLCBzbyB0aGUgZm91ciBJIGlkZW50aWZpZWQgYXJlIHRoZSBvbmx5IG9uZXMgSSBuZWVkLgoKTmV4dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgRElCU2AgYW5kIGBESUJTX0xPYCBhcmUgZXNzZW50aWFsIHRvIHJlcHJvZHVjZSB0aGUgaXNzdWUuIEl0IGxvb2tzIGxpa2UgYERJQlNgIHByb3ZpZGVzIHRoZSBJU00gZGV2aWNlIGFic3RyYWN0aW9uLiBDb25zaWRlcmluZyBTTUMtRCByZXF1aXJlcyBJU00gYW5kIERNQi1ub2NvcHkgY29ubmVjdGlvbiBzZXR1cCwgdGhhdCBwYXRoIGlzIGNsZWFybHkgZ29pbmcgdG8gYmUgdHJpZ2dlcmVkLiBTbywgeWVzLCB0aGV5IGFyZSBpbmRlZWQgcmVxdWlyZWQuIGBESUJTX0xPYCBlbmFibGVzIHRoZSBsb29wYmFjayBkZXZpY2UsIHNvIGl0JiMzOTtzIGEgY3JpdGljYWwgY29tcG9uZW50LgoKV2l0aCB0aGF0IHVuZGVyc3RhbmRpbmcsIEkgY2FuIG5vdyBmb3JtdWxhdGUgYSBjb25jaXNlIHJlc3BvbnNlIGZvciBteSByZXN1bHRzLgoKSGVyZSYjMzk7cyBteSBjb25jbHVzaW9uOgoKKiAgICoqV29ydGhGdXp6aW5nKio6IHRydWUKKiAgICoqRm9jdXNTeW1ib2xzKio6IGBbJiMzNDtzbWNfYnVmX2NyZWF0ZSYjMzQ7LCAmIzM0O3NtY2RfYnVmX2F0dGFjaCYjMzQ7LCAmIzM0O3NtY2RfY2RjX21zZ19zZW5kJiMzNDssICYjMzQ7c21jX2NkY19tc2dfc2VuZCYjMzQ7XWAKKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgWyYjMzQ7U01DJiMzNDssICYjMzQ7SU5GSU5JQkFORCYjMzQ7LCAmIzM0O0RJQlMmIzM0OywgJiMzNDtESUJTX0xPJiMzNDssICYjMzQ7SU5FVCYjMzQ7XWAKKiAgICoqUmVhc29uaW5nKio6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQy1EIERNQi1ub2NvcHkgY29ubmVjdGlvbiBzZXR1cCBwYXRoIHdoZXJlIGEgY29uY3VycmVudCBDREMgcmVjZWl2ZSBoYW5kbGVyIGNvdWxkIG9ic2VydmUgYW4gdW5pbml0aWFsaXplZCBzZW5kIG9yIHJlY2VpdmUgYnVmZmVyLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBjb25uZWN0aW9uIHNldHVwIGFuZCBidWZmZXIgY3JlYXRpb24vYXR0YWNobWVudCwgYXMgd2VsbCBhcyBDREMgbWVzc2FnZSBzZW5kaW5nIHRvIHRyaWdnZXIgdGhlIHJlY2VpdmUgcGF0aC4mIzM0OwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7LAogICAgJiMzNDtESUJTX0xPJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfYnVmX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtzbWNkX2J1Zl9hdHRhY2gmIzM0OywKICAgICYjMzQ7c21jZF9jZGNfbXNnX3NlbmQmIzM0OywKICAgICYjMzQ7c21jX2NkY19tc2dfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBTTUMtRCBETUItbm9jb3B5IGNvbm5lY3Rpb24gc2V0dXAgcGF0aCB3aGVyZSBhIGNvbmN1cnJlbnQgQ0RDIHJlY2VpdmUgaGFuZGxlciBjb3VsZCBvYnNlcnZlIGFuIHVuaW5pdGlhbGl6ZWQgc2VuZCBvciByZWNlaXZlIGJ1ZmZlci4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gY29ubmVjdGlvbiBzZXR1cCBhbmQgYnVmZmVyIGNyZWF0aW9uL2F0dGFjaG1lbnQsIGFzIHdlbGwgYXMgQ0RDIG1lc3NhZ2Ugc2VuZGluZyB0byB0cmlnZ2VyIHRoZSByZWNlaXZlIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0RJQlMmIzM0OywKICAgICYjMzQ7RElCU19MTyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c21jX2J1Zl9jcmVhdGUmIzM0OywKICAgICYjMzQ7c21jZF9idWZfYXR0YWNoJiMzNDssCiAgICAmIzM0O3NtY2RfY2RjX21zZ19zZW5kJiMzNDssCiAgICAmIzM0O3NtY19jZGNfbXNnX3NlbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgU01DLUQgRE1CLW5vY29weSBjb25uZWN0aW9uIHNldHVwIHBhdGggd2hlcmUgYSBjb25jdXJyZW50IENEQyByZWNlaXZlIGhhbmRsZXIgY291bGQgb2JzZXJ2ZSBhbiB1bmluaXRpYWxpemVkIHNlbmQgb3IgcmVjZWl2ZSBidWZmZXIuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGNvbm5lY3Rpb24gc2V0dXAgYW5kIGJ1ZmZlciBjcmVhdGlvbi9hdHRhY2htZW50LCBhcyB3ZWxsIGFzIENEQyBtZXNzYWdlIHNlbmRpbmcgdG8gdHJpZ2dlciB0aGUgcmVjZWl2ZSBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzBUMDA6MDk6NDcuMDMzMDA3ODcxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzOTY1OTY1OTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiLFxuICAgIFwiRElCU19MT1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19idWZfY3JlYXRlXCIsXG4gICAgXCJzbWNkX2J1Zl9hdHRhY2hcIixcbiAgICBcInNtY2RfY2RjX21zZ19zZW5kXCIsXG4gICAgXCJzbWNfY2RjX21zZ19zZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgU01DLUQgRE1CLW5vY29weSBjb25uZWN0aW9uIHNldHVwIHBhdGggd2hlcmUgYSBjb25jdXJyZW50IENEQyByZWNlaXZlIGhhbmRsZXIgY291bGQgb2JzZXJ2ZSBhbiB1bmluaXRpYWxpemVkIHNlbmQgb3IgcmVjZWl2ZSBidWZmZXIuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGNvbm5lY3Rpb24gc2V0dXAgYW5kIGJ1ZmZlciBjcmVhdGlvbi9hdHRhY2htZW50LCBhcyB3ZWxsIGFzIENEQyBtZXNzYWdlIHNlbmRpbmcgdG8gdHJpZ2dlciB0aGUgcmVjZWl2ZSBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDowOTo0Ny4wMzMwMTM3NDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxOTI3NTk2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGY3MGNjOTQxNGU3ZjE3NDcxYjE1NTYxNjczNDc1OGQzY2Y0MDQ0NWNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMzAgMDA6MDk6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY2RjLmMgYi9uZXQvc21jL3NtY19jZGMuY1xcbmluZGV4IDMyZDZkMDNkZjMyMTQuLmVhNjFiMWU3NWM3MmMgMTAwNjQ0XFxuLS0tIGEvbmV0L3NtYy9zbWNfY2RjLmNcXG4rKysgYi9uZXQvc21jL3NtY19jZGMuY1xcbkBAIC0zMzIsOCArMzMyLDIwIEBAIHN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKHN0cnVjdCBzbWNfc29jayAqc21jLFxcbiB7XFxuIFxcdHVuaW9uIHNtY19ob3N0X2N1cnNvciBjb25zX29sZCwgcHJvZF9vbGQ7XFxuIFxcdHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiA9IFxcdTAwMjZzbWMtXFx1MDAzZWNvbm47XFxuK1xcdHN0cnVjdCBzbWNfYnVmX2Rlc2MgKnNuZGJ1Zl9kZXNjO1xcbiBcXHRpbnQgZGlmZl9jb25zLCBkaWZmX3Byb2QsIGRpZmZfdHg7XFxuIFxcbitcXHQvKiBBY3F1aXJlIHRoZSBzZW5kIGJ1ZmZlciBvbmNlLCBwYWlyaW5nIHdpdGggdGhlIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW5cXG4rXFx0ICogX19zbWNfYnVmX2NyZWF0ZSgpL3NtY2RfYnVmX2F0dGFjaCgpLiAgT24gdGhlIFNNQy1EIERNQi1ub2NvcHkgcGF0aFxcbitcXHQgKiB0aGUgZ2hvc3Qgc25kYnVmX2Rlc2MgaXMgYXR0YWNoZWQgb25seSBhZnRlciB0aGUgY29ubmVjdGlvbiBpcyBhbHJlYWR5XFxuK1xcdCAqIHJlYWNoYWJsZSB0byB0aGUgSVNNIGRldmljZSwgc28gaXQgY2FuIHN0aWxsIGJlIHVuc2V0IGhlcmU7IGV2ZXJ5XFxuK1xcdCAqIHNuZGJ1Zl9kZXNjIGNvbnN1bWVyIGJlbG93ICh0aGUgbm9jb3B5IGFjY291bnRpbmcgYW5kIHRoZSBzbmRidWZcXG4rXFx0ICogY29uc3VtZXIgdHJpZ2dlciwgd2hpY2ggZGVyZWZlcmVuY2VzIGl0IHZpYSBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoKSlcXG4rXFx0ICogaXMgc2tpcHBlZCB3aGlsZSBpdCBpcyBOVUxMIHRvIGF2b2lkIGEgTlVMTCBkZXJlZiBhbmQgYSBsb2FkIG9mIGFuXFxuK1xcdCAqIHVuaW5pdGlhbGlzZWQgYnVmZmVyLlxcbitcXHQgKi9cXG4rXFx0c25kYnVmX2Rlc2MgPSBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZjb25uLVxcdTAwM2VzbmRidWZfZGVzYyk7XFxuK1xcbiBcXHRzbWNfY3Vyc19jb3B5KFxcdTAwMjZwcm9kX29sZCwgXFx1MDAyNmNvbm4tXFx1MDAzZWxvY2FsX3J4X2N0cmwucHJvZCwgY29ubik7XFxuIFxcdHNtY19jdXJzX2NvcHkoXFx1MDAyNmNvbnNfb2xkLCBcXHUwMDI2Y29ubi1cXHUwMDNlbG9jYWxfcnhfY3RybC5jb25zLCBjb25uKTtcXG4gXFx0c21jX2NkY19tc2dfdG9faG9zdChcXHUwMDI2Y29ubi1cXHUwMDNlbG9jYWxfcnhfY3RybCwgY2RjLCBjb25uKTtcXG5AQCAtMzUxLDE0ICszNjMsMTcgQEAgc3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXFxuIFxcbiBcXHRcXHQvKiBpZiBsb2NhbCBzbmRidWYgc2hhcmVzIHRoZSBzYW1lIG1lbW9yeSByZWdpb24gd2l0aFxcbiBcXHRcXHQgKiBwZWVyIFJNQiwgdGhlbiB1cGRhdGUgdHhfY3Vyc19maW4gYW5kIHNuZGJ1Zl9zcGFjZVxcbi1cXHRcXHQgKiBoZXJlIHNpbmNlIHBlZXIgaGFzIGFscmVhZHkgY29uc3VtZWQgdGhlIGRhdGEuXFxuK1xcdFxcdCAqIGhlcmUgc2luY2UgcGVlciBoYXMgYWxyZWFkeSBjb25zdW1lZCB0aGUgZGF0YS4gIFRoZSBnaG9zdFxcbitcXHRcXHQgKiBzbmRidWZfZGVzYyAoYWNxdWlyZWQgYWJvdmUpIG1heSBzdGlsbCBiZSB1bnNldCBpbiB0aGUgU01DLURcXG4rXFx0XFx0ICogRE1CLW5vY29weSBzZXR1cCB3aW5kb3csIHNvIHNraXAgdGhlIHVwZGF0ZSB3aGlsZSBpdCBpcyBOVUxMLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKGNvbm4tXFx1MDAzZWxnci1cXHUwMDNlaXNfc21jZCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi1cXHUwMDNlbGdyLVxcdTAwM2VzbWNkKSkge1xcbitcXHRcXHQgICAgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi1cXHUwMDNlbGdyLVxcdTAwM2VzbWNkKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgc25kYnVmX2Rlc2MpIHtcXG4gXFx0XFx0XFx0LyogQ2FsY3VsYXRlIGNvbnN1bWVkIGRhdGEgYW5kXFxuIFxcdFxcdFxcdCAqIGluY3JlbWVudCBmcmVlIHNlbmQgYnVmZmVyIHNwYWNlLlxcbiBcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0ZGlmZl90eCA9IHNtY19jdXJzX2RpZmYoY29ubi1cXHUwMDNlc25kYnVmX2Rlc2MtXFx1MDAzZWxlbixcXG4rXFx0XFx0XFx0ZGlmZl90eCA9IHNtY19jdXJzX2RpZmYoc25kYnVmX2Rlc2MtXFx1MDAzZWxlbixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmNvbm4tXFx1MDAzZXR4X2N1cnNfZmluLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2Y29ubi1cXHUwMDNlbG9jYWxfcnhfY3RybC5jb25zKTtcXG4gXFx0XFx0XFx0LyogaW5jcmVhc2UgbG9jYWwgc25kYnVmIHNwYWNlIGFuZCBmaW5fY3VycyAqL1xcbkBAIC0zOTEsMTAgKzQwNiwxNSBAQCBzdGF0aWMgdm9pZCBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbihzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcXG4gXFx0XFx0XFx0Y29ubi1cXHUwMDNldXJnX3N0YXRlID0gU01DX1VSR19OT1RZRVQ7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIHRyaWdnZXIgc25kYnVmIGNvbnN1bWVyOiBSRE1BIHdyaXRlIGludG8gcGVlciBSTUJFIGFuZCBDREMgKi9cXG4tXFx0aWYgKChkaWZmX2NvbnMgXFx1MDAyNlxcdTAwMjYgc21jX3R4X3ByZXBhcmVkX3NlbmRzKGNvbm4pKSB8fFxcbi1cXHQgICAgY29ubi1cXHUwMDNlbG9jYWxfcnhfY3RybC5wcm9kX2ZsYWdzLmNvbnNfY3Vyc191cGRfcmVxIHx8XFxuLVxcdCAgICBjb25uLVxcdTAwM2Vsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MudXJnX2RhdGFfcGVuZGluZykge1xcbitcXHQvKiB0cmlnZ2VyIHNuZGJ1ZiBjb25zdW1lcjogUkRNQSB3cml0ZSBpbnRvIHBlZXIgUk1CRSBhbmQgQ0RDLlxcbitcXHQgKiBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoKSBhbmQgc21jX3R4X3BlbmRpbmcoKSBkZXJlZmVyZW5jZSBzbmRidWZfZGVzYyxcXG4rXFx0ICogc28gc2tpcCB0aGUgd2hvbGUgdHJpZ2dlciB3aGlsZSBpdCBpcyB1bnNldCAodGhlIFNNQy1EIERNQi1ub2NvcHlcXG4rXFx0ICogc2V0dXAgd2luZG93KTogdGhlcmUgaXMgbm90aGluZyB0byBzZW5kIHdpdGhvdXQgYSBzZW5kIGJ1ZmZlci5cXG4rXFx0ICovXFxuK1xcdGlmIChzbmRidWZfZGVzYyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKChkaWZmX2NvbnMgXFx1MDAyNlxcdTAwMjYgc21jX3R4X3ByZXBhcmVkX3NlbmRzKGNvbm4pKSB8fFxcbitcXHQgICAgIGNvbm4tXFx1MDAzZWxvY2FsX3J4X2N0cmwucHJvZF9mbGFncy5jb25zX2N1cnNfdXBkX3JlcSB8fFxcbitcXHQgICAgIGNvbm4tXFx1MDAzZWxvY2FsX3J4X2N0cmwucHJvZF9mbGFncy51cmdfZGF0YV9wZW5kaW5nKSkge1xcbiBcXHRcXHRpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihcXHUwMDI2c21jLVxcdTAwM2VzaykpXFxuIFxcdFxcdFxcdHNtY190eF9wZW5kaW5nKGNvbm4pO1xcbiBcXHRcXHRlbHNlXFxuQEAgLTQ0MywxMyArNDYzLDIxIEBAIHN0YXRpYyB2b2lkIHNtY2RfY2RjX3J4X3Rza2xldChzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXFxuIHtcXG4gXFx0c3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uID0gZnJvbV90YXNrbGV0KGNvbm4sIHQsIHJ4X3Rza2xldCk7XFxuIFxcdHN0cnVjdCBzbWNkX2NkY19tc2cgKmRhdGFfY2RjO1xcbitcXHRzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpybWJfZGVzYztcXG4gXFx0c3RydWN0IHNtY2RfY2RjX21zZyBjZGM7XFxuIFxcdHN0cnVjdCBzbWNfc29jayAqc21jO1xcbiBcXG4gXFx0aWYgKCFjb25uIHx8IGNvbm4tXFx1MDAzZWtpbGxlZClcXG4gXFx0XFx0cmV0dXJuO1xcbitcXHQvKiBQYWlyIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBfX3NtY19idWZfY3JlYXRlKCk6IHRoZSBjb25uZWN0aW9uXFxuK1xcdCAqIGlzIHB1Ymxpc2hlZCBiZWZvcmUgaXRzIFJNQiBpcyBhbGxvY2F0ZWQsIHNvIGJhaWwgd2hpbGUgcm1iX2Rlc2MgaXNcXG4rXFx0ICogdW5zZXQgdG8gYXZvaWQgYSBOVUxMIGRlcmVmIGFuZCBhIGxvYWQgb2YgYW4gdW5pbml0aWFsaXNlZCBidWZmZXIuXFxuK1xcdCAqL1xcbitcXHRybWJfZGVzYyA9IHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNmNvbm4tXFx1MDAzZXJtYl9kZXNjKTtcXG4rXFx0aWYgKCFybWJfZGVzYylcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0ZGF0YV9jZGMgPSAoc3RydWN0IHNtY2RfY2RjX21zZyAqKWNvbm4tXFx1MDAzZXJtYl9kZXNjLVxcdTAwM2VjcHVfYWRkcjtcXG4rXFx0ZGF0YV9jZGMgPSAoc3RydWN0IHNtY2RfY2RjX21zZyAqKXJtYl9kZXNjLVxcdTAwM2VjcHVfYWRkcjtcXG4gXFx0c21jZF9jdXJzX2NvcHkoXFx1MDAyNmNkYy5wcm9kLCBcXHUwMDI2ZGF0YV9jZGMtXFx1MDAzZXByb2QsIGNvbm4pO1xcbiBcXHRzbWNkX2N1cnNfY29weShcXHUwMDI2Y2RjLmNvbnMsIFxcdTAwMjZkYXRhX2NkYy1cXHUwMDNlY29ucywgY29ubik7XFxuIFxcdHNtYyA9IGNvbnRhaW5lcl9vZihjb25uLCBzdHJ1Y3Qgc21jX3NvY2ssIGNvbm4pO1xcbkBAIC00ODMsNyArNTExLDExIEBAIHN0YXRpYyB2b2lkIHNtY19jZGNfcnhfaGFuZGxlcihzdHJ1Y3QgaWJfd2MgKndjLCB2b2lkICpidWYpXFxuIFxcdGxnciA9IHNtY19nZXRfbGdyKGxpbmspO1xcbiBcXHRyZWFkX2xvY2tfYmgoXFx1MDAyNmxnci1cXHUwMDNlY29ubnNfbG9jayk7XFxuIFxcdGNvbm4gPSBzbWNfbGdyX2ZpbmRfY29ubihudG9obChjZGMtXFx1MDAzZXRva2VuKSwgbGdyKTtcXG4tXFx0aWYgKCFjb25uIHx8IGNvbm4tXFx1MDAzZW91dF9vZl9zeW5jKSB7XFxuK1xcdC8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogYmFpbCB3aGlsZSB0aGVcXG4rXFx0ICogUk1CIGlzIHVuc2V0IChzbWNfY2RjX21zZ19yZWN2X2FjdGlvbigpIGRlcmVmZXJlbmNlcyBpdCkgdG8gYXZvaWQgYVxcbitcXHQgKiBOVUxMIGRlcmVmIGFuZCBhIHN0YWxlLWJ1ZmZlciByZWFkIGluIHRoZSBjb25uZWN0aW9uIHNldHVwIHdpbmRvdy5cXG4rXFx0ICovXFxuK1xcdGlmICghY29ubiB8fCBjb25uLVxcdTAwM2VvdXRfb2Zfc3luYyB8fCAhc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2Y29ubi1cXHUwMDNlcm1iX2Rlc2MpKSB7XFxuIFxcdFxcdHJlYWRfdW5sb2NrX2JoKFxcdTAwMjZsZ3ItXFx1MDAzZWNvbm5zX2xvY2spO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5jIGIvbmV0L3NtYy9zbWNfY29yZS5jXFxuaW5kZXggYjQyMDhjYjE4NmM1ZS4uMzNiZjljYzk3OWVmYSAxMDA2NDRcXG4tLS0gYS9uZXQvc21jL3NtY19jb3JlLmNcXG4rKysgYi9uZXQvc21jL3NtY19jb3JlLmNcXG5AQCAtMjQ5OSwxNSArMjQ5OSwyNiBAQCBzdGF0aWMgaW50IF9fc21jX2J1Zl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIGJvb2wgaXNfc21jZCwgYm9vbCBpc19ybWIpXFxuIFxcdH1cXG4gXFxuIFxcdGlmIChpc19ybWIpIHtcXG4tXFx0XFx0Y29ubi1cXHUwMDNlcm1iX2Rlc2MgPSBidWZfZGVzYztcXG4gXFx0XFx0Y29ubi1cXHUwMDNlcm1iZV9zaXplX2NvbXAgPSBidWZzaXplX2NvbXA7XFxuIFxcdFxcdHNtYy1cXHUwMDNlc2suc2tfcmN2YnVmID0gYnVmc2l6ZSAqIDI7XFxuIFxcdFxcdGF0b21pY19zZXQoXFx1MDAyNmNvbm4tXFx1MDAzZWJ5dGVzX3RvX3JjdiwgMCk7XFxuIFxcdFxcdGNvbm4tXFx1MDAzZXJtYmVfdXBkYXRlX2xpbWl0ID1cXG4gXFx0XFx0XFx0c21jX3JtYl93bmRfdXBkYXRlX2xpbWl0KGJ1Zl9kZXNjLVxcdTAwM2VsZW4pO1xcbitcXHRcXHQvKiBQdWJsaXNoIHRoZSByZWNlaXZlIGJ1ZmZlciBsYXN0LCB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzOiB0aGVcXG4rXFx0XFx0ICogY29ubmVjdGlvbiBpcyBhbHJlYWR5IGluIHRoZSBsaW5rIGdyb3VwJ3MgdG9rZW4gdHJlZSwgc28gYVxcbitcXHRcXHQgKiBjb25jdXJyZW50IENEQyByZWNlaXZlIGhhbmRsZXIgbXVzdCBvYnNlcnZlIHRoZSBmdWxseVxcbitcXHRcXHQgKiBpbml0aWFsaXNlZCByZWNlaXZlIHN0YXRlIGFib3ZlIChhbmQgdGhlIGJ1ZmZlcikgb25jZSBpdCBzZWVzXFxuK1xcdFxcdCAqIGEgbm9uLU5VTEwgcm1iX2Rlc2MuICBQYWlycyB3aXRoIHRoZSBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gdGhlXFxuK1xcdFxcdCAqIENEQyByZWNlaXZlIHBhdGguXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2Y29ubi1cXHUwMDNlcm1iX2Rlc2MsIGJ1Zl9kZXNjKTtcXG4gXFx0XFx0aWYgKGlzX3NtY2QpXFxuIFxcdFxcdFxcdHNtY19pc21fc2V0X2Nvbm4oY29ubik7IC8qIG1hcCBSTUIvc21jZF9kZXYgdG8gY29ubiAqL1xcbiBcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBQbGFpbiBzdG9yZTogdGhpcyBzZW5kLWJ1ZmZlciBwYXNzIHJ1bnMgYmVmb3JlIHRoZSBSTUIgcGFzcyxcXG4rXFx0XFx0ICogd2hvc2Ugc21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNmNvbm4tXFx1MDAzZXJtYl9kZXNjKSB0aGVuIHB1Ymxpc2hlcyB0aGlzXFxuK1xcdFxcdCAqIHN0b3JlIHRvbywgYW5kIHRoZSBDREMgcmVjZWl2ZSBwYXRoIGlzIGdhdGVkIG9uIHJtYl9kZXNjLlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0Y29ubi1cXHUwMDNlc25kYnVmX2Rlc2MgPSBidWZfZGVzYztcXG4gXFx0XFx0c21jLVxcdTAwM2Vzay5za19zbmRidWYgPSBidWZzaXplICogMjtcXG4gXFx0XFx0YXRvbWljX3NldChcXHUwMDI2Y29ubi1cXHUwMDNlc25kYnVmX3NwYWNlLCBidWZzaXplKTtcXG5AQCAtMjU5OSw5ICsyNjEwLDE2IEBAIGludCBzbWNkX2J1Zl9hdHRhY2goc3RydWN0IHNtY19zb2NrICpzbWMpXFxuIFxcdGJ1Zl9kZXNjLVxcdTAwM2VjcHVfYWRkciA9XFxuIFxcdFxcdCh1OCAqKWJ1Zl9kZXNjLVxcdTAwM2VjcHVfYWRkciArIHNpemVvZihzdHJ1Y3Qgc21jZF9jZGNfbXNnKTtcXG4gXFx0YnVmX2Rlc2MtXFx1MDAzZWxlbiAtPSBzaXplb2Yoc3RydWN0IHNtY2RfY2RjX21zZyk7XFxuLVxcdGNvbm4tXFx1MDAzZXNuZGJ1Zl9kZXNjID0gYnVmX2Rlc2M7XFxuLVxcdGNvbm4tXFx1MDAzZXNuZGJ1Zl9kZXNjLVxcdTAwM2V1c2VkID0gMTtcXG4tXFx0YXRvbWljX3NldChcXHUwMDI2Y29ubi1cXHUwMDNlc25kYnVmX3NwYWNlLCBjb25uLVxcdTAwM2VzbmRidWZfZGVzYy1cXHUwMDNlbGVuKTtcXG4rXFx0YnVmX2Rlc2MtXFx1MDAzZXVzZWQgPSAxO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZjb25uLVxcdTAwM2VzbmRidWZfc3BhY2UsIGJ1Zl9kZXNjLVxcdTAwM2VsZW4pO1xcbitcXHQvKiBQdWJsaXNoIHRoZSBnaG9zdCBzZW5kIGJ1ZmZlciBsYXN0LCB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzOiB0aGVcXG4rXFx0ICogY29ubmVjdGlvbiBpcyBhbHJlYWR5IHJlYWNoYWJsZSB0byB0aGUgSVNNIGRldmljZSAoc21jX2lzbV9zZXRfY29ubigpXFxuK1xcdCAqIHJhbiBpbiBfX3NtY19idWZfY3JlYXRlKCkpLCBzbyB0aGUgQ0RDIHJlY2VpdmUgdGFza2xldCBtdXN0IG9ic2VydmVcXG4rXFx0ICogdGhlIGZ1bGx5IGluaXRpYWxpc2VkIGdob3N0IGJ1ZmZlciBvbmNlIGl0IHNlZXMgYSBub24tTlVMTFxcbitcXHQgKiBzbmRidWZfZGVzYy4gIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluXFxuK1xcdCAqIHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKCkuXFxuK1xcdCAqL1xcbitcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2Y29ubi1cXHUwMDNlc25kYnVmX2Rlc2MsIGJ1Zl9kZXNjKTtcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiBmcmVlOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDowOTo0Ny40NTI5NDA0OThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODM1NDYwMjA3ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJESUJTXCIsXG4gICAgXCJESUJTX0xPXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic21jX2J1Zl9jcmVhdGVcIixcbiAgICBcInNtY2RfYnVmX2F0dGFjaFwiLFxuICAgIFwic21jZF9jZGNfbXNnX3NlbmRcIixcbiAgICBcInNtY19jZGNfbXNnX3NlbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBTTUMtRCBETUItbm9jb3B5IGNvbm5lY3Rpb24gc2V0dXAgcGF0aCB3aGVyZSBhIGNvbmN1cnJlbnQgQ0RDIHJlY2VpdmUgaGFuZGxlciBjb3VsZCBvYnNlcnZlIGFuIHVuaW5pdGlhbGl6ZWQgc2VuZCBvciByZWNlaXZlIGJ1ZmZlci4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gY29ubmVjdGlvbiBzZXR1cCBhbmQgYnVmZmVyIGNyZWF0aW9uL2F0dGFjaG1lbnQsIGFzIHdlbGwgYXMgQ0RDIG1lc3NhZ2Ugc2VuZGluZyB0byB0cmlnZ2VyIHRoZSByZWNlaXZlIHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY3MGNjOTQxNGU3ZjE3NDcxYjE1NTYxNjczNDc1OGQzY2Y0MDQ0NWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAwMDowOTo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2NkYy5jIGIvbmV0L3NtYy9zbWNfY2RjLmNcbmluZGV4IDMyZDZkMDNkZjMyMTQuLmVhNjFiMWU3NWM3MmMgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19jZGMuY1xuKysrIGIvbmV0L3NtYy9zbWNfY2RjLmNcbkBAIC0zMzIsOCArMzMyLDIwIEBAIHN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKHN0cnVjdCBzbWNfc29jayAqc21jLFxuIHtcbiBcdHVuaW9uIHNtY19ob3N0X2N1cnNvciBjb25zX29sZCwgcHJvZF9vbGQ7XG4gXHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBcdTAwMjZzbWMtXHUwMDNlY29ubjtcbitcdHN0cnVjdCBzbWNfYnVmX2Rlc2MgKnNuZGJ1Zl9kZXNjO1xuIFx0aW50IGRpZmZfY29ucywgZGlmZl9wcm9kLCBkaWZmX3R4O1xuIFxuK1x0LyogQWNxdWlyZSB0aGUgc2VuZCBidWZmZXIgb25jZSwgcGFpcmluZyB3aXRoIHRoZSBzbXBfc3RvcmVfcmVsZWFzZSgpIGluXG4rXHQgKiBfX3NtY19idWZfY3JlYXRlKCkvc21jZF9idWZfYXR0YWNoKCkuICBPbiB0aGUgU01DLUQgRE1CLW5vY29weSBwYXRoXG4rXHQgKiB0aGUgZ2hvc3Qgc25kYnVmX2Rlc2MgaXMgYXR0YWNoZWQgb25seSBhZnRlciB0aGUgY29ubmVjdGlvbiBpcyBhbHJlYWR5XG4rXHQgKiByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UsIHNvIGl0IGNhbiBzdGlsbCBiZSB1bnNldCBoZXJlOyBldmVyeVxuK1x0ICogc25kYnVmX2Rlc2MgY29uc3VtZXIgYmVsb3cgKHRoZSBub2NvcHkgYWNjb3VudGluZyBhbmQgdGhlIHNuZGJ1ZlxuK1x0ICogY29uc3VtZXIgdHJpZ2dlciwgd2hpY2ggZGVyZWZlcmVuY2VzIGl0IHZpYSBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoKSlcbitcdCAqIGlzIHNraXBwZWQgd2hpbGUgaXQgaXMgTlVMTCB0byBhdm9pZCBhIE5VTEwgZGVyZWYgYW5kIGEgbG9hZCBvZiBhblxuK1x0ICogdW5pbml0aWFsaXNlZCBidWZmZXIuXG4rXHQgKi9cbitcdHNuZGJ1Zl9kZXNjID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZjb25uLVx1MDAzZXNuZGJ1Zl9kZXNjKTtcbitcbiBcdHNtY19jdXJzX2NvcHkoXHUwMDI2cHJvZF9vbGQsIFx1MDAyNmNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybC5wcm9kLCBjb25uKTtcbiBcdHNtY19jdXJzX2NvcHkoXHUwMDI2Y29uc19vbGQsIFx1MDAyNmNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybC5jb25zLCBjb25uKTtcbiBcdHNtY19jZGNfbXNnX3RvX2hvc3QoXHUwMDI2Y29ubi1cdTAwM2Vsb2NhbF9yeF9jdHJsLCBjZGMsIGNvbm4pO1xuQEAgLTM1MSwxNCArMzYzLDE3IEBAIHN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKHN0cnVjdCBzbWNfc29jayAqc21jLFxuIFxuIFx0XHQvKiBpZiBsb2NhbCBzbmRidWYgc2hhcmVzIHRoZSBzYW1lIG1lbW9yeSByZWdpb24gd2l0aFxuIFx0XHQgKiBwZWVyIFJNQiwgdGhlbiB1cGRhdGUgdHhfY3Vyc19maW4gYW5kIHNuZGJ1Zl9zcGFjZVxuLVx0XHQgKiBoZXJlIHNpbmNlIHBlZXIgaGFzIGFscmVhZHkgY29uc3VtZWQgdGhlIGRhdGEuXG4rXHRcdCAqIGhlcmUgc2luY2UgcGVlciBoYXMgYWxyZWFkeSBjb25zdW1lZCB0aGUgZGF0YS4gIFRoZSBnaG9zdFxuK1x0XHQgKiBzbmRidWZfZGVzYyAoYWNxdWlyZWQgYWJvdmUpIG1heSBzdGlsbCBiZSB1bnNldCBpbiB0aGUgU01DLURcbitcdFx0ICogRE1CLW5vY29weSBzZXR1cCB3aW5kb3csIHNvIHNraXAgdGhlIHVwZGF0ZSB3aGlsZSBpdCBpcyBOVUxMLlxuIFx0XHQgKi9cbiBcdFx0aWYgKGNvbm4tXHUwMDNlbGdyLVx1MDAzZWlzX3NtY2QgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShjb25uLVx1MDAzZWxnci1cdTAwM2VzbWNkKSkge1xuK1x0XHQgICAgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi1cdTAwM2VsZ3ItXHUwMDNlc21jZCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBzbmRidWZfZGVzYykge1xuIFx0XHRcdC8qIENhbGN1bGF0ZSBjb25zdW1lZCBkYXRhIGFuZFxuIFx0XHRcdCAqIGluY3JlbWVudCBmcmVlIHNlbmQgYnVmZmVyIHNwYWNlLlxuIFx0XHRcdCAqL1xuLVx0XHRcdGRpZmZfdHggPSBzbWNfY3Vyc19kaWZmKGNvbm4tXHUwMDNlc25kYnVmX2Rlc2MtXHUwMDNlbGVuLFxuK1x0XHRcdGRpZmZfdHggPSBzbWNfY3Vyc19kaWZmKHNuZGJ1Zl9kZXNjLVx1MDAzZWxlbixcbiBcdFx0XHRcdFx0XHRcdTAwMjZjb25uLVx1MDAzZXR4X2N1cnNfZmluLFxuIFx0XHRcdFx0XHRcdFx1MDAyNmNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybC5jb25zKTtcbiBcdFx0XHQvKiBpbmNyZWFzZSBsb2NhbCBzbmRidWYgc3BhY2UgYW5kIGZpbl9jdXJzICovXG5AQCAtMzkxLDEwICs0MDYsMTUgQEAgc3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXG4gXHRcdFx0Y29ubi1cdTAwM2V1cmdfc3RhdGUgPSBTTUNfVVJHX05PVFlFVDtcbiBcdH1cbiBcbi1cdC8qIHRyaWdnZXIgc25kYnVmIGNvbnN1bWVyOiBSRE1BIHdyaXRlIGludG8gcGVlciBSTUJFIGFuZCBDREMgKi9cbi1cdGlmICgoZGlmZl9jb25zIFx1MDAyNlx1MDAyNiBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoY29ubikpIHx8XG4tXHQgICAgY29ubi1cdTAwM2Vsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MuY29uc19jdXJzX3VwZF9yZXEgfHxcbi1cdCAgICBjb25uLVx1MDAzZWxvY2FsX3J4X2N0cmwucHJvZF9mbGFncy51cmdfZGF0YV9wZW5kaW5nKSB7XG4rXHQvKiB0cmlnZ2VyIHNuZGJ1ZiBjb25zdW1lcjogUkRNQSB3cml0ZSBpbnRvIHBlZXIgUk1CRSBhbmQgQ0RDLlxuK1x0ICogc21jX3R4X3ByZXBhcmVkX3NlbmRzKCkgYW5kIHNtY190eF9wZW5kaW5nKCkgZGVyZWZlcmVuY2Ugc25kYnVmX2Rlc2MsXG4rXHQgKiBzbyBza2lwIHRoZSB3aG9sZSB0cmlnZ2VyIHdoaWxlIGl0IGlzIHVuc2V0ICh0aGUgU01DLUQgRE1CLW5vY29weVxuK1x0ICogc2V0dXAgd2luZG93KTogdGhlcmUgaXMgbm90aGluZyB0byBzZW5kIHdpdGhvdXQgYSBzZW5kIGJ1ZmZlci5cbitcdCAqL1xuK1x0aWYgKHNuZGJ1Zl9kZXNjIFx1MDAyNlx1MDAyNlxuK1x0ICAgICgoZGlmZl9jb25zIFx1MDAyNlx1MDAyNiBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoY29ubikpIHx8XG4rXHQgICAgIGNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybC5wcm9kX2ZsYWdzLmNvbnNfY3Vyc191cGRfcmVxIHx8XG4rXHQgICAgIGNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybC5wcm9kX2ZsYWdzLnVyZ19kYXRhX3BlbmRpbmcpKSB7XG4gXHRcdGlmICghc29ja19vd25lZF9ieV91c2VyKFx1MDAyNnNtYy1cdTAwM2VzaykpXG4gXHRcdFx0c21jX3R4X3BlbmRpbmcoY29ubik7XG4gXHRcdGVsc2VcbkBAIC00NDMsMTMgKzQ2MywyMSBAQCBzdGF0aWMgdm9pZCBzbWNkX2NkY19yeF90c2tsZXQoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KVxuIHtcbiBcdHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiA9IGZyb21fdGFza2xldChjb25uLCB0LCByeF90c2tsZXQpO1xuIFx0c3RydWN0IHNtY2RfY2RjX21zZyAqZGF0YV9jZGM7XG4rXHRzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpybWJfZGVzYztcbiBcdHN0cnVjdCBzbWNkX2NkY19tc2cgY2RjO1xuIFx0c3RydWN0IHNtY19zb2NrICpzbWM7XG4gXG4gXHRpZiAoIWNvbm4gfHwgY29ubi1cdTAwM2VraWxsZWQpXG4gXHRcdHJldHVybjtcbitcdC8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogdGhlIGNvbm5lY3Rpb25cbitcdCAqIGlzIHB1Ymxpc2hlZCBiZWZvcmUgaXRzIFJNQiBpcyBhbGxvY2F0ZWQsIHNvIGJhaWwgd2hpbGUgcm1iX2Rlc2MgaXNcbitcdCAqIHVuc2V0IHRvIGF2b2lkIGEgTlVMTCBkZXJlZiBhbmQgYSBsb2FkIG9mIGFuIHVuaW5pdGlhbGlzZWQgYnVmZmVyLlxuK1x0ICovXG4rXHRybWJfZGVzYyA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2Y29ubi1cdTAwM2VybWJfZGVzYyk7XG4rXHRpZiAoIXJtYl9kZXNjKVxuK1x0XHRyZXR1cm47XG4gXG4tXHRkYXRhX2NkYyA9IChzdHJ1Y3Qgc21jZF9jZGNfbXNnICopY29ubi1cdTAwM2VybWJfZGVzYy1cdTAwM2VjcHVfYWRkcjtcbitcdGRhdGFfY2RjID0gKHN0cnVjdCBzbWNkX2NkY19tc2cgKilybWJfZGVzYy1cdTAwM2VjcHVfYWRkcjtcbiBcdHNtY2RfY3Vyc19jb3B5KFx1MDAyNmNkYy5wcm9kLCBcdTAwMjZkYXRhX2NkYy1cdTAwM2Vwcm9kLCBjb25uKTtcbiBcdHNtY2RfY3Vyc19jb3B5KFx1MDAyNmNkYy5jb25zLCBcdTAwMjZkYXRhX2NkYy1cdTAwM2Vjb25zLCBjb25uKTtcbiBcdHNtYyA9IGNvbnRhaW5lcl9vZihjb25uLCBzdHJ1Y3Qgc21jX3NvY2ssIGNvbm4pO1xuQEAgLTQ4Myw3ICs1MTEsMTEgQEAgc3RhdGljIHZvaWQgc21jX2NkY19yeF9oYW5kbGVyKHN0cnVjdCBpYl93YyAqd2MsIHZvaWQgKmJ1ZilcbiBcdGxnciA9IHNtY19nZXRfbGdyKGxpbmspO1xuIFx0cmVhZF9sb2NrX2JoKFx1MDAyNmxnci1cdTAwM2Vjb25uc19sb2NrKTtcbiBcdGNvbm4gPSBzbWNfbGdyX2ZpbmRfY29ubihudG9obChjZGMtXHUwMDNldG9rZW4pLCBsZ3IpO1xuLVx0aWYgKCFjb25uIHx8IGNvbm4tXHUwMDNlb3V0X29mX3N5bmMpIHtcbitcdC8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogYmFpbCB3aGlsZSB0aGVcbitcdCAqIFJNQiBpcyB1bnNldCAoc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oKSBkZXJlZmVyZW5jZXMgaXQpIHRvIGF2b2lkIGFcbitcdCAqIE5VTEwgZGVyZWYgYW5kIGEgc3RhbGUtYnVmZmVyIHJlYWQgaW4gdGhlIGNvbm5lY3Rpb24gc2V0dXAgd2luZG93LlxuK1x0ICovXG4rXHRpZiAoIWNvbm4gfHwgY29ubi1cdTAwM2VvdXRfb2Zfc3luYyB8fCAhc21wX2xvYWRfYWNxdWlyZShcdTAwMjZjb25uLVx1MDAzZXJtYl9kZXNjKSkge1xuIFx0XHRyZWFkX3VubG9ja19iaChcdTAwMjZsZ3ItXHUwMDNlY29ubnNfbG9jayk7XG4gXHRcdHJldHVybjtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmMgYi9uZXQvc21jL3NtY19jb3JlLmNcbmluZGV4IGI0MjA4Y2IxODZjNWUuLjMzYmY5Y2M5NzllZmEgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19jb3JlLmNcbisrKyBiL25ldC9zbWMvc21jX2NvcmUuY1xuQEAgLTI0OTksMTUgKzI0OTksMjYgQEAgc3RhdGljIGludCBfX3NtY19idWZfY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBib29sIGlzX3NtY2QsIGJvb2wgaXNfcm1iKVxuIFx0fVxuIFxuIFx0aWYgKGlzX3JtYikge1xuLVx0XHRjb25uLVx1MDAzZXJtYl9kZXNjID0gYnVmX2Rlc2M7XG4gXHRcdGNvbm4tXHUwMDNlcm1iZV9zaXplX2NvbXAgPSBidWZzaXplX2NvbXA7XG4gXHRcdHNtYy1cdTAwM2Vzay5za19yY3ZidWYgPSBidWZzaXplICogMjtcbiBcdFx0YXRvbWljX3NldChcdTAwMjZjb25uLVx1MDAzZWJ5dGVzX3RvX3JjdiwgMCk7XG4gXHRcdGNvbm4tXHUwMDNlcm1iZV91cGRhdGVfbGltaXQgPVxuIFx0XHRcdHNtY19ybWJfd25kX3VwZGF0ZV9saW1pdChidWZfZGVzYy1cdTAwM2VsZW4pO1xuK1x0XHQvKiBQdWJsaXNoIHRoZSByZWNlaXZlIGJ1ZmZlciBsYXN0LCB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzOiB0aGVcbitcdFx0ICogY29ubmVjdGlvbiBpcyBhbHJlYWR5IGluIHRoZSBsaW5rIGdyb3VwJ3MgdG9rZW4gdHJlZSwgc28gYVxuK1x0XHQgKiBjb25jdXJyZW50IENEQyByZWNlaXZlIGhhbmRsZXIgbXVzdCBvYnNlcnZlIHRoZSBmdWxseVxuK1x0XHQgKiBpbml0aWFsaXNlZCByZWNlaXZlIHN0YXRlIGFib3ZlIChhbmQgdGhlIGJ1ZmZlcikgb25jZSBpdCBzZWVzXG4rXHRcdCAqIGEgbm9uLU5VTEwgcm1iX2Rlc2MuICBQYWlycyB3aXRoIHRoZSBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gdGhlXG4rXHRcdCAqIENEQyByZWNlaXZlIHBhdGguXG4rXHRcdCAqL1xuK1x0XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZjb25uLVx1MDAzZXJtYl9kZXNjLCBidWZfZGVzYyk7XG4gXHRcdGlmIChpc19zbWNkKVxuIFx0XHRcdHNtY19pc21fc2V0X2Nvbm4oY29ubik7IC8qIG1hcCBSTUIvc21jZF9kZXYgdG8gY29ubiAqL1xuIFx0fSBlbHNlIHtcbitcdFx0LyogUGxhaW4gc3RvcmU6IHRoaXMgc2VuZC1idWZmZXIgcGFzcyBydW5zIGJlZm9yZSB0aGUgUk1CIHBhc3MsXG4rXHRcdCAqIHdob3NlIHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmNvbm4tXHUwMDNlcm1iX2Rlc2MpIHRoZW4gcHVibGlzaGVzIHRoaXNcbitcdFx0ICogc3RvcmUgdG9vLCBhbmQgdGhlIENEQyByZWNlaXZlIHBhdGggaXMgZ2F0ZWQgb24gcm1iX2Rlc2MuXG4rXHRcdCAqL1xuIFx0XHRjb25uLVx1MDAzZXNuZGJ1Zl9kZXNjID0gYnVmX2Rlc2M7XG4gXHRcdHNtYy1cdTAwM2Vzay5za19zbmRidWYgPSBidWZzaXplICogMjtcbiBcdFx0YXRvbWljX3NldChcdTAwMjZjb25uLVx1MDAzZXNuZGJ1Zl9zcGFjZSwgYnVmc2l6ZSk7XG5AQCAtMjU5OSw5ICsyNjEwLDE2IEBAIGludCBzbWNkX2J1Zl9hdHRhY2goc3RydWN0IHNtY19zb2NrICpzbWMpXG4gXHRidWZfZGVzYy1cdTAwM2VjcHVfYWRkciA9XG4gXHRcdCh1OCAqKWJ1Zl9kZXNjLVx1MDAzZWNwdV9hZGRyICsgc2l6ZW9mKHN0cnVjdCBzbWNkX2NkY19tc2cpO1xuIFx0YnVmX2Rlc2MtXHUwMDNlbGVuIC09IHNpemVvZihzdHJ1Y3Qgc21jZF9jZGNfbXNnKTtcbi1cdGNvbm4tXHUwMDNlc25kYnVmX2Rlc2MgPSBidWZfZGVzYztcbi1cdGNvbm4tXHUwMDNlc25kYnVmX2Rlc2MtXHUwMDNldXNlZCA9IDE7XG4tXHRhdG9taWNfc2V0KFx1MDAyNmNvbm4tXHUwMDNlc25kYnVmX3NwYWNlLCBjb25uLVx1MDAzZXNuZGJ1Zl9kZXNjLVx1MDAzZWxlbik7XG4rXHRidWZfZGVzYy1cdTAwM2V1c2VkID0gMTtcbitcdGF0b21pY19zZXQoXHUwMDI2Y29ubi1cdTAwM2VzbmRidWZfc3BhY2UsIGJ1Zl9kZXNjLVx1MDAzZWxlbik7XG4rXHQvKiBQdWJsaXNoIHRoZSBnaG9zdCBzZW5kIGJ1ZmZlciBsYXN0LCB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzOiB0aGVcbitcdCAqIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UgKHNtY19pc21fc2V0X2Nvbm4oKVxuK1x0ICogcmFuIGluIF9fc21jX2J1Zl9jcmVhdGUoKSksIHNvIHRoZSBDREMgcmVjZWl2ZSB0YXNrbGV0IG11c3Qgb2JzZXJ2ZVxuK1x0ICogdGhlIGZ1bGx5IGluaXRpYWxpc2VkIGdob3N0IGJ1ZmZlciBvbmNlIGl0IHNlZXMgYSBub24tTlVMTFxuK1x0ICogc25kYnVmX2Rlc2MuICBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpblxuK1x0ICogc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oKS5cbitcdCAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2Y29ubi1cdTAwM2VzbmRidWZfZGVzYywgYnVmX2Rlc2MpO1xuIFx0cmV0dXJuIDA7XG4gXG4gZnJlZTpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAwOjA5OjQ3LjQ1Mjk0MTU5OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzA3NTE0NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU01DIFBhdGNoIGZvciBSYWNlIENvbmRpdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBuZXQvc21jL3NtY19jZGMuY2AgYW5kIGBuZXQvc21jL3NtY19jb3JlLmNgLiBJdCBzZWVtcyB0aGV5J3JlIGluamVjdGluZyBgc21wX2xvYWRfYWNxdWlyZWAgYW5kIGBzbXBfc3RvcmVfcmVsZWFzZWAgaW50byBgY29ubi1cdTAwM2VzbmRidWZfZGVzY2AgYW5kIGBjb25uLVx1MDAzZXJtYl9kZXNjYC4gVGhpcyByaW5ncyBhIGJlbGw7IHNvdW5kcyBsaWtlIHRoZXkncmUgdHJ5aW5nIHRvIGFkZHJlc3MgYSBuYXN0eSByYWNlIGNvbmRpdGlvbi4gU3BlY2lmaWNhbGx5LCBhIGNvbmN1cnJlbnQgQ0RDIHJlY2VpdmUgaGFuZGxlciB3YXMgbGlrZWx5IG9ic2VydmluZyBhbiB1bmluaXRpYWxpemVkIGJ1ZmZlciwgb3Igd29yc2UsIGEgbnVsbCBwb2ludGVyLiBBbHdheXMgZnVuIHdoZW4gZGVhbGluZyB3aXRoIHNoYXJlZCBtZW1vcnkgYW5kIGNvbmN1cnJlbmN5LCBlc3BlY2lhbGx5IHdpdGhpbiBhIGNyaXRpY2FsIHN1YnN5c3RlbSBsaWtlIFNNQy5cblxuVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUsIG9mIGNvdXJzZSwgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIHRoZSBTTUMgKFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMpIHN1YnN5c3RlbS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGFwcGxpZWQgY29ycmVjdGx5LCBidXQgYWxzbyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmaXggZm9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gU01DIGlzIHJlYWNoYWJsZSBpbiB2YXJpb3VzIHZpcnR1YWxpemF0aW9uIHNjZW5hcmlvcyAtIFNNQy1EIHdpdGggSVNNIGxvb3BiYWNrIG9yIGR1bW15IElTTSwgZm9yIGluc3RhbmNlLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gdGVzdCBpbiB0aGVzZSBlbnZpcm9ubWVudHMgaWYgcG9zc2libGUuXG5cbk5vdywgbGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZyBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCBTTUMuIEknbGwgZmlyZSB1cCBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gc2VlIHdoYXQgb3B0aW9ucyBtaWdodCBiZSByZWxldmFudCBvciBhZmZlY3RlZCBieSB0aGlzIHBhdGNoLiBOZWVkIHRvIGdldCBhIGZ1bGwgcGljdHVyZSBiZWZvcmUgZGl2aW5nIGRlZXBlciBpbnRvIHRoZSBjb2RlIHJldmlldy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ3MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAwOjA5OjUxLjc4MzY5NTY3M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njg2ODU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU01DXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvc21jL0tjb25maWc6Mjpjb25maWcgU01DXFxubmV0L3NtYy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XFxcIlxcbi0tXFxubmV0L3NtYy9LY29uZmlnLTEzLVxcbm5ldC9zbWMvS2NvbmZpZzoxNDpjb25maWcgU01DX0RJQUdcXG5uZXQvc21jL0tjb25maWctMTUtXFx0dHJpc3RhdGUgXFxcIlNNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3NtYy9LY29uZmlnLTIyLVxcbm5ldC9zbWMvS2NvbmZpZzoyMzpjb25maWcgU01DX0hTX0NUUkxfQlBGXFxubmV0L3NtYy9LY29uZmlnLTI0LVxcdGJvb2wgXFxcIkdlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAwOjA5OjUxLjg1MDU2ODIxM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NjkyMjY2NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KipcblxuUmlnaHQsIHRoZSBrZXkgY29uZmlndXJhdGlvbiBzZXR0aW5nIHdlJ3JlIGxvb2tpbmcgYXQgaXMgYFNNQ2AuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE5vdywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBgU01DYCBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB0YWtlIGEgcXVpY2sgc3RlcCBiYWNrIGFuZCBjb25zaWRlciBwb3RlbnRpYWwgY2FzY2FkaW5nIGVmZmVjdHMuIFRoZXJlJ3MgYSBkZWNlbnQgY2hhbmNlIHRoaXMgYFNNQ2Agb3B0aW9uIHRpZXMgaW50byBvdGhlciBmZWF0dXJlcyBvciBtb2R1bGVzIHdpdGhpbiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSAqaW1tZWRpYXRlKiBkZXBlbmRlbmNpZXMsIGVpdGhlciBleHBsaWNpdCB3aXRoaW4gdGhlIGNvZGUgb3IgaW1wbGllZCBieSBhcmNoaXRlY3R1cmFsIGRlc2lnbiwgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYmVmb3JlIHByb2NlZWRpbmcgZnVydGhlci4gQSBxdWljayBzY2FuIGZvciByZWxhdGVkIHNldHRpbmdzLCBjb2RlIHBhdGhzLCBvciBleHRlcm5hbCBpbnRlZ3JhdGlvbnMgaXMgaW4gb3JkZXIuIEl0J3MgYmVzdCB0byBtYXAgb3V0IHRoZSBicm9hZGVyIGNvbnRleHQgYmVmb3JlIHpvb21pbmcgaW4gb24gdGhlIHNwZWNpZmljcyBvZiBgU01DYCBpdHNlbGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMzcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDowOTo1NC43MTk3OTc1MTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg2Njc0MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnPTI9Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG5uZXQvc21jL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBESUJTXFxubmV0L3NtYy9LY29uZmlnLTUtXFx0aGVscFxcbi0tXFxubmV0L3NtYy9LY29uZmlnPTE0PWNvbmZpZyBTTUNfRElBR1xcbm5ldC9zbWMvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxubmV0L3NtYy9LY29uZmlnOjE2OlxcdGRlcGVuZHMgb24gU01DXFxubmV0L3NtYy9LY29uZmlnLTE3LVxcdGhlbHBcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZz0yMz1jb25maWcgU01DX0hTX0NUUkxfQlBGXFxubmV0L3NtYy9LY29uZmlnLTI0LVxcdGJvb2wgXFxcIkdlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcXFwiXFxubmV0L3NtYy9LY29uZmlnOjI1OlxcdGRlcGVuZHMgb24gU01DIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgQlBGX1NZU0NBTExcXG5uZXQvc21jL0tjb25maWctMjYtXFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAwOjA5OjU0LjgxODQ3MTI0OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4ODQ5NDc5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBEZXBlbmRlbmN5IENoZWNrKipcblxuT2theSwgc28gdGhlIGNvZGUgaW4gcXVlc3Rpb24gaGFzIGEgZGVwZW5kZW5jeSBjaGFpbiB0aGF0IGludm9sdmVzIGBJTkVUYCwgYElORklOSUJBTkRgLCBhbmQgYERJQlNgLiBUaW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoZXNlIGRlcGVuZGVuY2llcywgc28gcmF0aGVyIHRoYW4gcmVseSBvbiBtZW1vcnkgb3IgcG90ZW50aWFsbHkgb3V0ZGF0ZWQgZG9jdW1lbnRhdGlvbiwgbGV0J3MgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGhlIEtjb25maWcgZmlsZSBpbiBgbmV0L3NtYy9LY29uZmlnYCBzaG91bGQgcHJvdmlkZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIEknbGwgb3BlbiB0aGF0IHVwIGFuZCB2ZXJpZnkgdGhlIGV4YWN0IGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlc2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0LiBUaGlzIGlzIHRoZSBvbmx5IHdheSB0byBiZSBjZXJ0YWluIEkgdW5kZXJzdGFuZCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgY2FuIGFzc2VzcyB0aGUgaW1wYWN0IG9mIGNoYW5nZXMgb3IgcG90ZW50aWFsIGNvbmZsaWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYyMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAwOjA5OjU3LjcwMzQyMTg5NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFNNQ1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IElORklOSUJBTkQgXFx1MDAyNlxcdTAwMjYgRElCU1xcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBTTUMtUiBwcm92aWRlcyBhIFxcXCJzb2NrZXRzIG92ZXIgUkRNQVxcXCIgc29sdXRpb24gbWFraW5nIHVzZSBvZlxcbiAgIDc6XFx0XFx0ICBSRE1BIG92ZXIgQ29udmVyZ2VkIEV0aGVybmV0IChSb0NFKSB0ZWNobm9sb2d5IHRvIHVwZ3JhZGVcXG4gICA4OlxcdFxcdCAgQUZfSU5FVCBUQ1AgY29ubmVjdGlvbnMgdHJhbnNwYXJlbnRseS5cXG4gICA5OlxcdFxcdCAgVGhlIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTTUMtUiBzb2x1dGlvbiBpcyBkZXNpZ25lZCBhc1xcbiAgMTA6XFx0XFx0ICBhIHNlcGFyYXRlIHNvY2tldCBmYW1pbHkgU01DLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBydW4gU01DIHNvY2tldCBhcHBsaWNhdGlvbnNcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIFNNQ19ESUFHXFxuICAxNTpcXHRcXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIFNNQ1xcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBTdXBwb3J0IGZvciBTTUMgc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdG9vbHMgc3VjaCBhc1xcbiAgMTk6XFx0XFx0ICBzbWNzcy5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDowOTo1Ny43MDM1MTM2MjZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQ1NTk2OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlY29kaW5nIHRoZSBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBgRElCU2AuLi4gd2hhdCBpbiB0aGUga2VybmVsJ3Mgd29ybGQgaXMgYERJQlNgPyBMZXQgbWUgcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdC4gQWgsIEkgc2VlLCBpdCBsb29rcyBsaWtlIGl0J3MgbGlrZWx5IGEgZGVwZW5kZW5jeSByZWxhdGVkIHRvIGBJTkVUYCBhbmQgYElORklOSUJBTkRgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSB1c3VhbGx5IHNlZSB0aGF0IGluIHRoZSBzdGFuZGFyZCBrZXJuZWwgY29uZmlnLCBidXQgdGhlIGRlcGVuZGVuY3kgYWxzbyBpbmNsdWRlcyBgRElCU2A/IEhtbW0uLi4gSSBhbSBub3QgZmFtaWxpYXIgd2l0aCBgRElCU2AuIEkga25vdyBJIHNob3VsZCBkZWZpbml0ZWx5IGluY2x1ZGUgYFNNQ2AsIGBJTkVUYCwgYW5kIGBJTkZJTklCQU5EYCBiZWNhdXNlIG9mIHRoZSBjb250ZXh0LCBidXQgdGhhdCBgRElCU2AgaXMgdGhyb3dpbmcgbWUuIElzIHRoYXQgYSB0eXBvPyBPciwgaXMgdGhpcyBzb21ldGhpbmcgc3BlY2lmaWMgdG8gc3l6a2FsbGVyLCBwZXJoYXBzPyBPciwgbWF5YmUgaXQncyByZWxhdGVkIHRvIGBJUFY2YCBpbiBzb21lIHdheT8gTGV0IG1lIGRvIGEgcXVpY2sgc2VhcmNoIGFuZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgRElCU2AgcmVmZXJzIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTEwLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDA6MTA6MDEuNjQ5MTE0MTE0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM3MzM2ODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBESUJTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZGlicy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvZGlicy9LY29uZmlnOjI6Y29uZmlnIERJQlNcXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvZGlicy9LY29uZmlnLTEzLVxcbmRyaXZlcnMvZGlicy9LY29uZmlnOjE0OmNvbmZpZyBESUJTX0xPXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTUtXFx0Ym9vbCBcXFwiSW50cmEtT1Mgc2hvcnRjdXQgd2l0aCBkaWJzIGxvb3BiYWNrXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDoxMDowMy44ODY0NTc0NjZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzNjM4NDQ5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGxlbWVudGF0aW9uIG9mIERpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYW5kIGl0IHNlZW1zIHdlJ3JlIGRlYWxpbmcgd2l0aCBgRElCU2AsIHdoaWNoIEkgYXNzdW1lIGlzIERpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZy4gR2l2ZW4gdGhhdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gdGFraW5nIGludG8gYWNjb3VudCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBgU01DYCBhbmQgYElORklOSUJBTkRgLiBJJ2xsIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhvc2UgZnVuY3Rpb25hbGl0aWVzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGZ1bmN0aW9uIGNhbGxzIGltcGFjdGVkIGJ5IHRoaXMgY2hhbmdlLiBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmAsIGBzbWNkX2NkY19yeF90c2tsZXRgLCBgc21jX2NkY19yeF9oYW5kbGVyYCwgYF9fc21jX2J1Zl9jcmVhdGVgLCBhbmQgYHNtY2RfYnVmX2F0dGFjaGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgYXJlYXMgYWZmZWN0ZWQgYnkgdGhlIGBESUJTYCBpbXBsZW1lbnRhdGlvbiwgbGlrZWx5IGRlYWxpbmcgd2l0aCBtZXNzYWdlIGhhbmRsaW5nLCByZWNlaXZlIHByb2Nlc3NpbmcsIGFuZCBidWZmZXIgbWFuYWdlbWVudC5cblxuTmV4dCwgSSBuZWVkIHRvIHZlcmlmeSB3aGljaCBvZiB0aGVzZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyB3aWxsIHRlbGwgbWUgYWJvdXQgdGhlaXIgc2NvcGUgYW5kIHdoZXRoZXIgdGhleSBhcmUgbWVhbnQgdG8gYmUgYXZhaWxhYmxlIGV4dGVybmFsbHkgb3IgaWYgdGhleSBhcmUganVzdCBpbnRlcm5hbCBmdW5jdGlvbnMuIFRoaXMgZGV0YWlsIGNhbiBwb3RlbnRpYWxseSBhZmZlY3Qgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTY3LCJPdXRwdXRUb2tlbnMiOjY5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAwOjEwOjA4LjUyMjg0NTE1OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU3NDQ0OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX2NkY19tc2dfcmVjdl9hY3Rpb258c21jZF9jZGNfcnhfdHNrbGV0fHNtY19jZGNfcnhfaGFuZGxlcnxfX3NtY19idWZfY3JlYXRlfHNtY2RfYnVmX2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL2FmX3NtYy5jPTE0MTY9c3RhdGljIGludCBzbWNfY29ubmVjdF9pc20oc3RydWN0IHNtY19zb2NrICpzbWMsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE0NjUtXFx0aWYgKHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KHNtYy1cXHUwMDNlY29ubi5sZ3ItXFx1MDAzZXNtY2QpKSB7XFxubmV0L3NtYy9hZl9zbWMuYzoxNDY2OlxcdFxcdHJjID0gc21jZF9idWZfYXR0YWNoKHNtYyk7XFxubmV0L3NtYy9hZl9zbWMuYy0xNDY3LVxcdFxcdGlmIChyYykge1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0yNDQ5PXN0YXRpYyB2b2lkIHNtY19saXN0ZW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTI1NzMtXFx0ICAgIHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KG5ld19zbWMtXFx1MDAzZWNvbm4ubGdyLVxcdTAwM2VzbWNkKSkge1xcbm5ldC9zbWMvYWZfc21jLmM6MjU3NDpcXHRcXHRyYyA9IHNtY2RfYnVmX2F0dGFjaChuZXdfc21jKTtcXG5uZXQvc21jL2FmX3NtYy5jLTI1NzUtXFx0XFx0aWYgKHJjKVxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmM9MzA4PXN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3ZhbGlkYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2NkY19tc2cgKmNkYyxcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTMyOS1cXG5uZXQvc21jL3NtY19jZGMuYzozMzA6c3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXFxubmV0L3NtYy9zbWNfY2RjLmMtMzMxLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc21jX2NkY19tc2cgKmNkYylcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTMzOC1cXHQvKiBBY3F1aXJlIHRoZSBzZW5kIGJ1ZmZlciBvbmNlLCBwYWlyaW5nIHdpdGggdGhlIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW5cXG5uZXQvc21jL3NtY19jZGMuYzozMzk6XFx0ICogX19zbWNfYnVmX2NyZWF0ZSgpL3NtY2RfYnVmX2F0dGFjaCgpLiAgT24gdGhlIFNNQy1EIERNQi1ub2NvcHkgcGF0aFxcbm5ldC9zbWMvc21jX2NkYy5jLTM0MC1cXHQgKiB0aGUgZ2hvc3Qgc25kYnVmX2Rlc2MgaXMgYXR0YWNoZWQgb25seSBhZnRlciB0aGUgY29ubmVjdGlvbiBpcyBhbHJlYWR5XFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYz00NDc9c3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdihzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IHNtY19jZGNfbXNnICpjZGMpXFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYy00NTAtXFx0YmhfbG9ja19zb2NrKFxcdTAwMjZzbWMtXFx1MDAzZXNrKTtcXG5uZXQvc21jL3NtY19jZGMuYzo0NTE6XFx0c21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc21jLCBjZGMpO1xcbm5ldC9zbWMvc21jX2NkYy5jLTQ1Mi1cXHRiaF91bmxvY2tfc29jayhcXHUwMDI2c21jLVxcdTAwM2Vzayk7XFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYy00NjEtICovXFxubmV0L3NtYy9zbWNfY2RjLmM6NDYyOnN0YXRpYyB2b2lkIHNtY2RfY2RjX3J4X3Rza2xldChzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXFxubmV0L3NtYy9zbWNfY2RjLmMtNDYzLXtcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTQ3MS1cXHRcXHRyZXR1cm47XFxubmV0L3NtYy9zbWNfY2RjLmM6NDcyOlxcdC8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogdGhlIGNvbm5lY3Rpb25cXG5uZXQvc21jL3NtY19jZGMuYy00NzMtXFx0ICogaXMgcHVibGlzaGVkIGJlZm9yZSBpdHMgUk1CIGlzIGFsbG9jYXRlZCwgc28gYmFpbCB3aGlsZSBybWJfZGVzYyBpc1xcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmM9NDkwPXZvaWQgc21jZF9jZGNfcnhfaW5pdChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxubmV0L3NtYy9zbWNfY2RjLmMtNDkxLXtcXG5uZXQvc21jL3NtY19jZGMuYzo0OTI6XFx0dGFza2xldF9zZXR1cChcXHUwMDI2Y29ubi1cXHUwMDNlcnhfdHNrbGV0LCBzbWNkX2NkY19yeF90c2tsZXQpO1xcbm5ldC9zbWMvc21jX2NkYy5jLTQ5My19XFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYy00OTYtXFxubmV0L3NtYy9zbWNfY2RjLmM6NDk3OnN0YXRpYyB2b2lkIHNtY19jZGNfcnhfaGFuZGxlcihzdHJ1Y3QgaWJfd2MgKndjLCB2b2lkICpidWYpXFxubmV0L3NtYy9zbWNfY2RjLmMtNDk4LXtcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTUxMy1cXHRjb25uID0gc21jX2xncl9maW5kX2Nvbm4obnRvaGwoY2RjLVxcdTAwM2V0b2tlbiksIGxncik7XFxubmV0L3NtYy9zbWNfY2RjLmM6NTE0OlxcdC8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogYmFpbCB3aGlsZSB0aGVcXG5uZXQvc21jL3NtY19jZGMuYzo1MTU6XFx0ICogUk1CIGlzIHVuc2V0IChzbWNfY2RjX21zZ19yZWN2X2FjdGlvbigpIGRlcmVmZXJlbmNlcyBpdCkgdG8gYXZvaWQgYVxcbm5ldC9zbWMvc21jX2NkYy5jLTUxNi1cXHQgKiBOVUxMIGRlcmVmIGFuZCBhIHN0YWxlLWJ1ZmZlciByZWFkIGluIHRoZSBjb25uZWN0aW9uIHNldHVwIHdpbmRvdy5cXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTUzOS1cXG5uZXQvc21jL3NtY19jZGMuYzo1NDA6c3RhdGljIHN0cnVjdCBzbWNfd3JfcnhfaGFuZGxlciBzbWNfY2RjX3J4X2hhbmRsZXJzW10gPSB7XFxubmV0L3NtYy9zbWNfY2RjLmMtNTQxLVxcdHtcXG5uZXQvc21jL3NtY19jZGMuYzo1NDI6XFx0XFx0LmhhbmRsZXJcXHQ9IHNtY19jZGNfcnhfaGFuZGxlcixcXG5uZXQvc21jL3NtY19jZGMuYy01NDMtXFx0XFx0LnR5cGVcXHRcXHQ9IFNNQ19DRENfTVNHX1RZUEVcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jPTU1MD1pbnQgX19pbml0IHNtY19jZGNfaW5pdCh2b2lkKVxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmMtNTU0LVxcbm5ldC9zbWMvc21jX2NkYy5jOjU1NTpcXHRmb3IgKGhhbmRsZXIgPSBzbWNfY2RjX3J4X2hhbmRsZXJzOyBoYW5kbGVyLVxcdTAwM2VoYW5kbGVyOyBoYW5kbGVyKyspIHtcXG5uZXQvc21jL3NtY19jZGMuYy01NTYtXFx0XFx0SU5JVF9ITElTVF9OT0RFKFxcdTAwMjZoYW5kbGVyLVxcdTAwM2VsaXN0KTtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0yMzkwPXN0YXRpYyBzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpzbWNkX25ld19idWZfY3JlYXRlKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTI0MjUtXFxubmV0L3NtYy9zbWNfY29yZS5jOjI0MjY6c3RhdGljIGludCBfX3NtY19idWZfY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBib29sIGlzX3NtY2QsIGJvb2wgaXNfcm1iKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNDI3LXtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0yNTYxPWludCBzbWNfYnVmX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgYm9vbCBpc19zbWNkKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTI1NjktXFxubmV0L3NtYy9zbWNfY29yZS5jOjI1NzA6XFx0cmMgPSBfX3NtY19idWZfY3JlYXRlKHNtYywgaXNfc21jZCwgZmFsc2UpO1xcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTcxLVxcdGlmIChyYylcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTc1LVxcdC8qIGNyZWF0ZSBybWIgKi9cXG5uZXQvc21jL3NtY19jb3JlLmM6MjU3NjpcXHRyYyA9IF9fc21jX2J1Zl9jcmVhdGUoc21jLCBpc19zbWNkLCB0cnVlKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMjU3Ny1cXHRpZiAocmMgXFx1MDAyNlxcdTAwMjYgc21jLVxcdTAwM2Vjb25uLnNuZGJ1Zl9kZXNjKSB7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMjU4Ny1cXG5uZXQvc21jL3NtY19jb3JlLmM6MjU4ODppbnQgc21jZF9idWZfYXR0YWNoKHN0cnVjdCBzbWNfc29jayAqc21jKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTg5LXtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNjE2LVxcdCAqIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UgKHNtY19pc21fc2V0X2Nvbm4oKVxcbm5ldC9zbWMvc21jX2NvcmUuYzoyNjE3OlxcdCAqIHJhbiBpbiBfX3NtY19idWZfY3JlYXRlKCkpLCBzbyB0aGUgQ0RDIHJlY2VpdmUgdGFza2xldCBtdXN0IG9ic2VydmVcXG5uZXQvc21jL3NtY19jb3JlLmMtMjYxOC1cXHQgKiB0aGUgZnVsbHkgaW5pdGlhbGlzZWQgZ2hvc3QgYnVmZmVyIG9uY2UgaXQgc2VlcyBhIG5vbi1OVUxMXFxubmV0L3NtYy9zbWNfY29yZS5jLTI2MTktXFx0ICogc25kYnVmX2Rlc2MuICBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpblxcbm5ldC9zbWMvc21jX2NvcmUuYzoyNjIwOlxcdCAqIHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKCkuXFxubmV0L3NtYy9zbWNfY29yZS5jLTI2MjEtXFx0ICovXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmg9NTgzPWludCBzbWNfYnVmX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgYm9vbCBpc19zbWNkKTtcXG5uZXQvc21jL3NtY19jb3JlLmg6NTg0OmludCBzbWNkX2J1Zl9hdHRhY2goc3RydWN0IHNtY19zb2NrICpzbWMpO1xcbm5ldC9zbWMvc21jX2NvcmUuaC01ODUtaW50IHNtY191bmNvbXByZXNzX2J1ZnNpemUodTggY29tcHJlc3NlZCk7XFxuLS1cXG5uZXQvc21jL3NtY19yeC5jLTI5LS8qIGNhbGxiYWNrIGltcGxlbWVudGF0aW9uIHRvIHdha2V1cCBjb25zdW1lcnMgYmxvY2tlZCB3aXRoIHNtY19yeF93YWl0KCkuXFxubmV0L3NtYy9zbWNfcnguYzozMDogKiBpbmRpcmVjdGx5IGNhbGxlZCBieSBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbigpLlxcbm5ldC9zbWMvc21jX3J4LmMtMzEtICovXFxuLS1cXG5uZXQvc21jL3NtY19yeC5jPTM1Mj1pbnQgc21jX3J4X3JlY3Ztc2coc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9zbWMvc21jX3J4LmMtMzk4LVxcdFxcdGlmIChzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNiBSQ1ZfU0hVVERPV04pIHtcXG5uZXQvc21jL3NtY19yeC5jOjM5OTpcXHRcXHRcXHQvKiBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbigpIGNvdWxkIGhhdmUgcnVuIGFmdGVyXFxubmV0L3NtYy9zbWNfcnguYy00MDAtXFx0XFx0XFx0ICogYWJvdmUgc21jX3J4X3JlY3Ztc2dfZGF0YV9hdmFpbGFibGUoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDoxMDowOC41ODg1OTQ3MThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyMTk3MzAyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lc3NhZ2UgUmVjZXB0aW9uIGFuZCBCdWZmZXIgTWFuYWdlbWVudCBDb2RlKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgc21jX2NkY19tc2dfcmVjdl9hY3Rpb25gLCBgc21jZF9jZGNfcnhfdHNrbGV0YCwgYHNtY19jZGNfcnhfaGFuZGxlcmAsIGBfX3NtY19idWZfY3JlYXRlYCwgYW5kIGBzbWNkX2J1Zl9hdHRhY2hgLiBJdCBzZWVtcyBsaWtlIEkndmUgbWFkZSBzb21lIGNoYW5nZXMgdG8gYWxsIG9mIHRoZW0uIEkgc2VlIHRoYXQgYHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uYCwgYHNtY2RfY2RjX3J4X3Rza2xldGAsIGBzbWNfY2RjX3J4X2hhbmRsZXJgLCBhbmQgYF9fc21jX2J1Zl9jcmVhdGVgIGFyZSBhbGwgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCBtZWFuaW5nIHRoZWlyIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhlIGN1cnJlbnQgdHJhbnNsYXRpb24gdW5pdC4gQnV0IGBzbWNkX2J1Zl9hdHRhY2hgIGlzICpub3QqIHN0YXRpYywgc28gdGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLlxuXG5GdXJ0aGVybW9yZSwgYHNtY19idWZfY3JlYXRlYCBjYWxscyBgX19zbWNfYnVmX2NyZWF0ZWAsIHdoaWNoIG1ha2VzIHNlbnNlIGFzIGEga2luZCBvZiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24uIExvb2tpbmcgYXQgdGhlIGNhbGwgZmxvdywgYHNtY19jZGNfbXNnX3JlY3ZgIGNhbGxzIGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmAuIEFuZCwgZmluYWxseSwgYHNtY2RfY2RjX3J4X2luaXRgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIGBzbWNkX2NkY19yeF90c2tsZXRgLiBBbHNvLCBJJ3ZlIGdvdCBgc21jX2NkY19yeF9oYW5kbGVyc2AgY29udGFpbmluZyBgc21jX2NkY19yeF9oYW5kbGVyYC5cblxuR2l2ZW4gdGhpcyBvdmVydmlldywgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSB0aGUgb25lcyBJIHJlYWxseSBuZWVkIHRvIGZvY3VzIG9uIHJpZ2h0IG5vdy4gVGhhdCBtZWFucyBgc21jZF9idWZfYXR0YWNoYCBhbmQgYHNtY19idWZfY3JlYXRlYCBhcmUgdGhlIHByaW9yaXR5LiBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGBzbWNfY2RjX21zZ19yZWN2YCBpcyBub24tc3RhdGljIG9yIG5vdCB0b28sIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM5NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDoxMDoxMy4zMTA1NzIwMDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5OTI5NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19jZGNfbXNnX3JlY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfY2RjLmM9MzA4PXN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3ZhbGlkYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2NkY19tc2cgKmNkYyxcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTMyOS1cXG5uZXQvc21jL3NtY19jZGMuYzozMzA6c3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXFxubmV0L3NtYy9zbWNfY2RjLmMtMzMxLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc21jX2NkY19tc2cgKmNkYylcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTQ0Ni0vKiBjYWxsZWQgdW5kZXIgdGFza2xldCBjb250ZXh0ICovXFxubmV0L3NtYy9zbWNfY2RjLmM6NDQ3OnN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3JlY3Yoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfY2RjX21zZyAqY2RjKVxcbm5ldC9zbWMvc21jX2NkYy5jLTQ0OC17XFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYy00NTAtXFx0YmhfbG9ja19zb2NrKFxcdTAwMjZzbWMtXFx1MDAzZXNrKTtcXG5uZXQvc21jL3NtY19jZGMuYzo0NTE6XFx0c21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc21jLCBjZGMpO1xcbm5ldC9zbWMvc21jX2NkYy5jLTQ1Mi1cXHRiaF91bmxvY2tfc29jayhcXHUwMDI2c21jLVxcdTAwM2Vzayk7XFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYz00NjI9c3RhdGljIHZvaWQgc21jZF9jZGNfcnhfdHNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTQ4My1cXHRzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcXG5uZXQvc21jL3NtY19jZGMuYzo0ODQ6XFx0c21jX2NkY19tc2dfcmVjdihzbWMsIChzdHJ1Y3Qgc21jX2NkY19tc2cgKilcXHUwMDI2Y2RjKTtcXG5uZXQvc21jL3NtY19jZGMuYy00ODUtfVxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmM9NDk3PXN0YXRpYyB2b2lkIHNtY19jZGNfcnhfaGFuZGxlcihzdHJ1Y3QgaWJfd2MgKndjLCB2b2lkICpidWYpXFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYy01MTQtXFx0LyogUGFpciB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gX19zbWNfYnVmX2NyZWF0ZSgpOiBiYWlsIHdoaWxlIHRoZVxcbm5ldC9zbWMvc21jX2NkYy5jOjUxNTpcXHQgKiBSTUIgaXMgdW5zZXQgKHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKCkgZGVyZWZlcmVuY2VzIGl0KSB0byBhdm9pZCBhXFxubmV0L3NtYy9zbWNfY2RjLmMtNTE2LVxcdCAqIE5VTEwgZGVyZWYgYW5kIGEgc3RhbGUtYnVmZmVyIHJlYWQgaW4gdGhlIGNvbm5lY3Rpb24gc2V0dXAgd2luZG93Llxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmMtNTM0LVxcbm5ldC9zbWMvc21jX2NkYy5jOjUzNTpcXHRzbWNfY2RjX21zZ19yZWN2KHNtYywgY2RjKTtcXG5uZXQvc21jL3NtY19jZGMuYy01MzYtb3V0Olxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jPTI1ODg9aW50IHNtY2RfYnVmX2F0dGFjaChzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNjE5LVxcdCAqIHNuZGJ1Zl9kZXNjLiAgUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW5cXG5uZXQvc21jL3NtY19jb3JlLmM6MjYyMDpcXHQgKiBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbigpLlxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNjIxLVxcdCAqL1xcbi0tXFxubmV0L3NtYy9zbWNfcnguYy0yOS0vKiBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbiB0byB3YWtldXAgY29uc3VtZXJzIGJsb2NrZWQgd2l0aCBzbWNfcnhfd2FpdCgpLlxcbm5ldC9zbWMvc21jX3J4LmM6MzA6ICogaW5kaXJlY3RseSBjYWxsZWQgYnkgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oKS5cXG5uZXQvc21jL3NtY19yeC5jLTMxLSAqL1xcbi0tXFxubmV0L3NtYy9zbWNfcnguYz0zNTI9aW50IHNtY19yeF9yZWN2bXNnKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvc21jL3NtY19yeC5jLTM5OC1cXHRcXHRpZiAoc2stXFx1MDAzZXNrX3NodXRkb3duIFxcdTAwMjYgUkNWX1NIVVRET1dOKSB7XFxubmV0L3NtYy9zbWNfcnguYzozOTk6XFx0XFx0XFx0Lyogc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oKSBjb3VsZCBoYXZlIHJ1biBhZnRlclxcbm5ldC9zbWMvc21jX3J4LmMtNDAwLVxcdFxcdFxcdCAqIGFib3ZlIHNtY19yeF9yZWN2bXNnX2RhdGFfYXZhaWxhYmxlKClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDA6MTA6MTMuMzYwNTA4NDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzNzU0ODY1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNjb3BlIG9mIEZ1bmN0aW9ucyBpbiBgc21jX2NkYy5jYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBzbWNfY2RjX21zZ19yZWN2YCBhbmQgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQncyBsaW1pdGVkIGluIHNjb3BlIHdpdGhpbiB0aGUgYHNtY19jZGMuY2AgZmlsZSBpdHNlbGYuIFRoYXQgbWVhbnMgaXQgY2FuJ3QgYmUgY2FsbGVkIGRpcmVjdGx5IGZyb20gb3V0c2lkZSB0aGUgZmlsZS4gTXkgbmV4dCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgdGhhdCAqYXJlKiBhY2Nlc3NpYmxlIGZyb20gZWxzZXdoZXJlLCBhbmQgdGhlcmVmb3JlIHJlcHJlc2VudCBhbiBpbnRlcmZhY2UgdG8gdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gSSBrbm93IGBzbWNkX2J1Zl9hdHRhY2hgIGFuZCBgc21jX2J1Zl9jcmVhdGVgIGFyZSBub24tc3RhdGljLCBzbyB0aGV5J3JlIGRlZmluaXRlbHkgb24gbXkgcmFkYXIuIEJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlcmUgYXJlbid0IGFueSBvdGhlciBmdW5jdGlvbnMgd2l0aGluIHRoaXMgZmlsZSB0aGF0IGFyZSBhbHNvIGV4cG9zZWQgZXh0ZXJuYWxseS4gTGV0IG1lIHF1aWNrbHkgc2NhbiB0aHJvdWdoIHRoZSBzb3VyY2UgYW5kIGNvbmZpcm0gdGhlcmUgYXJlbid0IGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgc21jX2NkYy5jYCB0aGF0IEkndmUgbWlzc2VkLiBJdCdzIGltcG9ydGFudCB0byBoYXZlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgZXh0ZXJuYWwgaW50ZXJmYWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMTAsIk91dHB1dFRva2VucyI6NjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDoxMDoxNi43OTgwNjA5ODNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MTAyNzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL3NtY19jZGMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19jZGMuYz0yNj1zdGF0aWMgdm9pZCBzbWNfY2RjX3R4X2hhbmRsZXIoc3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKnBuZF9zbmQsXFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYy03Mi1cXG5uZXQvc21jL3NtY19jZGMuYzo3MzppbnQgc21jX2NkY19nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcXG5uZXQvc21jL3NtY19jZGMuYy03NC1cXHRcXHRcXHQgIHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jPTk0PXN0YXRpYyBpbmxpbmUgdm9pZCBzbWNfY2RjX2FkZF9wZW5kaW5nX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmMtMTExLVxcbm5ldC9zbWMvc21jX2NkYy5jOjExMjppbnQgc21jX2NkY19tc2dfc2VuZChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sXFxubmV0L3NtYy9zbWNfY2RjLmMtMTEzLVxcdFxcdCAgICAgc3RydWN0IHNtY193cl9idWYgKndyX2J1ZixcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTE0Mi0vKiBzZW5kIGEgdmFsaWRhdGlvbiBtc2cgaW5kaWNhdGluZyB0aGUgbW92ZSBvZiBhIGNvbm4gdG8gYW4gb3RoZXIgUVAgbGluayAqL1xcbm5ldC9zbWMvc21jX2NkYy5jOjE0MzppbnQgc21jcl9jZGNfbXNnX3NlbmRfdmFsaWRhdGlvbihzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sXFxubmV0L3NtYy9zbWNfY2RjLmMtMTQ0LVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc21jX2NkY190eF9wZW5kICpwZW5kLFxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmM9MTc0PXN0YXRpYyBpbnQgc21jcl9jZGNfZ2V0X3Nsb3RfYW5kX21zZ19zZW5kKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTIwOC1cXG5uZXQvc21jL3NtY19jZGMuYzoyMDk6aW50IHNtY19jZGNfZ2V0X3Nsb3RfYW5kX21zZ19zZW5kKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG5uZXQvc21jL3NtY19jZGMuYy0yMTAte1xcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmMtMjI3LVxcbm5ldC9zbWMvc21jX2NkYy5jOjIyODp2b2lkIHNtY19jZGNfd2FpdF9wZW5kX3R4X3dyKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG5uZXQvc21jL3NtY19jZGMuYy0yMjkte1xcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmMtMjM2LSAqL1xcbm5ldC9zbWMvc21jX2NkYy5jOjIzNzppbnQgc21jZF9jZGNfbXNnX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxcbm5ldC9zbWMvc21jX2NkYy5jLTIzOC17XFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYz00NjI9c3RhdGljIHZvaWQgc21jZF9jZGNfcnhfdHNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTQ4OS0gKi9cXG5uZXQvc21jL3NtY19jZGMuYzo0OTA6dm9pZCBzbWNkX2NkY19yeF9pbml0KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG5uZXQvc21jL3NtY19jZGMuYy00OTEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDoxMDoxNi44NTQxNjk4NzJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM4MDQxMzQ2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSW5pdGlhbGl6YXRpb24gYW5kIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYWRkIGBzbWNkX2NkY19yeF9pbml0YCB0byB0aGUgbGlzdCBhcyB3ZWxsOyBpdOKAmXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGluaXRpYWxpemVzIHRoZSBSWCB0YXNrbGV0LiBBbmQgbGV0J3Mgbm90IGZvcmdldCBgc21jX2J1Zl9jcmVhdGVgIGFuZCBgc21jZF9idWZfYXR0YWNoYC4gSSdtIGRvdWJsZS1jaGVja2luZyBub3cgdG8gY29uZmlybSB0aGF0IGBzbWNkX2NkY19yeF9pbml0YCBpc24ndCBzdGF0aWMuIFllcywgZ29vZCwgaXQgaXNuJ3QuXG5cbkFoLCByaWdodCwgbm93IEkgcmVtZW1iZXIsIGBzbWNkX2NkY19yeF9pbml0YCBpcyBjYWxsZWQgZHVyaW5nIHRoZSBjb25uZWN0aW9uIHNldHVwIHBoYXNlLiBUaGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uIHRoYXQgY2FuIG9jY3VyIGR1cmluZyB0aGF0IGNvbm5lY3Rpb24gc2V0dXAsIHdoZXJlIGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmAgbWlnaHQgYmUgY2FsbGVkIHByZW1hdHVyZWx5LCBiZWZvcmUgYGNvbm4tXHUwMDNlc25kYnVmX2Rlc2NgIGFuZCBgY29ubi1cdTAwM2VybWJfZGVzY2AgaGF2ZSBiZWVuIGZ1bGx5IGluaXRpYWxpemVkLlxuXG5MZXQgbWUgcXVpY2tseSByZXZpZXcgdGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkOiBgU01DYCwgYElORklOSUJBTkRgLCBhbmQgYERJQlNgLiBIb2xkIG9uIGEgbWludXRl4oCmIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYERJQlNgIGlzIHNvbWV0aGluZyB0aGF0J3MgcGFydCBvZiB0aGUgc3RhbmRhcmQga2VybmVsLiBJICp0aGluayogSSBzYXcgYGRyaXZlcnMvZGlicy9LY29uZmlnYCBpbiB0aGF0IGdyZXBwZXIgb3V0cHV0LCBidXQgSSdtIGp1c3QgcXVpY2tseSBjb25maXJtaW5nIG5vdy4gQWhhLCBpdCBzZWVtcyBsaWtlIGBkcml2ZXJzL2RpYnMvS2NvbmZpZ2AgaXNuJ3QgYWN0dWFsbHkgaW4gdGhlIHN0YW5kYXJkIExpbnV4IGtlcm5lbC4gSXQgY291bGQgYmUgc3BlY2lmaWMgdG8gc3l6a2FsbGVyLCBvciBwZXJoYXBzIGEgY3VzdG9tIGRyaXZlci5cblxuT2theSwgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhhdCBgRElCU2AgaXMgaW5kZWVkIGxpc3RlZCBpbiBgbmV0L3NtYy9LY29uZmlnYC4gV2FpdCwgd2Fzbid0IHN1cmUgaWYgdGhhdCB3YXMganVzdCBhIHR5cG8uIEFoLCB5ZXMsIGBuZXQvc21jL0tjb25maWdgIGRvZXMgaGF2ZSBgZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBESUJTYC4gQnV0LCBJIGRpZG4ndCBzZWUgRElCUyBpbiB0aGUgc3RhbmRhcmQga2VybmVsLiBUaGF0J3MgYSBwb2ludCBvZiBjb25mdXNpb24uIExldCBtZSBqdXN0IG9wZW4gYG5ldC9zbWMvS2NvbmZpZ2AgYWdhaW4gdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMDAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDA6MTA6MjIuMjM0NTg2MjY5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFNNQ1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IElORklOSUJBTkQgXFx1MDAyNlxcdTAwMjYgRElCU1xcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBTTUMtUiBwcm92aWRlcyBhIFxcXCJzb2NrZXRzIG92ZXIgUkRNQVxcXCIgc29sdXRpb24gbWFraW5nIHVzZSBvZlxcbiAgIDc6XFx0XFx0ICBSRE1BIG92ZXIgQ29udmVyZ2VkIEV0aGVybmV0IChSb0NFKSB0ZWNobm9sb2d5IHRvIHVwZ3JhZGVcXG4gICA4OlxcdFxcdCAgQUZfSU5FVCBUQ1AgY29ubmVjdGlvbnMgdHJhbnNwYXJlbnRseS5cXG4gICA5OlxcdFxcdCAgVGhlIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTTUMtUiBzb2x1dGlvbiBpcyBkZXNpZ25lZCBhc1xcbiAgMTA6XFx0XFx0ICBhIHNlcGFyYXRlIHNvY2tldCBmYW1pbHkgU01DLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBydW4gU01DIHNvY2tldCBhcHBsaWNhdGlvbnNcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIFNNQ19ESUFHXFxuICAxNTpcXHRcXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIFNNQ1xcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBTdXBwb3J0IGZvciBTTUMgc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdG9vbHMgc3VjaCBhc1xcbiAgMTk6XFx0XFx0ICBzbWNzcy5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDoxMDoyMi4yMzQ2NDY0NjlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwMDk4Mjg0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZXBlbmRlbmNpZXMgYW5kIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gdGhpcyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGNvdmVyIGFsbCB0aGUgYmFzZXMuIEl0IGRlZmluaXRlbHkgaGluZ2VzIG9uIGBJTkVUYCwgYElORklOSUJBTkRgLCBhbmQgYERJQlNgLiBObyBxdWVzdGlvbiBhYm91dCB0aGF0LiBUaGVyZWZvcmUsIEkgbmVlZCB0byBiZSBzdXJlIHRvIGV4cGxpY2l0bHkgaW5jbHVkZSB0aG9zZS4gV2FpdCwgYElORVRgIGlzIGFsd2F5cyB0aGVyZSwgaXNuJ3QgaXQ/IEl0J3MgcHJldHR5IHN0YW5kYXJkLCBidXQganVzdCB0byBiZSBzdXJlIEknbGwgc3RpbGwgaW5jbHVkZSBpdC4gTm8gaGFybSBpbiBiZWluZyBleHRyYSBjYXV0aW91cywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBjb3JlIGNvbXBvbmVudHMuIE5vdywgYmVmb3JlIEkgY29tbWl0IHRvIGFueXRoaW5nLCBsZXQgbWUgZG91YmxlLWNoZWNrIGlmIGBESUJTYCBoYXMgYW55ICpvdGhlciogZGVwZW5kZW5jaWVzIEkgbWlnaHQgYmUgbWlzc2luZy4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjI2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDoxMDoyNS44MzU2MzE2M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RpYnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdGNvbmZpZyBESUJTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZWZhdWx0IG5cXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIChESUJTKSBpcyBhIGNvbW11bmljYXRpb24gbWV0aG9kIHRoYXRcXG4gICA3OlxcdFxcdCAgdXNlcyBjb21tb24gcGh5c2ljYWwgKGludGVybmFsKSBtZW1vcnkgZm9yIHN5bmNocm9ub3VzIGRpcmVjdCBhY2Nlc3NcXG4gICA4OlxcdFxcdCAgaW50byBhIHJlbW90ZSBidWZmZXIuXFxuICAgOTpcXHRcXG4gIDEwOlxcdFxcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIHByb3ZpZGUgdGhlIGFic3RyYWN0aW9uIGxheWVyIGJldHdlZW5cXG4gIDExOlxcdFxcdCAgZGlicyBkZXZpY2VzIGFuZCBkaWJzIGNsaWVudHMgbGlrZSB0aGUgU01DIHByb3RvY29sLlxcbiAgMTI6XFx0XFx0ICBUaGUgbW9kdWxlIG5hbWUgaXMgZGlicy5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIERJQlNfTE9cXG4gIDE1OlxcdFxcdGJvb2wgXFxcIkludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1xcXCJcXG4gIDE2OlxcdFxcdGRlcGVuZHMgb24gRElCU1xcbiAgMTc6XFx0XFx0ZGVmYXVsdCBuXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIERJQlNfTE8gZW5hYmxlcyB0aGUgY3JlYXRpb24gb2YgYW4gc29mdHdhcmUtZW11bGF0ZWQgZGlicyBkZXZpY2VcXG4gIDIwOlxcdFxcdCAgbmFtZWQgbG8gd2hpY2ggY2FuIGJlIHVzZWQgZm9yIHRyYW5zZmVycmluZyBkYXRhIHdoZW4gY29tbXVuaWNhdGlvblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDoxMDoyNS44MzU2ODczN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjg0MjIzOTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbnNpZGVyaW5nIFNNQy1EIGFuZCBJU00gU3VwcG9ydCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBESUJTYCBhbmQgYERJQlNfTE9gLiBSaWdodCwgYERJQlNfTE9gIGlzIHRoZSBzb2Z0d2FyZS1lbXVsYXRlZCBcImxvXCIgZGlicyBkZXZpY2UuIFRoYXQncyBnb29kLCBiZWNhdXNlIFNNQy1EIG5lZWRzIGFuIElTTSBkZXZpY2UsIGFuZCBzaW5jZSBgRElCU19MT2AgcHJvdmlkZXMgYSB2aXJ0dWFsaXplZCBvbmUsIHdlIGFic29sdXRlbHkgbmVlZCB0byBpbmNsdWRlIGl0LiBJdCdsbCBtYWtlIHRoaW5ncyBtdWNoIGVhc2llciBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEhtbSwgbm93IEknbSB0aGlua2luZywgU01DLUQgKmRvZXMqIHVzZSBJU00sIHNvIGBESUJTYCBpcyBwcm9iYWJseSB0aGUgY3VzdG9tIG5hbWUgZm9yIElTTSBpbiB0aGlzIGtlcm5lbCB0cmVlLiBPciBtYXliZSBpdCdzIGEgbmV3IGZlYXR1cmUsIHNvbWV0aGluZyBJIGhhdmVuJ3Qgc2VlbiBiZWZvcmUuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGJ5IGxvb2tpbmcgYXQgYHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NDEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDoxMDoyOS41MTk5MTM5MTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzMzIwNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvYWZfc21jLmM9MTQxNj1zdGF0aWMgaW50IHNtY19jb25uZWN0X2lzbShzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTQ2NC1cXG5uZXQvc21jL2FmX3NtYy5jOjE0NjU6XFx0aWYgKHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KHNtYy1cXHUwMDNlY29ubi5sZ3ItXFx1MDAzZXNtY2QpKSB7XFxubmV0L3NtYy9hZl9zbWMuYy0xNDY2LVxcdFxcdHJjID0gc21jZF9idWZfYXR0YWNoKHNtYyk7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTI0NDk9c3RhdGljIHZvaWQgc21jX2xpc3Rlbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjU3Mi1cXHRpZiAoaW5pLVxcdTAwM2Vpc19zbWNkIFxcdTAwMjZcXHUwMDI2XFxubmV0L3NtYy9hZl9zbWMuYzoyNTczOlxcdCAgICBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShuZXdfc21jLVxcdTAwM2Vjb25uLmxnci1cXHUwMDNlc21jZCkpIHtcXG5uZXQvc21jL2FmX3NtYy5jLTI1NzQtXFx0XFx0cmMgPSBzbWNkX2J1Zl9hdHRhY2gobmV3X3NtYyk7XFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYz0yMzc9aW50IHNtY2RfY2RjX21zZ19zZW5kKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTI1OS1cXG5uZXQvc21jL3NtY19jZGMuYzoyNjA6XFx0aWYgKHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KGNvbm4tXFx1MDAzZWxnci1cXHUwMDNlc21jZCkpXFxubmV0L3NtYy9zbWNfY2RjLmMtMjYxLVxcdFxcdC8qIGlmIGxvY2FsIHNuZGJ1ZiBzaGFyZXMgdGhlIHNhbWUgbWVtb3J5IHJlZ2lvbiB3aXRoXFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYz0zMzA9c3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYy0zNzAtXFx0XFx0aWYgKGNvbm4tXFx1MDAzZWxnci1cXHUwMDNlaXNfc21jZCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9zbWMvc21jX2NkYy5jOjM3MTpcXHRcXHQgICAgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi1cXHUwMDNlbGdyLVxcdTAwM2VzbWNkKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9zbWMvc21jX2NkYy5jLTM3Mi1cXHRcXHQgICAgc25kYnVmX2Rlc2MpIHtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xMjUzPXZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTI3Mi1cXHRcXHRcXHRzbWNfaXNtX3Vuc2V0X2Nvbm4oY29ubik7XFxubmV0L3NtYy9zbWNfY29yZS5jOjEyNzM6XFx0XFx0aWYgKHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KGxnci1cXHUwMDNlc21jZCkpXFxubmV0L3NtYy9zbWNfY29yZS5jLTEyNzQtXFx0XFx0XFx0c21jZF9idWZfZGV0YWNoKGNvbm4pO1xcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jPTE1MTU9c3RhdGljIHZvaWQgc21jX2Nvbm5fa2lsbChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sIGJvb2wgc29mdClcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xNTI3LVxcdFxcdHNtY19pc21fdW5zZXRfY29ubihjb25uKTtcXG5uZXQvc21jL3NtY19jb3JlLmM6MTUyODpcXHRcXHRpZiAoc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi1cXHUwMDNlbGdyLVxcdTAwM2VzbWNkKSlcXG5uZXQvc21jL3NtY19jb3JlLmMtMTUyOS1cXHRcXHRcXHRzbWNkX2J1Zl9kZXRhY2goY29ubik7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MjU2MT1pbnQgc21jX2J1Zl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIGJvb2wgaXNfc21jZClcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTY2LVxcdGlmIChpc19zbWNkIFxcdTAwMjZcXHUwMDI2XFxubmV0L3NtYy9zbWNfY29yZS5jOjI1Njc6XFx0ICAgIHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KHNtYy1cXHUwMDNlY29ubi5sZ3ItXFx1MDAzZXNtY2QpKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTY4LVxcdFxcdGdvdG8gY3JlYXRlX3JtYjtcXG4tLVxcbm5ldC9zbWMvc21jX2lzbS5jPTIzNT1pbnQgc21jX2lzbV9yZWdpc3Rlcl9kbWIoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsIGludCBkbWJfbGVuLFxcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmMtMjU5LVxcbm5ldC9zbWMvc21jX2lzbS5jOjI2MDpib29sIHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KHN0cnVjdCBzbWNkX2RldiAqc21jZClcXG5uZXQvc21jL3NtY19pc20uYy0yNjEte1xcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmg9NTE9dm9pZCBzbWNfaXNtX3VucmVnaXN0ZXJfZG1iKHN0cnVjdCBzbWNkX2RldiAqZGV2LFxcbm5ldC9zbWMvc21jX2lzbS5oLTUyLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpkbWJfZGVzYyk7XFxubmV0L3NtYy9zbWNfaXNtLmg6NTM6Ym9vbCBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShzdHJ1Y3Qgc21jZF9kZXYgKnNtY2QpO1xcbm5ldC9zbWMvc21jX2lzbS5oLTU0LWludCBzbWNfaXNtX2F0dGFjaF9kbWIoc3RydWN0IHNtY2RfZGV2ICpkZXYsIHU2NCB0b2tlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDA6MTA6MjkuNjEzMjQwMjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2NTU3NTQ1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBwYXRjaCBoaWdobGlnaHRzIG1vZGlmaWNhdGlvbnMgdG8gc2V2ZXJhbCBmdW5jdGlvbnM6IGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmAsIGBzbWNkX2NkY19yeF90c2tsZXRgLCBgc21jX2NkY19yeF9oYW5kbGVyYCwgYF9fc21jX2J1Zl9jcmVhdGVgLCBhbmQgYHNtY2RfYnVmX2F0dGFjaGAuIExvb2tpbmcgYXQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb25zLCBpdCBsb29rcyBsaWtlIGBzbWNkX2J1Zl9hdHRhY2hgIGFuZCBgc21jX2J1Zl9jcmVhdGVgIGFyZSB0aGUgZnVuY3Rpb25zIGV4cG9zZWQgZXh0ZXJuYWxseS4gSG9sZCBvbiwgYHNtY2RfY2RjX3J4X2luaXRgIGlzIGFsc28gbm9uLXN0YXRpYywgdGhvdWdoIGl0IHNpbXBseSBzZXRzIHVwIGEgdGFza2xldCBhbmQgSSBkb24ndCBzZWUgYW55IG9idmlvdXMgYXR0YWNrIHN1cmZhY2UgdGhlcmUuIFNvLCB0aGUgY29yZSB0YXJnZXRzIGZvciBmdXp6aW5nLCBnaXZlbiB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaCwgYXJlIHJlYWxseSBgc21jZF9idWZfYXR0YWNoYCBhbmQgYHNtY19idWZfY3JlYXRlYC4gSG1tbSwgYnV0IG5vdyB0aGF0IEkgdGhpbmsgYWJvdXQgaXQsIGBzbWNfYnVmX2NyZWF0ZWAgaXMgdGllZCB0byBjb25uZWN0aW9uIHNldHVwLCBzbyBJIHNob3VsZCBzZWUgaG93IGl0IGlzIGNhbGxlZCBhbmQgaWYgSSBjYW4gY29udHJvbCB0aGUgaW5wdXQuIExldCBtZSBzZWUgd2hlcmUgdGhpcyBgc21jX2J1Zl9jcmVhdGVgIGlzIGNhbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMjksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDA6MTA6MzMuNjc4ODE4NTM3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTgxMjA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfYnVmX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL2FmX3NtYy5jPTEyNjc9c3RhdGljIGludCBzbWNfY29ubmVjdF9yZG1hKHN0cnVjdCBzbWNfc29jayAqc21jLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xMzIyLVxcdC8qIGNyZWF0ZSBzZW5kIGJ1ZmZlciBhbmQgcm1iICovXFxubmV0L3NtYy9hZl9zbWMuYzoxMzIzOlxcdGlmIChzbWNfYnVmX2NyZWF0ZShzbWMsIGZhbHNlKSkge1xcbm5ldC9zbWMvYWZfc21jLmMtMTMyNC1cXHRcXHRyZWFzb25fY29kZSA9IFNNQ19DTENfREVDTF9NRU07XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTE0MTY9c3RhdGljIGludCBzbWNfY29ubmVjdF9pc20oc3RydWN0IHNtY19zb2NrICpzbWMsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE0NTYtXFx0LyogQ3JlYXRlIHNlbmQgYW5kIHJlY2VpdmUgYnVmZmVycyAqL1xcbm5ldC9zbWMvYWZfc21jLmM6MTQ1NzpcXHRyYyA9IHNtY19idWZfY3JlYXRlKHNtYywgdHJ1ZSk7XFxubmV0L3NtYy9hZl9zbWMuYy0xNDU4LVxcdGlmIChyYykge1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0yMDc0PXN0YXRpYyBpbnQgc21jX2xpc3Rlbl9yZG1hX2luaXQoc3RydWN0IHNtY19zb2NrICpuZXdfc21jLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0yMDg0LVxcdC8qIGNyZWF0ZSBzZW5kIGJ1ZmZlciBhbmQgcm1iICovXFxubmV0L3NtYy9hZl9zbWMuYzoyMDg1OlxcdGlmIChzbWNfYnVmX2NyZWF0ZShuZXdfc21jLCBmYWxzZSkpIHtcXG5uZXQvc21jL2FmX3NtYy5jLTIwODYtXFx0XFx0c21jX2Nvbm5fYWJvcnQobmV3X3NtYywgaW5pLVxcdTAwM2VmaXJzdF9jb250YWN0X2xvY2FsKTtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MjA5ND1zdGF0aWMgaW50IHNtY19saXN0ZW5faXNtX2luaXQoc3RydWN0IHNtY19zb2NrICpuZXdfc21jLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0yMTAzLVxcdC8qIENyZWF0ZSBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlcnMgKi9cXG5uZXQvc21jL2FmX3NtYy5jOjIxMDQ6XFx0cmMgPSBzbWNfYnVmX2NyZWF0ZShuZXdfc21jLCB0cnVlKTtcXG5uZXQvc21jL2FmX3NtYy5jLTIxMDUtXFx0aWYgKHJjKSB7XFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYz0zMzA9c3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYy0zMzgtXFx0LyogQWNxdWlyZSB0aGUgc2VuZCBidWZmZXIgb25jZSwgcGFpcmluZyB3aXRoIHRoZSBzbXBfc3RvcmVfcmVsZWFzZSgpIGluXFxubmV0L3NtYy9zbWNfY2RjLmM6MzM5OlxcdCAqIF9fc21jX2J1Zl9jcmVhdGUoKS9zbWNkX2J1Zl9hdHRhY2goKS4gIE9uIHRoZSBTTUMtRCBETUItbm9jb3B5IHBhdGhcXG5uZXQvc21jL3NtY19jZGMuYy0zNDAtXFx0ICogdGhlIGdob3N0IHNuZGJ1Zl9kZXNjIGlzIGF0dGFjaGVkIG9ubHkgYWZ0ZXIgdGhlIGNvbm5lY3Rpb24gaXMgYWxyZWFkeVxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmM9NDYyPXN0YXRpYyB2b2lkIHNtY2RfY2RjX3J4X3Rza2xldChzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYy00NzEtXFx0XFx0cmV0dXJuO1xcbm5ldC9zbWMvc21jX2NkYy5jOjQ3MjpcXHQvKiBQYWlyIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBfX3NtY19idWZfY3JlYXRlKCk6IHRoZSBjb25uZWN0aW9uXFxubmV0L3NtYy9zbWNfY2RjLmMtNDczLVxcdCAqIGlzIHB1Ymxpc2hlZCBiZWZvcmUgaXRzIFJNQiBpcyBhbGxvY2F0ZWQsIHNvIGJhaWwgd2hpbGUgcm1iX2Rlc2MgaXNcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jPTQ5Nz1zdGF0aWMgdm9pZCBzbWNfY2RjX3J4X2hhbmRsZXIoc3RydWN0IGliX3djICp3Yywgdm9pZCAqYnVmKVxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmMtNTEzLVxcdGNvbm4gPSBzbWNfbGdyX2ZpbmRfY29ubihudG9obChjZGMtXFx1MDAzZXRva2VuKSwgbGdyKTtcXG5uZXQvc21jL3NtY19jZGMuYzo1MTQ6XFx0LyogUGFpciB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gX19zbWNfYnVmX2NyZWF0ZSgpOiBiYWlsIHdoaWxlIHRoZVxcbm5ldC9zbWMvc21jX2NkYy5jLTUxNS1cXHQgKiBSTUIgaXMgdW5zZXQgKHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKCkgZGVyZWZlcmVuY2VzIGl0KSB0byBhdm9pZCBhXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MjM5MD1zdGF0aWMgc3RydWN0IHNtY19idWZfZGVzYyAqc21jZF9uZXdfYnVmX2NyZWF0ZShzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNDI1LVxcbm5ldC9zbWMvc21jX2NvcmUuYzoyNDI2OnN0YXRpYyBpbnQgX19zbWNfYnVmX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgYm9vbCBpc19zbWNkLCBib29sIGlzX3JtYilcXG5uZXQvc21jL3NtY19jb3JlLmMtMjQyNy17XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MjUzOT12b2lkIHNtY19ybWJfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTYwLSAqL1xcbm5ldC9zbWMvc21jX2NvcmUuYzoyNTYxOmludCBzbWNfYnVmX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgYm9vbCBpc19zbWNkKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTYyLXtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTY5LVxcbm5ldC9zbWMvc21jX2NvcmUuYzoyNTcwOlxcdHJjID0gX19zbWNfYnVmX2NyZWF0ZShzbWMsIGlzX3NtY2QsIGZhbHNlKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMjU3MS1cXHRpZiAocmMpXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMjU3NS1cXHQvKiBjcmVhdGUgcm1iICovXFxubmV0L3NtYy9zbWNfY29yZS5jOjI1NzY6XFx0cmMgPSBfX3NtY19idWZfY3JlYXRlKHNtYywgaXNfc21jZCwgdHJ1ZSk7XFxubmV0L3NtYy9zbWNfY29yZS5jLTI1NzctXFx0aWYgKHJjIFxcdTAwMjZcXHUwMDI2IHNtYy1cXHUwMDNlY29ubi5zbmRidWZfZGVzYykge1xcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jPTI1ODg9aW50IHNtY2RfYnVmX2F0dGFjaChzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNjE2LVxcdCAqIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UgKHNtY19pc21fc2V0X2Nvbm4oKVxcbm5ldC9zbWMvc21jX2NvcmUuYzoyNjE3OlxcdCAqIHJhbiBpbiBfX3NtY19idWZfY3JlYXRlKCkpLCBzbyB0aGUgQ0RDIHJlY2VpdmUgdGFza2xldCBtdXN0IG9ic2VydmVcXG5uZXQvc21jL3NtY19jb3JlLmMtMjYxOC1cXHQgKiB0aGUgZnVsbHkgaW5pdGlhbGlzZWQgZ2hvc3QgYnVmZmVyIG9uY2UgaXQgc2VlcyBhIG5vbi1OVUxMXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmg9NTgyPXZvaWQgc21jX3NtY3JfdGVybWluYXRlX2FsbChzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYpO1xcbm5ldC9zbWMvc21jX2NvcmUuaDo1ODM6aW50IHNtY19idWZfY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBib29sIGlzX3NtY2QpO1xcbm5ldC9zbWMvc21jX2NvcmUuaC01ODQtaW50IHNtY2RfYnVmX2F0dGFjaChzdHJ1Y3Qgc21jX3NvY2sgKnNtYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAwOjEwOjMzLjc0MDYzNDk3N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTU3NzY3NjE3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFNNQyBSZWNlaXZlIFBhdGggVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaCwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBzbWNfYnVmX2NyZWF0ZWAgYW5kIGBzbWNkX2J1Zl9hdHRhY2hgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gVGhleSBhcmUgdGhlIGNvcmUgb2YgYnVmZmVyIG1hbmFnZW1lbnQgaW4gdGhpcyBhcmVhLCB3aGljaCBtYWtlcyB0aGVtIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuIEFmdGVyIGEgbGl0dGxlIG1vcmUgZGlnZ2luZywgSSByZWFsaXplIHRoYXQgYHNtY2RfYnVmX2F0dGFjaGAgaXMgY2FsbGVkIHdpdGhpbiBjb25uZWN0aW9uIHNldHVwIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBzbWNfY29ubmVjdF9pc21gIGFuZCBgc21jX2xpc3Rlbl93b3JrYC4gVGhlc2UgYXJlIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbiwgYnV0IHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmAgbWlnaHQgYmUgdHJpZ2dlcmVkIGJlZm9yZSBrZXkgYnVmZmVycyAoYGNvbm4tXHUwMDNlc25kYnVmX2Rlc2NgIG9yIGBjb25uLVx1MDAzZXJtYl9kZXNjYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBUaGF0J3MgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGNvZGUgYW5kIGZ1enppbmcgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgaXMgZXhhY3RseSB0aGUga2luZCBvZiB0aGluZyB0aGF0IGNvdWxkIGV4cG9zZSB0aGlzIGtpbmQgb2YgYnVnLlxuXG5TaW5jZSB3ZSBhcmUgZm9jdXNlZCBvbiB0aGUgcmFjZSBjb25kaXRpb24sIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gaW5jbHVkZSB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgcmVjZWl2ZSBwYXRoLiBgc21jX2NkY19tc2dfcmVjdl9hY3Rpb25gIGlzIHN0YXRpYywgYnV0IGl0J3MgY2FsbGVkIGJ5IGBzbWNfY2RjX21zZ19yZWN2YCwgd2hpY2ggaXMgYWxzbyBzdGF0aWMuIFRoZXNlIGFyZSwgaW4gdHVybiwgY2FsbGVkIGJ5IGBzbWNkX2NkY19yeF90c2tsZXRgIGFuZCBgc21jX2NkY19yeF9oYW5kbGVyYC4gSSBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGFuZCBpbmNsdWRlIHRoZXNlLiBgc21jZF9jZGNfcnhfdHNrbGV0YCBpcyBhIHRhc2tsZXQgaGFuZGxlciwgYW5kIGBzbWNfY2RjX3J4X2hhbmRsZXJgIGlzIGEgd29ya3F1ZXVlL3Rhc2tsZXQgaGFuZGxlci4gVGhlIHJlY2VpdmUgcGF0aCBpcyB1bHRpbWF0ZWx5IHRyaWdnZXJlZCBieSBlaXRoZXIgdGhlIElCIGRldmljZSBvciB0aGUgSVNNIGRldmljZS4gU2luY2UgYHNtY19idWZfY3JlYXRlYCBhbmQgYHNtY2RfYnVmX2F0dGFjaGAgYXJlIGZ1bmRhbWVudGFsIHRvIHRoZSByZWNlaXZlIHByb2Nlc3MsIEkgYmVsaWV2ZSBmdXp6aW5nIHRoZXNlIHNob3VsZCBleHBvc2UgdGhlIHZ1bG5lcmFiaWxpdHkuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGxvb2sgZm9yIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgc21jX2NkYy5jYCB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBMZXQncyBzZWUuLi5JJ3ZlIGdvdCBgc21jX2NkY19nZXRfZnJlZV9zbG90YCwgYHNtY19jZGNfbXNnX3NlbmRgLCBgc21jcl9jZGNfbXNnX3NlbmRfdmFsaWRhdGlvbmAsIGBzbWNfY2RjX2dldF9zbG90X2FuZF9tc2dfc2VuZGAsIGBzbWNfY2RjX3dhaXRfcGVuZF90eF93cmAsIGBzbWNkX2NkY19tc2dfc2VuZGAsIGFuZCBgc21jZF9jZGNfcnhfaW5pdGAuIGBzbWNfYnVmX2NyZWF0ZWAgYW5kIGBzbWNkX2J1Zl9hdHRhY2hgIHdpbGwgZ28gaW50byBgRm9jdXNTeW1ib2xzYC4gVGhlbiwgYHNtY2RfY2RjX21zZ19zZW5kYCBhbmQgYHNtY19jZGNfbXNnX3NlbmRgIGxvb2sgcmVsZXZhbnQgc2luY2UgdGhleSBhbHNvIGludGVyYWN0IHdpdGggdGhlIGJ1ZmZlcnMsIHNvIHRob3NlIHdpbGwgYmUgYWRkZWQgdG9vLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBidWlsZCBjb25maWd1cmF0aW9ucy4gSSd2ZSBnb3QgYFNNQ2AsIGBJTkZJTklCQU5EYCwgYERJQlNgLCBhbmQgYERJQlNfTE9gLiBJIHJlbWVtYmVyIHNlZWluZyBzb21ldGhpbmcgYWJvdXQgYGRyaXZlcnMvZGlicy9LY29uZmlnYCB3aGVuIEkgd2FzIGxvb2tpbmcgdGhyb3VnaCB0aGUgZ3JlcHBlciBvdXRwdXQsIHNvIHRoYXQgaXMgY29ycmVjdC4gSSBmb3VuZCBgRElCU2AgaW4gdGhlIGBLY29uZmlnYCBmaWxlLCBzbyB0aGF0IGNvbmZpcm1zIGl0LiBUaGVuLCBJIHJlbWVtYmVyZWQgdGhhdCBgSU5FVGAgaXMgYWxzbyByZXF1aXJlZCBmb3IgYFNNQ2AuIFNvLCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MgYXJlIGBTTUNgLCBgSU5GSU5JQkFORGAsIGBESUJTYCwgYERJQlNfTE9gLCBhbmQgYElORVRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ3MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDoxMjoyOS41MTc0MDA2NDlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5OTYwNTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBESUJTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZGlicy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kaWJzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZHJpdmVycy9kaWJzL0tjb25maWc6Mjpjb25maWcgRElCU1xcbmRyaXZlcnMvZGlicy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkRpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTMtXFxuZHJpdmVycy9kaWJzL0tjb25maWc6MTQ6Y29uZmlnIERJQlNfTE9cXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xNS1cXHRib29sIFxcXCJJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAwOjEyOjI5LjU3NzM2NzU5OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjU0MDY3ODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBc3Nlc3NpbmcgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgSSBzZWUgdGhlIHBpZWNlcyBhcmUgaW4gcGxhY2UsIHRoZSBjb3JlIGNvbXBvbmVudCBpcyBpbmRlZWQgcHJlc2VudC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGVsdmUgZGVlcGVyIGludG8gaXRzIGRlcGVuZGVuY2llcy4gTGV0J3MgbWFrZSBzdXJlIGBTTUNgIGlzbid0IHJlbHlpbmcgb24gYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGNyZWF0ZSBwcm9ibGVtcyBkb3duIHRoZSBsaW5lLCBvciBpbnRyb2R1Y2UgYSBjYXNjYWRlIG9mIGlzc3VlcyBpZiBvbmUgY29tcG9uZW50IGZhaWxzLiBHb3R0YSBiZSB0aG9yb3VnaC4gVGltZSB0byBjaGVjayB0aGUgZGVwZW5kZW5jeSB0cmVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA0NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAwOjEyOjMyLjIzMTQzODMwN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcwMzAxNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnPTI9Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG5uZXQvc21jL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBESUJTXFxubmV0L3NtYy9LY29uZmlnLTUtXFx0aGVscFxcbi0tXFxubmV0L3NtYy9LY29uZmlnPTE0PWNvbmZpZyBTTUNfRElBR1xcbm5ldC9zbWMvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxubmV0L3NtYy9LY29uZmlnOjE2OlxcdGRlcGVuZHMgb24gU01DXFxubmV0L3NtYy9LY29uZmlnLTE3LVxcdGhlbHBcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZz0yMz1jb25maWcgU01DX0hTX0NUUkxfQlBGXFxubmV0L3NtYy9LY29uZmlnLTI0LVxcdGJvb2wgXFxcIkdlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcXFwiXFxubmV0L3NtYy9LY29uZmlnOjI1OlxcdGRlcGVuZHMgb24gU01DIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgQlBGX1NZU0NBTExcXG5uZXQvc21jL0tjb25maWctMjYtXFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAwOjEyOjMyLjI4ODQ3Mzc3NloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ3OTQwMzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGNvcmUgZGVwZW5kZW5jaWVzIGhlcmUsIGFuZCBpdCBsb29rcyBsaWtlIGBJTkVUYCwgYElORklOSUJBTkRgLCBhbmQgYERJQlNgIGFyZSB0aGUga2V5IG9uZXMgSSBuZWVkIHRvIGFkZHJlc3MuIFRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGV4cGxpY2l0bHkgZW5hYmxlZCBhbmQgdGhhdCBJJ20gY292ZXJpbmcgYWxsIGJhc2VzLCBJJ20gZ29pbmcgdG8gYWRkIGBTTUNgLCBgSU5GSU5JQkFORGAsIGBESUJTYCwgYW5kIGBESUJTX0xPYCB0byBgRW5hYmxlQ29uZmlnc2AuIFdoaWxlIGBJTkVUYCBpcyBnZW5lcmFsbHkgZW5hYmxlZCBieSBkZWZhdWx0IGluIG1vc3Qgc2V0dXBzLCBJJ20gZ29pbmcgdG8gaW5jbHVkZSBpdCBqdXN0IGZvciBjbGFyaXR5IGFuZCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLlxuXG5OZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgYElORklOSUJBTkRgIGl0c2VsZiBoYXMgYW55IGZ1cnRoZXIgZGVwZW5kZW5jaWVzIHRoYXQgSSBzaG91bGQgYWxzbyBiZSBhd2FyZSBvZi4gTGV0J3Mgc2VlIHdoYXQgZWxzZSBuZWVkcyBlbmFibGluZyB0byBnZXQgdGhhdCBydW5uaW5nIHNtb290aGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ0MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAwOjEyOjM1LjYzNjQxNjMxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE5MDUwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORklOSUJBTkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjI6bWVudWNvbmZpZyBJTkZJTklCQU5EXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiSW5maW5pQmFuZCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9MTY9aWYgSU5GSU5JQkFORFxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTE3LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjE4OmNvbmZpZyBJTkZJTklCQU5EX1VTRVJfTUFEXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMTktXFx0dHJpc3RhdGUgXFxcIkluZmluaUJhbmQgdXNlcnNwYWNlIE1BRCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMjctXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6Mjg6Y29uZmlnIElORklOSUJBTkRfVVNFUl9BQ0NFU1NcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiSW5maW5pQmFuZCB1c2Vyc3BhY2UgYWNjZXNzICh2ZXJicyBhbmQgQ00pXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMzktXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NDA6Y29uZmlnIElORklOSUJBTkRfVVNFUl9BQ0NFU1NfQ09SRVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTQxLVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTQzLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjQ0OmNvbmZpZyBJTkZJTklCQU5EX1VTRVJfTUVNXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDUtXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNTAtXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NTE6Y29uZmlnIElORklOSUJBTkRfT05fREVNQU5EX1BBR0lOR1xcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTUyLVxcdGJvb2wgXFxcIkluZmluaUJhbmQgb24tZGVtYW5kIHBhZ2luZyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNjMtXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NjQ6Y29uZmlnIElORklOSUJBTkRfQUREUl9UUkFOU1xcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTY1LVxcdGJvb2wgXFxcIlJETUEvQ01cXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03MS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo3Mjpjb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TX0NPTkZJR0ZTXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNzMtXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctODAtXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6ODE6Y29uZmlnIElORklOSUJBTkRfVklSVF9ETUFcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy04Mi1cXHRkZWZfYm9vbCAhSElHSE1FTVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JuZ19yZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JuZ19yZS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfQk5HX1JFXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JuZ19yZS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIE5leHQgZ2VuZXJhdGlvbiBSb0NFIEhDQSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9CTlhUX1JFXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSBOZXR4dHJlbWUgSENBIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfQ1hHQjRcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDaGVsc2lvIFQ0L1Q1IFJETUEgRHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9LY29uZmlnLTYtXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9LY29uZmlnOjc6Y29uZmlnIElORklOSUJBTkRfRUZBXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9LY29uZmlnLTgtXFx0dHJpc3RhdGUgXFxcIkFtYXpvbiBFbGFzdGljIEZhYnJpYyBBZGFwdGVyIChFRkEpIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfRVJETUFcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJBbGliYWJhIEVsYXN0aWMgUkRNQSBBZGFwdGVyIChFUkRNQSkgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSEZJMVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQ29ybmVsaXMgT1BYIEdlbjEgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0hOU19ISVAwOFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJIaXNpbGljb24gSGlwMDggRmFtaWx5IFJvQ0Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9LY29uZmlnLTMtXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL0tjb25maWc6NDpjb25maWcgSU5GSU5JQkFORF9JT05JQ1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9LY29uZmlnLTUtXFx0dHJpc3RhdGUgXFxcIkFNRCBQZW5zYW5kbyBEU0MgUkRNQS9Sb0NFIFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSVJETUFcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSBFdGhlcm5ldCBQcm90b2NvbCBEcml2ZXIgZm9yIFJETUFcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfTVRIQ0FcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJNZWxsYW5veCBIQ0Egc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnLTktXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWc6MTA6Y29uZmlnIElORklOSUJBTkRfTVRIQ0FfREVCVUdcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0xMS1cXHRib29sIFxcXCJWZXJib3NlIGRlYnVnZ2luZyBvdXRwdXRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfT0NSRE1BXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkVtdWxleCBPbmUgQ29ubmVjdCBIQ0Egc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9xZWRyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvcWVkci9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfUUVEUlxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9xZWRyL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiUUxvZ2ljIFJvQ0UgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX1VTTklDXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVmVyYnMgc3VwcG9ydCBmb3IgQ2lzY28gVklDXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3Ztd19wdnJkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody92bXdfcHZyZG1hL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9WTVdBUkVfUFZSRE1BXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3Ztd19wdnJkbWEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJWTXdhcmUgUGFyYXZpcnR1YWxpemVkIFJETUEgRHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3JkbWF2dC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3JkbWF2dC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfUkRNQVZUXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3JkbWF2dC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlJETUEgdmVyYnMgdHJhbnNwb3J0IGxpYnJhcnlcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JUE9JQlxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJUC1vdmVyLUluZmluaUJhbmRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMTEtXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjEyOmNvbmZpZyBJTkZJTklCQU5EX0lQT0lCX0NNXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIklQLW92ZXItSW5maW5pQmFuZCBDb25uZWN0ZWQgTW9kZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTI2LVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZzoyNzpjb25maWcgSU5GSU5JQkFORF9JUE9JQl9ERUJVR1xcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJJUC1vdmVyLUluZmluaUJhbmQgZGVidWdnaW5nXFxcIiBpZiBFWFBFUlRcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy00MS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWc6NDI6Y29uZmlnIElORklOSUJBTkRfSVBPSUJfREVCVUdfREFUQVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy00My1cXHRib29sIFxcXCJJUC1vdmVyLUluZmluaUJhbmQgZGF0YSBwYXRoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JU0VSXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiaVNDU0kgRXh0ZW5zaW9ucyBmb3IgUkRNQSAoaVNFUilcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JU0VSVFxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlcnQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJpU0NTSSBFeHRlbnNpb25zIGZvciBSRE1BIChpU0VSKSB0YXJnZXQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTItXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6Mzpjb25maWcgSU5GSU5JQkFORF9SVFJTXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNC1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNi1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZzo3OmNvbmZpZyBJTkZJTklCQU5EX1JUUlNfQ0xJRU5UXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctOC1cXHR0cmlzdGF0ZSBcXFwiUlRSUyBjbGllbnQgbW9kdWxlXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctMTctXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6MTg6Y29uZmlnIElORklOSUJBTkRfUlRSU19TRVJWRVJcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy0xOS1cXHR0cmlzdGF0ZSBcXFwiUlRSUyBzZXJ2ZXIgbW9kdWxlXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9TUlBcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkluZmluaUJhbmQgU0NTSSBSRE1BIFByb3RvY29sXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnB0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycHQvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX1NSUFRcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycHQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJbmZpbmlCYW5kIFNDU0kgUkRNQSBQcm90b2NvbCB0YXJnZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDA6MTI6MzUuNzM4MzI1MDc5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNTQ5NTg1NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBEZWNpc2lvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gcHJvY2Vzcy4gSSBzZWUgYElORklOSUJBTkRgIOKAkyBhaCwgdGhhdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGBtZW51Y29uZmlnYCBvcHRpb24uIExldCdzIGFkZCB0aGF0IGRpcmVjdGx5IHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gTm8gbmVlZCB0byBvdmVydGhpbmsgaXQuXG5cbk5leHQsIEknbGwgcXVpY2tseSBjaGVjayBgSU5FVGAuIEl0J3MgYSBzdGFuZGFyZCBjb25maWcsIHNvIEknbGwgaW5jbHVkZSB0aGF0IGFzIHdlbGwuIEZpbmUuXG5cblRoZXJlZm9yZSwgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LCBhcyBpdCBjdXJyZW50bHkgc3RhbmRzLCBpbmNsdWRlcyBgU01DYCwgYElORklOSUJBTkRgLCBgRElCU2AsIGBESUJTX0xPYCwgYW5kIGBJTkVUYC5cblxuTm93LCB0aW1lIHRvIGRvdWJsZS1jaGVjayB0aGUgYEZvY3VzU3ltYm9sc2AuIExldCdzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgcmlnaHQgb25lcy4gSSBoYXZlIGBzbWNfYnVmX2NyZWF0ZWAsIGBzbWNkX2J1Zl9hdHRhY2hgLCBgc21jZF9jZGNfbXNnX3NlbmRgLCBhbmQgYHNtY19jZGNfbXNnX3NlbmRgLi4uIFxuXG5XYWl0LCBob2xkIG9uIGEgc2Vjb25kLiBJdCBsb29rZWQgZm9yIGEgbW9tZW50IGxpa2UgYHNtY2RfY2RjX21zZ19zZW5kYCBtaWdodCBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYHNtY19jZGNfbXNnX3NlbmRgLCB3aGljaCB3b3VsZCBzaW1wbGlmeSB0aGlzLiBCdXQgdGhhdCdzIG5vdCByaWdodC4gVGhleSdyZSBkaXN0aW5jdC4gT2theSwgbm8gY29uZnVzaW9uIHRoZXJlLiBOb3cgSSBuZWVkIHRvIGNoZWNrIGBzbWNkX2NkY19tc2dfc2VuZGAgdG8gY2xhcmlmeSBob3cgdGhhdCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2NzUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDA6MTI6MzkuOTkzMjg2NDU1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDcxMzUwMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jZF9jZGNfbXNnX3NlbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfY2RjLmM9MjA5PWludCBzbWNfY2RjX2dldF9zbG90X2FuZF9tc2dfc2VuZChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYy0yMTgtXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZjb25uLVxcdTAwM2VzZW5kX2xvY2spO1xcbm5ldC9zbWMvc21jX2NkYy5jOjIxOTpcXHRcXHRyYyA9IHNtY2RfY2RjX21zZ19zZW5kKGNvbm4pO1xcbm5ldC9zbWMvc21jX2NkYy5jLTIyMC1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y29ubi1cXHUwMDNlc2VuZF9sb2NrKTtcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jPTIyOD12b2lkIHNtY19jZGNfd2FpdF9wZW5kX3R4X3dyKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTIzNi0gKi9cXG5uZXQvc21jL3NtY19jZGMuYzoyMzc6aW50IHNtY2RfY2RjX21zZ19zZW5kKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG5uZXQvc21jL3NtY19jZGMuYy0yMzgte1xcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmg9Mjk3PWludCBzbWNfY2RjX2dldF9zbG90X2FuZF9tc2dfc2VuZChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xcbm5ldC9zbWMvc21jX2NkYy5oOjI5ODppbnQgc21jZF9jZGNfbXNnX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcXG5uZXQvc21jL3NtY19jZGMuaC0yOTktaW50IHNtY3JfY2RjX21zZ19zZW5kX3ZhbGlkYXRpb24oc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxcbi0tXFxubmV0L3NtYy9zbWNfdHguYz02MDg9c3RhdGljIGludCBzbWNkX3R4X3NuZGJ1Zl9ub25lbXB0eShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxuLS1cXG5uZXQvc21jL3NtY190eC5jLTYxNi1cXHRpZiAoIXJjKVxcbm5ldC9zbWMvc21jX3R4LmM6NjE3OlxcdFxcdHJjID0gc21jZF9jZGNfbXNnX3NlbmQoY29ubik7XFxubmV0L3NtYy9zbWNfdHguYy02MTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAwOjEyOjQwLjE0MDQyNTMzM1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzkwMTgwNDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIENEQyBNZXNzYWdlIFNlbmRpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyB0aGVzZSBDREMgbWVzc2FnZXMgYXJlIGJlaW5nIGhhbmRsZWQuIE15IGluaXRpYWwgZm9jdXMgaGFzIGxhbmRlZCBvbiBgc21jZF9jZGNfbXNnX3NlbmRgLiBUaGF0J3MgdGhlIG9uZSB0aGF0IHNlZW1zIHRvIGJlIGluIHBsYXkgcmlnaHQgbm93LiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyB0aGF0ICp0aGUqIG9ubHkgb25lPyBJdCBqdXN0IHRyaWdnZXJlZCBhIHRob3VnaHQg4oCTIEkgbmVlZCB0byBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0IHdpdGggYHNtY19jZGNfbXNnX3NlbmRgLiBJIHdvbmRlciB3aGF0IHRoZSBkaWZmZXJlbmNlIGlzLCBpZiBhbnk/IEFyZSB0aGVzZSB0d28gZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQsIG9yIGlzIHRoZXJlIGEgc3VidGxlLCBvciBtYXliZSBldmVuIHNpZ25pZmljYW50LCBkaXN0aW5jdGlvbiBpbiB0aGVpciBpbXBsZW1lbnRhdGlvbiBvciB1c2UgY2FzZXM/IFRoaXMgd2FycmFudHMgYSBkZWVwZXIgbG9vazsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgaGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIGNyaXRpY2FsIGJ5IGFzc3VtaW5nIHRoZSB1c2Ugb2Ygb25lIG92ZXIgdGhlIG90aGVyLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2NTAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDoxMjo0My41MzA2MDkxMjZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDIyOTc5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfY2RjX21zZ19zZW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jLmg9MTk1PXN0cnVjdCBzbWNfY29ubmVjdGlvbiB7XFxuLS1cXG5uZXQvc21jL3NtYy5oLTI0MC1cXHR3YWl0X3F1ZXVlX2hlYWRfdFxcdGNkY19wZW5kX3R4X3dxOyAvKiB3YWtldXAgb24gbm8gY2RjX3BlbmRfdHhfd3IqL1xcbm5ldC9zbWMvc21jLmg6MjQxOlxcdHN0cnVjdCBkZWxheWVkX3dvcmtcXHR0eF93b3JrO1xcdC8qIHJldHJ5IG9mIHNtY19jZGNfbXNnX3NlbmQgKi9cXG5uZXQvc21jL3NtYy5oLTI0Mi1cXHR1MzJcXHRcXHRcXHR0eF9vZmY7XFx0XFx0LyogYmFzZSBvZmZzZXQgaW4gcGVlciBybWIgKi9cXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jPTk0PXN0YXRpYyBpbmxpbmUgdm9pZCBzbWNfY2RjX2FkZF9wZW5kaW5nX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmMtMTExLVxcbm5ldC9zbWMvc21jX2NkYy5jOjExMjppbnQgc21jX2NkY19tc2dfc2VuZChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sXFxubmV0L3NtYy9zbWNfY2RjLmMtMTEzLVxcdFxcdCAgICAgc3RydWN0IHNtY193cl9idWYgKndyX2J1ZixcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jPTE3ND1zdGF0aWMgaW50IHNtY3JfY2RjX2dldF9zbG90X2FuZF9tc2dfc2VuZChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYy0yMDEtXFx0fVxcbm5ldC9zbWMvc21jX2NkYy5jOjIwMjpcXHRyYyA9IHNtY19jZGNfbXNnX3NlbmQoY29ubiwgd3JfYnVmLCBwZW5kKTtcXG5uZXQvc21jL3NtY19jZGMuYy0yMDMtXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmNvbm4tXFx1MDAzZXNlbmRfbG9jayk7XFxuLS1cXG5uZXQvc21jL3NtY19jZGMuaD0yOTQ9dm9pZCBzbWNfY2RjX3dhaXRfcGVuZF90eF93cihzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xcbm5ldC9zbWMvc21jX2NkYy5oOjI5NTppbnQgc21jX2NkY19tc2dfc2VuZChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCBzbWNfd3JfYnVmICp3cl9idWYsXFxubmV0L3NtYy9zbWNfY2RjLmgtMjk2LVxcdFxcdCAgICAgc3RydWN0IHNtY19jZGNfdHhfcGVuZCAqcGVuZCk7XFxuLS1cXG5uZXQvc21jL3NtY190eC5jPTU1MD1zdGF0aWMgaW50IHNtY3JfdHhfc25kYnVmX25vbmVtcHR5KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4tLVxcbm5ldC9zbWMvc21jX3R4LmMtNTk1LVxcbm5ldC9zbWMvc21jX3R4LmM6NTk2OlxcdHJjID0gc21jX2NkY19tc2dfc2VuZChjb25uLCB3cl9idWYsIHBlbmQpO1xcbm5ldC9zbWMvc21jX3R4LmMtNTk3LVxcdGlmICghcmMgXFx1MDAyNlxcdTAwMjYgcGZsYWdzLVxcdTAwM2V1cmdfZGF0YV9wcmVzZW50KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAwOjEyOjQzLjY0MDg0Njc3NloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjM2MzczNTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBTTUMtRCBETUItbm9jb3B5IFBhdGgqKlxuXG5Pa2F5LCBJJ3ZlIGdvdCB0aGUgY29udGV4dCBoZXJlLiBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gdGhlIFNNQy1EIERNQi1ub2NvcHkgY29ubmVjdGlvbiBzZXR1cC4gQ2xlYXJseSwgYm90aCBgc21jX2J1Zl9jcmVhdGVgIGFuZCBgc21jZF9idWZfYXR0YWNoYCBhcmUgY3JpdGljYWwgZnVuY3Rpb25zIGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UsIGFsb25nIHdpdGggYHNtY2RfY2RjX21zZ19zZW5kYCBhbmQgYHNtY19jZGNfbXNnX3NlbmRgIGFyZSBpbmNsdWRlZCBpbiBteSBmdXp6aW5nIHRhcmdldCBsaXN0LCBzbyBJJ2xsIGFkZCB0aGVtIHRvIHRoZSBgRm9jdXNTeW1ib2xzYC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBtb2RpZmljYXRpb25zIHRoYXQgYXJlbid0IHN0YXRpYy4gR29vZCwgYHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uYCwgYHNtY19jZGNfcnhfaGFuZGxlcmAsIGBzbWNkX2NkY19yeF90c2tsZXRgLCBhbmQgYF9fc21jX2J1Zl9jcmVhdGVgIGFyZSBhbGwgc3RhdGljLCBzbyB0aGUgZm91ciBJIGlkZW50aWZpZWQgYXJlIHRoZSBvbmx5IG9uZXMgSSBuZWVkLlxuXG5OZXh0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBESUJTYCBhbmQgYERJQlNfTE9gIGFyZSBlc3NlbnRpYWwgdG8gcmVwcm9kdWNlIHRoZSBpc3N1ZS4gSXQgbG9va3MgbGlrZSBgRElCU2AgcHJvdmlkZXMgdGhlIElTTSBkZXZpY2UgYWJzdHJhY3Rpb24uIENvbnNpZGVyaW5nIFNNQy1EIHJlcXVpcmVzIElTTSBhbmQgRE1CLW5vY29weSBjb25uZWN0aW9uIHNldHVwLCB0aGF0IHBhdGggaXMgY2xlYXJseSBnb2luZyB0byBiZSB0cmlnZ2VyZWQuIFNvLCB5ZXMsIHRoZXkgYXJlIGluZGVlZCByZXF1aXJlZC4gYERJQlNfTE9gIGVuYWJsZXMgdGhlIGxvb3BiYWNrIGRldmljZSwgc28gaXQncyBhIGNyaXRpY2FsIGNvbXBvbmVudC5cblxuV2l0aCB0aGF0IHVuZGVyc3RhbmRpbmcsIEkgY2FuIG5vdyBmb3JtdWxhdGUgYSBjb25jaXNlIHJlc3BvbnNlIGZvciBteSByZXN1bHRzLlxuXG5IZXJlJ3MgbXkgY29uY2x1c2lvbjpcblxuKiAgICoqV29ydGhGdXp6aW5nKio6IHRydWVcbiogICAqKkZvY3VzU3ltYm9scyoqOiBgW1wic21jX2J1Zl9jcmVhdGVcIiwgXCJzbWNkX2J1Zl9hdHRhY2hcIiwgXCJzbWNkX2NkY19tc2dfc2VuZFwiLCBcInNtY19jZGNfbXNnX3NlbmRcIl1gXG4qICAgKipFbmFibGVDb25maWdzKio6IGBbXCJTTUNcIiwgXCJJTkZJTklCQU5EXCIsIFwiRElCU1wiLCBcIkRJQlNfTE9cIiwgXCJJTkVUXCJdYFxuKiAgICoqUmVhc29uaW5nKio6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQy1EIERNQi1ub2NvcHkgY29ubmVjdGlvbiBzZXR1cCBwYXRoIHdoZXJlIGEgY29uY3VycmVudCBDREMgcmVjZWl2ZSBoYW5kbGVyIGNvdWxkIG9ic2VydmUgYW4gdW5pbml0aWFsaXplZCBzZW5kIG9yIHJlY2VpdmUgYnVmZmVyLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBjb25uZWN0aW9uIHNldHVwIGFuZCBidWZmZXIgY3JlYXRpb24vYXR0YWNobWVudCwgYXMgd2VsbCBhcyBDREMgbWVzc2FnZSBzZW5kaW5nIHRvIHRyaWdnZXIgdGhlIHJlY2VpdmUgcGF0aC5cIlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDU1NCwiT3V0cHV0VG9rZW5zIjoxNTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDA6MTI6NTAuODc3MjIzMTk4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxNzMzOTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTTUNcIixcbiAgICBcIklORklOSUJBTkRcIixcbiAgICBcIkRJQlNcIixcbiAgICBcIkRJQlNfTE9cIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbWNfYnVmX2NyZWF0ZVwiLFxuICAgIFwic21jZF9idWZfYXR0YWNoXCIsXG4gICAgXCJzbWNkX2NkY19tc2dfc2VuZFwiLFxuICAgIFwic21jX2NkY19tc2dfc2VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQy1EIERNQi1ub2NvcHkgY29ubmVjdGlvbiBzZXR1cCBwYXRoIHdoZXJlIGEgY29uY3VycmVudCBDREMgcmVjZWl2ZSBoYW5kbGVyIGNvdWxkIG9ic2VydmUgYW4gdW5pbml0aWFsaXplZCBzZW5kIG9yIHJlY2VpdmUgYnVmZmVyLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBjb25uZWN0aW9uIHNldHVwIGFuZCBidWZmZXIgY3JlYXRpb24vYXR0YWNobWVudCwgYXMgd2VsbCBhcyBDREMgbWVzc2FnZSBzZW5kaW5nIHRvIHRyaWdnZXIgdGhlIHJlY2VpdmUgcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTTUNcIixcbiAgICBcIklORklOSUJBTkRcIixcbiAgICBcIkRJQlNcIixcbiAgICBcIkRJQlNfTE9cIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbWNfYnVmX2NyZWF0ZVwiLFxuICAgIFwic21jZF9idWZfYXR0YWNoXCIsXG4gICAgXCJzbWNkX2NkY19tc2dfc2VuZFwiLFxuICAgIFwic21jX2NkY19tc2dfc2VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQy1EIERNQi1ub2NvcHkgY29ubmVjdGlvbiBzZXR1cCBwYXRoIHdoZXJlIGEgY29uY3VycmVudCBDREMgcmVjZWl2ZSBoYW5kbGVyIGNvdWxkIG9ic2VydmUgYW4gdW5pbml0aWFsaXplZCBzZW5kIG9yIHJlY2VpdmUgYnVmZmVyLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBjb25uZWN0aW9uIHNldHVwIGFuZCBidWZmZXIgY3JlYXRpb24vYXR0YWNobWVudCwgYXMgd2VsbCBhcyBDREMgbWVzc2FnZSBzZW5kaW5nIHRvIHRyaWdnZXIgdGhlIHJlY2VpdmUgcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowj2dtm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 00:05:17 +0000 UTC FinishedAt: 2026-07-30 00:12:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "e095f249e2209674f6366f6db0383a2b96e19239", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "INFINIBAND", "DIBS", "DIBS_LO", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "e095f249e2209674f6366f6db0383a2b96e19239", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "INFINIBAND", "DIBS", "DIBS_LO", "INET" ], "series_id": "91c9aff2-05fe-4f62-ac1b-86fea6a4fce2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "smc_buf_create", "smcd_buf_attach", "smcd_cdc_msg_send", "smc_cdc_msg_send" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMwIDAwOjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0RJQlMmIzM0OywKICAgICYjMzQ7RElCU19MTyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c21jX2J1Zl9jcmVhdGUmIzM0OywKICAgICYjMzQ7c21jZF9idWZfYXR0YWNoJiMzNDssCiAgICAmIzM0O3NtY2RfY2RjX21zZ19zZW5kJiMzNDssCiAgICAmIzM0O3NtY19jZGNfbXNnX3NlbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgU01DLUQgRE1CLW5vY29weSBjb25uZWN0aW9uIHNldHVwIHBhdGggd2hlcmUgYSBjb25jdXJyZW50IENEQyByZWNlaXZlIGhhbmRsZXIgY291bGQgb2JzZXJ2ZSBhbiB1bmluaXRpYWxpemVkIHNlbmQgb3IgcmVjZWl2ZSBidWZmZXIuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGNvbm5lY3Rpb24gc2V0dXAgYW5kIGJ1ZmZlciBjcmVhdGlvbi9hdHRhY2htZW50LCBhcyB3ZWxsIGFzIENEQyBtZXNzYWdlIHNlbmRpbmcgdG8gdHJpZ2dlciB0aGUgcmVjZWl2ZSBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAwOjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjcwY2M5NDE0ZTdmMTc0NzFiMTU1NjE2NzM0NzU4ZDNjZjQwNDQ1Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDAwOjA5OjQ2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2NkYy5jIGIvbmV0L3NtYy9zbWNfY2RjLmNcbmluZGV4IDMyZDZkMDNkZjMyMTQuLmVhNjFiMWU3NWM3MmMgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19jZGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfY2RjLmNcbkBAIC0zMzIsOCAmIzQzOzMzMiwyMCBAQCBzdGF0aWMgdm9pZCBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbihzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcbiB7XG4gXHR1bmlvbiBzbWNfaG9zdF9jdXJzb3IgY29uc19vbGQsIHByb2Rfb2xkO1xuIFx0c3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uID0gXHUwMDI2c21jLVx1MDAzZWNvbm47XG4mIzQzO1x0c3RydWN0IHNtY19idWZfZGVzYyAqc25kYnVmX2Rlc2M7XG4gXHRpbnQgZGlmZl9jb25zLCBkaWZmX3Byb2QsIGRpZmZfdHg7XG4gXG4mIzQzO1x0LyogQWNxdWlyZSB0aGUgc2VuZCBidWZmZXIgb25jZSwgcGFpcmluZyB3aXRoIHRoZSBzbXBfc3RvcmVfcmVsZWFzZSgpIGluXG4mIzQzO1x0ICogX19zbWNfYnVmX2NyZWF0ZSgpL3NtY2RfYnVmX2F0dGFjaCgpLiAgT24gdGhlIFNNQy1EIERNQi1ub2NvcHkgcGF0aFxuJiM0MztcdCAqIHRoZSBnaG9zdCBzbmRidWZfZGVzYyBpcyBhdHRhY2hlZCBvbmx5IGFmdGVyIHRoZSBjb25uZWN0aW9uIGlzIGFscmVhZHlcbiYjNDM7XHQgKiByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UsIHNvIGl0IGNhbiBzdGlsbCBiZSB1bnNldCBoZXJlOyBldmVyeVxuJiM0MztcdCAqIHNuZGJ1Zl9kZXNjIGNvbnN1bWVyIGJlbG93ICh0aGUgbm9jb3B5IGFjY291bnRpbmcgYW5kIHRoZSBzbmRidWZcbiYjNDM7XHQgKiBjb25zdW1lciB0cmlnZ2VyLCB3aGljaCBkZXJlZmVyZW5jZXMgaXQgdmlhIHNtY190eF9wcmVwYXJlZF9zZW5kcygpKVxuJiM0MztcdCAqIGlzIHNraXBwZWQgd2hpbGUgaXQgaXMgTlVMTCB0byBhdm9pZCBhIE5VTEwgZGVyZWYgYW5kIGEgbG9hZCBvZiBhblxuJiM0MztcdCAqIHVuaW5pdGlhbGlzZWQgYnVmZmVyLlxuJiM0MztcdCAqL1xuJiM0MztcdHNuZGJ1Zl9kZXNjID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZjb25uLVx1MDAzZXNuZGJ1Zl9kZXNjKTtcbiYjNDM7XG4gXHRzbWNfY3Vyc19jb3B5KFx1MDAyNnByb2Rfb2xkLCBcdTAwMjZjb25uLVx1MDAzZWxvY2FsX3J4X2N0cmwucHJvZCwgY29ubik7XG4gXHRzbWNfY3Vyc19jb3B5KFx1MDAyNmNvbnNfb2xkLCBcdTAwMjZjb25uLVx1MDAzZWxvY2FsX3J4X2N0cmwuY29ucywgY29ubik7XG4gXHRzbWNfY2RjX21zZ190b19ob3N0KFx1MDAyNmNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybCwgY2RjLCBjb25uKTtcbkBAIC0zNTEsMTQgJiM0MzszNjMsMTcgQEAgc3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXG4gXG4gXHRcdC8qIGlmIGxvY2FsIHNuZGJ1ZiBzaGFyZXMgdGhlIHNhbWUgbWVtb3J5IHJlZ2lvbiB3aXRoXG4gXHRcdCAqIHBlZXIgUk1CLCB0aGVuIHVwZGF0ZSB0eF9jdXJzX2ZpbiBhbmQgc25kYnVmX3NwYWNlXG4tXHRcdCAqIGhlcmUgc2luY2UgcGVlciBoYXMgYWxyZWFkeSBjb25zdW1lZCB0aGUgZGF0YS5cbiYjNDM7XHRcdCAqIGhlcmUgc2luY2UgcGVlciBoYXMgYWxyZWFkeSBjb25zdW1lZCB0aGUgZGF0YS4gIFRoZSBnaG9zdFxuJiM0MztcdFx0ICogc25kYnVmX2Rlc2MgKGFjcXVpcmVkIGFib3ZlKSBtYXkgc3RpbGwgYmUgdW5zZXQgaW4gdGhlIFNNQy1EXG4mIzQzO1x0XHQgKiBETUItbm9jb3B5IHNldHVwIHdpbmRvdywgc28gc2tpcCB0aGUgdXBkYXRlIHdoaWxlIGl0IGlzIE5VTEwuXG4gXHRcdCAqL1xuIFx0XHRpZiAoY29ubi1cdTAwM2VsZ3ItXHUwMDNlaXNfc21jZCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KGNvbm4tXHUwMDNlbGdyLVx1MDAzZXNtY2QpKSB7XG4mIzQzO1x0XHQgICAgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi1cdTAwM2VsZ3ItXHUwMDNlc21jZCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgc25kYnVmX2Rlc2MpIHtcbiBcdFx0XHQvKiBDYWxjdWxhdGUgY29uc3VtZWQgZGF0YSBhbmRcbiBcdFx0XHQgKiBpbmNyZW1lbnQgZnJlZSBzZW5kIGJ1ZmZlciBzcGFjZS5cbiBcdFx0XHQgKi9cbi1cdFx0XHRkaWZmX3R4ID0gc21jX2N1cnNfZGlmZihjb25uLVx1MDAzZXNuZGJ1Zl9kZXNjLVx1MDAzZWxlbixcbiYjNDM7XHRcdFx0ZGlmZl90eCA9IHNtY19jdXJzX2RpZmYoc25kYnVmX2Rlc2MtXHUwMDNlbGVuLFxuIFx0XHRcdFx0XHRcdFx1MDAyNmNvbm4tXHUwMDNldHhfY3Vyc19maW4sXG4gXHRcdFx0XHRcdFx0XHUwMDI2Y29ubi1cdTAwM2Vsb2NhbF9yeF9jdHJsLmNvbnMpO1xuIFx0XHRcdC8qIGluY3JlYXNlIGxvY2FsIHNuZGJ1ZiBzcGFjZSBhbmQgZmluX2N1cnMgKi9cbkBAIC0zOTEsMTAgJiM0Mzs0MDYsMTUgQEAgc3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXG4gXHRcdFx0Y29ubi1cdTAwM2V1cmdfc3RhdGUgPSBTTUNfVVJHX05PVFlFVDtcbiBcdH1cbiBcbi1cdC8qIHRyaWdnZXIgc25kYnVmIGNvbnN1bWVyOiBSRE1BIHdyaXRlIGludG8gcGVlciBSTUJFIGFuZCBDREMgKi9cbi1cdGlmICgoZGlmZl9jb25zIFx1MDAyNlx1MDAyNiBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoY29ubikpIHx8XG4tXHQgICAgY29ubi1cdTAwM2Vsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MuY29uc19jdXJzX3VwZF9yZXEgfHxcbi1cdCAgICBjb25uLVx1MDAzZWxvY2FsX3J4X2N0cmwucHJvZF9mbGFncy51cmdfZGF0YV9wZW5kaW5nKSB7XG4mIzQzO1x0LyogdHJpZ2dlciBzbmRidWYgY29uc3VtZXI6IFJETUEgd3JpdGUgaW50byBwZWVyIFJNQkUgYW5kIENEQy5cbiYjNDM7XHQgKiBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoKSBhbmQgc21jX3R4X3BlbmRpbmcoKSBkZXJlZmVyZW5jZSBzbmRidWZfZGVzYyxcbiYjNDM7XHQgKiBzbyBza2lwIHRoZSB3aG9sZSB0cmlnZ2VyIHdoaWxlIGl0IGlzIHVuc2V0ICh0aGUgU01DLUQgRE1CLW5vY29weVxuJiM0MztcdCAqIHNldHVwIHdpbmRvdyk6IHRoZXJlIGlzIG5vdGhpbmcgdG8gc2VuZCB3aXRob3V0IGEgc2VuZCBidWZmZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNuZGJ1Zl9kZXNjIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoKGRpZmZfY29ucyBcdTAwMjZcdTAwMjYgc21jX3R4X3ByZXBhcmVkX3NlbmRzKGNvbm4pKSB8fFxuJiM0MztcdCAgICAgY29ubi1cdTAwM2Vsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MuY29uc19jdXJzX3VwZF9yZXEgfHxcbiYjNDM7XHQgICAgIGNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybC5wcm9kX2ZsYWdzLnVyZ19kYXRhX3BlbmRpbmcpKSB7XG4gXHRcdGlmICghc29ja19vd25lZF9ieV91c2VyKFx1MDAyNnNtYy1cdTAwM2VzaykpXG4gXHRcdFx0c21jX3R4X3BlbmRpbmcoY29ubik7XG4gXHRcdGVsc2VcbkBAIC00NDMsMTMgJiM0Mzs0NjMsMjEgQEAgc3RhdGljIHZvaWQgc21jZF9jZGNfcnhfdHNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcbiB7XG4gXHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBmcm9tX3Rhc2tsZXQoY29ubiwgdCwgcnhfdHNrbGV0KTtcbiBcdHN0cnVjdCBzbWNkX2NkY19tc2cgKmRhdGFfY2RjO1xuJiM0MztcdHN0cnVjdCBzbWNfYnVmX2Rlc2MgKnJtYl9kZXNjO1xuIFx0c3RydWN0IHNtY2RfY2RjX21zZyBjZGM7XG4gXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYztcbiBcbiBcdGlmICghY29ubiB8fCBjb25uLVx1MDAzZWtpbGxlZClcbiBcdFx0cmV0dXJuO1xuJiM0MztcdC8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogdGhlIGNvbm5lY3Rpb25cbiYjNDM7XHQgKiBpcyBwdWJsaXNoZWQgYmVmb3JlIGl0cyBSTUIgaXMgYWxsb2NhdGVkLCBzbyBiYWlsIHdoaWxlIHJtYl9kZXNjIGlzXG4mIzQzO1x0ICogdW5zZXQgdG8gYXZvaWQgYSBOVUxMIGRlcmVmIGFuZCBhIGxvYWQgb2YgYW4gdW5pbml0aWFsaXNlZCBidWZmZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0cm1iX2Rlc2MgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNmNvbm4tXHUwMDNlcm1iX2Rlc2MpO1xuJiM0MztcdGlmICghcm1iX2Rlc2MpXG4mIzQzO1x0XHRyZXR1cm47XG4gXG4tXHRkYXRhX2NkYyA9IChzdHJ1Y3Qgc21jZF9jZGNfbXNnICopY29ubi1cdTAwM2VybWJfZGVzYy1cdTAwM2VjcHVfYWRkcjtcbiYjNDM7XHRkYXRhX2NkYyA9IChzdHJ1Y3Qgc21jZF9jZGNfbXNnICopcm1iX2Rlc2MtXHUwMDNlY3B1X2FkZHI7XG4gXHRzbWNkX2N1cnNfY29weShcdTAwMjZjZGMucHJvZCwgXHUwMDI2ZGF0YV9jZGMtXHUwMDNlcHJvZCwgY29ubik7XG4gXHRzbWNkX2N1cnNfY29weShcdTAwMjZjZGMuY29ucywgXHUwMDI2ZGF0YV9jZGMtXHUwMDNlY29ucywgY29ubik7XG4gXHRzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcbkBAIC00ODMsNyAmIzQzOzUxMSwxMSBAQCBzdGF0aWMgdm9pZCBzbWNfY2RjX3J4X2hhbmRsZXIoc3RydWN0IGliX3djICp3Yywgdm9pZCAqYnVmKVxuIFx0bGdyID0gc21jX2dldF9sZ3IobGluayk7XG4gXHRyZWFkX2xvY2tfYmgoXHUwMDI2bGdyLVx1MDAzZWNvbm5zX2xvY2spO1xuIFx0Y29ubiA9IHNtY19sZ3JfZmluZF9jb25uKG50b2hsKGNkYy1cdTAwM2V0b2tlbiksIGxncik7XG4tXHRpZiAoIWNvbm4gfHwgY29ubi1cdTAwM2VvdXRfb2Zfc3luYykge1xuJiM0MztcdC8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogYmFpbCB3aGlsZSB0aGVcbiYjNDM7XHQgKiBSTUIgaXMgdW5zZXQgKHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKCkgZGVyZWZlcmVuY2VzIGl0KSB0byBhdm9pZCBhXG4mIzQzO1x0ICogTlVMTCBkZXJlZiBhbmQgYSBzdGFsZS1idWZmZXIgcmVhZCBpbiB0aGUgY29ubmVjdGlvbiBzZXR1cCB3aW5kb3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFjb25uIHx8IGNvbm4tXHUwMDNlb3V0X29mX3N5bmMgfHwgIXNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2Y29ubi1cdTAwM2VybWJfZGVzYykpIHtcbiBcdFx0cmVhZF91bmxvY2tfYmgoXHUwMDI2bGdyLVx1MDAzZWNvbm5zX2xvY2spO1xuIFx0XHRyZXR1cm47XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5jIGIvbmV0L3NtYy9zbWNfY29yZS5jXG5pbmRleCBiNDIwOGNiMTg2YzVlLi4zM2JmOWNjOTc5ZWZhIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19jb3JlLmNcbkBAIC0yNDk5LDE1ICYjNDM7MjQ5OSwyNiBAQCBzdGF0aWMgaW50IF9fc21jX2J1Zl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIGJvb2wgaXNfc21jZCwgYm9vbCBpc19ybWIpXG4gXHR9XG4gXG4gXHRpZiAoaXNfcm1iKSB7XG4tXHRcdGNvbm4tXHUwMDNlcm1iX2Rlc2MgPSBidWZfZGVzYztcbiBcdFx0Y29ubi1cdTAwM2VybWJlX3NpemVfY29tcCA9IGJ1ZnNpemVfY29tcDtcbiBcdFx0c21jLVx1MDAzZXNrLnNrX3JjdmJ1ZiA9IGJ1ZnNpemUgKiAyO1xuIFx0XHRhdG9taWNfc2V0KFx1MDAyNmNvbm4tXHUwMDNlYnl0ZXNfdG9fcmN2LCAwKTtcbiBcdFx0Y29ubi1cdTAwM2VybWJlX3VwZGF0ZV9saW1pdCA9XG4gXHRcdFx0c21jX3JtYl93bmRfdXBkYXRlX2xpbWl0KGJ1Zl9kZXNjLVx1MDAzZWxlbik7XG4mIzQzO1x0XHQvKiBQdWJsaXNoIHRoZSByZWNlaXZlIGJ1ZmZlciBsYXN0LCB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzOiB0aGVcbiYjNDM7XHRcdCAqIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSBpbiB0aGUgbGluayBncm91cCYjMzk7cyB0b2tlbiB0cmVlLCBzbyBhXG4mIzQzO1x0XHQgKiBjb25jdXJyZW50IENEQyByZWNlaXZlIGhhbmRsZXIgbXVzdCBvYnNlcnZlIHRoZSBmdWxseVxuJiM0MztcdFx0ICogaW5pdGlhbGlzZWQgcmVjZWl2ZSBzdGF0ZSBhYm92ZSAoYW5kIHRoZSBidWZmZXIpIG9uY2UgaXQgc2Vlc1xuJiM0MztcdFx0ICogYSBub24tTlVMTCBybWJfZGVzYy4gIFBhaXJzIHdpdGggdGhlIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiB0aGVcbiYjNDM7XHRcdCAqIENEQyByZWNlaXZlIHBhdGguXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmNvbm4tXHUwMDNlcm1iX2Rlc2MsIGJ1Zl9kZXNjKTtcbiBcdFx0aWYgKGlzX3NtY2QpXG4gXHRcdFx0c21jX2lzbV9zZXRfY29ubihjb25uKTsgLyogbWFwIFJNQi9zbWNkX2RldiB0byBjb25uICovXG4gXHR9IGVsc2Uge1xuJiM0MztcdFx0LyogUGxhaW4gc3RvcmU6IHRoaXMgc2VuZC1idWZmZXIgcGFzcyBydW5zIGJlZm9yZSB0aGUgUk1CIHBhc3MsXG4mIzQzO1x0XHQgKiB3aG9zZSBzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZjb25uLVx1MDAzZXJtYl9kZXNjKSB0aGVuIHB1Ymxpc2hlcyB0aGlzXG4mIzQzO1x0XHQgKiBzdG9yZSB0b28sIGFuZCB0aGUgQ0RDIHJlY2VpdmUgcGF0aCBpcyBnYXRlZCBvbiBybWJfZGVzYy5cbiYjNDM7XHRcdCAqL1xuIFx0XHRjb25uLVx1MDAzZXNuZGJ1Zl9kZXNjID0gYnVmX2Rlc2M7XG4gXHRcdHNtYy1cdTAwM2Vzay5za19zbmRidWYgPSBidWZzaXplICogMjtcbiBcdFx0YXRvbWljX3NldChcdTAwMjZjb25uLVx1MDAzZXNuZGJ1Zl9zcGFjZSwgYnVmc2l6ZSk7XG5AQCAtMjU5OSw5ICYjNDM7MjYxMCwxNiBAQCBpbnQgc21jZF9idWZfYXR0YWNoKHN0cnVjdCBzbWNfc29jayAqc21jKVxuIFx0YnVmX2Rlc2MtXHUwMDNlY3B1X2FkZHIgPVxuIFx0XHQodTggKilidWZfZGVzYy1cdTAwM2VjcHVfYWRkciAmIzQzOyBzaXplb2Yoc3RydWN0IHNtY2RfY2RjX21zZyk7XG4gXHRidWZfZGVzYy1cdTAwM2VsZW4gLT0gc2l6ZW9mKHN0cnVjdCBzbWNkX2NkY19tc2cpO1xuLVx0Y29ubi1cdTAwM2VzbmRidWZfZGVzYyA9IGJ1Zl9kZXNjO1xuLVx0Y29ubi1cdTAwM2VzbmRidWZfZGVzYy1cdTAwM2V1c2VkID0gMTtcbi1cdGF0b21pY19zZXQoXHUwMDI2Y29ubi1cdTAwM2VzbmRidWZfc3BhY2UsIGNvbm4tXHUwMDNlc25kYnVmX2Rlc2MtXHUwMDNlbGVuKTtcbiYjNDM7XHRidWZfZGVzYy1cdTAwM2V1c2VkID0gMTtcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNmNvbm4tXHUwMDNlc25kYnVmX3NwYWNlLCBidWZfZGVzYy1cdTAwM2VsZW4pO1xuJiM0MztcdC8qIFB1Ymxpc2ggdGhlIGdob3N0IHNlbmQgYnVmZmVyIGxhc3QsIHdpdGggcmVsZWFzZSBzZW1hbnRpY3M6IHRoZVxuJiM0MztcdCAqIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UgKHNtY19pc21fc2V0X2Nvbm4oKVxuJiM0MztcdCAqIHJhbiBpbiBfX3NtY19idWZfY3JlYXRlKCkpLCBzbyB0aGUgQ0RDIHJlY2VpdmUgdGFza2xldCBtdXN0IG9ic2VydmVcbiYjNDM7XHQgKiB0aGUgZnVsbHkgaW5pdGlhbGlzZWQgZ2hvc3QgYnVmZmVyIG9uY2UgaXQgc2VlcyBhIG5vbi1OVUxMXG4mIzQzO1x0ICogc25kYnVmX2Rlc2MuICBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpblxuJiM0MztcdCAqIHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2Y29ubi1cdTAwM2VzbmRidWZfZGVzYywgYnVmX2Rlc2MpO1xuIFx0cmV0dXJuIDA7XG4gXG4gZnJlZTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMDowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7LAogICAgJiMzNDtESUJTX0xPJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfYnVmX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtzbWNkX2J1Zl9hdHRhY2gmIzM0OywKICAgICYjMzQ7c21jZF9jZGNfbXNnX3NlbmQmIzM0OywKICAgICYjMzQ7c21jX2NkY19tc2dfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBTTUMtRCBETUItbm9jb3B5IGNvbm5lY3Rpb24gc2V0dXAgcGF0aCB3aGVyZSBhIGNvbmN1cnJlbnQgQ0RDIHJlY2VpdmUgaGFuZGxlciBjb3VsZCBvYnNlcnZlIGFuIHVuaW5pdGlhbGl6ZWQgc2VuZCBvciByZWNlaXZlIGJ1ZmZlci4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gY29ubmVjdGlvbiBzZXR1cCBhbmQgYnVmZmVyIGNyZWF0aW9uL2F0dGFjaG1lbnQsIGFzIHdlbGwgYXMgQ0RDIG1lc3NhZ2Ugc2VuZGluZyB0byB0cmlnZ2VyIHRoZSByZWNlaXZlIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNzBjYzk0MTRlN2YxNzQ3MWIxNTU2MTY3MzQ3NThkM2NmNDA0NDVjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMzAgMDA6MDk6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jZGMuYyBiL25ldC9zbWMvc21jX2NkYy5jCmluZGV4IDMyZDZkMDNkZjMyMTQuLmVhNjFiMWU3NWM3MmMgMTAwNjQ0Ci0tLSBhL25ldC9zbWMvc21jX2NkYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX2NkYy5jCkBAIC0zMzIsOCAmIzQzOzMzMiwyMCBAQCBzdGF0aWMgdm9pZCBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbihzdHJ1Y3Qgc21jX3NvY2sgKnNtYywKIHsKIAl1bmlvbiBzbWNfaG9zdF9jdXJzb3IgY29uc19vbGQsIHByb2Rfb2xkOwogCXN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiA9ICZhbXA7c21jLSZndDtjb25uOwomIzQzOwlzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpzbmRidWZfZGVzYzsKIAlpbnQgZGlmZl9jb25zLCBkaWZmX3Byb2QsIGRpZmZfdHg7CiAKJiM0MzsJLyogQWNxdWlyZSB0aGUgc2VuZCBidWZmZXIgb25jZSwgcGFpcmluZyB3aXRoIHRoZSBzbXBfc3RvcmVfcmVsZWFzZSgpIGluCiYjNDM7CSAqIF9fc21jX2J1Zl9jcmVhdGUoKS9zbWNkX2J1Zl9hdHRhY2goKS4gIE9uIHRoZSBTTUMtRCBETUItbm9jb3B5IHBhdGgKJiM0MzsJICogdGhlIGdob3N0IHNuZGJ1Zl9kZXNjIGlzIGF0dGFjaGVkIG9ubHkgYWZ0ZXIgdGhlIGNvbm5lY3Rpb24gaXMgYWxyZWFkeQomIzQzOwkgKiByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UsIHNvIGl0IGNhbiBzdGlsbCBiZSB1bnNldCBoZXJlOyBldmVyeQomIzQzOwkgKiBzbmRidWZfZGVzYyBjb25zdW1lciBiZWxvdyAodGhlIG5vY29weSBhY2NvdW50aW5nIGFuZCB0aGUgc25kYnVmCiYjNDM7CSAqIGNvbnN1bWVyIHRyaWdnZXIsIHdoaWNoIGRlcmVmZXJlbmNlcyBpdCB2aWEgc21jX3R4X3ByZXBhcmVkX3NlbmRzKCkpCiYjNDM7CSAqIGlzIHNraXBwZWQgd2hpbGUgaXQgaXMgTlVMTCB0byBhdm9pZCBhIE5VTEwgZGVyZWYgYW5kIGEgbG9hZCBvZiBhbgomIzQzOwkgKiB1bmluaXRpYWxpc2VkIGJ1ZmZlci4KJiM0MzsJICovCiYjNDM7CXNuZGJ1Zl9kZXNjID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO2Nvbm4tJmd0O3NuZGJ1Zl9kZXNjKTsKJiM0MzsKIAlzbWNfY3Vyc19jb3B5KCZhbXA7cHJvZF9vbGQsICZhbXA7Y29ubi0mZ3Q7bG9jYWxfcnhfY3RybC5wcm9kLCBjb25uKTsKIAlzbWNfY3Vyc19jb3B5KCZhbXA7Y29uc19vbGQsICZhbXA7Y29ubi0mZ3Q7bG9jYWxfcnhfY3RybC5jb25zLCBjb25uKTsKIAlzbWNfY2RjX21zZ190b19ob3N0KCZhbXA7Y29ubi0mZ3Q7bG9jYWxfcnhfY3RybCwgY2RjLCBjb25uKTsKQEAgLTM1MSwxNCAmIzQzOzM2MywxNyBAQCBzdGF0aWMgdm9pZCBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbihzdHJ1Y3Qgc21jX3NvY2sgKnNtYywKIAogCQkvKiBpZiBsb2NhbCBzbmRidWYgc2hhcmVzIHRoZSBzYW1lIG1lbW9yeSByZWdpb24gd2l0aAogCQkgKiBwZWVyIFJNQiwgdGhlbiB1cGRhdGUgdHhfY3Vyc19maW4gYW5kIHNuZGJ1Zl9zcGFjZQotCQkgKiBoZXJlIHNpbmNlIHBlZXIgaGFzIGFscmVhZHkgY29uc3VtZWQgdGhlIGRhdGEuCiYjNDM7CQkgKiBoZXJlIHNpbmNlIHBlZXIgaGFzIGFscmVhZHkgY29uc3VtZWQgdGhlIGRhdGEuICBUaGUgZ2hvc3QKJiM0MzsJCSAqIHNuZGJ1Zl9kZXNjIChhY3F1aXJlZCBhYm92ZSkgbWF5IHN0aWxsIGJlIHVuc2V0IGluIHRoZSBTTUMtRAomIzQzOwkJICogRE1CLW5vY29weSBzZXR1cCB3aW5kb3csIHNvIHNraXAgdGhlIHVwZGF0ZSB3aGlsZSBpdCBpcyBOVUxMLgogCQkgKi8KIAkJaWYgKGNvbm4tJmd0O2xnci0mZ3Q7aXNfc21jZCAmYW1wOyZhbXA7Ci0JCSAgICBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShjb25uLSZndDtsZ3ItJmd0O3NtY2QpKSB7CiYjNDM7CQkgICAgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi0mZ3Q7bGdyLSZndDtzbWNkKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgc25kYnVmX2Rlc2MpIHsKIAkJCS8qIENhbGN1bGF0ZSBjb25zdW1lZCBkYXRhIGFuZAogCQkJICogaW5jcmVtZW50IGZyZWUgc2VuZCBidWZmZXIgc3BhY2UuCiAJCQkgKi8KLQkJCWRpZmZfdHggPSBzbWNfY3Vyc19kaWZmKGNvbm4tJmd0O3NuZGJ1Zl9kZXNjLSZndDtsZW4sCiYjNDM7CQkJZGlmZl90eCA9IHNtY19jdXJzX2RpZmYoc25kYnVmX2Rlc2MtJmd0O2xlbiwKIAkJCQkJCSZhbXA7Y29ubi0mZ3Q7dHhfY3Vyc19maW4sCiAJCQkJCQkmYW1wO2Nvbm4tJmd0O2xvY2FsX3J4X2N0cmwuY29ucyk7CiAJCQkvKiBpbmNyZWFzZSBsb2NhbCBzbmRidWYgc3BhY2UgYW5kIGZpbl9jdXJzICovCkBAIC0zOTEsMTAgJiM0Mzs0MDYsMTUgQEAgc3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsCiAJCQljb25uLSZndDt1cmdfc3RhdGUgPSBTTUNfVVJHX05PVFlFVDsKIAl9CiAKLQkvKiB0cmlnZ2VyIHNuZGJ1ZiBjb25zdW1lcjogUkRNQSB3cml0ZSBpbnRvIHBlZXIgUk1CRSBhbmQgQ0RDICovCi0JaWYgKChkaWZmX2NvbnMgJmFtcDsmYW1wOyBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoY29ubikpIHx8Ci0JICAgIGNvbm4tJmd0O2xvY2FsX3J4X2N0cmwucHJvZF9mbGFncy5jb25zX2N1cnNfdXBkX3JlcSB8fAotCSAgICBjb25uLSZndDtsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MudXJnX2RhdGFfcGVuZGluZykgewomIzQzOwkvKiB0cmlnZ2VyIHNuZGJ1ZiBjb25zdW1lcjogUkRNQSB3cml0ZSBpbnRvIHBlZXIgUk1CRSBhbmQgQ0RDLgomIzQzOwkgKiBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoKSBhbmQgc21jX3R4X3BlbmRpbmcoKSBkZXJlZmVyZW5jZSBzbmRidWZfZGVzYywKJiM0MzsJICogc28gc2tpcCB0aGUgd2hvbGUgdHJpZ2dlciB3aGlsZSBpdCBpcyB1bnNldCAodGhlIFNNQy1EIERNQi1ub2NvcHkKJiM0MzsJICogc2V0dXAgd2luZG93KTogdGhlcmUgaXMgbm90aGluZyB0byBzZW5kIHdpdGhvdXQgYSBzZW5kIGJ1ZmZlci4KJiM0MzsJICovCiYjNDM7CWlmIChzbmRidWZfZGVzYyAmYW1wOyZhbXA7CiYjNDM7CSAgICAoKGRpZmZfY29ucyAmYW1wOyZhbXA7IHNtY190eF9wcmVwYXJlZF9zZW5kcyhjb25uKSkgfHwKJiM0MzsJICAgICBjb25uLSZndDtsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MuY29uc19jdXJzX3VwZF9yZXEgfHwKJiM0MzsJICAgICBjb25uLSZndDtsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MudXJnX2RhdGFfcGVuZGluZykpIHsKIAkJaWYgKCFzb2NrX293bmVkX2J5X3VzZXIoJmFtcDtzbWMtJmd0O3NrKSkKIAkJCXNtY190eF9wZW5kaW5nKGNvbm4pOwogCQllbHNlCkBAIC00NDMsMTMgJiM0Mzs0NjMsMjEgQEAgc3RhdGljIHZvaWQgc21jZF9jZGNfcnhfdHNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCkKIHsKIAlzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBmcm9tX3Rhc2tsZXQoY29ubiwgdCwgcnhfdHNrbGV0KTsKIAlzdHJ1Y3Qgc21jZF9jZGNfbXNnICpkYXRhX2NkYzsKJiM0MzsJc3RydWN0IHNtY19idWZfZGVzYyAqcm1iX2Rlc2M7CiAJc3RydWN0IHNtY2RfY2RjX21zZyBjZGM7CiAJc3RydWN0IHNtY19zb2NrICpzbWM7CiAKIAlpZiAoIWNvbm4gfHwgY29ubi0mZ3Q7a2lsbGVkKQogCQlyZXR1cm47CiYjNDM7CS8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogdGhlIGNvbm5lY3Rpb24KJiM0MzsJICogaXMgcHVibGlzaGVkIGJlZm9yZSBpdHMgUk1CIGlzIGFsbG9jYXRlZCwgc28gYmFpbCB3aGlsZSBybWJfZGVzYyBpcwomIzQzOwkgKiB1bnNldCB0byBhdm9pZCBhIE5VTEwgZGVyZWYgYW5kIGEgbG9hZCBvZiBhbiB1bmluaXRpYWxpc2VkIGJ1ZmZlci4KJiM0MzsJICovCiYjNDM7CXJtYl9kZXNjID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO2Nvbm4tJmd0O3JtYl9kZXNjKTsKJiM0MzsJaWYgKCFybWJfZGVzYykKJiM0MzsJCXJldHVybjsKIAotCWRhdGFfY2RjID0gKHN0cnVjdCBzbWNkX2NkY19tc2cgKiljb25uLSZndDtybWJfZGVzYy0mZ3Q7Y3B1X2FkZHI7CiYjNDM7CWRhdGFfY2RjID0gKHN0cnVjdCBzbWNkX2NkY19tc2cgKilybWJfZGVzYy0mZ3Q7Y3B1X2FkZHI7CiAJc21jZF9jdXJzX2NvcHkoJmFtcDtjZGMucHJvZCwgJmFtcDtkYXRhX2NkYy0mZ3Q7cHJvZCwgY29ubik7CiAJc21jZF9jdXJzX2NvcHkoJmFtcDtjZGMuY29ucywgJmFtcDtkYXRhX2NkYy0mZ3Q7Y29ucywgY29ubik7CiAJc21jID0gY29udGFpbmVyX29mKGNvbm4sIHN0cnVjdCBzbWNfc29jaywgY29ubik7CkBAIC00ODMsNyAmIzQzOzUxMSwxMSBAQCBzdGF0aWMgdm9pZCBzbWNfY2RjX3J4X2hhbmRsZXIoc3RydWN0IGliX3djICp3Yywgdm9pZCAqYnVmKQogCWxnciA9IHNtY19nZXRfbGdyKGxpbmspOwogCXJlYWRfbG9ja19iaCgmYW1wO2xnci0mZ3Q7Y29ubnNfbG9jayk7CiAJY29ubiA9IHNtY19sZ3JfZmluZF9jb25uKG50b2hsKGNkYy0mZ3Q7dG9rZW4pLCBsZ3IpOwotCWlmICghY29ubiB8fCBjb25uLSZndDtvdXRfb2Zfc3luYykgewomIzQzOwkvKiBQYWlyIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBfX3NtY19idWZfY3JlYXRlKCk6IGJhaWwgd2hpbGUgdGhlCiYjNDM7CSAqIFJNQiBpcyB1bnNldCAoc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oKSBkZXJlZmVyZW5jZXMgaXQpIHRvIGF2b2lkIGEKJiM0MzsJICogTlVMTCBkZXJlZiBhbmQgYSBzdGFsZS1idWZmZXIgcmVhZCBpbiB0aGUgY29ubmVjdGlvbiBzZXR1cCB3aW5kb3cuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWNvbm4gfHwgY29ubi0mZ3Q7b3V0X29mX3N5bmMgfHwgIXNtcF9sb2FkX2FjcXVpcmUoJmFtcDtjb25uLSZndDtybWJfZGVzYykpIHsKIAkJcmVhZF91bmxvY2tfYmgoJmFtcDtsZ3ItJmd0O2Nvbm5zX2xvY2spOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5jIGIvbmV0L3NtYy9zbWNfY29yZS5jCmluZGV4IGI0MjA4Y2IxODZjNWUuLjMzYmY5Y2M5NzllZmEgMTAwNjQ0Ci0tLSBhL25ldC9zbWMvc21jX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19jb3JlLmMKQEAgLTI0OTksMTUgJiM0MzsyNDk5LDI2IEBAIHN0YXRpYyBpbnQgX19zbWNfYnVmX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgYm9vbCBpc19zbWNkLCBib29sIGlzX3JtYikKIAl9CiAKIAlpZiAoaXNfcm1iKSB7Ci0JCWNvbm4tJmd0O3JtYl9kZXNjID0gYnVmX2Rlc2M7CiAJCWNvbm4tJmd0O3JtYmVfc2l6ZV9jb21wID0gYnVmc2l6ZV9jb21wOwogCQlzbWMtJmd0O3NrLnNrX3JjdmJ1ZiA9IGJ1ZnNpemUgKiAyOwogCQlhdG9taWNfc2V0KCZhbXA7Y29ubi0mZ3Q7Ynl0ZXNfdG9fcmN2LCAwKTsKIAkJY29ubi0mZ3Q7cm1iZV91cGRhdGVfbGltaXQgPQogCQkJc21jX3JtYl93bmRfdXBkYXRlX2xpbWl0KGJ1Zl9kZXNjLSZndDtsZW4pOwomIzQzOwkJLyogUHVibGlzaCB0aGUgcmVjZWl2ZSBidWZmZXIgbGFzdCwgd2l0aCByZWxlYXNlIHNlbWFudGljczogdGhlCiYjNDM7CQkgKiBjb25uZWN0aW9uIGlzIGFscmVhZHkgaW4gdGhlIGxpbmsgZ3JvdXAmIzM5O3MgdG9rZW4gdHJlZSwgc28gYQomIzQzOwkJICogY29uY3VycmVudCBDREMgcmVjZWl2ZSBoYW5kbGVyIG11c3Qgb2JzZXJ2ZSB0aGUgZnVsbHkKJiM0MzsJCSAqIGluaXRpYWxpc2VkIHJlY2VpdmUgc3RhdGUgYWJvdmUgKGFuZCB0aGUgYnVmZmVyKSBvbmNlIGl0IHNlZXMKJiM0MzsJCSAqIGEgbm9uLU5VTEwgcm1iX2Rlc2MuICBQYWlycyB3aXRoIHRoZSBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gdGhlCiYjNDM7CQkgKiBDREMgcmVjZWl2ZSBwYXRoLgomIzQzOwkJICovCiYjNDM7CQlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO2Nvbm4tJmd0O3JtYl9kZXNjLCBidWZfZGVzYyk7CiAJCWlmIChpc19zbWNkKQogCQkJc21jX2lzbV9zZXRfY29ubihjb25uKTsgLyogbWFwIFJNQi9zbWNkX2RldiB0byBjb25uICovCiAJfSBlbHNlIHsKJiM0MzsJCS8qIFBsYWluIHN0b3JlOiB0aGlzIHNlbmQtYnVmZmVyIHBhc3MgcnVucyBiZWZvcmUgdGhlIFJNQiBwYXNzLAomIzQzOwkJICogd2hvc2Ugc21wX3N0b3JlX3JlbGVhc2UoJmFtcDtjb25uLSZndDtybWJfZGVzYykgdGhlbiBwdWJsaXNoZXMgdGhpcwomIzQzOwkJICogc3RvcmUgdG9vLCBhbmQgdGhlIENEQyByZWNlaXZlIHBhdGggaXMgZ2F0ZWQgb24gcm1iX2Rlc2MuCiYjNDM7CQkgKi8KIAkJY29ubi0mZ3Q7c25kYnVmX2Rlc2MgPSBidWZfZGVzYzsKIAkJc21jLSZndDtzay5za19zbmRidWYgPSBidWZzaXplICogMjsKIAkJYXRvbWljX3NldCgmYW1wO2Nvbm4tJmd0O3NuZGJ1Zl9zcGFjZSwgYnVmc2l6ZSk7CkBAIC0yNTk5LDkgJiM0MzsyNjEwLDE2IEBAIGludCBzbWNkX2J1Zl9hdHRhY2goc3RydWN0IHNtY19zb2NrICpzbWMpCiAJYnVmX2Rlc2MtJmd0O2NwdV9hZGRyID0KIAkJKHU4ICopYnVmX2Rlc2MtJmd0O2NwdV9hZGRyICYjNDM7IHNpemVvZihzdHJ1Y3Qgc21jZF9jZGNfbXNnKTsKIAlidWZfZGVzYy0mZ3Q7bGVuIC09IHNpemVvZihzdHJ1Y3Qgc21jZF9jZGNfbXNnKTsKLQljb25uLSZndDtzbmRidWZfZGVzYyA9IGJ1Zl9kZXNjOwotCWNvbm4tJmd0O3NuZGJ1Zl9kZXNjLSZndDt1c2VkID0gMTsKLQlhdG9taWNfc2V0KCZhbXA7Y29ubi0mZ3Q7c25kYnVmX3NwYWNlLCBjb25uLSZndDtzbmRidWZfZGVzYy0mZ3Q7bGVuKTsKJiM0MzsJYnVmX2Rlc2MtJmd0O3VzZWQgPSAxOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7Y29ubi0mZ3Q7c25kYnVmX3NwYWNlLCBidWZfZGVzYy0mZ3Q7bGVuKTsKJiM0MzsJLyogUHVibGlzaCB0aGUgZ2hvc3Qgc2VuZCBidWZmZXIgbGFzdCwgd2l0aCByZWxlYXNlIHNlbWFudGljczogdGhlCiYjNDM7CSAqIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UgKHNtY19pc21fc2V0X2Nvbm4oKQomIzQzOwkgKiByYW4gaW4gX19zbWNfYnVmX2NyZWF0ZSgpKSwgc28gdGhlIENEQyByZWNlaXZlIHRhc2tsZXQgbXVzdCBvYnNlcnZlCiYjNDM7CSAqIHRoZSBmdWxseSBpbml0aWFsaXNlZCBnaG9zdCBidWZmZXIgb25jZSBpdCBzZWVzIGEgbm9uLU5VTEwKJiM0MzsJICogc25kYnVmX2Rlc2MuICBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbgomIzQzOwkgKiBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbigpLgomIzQzOwkgKi8KJiM0MzsJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDtjb25uLSZndDtzbmRidWZfZGVzYywgYnVmX2Rlc2MpOwogCXJldHVybiAwOwogCiBmcmVlOgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDcyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFNNQyBQYXRjaCBmb3IgUmFjZSBDb25kaXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBuZXQvc21jL3NtY19jZGMuY2AgYW5kIGBuZXQvc21jL3NtY19jb3JlLmNgLiBJdCBzZWVtcyB0aGV5JiMzOTtyZSBpbmplY3RpbmcgYHNtcF9sb2FkX2FjcXVpcmVgIGFuZCBgc21wX3N0b3JlX3JlbGVhc2VgIGludG8gYGNvbm4tJmd0O3NuZGJ1Zl9kZXNjYCBhbmQgYGNvbm4tJmd0O3JtYl9kZXNjYC4gVGhpcyByaW5ncyBhIGJlbGw7IHNvdW5kcyBsaWtlIHRoZXkmIzM5O3JlIHRyeWluZyB0byBhZGRyZXNzIGEgbmFzdHkgcmFjZSBjb25kaXRpb24uIFNwZWNpZmljYWxseSwgYSBjb25jdXJyZW50IENEQyByZWNlaXZlIGhhbmRsZXIgd2FzIGxpa2VseSBvYnNlcnZpbmcgYW4gdW5pbml0aWFsaXplZCBidWZmZXIsIG9yIHdvcnNlLCBhIG51bGwgcG9pbnRlci4gQWx3YXlzIGZ1biB3aGVuIGRlYWxpbmcgd2l0aCBzaGFyZWQgbWVtb3J5IGFuZCBjb25jdXJyZW5jeSwgZXNwZWNpYWxseSB3aXRoaW4gYSBjcml0aWNhbCBzdWJzeXN0ZW0gbGlrZSBTTUMuCgpUaGlzIGlzIGZ1bmN0aW9uYWwgY29kZSwgb2YgY291cnNlLCByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgc3Vic3lzdGVtLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYXBwbGllZCBjb3JyZWN0bHksIGJ1dCBhbHNvIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZpeCBmb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBTTUMgaXMgcmVhY2hhYmxlIGluIHZhcmlvdXMgdmlydHVhbGl6YXRpb24gc2NlbmFyaW9zIC0gU01DLUQgd2l0aCBJU00gbG9vcGJhY2sgb3IgZHVtbXkgSVNNLCBmb3IgaW5zdGFuY2UuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gdGVzdCBpbiB0aGVzZSBlbnZpcm9ubWVudHMgaWYgcG9zc2libGUuCgpOb3csIGxldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBjb25maWcgb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggU01DLiBJJiMzOTtsbCBmaXJlIHVwIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBzZWUgd2hhdCBvcHRpb25zIG1pZ2h0IGJlIHJlbGV2YW50IG9yIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2guIE5lZWQgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIGJlZm9yZSBkaXZpbmcgZGVlcGVyIGludG8gdGhlIGNvZGUgcmV2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTTUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvc21jL0tjb25maWc6Mjpjb25maWcgU01DXG5uZXQvc21jL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG4tLVxubmV0L3NtYy9LY29uZmlnLTEzLVxubmV0L3NtYy9LY29uZmlnOjE0OmNvbmZpZyBTTUNfRElBR1xubmV0L3NtYy9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvc21jL0tjb25maWctMjItXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxubmV0L3NtYy9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEzNwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KioKClJpZ2h0LCB0aGUga2V5IGNvbmZpZ3VyYXRpb24gc2V0dGluZyB3ZSYjMzk7cmUgbG9va2luZyBhdCBpcyBgU01DYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIE5vdywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBgU01DYCBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB0YWtlIGEgcXVpY2sgc3RlcCBiYWNrIGFuZCBjb25zaWRlciBwb3RlbnRpYWwgY2FzY2FkaW5nIGVmZmVjdHMuIFRoZXJlJiMzOTtzIGEgZGVjZW50IGNoYW5jZSB0aGlzIGBTTUNgIG9wdGlvbiB0aWVzIGludG8gb3RoZXIgZmVhdHVyZXMgb3IgbW9kdWxlcyB3aXRoaW4gdGhlIHN5c3RlbS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgKmltbWVkaWF0ZSogZGVwZW5kZW5jaWVzLCBlaXRoZXIgZXhwbGljaXQgd2l0aGluIHRoZSBjb2RlIG9yIGltcGxpZWQgYnkgYXJjaGl0ZWN0dXJhbCBkZXNpZ24sIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGJlZm9yZSBwcm9jZWVkaW5nIGZ1cnRoZXIuIEEgcXVpY2sgc2NhbiBmb3IgcmVsYXRlZCBzZXR0aW5ncywgY29kZSBwYXRocywgb3IgZXh0ZXJuYWwgaW50ZWdyYXRpb25zIGlzIGluIG9yZGVyLiBJdCYjMzk7cyBiZXN0IHRvIG1hcCBvdXQgdGhlIGJyb2FkZXIgY29udGV4dCBiZWZvcmUgem9vbWluZyBpbiBvbiB0aGUgc3BlY2lmaWNzIG9mIGBTTUNgIGl0c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZz0yPWNvbmZpZyBTTUNcbm5ldC9zbWMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbm5ldC9zbWMvS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBESUJTXG5uZXQvc21jL0tjb25maWctNS1cdGhlbHBcbi0tXG5uZXQvc21jL0tjb25maWc9MTQ9Y29uZmlnIFNNQ19ESUFHXG5uZXQvc21jL0tjb25maWctMTUtXHR0cmlzdGF0ZSBcJiMzNDtTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xubmV0L3NtYy9LY29uZmlnOjE2Olx0ZGVwZW5kcyBvbiBTTUNcbm5ldC9zbWMvS2NvbmZpZy0xNy1cdGhlbHBcbi0tXG5uZXQvc21jL0tjb25maWc9MjM9Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxubmV0L3NtYy9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XCYjMzQ7XG5uZXQvc21jL0tjb25maWc6MjU6XHRkZXBlbmRzIG9uIFNNQyBcdTAwMjZcdTAwMjYgQlBGX0pJVCBcdTAwMjZcdTAwMjYgQlBGX1NZU0NBTExcbm5ldC9zbWMvS2NvbmZpZy0yNi1cdGRlZmF1bHQgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MjMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKktjb25maWcgRGVwZW5kZW5jeSBDaGVjayoqCgpPa2F5LCBzbyB0aGUgY29kZSBpbiBxdWVzdGlvbiBoYXMgYSBkZXBlbmRlbmN5IGNoYWluIHRoYXQgaW52b2x2ZXMgYElORVRgLCBgSU5GSU5JQkFORGAsIGFuZCBgRElCU2AuIFRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhlc2UgZGVwZW5kZW5jaWVzLCBzbyByYXRoZXIgdGhhbiByZWx5IG9uIG1lbW9yeSBvciBwb3RlbnRpYWxseSBvdXRkYXRlZCBkb2N1bWVudGF0aW9uLCBsZXQmIzM5O3MgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGhlIEtjb25maWcgZmlsZSBpbiBgbmV0L3NtYy9LY29uZmlnYCBzaG91bGQgcHJvdmlkZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIEkmIzM5O2xsIG9wZW4gdGhhdCB1cCBhbmQgdmVyaWZ5IHRoZSBleGFjdCBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZXNlIGZlYXR1cmVzIGFyZSBlbmFibGVkIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gVGhpcyBpcyB0aGUgb25seSB3YXkgdG8gYmUgY2VydGFpbiBJIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIGNhbiBhc3Nlc3MgdGhlIGltcGFjdCBvZiBjaGFuZ2VzIG9yIHBvdGVudGlhbCBjb25mbGljdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgU01DXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBESUJTXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIFNNQy1SIHByb3ZpZGVzIGEgXCYjMzQ7c29ja2V0cyBvdmVyIFJETUFcJiMzNDsgc29sdXRpb24gbWFraW5nIHVzZSBvZlxuICAgNzpcdFx0ICBSRE1BIG92ZXIgQ29udmVyZ2VkIEV0aGVybmV0IChSb0NFKSB0ZWNobm9sb2d5IHRvIHVwZ3JhZGVcbiAgIDg6XHRcdCAgQUZfSU5FVCBUQ1AgY29ubmVjdGlvbnMgdHJhbnNwYXJlbnRseS5cbiAgIDk6XHRcdCAgVGhlIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTTUMtUiBzb2x1dGlvbiBpcyBkZXNpZ25lZCBhc1xuICAxMDpcdFx0ICBhIHNlcGFyYXRlIHNvY2tldCBmYW1pbHkgU01DLlxuICAxMTpcdFxuICAxMjpcdFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gcnVuIFNNQyBzb2NrZXQgYXBwbGljYXRpb25zXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIFNNQ19ESUFHXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBTTUNcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgU3VwcG9ydCBmb3IgU01DIHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRvb2xzIHN1Y2ggYXNcbiAgMTk6XHRcdCAgc21jc3MuXG4gIDIwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjExMAoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDEyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvZGluZyB0aGUgRGVwZW5kZW5jaWVzKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIGBESUJTYC4uLiB3aGF0IGluIHRoZSBrZXJuZWwmIzM5O3Mgd29ybGQgaXMgYERJQlNgPyBMZXQgbWUgcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdC4gQWgsIEkgc2VlLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGxpa2VseSBhIGRlcGVuZGVuY3kgcmVsYXRlZCB0byBgSU5FVGAgYW5kIGBJTkZJTklCQU5EYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgdXN1YWxseSBzZWUgdGhhdCBpbiB0aGUgc3RhbmRhcmQga2VybmVsIGNvbmZpZywgYnV0IHRoZSBkZXBlbmRlbmN5IGFsc28gaW5jbHVkZXMgYERJQlNgPyBIbW1tLi4uIEkgYW0gbm90IGZhbWlsaWFyIHdpdGggYERJQlNgLiBJIGtub3cgSSBzaG91bGQgZGVmaW5pdGVseSBpbmNsdWRlIGBTTUNgLCBgSU5FVGAsIGFuZCBgSU5GSU5JQkFORGAgYmVjYXVzZSBvZiB0aGUgY29udGV4dCwgYnV0IHRoYXQgYERJQlNgIGlzIHRocm93aW5nIG1lLiBJcyB0aGF0IGEgdHlwbz8gT3IsIGlzIHRoaXMgc29tZXRoaW5nIHNwZWNpZmljIHRvIHN5emthbGxlciwgcGVyaGFwcz8gT3IsIG1heWJlIGl0JiMzOTtzIHJlbGF0ZWQgdG8gYElQVjZgIGluIHNvbWUgd2F5PyBMZXQgbWUgZG8gYSBxdWljayBzZWFyY2ggYW5kIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBESUJTYCByZWZlcnMgdG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBESUJTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9kaWJzL0tjb25maWc6Mjpjb25maWcgRElCU1xuZHJpdmVycy9kaWJzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0RpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9kaWJzL0tjb25maWctMTMtXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoxNDpjb25maWcgRElCU19MT1xuZHJpdmVycy9kaWJzL0tjb25maWctMTUtXHRib29sIFwmIzM0O0ludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTY3CgkJCQkJCQlvdXRwdXQ6IDY5CgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wbGVtZW50YXRpb24gb2YgRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGFuZCBpdCBzZWVtcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBESUJTYCwgd2hpY2ggSSBhc3N1bWUgaXMgRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nLiBHaXZlbiB0aGF0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gdGFraW5nIGludG8gYWNjb3VudCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBgU01DYCBhbmQgYElORklOSUJBTkRgLiBJJiMzOTtsbCB3YW50IHRvIGVuc3VyZSB0aGF0IHRob3NlIGZ1bmN0aW9uYWxpdGllcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGZ1bmN0aW9uIGNhbGxzIGltcGFjdGVkIGJ5IHRoaXMgY2hhbmdlLiBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmAsIGBzbWNkX2NkY19yeF90c2tsZXRgLCBgc21jX2NkY19yeF9oYW5kbGVyYCwgYF9fc21jX2J1Zl9jcmVhdGVgLCBhbmQgYHNtY2RfYnVmX2F0dGFjaGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgYXJlYXMgYWZmZWN0ZWQgYnkgdGhlIGBESUJTYCBpbXBsZW1lbnRhdGlvbiwgbGlrZWx5IGRlYWxpbmcgd2l0aCBtZXNzYWdlIGhhbmRsaW5nLCByZWNlaXZlIHByb2Nlc3NpbmcsIGFuZCBidWZmZXIgbWFuYWdlbWVudC4KCk5leHQsIEkgbmVlZCB0byB2ZXJpZnkgd2hpY2ggb2YgdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgd2lsbCB0ZWxsIG1lIGFib3V0IHRoZWlyIHNjb3BlIGFuZCB3aGV0aGVyIHRoZXkgYXJlIG1lYW50IHRvIGJlIGF2YWlsYWJsZSBleHRlcm5hbGx5IG9yIGlmIHRoZXkgYXJlIGp1c3QgaW50ZXJuYWwgZnVuY3Rpb25zLiBUaGlzIGRldGFpbCBjYW4gcG90ZW50aWFsbHkgYWZmZWN0IG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX2NkY19tc2dfcmVjdl9hY3Rpb258c21jZF9jZGNfcnhfdHNrbGV0fHNtY19jZGNfcnhfaGFuZGxlcnxfX3NtY19idWZfY3JlYXRlfHNtY2RfYnVmX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvYWZfc21jLmM9MTQxNj1zdGF0aWMgaW50IHNtY19jb25uZWN0X2lzbShzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE0NjUtXHRpZiAoc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoc21jLVx1MDAzZWNvbm4ubGdyLVx1MDAzZXNtY2QpKSB7XG5uZXQvc21jL2FmX3NtYy5jOjE0NjY6XHRcdHJjID0gc21jZF9idWZfYXR0YWNoKHNtYyk7XG5uZXQvc21jL2FmX3NtYy5jLTE0NjctXHRcdGlmIChyYykge1xuLS1cbm5ldC9zbWMvYWZfc21jLmM9MjQ0OT1zdGF0aWMgdm9pZCBzbWNfbGlzdGVuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjU3My1cdCAgICBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShuZXdfc21jLVx1MDAzZWNvbm4ubGdyLVx1MDAzZXNtY2QpKSB7XG5uZXQvc21jL2FmX3NtYy5jOjI1NzQ6XHRcdHJjID0gc21jZF9idWZfYXR0YWNoKG5ld19zbWMpO1xubmV0L3NtYy9hZl9zbWMuYy0yNTc1LVx0XHRpZiAocmMpXG4tLVxubmV0L3NtYy9zbWNfY2RjLmM9MzA4PXN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3ZhbGlkYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2NkY19tc2cgKmNkYyxcbi0tXG5uZXQvc21jL3NtY19jZGMuYy0zMjktXG5uZXQvc21jL3NtY19jZGMuYzozMzA6c3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXG5uZXQvc21jL3NtY19jZGMuYy0zMzEtXHRcdFx0XHQgICAgc3RydWN0IHNtY19jZGNfbXNnICpjZGMpXG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtMzM4LVx0LyogQWNxdWlyZSB0aGUgc2VuZCBidWZmZXIgb25jZSwgcGFpcmluZyB3aXRoIHRoZSBzbXBfc3RvcmVfcmVsZWFzZSgpIGluXG5uZXQvc21jL3NtY19jZGMuYzozMzk6XHQgKiBfX3NtY19idWZfY3JlYXRlKCkvc21jZF9idWZfYXR0YWNoKCkuICBPbiB0aGUgU01DLUQgRE1CLW5vY29weSBwYXRoXG5uZXQvc21jL3NtY19jZGMuYy0zNDAtXHQgKiB0aGUgZ2hvc3Qgc25kYnVmX2Rlc2MgaXMgYXR0YWNoZWQgb25seSBhZnRlciB0aGUgY29ubmVjdGlvbiBpcyBhbHJlYWR5XG4tLVxubmV0L3NtYy9zbWNfY2RjLmM9NDQ3PXN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3JlY3Yoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfY2RjX21zZyAqY2RjKVxuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTQ1MC1cdGJoX2xvY2tfc29jayhcdTAwMjZzbWMtXHUwMDNlc2spO1xubmV0L3NtYy9zbWNfY2RjLmM6NDUxOlx0c21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc21jLCBjZGMpO1xubmV0L3NtYy9zbWNfY2RjLmMtNDUyLVx0YmhfdW5sb2NrX3NvY2soXHUwMDI2c21jLVx1MDAzZXNrKTtcbi0tXG5uZXQvc21jL3NtY19jZGMuYy00NjEtICovXG5uZXQvc21jL3NtY19jZGMuYzo0NjI6c3RhdGljIHZvaWQgc21jZF9jZGNfcnhfdHNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcbm5ldC9zbWMvc21jX2NkYy5jLTQ2My17XG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtNDcxLVx0XHRyZXR1cm47XG5uZXQvc21jL3NtY19jZGMuYzo0NzI6XHQvKiBQYWlyIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBfX3NtY19idWZfY3JlYXRlKCk6IHRoZSBjb25uZWN0aW9uXG5uZXQvc21jL3NtY19jZGMuYy00NzMtXHQgKiBpcyBwdWJsaXNoZWQgYmVmb3JlIGl0cyBSTUIgaXMgYWxsb2NhdGVkLCBzbyBiYWlsIHdoaWxlIHJtYl9kZXNjIGlzXG4tLVxubmV0L3NtYy9zbWNfY2RjLmM9NDkwPXZvaWQgc21jZF9jZGNfcnhfaW5pdChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG5uZXQvc21jL3NtY19jZGMuYy00OTEte1xubmV0L3NtYy9zbWNfY2RjLmM6NDkyOlx0dGFza2xldF9zZXR1cChcdTAwMjZjb25uLVx1MDAzZXJ4X3Rza2xldCwgc21jZF9jZGNfcnhfdHNrbGV0KTtcbm5ldC9zbWMvc21jX2NkYy5jLTQ5My19XG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtNDk2LVxubmV0L3NtYy9zbWNfY2RjLmM6NDk3OnN0YXRpYyB2b2lkIHNtY19jZGNfcnhfaGFuZGxlcihzdHJ1Y3QgaWJfd2MgKndjLCB2b2lkICpidWYpXG5uZXQvc21jL3NtY19jZGMuYy00OTgte1xuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTUxMy1cdGNvbm4gPSBzbWNfbGdyX2ZpbmRfY29ubihudG9obChjZGMtXHUwMDNldG9rZW4pLCBsZ3IpO1xubmV0L3NtYy9zbWNfY2RjLmM6NTE0Olx0LyogUGFpciB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gX19zbWNfYnVmX2NyZWF0ZSgpOiBiYWlsIHdoaWxlIHRoZVxubmV0L3NtYy9zbWNfY2RjLmM6NTE1Olx0ICogUk1CIGlzIHVuc2V0IChzbWNfY2RjX21zZ19yZWN2X2FjdGlvbigpIGRlcmVmZXJlbmNlcyBpdCkgdG8gYXZvaWQgYVxubmV0L3NtYy9zbWNfY2RjLmMtNTE2LVx0ICogTlVMTCBkZXJlZiBhbmQgYSBzdGFsZS1idWZmZXIgcmVhZCBpbiB0aGUgY29ubmVjdGlvbiBzZXR1cCB3aW5kb3cuXG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtNTM5LVxubmV0L3NtYy9zbWNfY2RjLmM6NTQwOnN0YXRpYyBzdHJ1Y3Qgc21jX3dyX3J4X2hhbmRsZXIgc21jX2NkY19yeF9oYW5kbGVyc1tdID0ge1xubmV0L3NtYy9zbWNfY2RjLmMtNTQxLVx0e1xubmV0L3NtYy9zbWNfY2RjLmM6NTQyOlx0XHQuaGFuZGxlclx0PSBzbWNfY2RjX3J4X2hhbmRsZXIsXG5uZXQvc21jL3NtY19jZGMuYy01NDMtXHRcdC50eXBlXHRcdD0gU01DX0NEQ19NU0dfVFlQRVxuLS1cbm5ldC9zbWMvc21jX2NkYy5jPTU1MD1pbnQgX19pbml0IHNtY19jZGNfaW5pdCh2b2lkKVxuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTU1NC1cbm5ldC9zbWMvc21jX2NkYy5jOjU1NTpcdGZvciAoaGFuZGxlciA9IHNtY19jZGNfcnhfaGFuZGxlcnM7IGhhbmRsZXItXHUwMDNlaGFuZGxlcjsgaGFuZGxlciYjNDM7JiM0MzspIHtcbm5ldC9zbWMvc21jX2NkYy5jLTU1Ni1cdFx0SU5JVF9ITElTVF9OT0RFKFx1MDAyNmhhbmRsZXItXHUwMDNlbGlzdCk7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTIzOTA9c3RhdGljIHN0cnVjdCBzbWNfYnVmX2Rlc2MgKnNtY2RfbmV3X2J1Zl9jcmVhdGUoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTI0MjUtXG5uZXQvc21jL3NtY19jb3JlLmM6MjQyNjpzdGF0aWMgaW50IF9fc21jX2J1Zl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIGJvb2wgaXNfc21jZCwgYm9vbCBpc19ybWIpXG5uZXQvc21jL3NtY19jb3JlLmMtMjQyNy17XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTI1NjE9aW50IHNtY19idWZfY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBib29sIGlzX3NtY2QpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTI1NjktXG5uZXQvc21jL3NtY19jb3JlLmM6MjU3MDpcdHJjID0gX19zbWNfYnVmX2NyZWF0ZShzbWMsIGlzX3NtY2QsIGZhbHNlKTtcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTcxLVx0aWYgKHJjKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0yNTc1LVx0LyogY3JlYXRlIHJtYiAqL1xubmV0L3NtYy9zbWNfY29yZS5jOjI1NzY6XHRyYyA9IF9fc21jX2J1Zl9jcmVhdGUoc21jLCBpc19zbWNkLCB0cnVlKTtcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTc3LVx0aWYgKHJjIFx1MDAyNlx1MDAyNiBzbWMtXHUwMDNlY29ubi5zbmRidWZfZGVzYykge1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0yNTg3LVxubmV0L3NtYy9zbWNfY29yZS5jOjI1ODg6aW50IHNtY2RfYnVmX2F0dGFjaChzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTg5LXtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMjYxNi1cdCAqIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UgKHNtY19pc21fc2V0X2Nvbm4oKVxubmV0L3NtYy9zbWNfY29yZS5jOjI2MTc6XHQgKiByYW4gaW4gX19zbWNfYnVmX2NyZWF0ZSgpKSwgc28gdGhlIENEQyByZWNlaXZlIHRhc2tsZXQgbXVzdCBvYnNlcnZlXG5uZXQvc21jL3NtY19jb3JlLmMtMjYxOC1cdCAqIHRoZSBmdWxseSBpbml0aWFsaXNlZCBnaG9zdCBidWZmZXIgb25jZSBpdCBzZWVzIGEgbm9uLU5VTExcbm5ldC9zbWMvc21jX2NvcmUuYy0yNjE5LVx0ICogc25kYnVmX2Rlc2MuICBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpblxubmV0L3NtYy9zbWNfY29yZS5jOjI2MjA6XHQgKiBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbigpLlxubmV0L3NtYy9zbWNfY29yZS5jLTI2MjEtXHQgKi9cbi0tXG5uZXQvc21jL3NtY19jb3JlLmg9NTgzPWludCBzbWNfYnVmX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgYm9vbCBpc19zbWNkKTtcbm5ldC9zbWMvc21jX2NvcmUuaDo1ODQ6aW50IHNtY2RfYnVmX2F0dGFjaChzdHJ1Y3Qgc21jX3NvY2sgKnNtYyk7XG5uZXQvc21jL3NtY19jb3JlLmgtNTg1LWludCBzbWNfdW5jb21wcmVzc19idWZzaXplKHU4IGNvbXByZXNzZWQpO1xuLS1cbm5ldC9zbWMvc21jX3J4LmMtMjktLyogY2FsbGJhY2sgaW1wbGVtZW50YXRpb24gdG8gd2FrZXVwIGNvbnN1bWVycyBibG9ja2VkIHdpdGggc21jX3J4X3dhaXQoKS5cbm5ldC9zbWMvc21jX3J4LmM6MzA6ICogaW5kaXJlY3RseSBjYWxsZWQgYnkgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oKS5cbm5ldC9zbWMvc21jX3J4LmMtMzEtICovXG4tLVxubmV0L3NtYy9zbWNfcnguYz0zNTI9aW50IHNtY19yeF9yZWN2bXNnKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L3NtYy9zbWNfcnguYy0zOTgtXHRcdGlmIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKSB7XG5uZXQvc21jL3NtY19yeC5jOjM5OTpcdFx0XHQvKiBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbigpIGNvdWxkIGhhdmUgcnVuIGFmdGVyXG5uZXQvc21jL3NtY19yeC5jLTQwMC1cdFx0XHQgKiBhYm92ZSBzbWNfcnhfcmVjdm1zZ19kYXRhX2F2YWlsYWJsZSgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzOTYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZXNzYWdlIFJlY2VwdGlvbiBhbmQgQnVmZmVyIE1hbmFnZW1lbnQgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgc21jX2NkY19tc2dfcmVjdl9hY3Rpb25gLCBgc21jZF9jZGNfcnhfdHNrbGV0YCwgYHNtY19jZGNfcnhfaGFuZGxlcmAsIGBfX3NtY19idWZfY3JlYXRlYCwgYW5kIGBzbWNkX2J1Zl9hdHRhY2hgLiBJdCBzZWVtcyBsaWtlIEkmIzM5O3ZlIG1hZGUgc29tZSBjaGFuZ2VzIHRvIGFsbCBvZiB0aGVtLiBJIHNlZSB0aGF0IGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmAsIGBzbWNkX2NkY19yeF90c2tsZXRgLCBgc21jX2NkY19yeF9oYW5kbGVyYCwgYW5kIGBfX3NtY19idWZfY3JlYXRlYCBhcmUgYWxsIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBSaWdodCwgbWVhbmluZyB0aGVpciBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBjdXJyZW50IHRyYW5zbGF0aW9uIHVuaXQuIEJ1dCBgc21jZF9idWZfYXR0YWNoYCBpcyAqbm90KiBzdGF0aWMsIHNvIHRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuCgpGdXJ0aGVybW9yZSwgYHNtY19idWZfY3JlYXRlYCBjYWxscyBgX19zbWNfYnVmX2NyZWF0ZWAsIHdoaWNoIG1ha2VzIHNlbnNlIGFzIGEga2luZCBvZiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24uIExvb2tpbmcgYXQgdGhlIGNhbGwgZmxvdywgYHNtY19jZGNfbXNnX3JlY3ZgIGNhbGxzIGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmAuIEFuZCwgZmluYWxseSwgYHNtY2RfY2RjX3J4X2luaXRgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIGBzbWNkX2NkY19yeF90c2tsZXRgLiBBbHNvLCBJJiMzOTt2ZSBnb3QgYHNtY19jZGNfcnhfaGFuZGxlcnNgIGNvbnRhaW5pbmcgYHNtY19jZGNfcnhfaGFuZGxlcmAuCgpHaXZlbiB0aGlzIG92ZXJ2aWV3LCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIHRoZSBvbmVzIEkgcmVhbGx5IG5lZWQgdG8gZm9jdXMgb24gcmlnaHQgbm93LiBUaGF0IG1lYW5zIGBzbWNkX2J1Zl9hdHRhY2hgIGFuZCBgc21jX2J1Zl9jcmVhdGVgIGFyZSB0aGUgcHJpb3JpdHkuIEkgc2hvdWxkIGNoZWNrIHdoZXRoZXIgYHNtY19jZGNfbXNnX3JlY3ZgIGlzIG5vbi1zdGF0aWMgb3Igbm90IHRvbywganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfY2RjX21zZ19yZWN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY2RjLmM9MzA4PXN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3ZhbGlkYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2NkY19tc2cgKmNkYyxcbi0tXG5uZXQvc21jL3NtY19jZGMuYy0zMjktXG5uZXQvc21jL3NtY19jZGMuYzozMzA6c3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXG5uZXQvc21jL3NtY19jZGMuYy0zMzEtXHRcdFx0XHQgICAgc3RydWN0IHNtY19jZGNfbXNnICpjZGMpXG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtNDQ2LS8qIGNhbGxlZCB1bmRlciB0YXNrbGV0IGNvbnRleHQgKi9cbm5ldC9zbWMvc21jX2NkYy5jOjQ0NzpzdGF0aWMgdm9pZCBzbWNfY2RjX21zZ19yZWN2KHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2NkY19tc2cgKmNkYylcbm5ldC9zbWMvc21jX2NkYy5jLTQ0OC17XG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtNDUwLVx0YmhfbG9ja19zb2NrKFx1MDAyNnNtYy1cdTAwM2Vzayk7XG5uZXQvc21jL3NtY19jZGMuYzo0NTE6XHRzbWNfY2RjX21zZ19yZWN2X2FjdGlvbihzbWMsIGNkYyk7XG5uZXQvc21jL3NtY19jZGMuYy00NTItXHRiaF91bmxvY2tfc29jayhcdTAwMjZzbWMtXHUwMDNlc2spO1xuLS1cbm5ldC9zbWMvc21jX2NkYy5jPTQ2Mj1zdGF0aWMgdm9pZCBzbWNkX2NkY19yeF90c2tsZXQoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KVxuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTQ4My1cdHNtYyA9IGNvbnRhaW5lcl9vZihjb25uLCBzdHJ1Y3Qgc21jX3NvY2ssIGNvbm4pO1xubmV0L3NtYy9zbWNfY2RjLmM6NDg0Olx0c21jX2NkY19tc2dfcmVjdihzbWMsIChzdHJ1Y3Qgc21jX2NkY19tc2cgKilcdTAwMjZjZGMpO1xubmV0L3NtYy9zbWNfY2RjLmMtNDg1LX1cbi0tXG5uZXQvc21jL3NtY19jZGMuYz00OTc9c3RhdGljIHZvaWQgc21jX2NkY19yeF9oYW5kbGVyKHN0cnVjdCBpYl93YyAqd2MsIHZvaWQgKmJ1Zilcbi0tXG5uZXQvc21jL3NtY19jZGMuYy01MTQtXHQvKiBQYWlyIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBfX3NtY19idWZfY3JlYXRlKCk6IGJhaWwgd2hpbGUgdGhlXG5uZXQvc21jL3NtY19jZGMuYzo1MTU6XHQgKiBSTUIgaXMgdW5zZXQgKHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKCkgZGVyZWZlcmVuY2VzIGl0KSB0byBhdm9pZCBhXG5uZXQvc21jL3NtY19jZGMuYy01MTYtXHQgKiBOVUxMIGRlcmVmIGFuZCBhIHN0YWxlLWJ1ZmZlciByZWFkIGluIHRoZSBjb25uZWN0aW9uIHNldHVwIHdpbmRvdy5cbi0tXG5uZXQvc21jL3NtY19jZGMuYy01MzQtXG5uZXQvc21jL3NtY19jZGMuYzo1MzU6XHRzbWNfY2RjX21zZ19yZWN2KHNtYywgY2RjKTtcbm5ldC9zbWMvc21jX2NkYy5jLTUzNi1vdXQ6XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTI1ODg9aW50IHNtY2RfYnVmX2F0dGFjaChzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMjYxOS1cdCAqIHNuZGJ1Zl9kZXNjLiAgUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW5cbm5ldC9zbWMvc21jX2NvcmUuYzoyNjIwOlx0ICogc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oKS5cbm5ldC9zbWMvc21jX2NvcmUuYy0yNjIxLVx0ICovXG4tLVxubmV0L3NtYy9zbWNfcnguYy0yOS0vKiBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbiB0byB3YWtldXAgY29uc3VtZXJzIGJsb2NrZWQgd2l0aCBzbWNfcnhfd2FpdCgpLlxubmV0L3NtYy9zbWNfcnguYzozMDogKiBpbmRpcmVjdGx5IGNhbGxlZCBieSBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbigpLlxubmV0L3NtYy9zbWNfcnguYy0zMS0gKi9cbi0tXG5uZXQvc21jL3NtY19yeC5jPTM1Mj1pbnQgc21jX3J4X3JlY3Ztc2coc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvc21jL3NtY19yeC5jLTM5OC1cdFx0aWYgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBSQ1ZfU0hVVERPV04pIHtcbm5ldC9zbWMvc21jX3J4LmM6Mzk5Olx0XHRcdC8qIHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKCkgY291bGQgaGF2ZSBydW4gYWZ0ZXJcbm5ldC9zbWMvc21jX3J4LmMtNDAwLVx0XHRcdCAqIGFib3ZlIHNtY19yeF9yZWN2bXNnX2RhdGFfYXZhaWxhYmxlKClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMTAKCQkJCQkJCW91dHB1dDogNjgKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNjb3BlIG9mIEZ1bmN0aW9ucyBpbiBgc21jX2NkYy5jYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHNtY19jZGNfbXNnX3JlY3ZgIGFuZCBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgbGltaXRlZCBpbiBzY29wZSB3aXRoaW4gdGhlIGBzbWNfY2RjLmNgIGZpbGUgaXRzZWxmLiBUaGF0IG1lYW5zIGl0IGNhbiYjMzk7dCBiZSBjYWxsZWQgZGlyZWN0bHkgZnJvbSBvdXRzaWRlIHRoZSBmaWxlLiBNeSBuZXh0IHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGZ1bmN0aW9ucyB0aGF0ICphcmUqIGFjY2Vzc2libGUgZnJvbSBlbHNld2hlcmUsIGFuZCB0aGVyZWZvcmUgcmVwcmVzZW50IGFuIGludGVyZmFjZSB0byB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBJIGtub3cgYHNtY2RfYnVmX2F0dGFjaGAgYW5kIGBzbWNfYnVmX2NyZWF0ZWAgYXJlIG5vbi1zdGF0aWMsIHNvIHRoZXkmIzM5O3JlIGRlZmluaXRlbHkgb24gbXkgcmFkYXIuIEJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGZpbGUgdGhhdCBhcmUgYWxzbyBleHBvc2VkIGV4dGVybmFsbHkuIExldCBtZSBxdWlja2x5IHNjYW4gdGhyb3VnaCB0aGUgc291cmNlIGFuZCBjb25maXJtIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBzbWNfY2RjLmNgIHRoYXQgSSYjMzk7dmUgbWlzc2VkLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGV4dGVybmFsIGludGVyZmFjZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jZGMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jZGMuYz0yNj1zdGF0aWMgdm9pZCBzbWNfY2RjX3R4X2hhbmRsZXIoc3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKnBuZF9zbmQsXG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtNzItXG5uZXQvc21jL3NtY19jZGMuYzo3MzppbnQgc21jX2NkY19nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcbm5ldC9zbWMvc21jX2NkYy5jLTc0LVx0XHRcdCAgc3RydWN0IHNtY19saW5rICpsaW5rLFxuLS1cbm5ldC9zbWMvc21jX2NkYy5jPTk0PXN0YXRpYyBpbmxpbmUgdm9pZCBzbWNfY2RjX2FkZF9wZW5kaW5nX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTExMS1cbm5ldC9zbWMvc21jX2NkYy5jOjExMjppbnQgc21jX2NkY19tc2dfc2VuZChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sXG5uZXQvc21jL3NtY19jZGMuYy0xMTMtXHRcdCAgICAgc3RydWN0IHNtY193cl9idWYgKndyX2J1Zixcbi0tXG5uZXQvc21jL3NtY19jZGMuYy0xNDItLyogc2VuZCBhIHZhbGlkYXRpb24gbXNnIGluZGljYXRpbmcgdGhlIG1vdmUgb2YgYSBjb25uIHRvIGFuIG90aGVyIFFQIGxpbmsgKi9cbm5ldC9zbWMvc21jX2NkYy5jOjE0MzppbnQgc21jcl9jZGNfbXNnX3NlbmRfdmFsaWRhdGlvbihzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sXG5uZXQvc21jL3NtY19jZGMuYy0xNDQtXHRcdFx0XHQgc3RydWN0IHNtY19jZGNfdHhfcGVuZCAqcGVuZCxcbi0tXG5uZXQvc21jL3NtY19jZGMuYz0xNzQ9c3RhdGljIGludCBzbWNyX2NkY19nZXRfc2xvdF9hbmRfbXNnX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTIwOC1cbm5ldC9zbWMvc21jX2NkYy5jOjIwOTppbnQgc21jX2NkY19nZXRfc2xvdF9hbmRfbXNnX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxubmV0L3NtYy9zbWNfY2RjLmMtMjEwLXtcbi0tXG5uZXQvc21jL3NtY19jZGMuYy0yMjctXG5uZXQvc21jL3NtY19jZGMuYzoyMjg6dm9pZCBzbWNfY2RjX3dhaXRfcGVuZF90eF93cihzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG5uZXQvc21jL3NtY19jZGMuYy0yMjkte1xuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTIzNi0gKi9cbm5ldC9zbWMvc21jX2NkYy5jOjIzNzppbnQgc21jZF9jZGNfbXNnX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxubmV0L3NtYy9zbWNfY2RjLmMtMjM4LXtcbi0tXG5uZXQvc21jL3NtY19jZGMuYz00NjI9c3RhdGljIHZvaWQgc21jZF9jZGNfcnhfdHNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcbi0tXG5uZXQvc21jL3NtY19jZGMuYy00ODktICovXG5uZXQvc21jL3NtY19jZGMuYzo0OTA6dm9pZCBzbWNkX2NkY19yeF9pbml0KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbm5ldC9zbWMvc21jX2NkYy5jLTQ5MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjAwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJbml0aWFsaXphdGlvbiBhbmQgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYWRkIGBzbWNkX2NkY19yeF9pbml0YCB0byB0aGUgbGlzdCBhcyB3ZWxsOyBpdOKAmXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGluaXRpYWxpemVzIHRoZSBSWCB0YXNrbGV0LiBBbmQgbGV0JiMzOTtzIG5vdCBmb3JnZXQgYHNtY19idWZfY3JlYXRlYCBhbmQgYHNtY2RfYnVmX2F0dGFjaGAuIEkmIzM5O20gZG91YmxlLWNoZWNraW5nIG5vdyB0byBjb25maXJtIHRoYXQgYHNtY2RfY2RjX3J4X2luaXRgIGlzbiYjMzk7dCBzdGF0aWMuIFllcywgZ29vZCwgaXQgaXNuJiMzOTt0LgoKQWgsIHJpZ2h0LCBub3cgSSByZW1lbWJlciwgYHNtY2RfY2RjX3J4X2luaXRgIGlzIGNhbGxlZCBkdXJpbmcgdGhlIGNvbm5lY3Rpb24gc2V0dXAgcGhhc2UuIFRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24gdGhhdCBjYW4gb2NjdXIgZHVyaW5nIHRoYXQgY29ubmVjdGlvbiBzZXR1cCwgd2hlcmUgYHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uYCBtaWdodCBiZSBjYWxsZWQgcHJlbWF0dXJlbHksIGJlZm9yZSBgY29ubi0mZ3Q7c25kYnVmX2Rlc2NgIGFuZCBgY29ubi0mZ3Q7cm1iX2Rlc2NgIGhhdmUgYmVlbiBmdWxseSBpbml0aWFsaXplZC4KCkxldCBtZSBxdWlja2x5IHJldmlldyB0aGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQ6IGBTTUNgLCBgSU5GSU5JQkFORGAsIGFuZCBgRElCU2AuIEhvbGQgb24gYSBtaW51dGXigKYgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgRElCU2AgaXMgc29tZXRoaW5nIHRoYXQmIzM5O3MgcGFydCBvZiB0aGUgc3RhbmRhcmQga2VybmVsLiBJICp0aGluayogSSBzYXcgYGRyaXZlcnMvZGlicy9LY29uZmlnYCBpbiB0aGF0IGdyZXBwZXIgb3V0cHV0LCBidXQgSSYjMzk7bSBqdXN0IHF1aWNrbHkgY29uZmlybWluZyBub3cuIEFoYSwgaXQgc2VlbXMgbGlrZSBgZHJpdmVycy9kaWJzL0tjb25maWdgIGlzbiYjMzk7dCBhY3R1YWxseSBpbiB0aGUgc3RhbmRhcmQgTGludXgga2VybmVsLiBJdCBjb3VsZCBiZSBzcGVjaWZpYyB0byBzeXprYWxsZXIsIG9yIHBlcmhhcHMgYSBjdXN0b20gZHJpdmVyLgoKT2theSwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoYXQgYERJQlNgIGlzIGluZGVlZCBsaXN0ZWQgaW4gYG5ldC9zbWMvS2NvbmZpZ2AuIFdhaXQsIHdhc24mIzM5O3Qgc3VyZSBpZiB0aGF0IHdhcyBqdXN0IGEgdHlwby4gQWgsIHllcywgYG5ldC9zbWMvS2NvbmZpZ2AgZG9lcyBoYXZlIGBkZXBlbmRzIG9uIElORVQgJmFtcDsmYW1wOyBJTkZJTklCQU5EICZhbXA7JmFtcDsgRElCU2AuIEJ1dCwgSSBkaWRuJiMzOTt0IHNlZSBESUJTIGluIHRoZSBzdGFuZGFyZCBrZXJuZWwuIFRoYXQmIzM5O3MgYSBwb2ludCBvZiBjb25mdXNpb24uIExldCBtZSBqdXN0IG9wZW4gYG5ldC9zbWMvS2NvbmZpZ2AgYWdhaW4gdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFNNQ1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU1xuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBTTUMtUiBwcm92aWRlcyBhIFwmIzM0O3NvY2tldHMgb3ZlciBSRE1BXCYjMzQ7IHNvbHV0aW9uIG1ha2luZyB1c2Ugb2ZcbiAgIDc6XHRcdCAgUkRNQSBvdmVyIENvbnZlcmdlZCBFdGhlcm5ldCAoUm9DRSkgdGVjaG5vbG9neSB0byB1cGdyYWRlXG4gICA4Olx0XHQgIEFGX0lORVQgVENQIGNvbm5lY3Rpb25zIHRyYW5zcGFyZW50bHkuXG4gICA5Olx0XHQgIFRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU01DLVIgc29sdXRpb24gaXMgZGVzaWduZWQgYXNcbiAgMTA6XHRcdCAgYSBzZXBhcmF0ZSBzb2NrZXQgZmFtaWx5IFNNQy5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHJ1biBTTUMgc29ja2V0IGFwcGxpY2F0aW9uc1xuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBTTUNfRElBR1xuICAxNTpcdFx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gU01DXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIFN1cHBvcnQgZm9yIFNNQyBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSB0b29scyBzdWNoIGFzXG4gIDE5Olx0XHQgIHNtY3NzLlxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzIyNgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlcGVuZGVuY2llcyBhbmQgQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gdGhpcyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGNvdmVyIGFsbCB0aGUgYmFzZXMuIEl0IGRlZmluaXRlbHkgaGluZ2VzIG9uIGBJTkVUYCwgYElORklOSUJBTkRgLCBhbmQgYERJQlNgLiBObyBxdWVzdGlvbiBhYm91dCB0aGF0LiBUaGVyZWZvcmUsIEkgbmVlZCB0byBiZSBzdXJlIHRvIGV4cGxpY2l0bHkgaW5jbHVkZSB0aG9zZS4gV2FpdCwgYElORVRgIGlzIGFsd2F5cyB0aGVyZSwgaXNuJiMzOTt0IGl0PyBJdCYjMzk7cyBwcmV0dHkgc3RhbmRhcmQsIGJ1dCBqdXN0IHRvIGJlIHN1cmUgSSYjMzk7bGwgc3RpbGwgaW5jbHVkZSBpdC4gTm8gaGFybSBpbiBiZWluZyBleHRyYSBjYXV0aW91cywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBjb3JlIGNvbXBvbmVudHMuIE5vdywgYmVmb3JlIEkgY29tbWl0IHRvIGFueXRoaW5nLCBsZXQgbWUgZG91YmxlLWNoZWNrIGlmIGBESUJTYCBoYXMgYW55ICpvdGhlciogZGVwZW5kZW5jaWVzIEkgbWlnaHQgYmUgbWlzc2luZy4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0Y29uZmlnIERJQlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0RpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZWZhdWx0IG5cbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIChESUJTKSBpcyBhIGNvbW11bmljYXRpb24gbWV0aG9kIHRoYXRcbiAgIDc6XHRcdCAgdXNlcyBjb21tb24gcGh5c2ljYWwgKGludGVybmFsKSBtZW1vcnkgZm9yIHN5bmNocm9ub3VzIGRpcmVjdCBhY2Nlc3NcbiAgIDg6XHRcdCAgaW50byBhIHJlbW90ZSBidWZmZXIuXG4gICA5Olx0XG4gIDEwOlx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBwcm92aWRlIHRoZSBhYnN0cmFjdGlvbiBsYXllciBiZXR3ZWVuXG4gIDExOlx0XHQgIGRpYnMgZGV2aWNlcyBhbmQgZGlicyBjbGllbnRzIGxpa2UgdGhlIFNNQyBwcm90b2NvbC5cbiAgMTI6XHRcdCAgVGhlIG1vZHVsZSBuYW1lIGlzIGRpYnMuXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIERJQlNfTE9cbiAgMTU6XHRcdGJvb2wgXCYjMzQ7SW50cmEtT1Mgc2hvcnRjdXQgd2l0aCBkaWJzIGxvb3BiYWNrXCYjMzQ7XG4gIDE2Olx0XHRkZXBlbmRzIG9uIERJQlNcbiAgMTc6XHRcdGRlZmF1bHQgblxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBESUJTX0xPIGVuYWJsZXMgdGhlIGNyZWF0aW9uIG9mIGFuIHNvZnR3YXJlLWVtdWxhdGVkIGRpYnMgZGV2aWNlXG4gIDIwOlx0XHQgIG5hbWVkIGxvIHdoaWNoIGNhbiBiZSB1c2VkIGZvciB0cmFuc2ZlcnJpbmcgZGF0YSB3aGVuIGNvbW11bmljYXRpb25cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NDEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uc2lkZXJpbmcgU01DLUQgYW5kIElTTSBTdXBwb3J0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgRElCU2AgYW5kIGBESUJTX0xPYC4gUmlnaHQsIGBESUJTX0xPYCBpcyB0aGUgc29mdHdhcmUtZW11bGF0ZWQgJiMzNDtsbyYjMzQ7IGRpYnMgZGV2aWNlLiBUaGF0JiMzOTtzIGdvb2QsIGJlY2F1c2UgU01DLUQgbmVlZHMgYW4gSVNNIGRldmljZSwgYW5kIHNpbmNlIGBESUJTX0xPYCBwcm92aWRlcyBhIHZpcnR1YWxpemVkIG9uZSwgd2UgYWJzb2x1dGVseSBuZWVkIHRvIGluY2x1ZGUgaXQuIEl0JiMzOTtsbCBtYWtlIHRoaW5ncyBtdWNoIGVhc2llciBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEhtbSwgbm93IEkmIzM5O20gdGhpbmtpbmcsIFNNQy1EICpkb2VzKiB1c2UgSVNNLCBzbyBgRElCU2AgaXMgcHJvYmFibHkgdGhlIGN1c3RvbSBuYW1lIGZvciBJU00gaW4gdGhpcyBrZXJuZWwgdHJlZS4gT3IgbWF5YmUgaXQmIzM5O3MgYSBuZXcgZmVhdHVyZSwgc29tZXRoaW5nIEkgaGF2ZW4mIzM5O3Qgc2VlbiBiZWZvcmUuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGJ5IGxvb2tpbmcgYXQgYHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTE0MTY9c3RhdGljIGludCBzbWNfY29ubmVjdF9pc20oc3RydWN0IHNtY19zb2NrICpzbWMsXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0xNDY0LVxubmV0L3NtYy9hZl9zbWMuYzoxNDY1Olx0aWYgKHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KHNtYy1cdTAwM2Vjb25uLmxnci1cdTAwM2VzbWNkKSkge1xubmV0L3NtYy9hZl9zbWMuYy0xNDY2LVx0XHRyYyA9IHNtY2RfYnVmX2F0dGFjaChzbWMpO1xuLS1cbm5ldC9zbWMvYWZfc21jLmM9MjQ0OT1zdGF0aWMgdm9pZCBzbWNfbGlzdGVuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjU3Mi1cdGlmIChpbmktXHUwMDNlaXNfc21jZCBcdTAwMjZcdTAwMjZcbm5ldC9zbWMvYWZfc21jLmM6MjU3MzpcdCAgICBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShuZXdfc21jLVx1MDAzZWNvbm4ubGdyLVx1MDAzZXNtY2QpKSB7XG5uZXQvc21jL2FmX3NtYy5jLTI1NzQtXHRcdHJjID0gc21jZF9idWZfYXR0YWNoKG5ld19zbWMpO1xuLS1cbm5ldC9zbWMvc21jX2NkYy5jPTIzNz1pbnQgc21jZF9jZGNfbXNnX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTI1OS1cbm5ldC9zbWMvc21jX2NkYy5jOjI2MDpcdGlmIChzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShjb25uLVx1MDAzZWxnci1cdTAwM2VzbWNkKSlcbm5ldC9zbWMvc21jX2NkYy5jLTI2MS1cdFx0LyogaWYgbG9jYWwgc25kYnVmIHNoYXJlcyB0aGUgc2FtZSBtZW1vcnkgcmVnaW9uIHdpdGhcbi0tXG5uZXQvc21jL3NtY19jZGMuYz0zMzA9c3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtMzcwLVx0XHRpZiAoY29ubi1cdTAwM2VsZ3ItXHUwMDNlaXNfc21jZCBcdTAwMjZcdTAwMjZcbm5ldC9zbWMvc21jX2NkYy5jOjM3MTpcdFx0ICAgIHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KGNvbm4tXHUwMDNlbGdyLVx1MDAzZXNtY2QpIFx1MDAyNlx1MDAyNlxubmV0L3NtYy9zbWNfY2RjLmMtMzcyLVx0XHQgICAgc25kYnVmX2Rlc2MpIHtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MTI1Mz12b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xMjcyLVx0XHRcdHNtY19pc21fdW5zZXRfY29ubihjb25uKTtcbm5ldC9zbWMvc21jX2NvcmUuYzoxMjczOlx0XHRpZiAoc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkobGdyLVx1MDAzZXNtY2QpKVxubmV0L3NtYy9zbWNfY29yZS5jLTEyNzQtXHRcdFx0c21jZF9idWZfZGV0YWNoKGNvbm4pO1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuYz0xNTE1PXN0YXRpYyB2b2lkIHNtY19jb25uX2tpbGwoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLCBib29sIHNvZnQpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTE1MjctXHRcdHNtY19pc21fdW5zZXRfY29ubihjb25uKTtcbm5ldC9zbWMvc21jX2NvcmUuYzoxNTI4Olx0XHRpZiAoc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi1cdTAwM2VsZ3ItXHUwMDNlc21jZCkpXG5uZXQvc21jL3NtY19jb3JlLmMtMTUyOS1cdFx0XHRzbWNkX2J1Zl9kZXRhY2goY29ubik7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTI1NjE9aW50IHNtY19idWZfY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBib29sIGlzX3NtY2QpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTI1NjYtXHRpZiAoaXNfc21jZCBcdTAwMjZcdTAwMjZcbm5ldC9zbWMvc21jX2NvcmUuYzoyNTY3Olx0ICAgIHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KHNtYy1cdTAwM2Vjb25uLmxnci1cdTAwM2VzbWNkKSlcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTY4LVx0XHRnb3RvIGNyZWF0ZV9ybWI7XG4tLVxubmV0L3NtYy9zbWNfaXNtLmM9MjM1PWludCBzbWNfaXNtX3JlZ2lzdGVyX2RtYihzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciwgaW50IGRtYl9sZW4sXG4tLVxubmV0L3NtYy9zbWNfaXNtLmMtMjU5LVxubmV0L3NtYy9zbWNfaXNtLmM6MjYwOmJvb2wgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoc3RydWN0IHNtY2RfZGV2ICpzbWNkKVxubmV0L3NtYy9zbWNfaXNtLmMtMjYxLXtcbi0tXG5uZXQvc21jL3NtY19pc20uaD01MT12b2lkIHNtY19pc21fdW5yZWdpc3Rlcl9kbWIoc3RydWN0IHNtY2RfZGV2ICpkZXYsXG5uZXQvc21jL3NtY19pc20uaC01Mi1cdFx0XHQgICAgc3RydWN0IHNtY19idWZfZGVzYyAqZG1iX2Rlc2MpO1xubmV0L3NtYy9zbWNfaXNtLmg6NTM6Ym9vbCBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShzdHJ1Y3Qgc21jZF9kZXYgKnNtY2QpO1xubmV0L3NtYy9zbWNfaXNtLmgtNTQtaW50IHNtY19pc21fYXR0YWNoX2RtYihzdHJ1Y3Qgc21jZF9kZXYgKmRldiwgdTY0IHRva2VuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMyOQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIHBhdGNoIGhpZ2hsaWdodHMgbW9kaWZpY2F0aW9ucyB0byBzZXZlcmFsIGZ1bmN0aW9uczogYHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uYCwgYHNtY2RfY2RjX3J4X3Rza2xldGAsIGBzbWNfY2RjX3J4X2hhbmRsZXJgLCBgX19zbWNfYnVmX2NyZWF0ZWAsIGFuZCBgc21jZF9idWZfYXR0YWNoYC4gTG9va2luZyBhdCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMsIGl0IGxvb2tzIGxpa2UgYHNtY2RfYnVmX2F0dGFjaGAgYW5kIGBzbWNfYnVmX2NyZWF0ZWAgYXJlIHRoZSBmdW5jdGlvbnMgZXhwb3NlZCBleHRlcm5hbGx5LiBIb2xkIG9uLCBgc21jZF9jZGNfcnhfaW5pdGAgaXMgYWxzbyBub24tc3RhdGljLCB0aG91Z2ggaXQgc2ltcGx5IHNldHMgdXAgYSB0YXNrbGV0IGFuZCBJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgYXR0YWNrIHN1cmZhY2UgdGhlcmUuIFNvLCB0aGUgY29yZSB0YXJnZXRzIGZvciBmdXp6aW5nLCBnaXZlbiB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaCwgYXJlIHJlYWxseSBgc21jZF9idWZfYXR0YWNoYCBhbmQgYHNtY19idWZfY3JlYXRlYC4gSG1tbSwgYnV0IG5vdyB0aGF0IEkgdGhpbmsgYWJvdXQgaXQsIGBzbWNfYnVmX2NyZWF0ZWAgaXMgdGllZCB0byBjb25uZWN0aW9uIHNldHVwLCBzbyBJIHNob3VsZCBzZWUgaG93IGl0IGlzIGNhbGxlZCBhbmQgaWYgSSBjYW4gY29udHJvbCB0aGUgaW5wdXQuIExldCBtZSBzZWUgd2hlcmUgdGhpcyBgc21jX2J1Zl9jcmVhdGVgIGlzIGNhbGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX2J1Zl9jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTEyNjc9c3RhdGljIGludCBzbWNfY29ubmVjdF9yZG1hKHN0cnVjdCBzbWNfc29jayAqc21jLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTMyMi1cdC8qIGNyZWF0ZSBzZW5kIGJ1ZmZlciBhbmQgcm1iICovXG5uZXQvc21jL2FmX3NtYy5jOjEzMjM6XHRpZiAoc21jX2J1Zl9jcmVhdGUoc21jLCBmYWxzZSkpIHtcbm5ldC9zbWMvYWZfc21jLmMtMTMyNC1cdFx0cmVhc29uX2NvZGUgPSBTTUNfQ0xDX0RFQ0xfTUVNO1xuLS1cbm5ldC9zbWMvYWZfc21jLmM9MTQxNj1zdGF0aWMgaW50IHNtY19jb25uZWN0X2lzbShzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE0NTYtXHQvKiBDcmVhdGUgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXJzICovXG5uZXQvc21jL2FmX3NtYy5jOjE0NTc6XHRyYyA9IHNtY19idWZfY3JlYXRlKHNtYywgdHJ1ZSk7XG5uZXQvc21jL2FmX3NtYy5jLTE0NTgtXHRpZiAocmMpIHtcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTIwNzQ9c3RhdGljIGludCBzbWNfbGlzdGVuX3JkbWFfaW5pdChzdHJ1Y3Qgc21jX3NvY2sgKm5ld19zbWMsXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0yMDg0LVx0LyogY3JlYXRlIHNlbmQgYnVmZmVyIGFuZCBybWIgKi9cbm5ldC9zbWMvYWZfc21jLmM6MjA4NTpcdGlmIChzbWNfYnVmX2NyZWF0ZShuZXdfc21jLCBmYWxzZSkpIHtcbm5ldC9zbWMvYWZfc21jLmMtMjA4Ni1cdFx0c21jX2Nvbm5fYWJvcnQobmV3X3NtYywgaW5pLVx1MDAzZWZpcnN0X2NvbnRhY3RfbG9jYWwpO1xuLS1cbm5ldC9zbWMvYWZfc21jLmM9MjA5ND1zdGF0aWMgaW50IHNtY19saXN0ZW5faXNtX2luaXQoc3RydWN0IHNtY19zb2NrICpuZXdfc21jLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjEwMy1cdC8qIENyZWF0ZSBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlcnMgKi9cbm5ldC9zbWMvYWZfc21jLmM6MjEwNDpcdHJjID0gc21jX2J1Zl9jcmVhdGUobmV3X3NtYywgdHJ1ZSk7XG5uZXQvc21jL2FmX3NtYy5jLTIxMDUtXHRpZiAocmMpIHtcbi0tXG5uZXQvc21jL3NtY19jZGMuYz0zMzA9c3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtMzM4LVx0LyogQWNxdWlyZSB0aGUgc2VuZCBidWZmZXIgb25jZSwgcGFpcmluZyB3aXRoIHRoZSBzbXBfc3RvcmVfcmVsZWFzZSgpIGluXG5uZXQvc21jL3NtY19jZGMuYzozMzk6XHQgKiBfX3NtY19idWZfY3JlYXRlKCkvc21jZF9idWZfYXR0YWNoKCkuICBPbiB0aGUgU01DLUQgRE1CLW5vY29weSBwYXRoXG5uZXQvc21jL3NtY19jZGMuYy0zNDAtXHQgKiB0aGUgZ2hvc3Qgc25kYnVmX2Rlc2MgaXMgYXR0YWNoZWQgb25seSBhZnRlciB0aGUgY29ubmVjdGlvbiBpcyBhbHJlYWR5XG4tLVxubmV0L3NtYy9zbWNfY2RjLmM9NDYyPXN0YXRpYyB2b2lkIHNtY2RfY2RjX3J4X3Rza2xldChzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtNDcxLVx0XHRyZXR1cm47XG5uZXQvc21jL3NtY19jZGMuYzo0NzI6XHQvKiBQYWlyIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBfX3NtY19idWZfY3JlYXRlKCk6IHRoZSBjb25uZWN0aW9uXG5uZXQvc21jL3NtY19jZGMuYy00NzMtXHQgKiBpcyBwdWJsaXNoZWQgYmVmb3JlIGl0cyBSTUIgaXMgYWxsb2NhdGVkLCBzbyBiYWlsIHdoaWxlIHJtYl9kZXNjIGlzXG4tLVxubmV0L3NtYy9zbWNfY2RjLmM9NDk3PXN0YXRpYyB2b2lkIHNtY19jZGNfcnhfaGFuZGxlcihzdHJ1Y3QgaWJfd2MgKndjLCB2b2lkICpidWYpXG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtNTEzLVx0Y29ubiA9IHNtY19sZ3JfZmluZF9jb25uKG50b2hsKGNkYy1cdTAwM2V0b2tlbiksIGxncik7XG5uZXQvc21jL3NtY19jZGMuYzo1MTQ6XHQvKiBQYWlyIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBfX3NtY19idWZfY3JlYXRlKCk6IGJhaWwgd2hpbGUgdGhlXG5uZXQvc21jL3NtY19jZGMuYy01MTUtXHQgKiBSTUIgaXMgdW5zZXQgKHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKCkgZGVyZWZlcmVuY2VzIGl0KSB0byBhdm9pZCBhXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTIzOTA9c3RhdGljIHN0cnVjdCBzbWNfYnVmX2Rlc2MgKnNtY2RfbmV3X2J1Zl9jcmVhdGUoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTI0MjUtXG5uZXQvc21jL3NtY19jb3JlLmM6MjQyNjpzdGF0aWMgaW50IF9fc21jX2J1Zl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIGJvb2wgaXNfc21jZCwgYm9vbCBpc19ybWIpXG5uZXQvc21jL3NtY19jb3JlLmMtMjQyNy17XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTI1Mzk9dm9pZCBzbWNfcm1iX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTI1NjAtICovXG5uZXQvc21jL3NtY19jb3JlLmM6MjU2MTppbnQgc21jX2J1Zl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIGJvb2wgaXNfc21jZClcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTYyLXtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMjU2OS1cbm5ldC9zbWMvc21jX2NvcmUuYzoyNTcwOlx0cmMgPSBfX3NtY19idWZfY3JlYXRlKHNtYywgaXNfc21jZCwgZmFsc2UpO1xubmV0L3NtYy9zbWNfY29yZS5jLTI1NzEtXHRpZiAocmMpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTI1NzUtXHQvKiBjcmVhdGUgcm1iICovXG5uZXQvc21jL3NtY19jb3JlLmM6MjU3NjpcdHJjID0gX19zbWNfYnVmX2NyZWF0ZShzbWMsIGlzX3NtY2QsIHRydWUpO1xubmV0L3NtYy9zbWNfY29yZS5jLTI1NzctXHRpZiAocmMgXHUwMDI2XHUwMDI2IHNtYy1cdTAwM2Vjb25uLnNuZGJ1Zl9kZXNjKSB7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTI1ODg9aW50IHNtY2RfYnVmX2F0dGFjaChzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMjYxNi1cdCAqIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UgKHNtY19pc21fc2V0X2Nvbm4oKVxubmV0L3NtYy9zbWNfY29yZS5jOjI2MTc6XHQgKiByYW4gaW4gX19zbWNfYnVmX2NyZWF0ZSgpKSwgc28gdGhlIENEQyByZWNlaXZlIHRhc2tsZXQgbXVzdCBvYnNlcnZlXG5uZXQvc21jL3NtY19jb3JlLmMtMjYxOC1cdCAqIHRoZSBmdWxseSBpbml0aWFsaXNlZCBnaG9zdCBidWZmZXIgb25jZSBpdCBzZWVzIGEgbm9uLU5VTExcbi0tXG5uZXQvc21jL3NtY19jb3JlLmg9NTgyPXZvaWQgc21jX3NtY3JfdGVybWluYXRlX2FsbChzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYpO1xubmV0L3NtYy9zbWNfY29yZS5oOjU4MzppbnQgc21jX2J1Zl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIGJvb2wgaXNfc21jZCk7XG5uZXQvc21jL3NtY19jb3JlLmgtNTg0LWludCBzbWNkX2J1Zl9hdHRhY2goc3RydWN0IHNtY19zb2NrICpzbWMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ3MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDcxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogU01DIFJlY2VpdmUgUGF0aCBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgc21jX2J1Zl9jcmVhdGVgIGFuZCBgc21jZF9idWZfYXR0YWNoYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24uIFRoZXkgYXJlIHRoZSBjb3JlIG9mIGJ1ZmZlciBtYW5hZ2VtZW50IGluIHRoaXMgYXJlYSwgd2hpY2ggbWFrZXMgdGhlbSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBBZnRlciBhIGxpdHRsZSBtb3JlIGRpZ2dpbmcsIEkgcmVhbGl6ZSB0aGF0IGBzbWNkX2J1Zl9hdHRhY2hgIGlzIGNhbGxlZCB3aXRoaW4gY29ubmVjdGlvbiBzZXR1cCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgc21jX2Nvbm5lY3RfaXNtYCBhbmQgYHNtY19saXN0ZW5fd29ya2AuIFRoZXNlIGFyZSByZWxhdGVkIHRvIGNvbm5lY3Rpb24gaW5pdGlhbGl6YXRpb24sIGJ1dCB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBgc21jX2NkY19tc2dfcmVjdl9hY3Rpb25gIG1pZ2h0IGJlIHRyaWdnZXJlZCBiZWZvcmUga2V5IGJ1ZmZlcnMgKGBjb25uLSZndDtzbmRidWZfZGVzY2Agb3IgYGNvbm4tJmd0O3JtYl9kZXNjYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBUaGF0JiMzOTtzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBjb2RlIGFuZCBmdXp6aW5nIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBjb3VsZCBleHBvc2UgdGhpcyBraW5kIG9mIGJ1Zy4KClNpbmNlIHdlIGFyZSBmb2N1c2VkIG9uIHRoZSByYWNlIGNvbmRpdGlvbiwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBpbmNsdWRlIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZSByZWNlaXZlIHBhdGguIGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmAgaXMgc3RhdGljLCBidXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBzbWNfY2RjX21zZ19yZWN2YCwgd2hpY2ggaXMgYWxzbyBzdGF0aWMuIFRoZXNlIGFyZSwgaW4gdHVybiwgY2FsbGVkIGJ5IGBzbWNkX2NkY19yeF90c2tsZXRgIGFuZCBgc21jX2NkY19yeF9oYW5kbGVyYC4gSSBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGFuZCBpbmNsdWRlIHRoZXNlLiBgc21jZF9jZGNfcnhfdHNrbGV0YCBpcyBhIHRhc2tsZXQgaGFuZGxlciwgYW5kIGBzbWNfY2RjX3J4X2hhbmRsZXJgIGlzIGEgd29ya3F1ZXVlL3Rhc2tsZXQgaGFuZGxlci4gVGhlIHJlY2VpdmUgcGF0aCBpcyB1bHRpbWF0ZWx5IHRyaWdnZXJlZCBieSBlaXRoZXIgdGhlIElCIGRldmljZSBvciB0aGUgSVNNIGRldmljZS4gU2luY2UgYHNtY19idWZfY3JlYXRlYCBhbmQgYHNtY2RfYnVmX2F0dGFjaGAgYXJlIGZ1bmRhbWVudGFsIHRvIHRoZSByZWNlaXZlIHByb2Nlc3MsIEkgYmVsaWV2ZSBmdXp6aW5nIHRoZXNlIHNob3VsZCBleHBvc2UgdGhlIHZ1bG5lcmFiaWxpdHkuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBsb29rIGZvciBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYHNtY19jZGMuY2AgdGhhdCBtaWdodCBiZSByZWxldmFudC4gTGV0JiMzOTtzIHNlZS4uLkkmIzM5O3ZlIGdvdCBgc21jX2NkY19nZXRfZnJlZV9zbG90YCwgYHNtY19jZGNfbXNnX3NlbmRgLCBgc21jcl9jZGNfbXNnX3NlbmRfdmFsaWRhdGlvbmAsIGBzbWNfY2RjX2dldF9zbG90X2FuZF9tc2dfc2VuZGAsIGBzbWNfY2RjX3dhaXRfcGVuZF90eF93cmAsIGBzbWNkX2NkY19tc2dfc2VuZGAsIGFuZCBgc21jZF9jZGNfcnhfaW5pdGAuIGBzbWNfYnVmX2NyZWF0ZWAgYW5kIGBzbWNkX2J1Zl9hdHRhY2hgIHdpbGwgZ28gaW50byBgRm9jdXNTeW1ib2xzYC4gVGhlbiwgYHNtY2RfY2RjX21zZ19zZW5kYCBhbmQgYHNtY19jZGNfbXNnX3NlbmRgIGxvb2sgcmVsZXZhbnQgc2luY2UgdGhleSBhbHNvIGludGVyYWN0IHdpdGggdGhlIGJ1ZmZlcnMsIHNvIHRob3NlIHdpbGwgYmUgYWRkZWQgdG9vLgoKRmluYWxseSwgSSBuZWVkIHRvIHZlcmlmeSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMuIEkmIzM5O3ZlIGdvdCBgU01DYCwgYElORklOSUJBTkRgLCBgRElCU2AsIGFuZCBgRElCU19MT2AuIEkgcmVtZW1iZXIgc2VlaW5nIHNvbWV0aGluZyBhYm91dCBgZHJpdmVycy9kaWJzL0tjb25maWdgIHdoZW4gSSB3YXMgbG9va2luZyB0aHJvdWdoIHRoZSBncmVwcGVyIG91dHB1dCwgc28gdGhhdCBpcyBjb3JyZWN0LiBJIGZvdW5kIGBESUJTYCBpbiB0aGUgYEtjb25maWdgIGZpbGUsIHNvIHRoYXQgY29uZmlybXMgaXQuIFRoZW4sIEkgcmVtZW1iZXJlZCB0aGF0IGBJTkVUYCBpcyBhbHNvIHJlcXVpcmVkIGZvciBgU01DYC4gU28sIHRoZSBuZWNlc3NhcnkgY29uZmlncyBhcmUgYFNNQ2AsIGBJTkZJTklCQU5EYCwgYERJQlNgLCBgRElCU19MT2AsIGFuZCBgSU5FVGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAwOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBESUJTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmRyaXZlcnMvZGlicy9LY29uZmlnOjI6Y29uZmlnIERJQlNcbmRyaXZlcnMvZGlicy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvZGlicy9LY29uZmlnLTEzLVxuZHJpdmVycy9kaWJzL0tjb25maWc6MTQ6Y29uZmlnIERJQlNfTE9cbmRyaXZlcnMvZGlicy9LY29uZmlnLTE1LVx0Ym9vbCBcJiMzNDtJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDA6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwNDUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBc3Nlc3NpbmcgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIEkgc2VlIHRoZSBwaWVjZXMgYXJlIGluIHBsYWNlLCB0aGUgY29yZSBjb21wb25lbnQgaXMgaW5kZWVkIHByZXNlbnQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRlbHZlIGRlZXBlciBpbnRvIGl0cyBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBtYWtlIHN1cmUgYFNNQ2AgaXNuJiMzOTt0IHJlbHlpbmcgb24gYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGNyZWF0ZSBwcm9ibGVtcyBkb3duIHRoZSBsaW5lLCBvciBpbnRyb2R1Y2UgYSBjYXNjYWRlIG9mIGlzc3VlcyBpZiBvbmUgY29tcG9uZW50IGZhaWxzLiBHb3R0YSBiZSB0aG9yb3VnaC4gVGltZSB0byBjaGVjayB0aGUgZGVwZW5kZW5jeSB0cmVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZz0yPWNvbmZpZyBTTUNcbm5ldC9zbWMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbm5ldC9zbWMvS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBESUJTXG5uZXQvc21jL0tjb25maWctNS1cdGhlbHBcbi0tXG5uZXQvc21jL0tjb25maWc9MTQ9Y29uZmlnIFNNQ19ESUFHXG5uZXQvc21jL0tjb25maWctMTUtXHR0cmlzdGF0ZSBcJiMzNDtTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xubmV0L3NtYy9LY29uZmlnOjE2Olx0ZGVwZW5kcyBvbiBTTUNcbm5ldC9zbWMvS2NvbmZpZy0xNy1cdGhlbHBcbi0tXG5uZXQvc21jL0tjb25maWc9MjM9Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxubmV0L3NtYy9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XCYjMzQ7XG5uZXQvc21jL0tjb25maWc6MjU6XHRkZXBlbmRzIG9uIFNNQyBcdTAwMjZcdTAwMjYgQlBGX0pJVCBcdTAwMjZcdTAwMjYgQlBGX1NZU0NBTExcbm5ldC9zbWMvS2NvbmZpZy0yNi1cdGRlZmF1bHQgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ0MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgY29yZSBkZXBlbmRlbmNpZXMgaGVyZSwgYW5kIGl0IGxvb2tzIGxpa2UgYElORVRgLCBgSU5GSU5JQkFORGAsIGFuZCBgRElCU2AgYXJlIHRoZSBrZXkgb25lcyBJIG5lZWQgdG8gYWRkcmVzcy4gVG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgZXhwbGljaXRseSBlbmFibGVkIGFuZCB0aGF0IEkmIzM5O20gY292ZXJpbmcgYWxsIGJhc2VzLCBJJiMzOTttIGdvaW5nIHRvIGFkZCBgU01DYCwgYElORklOSUJBTkRgLCBgRElCU2AsIGFuZCBgRElCU19MT2AgdG8gYEVuYWJsZUNvbmZpZ3NgLiBXaGlsZSBgSU5FVGAgaXMgZ2VuZXJhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBtb3N0IHNldHVwcywgSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIGl0IGp1c3QgZm9yIGNsYXJpdHkgYW5kIHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2guCgpOZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgYElORklOSUJBTkRgIGl0c2VsZiBoYXMgYW55IGZ1cnRoZXIgZGVwZW5kZW5jaWVzIHRoYXQgSSBzaG91bGQgYWxzbyBiZSBhd2FyZSBvZi4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgbmVlZHMgZW5hYmxpbmcgdG8gZ2V0IHRoYXQgcnVubmluZyBzbW9vdGhseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORklOSUJBTkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzoyOm1lbnVjb25maWcgSU5GSU5JQkFORFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTE2PWlmIElORklOSUJBTkRcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTE3LVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6MTg6Y29uZmlnIElORklOSUJBTkRfVVNFUl9NQURcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTE5LVx0dHJpc3RhdGUgXCYjMzQ7SW5maW5pQmFuZCB1c2Vyc3BhY2UgTUFEIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0yNy1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjI4OmNvbmZpZyBJTkZJTklCQU5EX1VTRVJfQUNDRVNTXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgdXNlcnNwYWNlIGFjY2VzcyAodmVyYnMgYW5kIENNKVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTM5LVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NDA6Y29uZmlnIElORklOSUJBTkRfVVNFUl9BQ0NFU1NfQ09SRVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDEtXHRib29sXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDMtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo0NDpjb25maWcgSU5GSU5JQkFORF9VU0VSX01FTVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDUtXHRib29sXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNTAtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo1MTpjb25maWcgSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy01Mi1cdGJvb2wgXCYjMzQ7SW5maW5pQmFuZCBvbi1kZW1hbmQgcGFnaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy02My1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjY0OmNvbmZpZyBJTkZJTklCQU5EX0FERFJfVFJBTlNcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTY1LVx0Ym9vbCBcJiMzNDtSRE1BL0NNXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNzEtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo3Mjpjb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TX0NPTkZJR0ZTXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03My1cdGJvb2xcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy04MC1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjgxOmNvbmZpZyBJTkZJTklCQU5EX1ZJUlRfRE1BXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy04Mi1cdGRlZl9ib29sICFISUdITUVNXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JuZ19yZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm5nX3JlL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9CTkdfUkVcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibmdfcmUvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gTmV4dCBnZW5lcmF0aW9uIFJvQ0UgSENBIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfQk5YVF9SRVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gTmV0eHRyZW1lIEhDQSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfQ1hHQjRcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtDaGVsc2lvIFQ0L1Q1IFJETUEgRHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9LY29uZmlnLTYtXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL0tjb25maWc6Nzpjb25maWcgSU5GSU5JQkFORF9FRkFcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvS2NvbmZpZy04LVx0dHJpc3RhdGUgXCYjMzQ7QW1hem9uIEVsYXN0aWMgRmFicmljIEFkYXB0ZXIgKEVGQSkgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0VSRE1BXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QWxpYmFiYSBFbGFzdGljIFJETUEgQWRhcHRlciAoRVJETUEpIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSEZJMVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7Q29ybmVsaXMgT1BYIEdlbjEgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSE5TX0hJUDA4XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0hpc2lsaWNvbiBIaXAwOCBGYW1pbHkgUm9DRSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL0tjb25maWctMy1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9LY29uZmlnOjQ6Y29uZmlnIElORklOSUJBTkRfSU9OSUNcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9LY29uZmlnLTUtXHR0cmlzdGF0ZSBcJiMzNDtBTUQgUGVuc2FuZG8gRFNDIFJETUEvUm9DRSBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSVJETUFcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbChSKSBFdGhlcm5ldCBQcm90b2NvbCBEcml2ZXIgZm9yIFJETUFcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9NVEhDQVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01lbGxhbm94IEhDQSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWctOS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnOjEwOmNvbmZpZyBJTkZJTklCQU5EX01USENBX0RFQlVHXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0xMS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfT0NSRE1BXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0VtdWxleCBPbmUgQ29ubmVjdCBIQ0Egc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9xZWRyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9xZWRyL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9RRURSXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvcWVkci9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtRTG9naWMgUm9DRSBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9VU05JQ1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1ZlcmJzIHN1cHBvcnQgZm9yIENpc2NvIFZJQ1wmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody92bXdfcHZyZG1hL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody92bXdfcHZyZG1hL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9WTVdBUkVfUFZSRE1BXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdm13X3B2cmRtYS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtWTXdhcmUgUGFyYXZpcnR1YWxpemVkIFJETUEgRHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3JkbWF2dC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcmRtYXZ0L0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9SRE1BVlRcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yZG1hdnQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7UkRNQSB2ZXJicyB0cmFuc3BvcnQgbGlicmFyeVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSVBPSUJcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SVAtb3Zlci1JbmZpbmlCYW5kXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTExLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjEyOmNvbmZpZyBJTkZJTklCQU5EX0lQT0lCX0NNXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMTMtXHRib29sIFwmIzM0O0lQLW92ZXItSW5maW5pQmFuZCBDb25uZWN0ZWQgTW9kZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTI2LVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjI3OmNvbmZpZyBJTkZJTklCQU5EX0lQT0lCX0RFQlVHXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMjgtXHRib29sIFwmIzM0O0lQLW92ZXItSW5maW5pQmFuZCBkZWJ1Z2dpbmdcJiMzNDsgaWYgRVhQRVJUXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTQxLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjQyOmNvbmZpZyBJTkZJTklCQU5EX0lQT0lCX0RFQlVHX0RBVEFcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy00My1cdGJvb2wgXCYjMzQ7SVAtb3Zlci1JbmZpbmlCYW5kIGRhdGEgcGF0aCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JU0VSXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7aVNDU0kgRXh0ZW5zaW9ucyBmb3IgUkRNQSAoaVNFUilcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlcnQvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0lTRVJUXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O2lTQ1NJIEV4dGVuc2lvbnMgZm9yIFJETUEgKGlTRVIpIHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctMi1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnOjM6Y29uZmlnIElORklOSUJBTkRfUlRSU1xuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNC1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNi1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnOjc6Y29uZmlnIElORklOSUJBTkRfUlRSU19DTElFTlRcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTgtXHR0cmlzdGF0ZSBcJiMzNDtSVFJTIGNsaWVudCBtb2R1bGVcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy0xNy1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnOjE4OmNvbmZpZyBJTkZJTklCQU5EX1JUUlNfU0VSVkVSXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy0xOS1cdHRyaXN0YXRlIFwmIzM0O1JUUlMgc2VydmVyIG1vZHVsZVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9TUlBcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgU0NTSSBSRE1BIFByb3RvY29sXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnB0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwdC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfU1JQVFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnB0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgU0NTSSBSRE1BIFByb3RvY29sIHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjc1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gRGVjaXNpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gcHJvY2Vzcy4gSSBzZWUgYElORklOSUJBTkRgIOKAkyBhaCwgdGhhdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBgbWVudWNvbmZpZ2Agb3B0aW9uLiBMZXQmIzM5O3MgYWRkIHRoYXQgZGlyZWN0bHkgdG8gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LiBObyBuZWVkIHRvIG92ZXJ0aGluayBpdC4KCk5leHQsIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgYElORVRgLiBJdCYjMzk7cyBhIHN0YW5kYXJkIGNvbmZpZywgc28gSSYjMzk7bGwgaW5jbHVkZSB0aGF0IGFzIHdlbGwuIEZpbmUuCgpUaGVyZWZvcmUsIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCwgYXMgaXQgY3VycmVudGx5IHN0YW5kcywgaW5jbHVkZXMgYFNNQ2AsIGBJTkZJTklCQU5EYCwgYERJQlNgLCBgRElCU19MT2AsIGFuZCBgSU5FVGAuCgpOb3csIHRpbWUgdG8gZG91YmxlLWNoZWNrIHRoZSBgRm9jdXNTeW1ib2xzYC4gTGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgcmlnaHQgb25lcy4gSSBoYXZlIGBzbWNfYnVmX2NyZWF0ZWAsIGBzbWNkX2J1Zl9hdHRhY2hgLCBgc21jZF9jZGNfbXNnX3NlbmRgLCBhbmQgYHNtY19jZGNfbXNnX3NlbmRgLi4uIAoKV2FpdCwgaG9sZCBvbiBhIHNlY29uZC4gSXQgbG9va2VkIGZvciBhIG1vbWVudCBsaWtlIGBzbWNkX2NkY19tc2dfc2VuZGAgbWlnaHQgYmUgY2FsbGVkIGZyb20gd2l0aGluIGBzbWNfY2RjX21zZ19zZW5kYCwgd2hpY2ggd291bGQgc2ltcGxpZnkgdGhpcy4gQnV0IHRoYXQmIzM5O3Mgbm90IHJpZ2h0LiBUaGV5JiMzOTtyZSBkaXN0aW5jdC4gT2theSwgbm8gY29uZnVzaW9uIHRoZXJlLiBOb3cgSSBuZWVkIHRvIGNoZWNrIGBzbWNkX2NkY19tc2dfc2VuZGAgdG8gY2xhcmlmeSBob3cgdGhhdCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jZF9jZGNfbXNnX3NlbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jZGMuYz0yMDk9aW50IHNtY19jZGNfZ2V0X3Nsb3RfYW5kX21zZ19zZW5kKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbi0tXG5uZXQvc21jL3NtY19jZGMuYy0yMTgtXHRcdHNwaW5fbG9ja19iaChcdTAwMjZjb25uLVx1MDAzZXNlbmRfbG9jayk7XG5uZXQvc21jL3NtY19jZGMuYzoyMTk6XHRcdHJjID0gc21jZF9jZGNfbXNnX3NlbmQoY29ubik7XG5uZXQvc21jL3NtY19jZGMuYy0yMjAtXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNvbm4tXHUwMDNlc2VuZF9sb2NrKTtcbi0tXG5uZXQvc21jL3NtY19jZGMuYz0yMjg9dm9pZCBzbWNfY2RjX3dhaXRfcGVuZF90eF93cihzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtMjM2LSAqL1xubmV0L3NtYy9zbWNfY2RjLmM6MjM3OmludCBzbWNkX2NkY19tc2dfc2VuZChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG5uZXQvc21jL3NtY19jZGMuYy0yMzgte1xuLS1cbm5ldC9zbWMvc21jX2NkYy5oPTI5Nz1pbnQgc21jX2NkY19nZXRfc2xvdF9hbmRfbXNnX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcbm5ldC9zbWMvc21jX2NkYy5oOjI5ODppbnQgc21jZF9jZGNfbXNnX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcbm5ldC9zbWMvc21jX2NkYy5oLTI5OS1pbnQgc21jcl9jZGNfbXNnX3NlbmRfdmFsaWRhdGlvbihzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sXG4tLVxubmV0L3NtYy9zbWNfdHguYz02MDg9c3RhdGljIGludCBzbWNkX3R4X3NuZGJ1Zl9ub25lbXB0eShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG4tLVxubmV0L3NtYy9zbWNfdHguYy02MTYtXHRpZiAoIXJjKVxubmV0L3NtYy9zbWNfdHguYzo2MTc6XHRcdHJjID0gc21jZF9jZGNfbXNnX3NlbmQoY29ubik7XG5uZXQvc21jL3NtY190eC5jLTYxOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDA6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2NTAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIENEQyBNZXNzYWdlIFNlbmRpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IHRoZXNlIENEQyBtZXNzYWdlcyBhcmUgYmVpbmcgaGFuZGxlZC4gTXkgaW5pdGlhbCBmb2N1cyBoYXMgbGFuZGVkIG9uIGBzbWNkX2NkY19tc2dfc2VuZGAuIFRoYXQmIzM5O3MgdGhlIG9uZSB0aGF0IHNlZW1zIHRvIGJlIGluIHBsYXkgcmlnaHQgbm93LiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyB0aGF0ICp0aGUqIG9ubHkgb25lPyBJdCBqdXN0IHRyaWdnZXJlZCBhIHRob3VnaHQg4oCTIEkgbmVlZCB0byBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0IHdpdGggYHNtY19jZGNfbXNnX3NlbmRgLiBJIHdvbmRlciB3aGF0IHRoZSBkaWZmZXJlbmNlIGlzLCBpZiBhbnk/IEFyZSB0aGVzZSB0d28gZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQsIG9yIGlzIHRoZXJlIGEgc3VidGxlLCBvciBtYXliZSBldmVuIHNpZ25pZmljYW50LCBkaXN0aW5jdGlvbiBpbiB0aGVpciBpbXBsZW1lbnRhdGlvbiBvciB1c2UgY2FzZXM/IFRoaXMgd2FycmFudHMgYSBkZWVwZXIgbG9vazsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgaGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBjcml0aWNhbCBieSBhc3N1bWluZyB0aGUgdXNlIG9mIG9uZSBvdmVyIHRoZSBvdGhlci4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfY2RjX21zZ19zZW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWMuaD0xOTU9c3RydWN0IHNtY19jb25uZWN0aW9uIHtcbi0tXG5uZXQvc21jL3NtYy5oLTI0MC1cdHdhaXRfcXVldWVfaGVhZF90XHRjZGNfcGVuZF90eF93cTsgLyogd2FrZXVwIG9uIG5vIGNkY19wZW5kX3R4X3dyKi9cbm5ldC9zbWMvc21jLmg6MjQxOlx0c3RydWN0IGRlbGF5ZWRfd29ya1x0dHhfd29yaztcdC8qIHJldHJ5IG9mIHNtY19jZGNfbXNnX3NlbmQgKi9cbm5ldC9zbWMvc21jLmgtMjQyLVx0dTMyXHRcdFx0dHhfb2ZmO1x0XHQvKiBiYXNlIG9mZnNldCBpbiBwZWVyIHJtYiAqL1xuLS1cbm5ldC9zbWMvc21jX2NkYy5jPTk0PXN0YXRpYyBpbmxpbmUgdm9pZCBzbWNfY2RjX2FkZF9wZW5kaW5nX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTExMS1cbm5ldC9zbWMvc21jX2NkYy5jOjExMjppbnQgc21jX2NkY19tc2dfc2VuZChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sXG5uZXQvc21jL3NtY19jZGMuYy0xMTMtXHRcdCAgICAgc3RydWN0IHNtY193cl9idWYgKndyX2J1Zixcbi0tXG5uZXQvc21jL3NtY19jZGMuYz0xNzQ9c3RhdGljIGludCBzbWNyX2NkY19nZXRfc2xvdF9hbmRfbXNnX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTIwMS1cdH1cbm5ldC9zbWMvc21jX2NkYy5jOjIwMjpcdHJjID0gc21jX2NkY19tc2dfc2VuZChjb25uLCB3cl9idWYsIHBlbmQpO1xubmV0L3NtYy9zbWNfY2RjLmMtMjAzLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y29ubi1cdTAwM2VzZW5kX2xvY2spO1xuLS1cbm5ldC9zbWMvc21jX2NkYy5oPTI5ND12b2lkIHNtY19jZGNfd2FpdF9wZW5kX3R4X3dyKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubik7XG5uZXQvc21jL3NtY19jZGMuaDoyOTU6aW50IHNtY19jZGNfbXNnX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3Qgc21jX3dyX2J1ZiAqd3JfYnVmLFxubmV0L3NtYy9zbWNfY2RjLmgtMjk2LVx0XHQgICAgIHN0cnVjdCBzbWNfY2RjX3R4X3BlbmQgKnBlbmQpO1xuLS1cbm5ldC9zbWMvc21jX3R4LmM9NTUwPXN0YXRpYyBpbnQgc21jcl90eF9zbmRidWZfbm9uZW1wdHkoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9zbWMvc21jX3R4LmMtNTk1LVxubmV0L3NtYy9zbWNfdHguYzo1OTY6XHRyYyA9IHNtY19jZGNfbXNnX3NlbmQoY29ubiwgd3JfYnVmLCBwZW5kKTtcbm5ldC9zbWMvc21jX3R4LmMtNTk3LVx0aWYgKCFyYyBcdTAwMjZcdTAwMjYgcGZsYWdzLVx1MDAzZXVyZ19kYXRhX3ByZXNlbnQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDA6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ1NTQKCQkJCQkJCW91dHB1dDogMTU3CgkJCQkJCQl0aG91Z2h0czogNDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTTUMtRCBETUItbm9jb3B5IFBhdGgqKgoKT2theSwgSSYjMzk7dmUgZ290IHRoZSBjb250ZXh0IGhlcmUuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gdGhlIFNNQy1EIERNQi1ub2NvcHkgY29ubmVjdGlvbiBzZXR1cC4gQ2xlYXJseSwgYm90aCBgc21jX2J1Zl9jcmVhdGVgIGFuZCBgc21jZF9idWZfYXR0YWNoYCBhcmUgY3JpdGljYWwgZnVuY3Rpb25zIGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UsIGFsb25nIHdpdGggYHNtY2RfY2RjX21zZ19zZW5kYCBhbmQgYHNtY19jZGNfbXNnX3NlbmRgIGFyZSBpbmNsdWRlZCBpbiBteSBmdXp6aW5nIHRhcmdldCBsaXN0LCBzbyBJJiMzOTtsbCBhZGQgdGhlbSB0byB0aGUgYEZvY3VzU3ltYm9sc2AuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIG1vZGlmaWNhdGlvbnMgdGhhdCBhcmVuJiMzOTt0IHN0YXRpYy4gR29vZCwgYHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uYCwgYHNtY19jZGNfcnhfaGFuZGxlcmAsIGBzbWNkX2NkY19yeF90c2tsZXRgLCBhbmQgYF9fc21jX2J1Zl9jcmVhdGVgIGFyZSBhbGwgc3RhdGljLCBzbyB0aGUgZm91ciBJIGlkZW50aWZpZWQgYXJlIHRoZSBvbmx5IG9uZXMgSSBuZWVkLgoKTmV4dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgRElCU2AgYW5kIGBESUJTX0xPYCBhcmUgZXNzZW50aWFsIHRvIHJlcHJvZHVjZSB0aGUgaXNzdWUuIEl0IGxvb2tzIGxpa2UgYERJQlNgIHByb3ZpZGVzIHRoZSBJU00gZGV2aWNlIGFic3RyYWN0aW9uLiBDb25zaWRlcmluZyBTTUMtRCByZXF1aXJlcyBJU00gYW5kIERNQi1ub2NvcHkgY29ubmVjdGlvbiBzZXR1cCwgdGhhdCBwYXRoIGlzIGNsZWFybHkgZ29pbmcgdG8gYmUgdHJpZ2dlcmVkLiBTbywgeWVzLCB0aGV5IGFyZSBpbmRlZWQgcmVxdWlyZWQuIGBESUJTX0xPYCBlbmFibGVzIHRoZSBsb29wYmFjayBkZXZpY2UsIHNvIGl0JiMzOTtzIGEgY3JpdGljYWwgY29tcG9uZW50LgoKV2l0aCB0aGF0IHVuZGVyc3RhbmRpbmcsIEkgY2FuIG5vdyBmb3JtdWxhdGUgYSBjb25jaXNlIHJlc3BvbnNlIGZvciBteSByZXN1bHRzLgoKSGVyZSYjMzk7cyBteSBjb25jbHVzaW9uOgoKKiAgICoqV29ydGhGdXp6aW5nKio6IHRydWUKKiAgICoqRm9jdXNTeW1ib2xzKio6IGBbJiMzNDtzbWNfYnVmX2NyZWF0ZSYjMzQ7LCAmIzM0O3NtY2RfYnVmX2F0dGFjaCYjMzQ7LCAmIzM0O3NtY2RfY2RjX21zZ19zZW5kJiMzNDssICYjMzQ7c21jX2NkY19tc2dfc2VuZCYjMzQ7XWAKKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgWyYjMzQ7U01DJiMzNDssICYjMzQ7SU5GSU5JQkFORCYjMzQ7LCAmIzM0O0RJQlMmIzM0OywgJiMzNDtESUJTX0xPJiMzNDssICYjMzQ7SU5FVCYjMzQ7XWAKKiAgICoqUmVhc29uaW5nKio6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQy1EIERNQi1ub2NvcHkgY29ubmVjdGlvbiBzZXR1cCBwYXRoIHdoZXJlIGEgY29uY3VycmVudCBDREMgcmVjZWl2ZSBoYW5kbGVyIGNvdWxkIG9ic2VydmUgYW4gdW5pbml0aWFsaXplZCBzZW5kIG9yIHJlY2VpdmUgYnVmZmVyLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBjb25uZWN0aW9uIHNldHVwIGFuZCBidWZmZXIgY3JlYXRpb24vYXR0YWNobWVudCwgYXMgd2VsbCBhcyBDREMgbWVzc2FnZSBzZW5kaW5nIHRvIHRyaWdnZXIgdGhlIHJlY2VpdmUgcGF0aC4mIzM0OwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7LAogICAgJiMzNDtESUJTX0xPJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfYnVmX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtzbWNkX2J1Zl9hdHRhY2gmIzM0OywKICAgICYjMzQ7c21jZF9jZGNfbXNnX3NlbmQmIzM0OywKICAgICYjMzQ7c21jX2NkY19tc2dfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBTTUMtRCBETUItbm9jb3B5IGNvbm5lY3Rpb24gc2V0dXAgcGF0aCB3aGVyZSBhIGNvbmN1cnJlbnQgQ0RDIHJlY2VpdmUgaGFuZGxlciBjb3VsZCBvYnNlcnZlIGFuIHVuaW5pdGlhbGl6ZWQgc2VuZCBvciByZWNlaXZlIGJ1ZmZlci4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gY29ubmVjdGlvbiBzZXR1cCBhbmQgYnVmZmVyIGNyZWF0aW9uL2F0dGFjaG1lbnQsIGFzIHdlbGwgYXMgQ0RDIG1lc3NhZ2Ugc2VuZGluZyB0byB0cmlnZ2VyIHRoZSByZWNlaXZlIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0RJQlMmIzM0OywKICAgICYjMzQ7RElCU19MTyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c21jX2J1Zl9jcmVhdGUmIzM0OywKICAgICYjMzQ7c21jZF9idWZfYXR0YWNoJiMzNDssCiAgICAmIzM0O3NtY2RfY2RjX21zZ19zZW5kJiMzNDssCiAgICAmIzM0O3NtY19jZGNfbXNnX3NlbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgU01DLUQgRE1CLW5vY29weSBjb25uZWN0aW9uIHNldHVwIHBhdGggd2hlcmUgYSBjb25jdXJyZW50IENEQyByZWNlaXZlIGhhbmRsZXIgY291bGQgb2JzZXJ2ZSBhbiB1bmluaXRpYWxpemVkIHNlbmQgb3IgcmVjZWl2ZSBidWZmZXIuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGNvbm5lY3Rpb24gc2V0dXAgYW5kIGJ1ZmZlciBjcmVhdGlvbi9hdHRhY2htZW50LCBhcyB3ZWxsIGFzIENEQyBtZXNzYWdlIHNlbmRpbmcgdG8gdHJpZ2dlciB0aGUgcmVjZWl2ZSBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzBUMDA6MDk6NDcuMDMzMDA3ODcxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzOTY1OTY1OTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiLFxuICAgIFwiRElCU19MT1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19idWZfY3JlYXRlXCIsXG4gICAgXCJzbWNkX2J1Zl9hdHRhY2hcIixcbiAgICBcInNtY2RfY2RjX21zZ19zZW5kXCIsXG4gICAgXCJzbWNfY2RjX21zZ19zZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgU01DLUQgRE1CLW5vY29weSBjb25uZWN0aW9uIHNldHVwIHBhdGggd2hlcmUgYSBjb25jdXJyZW50IENEQyByZWNlaXZlIGhhbmRsZXIgY291bGQgb2JzZXJ2ZSBhbiB1bmluaXRpYWxpemVkIHNlbmQgb3IgcmVjZWl2ZSBidWZmZXIuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGNvbm5lY3Rpb24gc2V0dXAgYW5kIGJ1ZmZlciBjcmVhdGlvbi9hdHRhY2htZW50LCBhcyB3ZWxsIGFzIENEQyBtZXNzYWdlIHNlbmRpbmcgdG8gdHJpZ2dlciB0aGUgcmVjZWl2ZSBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDowOTo0Ny4wMzMwMTM3NDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxOTI3NTk2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGY3MGNjOTQxNGU3ZjE3NDcxYjE1NTYxNjczNDc1OGQzY2Y0MDQ0NWNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMzAgMDA6MDk6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY2RjLmMgYi9uZXQvc21jL3NtY19jZGMuY1xcbmluZGV4IDMyZDZkMDNkZjMyMTQuLmVhNjFiMWU3NWM3MmMgMTAwNjQ0XFxuLS0tIGEvbmV0L3NtYy9zbWNfY2RjLmNcXG4rKysgYi9uZXQvc21jL3NtY19jZGMuY1xcbkBAIC0zMzIsOCArMzMyLDIwIEBAIHN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKHN0cnVjdCBzbWNfc29jayAqc21jLFxcbiB7XFxuIFxcdHVuaW9uIHNtY19ob3N0X2N1cnNvciBjb25zX29sZCwgcHJvZF9vbGQ7XFxuIFxcdHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiA9IFxcdTAwMjZzbWMtXFx1MDAzZWNvbm47XFxuK1xcdHN0cnVjdCBzbWNfYnVmX2Rlc2MgKnNuZGJ1Zl9kZXNjO1xcbiBcXHRpbnQgZGlmZl9jb25zLCBkaWZmX3Byb2QsIGRpZmZfdHg7XFxuIFxcbitcXHQvKiBBY3F1aXJlIHRoZSBzZW5kIGJ1ZmZlciBvbmNlLCBwYWlyaW5nIHdpdGggdGhlIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW5cXG4rXFx0ICogX19zbWNfYnVmX2NyZWF0ZSgpL3NtY2RfYnVmX2F0dGFjaCgpLiAgT24gdGhlIFNNQy1EIERNQi1ub2NvcHkgcGF0aFxcbitcXHQgKiB0aGUgZ2hvc3Qgc25kYnVmX2Rlc2MgaXMgYXR0YWNoZWQgb25seSBhZnRlciB0aGUgY29ubmVjdGlvbiBpcyBhbHJlYWR5XFxuK1xcdCAqIHJlYWNoYWJsZSB0byB0aGUgSVNNIGRldmljZSwgc28gaXQgY2FuIHN0aWxsIGJlIHVuc2V0IGhlcmU7IGV2ZXJ5XFxuK1xcdCAqIHNuZGJ1Zl9kZXNjIGNvbnN1bWVyIGJlbG93ICh0aGUgbm9jb3B5IGFjY291bnRpbmcgYW5kIHRoZSBzbmRidWZcXG4rXFx0ICogY29uc3VtZXIgdHJpZ2dlciwgd2hpY2ggZGVyZWZlcmVuY2VzIGl0IHZpYSBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoKSlcXG4rXFx0ICogaXMgc2tpcHBlZCB3aGlsZSBpdCBpcyBOVUxMIHRvIGF2b2lkIGEgTlVMTCBkZXJlZiBhbmQgYSBsb2FkIG9mIGFuXFxuK1xcdCAqIHVuaW5pdGlhbGlzZWQgYnVmZmVyLlxcbitcXHQgKi9cXG4rXFx0c25kYnVmX2Rlc2MgPSBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZjb25uLVxcdTAwM2VzbmRidWZfZGVzYyk7XFxuK1xcbiBcXHRzbWNfY3Vyc19jb3B5KFxcdTAwMjZwcm9kX29sZCwgXFx1MDAyNmNvbm4tXFx1MDAzZWxvY2FsX3J4X2N0cmwucHJvZCwgY29ubik7XFxuIFxcdHNtY19jdXJzX2NvcHkoXFx1MDAyNmNvbnNfb2xkLCBcXHUwMDI2Y29ubi1cXHUwMDNlbG9jYWxfcnhfY3RybC5jb25zLCBjb25uKTtcXG4gXFx0c21jX2NkY19tc2dfdG9faG9zdChcXHUwMDI2Y29ubi1cXHUwMDNlbG9jYWxfcnhfY3RybCwgY2RjLCBjb25uKTtcXG5AQCAtMzUxLDE0ICszNjMsMTcgQEAgc3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXFxuIFxcbiBcXHRcXHQvKiBpZiBsb2NhbCBzbmRidWYgc2hhcmVzIHRoZSBzYW1lIG1lbW9yeSByZWdpb24gd2l0aFxcbiBcXHRcXHQgKiBwZWVyIFJNQiwgdGhlbiB1cGRhdGUgdHhfY3Vyc19maW4gYW5kIHNuZGJ1Zl9zcGFjZVxcbi1cXHRcXHQgKiBoZXJlIHNpbmNlIHBlZXIgaGFzIGFscmVhZHkgY29uc3VtZWQgdGhlIGRhdGEuXFxuK1xcdFxcdCAqIGhlcmUgc2luY2UgcGVlciBoYXMgYWxyZWFkeSBjb25zdW1lZCB0aGUgZGF0YS4gIFRoZSBnaG9zdFxcbitcXHRcXHQgKiBzbmRidWZfZGVzYyAoYWNxdWlyZWQgYWJvdmUpIG1heSBzdGlsbCBiZSB1bnNldCBpbiB0aGUgU01DLURcXG4rXFx0XFx0ICogRE1CLW5vY29weSBzZXR1cCB3aW5kb3csIHNvIHNraXAgdGhlIHVwZGF0ZSB3aGlsZSBpdCBpcyBOVUxMLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKGNvbm4tXFx1MDAzZWxnci1cXHUwMDNlaXNfc21jZCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi1cXHUwMDNlbGdyLVxcdTAwM2VzbWNkKSkge1xcbitcXHRcXHQgICAgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi1cXHUwMDNlbGdyLVxcdTAwM2VzbWNkKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgc25kYnVmX2Rlc2MpIHtcXG4gXFx0XFx0XFx0LyogQ2FsY3VsYXRlIGNvbnN1bWVkIGRhdGEgYW5kXFxuIFxcdFxcdFxcdCAqIGluY3JlbWVudCBmcmVlIHNlbmQgYnVmZmVyIHNwYWNlLlxcbiBcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0ZGlmZl90eCA9IHNtY19jdXJzX2RpZmYoY29ubi1cXHUwMDNlc25kYnVmX2Rlc2MtXFx1MDAzZWxlbixcXG4rXFx0XFx0XFx0ZGlmZl90eCA9IHNtY19jdXJzX2RpZmYoc25kYnVmX2Rlc2MtXFx1MDAzZWxlbixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmNvbm4tXFx1MDAzZXR4X2N1cnNfZmluLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2Y29ubi1cXHUwMDNlbG9jYWxfcnhfY3RybC5jb25zKTtcXG4gXFx0XFx0XFx0LyogaW5jcmVhc2UgbG9jYWwgc25kYnVmIHNwYWNlIGFuZCBmaW5fY3VycyAqL1xcbkBAIC0zOTEsMTAgKzQwNiwxNSBAQCBzdGF0aWMgdm9pZCBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbihzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcXG4gXFx0XFx0XFx0Y29ubi1cXHUwMDNldXJnX3N0YXRlID0gU01DX1VSR19OT1RZRVQ7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIHRyaWdnZXIgc25kYnVmIGNvbnN1bWVyOiBSRE1BIHdyaXRlIGludG8gcGVlciBSTUJFIGFuZCBDREMgKi9cXG4tXFx0aWYgKChkaWZmX2NvbnMgXFx1MDAyNlxcdTAwMjYgc21jX3R4X3ByZXBhcmVkX3NlbmRzKGNvbm4pKSB8fFxcbi1cXHQgICAgY29ubi1cXHUwMDNlbG9jYWxfcnhfY3RybC5wcm9kX2ZsYWdzLmNvbnNfY3Vyc191cGRfcmVxIHx8XFxuLVxcdCAgICBjb25uLVxcdTAwM2Vsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MudXJnX2RhdGFfcGVuZGluZykge1xcbitcXHQvKiB0cmlnZ2VyIHNuZGJ1ZiBjb25zdW1lcjogUkRNQSB3cml0ZSBpbnRvIHBlZXIgUk1CRSBhbmQgQ0RDLlxcbitcXHQgKiBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoKSBhbmQgc21jX3R4X3BlbmRpbmcoKSBkZXJlZmVyZW5jZSBzbmRidWZfZGVzYyxcXG4rXFx0ICogc28gc2tpcCB0aGUgd2hvbGUgdHJpZ2dlciB3aGlsZSBpdCBpcyB1bnNldCAodGhlIFNNQy1EIERNQi1ub2NvcHlcXG4rXFx0ICogc2V0dXAgd2luZG93KTogdGhlcmUgaXMgbm90aGluZyB0byBzZW5kIHdpdGhvdXQgYSBzZW5kIGJ1ZmZlci5cXG4rXFx0ICovXFxuK1xcdGlmIChzbmRidWZfZGVzYyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKChkaWZmX2NvbnMgXFx1MDAyNlxcdTAwMjYgc21jX3R4X3ByZXBhcmVkX3NlbmRzKGNvbm4pKSB8fFxcbitcXHQgICAgIGNvbm4tXFx1MDAzZWxvY2FsX3J4X2N0cmwucHJvZF9mbGFncy5jb25zX2N1cnNfdXBkX3JlcSB8fFxcbitcXHQgICAgIGNvbm4tXFx1MDAzZWxvY2FsX3J4X2N0cmwucHJvZF9mbGFncy51cmdfZGF0YV9wZW5kaW5nKSkge1xcbiBcXHRcXHRpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihcXHUwMDI2c21jLVxcdTAwM2VzaykpXFxuIFxcdFxcdFxcdHNtY190eF9wZW5kaW5nKGNvbm4pO1xcbiBcXHRcXHRlbHNlXFxuQEAgLTQ0MywxMyArNDYzLDIxIEBAIHN0YXRpYyB2b2lkIHNtY2RfY2RjX3J4X3Rza2xldChzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXFxuIHtcXG4gXFx0c3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uID0gZnJvbV90YXNrbGV0KGNvbm4sIHQsIHJ4X3Rza2xldCk7XFxuIFxcdHN0cnVjdCBzbWNkX2NkY19tc2cgKmRhdGFfY2RjO1xcbitcXHRzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpybWJfZGVzYztcXG4gXFx0c3RydWN0IHNtY2RfY2RjX21zZyBjZGM7XFxuIFxcdHN0cnVjdCBzbWNfc29jayAqc21jO1xcbiBcXG4gXFx0aWYgKCFjb25uIHx8IGNvbm4tXFx1MDAzZWtpbGxlZClcXG4gXFx0XFx0cmV0dXJuO1xcbitcXHQvKiBQYWlyIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBfX3NtY19idWZfY3JlYXRlKCk6IHRoZSBjb25uZWN0aW9uXFxuK1xcdCAqIGlzIHB1Ymxpc2hlZCBiZWZvcmUgaXRzIFJNQiBpcyBhbGxvY2F0ZWQsIHNvIGJhaWwgd2hpbGUgcm1iX2Rlc2MgaXNcXG4rXFx0ICogdW5zZXQgdG8gYXZvaWQgYSBOVUxMIGRlcmVmIGFuZCBhIGxvYWQgb2YgYW4gdW5pbml0aWFsaXNlZCBidWZmZXIuXFxuK1xcdCAqL1xcbitcXHRybWJfZGVzYyA9IHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNmNvbm4tXFx1MDAzZXJtYl9kZXNjKTtcXG4rXFx0aWYgKCFybWJfZGVzYylcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0ZGF0YV9jZGMgPSAoc3RydWN0IHNtY2RfY2RjX21zZyAqKWNvbm4tXFx1MDAzZXJtYl9kZXNjLVxcdTAwM2VjcHVfYWRkcjtcXG4rXFx0ZGF0YV9jZGMgPSAoc3RydWN0IHNtY2RfY2RjX21zZyAqKXJtYl9kZXNjLVxcdTAwM2VjcHVfYWRkcjtcXG4gXFx0c21jZF9jdXJzX2NvcHkoXFx1MDAyNmNkYy5wcm9kLCBcXHUwMDI2ZGF0YV9jZGMtXFx1MDAzZXByb2QsIGNvbm4pO1xcbiBcXHRzbWNkX2N1cnNfY29weShcXHUwMDI2Y2RjLmNvbnMsIFxcdTAwMjZkYXRhX2NkYy1cXHUwMDNlY29ucywgY29ubik7XFxuIFxcdHNtYyA9IGNvbnRhaW5lcl9vZihjb25uLCBzdHJ1Y3Qgc21jX3NvY2ssIGNvbm4pO1xcbkBAIC00ODMsNyArNTExLDExIEBAIHN0YXRpYyB2b2lkIHNtY19jZGNfcnhfaGFuZGxlcihzdHJ1Y3QgaWJfd2MgKndjLCB2b2lkICpidWYpXFxuIFxcdGxnciA9IHNtY19nZXRfbGdyKGxpbmspO1xcbiBcXHRyZWFkX2xvY2tfYmgoXFx1MDAyNmxnci1cXHUwMDNlY29ubnNfbG9jayk7XFxuIFxcdGNvbm4gPSBzbWNfbGdyX2ZpbmRfY29ubihudG9obChjZGMtXFx1MDAzZXRva2VuKSwgbGdyKTtcXG4tXFx0aWYgKCFjb25uIHx8IGNvbm4tXFx1MDAzZW91dF9vZl9zeW5jKSB7XFxuK1xcdC8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogYmFpbCB3aGlsZSB0aGVcXG4rXFx0ICogUk1CIGlzIHVuc2V0IChzbWNfY2RjX21zZ19yZWN2X2FjdGlvbigpIGRlcmVmZXJlbmNlcyBpdCkgdG8gYXZvaWQgYVxcbitcXHQgKiBOVUxMIGRlcmVmIGFuZCBhIHN0YWxlLWJ1ZmZlciByZWFkIGluIHRoZSBjb25uZWN0aW9uIHNldHVwIHdpbmRvdy5cXG4rXFx0ICovXFxuK1xcdGlmICghY29ubiB8fCBjb25uLVxcdTAwM2VvdXRfb2Zfc3luYyB8fCAhc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2Y29ubi1cXHUwMDNlcm1iX2Rlc2MpKSB7XFxuIFxcdFxcdHJlYWRfdW5sb2NrX2JoKFxcdTAwMjZsZ3ItXFx1MDAzZWNvbm5zX2xvY2spO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5jIGIvbmV0L3NtYy9zbWNfY29yZS5jXFxuaW5kZXggYjQyMDhjYjE4NmM1ZS4uMzNiZjljYzk3OWVmYSAxMDA2NDRcXG4tLS0gYS9uZXQvc21jL3NtY19jb3JlLmNcXG4rKysgYi9uZXQvc21jL3NtY19jb3JlLmNcXG5AQCAtMjQ5OSwxNSArMjQ5OSwyNiBAQCBzdGF0aWMgaW50IF9fc21jX2J1Zl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIGJvb2wgaXNfc21jZCwgYm9vbCBpc19ybWIpXFxuIFxcdH1cXG4gXFxuIFxcdGlmIChpc19ybWIpIHtcXG4tXFx0XFx0Y29ubi1cXHUwMDNlcm1iX2Rlc2MgPSBidWZfZGVzYztcXG4gXFx0XFx0Y29ubi1cXHUwMDNlcm1iZV9zaXplX2NvbXAgPSBidWZzaXplX2NvbXA7XFxuIFxcdFxcdHNtYy1cXHUwMDNlc2suc2tfcmN2YnVmID0gYnVmc2l6ZSAqIDI7XFxuIFxcdFxcdGF0b21pY19zZXQoXFx1MDAyNmNvbm4tXFx1MDAzZWJ5dGVzX3RvX3JjdiwgMCk7XFxuIFxcdFxcdGNvbm4tXFx1MDAzZXJtYmVfdXBkYXRlX2xpbWl0ID1cXG4gXFx0XFx0XFx0c21jX3JtYl93bmRfdXBkYXRlX2xpbWl0KGJ1Zl9kZXNjLVxcdTAwM2VsZW4pO1xcbitcXHRcXHQvKiBQdWJsaXNoIHRoZSByZWNlaXZlIGJ1ZmZlciBsYXN0LCB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzOiB0aGVcXG4rXFx0XFx0ICogY29ubmVjdGlvbiBpcyBhbHJlYWR5IGluIHRoZSBsaW5rIGdyb3VwJ3MgdG9rZW4gdHJlZSwgc28gYVxcbitcXHRcXHQgKiBjb25jdXJyZW50IENEQyByZWNlaXZlIGhhbmRsZXIgbXVzdCBvYnNlcnZlIHRoZSBmdWxseVxcbitcXHRcXHQgKiBpbml0aWFsaXNlZCByZWNlaXZlIHN0YXRlIGFib3ZlIChhbmQgdGhlIGJ1ZmZlcikgb25jZSBpdCBzZWVzXFxuK1xcdFxcdCAqIGEgbm9uLU5VTEwgcm1iX2Rlc2MuICBQYWlycyB3aXRoIHRoZSBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gdGhlXFxuK1xcdFxcdCAqIENEQyByZWNlaXZlIHBhdGguXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2Y29ubi1cXHUwMDNlcm1iX2Rlc2MsIGJ1Zl9kZXNjKTtcXG4gXFx0XFx0aWYgKGlzX3NtY2QpXFxuIFxcdFxcdFxcdHNtY19pc21fc2V0X2Nvbm4oY29ubik7IC8qIG1hcCBSTUIvc21jZF9kZXYgdG8gY29ubiAqL1xcbiBcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBQbGFpbiBzdG9yZTogdGhpcyBzZW5kLWJ1ZmZlciBwYXNzIHJ1bnMgYmVmb3JlIHRoZSBSTUIgcGFzcyxcXG4rXFx0XFx0ICogd2hvc2Ugc21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNmNvbm4tXFx1MDAzZXJtYl9kZXNjKSB0aGVuIHB1Ymxpc2hlcyB0aGlzXFxuK1xcdFxcdCAqIHN0b3JlIHRvbywgYW5kIHRoZSBDREMgcmVjZWl2ZSBwYXRoIGlzIGdhdGVkIG9uIHJtYl9kZXNjLlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0Y29ubi1cXHUwMDNlc25kYnVmX2Rlc2MgPSBidWZfZGVzYztcXG4gXFx0XFx0c21jLVxcdTAwM2Vzay5za19zbmRidWYgPSBidWZzaXplICogMjtcXG4gXFx0XFx0YXRvbWljX3NldChcXHUwMDI2Y29ubi1cXHUwMDNlc25kYnVmX3NwYWNlLCBidWZzaXplKTtcXG5AQCAtMjU5OSw5ICsyNjEwLDE2IEBAIGludCBzbWNkX2J1Zl9hdHRhY2goc3RydWN0IHNtY19zb2NrICpzbWMpXFxuIFxcdGJ1Zl9kZXNjLVxcdTAwM2VjcHVfYWRkciA9XFxuIFxcdFxcdCh1OCAqKWJ1Zl9kZXNjLVxcdTAwM2VjcHVfYWRkciArIHNpemVvZihzdHJ1Y3Qgc21jZF9jZGNfbXNnKTtcXG4gXFx0YnVmX2Rlc2MtXFx1MDAzZWxlbiAtPSBzaXplb2Yoc3RydWN0IHNtY2RfY2RjX21zZyk7XFxuLVxcdGNvbm4tXFx1MDAzZXNuZGJ1Zl9kZXNjID0gYnVmX2Rlc2M7XFxuLVxcdGNvbm4tXFx1MDAzZXNuZGJ1Zl9kZXNjLVxcdTAwM2V1c2VkID0gMTtcXG4tXFx0YXRvbWljX3NldChcXHUwMDI2Y29ubi1cXHUwMDNlc25kYnVmX3NwYWNlLCBjb25uLVxcdTAwM2VzbmRidWZfZGVzYy1cXHUwMDNlbGVuKTtcXG4rXFx0YnVmX2Rlc2MtXFx1MDAzZXVzZWQgPSAxO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZjb25uLVxcdTAwM2VzbmRidWZfc3BhY2UsIGJ1Zl9kZXNjLVxcdTAwM2VsZW4pO1xcbitcXHQvKiBQdWJsaXNoIHRoZSBnaG9zdCBzZW5kIGJ1ZmZlciBsYXN0LCB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzOiB0aGVcXG4rXFx0ICogY29ubmVjdGlvbiBpcyBhbHJlYWR5IHJlYWNoYWJsZSB0byB0aGUgSVNNIGRldmljZSAoc21jX2lzbV9zZXRfY29ubigpXFxuK1xcdCAqIHJhbiBpbiBfX3NtY19idWZfY3JlYXRlKCkpLCBzbyB0aGUgQ0RDIHJlY2VpdmUgdGFza2xldCBtdXN0IG9ic2VydmVcXG4rXFx0ICogdGhlIGZ1bGx5IGluaXRpYWxpc2VkIGdob3N0IGJ1ZmZlciBvbmNlIGl0IHNlZXMgYSBub24tTlVMTFxcbitcXHQgKiBzbmRidWZfZGVzYy4gIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluXFxuK1xcdCAqIHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKCkuXFxuK1xcdCAqL1xcbitcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2Y29ubi1cXHUwMDNlc25kYnVmX2Rlc2MsIGJ1Zl9kZXNjKTtcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiBmcmVlOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDowOTo0Ny40NTI5NDA0OThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODM1NDYwMjA3ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJESUJTXCIsXG4gICAgXCJESUJTX0xPXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic21jX2J1Zl9jcmVhdGVcIixcbiAgICBcInNtY2RfYnVmX2F0dGFjaFwiLFxuICAgIFwic21jZF9jZGNfbXNnX3NlbmRcIixcbiAgICBcInNtY19jZGNfbXNnX3NlbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBTTUMtRCBETUItbm9jb3B5IGNvbm5lY3Rpb24gc2V0dXAgcGF0aCB3aGVyZSBhIGNvbmN1cnJlbnQgQ0RDIHJlY2VpdmUgaGFuZGxlciBjb3VsZCBvYnNlcnZlIGFuIHVuaW5pdGlhbGl6ZWQgc2VuZCBvciByZWNlaXZlIGJ1ZmZlci4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gY29ubmVjdGlvbiBzZXR1cCBhbmQgYnVmZmVyIGNyZWF0aW9uL2F0dGFjaG1lbnQsIGFzIHdlbGwgYXMgQ0RDIG1lc3NhZ2Ugc2VuZGluZyB0byB0cmlnZ2VyIHRoZSByZWNlaXZlIHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY3MGNjOTQxNGU3ZjE3NDcxYjE1NTYxNjczNDc1OGQzY2Y0MDQ0NWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAwMDowOTo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2NkYy5jIGIvbmV0L3NtYy9zbWNfY2RjLmNcbmluZGV4IDMyZDZkMDNkZjMyMTQuLmVhNjFiMWU3NWM3MmMgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19jZGMuY1xuKysrIGIvbmV0L3NtYy9zbWNfY2RjLmNcbkBAIC0zMzIsOCArMzMyLDIwIEBAIHN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKHN0cnVjdCBzbWNfc29jayAqc21jLFxuIHtcbiBcdHVuaW9uIHNtY19ob3N0X2N1cnNvciBjb25zX29sZCwgcHJvZF9vbGQ7XG4gXHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBcdTAwMjZzbWMtXHUwMDNlY29ubjtcbitcdHN0cnVjdCBzbWNfYnVmX2Rlc2MgKnNuZGJ1Zl9kZXNjO1xuIFx0aW50IGRpZmZfY29ucywgZGlmZl9wcm9kLCBkaWZmX3R4O1xuIFxuK1x0LyogQWNxdWlyZSB0aGUgc2VuZCBidWZmZXIgb25jZSwgcGFpcmluZyB3aXRoIHRoZSBzbXBfc3RvcmVfcmVsZWFzZSgpIGluXG4rXHQgKiBfX3NtY19idWZfY3JlYXRlKCkvc21jZF9idWZfYXR0YWNoKCkuICBPbiB0aGUgU01DLUQgRE1CLW5vY29weSBwYXRoXG4rXHQgKiB0aGUgZ2hvc3Qgc25kYnVmX2Rlc2MgaXMgYXR0YWNoZWQgb25seSBhZnRlciB0aGUgY29ubmVjdGlvbiBpcyBhbHJlYWR5XG4rXHQgKiByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UsIHNvIGl0IGNhbiBzdGlsbCBiZSB1bnNldCBoZXJlOyBldmVyeVxuK1x0ICogc25kYnVmX2Rlc2MgY29uc3VtZXIgYmVsb3cgKHRoZSBub2NvcHkgYWNjb3VudGluZyBhbmQgdGhlIHNuZGJ1ZlxuK1x0ICogY29uc3VtZXIgdHJpZ2dlciwgd2hpY2ggZGVyZWZlcmVuY2VzIGl0IHZpYSBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoKSlcbitcdCAqIGlzIHNraXBwZWQgd2hpbGUgaXQgaXMgTlVMTCB0byBhdm9pZCBhIE5VTEwgZGVyZWYgYW5kIGEgbG9hZCBvZiBhblxuK1x0ICogdW5pbml0aWFsaXNlZCBidWZmZXIuXG4rXHQgKi9cbitcdHNuZGJ1Zl9kZXNjID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZjb25uLVx1MDAzZXNuZGJ1Zl9kZXNjKTtcbitcbiBcdHNtY19jdXJzX2NvcHkoXHUwMDI2cHJvZF9vbGQsIFx1MDAyNmNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybC5wcm9kLCBjb25uKTtcbiBcdHNtY19jdXJzX2NvcHkoXHUwMDI2Y29uc19vbGQsIFx1MDAyNmNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybC5jb25zLCBjb25uKTtcbiBcdHNtY19jZGNfbXNnX3RvX2hvc3QoXHUwMDI2Y29ubi1cdTAwM2Vsb2NhbF9yeF9jdHJsLCBjZGMsIGNvbm4pO1xuQEAgLTM1MSwxNCArMzYzLDE3IEBAIHN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKHN0cnVjdCBzbWNfc29jayAqc21jLFxuIFxuIFx0XHQvKiBpZiBsb2NhbCBzbmRidWYgc2hhcmVzIHRoZSBzYW1lIG1lbW9yeSByZWdpb24gd2l0aFxuIFx0XHQgKiBwZWVyIFJNQiwgdGhlbiB1cGRhdGUgdHhfY3Vyc19maW4gYW5kIHNuZGJ1Zl9zcGFjZVxuLVx0XHQgKiBoZXJlIHNpbmNlIHBlZXIgaGFzIGFscmVhZHkgY29uc3VtZWQgdGhlIGRhdGEuXG4rXHRcdCAqIGhlcmUgc2luY2UgcGVlciBoYXMgYWxyZWFkeSBjb25zdW1lZCB0aGUgZGF0YS4gIFRoZSBnaG9zdFxuK1x0XHQgKiBzbmRidWZfZGVzYyAoYWNxdWlyZWQgYWJvdmUpIG1heSBzdGlsbCBiZSB1bnNldCBpbiB0aGUgU01DLURcbitcdFx0ICogRE1CLW5vY29weSBzZXR1cCB3aW5kb3csIHNvIHNraXAgdGhlIHVwZGF0ZSB3aGlsZSBpdCBpcyBOVUxMLlxuIFx0XHQgKi9cbiBcdFx0aWYgKGNvbm4tXHUwMDNlbGdyLVx1MDAzZWlzX3NtY2QgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShjb25uLVx1MDAzZWxnci1cdTAwM2VzbWNkKSkge1xuK1x0XHQgICAgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi1cdTAwM2VsZ3ItXHUwMDNlc21jZCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBzbmRidWZfZGVzYykge1xuIFx0XHRcdC8qIENhbGN1bGF0ZSBjb25zdW1lZCBkYXRhIGFuZFxuIFx0XHRcdCAqIGluY3JlbWVudCBmcmVlIHNlbmQgYnVmZmVyIHNwYWNlLlxuIFx0XHRcdCAqL1xuLVx0XHRcdGRpZmZfdHggPSBzbWNfY3Vyc19kaWZmKGNvbm4tXHUwMDNlc25kYnVmX2Rlc2MtXHUwMDNlbGVuLFxuK1x0XHRcdGRpZmZfdHggPSBzbWNfY3Vyc19kaWZmKHNuZGJ1Zl9kZXNjLVx1MDAzZWxlbixcbiBcdFx0XHRcdFx0XHRcdTAwMjZjb25uLVx1MDAzZXR4X2N1cnNfZmluLFxuIFx0XHRcdFx0XHRcdFx1MDAyNmNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybC5jb25zKTtcbiBcdFx0XHQvKiBpbmNyZWFzZSBsb2NhbCBzbmRidWYgc3BhY2UgYW5kIGZpbl9jdXJzICovXG5AQCAtMzkxLDEwICs0MDYsMTUgQEAgc3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXG4gXHRcdFx0Y29ubi1cdTAwM2V1cmdfc3RhdGUgPSBTTUNfVVJHX05PVFlFVDtcbiBcdH1cbiBcbi1cdC8qIHRyaWdnZXIgc25kYnVmIGNvbnN1bWVyOiBSRE1BIHdyaXRlIGludG8gcGVlciBSTUJFIGFuZCBDREMgKi9cbi1cdGlmICgoZGlmZl9jb25zIFx1MDAyNlx1MDAyNiBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoY29ubikpIHx8XG4tXHQgICAgY29ubi1cdTAwM2Vsb2NhbF9yeF9jdHJsLnByb2RfZmxhZ3MuY29uc19jdXJzX3VwZF9yZXEgfHxcbi1cdCAgICBjb25uLVx1MDAzZWxvY2FsX3J4X2N0cmwucHJvZF9mbGFncy51cmdfZGF0YV9wZW5kaW5nKSB7XG4rXHQvKiB0cmlnZ2VyIHNuZGJ1ZiBjb25zdW1lcjogUkRNQSB3cml0ZSBpbnRvIHBlZXIgUk1CRSBhbmQgQ0RDLlxuK1x0ICogc21jX3R4X3ByZXBhcmVkX3NlbmRzKCkgYW5kIHNtY190eF9wZW5kaW5nKCkgZGVyZWZlcmVuY2Ugc25kYnVmX2Rlc2MsXG4rXHQgKiBzbyBza2lwIHRoZSB3aG9sZSB0cmlnZ2VyIHdoaWxlIGl0IGlzIHVuc2V0ICh0aGUgU01DLUQgRE1CLW5vY29weVxuK1x0ICogc2V0dXAgd2luZG93KTogdGhlcmUgaXMgbm90aGluZyB0byBzZW5kIHdpdGhvdXQgYSBzZW5kIGJ1ZmZlci5cbitcdCAqL1xuK1x0aWYgKHNuZGJ1Zl9kZXNjIFx1MDAyNlx1MDAyNlxuK1x0ICAgICgoZGlmZl9jb25zIFx1MDAyNlx1MDAyNiBzbWNfdHhfcHJlcGFyZWRfc2VuZHMoY29ubikpIHx8XG4rXHQgICAgIGNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybC5wcm9kX2ZsYWdzLmNvbnNfY3Vyc191cGRfcmVxIHx8XG4rXHQgICAgIGNvbm4tXHUwMDNlbG9jYWxfcnhfY3RybC5wcm9kX2ZsYWdzLnVyZ19kYXRhX3BlbmRpbmcpKSB7XG4gXHRcdGlmICghc29ja19vd25lZF9ieV91c2VyKFx1MDAyNnNtYy1cdTAwM2VzaykpXG4gXHRcdFx0c21jX3R4X3BlbmRpbmcoY29ubik7XG4gXHRcdGVsc2VcbkBAIC00NDMsMTMgKzQ2MywyMSBAQCBzdGF0aWMgdm9pZCBzbWNkX2NkY19yeF90c2tsZXQoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KVxuIHtcbiBcdHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiA9IGZyb21fdGFza2xldChjb25uLCB0LCByeF90c2tsZXQpO1xuIFx0c3RydWN0IHNtY2RfY2RjX21zZyAqZGF0YV9jZGM7XG4rXHRzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpybWJfZGVzYztcbiBcdHN0cnVjdCBzbWNkX2NkY19tc2cgY2RjO1xuIFx0c3RydWN0IHNtY19zb2NrICpzbWM7XG4gXG4gXHRpZiAoIWNvbm4gfHwgY29ubi1cdTAwM2VraWxsZWQpXG4gXHRcdHJldHVybjtcbitcdC8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogdGhlIGNvbm5lY3Rpb25cbitcdCAqIGlzIHB1Ymxpc2hlZCBiZWZvcmUgaXRzIFJNQiBpcyBhbGxvY2F0ZWQsIHNvIGJhaWwgd2hpbGUgcm1iX2Rlc2MgaXNcbitcdCAqIHVuc2V0IHRvIGF2b2lkIGEgTlVMTCBkZXJlZiBhbmQgYSBsb2FkIG9mIGFuIHVuaW5pdGlhbGlzZWQgYnVmZmVyLlxuK1x0ICovXG4rXHRybWJfZGVzYyA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2Y29ubi1cdTAwM2VybWJfZGVzYyk7XG4rXHRpZiAoIXJtYl9kZXNjKVxuK1x0XHRyZXR1cm47XG4gXG4tXHRkYXRhX2NkYyA9IChzdHJ1Y3Qgc21jZF9jZGNfbXNnICopY29ubi1cdTAwM2VybWJfZGVzYy1cdTAwM2VjcHVfYWRkcjtcbitcdGRhdGFfY2RjID0gKHN0cnVjdCBzbWNkX2NkY19tc2cgKilybWJfZGVzYy1cdTAwM2VjcHVfYWRkcjtcbiBcdHNtY2RfY3Vyc19jb3B5KFx1MDAyNmNkYy5wcm9kLCBcdTAwMjZkYXRhX2NkYy1cdTAwM2Vwcm9kLCBjb25uKTtcbiBcdHNtY2RfY3Vyc19jb3B5KFx1MDAyNmNkYy5jb25zLCBcdTAwMjZkYXRhX2NkYy1cdTAwM2Vjb25zLCBjb25uKTtcbiBcdHNtYyA9IGNvbnRhaW5lcl9vZihjb25uLCBzdHJ1Y3Qgc21jX3NvY2ssIGNvbm4pO1xuQEAgLTQ4Myw3ICs1MTEsMTEgQEAgc3RhdGljIHZvaWQgc21jX2NkY19yeF9oYW5kbGVyKHN0cnVjdCBpYl93YyAqd2MsIHZvaWQgKmJ1ZilcbiBcdGxnciA9IHNtY19nZXRfbGdyKGxpbmspO1xuIFx0cmVhZF9sb2NrX2JoKFx1MDAyNmxnci1cdTAwM2Vjb25uc19sb2NrKTtcbiBcdGNvbm4gPSBzbWNfbGdyX2ZpbmRfY29ubihudG9obChjZGMtXHUwMDNldG9rZW4pLCBsZ3IpO1xuLVx0aWYgKCFjb25uIHx8IGNvbm4tXHUwMDNlb3V0X29mX3N5bmMpIHtcbitcdC8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogYmFpbCB3aGlsZSB0aGVcbitcdCAqIFJNQiBpcyB1bnNldCAoc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oKSBkZXJlZmVyZW5jZXMgaXQpIHRvIGF2b2lkIGFcbitcdCAqIE5VTEwgZGVyZWYgYW5kIGEgc3RhbGUtYnVmZmVyIHJlYWQgaW4gdGhlIGNvbm5lY3Rpb24gc2V0dXAgd2luZG93LlxuK1x0ICovXG4rXHRpZiAoIWNvbm4gfHwgY29ubi1cdTAwM2VvdXRfb2Zfc3luYyB8fCAhc21wX2xvYWRfYWNxdWlyZShcdTAwMjZjb25uLVx1MDAzZXJtYl9kZXNjKSkge1xuIFx0XHRyZWFkX3VubG9ja19iaChcdTAwMjZsZ3ItXHUwMDNlY29ubnNfbG9jayk7XG4gXHRcdHJldHVybjtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmMgYi9uZXQvc21jL3NtY19jb3JlLmNcbmluZGV4IGI0MjA4Y2IxODZjNWUuLjMzYmY5Y2M5NzllZmEgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19jb3JlLmNcbisrKyBiL25ldC9zbWMvc21jX2NvcmUuY1xuQEAgLTI0OTksMTUgKzI0OTksMjYgQEAgc3RhdGljIGludCBfX3NtY19idWZfY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBib29sIGlzX3NtY2QsIGJvb2wgaXNfcm1iKVxuIFx0fVxuIFxuIFx0aWYgKGlzX3JtYikge1xuLVx0XHRjb25uLVx1MDAzZXJtYl9kZXNjID0gYnVmX2Rlc2M7XG4gXHRcdGNvbm4tXHUwMDNlcm1iZV9zaXplX2NvbXAgPSBidWZzaXplX2NvbXA7XG4gXHRcdHNtYy1cdTAwM2Vzay5za19yY3ZidWYgPSBidWZzaXplICogMjtcbiBcdFx0YXRvbWljX3NldChcdTAwMjZjb25uLVx1MDAzZWJ5dGVzX3RvX3JjdiwgMCk7XG4gXHRcdGNvbm4tXHUwMDNlcm1iZV91cGRhdGVfbGltaXQgPVxuIFx0XHRcdHNtY19ybWJfd25kX3VwZGF0ZV9saW1pdChidWZfZGVzYy1cdTAwM2VsZW4pO1xuK1x0XHQvKiBQdWJsaXNoIHRoZSByZWNlaXZlIGJ1ZmZlciBsYXN0LCB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzOiB0aGVcbitcdFx0ICogY29ubmVjdGlvbiBpcyBhbHJlYWR5IGluIHRoZSBsaW5rIGdyb3VwJ3MgdG9rZW4gdHJlZSwgc28gYVxuK1x0XHQgKiBjb25jdXJyZW50IENEQyByZWNlaXZlIGhhbmRsZXIgbXVzdCBvYnNlcnZlIHRoZSBmdWxseVxuK1x0XHQgKiBpbml0aWFsaXNlZCByZWNlaXZlIHN0YXRlIGFib3ZlIChhbmQgdGhlIGJ1ZmZlcikgb25jZSBpdCBzZWVzXG4rXHRcdCAqIGEgbm9uLU5VTEwgcm1iX2Rlc2MuICBQYWlycyB3aXRoIHRoZSBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gdGhlXG4rXHRcdCAqIENEQyByZWNlaXZlIHBhdGguXG4rXHRcdCAqL1xuK1x0XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZjb25uLVx1MDAzZXJtYl9kZXNjLCBidWZfZGVzYyk7XG4gXHRcdGlmIChpc19zbWNkKVxuIFx0XHRcdHNtY19pc21fc2V0X2Nvbm4oY29ubik7IC8qIG1hcCBSTUIvc21jZF9kZXYgdG8gY29ubiAqL1xuIFx0fSBlbHNlIHtcbitcdFx0LyogUGxhaW4gc3RvcmU6IHRoaXMgc2VuZC1idWZmZXIgcGFzcyBydW5zIGJlZm9yZSB0aGUgUk1CIHBhc3MsXG4rXHRcdCAqIHdob3NlIHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmNvbm4tXHUwMDNlcm1iX2Rlc2MpIHRoZW4gcHVibGlzaGVzIHRoaXNcbitcdFx0ICogc3RvcmUgdG9vLCBhbmQgdGhlIENEQyByZWNlaXZlIHBhdGggaXMgZ2F0ZWQgb24gcm1iX2Rlc2MuXG4rXHRcdCAqL1xuIFx0XHRjb25uLVx1MDAzZXNuZGJ1Zl9kZXNjID0gYnVmX2Rlc2M7XG4gXHRcdHNtYy1cdTAwM2Vzay5za19zbmRidWYgPSBidWZzaXplICogMjtcbiBcdFx0YXRvbWljX3NldChcdTAwMjZjb25uLVx1MDAzZXNuZGJ1Zl9zcGFjZSwgYnVmc2l6ZSk7XG5AQCAtMjU5OSw5ICsyNjEwLDE2IEBAIGludCBzbWNkX2J1Zl9hdHRhY2goc3RydWN0IHNtY19zb2NrICpzbWMpXG4gXHRidWZfZGVzYy1cdTAwM2VjcHVfYWRkciA9XG4gXHRcdCh1OCAqKWJ1Zl9kZXNjLVx1MDAzZWNwdV9hZGRyICsgc2l6ZW9mKHN0cnVjdCBzbWNkX2NkY19tc2cpO1xuIFx0YnVmX2Rlc2MtXHUwMDNlbGVuIC09IHNpemVvZihzdHJ1Y3Qgc21jZF9jZGNfbXNnKTtcbi1cdGNvbm4tXHUwMDNlc25kYnVmX2Rlc2MgPSBidWZfZGVzYztcbi1cdGNvbm4tXHUwMDNlc25kYnVmX2Rlc2MtXHUwMDNldXNlZCA9IDE7XG4tXHRhdG9taWNfc2V0KFx1MDAyNmNvbm4tXHUwMDNlc25kYnVmX3NwYWNlLCBjb25uLVx1MDAzZXNuZGJ1Zl9kZXNjLVx1MDAzZWxlbik7XG4rXHRidWZfZGVzYy1cdTAwM2V1c2VkID0gMTtcbitcdGF0b21pY19zZXQoXHUwMDI2Y29ubi1cdTAwM2VzbmRidWZfc3BhY2UsIGJ1Zl9kZXNjLVx1MDAzZWxlbik7XG4rXHQvKiBQdWJsaXNoIHRoZSBnaG9zdCBzZW5kIGJ1ZmZlciBsYXN0LCB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzOiB0aGVcbitcdCAqIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UgKHNtY19pc21fc2V0X2Nvbm4oKVxuK1x0ICogcmFuIGluIF9fc21jX2J1Zl9jcmVhdGUoKSksIHNvIHRoZSBDREMgcmVjZWl2ZSB0YXNrbGV0IG11c3Qgb2JzZXJ2ZVxuK1x0ICogdGhlIGZ1bGx5IGluaXRpYWxpc2VkIGdob3N0IGJ1ZmZlciBvbmNlIGl0IHNlZXMgYSBub24tTlVMTFxuK1x0ICogc25kYnVmX2Rlc2MuICBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpblxuK1x0ICogc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oKS5cbitcdCAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2Y29ubi1cdTAwM2VzbmRidWZfZGVzYywgYnVmX2Rlc2MpO1xuIFx0cmV0dXJuIDA7XG4gXG4gZnJlZTpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAwOjA5OjQ3LjQ1Mjk0MTU5OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzA3NTE0NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU01DIFBhdGNoIGZvciBSYWNlIENvbmRpdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBuZXQvc21jL3NtY19jZGMuY2AgYW5kIGBuZXQvc21jL3NtY19jb3JlLmNgLiBJdCBzZWVtcyB0aGV5J3JlIGluamVjdGluZyBgc21wX2xvYWRfYWNxdWlyZWAgYW5kIGBzbXBfc3RvcmVfcmVsZWFzZWAgaW50byBgY29ubi1cdTAwM2VzbmRidWZfZGVzY2AgYW5kIGBjb25uLVx1MDAzZXJtYl9kZXNjYC4gVGhpcyByaW5ncyBhIGJlbGw7IHNvdW5kcyBsaWtlIHRoZXkncmUgdHJ5aW5nIHRvIGFkZHJlc3MgYSBuYXN0eSByYWNlIGNvbmRpdGlvbi4gU3BlY2lmaWNhbGx5LCBhIGNvbmN1cnJlbnQgQ0RDIHJlY2VpdmUgaGFuZGxlciB3YXMgbGlrZWx5IG9ic2VydmluZyBhbiB1bmluaXRpYWxpemVkIGJ1ZmZlciwgb3Igd29yc2UsIGEgbnVsbCBwb2ludGVyLiBBbHdheXMgZnVuIHdoZW4gZGVhbGluZyB3aXRoIHNoYXJlZCBtZW1vcnkgYW5kIGNvbmN1cnJlbmN5LCBlc3BlY2lhbGx5IHdpdGhpbiBhIGNyaXRpY2FsIHN1YnN5c3RlbSBsaWtlIFNNQy5cblxuVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUsIG9mIGNvdXJzZSwgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIHRoZSBTTUMgKFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMpIHN1YnN5c3RlbS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGFwcGxpZWQgY29ycmVjdGx5LCBidXQgYWxzbyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmaXggZm9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gU01DIGlzIHJlYWNoYWJsZSBpbiB2YXJpb3VzIHZpcnR1YWxpemF0aW9uIHNjZW5hcmlvcyAtIFNNQy1EIHdpdGggSVNNIGxvb3BiYWNrIG9yIGR1bW15IElTTSwgZm9yIGluc3RhbmNlLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gdGVzdCBpbiB0aGVzZSBlbnZpcm9ubWVudHMgaWYgcG9zc2libGUuXG5cbk5vdywgbGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZyBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCBTTUMuIEknbGwgZmlyZSB1cCBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gc2VlIHdoYXQgb3B0aW9ucyBtaWdodCBiZSByZWxldmFudCBvciBhZmZlY3RlZCBieSB0aGlzIHBhdGNoLiBOZWVkIHRvIGdldCBhIGZ1bGwgcGljdHVyZSBiZWZvcmUgZGl2aW5nIGRlZXBlciBpbnRvIHRoZSBjb2RlIHJldmlldy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ3MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAwOjA5OjUxLjc4MzY5NTY3M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njg2ODU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU01DXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvc21jL0tjb25maWc6Mjpjb25maWcgU01DXFxubmV0L3NtYy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XFxcIlxcbi0tXFxubmV0L3NtYy9LY29uZmlnLTEzLVxcbm5ldC9zbWMvS2NvbmZpZzoxNDpjb25maWcgU01DX0RJQUdcXG5uZXQvc21jL0tjb25maWctMTUtXFx0dHJpc3RhdGUgXFxcIlNNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3NtYy9LY29uZmlnLTIyLVxcbm5ldC9zbWMvS2NvbmZpZzoyMzpjb25maWcgU01DX0hTX0NUUkxfQlBGXFxubmV0L3NtYy9LY29uZmlnLTI0LVxcdGJvb2wgXFxcIkdlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAwOjA5OjUxLjg1MDU2ODIxM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NjkyMjY2NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KipcblxuUmlnaHQsIHRoZSBrZXkgY29uZmlndXJhdGlvbiBzZXR0aW5nIHdlJ3JlIGxvb2tpbmcgYXQgaXMgYFNNQ2AuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE5vdywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBgU01DYCBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB0YWtlIGEgcXVpY2sgc3RlcCBiYWNrIGFuZCBjb25zaWRlciBwb3RlbnRpYWwgY2FzY2FkaW5nIGVmZmVjdHMuIFRoZXJlJ3MgYSBkZWNlbnQgY2hhbmNlIHRoaXMgYFNNQ2Agb3B0aW9uIHRpZXMgaW50byBvdGhlciBmZWF0dXJlcyBvciBtb2R1bGVzIHdpdGhpbiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSAqaW1tZWRpYXRlKiBkZXBlbmRlbmNpZXMsIGVpdGhlciBleHBsaWNpdCB3aXRoaW4gdGhlIGNvZGUgb3IgaW1wbGllZCBieSBhcmNoaXRlY3R1cmFsIGRlc2lnbiwgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYmVmb3JlIHByb2NlZWRpbmcgZnVydGhlci4gQSBxdWljayBzY2FuIGZvciByZWxhdGVkIHNldHRpbmdzLCBjb2RlIHBhdGhzLCBvciBleHRlcm5hbCBpbnRlZ3JhdGlvbnMgaXMgaW4gb3JkZXIuIEl0J3MgYmVzdCB0byBtYXAgb3V0IHRoZSBicm9hZGVyIGNvbnRleHQgYmVmb3JlIHpvb21pbmcgaW4gb24gdGhlIHNwZWNpZmljcyBvZiBgU01DYCBpdHNlbGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMzcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDowOTo1NC43MTk3OTc1MTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg2Njc0MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnPTI9Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG5uZXQvc21jL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBESUJTXFxubmV0L3NtYy9LY29uZmlnLTUtXFx0aGVscFxcbi0tXFxubmV0L3NtYy9LY29uZmlnPTE0PWNvbmZpZyBTTUNfRElBR1xcbm5ldC9zbWMvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxubmV0L3NtYy9LY29uZmlnOjE2OlxcdGRlcGVuZHMgb24gU01DXFxubmV0L3NtYy9LY29uZmlnLTE3LVxcdGhlbHBcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZz0yMz1jb25maWcgU01DX0hTX0NUUkxfQlBGXFxubmV0L3NtYy9LY29uZmlnLTI0LVxcdGJvb2wgXFxcIkdlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcXFwiXFxubmV0L3NtYy9LY29uZmlnOjI1OlxcdGRlcGVuZHMgb24gU01DIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgQlBGX1NZU0NBTExcXG5uZXQvc21jL0tjb25maWctMjYtXFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAwOjA5OjU0LjgxODQ3MTI0OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4ODQ5NDc5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBEZXBlbmRlbmN5IENoZWNrKipcblxuT2theSwgc28gdGhlIGNvZGUgaW4gcXVlc3Rpb24gaGFzIGEgZGVwZW5kZW5jeSBjaGFpbiB0aGF0IGludm9sdmVzIGBJTkVUYCwgYElORklOSUJBTkRgLCBhbmQgYERJQlNgLiBUaW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoZXNlIGRlcGVuZGVuY2llcywgc28gcmF0aGVyIHRoYW4gcmVseSBvbiBtZW1vcnkgb3IgcG90ZW50aWFsbHkgb3V0ZGF0ZWQgZG9jdW1lbnRhdGlvbiwgbGV0J3MgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGhlIEtjb25maWcgZmlsZSBpbiBgbmV0L3NtYy9LY29uZmlnYCBzaG91bGQgcHJvdmlkZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIEknbGwgb3BlbiB0aGF0IHVwIGFuZCB2ZXJpZnkgdGhlIGV4YWN0IGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlc2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0LiBUaGlzIGlzIHRoZSBvbmx5IHdheSB0byBiZSBjZXJ0YWluIEkgdW5kZXJzdGFuZCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgY2FuIGFzc2VzcyB0aGUgaW1wYWN0IG9mIGNoYW5nZXMgb3IgcG90ZW50aWFsIGNvbmZsaWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYyMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAwOjA5OjU3LjcwMzQyMTg5NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFNNQ1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IElORklOSUJBTkQgXFx1MDAyNlxcdTAwMjYgRElCU1xcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBTTUMtUiBwcm92aWRlcyBhIFxcXCJzb2NrZXRzIG92ZXIgUkRNQVxcXCIgc29sdXRpb24gbWFraW5nIHVzZSBvZlxcbiAgIDc6XFx0XFx0ICBSRE1BIG92ZXIgQ29udmVyZ2VkIEV0aGVybmV0IChSb0NFKSB0ZWNobm9sb2d5IHRvIHVwZ3JhZGVcXG4gICA4OlxcdFxcdCAgQUZfSU5FVCBUQ1AgY29ubmVjdGlvbnMgdHJhbnNwYXJlbnRseS5cXG4gICA5OlxcdFxcdCAgVGhlIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTTUMtUiBzb2x1dGlvbiBpcyBkZXNpZ25lZCBhc1xcbiAgMTA6XFx0XFx0ICBhIHNlcGFyYXRlIHNvY2tldCBmYW1pbHkgU01DLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBydW4gU01DIHNvY2tldCBhcHBsaWNhdGlvbnNcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIFNNQ19ESUFHXFxuICAxNTpcXHRcXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIFNNQ1xcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBTdXBwb3J0IGZvciBTTUMgc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdG9vbHMgc3VjaCBhc1xcbiAgMTk6XFx0XFx0ICBzbWNzcy5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDowOTo1Ny43MDM1MTM2MjZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQ1NTk2OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlY29kaW5nIHRoZSBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBgRElCU2AuLi4gd2hhdCBpbiB0aGUga2VybmVsJ3Mgd29ybGQgaXMgYERJQlNgPyBMZXQgbWUgcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdC4gQWgsIEkgc2VlLCBpdCBsb29rcyBsaWtlIGl0J3MgbGlrZWx5IGEgZGVwZW5kZW5jeSByZWxhdGVkIHRvIGBJTkVUYCBhbmQgYElORklOSUJBTkRgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSB1c3VhbGx5IHNlZSB0aGF0IGluIHRoZSBzdGFuZGFyZCBrZXJuZWwgY29uZmlnLCBidXQgdGhlIGRlcGVuZGVuY3kgYWxzbyBpbmNsdWRlcyBgRElCU2A/IEhtbW0uLi4gSSBhbSBub3QgZmFtaWxpYXIgd2l0aCBgRElCU2AuIEkga25vdyBJIHNob3VsZCBkZWZpbml0ZWx5IGluY2x1ZGUgYFNNQ2AsIGBJTkVUYCwgYW5kIGBJTkZJTklCQU5EYCBiZWNhdXNlIG9mIHRoZSBjb250ZXh0LCBidXQgdGhhdCBgRElCU2AgaXMgdGhyb3dpbmcgbWUuIElzIHRoYXQgYSB0eXBvPyBPciwgaXMgdGhpcyBzb21ldGhpbmcgc3BlY2lmaWMgdG8gc3l6a2FsbGVyLCBwZXJoYXBzPyBPciwgbWF5YmUgaXQncyByZWxhdGVkIHRvIGBJUFY2YCBpbiBzb21lIHdheT8gTGV0IG1lIGRvIGEgcXVpY2sgc2VhcmNoIGFuZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgRElCU2AgcmVmZXJzIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTEwLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDA6MTA6MDEuNjQ5MTE0MTE0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM3MzM2ODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBESUJTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZGlicy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvZGlicy9LY29uZmlnOjI6Y29uZmlnIERJQlNcXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvZGlicy9LY29uZmlnLTEzLVxcbmRyaXZlcnMvZGlicy9LY29uZmlnOjE0OmNvbmZpZyBESUJTX0xPXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTUtXFx0Ym9vbCBcXFwiSW50cmEtT1Mgc2hvcnRjdXQgd2l0aCBkaWJzIGxvb3BiYWNrXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDoxMDowMy44ODY0NTc0NjZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzNjM4NDQ5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGxlbWVudGF0aW9uIG9mIERpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYW5kIGl0IHNlZW1zIHdlJ3JlIGRlYWxpbmcgd2l0aCBgRElCU2AsIHdoaWNoIEkgYXNzdW1lIGlzIERpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZy4gR2l2ZW4gdGhhdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gdGFraW5nIGludG8gYWNjb3VudCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBgU01DYCBhbmQgYElORklOSUJBTkRgLiBJJ2xsIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhvc2UgZnVuY3Rpb25hbGl0aWVzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGZ1bmN0aW9uIGNhbGxzIGltcGFjdGVkIGJ5IHRoaXMgY2hhbmdlLiBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmAsIGBzbWNkX2NkY19yeF90c2tsZXRgLCBgc21jX2NkY19yeF9oYW5kbGVyYCwgYF9fc21jX2J1Zl9jcmVhdGVgLCBhbmQgYHNtY2RfYnVmX2F0dGFjaGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgYXJlYXMgYWZmZWN0ZWQgYnkgdGhlIGBESUJTYCBpbXBsZW1lbnRhdGlvbiwgbGlrZWx5IGRlYWxpbmcgd2l0aCBtZXNzYWdlIGhhbmRsaW5nLCByZWNlaXZlIHByb2Nlc3NpbmcsIGFuZCBidWZmZXIgbWFuYWdlbWVudC5cblxuTmV4dCwgSSBuZWVkIHRvIHZlcmlmeSB3aGljaCBvZiB0aGVzZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyB3aWxsIHRlbGwgbWUgYWJvdXQgdGhlaXIgc2NvcGUgYW5kIHdoZXRoZXIgdGhleSBhcmUgbWVhbnQgdG8gYmUgYXZhaWxhYmxlIGV4dGVybmFsbHkgb3IgaWYgdGhleSBhcmUganVzdCBpbnRlcm5hbCBmdW5jdGlvbnMuIFRoaXMgZGV0YWlsIGNhbiBwb3RlbnRpYWxseSBhZmZlY3Qgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTY3LCJPdXRwdXRUb2tlbnMiOjY5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAwOjEwOjA4LjUyMjg0NTE1OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU3NDQ0OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX2NkY19tc2dfcmVjdl9hY3Rpb258c21jZF9jZGNfcnhfdHNrbGV0fHNtY19jZGNfcnhfaGFuZGxlcnxfX3NtY19idWZfY3JlYXRlfHNtY2RfYnVmX2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL2FmX3NtYy5jPTE0MTY9c3RhdGljIGludCBzbWNfY29ubmVjdF9pc20oc3RydWN0IHNtY19zb2NrICpzbWMsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE0NjUtXFx0aWYgKHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KHNtYy1cXHUwMDNlY29ubi5sZ3ItXFx1MDAzZXNtY2QpKSB7XFxubmV0L3NtYy9hZl9zbWMuYzoxNDY2OlxcdFxcdHJjID0gc21jZF9idWZfYXR0YWNoKHNtYyk7XFxubmV0L3NtYy9hZl9zbWMuYy0xNDY3LVxcdFxcdGlmIChyYykge1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0yNDQ5PXN0YXRpYyB2b2lkIHNtY19saXN0ZW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTI1NzMtXFx0ICAgIHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KG5ld19zbWMtXFx1MDAzZWNvbm4ubGdyLVxcdTAwM2VzbWNkKSkge1xcbm5ldC9zbWMvYWZfc21jLmM6MjU3NDpcXHRcXHRyYyA9IHNtY2RfYnVmX2F0dGFjaChuZXdfc21jKTtcXG5uZXQvc21jL2FmX3NtYy5jLTI1NzUtXFx0XFx0aWYgKHJjKVxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmM9MzA4PXN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3ZhbGlkYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2NkY19tc2cgKmNkYyxcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTMyOS1cXG5uZXQvc21jL3NtY19jZGMuYzozMzA6c3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXFxubmV0L3NtYy9zbWNfY2RjLmMtMzMxLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc21jX2NkY19tc2cgKmNkYylcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTMzOC1cXHQvKiBBY3F1aXJlIHRoZSBzZW5kIGJ1ZmZlciBvbmNlLCBwYWlyaW5nIHdpdGggdGhlIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW5cXG5uZXQvc21jL3NtY19jZGMuYzozMzk6XFx0ICogX19zbWNfYnVmX2NyZWF0ZSgpL3NtY2RfYnVmX2F0dGFjaCgpLiAgT24gdGhlIFNNQy1EIERNQi1ub2NvcHkgcGF0aFxcbm5ldC9zbWMvc21jX2NkYy5jLTM0MC1cXHQgKiB0aGUgZ2hvc3Qgc25kYnVmX2Rlc2MgaXMgYXR0YWNoZWQgb25seSBhZnRlciB0aGUgY29ubmVjdGlvbiBpcyBhbHJlYWR5XFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYz00NDc9c3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdihzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IHNtY19jZGNfbXNnICpjZGMpXFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYy00NTAtXFx0YmhfbG9ja19zb2NrKFxcdTAwMjZzbWMtXFx1MDAzZXNrKTtcXG5uZXQvc21jL3NtY19jZGMuYzo0NTE6XFx0c21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc21jLCBjZGMpO1xcbm5ldC9zbWMvc21jX2NkYy5jLTQ1Mi1cXHRiaF91bmxvY2tfc29jayhcXHUwMDI2c21jLVxcdTAwM2Vzayk7XFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYy00NjEtICovXFxubmV0L3NtYy9zbWNfY2RjLmM6NDYyOnN0YXRpYyB2b2lkIHNtY2RfY2RjX3J4X3Rza2xldChzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXFxubmV0L3NtYy9zbWNfY2RjLmMtNDYzLXtcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTQ3MS1cXHRcXHRyZXR1cm47XFxubmV0L3NtYy9zbWNfY2RjLmM6NDcyOlxcdC8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogdGhlIGNvbm5lY3Rpb25cXG5uZXQvc21jL3NtY19jZGMuYy00NzMtXFx0ICogaXMgcHVibGlzaGVkIGJlZm9yZSBpdHMgUk1CIGlzIGFsbG9jYXRlZCwgc28gYmFpbCB3aGlsZSBybWJfZGVzYyBpc1xcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmM9NDkwPXZvaWQgc21jZF9jZGNfcnhfaW5pdChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxubmV0L3NtYy9zbWNfY2RjLmMtNDkxLXtcXG5uZXQvc21jL3NtY19jZGMuYzo0OTI6XFx0dGFza2xldF9zZXR1cChcXHUwMDI2Y29ubi1cXHUwMDNlcnhfdHNrbGV0LCBzbWNkX2NkY19yeF90c2tsZXQpO1xcbm5ldC9zbWMvc21jX2NkYy5jLTQ5My19XFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYy00OTYtXFxubmV0L3NtYy9zbWNfY2RjLmM6NDk3OnN0YXRpYyB2b2lkIHNtY19jZGNfcnhfaGFuZGxlcihzdHJ1Y3QgaWJfd2MgKndjLCB2b2lkICpidWYpXFxubmV0L3NtYy9zbWNfY2RjLmMtNDk4LXtcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTUxMy1cXHRjb25uID0gc21jX2xncl9maW5kX2Nvbm4obnRvaGwoY2RjLVxcdTAwM2V0b2tlbiksIGxncik7XFxubmV0L3NtYy9zbWNfY2RjLmM6NTE0OlxcdC8qIFBhaXIgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIF9fc21jX2J1Zl9jcmVhdGUoKTogYmFpbCB3aGlsZSB0aGVcXG5uZXQvc21jL3NtY19jZGMuYzo1MTU6XFx0ICogUk1CIGlzIHVuc2V0IChzbWNfY2RjX21zZ19yZWN2X2FjdGlvbigpIGRlcmVmZXJlbmNlcyBpdCkgdG8gYXZvaWQgYVxcbm5ldC9zbWMvc21jX2NkYy5jLTUxNi1cXHQgKiBOVUxMIGRlcmVmIGFuZCBhIHN0YWxlLWJ1ZmZlciByZWFkIGluIHRoZSBjb25uZWN0aW9uIHNldHVwIHdpbmRvdy5cXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTUzOS1cXG5uZXQvc21jL3NtY19jZGMuYzo1NDA6c3RhdGljIHN0cnVjdCBzbWNfd3JfcnhfaGFuZGxlciBzbWNfY2RjX3J4X2hhbmRsZXJzW10gPSB7XFxubmV0L3NtYy9zbWNfY2RjLmMtNTQxLVxcdHtcXG5uZXQvc21jL3NtY19jZGMuYzo1NDI6XFx0XFx0LmhhbmRsZXJcXHQ9IHNtY19jZGNfcnhfaGFuZGxlcixcXG5uZXQvc21jL3NtY19jZGMuYy01NDMtXFx0XFx0LnR5cGVcXHRcXHQ9IFNNQ19DRENfTVNHX1RZUEVcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jPTU1MD1pbnQgX19pbml0IHNtY19jZGNfaW5pdCh2b2lkKVxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmMtNTU0LVxcbm5ldC9zbWMvc21jX2NkYy5jOjU1NTpcXHRmb3IgKGhhbmRsZXIgPSBzbWNfY2RjX3J4X2hhbmRsZXJzOyBoYW5kbGVyLVxcdTAwM2VoYW5kbGVyOyBoYW5kbGVyKyspIHtcXG5uZXQvc21jL3NtY19jZGMuYy01NTYtXFx0XFx0SU5JVF9ITElTVF9OT0RFKFxcdTAwMjZoYW5kbGVyLVxcdTAwM2VsaXN0KTtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0yMzkwPXN0YXRpYyBzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpzbWNkX25ld19idWZfY3JlYXRlKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTI0MjUtXFxubmV0L3NtYy9zbWNfY29yZS5jOjI0MjY6c3RhdGljIGludCBfX3NtY19idWZfY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBib29sIGlzX3NtY2QsIGJvb2wgaXNfcm1iKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNDI3LXtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0yNTYxPWludCBzbWNfYnVmX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgYm9vbCBpc19zbWNkKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTI1NjktXFxubmV0L3NtYy9zbWNfY29yZS5jOjI1NzA6XFx0cmMgPSBfX3NtY19idWZfY3JlYXRlKHNtYywgaXNfc21jZCwgZmFsc2UpO1xcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTcxLVxcdGlmIChyYylcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTc1LVxcdC8qIGNyZWF0ZSBybWIgKi9cXG5uZXQvc21jL3NtY19jb3JlLmM6MjU3NjpcXHRyYyA9IF9fc21jX2J1Zl9jcmVhdGUoc21jLCBpc19zbWNkLCB0cnVlKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMjU3Ny1cXHRpZiAocmMgXFx1MDAyNlxcdTAwMjYgc21jLVxcdTAwM2Vjb25uLnNuZGJ1Zl9kZXNjKSB7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMjU4Ny1cXG5uZXQvc21jL3NtY19jb3JlLmM6MjU4ODppbnQgc21jZF9idWZfYXR0YWNoKHN0cnVjdCBzbWNfc29jayAqc21jKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTg5LXtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNjE2LVxcdCAqIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UgKHNtY19pc21fc2V0X2Nvbm4oKVxcbm5ldC9zbWMvc21jX2NvcmUuYzoyNjE3OlxcdCAqIHJhbiBpbiBfX3NtY19idWZfY3JlYXRlKCkpLCBzbyB0aGUgQ0RDIHJlY2VpdmUgdGFza2xldCBtdXN0IG9ic2VydmVcXG5uZXQvc21jL3NtY19jb3JlLmMtMjYxOC1cXHQgKiB0aGUgZnVsbHkgaW5pdGlhbGlzZWQgZ2hvc3QgYnVmZmVyIG9uY2UgaXQgc2VlcyBhIG5vbi1OVUxMXFxubmV0L3NtYy9zbWNfY29yZS5jLTI2MTktXFx0ICogc25kYnVmX2Rlc2MuICBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpblxcbm5ldC9zbWMvc21jX2NvcmUuYzoyNjIwOlxcdCAqIHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKCkuXFxubmV0L3NtYy9zbWNfY29yZS5jLTI2MjEtXFx0ICovXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmg9NTgzPWludCBzbWNfYnVmX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgYm9vbCBpc19zbWNkKTtcXG5uZXQvc21jL3NtY19jb3JlLmg6NTg0OmludCBzbWNkX2J1Zl9hdHRhY2goc3RydWN0IHNtY19zb2NrICpzbWMpO1xcbm5ldC9zbWMvc21jX2NvcmUuaC01ODUtaW50IHNtY191bmNvbXByZXNzX2J1ZnNpemUodTggY29tcHJlc3NlZCk7XFxuLS1cXG5uZXQvc21jL3NtY19yeC5jLTI5LS8qIGNhbGxiYWNrIGltcGxlbWVudGF0aW9uIHRvIHdha2V1cCBjb25zdW1lcnMgYmxvY2tlZCB3aXRoIHNtY19yeF93YWl0KCkuXFxubmV0L3NtYy9zbWNfcnguYzozMDogKiBpbmRpcmVjdGx5IGNhbGxlZCBieSBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbigpLlxcbm5ldC9zbWMvc21jX3J4LmMtMzEtICovXFxuLS1cXG5uZXQvc21jL3NtY19yeC5jPTM1Mj1pbnQgc21jX3J4X3JlY3Ztc2coc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9zbWMvc21jX3J4LmMtMzk4LVxcdFxcdGlmIChzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNiBSQ1ZfU0hVVERPV04pIHtcXG5uZXQvc21jL3NtY19yeC5jOjM5OTpcXHRcXHRcXHQvKiBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbigpIGNvdWxkIGhhdmUgcnVuIGFmdGVyXFxubmV0L3NtYy9zbWNfcnguYy00MDAtXFx0XFx0XFx0ICogYWJvdmUgc21jX3J4X3JlY3Ztc2dfZGF0YV9hdmFpbGFibGUoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDoxMDowOC41ODg1OTQ3MThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyMTk3MzAyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lc3NhZ2UgUmVjZXB0aW9uIGFuZCBCdWZmZXIgTWFuYWdlbWVudCBDb2RlKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgc21jX2NkY19tc2dfcmVjdl9hY3Rpb25gLCBgc21jZF9jZGNfcnhfdHNrbGV0YCwgYHNtY19jZGNfcnhfaGFuZGxlcmAsIGBfX3NtY19idWZfY3JlYXRlYCwgYW5kIGBzbWNkX2J1Zl9hdHRhY2hgLiBJdCBzZWVtcyBsaWtlIEkndmUgbWFkZSBzb21lIGNoYW5nZXMgdG8gYWxsIG9mIHRoZW0uIEkgc2VlIHRoYXQgYHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uYCwgYHNtY2RfY2RjX3J4X3Rza2xldGAsIGBzbWNfY2RjX3J4X2hhbmRsZXJgLCBhbmQgYF9fc21jX2J1Zl9jcmVhdGVgIGFyZSBhbGwgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCBtZWFuaW5nIHRoZWlyIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhlIGN1cnJlbnQgdHJhbnNsYXRpb24gdW5pdC4gQnV0IGBzbWNkX2J1Zl9hdHRhY2hgIGlzICpub3QqIHN0YXRpYywgc28gdGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLlxuXG5GdXJ0aGVybW9yZSwgYHNtY19idWZfY3JlYXRlYCBjYWxscyBgX19zbWNfYnVmX2NyZWF0ZWAsIHdoaWNoIG1ha2VzIHNlbnNlIGFzIGEga2luZCBvZiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24uIExvb2tpbmcgYXQgdGhlIGNhbGwgZmxvdywgYHNtY19jZGNfbXNnX3JlY3ZgIGNhbGxzIGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmAuIEFuZCwgZmluYWxseSwgYHNtY2RfY2RjX3J4X2luaXRgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIGBzbWNkX2NkY19yeF90c2tsZXRgLiBBbHNvLCBJJ3ZlIGdvdCBgc21jX2NkY19yeF9oYW5kbGVyc2AgY29udGFpbmluZyBgc21jX2NkY19yeF9oYW5kbGVyYC5cblxuR2l2ZW4gdGhpcyBvdmVydmlldywgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSB0aGUgb25lcyBJIHJlYWxseSBuZWVkIHRvIGZvY3VzIG9uIHJpZ2h0IG5vdy4gVGhhdCBtZWFucyBgc21jZF9idWZfYXR0YWNoYCBhbmQgYHNtY19idWZfY3JlYXRlYCBhcmUgdGhlIHByaW9yaXR5LiBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGBzbWNfY2RjX21zZ19yZWN2YCBpcyBub24tc3RhdGljIG9yIG5vdCB0b28sIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM5NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDoxMDoxMy4zMTA1NzIwMDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5OTI5NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19jZGNfbXNnX3JlY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfY2RjLmM9MzA4PXN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3ZhbGlkYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2NkY19tc2cgKmNkYyxcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTMyOS1cXG5uZXQvc21jL3NtY19jZGMuYzozMzA6c3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXFxubmV0L3NtYy9zbWNfY2RjLmMtMzMxLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc21jX2NkY19tc2cgKmNkYylcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTQ0Ni0vKiBjYWxsZWQgdW5kZXIgdGFza2xldCBjb250ZXh0ICovXFxubmV0L3NtYy9zbWNfY2RjLmM6NDQ3OnN0YXRpYyB2b2lkIHNtY19jZGNfbXNnX3JlY3Yoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfY2RjX21zZyAqY2RjKVxcbm5ldC9zbWMvc21jX2NkYy5jLTQ0OC17XFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYy00NTAtXFx0YmhfbG9ja19zb2NrKFxcdTAwMjZzbWMtXFx1MDAzZXNrKTtcXG5uZXQvc21jL3NtY19jZGMuYzo0NTE6XFx0c21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc21jLCBjZGMpO1xcbm5ldC9zbWMvc21jX2NkYy5jLTQ1Mi1cXHRiaF91bmxvY2tfc29jayhcXHUwMDI2c21jLVxcdTAwM2Vzayk7XFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYz00NjI9c3RhdGljIHZvaWQgc21jZF9jZGNfcnhfdHNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTQ4My1cXHRzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcXG5uZXQvc21jL3NtY19jZGMuYzo0ODQ6XFx0c21jX2NkY19tc2dfcmVjdihzbWMsIChzdHJ1Y3Qgc21jX2NkY19tc2cgKilcXHUwMDI2Y2RjKTtcXG5uZXQvc21jL3NtY19jZGMuYy00ODUtfVxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmM9NDk3PXN0YXRpYyB2b2lkIHNtY19jZGNfcnhfaGFuZGxlcihzdHJ1Y3QgaWJfd2MgKndjLCB2b2lkICpidWYpXFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYy01MTQtXFx0LyogUGFpciB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gX19zbWNfYnVmX2NyZWF0ZSgpOiBiYWlsIHdoaWxlIHRoZVxcbm5ldC9zbWMvc21jX2NkYy5jOjUxNTpcXHQgKiBSTUIgaXMgdW5zZXQgKHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKCkgZGVyZWZlcmVuY2VzIGl0KSB0byBhdm9pZCBhXFxubmV0L3NtYy9zbWNfY2RjLmMtNTE2LVxcdCAqIE5VTEwgZGVyZWYgYW5kIGEgc3RhbGUtYnVmZmVyIHJlYWQgaW4gdGhlIGNvbm5lY3Rpb24gc2V0dXAgd2luZG93Llxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmMtNTM0LVxcbm5ldC9zbWMvc21jX2NkYy5jOjUzNTpcXHRzbWNfY2RjX21zZ19yZWN2KHNtYywgY2RjKTtcXG5uZXQvc21jL3NtY19jZGMuYy01MzYtb3V0Olxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jPTI1ODg9aW50IHNtY2RfYnVmX2F0dGFjaChzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNjE5LVxcdCAqIHNuZGJ1Zl9kZXNjLiAgUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW5cXG5uZXQvc21jL3NtY19jb3JlLmM6MjYyMDpcXHQgKiBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbigpLlxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNjIxLVxcdCAqL1xcbi0tXFxubmV0L3NtYy9zbWNfcnguYy0yOS0vKiBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbiB0byB3YWtldXAgY29uc3VtZXJzIGJsb2NrZWQgd2l0aCBzbWNfcnhfd2FpdCgpLlxcbm5ldC9zbWMvc21jX3J4LmM6MzA6ICogaW5kaXJlY3RseSBjYWxsZWQgYnkgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oKS5cXG5uZXQvc21jL3NtY19yeC5jLTMxLSAqL1xcbi0tXFxubmV0L3NtYy9zbWNfcnguYz0zNTI9aW50IHNtY19yeF9yZWN2bXNnKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvc21jL3NtY19yeC5jLTM5OC1cXHRcXHRpZiAoc2stXFx1MDAzZXNrX3NodXRkb3duIFxcdTAwMjYgUkNWX1NIVVRET1dOKSB7XFxubmV0L3NtYy9zbWNfcnguYzozOTk6XFx0XFx0XFx0Lyogc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oKSBjb3VsZCBoYXZlIHJ1biBhZnRlclxcbm5ldC9zbWMvc21jX3J4LmMtNDAwLVxcdFxcdFxcdCAqIGFib3ZlIHNtY19yeF9yZWN2bXNnX2RhdGFfYXZhaWxhYmxlKClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDA6MTA6MTMuMzYwNTA4NDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzNzU0ODY1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNjb3BlIG9mIEZ1bmN0aW9ucyBpbiBgc21jX2NkYy5jYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBzbWNfY2RjX21zZ19yZWN2YCBhbmQgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQncyBsaW1pdGVkIGluIHNjb3BlIHdpdGhpbiB0aGUgYHNtY19jZGMuY2AgZmlsZSBpdHNlbGYuIFRoYXQgbWVhbnMgaXQgY2FuJ3QgYmUgY2FsbGVkIGRpcmVjdGx5IGZyb20gb3V0c2lkZSB0aGUgZmlsZS4gTXkgbmV4dCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgdGhhdCAqYXJlKiBhY2Nlc3NpYmxlIGZyb20gZWxzZXdoZXJlLCBhbmQgdGhlcmVmb3JlIHJlcHJlc2VudCBhbiBpbnRlcmZhY2UgdG8gdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gSSBrbm93IGBzbWNkX2J1Zl9hdHRhY2hgIGFuZCBgc21jX2J1Zl9jcmVhdGVgIGFyZSBub24tc3RhdGljLCBzbyB0aGV5J3JlIGRlZmluaXRlbHkgb24gbXkgcmFkYXIuIEJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlcmUgYXJlbid0IGFueSBvdGhlciBmdW5jdGlvbnMgd2l0aGluIHRoaXMgZmlsZSB0aGF0IGFyZSBhbHNvIGV4cG9zZWQgZXh0ZXJuYWxseS4gTGV0IG1lIHF1aWNrbHkgc2NhbiB0aHJvdWdoIHRoZSBzb3VyY2UgYW5kIGNvbmZpcm0gdGhlcmUgYXJlbid0IGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgc21jX2NkYy5jYCB0aGF0IEkndmUgbWlzc2VkLiBJdCdzIGltcG9ydGFudCB0byBoYXZlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgZXh0ZXJuYWwgaW50ZXJmYWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMTAsIk91dHB1dFRva2VucyI6NjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDoxMDoxNi43OTgwNjA5ODNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MTAyNzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL3NtY19jZGMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19jZGMuYz0yNj1zdGF0aWMgdm9pZCBzbWNfY2RjX3R4X2hhbmRsZXIoc3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKnBuZF9zbmQsXFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYy03Mi1cXG5uZXQvc21jL3NtY19jZGMuYzo3MzppbnQgc21jX2NkY19nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcXG5uZXQvc21jL3NtY19jZGMuYy03NC1cXHRcXHRcXHQgIHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jPTk0PXN0YXRpYyBpbmxpbmUgdm9pZCBzbWNfY2RjX2FkZF9wZW5kaW5nX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmMtMTExLVxcbm5ldC9zbWMvc21jX2NkYy5jOjExMjppbnQgc21jX2NkY19tc2dfc2VuZChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sXFxubmV0L3NtYy9zbWNfY2RjLmMtMTEzLVxcdFxcdCAgICAgc3RydWN0IHNtY193cl9idWYgKndyX2J1ZixcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTE0Mi0vKiBzZW5kIGEgdmFsaWRhdGlvbiBtc2cgaW5kaWNhdGluZyB0aGUgbW92ZSBvZiBhIGNvbm4gdG8gYW4gb3RoZXIgUVAgbGluayAqL1xcbm5ldC9zbWMvc21jX2NkYy5jOjE0MzppbnQgc21jcl9jZGNfbXNnX3NlbmRfdmFsaWRhdGlvbihzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sXFxubmV0L3NtYy9zbWNfY2RjLmMtMTQ0LVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc21jX2NkY190eF9wZW5kICpwZW5kLFxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmM9MTc0PXN0YXRpYyBpbnQgc21jcl9jZGNfZ2V0X3Nsb3RfYW5kX21zZ19zZW5kKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTIwOC1cXG5uZXQvc21jL3NtY19jZGMuYzoyMDk6aW50IHNtY19jZGNfZ2V0X3Nsb3RfYW5kX21zZ19zZW5kKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG5uZXQvc21jL3NtY19jZGMuYy0yMTAte1xcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmMtMjI3LVxcbm5ldC9zbWMvc21jX2NkYy5jOjIyODp2b2lkIHNtY19jZGNfd2FpdF9wZW5kX3R4X3dyKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG5uZXQvc21jL3NtY19jZGMuYy0yMjkte1xcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmMtMjM2LSAqL1xcbm5ldC9zbWMvc21jX2NkYy5jOjIzNzppbnQgc21jZF9jZGNfbXNnX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxcbm5ldC9zbWMvc21jX2NkYy5jLTIzOC17XFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYz00NjI9c3RhdGljIHZvaWQgc21jZF9jZGNfcnhfdHNrbGV0KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTQ4OS0gKi9cXG5uZXQvc21jL3NtY19jZGMuYzo0OTA6dm9pZCBzbWNkX2NkY19yeF9pbml0KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG5uZXQvc21jL3NtY19jZGMuYy00OTEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDoxMDoxNi44NTQxNjk4NzJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM4MDQxMzQ2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSW5pdGlhbGl6YXRpb24gYW5kIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYWRkIGBzbWNkX2NkY19yeF9pbml0YCB0byB0aGUgbGlzdCBhcyB3ZWxsOyBpdOKAmXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGluaXRpYWxpemVzIHRoZSBSWCB0YXNrbGV0LiBBbmQgbGV0J3Mgbm90IGZvcmdldCBgc21jX2J1Zl9jcmVhdGVgIGFuZCBgc21jZF9idWZfYXR0YWNoYC4gSSdtIGRvdWJsZS1jaGVja2luZyBub3cgdG8gY29uZmlybSB0aGF0IGBzbWNkX2NkY19yeF9pbml0YCBpc24ndCBzdGF0aWMuIFllcywgZ29vZCwgaXQgaXNuJ3QuXG5cbkFoLCByaWdodCwgbm93IEkgcmVtZW1iZXIsIGBzbWNkX2NkY19yeF9pbml0YCBpcyBjYWxsZWQgZHVyaW5nIHRoZSBjb25uZWN0aW9uIHNldHVwIHBoYXNlLiBUaGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uIHRoYXQgY2FuIG9jY3VyIGR1cmluZyB0aGF0IGNvbm5lY3Rpb24gc2V0dXAsIHdoZXJlIGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmAgbWlnaHQgYmUgY2FsbGVkIHByZW1hdHVyZWx5LCBiZWZvcmUgYGNvbm4tXHUwMDNlc25kYnVmX2Rlc2NgIGFuZCBgY29ubi1cdTAwM2VybWJfZGVzY2AgaGF2ZSBiZWVuIGZ1bGx5IGluaXRpYWxpemVkLlxuXG5MZXQgbWUgcXVpY2tseSByZXZpZXcgdGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkOiBgU01DYCwgYElORklOSUJBTkRgLCBhbmQgYERJQlNgLiBIb2xkIG9uIGEgbWludXRl4oCmIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYERJQlNgIGlzIHNvbWV0aGluZyB0aGF0J3MgcGFydCBvZiB0aGUgc3RhbmRhcmQga2VybmVsLiBJICp0aGluayogSSBzYXcgYGRyaXZlcnMvZGlicy9LY29uZmlnYCBpbiB0aGF0IGdyZXBwZXIgb3V0cHV0LCBidXQgSSdtIGp1c3QgcXVpY2tseSBjb25maXJtaW5nIG5vdy4gQWhhLCBpdCBzZWVtcyBsaWtlIGBkcml2ZXJzL2RpYnMvS2NvbmZpZ2AgaXNuJ3QgYWN0dWFsbHkgaW4gdGhlIHN0YW5kYXJkIExpbnV4IGtlcm5lbC4gSXQgY291bGQgYmUgc3BlY2lmaWMgdG8gc3l6a2FsbGVyLCBvciBwZXJoYXBzIGEgY3VzdG9tIGRyaXZlci5cblxuT2theSwgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhhdCBgRElCU2AgaXMgaW5kZWVkIGxpc3RlZCBpbiBgbmV0L3NtYy9LY29uZmlnYC4gV2FpdCwgd2Fzbid0IHN1cmUgaWYgdGhhdCB3YXMganVzdCBhIHR5cG8uIEFoLCB5ZXMsIGBuZXQvc21jL0tjb25maWdgIGRvZXMgaGF2ZSBgZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBESUJTYC4gQnV0LCBJIGRpZG4ndCBzZWUgRElCUyBpbiB0aGUgc3RhbmRhcmQga2VybmVsLiBUaGF0J3MgYSBwb2ludCBvZiBjb25mdXNpb24uIExldCBtZSBqdXN0IG9wZW4gYG5ldC9zbWMvS2NvbmZpZ2AgYWdhaW4gdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMDAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDA6MTA6MjIuMjM0NTg2MjY5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFNNQ1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IElORklOSUJBTkQgXFx1MDAyNlxcdTAwMjYgRElCU1xcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBTTUMtUiBwcm92aWRlcyBhIFxcXCJzb2NrZXRzIG92ZXIgUkRNQVxcXCIgc29sdXRpb24gbWFraW5nIHVzZSBvZlxcbiAgIDc6XFx0XFx0ICBSRE1BIG92ZXIgQ29udmVyZ2VkIEV0aGVybmV0IChSb0NFKSB0ZWNobm9sb2d5IHRvIHVwZ3JhZGVcXG4gICA4OlxcdFxcdCAgQUZfSU5FVCBUQ1AgY29ubmVjdGlvbnMgdHJhbnNwYXJlbnRseS5cXG4gICA5OlxcdFxcdCAgVGhlIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTTUMtUiBzb2x1dGlvbiBpcyBkZXNpZ25lZCBhc1xcbiAgMTA6XFx0XFx0ICBhIHNlcGFyYXRlIHNvY2tldCBmYW1pbHkgU01DLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBydW4gU01DIHNvY2tldCBhcHBsaWNhdGlvbnNcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIFNNQ19ESUFHXFxuICAxNTpcXHRcXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIFNNQ1xcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBTdXBwb3J0IGZvciBTTUMgc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdG9vbHMgc3VjaCBhc1xcbiAgMTk6XFx0XFx0ICBzbWNzcy5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDoxMDoyMi4yMzQ2NDY0NjlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwMDk4Mjg0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZXBlbmRlbmNpZXMgYW5kIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gdGhpcyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGNvdmVyIGFsbCB0aGUgYmFzZXMuIEl0IGRlZmluaXRlbHkgaGluZ2VzIG9uIGBJTkVUYCwgYElORklOSUJBTkRgLCBhbmQgYERJQlNgLiBObyBxdWVzdGlvbiBhYm91dCB0aGF0LiBUaGVyZWZvcmUsIEkgbmVlZCB0byBiZSBzdXJlIHRvIGV4cGxpY2l0bHkgaW5jbHVkZSB0aG9zZS4gV2FpdCwgYElORVRgIGlzIGFsd2F5cyB0aGVyZSwgaXNuJ3QgaXQ/IEl0J3MgcHJldHR5IHN0YW5kYXJkLCBidXQganVzdCB0byBiZSBzdXJlIEknbGwgc3RpbGwgaW5jbHVkZSBpdC4gTm8gaGFybSBpbiBiZWluZyBleHRyYSBjYXV0aW91cywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBjb3JlIGNvbXBvbmVudHMuIE5vdywgYmVmb3JlIEkgY29tbWl0IHRvIGFueXRoaW5nLCBsZXQgbWUgZG91YmxlLWNoZWNrIGlmIGBESUJTYCBoYXMgYW55ICpvdGhlciogZGVwZW5kZW5jaWVzIEkgbWlnaHQgYmUgbWlzc2luZy4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjI2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDoxMDoyNS44MzU2MzE2M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RpYnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdGNvbmZpZyBESUJTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZWZhdWx0IG5cXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIChESUJTKSBpcyBhIGNvbW11bmljYXRpb24gbWV0aG9kIHRoYXRcXG4gICA3OlxcdFxcdCAgdXNlcyBjb21tb24gcGh5c2ljYWwgKGludGVybmFsKSBtZW1vcnkgZm9yIHN5bmNocm9ub3VzIGRpcmVjdCBhY2Nlc3NcXG4gICA4OlxcdFxcdCAgaW50byBhIHJlbW90ZSBidWZmZXIuXFxuICAgOTpcXHRcXG4gIDEwOlxcdFxcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIHByb3ZpZGUgdGhlIGFic3RyYWN0aW9uIGxheWVyIGJldHdlZW5cXG4gIDExOlxcdFxcdCAgZGlicyBkZXZpY2VzIGFuZCBkaWJzIGNsaWVudHMgbGlrZSB0aGUgU01DIHByb3RvY29sLlxcbiAgMTI6XFx0XFx0ICBUaGUgbW9kdWxlIG5hbWUgaXMgZGlicy5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIERJQlNfTE9cXG4gIDE1OlxcdFxcdGJvb2wgXFxcIkludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1xcXCJcXG4gIDE2OlxcdFxcdGRlcGVuZHMgb24gRElCU1xcbiAgMTc6XFx0XFx0ZGVmYXVsdCBuXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIERJQlNfTE8gZW5hYmxlcyB0aGUgY3JlYXRpb24gb2YgYW4gc29mdHdhcmUtZW11bGF0ZWQgZGlicyBkZXZpY2VcXG4gIDIwOlxcdFxcdCAgbmFtZWQgbG8gd2hpY2ggY2FuIGJlIHVzZWQgZm9yIHRyYW5zZmVycmluZyBkYXRhIHdoZW4gY29tbXVuaWNhdGlvblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDoxMDoyNS44MzU2ODczN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjg0MjIzOTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbnNpZGVyaW5nIFNNQy1EIGFuZCBJU00gU3VwcG9ydCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBESUJTYCBhbmQgYERJQlNfTE9gLiBSaWdodCwgYERJQlNfTE9gIGlzIHRoZSBzb2Z0d2FyZS1lbXVsYXRlZCBcImxvXCIgZGlicyBkZXZpY2UuIFRoYXQncyBnb29kLCBiZWNhdXNlIFNNQy1EIG5lZWRzIGFuIElTTSBkZXZpY2UsIGFuZCBzaW5jZSBgRElCU19MT2AgcHJvdmlkZXMgYSB2aXJ0dWFsaXplZCBvbmUsIHdlIGFic29sdXRlbHkgbmVlZCB0byBpbmNsdWRlIGl0LiBJdCdsbCBtYWtlIHRoaW5ncyBtdWNoIGVhc2llciBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEhtbSwgbm93IEknbSB0aGlua2luZywgU01DLUQgKmRvZXMqIHVzZSBJU00sIHNvIGBESUJTYCBpcyBwcm9iYWJseSB0aGUgY3VzdG9tIG5hbWUgZm9yIElTTSBpbiB0aGlzIGtlcm5lbCB0cmVlLiBPciBtYXliZSBpdCdzIGEgbmV3IGZlYXR1cmUsIHNvbWV0aGluZyBJIGhhdmVuJ3Qgc2VlbiBiZWZvcmUuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGJ5IGxvb2tpbmcgYXQgYHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NDEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDoxMDoyOS41MTk5MTM5MTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzMzIwNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvYWZfc21jLmM9MTQxNj1zdGF0aWMgaW50IHNtY19jb25uZWN0X2lzbShzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTQ2NC1cXG5uZXQvc21jL2FmX3NtYy5jOjE0NjU6XFx0aWYgKHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KHNtYy1cXHUwMDNlY29ubi5sZ3ItXFx1MDAzZXNtY2QpKSB7XFxubmV0L3NtYy9hZl9zbWMuYy0xNDY2LVxcdFxcdHJjID0gc21jZF9idWZfYXR0YWNoKHNtYyk7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTI0NDk9c3RhdGljIHZvaWQgc21jX2xpc3Rlbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjU3Mi1cXHRpZiAoaW5pLVxcdTAwM2Vpc19zbWNkIFxcdTAwMjZcXHUwMDI2XFxubmV0L3NtYy9hZl9zbWMuYzoyNTczOlxcdCAgICBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShuZXdfc21jLVxcdTAwM2Vjb25uLmxnci1cXHUwMDNlc21jZCkpIHtcXG5uZXQvc21jL2FmX3NtYy5jLTI1NzQtXFx0XFx0cmMgPSBzbWNkX2J1Zl9hdHRhY2gobmV3X3NtYyk7XFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYz0yMzc9aW50IHNtY2RfY2RjX21zZ19zZW5kKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTI1OS1cXG5uZXQvc21jL3NtY19jZGMuYzoyNjA6XFx0aWYgKHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KGNvbm4tXFx1MDAzZWxnci1cXHUwMDNlc21jZCkpXFxubmV0L3NtYy9zbWNfY2RjLmMtMjYxLVxcdFxcdC8qIGlmIGxvY2FsIHNuZGJ1ZiBzaGFyZXMgdGhlIHNhbWUgbWVtb3J5IHJlZ2lvbiB3aXRoXFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYz0zMzA9c3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYy0zNzAtXFx0XFx0aWYgKGNvbm4tXFx1MDAzZWxnci1cXHUwMDNlaXNfc21jZCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9zbWMvc21jX2NkYy5jOjM3MTpcXHRcXHQgICAgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi1cXHUwMDNlbGdyLVxcdTAwM2VzbWNkKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9zbWMvc21jX2NkYy5jLTM3Mi1cXHRcXHQgICAgc25kYnVmX2Rlc2MpIHtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xMjUzPXZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTI3Mi1cXHRcXHRcXHRzbWNfaXNtX3Vuc2V0X2Nvbm4oY29ubik7XFxubmV0L3NtYy9zbWNfY29yZS5jOjEyNzM6XFx0XFx0aWYgKHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KGxnci1cXHUwMDNlc21jZCkpXFxubmV0L3NtYy9zbWNfY29yZS5jLTEyNzQtXFx0XFx0XFx0c21jZF9idWZfZGV0YWNoKGNvbm4pO1xcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jPTE1MTU9c3RhdGljIHZvaWQgc21jX2Nvbm5fa2lsbChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sIGJvb2wgc29mdClcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xNTI3LVxcdFxcdHNtY19pc21fdW5zZXRfY29ubihjb25uKTtcXG5uZXQvc21jL3NtY19jb3JlLmM6MTUyODpcXHRcXHRpZiAoc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoY29ubi1cXHUwMDNlbGdyLVxcdTAwM2VzbWNkKSlcXG5uZXQvc21jL3NtY19jb3JlLmMtMTUyOS1cXHRcXHRcXHRzbWNkX2J1Zl9kZXRhY2goY29ubik7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MjU2MT1pbnQgc21jX2J1Zl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIGJvb2wgaXNfc21jZClcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTY2LVxcdGlmIChpc19zbWNkIFxcdTAwMjZcXHUwMDI2XFxubmV0L3NtYy9zbWNfY29yZS5jOjI1Njc6XFx0ICAgIHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KHNtYy1cXHUwMDNlY29ubi5sZ3ItXFx1MDAzZXNtY2QpKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTY4LVxcdFxcdGdvdG8gY3JlYXRlX3JtYjtcXG4tLVxcbm5ldC9zbWMvc21jX2lzbS5jPTIzNT1pbnQgc21jX2lzbV9yZWdpc3Rlcl9kbWIoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsIGludCBkbWJfbGVuLFxcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmMtMjU5LVxcbm5ldC9zbWMvc21jX2lzbS5jOjI2MDpib29sIHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KHN0cnVjdCBzbWNkX2RldiAqc21jZClcXG5uZXQvc21jL3NtY19pc20uYy0yNjEte1xcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmg9NTE9dm9pZCBzbWNfaXNtX3VucmVnaXN0ZXJfZG1iKHN0cnVjdCBzbWNkX2RldiAqZGV2LFxcbm5ldC9zbWMvc21jX2lzbS5oLTUyLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpkbWJfZGVzYyk7XFxubmV0L3NtYy9zbWNfaXNtLmg6NTM6Ym9vbCBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShzdHJ1Y3Qgc21jZF9kZXYgKnNtY2QpO1xcbm5ldC9zbWMvc21jX2lzbS5oLTU0LWludCBzbWNfaXNtX2F0dGFjaF9kbWIoc3RydWN0IHNtY2RfZGV2ICpkZXYsIHU2NCB0b2tlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDA6MTA6MjkuNjEzMjQwMjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2NTU3NTQ1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBwYXRjaCBoaWdobGlnaHRzIG1vZGlmaWNhdGlvbnMgdG8gc2V2ZXJhbCBmdW5jdGlvbnM6IGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmAsIGBzbWNkX2NkY19yeF90c2tsZXRgLCBgc21jX2NkY19yeF9oYW5kbGVyYCwgYF9fc21jX2J1Zl9jcmVhdGVgLCBhbmQgYHNtY2RfYnVmX2F0dGFjaGAuIExvb2tpbmcgYXQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb25zLCBpdCBsb29rcyBsaWtlIGBzbWNkX2J1Zl9hdHRhY2hgIGFuZCBgc21jX2J1Zl9jcmVhdGVgIGFyZSB0aGUgZnVuY3Rpb25zIGV4cG9zZWQgZXh0ZXJuYWxseS4gSG9sZCBvbiwgYHNtY2RfY2RjX3J4X2luaXRgIGlzIGFsc28gbm9uLXN0YXRpYywgdGhvdWdoIGl0IHNpbXBseSBzZXRzIHVwIGEgdGFza2xldCBhbmQgSSBkb24ndCBzZWUgYW55IG9idmlvdXMgYXR0YWNrIHN1cmZhY2UgdGhlcmUuIFNvLCB0aGUgY29yZSB0YXJnZXRzIGZvciBmdXp6aW5nLCBnaXZlbiB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaCwgYXJlIHJlYWxseSBgc21jZF9idWZfYXR0YWNoYCBhbmQgYHNtY19idWZfY3JlYXRlYC4gSG1tbSwgYnV0IG5vdyB0aGF0IEkgdGhpbmsgYWJvdXQgaXQsIGBzbWNfYnVmX2NyZWF0ZWAgaXMgdGllZCB0byBjb25uZWN0aW9uIHNldHVwLCBzbyBJIHNob3VsZCBzZWUgaG93IGl0IGlzIGNhbGxlZCBhbmQgaWYgSSBjYW4gY29udHJvbCB0aGUgaW5wdXQuIExldCBtZSBzZWUgd2hlcmUgdGhpcyBgc21jX2J1Zl9jcmVhdGVgIGlzIGNhbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMjksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDA6MTA6MzMuNjc4ODE4NTM3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTgxMjA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfYnVmX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL2FmX3NtYy5jPTEyNjc9c3RhdGljIGludCBzbWNfY29ubmVjdF9yZG1hKHN0cnVjdCBzbWNfc29jayAqc21jLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xMzIyLVxcdC8qIGNyZWF0ZSBzZW5kIGJ1ZmZlciBhbmQgcm1iICovXFxubmV0L3NtYy9hZl9zbWMuYzoxMzIzOlxcdGlmIChzbWNfYnVmX2NyZWF0ZShzbWMsIGZhbHNlKSkge1xcbm5ldC9zbWMvYWZfc21jLmMtMTMyNC1cXHRcXHRyZWFzb25fY29kZSA9IFNNQ19DTENfREVDTF9NRU07XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTE0MTY9c3RhdGljIGludCBzbWNfY29ubmVjdF9pc20oc3RydWN0IHNtY19zb2NrICpzbWMsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE0NTYtXFx0LyogQ3JlYXRlIHNlbmQgYW5kIHJlY2VpdmUgYnVmZmVycyAqL1xcbm5ldC9zbWMvYWZfc21jLmM6MTQ1NzpcXHRyYyA9IHNtY19idWZfY3JlYXRlKHNtYywgdHJ1ZSk7XFxubmV0L3NtYy9hZl9zbWMuYy0xNDU4LVxcdGlmIChyYykge1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0yMDc0PXN0YXRpYyBpbnQgc21jX2xpc3Rlbl9yZG1hX2luaXQoc3RydWN0IHNtY19zb2NrICpuZXdfc21jLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0yMDg0LVxcdC8qIGNyZWF0ZSBzZW5kIGJ1ZmZlciBhbmQgcm1iICovXFxubmV0L3NtYy9hZl9zbWMuYzoyMDg1OlxcdGlmIChzbWNfYnVmX2NyZWF0ZShuZXdfc21jLCBmYWxzZSkpIHtcXG5uZXQvc21jL2FmX3NtYy5jLTIwODYtXFx0XFx0c21jX2Nvbm5fYWJvcnQobmV3X3NtYywgaW5pLVxcdTAwM2VmaXJzdF9jb250YWN0X2xvY2FsKTtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MjA5ND1zdGF0aWMgaW50IHNtY19saXN0ZW5faXNtX2luaXQoc3RydWN0IHNtY19zb2NrICpuZXdfc21jLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0yMTAzLVxcdC8qIENyZWF0ZSBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlcnMgKi9cXG5uZXQvc21jL2FmX3NtYy5jOjIxMDQ6XFx0cmMgPSBzbWNfYnVmX2NyZWF0ZShuZXdfc21jLCB0cnVlKTtcXG5uZXQvc21jL2FmX3NtYy5jLTIxMDUtXFx0aWYgKHJjKSB7XFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYz0zMzA9c3RhdGljIHZvaWQgc21jX2NkY19tc2dfcmVjdl9hY3Rpb24oc3RydWN0IHNtY19zb2NrICpzbWMsXFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYy0zMzgtXFx0LyogQWNxdWlyZSB0aGUgc2VuZCBidWZmZXIgb25jZSwgcGFpcmluZyB3aXRoIHRoZSBzbXBfc3RvcmVfcmVsZWFzZSgpIGluXFxubmV0L3NtYy9zbWNfY2RjLmM6MzM5OlxcdCAqIF9fc21jX2J1Zl9jcmVhdGUoKS9zbWNkX2J1Zl9hdHRhY2goKS4gIE9uIHRoZSBTTUMtRCBETUItbm9jb3B5IHBhdGhcXG5uZXQvc21jL3NtY19jZGMuYy0zNDAtXFx0ICogdGhlIGdob3N0IHNuZGJ1Zl9kZXNjIGlzIGF0dGFjaGVkIG9ubHkgYWZ0ZXIgdGhlIGNvbm5lY3Rpb24gaXMgYWxyZWFkeVxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmM9NDYyPXN0YXRpYyB2b2lkIHNtY2RfY2RjX3J4X3Rza2xldChzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYy00NzEtXFx0XFx0cmV0dXJuO1xcbm5ldC9zbWMvc21jX2NkYy5jOjQ3MjpcXHQvKiBQYWlyIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBfX3NtY19idWZfY3JlYXRlKCk6IHRoZSBjb25uZWN0aW9uXFxubmV0L3NtYy9zbWNfY2RjLmMtNDczLVxcdCAqIGlzIHB1Ymxpc2hlZCBiZWZvcmUgaXRzIFJNQiBpcyBhbGxvY2F0ZWQsIHNvIGJhaWwgd2hpbGUgcm1iX2Rlc2MgaXNcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jPTQ5Nz1zdGF0aWMgdm9pZCBzbWNfY2RjX3J4X2hhbmRsZXIoc3RydWN0IGliX3djICp3Yywgdm9pZCAqYnVmKVxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmMtNTEzLVxcdGNvbm4gPSBzbWNfbGdyX2ZpbmRfY29ubihudG9obChjZGMtXFx1MDAzZXRva2VuKSwgbGdyKTtcXG5uZXQvc21jL3NtY19jZGMuYzo1MTQ6XFx0LyogUGFpciB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gX19zbWNfYnVmX2NyZWF0ZSgpOiBiYWlsIHdoaWxlIHRoZVxcbm5ldC9zbWMvc21jX2NkYy5jLTUxNS1cXHQgKiBSTUIgaXMgdW5zZXQgKHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uKCkgZGVyZWZlcmVuY2VzIGl0KSB0byBhdm9pZCBhXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MjM5MD1zdGF0aWMgc3RydWN0IHNtY19idWZfZGVzYyAqc21jZF9uZXdfYnVmX2NyZWF0ZShzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNDI1LVxcbm5ldC9zbWMvc21jX2NvcmUuYzoyNDI2OnN0YXRpYyBpbnQgX19zbWNfYnVmX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgYm9vbCBpc19zbWNkLCBib29sIGlzX3JtYilcXG5uZXQvc21jL3NtY19jb3JlLmMtMjQyNy17XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MjUzOT12b2lkIHNtY19ybWJfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTYwLSAqL1xcbm5ldC9zbWMvc21jX2NvcmUuYzoyNTYxOmludCBzbWNfYnVmX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgYm9vbCBpc19zbWNkKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTYyLXtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTY5LVxcbm5ldC9zbWMvc21jX2NvcmUuYzoyNTcwOlxcdHJjID0gX19zbWNfYnVmX2NyZWF0ZShzbWMsIGlzX3NtY2QsIGZhbHNlKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMjU3MS1cXHRpZiAocmMpXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMjU3NS1cXHQvKiBjcmVhdGUgcm1iICovXFxubmV0L3NtYy9zbWNfY29yZS5jOjI1NzY6XFx0cmMgPSBfX3NtY19idWZfY3JlYXRlKHNtYywgaXNfc21jZCwgdHJ1ZSk7XFxubmV0L3NtYy9zbWNfY29yZS5jLTI1NzctXFx0aWYgKHJjIFxcdTAwMjZcXHUwMDI2IHNtYy1cXHUwMDNlY29ubi5zbmRidWZfZGVzYykge1xcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jPTI1ODg9aW50IHNtY2RfYnVmX2F0dGFjaChzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yNjE2LVxcdCAqIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSByZWFjaGFibGUgdG8gdGhlIElTTSBkZXZpY2UgKHNtY19pc21fc2V0X2Nvbm4oKVxcbm5ldC9zbWMvc21jX2NvcmUuYzoyNjE3OlxcdCAqIHJhbiBpbiBfX3NtY19idWZfY3JlYXRlKCkpLCBzbyB0aGUgQ0RDIHJlY2VpdmUgdGFza2xldCBtdXN0IG9ic2VydmVcXG5uZXQvc21jL3NtY19jb3JlLmMtMjYxOC1cXHQgKiB0aGUgZnVsbHkgaW5pdGlhbGlzZWQgZ2hvc3QgYnVmZmVyIG9uY2UgaXQgc2VlcyBhIG5vbi1OVUxMXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmg9NTgyPXZvaWQgc21jX3NtY3JfdGVybWluYXRlX2FsbChzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYpO1xcbm5ldC9zbWMvc21jX2NvcmUuaDo1ODM6aW50IHNtY19idWZfY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBib29sIGlzX3NtY2QpO1xcbm5ldC9zbWMvc21jX2NvcmUuaC01ODQtaW50IHNtY2RfYnVmX2F0dGFjaChzdHJ1Y3Qgc21jX3NvY2sgKnNtYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAwOjEwOjMzLjc0MDYzNDk3N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTU3NzY3NjE3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFNNQyBSZWNlaXZlIFBhdGggVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaCwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBzbWNfYnVmX2NyZWF0ZWAgYW5kIGBzbWNkX2J1Zl9hdHRhY2hgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gVGhleSBhcmUgdGhlIGNvcmUgb2YgYnVmZmVyIG1hbmFnZW1lbnQgaW4gdGhpcyBhcmVhLCB3aGljaCBtYWtlcyB0aGVtIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuIEFmdGVyIGEgbGl0dGxlIG1vcmUgZGlnZ2luZywgSSByZWFsaXplIHRoYXQgYHNtY2RfYnVmX2F0dGFjaGAgaXMgY2FsbGVkIHdpdGhpbiBjb25uZWN0aW9uIHNldHVwIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBzbWNfY29ubmVjdF9pc21gIGFuZCBgc21jX2xpc3Rlbl93b3JrYC4gVGhlc2UgYXJlIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbiwgYnV0IHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIGBzbWNfY2RjX21zZ19yZWN2X2FjdGlvbmAgbWlnaHQgYmUgdHJpZ2dlcmVkIGJlZm9yZSBrZXkgYnVmZmVycyAoYGNvbm4tXHUwMDNlc25kYnVmX2Rlc2NgIG9yIGBjb25uLVx1MDAzZXJtYl9kZXNjYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBUaGF0J3MgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGNvZGUgYW5kIGZ1enppbmcgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgaXMgZXhhY3RseSB0aGUga2luZCBvZiB0aGluZyB0aGF0IGNvdWxkIGV4cG9zZSB0aGlzIGtpbmQgb2YgYnVnLlxuXG5TaW5jZSB3ZSBhcmUgZm9jdXNlZCBvbiB0aGUgcmFjZSBjb25kaXRpb24sIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gaW5jbHVkZSB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgcmVjZWl2ZSBwYXRoLiBgc21jX2NkY19tc2dfcmVjdl9hY3Rpb25gIGlzIHN0YXRpYywgYnV0IGl0J3MgY2FsbGVkIGJ5IGBzbWNfY2RjX21zZ19yZWN2YCwgd2hpY2ggaXMgYWxzbyBzdGF0aWMuIFRoZXNlIGFyZSwgaW4gdHVybiwgY2FsbGVkIGJ5IGBzbWNkX2NkY19yeF90c2tsZXRgIGFuZCBgc21jX2NkY19yeF9oYW5kbGVyYC4gSSBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGFuZCBpbmNsdWRlIHRoZXNlLiBgc21jZF9jZGNfcnhfdHNrbGV0YCBpcyBhIHRhc2tsZXQgaGFuZGxlciwgYW5kIGBzbWNfY2RjX3J4X2hhbmRsZXJgIGlzIGEgd29ya3F1ZXVlL3Rhc2tsZXQgaGFuZGxlci4gVGhlIHJlY2VpdmUgcGF0aCBpcyB1bHRpbWF0ZWx5IHRyaWdnZXJlZCBieSBlaXRoZXIgdGhlIElCIGRldmljZSBvciB0aGUgSVNNIGRldmljZS4gU2luY2UgYHNtY19idWZfY3JlYXRlYCBhbmQgYHNtY2RfYnVmX2F0dGFjaGAgYXJlIGZ1bmRhbWVudGFsIHRvIHRoZSByZWNlaXZlIHByb2Nlc3MsIEkgYmVsaWV2ZSBmdXp6aW5nIHRoZXNlIHNob3VsZCBleHBvc2UgdGhlIHZ1bG5lcmFiaWxpdHkuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGxvb2sgZm9yIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgc21jX2NkYy5jYCB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBMZXQncyBzZWUuLi5JJ3ZlIGdvdCBgc21jX2NkY19nZXRfZnJlZV9zbG90YCwgYHNtY19jZGNfbXNnX3NlbmRgLCBgc21jcl9jZGNfbXNnX3NlbmRfdmFsaWRhdGlvbmAsIGBzbWNfY2RjX2dldF9zbG90X2FuZF9tc2dfc2VuZGAsIGBzbWNfY2RjX3dhaXRfcGVuZF90eF93cmAsIGBzbWNkX2NkY19tc2dfc2VuZGAsIGFuZCBgc21jZF9jZGNfcnhfaW5pdGAuIGBzbWNfYnVmX2NyZWF0ZWAgYW5kIGBzbWNkX2J1Zl9hdHRhY2hgIHdpbGwgZ28gaW50byBgRm9jdXNTeW1ib2xzYC4gVGhlbiwgYHNtY2RfY2RjX21zZ19zZW5kYCBhbmQgYHNtY19jZGNfbXNnX3NlbmRgIGxvb2sgcmVsZXZhbnQgc2luY2UgdGhleSBhbHNvIGludGVyYWN0IHdpdGggdGhlIGJ1ZmZlcnMsIHNvIHRob3NlIHdpbGwgYmUgYWRkZWQgdG9vLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBidWlsZCBjb25maWd1cmF0aW9ucy4gSSd2ZSBnb3QgYFNNQ2AsIGBJTkZJTklCQU5EYCwgYERJQlNgLCBhbmQgYERJQlNfTE9gLiBJIHJlbWVtYmVyIHNlZWluZyBzb21ldGhpbmcgYWJvdXQgYGRyaXZlcnMvZGlicy9LY29uZmlnYCB3aGVuIEkgd2FzIGxvb2tpbmcgdGhyb3VnaCB0aGUgZ3JlcHBlciBvdXRwdXQsIHNvIHRoYXQgaXMgY29ycmVjdC4gSSBmb3VuZCBgRElCU2AgaW4gdGhlIGBLY29uZmlnYCBmaWxlLCBzbyB0aGF0IGNvbmZpcm1zIGl0LiBUaGVuLCBJIHJlbWVtYmVyZWQgdGhhdCBgSU5FVGAgaXMgYWxzbyByZXF1aXJlZCBmb3IgYFNNQ2AuIFNvLCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MgYXJlIGBTTUNgLCBgSU5GSU5JQkFORGAsIGBESUJTYCwgYERJQlNfTE9gLCBhbmQgYElORVRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ3MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDoxMjoyOS41MTc0MDA2NDlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5OTYwNTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBESUJTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZGlicy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kaWJzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZHJpdmVycy9kaWJzL0tjb25maWc6Mjpjb25maWcgRElCU1xcbmRyaXZlcnMvZGlicy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkRpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTMtXFxuZHJpdmVycy9kaWJzL0tjb25maWc6MTQ6Y29uZmlnIERJQlNfTE9cXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xNS1cXHRib29sIFxcXCJJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAwOjEyOjI5LjU3NzM2NzU5OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjU0MDY3ODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBc3Nlc3NpbmcgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgSSBzZWUgdGhlIHBpZWNlcyBhcmUgaW4gcGxhY2UsIHRoZSBjb3JlIGNvbXBvbmVudCBpcyBpbmRlZWQgcHJlc2VudC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGVsdmUgZGVlcGVyIGludG8gaXRzIGRlcGVuZGVuY2llcy4gTGV0J3MgbWFrZSBzdXJlIGBTTUNgIGlzbid0IHJlbHlpbmcgb24gYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGNyZWF0ZSBwcm9ibGVtcyBkb3duIHRoZSBsaW5lLCBvciBpbnRyb2R1Y2UgYSBjYXNjYWRlIG9mIGlzc3VlcyBpZiBvbmUgY29tcG9uZW50IGZhaWxzLiBHb3R0YSBiZSB0aG9yb3VnaC4gVGltZSB0byBjaGVjayB0aGUgZGVwZW5kZW5jeSB0cmVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA0NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAwOjEyOjMyLjIzMTQzODMwN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcwMzAxNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnPTI9Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG5uZXQvc21jL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBESUJTXFxubmV0L3NtYy9LY29uZmlnLTUtXFx0aGVscFxcbi0tXFxubmV0L3NtYy9LY29uZmlnPTE0PWNvbmZpZyBTTUNfRElBR1xcbm5ldC9zbWMvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxubmV0L3NtYy9LY29uZmlnOjE2OlxcdGRlcGVuZHMgb24gU01DXFxubmV0L3NtYy9LY29uZmlnLTE3LVxcdGhlbHBcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZz0yMz1jb25maWcgU01DX0hTX0NUUkxfQlBGXFxubmV0L3NtYy9LY29uZmlnLTI0LVxcdGJvb2wgXFxcIkdlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcXFwiXFxubmV0L3NtYy9LY29uZmlnOjI1OlxcdGRlcGVuZHMgb24gU01DIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgQlBGX1NZU0NBTExcXG5uZXQvc21jL0tjb25maWctMjYtXFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAwOjEyOjMyLjI4ODQ3Mzc3NloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ3OTQwMzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGNvcmUgZGVwZW5kZW5jaWVzIGhlcmUsIGFuZCBpdCBsb29rcyBsaWtlIGBJTkVUYCwgYElORklOSUJBTkRgLCBhbmQgYERJQlNgIGFyZSB0aGUga2V5IG9uZXMgSSBuZWVkIHRvIGFkZHJlc3MuIFRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGV4cGxpY2l0bHkgZW5hYmxlZCBhbmQgdGhhdCBJJ20gY292ZXJpbmcgYWxsIGJhc2VzLCBJJ20gZ29pbmcgdG8gYWRkIGBTTUNgLCBgSU5GSU5JQkFORGAsIGBESUJTYCwgYW5kIGBESUJTX0xPYCB0byBgRW5hYmxlQ29uZmlnc2AuIFdoaWxlIGBJTkVUYCBpcyBnZW5lcmFsbHkgZW5hYmxlZCBieSBkZWZhdWx0IGluIG1vc3Qgc2V0dXBzLCBJJ20gZ29pbmcgdG8gaW5jbHVkZSBpdCBqdXN0IGZvciBjbGFyaXR5IGFuZCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLlxuXG5OZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgYElORklOSUJBTkRgIGl0c2VsZiBoYXMgYW55IGZ1cnRoZXIgZGVwZW5kZW5jaWVzIHRoYXQgSSBzaG91bGQgYWxzbyBiZSBhd2FyZSBvZi4gTGV0J3Mgc2VlIHdoYXQgZWxzZSBuZWVkcyBlbmFibGluZyB0byBnZXQgdGhhdCBydW5uaW5nIHNtb290aGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ0MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAwOjEyOjM1LjYzNjQxNjMxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE5MDUwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORklOSUJBTkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjI6bWVudWNvbmZpZyBJTkZJTklCQU5EXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiSW5maW5pQmFuZCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9MTY9aWYgSU5GSU5JQkFORFxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTE3LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjE4OmNvbmZpZyBJTkZJTklCQU5EX1VTRVJfTUFEXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMTktXFx0dHJpc3RhdGUgXFxcIkluZmluaUJhbmQgdXNlcnNwYWNlIE1BRCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMjctXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6Mjg6Y29uZmlnIElORklOSUJBTkRfVVNFUl9BQ0NFU1NcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiSW5maW5pQmFuZCB1c2Vyc3BhY2UgYWNjZXNzICh2ZXJicyBhbmQgQ00pXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMzktXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NDA6Y29uZmlnIElORklOSUJBTkRfVVNFUl9BQ0NFU1NfQ09SRVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTQxLVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTQzLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjQ0OmNvbmZpZyBJTkZJTklCQU5EX1VTRVJfTUVNXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDUtXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNTAtXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NTE6Y29uZmlnIElORklOSUJBTkRfT05fREVNQU5EX1BBR0lOR1xcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTUyLVxcdGJvb2wgXFxcIkluZmluaUJhbmQgb24tZGVtYW5kIHBhZ2luZyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNjMtXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NjQ6Y29uZmlnIElORklOSUJBTkRfQUREUl9UUkFOU1xcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTY1LVxcdGJvb2wgXFxcIlJETUEvQ01cXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03MS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo3Mjpjb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TX0NPTkZJR0ZTXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNzMtXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctODAtXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6ODE6Y29uZmlnIElORklOSUJBTkRfVklSVF9ETUFcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy04Mi1cXHRkZWZfYm9vbCAhSElHSE1FTVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JuZ19yZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JuZ19yZS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfQk5HX1JFXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JuZ19yZS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIE5leHQgZ2VuZXJhdGlvbiBSb0NFIEhDQSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9CTlhUX1JFXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSBOZXR4dHJlbWUgSENBIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfQ1hHQjRcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDaGVsc2lvIFQ0L1Q1IFJETUEgRHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9LY29uZmlnLTYtXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9LY29uZmlnOjc6Y29uZmlnIElORklOSUJBTkRfRUZBXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9LY29uZmlnLTgtXFx0dHJpc3RhdGUgXFxcIkFtYXpvbiBFbGFzdGljIEZhYnJpYyBBZGFwdGVyIChFRkEpIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfRVJETUFcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJBbGliYWJhIEVsYXN0aWMgUkRNQSBBZGFwdGVyIChFUkRNQSkgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSEZJMVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQ29ybmVsaXMgT1BYIEdlbjEgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0hOU19ISVAwOFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJIaXNpbGljb24gSGlwMDggRmFtaWx5IFJvQ0Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9LY29uZmlnLTMtXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL0tjb25maWc6NDpjb25maWcgSU5GSU5JQkFORF9JT05JQ1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9LY29uZmlnLTUtXFx0dHJpc3RhdGUgXFxcIkFNRCBQZW5zYW5kbyBEU0MgUkRNQS9Sb0NFIFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSVJETUFcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSBFdGhlcm5ldCBQcm90b2NvbCBEcml2ZXIgZm9yIFJETUFcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfTVRIQ0FcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJNZWxsYW5veCBIQ0Egc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnLTktXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWc6MTA6Y29uZmlnIElORklOSUJBTkRfTVRIQ0FfREVCVUdcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0xMS1cXHRib29sIFxcXCJWZXJib3NlIGRlYnVnZ2luZyBvdXRwdXRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfT0NSRE1BXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkVtdWxleCBPbmUgQ29ubmVjdCBIQ0Egc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9xZWRyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvcWVkci9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfUUVEUlxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9xZWRyL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiUUxvZ2ljIFJvQ0UgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX1VTTklDXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVmVyYnMgc3VwcG9ydCBmb3IgQ2lzY28gVklDXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3Ztd19wdnJkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody92bXdfcHZyZG1hL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9WTVdBUkVfUFZSRE1BXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3Ztd19wdnJkbWEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJWTXdhcmUgUGFyYXZpcnR1YWxpemVkIFJETUEgRHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3JkbWF2dC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3JkbWF2dC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfUkRNQVZUXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3JkbWF2dC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlJETUEgdmVyYnMgdHJhbnNwb3J0IGxpYnJhcnlcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JUE9JQlxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJUC1vdmVyLUluZmluaUJhbmRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMTEtXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjEyOmNvbmZpZyBJTkZJTklCQU5EX0lQT0lCX0NNXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIklQLW92ZXItSW5maW5pQmFuZCBDb25uZWN0ZWQgTW9kZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTI2LVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZzoyNzpjb25maWcgSU5GSU5JQkFORF9JUE9JQl9ERUJVR1xcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJJUC1vdmVyLUluZmluaUJhbmQgZGVidWdnaW5nXFxcIiBpZiBFWFBFUlRcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy00MS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWc6NDI6Y29uZmlnIElORklOSUJBTkRfSVBPSUJfREVCVUdfREFUQVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy00My1cXHRib29sIFxcXCJJUC1vdmVyLUluZmluaUJhbmQgZGF0YSBwYXRoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JU0VSXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiaVNDU0kgRXh0ZW5zaW9ucyBmb3IgUkRNQSAoaVNFUilcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JU0VSVFxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlcnQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJpU0NTSSBFeHRlbnNpb25zIGZvciBSRE1BIChpU0VSKSB0YXJnZXQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTItXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6Mzpjb25maWcgSU5GSU5JQkFORF9SVFJTXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNC1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNi1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZzo3OmNvbmZpZyBJTkZJTklCQU5EX1JUUlNfQ0xJRU5UXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctOC1cXHR0cmlzdGF0ZSBcXFwiUlRSUyBjbGllbnQgbW9kdWxlXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctMTctXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6MTg6Y29uZmlnIElORklOSUJBTkRfUlRSU19TRVJWRVJcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy0xOS1cXHR0cmlzdGF0ZSBcXFwiUlRSUyBzZXJ2ZXIgbW9kdWxlXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9TUlBcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkluZmluaUJhbmQgU0NTSSBSRE1BIFByb3RvY29sXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnB0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycHQvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX1NSUFRcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycHQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJbmZpbmlCYW5kIFNDU0kgUkRNQSBQcm90b2NvbCB0YXJnZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDA6MTI6MzUuNzM4MzI1MDc5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNTQ5NTg1NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBEZWNpc2lvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gcHJvY2Vzcy4gSSBzZWUgYElORklOSUJBTkRgIOKAkyBhaCwgdGhhdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGBtZW51Y29uZmlnYCBvcHRpb24uIExldCdzIGFkZCB0aGF0IGRpcmVjdGx5IHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gTm8gbmVlZCB0byBvdmVydGhpbmsgaXQuXG5cbk5leHQsIEknbGwgcXVpY2tseSBjaGVjayBgSU5FVGAuIEl0J3MgYSBzdGFuZGFyZCBjb25maWcsIHNvIEknbGwgaW5jbHVkZSB0aGF0IGFzIHdlbGwuIEZpbmUuXG5cblRoZXJlZm9yZSwgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LCBhcyBpdCBjdXJyZW50bHkgc3RhbmRzLCBpbmNsdWRlcyBgU01DYCwgYElORklOSUJBTkRgLCBgRElCU2AsIGBESUJTX0xPYCwgYW5kIGBJTkVUYC5cblxuTm93LCB0aW1lIHRvIGRvdWJsZS1jaGVjayB0aGUgYEZvY3VzU3ltYm9sc2AuIExldCdzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgcmlnaHQgb25lcy4gSSBoYXZlIGBzbWNfYnVmX2NyZWF0ZWAsIGBzbWNkX2J1Zl9hdHRhY2hgLCBgc21jZF9jZGNfbXNnX3NlbmRgLCBhbmQgYHNtY19jZGNfbXNnX3NlbmRgLi4uIFxuXG5XYWl0LCBob2xkIG9uIGEgc2Vjb25kLiBJdCBsb29rZWQgZm9yIGEgbW9tZW50IGxpa2UgYHNtY2RfY2RjX21zZ19zZW5kYCBtaWdodCBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYHNtY19jZGNfbXNnX3NlbmRgLCB3aGljaCB3b3VsZCBzaW1wbGlmeSB0aGlzLiBCdXQgdGhhdCdzIG5vdCByaWdodC4gVGhleSdyZSBkaXN0aW5jdC4gT2theSwgbm8gY29uZnVzaW9uIHRoZXJlLiBOb3cgSSBuZWVkIHRvIGNoZWNrIGBzbWNkX2NkY19tc2dfc2VuZGAgdG8gY2xhcmlmeSBob3cgdGhhdCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2NzUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDA6MTI6MzkuOTkzMjg2NDU1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDcxMzUwMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jZF9jZGNfbXNnX3NlbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfY2RjLmM9MjA5PWludCBzbWNfY2RjX2dldF9zbG90X2FuZF9tc2dfc2VuZChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYy0yMTgtXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZjb25uLVxcdTAwM2VzZW5kX2xvY2spO1xcbm5ldC9zbWMvc21jX2NkYy5jOjIxOTpcXHRcXHRyYyA9IHNtY2RfY2RjX21zZ19zZW5kKGNvbm4pO1xcbm5ldC9zbWMvc21jX2NkYy5jLTIyMC1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y29ubi1cXHUwMDNlc2VuZF9sb2NrKTtcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jPTIyOD12b2lkIHNtY19jZGNfd2FpdF9wZW5kX3R4X3dyKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTIzNi0gKi9cXG5uZXQvc21jL3NtY19jZGMuYzoyMzc6aW50IHNtY2RfY2RjX21zZ19zZW5kKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG5uZXQvc21jL3NtY19jZGMuYy0yMzgte1xcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmg9Mjk3PWludCBzbWNfY2RjX2dldF9zbG90X2FuZF9tc2dfc2VuZChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xcbm5ldC9zbWMvc21jX2NkYy5oOjI5ODppbnQgc21jZF9jZGNfbXNnX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcXG5uZXQvc21jL3NtY19jZGMuaC0yOTktaW50IHNtY3JfY2RjX21zZ19zZW5kX3ZhbGlkYXRpb24oc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxcbi0tXFxubmV0L3NtYy9zbWNfdHguYz02MDg9c3RhdGljIGludCBzbWNkX3R4X3NuZGJ1Zl9ub25lbXB0eShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxuLS1cXG5uZXQvc21jL3NtY190eC5jLTYxNi1cXHRpZiAoIXJjKVxcbm5ldC9zbWMvc21jX3R4LmM6NjE3OlxcdFxcdHJjID0gc21jZF9jZGNfbXNnX3NlbmQoY29ubik7XFxubmV0L3NtYy9zbWNfdHguYy02MTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAwOjEyOjQwLjE0MDQyNTMzM1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzkwMTgwNDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIENEQyBNZXNzYWdlIFNlbmRpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyB0aGVzZSBDREMgbWVzc2FnZXMgYXJlIGJlaW5nIGhhbmRsZWQuIE15IGluaXRpYWwgZm9jdXMgaGFzIGxhbmRlZCBvbiBgc21jZF9jZGNfbXNnX3NlbmRgLiBUaGF0J3MgdGhlIG9uZSB0aGF0IHNlZW1zIHRvIGJlIGluIHBsYXkgcmlnaHQgbm93LiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyB0aGF0ICp0aGUqIG9ubHkgb25lPyBJdCBqdXN0IHRyaWdnZXJlZCBhIHRob3VnaHQg4oCTIEkgbmVlZCB0byBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0IHdpdGggYHNtY19jZGNfbXNnX3NlbmRgLiBJIHdvbmRlciB3aGF0IHRoZSBkaWZmZXJlbmNlIGlzLCBpZiBhbnk/IEFyZSB0aGVzZSB0d28gZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQsIG9yIGlzIHRoZXJlIGEgc3VidGxlLCBvciBtYXliZSBldmVuIHNpZ25pZmljYW50LCBkaXN0aW5jdGlvbiBpbiB0aGVpciBpbXBsZW1lbnRhdGlvbiBvciB1c2UgY2FzZXM/IFRoaXMgd2FycmFudHMgYSBkZWVwZXIgbG9vazsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgaGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIGNyaXRpY2FsIGJ5IGFzc3VtaW5nIHRoZSB1c2Ugb2Ygb25lIG92ZXIgdGhlIG90aGVyLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2NTAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMDoxMjo0My41MzA2MDkxMjZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDIyOTc5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfY2RjX21zZ19zZW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jLmg9MTk1PXN0cnVjdCBzbWNfY29ubmVjdGlvbiB7XFxuLS1cXG5uZXQvc21jL3NtYy5oLTI0MC1cXHR3YWl0X3F1ZXVlX2hlYWRfdFxcdGNkY19wZW5kX3R4X3dxOyAvKiB3YWtldXAgb24gbm8gY2RjX3BlbmRfdHhfd3IqL1xcbm5ldC9zbWMvc21jLmg6MjQxOlxcdHN0cnVjdCBkZWxheWVkX3dvcmtcXHR0eF93b3JrO1xcdC8qIHJldHJ5IG9mIHNtY19jZGNfbXNnX3NlbmQgKi9cXG5uZXQvc21jL3NtYy5oLTI0Mi1cXHR1MzJcXHRcXHRcXHR0eF9vZmY7XFx0XFx0LyogYmFzZSBvZmZzZXQgaW4gcGVlciBybWIgKi9cXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jPTk0PXN0YXRpYyBpbmxpbmUgdm9pZCBzbWNfY2RjX2FkZF9wZW5kaW5nX3NlbmQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmMtMTExLVxcbm5ldC9zbWMvc21jX2NkYy5jOjExMjppbnQgc21jX2NkY19tc2dfc2VuZChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sXFxubmV0L3NtYy9zbWNfY2RjLmMtMTEzLVxcdFxcdCAgICAgc3RydWN0IHNtY193cl9idWYgKndyX2J1ZixcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jPTE3ND1zdGF0aWMgaW50IHNtY3JfY2RjX2dldF9zbG90X2FuZF9tc2dfc2VuZChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxuLS1cXG5uZXQvc21jL3NtY19jZGMuYy0yMDEtXFx0fVxcbm5ldC9zbWMvc21jX2NkYy5jOjIwMjpcXHRyYyA9IHNtY19jZGNfbXNnX3NlbmQoY29ubiwgd3JfYnVmLCBwZW5kKTtcXG5uZXQvc21jL3NtY19jZGMuYy0yMDMtXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmNvbm4tXFx1MDAzZXNlbmRfbG9jayk7XFxuLS1cXG5uZXQvc21jL3NtY19jZGMuaD0yOTQ9dm9pZCBzbWNfY2RjX3dhaXRfcGVuZF90eF93cihzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xcbm5ldC9zbWMvc21jX2NkYy5oOjI5NTppbnQgc21jX2NkY19tc2dfc2VuZChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCBzbWNfd3JfYnVmICp3cl9idWYsXFxubmV0L3NtYy9zbWNfY2RjLmgtMjk2LVxcdFxcdCAgICAgc3RydWN0IHNtY19jZGNfdHhfcGVuZCAqcGVuZCk7XFxuLS1cXG5uZXQvc21jL3NtY190eC5jPTU1MD1zdGF0aWMgaW50IHNtY3JfdHhfc25kYnVmX25vbmVtcHR5KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4tLVxcbm5ldC9zbWMvc21jX3R4LmMtNTk1LVxcbm5ldC9zbWMvc21jX3R4LmM6NTk2OlxcdHJjID0gc21jX2NkY19tc2dfc2VuZChjb25uLCB3cl9idWYsIHBlbmQpO1xcbm5ldC9zbWMvc21jX3R4LmMtNTk3LVxcdGlmICghcmMgXFx1MDAyNlxcdTAwMjYgcGZsYWdzLVxcdTAwM2V1cmdfZGF0YV9wcmVzZW50KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAwOjEyOjQzLjY0MDg0Njc3NloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjM2MzczNTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBTTUMtRCBETUItbm9jb3B5IFBhdGgqKlxuXG5Pa2F5LCBJJ3ZlIGdvdCB0aGUgY29udGV4dCBoZXJlLiBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gdGhlIFNNQy1EIERNQi1ub2NvcHkgY29ubmVjdGlvbiBzZXR1cC4gQ2xlYXJseSwgYm90aCBgc21jX2J1Zl9jcmVhdGVgIGFuZCBgc21jZF9idWZfYXR0YWNoYCBhcmUgY3JpdGljYWwgZnVuY3Rpb25zIGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UsIGFsb25nIHdpdGggYHNtY2RfY2RjX21zZ19zZW5kYCBhbmQgYHNtY19jZGNfbXNnX3NlbmRgIGFyZSBpbmNsdWRlZCBpbiBteSBmdXp6aW5nIHRhcmdldCBsaXN0LCBzbyBJJ2xsIGFkZCB0aGVtIHRvIHRoZSBgRm9jdXNTeW1ib2xzYC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBtb2RpZmljYXRpb25zIHRoYXQgYXJlbid0IHN0YXRpYy4gR29vZCwgYHNtY19jZGNfbXNnX3JlY3ZfYWN0aW9uYCwgYHNtY19jZGNfcnhfaGFuZGxlcmAsIGBzbWNkX2NkY19yeF90c2tsZXRgLCBhbmQgYF9fc21jX2J1Zl9jcmVhdGVgIGFyZSBhbGwgc3RhdGljLCBzbyB0aGUgZm91ciBJIGlkZW50aWZpZWQgYXJlIHRoZSBvbmx5IG9uZXMgSSBuZWVkLlxuXG5OZXh0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBESUJTYCBhbmQgYERJQlNfTE9gIGFyZSBlc3NlbnRpYWwgdG8gcmVwcm9kdWNlIHRoZSBpc3N1ZS4gSXQgbG9va3MgbGlrZSBgRElCU2AgcHJvdmlkZXMgdGhlIElTTSBkZXZpY2UgYWJzdHJhY3Rpb24uIENvbnNpZGVyaW5nIFNNQy1EIHJlcXVpcmVzIElTTSBhbmQgRE1CLW5vY29weSBjb25uZWN0aW9uIHNldHVwLCB0aGF0IHBhdGggaXMgY2xlYXJseSBnb2luZyB0byBiZSB0cmlnZ2VyZWQuIFNvLCB5ZXMsIHRoZXkgYXJlIGluZGVlZCByZXF1aXJlZC4gYERJQlNfTE9gIGVuYWJsZXMgdGhlIGxvb3BiYWNrIGRldmljZSwgc28gaXQncyBhIGNyaXRpY2FsIGNvbXBvbmVudC5cblxuV2l0aCB0aGF0IHVuZGVyc3RhbmRpbmcsIEkgY2FuIG5vdyBmb3JtdWxhdGUgYSBjb25jaXNlIHJlc3BvbnNlIGZvciBteSByZXN1bHRzLlxuXG5IZXJlJ3MgbXkgY29uY2x1c2lvbjpcblxuKiAgICoqV29ydGhGdXp6aW5nKio6IHRydWVcbiogICAqKkZvY3VzU3ltYm9scyoqOiBgW1wic21jX2J1Zl9jcmVhdGVcIiwgXCJzbWNkX2J1Zl9hdHRhY2hcIiwgXCJzbWNkX2NkY19tc2dfc2VuZFwiLCBcInNtY19jZGNfbXNnX3NlbmRcIl1gXG4qICAgKipFbmFibGVDb25maWdzKio6IGBbXCJTTUNcIiwgXCJJTkZJTklCQU5EXCIsIFwiRElCU1wiLCBcIkRJQlNfTE9cIiwgXCJJTkVUXCJdYFxuKiAgICoqUmVhc29uaW5nKio6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQy1EIERNQi1ub2NvcHkgY29ubmVjdGlvbiBzZXR1cCBwYXRoIHdoZXJlIGEgY29uY3VycmVudCBDREMgcmVjZWl2ZSBoYW5kbGVyIGNvdWxkIG9ic2VydmUgYW4gdW5pbml0aWFsaXplZCBzZW5kIG9yIHJlY2VpdmUgYnVmZmVyLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBjb25uZWN0aW9uIHNldHVwIGFuZCBidWZmZXIgY3JlYXRpb24vYXR0YWNobWVudCwgYXMgd2VsbCBhcyBDREMgbWVzc2FnZSBzZW5kaW5nIHRvIHRyaWdnZXIgdGhlIHJlY2VpdmUgcGF0aC5cIlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDU1NCwiT3V0cHV0VG9rZW5zIjoxNTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDA6MTI6NTAuODc3MjIzMTk4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxNzMzOTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTTUNcIixcbiAgICBcIklORklOSUJBTkRcIixcbiAgICBcIkRJQlNcIixcbiAgICBcIkRJQlNfTE9cIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbWNfYnVmX2NyZWF0ZVwiLFxuICAgIFwic21jZF9idWZfYXR0YWNoXCIsXG4gICAgXCJzbWNkX2NkY19tc2dfc2VuZFwiLFxuICAgIFwic21jX2NkY19tc2dfc2VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQy1EIERNQi1ub2NvcHkgY29ubmVjdGlvbiBzZXR1cCBwYXRoIHdoZXJlIGEgY29uY3VycmVudCBDREMgcmVjZWl2ZSBoYW5kbGVyIGNvdWxkIG9ic2VydmUgYW4gdW5pbml0aWFsaXplZCBzZW5kIG9yIHJlY2VpdmUgYnVmZmVyLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBjb25uZWN0aW9uIHNldHVwIGFuZCBidWZmZXIgY3JlYXRpb24vYXR0YWNobWVudCwgYXMgd2VsbCBhcyBDREMgbWVzc2FnZSBzZW5kaW5nIHRvIHRyaWdnZXIgdGhlIHJlY2VpdmUgcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTTUNcIixcbiAgICBcIklORklOSUJBTkRcIixcbiAgICBcIkRJQlNcIixcbiAgICBcIkRJQlNfTE9cIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbWNfYnVmX2NyZWF0ZVwiLFxuICAgIFwic21jZF9idWZfYXR0YWNoXCIsXG4gICAgXCJzbWNkX2NkY19tc2dfc2VuZFwiLFxuICAgIFwic21jX2NkY19tc2dfc2VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNNQy1EIERNQi1ub2NvcHkgY29ubmVjdGlvbiBzZXR1cCBwYXRoIHdoZXJlIGEgY29uY3VycmVudCBDREMgcmVjZWl2ZSBoYW5kbGVyIGNvdWxkIG9ic2VydmUgYW4gdW5pbml0aWFsaXplZCBzZW5kIG9yIHJlY2VpdmUgYnVmZmVyLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBjb25uZWN0aW9uIHNldHVwIGFuZCBidWZmZXIgY3JlYXRpb24vYXR0YWNobWVudCwgYXMgd2VsbCBhcyBDREMgbWVzc2FnZSBzZW5kaW5nIHRvIHRyaWdnZXIgdGhlIHJlY2VpdmUgcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowj2dtm[1] Phase: Succeeded StartedAt: 2026-07-30 00:13:03 +0000 UTC FinishedAt: 2026-07-30 00:13:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2dtm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-30 00:13:03 +0000 UTC FinishedAt: 2026-07-30 00:13:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2dtm[2] Phase: Succeeded StartedAt: 2026-07-30 00:13:03 +0000 UTC FinishedAt: 2026-07-30 03:37:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-07-30 00:13:03 +0000 UTC FinishedAt: 2026-07-30 03:37:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-30 00:13:03 +0000 UTC FinishedAt: 2026-07-30 00:13:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-30 00:13:03 +0000 UTC FinishedAt: 2026-07-30 00:13:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowj2dtm/series-workflowj2dtm-convert-artifact-1410680882/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-30 00:13:13 +0000 UTC FinishedAt: 2026-07-30 00:31:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-30 00:13:13 +0000 UTC FinishedAt: 2026-07-30 00:31:32 +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:*8b73103d-7ecf-4c8e-a86f-1f466fd99161,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-workflowj2dtm/series-workflowj2dtm-convert-artifact-1410680882/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": "6aa6c80b-4f7e-4999-b0c6-6e55d8c5cc99", "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-workflowj2dtm/series-workflowj2dtm-build-action-3885078960/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-30 00:13:13 +0000 UTC FinishedAt: 2026-07-30 00:31:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*8b73103d-7ecf-4c8e-a86f-1f466fd99161,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-workflowj2dtm/series-workflowj2dtm-convert-artifact-1410680882/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": "6aa6c80b-4f7e-4999-b0c6-6e55d8c5cc99", "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-workflowj2dtm/series-workflowj2dtm-build-action-3885078960/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-30 00:31:32 +0000 UTC FinishedAt: 2026-07-30 00:31:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-30 00:31:32 +0000 UTC FinishedAt: 2026-07-30 00:31:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-30 00:31:32 +0000 UTC FinishedAt: 2026-07-30 00:31:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-30 00:31:32 +0000 UTC FinishedAt: 2026-07-30 00:31:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowj2dtm/series-workflowj2dtm-convert-artifact-1243698765/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-30 00:31:43 +0000 UTC FinishedAt: 2026-07-30 00:33:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-30 00:31:43 +0000 UTC FinishedAt: 2026-07-30 00:33:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6aa6c80b-4f7e-4999-b0c6-6e55d8c5cc99,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-workflowj2dtm/series-workflowj2dtm-build-action-3885078960/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-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-30 00:33:36 +0000 UTC FinishedAt: 2026-07-30 00:33:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-30 00:33:36 +0000 UTC FinishedAt: 2026-07-30 00:33:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-30 00:33:36 +0000 UTC FinishedAt: 2026-07-30 00:55:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-30 00:33:36 +0000 UTC FinishedAt: 2026-07-30 00:55:50 +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:*8b73103d-7ecf-4c8e-a86f-1f466fd99161,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-workflowj2dtm/series-workflowj2dtm-convert-artifact-1243698765/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": "38d23bc2-db82-49ea-b86c-00778f2b3978", "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-workflowj2dtm/series-workflowj2dtm-build-action-1396212777/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-30 00:33:36 +0000 UTC FinishedAt: 2026-07-30 00:55:40 +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:*8b73103d-7ecf-4c8e-a86f-1f466fd99161,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-workflowj2dtm/series-workflowj2dtm-convert-artifact-1243698765/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": "38d23bc2-db82-49ea-b86c-00778f2b3978", "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-workflowj2dtm/series-workflowj2dtm-build-action-1396212777/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-30 00:55:50 +0000 UTC FinishedAt: 2026-07-30 00:55:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-30 00:55:50 +0000 UTC FinishedAt: 2026-07-30 00:55:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-30 00:55:50 +0000 UTC FinishedAt: 2026-07-30 00:57:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-30 00:55:50 +0000 UTC FinishedAt: 2026-07-30 00:57:31 +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:*38d23bc2-db82-49ea-b86c-00778f2b3978,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-workflowj2dtm/series-workflowj2dtm-build-action-1396212777/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-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Failed StartedAt: 2026-07-30 00:57:41 +0000 UTC FinishedAt: 2026-07-30 03:37:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Failed StartedAt: 2026-07-30 00:57:41 +0000 UTC FinishedAt: 2026-07-30 03:37:55 +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":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"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:*6aa6c80b-4f7e-4999-b0c6-6e55d8c5cc99,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*38d23bc2-db82-49ea-b86c-00778f2b3978,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-workflowj2dtm/series-workflowj2dtm-build-action-3885078960/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-workflowj2dtm/series-workflowj2dtm-build-action-1396212777/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-30 00:57:41 +0000 UTC FinishedAt: 2026-07-30 00:57:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-30 00:57:41 +0000 UTC FinishedAt: 2026-07-30 00:57:47 +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":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"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-workflowj2dtm/series-workflowj2dtm-convert-artifact-662811698/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-30 00:57:41 +0000 UTC FinishedAt: 2026-07-30 00:57:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-30 00:57:41 +0000 UTC FinishedAt: 2026-07-30 00:57:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-30 00:57:41 +0000 UTC FinishedAt: 2026-07-30 00:57:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Failed StartedAt: 2026-07-30 00:57:51 +0000 UTC FinishedAt: 2026-07-30 03:37:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2dtm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_buf_create","smcd_buf_attach","smcd_cdc_msg_send","smc_cdc_msg_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e095f249e2209674f6366f6db0383a2b96e19239","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS","DIBS_LO","INET"],"series_id":"91c9aff2-05fe-4f62-ac1b-86fea6a4fce2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Error StartedAt: 2026-07-30 00:57:51 +0000 UTC FinishedAt: 2026-07-30 03:37:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6aa6c80b-4f7e-4999-b0c6-6e55d8c5cc99,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*38d23bc2-db82-49ea-b86c-00778f2b3978,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-workflowj2dtm/series-workflowj2dtm-build-action-3885078960/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-workflowj2dtm/series-workflowj2dtm-build-action-1396212777/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-workflowj2dtm/series-workflowj2dtm-convert-artifact-662811698/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil