Name: series-workflowkgxp7 Phase: Succeeded StartedAt: 2026-09-12 23:41:24 +0000 UTC FinishedAt: 2026-09-13 04:29:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgxp7[0] Phase: Succeeded StartedAt: 2026-09-12 23:41:24 +0000 UTC FinishedAt: 2026-09-13 00:48:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgxp7[0].run-triage Phase: Succeeded StartedAt: 2026-09-12 23:41:24 +0000 UTC FinishedAt: 2026-09-13 00:48:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATM", "PPP", "PPPOATM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATM", "PPP", "PPPOATM" ], "series_id": "426008ed-0e92-4a87-a2f5-c0563868a975" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "pppoatm_send", "pppoatm_assign_vcc" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUTSYjMzQ7LAogICAgJiMzNDtQUFAmIzM0OywKICAgICYjMzQ7UFBQT0FUTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BwcG9hdG1fc2VuZCYjMzQ7LAogICAgJiMzNDtwcHBvYXRtX2Fzc2lnbl92Y2MmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYm91bmRzIGNoZWNraW5nIGFuZCBoZWFkcm9vbSBtYW5hZ2VtZW50IGluIHRoZSBQUFBvQVRNIHRyYW5zbWl0IHBhdGggKGBwcHBvYXRtX3NlbmRgKS4gU3BlY2lmaWNhbGx5OlxuMS4gSXQgYWRkcyBhIGBwc2tiX21heV9wdWxsKHNrYiwgMSlgIGNoZWNrIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBvbiBlbXB0eSBza2JzIChgc2tiLVx1MDAzZWRhdGFbMF1gKS5cbjIuIEl0IHJlcGxhY2VzIGBza2JfcmVhbGxvY19oZWFkcm9vbWAgd2l0aCBgc2tiX2Nvd19oZWFkYCB0byBlbnN1cmUgaGVhZHJvb20gaXMgc2FmZWx5IHdyaXRhYmxlIGFuZCBhdmFpbGFibGUuXG4zLiBJdCBkZWZlcnMgYHNrYl9wdWxsYCBwcm90b2NvbCBjb21wcmVzc2lvbiB1bnRpbCBpbW1lZGlhdGVseSBiZWZvcmUgdHJhbnNtaXNzaW9uLCByZW1vdmluZyB0aGUgcHJldmlvdXMgZnJhZ2lsZSB1bmRvIGxvZ2ljIHRoYXQgcGVyZm9ybWVkIGFuIG91dC1vZi1ib3VuZHMgY2hlY2sgKGBza2ItXHUwMDNlZGF0YVstMV0gPT0gJiMzOTtcXDAmIzM5O2ApLlxuNC4gSXQgY29waWVzIHRoZSBjb25zdGFudCBMTEMgaGVhZGVyIChgcHBwbGxjYCkgaW50byB0aGUgcHVzaGVkIHNrYiBoZWFkcm9vbSBiZWZvcmUgdHJhbnNtaXNzaW9uLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBub3IgZG8gdGhleSBwYXNzIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLiBUaGUgaXNzdWVzIGFkZHJlc3NlZCBhbmQgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHBhY2tldCBidWZmZXIgbWFuaXB1bGF0aW9uIGluIHRoaXMgcGF0aCAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYnVmZmVyIG92ZXItcmVhZHMsIG9yIHNrYiBsaWZldGltZS9yZWZjb3VudGluZyBlcnJvcnMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgcGFja2V0IHRyYW5zbWlzc2lvbiBoYW5kbGluZyBhbmQgYnVmZmVyIG1hbmFnZW1lbnQgaW4gcHBwb2F0bV9zZW5kIHdpdGhpbiBuZXQvYXRtL3BwcG9hdG0uYy4gSXQgcmVwbGFjZXMgc2tiX3JlYWxsb2NfaGVhZHJvb20gd2l0aCBza2JfY293X2hlYWQsIHJlc3RydWN0dXJlcyB0aGUgb3JkZXIgb2Ygc2tiX3B1bGwgYW5kIHNrYl9wdXNoLCByZW1vdmVzIHRoZSB1bmRvIGxvZ2ljIG9uIHNlbmQgZmFpbHVyZSwgYW5kIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiB2aWEgcHNrYl9tYXlfcHVsbC4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgcGF0aHMgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBQUFAgb3ZlciBBVE0gYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3MzBiZmE1MzFkYTc3N2RiMjkzMmE2Nzk0YzY5YzlmMjcyN2IwODlmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMDA6NDQ6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcHBvYXRtLmMgYi9uZXQvYXRtL3BwcG9hdG0uY1xuaW5kZXggNmRhNTJkMTJkZjY4ZS4uNTIxNDc4NmU2MWQxMSAxMDA2NDRcbi0tLSBhL25ldC9hdG0vcHBwb2F0bS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYXRtL3BwcG9hdG0uY1xuQEAgLTI5MiwxMCAmIzQzOzI5MiwxMyBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xuIFx0aW50IHJldDtcbiBcbiYjNDM7XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAxKSkge1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRyZXR1cm4gRFJPUF9QQUNLRVQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdEFUTV9TS0Ioc2tiKS1cdTAwM2V2Y2MgPSBwdmNjLVx1MDAzZWF0bXZjYztcbiBcdHByX2RlYnVnKFwmIzM0Oyhza2I9MHglcCwgdmNjPTB4JXApXFxuXCYjMzQ7LCBza2IsIHB2Y2MtXHUwMDNlYXRtdmNjKTtcbi1cdGlmIChza2ItXHUwMDNlZGF0YVswXSA9PSAmIzM5O1xcMCYjMzk7IFx1MDAyNlx1MDAyNiAocHZjYy1cdTAwM2VmbGFncyBcdTAwMjYgU0NfQ09NUF9QUk9UKSlcbi1cdFx0KHZvaWQpIHNrYl9wdWxsKHNrYiwgMSk7XG4gXG4gXHR2Y2MgPSBBVE1fU0tCKHNrYiktXHUwMDNldmNjO1xuIFx0YmhfbG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbkBAIC0zMTcsMjMgJiM0MzszMjAsMTMgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0c3dpdGNoIChwdmNjLVx1MDAzZWVuY2Fwcykge1x0XHQvKiBMTEMgZW5jYXBzdWxhdGlvbiBuZWVkZWQgKi9cbiBcdGNhc2UgZV9sbGM6XG4tXHRcdGlmIChza2JfaGVhZHJvb20oc2tiKSBcdTAwM2MgTExDX0xFTikge1xuLVx0XHRcdHN0cnVjdCBza19idWZmICpuO1xuLVx0XHRcdG4gPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsIExMQ19MRU4pO1xuLVx0XHRcdGlmIChuICE9IE5VTEwgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIG4tXHUwMDNldHJ1ZXNpemUpKSB7XG4tXHRcdFx0XHRrZnJlZV9za2Iobik7XG4tXHRcdFx0XHRnb3RvIG5vc3BhY2U7XG4tXHRcdFx0fVxuLVx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4tXHRcdFx0c2tiID0gbjtcbi1cdFx0XHRpZiAoc2tiID09IE5VTEwpIHtcbi1cdFx0XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbi1cdFx0XHRcdHJldHVybiBEUk9QX1BBQ0tFVDtcbi1cdFx0XHR9XG4tXHRcdH0gZWxzZSBpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbiYjNDM7XHRcdGlmIChza2JfY293X2hlYWQoc2tiLCBMTENfTEVOKSkge1xuJiM0MztcdFx0XHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XG4mIzQzO1x0XHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0XHRyZXR1cm4gRFJPUF9QQUNLRVQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbiBcdFx0XHRnb3RvIG5vc3BhY2U7XG4tXHRcdG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgZV92YzpcbiBcdFx0aWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cdTAwM2V0cnVlc2l6ZSkpXG5AQCAtMzQ2LDYgJiM0MzszMzksMTIgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRyZXR1cm4gMTtcbiBcdH1cbiBcbiYjNDM7XHRpZiAoc2tiLVx1MDAzZWRhdGFbMF0gPT0gJiMzOTtcXDAmIzM5OyBcdTAwMjZcdTAwMjYgKHB2Y2MtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0NPTVBfUFJPVCkpXG4mIzQzO1x0XHRza2JfcHVsbChza2IsIDEpO1xuJiM0MztcbiYjNDM7XHRpZiAocHZjYy1cdTAwM2VlbmNhcHMgPT0gZV9sbGMpXG4mIzQzO1x0XHRtZW1jcHkoc2tiX3B1c2goc2tiLCBMTENfTEVOKSwgcHBwbGxjLCBMTENfTEVOKTtcbiYjNDM7XG4gXHRhdG1fYWNjb3VudF90eCh2Y2MsIHNrYik7XG4gXHRwcl9kZWJ1ZyhcJiMzNDthdG1fc2tiKCVwKS1cdTAwM2V2Y2MoJXApLVx1MDAzZWRldiglcClcXG5cJiMzNDssXG4gXHRcdCBza2IsIEFUTV9TS0Ioc2tiKS1cdTAwM2V2Y2MsIEFUTV9TS0Ioc2tiKS1cdTAwM2V2Y2MtXHUwMDNlZGV2KTtcbkBAIC0zNTUsMTMgJiM0MzszNTQsNiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gcmV0O1xuIG5vc3BhY2U6XG4gXHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XG4tXHQvKlxuLVx0ICogV2UgZG9uJiMzOTt0IGhhdmUgc3BhY2UgdG8gc2VuZCB0aGlzIFNLQiBub3csIGJ1dCB3ZSBtaWdodCBoYXZlXG4tXHQgKiBhbHJlYWR5IGFwcGxpZWQgU0NfQ09NUF9QUk9UIGNvbXByZXNzaW9uLCBzbyBtYXkgbmVlZCB0byB1bmRvXG4tXHQgKi9cbi1cdGlmICgocHZjYy1cdTAwM2VmbGFncyBcdTAwMjYgU0NfQ09NUF9QUk9UKSBcdTAwMjZcdTAwMjYgc2tiX2hlYWRyb29tKHNrYikgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4tXHQgICAgc2tiLVx1MDAzZWRhdGFbLTFdID09ICYjMzk7XFwwJiMzOTspXG4tXHRcdCh2b2lkKSBza2JfcHVzaChza2IsIDEpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUTSYjMzQ7LAogICAgJiMzNDtQUFAmIzM0OywKICAgICYjMzQ7UFBQT0FUTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BwcG9hdG1fc2VuZCYjMzQ7LAogICAgJiMzNDtwcHBvYXRtX2Fzc2lnbl92Y2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIHBhY2tldCB0cmFuc21pc3Npb24gaGFuZGxpbmcgYW5kIGJ1ZmZlciBtYW5hZ2VtZW50IGluIHBwcG9hdG1fc2VuZCB3aXRoaW4gbmV0L2F0bS9wcHBvYXRtLmMuIEl0IHJlcGxhY2VzIHNrYl9yZWFsbG9jX2hlYWRyb29tIHdpdGggc2tiX2Nvd19oZWFkLCByZXN0cnVjdHVyZXMgdGhlIG9yZGVyIG9mIHNrYl9wdWxsIGFuZCBza2JfcHVzaCwgcmVtb3ZlcyB0aGUgdW5kbyBsb2dpYyBvbiBzZW5kIGZhaWx1cmUsIGFuZCBhZGRzIGlucHV0IHZhbGlkYXRpb24gdmlhIHBza2JfbWF5X3B1bGwuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIHBhdGhzIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgUFBQIG92ZXIgQVRNIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzMwYmZhNTMxZGE3NzdkYjI5MzJhNjc5NGM2OWM5ZjI3MjdiMDg5ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDEzIDAwOjQ0OjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcHBvYXRtLmMgYi9uZXQvYXRtL3BwcG9hdG0uYwppbmRleCA2ZGE1MmQxMmRmNjhlLi41MjE0Nzg2ZTYxZDExIDEwMDY0NAotLS0gYS9uZXQvYXRtL3BwcG9hdG0uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYXRtL3BwcG9hdG0uYwpAQCAtMjkyLDEwICYjNDM7MjkyLDEzIEBAIHN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlzdHJ1Y3QgYXRtX3ZjYyAqdmNjOwogCWludCByZXQ7CiAKJiM0MzsJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMSkpIHsKJiM0MzsJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJcmV0dXJuIERST1BfUEFDS0VUOwomIzQzOwl9CiYjNDM7CiAJQVRNX1NLQihza2IpLSZndDt2Y2MgPSBwdmNjLSZndDthdG12Y2M7CiAJcHJfZGVidWcoJiMzNDsoc2tiPTB4JXAsIHZjYz0weCVwKVxuJiMzNDssIHNrYiwgcHZjYy0mZ3Q7YXRtdmNjKTsKLQlpZiAoc2tiLSZndDtkYXRhWzBdID09ICYjMzk7XDAmIzM5OyAmYW1wOyZhbXA7IChwdmNjLSZndDtmbGFncyAmYW1wOyBTQ19DT01QX1BST1QpKQotCQkodm9pZCkgc2tiX3B1bGwoc2tiLCAxKTsKIAogCXZjYyA9IEFUTV9TS0Ioc2tiKS0mZ3Q7dmNjOwogCWJoX2xvY2tfc29jayhza19hdG0odmNjKSk7CkBAIC0zMTcsMjMgJiM0MzszMjAsMTMgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiAJc3dpdGNoIChwdmNjLSZndDtlbmNhcHMpIHsJCS8qIExMQyBlbmNhcHN1bGF0aW9uIG5lZWRlZCAqLwogCWNhc2UgZV9sbGM6Ci0JCWlmIChza2JfaGVhZHJvb20oc2tiKSAmbHQ7IExMQ19MRU4pIHsKLQkJCXN0cnVjdCBza19idWZmICpuOwotCQkJbiA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHNrYiwgTExDX0xFTik7Ci0JCQlpZiAobiAhPSBOVUxMICZhbXA7JmFtcDsKLQkJCSAgICAhcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBuLSZndDt0cnVlc2l6ZSkpIHsKLQkJCQlrZnJlZV9za2Iobik7Ci0JCQkJZ290byBub3NwYWNlOwotCQkJfQotCQkJY29uc3VtZV9za2Ioc2tiKTsKLQkJCXNrYiA9IG47Ci0JCQlpZiAoc2tiID09IE5VTEwpIHsKLQkJCQliaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7Ci0JCQkJcmV0dXJuIERST1BfUEFDS0VUOwotCQkJfQotCQl9IGVsc2UgaWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi0mZ3Q7dHJ1ZXNpemUpKQomIzQzOwkJaWYgKHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pKSB7CiYjNDM7CQkJYmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpOwomIzQzOwkJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJCXJldHVybiBEUk9QX1BBQ0tFVDsKJiM0MzsJCX0KJiM0MzsJCWlmICghcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBza2ItJmd0O3RydWVzaXplKSkKIAkJCWdvdG8gbm9zcGFjZTsKLQkJbWVtY3B5KHNrYl9wdXNoKHNrYiwgTExDX0xFTiksIHBwcGxsYywgTExDX0xFTik7CiAJCWJyZWFrOwogCWNhc2UgZV92YzoKIAkJaWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi0mZ3Q7dHJ1ZXNpemUpKQpAQCAtMzQ2LDYgJiM0MzszMzksMTIgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQlyZXR1cm4gMTsKIAl9CiAKJiM0MzsJaWYgKHNrYi0mZ3Q7ZGF0YVswXSA9PSAmIzM5O1wwJiMzOTsgJmFtcDsmYW1wOyAocHZjYy0mZ3Q7ZmxhZ3MgJmFtcDsgU0NfQ09NUF9QUk9UKSkKJiM0MzsJCXNrYl9wdWxsKHNrYiwgMSk7CiYjNDM7CiYjNDM7CWlmIChwdmNjLSZndDtlbmNhcHMgPT0gZV9sbGMpCiYjNDM7CQltZW1jcHkoc2tiX3B1c2goc2tiLCBMTENfTEVOKSwgcHBwbGxjLCBMTENfTEVOKTsKJiM0MzsKIAlhdG1fYWNjb3VudF90eCh2Y2MsIHNrYik7CiAJcHJfZGVidWcoJiMzNDthdG1fc2tiKCVwKS0mZ3Q7dmNjKCVwKS0mZ3Q7ZGV2KCVwKVxuJiMzNDssCiAJCSBza2IsIEFUTV9TS0Ioc2tiKS0mZ3Q7dmNjLCBBVE1fU0tCKHNrYiktJmd0O3ZjYy0mZ3Q7ZGV2KTsKQEAgLTM1NSwxMyAmIzQzOzM1NCw2IEBAIHN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlyZXR1cm4gcmV0Owogbm9zcGFjZToKIAliaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7Ci0JLyoKLQkgKiBXZSBkb24mIzM5O3QgaGF2ZSBzcGFjZSB0byBzZW5kIHRoaXMgU0tCIG5vdywgYnV0IHdlIG1pZ2h0IGhhdmUKLQkgKiBhbHJlYWR5IGFwcGxpZWQgU0NfQ09NUF9QUk9UIGNvbXByZXNzaW9uLCBzbyBtYXkgbmVlZCB0byB1bmRvCi0JICovCi0JaWYgKChwdmNjLSZndDtmbGFncyAmYW1wOyBTQ19DT01QX1BST1QpICZhbXA7JmFtcDsgc2tiX2hlYWRyb29tKHNrYikgJmd0OyAwICZhbXA7JmFtcDsKLQkgICAgc2tiLSZndDtkYXRhWy0xXSA9PSAmIzM5O1wwJiMzOTspCi0JCSh2b2lkKSBza2JfcHVzaChza2IsIDEpOwogCXJldHVybiAwOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MDgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQUFBvQVRNIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIG1vZGlmeWluZyBgbmV0L2F0bS9wcHBvYXRtLmNgLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBUaGUgY2hhbmdlcyB3aXRoaW4gYHBwcG9hdG1fc2VuZGAgYXJlIHdoYXQgSSYjMzk7bSBpbnRlcmVzdGVkIGluLgoKRmlyc3QsIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBgaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMSkpYCBhdCB0aGUgdG9wIG9mIHRoZSBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIHNvbGlkIGNoZWNrIGZvciBkYXRhIGF2YWlsYWJpbGl0eSBiZWZvcmUgcHJvY2VlZGluZywgYSBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBtZWFzdXJlLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuCgpOZXh0LCB0aGF0IGluaXRpYWwsIHF1aWNrIGNoZWNrIGFuZCByZW1vdmFsIG9mIHRoZSAgYGlmIChza2ItJmd0O2RhdGFbMF0gPT0gJiMzOTtcMCYjMzk7ICZhbXA7JmFtcDsgKHB2Y2MtJmd0O2ZsYWdzICZhbXA7IFNDX0NPTVBfUFJPVCkpICh2b2lkKSBza2JfcHVsbChza2IsIDEpO2Agc2VlbXMgbGlrZSBhIG1pbm9yIG9wdGltaXphdGlvbi4gSXQgd2FzIHB1bGxpbmcgZGF0YSBiYXNlZCBvbiB0aGUgZmlyc3QgYnl0ZSBiZWluZyBhIG51bGwgY2hhcmFjdGVyLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGNvbXByZXNzaW9uLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgY29udGV4dCBhcyBJIGdvIHRocm91Z2ggdGhlIHJlc3QuCgpOb3cgdGhlIGBzd2l0Y2ggKHB2Y2MtJmd0O2VuY2FwcylgIGJsb2NrOiBSZXBsYWNpbmcgYHNrYl9yZWFsbG9jX2hlYWRyb29tYCBhbmQgdGhlIGFzc29jaWF0ZWQgaGVhZHJvb20gY2hlY2sgd2l0aCBgc2tiX2Nvd19oZWFkKHNrYiwgTExDX0xFTilgIGlzIGludGVyZXN0aW5nLiBVc2luZyBgc2tiX2Nvd19oZWFkYCBzdWdnZXN0cyBhIGNvcHktb24td3JpdGUgc3RyYXRlZ3kgaXMgYmVpbmcgaW50cm9kdWNlZCBvciByZWZpbmVkIHRvIG1hbmFnZSB0aGUgTExDIGhlYWRlci4gTXVjaCBtb3JlIGVmZmljaWVudC4gUmVtb3ZpbmcgdGhlIGBtZW1jcHlgIG9mIHRoZSBMTEMgaGVhZGVyICp3aXRoaW4qIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGlzIGFuIGltcG9ydGFudCBzaGlmdCBhcyB3ZWxsLiAKClRoZSBtb3ZlbWVudCBvZiB0aGUgYHNrYl9wdWxsYCBhbmQgYHNrYl9wdXNoKHNrYiwgTExDX0xFTilgIG9wZXJhdGlvbnMgZnVydGhlciBkb3duIGFmdGVyIHdlJiMzOTt2ZSBjb25maXJtZWQgd2UgY2FuIHNlbmQgdGhlIHBhY2tldCBhbmQgcmVsZWFzZWQgYG5vc3BhY2VgIHNpZ25hbHMgYW4gYXR0ZW1wdCB0byBvcHRpbWl6ZSBwYWNrZXQgbWFuaXB1bGF0aW9uLiBUaGlzIHNlZW1zIGxpa2UgYSBnb29kIG1vdmUgdG8gZGVsYXkgdGhlc2UgcG90ZW50aWFsbHkgZXhwZW5zaXZlIG9wZXJhdGlvbnMuCgpGaW5hbGx5LCB0aGUgcmVtb3ZhbCBvZiB0aGUgdW5kbyBsb2dpYyB3aXRoaW4gdGhlIGBub3NwYWNlOmAgbGFiZWwgY2F0Y2hlcyBteSBhdHRlbnRpb24uIFRoZSByZW1vdmVkIGNvZGUgd2FzIGF0dGVtcHRpbmcgdG8gdW5kbyBjb21wcmVzc2lvbiBpZiBoZWFkcm9vbSB3YXMgYXZhaWxhYmxlIGFuZCB0aGUgZmlyc3QgYnl0ZSB3YXMgemVybywgc2VlbWluZ2x5IGEgZmFsbGJhY2sgZm9yIGEgY29tcHJlc3Npb24gcHJvdG9jb2wuIFRoaXMgaW5kaWNhdGVzIGVpdGhlciB0aGF0IHRoYXQgcGFydGljdWxhciBjb21wcmVzc2lvbiBwcm90b2NvbCBpcyBubyBsb25nZXIgdXNlZCwgb3IgdGhlIGxvZ2ljIGZvciBpdHMgZGUtYXBwbGljYXRpb24gKGNvbXByZXNzaW9uKSBoYXMgY2hhbmdlZC4KCkkgbmVlZCB0byBjb25maXJtIHRoZSBjaGFuZ2VzIGFyZSBzYWZlIGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgUFBQb0FUTSBpbXBsZW1lbnRhdGlvbiwgYW5kIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFuZCB0aGVpciBpbXBhY3QuIFRpbWUgdG8gZ3JlcHBlciBvciByZWFkIHRoZSBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BQUE9BVE0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYXRtL01ha2VmaWxlPTEwPWF0bS0kKENPTkZJR19QUk9DX0ZTKSAmIzQzOz0gcHJvYy5vXG5uZXQvYXRtL01ha2VmaWxlLTExLVxubmV0L2F0bS9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfUFBQT0FUTSkgJiM0Mzs9IHBwcG9hdG0ub1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jPTUwPWVudW0gcHBwb2F0bV9lbmNhcHMge1xubmV0L2F0bS9wcHBvYXRtLmM6NTE6XHRlX2F1dG9kZXRlY3QgPSBQUFBPQVRNX0VOQ0FQU19BVVRPREVURUNULFxubmV0L2F0bS9wcHBvYXRtLmM6NTI6XHRlX3ZjID0gUFBQT0FUTV9FTkNBUFNfVkMsXG5uZXQvYXRtL3BwcG9hdG0uYzo1MzpcdGVfbGxjID0gUFBQT0FUTV9FTkNBUFNfTExDLFxubmV0L2F0bS9wcHBvYXRtLmMtNTQtfTtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYz0zODA9c3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0zODctXHRcdHJldHVybiAtRUZBVUxUO1xubmV0L2F0bS9wcHBvYXRtLmM6Mzg4Olx0aWYgKGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19BVVRPREVURUNUIFx1MDAyNlx1MDAyNlxubmV0L2F0bS9wcHBvYXRtLmM6Mzg5Olx0ICAgIGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19WQyBcdTAwMjZcdTAwMjYgYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX0xMQylcbm5ldC9hdG0vcHBwb2F0bS5jLTM5MC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA5MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6CgoqKkV4YW1pbmluZyBQUFBvQS9BVE0gRGVwZW5kZW5jaWVzIGluIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBQUFBvQVRNIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIE15IGluc3RpbmN0IHNheXMgdG8gc3RhcnQgd2l0aCBgbmV0L2F0bS9LY29uZmlnYCDigJMgdGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBgQ09ORklHX1BQUE9BVE1gLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBtb2R1bGVzICpkZXBlbmQqIG9uIHRoaXMsIG9yIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbXVzdCBiZSBlbmFibGVkIGJlZm9yZSBgQ09ORklHX1BQUE9BVE1gIGlzIGV2ZW4gYW4gb3B0aW9uLiBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIEFUTS9QUFBvQSBzZXR1cCBhbmQgaG93IGRpZmZlcmVudCBwaWVjZXMgZml0IHRvZ2V0aGVyLiBJIHdhbnQgdG8gYnVpbGQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBkZXBlbmRlbmNpZXMsIG5vdCBqdXN0IHRoZSBiYXNpY3MsIGJ1dCBldmVyeXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBQUE9BVE0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMzMAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlRyYWNpbmcgRG93biB0aGUgYGNvbmZpZyBQUFBPQVRNYCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGV4YWN0bHkgd2hlcmUgdGhpcyBgY29uZmlnIFBQUE9BVE1gIGRlZmluaXRpb24gaXMgY29taW5nIGZyb20uIEl0JiMzOTtzIGEga2V5IGVsZW1lbnQsIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyBvcmlnaW4gaXMgY3JpdGljYWwgdG8gbXkgY3VycmVudCB0YXNrLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgY29kZWJhc2UsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZCBhbnkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiB0byBwaW5wb2ludCBpdHMgbG9jYXRpb24uIFRoaXMgbWVhbnMgZGl2aW5nIGRlZXAgaW50byB0aGUgY29uZmlndXJhdGlvbiBoaWVyYXJjaHksIGxpa2VseSBleGFtaW5pbmcgaW5jbHVkZSBmaWxlcywgbWFjcm8gZGVmaW5pdGlvbnMsIGFuZCBwb3RlbnRpYWxseSBldmVuIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBjb25maWd1cmF0aW9uIHNjcmlwdHMuIEkgbmVlZCB0byBrbm93ICpldmVyeXRoaW5nKiDigJMgd2hlcmUgaXQmIzM5O3MgZGVjbGFyZWQsIHRoZSBzY29wZSBvZiBpdHMgYXBwbGljYXRpb24sIGFuZCBhbnkgcG9zc2libGUgb3ZlcnJpZGVzIG9yIGRlZmF1bHQgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCBpdC4gVGhpcyBpcyBmdW5kYW1lbnRhbCBmb3IgZGVidWdnaW5nIG9yIG1ha2luZyBhbnkgY2hhbmdlcyByZWxhdGVkIHRvIHRoYXQgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFBQT0FUTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZz05Mj1jb25maWcgUFBQX01VTFRJTElOS1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEwMy1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjEwNDpjb25maWcgUFBQT0FUTVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTA1LVx0dHJpc3RhdGUgXCYjMzQ7UFBQIG92ZXIgQVRNXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYwNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIFBQUCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgUFBQIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSB3b3VsZCBiZSBpbiBgZHJpdmVycy9uZXQvcHBwL2AuIExldCBtZSB6ZXJvIGluIG9uIHRoYXQgc2VjdGlvbiBhbmQgc3RhcnQgd2l0aCBgS2NvbmZpZ2AuIFNwZWNpZmljYWxseSwgSSB0aGluayB0aGUgY3JpdGljYWwgb3B0aW9ucyBhcm91bmQgbGluZSAxMDQgYXJlIGdvaW5nIHRvIGJlIG1vc3QgaW50ZXJlc3RpbmcuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHdlJiMzOTtyZSB1c2VkIHRvIOKAkyB0aGluZ3MgbGlrZSBlbmFibGluZyBvciBkaXNhYmxpbmcgdmFyaW91cyBQUFAgZmVhdHVyZXMsIHBlcmhhcHMgb3B0aW9ucyBmb3IgZGlmZmVyZW50IGNvbXByZXNzaW9uIG1ldGhvZHMgKE1QUEMsIFZKIGNvbXByZXNzaW9uLCBldGMuKSwgYW5kIG1heWJlIGV2ZW4gc29tZSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgYmFzZWQgb24gb3RoZXIgbmV0d29yayBvciBoYXJkd2FyZSBjb21wb25lbnRzLiBUaW1lIHRvIGNvbmZpcm0gbXkgaW50dWl0aW9uIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvbmZpZyBvcHRpb25zIHRlbGwgdXMgYWJvdXQgUFBQIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdFx0ICB2ZXJzaW9uIG9mIHRoZSBwcHBkIGRhZW1vbiB3aGljaCB1bmRlcnN0YW5kcyB0aGUgbXVsdGlsaW5rIHByb3RvY29sLlxuIDEwMTpcdFxuIDEwMjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDEwMzpcdFxuIDEwNDpcdGNvbmZpZyBQUFBPQVRNXG4gMTA1Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgb3ZlciBBVE1cJiMzNDtcbiAxMDY6XHRcdGRlcGVuZHMgb24gQVRNXG4gMTA3Olx0XHRoZWxwXG4gMTA4Olx0XHQgIFN1cHBvcnQgUFBQIChQb2ludCB0byBQb2ludCBQcm90b2NvbCkgZW5jYXBzdWxhdGVkIGluIEFUTSBmcmFtZXMuXG4gMTA5Olx0XHQgIFRoaXMgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgeWV0IGNvbXBseSB3aXRoIHNlY3Rpb24gOCBvZiBSRkMyMzY0LFxuIDExMDpcdFx0ICB3aGljaCBjYW4gbGVhZCB0byBiYWQgcmVzdWx0cyBpZiB0aGUgQVRNIHBlZXIgbG9zZXMgc3RhdGUgYW5kXG4gMTExOlx0XHQgIGNoYW5nZXMgaXRzIGVuY2Fwc3VsYXRpb24gdW5pbGF0ZXJhbGx5LlxuIDExMjpcdFxuIDExMzpcdGNvbmZpZyBQUFBPWFxuIDExNDpcdFx0dHJpc3RhdGVcbiAxMTU6XHRcbiAxMTY6XHRjb25maWcgUFBQT0VcbiAxMTc6XHRcdHRyaXN0YXRlIFwmIzM0O1BQUCBvdmVyIEV0aGVybmV0XCYjMzQ7XG4gMTE4Olx0XHRzZWxlY3QgUFBQT1hcbiAxMTk6XHRcdGhlbHBcbiAxMjA6XHRcdCAgU3VwcG9ydCBmb3IgUFBQIG92ZXIgRXRoZXJuZXQuXG4gMTIxOlx0XG4gMTIyOlx0XHQgIFRvIHdvcmsgaW4gY2xpZW50IG1vZGUsIHBwcGQgdmVyc2lvbiAyLjQuMiBvciBsYXRlciBpcyByZXF1aXJlZC5cbiAxMjM6XHRcdCAgVG8gd29yayBpbiBzZXJ2ZXIgbW9kZSwgdGhlIHBwcG9lLXNlcnZlciBjb21tYW5kIGZyb20gdGhlIFJQLVBQUG9FXG4gMTI0Olx0XHQgIHBhY2thZ2UgaXMgYWxzbyByZXF1aXJlZCwgYXZhaWxhYmxlIGF0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMDgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIFBQUCBEZXBlbmRlbmN5KioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAsIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgUFBQIGlzIGFjdHVhbGx5ICpyZXF1aXJlZCogaGVyZS4gSSBrbm93IGl0JiMzOTtzIGEgbGVnYWN5IHByb3RvY29sLCBidXQgeW91IG5ldmVyIGtub3cgd2hhdCBhbmNpZW50IGRlcGVuZGVuY2llcyBtaWdodCBzdGlsbCBiZSBsdXJraW5nLiBTbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgZXhhbWluZSB0aGUgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBzY2FuIHRoZSBiZWdpbm5pbmcgb2YgdGhhdCBjb25maWcgZmlsZSB0byBzZWUgaWYgYW55dGhpbmcgZWxzZSBkZXBlbmRzIG9uIGl0LiBUaGlzIHNob3VsZCBxdWlja2x5IHRlbGwgbWUgaWYgSSBuZWVkIHRvIGNvbnNpZGVyIFBQUCBmdW5jdGlvbmFsaXR5IG9yIHdoZXRoZXIgaXQmIzM5O3Mgc29tZXRoaW5nIHRoYXQgY2FuIGJlIHNhZmVseSBpZ25vcmVkIGZvciB0aGlzIHBhcnRpY3VsYXIgYnVpbGQgY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgYWJvdXQgYmVpbmcgZWZmaWNpZW50IGFuZCBub3Qgd2FzdGluZyB0aW1lIG9uIHNvbWV0aGluZyBpcnJlbGV2YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgUFBQIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIFBQUFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIChwb2ludC10by1wb2ludCBwcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xuICAgODpcdFx0c2VsZWN0IFNMSENcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgUFBQIChQb2ludCB0byBQb2ludCBQcm90b2NvbCkgaXMgYSBuZXdlciBhbmQgYmV0dGVyIFNMSVAuICBJdCBzZXJ2ZXNcbiAgMTE6XHRcdCAgdGhlIHNhbWUgcHVycG9zZTogc2VuZGluZyBJbnRlcm5ldCB0cmFmZmljIG92ZXIgdGVsZXBob25lIChhbmQgb3RoZXJcbiAgMTI6XHRcdCAgc2VyaWFsKSBsaW5lcy4gIEFzayB5b3VyIGFjY2VzcyBwcm92aWRlciBpZiB0aGV5IHN1cHBvcnQgaXQsIGJlY2F1c2VcbiAgMTM6XHRcdCAgb3RoZXJ3aXNlIHlvdSBjYW4mIzM5O3QgdXNlIGl0OyBtb3N0IEludGVybmV0IGFjY2VzcyBwcm92aWRlcnMgdGhlc2VcbiAgMTQ6XHRcdCAgZGF5cyBzdXBwb3J0IFBQUCByYXRoZXIgdGhhbiBTTElQLlxuICAxNTpcdFxuICAxNjpcdFx0ICBUbyB1c2UgUFBQLCB5b3UgbmVlZCBhbiBhZGRpdGlvbmFsIHByb2dyYW0gY2FsbGVkIHBwcGQsIGF2YWlsYWJsZSBhdFxuICAxNzpcdFx0ICBcdTAwM2NodHRwczovL3BwcC5zYW1iYS5vcmdcdTAwM2UuICBNYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgdmVyc2lvbiBvZiBwcHBkXG4gIDE4Olx0XHQgIHJlY29tbWVuZGVkIGluIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9DaGFuZ2VzXHUwMDNlLlxuICAxOTpcdFx0ICBUaGUgUFBQIG9wdGlvbiBlbmxhcmdlcyB5b3VyIGtlcm5lbCBieSBhYm91dCAxNiBLQi5cbiAgMjA6XHRcbiAgMjE6XHRcdCAgVGhlcmUgYXJlIGFjdHVhbGx5IHR3byB2ZXJzaW9ucyBvZiBQUFA6IHRoZSB0cmFkaXRpb25hbCBQUFAgZm9yXG4gIDIyOlx0XHQgIGFzeW5jaHJvbm91cyBsaW5lcywgc3VjaCBhcyByZWd1bGFyIGFuYWxvZyBwaG9uZSBsaW5lcywgYW5kXG4gIDIzOlx0XHQgIHN5bmNocm9ub3VzIFBQUCB3aGljaCBjYW4gYmUgdXNlZCBvdmVyIGRpZ2l0YWwgSVNETiBsaW5lcyBmb3JcbiAgMjQ6XHRcdCAgZXhhbXBsZS4gIElmIHlvdSB3YW50IHRvIHVzZSBQUFAgb3ZlciBwaG9uZSBsaW5lcyBvciBvdGhlclxuICAyNTpcdFx0ICBhc3luY2hyb25vdXMgc2VyaWFsIGxpbmVzLCB5b3UgbmVlZCB0byBzYXkgWSAob3IgTSkgaGVyZSBhbmQgYWxzbyB0b1xuICAyNjpcdFx0ICB0aGUgbmV4dCBvcHRpb24sIFwmIzM0O1BQUCBzdXBwb3J0IGZvciBhc3luYyBzZXJpYWwgcG9ydHNcJiMzNDsuICBGb3IgUFBQIG92ZXJcbiAgMjc6XHRcdCAgc3luY2hyb25vdXMgbGluZXMsIHlvdSBzaG91bGQgc2F5IFkgKG9yIE0pIGhlcmUgYW5kIHRvIFwmIzM0O1N1cHBvcnRcbiAgMjg6XHRcdCAgc3luY2hyb25vdXMgUFBQXCYjMzQ7LCBiZWxvdy5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgSWYgeW91IHNhaWQgWSB0byBcJiMzNDtWZXJzaW9uIGluZm9ybWF0aW9uIG9uIGFsbCBzeW1ib2xzXCYjMzQ7IGFib3ZlLCB0aGVuXG4gIDMxOlx0XHQgIHlvdSBjYW5ub3QgY29tcGlsZSB0aGUgUFBQIGRyaXZlciBpbnRvIHRoZSBrZXJuZWw7IHlvdSBjYW4gdGhlbiBvbmx5XG4gIDMyOlx0XHQgIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUuIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNXG4gIDMzOlx0XHQgIGhlcmUuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcHBwX2dlbmVyaWMuXG4gIDM0Olx0XG4gIDM1Olx0aWYgUFBQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMjcKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFBQUCBhbmQgQVRNIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBuZXR3b3JrIGRyaXZlciBjb25maWd1cmF0aW9uLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgYGlmIFBQUGAgc3RhdGVtZW50IGlzIGNydWNpYWw7IGl0JiMzOTtzIGd1YXJkaW5nIGFsbCBvZiBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgLiBUaGF0IG1lYW5zIHRoZSBlbnRpcmUgUFBQIGNvbmZpZ3VyYXRpb24sIHRoZSB3aG9sZSBzaGViYW5nLCBpcyBjb250aW5nZW50IG9uIHRoZSBgQ09ORklHX1BQUGAgb3B0aW9uIGJlaW5nIHNldC4gUmlnaHQsIHNvIEkga25vdyBgQ09ORklHX1BQUE9BVE1gIGlzIHNwZWNpZmljYWxseSBkZXBlbmRlbnQgb24gYENPTkZJR19QUFBgIGFuZCBgQ09ORklHX0FUTWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgYG5ldC9hdG0vS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgQ09ORklHX0FUTWAgaXRzZWxmIGRlcGVuZHMgb24uIFRoaXMgaXMgYWxsIGFib3V0IHRyYWNpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGFuZCBmaWd1cmluZyBvdXQgdGhlIGJ1aWxkIGhpZXJhcmNoeS4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFUTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9LY29uZmlnLTUtXG5uZXQvYXRtL0tjb25maWc6Njpjb25maWcgQVRNXG5uZXQvYXRtL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0FzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlIChBVE0pXCYjMzQ7XG4tLVxubmV0L2F0bS9LY29uZmlnLTIxLVxubmV0L2F0bS9LY29uZmlnOjIyOmNvbmZpZyBBVE1fQlIyNjg0XG5uZXQvYXRtL0tjb25maWctMjMtXHR0cmlzdGF0ZSBcJiMzNDtSRkMxNDgzLzI2ODQgQnJpZGdlZCBwcm90b2NvbHNcJiMzNDtcbi0tXG5uZXQvYXRtL0tjb25maWctMzAtXG5uZXQvYXRtL0tjb25maWc6MzE6Y29uZmlnIEFUTV9CUjI2ODRfSVBGSUxURVJcbm5ldC9hdG0vS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7UGVyLVZDIElQIGZpbHRlciBrbHVkZ2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ1MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBQUFBvQS9BVE0gU2VuZCBQYXRoKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgc3BlY2lmaWNhbGx5IGhvdyB0aGUgYHBwcG9hdG1fc2VuZGAgZnVuY3Rpb24gaW4gYG5ldC9hdG0vcHBwb2F0bS5jYCBpcyB0cmlnZ2VyZWQuIE15IGZpcnN0IHN0ZXAgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBJJiMzOTtsbCBvcGVuIHVwIGBuZXQvYXRtL3BwcG9hdG0uY2AgYW5kIGh1bnQgZG93biB0aGUgY2FsbCBjaGFpbiB0aGF0IGxlYWRzIHRvIGl0LiBPbmNlIEkmIzM5O3ZlIGxvY2F0ZWQgdGhlIGVudHJ5IHBvaW50IHRvIGBwcHBvYXRtX3NlbmRgLCBJJiMzOTtsbCBnaXZlIHRoYXQgZnVuY3Rpb24gYSB0aG9yb3VnaCBleGFtaW5hdGlvbi4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSB0b28sIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgY29udGV4dCwgaW5wdXQgcGFyYW1ldGVycywgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgUFBQIG92ZXIgQVRNIGZyYW1ld29yay4gVW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBpcyBrZXkgdG8gZGVidWdnaW5nIG9yIG1vZGlmeWluZyBBVE0gZnVuY3Rpb25hbGl0eS4gSSBuZWVkIGEgc29saWQgaGFuZGxlIG9uIHRoaXMgZnVuY3Rpb24gdG8gcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYXRtL3BwcG9hdG0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjgwOlx0ICogQ2FsbGVkIGJ5IHRoZSBwcHBfZ2VuZXJpYy5jIHRvIHNlbmQgYSBwYWNrZXQgLSByZXR1cm5zIHRydWUgaWYgcGFja2V0XG4gMjgxOlx0ICogd2FzIGFjY2VwdGVkLiAgSWYgd2UgcmV0dXJuIGZhbHNlLCB0aGVuIGl0JiMzOTtzIG91ciBqb2IgdG8gY2FsbFxuIDI4MjpcdCAqIHBwcF9vdXRwdXRfd2FrZXVwKGNoYW4pIHdoZW4gd2UmIzM5O3JlIGZlZWxpbmcgbW9yZSB1cCB0byBpdC5cbiAyODM6XHQgKiBOb3RlIHRoYXQgaW4gdGhlIEVOT01FTSBjYXNlIChhcyBvcHBvc2VkIHRvIHRoZSAhYXRtX21heV9zZW5kIGNhc2UpXG4gMjg0Olx0ICogd2Ugc2hvdWxkIHJlYWxseSBkcm9wIHRoZSBwYWNrZXQsIGJ1dCB0aGUgZ2VuZXJpYyBsYXllciBkb2VzbiYjMzk7dFxuIDI4NTpcdCAqIHN1cHBvcnQgdGhpcyB5ZXQuICBXZSBqdXN0IHJldHVybiAmIzM5O0RST1BfUEFDS0VUJiMzOTsgd2hpY2ggd2UgYWN0dWFsbHkgZGVmaW5lXG4gMjg2Olx0ICogYXMgc3VjY2VzcywganVzdCB0byBiZSBjbGVhciB3aGF0IHdlJiMzOTtyZSByZWFsbHkgZG9pbmcuXG4gMjg3Olx0ICovXG4gMjg4Olx0I2RlZmluZSBEUk9QX1BBQ0tFVCAxXG4gMjg5Olx0c3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDI5MDpcdHtcbiAyOTE6XHRcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGNoYW5fdG9fcHZjYyhjaGFuKTtcbiAyOTI6XHRcdHN0cnVjdCBhdG1fdmNjICp2Y2M7XG4gMjkzOlx0XHRpbnQgcmV0O1xuIDI5NDpcdFxuIDI5NTpcdFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMSkpIHtcbiAyOTY6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gMjk3Olx0XHRcdHJldHVybiBEUk9QX1BBQ0tFVDtcbiAyOTg6XHRcdH1cbiAyOTk6XHRcbiAzMDA6XHRcdEFUTV9TS0Ioc2tiKS1cdTAwM2V2Y2MgPSBwdmNjLVx1MDAzZWF0bXZjYztcbiAzMDE6XHRcdHByX2RlYnVnKFwmIzM0Oyhza2I9MHglcCwgdmNjPTB4JXApXFxuXCYjMzQ7LCBza2IsIHB2Y2MtXHUwMDNlYXRtdmNjKTtcbiAzMDI6XHRcbiAzMDM6XHRcdHZjYyA9IEFUTV9TS0Ioc2tiKS1cdTAwM2V2Y2M7XG4gMzA0Olx0XHRiaF9sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuIDMwNTpcdFx0aWYgKHNvY2tfb3duZWRfYnlfdXNlcihza19hdG0odmNjKSkpIHtcbiAzMDY6XHRcdFx0LypcbiAzMDc6XHRcdFx0ICogTmVlZHMgdG8gaGFwcGVuIChhbmQgYmUgZmx1c2hlZCwgaGVuY2UgdGVzdF9hbmRfKSBiZWZvcmUgd2UgdW5sb2NrXG4gMzA4Olx0XHRcdCAqIHRoZSBzb2NrZXQuIEl0IG5lZWRzIHRvIGJlIHNlZW4gYnkgdGhlIHRpbWUgb3VyIC1cdTAwM2VyZWxlYXNlX2NiIGdldHNcbiAzMDk6XHRcdFx0ICogY2FsbGVkLlxuIDMxMDpcdFx0XHQgKi9cbiAzMTE6XHRcdFx0dGVzdF9hbmRfc2V0X2JpdChCTE9DS0VELCBcdTAwMjZwdmNjLVx1MDAzZWJsb2NrZWQpO1xuIDMxMjpcdFx0XHRnb3RvIG5vc3BhY2U7XG4gMzEzOlx0XHR9XG4gMzE0Olx0XHRpZiAodGVzdF9iaXQoQVRNX1ZGX0NMT1NFLCBcdTAwMjZ2Y2MtXHUwMDNlZmxhZ3MpIHx8XG4gMzE1Olx0XHQgICAgIXRlc3RfYml0KEFUTV9WRl9SRUFEWSwgXHUwMDI2dmNjLVx1MDAzZWZsYWdzKSkge1xuIDMxNjpcdFx0XHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XG4gMzE3Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDMxODpcdFx0XHRyZXR1cm4gRFJPUF9QQUNLRVQ7XG4gMzE5Olx0XHR9XG4gMzIwOlx0XG4gMzIxOlx0XHRzd2l0Y2ggKHB2Y2MtXHUwMDNlZW5jYXBzKSB7XHRcdC8qIExMQyBlbmNhcHN1bGF0aW9uIG5lZWRlZCAqL1xuIDMyMjpcdFx0Y2FzZSBlX2xsYzpcbiAzMjM6XHRcdFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pKSB7XG4gMzI0Olx0XHRcdFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuIDMyNTpcdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDMyNjpcdFx0XHRcdHJldHVybiBEUk9QX1BBQ0tFVDtcbiAzMjc6XHRcdFx0fVxuIDMyODpcdFx0XHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbiAzMjk6XHRcdFx0XHRnb3RvIG5vc3BhY2U7XG4gMzMwOlx0XHRcdGJyZWFrO1xuIDMzMTpcdFx0Y2FzZSBlX3ZjOlxuIDMzMjpcdFx0XHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbiAzMzM6XHRcdFx0XHRnb3RvIG5vc3BhY2U7XG4gMzM0Olx0XHRcdGJyZWFrO1xuIDMzNTpcdFx0Y2FzZSBlX2F1dG9kZXRlY3Q6XG4gMzM2Olx0XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbiAzMzc6XHRcdFx0cHJfZGVidWcoXCYjMzQ7VHJ5aW5nIHRvIHNlbmQgd2l0aG91dCBzZXR0aW5nIGVuY2FwcyFcXG5cJiMzNDspO1xuIDMzODpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAzMzk6XHRcdFx0cmV0dXJuIDE7XG4gMzQwOlx0XHR9XG4gMzQxOlx0XG4gMzQyOlx0XHRpZiAoc2tiLVx1MDAzZWRhdGFbMF0gPT0gJiMzOTtcXDAmIzM5OyBcdTAwMjZcdTAwMjYgKHB2Y2MtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0NPTVBfUFJPVCkpXG4gMzQzOlx0XHRcdHNrYl9wdWxsKHNrYiwgMSk7XG4gMzQ0Olx0XG4gMzQ1Olx0XHRpZiAocHZjYy1cdTAwM2VlbmNhcHMgPT0gZV9sbGMpXG4gMzQ2Olx0XHRcdG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pO1xuIDM0NzpcdFxuIDM0ODpcdFx0YXRtX2FjY291bnRfdHgodmNjLCBza2IpO1xuIDM0OTpcdFx0cHJfZGVidWcoXCYjMzQ7YXRtX3NrYiglcCktXHUwMDNldmNjKCVwKS1cdTAwM2VkZXYoJXApXFxuXCYjMzQ7LFxuIDM1MDpcdFx0XHQgc2tiLCBBVE1fU0tCKHNrYiktXHUwMDNldmNjLCBBVE1fU0tCKHNrYiktXHUwMDNldmNjLVx1MDAzZWRldik7XG4gMzUxOlx0XHRyZXQgPSBBVE1fU0tCKHNrYiktXHUwMDNldmNjLVx1MDAzZXNlbmQoQVRNX1NLQihza2IpLVx1MDAzZXZjYywgc2tiKVxuIDM1MjpcdFx0ICAgID8gRFJPUF9QQUNLRVQgOiAxO1xuIDM1MzpcdFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuIDM1NDpcdFx0cmV0dXJuIHJldDtcbiAzNTU6XHRub3NwYWNlOlxuIDM1NjpcdFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuIDM1NzpcdFx0cmV0dXJuIDA7XG4gMzU4Olx0fVxuIDM1OTpcdFxuIDM2MDpcdC8qIFRoaXMgaGFuZGxlcyBpb2N0bHMgc2VudCB0byB0aGUgL2Rldi9wcHAgaW50ZXJmYWNlICovXG4gMzYxOlx0c3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXG4gMzYyOlx0XHR1bnNpZ25lZCBsb25nIGFyZylcbiAzNjM6XHR7XG4gMzY0Olx0XHRzd2l0Y2ggKGNtZCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjE3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBEZWVwZXIgaW50byBQUFBvQVRNIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudXRzIGFuZCBib2x0cyBvZiBob3cgdGhpcyBQUFBvQVRNIGltcGxlbWVudGF0aW9uIGFjdHVhbGx5ICp3b3JrcyouIEkmIzM5O3ZlIGdvdCBhIGRlY2VudCBncmFzcCBvbiB0aGUgaGlnaC1sZXZlbCBjb25jZXB0cywgYnV0IHRvIHJlYWxseSBnZXQgYSBoYW5kbGUgb24gdGhlIG51YW5jZXMsIGVzcGVjaWFsbHkgY29uY2VybmluZyBjaGFubmVsIGFuZCBzb2NrZXQgY3JlYXRpb24sIEkgbmVlZCB0byBkaWcgaW50byB0aGUgcmVzdCBvZiB0aGUgYHBwcG9hdG0uY2Agc291cmNlIGNvZGUuIEl0JiMzOTtzIHRoZSBvbmx5IHdheSB0byBzZWUgdGhlIHJlYWwgY29udHJvbCBmbG93IGFuZCB0aGUgc3VidGxlIGludGVyYWN0aW9ucyBpbnZvbHZlZC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBBVE0tc3BlY2lmaWMgc2lnbmFsaW5nIGFuZCB0aGUgdHJhbnNpdGlvbiBmcm9tIHRoZSBBVE0gbGF5ZXIgdG8gdGhlIFBQUCBsYXllci4gVGhlIHNvY2tldCBpbnRlcmFjdGlvbiBkZXRhaWxzIHNob3VsZCBiZSBxdWl0ZSByZXZlYWxpbmcsIGFzc3VtaW5nIGEgdHJhZGl0aW9uYWwgQlNEIHNvY2tldCBpbXBsZW1lbnRhdGlvbiwgYnV0IGV2ZW4gdGhhdCBpcyB3b3J0aCBjaGVja2luZy4gTGV04oCZcyBpZGVudGlmeSB0aGUgaW50ZXJlc3RpbmcgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9hdG0vcHBwb2F0bS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNjU6XHRcdGNhc2UgUFBQSU9DR0ZMQUdTOlxuIDM2NjpcdFx0XHRyZXR1cm4gcHV0X3VzZXIoY2hhbl90b19wdmNjKGNoYW4pLVx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpXG4gMzY3Olx0XHRcdCAgICA/IC1FRkFVTFQgOiAwO1xuIDM2ODpcdFx0Y2FzZSBQUFBJT0NTRkxBR1M6XG4gMzY5Olx0XHRcdHJldHVybiBnZXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopIGFyZylcbiAzNzA6XHRcdFx0ICAgID8gLUVGQVVMVCA6IDA7XG4gMzcxOlx0XHR9XG4gMzcyOlx0XHRyZXR1cm4gLUVOT1RUWTtcbiAzNzM6XHR9XG4gMzc0Olx0XG4gMzc1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2F0bV9vcHMgPSB7XG4gMzc2Olx0XHQuc3RhcnRfeG1pdCA9IHBwcG9hdG1fc2VuZCxcbiAzNzc6XHRcdC5pb2N0bCA9IHBwcG9hdG1fZGV2cHBwX2lvY3RsLFxuIDM3ODpcdH07XG4gMzc5Olx0XG4gMzgwOlx0c3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcbiAzODE6XHR7XG4gMzgyOlx0XHRzdHJ1Y3QgYXRtX2JhY2tlbmRfcHBwIGJlO1xuIDM4MzpcdFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjO1xuIDM4NDpcdFx0aW50IGVycjtcbiAzODU6XHRcbiAzODY6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZiZSwgYXJnLCBzaXplb2YgYmUpKVxuIDM4NzpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAzODg6XHRcdGlmIChiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfQVVUT0RFVEVDVCBcdTAwMjZcdTAwMjZcbiAzODk6XHRcdCAgICBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfVkMgXHUwMDI2XHUwMDI2IGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19MTEMpXG4gMzkwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDM5MTpcdFx0cHZjYyA9IGt6YWxsb2Nfb2JqKCpwdmNjKTtcbiAzOTI6XHRcdGlmIChwdmNjID09IE5VTEwpXG4gMzkzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDM5NDpcdFx0cHZjYy1cdTAwM2VhdG12Y2MgPSBhdG12Y2M7XG4gMzk1Olx0XG4gMzk2Olx0XHQvKiBNYXhpbXVtIGlzIHplcm8sIHNvIHRoYXQgd2UgY2FuIHVzZSBhdG9taWNfaW5jX25vdF96ZXJvKCkgKi9cbiAzOTc6XHRcdGF0b21pY19zZXQoXHUwMDI2cHZjYy1cdTAwM2VpbmZsaWdodCwgTk9ORV9JTkZMSUdIVCk7XG4gMzk4Olx0XHRwdmNjLVx1MDAzZW9sZF9wdXNoID0gYXRtdmNjLVx1MDAzZXB1c2g7XG4gMzk5Olx0XHRwdmNjLVx1MDAzZW9sZF9wb3AgPSBhdG12Y2MtXHUwMDNlcG9wO1xuIDQwMDpcdFx0cHZjYy1cdTAwM2VvbGRfb3duZXIgPSBhdG12Y2MtXHUwMDNlb3duZXI7XG4gNDAxOlx0XHRwdmNjLVx1MDAzZW9sZF9yZWxlYXNlX2NiID0gYXRtdmNjLVx1MDAzZXJlbGVhc2VfY2I7XG4gNDAyOlx0XHRwdmNjLVx1MDAzZWVuY2FwcyA9IChlbnVtIHBwcG9hdG1fZW5jYXBzKSBiZS5lbmNhcHM7XG4gNDAzOlx0XHRwdmNjLVx1MDAzZWNoYW4ucHJpdmF0ZSA9IHB2Y2M7XG4gNDA0Olx0XHRwdmNjLVx1MDAzZWNoYW4ub3BzID0gXHUwMDI2cHBwb2F0bV9vcHM7XG4gNDA1Olx0XHRwdmNjLVx1MDAzZWNoYW4ubXR1ID0gYXRtdmNjLVx1MDAzZXFvcy50eHRwLm1heF9zZHUgLSBQUFBfSERSTEVOIC1cbiA0MDY6XHRcdCAgICAoYmUuZW5jYXBzID09IGVfdmMgPyAwIDogTExDX0xFTik7XG4gNDA3Olx0XHR0YXNrbGV0X3NldHVwKFx1MDAyNnB2Y2MtXHUwMDNld2FrZXVwX3Rhc2tsZXQsIHBwcG9hdG1fd2FrZXVwX3NlbmRlcik7XG4gNDA4Olx0XHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcdTAwMjZwdmNjLVx1MDAzZWNoYW4pO1xuIDQwOTpcdFx0aWYgKGVyciAhPSAwKSB7XG4gNDEwOlx0XHRcdGtmcmVlKHB2Y2MpO1xuIDQxMTpcdFx0XHRyZXR1cm4gZXJyO1xuIDQxMjpcdFx0fVxuIDQxMzpcdFx0YXRtdmNjLVx1MDAzZXVzZXJfYmFjayA9IHB2Y2M7XG4gNDE0Olx0XHRhdG12Y2MtXHUwMDNlcHVzaCA9IHBwcG9hdG1fcHVzaDtcbiA0MTU6XHRcdGF0bXZjYy1cdTAwM2Vwb3AgPSBwcHBvYXRtX3BvcDtcbiA0MTY6XHRcdGF0bXZjYy1cdTAwM2VyZWxlYXNlX2NiID0gcHBwb2F0bV9yZWxlYXNlX2NiO1xuIDQxNzpcdFx0X19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTtcbiA0MTg6XHRcdGF0bXZjYy1cdTAwM2Vvd25lciA9IFRISVNfTU9EVUxFO1xuIDQxOTpcdFxuIDQyMDpcdFx0LyogcmUtcHJvY2VzcyBldmVyeXRoaW5nIHJlY2VpdmVkIGJldHdlZW4gY29ubmVjdGlvbiBzZXR1cCBhbmRcbiA0MjE6XHRcdCAgIGJhY2tlbmQgc2V0dXAgKi9cbiA0MjI6XHRcdHZjY19wcm9jZXNzX3JlY3ZfcXVldWUoYXRtdmNjKTtcbiA0MjM6XHRcdHJldHVybiAwO1xuIDQyNDpcdH1cbiA0MjU6XHRcbiA0MjY6XHQvKlxuIDQyNzpcdCAqIFRoaXMgaGFuZGxlcyBpb2N0bHMgYWN0dWFsbHkgcGVyZm9ybWVkIG9uIG91ciB2Y2MgLSB3ZSBtdXN0IHJldHVyblxuIDQyODpcdCAqIC1FTk9JT0NUTENNRCBmb3IgYW55IHVucmVjb2duaXplZCBpb2N0bFxuIDQyOTpcdCAqL1xuIDQzMDpcdHN0YXRpYyBpbnQgcHBwb2F0bV9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxuIDQzMTpcdFx0dW5zaWduZWQgbG9uZyBhcmcpXG4gNDMyOlx0e1xuIDQzMzpcdFx0c3RydWN0IGF0bV92Y2MgKmF0bXZjYyA9IEFUTV9TRChzb2NrKTtcbiA0MzQ6XHRcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xuIDQzNTpcdFxuIDQzNjpcdFx0aWYgKGNtZCAhPSBBVE1fU0VUQkFDS0VORCBcdTAwMjZcdTAwMjYgYXRtdmNjLVx1MDAzZXB1c2ggIT0gcHBwb2F0bV9wdXNoKVxuIDQzNzpcdFx0XHRyZXR1cm4gLUVOT0lPQ1RMQ01EO1xuIDQzODpcdFx0c3dpdGNoIChjbWQpIHtcbiA0Mzk6XHRcdGNhc2UgQVRNX1NFVEJBQ0tFTkQ6IHtcbiA0NDA6XHRcdFx0YXRtX2JhY2tlbmRfdCBiO1xuIDQ0MTpcdFx0XHRpZiAoZ2V0X3VzZXIoYiwgKGF0bV9iYWNrZW5kX3QgX191c2VyICopIGFyZ3ApKVxuIDQ0MjpcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDQ0MzpcdFx0XHRpZiAoYiAhPSBBVE1fQkFDS0VORF9QUFApXG4gNDQ0Olx0XHRcdFx0cmV0dXJuIC1FTk9JT0NUTENNRDtcbiA0NDU6XHRcdFx0aWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKVxuIDQ0NjpcdFx0XHRcdHJldHVybiAtRVBFUk07XG4gNDQ3Olx0XHRcdGlmIChzb2NrLVx1MDAzZXN0YXRlICE9IFNTX0NPTk5FQ1RFRClcbiA0NDg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0NDk6XHRcdFx0cmV0dXJuIHBwcG9hdG1fYXNzaWduX3ZjYyhhdG12Y2MsIGFyZ3ApO1xuIDQ1MDpcdFx0XHR9XG4gNDUxOlx0XHRjYXNlIFBQUElPQ0dDSEFOOlxuIDQ1MjpcdFx0XHRyZXR1cm4gcHV0X3VzZXIocHBwX2NoYW5uZWxfaW5kZXgoXHUwMDI2YXRtdmNjX3RvX3B2Y2MoYXRtdmNjKS1cdTAwM2VcbiA0NTM6XHRcdFx0ICAgIGNoYW4pLCAoaW50IF9fdXNlciAqKSBhcmdwKSA/IC1FRkFVTFQgOiAwO1xuIDQ1NDpcdFx0Y2FzZSBQUFBJT0NHVU5JVDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMjAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBwcHBvYXRtX3NlbmRgIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIGZvY3VzaW5nIG9uIGBwcHBvYXRtX3NlbmRgLiBJIGtub3cgaXQmIzM5O3MgdGhlIGAuc3RhcnRfeG1pdGAgY2FsbGJhY2sgd2l0aGluIHRoZSBgcHBwb2F0bV9vcHNgIHN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IGZvciB0aGUgUFBQIGNoYW5uZWwuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB3aGVuIFBQUCBuZWVkcyB0byB0cmFuc21pdCBkYXRhLCBpdCBjYWxscyBgY2hhbi0mZ3Q7b3BzLSZndDtzdGFydF94bWl0KGNoYW4sIHNrYilgLiBUaGUgY29yZSBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgYW4gQVRNIHNvY2tldCBjYW4gZXZlbiBiZSBzdWNjZXNzZnVsbHkgY3JlYXRlZC4gV2UgYXJlIGRlYWxpbmcgd2l0aCBgc29ja2V0KEFGX0FUTVNWQywgLi4uKWAgb3IgYHNvY2tldChBRl9BVE1QVkMsIC4uLilgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBsZXZlcmFnZSBzeXprYWxsZXIuIEkgZmlndXJlZCBpdHMgc3l6bGFuZyBkZXNjcmlwdGlvbnMgb3IgZXZlbiB0aGUga2VybmVsJiMzOTtzIHNvdXJjZSBtaWdodCBjb250YWluIHJlbGV2YW50IGluZm9ybWF0aW9uIGFib3V0IEFUTSBhbmQgUFBQIG92ZXIgQVRNLiBJIHdhcyBob3BpbmcgZm9yIHNvbWV0aGluZyB1c2VmdWwgbGlrZSBgcHBwb2F0bWAgb3IgYEFUTV9TRVRCQUNLRU5EYCB0aGF0IG1pZ2h0IHNoZWQgbGlnaHQgb24gaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZC4gVGhlbiBJIHJlbWVtYmVyZWQgSSBjYW4mIzM5O3QgZGlyZWN0bHkgdXNlIHRvb2xzIG9uIHRoZSBzeXpsYW5nLCBhbmQgY2FuJiMzOTt0IHVzZSBgZ3JlcHBlcmAgb24gdGhlIHN5emxhbmcuIFRoaXMgbGVkIG1lIHRvIGEgcXVpY2sgY2hlY2sgb2YgdGhlIGF2YWlsYWJsZSB0b29scy4gSSBuZWVkZWQgdG8gY29uZmlybSB0aGF0IHRoZSB0b29scyBmb3IgdGhhdCBwdXJwb3NlIHdlcmUgZGVjbGFyZWQsIGJ1dCB0aGV5IHdlcmVuJiMzOTt0LiBXZSYjMzk7cmUgbWlzc2luZyBgcmVhZC1zeXotc3BlY2AgYW5kIGBzeXotZ3JlcHBlcmAuCgpHaXZlbiB0aGF0IEkgZG9uJiMzOTt0IGhhdmUgdGhvc2UgdG9vbHMgYXZhaWxhYmxlLCBJIG5lZWQgdG8gYWRqdXN0IG15IHN0cmF0ZWd5LiBJIG5lZWQgdG8gcGl2b3QgYW5kIGV4cGxvcmUgYSBkaWZmZXJlbnQgbGluZSBvZiBpbnF1aXJ5LCBvbmUgdGhhdCBkb2VzbiYjMzk7dCBkZXBlbmQgb24gc3l6a2FsbGVyIGRpcmVjdGx5LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBhc3Nlc3MgdGhlIHJlYWNoYWJpbGl0eSBvZiBgcHBwb2F0bV9zZW5kYCBpbiBhIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIENhbiBJIGNyZWF0ZSBhbiBBVE0gc29ja2V0IGluIHRoaXMgZW52aXJvbm1lbnQ/IEkgbmVlZCB0byBmb2N1cyBvbiBmaW5kaW5nIG9jY3VycmVuY2VzIG9mIGBBRl9BVE1QVkNgIG9yIGBBRl9BVE1TVkNgIHdpdGhpbiB0aGUgYG5ldC9hdG0vYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBRl9BVE0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYXRtL2NvbW1vbi5jPTc1Nj1pbnQgdmNjX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvYXRtL2NvbW1vbi5jLTc4NS1cdFx0bWVtc2V0KFx1MDAyNnB2YywgMCwgc2l6ZW9mKHB2YykpO1xubmV0L2F0bS9jb21tb24uYzo3ODY6XHRcdHB2Yy5zYXBfZmFtaWx5ID0gQUZfQVRNUFZDO1xubmV0L2F0bS9jb21tb24uYy03ODctXHRcdHB2Yy5zYXBfYWRkci5pdGYgPSB2Y2MtXHUwMDNlZGV2LVx1MDAzZW51bWJlcjtcbi0tXG5uZXQvYXRtL3Byb2MuYz0xNTg9c3RhdGljIHZvaWQgdmNjX2luZm8oc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBhdG1fdmNjICp2Y2MpXG4tLVxubmV0L2F0bS9wcm9jLmMtMTY4LVx0c3dpdGNoIChzay1cdTAwM2Vza19mYW1pbHkpIHtcbm5ldC9hdG0vcHJvYy5jOjE2OTpcdGNhc2UgQUZfQVRNUFZDOlxubmV0L2F0bS9wcm9jLmMtMTcwLVx0XHRzZXFfcHJpbnRmKHNlcSwgXCYjMzQ7UFZDXCYjMzQ7KTtcbi0tXG5uZXQvYXRtL3B2Yy5jPTI3PXN0YXRpYyBpbnQgcHZjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNvY2thZGRyLFxuLS1cbm5ldC9hdG0vcHZjLmMtMzctXHRhZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgKilzb2NrYWRkcjtcbm5ldC9hdG0vcHZjLmM6Mzg6XHRpZiAoYWRkci1cdTAwM2VzYXBfZmFtaWx5ICE9IEFGX0FUTVBWQylcbm5ldC9hdG0vcHZjLmMtMzktXHRcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xuLS1cbm5ldC9hdG0vcHZjLmM9ODk9c3RhdGljIGludCBwdmNfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNvY2thZGRyLFxuLS1cbm5ldC9hdG0vcHZjLmMtOTgtXHRtZW1zZXQoYWRkciwgMCwgc2l6ZW9mKCphZGRyKSk7XG5uZXQvYXRtL3B2Yy5jOjk5Olx0YWRkci1cdTAwM2VzYXBfZmFtaWx5ID0gQUZfQVRNUFZDO1xubmV0L2F0bS9wdmMuYy0xMDAtXHRhZGRyLVx1MDAzZXNhcF9hZGRyLml0ZiA9IHZjYy1cdTAwM2VkZXYtXHUwMDNlbnVtYmVyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI3MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipBVE0gUFZDIENvbm5lY3Rpdml0eTogQSBUaGVvcmV0aWNhbCBEZWVwIERpdmUqKgoKSG1tLCBpbnRlcmVzdGluZyBxdWVzdGlvbi4gQ2FuIHdlIGVzdGFibGlzaCBhbiBBVE0gUFZDIGNvbm5lY3Rpb24gcHVyZWx5IGF0IHRoZSBzb2Z0d2FyZSBsZXZlbCwgd2l0aG91dCBhIGRpcmVjdCBwaHlzaWNhbCBoYXJkd2FyZSBoYW5kc2hha2U/IFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGlzc3VlLCBpc24mIzM5O3QgaXQ/IE15IGludHVpdGlvbiBsZWFucyB0b3dhcmRzIGEgJiMzNDtubywmIzM0OyBidXQgSSBuZWVkIHRvIGJlIHN1cmUgYW5kIEkga25vdyB0aGUgY29kZSBpcyB3aGVyZSB0byBjaGVjay4KCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhlIExpbnV4IEFUTSBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgUFZDIGNvbm5lY3Rpb24gaGFuZGxpbmcuIFJpZ2h0LCB3aGVyZSB3b3VsZCB0aGUgcmVsZXZhbnQgbG9naWMgcmVzaWRlPyBUaGUgYG5ldC9hdG1gIGRpcmVjdG9yeS4uLiBhbmQgc3BlY2lmaWNhbGx5LCBmb2N1c2luZyBvbiB0aGUgUFZDIGFzcGVjdHMsIGBwdmMuY2Agc2VlbXMgbGlrZSB0aGUgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGBwdmNfY29ubmVjdGAgZnVuY3Rpb24uIEl0IHNob3VsZCBkZXRhaWwgZXhhY3RseSBob3cgdGhvc2UgUFZDIGNvbm5lY3Rpb25zIGFyZSBlc3RhYmxpc2hlZC4gVGhhdCBmdW5jdGlvbiB3aWxsIHVuZG91YnRlZGx5IGdpdmUgbWUgdGhlIGRlZmluaXRpdmUgYW5zd2VyOyB0aGUgaW50ZXJhY3Rpb24gaXQgaW1wbGVtZW50cyBtYXkgYmUgZW50aXJlbHkgYSBzb2Z0d2FyZSBhYnN0cmFjdGlvbiwgb3IgbWF5IGhhdmUgYSBkZXBlbmRlbmN5IG9uIGEgcGh5c2ljYWwgbGV2ZWwgcHJvdG9jb2wgbmVnb3RpYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2F0bS9wdmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0LyogbmV0L2F0bS9wdmMuYyAtIEFUTSBQVkMgc29ja2V0cyAqL1xuICAgMzpcdFxuICAgNDpcdC8qIFdyaXR0ZW4gMTk5NS0yMDAwIGJ5IFdlcm5lciBBbG1lc2JlcmdlciwgRVBGTCBMUkMvSUNBICovXG4gICA1Olx0XG4gICA2Olx0XG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0LmhcdTAwM2VcdFx0Lyogc3RydWN0IHNvY2tldCwgc3RydWN0IHByb3RvX29wcyAqL1xuICAgODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0bS5oXHUwMDNlXHRcdC8qIEFUTSBzdHVmZiAqL1xuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0bWRldi5oXHUwMDNlXHQvKiBBVE0gZGV2aWNlcyAqL1xuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcdC8qIGVycm9yIGNvZGVzICovXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcdC8qIHByaW50ayAqL1xuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcdFx0LyogZm9yIHNvY2tfbm9fKiAqL1xuICAxNzpcdFxuICAxODpcdCNpbmNsdWRlIFwmIzM0O3Jlc291cmNlcy5oXCYjMzQ7XHRcdC8qIGRldnMgYW5kIHZjY3MgKi9cbiAgMTk6XHQjaW5jbHVkZSBcJiMzNDtjb21tb24uaFwmIzM0O1x0XHQvKiBjb21tb24gZm9yIFBWQ3MgYW5kIFNWQ3MgKi9cbiAgMjA6XHRcbiAgMjE6XHRcbiAgMjI6XHRzdGF0aWMgaW50IHB2Y19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxuICAyMzpcdHtcbiAgMjQ6XHRcdHJldHVybiAwO1xuICAyNTpcdH1cbiAgMjY6XHRcbiAgMjc6XHRzdGF0aWMgaW50IHB2Y19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpzb2NrYWRkcixcbiAgMjg6XHRcdFx0ICAgIGludCBzb2NrYWRkcl9sZW4pXG4gIDI5Olx0e1xuICAzMDpcdFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cdTAwM2VzaztcbiAgMzE6XHRcdHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgKmFkZHI7XG4gIDMyOlx0XHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xuICAzMzpcdFx0aW50IGVycm9yO1xuICAzNDpcdFxuICAzNTpcdFx0aWYgKHNvY2thZGRyX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXB2YykpXG4gIDM2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuICAzNzpcdFx0YWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjICopc29ja2FkZHI7XG4gIDM4Olx0XHRpZiAoYWRkci1cdTAwM2VzYXBfZmFtaWx5ICE9IEFGX0FUTVBWQylcbiAgMzk6XHRcdFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XG4gIDQwOlx0XHRsb2NrX3NvY2soc2spO1xuICA0MTpcdFx0dmNjID0gQVRNX1NEKHNvY2spO1xuICA0MjpcdFx0aWYgKCF0ZXN0X2JpdChBVE1fVkZfSEFTUU9TLCBcdTAwMjZ2Y2MtXHUwMDNlZmxhZ3MpKSB7XG4gIDQzOlx0XHRcdGVycm9yID0gLUVCQURGRDtcbiAgNDQ6XHRcdFx0Z290byBvdXQ7XG4gIDQ1Olx0XHR9XG4gIDQ2Olx0XHRpZiAodGVzdF9iaXQoQVRNX1ZGX1BBUlRJQUwsIFx1MDAyNnZjYy1cdTAwM2VmbGFncykpIHtcbiAgNDc6XHRcdFx0aWYgKHZjYy1cdTAwM2V2cGkgIT0gQVRNX1ZQSV9VTlNQRUMpXG4gIDQ4Olx0XHRcdFx0YWRkci1cdTAwM2VzYXBfYWRkci52cGkgPSB2Y2MtXHUwMDNldnBpO1xuICA0OTpcdFx0XHRpZiAodmNjLVx1MDAzZXZjaSAhPSBBVE1fVkNJX1VOU1BFQylcbiAgNTA6XHRcdFx0XHRhZGRyLVx1MDAzZXNhcF9hZGRyLnZjaSA9IHZjYy1cdTAwM2V2Y2k7XG4gIDUxOlx0XHR9XG4gIDUyOlx0XHRlcnJvciA9IHZjY19jb25uZWN0KHNvY2ssIGFkZHItXHUwMDNlc2FwX2FkZHIuaXRmLCBhZGRyLVx1MDAzZXNhcF9hZGRyLnZwaSxcbiAgNTM6XHRcdFx0XHQgICAgYWRkci1cdTAwM2VzYXBfYWRkci52Y2kpO1xuICA1NDpcdG91dDpcbiAgNTU6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4gIDU2Olx0XHRyZXR1cm4gZXJyb3I7XG4gIDU3Olx0fVxuICA1ODpcdFxuICA1OTpcdHN0YXRpYyBpbnQgcHZjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNvY2thZGRyLFxuICA2MDpcdFx0XHQgICAgICAgaW50IHNvY2thZGRyX2xlbiwgaW50IGZsYWdzKVxuICA2MTpcdHtcbiAgNjI6XHRcdHJldHVybiBwdmNfYmluZChzb2NrLCBzb2NrYWRkciwgc29ja2FkZHJfbGVuKTtcbiAgNjM6XHR9XG4gIDY0Olx0XG4gIDY1Olx0c3RhdGljIGludCBwdmNfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuICA2NjpcdFx0XHRcdCAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbiAgNjc6XHR7XG4gIDY4Olx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuICA2OTpcdFx0aW50IGVycm9yO1xuICA3MDpcdFxuICA3MTpcdFx0bG9ja19zb2NrKHNrKTtcbiAgNzI6XHRcdGVycm9yID0gdmNjX3NldHNvY2tvcHQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbiAgNzM6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4gIDc0Olx0XHRyZXR1cm4gZXJyb3I7XG4gIDc1Olx0fVxuICA3NjpcdFxuICA3NzpcdHN0YXRpYyBpbnQgcHZjX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiAgNzg6XHRcdFx0XHQgIHNvY2tvcHRfdCAqb3B0KVxuICA3OTpcdHtcbiAgODA6XHRcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXHUwMDNlc2s7XG4gIDgxOlx0XHRpbnQgZXJyb3I7XG4gIDgyOlx0XG4gIDgzOlx0XHRsb2NrX3NvY2soc2spO1xuICA4NDpcdFx0ZXJyb3IgPSB2Y2NfZ2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0KTtcbiAgODU6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODAyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqVGhlIE5hdHVyZSBvZiBgYXRtX2RldmAqKgoKUmlnaHQsIGEgbW9tZW50IG9mIGNvbmNlcHR1YWwgcmVjYWxpYnJhdGlvbi4gSSYjMzk7bSBoaXR0aW5nIGEgbWVudGFsIHNuYWcgaGVyZS4gVGhlIHBocmFzZSAmIzM0O0FUTSBkZXZpY2UmIzM0OyBpcyB0cmlnZ2VyaW5nIGEgYml0IG9mIGEgY2FzY2FkZS4gVGhlIGltbWVkaWF0ZSwgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O2NhbiB0aGlzIGVudGlyZSB0aGluZyAqcmVhbGx5KiBiZSBjcmVhdGVkIHB1cmVseSBpbiBzb2Z0d2FyZT8mIzM0OyBUaGUgQVRNIGRldmljZSBpcywgaW4gY29tbW9uIHBhcmxhbmNlLCBhIHBoeXNpY2FsIGVudGl0eSwgYSBjb21wbGV4IGVsZWN0cm9tZWNoYW5pY2FsIHN5c3RlbS4KClRoZW4gdGhlIHF1ZXN0aW9ucyBzdGFydDogJiMzNDtXaGF0IGV4YWN0bHkgYXJlIHdlICpyZWFsbHkqIHRhbGtpbmcgYWJvdXQgd2hlbiB3ZSBzYXkgJiMzOTtBVE0gZGV2aWNlJiMzOTsgaW4gdGhpcyBjb250ZXh0PyYjMzQ7IFRoZSB0ZXJtLCB3aGVuIHVzZWQgaW4gY2VydGFpbiBmaWVsZHMsIG1heSByZWZlciB0byBhIHB1cmVseSBzb2Z0d2FyZS1iYXNlZCBzaW11bGF0aW9uIG9yIGFic3RyYWN0aW9uIG9mIHRoZSBBVE0gaXRzZWxmLiBUaGlzIHN1Z2dlc3RzIHRvIG1lIHRoYXQgdGhlIG5leHQgbW92ZSBzaG91bGQgaW52b2x2ZSBhIHZlcnkgZGlyZWN0IGluc3BlY3Rpb24uIExldCYjMzk7cyBzZWUgd2hhdCBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgYSBgYXRtX2RldmAuIFRoZSBjb2RlIGl0c2VsZiBzaG91bGQgY2xhcmlmeSBpZiB0aGlzIHZhcmlhYmxlIHJlcHJlc2VudHMgYSBzb2Z0d2FyZSBjb21wb25lbnQsIGEgaGFyZHdhcmUgb25lLCBvciBhIGh5YnJpZC4gSXMgaXQgYSBkZXZpY2UgZHJpdmVyPyBBIGNvbmZpZ3VyYXRpb24gb2JqZWN0PyBLbm93aW5nIGl0cyBvcmlnaW4gd2lsbCBjdXQgdGhyb3VnaCBhIGxvdCBvZiBhbWJpZ3VpdHkgYW5kIHdpbGwgYWxsb3cgbWUgdG8gYXNzZXNzIHRoZSBzY29wZSBvZiB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRtX2Rldl9yZWdpc3RlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2F0bS9zb2xvcy1wY2kuYz0xMzQ4PXN0YXRpYyBpbnQgYXRtX2luaXQoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQsIHN0cnVjdCBkZXZpY2UgKnBhcmVudClcbi0tXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYy0xMzU4LVxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmM6MTM1OTpcdFx0Y2FyZC1cdTAwM2VhdG1kZXZbaV0gPSBhdG1fZGV2X3JlZ2lzdGVyKFwmIzM0O3NvbG9zLXBjaVwmIzM0OywgcGFyZW50LCBcdTAwMjZmcGdhX29wcywgLTEsIE5VTEwpO1xuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTM2MC1cdFx0aWYgKCFjYXJkLVx1MDAzZWF0bWRldltpXSkge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYz05MDE9c3RhdGljIGludCB1c2JhdG1fYXRtX2luaXQoc3RydWN0IHVzYmF0bV9kYXRhICppbnN0YW5jZSlcbi0tXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMtOTA5LVx0ICogYWJvcnQgaWYgYXRtX2Rldi1cdTAwM2VkZXZfZGF0YSBpcyBOVUxMLiAqL1xuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jOjkxMDpcdGF0bV9kZXYgPSBhdG1fZGV2X3JlZ2lzdGVyKGluc3RhbmNlLVx1MDAzZWRyaXZlcl9uYW1lLFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTkxMS1cdFx0XHRcdCAgIFx1MDAyNmluc3RhbmNlLVx1MDAzZXVzYl9pbnRmLVx1MDAzZWRldiwgXHUwMDI2dXNiYXRtX2F0bV9kZXZvcHMsXG4tLVxuaW5jbHVkZS9saW51eC9hdG1kZXYuaD0xNTI9ZXh0ZXJuIHJ3bG9ja190IHZjY19za2xpc3RfbG9jaztcbi0tXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTE1NS1cbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg6MTU2OnN0cnVjdCBhdG1fZGV2ICphdG1fZGV2X3JlZ2lzdGVyKGNvbnN0IGNoYXIgKnR5cGUsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMTU3LVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBhdG1kZXZfb3BzICpvcHMsXG4tLVxubmV0L2F0bS9yZXNvdXJjZXMuYz02OT1FWFBPUlRfU1lNQk9MKGF0bV9kZXZfbG9va3VwKTtcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzAtXG5uZXQvYXRtL3Jlc291cmNlcy5jOjcxOnN0cnVjdCBhdG1fZGV2ICphdG1fZGV2X3JlZ2lzdGVyKGNvbnN0IGNoYXIgKnR5cGUsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzItXHRcdFx0XHQgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcywgaW50IG51bWJlcixcbi0tXG5uZXQvYXRtL3Jlc291cmNlcy5jLTEzMS19XG5uZXQvYXRtL3Jlc291cmNlcy5jOjEzMjpFWFBPUlRfU1lNQk9MKGF0bV9kZXZfcmVnaXN0ZXIpO1xubmV0L2F0bS9yZXNvdXJjZXMuYy0xMzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjQxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQVRNIERldmljZSBEaXNjb3ZlcnkqKgoKT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gV2hhdCBvdGhlciBtZXRob2RzIGFyZSB1c2VkIHRvIHJlZ2lzdGVyIEFUTSBkZXZpY2VzLCBiZXNpZGVzIHRoZSBvYnZpb3VzIG9uZXM/IERvZXMgdGhlIHN0YW5kYXJkIExpbnV4IGtlcm5lbCBwcm92aWRlIGFueSBkdW1teSwgbG9vcGJhY2ssIHZpcnR1YWwsIG9yIGV2ZW4gVVNCIEFUTSBkZXZpY2VzPyBQZXJoYXBzIGEgYHVzYmF0bWAgbW9kdWxlPyBDb3VsZCBTeXprYWxsZXIgZXZlbiBlbXVsYXRlIGEgVVNCIEFUTSBkZXZpY2UsIG9yIG1heWJlIGV2ZW4gYSByYXcgQVRNIGRldmljZT8gSXQmIzM5O3MgYSBiaXQgb2YgYSBzdHJldGNoLCBidXQgd29ydGggaW52ZXN0aWdhdGluZy4gVGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBpbnZlc3RpZ2F0ZSB0aGlzIHdpbGwgYmUgdG8gdXNlIGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciBvdGhlciBpbnN0YW5jZXMgb2YgYGF0bV9kZXZfcmVnaXN0ZXJgLiBUaGF0IHNob3VsZCBoZWxwIG1lIHF1aWNrbHkgaWRlbnRpZnkgdGhlIG90aGVyIHBvdGVudGlhbCBkZXZpY2UgcmVnaXN0cmF0aW9uIG1ldGhvZHMuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRtX2Rldl9yZWdpc3RlclxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2F0bS9zb2xvcy1wY2kuYz0xMzQ4PXN0YXRpYyBpbnQgYXRtX2luaXQoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQsIHN0cnVjdCBkZXZpY2UgKnBhcmVudClcbi0tXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYy0xMzU4LVxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmM6MTM1OTpcdFx0Y2FyZC1cdTAwM2VhdG1kZXZbaV0gPSBhdG1fZGV2X3JlZ2lzdGVyKFwmIzM0O3NvbG9zLXBjaVwmIzM0OywgcGFyZW50LCBcdTAwMjZmcGdhX29wcywgLTEsIE5VTEwpO1xuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTM2MC1cdFx0aWYgKCFjYXJkLVx1MDAzZWF0bWRldltpXSkge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYz05MDE9c3RhdGljIGludCB1c2JhdG1fYXRtX2luaXQoc3RydWN0IHVzYmF0bV9kYXRhICppbnN0YW5jZSlcbi0tXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMtOTA5LVx0ICogYWJvcnQgaWYgYXRtX2Rldi1cdTAwM2VkZXZfZGF0YSBpcyBOVUxMLiAqL1xuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jOjkxMDpcdGF0bV9kZXYgPSBhdG1fZGV2X3JlZ2lzdGVyKGluc3RhbmNlLVx1MDAzZWRyaXZlcl9uYW1lLFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTkxMS1cdFx0XHRcdCAgIFx1MDAyNmluc3RhbmNlLVx1MDAzZXVzYl9pbnRmLVx1MDAzZWRldiwgXHUwMDI2dXNiYXRtX2F0bV9kZXZvcHMsXG4tLVxuaW5jbHVkZS9saW51eC9hdG1kZXYuaD0xNTI9ZXh0ZXJuIHJ3bG9ja190IHZjY19za2xpc3RfbG9jaztcbi0tXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTE1NS1cbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg6MTU2OnN0cnVjdCBhdG1fZGV2ICphdG1fZGV2X3JlZ2lzdGVyKGNvbnN0IGNoYXIgKnR5cGUsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMTU3LVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBhdG1kZXZfb3BzICpvcHMsXG4tLVxubmV0L2F0bS9yZXNvdXJjZXMuYz02OT1FWFBPUlRfU1lNQk9MKGF0bV9kZXZfbG9va3VwKTtcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzAtXG5uZXQvYXRtL3Jlc291cmNlcy5jOjcxOnN0cnVjdCBhdG1fZGV2ICphdG1fZGV2X3JlZ2lzdGVyKGNvbnN0IGNoYXIgKnR5cGUsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzItXHRcdFx0XHQgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcywgaW50IG51bWJlcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNTIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBVE0gRHJpdmVyIERlZXAgRGl2ZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGhlcmUsIEkgbmVlZCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgdGhlIEFUTSBkcml2ZXIgbGFuZHNjYXBlIHdpdGhpbiB0aGlzIHByb2plY3QuIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBvYnZpb3VzIGxvY2F0aW9ucywgbGlrZSBgZHJpdmVycy9hdG0vYCBhbmQgYG5ldC9hdG0vYC4gQXJlIHRoZXJlIGFueSBvdGhlciBwb3RlbnRpYWwgYXJlYXMgd2hlcmUgdGhleSYjMzk7dmUgc3Rhc2hlZCBBVE0gZGV2aWNlIGRyaXZlcnM/IEkgY2FuJiMzOTt0IGJlIG92ZXJsb29raW5nIHNvbWV0aGluZyBvYnZpb3VzLgoKUmlnaHQsIGxldCYjMzk7cyBhc3N1bWUgdGhleSBtaWdodCBiZSB1c2luZyBzb21lIHNvcnQgb2YgY29tbW9uIHN0cnVjdHVyZS4gVGhhdCBtZWFucyBJIHNob3VsZCBzZWFyY2ggZm9yIGltcGxlbWVudGF0aW9ucyBvZiBgYXRtZGV2X29wc2AuIFNlYXJjaGluZyBmb3IgdGhhdCBzaG91bGQgaWRlbnRpZnkgYWxsIHRoZSBjYW5kaWRhdGUgZHJpdmVycywgb3IgYXQgbGVhc3QgaGVscCBuYXJyb3cgZG93biB0aGUgbGlzdC4gTGV0JiMzOTtzIHNlZSB3aGF0IHR1cm5zIHVwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGF0bWRldl9vcHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9hdG0vc29sb3MtcGNpLmM9MTEzNz1zdGF0aWMgaW50IHBzZW5kKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTE3Ny1cbmRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jOjExNzg6c3RhdGljIGNvbnN0IHN0cnVjdCBhdG1kZXZfb3BzIGZwZ2Ffb3BzID0ge1xuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTE3OS1cdC5vcGVuID1cdFx0cG9wZW4sXG4tLVxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jPTE2MD1zdGF0aWMgaW50IHVzYmF0bV9hdG1fcHJvY19yZWFkKHN0cnVjdCBhdG1fZGV2ICphdG1fZGV2LCBsb2ZmX3QgKnBvcywgY2hhciAqcGFnZSk7XG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMtMTYxLVxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jOjE2MjpzdGF0aWMgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgdXNiYXRtX2F0bV9kZXZvcHMgPSB7XG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMtMTYzLVx0LmRldl9jbG9zZVx0PSB1c2JhdG1fYXRtX2Rldl9jbG9zZSxcbi0tXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oPTEwOD1zdHJ1Y3QgYXRtX2RldiB7XG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oOjEwOTpcdGNvbnN0IHN0cnVjdCBhdG1kZXZfb3BzICpvcHM7XHQvKiBkZXZpY2Ugb3BlcmF0aW9uczsgTlVMTCBpZiB1bnVzZWQgKi9cbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMTEwLVx0Y29uc3QgY2hhclx0KnR5cGU7XHRcdC8qIGRldmljZSB0eXBlIG5hbWUgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTEyOC1cbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg6MTI5OnN0cnVjdCBhdG1kZXZfb3BzIHsgLyogb25seSBzZW5kIGlzIHJlcXVpcmVkICovXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTEzMC1cdHZvaWQgKCpkZXZfY2xvc2UpKHN0cnVjdCBhdG1fZGV2ICpkZXYpO1xuLS1cbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg9MTU2PXN0cnVjdCBhdG1fZGV2ICphdG1fZGV2X3JlZ2lzdGVyKGNvbnN0IGNoYXIgKnR5cGUsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg6MTU3Olx0XHRcdFx0IGNvbnN0IHN0cnVjdCBhdG1kZXZfb3BzICpvcHMsXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTE1OC1cdFx0XHRcdCBpbnQgbnVtYmVyLCAvKiAtMSA9PSBwaWNrIGZpcnN0IGF2YWlsYWJsZSAqL1xuLS1cbm5ldC9hdG0vcmVzb3VyY2VzLmM9NzE9c3RydWN0IGF0bV9kZXYgKmF0bV9kZXZfcmVnaXN0ZXIoY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IGRldmljZSAqcGFyZW50LFxubmV0L2F0bS9yZXNvdXJjZXMuYzo3MjpcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYXRtZGV2X29wcyAqb3BzLCBpbnQgbnVtYmVyLFxubmV0L2F0bS9yZXNvdXJjZXMuYy03My1cdFx0XHRcdCB1bnNpZ25lZCBsb25nICpmbGFncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxNDEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgQVRNIERyaXZlciBNYWtlZmlsZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBXZSB3ZXJlIGZvY3VzaW5nIG9uIFgsIFksIGFuZCBaLCBidXQgSSYjMzk7dmUgZ290IGEgbmFnZ2luZyBmZWVsaW5nIHdlJiMzOTtyZSBtaXNzaW5nIHNvbWV0aGluZyBjcnVjaWFsIGluIHRoaXMgYXJlYS4gU3BlY2lmaWNhbGx5LCB3aGF0IGFib3V0IHRoZSBBVE0gZHJpdmVyPyBXZSYjMzk7dmUgZ290IHRvIGVuc3VyZSB0aGF0IGl0IGFsaWducyB3aXRoIGV2ZXJ5dGhpbmcgZWxzZS4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBkaXZlIGludG8gdGhlIGBkcml2ZXJzL2F0bS9gIGRpcmVjdG9yeS4gUmlnaHQsIGxldCYjMzk7cyBvcGVuIHRoYXQgYE1ha2VmaWxlYCBhbmQgcXVpY2tseSBjb25maXJtIHRoYXQgaXQmIzM5O3MgcHJvcGVybHkgYnVpbHQgYW5kIGludGVncmF0ZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkcml2ZXIgaXNuJiMzOTt0IGdvaW5nIHRvIGNhdXNlIGlzc3VlcyBkb3duIHRoZSBsaW5lLCBzbyBJJiMzOTtsbCBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBmbGFncyBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9hdG0vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0b2JqLSQoQ09ORklHX0FUTV9TT0xPUylcdFx0JiM0Mzs9IHNvbG9zLXBjaS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Mzg5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVVNCIEZ1enppbmcgYW5kIEFUTSBTb2NrZXQgUXVpcmtzKioKCk9rYXksIHNvIHN5emthbGxlciBoYXMgVVNCIGZ1enppbmcgY2FwYWJpbGl0aWVzIHRocm91Z2ggUmF3IEdhZGdldCBhbmQgRHVtbXkgSENEIOKAkyB0aGF0JiMzOTtzIGV4Y2VsbGVudCEgQnV0IGEgdGhvdWdodCBqdXN0IHN0cnVjayBtZTogY2FuIEFUTSBzb2NrZXRzLCBzcGVjaWZpY2FsbHksIGJlIGNvbm5lY3RlZCB3aXRob3V0IGFuIGFjdHVhbCBkZXZpY2UgcHJlc2VudD8gSSB3b25kZXIgd2hhdCBoYXBwZW5zIGluIHRoZSBgdmNjX2Nvbm5lY3RgIGZ1bmN0aW9uLi4uIFRoaXMgZmVlbHMgbGlrZSBhIHBvdGVudGlhbCBhcmVhIGZvciBleHBsb3JhdGlvbiwgc28gbGV0JiMzOTtzIGRpZyBpbnRvIGBuZXQvYXRtL2NvbW1vbi5jYCBhbmQgY2hlY2sgb3V0IHRoZSBgdmNjX2Nvbm5lY3RgIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBsb2dpYyB0byBzZWUgaWYgdGhpcyBjb3VsZCBiZSBleHBsb2l0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2F0bS9jb21tb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTgwOlx0XHRtb2R1bGVfcHV0KHZjYy1cdTAwM2Vvd25lcik7XG4gMTgxOlx0XG4gMTgyOlx0XHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKSAhPSBOVUxMKSB7XG4gMTgzOlx0XHRcdGF0bV9yZXR1cm4odmNjLCBza2ItXHUwMDNldHJ1ZXNpemUpO1xuIDE4NDpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAxODU6XHRcdH1cbiAxODY6XHRcbiAxODc6XHRcdGlmICh2Y2MtXHUwMDNlZGV2IFx1MDAyNlx1MDAyNiB2Y2MtXHUwMDNlZGV2LVx1MDAzZW9wcy1cdTAwM2Vvd25lcikge1xuIDE4ODpcdFx0XHRtb2R1bGVfcHV0KHZjYy1cdTAwM2VkZXYtXHUwMDNlb3BzLVx1MDAzZW93bmVyKTtcbiAxODk6XHRcdFx0YXRtX2Rldl9wdXQodmNjLVx1MDAzZWRldik7XG4gMTkwOlx0XHR9XG4gMTkxOlx0XG4gMTkyOlx0XHR2Y2NfcmVtb3ZlX3NvY2tldChzayk7XG4gMTkzOlx0fVxuIDE5NDpcdFxuIDE5NTpcdGludCB2Y2NfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIDE5NjpcdHtcbiAxOTc6XHRcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXHUwMDNlc2s7XG4gMTk4Olx0XG4gMTk5Olx0XHRpZiAoc2spIHtcbiAyMDA6XHRcdFx0bG9ja19zb2NrKHNrKTtcbiAyMDE6XHRcdFx0dmNjX2Rlc3Ryb3lfc29ja2V0KHNvY2stXHUwMDNlc2spO1xuIDIwMjpcdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIDIwMzpcdFx0XHRzb2NrX3B1dChzayk7XG4gMjA0Olx0XHR9XG4gMjA1Olx0XG4gMjA2Olx0XHRyZXR1cm4gMDtcbiAyMDc6XHR9XG4gMjA4Olx0XG4gMjA5Olx0dm9pZCB2Y2NfcmVsZWFzZV9hc3luYyhzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBpbnQgcmVwbHkpXG4gMjEwOlx0e1xuIDIxMTpcdFx0c3RydWN0IHNvY2sgKnNrID0gc2tfYXRtKHZjYyk7XG4gMjEyOlx0XG4gMjEzOlx0XHRzZXRfYml0KEFUTV9WRl9DTE9TRSwgXHUwMDI2dmNjLVx1MDAzZWZsYWdzKTtcbiAyMTQ6XHRcdHNrLVx1MDAzZXNrX3NodXRkb3duIHw9IFJDVl9TSFVURE9XTjtcbiAyMTU6XHRcdHNrLVx1MDAzZXNrX2VyciA9IC1yZXBseTtcbiAyMTY6XHRcdHNrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG4gMjE3Olx0fVxuIDIxODpcdEVYUE9SVF9TWU1CT0wodmNjX3JlbGVhc2VfYXN5bmMpO1xuIDIxOTpcdFxuIDIyMDpcdHZvaWQgdmNjX3Byb2Nlc3NfcmVjdl9xdWV1ZShzdHJ1Y3QgYXRtX3ZjYyAqdmNjKVxuIDIyMTpcdHtcbiAyMjI6XHRcdHN0cnVjdCBza19idWZmX2hlYWQgcXVldWUsICpycTtcbiAyMjM6XHRcdHN0cnVjdCBza19idWZmICpza2IsICp0bXA7XG4gMjI0Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDIyNTpcdFxuIDIyNjpcdFx0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNnF1ZXVlKTtcbiAyMjc6XHRcdHJxID0gXHUwMDI2c2tfYXRtKHZjYyktXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZTtcbiAyMjg6XHRcbiAyMjk6XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnJxLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiAyMzA6XHRcdHNrYl9xdWV1ZV9zcGxpY2VfaW5pdChycSwgXHUwMDI2cXVldWUpO1xuIDIzMTpcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZycS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gMjMyOlx0XG4gMjMzOlx0XHRza2JfcXVldWVfd2Fsa19zYWZlKFx1MDAyNnF1ZXVlLCBza2IsIHRtcCkge1xuIDIzNDpcdFx0XHRfX3NrYl91bmxpbmsoc2tiLCBcdTAwMjZxdWV1ZSk7XG4gMjM1Olx0XHRcdHZjYy1cdTAwM2VwdXNoKHZjYywgc2tiKTtcbiAyMzY6XHRcdH1cbiAyMzc6XHR9XG4gMjM4Olx0RVhQT1JUX1NZTUJPTCh2Y2NfcHJvY2Vzc19yZWN2X3F1ZXVlKTtcbiAyMzk6XHRcbiAyNDA6XHR2b2lkIGF0bV9kZXZfc2lnbmFsX2NoYW5nZShzdHJ1Y3QgYXRtX2RldiAqZGV2LCBjaGFyIHNpZ25hbClcbiAyNDE6XHR7XG4gMjQyOlx0XHRwcl9kZWJ1ZyhcJiMzNDslcyBzaWduYWw9JWQgZGV2PSVwIG51bWJlcj0lZCBkZXYtXHUwMDNlc2lnbmFsPSVkXFxuXCYjMzQ7LFxuIDI0MzpcdFx0XHRfX2Z1bmNfXywgc2lnbmFsLCBkZXYsIGRldi1cdTAwM2VudW1iZXIsIGRldi1cdTAwM2VzaWduYWwpO1xuIDI0NDpcdFxuIDI0NTpcdFx0LyogYXRtIGRyaXZlciBzZW5kaW5nIGludmFsaWQgc2lnbmFsICovXG4gMjQ2Olx0XHRXQVJOX09OKHNpZ25hbCBcdTAwM2MgQVRNX1BIWV9TSUdfTE9TVCB8fCBzaWduYWwgXHUwMDNlIEFUTV9QSFlfU0lHX0ZPVU5EKTtcbiAyNDc6XHRcbiAyNDg6XHRcdGlmIChkZXYtXHUwMDNlc2lnbmFsID09IHNpZ25hbClcbiAyNDk6XHRcdFx0cmV0dXJuOyAvKiBubyBjaGFuZ2UgKi9cbiAyNTA6XHRcbiAyNTE6XHRcdGRldi1cdTAwM2VzaWduYWwgPSBzaWduYWw7XG4gMjUyOlx0XG4gMjUzOlx0XHRhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbihcdTAwMjZhdG1fZGV2X25vdGlmeV9jaGFpbiwgc2lnbmFsLCBkZXYpO1xuIDI1NDpcdH1cbiAyNTU6XHRFWFBPUlRfU1lNQk9MKGF0bV9kZXZfc2lnbmFsX2NoYW5nZSk7XG4gMjU2Olx0XG4gMjU3Olx0dm9pZCBhdG1fZGV2X3JlbGVhc2VfdmNjcyhzdHJ1Y3QgYXRtX2RldiAqZGV2KVxuIDI1ODpcdHtcbiAyNTk6XHRcdGludCBpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzc4NwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgaXM6CgoqKkxvY2F0aW5nIHRoZSBgdmNjX2Nvbm5lY3RgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBgdmNjX2Nvbm5lY3RgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIGl0IHdvdWxkIGJlIGluIGEgY29tbW9uIGFyZWEgZm9yIG5ldHdvcmsgb3BlcmF0aW9ucywgYW5kIGJhc2VkIG9uIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGUga2VybmVsLCBhIGZpbGUgbmFtZWQgYGNvbW1vbi5jYCB3aXRoaW4gYSBgbmV0L2F0bWAgZGlyZWN0b3J5IHdvdWxkIGJlIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gR2l2ZW4gdGhlIEFUTSBjb250ZXh0LCB0aGF0IHdvdWxkIGFsc28gYmUgYSB2ZXJ5IHJlYXNvbmFibGUgcGxhY2UgdG8gc3RhcnQgbG9va2luZywgc2luY2UgVkNDIGNvbm5lY3Rpb25zIGFyZSBmdW5kYW1lbnRhbCB0byBob3cgdGhhdCBwcm90b2NvbCBvcGVyYXRlcy4gTGV0JiMzOTtzIGhlYWQgdGhlcmUgYW5kIHNlZSB3aGF0JiMzOTtzIGluIGBuZXQvYXRtL2NvbW1vbi5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IHZjY19jb25uZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2F0bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9jb21tb24uYz0zNzQ9c3RhdGljIGludCBfX3ZjY19jb25uZWN0KHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBhdG1fZGV2ICpkZXYsIHNob3J0IHZwaSxcbi0tXG5uZXQvYXRtL2NvbW1vbi5jLTQ0OS1cbm5ldC9hdG0vY29tbW9uLmM6NDUwOmludCB2Y2NfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaXRmLCBzaG9ydCB2cGksIGludCB2Y2kpXG5uZXQvYXRtL2NvbW1vbi5jLTQ1MS17XG4tLVxubmV0L2F0bS9jb21tb24uaD0xNT1pbnQgdmNjX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jayk7XG5uZXQvYXRtL2NvbW1vbi5oOjE2OmludCB2Y2NfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaXRmLCBzaG9ydCB2cGksIGludCB2Y2kpO1xubmV0L2F0bS9jb21tb24uaC0xNy1pbnQgdmNjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxODcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGB2Y2NfY29ubmVjdGAqKgoKT2theSwgbGV0JiMzOTtzIGdldCByaWdodCB0byBpdC4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIGB2Y2NfY29ubmVjdGAgaW4gYG5ldC9hdG0vY29tbW9uLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIEFUTSBjb25uZWN0aW9uIHByb2Nlc3MsIHNwZWNpZmljYWxseSBob3cgdGhlc2UgVkNDcyBhcmUgZXN0YWJsaXNoZWQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiBob3cgdGhlIGNvbm5lY3Rpb24gaXMgc2V0IHVwIGF0IHRoaXMgbGF5ZXIuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyZmFjZXMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBvciBkcml2ZXIgYW5kIHdoYXQgc29ydCBvZiByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBwYXJhbWV0ZXIgcGFzc2luZyBpdCBlbnRhaWxzLiBUaGVyZSYjMzk7cyBwcm9iYWJseSBzb21lIGNydWNpYWwgc2lnbmFsaW5nIGdvaW5nIG9uIGhlcmUuIFRpbWUgdG8gZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9hdG0vY29tbW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ0NTpcdFx0LyogZW5zdXJlIHdlIGdldCBkZXYgbW9kdWxlIHJlZiBjb3VudCBjb3JyZWN0ICovXG4gNDQ2Olx0XHR2Y2MtXHUwMDNlZGV2ID0gTlVMTDtcbiA0NDc6XHRcdHJldHVybiBlcnJvcjtcbiA0NDg6XHR9XG4gNDQ5Olx0XG4gNDUwOlx0aW50IHZjY19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBpdGYsIHNob3J0IHZwaSwgaW50IHZjaSlcbiA0NTE6XHR7XG4gNDUyOlx0XHRzdHJ1Y3QgYXRtX2RldiAqZGV2O1xuIDQ1MzpcdFx0c3RydWN0IGF0bV92Y2MgKnZjYyA9IEFUTV9TRChzb2NrKTtcbiA0NTQ6XHRcdGludCBlcnJvcjtcbiA0NTU6XHRcbiA0NTY6XHRcdHByX2RlYnVnKFwmIzM0Oyh2cGkgJWQsIHZjaSAlZClcXG5cJiMzNDssIHZwaSwgdmNpKTtcbiA0NTc6XHRcdGlmIChzb2NrLVx1MDAzZXN0YXRlID09IFNTX0NPTk5FQ1RFRClcbiA0NTg6XHRcdFx0cmV0dXJuIC1FSVNDT05OO1xuIDQ1OTpcdFx0aWYgKHNvY2stXHUwMDNlc3RhdGUgIT0gU1NfVU5DT05ORUNURUQpXG4gNDYwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ2MTpcdFx0aWYgKCEodnBpIHx8IHZjaSkpXG4gNDYyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ2MzpcdFxuIDQ2NDpcdFx0aWYgKHZwaSAhPSBBVE1fVlBJX1VOU1BFQyBcdTAwMjZcdTAwMjYgdmNpICE9IEFUTV9WQ0lfVU5TUEVDKVxuIDQ2NTpcdFx0XHRjbGVhcl9iaXQoQVRNX1ZGX1BBUlRJQUwsIFx1MDAyNnZjYy1cdTAwM2VmbGFncyk7XG4gNDY2Olx0XHRlbHNlXG4gNDY3Olx0XHRcdGlmICh0ZXN0X2JpdChBVE1fVkZfUEFSVElBTCwgXHUwMDI2dmNjLVx1MDAzZWZsYWdzKSlcbiA0Njg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0Njk6XHRcdHByX2RlYnVnKFwmIzM0OyhUWDogY2wgJWQsYncgJWQtJWQsc2R1ICVkOyBcJiMzNDtcbiA0NzA6XHRcdFx0IFwmIzM0O1JYOiBjbCAlZCxidyAlZC0lZCxzZHUgJWQsQUFMICVzJWQpXFxuXCYjMzQ7LFxuIDQ3MTpcdFx0XHQgdmNjLVx1MDAzZXFvcy50eHRwLnRyYWZmaWNfY2xhc3MsIHZjYy1cdTAwM2Vxb3MudHh0cC5taW5fcGNyLFxuIDQ3MjpcdFx0XHQgdmNjLVx1MDAzZXFvcy50eHRwLm1heF9wY3IsIHZjYy1cdTAwM2Vxb3MudHh0cC5tYXhfc2R1LFxuIDQ3MzpcdFx0XHQgdmNjLVx1MDAzZXFvcy5yeHRwLnRyYWZmaWNfY2xhc3MsIHZjYy1cdTAwM2Vxb3Mucnh0cC5taW5fcGNyLFxuIDQ3NDpcdFx0XHQgdmNjLVx1MDAzZXFvcy5yeHRwLm1heF9wY3IsIHZjYy1cdTAwM2Vxb3Mucnh0cC5tYXhfc2R1LFxuIDQ3NTpcdFx0XHQgdmNjLVx1MDAzZXFvcy5hYWwgPT0gQVRNX0FBTDUgPyBcJiMzNDtcJiMzNDsgOlxuIDQ3NjpcdFx0XHQgdmNjLVx1MDAzZXFvcy5hYWwgPT0gQVRNX0FBTDAgPyBcJiMzNDtcJiMzNDsgOiBcJiMzNDsgPz8/IGNvZGUgXCYjMzQ7LFxuIDQ3NzpcdFx0XHQgdmNjLVx1MDAzZXFvcy5hYWwgPT0gQVRNX0FBTDAgPyAwIDogdmNjLVx1MDAzZXFvcy5hYWwpO1xuIDQ3ODpcdFx0aWYgKCF0ZXN0X2JpdChBVE1fVkZfSEFTUU9TLCBcdTAwMjZ2Y2MtXHUwMDNlZmxhZ3MpKVxuIDQ3OTpcdFx0XHRyZXR1cm4gLUVCQURGRDtcbiA0ODA6XHRcdGlmICh2Y2MtXHUwMDNlcW9zLnR4dHAudHJhZmZpY19jbGFzcyA9PSBBVE1fQU5ZQ0xBU1MgfHxcbiA0ODE6XHRcdCAgICB2Y2MtXHUwMDNlcW9zLnJ4dHAudHJhZmZpY19jbGFzcyA9PSBBVE1fQU5ZQ0xBU1MpXG4gNDgyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ4MzpcdFx0aWYgKGxpa2VseShpdGYgIT0gQVRNX0lURl9BTlkpKSB7XG4gNDg0Olx0XHRcdGRldiA9IHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKGF0bV9kZXZfbG9va3VwKGl0ZiksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjA5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIG5ldHdvcmtpbmcgZXhwZXJ0OgoKKipQUFBvQVRNIGFuZCBTeXprYWxsZXIgLSBXaGVyZSYjMzk7cyB0aGUgQ292ZXJhZ2U/KioKCkhtbSwgSSYjMzk7bSBzZWVpbmcgYGF0bV9kZXZfbG9va3VwKGl0ZilgIOKAkyBpbnRlcmVzdGluZy4gQnV0IG15IGJyYWluIGltbWVkaWF0ZWx5IGp1bXBzIHRvLCAmIzM0O0hvdyBleGFjdGx5IGlzIHN5emthbGxlciB0ZXN0aW5nIFBQUG9BVE0/IEkgaGF2ZW4mIzM5O3Qgc2VlbiBtdWNoIG9mIHRoYXQgbGF0ZWx5LiYjMzQ7IE15IGV4cGVyaWVuY2UgaGFzIG1lIHRoaW5raW5nLCAmIzM0O3N5emthbGxlciBpcyBncmVhdCwgYnV0IGRpZCBpdCBldmVyIHJlYWxseSBnZXQgZGVlcCBpbnRvIFBQUG9BVE0/IEkgbmVlZCB0byBjaGVjay4mIzM0OyBMZXQgbWUganVzdCBkaWcgdGhyb3VnaCB0aGUgR2l0IGhpc3Rvcnkg4oCTIHByb2JhYmx5IGxvb2sgZm9yIGJ1ZyByZXBvcnRzIHJlbGF0ZWQgdG8gc3l6a2FsbGVyIGFuZCBwcHBvYXRtLiBUaGF0IHNob3VsZCBwb2ludCBtZSBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgdGVzdGluZyBjb3ZlcmFnZSBmb3IgdGhpcyBwcm90b2NvbC4gVGhlcmUgY291bGQgYmUgc29tZSBpc3N1ZXMgbHVya2luZyB0aGF0IEkgYW0gYXdhcmUgb2YuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3l6Ym90LipwcHBvYXRtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0NTcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyB0aGUgUFBQb0FUTSBDb21taXQgTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29tbWl0IGhpc3RvcnkgcmVsYXRlZCB0byBgbmV0L2F0bS9wcHBvYXRtLmNgLiBNeSBpbml0aWFsIGluc3RpbmN0IHdhcyB0byByZWFjaCBmb3IgYSB0b29sIGxpa2UgZ3JlcHBlciwgYnV0IHdhaXQsIGdyZXBwZXIgaXMgbW9yZSBmb3Igc2VhcmNoaW5nICp3aXRoaW4qIGZpbGVzLCBub3QgdGhlIGNvbW1pdCBsb2cgaXRzZWxmLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBtaXNmaXJlLCBJIG5lZWQgdG8gZm9jdXMgb24gZ2l0IGxvZy4KCkNhbiBJIGRpcmVjdGx5IHNlYXJjaCB0aGUgZ2l0IGxvZyBmb3IgcmVsZXZhbnQgZW50cmllcz8gUmlnaHQsIHRoZXJlIGlzbiYjMzk7dCBhIGRlZGljYXRlZCAmIzM0O2dyZXBwZXImIzM0OyBlcXVpdmFsZW50IGZvciBgZ2l0IGxvZ2AgZGlyZWN0bHkuIEhtbW0sIGNvdWxkIEkgc2VhcmNoIGZvciBzb21ldGhpbmcgc3BlY2lmaWMsIGxpa2UgJiMzNDtSZXBvcnRlZC1ieTogc3l6Ym90JiMzNDsgd2l0aGluIHRoYXQgc3BlY2lmaWMgZmlsZSBvciBpdHMgY29tbWVudHMsIG9yIG1heWJlIHRoZSBjb2RlIGl0c2VsZj8gVGhhdCBtaWdodCB5aWVsZCBzb21ldGhpbmcuIFN0aWxsLCBydW5uaW5nIGBnaXQgbG9nYCBkaXJlY3RseSBpc24mIzM5O3QgYW4gb3B0aW9uLgoKQWxyaWdodCwgd2hhdCBhYm91dCBhIGJyb2FkZXIgc2VhcmNoIGZvciAmIzM0O3BwcG9hdG0mIzM0OyBhY3Jvc3Mga2VybmVsIGNvbW1pdHM/IE5vLCB3YWl0Li4uIGdyZXBwZXIgaXMgZmlsZS1iYXNlZCwgc28gdGhhdCB3b24mIzM5O3Qgd29yayBlaXRoZXIuIE9rYXksIG5ldyBwbGFuOiBMZXQmIzM5O3MgZ3JlcCBmb3IgJiMzNDtwcHBvYXRtJiMzNDsgaW4gdGhlIGBEb2N1bWVudGF0aW9uL2AgZGlyZWN0b3J5IG9yIHBlcmhhcHMgdGhlIGBuZXQvYXRtL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIG1vcmUgcmVhc29uYWJsZSBhbmQgYSBxdWljayB3YXkgdG8gZGlzY292ZXIgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBvYXRtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTkwMQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqR3Jhc3BpbmcgdGhlIFNjb3BlIG9mIEFUTV9CQUNLRU5EX1BQUCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgQVRNX0JBQ0tFTkRfUFBQYCBpcyB1dGlsaXplZCB3aXRoaW4gdGhpcyBjb2RlYmFzZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgYSBmdWxsIGNvZGUgcmV2aWV3IHRvIGxvY2F0ZSBldmVyeSBpbnN0YW5jZSB3b3VsZCBiZSBvdmVya2lsbCwgdW5sZXNzIHRoZXJlJiMzOTtzIHNvbWUgZXZpZGVuY2Ugb2YgYSBwYXJ0aWN1bGFybHkgZWx1c2l2ZSBidWcuIEEgZ29vZCBzdGFydGluZyBwb2ludCwgYW5kIHVzdWFsbHkgdGhlIGZhc3Rlc3QsIG1vc3QgZWZmZWN0aXZlIHdheSB0byBnZXQgYW4gb3ZlcnZpZXcsIGlzIGEgYGdyZXBgLiBJIHdhbnQgdG8gc2VhcmNoIHRoZSBlbnRpcmUgcHJvamVjdCwgc28gSSYjMzk7bGwgbmVlZCB0byBzcGVjaWZ5IHRoYXQgY2xlYXJseS4gV2l0aCBhIGdvb2QgYGdyZXBgIGNvbW1hbmQsIEkgc2hvdWxkIGJlIGFibGUgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIGZpbGVzIGFuZCBjb250ZXh0cyB3aGVyZSB0aGlzIGNvbnN0YW50IG9yIG1hY3JvIGlzIGRlZmluZWQgb3IgdXNlZC4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGlmIGFueSBzcGVjaWZpYyBmaWxlcyB3YXJyYW50IG1vcmUgaW4tZGVwdGggYXR0ZW50aW9uIGJhc2VkIG9uIHRoZSBpbml0aWFsIG91dHB1dC4gVGhpcyBpcyBhIHN0YW5kYXJkIGFuZCBlZmZpY2llbnQgd2F5IHRvIGJlZ2luIGFuIGludmVzdGlnYXRpb24gaW50byBhbiB1bmZhbWlsaWFyIGNvZGViYXNlIGFyZWEsIGVzcGVjaWFsbHkgd2hlbiBmb2N1c2luZyBvbiBhIHNwZWNpZmljIG1hY3JvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBVE1fQkFDS0VORF9QUFAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L2F0bWRldi5oPTQ4PXN0cnVjdCBhdG1fZGV2X3N0YXRzIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtZGV2LmgtOTQtI2RlZmluZSBBVE1fQkFDS0VORF9SQVdcdFx0MFx0XG5pbmNsdWRlL3VhcGkvbGludXgvYXRtZGV2Lmg6OTU6I2RlZmluZSBBVE1fQkFDS0VORF9QUFBcdFx0MVx0LyogUFBQb0FUTSAtIFJGQzIzNjQgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9hdG1kZXYuaC05Ni0jZGVmaW5lIEFUTV9CQUNLRU5EX0JSMjY4NFx0Mlx0LyogQnJpZGdlZCBSRkMxNDgzLzI2ODQgKi9cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtcHBwLmg9MjA9c3RydWN0IGF0bV9iYWNrZW5kX3BwcCB7XG5pbmNsdWRlL3VhcGkvbGludXgvYXRtcHBwLmg6MjE6XHRhdG1fYmFja2VuZF90XHRiYWNrZW5kX251bTtcdC8qIEFUTV9CQUNLRU5EX1BQUCAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L2F0bXBwcC5oLTIyLVx0aW50XHRcdGVuY2FwcztcdFx0LyogUFBQT0FUTV9FTkNBUFNfKiAqL1xuLS1cbm5ldC9hdG0vaW9jdGwuYz00Mz1zdGF0aWMgaW50IGRvX3ZjY19pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbm5ldC9hdG0vaW9jdGwuYy05My1cdFx0c3dpdGNoIChiYWNrZW5kKSB7XG5uZXQvYXRtL2lvY3RsLmM6OTQ6XHRcdGNhc2UgQVRNX0JBQ0tFTkRfUFBQOlxubmV0L2F0bS9pb2N0bC5jLTk1LVx0XHRcdHJlcXVlc3RfbW9kdWxlKFwmIzM0O3BwcG9hdG1cJiMzNDspO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jPTQzMD1zdGF0aWMgaW50IHBwcG9hdG1faW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy00NDItXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG5uZXQvYXRtL3BwcG9hdG0uYzo0NDM6XHRcdGlmIChiICE9IEFUTV9CQUNLRU5EX1BQUClcbm5ldC9hdG0vcHBwb2F0bS5jLTQ0NC1cdFx0XHRyZXR1cm4gLUVOT0lPQ1RMQ01EO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU3OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBBVE0gSU9DVEwgSW1wbGVtZW50YXRpb24qKgoKT2theSwgaG9sZCBvbiBhIG1pbnV0ZS4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGlzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBJT0NUTCBoYW5kbGluZyBmb3IgQVRNLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgY29kZSBpbiBgbmV0L2F0bS9pb2N0bC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gbWFuYWdlcyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgQVRNIG5ldHdvcmsgaW50ZXJmYWNlLiBUaGUgc3RhcnRpbmcgcG9pbnQgaXMgbGlrZWx5IHRvIGJlIHRoZSBgZG9fdmNjX2lvY3RsYCBmdW5jdGlvbiB3aXRoaW4gdGhhdCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIHdoZW4gYSBzb2NrZXQgSU9DVEwgb3BlcmF0aW9uIGdldHMgY2FsbGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCYjMzk7cyBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYXRtL2lvY3RsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDcwOlx0XHRcdGlmIChzb2NrLVx1MDAzZXN0YXRlICE9IFNTX0NPTk5FQ1RFRCkge1xuICA3MTpcdFx0XHRcdGVycm9yID0gLUVJTlZBTDtcbiAgNzI6XHRcdFx0XHRnb3RvIGRvbmU7XG4gIDczOlx0XHRcdH1cbiAgNzQ6XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuICA3NTpcdFx0XHRza2IgPSBza2JfcGVlayhcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcbiAgNzY6XHRcdFx0YW1vdW50ID0gc2tiID8gc2tiLVx1MDAzZWxlbiA6IDA7XG4gIDc3Olx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuICA3ODpcdFx0XHRlcnJvciA9IHB1dF91c2VyKGFtb3VudCwgKGludCBfX3VzZXIgKilhcmdwKTtcbiAgNzk6XHRcdFx0Z290byBkb25lO1xuICA4MDpcdFx0fVxuICA4MTpcdFx0Y2FzZSBBVE1fU0VUU0M6XG4gIDgyOlx0XHRcdG5ldF93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O0FUTV9TRVRTQyBpcyBvYnNvbGV0ZTsgdXNlZCBieSAlczolZFxcblwmIzM0OyxcbiAgODM6XHRcdFx0XHRcdCAgICAgY3VycmVudC1cdTAwM2Vjb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7XG4gIDg0Olx0XHRcdGVycm9yID0gMDtcbiAgODU6XHRcdFx0Z290byBkb25lO1xuICA4NjpcdFx0Y2FzZSBBVE1fU0VUQkFDS0VORDpcbiAgODc6XHRcdGNhc2UgQVRNX05FV0JBQ0tFTkRJRjpcbiAgODg6XHRcdHtcbiAgODk6XHRcdFx0YXRtX2JhY2tlbmRfdCBiYWNrZW5kO1xuICA5MDpcdFx0XHRlcnJvciA9IGdldF91c2VyKGJhY2tlbmQsIChhdG1fYmFja2VuZF90IF9fdXNlciAqKWFyZ3ApO1xuICA5MTpcdFx0XHRpZiAoZXJyb3IpXG4gIDkyOlx0XHRcdFx0Z290byBkb25lO1xuICA5MzpcdFx0XHRzd2l0Y2ggKGJhY2tlbmQpIHtcbiAgOTQ6XHRcdFx0Y2FzZSBBVE1fQkFDS0VORF9QUFA6XG4gIDk1Olx0XHRcdFx0cmVxdWVzdF9tb2R1bGUoXCYjMzQ7cHBwb2F0bVwmIzM0Oyk7XG4gIDk2Olx0XHRcdFx0YnJlYWs7XG4gIDk3Olx0XHRcdGNhc2UgQVRNX0JBQ0tFTkRfQlIyNjg0OlxuICA5ODpcdFx0XHRcdHJlcXVlc3RfbW9kdWxlKFwmIzM0O2JyMjY4NFwmIzM0Oyk7XG4gIDk5Olx0XHRcdFx0YnJlYWs7XG4gMTAwOlx0XHRcdH1cbiAxMDE6XHRcdFx0YnJlYWs7XG4gMTAyOlx0XHR9XG4gMTAzOlx0XHR9XG4gMTA0Olx0XG4gMTA1Olx0XHRlcnJvciA9IC1FTk9JT0NUTENNRDtcbiAxMDY6XHRcbiAxMDc6XHRcdG11dGV4X2xvY2soXHUwMDI2aW9jdGxfbXV0ZXgpO1xuIDEwODpcdFx0bGlzdF9mb3JfZWFjaChwb3MsIFx1MDAyNmlvY3RsX2xpc3QpIHtcbiAxMDk6XHRcdFx0c3RydWN0IGF0bV9pb2N0bCAqaWMgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGF0bV9pb2N0bCwgbGlzdCk7XG4gMTEwOlx0XHRcdGlmICh0cnlfbW9kdWxlX2dldChpYy1cdTAwM2Vvd25lcikpIHtcbiAxMTE6XHRcdFx0XHRlcnJvciA9IGljLVx1MDAzZWlvY3RsKHNvY2ssIGNtZCwgYXJnKTtcbiAxMTI6XHRcdFx0XHRtb2R1bGVfcHV0KGljLVx1MDAzZW93bmVyKTtcbiAxMTM6XHRcdFx0XHRpZiAoZXJyb3IgIT0gLUVOT0lPQ1RMQ01EKVxuIDExNDpcdFx0XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDQzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIEFUTSBJT0NUTCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIEFUTSBJT0NUTCBpbnRlcmZhY2Ugd29ya3MsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBuZXQvYXRtL2lvY3RsLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIFRoZSBmdW5jdGlvbiBgQVRNX1NFVEJBQ0tFTkRgIGltbWVkaWF0ZWx5IGNhbGxzIGByZXF1ZXN0X21vZHVsZSgmIzM0O3BwcG9hdG0mIzM0OylgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nOyBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIHRyeWluZyB0byBkeW5hbWljYWxseSBsb2FkIHRoZSBQUFBvQS9BVE0gbW9kdWxlLCBgcHBwb2F0bWAsIGlmIGl0JiMzOTtzIG5vdCBhbHJlYWR5IHByZXNlbnQuIEFmdGVyIHRoYXQsIEkgc2VlIGl0IGl0ZXJhdGVzIHRocm91Z2ggYGlvY3RsX2xpc3RgLiBUaGF0IG11c3QgYmUgd2hlcmUgdGhlIGNvcmUgaW9jdGwgZnVuY3Rpb25hbGl0eSBpcyByZWdpc3RlcmVkLgoKTXkgbmV4dCBzdGVwLCBuYXR1cmFsbHksIGlzIHRvIGNoZWNrIGhvdyBgcHBwb2F0bWAgaW50ZWdyYXRlcyBpdHNlbGYuIFRoZSBtb2R1bGUgZ2V0cyBsb2FkZWQgYW5kIGluaXRpYWxpemVkLCBhbmQgSSBwcmVkaWN0IEkmIzM5O2xsIGZpbmQgaXRzIGBpb2N0bGAgb3BlcmF0aW9ucyByZWdpc3RlcmVkIGF0IHRoaXMgc3RhZ2UuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgc28gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBpbml0X3BwcG9hdG1gIGZ1bmN0aW9uIGluIGBuZXQvYXRtL3BwcG9hdG0uY2AuIFRoYXQgc2hvdWxkIHNob3cgbWUgd2hlcmUgYHBwcG9hdG1faW9jdGxfb3BzYCBnZXQgaG9va2VkIGludG8gdGhlIHN5c3RlbS4gS25vd2luZyB0aGlzIGlzIHRoZSBoZWFydCBvZiB0aGUgZHJpdmVyJiMzOTtzIElPQ1RMIGhhbmRsaW5nIHdpbGwgYmUga2V5IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBkaWZmZXJlbnQgQVRNIHNwZWNpZmljIHJlcXVlc3RzIGFyZSBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYXRtL3BwcG9hdG0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDYwOlx0XG4gNDYxOlx0c3RhdGljIHN0cnVjdCBhdG1faW9jdGwgcHBwb2F0bV9pb2N0bF9vcHMgPSB7XG4gNDYyOlx0XHQub3duZXJcdD0gVEhJU19NT0RVTEUsXG4gNDYzOlx0XHQuaW9jdGxcdD0gcHBwb2F0bV9pb2N0bCxcbiA0NjQ6XHR9O1xuIDQ2NTpcdFxuIDQ2NjpcdHN0YXRpYyBpbnQgX19pbml0IHBwcG9hdG1faW5pdCh2b2lkKVxuIDQ2NzpcdHtcbiA0Njg6XHRcdHJlZ2lzdGVyX2F0bV9pb2N0bChcdTAwMjZwcHBvYXRtX2lvY3RsX29wcyk7XG4gNDY5Olx0XHRyZXR1cm4gMDtcbiA0NzA6XHR9XG4gNDcxOlx0XG4gNDcyOlx0c3RhdGljIHZvaWQgX19leGl0IHBwcG9hdG1fZXhpdCh2b2lkKVxuIDQ3MzpcdHtcbiA0NzQ6XHRcdGRlcmVnaXN0ZXJfYXRtX2lvY3RsKFx1MDAyNnBwcG9hdG1faW9jdGxfb3BzKTtcbiA0NzU6XHR9XG4gNDc2Olx0XG4gNDc3Olx0bW9kdWxlX2luaXQocHBwb2F0bV9pbml0KTtcbiA0Nzg6XHRtb2R1bGVfZXhpdChwcHBvYXRtX2V4aXQpO1xuIDQ3OTpcdFxuIDQ4MDpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7TWl0Y2hlbGwgQmxhbmsgSnIgXHUwMDNjbWl0Y2hAc2Znb3RoLmNvbVx1MDAzZVwmIzM0Oyk7XG4gNDgxOlx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1JGQzIzNjQgUFBQIG92ZXIgQVRNL0FBTDVcJiMzNDspO1xuIDQ4MjpcdE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTQ5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFUTSBTb2NrZXQgQ29ubmVjdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdGhpcyBBVE0gc29ja2V0IGFjdHVhbGx5IGdldHMgY29ubmVjdGVkLCByaWdodD8gTGV0JiMzOTtzIHRyYWNlIHRoaXMuIEZpcnN0LCBJIHNlZSBgdmNjX2Nvbm5lY3RgLiBIbW0sIGlmIHRoZSBpbnRlcmZhY2UsIGBpdGZgLCBpc24mIzM5O3Qgc2V0IHRvIGEgc3BlY2lmaWMgdmFsdWUsIGlmIGl0JiMzOTtzIGBBVE1fSVRGX0FOWWAuLi4gd2VsbCwgdGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgY29kZSBzbmlwcGV0IHNob3dzIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW8uIFRoZSBgaWYgKGxpa2VseShpdGYgIT0gQVRNX0lURl9BTlkpKWAgc3RhdGVtZW50IGlzIHNraXBwZWQgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaGFwcGVucyB3aGVuIGBpdGZgIElTIGBBVE1fSVRGX0FOWWAuIE9rYXksIHRpbWUgdG8gZGl2ZSBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGZsb3cgd2hlbiBpdCYjMzk7cyBnZW5lcmljLCBzbyB0aGF0IG1lYW5zIEkgbmVlZCB0byBsb29rIGF0IGVpdGhlciB0aGUgYF9fdmNjX2Nvbm5lY3RgIGZ1bmN0aW9uIG9yIGB2Y2NfY29ubmVjdGAsIGJvdGggb2Ygd2hpY2ggYXJlIGxpa2VseSBkZWZpbmVkIHdpdGhpbiB0aGUgYG5ldC9hdG0vY29tbW9uLmNgIGZpbGUuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgdG8gdW5yYXZlbCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9hdG0vY29tbW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ4MDpcdFx0aWYgKHZjYy1cdTAwM2Vxb3MudHh0cC50cmFmZmljX2NsYXNzID09IEFUTV9BTllDTEFTUyB8fFxuIDQ4MTpcdFx0ICAgIHZjYy1cdTAwM2Vxb3Mucnh0cC50cmFmZmljX2NsYXNzID09IEFUTV9BTllDTEFTUylcbiA0ODI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDgzOlx0XHRpZiAobGlrZWx5KGl0ZiAhPSBBVE1fSVRGX0FOWSkpIHtcbiA0ODQ6XHRcdFx0ZGV2ID0gdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoYXRtX2Rldl9sb29rdXAoaXRmKSxcbiA0ODU6XHRcdFx0XHRcdFx0ICAgICAgXCYjMzQ7YXRtLWRldmljZS0lZFwmIzM0OywgaXRmKTtcbiA0ODY6XHRcdH0gZWxzZSB7XG4gNDg3Olx0XHRcdGRldiA9IE5VTEw7XG4gNDg4Olx0XHRcdG11dGV4X2xvY2soXHUwMDI2YXRtX2Rldl9tdXRleCk7XG4gNDg5Olx0XHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZhdG1fZGV2cykpIHtcbiA0OTA6XHRcdFx0XHRkZXYgPSBsaXN0X2VudHJ5KGF0bV9kZXZzLm5leHQsXG4gNDkxOlx0XHRcdFx0XHRcdCBzdHJ1Y3QgYXRtX2RldiwgZGV2X2xpc3QpO1xuIDQ5MjpcdFx0XHRcdGF0bV9kZXZfaG9sZChkZXYpO1xuIDQ5MzpcdFx0XHR9XG4gNDk0Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZhdG1fZGV2X211dGV4KTtcbiA0OTU6XHRcdH1cbiA0OTY6XHRcdGlmICghZGV2KVxuIDQ5NzpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiA0OTg6XHRcdGVycm9yID0gX192Y2NfY29ubmVjdCh2Y2MsIGRldiwgdnBpLCB2Y2kpO1xuIDQ5OTpcdFx0aWYgKGVycm9yKSB7XG4gNTAwOlx0XHRcdGF0bV9kZXZfcHV0KGRldik7XG4gNTAxOlx0XHRcdHJldHVybiBlcnJvcjtcbiA1MDI6XHRcdH1cbiA1MDM6XHRcdGlmICh2cGkgPT0gQVRNX1ZQSV9VTlNQRUMgfHwgdmNpID09IEFUTV9WQ0lfVU5TUEVDKVxuIDUwNDpcdFx0XHRzZXRfYml0KEFUTV9WRl9QQVJUSUFMLCBcdTAwMjZ2Y2MtXHUwMDNlZmxhZ3MpO1xuIDUwNTpcdFx0aWYgKHRlc3RfYml0KEFUTV9WRl9SRUFEWSwgXHUwMDI2QVRNX1NEKHNvY2spLVx1MDAzZWZsYWdzKSlcbiA1MDY6XHRcdFx0c29jay1cdTAwM2VzdGF0ZSA9IFNTX0NPTk5FQ1RFRDtcbiA1MDc6XHRcdHJldHVybiAwO1xuIDUwODpcdH1cbiA1MDk6XHRcbiA1MTA6XHRpbnQgdmNjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSxcbiA1MTE6XHRcdFx0aW50IGZsYWdzKVxuIDUxMjpcdHtcbiA1MTM6XHRcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXHUwMDNlc2s7XG4gNTE0Olx0XHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xuIDUxNTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiA1MTY6XHRcdGludCBjb3BpZWQsIGVycm9yID0gLUVJTlZBTDtcbiA1MTc6XHRcbiA1MTg6XHRcdGlmIChzb2NrLVx1MDAzZXN0YXRlICE9IFNTX0NPTk5FQ1RFRClcbiA1MTk6XHRcdFx0cmV0dXJuIC1FTk9UQ09OTjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxNjAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGB2Y2NfY29ubmVjdGAgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB2Y2NfY29ubmVjdGAgZnVuY3Rpb24uIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIGNydWNpYWw6IGFyZSB3ZSBkZWFsaW5nIHdpdGggYW4gQVRNIGRldmljZSB0aGF0JiMzOTtzIGFscmVhZHkgcmVnaXN0ZXJlZD8gVGhpbmdzIGxpa2UgYHNvbG9zLXBjaWAgb3IgYHVzYmF0bWA/IElmIHdlIGhhdmUgYSByZWdpc3RlcmVkIEFUTSBkZXZpY2UsIHRoZW4gdGhlIGBzb2NrLSZndDtzdGF0ZWAgZ2V0cyBzZXQgdG8gYFNTX0NPTk5FQ1RFRGAuIFRoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLCBuYXR1cmFsbHkuIEhvbGQgb24gYSBzZWNvbmQsIHRob3VnaC4uLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBzb2xvcy1wY2lgLiBJc24mIzM5O3QgdGhhdCBjYXJkIG9mdGVuIGVtdWxhdGVkIGluIFFFTVU/IE5vLCB3YWl0IGEgbWludXRlLCBgc29sb3MtcGNpYCBpcyBhIHBoeXNpY2FsIEFEU0wgY2FyZC4gQWxyaWdodCwgSSBuZWVkIHRvIGZvY3VzLiBMZXQgbWUgcmVkaXJlY3QgbXkgdGhpbmtpbmcgdG8gYGRyaXZlcnMvdXNiL2F0bS91c2JhdG0uY2AuIE5vdywgbGV0IG1lIGZpbmQgb3V0IHdoaWNoIGRyaXZlcnMgYXJlIHVzaW5nIHRoZSBgdXNiYXRtYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNiYXRtX3VzYl9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MTM0Nj1zdGF0aWMgaW50IGN4YWNydV91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEzNjMtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTM2NDpcdHJldHVybiB1c2JhdG1fdXNiX3Byb2JlKGludGYsIGlkLCBcdTAwMjZjeGFjcnVfZHJpdmVyKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMzY1LX1cbi0tXG5kcml2ZXJzL3VzYi9hdG0vc3BlZWR0Y2guYz05NDA9c3RhdGljIGludCBzcGVlZHRjaF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcbmRyaXZlcnMvdXNiL2F0bS9zcGVlZHRjaC5jLTk0MS17XG5kcml2ZXJzL3VzYi9hdG0vc3BlZWR0Y2guYzo5NDI6XHRyZXR1cm4gdXNiYXRtX3VzYl9wcm9iZShpbnRmLCBpZCwgXHUwMDI2c3BlZWR0Y2hfdXNiYXRtX2RyaXZlcik7XG5kcml2ZXJzL3VzYi9hdG0vc3BlZWR0Y2guYy05NDMtfVxuLS1cbmRyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmM9MjU1MD1zdGF0aWMgaW50IHVlYV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmMtMjU5Ny1cbmRyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmM6MjU5ODpcdHJldCA9IHVzYmF0bV91c2JfcHJvYmUoaW50ZiwgaWQsIFx1MDAyNnVlYV91c2JhdG1fZHJpdmVyKTtcbmRyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmMtMjU5OS1cdGlmIChyZXQgPT0gMCkge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYz0xMDAxPXN0YXRpYyB2b2lkIHVzYmF0bV9pbml0X2NoYW5uZWwoc3RydWN0IHVzYmF0bV9jaGFubmVsICpjaGFubmVsKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy0xMDA3LVxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jOjEwMDg6aW50IHVzYmF0bV91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy0xMDA5LVx0XHQgICAgIHN0cnVjdCB1c2JhdG1fZHJpdmVyICpkcml2ZXIpXG4tLVxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTEyMDQtfVxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jOjEyMDU6RVhQT1JUX1NZTUJPTF9HUEwodXNiYXRtX3VzYl9wcm9iZSk7XG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMtMTIwNi1cbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYz0xMjA3PXZvaWQgdXNiYXRtX3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy0xMjcxLVxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jOjEyNzI6XHR1c2JhdG1fcHV0X2luc3RhbmNlKGluc3RhbmNlKTtcdC8qIHRha2VuIGluIHVzYmF0bV91c2JfcHJvYmUgKi9cbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy0xMjczLX1cbi0tXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmg9NzM9c3RydWN0IHVzYmF0bV9kcml2ZXIge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uaC05OS1cbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uaDoxMDA6ZXh0ZXJuIGludCB1c2JhdG1fdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQsXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmgtMTAxLVx0XHRzdHJ1Y3QgdXNiYXRtX2RyaXZlciAqZHJpdmVyKTtcbi0tXG5kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jPTE0OD1zdGF0aWMgaW50IHh1c2JhdG1fYXRtX3N0YXJ0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtLFxuLS1cbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMtMTU5LVxuZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYzoxNjA6c3RhdGljIGludCB4dXNiYXRtX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMtMTYxLVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYy0xNjIte1xuZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYzoxNjM6XHRyZXR1cm4gdXNiYXRtX3VzYl9wcm9iZShpbnRmLCBpZCxcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMtMTY0LVx0XHRcdFx0eHVzYmF0bV9kcml2ZXJzICYjNDM7IChpZCAtIHh1c2JhdG1fdXNiX2lkcykpO1xuLS1cbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmM9MTY3PXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB4dXNiYXRtX3VzYl9kcml2ZXIgPSB7XG5kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jLTE2OC1cdC5uYW1lXHRcdD0geHVzYmF0bV9kcml2ZXJfbmFtZSxcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmM6MTY5Olx0LnByb2JlXHRcdD0geHVzYmF0bV91c2JfcHJvYmUsXG5kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jLTE3MC1cdC5kaXNjb25uZWN0XHQ9IHVzYmF0bV91c2JfZGlzY29ubmVjdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2MzcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVVNCIEFUTSBEcml2ZXIgRGlzY292ZXJ5IGFuZCBQb3RlbnRpYWwgRW11bGF0aW9uIFBhdGhzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBkcml2ZXIgbmFtZXMg4oCTIGBjeGFjcnVgLCBgc3BlZWR0Y2hgLCBgdWVhZ2xlLWF0bWAsIGFuZCBgeHVzYmF0bWAg4oCTIGFuZCB0aGV5JiMzOTtyZSBhbGwgY2xlYXJseSBVU0IgQVRNIGRyaXZlcnMuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtDYW4gc3l6a2FsbGVyIGhhbmRsZSBVU0IgZGV2aWNlIGVtdWxhdGlvbj8mIzM0OyBPZiBjb3Vyc2UhIEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQgVVNCIGdhZGdldCBlbXVsYXRpb24gKHVzaW5nIHJhdyBnYWRnZXQgb3IgYSBkdW1teSBIQ0QpIGlzIGV4cGxpY2l0bHkgc3VwcG9ydGVkLiBJIGV2ZW4gcmVjYWxsIHRoZSBpbnN0cnVjdGlvbnMgbWVudGlvbmluZyBpdCBleHBsaWNpdGx5OiAmIzM0OyhHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKSYjMzQ7IGFuZCBhZ2FpbiBpbiBzZWN0aW9uIDMsIG1lbnRpb25pbmcgZHJpdmVycyAmIzM0O2FjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuJiMzNDsgRXhjZWxsZW50LgoKTm93LCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0lzIHRoZXJlIGFub3RoZXIgYW5nbGUgaGVyZT8mIzM0OyBDb3VsZCBBVE0gYmUgc2ltdWxhdGVkIG9yIGFjY2Vzc2VkIGluIHNvbWUgKm90aGVyKiB3YXk/IE15IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBuZXQvYXRtL2AgYW5kIGBkcml2ZXJzL2F0bS9gLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZWxzZSBtaWdodCBiZSBpbiB0aG9zZSBkaXJlY3RvcmllcywgaW4gYWRkaXRpb24gdG8gVVNCIGltcGxlbWVudGF0aW9ucy4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRldmljZXMgaW4gYG5ldC9hdG0vYCBvciBgZHJpdmVycy9hdG0vYC4KCkhtbS4uLiBJJiMzOTttIHJlbWluZGVkIG9mIG9sZGVyIGtlcm5lbCBjb2RlIOKAkyBgZW5pLmNgLCBgbmljc3Rhci5jYCwgYGZpcmVzdHJlYW0uY2Ag4oCTIGJ1dCB0aG9zZSBhcmUgcHJvYmFibHkgaXJyZWxldmFudCBub3csIHBlcmhhcHMgcmVtb3ZlZCBvciBzaWduaWZpY2FudGx5IG91dGRhdGVkLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHRob3JvdWdoIGNoZWNrIG9mIHdoYXQmIzM5O3MgKmN1cnJlbnRseSogaW4gYGRyaXZlcnMvYXRtL2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2RyaXZlcnMvYXRtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7c29sb3MtYXR0cmxpc3QuYyYjMzQ7LAogICAgJiMzNDtzb2xvcy1wY2kuYyYjMzQ7CiAgXSwKICAmIzM0O1N1YmRpcnMmIzM0OzogbnVsbAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjQwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIERyaXZlciBDb21wYXRpYmlsaXR5KioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBmb3Igd2hlcmUgdGhpcyBpc3N1ZSBtaWdodCBiZSBzdGVtbWluZyBmcm9tLiBMZXQmIzM5O3Mgbm90IGxpbWl0IG91cnNlbHZlcyB0byB0aGUgb2J2aW91cyBwbGFjZXMuIEkgc2hvdWxkIGRlZmluaXRlbHkgYnJvYWRlbiB0aGUgc2VhcmNoIHRvIGVuY29tcGFzcyBzb21lIHJlbGF0ZWQgbmV0d29yayBhcmVhcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHBpdm90IGludG8gYSBjb3VwbGUgb2Yga2V5IGRyaXZlciBkaXJlY3RvcmllczogbGV0JiMzOTtzIGdvIHBva2UgYXJvdW5kIGluIGBkcml2ZXJzL25ldC9wcHAvYCDigJMgaXQmIzM5O3MgY3J1Y2lhbCB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSBhbmQgaW50ZWdyYXRpb24gdGhlcmUuIEJ1dCBhbHNvLCB3aGlsZSB3ZSYjMzk7cmUgYXQgaXQsIGxldOKAmXMgaGF2ZSBhIGxvb2sgaW50byBgbmV0L2F0bS9gLiBJdCYjMzk7cyB3b3J0aCBlbnN1cmluZyB0aGVyZSBhcmVuJiMzOTt0IGFueSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG9yIGNvbmZsaWN0cyBsdXJraW5nIHdpdGhpbiB0aGF0IEFUTSBjb2RlLCBldmVuIGlmIGl0IHNlZW1zIGxlc3MgbGlrZWx5IGF0IGZpcnN0IGdsYW5jZS4gV2hhdCBleGFjdGx5IGFyZSB0aGUgZmlsZXMgY3VycmVudGx5IHByZXNlbnQgaW4gYG5ldC9hdG0vYD8gVGhhdCYjMzk7cyB0aGUgaW1tZWRpYXRlIG5leHQgc3RlcC4gV2UgbmVlZCB0byBhc3Nlc3MgdGhlIHNjb3BlIG9mIHRoYXQgZGlyZWN0b3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtuZXQvYXRtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7YXRtX21pc2MuYyYjMzQ7LAogICAgJiMzNDthdG1fc3lzZnMuYyYjMzQ7LAogICAgJiMzNDticjI2ODQuYyYjMzQ7LAogICAgJiMzNDtjb21tb24uYyYjMzQ7LAogICAgJiMzNDtjb21tb24uaCYjMzQ7LAogICAgJiMzNDtpb2N0bC5jJiMzNDssCiAgICAmIzM0O3BwcG9hdG0uYyYjMzQ7LAogICAgJiMzNDtwcm9jLmMmIzM0OywKICAgICYjMzQ7cHJvdG9jb2xzLmgmIzM0OywKICAgICYjMzQ7cHZjLmMmIzM0OywKICAgICYjMzQ7cmF3LmMmIzM0OywKICAgICYjMzQ7cmVzb3VyY2VzLmMmIzM0OywKICAgICYjMzQ7cmVzb3VyY2VzLmgmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTU4OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMzNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFBQUG9BVE0gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBhaW1zIHRvIGNsZWFuIHVwIHRoZSBgcHBwb2F0bV9zZW5kYCBmdW5jdGlvbiwgYWRkcmVzc2luZyBzb21lIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG91dC1vZi1ib3VuZHMgcmVhZHMsIGFuZCBpbmVmZmljaWVuY2llcywgcGFydGljdWxhcmx5IGFyb3VuZCB0aGUgTExDIGVuY2Fwc3VsYXRpb24uIFRoZSBvcmlnaW5hbCBjb2RlJiMzOTtzIGxvZ2ljIGZvciBoYW5kbGluZyBoZWFkcm9vbSBhbmQgdGhlIHBvdGVudGlhbGx5IGNvbXByZXNzZWQgcGFja2V0cyBzZWVtcyBjb252b2x1dGVkIGFuZCBJIHNlZSBzb21lIG9idmlvdXMgaW1wcm92ZW1lbnRzLgoKRmlyc3QsIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhbiBpc3N1ZSB3aXRoIGEgcG9zc2libGUgb3V0LW9mLWJvdW5kcyByZWFkIChgc2tiLSZndDtkYXRhWzBdYCkgaWYgdGhlIHBhY2tldCBsZW5ndGggKGBza2ItJmd0O2xlbmApIHdhcyB6ZXJvLiBUaGlzIHBhdGNoIG5lYXRseSBhZGRyZXNzZXMgdGhhdCBieSBhZGRpbmcgYSBjaGVjayB3aXRoIGBwc2tiX21heV9wdWxsKHNrYiwgMSlgLiBJZiB3ZSBjYW4mIzM5O3Qgc2FmZWx5IGFjY2VzcyB0aGUgZmlyc3QgYnl0ZSwgd2UganVzdCBkcm9wIHRoZSBwYWNrZXQgaW1tZWRpYXRlbHkuIFRoaXMgaXMgZmFyIGJldHRlci4KCk5leHQsIEkmIzM5O20gaGFwcHkgdG8gc2VlIHRoYXQgdGhlIHBhdGNoIGNsZWFucyB1cCB0aGUgaGFuZGxpbmcgb2YgTExDIGVuY2Fwc3VsYXRpb24gYW5kIGhlYWQgcm9vbSBhbGxvY2F0aW9uLiBUaGUgb3JpZ2luYWwgYHNrYl9yZWFsbG9jX2hlYWRyb29tYCBmb2xsb3dlZCBieSBgY29uc3VtZV9za2Ioc2tiKWAgbG9naWMgbG9va3MgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWM7IGEgbmV3LCBhbmQgaW1wcm92ZWQsIGFwcHJvYWNoIGlzIGltcGxlbWVudGVkIGhlcmUuIEkgc2VlIHRoYXQgdGhlIHBhdGNoIG5vdyBsZXZlcmFnZXMgYHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pYCB3aGljaCBpcyBmYXIgc3VwZXJpb3IuIEl0IHNlZW1zIHRoYXQgdGhpcyBmdW5jdGlvbiBtYWtlcyBhIGNvcHkgb2YgdGhlIHBhY2tldCBoZWFkZXIgaWYgbmVlZGVkIHRvIGVuc3VyZSB3ZSBoYXZlIGVub3VnaCBoZWFkcm9vbSBhbmQgdGhhdCB0aGUgaGVhZHJvb20gaXMgd3JpdGFibGUuIFRoaXMgYXZvaWRzIHVubmVjZXNzYXJ5IGNvcGllcywgcmVkdWNpbmcgb3ZlcmhlYWQgYW5kIGltcHJvdmluZyBvdmVyYWxsIHBlcmZvcm1hbmNlLgoKQWxzbywgYnkgbW92aW5nIHRoZSBjaGVjayBhbmQgcHJvY2Vzc2luZyB0byAqYWZ0ZXIqIHRoZSBzd2l0Y2ggc3RhdGVtZW50LCB0aGUgb3JpZ2luYWwgbWVzc3kgYW5kIGVycm9yLXByb25lIGBub3NwYWNlYCB1bmRvIGxvZ2ljIGlzIGdvbmUgYW5kIHRoaXMgc2ltcGxpZmllcyB0aGUgY29kZSBhbmQgbWFrZXMgdGhlIGludGVuZGVkIGJlaGF2aW9yIG11Y2ggY2xlYXJlci4KCkZ1cnRoZXJtb3JlLCBJIGFtIHNhdGlzZmllZCB3aXRoIHRoZSBzZXF1ZW5jZSBvZiB0aGUgYHNrYl9wdWxsYCBhbmQgYHNrYl9wdXNoYC4gVGhlIGBza2JfcHVsbGAgaXMgYXBwbGllZCBiZWZvcmUgYHNrYl9wdXNoYCBpcyB1c2VkIHNvIHRoZSBsb2dpYyBpcyBjb25zaXN0ZW50LgoKT3ZlcmFsbCwgdGhpcyBwYXRjaCBzZWVtcyBsaWtlIGEgZ29vZCBpbXByb3ZlbWVudC4gSXQgYWRkcmVzc2VzIHNldmVyYWwgcG90ZW50aWFsIGlzc3VlcyBpbiB0aGUgb3JpZ2luYWwgY29kZSwgaW1wcm92ZXMgZWZmaWNpZW5jeSwgYW5kIG1ha2VzIHRoZSBsb2dpYyBlYXNpZXIgdG8gZm9sbG93LiBUaGUgdXNlIG9mIGBza2JfY293X2hlYWRgIGlzIGEgZ29vZCBjaG9pY2UgdG8gZW5zdXJlIHRoZXJlIGlzIGVub3VnaCBoZWFkIHJvb20uIFRoZSBvcmlnaW5hbCBjb2RlIGZlbHQgb3Zlcmx5IGNvbXBsZXguIEkgdGhpbmsgdGhpcyBpcyBjbGVhbmVyLCBzYWZlciwgYW5kIHByb2JhYmx5IGZhc3Rlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhcnRfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTEwNj1zdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBhc3luY19vcHMgPSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MTA3Olx0LnN0YXJ0X3htaXQgPSBwcHBfYXN5bmNfc2VuZCxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDgtXHQuaW9jdGwgICAgICA9IHBwcF9hc3luY19pb2N0bCxcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz02MTg9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqY29tcGF0X3BwcF9nZXRfZmlsdGVyKHN0cnVjdCBzb2NrX2Zwcm9nMzIgX191c2VyICpwKVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTYzMy0gKiBXaGVuIHR3byBjaGFubmVscyBhcmUgYnJpZGdlZCwgcHBwX2lucHV0IG9uIG9uZSBjaGFubmVsIGlzIHJlZGlyZWN0ZWQgdG9cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjYzNDogKiB0aGUgb3RoZXImIzM5O3Mgb3BzLVx1MDAzZXN0YXJ0X3htaXQgaGFuZGxlci5cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTYzNS0gKiBJbiBvcmRlciB0byBzYWZlbHkgYnJpZGdlIGNoYW5uZWxzIHdlIG11c3QgcmVqZWN0IGNoYW5uZWxzIHdoaWNoIGFyZSBhbHJlYWR5XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MTQ0Nz1zdGF0aWMgbmV0ZGV2X3R4X3RcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjE0NDg6cHBwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE0NDkte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTE2MDk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBwcHBfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNjExLVx0Lm5kb191bmluaXQgICAgICA9IHBwcF9kZXZfdW5pbml0LFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MTYxMjpcdC5uZG9fc3RhcnRfeG1pdCAgPSBwcHBfc3RhcnRfeG1pdCxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE2MTMtXHQubmRvX3Npb2NkZXZwcml2YXRlID0gcHBwX25ldF9zaW9jZGV2cHJpdmF0ZSxcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0xOTA1PXBwcF9wdXNoKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xOTM0LVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MTkzNTpcdFx0cmV0ID0gY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChjaGFuLCBza2IpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTkzNi1cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0xOTYzPXN0YXRpYyBpbnQgcHBwX21wX2V4cGxvZGUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTIxNDQtXHRcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnBjaC1cdTAwM2VmaWxlLnhxKSB8fFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MjE0NTpcdFx0XHQhY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChjaGFuLCBmcmFnKSlcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTIxNDYtXHRcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2cGNoLVx1MDAzZWZpbGUueHEsIGZyYWcpO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTIxNzA9c3RhdGljIHZvaWQgX19wcHBfY2hhbm5lbF9wdXNoKHN0cnVjdCBjaGFubmVsICpwY2gsIHN0cnVjdCBwcHAgKnBwcClcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yMTc3LVx0XHRcdHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnBjaC1cdTAwM2VmaWxlLnhxKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjIxNzg6XHRcdFx0aWYgKCFwY2gtXHUwMDNlY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChwY2gtXHUwMDNlY2hhbiwgc2tiKSkge1xuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMjE3OS1cdFx0XHRcdC8qIHB1dCB0aGUgcGFja2V0IGJhY2sgYW5kIHRyeSBhZ2FpbiBsYXRlciAqL1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTIyODY9c3RhdGljIGJvb2wgcHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0KHN0cnVjdCBjaGFubmVsICpwY2gsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMjMwMi1cdHNrYl9zY3J1Yl9wYWNrZXQoc2tiLCAhbmV0X2VxKHBjaC1cdTAwM2VjaGFuX25ldCwgcGNoYi1cdTAwM2VjaGFuX25ldCkpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MjMwMzpcdGlmICghcGNoYi1cdTAwM2VjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KHBjaGItXHUwMDNlY2hhbiwgc2tiKSlcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTIzMDQtXHRcdGtmcmVlX3NrYihza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTI5OTQ9cHBwX3VucmVnaXN0ZXJfY2hhbm5lbChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMzAwNS1cdCAqIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhdmUgcmV0dXJuZWQgZnJvbSBhbnkgY2FsbHMgaW50b1xuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MzAwNjpcdCAqIHRoZSBjaGFubmVsJiMzOTtzIHN0YXJ0X3htaXQgb3IgaW9jdGwgcm91dGluZSBiZWZvcmUgd2UgcHJvY2VlZC5cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTMwMDctXHQgKi9cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz05Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBzeW5jX29wcyA9IHtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjk0Olx0LnN0YXJ0X3htaXQgPSBwcHBfc3luY19zZW5kLFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtOTUtXHQuaW9jdGwgICAgICA9IHBwcF9zeW5jX2lvY3RsLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTkxOT1zdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcyA9IHtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkyMDpcdC5zdGFydF94bWl0ID0gcHBwb2VfeG1pdCxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTkyMS1cdC5maWxsX2ZvcndhcmRfcGF0aCA9IHBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM9NjA3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwdHBfY2hhbl9vcHMgPSB7XG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjYwODpcdC5zdGFydF94bWl0ID0gcHB0cF94bWl0LFxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYy02MDktXHQuaW9jdGwgICAgICA9IHBwdHBfcHBwX2lvY3RsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDkwMQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDEwMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGggRnV6emluZyBEZWNpc2lvbjogQW5hbHl6aW5nIFBQUG9BVE0gUGFja2V0IFRyYW5zbWlzc2lvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGFib3V0IHRoZSBgc3RhcnRfeG1pdGAgZnVuY3Rpb24gYW5kIGhvdyBQUFAgaGFuZGxlcyBwYWNrZXQgY29uc3VtcHRpb24uIEEgcmV0dXJuIHZhbHVlIG9mIDEgbWVhbnMgdGhlIHBhY2tldCBpcyBmcmVlZCwgMCBtZWFucyBpdCYjMzk7cyBxdWV1ZWQuICBOb3csIHRoZSBgcHBwb2F0bV9zZW5kYCBmdW5jdGlvbiBpcyBrZXkuICBJdCBoYXMgdGhhdCBjaGVjazoKCmBgYGMKCWlmICghcHNrYl9tYXlfcHVsbChza2IsIDEpKSB7CgkJa2ZyZWVfc2tiKHNrYik7CgkJcmV0dXJuIERST1BfUEFDS0VUOwoJfQpgYGAKCkFuZCBgRFJPUF9QQUNLRVRgIGV2YWx1YXRlcyB0byAxLiAgVGhlIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIGNvZGUgKnJlYWNoYWJsZSo/ICBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBwYXRjaCBmdXp6aW5nIHBoaWxvc29waHkuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZ3VpZGFuY2Ugc2F5cy4KCkZyb20gdGhlIGluc3RydWN0aW9ucywgJiMzNDtSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURSYjMzQ7OiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBtb2RpZmllZCBjb2RlIGNhbiBhY3R1YWxseSAqZXhlY3V0ZSogaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVW5yZWFjaGFibGUgY29kZSBpcyBhIG5vLWdvIGZvciBmdXp6aW5nLiAgSSBjYW4mIzM5O3QganVzdCBibGluZGx5IHRydXN0ICYjMzQ7Tm8gRnVuY3Rpb25hbCBDaGFuZ2UmIzM0OyBvciAmIzM0O1JlZmFjdG9yaW5nJiMzNDsgY2xhaW1zLiBBc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMgd2l0aGluIHJlYWNoYWJsZSBjb2RlIGFyZSByaXBlIGZvciBmdXp6aW5nLgoKU2VjdGlvbiAyIHNheXMgJiMzNDtORUdBVElWRSBDUklURVJJQSYjMzQ7OiBJIG5lZWQgdG8gYXZvaWQgYW55dGhpbmcgbm9uLWtlcm5lbCwgbm9uLWV4ZWN1dGFibGUsIG9yIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4gU2VjdGlvbiAzIG91dGxpbmVzIHRoZSAmIzM0O1BPU0lUSVZFIENSSVRFUklBJiMzNDsuIEl0IHNwZWNpZmljYWxseSBjYWxscyBvdXQgY29yZSBzdWJzeXN0ZW1zIChsaWtlIG5ldHdvcmtpbmcpLCByZWZhY3RvcmluZ3MgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGFzc2VydGlvbnMsIGFuZCBkcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMuCgpTbywgaXMgYFBQUG9BVE1gIHBhcnQgb2YgY29yZSBuZXR3b3JraW5nIG9yIGEgcmVhY2hhYmxlIGRyaXZlcj8gWWVzLCBgbmV0L2F0bWAgaXMgcGFydCBvZiBjb3JlIG5ldHdvcmtpbmcuIFRoYXQgaXMgYSBnb29kIHNpZ24uCgpIb3cgY2FuIGBQUFBvQVRNYCBiZSByZWFjaGVkPyBMZXQmIzM5O3MgdHJhY2UgaXQuIEl0IHNlZW1zIHRvIHdvcmsgbGlrZSB0aGlzOgoKMS4gIENyZWF0ZSBhbiBBVE0gc29ja2V0IHVzaW5nIGBzb2NrZXQoUEZfQVRNUFZDLCAuLi4pYCBvciBgc29ja2V0KFBGX0FUTVNWQywgLi4uKWAuCjIuICBDb25uZWN0IHRoZSBzb2NrZXQuIEFuIEFUTSBkZXZpY2UgY2FuIGJlIHJlZ2lzdGVyZWQgdmlhIFVTQiwgdXNpbmcgc29tZXRoaW5nIGxpa2UgYHVzYmF0bWAsIGVtdWxhdGVkIHRocm91Z2ggc3l6a2FsbGVyJiMzOTtzIFVTQiBjYXBhYmlsaXRpZXMgd2l0aCBSYXcgR2FkZ2V0LgozLiAgVGhlbiBJIHVzZSBgaW9jdGwoZmQsIEFUTV9TRVRCQUNLRU5ELCAmYW1wO2JlKWAgd2hlcmUgYGJlLmJhY2tlbmRfbnVtID0gQVRNX0JBQ0tFTkRfUFBQYC4KNC4gIFRoYXQgbGVhZHMgdG8gYHBwcG9hdG1fYXNzaWduX3ZjY2AsIHdoaWNoIGF0dGFjaGVzIHRoZSBBVE0gc29ja2V0IHRvIGEgUFBQIGNoYW5uZWwgdmlhIGBwcHBfcmVnaXN0ZXJfY2hhbm5lbCgmYW1wO3B2Y2MtJmd0O2NoYW4pYC4KNS4gIFRoaXMgaXMgY29ubmVjdGVkIHRvIGEgUFBQIHVuaXQgdmlhIGBpb2N0bCgvZGV2L3BwcCwgUFBQSU9DQVRUQ0hBTiwgLi4uKWAuCjYuICBGaW5hbGx5LCB3cml0aW5nIHRvIGAvZGV2L3BwcGAgb3Igc2VuZGluZyBwYWNrZXRzIHRocm91Z2ggdGhlIGBwcHBgIG5ldHdvcmsgaW50ZXJmYWNlIHRyaWdnZXJzIGBjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQoY2hhbiwgc2tiKWAsIHdoaWNoICppcyogYHBwcG9hdG1fc2VuZGAhCgpDcnVjaWFsbHksIHRoaXMgcGF0Y2ggbW9kaWZpZXMgdHJhbnNtaXQgcGFja2V0IGhhbmRsaW5nIGluIGBwcHBvYXRtX3NlbmRgLiBJdCBjaGFuZ2VzIGhvdyBoZWFkZXIgcmVhbGxvY2F0aW9ucywgaGVhZGVyIHB1bGxzLCBoZWFkZXIgcHVzaGVzLCBhbmQgcGFja2V0IGxlbmd0aCB2YWxpZGF0aW9uIGFyZSBoYW5kbGVkLiBUaGUgZnVuY3Rpb24gaXMgbW9kaWZ5aW5nIGtleSBwYXJ0cyBvZiBuZXR3b3JraW5nLCBhbmQgbmV0d29ya2luZyBpcyBhIGNvcmUgc3Vic3lzdGVtLgoKTm93LCBteSBtaW5kIGlzIGFsc28gdGhpbmtpbmcgaWYgQVRNIGNhbiBzb21laG93IGJlIGNvbm5lY3RlZCBldmVuIHdpdGhvdXQgYSBwaHlzaWNhbCBvciBVU0IgQVRNIGRldmljZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgYWx0ZXJuYXRlIHdheXMgb2YgcmVnaXN0ZXJpbmcgYW4gQVRNIGRldmljZS4gTGV0IG1lIGNoZWNrIHdpdGggYGdyZXBwZXJgIGZvciBgcmVnaXN0ZXJfYXRtZGV2aWNlYCBvciBzb21ldGhpbmcgc2ltaWxhci4gQnV0IGJhc2VkIG9uIG15IGluaXRpYWwgYW5hbHlzaXMsIHRoZSBjb2RlIHBhdGggYXBwZWFycyByZWFjaGFibGUsIGFuZCBpdCYjMzk7cyBtb2RpZnlpbmcgYSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24uIFRoaXMgbG9va3MgcHJvbWlzaW5nIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdpc3Rlcl9hdG0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9hdG1kZXYuaD0yMzU9c3RydWN0IGF0bV9pb2N0bCB7XG4tLVxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0yNDMtLyoqXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oOjI0NDogKiByZWdpc3Rlcl9hdG1faW9jdGwgLSByZWdpc3RlciBoYW5kbGVyIGZvciBpb2N0bCBvcGVyYXRpb25zXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTI0NS0gKiBAaW9jdGw6IGlvY3RsIGhhbmRsZXIgdG8gcmVnaXN0ZXJcbi0tXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTI1MC0gKi9cbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg6MjUxOnZvaWQgcmVnaXN0ZXJfYXRtX2lvY3RsKHN0cnVjdCBhdG1faW9jdGwgKmlvY3RsKTtcbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMjUyLVxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0yNTMtLyoqXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oOjI1NDogKiBkZXJlZ2lzdGVyX2F0bV9pb2N0bCAtIHJlbW92ZSB0aGUgaW9jdGwgaGFuZGxlclxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0yNTUtICogQGlvY3RsOiBpb2N0bCBoYW5kbGVyIHRvIGRlcmVnaXN0ZXJcbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMjU2LSAqL1xuaW5jbHVkZS9saW51eC9hdG1kZXYuaDoyNTc6dm9pZCBkZXJlZ2lzdGVyX2F0bV9pb2N0bChzdHJ1Y3QgYXRtX2lvY3RsICppb2N0bCk7XG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTI1OC1cbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMjU5LVxuaW5jbHVkZS9saW51eC9hdG1kZXYuaDoyNjA6LyogcmVnaXN0ZXJfYXRtZGV2aWNlX25vdGlmaWVyIC0gcmVnaXN0ZXIgYXRtX2RldiBub3RpZnkgZXZlbnRzXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTI2MS0gKlxuLS1cbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMjY0LSAqL1xuaW5jbHVkZS9saW51eC9hdG1kZXYuaDoyNjU6aW50IHJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTtcbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg6MjY2OnZvaWQgdW5yZWdpc3Rlcl9hdG1kZXZpY2Vfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7XG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTI2Ny1cbi0tXG5uZXQvYXRtL2JyMjY4NC5jPTgyNT1zdGF0aWMgaW50IF9faW5pdCBicjI2ODRfaW5pdCh2b2lkKVxuLS1cbm5ldC9hdG0vYnIyNjg0LmMtODMyLSNlbmRpZlxubmV0L2F0bS9icjI2ODQuYzo4MzM6XHRyZWdpc3Rlcl9hdG1faW9jdGwoXHUwMDI2YnIyNjg0X2lvY3RsX29wcyk7XG5uZXQvYXRtL2JyMjY4NC5jOjgzNDpcdHJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllcihcdTAwMjZhdG1fZGV2X25vdGlmaWVyKTtcbm5ldC9hdG0vYnIyNjg0LmMtODM1LVx0cmV0dXJuIDA7XG4tLVxubmV0L2F0bS9icjI2ODQuYz04Mzg9c3RhdGljIHZvaWQgX19leGl0IGJyMjY4NF9leGl0KHZvaWQpXG4tLVxubmV0L2F0bS9icjI2ODQuYy04NDItXHRzdHJ1Y3QgYnIyNjg0X3ZjYyAqYnJ2Y2M7XG5uZXQvYXRtL2JyMjY4NC5jOjg0MzpcdGRlcmVnaXN0ZXJfYXRtX2lvY3RsKFx1MDAyNmJyMjY4NF9pb2N0bF9vcHMpO1xubmV0L2F0bS9icjI2ODQuYy04NDQtXG4tLVxubmV0L2F0bS9icjI2ODQuYy04NDktXG5uZXQvYXRtL2JyMjY4NC5jOjg1MDpcdHVucmVnaXN0ZXJfYXRtZGV2aWNlX25vdGlmaWVyKFx1MDAyNmF0bV9kZXZfbm90aWZpZXIpO1xubmV0L2F0bS9icjI2ODQuYy04NTEtXG4tLVxubmV0L2F0bS9jb21tb24uYz03NTY9aW50IHZjY19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2F0bS9jb21tb24uYy03OTctXG5uZXQvYXRtL2NvbW1vbi5jOjc5ODppbnQgcmVnaXN0ZXJfYXRtZGV2aWNlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpXG5uZXQvYXRtL2NvbW1vbi5jLTc5OS17XG4tLVxubmV0L2F0bS9jb21tb24uYy04MDEtfVxubmV0L2F0bS9jb21tb24uYzo4MDI6RVhQT1JUX1NZTUJPTF9HUEwocmVnaXN0ZXJfYXRtZGV2aWNlX25vdGlmaWVyKTtcbm5ldC9hdG0vY29tbW9uLmMtODAzLVxubmV0L2F0bS9jb21tb24uYzo4MDQ6dm9pZCB1bnJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxubmV0L2F0bS9jb21tb24uYy04MDUte1xuLS1cbm5ldC9hdG0vY29tbW9uLmMtODA3LX1cbm5ldC9hdG0vY29tbW9uLmM6ODA4OkVYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfYXRtZGV2aWNlX25vdGlmaWVyKTtcbm5ldC9hdG0vY29tbW9uLmMtODA5LVxuLS1cbm5ldC9hdG0vaW9jdGwuYz0yND1zdGF0aWMgTElTVF9IRUFEKGlvY3RsX2xpc3QpO1xuLS1cbm5ldC9hdG0vaW9jdGwuYy0yNi1cbm5ldC9hdG0vaW9jdGwuYzoyNzp2b2lkIHJlZ2lzdGVyX2F0bV9pb2N0bChzdHJ1Y3QgYXRtX2lvY3RsICppb2N0bClcbm5ldC9hdG0vaW9jdGwuYy0yOC17XG4tLVxubmV0L2F0bS9pb2N0bC5jLTMyLX1cbm5ldC9hdG0vaW9jdGwuYzozMzpFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX2F0bV9pb2N0bCk7XG5uZXQvYXRtL2lvY3RsLmMtMzQtXG5uZXQvYXRtL2lvY3RsLmM6MzU6dm9pZCBkZXJlZ2lzdGVyX2F0bV9pb2N0bChzdHJ1Y3QgYXRtX2lvY3RsICppb2N0bClcbm5ldC9hdG0vaW9jdGwuYy0zNi17XG4tLVxubmV0L2F0bS9pb2N0bC5jLTQwLX1cbm5ldC9hdG0vaW9jdGwuYzo0MTpFWFBPUlRfU1lNQk9MKGRlcmVnaXN0ZXJfYXRtX2lvY3RsKTtcbm5ldC9hdG0vaW9jdGwuYy00Mi1cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYz00NjY9c3RhdGljIGludCBfX2luaXQgcHBwb2F0bV9pbml0KHZvaWQpXG5uZXQvYXRtL3BwcG9hdG0uYy00Njcte1xubmV0L2F0bS9wcHBvYXRtLmM6NDY4Olx0cmVnaXN0ZXJfYXRtX2lvY3RsKFx1MDAyNnBwcG9hdG1faW9jdGxfb3BzKTtcbm5ldC9hdG0vcHBwb2F0bS5jLTQ2OS1cdHJldHVybiAwO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jPTQ3Mj1zdGF0aWMgdm9pZCBfX2V4aXQgcHBwb2F0bV9leGl0KHZvaWQpXG5uZXQvYXRtL3BwcG9hdG0uYy00NzMte1xubmV0L2F0bS9wcHBvYXRtLmM6NDc0Olx0ZGVyZWdpc3Rlcl9hdG1faW9jdGwoXHUwMDI2cHBwb2F0bV9pb2N0bF9vcHMpO1xubmV0L2F0bS9wcHBvYXRtLmMtNDc1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQwOTMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEFUTSBEZXZpY2UgUmVnaXN0cmF0aW9uKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IEFUTSwgYW5kIEkmIzM5O20gc3R1Y2sgb24gYGF0bV9kZXZfcmVnaXN0ZXJgLiBUaGF0IGZ1bmN0aW9uIGlzIGtleSwgcmlnaHQ/IFdoZXJlIGFyZSB3ZSBhY3R1YWxseSByZWdpc3RlcmluZyBBVE0gZGV2aWNlcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggaGVyZS4gTGV0IG1lIHRoaW5rLCBJIHJlbWVtYmVyIGdyZXBwaW5nIGZvciBgYXRtX2Rldl9yZWdpc3RlcihgIGVhcmxpZXIsIGFuZCBnb3QgYSBmZXcgaGl0czogYGRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jYCwgYGRyaXZlcnMvdXNiL2F0bS91c2JhdG0uY2AsIGFuZCwgb2YgY291cnNlLCB0aGUgZGVmaW5pdGlvbiBpdHNlbGYgaW4gYG5ldC9hdG0vcmVzb3VyY2VzLmNgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgc2hvd2luZyBQQ0kgYW5kIFVTQiBkZXZpY2VzIHBvdGVudGlhbGx5IGJlaW5nIHJlZ2lzdGVyZWQuCgpCdXQgdGhhdCYjMzk7cyBub3QgZW5vdWdoOyBJIGhhdmUgdG8gYmUgdGhvcm91Z2guIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiByZWZlcmVuY2VzIHRvIGBhdG1fZGV2X3JlZ2lzdGVyYCB0aGF0IGFyZSBub3QgZnVuY3Rpb24gY2FsbHMuIE1heWJlIHRoZXJlJiMzOTtzIHNvbWUgc3VidGxlIGxpbmthZ2UgSSYjMzk7bSBtaXNzaW5nIGJlY2F1c2UgSSYjMzk7bSBvbmx5IGxvb2tpbmcgZm9yIHRoZSB0eXBpY2FsIGZ1bmN0aW9uIGNhbGwgc3ludGF4PyBJJiMzOTtsbCBjaGVjayBmb3IgdGhhdC4gSXQgd291bGQgYmUgYSBzaWxseSBvdmVyc2lnaHQuIExldCBtZSBzZWUgd2hhdCBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdG1fZGV2X3JlZ2lzdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jPTEzNDg9c3RhdGljIGludCBhdG1faW5pdChzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCwgc3RydWN0IGRldmljZSAqcGFyZW50KVxuLS1cbmRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jLTEzNTgtXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYzoxMzU5Olx0XHRjYXJkLVx1MDAzZWF0bWRldltpXSA9IGF0bV9kZXZfcmVnaXN0ZXIoXCYjMzQ7c29sb3MtcGNpXCYjMzQ7LCBwYXJlbnQsIFx1MDAyNmZwZ2Ffb3BzLCAtMSwgTlVMTCk7XG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYy0xMzYwLVx0XHRpZiAoIWNhcmQtXHUwMDNlYXRtZGV2W2ldKSB7XG4tLVxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jPTkwMT1zdGF0aWMgaW50IHVzYmF0bV9hdG1faW5pdChzdHJ1Y3QgdXNiYXRtX2RhdGEgKmluc3RhbmNlKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy05MDktXHQgKiBhYm9ydCBpZiBhdG1fZGV2LVx1MDAzZWRldl9kYXRhIGlzIE5VTEwuICovXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmM6OTEwOlx0YXRtX2RldiA9IGF0bV9kZXZfcmVnaXN0ZXIoaW5zdGFuY2UtXHUwMDNlZHJpdmVyX25hbWUsXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMtOTExLVx0XHRcdFx0ICAgXHUwMDI2aW5zdGFuY2UtXHUwMDNldXNiX2ludGYtXHUwMDNlZGV2LCBcdTAwMjZ1c2JhdG1fYXRtX2Rldm9wcyxcbi0tXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oPTE1Mj1leHRlcm4gcndsb2NrX3QgdmNjX3NrbGlzdF9sb2NrO1xuLS1cbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMTU1LVxuaW5jbHVkZS9saW51eC9hdG1kZXYuaDoxNTY6c3RydWN0IGF0bV9kZXYgKmF0bV9kZXZfcmVnaXN0ZXIoY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IGRldmljZSAqcGFyZW50LFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0xNTctXHRcdFx0XHQgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcyxcbi0tXG5uZXQvYXRtL3Jlc291cmNlcy5jPTY5PUVYUE9SVF9TWU1CT0woYXRtX2Rldl9sb29rdXApO1xubmV0L2F0bS9yZXNvdXJjZXMuYy03MC1cbm5ldC9hdG0vcmVzb3VyY2VzLmM6NzE6c3RydWN0IGF0bV9kZXYgKmF0bV9kZXZfcmVnaXN0ZXIoY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IGRldmljZSAqcGFyZW50LFxubmV0L2F0bS9yZXNvdXJjZXMuYy03Mi1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYXRtZGV2X29wcyAqb3BzLCBpbnQgbnVtYmVyLFxuLS1cbm5ldC9hdG0vcmVzb3VyY2VzLmMtMTMxLX1cbm5ldC9hdG0vcmVzb3VyY2VzLmM6MTMyOkVYUE9SVF9TWU1CT0woYXRtX2Rldl9yZWdpc3Rlcik7XG5uZXQvYXRtL3Jlc291cmNlcy5jLTEzMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ5ODAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxMzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVVNCIEFUTSBNb2RlbXMgYW5kIFBQUCBvdmVyIEFUTSBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgZnV6emluZyB0aGUgVVNCIEFUTSBtb2RlbSBkcml2ZXIgKGBkcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmNgKS4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQgcmVnaXN0ZXJzIGFuIEFUTSBkZXZpY2Ugd2hlbiBhIFVTQiBBVE0gbW9kZW0gY29ubmVjdHMsIGFuZCBzeXprYWxsZXIgY2FuIGVtdWxhdGUgdGhpcyB1c2luZyBSYXcgR2FkZ2V0L0R1bW15IEhDRC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgpCdXQgdGhlbiwgSSBuZWVkIHRvIGNvbnNpZGVyIGBwcHBvYXRtYCwgd2hpY2ggaW1wbGVtZW50cyBQUFAgb3ZlciBBVE0gaW4gYG5ldC9hdG0vcHBwb2F0bS5jYC4gIEkgc2VlIHRoYXQgYHBwcG9hdG1fc2VuZGAgaXMgdGhlIGNydWNpYWwgZnVuY3Rpb24gZm9yIHRyYW5zbWl0dGluZyBQUFAgcGFja2V0cyBvdmVyIHRoZSBBVE0gbmV0d29yay4gVGhpcyBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIHRhcmdldC4KCkxldCYjMzk7cyBicmVhayBkb3duIHdoeSB0aGlzIGlzIHdvcnRoIGZ1enppbmc6ICBJdCYjMzk7cyBpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0gKGBuZXQvYXRtL2ApLiBJdCBoYW5kbGVzIHBhY2tldCB0cmFuc21pc3Npb24gbG9naWMsIGluY2x1ZGluZyBoZWFkcm9vbSBtYW5hZ2VtZW50IHdpdGggZnVuY3Rpb25zIGxpa2UgYHNrYl9jb3dfaGVhZGAsIGBza2JfcHVsbGAsIGBza2JfcHVzaGAsIG1lbW9yeSBtYW5hZ2VtZW50IChhbGxvY2F0aW5nIGhlYWRyb29tLCBlcnJvciBoYW5kbGluZywgc2tiIGZyZWVpbmcpLCBhbmQgaXQgdXNlcyBib3VuZHMgY2hlY2tpbmcgKGBwc2tiX21heV9wdWxsYCkuICBUaGUgcmVhY2hhYmlsaXR5IGxvb2tzIHNvbGlkOiBhIHN0YW5kYXJkIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHdpdGggUFBQIGNoYW5uZWxzLCBhbmQgd2l0aCBzeXprYWxsZXImIzM5O3MgVVNCIGdhZGdldCBlbXVsYXRpb24gd2UgY2FuIGRlZmluaXRlbHkgcmVhY2ggaXQsIGJ5IGVtdWxhdGluZyBhIFVTQiBBVE0gbW9kZW0uCgpOb3csIEkmIzM5O20gZGlnZ2luZyBkZWVwZXIgdG8gZmluZCBvdGhlciB3YXlzIGFuIEFUTSB2aXJ0dWFsIGNpcmN1aXQgY29ubmVjdGlvbiAoYXRtX3ZjYykgbWlnaHQgYmUgY3JlYXRlZC4gIFRoZSBgQVRNX0JBQ0tFTkRfUFBQYCBvcHRpb24gaXMgaW50ZXJlc3RpbmcuIEkmIzM5O20gcmV2aWV3aW5nIGBwcHBvYXRtX2Fzc2lnbl92Y2NgIHdoaWNoIGlzIGNhbGxlZCBieSBgcHBwb2F0bV9pb2N0bGAuICBFc3NlbnRpYWxseSwgYSB1c2VyLXNwYWNlIHByb2Nlc3Mgd291bGQgbmVlZCB0byBvcGVuIGEgUFBQIGRldmljZSwgdXNlIGBQUFBJT0NBVFRDSEFOYCBhbmQgYFBQUElPQ0NPTk5FQ1RgLCBhbmQgdGhlbiBlaXRoZXIgd3JpdGUgZGlyZWN0bHkgdG8gdGhlIFBQUCBkZXZpY2UsIG9yIHNldCB1cCBhIFBQUCBuZXR3b3JrIGludGVyZmFjZSwgd2hpY2ggdGhlbiB1c2VzIGBjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQoY2hhbiwgc2tiKWAgdG8gc2VuZCBwYWNrZXRzLiAgVGhpcyAqaXMqIGBwcHBvYXRtX3NlbmRgLgoKUmVnYXJkaW5nIGZ1enppbmcsIGBwcHBvYXRtX3NlbmRgIGlzIG15IHByaW1hcnkgdGFyZ2V0LCBhcyB0aGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBtb2RpZmljYXRpb25zIGFyZSB0YWtpbmcgcGxhY2UuIEl0JiMzOTtzIG1hcmtlZCBhcyBgc3RhdGljYCBpbiBgbmV0L2F0bS9wcHBvYXRtLmNgLCBidXQgc2luY2UgaXQmIzM5O3MgdXNlZCBpbiBhIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aGluIGBwcHBvYXRtX29wc2AsIHRoZSBjb21waWxlciAqY2Fubm90KiBpbmxpbmUgaXQgYXdheTsgaXQgd2lsbCBoYXZlIGEgcmVhbCBzeW1ib2wgYWRkcmVzcy4gSSBuZWVkIHRvIG5vdGUgYW55IG90aGVyIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGBuZXQvYXRtL3BwcG9hdG0uY2AsIHNvIEkgd2lsbCBjaGVjayB0aGVzZSBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aMC05X10mIzQzOy4qXFwoLipcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtL3BwcG9hdG0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYXRtL3BwcG9hdG0uYz04Nj1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwcHBsbGNbNl0gPSB7IDB4RkUsIDB4RkUsIDB4MDMsIDB4Q0YsIDB4QzAsIDB4MjEgfTtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy04OC1cbm5ldC9hdG0vcHBwb2F0bS5jOjg5OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG9hdG1fdmNjICphdG12Y2NfdG9fcHZjYyhjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxubmV0L2F0bS9wcHBvYXRtLmMtOTAte1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTkzLVxubmV0L2F0bS9wcHBvYXRtLmM6OTQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmNoYW5fdG9fcHZjYyhjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG5uZXQvYXRtL3BwcG9hdG0uYy05NS17XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMTAzLSAqL1xubmV0L2F0bS9wcHBvYXRtLmM6MTA0OnN0YXRpYyB2b2lkIHBwcG9hdG1fd2FrZXVwX3NlbmRlcihzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXG5uZXQvYXRtL3BwcG9hdG0uYy0xMDUte1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTExMC1cbm5ldC9hdG0vcHBwb2F0bS5jOjExMTpzdGF0aWMgdm9pZCBwcHBvYXRtX3JlbGVhc2VfY2Ioc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcbm5ldC9hdG0vcHBwb2F0bS5jLTExMi17XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMTMzLSAqL1xubmV0L2F0bS9wcHBvYXRtLmM6MTM0OnN0YXRpYyB2b2lkIHBwcG9hdG1fcG9wKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYXRtL3BwcG9hdG0uYy0xMzUte1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTE2Ni0gKi9cbm5ldC9hdG0vcHBwb2F0bS5jOjE2NzpzdGF0aWMgdm9pZCBwcHBvYXRtX3VuYXNzaWduX3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxubmV0L2F0bS9wcHBvYXRtLmMtMTY4LXtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0xODAtLyogQ2FsbGVkIHdoZW4gYW4gQUFMNSBQRFUgY29tZXMgaW4gKi9cbm5ldC9hdG0vcHBwb2F0bS5jOjE4MTpzdGF0aWMgdm9pZCBwcHBvYXRtX3B1c2goc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9hdG0vcHBwb2F0bS5jLTE4Mi17XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMjMzLVxubmV0L2F0bS9wcHBvYXRtLmM6MjM0OnN0YXRpYyBpbnQgcHBwb2F0bV9tYXlfc2VuZChzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MsIGludCBzaXplKVxubmV0L2F0bS9wcHBvYXRtLmMtMjM1LXtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0yODgtI2RlZmluZSBEUk9QX1BBQ0tFVCAxXG5uZXQvYXRtL3BwcG9hdG0uYzoyODk6c3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2F0bS9wcHBvYXRtLmMtMjkwLXtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYz0zNzU9c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2F0bV9vcHMgPSB7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMzc5LVxubmV0L2F0bS9wcHBvYXRtLmM6MzgwOnN0YXRpYyBpbnQgcHBwb2F0bV9hc3NpZ25fdmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICphcmcpXG5uZXQvYXRtL3BwcG9hdG0uYy0zODEte1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jPTQ2MT1zdGF0aWMgc3RydWN0IGF0bV9pb2N0bCBwcHBvYXRtX2lvY3RsX29wcyA9IHtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy00NjUtXG5uZXQvYXRtL3BwcG9hdG0uYzo0NjY6c3RhdGljIGludCBfX2luaXQgcHBwb2F0bV9pbml0KHZvaWQpXG5uZXQvYXRtL3BwcG9hdG0uYy00Njcte1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTQ3MS1cbm5ldC9hdG0vcHBwb2F0bS5jOjQ3MjpzdGF0aWMgdm9pZCBfX2V4aXQgcHBwb2F0bV9leGl0KHZvaWQpXG5uZXQvYXRtL3BwcG9hdG0uYy00NzMte1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTQ3Ni1cbm5ldC9hdG0vcHBwb2F0bS5jOjQ3Nzptb2R1bGVfaW5pdChwcHBvYXRtX2luaXQpO1xubmV0L2F0bS9wcHBvYXRtLmM6NDc4Om1vZHVsZV9leGl0KHBwcG9hdG1fZXhpdCk7XG5uZXQvYXRtL3BwcG9hdG0uYy00NzktXG5uZXQvYXRtL3BwcG9hdG0uYzo0ODA6TU9EVUxFX0FVVEhPUihcJiMzNDtNaXRjaGVsbCBCbGFuayBKciBcdTAwM2NtaXRjaEBzZmdvdGguY29tXHUwMDNlXCYjMzQ7KTtcbm5ldC9hdG0vcHBwb2F0bS5jOjQ4MTpNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7UkZDMjM2NCBQUFAgb3ZlciBBVE0vQUFMNVwmIzM0Oyk7XG5uZXQvYXRtL3BwcG9hdG0uYzo0ODI6TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgwNjcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUFBQb0FUTSBLZXJuZWwgTW9kdWxlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBtb2RpZmljYXRpb25zLCBzbyB0aGUgY29yZSBmdW5jdGlvbiB0byBleGFtaW5lIGlzIGBwcHBvYXRtX3NlbmRgLiBJdCYjMzk7cyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24sIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2VzIGxpZXMuIFRoZSBzZXR1cCBwb2ludHMgYXBwZWFyIHRvIGJlIGBwcHBvYXRtX2Fzc2lnbl92Y2NgIGFuZCBgcHBwb2F0bV9pb2N0bGAuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gYHBwcG9hdG1fbWF5X3NlbmRgIGxvb2tzIHByb21pc2luZywgSSBuZWVkIHRvIHNlZSBpZiBpdOKAmXMgc3RhdGljLiBZZXMsIGl0IGlzLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBwcHBvYXRtX3NlbmRgLCBzbyB0aGF04oCZcyBpbnRlcmVzdGluZy4gRm9yIG15IEZvY3VzU3ltYm9scywgSeKAmWxsIGRlZmluaXRlbHkgbmVlZDoKCiogICBgcHBwb2F0bV9zZW5kYAoqICAgYHBwcG9hdG1fYXNzaWduX3ZjY2AKKiAgIFBvdGVudGlhbGx5LCBgcHBwb2F0bV9kZXZwcHBfaW9jdGxgICpvciogYHBwcG9hdG1faW9jdGxgLCBJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSBtb3JlIGNvbW1vbiBgcHBwb2F0bV9pb2N0bGAuIEJ1dCBgcHBwb2F0bV9zZW5kYCBpcyB0aGUgcHJpbWFyeSBjYW5kaWRhdGUgaGVyZS4gSXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIHBhY2tldCB0cmFuc21pc3Npb24uCgpHaXZlbiB0aGF0IHRoaXMgaXMgUFBQb0FUTSwgSSYjMzk7bSBwcmV0dHkgY2VydGFpbiBgcHBwb2F0bV9zZW5kYCBpc24mIzM5O3QgdXNlZCBldmVyeXdoZXJlLiBJdCYjMzk7cyBkZWZpbml0ZWx5IHNwZWNpZmljIHRvIHRyYW5zbWl0dGluZyBwYWNrZXRzIG92ZXIgQVRNLCBzbyBub3QgYSBnZW5lcmFsLXB1cnBvc2UgZnVuY3Rpb24uCgpOb3csIHRvIGRldGVybWluZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCwgSSBuZWVkIHRvIGNhcmVmdWxseSByZXZpZXcgdGhlIEtjb25maWcgZmlsZXMuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYC4KYGBga2NvbmZpZwppZiBQUFAKCmNvbmZpZyBQUFBPQVRNCgl0cmlzdGF0ZSAmIzM0O1BQUCBvdmVyIEFUTSYjMzQ7CglkZXBlbmRzIG9uIEFUTQpgYGAKQmFzZWQgb24gdGhlIGZpbGUsIHRoZSBjb25maWd1cmF0aW9ucyBhcmU6CgoqICAgYFBQUE9BVE1gCiogICBgUFBQYAoqICAgYEFUTWAKCkkmIzM5O2xsIGFsc28gdmVyaWZ5IHRoYXQgYEFUTWAgaXNuJiMzOTt0IGNvbnRpbmdlbnQgb24gYW55dGhpbmcgZWxzZS4gSSYjMzk7bGwgY2hlY2sgYG5ldC9hdG0vS2NvbmZpZ2AgdG8gYmUgc3VyZS4gVGhhdCBzaG91bGQgYmUgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9hdG0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIEFzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlIChBVE0pXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBBVE1cbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O0FzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlIChBVE0pXCYjMzQ7XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIEFUTSBpcyBhIGhpZ2gtc3BlZWQgbmV0d29ya2luZyB0ZWNobm9sb2d5IGZvciBMb2NhbCBBcmVhIE5ldHdvcmtzXG4gIDEwOlx0XHQgIGFuZCBXaWRlIEFyZWEgTmV0d29ya3MuICBJdCB1c2VzIGEgZml4ZWQgcGFja2V0IHNpemUgYW5kIGlzXG4gIDExOlx0XHQgIGNvbm5lY3Rpb24gb3JpZW50ZWQsIGFsbG93aW5nIGZvciB0aGUgbmVnb3RpYXRpb24gb2YgbWluaW11bVxuICAxMjpcdFx0ICBiYW5kd2lkdGggcmVxdWlyZW1lbnRzLlxuICAxMzpcdFxuICAxNDpcdFx0ICBJbiBvcmRlciB0byBwYXJ0aWNpcGF0ZSBpbiBhbiBBVE0gbmV0d29yaywgeW91ciBMaW51eCBib3ggbmVlZHMgYW5cbiAgMTU6XHRcdCAgQVRNIG5ldHdvcmtpbmcgY2FyZC4gSWYgeW91IGhhdmUgdGhhdCwgc2F5IFkgaGVyZSBhbmQgdG8gdGhlIGRyaXZlclxuICAxNjpcdFx0ICBvZiB5b3VyIEFUTSBjYXJkIGJlbG93LlxuICAxNzpcdFxuICAxODpcdFx0ICBOb3RlIHRoYXQgeW91IG5lZWQgYSBzZXQgb2YgdXNlci1zcGFjZSBwcm9ncmFtcyB0byBhY3R1YWxseSBtYWtlIHVzZVxuICAxOTpcdFx0ICBvZiBBVE0uICBTZWUgdGhlIGZpbGUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXRtLnJzdFx1MDAzZSBmb3JcbiAgMjA6XHRcdCAgZnVydGhlciBkZXRhaWxzLlxuICAyMTpcdFxuICAyMjpcdGNvbmZpZyBBVE1fQlIyNjg0XG4gIDIzOlx0XHR0cmlzdGF0ZSBcJiMzNDtSRkMxNDgzLzI2ODQgQnJpZGdlZCBwcm90b2NvbHNcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gQVRNIFx1MDAyNlx1MDAyNiBJTkVUXG4gIDI1Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MTM4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBUaG91Z2h0cyoqCgpPa2F5LCBzbyBJJiMzOTttIGNvbmZpZ3VyaW5nIHRoaXMgc3lzdGVtLCBhbmQgSSYjMzk7dmUgZ290IGEgbGl0dGxlIGRlcGVuZGVuY3kgcHV6emxlIHRvIHNvcnQgb3V0LiBJdCBsb29rcyBsaWtlIGBBVE1gIGl0c2VsZiBzdGFuZHMgYWxvbmUg4oCTIGl0IGRvZXNuJiMzOTt0IHJlbHkgb24gYW55dGhpbmcgZWxzZSBkaXJlY3RseSwgYWNjb3JkaW5nIHRvIHRoaXMgaW5pdGlhbCBhc3Nlc3NtZW50LiBUaGVuIHdlIGhhdmUgYFBQUE9BVE1gLiBUaGF0IG9uZSBpcyBhIGJpdCBtb3JlIGNvbmRpdGlvbmFsOyBpdCYjMzk7cyB0dWNrZWQgYXdheSBpbnNpZGUgYW4gYGlmIFBQUGAgc3RhdGVtZW50LCBhbmQgY3J1Y2lhbGx5LCBpdCAqZGVwZW5kcyogb24gYEFUTWAuIAoKVGhlcmVmb3JlLCBteSBjb25maWd1cmF0aW9uIG5lZWRzIHRvIGluY2x1ZGU6CgoxLiAgYEFUTWAKMi4gIGBQUFBgCjMuICBgUFBQT0FUTWAKCkJ1dCwga25vd2luZyBob3cgdGhlc2UgdGhpbmdzIGdvLCBJIGNhbiYjMzk7dCBqdXN0IHRha2UgdGhpcyBhdCBmYWNlIHZhbHVlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHN1YnRsZSBkZXBlbmRlbmNpZXMgb3IgcmVxdWlyZW1lbnRzIGx1cmtpbmcgYXJvdW5kLiBUbyBiZSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBuZXQvS2NvbmZpZ2AgdG8gc2VlIGV4YWN0bHkgKmhvdyogYG5ldC9hdG0vS2NvbmZpZ2AgaXMgcHVsbGVkIGludG8gdGhlIG92ZXJhbGwgcGljdHVyZS4gSSBuZWVkIHRoZSBmdWxsIGNvbnRleHQgdG8gYmUgY29uZmlkZW50IGluIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvdXJjZS4qbmV0L2F0bS9LY29uZmlnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0yNTY9c291cmNlIFwmIzM0O25ldC90aXBjL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI1Nzpzb3VyY2UgXCYjMzQ7bmV0L2F0bS9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy0yNTgtc291cmNlIFwmIzM0O25ldC9sMnRwL0tjb25maWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk1NDQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgTmV0d29yayBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZXNlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgc3RydWN0dXJlZC4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgYG5ldC9hdG0vS2NvbmZpZ2AgaXMgZGlyZWN0bHkgaW5jbHVkZWQgaW4gYG5ldC9LY29uZmlnYCwgd2hpY2ggaXMgdW5kZXIgdGhlIGBtZW51Y29uZmlnIE5FVGAgc2VjdGlvbi4gVGhhdCBtYWtlcyBzZW5zZSwga2VlcHMgdGhpbmdzIG9yZ2FuaXplZC4gTm93LCB0aGUgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCBpcyBhbHNvIGluY2x1ZGVkLCBidXQgdGhpcyB0aW1lIGluIGBkcml2ZXJzL25ldC9LY29uZmlnYC4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciBhbnkgY29uZGl0aW9uYWwgcGFyZW50IG1lbnVzIHRoYXQgbWlnaHQgYWZmZWN0IGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBQUFAgY29uZmlndXJhdGlvbnMgYXJlIG9ubHkgdmlzaWJsZSBvciBlbmFibGVkIHVuZGVyIHRoZSBleHBlY3RlZCBjaXJjdW1zdGFuY2VzLiBObyBwb2ludCBpbiB3YWRpbmcgdGhyb3VnaCBleHRyYW5lb3VzIG9wdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgcGFydGljdWxhciBkcml2ZXIgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYmVpbmcgY29udHJvbGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c291cmNlLipkcml2ZXJzL25ldC9wcHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTUyNj1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvcGxpcC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnLTUyNy1cbmRyaXZlcnMvbmV0L0tjb25maWc6NTI4OnNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZy01MjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5OTA3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBzb21ldGhpbmcgbmV0d29yay1yZWxhdGVkLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgc2VlbSBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIGRldmljZSBkcml2ZXJzIGFyZSBzZXQgdXAuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHRoZSBwcmltYXJ5IEtjb25maWcgZmlsZSBmb3IgbmV0d29yayBkcml2ZXJzIHNob3VsZCBiZSBpbiB0aGUgYGRyaXZlcnMvbmV0YCBkaXJlY3RvcnksIGFuZCBpdCBtYWtlcyBzZW5zZSB0byBzdGFydCB3aXRoIGBLY29uZmlnYC4gTm93LCB3aGVyZSB3YXMgdGhhdCBzcGVjaWZpYyBvcHRpb24gSSB3YXMgbG9va2luZyBmb3I/IFJpZ2h0LCBJIHNlZW0gdG8gcmVjYWxsIGl0IGJlaW5nIG5lYXIgbGluZSA1MjguIExldCYjMzk7cyBzdGFydCB0aGVyZS4gSSYjMzk7bGwgbmVlZCB0byBvcGVuIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQmIzM5O3MgYmVpbmcgZGVmaW5lZCBhcm91bmQgdGhhdCBzcGVjaWZpYyBsaW5lLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCB0byByZWZyZXNoIG15IG1lbW9yeSBvciBkaWcgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MjA6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXCYjMzQ7XG4gNTIxOlx0XG4gNTIyOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1wmIzM0O1xuIDUyMzpcdFxuIDUyNDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wY3MvS2NvbmZpZ1wmIzM0O1xuIDUyNTpcdFxuIDUyNjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wbGlwL0tjb25maWdcJiMzNDtcbiA1Mjc6XHRcbiA1Mjg6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWdcJiMzNDtcbiA1Mjk6XHRcbiA1MzA6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnXCYjMzQ7XG4gNTMxOlx0XG4gNTMyOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvczM5MC9uZXQvS2NvbmZpZ1wmIzM0O1xuIDUzMzpcdFxuIDUzNDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wmIzM0O1xuIDUzNTpcdFxuIDUzNjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnXCYjMzQ7XG4gNTM3Olx0XG4gNTM4Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnXCYjMzQ7XG4gNTM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNDA5CgkJCQkJCQlvdXRwdXQ6IDE2MQoJCQkJCQkJdGhvdWdodHM6IDI2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQUFAgT3ZlciBBVE0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBzdHJhaWdodDogdG8gZ2V0IHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgdXAgYW5kIHJ1bm5pbmcsIEkgYWJzb2x1dGVseSBuZWVkIGBQUFBgLCBgUFBQT0FUTWAsIGFuZCBgQVRNYCBlbmFibGVkLiBUaG9zZSBhcmUgdGhlIGVzc2VudGlhbHMuIElmIEkgd2FudCB0byB0aHJvdyBpbiBVU0IgZW11bGF0aW9uIGZvciB0ZXN0aW5nLCB0aGVuIGBVU0JfQVRNYCBvciBgVVNCX1JBV19HQURHRVRgIGNvdWxkIGJlIHVzZWZ1bCwgYnV0IHRob3NlIGFyZSBleHRyYXMuIFRoZSBjcml0aWNhbCBjb25maWdzIGFyZSwgYWdhaW4sIGBQUFBgLCBgQVRNYCwgYW5kIGBQUFBPQVRNYC4KCkxldCBtZSBqdXN0IHJ1biB0aHJvdWdoIG15IGNoZWNrbGlzdCB0byBtYWtlIGFic29sdXRlbHkgY2VydGFpbiBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gYmUgKnN1cmUqOgoKMS4gICoqV29ydGhGdXp6aW5nOioqIFllcCwgZGVmaW5pdGVseS4gVGhpcyBwYXRjaCB0b3VjaGVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB3aXRoaW4gYG5ldC9hdG0vcHBwb2F0bS5jYCwgc3BlY2lmaWNhbGx5IGBwcHBvYXRtX3NlbmRgLiBJdCYjMzk7cyBhbHRlcmluZyBob3cgd2UgaGFuZGxlIFNLQiBidWZmZXJzIOKAkyB0aGluZ3MgbGlrZSBgc2tiX2Nvd19oZWFkYCwgYHNrYl9wdWxsYCwgYHNrYl9wdXNoYCDigJMgYW5kIGFsc28gcGFja2V0IHZhbGlkYXRpb24gdXNpbmcgYHBza2JfbWF5X3B1bGxgLCBhbG9uZyB3aXRoIGVycm9yIGhhbmRsaW5nIGZvciBQUFAgb3ZlciBBVE0gZnJhbWUgdHJhbnNtaXNzaW9uLiBUaGlzIGNvZGUmIzM5O3MgdG90YWxseSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIEFUTSBhbmQgUFBQIGludGVyZmFjZXMsIGluY2x1ZGluZywgbGlrZSwgZW11bGF0ZWQgVVNCIEFUTSBkZXZpY2VzIHZpYSBVU0IgZ2FkZ2V0cywgd2hpY2ggaXMgZ3JlYXQgZm9yIHRlc3RpbmcuCjIuICAqKkZvY3VzU3ltYm9sczoqKiBJJiMzOTt2ZSBuYWlsZWQgZG93biB0aGUga2V5IHN5bWJvbHM6IGBwcHBvYXRtX3NlbmRgIGFuZCBgcHBwb2F0bV9hc3NpZ25fdmNjYC4KMy4gICoqRW5hYmxlQ29uZmlnczoqKiBJJiMzOTttIGNvbmZpcm1pbmcgYEFUTWAsIGBQUFBgLCBhbmQgYFBQUE9BVE1gIGFyZSBhbGwgZW5hYmxlZCBhbmQgdmVyaWZpZWQsIHdoaWNoIHRoZXkgYXJlLgoKUmlnaHQsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dCBwZXJmZWN0bHkuIFRoZSBzb3VyY2UgZmlsZXMgYXJlIGFsbCBpbiBvcmRlci4gSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBVE0mIzM0OywKICAgICYjMzQ7UFBQJiMzNDssCiAgICAmIzM0O1BQUE9BVE0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcHBvYXRtX3NlbmQmIzM0OywKICAgICYjMzQ7cHBwb2F0bV9hc3NpZ25fdmNjJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyBwYWNrZXQgdHJhbnNtaXNzaW9uIGhhbmRsaW5nIGFuZCBidWZmZXIgbWFuYWdlbWVudCBpbiBwcHBvYXRtX3NlbmQgd2l0aGluIG5ldC9hdG0vcHBwb2F0bS5jLiBJdCByZXBsYWNlcyBza2JfcmVhbGxvY19oZWFkcm9vbSB3aXRoIHNrYl9jb3dfaGVhZCwgcmVzdHJ1Y3R1cmVzIHRoZSBvcmRlciBvZiBza2JfcHVsbCBhbmQgc2tiX3B1c2gsIHJlbW92ZXMgdGhlIHVuZG8gbG9naWMgb24gc2VuZCBmYWlsdXJlLCBhbmQgYWRkcyBpbnB1dCB2YWxpZGF0aW9uIHZpYSBwc2tiX21heV9wdWxsLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBwYXRocyB0aGF0IGNhbiBiZSBleGVyY2lzZWQgdmlhIFBQUCBvdmVyIEFUTSBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QVRNJiMzNDssCiAgICAmIzM0O1BQUCYjMzQ7LAogICAgJiMzNDtQUFBPQVRNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHBwb2F0bV9zZW5kJiMzNDssCiAgICAmIzM0O3BwcG9hdG1fYXNzaWduX3ZjYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgcGFja2V0IHRyYW5zbWlzc2lvbiBoYW5kbGluZyBhbmQgYnVmZmVyIG1hbmFnZW1lbnQgaW4gcHBwb2F0bV9zZW5kIHdpdGhpbiBuZXQvYXRtL3BwcG9hdG0uYy4gSXQgcmVwbGFjZXMgc2tiX3JlYWxsb2NfaGVhZHJvb20gd2l0aCBza2JfY293X2hlYWQsIHJlc3RydWN0dXJlcyB0aGUgb3JkZXIgb2Ygc2tiX3B1bGwgYW5kIHNrYl9wdXNoLCByZW1vdmVzIHRoZSB1bmRvIGxvZ2ljIG9uIHNlbmQgZmFpbHVyZSwgYW5kIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiB2aWEgcHNrYl9tYXlfcHVsbC4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgcGF0aHMgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBQUFAgb3ZlciBBVE0gYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYm91bmRzIGNoZWNraW5nIGFuZCBoZWFkcm9vbSBtYW5hZ2VtZW50IGluIHRoZSBQUFBvQVRNIHRyYW5zbWl0IHBhdGggKGBwcHBvYXRtX3NlbmRgKS4gU3BlY2lmaWNhbGx5OlxuMS4gSXQgYWRkcyBhIGBwc2tiX21heV9wdWxsKHNrYiwgMSlgIGNoZWNrIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBvbiBlbXB0eSBza2JzIChgc2tiLVx1MDAzZWRhdGFbMF1gKS5cbjIuIEl0IHJlcGxhY2VzIGBza2JfcmVhbGxvY19oZWFkcm9vbWAgd2l0aCBgc2tiX2Nvd19oZWFkYCB0byBlbnN1cmUgaGVhZHJvb20gaXMgc2FmZWx5IHdyaXRhYmxlIGFuZCBhdmFpbGFibGUuXG4zLiBJdCBkZWZlcnMgYHNrYl9wdWxsYCBwcm90b2NvbCBjb21wcmVzc2lvbiB1bnRpbCBpbW1lZGlhdGVseSBiZWZvcmUgdHJhbnNtaXNzaW9uLCByZW1vdmluZyB0aGUgcHJldmlvdXMgZnJhZ2lsZSB1bmRvIGxvZ2ljIHRoYXQgcGVyZm9ybWVkIGFuIG91dC1vZi1ib3VuZHMgY2hlY2sgKGBza2ItXHUwMDNlZGF0YVstMV0gPT0gJiMzOTtcXDAmIzM5O2ApLlxuNC4gSXQgY29waWVzIHRoZSBjb25zdGFudCBMTEMgaGVhZGVyIChgcHBwbGxjYCkgaW50byB0aGUgcHVzaGVkIHNrYiBoZWFkcm9vbSBiZWZvcmUgdHJhbnNtaXNzaW9uLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBub3IgZG8gdGhleSBwYXNzIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLiBUaGUgaXNzdWVzIGFkZHJlc3NlZCBhbmQgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHBhY2tldCBidWZmZXIgbWFuaXB1bGF0aW9uIGluIHRoaXMgcGF0aCAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYnVmZmVyIG92ZXItcmVhZHMsIG9yIHNrYiBsaWZldGltZS9yZWZjb3VudGluZyBlcnJvcnMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzMwYmZhNTMxZGE3NzdkYjI5MzJhNjc5NGM2OWM5ZjI3MjdiMDg5ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDEzIDAwOjQ0OjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcHBvYXRtLmMgYi9uZXQvYXRtL3BwcG9hdG0uYwppbmRleCA2ZGE1MmQxMmRmNjhlLi41MjE0Nzg2ZTYxZDExIDEwMDY0NAotLS0gYS9uZXQvYXRtL3BwcG9hdG0uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYXRtL3BwcG9hdG0uYwpAQCAtMjkyLDEwICYjNDM7MjkyLDEzIEBAIHN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlzdHJ1Y3QgYXRtX3ZjYyAqdmNjOwogCWludCByZXQ7CiAKJiM0MzsJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMSkpIHsKJiM0MzsJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJcmV0dXJuIERST1BfUEFDS0VUOwomIzQzOwl9CiYjNDM7CiAJQVRNX1NLQihza2IpLSZndDt2Y2MgPSBwdmNjLSZndDthdG12Y2M7CiAJcHJfZGVidWcoJiMzNDsoc2tiPTB4JXAsIHZjYz0weCVwKVxuJiMzNDssIHNrYiwgcHZjYy0mZ3Q7YXRtdmNjKTsKLQlpZiAoc2tiLSZndDtkYXRhWzBdID09ICYjMzk7XDAmIzM5OyAmYW1wOyZhbXA7IChwdmNjLSZndDtmbGFncyAmYW1wOyBTQ19DT01QX1BST1QpKQotCQkodm9pZCkgc2tiX3B1bGwoc2tiLCAxKTsKIAogCXZjYyA9IEFUTV9TS0Ioc2tiKS0mZ3Q7dmNjOwogCWJoX2xvY2tfc29jayhza19hdG0odmNjKSk7CkBAIC0zMTcsMjMgJiM0MzszMjAsMTMgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiAJc3dpdGNoIChwdmNjLSZndDtlbmNhcHMpIHsJCS8qIExMQyBlbmNhcHN1bGF0aW9uIG5lZWRlZCAqLwogCWNhc2UgZV9sbGM6Ci0JCWlmIChza2JfaGVhZHJvb20oc2tiKSAmbHQ7IExMQ19MRU4pIHsKLQkJCXN0cnVjdCBza19idWZmICpuOwotCQkJbiA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHNrYiwgTExDX0xFTik7Ci0JCQlpZiAobiAhPSBOVUxMICZhbXA7JmFtcDsKLQkJCSAgICAhcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBuLSZndDt0cnVlc2l6ZSkpIHsKLQkJCQlrZnJlZV9za2Iobik7Ci0JCQkJZ290byBub3NwYWNlOwotCQkJfQotCQkJY29uc3VtZV9za2Ioc2tiKTsKLQkJCXNrYiA9IG47Ci0JCQlpZiAoc2tiID09IE5VTEwpIHsKLQkJCQliaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7Ci0JCQkJcmV0dXJuIERST1BfUEFDS0VUOwotCQkJfQotCQl9IGVsc2UgaWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi0mZ3Q7dHJ1ZXNpemUpKQomIzQzOwkJaWYgKHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pKSB7CiYjNDM7CQkJYmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpOwomIzQzOwkJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJCXJldHVybiBEUk9QX1BBQ0tFVDsKJiM0MzsJCX0KJiM0MzsJCWlmICghcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBza2ItJmd0O3RydWVzaXplKSkKIAkJCWdvdG8gbm9zcGFjZTsKLQkJbWVtY3B5KHNrYl9wdXNoKHNrYiwgTExDX0xFTiksIHBwcGxsYywgTExDX0xFTik7CiAJCWJyZWFrOwogCWNhc2UgZV92YzoKIAkJaWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi0mZ3Q7dHJ1ZXNpemUpKQpAQCAtMzQ2LDYgJiM0MzszMzksMTIgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQlyZXR1cm4gMTsKIAl9CiAKJiM0MzsJaWYgKHNrYi0mZ3Q7ZGF0YVswXSA9PSAmIzM5O1wwJiMzOTsgJmFtcDsmYW1wOyAocHZjYy0mZ3Q7ZmxhZ3MgJmFtcDsgU0NfQ09NUF9QUk9UKSkKJiM0MzsJCXNrYl9wdWxsKHNrYiwgMSk7CiYjNDM7CiYjNDM7CWlmIChwdmNjLSZndDtlbmNhcHMgPT0gZV9sbGMpCiYjNDM7CQltZW1jcHkoc2tiX3B1c2goc2tiLCBMTENfTEVOKSwgcHBwbGxjLCBMTENfTEVOKTsKJiM0MzsKIAlhdG1fYWNjb3VudF90eCh2Y2MsIHNrYik7CiAJcHJfZGVidWcoJiMzNDthdG1fc2tiKCVwKS0mZ3Q7dmNjKCVwKS0mZ3Q7ZGV2KCVwKVxuJiMzNDssCiAJCSBza2IsIEFUTV9TS0Ioc2tiKS0mZ3Q7dmNjLCBBVE1fU0tCKHNrYiktJmd0O3ZjYy0mZ3Q7ZGV2KTsKQEAgLTM1NSwxMyAmIzQzOzM1NCw2IEBAIHN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlyZXR1cm4gcmV0Owogbm9zcGFjZToKIAliaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7Ci0JLyoKLQkgKiBXZSBkb24mIzM5O3QgaGF2ZSBzcGFjZSB0byBzZW5kIHRoaXMgU0tCIG5vdywgYnV0IHdlIG1pZ2h0IGhhdmUKLQkgKiBhbHJlYWR5IGFwcGxpZWQgU0NfQ09NUF9QUk9UIGNvbXByZXNzaW9uLCBzbyBtYXkgbmVlZCB0byB1bmRvCi0JICovCi0JaWYgKChwdmNjLSZndDtmbGFncyAmYW1wOyBTQ19DT01QX1BST1QpICZhbXA7JmFtcDsgc2tiX2hlYWRyb29tKHNrYikgJmd0OyAwICZhbXA7JmFtcDsKLQkgICAgc2tiLSZndDtkYXRhWy0xXSA9PSAmIzM5O1wwJiMzOTspCi0JCSh2b2lkKSBza2JfcHVzaChza2IsIDEpOwogCXJldHVybiAwOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDIwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgdGhlIE5lZWQgZm9yIGEgRGVkaWNhdGVkIEtNU0FOIFNlc3Npb24qKgoKT2theSwgc28gdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbiBgbmV0L2F0bS9wcHBvYXRtLmNgIHdhcnJhbnRzIGl0cyBvd24gS01TQU4gZnV6emluZyBzZXNzaW9uLCBiZXlvbmQgdGhlIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgd2UgYWxyZWFkeSBydW4uIFJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiBgTmVlZHNLTVNBTmAgaXMgYHRydWVgIG9yIGBmYWxzZWAgYmFzZWQgb24gYSBzZXQgb2Ygc3BlY2lmaWMgY3JpdGVyaWEuIEkmIzM5O20gdGFyZ2V0aW5nIHRoZSBhbWQ2NCBhcmNoaXRlY3R1cmUsIHNvIEkmIzM5O2xsIGtlZXAgdGhhdCBpbiBtaW5kLgoKSGVyZSYjMzk7cyB0aGUgY2hlY2tsaXN0IEkgbmVlZCB0byBmb2xsb3c6CgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgdGhlc2UgYXJlYXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmVjb21lIGEgcHJvYmxlbToKCjEuICAqKktlcm5lbC10by11c2Vyc3BhY2UgY29tbXVuaWNhdGlvbjoqKiBBcmUgdGhlcmUgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlIHRocm91Z2ggYW55IG9mIHRoZSB1c3VhbCBzdXNwZWN0cyDigJMgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmssIGlvY3RsLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnM/IENyaXRpY2FsbHksIGFyZSB0aGVzZSBzdHJ1Y3R1cmVzICpmdWxseSogaW5pdGlhbGl6ZWQgb3IgemVyb2VkPyBTdHJ1Y3R1cmUgcGFkZGluZyBpcyBhIGtleSBhcmVhIG9mIGNvbmNlcm4uCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YToqKiBEb2VzIHRoZSBwYXRjaCBpbnRyb2R1Y2UgYW55IGJyYW5jaGluZyBvciBjb25kaXRpb25hbCBzdGF0ZW1lbnRzIHRoYXQgcmVseSBvbiB0aGUgKnZhbHVlKiBvZiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzPyBUaGlzIGlzIGEgY2xhc3NpYyBzb3VyY2Ugb2YgS01TQU4gYnVncy4KMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbjoqKiBBcmUgbmV3LCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQ/IEFyZSBhbGwgZmllbGRzIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIGxhdGVyIGluIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBjb2RlIHBhdGhzPwo0LiAgKipCb3VuZHMgY2hlY2tzIGFuZCBidWZmZXIgaGFuZGxpbmc6KiogRG9lcyB0aGUgcGF0Y2ggbW9kaWZ5IGFueSBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0ICpjb3VsZCogYWxsb3cgc3Vycm91bmRpbmcgY29kZSB0byBpbmFkdmVydGVudGx5IGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzIHdpdGhpbiBleGlzdGluZyBidWZmZXJzPwoKSWYgdGhlIGFuc3dlciBpcyAqbm8qIHRvIGFsbCBvZiB0aGUgYWJvdmUsIHRoZW4gYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuIFRoYXQgaXMsIGlmIHRoZSBwYXRjaCBwcmltYXJpbHkgaW50cm9kdWNlcyByaXNrcyBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKG91dC1vZi1ib3VuZHMsIG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmcywgdXNlLWFmdGVyLWZyZWUsIGV0Yy4pLiBUaGlzIGlzIGFsc28gdGhlIGNhc2UgaWYgYW55IHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQgKGUuZy4sIHVzaW5nIGA9IHswfWAsIGBtZW1zZXRgLCBvciBga3phbGxvY2ApIGJlZm9yZSBhbnkgcmVhZGluZyBvciBjb3B5aW5nIG9jY3Vycywgd2l0aCBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpTbywgdGhlIGdhbWUgcGxhbiBpczogSSBuZWVkIHRvIGNhcmVmdWxseSBpbnNwZWN0IHRoZSBwYXRjaCBhbmQgdGhlIGBuZXQvYXRtL3BwcG9hdG0uY2AgZmlsZS4gSSYjMzk7bGwgdXNlIG15IHVzdWFsIHRvb2xzLCBsaWtlbHkgYHJlYWQtZmlsZWAgYW5kIGBncmVwcGVyYCwgdG8gcXVpY2tseSBpZGVudGlmeSByZWxldmFudCBzZWN0aW9ucy4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwgaGVyZS4gSSYjMzk7bGwgbWV0aWN1bG91c2x5IGdvIHRocm91Z2ggZWFjaCBvZiB0aGUgYXJlYXMgbGlzdGVkLCBsb29raW5nIGZvciBwb3RlbnRpYWwgS01TQU4gaXNzdWVzLiBJJiMzOTtsbCBoYXZlIHRvIHBheSBzcGVjaWFsIGF0dGVudGlvbiB0byBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQga2VybmVsLXVzZXJzcGFjZSBpbnRlcmFjdGlvbnMuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2F0bS9wcHBvYXRtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4NTpcdCAqIHN1cHBvcnQgdGhpcyB5ZXQuICBXZSBqdXN0IHJldHVybiAmIzM5O0RST1BfUEFDS0VUJiMzOTsgd2hpY2ggd2UgYWN0dWFsbHkgZGVmaW5lXG4gMjg2Olx0ICogYXMgc3VjY2VzcywganVzdCB0byBiZSBjbGVhciB3aGF0IHdlJiMzOTtyZSByZWFsbHkgZG9pbmcuXG4gMjg3Olx0ICovXG4gMjg4Olx0I2RlZmluZSBEUk9QX1BBQ0tFVCAxXG4gMjg5Olx0c3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDI5MDpcdHtcbiAyOTE6XHRcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGNoYW5fdG9fcHZjYyhjaGFuKTtcbiAyOTI6XHRcdHN0cnVjdCBhdG1fdmNjICp2Y2M7XG4gMjkzOlx0XHRpbnQgcmV0O1xuIDI5NDpcdFxuIDI5NTpcdFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMSkpIHtcbiAyOTY6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gMjk3Olx0XHRcdHJldHVybiBEUk9QX1BBQ0tFVDtcbiAyOTg6XHRcdH1cbiAyOTk6XHRcbiAzMDA6XHRcdEFUTV9TS0Ioc2tiKS1cdTAwM2V2Y2MgPSBwdmNjLVx1MDAzZWF0bXZjYztcbiAzMDE6XHRcdHByX2RlYnVnKFwmIzM0Oyhza2I9MHglcCwgdmNjPTB4JXApXFxuXCYjMzQ7LCBza2IsIHB2Y2MtXHUwMDNlYXRtdmNjKTtcbiAzMDI6XHRcbiAzMDM6XHRcdHZjYyA9IEFUTV9TS0Ioc2tiKS1cdTAwM2V2Y2M7XG4gMzA0Olx0XHRiaF9sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuIDMwNTpcdFx0aWYgKHNvY2tfb3duZWRfYnlfdXNlcihza19hdG0odmNjKSkpIHtcbiAzMDY6XHRcdFx0LypcbiAzMDc6XHRcdFx0ICogTmVlZHMgdG8gaGFwcGVuIChhbmQgYmUgZmx1c2hlZCwgaGVuY2UgdGVzdF9hbmRfKSBiZWZvcmUgd2UgdW5sb2NrXG4gMzA4Olx0XHRcdCAqIHRoZSBzb2NrZXQuIEl0IG5lZWRzIHRvIGJlIHNlZW4gYnkgdGhlIHRpbWUgb3VyIC1cdTAwM2VyZWxlYXNlX2NiIGdldHNcbiAzMDk6XHRcdFx0ICogY2FsbGVkLlxuIDMxMDpcdFx0XHQgKi9cbiAzMTE6XHRcdFx0dGVzdF9hbmRfc2V0X2JpdChCTE9DS0VELCBcdTAwMjZwdmNjLVx1MDAzZWJsb2NrZWQpO1xuIDMxMjpcdFx0XHRnb3RvIG5vc3BhY2U7XG4gMzEzOlx0XHR9XG4gMzE0Olx0XHRpZiAodGVzdF9iaXQoQVRNX1ZGX0NMT1NFLCBcdTAwMjZ2Y2MtXHUwMDNlZmxhZ3MpIHx8XG4gMzE1Olx0XHQgICAgIXRlc3RfYml0KEFUTV9WRl9SRUFEWSwgXHUwMDI2dmNjLVx1MDAzZWZsYWdzKSkge1xuIDMxNjpcdFx0XHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XG4gMzE3Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDMxODpcdFx0XHRyZXR1cm4gRFJPUF9QQUNLRVQ7XG4gMzE5Olx0XHR9XG4gMzIwOlx0XG4gMzIxOlx0XHRzd2l0Y2ggKHB2Y2MtXHUwMDNlZW5jYXBzKSB7XHRcdC8qIExMQyBlbmNhcHN1bGF0aW9uIG5lZWRlZCAqL1xuIDMyMjpcdFx0Y2FzZSBlX2xsYzpcbiAzMjM6XHRcdFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pKSB7XG4gMzI0Olx0XHRcdFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuIDMyNTpcdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDMyNjpcdFx0XHRcdHJldHVybiBEUk9QX1BBQ0tFVDtcbiAzMjc6XHRcdFx0fVxuIDMyODpcdFx0XHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbiAzMjk6XHRcdFx0XHRnb3RvIG5vc3BhY2U7XG4gMzMwOlx0XHRcdGJyZWFrO1xuIDMzMTpcdFx0Y2FzZSBlX3ZjOlxuIDMzMjpcdFx0XHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbiAzMzM6XHRcdFx0XHRnb3RvIG5vc3BhY2U7XG4gMzM0Olx0XHRcdGJyZWFrO1xuIDMzNTpcdFx0Y2FzZSBlX2F1dG9kZXRlY3Q6XG4gMzM2Olx0XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbiAzMzc6XHRcdFx0cHJfZGVidWcoXCYjMzQ7VHJ5aW5nIHRvIHNlbmQgd2l0aG91dCBzZXR0aW5nIGVuY2FwcyFcXG5cJiMzNDspO1xuIDMzODpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAzMzk6XHRcdFx0cmV0dXJuIDE7XG4gMzQwOlx0XHR9XG4gMzQxOlx0XG4gMzQyOlx0XHRpZiAoc2tiLVx1MDAzZWRhdGFbMF0gPT0gJiMzOTtcXDAmIzM5OyBcdTAwMjZcdTAwMjYgKHB2Y2MtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0NPTVBfUFJPVCkpXG4gMzQzOlx0XHRcdHNrYl9wdWxsKHNrYiwgMSk7XG4gMzQ0Olx0XG4gMzQ1Olx0XHRpZiAocHZjYy1cdTAwM2VlbmNhcHMgPT0gZV9sbGMpXG4gMzQ2Olx0XHRcdG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pO1xuIDM0NzpcdFxuIDM0ODpcdFx0YXRtX2FjY291bnRfdHgodmNjLCBza2IpO1xuIDM0OTpcdFx0cHJfZGVidWcoXCYjMzQ7YXRtX3NrYiglcCktXHUwMDNldmNjKCVwKS1cdTAwM2VkZXYoJXApXFxuXCYjMzQ7LFxuIDM1MDpcdFx0XHQgc2tiLCBBVE1fU0tCKHNrYiktXHUwMDNldmNjLCBBVE1fU0tCKHNrYiktXHUwMDNldmNjLVx1MDAzZWRldik7XG4gMzUxOlx0XHRyZXQgPSBBVE1fU0tCKHNrYiktXHUwMDNldmNjLVx1MDAzZXNlbmQoQVRNX1NLQihza2IpLVx1MDAzZXZjYywgc2tiKVxuIDM1MjpcdFx0ICAgID8gRFJPUF9QQUNLRVQgOiAxO1xuIDM1MzpcdFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuIDM1NDpcdFx0cmV0dXJuIHJldDtcbiAzNTU6XHRub3NwYWNlOlxuIDM1NjpcdFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuIDM1NzpcdFx0cmV0dXJuIDA7XG4gMzU4Olx0fVxuIDM1OTpcdFxuIDM2MDpcdC8qIFRoaXMgaGFuZGxlcyBpb2N0bHMgc2VudCB0byB0aGUgL2Rldi9wcHAgaW50ZXJmYWNlICovXG4gMzYxOlx0c3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXG4gMzYyOlx0XHR1bnNpZ25lZCBsb25nIGFyZylcbiAzNjM6XHR7XG4gMzY0Olx0XHRzd2l0Y2ggKGNtZCkge1xuIDM2NTpcdFx0Y2FzZSBQUFBJT0NHRkxBR1M6XG4gMzY2Olx0XHRcdHJldHVybiBwdXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopIGFyZylcbiAzNjc6XHRcdFx0ICAgID8gLUVGQVVMVCA6IDA7XG4gMzY4Olx0XHRjYXNlIFBQUElPQ1NGTEFHUzpcbiAzNjk6XHRcdFx0cmV0dXJuIGdldF91c2VyKGNoYW5fdG9fcHZjYyhjaGFuKS1cdTAwM2VmbGFncywgKGludCBfX3VzZXIgKikgYXJnKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTEyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTM4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUFBQb0FUTSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEZpcnN0LCBJJiMzOTttIGNoZWNraW5nIHRoZSBjb21taXQgaGlzdG9yeSwgbWF5YmUgdXNpbmcgYGdpdCBsb2cgLTFgIG9yIGdyZXBwZXIgdG8gZ2V0IGEgcXVpY2sgb3ZlcnZpZXcgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCB3aGF0IHByb2JsZW0gdGhpcyBwYXRjaCBpcyBmaXhpbmcuCgpSaWdodCwgaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGRlYWxpbmcgd2l0aCBzb21lIHBvdGVudGlhbCBpc3N1ZXMgaW4gdGhlIFBQUG9BVE0gY29kZS4gVGhlIGluaXRpYWwgY29kZSBsb29rcyBsaWtlIHRoaXM6CgpgYGBjCglBVE1fU0tCKHNrYiktJmd0O3ZjYyA9IHB2Y2MtJmd0O2F0bXZjYzsKCXByX2RlYnVnKCYjMzQ7KHNrYj0weCVwLCB2Y2M9MHglcClcbiYjMzQ7LCBza2IsIHB2Y2MtJmd0O2F0bXZjYyk7CglpZiAoc2tiLSZndDtkYXRhWzBdID09ICYjMzk7XDAmIzM5OyAmYW1wOyZhbXA7IChwdmNjLSZndDtmbGFncyAmYW1wOyBTQ19DT01QX1BST1QpKQoJCSh2b2lkKSBza2JfcHVsbChza2IsIDEpOwpgYGAKCkkgY2FuIGltbWVkaWF0ZWx5IHNlZSBhIHBvdGVudGlhbCBwcm9ibGVtOiBpZiBgc2tiLSZndDtsZW5gIGlzIDAsIHRoZW4gYHNrYi0mZ3Q7ZGF0YVswXWAgaXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgYnVnLiBJdCYjMzk7cyBhbHNvIHdvcnRoIG5vdGluZyB0aGUgdXNlIG9mIGBza2JfcmVhbGxvY19oZWFkcm9vbWAgdmVyc3VzIGBza2JfY293X2hlYWRgIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBza2IgaXMgY2xvbmVkL3NoYXJlZC4KClRoZSBjb2RlIHRoZW4gY2hlY2tzIGZvciBMTEMgZW5jYXBzdWxhdGlvbiBuZWVkZWQ6CgpgYGBjCglzd2l0Y2ggKHB2Y2MtJmd0O2VuY2FwcykgewkJLyogTExDIGVuY2Fwc3VsYXRpb24gbmVlZGVkICovCgljYXNlIGVfbGxjOgoJCWlmIChza2JfaGVhZHJvb20oc2tiKSAmbHQ7IExMQ19MRU4pIHsKCQkJc3RydWN0IHNrX2J1ZmYgKm47CgkJCW4gPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsIExMQ19MRU4pOwouLi4KYGBgCgpBbmQgaW4gdGhlIGBub3NwYWNlOmAgcGF0aDoKCmBgYGMKbm9zcGFjZToKCWJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTsKCS8qCgkgKiBXZSBkb24mIzM5O3QgaGF2ZSBzcGFjZSB0byBzZW5kIHRoaXMgU0tCIG5vdywgYnV0IHdlIG1pZ2h0IGhhdmUKCSAqIGFscmVhZHkgYXBwbGllZCBTQ19DT01QX1BST1QgY29tcHJlc3Npb24sIHNvIG1heSBuZWVkIHRvIHVuZG8KCSAqLwoJaWYgKChwdmNjLSZndDtmbGFncyAmYW1wOyBTQ19DT01QX1BST1QpICZhbXA7JmFtcDsgc2tiX2hlYWRyb29tKHNrYikgJmd0OyAwICZhbXA7JmFtcDsKCSAgICBza2ItJmd0O2RhdGFbLTFdID09ICYjMzk7XDAmIzM5OykKCQkodm9pZCkgc2tiX3B1c2goc2tiLCAxKTsKCXJldHVybiAwOwpgYGAKCkhlcmUmIzM5O3MgYW5vdGhlciBpc3N1ZS4gVGhlIGBub3NwYWNlYCBsb2dpYyB0cmllcyB0byB1bmRvIGEgcHJldmlvdXMgYHNrYl9wdWxsYCB3aXRoIGBza2JfcHVzaGAsIGJ1dCBpdCBjaGVja3MgYHNrYi0mZ3Q7ZGF0YVstMV0gPT0gJiMzOTtcMCYjMzk7YC4gIFRoYXQgY2FuIGxlYWQgdG8gYW5vdGhlciBvdXQtb2YtYm91bmRzIHJlYWQgb3IgZXZlbiBjb3JydXB0IGRhdGEuIFlpa2VzLgoKTm93LCBsZXQmIzM5O3MgZXhhbWluZSB0aGUgcGF0Y2gmIzM5O3MgY2hhbmdlczoKCjEuICBBIGNoZWNrIGlzIGFkZGVkOiBgaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMSkpIHsga2ZyZWVfc2tiKHNrYik7IHJldHVybiBEUk9QX1BBQ0tFVDsgfWAuIFRoaXMgaXMgZXhjZWxsZW50OyBpdCBlbnN1cmVzIHRoYXQgdGhlIGBza2JgIGhhcyBhdCBsZWFzdCBvbmUgYnl0ZSBhdmFpbGFibGUgYmVmb3JlIGFjY2Vzc2luZyBgc2tiLSZndDtkYXRhWzBdYC4KMi4gIGBza2JfY293X2hlYWQoc2tiLCBMTENfTEVOKWAgaXMgdXNlZCBmb3IgaGVhZHJvb20gZXhwYW5zaW9uLCB3aGljaCBpcyBtdWNoIGNsZWFuZXIgdGhhbiB0aGUgb2xkIG1ldGhvZC4KMy4gIFRoZSBgU0NfQ09NUF9QUk9UYCBjaGVjayBhbmQgYHNrYl9wdWxsYCBhcmUgbW92ZWQgKmRvd24qIGluIHRoZSBleGVjdXRpb24gcGF0aCwgYWZ0ZXIgdmFyaW91cyBvdGhlciBjaGVja3MgKGBzb2NrX293bmVkX2J5X3VzZXJgLCBgQVRNX1ZGX0NMT1NFL1JFQURZYCwgYHBwcG9hdG1fbWF5X3NlbmRgKS4gVGhpcyBpcyBhIGNydWNpYWwgaW1wcm92ZW1lbnQuIFRoZSBgc2tiX3B1bGxgIG9wZXJhdGlvbiBpcyBvbmx5IHBlcmZvcm1lZCByaWdodCBiZWZvcmUgdHJhbnNtaXNzaW9uLCBhZnRlciBoZWFkcm9vbSBoYXMgYmVlbiBlbnN1cmVkIGFuZCBhZnRlciBhbGwgdGhlIHBvdGVudGlhbCBgbm9zcGFjZWAgcGF0aHMgaGF2ZSBiZWVuIGNvbnNpZGVyZWQuIFRoaXMgc2ltcGxpZmllcyB0aGUgbG9naWMuCjQuICBUaGUgYG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pYCBpcyBhbHNvIG1vdmVkIGRvd24sIGFmdGVyIHRoZSBgc2tiX3B1bGxgLgo1LiAgVGhlIHByb2JsZW1hdGljIHVuZG8gbG9naWMgaW4gdGhlIGBub3NwYWNlOmAgcGF0aCBpcyByZW1vdmVkLCB3aGljaCBpcyBncmVhdC4gSXQgZWxpbWluYXRlcyB0aGUgb3V0LW9mLWJvdW5kcyByZWFkLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuCgoxLiAgRG9lcyBpdCBtb2RpZnkga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U/IE5vLCBgcHBwb2F0bV9zZW5kYCBpcyB0aGUgdHJhbnNtaXQgcGF0aCwgYW5kIHRoZSBgc2tiYCBpcyB0cmFuc21pdHRlZCBvdmVyIEFUTSwgd2l0aCBubyBjb3B5IHRvIHVzZXIgc3BhY2UuCjIuICBEb2VzIHRoZSBwYXRjaCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBObywgYHBza2JfbWF5X3B1bGwoc2tiLCAxKWAgYW5kIGBza2JfY293X2hlYWQoc2tiLCBMTENfTEVOKWAgYXJlIHNhZmUuIFRoZSByZWFkIG9mIGBza2ItJmd0O2RhdGFbMF1gIGlzIHNhZmUgYmVjYXVzZSBvZiB0aGUgYHBza2JfbWF5X3B1bGxgIGNoZWNrLgozLgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2F0bS9wcHBvYXRtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiAgIDI6XHQvKiBuZXQvYXRtL3BwcG9hdG0uYyAtIFJGQzIzNjQgUFBQIG92ZXIgQVRNL0FBTDUgKi9cbiAgIDM6XHRcbiAgIDQ6XHQvKiBDb3B5cmlnaHQgMTk5OS0yMDAwIGJ5IE1pdGNoZWxsIEJsYW5rIEpyICovXG4gICA1Olx0LyogQmFzZWQgb24gY2xpcC5jOyAxOTk1LTE5OTkgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBFUEZMIExSQy9JQ0EgKi9cbiAgIDY6XHQvKiBBbmQgb24gcHBwX2FzeW5jLmM7IENvcHlyaWdodCAxOTk5IFBhdWwgTWFja2VycmFzICovXG4gICA3Olx0LyogQW5kIGhlbHAgZnJvbSBKZW5zIEF4Ym9lICovXG4gICA4Olx0XG4gICA5Olx0LypcbiAgMTA6XHQgKlxuICAxMTpcdCAqIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHRoZSBlbmNhcHN1bGF0aW9uIGFuZCBmcmFtaW5nIGZvciBzZW5kaW5nXG4gIDEyOlx0ICogYW5kIHJlY2VpdmluZyBQUFAgZnJhbWVzIGluIEFUTSBBQUw1IFBEVXMuXG4gIDEzOlx0ICovXG4gIDE0Olx0XG4gIDE1Olx0LypcbiAgMTY6XHQgKiBPbmUgc2hvcnRjb21pbmcgb2YgdGhpcyBkcml2ZXIgaXMgdGhhdCBpdCBkb2VzIG5vdCBjb21wbHkgd2l0aFxuICAxNzpcdCAqIHNlY3Rpb24gOCBvZiBSRkMyMzY0IC0gd2UgYXJlIHN1cHBvc2VkIHRvIGRldGVjdCBhIGNoYW5nZVxuICAxODpcdCAqIGluIGVuY2Fwc3VsYXRpb24gYW5kIGltbWVkaWF0ZWx5IGFib3J0IHRoZSBjb25uZWN0aW9uIChpbiBvcmRlclxuICAxOTpcdCAqIHRvIGF2b2lkIGEgYmxhY2staG9sZSBiZWluZyBjcmVhdGVkIGlmIG91ciBwZWVyIGxvc2VzIHN0YXRlXG4gIDIwOlx0ICogYW5kIGNoYW5nZXMgZW5jYXBzdWxhdGlvbiB1bmlsYXRlcmFsbHkuICBIb3dldmVyLCBzaW5jZSB0aGVcbiAgMjE6XHQgKiBwcHBfZ2VuZXJpYyBsYXllciBhY3R1YWxseSBkb2VzIHRoZSBkZWNhcHN1bGF0aW9uLCB3ZSBuZWVkXG4gIDIyOlx0ICogYSB3YXkgb2Ygbm90aWZ5aW5nIGl0IHdoZW4gd2UgX3RoaW5rXyB0aGVyZSBtaWdodCBiZSBhIHByb2JsZW0pXG4gIDIzOlx0ICogVGhlcmUmIzM5O3MgdHdvIGNhc2VzOlxuICAyNDpcdCAqICAgMS5cdExMQy1lbmNhcHN1bGF0aW9uIHdhcyBtaXNzaW5nIHdoZW4gaXQgd2FzIGVuYWJsZWQuICBJblxuICAyNTpcdCAqXHR0aGlzIGNhc2UsIHdlIHNob3VsZCB0ZWxsIHRoZSB1cHBlciBsYXllciBcJiMzNDt0ZWFyIGRvd25cbiAgMjY6XHQgKlx0dGhpcyBzZXNzaW9uIGlmIHRoaXMgc2tiIGxvb2tzIG9rIHRvIHlvdVwmIzM0O1xuICAyNzpcdCAqICAgMi5cdExMQy1lbmNhcHN1bGF0aW9uIHdhcyBwcmVzZW50IHdoZW4gaXQgd2FzIGRpc2FibGVkLiAgVGhlblxuICAyODpcdCAqXHR3ZSBuZWVkIHRvIHRlbGwgdGhlIHVwcGVyIGxheWVyIFwmIzM0O3RoaXMgcGFja2V0IG1heSBiZVxuICAyOTpcdCAqXHRvaywgYnV0IGlmIGl0cyBpbiBlcnJvciB0ZWFyIGRvd24gdGhlIHNlc3Npb25cJiMzNDtcbiAgMzA6XHQgKiBUaGVzZSBob29rcyBhcmUgbm90IHlldCBhdmFpbGFibGUgaW4gcHBwX2dlbmVyaWNcbiAgMzE6XHQgKi9cbiAgMzI6XHRcbiAgMzM6XHQjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFwmIzM0OzolczogXCYjMzQ7IGZtdCwgX19mdW5jX19cbiAgMzQ6XHRcbiAgMzU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICAzNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICAzNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4gIDM4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAgMzk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAgNDA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9hdG0uaFx1MDAzZVxuICA0MTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0bWRldi5oXHUwMDNlXG4gIDQyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvY2FwYWJpbGl0eS5oXHUwMDNlXG4gIDQzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcHBwX2RlZnMuaFx1MDAzZVxuICA0NDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BwcC1pb2N0bC5oXHUwMDNlXG4gIDQ1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcHBwX2NoYW5uZWwuaFx1MDAzZVxuICA0NjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0bXBwcC5oXHUwMDNlXG4gIDQ3Olx0XG4gIDQ4Olx0I2luY2x1ZGUgXCYjMzQ7Y29tbW9uLmhcJiMzNDtcbiAgNDk6XHRcbiAgNTA6XHRlbnVtIHBwcG9hdG1fZW5jYXBzIHtcbiAgNTE6XHRcdGVfYXV0b2RldGVjdCA9IFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1QsXG4gIDUyOlx0XHRlX3ZjID0gUFBQT0FUTV9FTkNBUFNfVkMsXG4gIDUzOlx0XHRlX2xsYyA9IFBQUE9BVE1fRU5DQVBTX0xMQyxcbiAgNTQ6XHR9O1xuICA1NTpcdFxuICA1NjpcdHN0cnVjdCBwcHBvYXRtX3ZjYyB7XG4gIDU3Olx0XHRzdHJ1Y3QgYXRtX3ZjY1x0KmF0bXZjYztcdC8qIFZDQyBkZXNjcmlwdG9yICovXG4gIDU4Olx0XHR2b2lkICgqb2xkX3B1c2gpKHN0cnVjdCBhdG1fdmNjICosIHN0cnVjdCBza19idWZmICopO1xuICA1OTpcdFx0dm9pZCAoKm9sZF9wb3ApKHN0cnVjdCBhdG1fdmNjICosIHN0cnVjdCBza19idWZmICopO1xuICA2MDpcdFx0dm9pZCAoKm9sZF9yZWxlYXNlX2NiKShzdHJ1Y3QgYXRtX3ZjYyAqKTtcbiAgNjE6XHRcdHN0cnVjdCBtb2R1bGUgKm9sZF9vd25lcjtcbiAgNjI6XHRcdFx0XHRcdFx0Lyoga2VlcCBvbGQgcHVzaC9wb3AgZm9yIGRldGFjaGluZyAqL1xuICA2MzpcdFx0ZW51bSBwcHBvYXRtX2VuY2FwcyBlbmNhcHM7XG4gIDY0Olx0XHRhdG9taWNfdCBpbmZsaWdodDtcbiAgNjU6XHRcdHVuc2lnbmVkIGxvbmcgYmxvY2tlZDtcbiAgNjY6XHRcdGludCBmbGFncztcdFx0XHQvKiBTQ19DT01QX1BST1QgLSBjb21wcmVzcyBwcm90b2NvbCAqL1xuICA2NzpcdFx0c3RydWN0IHBwcF9jaGFubmVsIGNoYW47XHQvKiBpbnRlcmZhY2UgdG8gZ2VuZXJpYyBwcHAgbGF5ZXIgKi9cbiAgNjg6XHRcdHN0cnVjdCB0YXNrbGV0X3N0cnVjdCB3YWtldXBfdGFza2xldDtcbiAgNjk6XHR9O1xuICA3MDpcdFxuICA3MTpcdC8qXG4gIDcyOlx0ICogV2Ugd2FudCB0byBhbGxvdyB0d28gcGFja2V0cyBpbiB0aGUgcXVldWUuIFRoZSBvbmUgdGhhdCYjMzk7cyBjdXJyZW50bHkgaW5cbiAgNzM6XHQgKiBmbGlnaHQsIGFuZCAqb25lKiBxdWV1ZWQgdXAgcmVhZHkgZm9yIHRoZSBBVE0gZGV2aWNlIHRvIHNlbmQgaW1tZWRpYXRlbHlcbiAgNzQ6XHQgKiBmcm9tIGl0cyBUWCBkb25lIElSUS4gV2Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSBhdG9taWNfaW5jX25vdF96ZXJvKCksIHNvXG4gIDc1Olx0ICogaW5mbGlnaHQgPT0gLTIgcmVwcmVzZW50cyBhbiBlbXB0eSBxdWV1ZSwgLTEgb25lIHBhY2tldCwgYW5kIHplcm8gbWVhbnNcbiAgNzY6XHQgKiB0aGVyZSBhcmUgdHdvIHBhY2tldHMgaW4gdGhlIHF1ZXVlLlxuICA3NzpcdCAqL1xuICA3ODpcdCNkZWZpbmUgTk9ORV9JTkZMSUdIVCAtMlxuICA3OTpcdFxuICA4MDpcdCNkZWZpbmUgQkxPQ0tFRCAwXG4gIDgxOlx0XG4gIDgyOlx0LypcbiAgODM6XHQgKiBIZWFkZXIgdXNlZCBmb3IgTExDIEVuY2Fwc3VsYXRlZCBQUFAgKDQgYnl0ZXMpIGZvbGxvd2VkIGJ5IHRoZSBMQ1AgcHJvdG9jb2xcbiAgODQ6XHQgKiBJRCAoMHhDMDIxKSB1c2VkIGluIGF1dG9kZXRlY3Rpb25cbiAgODU6XHQgKi9cbiAgODY6XHRzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwcHBsbGNbNl0gPSB7IDB4RkUsIDB4RkUsIDB4MDMsIDB4Q0YsIDB4QzAsIDB4MjEgfTtcbiAgODc6XHQjZGVmaW5lIExMQ19MRU5cdFx0KDQpXG4gIDg4Olx0XG4gIDg5Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmF0bXZjY190b19wdmNjKGNvbnN0IHN0cnVjdCBhdG1fdmNjICphdG12Y2MpXG4gIDkwOlx0e1xuICA5MTpcdFx0cmV0dXJuIChzdHJ1Y3QgcHBwb2F0bV92Y2MgKikgKGF0bXZjYy1cdTAwM2V1c2VyX2JhY2spO1xuICA5MjpcdH1cbiAgOTM6XHRcbiAgOTQ6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqY2hhbl90b19wdmNjKGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcbiAgOTU6XHR7XG4gIDk2Olx0XHRyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoY2hhbi1cdTAwM2Vwcml2YXRlKTtcbiAgOTc6XHR9XG4gIDk4Olx0XG4gIDk5Olx0LypcbiAxMDA6XHQgKiBXZSBjYW4mIzM5O3QgZG8gdGhpcyBkaXJlY3RseSBmcm9tIG91ciBfcG9wIGhhbmRsZXIsIHNpbmNlIHRoZSBwcHAgY29kZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTc5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIERlZXBlciBpbnRvIGBwcHBvYXRtLmNgKioKCk9rYXksIHNvIEkmIzM5O3ZlIGFscmVhZHkgY292ZXJlZCBhIGdvb2QgY2h1bmsgb2YgYHBwcG9hdG0uY2AsIHNwZWNpZmljYWxseSBsaW5lcyAyODAtMzcwIGFyb3VuZCB0aGF0IGBwcHBvYXRtX3NlbmRgIGZ1bmN0aW9uLiBOb3csIHRvIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGUgYnJvYWRlciBwaWN0dXJlLCBhbmQgaG93IHRoaW5ncyB0aWUgdG9nZXRoZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBwcHBvYXRtX2RldnBwcF9pb2N0bGAgYW5kIHNvbWUgb2YgdGhlIHN1cHBvcnRpbmcgZnVuY3Rpb25zLiBJJiMzOTtsbCBmb2N1cyBvbiBsaW5lcyAzNzAtNDQwLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgZGV2aWNlIGNvbnRyb2wgb3BlcmF0aW9ucyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgUFBQLW92ZXItQVRNIGRyaXZlci4gVGhpcyBzaG91bGQgcHJvdmlkZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gYmV0dGVyIGFuYWx5emUgdGhlIGBwcHBvYXRtX3NlbmRgIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9hdG0vcHBwb2F0bS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNjU6XHRcdGNhc2UgUFBQSU9DR0ZMQUdTOlxuIDM2NjpcdFx0XHRyZXR1cm4gcHV0X3VzZXIoY2hhbl90b19wdmNjKGNoYW4pLVx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpXG4gMzY3Olx0XHRcdCAgICA/IC1FRkFVTFQgOiAwO1xuIDM2ODpcdFx0Y2FzZSBQUFBJT0NTRkxBR1M6XG4gMzY5Olx0XHRcdHJldHVybiBnZXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopIGFyZylcbiAzNzA6XHRcdFx0ICAgID8gLUVGQVVMVCA6IDA7XG4gMzcxOlx0XHR9XG4gMzcyOlx0XHRyZXR1cm4gLUVOT1RUWTtcbiAzNzM6XHR9XG4gMzc0Olx0XG4gMzc1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2F0bV9vcHMgPSB7XG4gMzc2Olx0XHQuc3RhcnRfeG1pdCA9IHBwcG9hdG1fc2VuZCxcbiAzNzc6XHRcdC5pb2N0bCA9IHBwcG9hdG1fZGV2cHBwX2lvY3RsLFxuIDM3ODpcdH07XG4gMzc5Olx0XG4gMzgwOlx0c3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcbiAzODE6XHR7XG4gMzgyOlx0XHRzdHJ1Y3QgYXRtX2JhY2tlbmRfcHBwIGJlO1xuIDM4MzpcdFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjO1xuIDM4NDpcdFx0aW50IGVycjtcbiAzODU6XHRcbiAzODY6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZiZSwgYXJnLCBzaXplb2YgYmUpKVxuIDM4NzpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAzODg6XHRcdGlmIChiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfQVVUT0RFVEVDVCBcdTAwMjZcdTAwMjZcbiAzODk6XHRcdCAgICBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfVkMgXHUwMDI2XHUwMDI2IGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19MTEMpXG4gMzkwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDM5MTpcdFx0cHZjYyA9IGt6YWxsb2Nfb2JqKCpwdmNjKTtcbiAzOTI6XHRcdGlmIChwdmNjID09IE5VTEwpXG4gMzkzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDM5NDpcdFx0cHZjYy1cdTAwM2VhdG12Y2MgPSBhdG12Y2M7XG4gMzk1Olx0XG4gMzk2Olx0XHQvKiBNYXhpbXVtIGlzIHplcm8sIHNvIHRoYXQgd2UgY2FuIHVzZSBhdG9taWNfaW5jX25vdF96ZXJvKCkgKi9cbiAzOTc6XHRcdGF0b21pY19zZXQoXHUwMDI2cHZjYy1cdTAwM2VpbmZsaWdodCwgTk9ORV9JTkZMSUdIVCk7XG4gMzk4Olx0XHRwdmNjLVx1MDAzZW9sZF9wdXNoID0gYXRtdmNjLVx1MDAzZXB1c2g7XG4gMzk5Olx0XHRwdmNjLVx1MDAzZW9sZF9wb3AgPSBhdG12Y2MtXHUwMDNlcG9wO1xuIDQwMDpcdFx0cHZjYy1cdTAwM2VvbGRfb3duZXIgPSBhdG12Y2MtXHUwMDNlb3duZXI7XG4gNDAxOlx0XHRwdmNjLVx1MDAzZW9sZF9yZWxlYXNlX2NiID0gYXRtdmNjLVx1MDAzZXJlbGVhc2VfY2I7XG4gNDAyOlx0XHRwdmNjLVx1MDAzZWVuY2FwcyA9IChlbnVtIHBwcG9hdG1fZW5jYXBzKSBiZS5lbmNhcHM7XG4gNDAzOlx0XHRwdmNjLVx1MDAzZWNoYW4ucHJpdmF0ZSA9IHB2Y2M7XG4gNDA0Olx0XHRwdmNjLVx1MDAzZWNoYW4ub3BzID0gXHUwMDI2cHBwb2F0bV9vcHM7XG4gNDA1Olx0XHRwdmNjLVx1MDAzZWNoYW4ubXR1ID0gYXRtdmNjLVx1MDAzZXFvcy50eHRwLm1heF9zZHUgLSBQUFBfSERSTEVOIC1cbiA0MDY6XHRcdCAgICAoYmUuZW5jYXBzID09IGVfdmMgPyAwIDogTExDX0xFTik7XG4gNDA3Olx0XHR0YXNrbGV0X3NldHVwKFx1MDAyNnB2Y2MtXHUwMDNld2FrZXVwX3Rhc2tsZXQsIHBwcG9hdG1fd2FrZXVwX3NlbmRlcik7XG4gNDA4Olx0XHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcdTAwMjZwdmNjLVx1MDAzZWNoYW4pO1xuIDQwOTpcdFx0aWYgKGVyciAhPSAwKSB7XG4gNDEwOlx0XHRcdGtmcmVlKHB2Y2MpO1xuIDQxMTpcdFx0XHRyZXR1cm4gZXJyO1xuIDQxMjpcdFx0fVxuIDQxMzpcdFx0YXRtdmNjLVx1MDAzZXVzZXJfYmFjayA9IHB2Y2M7XG4gNDE0Olx0XHRhdG12Y2MtXHUwMDNlcHVzaCA9IHBwcG9hdG1fcHVzaDtcbiA0MTU6XHRcdGF0bXZjYy1cdTAwM2Vwb3AgPSBwcHBvYXRtX3BvcDtcbiA0MTY6XHRcdGF0bXZjYy1cdTAwM2VyZWxlYXNlX2NiID0gcHBwb2F0bV9yZWxlYXNlX2NiO1xuIDQxNzpcdFx0X19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTtcbiA0MTg6XHRcdGF0bXZjYy1cdTAwM2Vvd25lciA9IFRISVNfTU9EVUxFO1xuIDQxOTpcdFxuIDQyMDpcdFx0LyogcmUtcHJvY2VzcyBldmVyeXRoaW5nIHJlY2VpdmVkIGJldHdlZW4gY29ubmVjdGlvbiBzZXR1cCBhbmRcbiA0MjE6XHRcdCAgIGJhY2tlbmQgc2V0dXAgKi9cbiA0MjI6XHRcdHZjY19wcm9jZXNzX3JlY3ZfcXVldWUoYXRtdmNjKTtcbiA0MjM6XHRcdHJldHVybiAwO1xuIDQyNDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4OTQKCQkJCQkJCW91dHB1dDogMjgxCgkJCQkJCQl0aG91Z2h0czogMTc1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBQUG9BVE0gUGF0Y2ggZm9yIFNlY3VyaXR5IEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHByaW1hcmlseSBhZGRyZXNzZXMgcG90ZW50aWFsIGJ1ZmZlciBvdmVycnVucyBhbmQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aXRoaW4gdGhlIGBwcHBvYXRtX3NlbmRgIGZ1bmN0aW9uLiBUaGUgb3JpZ2luYWwgaXNzdWUgbGlrZWx5IGludm9sdmVkIHNjZW5hcmlvcyB3aGVyZSB0aGUgY29kZSB3YXMgZWl0aGVyIGF0dGVtcHRpbmcgdG8gcmVhZCBiZXlvbmQgdGhlIGJvdW5kYXJpZXMgb2YgYW4gU0tCJiMzOTtzIGRhdGEgYnVmZmVyIG9yIHBvdGVudGlhbGx5IGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4KClNwZWNpZmljYWxseSwgSSBzZWUgYSBmZXcga2V5IGFyZWFzIHRoYXQgd2VyZSBsaWtlbHkgcHJvYmxlbWF0aWMsIGFuZCB0aGF0IHRoaXMgcGF0Y2ggYWltcyB0byByZXNvbHZlOgoKMS4gICoqT3V0LW9mLUJvdW5kcyBSZWFkcyBhbmQgQnVmZmVyIEhhbmRsaW5nOioqIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYHBza2JfbWF5X3B1bGwoc2tiLCAxKWAgaXMgY3J1Y2lhbC4gVGhpcyBjaGVjayAqYmVmb3JlKiBhY2Nlc3NpbmcgYHNrYi0mZ3Q7ZGF0YVswXWAgaXMgYSBkaXJlY3QgcmVzcG9uc2UgdG8gYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGlmIHRoZSBTS0IgaGFwcGVuZWQgdG8gYmUgZW1wdHksIG9yIG5vdCBsYXJnZSBlbm91Z2ggdG8gYWNjb21tb2RhdGUgdGhlIGFjY2Vzcy4gVGhlIGBrZnJlZV9za2Ioc2tiKWAgYW5kIGBEUk9QX1BBQ0tFVGAgY29tYm8gbmVhdGx5IGhhbmRsZXMgdGhpcyBlZGdlIGNhc2UuCgoyLiAgKipTS0IgSGVhZGVyIFJvb20gTWFuYWdlbWVudDoqKiBUaGUgb3JpZ2luYWwgY29kZSYjMzk7cyB1c2Ugb2YgYHNrYl9yZWFsbG9jX2hlYWRyb29tYCB0byBtYWtlIHNwYWNlIGZvciB0aGUgTExDIGhlYWRlciB3YXMgcHJvYmxlbWF0aWMgaW4gdGhpcyBjYXNlLiBUaGUgbmV3IGBza2JfY293X2hlYWRgIGlzIG11Y2ggY2xlYW5lci4gVGhpcyBsaWtlbHkgZml4ZXMgc29tZSBpc3N1ZSB3aXRoIGFsbG9jYXRpbmcgbW9yZSBzcGFjZSB0byB0aGUgc2tiLgoKMy4gICoqUHJvdG9jb2wgQ29tcHJlc3Npb24gVW5kbyAoU0NcX0NPTVBcX1BST1QpOioqIFRoZSBsb2dpYyByZWdhcmRpbmcgdGhlIGBTQ19DT01QX1BST1RgIGZsYWcgYW5kIHRoZSBwb3RlbnRpYWwgbmVlZCB0byAmIzM0O3VuZG8mIzM0OyBjb21wcmVzc2lvbiBpZiB0aGVyZSB3YXMgbm8gc3BhY2UgdG8gYWRkIHRoZSBMTEMgaGVhZGVyIGxvb2tzIGxpa2UgaXQgd2FzIGNhdXNpbmcgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZSBwYXRjaCBlbGltaW5hdGVzIHRoaXMgYWx0b2dldGhlciBieSByZW1vdmluZyB0aGUgYHNrYl9wdXNoYCBhbmQgc3Vic2VxdWVudCBjb2RlIGJsb2NrLCBtZWFuaW5nIHRoZSBjb2RlIG5vdyBoYW5kbGVzIExMQyBoZWFkZXIgaW5zZXJ0aW9uICphZnRlciogdGhlIGluaXRpYWwgY2hlY2tzLgoKNC4gICoqRGF0YSBWYWxpZGF0aW9uIGFuZCBGbG93IENvbnRyb2w6KiogVGhlIGBwcHBvYXRtX21heV9zZW5kYCBjYWxscyBhcmUgY3JpdGljYWwgaGVyZS4gVGhlIG1haW4gcG9pbnQgaXMgdG8gbWFrZSBzdXJlIGRhdGEgaXMgd2l0aGluIGJvdW5kcyBhbmQgZG9lc24mIzM5O3QgZ2V0IG1lc3NlZCB1cC4KCk5vdywgY29uY2VybmluZyBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYCBoZXJlLiBNeSByZWFzb25pbmcgaXMgc29saWQ6CgoqICAgKipLQVNBTiBDb3ZlcnMgdGhlIFJpc2tzOioqIFRoZSBwcmltYXJ5IHJpc2tzIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGFyZSBleGFjdGx5IHRoZSBraW5kcyBvZiBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhbmQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB0aGF0IEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTQU5pdGl6ZXIpIGlzIGRlc2lnbmVkIHRvIGNhdGNoLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCByZWFkaW5nL3dyaXRpbmcgbWVtb3J5IGJleW9uZCB0aGUgYnVmZmVyIGJvdW5kYXJpZXMgb3IgZGVyZWZlcmVuY2luZyBhIGRhbmdsaW5nIHBvaW50ZXIuIEtBU0FOIGlzIGFscmVhZHkgZW5hYmxlZCBpbiB0aGUga2VybmVsIGJ1aWxkcywgc28gaXQgd2lsbCBkZXRlY3QgdGhlIG1vc3QgaW1wb3J0YW50IGlzc3Vlcy4KKiAgICoqTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgRXhwb3N1cmU6KiogSSYjMzk7dmUgY2FyZWZ1bGx5IHJldmlld2VkIHRoZSBwYXRjaCwgYW5kIEkgc2VlIG5vIGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGlzIGlzIHRoZSBjcnVjaWFsIHBvaW50IGZvciBLTVNBTi4gVGhlIGNvZGUgbm93ICpleHBsaWNpdGx5KiBjaGVja3MgZm9yIGEgbWluaW11bSBTS0Igc2l6ZSBiZWZvcmUgYW55IGFjY2VzcyB0byBgc2tiLSZndDtkYXRhYCwgdGhlIGBwcHBsbGNgIGlzIGEgc3RhdGljIGJ1ZmZlciBhbmQgYHNrYl9jb3dfaGVhZGAgaXMgb25seSBhbGxvY2F0aW5nIHdpdGggZXhpc3RpbmcgZGF0YS4gSSYjMzk7dmUgYWxzbyBjaGVja2VkIHRoZXJlJiMzOTtzIG5vIHN0cnVjdCBwYWRkaW5nIHRoYXQgaXMgYWNjZXNzZWQgaW4gYW55IHdheS4KKiAgICoqTm8gSW5mbyBMZWFrczoqKiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB3YXlzIHRvIGxlYWsga2VybmVsIG1lbW9yeSBpbnRvIHRoZSB1c2Vyc3BhY2UsIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSB0aGUga2VybmVsLiBUaGlzIGlzIGltcG9ydGFudCB0byBub3RlIGFzIGl0JiMzOTtzIHRoZSBzcGVjaWZpYyBhcmVhIEtNU0FOIHdvdWxkIGJlIGRlc2lnbmVkIGZvci4KClRoZXJlZm9yZSwgc2luY2UgdGhlIHJpc2tzIGhlcmUgYXJlIGFscmVhZHkgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycyAoS0FTQU4pIGFuZCB0aGUgcGF0Y2ggZG9lcyBub3QgY3JlYXRlIGFueSBuZXcgd2F5cyB0byBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGNhdXNlIGluZm9ybWF0aW9uIGxlYWtzLCB3ZSBkbyAqbm90KiBuZWVkIEtNU0FOIGhlcmUuIFRoaXMgYW5hbHlzaXMgaXMgdGhvcm91Z2gsIGFuZCBJJiMzOTttIGNvbmZpZGVudCBpbiBteSByZWNvbW1lbmRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGJvdW5kcyBjaGVja2luZyBhbmQgaGVhZHJvb20gbWFuYWdlbWVudCBpbiB0aGUgUFBQb0FUTSB0cmFuc21pdCBwYXRoIChgcHBwb2F0bV9zZW5kYCkuIFNwZWNpZmljYWxseTpcbjEuIEl0IGFkZHMgYSBgcHNrYl9tYXlfcHVsbChza2IsIDEpYCBjaGVjayB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgb24gZW1wdHkgc2ticyAoYHNrYi1cdTAwM2VkYXRhWzBdYCkuXG4yLiBJdCByZXBsYWNlcyBgc2tiX3JlYWxsb2NfaGVhZHJvb21gIHdpdGggYHNrYl9jb3dfaGVhZGAgdG8gZW5zdXJlIGhlYWRyb29tIGlzIHNhZmVseSB3cml0YWJsZSBhbmQgYXZhaWxhYmxlLlxuMy4gSXQgZGVmZXJzIGBza2JfcHVsbGAgcHJvdG9jb2wgY29tcHJlc3Npb24gdW50aWwgaW1tZWRpYXRlbHkgYmVmb3JlIHRyYW5zbWlzc2lvbiwgcmVtb3ZpbmcgdGhlIHByZXZpb3VzIGZyYWdpbGUgdW5kbyBsb2dpYyB0aGF0IHBlcmZvcm1lZCBhbiBvdXQtb2YtYm91bmRzIGNoZWNrIChgc2tiLVx1MDAzZWRhdGFbLTFdID09ICYjMzk7XFwwJiMzOTtgKS5cbjQuIEl0IGNvcGllcyB0aGUgY29uc3RhbnQgTExDIGhlYWRlciAoYHBwcGxsY2ApIGludG8gdGhlIHB1c2hlZCBza2IgaGVhZHJvb20gYmVmb3JlIHRyYW5zbWlzc2lvbi5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvIHRoZXkgcGFzcyB1bmluaXRpYWxpemVkIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4gVGhlIGlzc3VlcyBhZGRyZXNzZWQgYW5kIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBwYWNrZXQgYnVmZmVyIG1hbmlwdWxhdGlvbiBpbiB0aGlzIHBhdGggKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGJ1ZmZlciBvdmVyLXJlYWRzLCBvciBza2IgbGlmZXRpbWUvcmVmY291bnRpbmcgZXJyb3JzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBib3VuZHMgY2hlY2tpbmcgYW5kIGhlYWRyb29tIG1hbmFnZW1lbnQgaW4gdGhlIFBQUG9BVE0gdHJhbnNtaXQgcGF0aCAoYHBwcG9hdG1fc2VuZGApLiBTcGVjaWZpY2FsbHk6XG4xLiBJdCBhZGRzIGEgYHBza2JfbWF5X3B1bGwoc2tiLCAxKWAgY2hlY2sgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIG9uIGVtcHR5IHNrYnMgKGBza2ItXHUwMDNlZGF0YVswXWApLlxuMi4gSXQgcmVwbGFjZXMgYHNrYl9yZWFsbG9jX2hlYWRyb29tYCB3aXRoIGBza2JfY293X2hlYWRgIHRvIGVuc3VyZSBoZWFkcm9vbSBpcyBzYWZlbHkgd3JpdGFibGUgYW5kIGF2YWlsYWJsZS5cbjMuIEl0IGRlZmVycyBgc2tiX3B1bGxgIHByb3RvY29sIGNvbXByZXNzaW9uIHVudGlsIGltbWVkaWF0ZWx5IGJlZm9yZSB0cmFuc21pc3Npb24sIHJlbW92aW5nIHRoZSBwcmV2aW91cyBmcmFnaWxlIHVuZG8gbG9naWMgdGhhdCBwZXJmb3JtZWQgYW4gb3V0LW9mLWJvdW5kcyBjaGVjayAoYHNrYi1cdTAwM2VkYXRhWy0xXSA9PSAmIzM5O1xcMCYjMzk7YCkuXG40LiBJdCBjb3BpZXMgdGhlIGNvbnN0YW50IExMQyBoZWFkZXIgKGBwcHBsbGNgKSBpbnRvIHRoZSBwdXNoZWQgc2tiIGhlYWRyb29tIGJlZm9yZSB0cmFuc21pc3Npb24uXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG5vciBkbyB0aGV5IHBhc3MgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuIFRoZSBpc3N1ZXMgYWRkcmVzc2VkIGFuZCByaXNrcyBhc3NvY2lhdGVkIHdpdGggcGFja2V0IGJ1ZmZlciBtYW5pcHVsYXRpb24gaW4gdGhpcyBwYXRoIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBidWZmZXIgb3Zlci1yZWFkcywgb3Igc2tiIGxpZmV0aW1lL3JlZmNvdW50aW5nIGVycm9ycykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ0OjI3LjU5ODc1Mzg3OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDUwNjczNDEwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBVE1cIixcbiAgICBcIlBQUFwiLFxuICAgIFwiUFBQT0FUTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBwcG9hdG1fc2VuZFwiLFxuICAgIFwicHBwb2F0bV9hc3NpZ25fdmNjXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYm91bmRzIGNoZWNraW5nIGFuZCBoZWFkcm9vbSBtYW5hZ2VtZW50IGluIHRoZSBQUFBvQVRNIHRyYW5zbWl0IHBhdGggKGBwcHBvYXRtX3NlbmRgKS4gU3BlY2lmaWNhbGx5OlxcbjEuIEl0IGFkZHMgYSBgcHNrYl9tYXlfcHVsbChza2IsIDEpYCBjaGVjayB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgb24gZW1wdHkgc2ticyAoYHNrYi1cXHUwMDNlZGF0YVswXWApLlxcbjIuIEl0IHJlcGxhY2VzIGBza2JfcmVhbGxvY19oZWFkcm9vbWAgd2l0aCBgc2tiX2Nvd19oZWFkYCB0byBlbnN1cmUgaGVhZHJvb20gaXMgc2FmZWx5IHdyaXRhYmxlIGFuZCBhdmFpbGFibGUuXFxuMy4gSXQgZGVmZXJzIGBza2JfcHVsbGAgcHJvdG9jb2wgY29tcHJlc3Npb24gdW50aWwgaW1tZWRpYXRlbHkgYmVmb3JlIHRyYW5zbWlzc2lvbiwgcmVtb3ZpbmcgdGhlIHByZXZpb3VzIGZyYWdpbGUgdW5kbyBsb2dpYyB0aGF0IHBlcmZvcm1lZCBhbiBvdXQtb2YtYm91bmRzIGNoZWNrIChgc2tiLVxcdTAwM2VkYXRhWy0xXSA9PSAnXFxcXDAnYCkuXFxuNC4gSXQgY29waWVzIHRoZSBjb25zdGFudCBMTEMgaGVhZGVyIChgcHBwbGxjYCkgaW50byB0aGUgcHVzaGVkIHNrYiBoZWFkcm9vbSBiZWZvcmUgdHJhbnNtaXNzaW9uLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG5vciBkbyB0aGV5IHBhc3MgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuIFRoZSBpc3N1ZXMgYWRkcmVzc2VkIGFuZCByaXNrcyBhc3NvY2lhdGVkIHdpdGggcGFja2V0IGJ1ZmZlciBtYW5pcHVsYXRpb24gaW4gdGhpcyBwYXRoIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBidWZmZXIgb3Zlci1yZWFkcywgb3Igc2tiIGxpZmV0aW1lL3JlZmNvdW50aW5nIGVycm9ycykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIHBhY2tldCB0cmFuc21pc3Npb24gaGFuZGxpbmcgYW5kIGJ1ZmZlciBtYW5hZ2VtZW50IGluIHBwcG9hdG1fc2VuZCB3aXRoaW4gbmV0L2F0bS9wcHBvYXRtLmMuIEl0IHJlcGxhY2VzIHNrYl9yZWFsbG9jX2hlYWRyb29tIHdpdGggc2tiX2Nvd19oZWFkLCByZXN0cnVjdHVyZXMgdGhlIG9yZGVyIG9mIHNrYl9wdWxsIGFuZCBza2JfcHVzaCwgcmVtb3ZlcyB0aGUgdW5kbyBsb2dpYyBvbiBzZW5kIGZhaWx1cmUsIGFuZCBhZGRzIGlucHV0IHZhbGlkYXRpb24gdmlhIHBza2JfbWF5X3B1bGwuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIHBhdGhzIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgUFBQIG92ZXIgQVRNIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NDoyNy41OTg3NTg1NzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTM3MjI5OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3MzBiZmE1MzFkYTc3N2RiMjkzMmE2Nzk0YzY5YzlmMjcyN2IwODlmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDEzIDAwOjQ0OjI1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmNcXG5pbmRleCA2ZGE1MmQxMmRmNjhlLi41MjE0Nzg2ZTYxZDExIDEwMDY0NFxcbi0tLSBhL25ldC9hdG0vcHBwb2F0bS5jXFxuKysrIGIvbmV0L2F0bS9wcHBvYXRtLmNcXG5AQCAtMjkyLDEwICsyOTIsMTMgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMSkpIHtcXG4rXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdHJldHVybiBEUk9QX1BBQ0tFVDtcXG4rXFx0fVxcbitcXG4gXFx0QVRNX1NLQihza2IpLVxcdTAwM2V2Y2MgPSBwdmNjLVxcdTAwM2VhdG12Y2M7XFxuIFxcdHByX2RlYnVnKFxcXCIoc2tiPTB4JXAsIHZjYz0weCVwKVxcXFxuXFxcIiwgc2tiLCBwdmNjLVxcdTAwM2VhdG12Y2MpO1xcbi1cXHRpZiAoc2tiLVxcdTAwM2VkYXRhWzBdID09ICdcXFxcMCcgXFx1MDAyNlxcdTAwMjYgKHB2Y2MtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0NfQ09NUF9QUk9UKSlcXG4tXFx0XFx0KHZvaWQpIHNrYl9wdWxsKHNrYiwgMSk7XFxuIFxcbiBcXHR2Y2MgPSBBVE1fU0tCKHNrYiktXFx1MDAzZXZjYztcXG4gXFx0YmhfbG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcXG5AQCAtMzE3LDIzICszMjAsMTMgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gXFx0c3dpdGNoIChwdmNjLVxcdTAwM2VlbmNhcHMpIHtcXHRcXHQvKiBMTEMgZW5jYXBzdWxhdGlvbiBuZWVkZWQgKi9cXG4gXFx0Y2FzZSBlX2xsYzpcXG4tXFx0XFx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFxcdTAwM2MgTExDX0xFTikge1xcbi1cXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqbjtcXG4tXFx0XFx0XFx0biA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHNrYiwgTExDX0xFTik7XFxuLVxcdFxcdFxcdGlmIChuICE9IE5VTEwgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgICFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIG4tXFx1MDAzZXRydWVzaXplKSkge1xcbi1cXHRcXHRcXHRcXHRrZnJlZV9za2Iobik7XFxuLVxcdFxcdFxcdFxcdGdvdG8gbm9zcGFjZTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbi1cXHRcXHRcXHRza2IgPSBuO1xcbi1cXHRcXHRcXHRpZiAoc2tiID09IE5VTEwpIHtcXG4tXFx0XFx0XFx0XFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm4gRFJPUF9QQUNLRVQ7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fSBlbHNlIGlmICghcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBza2ItXFx1MDAzZXRydWVzaXplKSlcXG4rXFx0XFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pKSB7XFxuK1xcdFxcdFxcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdFxcdHJldHVybiBEUk9QX1BBQ0tFVDtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVxcdTAwM2V0cnVlc2l6ZSkpXFxuIFxcdFxcdFxcdGdvdG8gbm9zcGFjZTtcXG4tXFx0XFx0bWVtY3B5KHNrYl9wdXNoKHNrYiwgTExDX0xFTiksIHBwcGxsYywgTExDX0xFTik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIGVfdmM6XFxuIFxcdFxcdGlmICghcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBza2ItXFx1MDAzZXRydWVzaXplKSlcXG5AQCAtMzQ2LDYgKzMzOSwxMiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoc2tiLVxcdTAwM2VkYXRhWzBdID09ICdcXFxcMCcgXFx1MDAyNlxcdTAwMjYgKHB2Y2MtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0NfQ09NUF9QUk9UKSlcXG4rXFx0XFx0c2tiX3B1bGwoc2tiLCAxKTtcXG4rXFxuK1xcdGlmIChwdmNjLVxcdTAwM2VlbmNhcHMgPT0gZV9sbGMpXFxuK1xcdFxcdG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pO1xcbitcXG4gXFx0YXRtX2FjY291bnRfdHgodmNjLCBza2IpO1xcbiBcXHRwcl9kZWJ1ZyhcXFwiYXRtX3NrYiglcCktXFx1MDAzZXZjYyglcCktXFx1MDAzZWRldiglcClcXFxcblxcXCIsXFxuIFxcdFxcdCBza2IsIEFUTV9TS0Ioc2tiKS1cXHUwMDNldmNjLCBBVE1fU0tCKHNrYiktXFx1MDAzZXZjYy1cXHUwMDNlZGV2KTtcXG5AQCAtMzU1LDEzICszNTQsNiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdHJldHVybiByZXQ7XFxuIG5vc3BhY2U6XFxuIFxcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcXG4tXFx0LypcXG4tXFx0ICogV2UgZG9uJ3QgaGF2ZSBzcGFjZSB0byBzZW5kIHRoaXMgU0tCIG5vdywgYnV0IHdlIG1pZ2h0IGhhdmVcXG4tXFx0ICogYWxyZWFkeSBhcHBsaWVkIFNDX0NPTVBfUFJPVCBjb21wcmVzc2lvbiwgc28gbWF5IG5lZWQgdG8gdW5kb1xcbi1cXHQgKi9cXG4tXFx0aWYgKChwdmNjLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNDX0NPTVBfUFJPVCkgXFx1MDAyNlxcdTAwMjYgc2tiX2hlYWRyb29tKHNrYikgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBza2ItXFx1MDAzZWRhdGFbLTFdID09ICdcXFxcMCcpXFxuLVxcdFxcdCh2b2lkKSBza2JfcHVzaChza2IsIDEpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDQ6MjkuMTkzMzI0MDc0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNzUxODYyNzY1NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRNXCIsXG4gICAgXCJQUFBcIixcbiAgICBcIlBQUE9BVE1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcHBvYXRtX3NlbmRcIixcbiAgICBcInBwcG9hdG1fYXNzaWduX3ZjY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBwYWNrZXQgdHJhbnNtaXNzaW9uIGhhbmRsaW5nIGFuZCBidWZmZXIgbWFuYWdlbWVudCBpbiBwcHBvYXRtX3NlbmQgd2l0aGluIG5ldC9hdG0vcHBwb2F0bS5jLiBJdCByZXBsYWNlcyBza2JfcmVhbGxvY19oZWFkcm9vbSB3aXRoIHNrYl9jb3dfaGVhZCwgcmVzdHJ1Y3R1cmVzIHRoZSBvcmRlciBvZiBza2JfcHVsbCBhbmQgc2tiX3B1c2gsIHJlbW92ZXMgdGhlIHVuZG8gbG9naWMgb24gc2VuZCBmYWlsdXJlLCBhbmQgYWRkcyBpbnB1dCB2YWxpZGF0aW9uIHZpYSBwc2tiX21heV9wdWxsLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBwYXRocyB0aGF0IGNhbiBiZSBleGVyY2lzZWQgdmlhIFBQUCBvdmVyIEFUTSBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MzBiZmE1MzFkYTc3N2RiMjkzMmE2Nzk0YzY5YzlmMjcyN2IwODlmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMDA6NDQ6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYXRtL3BwcG9hdG0uYyBiL25ldC9hdG0vcHBwb2F0bS5jXG5pbmRleCA2ZGE1MmQxMmRmNjhlLi41MjE0Nzg2ZTYxZDExIDEwMDY0NFxuLS0tIGEvbmV0L2F0bS9wcHBvYXRtLmNcbisrKyBiL25ldC9hdG0vcHBwb2F0bS5jXG5AQCAtMjkyLDEwICsyOTIsMTMgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c3RydWN0IGF0bV92Y2MgKnZjYztcbiBcdGludCByZXQ7XG4gXG4rXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAxKSkge1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuIERST1BfUEFDS0VUO1xuK1x0fVxuK1xuIFx0QVRNX1NLQihza2IpLVx1MDAzZXZjYyA9IHB2Y2MtXHUwMDNlYXRtdmNjO1xuIFx0cHJfZGVidWcoXCIoc2tiPTB4JXAsIHZjYz0weCVwKVxcblwiLCBza2IsIHB2Y2MtXHUwMDNlYXRtdmNjKTtcbi1cdGlmIChza2ItXHUwMDNlZGF0YVswXSA9PSAnXFwwJyBcdTAwMjZcdTAwMjYgKHB2Y2MtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0NPTVBfUFJPVCkpXG4tXHRcdCh2b2lkKSBza2JfcHVsbChza2IsIDEpO1xuIFxuIFx0dmNjID0gQVRNX1NLQihza2IpLVx1MDAzZXZjYztcbiBcdGJoX2xvY2tfc29jayhza19hdG0odmNjKSk7XG5AQCAtMzE3LDIzICszMjAsMTMgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0c3dpdGNoIChwdmNjLVx1MDAzZWVuY2Fwcykge1x0XHQvKiBMTEMgZW5jYXBzdWxhdGlvbiBuZWVkZWQgKi9cbiBcdGNhc2UgZV9sbGM6XG4tXHRcdGlmIChza2JfaGVhZHJvb20oc2tiKSBcdTAwM2MgTExDX0xFTikge1xuLVx0XHRcdHN0cnVjdCBza19idWZmICpuO1xuLVx0XHRcdG4gPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsIExMQ19MRU4pO1xuLVx0XHRcdGlmIChuICE9IE5VTEwgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIG4tXHUwMDNldHJ1ZXNpemUpKSB7XG4tXHRcdFx0XHRrZnJlZV9za2Iobik7XG4tXHRcdFx0XHRnb3RvIG5vc3BhY2U7XG4tXHRcdFx0fVxuLVx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4tXHRcdFx0c2tiID0gbjtcbi1cdFx0XHRpZiAoc2tiID09IE5VTEwpIHtcbi1cdFx0XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbi1cdFx0XHRcdHJldHVybiBEUk9QX1BBQ0tFVDtcbi1cdFx0XHR9XG4tXHRcdH0gZWxzZSBpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbitcdFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pKSB7XG4rXHRcdFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuK1x0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRcdHJldHVybiBEUk9QX1BBQ0tFVDtcbitcdFx0fVxuK1x0XHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbiBcdFx0XHRnb3RvIG5vc3BhY2U7XG4tXHRcdG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgZV92YzpcbiBcdFx0aWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cdTAwM2V0cnVlc2l6ZSkpXG5AQCAtMzQ2LDYgKzMzOSwxMiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdHJldHVybiAxO1xuIFx0fVxuIFxuK1x0aWYgKHNrYi1cdTAwM2VkYXRhWzBdID09ICdcXDAnIFx1MDAyNlx1MDAyNiAocHZjYy1cdTAwM2VmbGFncyBcdTAwMjYgU0NfQ09NUF9QUk9UKSlcbitcdFx0c2tiX3B1bGwoc2tiLCAxKTtcbitcbitcdGlmIChwdmNjLVx1MDAzZWVuY2FwcyA9PSBlX2xsYylcbitcdFx0bWVtY3B5KHNrYl9wdXNoKHNrYiwgTExDX0xFTiksIHBwcGxsYywgTExDX0xFTik7XG4rXG4gXHRhdG1fYWNjb3VudF90eCh2Y2MsIHNrYik7XG4gXHRwcl9kZWJ1ZyhcImF0bV9za2IoJXApLVx1MDAzZXZjYyglcCktXHUwMDNlZGV2KCVwKVxcblwiLFxuIFx0XHQgc2tiLCBBVE1fU0tCKHNrYiktXHUwMDNldmNjLCBBVE1fU0tCKHNrYiktXHUwMDNldmNjLVx1MDAzZWRldik7XG5AQCAtMzU1LDEzICszNTQsNiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gcmV0O1xuIG5vc3BhY2U6XG4gXHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XG4tXHQvKlxuLVx0ICogV2UgZG9uJ3QgaGF2ZSBzcGFjZSB0byBzZW5kIHRoaXMgU0tCIG5vdywgYnV0IHdlIG1pZ2h0IGhhdmVcbi1cdCAqIGFscmVhZHkgYXBwbGllZCBTQ19DT01QX1BST1QgY29tcHJlc3Npb24sIHNvIG1heSBuZWVkIHRvIHVuZG9cbi1cdCAqL1xuLVx0aWYgKChwdmNjLVx1MDAzZWZsYWdzIFx1MDAyNiBTQ19DT01QX1BST1QpIFx1MDAyNlx1MDAyNiBza2JfaGVhZHJvb20oc2tiKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbi1cdCAgICBza2ItXHUwMDNlZGF0YVstMV0gPT0gJ1xcMCcpXG4tXHRcdCh2b2lkKSBza2JfcHVzaChza2IsIDEpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDQ6MjkuMTkzMzI1ODE0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTc2NTQ2MTAxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBQUG9BVE0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIG1vZGlmeWluZyBgbmV0L2F0bS9wcHBvYXRtLmNgLiBMZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIFRoZSBjaGFuZ2VzIHdpdGhpbiBgcHBwb2F0bV9zZW5kYCBhcmUgd2hhdCBJJ20gaW50ZXJlc3RlZCBpbi5cblxuRmlyc3QsIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBgaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMSkpYCBhdCB0aGUgdG9wIG9mIHRoZSBmdW5jdGlvbi4gVGhhdCdzIGEgc29saWQgY2hlY2sgZm9yIGRhdGEgYXZhaWxhYmlsaXR5IGJlZm9yZSBwcm9jZWVkaW5nLCBhIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nIG1lYXN1cmUuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC5cblxuTmV4dCwgdGhhdCBpbml0aWFsLCBxdWljayBjaGVjayBhbmQgcmVtb3ZhbCBvZiB0aGUgIGBpZiAoc2tiLVx1MDAzZWRhdGFbMF0gPT0gJ1xcMCcgXHUwMDI2XHUwMDI2IChwdmNjLVx1MDAzZWZsYWdzIFx1MDAyNiBTQ19DT01QX1BST1QpKSAodm9pZCkgc2tiX3B1bGwoc2tiLCAxKTtgIHNlZW1zIGxpa2UgYSBtaW5vciBvcHRpbWl6YXRpb24uIEl0IHdhcyBwdWxsaW5nIGRhdGEgYmFzZWQgb24gdGhlIGZpcnN0IGJ5dGUgYmVpbmcgYSBudWxsIGNoYXJhY3RlciwgcG90ZW50aWFsbHkgcmVsYXRlZCB0byBjb21wcmVzc2lvbi4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgY29udGV4dCBhcyBJIGdvIHRocm91Z2ggdGhlIHJlc3QuXG5cbk5vdyB0aGUgYHN3aXRjaCAocHZjYy1cdTAwM2VlbmNhcHMpYCBibG9jazogUmVwbGFjaW5nIGBza2JfcmVhbGxvY19oZWFkcm9vbWAgYW5kIHRoZSBhc3NvY2lhdGVkIGhlYWRyb29tIGNoZWNrIHdpdGggYHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pYCBpcyBpbnRlcmVzdGluZy4gVXNpbmcgYHNrYl9jb3dfaGVhZGAgc3VnZ2VzdHMgYSBjb3B5LW9uLXdyaXRlIHN0cmF0ZWd5IGlzIGJlaW5nIGludHJvZHVjZWQgb3IgcmVmaW5lZCB0byBtYW5hZ2UgdGhlIExMQyBoZWFkZXIuIE11Y2ggbW9yZSBlZmZpY2llbnQuIFJlbW92aW5nIHRoZSBgbWVtY3B5YCBvZiB0aGUgTExDIGhlYWRlciAqd2l0aGluKiB0aGUgc3dpdGNoIHN0YXRlbWVudCBpcyBhbiBpbXBvcnRhbnQgc2hpZnQgYXMgd2VsbC4gXG5cblRoZSBtb3ZlbWVudCBvZiB0aGUgYHNrYl9wdWxsYCBhbmQgYHNrYl9wdXNoKHNrYiwgTExDX0xFTilgIG9wZXJhdGlvbnMgZnVydGhlciBkb3duIGFmdGVyIHdlJ3ZlIGNvbmZpcm1lZCB3ZSBjYW4gc2VuZCB0aGUgcGFja2V0IGFuZCByZWxlYXNlZCBgbm9zcGFjZWAgc2lnbmFscyBhbiBhdHRlbXB0IHRvIG9wdGltaXplIHBhY2tldCBtYW5pcHVsYXRpb24uIFRoaXMgc2VlbXMgbGlrZSBhIGdvb2QgbW92ZSB0byBkZWxheSB0aGVzZSBwb3RlbnRpYWxseSBleHBlbnNpdmUgb3BlcmF0aW9ucy5cblxuRmluYWxseSwgdGhlIHJlbW92YWwgb2YgdGhlIHVuZG8gbG9naWMgd2l0aGluIHRoZSBgbm9zcGFjZTpgIGxhYmVsIGNhdGNoZXMgbXkgYXR0ZW50aW9uLiBUaGUgcmVtb3ZlZCBjb2RlIHdhcyBhdHRlbXB0aW5nIHRvIHVuZG8gY29tcHJlc3Npb24gaWYgaGVhZHJvb20gd2FzIGF2YWlsYWJsZSBhbmQgdGhlIGZpcnN0IGJ5dGUgd2FzIHplcm8sIHNlZW1pbmdseSBhIGZhbGxiYWNrIGZvciBhIGNvbXByZXNzaW9uIHByb3RvY29sLiBUaGlzIGluZGljYXRlcyBlaXRoZXIgdGhhdCB0aGF0IHBhcnRpY3VsYXIgY29tcHJlc3Npb24gcHJvdG9jb2wgaXMgbm8gbG9uZ2VyIHVzZWQsIG9yIHRoZSBsb2dpYyBmb3IgaXRzIGRlLWFwcGxpY2F0aW9uIChjb21wcmVzc2lvbikgaGFzIGNoYW5nZWQuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSBjaGFuZ2VzIGFyZSBzYWZlIGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgUFBQb0FUTSBpbXBsZW1lbnRhdGlvbiwgYW5kIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFuZCB0aGVpciBpbXBhY3QuIFRpbWUgdG8gZ3JlcHBlciBvciByZWFkIHRoZSBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODA4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDQ6MzQuOTU4Nzg5OTMzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDcxMjQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQUFBPQVRNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9hdG0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vTWFrZWZpbGU9MTA9YXRtLSQoQ09ORklHX1BST0NfRlMpICs9IHByb2Mub1xcbm5ldC9hdG0vTWFrZWZpbGUtMTEtXFxubmV0L2F0bS9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfUFBQT0FUTSkgKz0gcHBwb2F0bS5vXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYz01MD1lbnVtIHBwcG9hdG1fZW5jYXBzIHtcXG5uZXQvYXRtL3BwcG9hdG0uYzo1MTpcXHRlX2F1dG9kZXRlY3QgPSBQUFBPQVRNX0VOQ0FQU19BVVRPREVURUNULFxcbm5ldC9hdG0vcHBwb2F0bS5jOjUyOlxcdGVfdmMgPSBQUFBPQVRNX0VOQ0FQU19WQyxcXG5uZXQvYXRtL3BwcG9hdG0uYzo1MzpcXHRlX2xsYyA9IFBQUE9BVE1fRU5DQVBTX0xMQyxcXG5uZXQvYXRtL3BwcG9hdG0uYy01NC19O1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmM9MzgwPXN0YXRpYyBpbnQgcHBwb2F0bV9hc3NpZ25fdmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0zODctXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxubmV0L2F0bS9wcHBvYXRtLmM6Mzg4OlxcdGlmIChiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfQVVUT0RFVEVDVCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9hdG0vcHBwb2F0bS5jOjM4OTpcXHQgICAgYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX1ZDIFxcdTAwMjZcXHUwMDI2IGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19MTEMpXFxubmV0L2F0bS9wcHBvYXRtLmMtMzkwLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NDozNS4wODM1MTI3NjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODUwMzQ5NjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZTpcblxuKipFeGFtaW5pbmcgUFBQb0EvQVRNIERlcGVuZGVuY2llcyBpbiB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBQUFBvQVRNIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIE15IGluc3RpbmN0IHNheXMgdG8gc3RhcnQgd2l0aCBgbmV0L2F0bS9LY29uZmlnYCDigJMgdGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gYENPTkZJR19QUFBPQVRNYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3IgbW9kdWxlcyAqZGVwZW5kKiBvbiB0aGlzLCBvciB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgYENPTkZJR19QUFBPQVRNYCBpcyBldmVuIGFuIG9wdGlvbi4gVGhpcyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBBVE0vUFBQb0Egc2V0dXAgYW5kIGhvdyBkaWZmZXJlbnQgcGllY2VzIGZpdCB0b2dldGhlci4gSSB3YW50IHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgZGVwZW5kZW5jaWVzLCBub3QganVzdCB0aGUgYmFzaWNzLCBidXQgZXZlcnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA5MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ0OjM2LjkzMzg2NTM3OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzk5Njc3OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBQUE9BVE1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ0OjM2Ljk5Nzg2ODY4N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYyODIxOTA5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlRyYWNpbmcgRG93biB0aGUgYGNvbmZpZyBQUFBPQVRNYCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gZXhhY3RseSB3aGVyZSB0aGlzIGBjb25maWcgUFBQT0FUTWAgZGVmaW5pdGlvbiBpcyBjb21pbmcgZnJvbS4gSXQncyBhIGtleSBlbGVtZW50LCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgb3JpZ2luIGlzIGNyaXRpY2FsIHRvIG15IGN1cnJlbnQgdGFzay4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgY29kZWJhc2UsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZCBhbnkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiB0byBwaW5wb2ludCBpdHMgbG9jYXRpb24uIFRoaXMgbWVhbnMgZGl2aW5nIGRlZXAgaW50byB0aGUgY29uZmlndXJhdGlvbiBoaWVyYXJjaHksIGxpa2VseSBleGFtaW5pbmcgaW5jbHVkZSBmaWxlcywgbWFjcm8gZGVmaW5pdGlvbnMsIGFuZCBwb3RlbnRpYWxseSBldmVuIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBjb25maWd1cmF0aW9uIHNjcmlwdHMuIEkgbmVlZCB0byBrbm93ICpldmVyeXRoaW5nKiDigJMgd2hlcmUgaXQncyBkZWNsYXJlZCwgdGhlIHNjb3BlIG9mIGl0cyBhcHBsaWNhdGlvbiwgYW5kIGFueSBwb3NzaWJsZSBvdmVycmlkZXMgb3IgZGVmYXVsdCB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIGl0LiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBkZWJ1Z2dpbmcgb3IgbWFraW5nIGFueSBjaGFuZ2VzIHJlbGF0ZWQgdG8gdGhhdCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzMwLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDQ6NDMuMjgwMDYxMzM1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODcxNjc4ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBQUE9BVE1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWc9OTI9Y29uZmlnIFBQUF9NVUxUSUxJTktcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEwMy1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMDQ6Y29uZmlnIFBQUE9BVE1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMDUtXFx0dHJpc3RhdGUgXFxcIlBQUCBvdmVyIEFUTVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDQ6NDUuNzY3MjM0OTI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjA1ODg5OTA5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgUFBQIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgUFBQIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSB3b3VsZCBiZSBpbiBgZHJpdmVycy9uZXQvcHBwL2AuIExldCBtZSB6ZXJvIGluIG9uIHRoYXQgc2VjdGlvbiBhbmQgc3RhcnQgd2l0aCBgS2NvbmZpZ2AuIFNwZWNpZmljYWxseSwgSSB0aGluayB0aGUgY3JpdGljYWwgb3B0aW9ucyBhcm91bmQgbGluZSAxMDQgYXJlIGdvaW5nIHRvIGJlIG1vc3QgaW50ZXJlc3RpbmcuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgd2UncmUgdXNlZCB0byDigJMgdGhpbmdzIGxpa2UgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHZhcmlvdXMgUFBQIGZlYXR1cmVzLCBwZXJoYXBzIG9wdGlvbnMgZm9yIGRpZmZlcmVudCBjb21wcmVzc2lvbiBtZXRob2RzIChNUFBDLCBWSiBjb21wcmVzc2lvbiwgZXRjLiksIGFuZCBtYXliZSBldmVuIHNvbWUgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIGJhc2VkIG9uIG90aGVyIG5ldHdvcmsgb3IgaGFyZHdhcmUgY29tcG9uZW50cy4gVGltZSB0byBjb25maXJtIG15IGludHVpdGlvbiBhbmQgc2VlIHdoYXQncyB3aGF0LiBMZXQncyBzZWUgd2hhdCB0aGUgY29uZmlnIG9wdGlvbnMgdGVsbCB1cyBhYm91dCBQUFAgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYwNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ0OjQ3LjgyNjEzNjcyOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzA1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcdCAgdmVyc2lvbiBvZiB0aGUgcHBwZCBkYWVtb24gd2hpY2ggdW5kZXJzdGFuZHMgdGhlIG11bHRpbGluayBwcm90b2NvbC5cXG4gMTAxOlxcdFxcbiAxMDI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxMDM6XFx0XFxuIDEwNDpcXHRjb25maWcgUFBQT0FUTVxcbiAxMDU6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBvdmVyIEFUTVxcXCJcXG4gMTA2OlxcdFxcdGRlcGVuZHMgb24gQVRNXFxuIDEwNzpcXHRcXHRoZWxwXFxuIDEwODpcXHRcXHQgIFN1cHBvcnQgUFBQIChQb2ludCB0byBQb2ludCBQcm90b2NvbCkgZW5jYXBzdWxhdGVkIGluIEFUTSBmcmFtZXMuXFxuIDEwOTpcXHRcXHQgIFRoaXMgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgeWV0IGNvbXBseSB3aXRoIHNlY3Rpb24gOCBvZiBSRkMyMzY0LFxcbiAxMTA6XFx0XFx0ICB3aGljaCBjYW4gbGVhZCB0byBiYWQgcmVzdWx0cyBpZiB0aGUgQVRNIHBlZXIgbG9zZXMgc3RhdGUgYW5kXFxuIDExMTpcXHRcXHQgIGNoYW5nZXMgaXRzIGVuY2Fwc3VsYXRpb24gdW5pbGF0ZXJhbGx5LlxcbiAxMTI6XFx0XFxuIDExMzpcXHRjb25maWcgUFBQT1hcXG4gMTE0OlxcdFxcdHRyaXN0YXRlXFxuIDExNTpcXHRcXG4gMTE2OlxcdGNvbmZpZyBQUFBPRVxcbiAxMTc6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBvdmVyIEV0aGVybmV0XFxcIlxcbiAxMTg6XFx0XFx0c2VsZWN0IFBQUE9YXFxuIDExOTpcXHRcXHRoZWxwXFxuIDEyMDpcXHRcXHQgIFN1cHBvcnQgZm9yIFBQUCBvdmVyIEV0aGVybmV0LlxcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHQgIFRvIHdvcmsgaW4gY2xpZW50IG1vZGUsIHBwcGQgdmVyc2lvbiAyLjQuMiBvciBsYXRlciBpcyByZXF1aXJlZC5cXG4gMTIzOlxcdFxcdCAgVG8gd29yayBpbiBzZXJ2ZXIgbW9kZSwgdGhlIHBwcG9lLXNlcnZlciBjb21tYW5kIGZyb20gdGhlIFJQLVBQUG9FXFxuIDEyNDpcXHRcXHQgIHBhY2thZ2UgaXMgYWxzbyByZXF1aXJlZCwgYXZhaWxhYmxlIGF0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ0OjQ3LjgyNjY3NDg0OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjYzNzU2NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIFBQUCBEZXBlbmRlbmN5KipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBQUFAgaXMgYWN0dWFsbHkgKnJlcXVpcmVkKiBoZXJlLiBJIGtub3cgaXQncyBhIGxlZ2FjeSBwcm90b2NvbCwgYnV0IHlvdSBuZXZlciBrbm93IHdoYXQgYW5jaWVudCBkZXBlbmRlbmNpZXMgbWlnaHQgc3RpbGwgYmUgbHVya2luZy4gU28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIFNwZWNpZmljYWxseSwgSSdsbCBleGFtaW5lIHRoZSBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgIGZpbGUuIEknbGwgc2NhbiB0aGUgYmVnaW5uaW5nIG9mIHRoYXQgY29uZmlnIGZpbGUgdG8gc2VlIGlmIGFueXRoaW5nIGVsc2UgZGVwZW5kcyBvbiBpdC4gVGhpcyBzaG91bGQgcXVpY2tseSB0ZWxsIG1lIGlmIEkgbmVlZCB0byBjb25zaWRlciBQUFAgZnVuY3Rpb25hbGl0eSBvciB3aGV0aGVyIGl0J3Mgc29tZXRoaW5nIHRoYXQgY2FuIGJlIHNhZmVseSBpZ25vcmVkIGZvciB0aGlzIHBhcnRpY3VsYXIgYnVpbGQgY29uZmlndXJhdGlvbi4gSXQncyBhYm91dCBiZWluZyBlZmZpY2llbnQgYW5kIG5vdCB3YXN0aW5nIHRpbWUgb24gc29tZXRoaW5nIGlycmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ0OjUwLjA5MDQzNDI1OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBQUFAgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgUFBQXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIChwb2ludC10by1wb2ludCBwcm90b2NvbCkgc3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdHNlbGVjdCBTTEhDXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFBQUCAoUG9pbnQgdG8gUG9pbnQgUHJvdG9jb2wpIGlzIGEgbmV3ZXIgYW5kIGJldHRlciBTTElQLiAgSXQgc2VydmVzXFxuICAxMTpcXHRcXHQgIHRoZSBzYW1lIHB1cnBvc2U6IHNlbmRpbmcgSW50ZXJuZXQgdHJhZmZpYyBvdmVyIHRlbGVwaG9uZSAoYW5kIG90aGVyXFxuICAxMjpcXHRcXHQgIHNlcmlhbCkgbGluZXMuICBBc2sgeW91ciBhY2Nlc3MgcHJvdmlkZXIgaWYgdGhleSBzdXBwb3J0IGl0LCBiZWNhdXNlXFxuICAxMzpcXHRcXHQgIG90aGVyd2lzZSB5b3UgY2FuJ3QgdXNlIGl0OyBtb3N0IEludGVybmV0IGFjY2VzcyBwcm92aWRlcnMgdGhlc2VcXG4gIDE0OlxcdFxcdCAgZGF5cyBzdXBwb3J0IFBQUCByYXRoZXIgdGhhbiBTTElQLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHQgIFRvIHVzZSBQUFAsIHlvdSBuZWVkIGFuIGFkZGl0aW9uYWwgcHJvZ3JhbSBjYWxsZWQgcHBwZCwgYXZhaWxhYmxlIGF0XFxuICAxNzpcXHRcXHQgIFxcdTAwM2NodHRwczovL3BwcC5zYW1iYS5vcmdcXHUwMDNlLiAgTWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIHZlcnNpb24gb2YgcHBwZFxcbiAgMTg6XFx0XFx0ICByZWNvbW1lbmRlZCBpbiBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL0NoYW5nZXNcXHUwMDNlLlxcbiAgMTk6XFx0XFx0ICBUaGUgUFBQIG9wdGlvbiBlbmxhcmdlcyB5b3VyIGtlcm5lbCBieSBhYm91dCAxNiBLQi5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0XFx0ICBUaGVyZSBhcmUgYWN0dWFsbHkgdHdvIHZlcnNpb25zIG9mIFBQUDogdGhlIHRyYWRpdGlvbmFsIFBQUCBmb3JcXG4gIDIyOlxcdFxcdCAgYXN5bmNocm9ub3VzIGxpbmVzLCBzdWNoIGFzIHJlZ3VsYXIgYW5hbG9nIHBob25lIGxpbmVzLCBhbmRcXG4gIDIzOlxcdFxcdCAgc3luY2hyb25vdXMgUFBQIHdoaWNoIGNhbiBiZSB1c2VkIG92ZXIgZGlnaXRhbCBJU0ROIGxpbmVzIGZvclxcbiAgMjQ6XFx0XFx0ICBleGFtcGxlLiAgSWYgeW91IHdhbnQgdG8gdXNlIFBQUCBvdmVyIHBob25lIGxpbmVzIG9yIG90aGVyXFxuICAyNTpcXHRcXHQgIGFzeW5jaHJvbm91cyBzZXJpYWwgbGluZXMsIHlvdSBuZWVkIHRvIHNheSBZIChvciBNKSBoZXJlIGFuZCBhbHNvIHRvXFxuICAyNjpcXHRcXHQgIHRoZSBuZXh0IG9wdGlvbiwgXFxcIlBQUCBzdXBwb3J0IGZvciBhc3luYyBzZXJpYWwgcG9ydHNcXFwiLiAgRm9yIFBQUCBvdmVyXFxuICAyNzpcXHRcXHQgIHN5bmNocm9ub3VzIGxpbmVzLCB5b3Ugc2hvdWxkIHNheSBZIChvciBNKSBoZXJlIGFuZCB0byBcXFwiU3VwcG9ydFxcbiAgMjg6XFx0XFx0ICBzeW5jaHJvbm91cyBQUFBcXFwiLCBiZWxvdy5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBJZiB5b3Ugc2FpZCBZIHRvIFxcXCJWZXJzaW9uIGluZm9ybWF0aW9uIG9uIGFsbCBzeW1ib2xzXFxcIiBhYm92ZSwgdGhlblxcbiAgMzE6XFx0XFx0ICB5b3UgY2Fubm90IGNvbXBpbGUgdGhlIFBQUCBkcml2ZXIgaW50byB0aGUga2VybmVsOyB5b3UgY2FuIHRoZW4gb25seVxcbiAgMzI6XFx0XFx0ICBjb21waWxlIGl0IGFzIGEgbW9kdWxlLiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTVxcbiAgMzM6XFx0XFx0ICBoZXJlLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBwcF9nZW5lcmljLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRpZiBQUFBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDQ6NTAuMDkwNTA4MDM4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4NjIxMzk3MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBQUFAgYW5kIEFUTSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBgaWYgUFBQYCBzdGF0ZW1lbnQgaXMgY3J1Y2lhbDsgaXQncyBndWFyZGluZyBhbGwgb2YgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYC4gVGhhdCBtZWFucyB0aGUgZW50aXJlIFBQUCBjb25maWd1cmF0aW9uLCB0aGUgd2hvbGUgc2hlYmFuZywgaXMgY29udGluZ2VudCBvbiB0aGUgYENPTkZJR19QUFBgIG9wdGlvbiBiZWluZyBzZXQuIFJpZ2h0LCBzbyBJIGtub3cgYENPTkZJR19QUFBPQVRNYCBpcyBzcGVjaWZpY2FsbHkgZGVwZW5kZW50IG9uIGBDT05GSUdfUFBQYCBhbmQgYENPTkZJR19BVE1gLCB3aGljaCBtYWtlcyBzZW5zZS4gTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGBuZXQvYXRtL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYENPTkZJR19BVE1gIGl0c2VsZiBkZXBlbmRzIG9uLiBUaGlzIGlzIGFsbCBhYm91dCB0cmFjaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBhbmQgZmlndXJpbmcgb3V0IHRoZSBidWlsZCBoaWVyYXJjaHkuIEdvdHRhIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAyNywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDQ6NTEuOTUyNjUyMDVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjc5NDIyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVRNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2F0bS9LY29uZmlnLTUtXFxubmV0L2F0bS9LY29uZmlnOjY6Y29uZmlnIEFUTVxcbm5ldC9hdG0vS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJBc3luY2hyb25vdXMgVHJhbnNmZXIgTW9kZSAoQVRNKVxcXCJcXG4tLVxcbm5ldC9hdG0vS2NvbmZpZy0yMS1cXG5uZXQvYXRtL0tjb25maWc6MjI6Y29uZmlnIEFUTV9CUjI2ODRcXG5uZXQvYXRtL0tjb25maWctMjMtXFx0dHJpc3RhdGUgXFxcIlJGQzE0ODMvMjY4NCBCcmlkZ2VkIHByb3RvY29sc1xcXCJcXG4tLVxcbm5ldC9hdG0vS2NvbmZpZy0zMC1cXG5uZXQvYXRtL0tjb25maWc6MzE6Y29uZmlnIEFUTV9CUjI2ODRfSVBGSUxURVJcXG5uZXQvYXRtL0tjb25maWctMzItXFx0Ym9vbCBcXFwiUGVyLVZDIElQIGZpbHRlciBrbHVkZ2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ0OjUyLjA4NTQ1NjE5OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzg0MTM3MDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBQUFBvQS9BVE0gU2VuZCBQYXRoKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIHNwZWNpZmljYWxseSBob3cgdGhlIGBwcHBvYXRtX3NlbmRgIGZ1bmN0aW9uIGluIGBuZXQvYXRtL3BwcG9hdG0uY2AgaXMgdHJpZ2dlcmVkLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gSSdsbCBvcGVuIHVwIGBuZXQvYXRtL3BwcG9hdG0uY2AgYW5kIGh1bnQgZG93biB0aGUgY2FsbCBjaGFpbiB0aGF0IGxlYWRzIHRvIGl0LiBPbmNlIEkndmUgbG9jYXRlZCB0aGUgZW50cnkgcG9pbnQgdG8gYHBwcG9hdG1fc2VuZGAsIEknbGwgZ2l2ZSB0aGF0IGZ1bmN0aW9uIGEgdGhvcm91Z2ggZXhhbWluYXRpb24uIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSB0b28sIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgY29udGV4dCwgaW5wdXQgcGFyYW1ldGVycywgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgUFBQIG92ZXIgQVRNIGZyYW1ld29yay4gVW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBpcyBrZXkgdG8gZGVidWdnaW5nIG9yIG1vZGlmeWluZyBBVE0gZnVuY3Rpb25hbGl0eS4gSSBuZWVkIGEgc29saWQgaGFuZGxlIG9uIHRoaXMgZnVuY3Rpb24gdG8gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ1MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ0OjU0Ljg2OTU5NjA2NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYXRtL3BwcG9hdG0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODAsXG4gIFwiTGluZUNvdW50XCI6IDg1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODA6XFx0ICogQ2FsbGVkIGJ5IHRoZSBwcHBfZ2VuZXJpYy5jIHRvIHNlbmQgYSBwYWNrZXQgLSByZXR1cm5zIHRydWUgaWYgcGFja2V0XFxuIDI4MTpcXHQgKiB3YXMgYWNjZXB0ZWQuICBJZiB3ZSByZXR1cm4gZmFsc2UsIHRoZW4gaXQncyBvdXIgam9iIHRvIGNhbGxcXG4gMjgyOlxcdCAqIHBwcF9vdXRwdXRfd2FrZXVwKGNoYW4pIHdoZW4gd2UncmUgZmVlbGluZyBtb3JlIHVwIHRvIGl0LlxcbiAyODM6XFx0ICogTm90ZSB0aGF0IGluIHRoZSBFTk9NRU0gY2FzZSAoYXMgb3Bwb3NlZCB0byB0aGUgIWF0bV9tYXlfc2VuZCBjYXNlKVxcbiAyODQ6XFx0ICogd2Ugc2hvdWxkIHJlYWxseSBkcm9wIHRoZSBwYWNrZXQsIGJ1dCB0aGUgZ2VuZXJpYyBsYXllciBkb2Vzbid0XFxuIDI4NTpcXHQgKiBzdXBwb3J0IHRoaXMgeWV0LiAgV2UganVzdCByZXR1cm4gJ0RST1BfUEFDS0VUJyB3aGljaCB3ZSBhY3R1YWxseSBkZWZpbmVcXG4gMjg2OlxcdCAqIGFzIHN1Y2Nlc3MsIGp1c3QgdG8gYmUgY2xlYXIgd2hhdCB3ZSdyZSByZWFsbHkgZG9pbmcuXFxuIDI4NzpcXHQgKi9cXG4gMjg4OlxcdCNkZWZpbmUgRFJPUF9QQUNLRVQgMVxcbiAyODk6XFx0c3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAyOTA6XFx0e1xcbiAyOTE6XFx0XFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gY2hhbl90b19wdmNjKGNoYW4pO1xcbiAyOTI6XFx0XFx0c3RydWN0IGF0bV92Y2MgKnZjYztcXG4gMjkzOlxcdFxcdGludCByZXQ7XFxuIDI5NDpcXHRcXG4gMjk1OlxcdFxcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIDEpKSB7XFxuIDI5NjpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMjk3OlxcdFxcdFxcdHJldHVybiBEUk9QX1BBQ0tFVDtcXG4gMjk4OlxcdFxcdH1cXG4gMjk5OlxcdFxcbiAzMDA6XFx0XFx0QVRNX1NLQihza2IpLVxcdTAwM2V2Y2MgPSBwdmNjLVxcdTAwM2VhdG12Y2M7XFxuIDMwMTpcXHRcXHRwcl9kZWJ1ZyhcXFwiKHNrYj0weCVwLCB2Y2M9MHglcClcXFxcblxcXCIsIHNrYiwgcHZjYy1cXHUwMDNlYXRtdmNjKTtcXG4gMzAyOlxcdFxcbiAzMDM6XFx0XFx0dmNjID0gQVRNX1NLQihza2IpLVxcdTAwM2V2Y2M7XFxuIDMwNDpcXHRcXHRiaF9sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xcbiAzMDU6XFx0XFx0aWYgKHNvY2tfb3duZWRfYnlfdXNlcihza19hdG0odmNjKSkpIHtcXG4gMzA2OlxcdFxcdFxcdC8qXFxuIDMwNzpcXHRcXHRcXHQgKiBOZWVkcyB0byBoYXBwZW4gKGFuZCBiZSBmbHVzaGVkLCBoZW5jZSB0ZXN0X2FuZF8pIGJlZm9yZSB3ZSB1bmxvY2tcXG4gMzA4OlxcdFxcdFxcdCAqIHRoZSBzb2NrZXQuIEl0IG5lZWRzIHRvIGJlIHNlZW4gYnkgdGhlIHRpbWUgb3VyIC1cXHUwMDNlcmVsZWFzZV9jYiBnZXRzXFxuIDMwOTpcXHRcXHRcXHQgKiBjYWxsZWQuXFxuIDMxMDpcXHRcXHRcXHQgKi9cXG4gMzExOlxcdFxcdFxcdHRlc3RfYW5kX3NldF9iaXQoQkxPQ0tFRCwgXFx1MDAyNnB2Y2MtXFx1MDAzZWJsb2NrZWQpO1xcbiAzMTI6XFx0XFx0XFx0Z290byBub3NwYWNlO1xcbiAzMTM6XFx0XFx0fVxcbiAzMTQ6XFx0XFx0aWYgKHRlc3RfYml0KEFUTV9WRl9DTE9TRSwgXFx1MDAyNnZjYy1cXHUwMDNlZmxhZ3MpIHx8XFxuIDMxNTpcXHRcXHQgICAgIXRlc3RfYml0KEFUTV9WRl9SRUFEWSwgXFx1MDAyNnZjYy1cXHUwMDNlZmxhZ3MpKSB7XFxuIDMxNjpcXHRcXHRcXHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XFxuIDMxNzpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMzE4OlxcdFxcdFxcdHJldHVybiBEUk9QX1BBQ0tFVDtcXG4gMzE5OlxcdFxcdH1cXG4gMzIwOlxcdFxcbiAzMjE6XFx0XFx0c3dpdGNoIChwdmNjLVxcdTAwM2VlbmNhcHMpIHtcXHRcXHQvKiBMTEMgZW5jYXBzdWxhdGlvbiBuZWVkZWQgKi9cXG4gMzIyOlxcdFxcdGNhc2UgZV9sbGM6XFxuIDMyMzpcXHRcXHRcXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgTExDX0xFTikpIHtcXG4gMzI0OlxcdFxcdFxcdFxcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcXG4gMzI1OlxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAzMjY6XFx0XFx0XFx0XFx0cmV0dXJuIERST1BfUEFDS0VUO1xcbiAzMjc6XFx0XFx0XFx0fVxcbiAzMjg6XFx0XFx0XFx0aWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cXHUwMDNldHJ1ZXNpemUpKVxcbiAzMjk6XFx0XFx0XFx0XFx0Z290byBub3NwYWNlO1xcbiAzMzA6XFx0XFx0XFx0YnJlYWs7XFxuIDMzMTpcXHRcXHRjYXNlIGVfdmM6XFxuIDMzMjpcXHRcXHRcXHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVxcdTAwM2V0cnVlc2l6ZSkpXFxuIDMzMzpcXHRcXHRcXHRcXHRnb3RvIG5vc3BhY2U7XFxuIDMzNDpcXHRcXHRcXHRicmVhaztcXG4gMzM1OlxcdFxcdGNhc2UgZV9hdXRvZGV0ZWN0OlxcbiAzMzY6XFx0XFx0XFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xcbiAzMzc6XFx0XFx0XFx0cHJfZGVidWcoXFxcIlRyeWluZyB0byBzZW5kIHdpdGhvdXQgc2V0dGluZyBlbmNhcHMhXFxcXG5cXFwiKTtcXG4gMzM4OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAzMzk6XFx0XFx0XFx0cmV0dXJuIDE7XFxuIDM0MDpcXHRcXHR9XFxuIDM0MTpcXHRcXG4gMzQyOlxcdFxcdGlmIChza2ItXFx1MDAzZWRhdGFbMF0gPT0gJ1xcXFwwJyBcXHUwMDI2XFx1MDAyNiAocHZjYy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQ19DT01QX1BST1QpKVxcbiAzNDM6XFx0XFx0XFx0c2tiX3B1bGwoc2tiLCAxKTtcXG4gMzQ0OlxcdFxcbiAzNDU6XFx0XFx0aWYgKHB2Y2MtXFx1MDAzZWVuY2FwcyA9PSBlX2xsYylcXG4gMzQ2OlxcdFxcdFxcdG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pO1xcbiAzNDc6XFx0XFxuIDM0ODpcXHRcXHRhdG1fYWNjb3VudF90eCh2Y2MsIHNrYik7XFxuIDM0OTpcXHRcXHRwcl9kZWJ1ZyhcXFwiYXRtX3NrYiglcCktXFx1MDAzZXZjYyglcCktXFx1MDAzZWRldiglcClcXFxcblxcXCIsXFxuIDM1MDpcXHRcXHRcXHQgc2tiLCBBVE1fU0tCKHNrYiktXFx1MDAzZXZjYywgQVRNX1NLQihza2IpLVxcdTAwM2V2Y2MtXFx1MDAzZWRldik7XFxuIDM1MTpcXHRcXHRyZXQgPSBBVE1fU0tCKHNrYiktXFx1MDAzZXZjYy1cXHUwMDNlc2VuZChBVE1fU0tCKHNrYiktXFx1MDAzZXZjYywgc2tiKVxcbiAzNTI6XFx0XFx0ICAgID8gRFJPUF9QQUNLRVQgOiAxO1xcbiAzNTM6XFx0XFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xcbiAzNTQ6XFx0XFx0cmV0dXJuIHJldDtcXG4gMzU1OlxcdG5vc3BhY2U6XFxuIDM1NjpcXHRcXHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XFxuIDM1NzpcXHRcXHRyZXR1cm4gMDtcXG4gMzU4OlxcdH1cXG4gMzU5OlxcdFxcbiAzNjA6XFx0LyogVGhpcyBoYW5kbGVzIGlvY3RscyBzZW50IHRvIHRoZSAvZGV2L3BwcCBpbnRlcmZhY2UgKi9cXG4gMzYxOlxcdHN0YXRpYyBpbnQgcHBwb2F0bV9kZXZwcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxcbiAzNjI6XFx0XFx0dW5zaWduZWQgbG9uZyBhcmcpXFxuIDM2MzpcXHR7XFxuIDM2NDpcXHRcXHRzd2l0Y2ggKGNtZCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NDo1NC44Njk2ODgxNjVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjUxMzk1MDMwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBQUFBvQVRNIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnV0cyBhbmQgYm9sdHMgb2YgaG93IHRoaXMgUFBQb0FUTSBpbXBsZW1lbnRhdGlvbiBhY3R1YWxseSAqd29ya3MqLiBJJ3ZlIGdvdCBhIGRlY2VudCBncmFzcCBvbiB0aGUgaGlnaC1sZXZlbCBjb25jZXB0cywgYnV0IHRvIHJlYWxseSBnZXQgYSBoYW5kbGUgb24gdGhlIG51YW5jZXMsIGVzcGVjaWFsbHkgY29uY2VybmluZyBjaGFubmVsIGFuZCBzb2NrZXQgY3JlYXRpb24sIEkgbmVlZCB0byBkaWcgaW50byB0aGUgcmVzdCBvZiB0aGUgYHBwcG9hdG0uY2Agc291cmNlIGNvZGUuIEl0J3MgdGhlIG9ubHkgd2F5IHRvIHNlZSB0aGUgcmVhbCBjb250cm9sIGZsb3cgYW5kIHRoZSBzdWJ0bGUgaW50ZXJhY3Rpb25zIGludm9sdmVkLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgQVRNLXNwZWNpZmljIHNpZ25hbGluZyBhbmQgdGhlIHRyYW5zaXRpb24gZnJvbSB0aGUgQVRNIGxheWVyIHRvIHRoZSBQUFAgbGF5ZXIuIFRoZSBzb2NrZXQgaW50ZXJhY3Rpb24gZGV0YWlscyBzaG91bGQgYmUgcXVpdGUgcmV2ZWFsaW5nLCBhc3N1bWluZyBhIHRyYWRpdGlvbmFsIEJTRCBzb2NrZXQgaW1wbGVtZW50YXRpb24sIGJ1dCBldmVuIHRoYXQgaXMgd29ydGggY2hlY2tpbmcuIExldOKAmXMgaWRlbnRpZnkgdGhlIGludGVyZXN0aW5nIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIxNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDQ6NTcuMzgzNjQxNTIzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9hdG0vcHBwb2F0bS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM2NSxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM2NTpcXHRcXHRjYXNlIFBQUElPQ0dGTEFHUzpcXG4gMzY2OlxcdFxcdFxcdHJldHVybiBwdXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktXFx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpXFxuIDM2NzpcXHRcXHRcXHQgICAgPyAtRUZBVUxUIDogMDtcXG4gMzY4OlxcdFxcdGNhc2UgUFBQSU9DU0ZMQUdTOlxcbiAzNjk6XFx0XFx0XFx0cmV0dXJuIGdldF91c2VyKGNoYW5fdG9fcHZjYyhjaGFuKS1cXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopIGFyZylcXG4gMzcwOlxcdFxcdFxcdCAgICA/IC1FRkFVTFQgOiAwO1xcbiAzNzE6XFx0XFx0fVxcbiAzNzI6XFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuIDM3MzpcXHR9XFxuIDM3NDpcXHRcXG4gMzc1OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9hdG1fb3BzID0ge1xcbiAzNzY6XFx0XFx0LnN0YXJ0X3htaXQgPSBwcHBvYXRtX3NlbmQsXFxuIDM3NzpcXHRcXHQuaW9jdGwgPSBwcHBvYXRtX2RldnBwcF9pb2N0bCxcXG4gMzc4OlxcdH07XFxuIDM3OTpcXHRcXG4gMzgwOlxcdHN0YXRpYyBpbnQgcHBwb2F0bV9hc3NpZ25fdmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICphcmcpXFxuIDM4MTpcXHR7XFxuIDM4MjpcXHRcXHRzdHJ1Y3QgYXRtX2JhY2tlbmRfcHBwIGJlO1xcbiAzODM6XFx0XFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjO1xcbiAzODQ6XFx0XFx0aW50IGVycjtcXG4gMzg1OlxcdFxcbiAzODY6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZiZSwgYXJnLCBzaXplb2YgYmUpKVxcbiAzODc6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDM4ODpcXHRcXHRpZiAoYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1QgXFx1MDAyNlxcdTAwMjZcXG4gMzg5OlxcdFxcdCAgICBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfVkMgXFx1MDAyNlxcdTAwMjYgYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX0xMQylcXG4gMzkwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzOTE6XFx0XFx0cHZjYyA9IGt6YWxsb2Nfb2JqKCpwdmNjKTtcXG4gMzkyOlxcdFxcdGlmIChwdmNjID09IE5VTEwpXFxuIDM5MzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMzk0OlxcdFxcdHB2Y2MtXFx1MDAzZWF0bXZjYyA9IGF0bXZjYztcXG4gMzk1OlxcdFxcbiAzOTY6XFx0XFx0LyogTWF4aW11bSBpcyB6ZXJvLCBzbyB0aGF0IHdlIGNhbiB1c2UgYXRvbWljX2luY19ub3RfemVybygpICovXFxuIDM5NzpcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZwdmNjLVxcdTAwM2VpbmZsaWdodCwgTk9ORV9JTkZMSUdIVCk7XFxuIDM5ODpcXHRcXHRwdmNjLVxcdTAwM2VvbGRfcHVzaCA9IGF0bXZjYy1cXHUwMDNlcHVzaDtcXG4gMzk5OlxcdFxcdHB2Y2MtXFx1MDAzZW9sZF9wb3AgPSBhdG12Y2MtXFx1MDAzZXBvcDtcXG4gNDAwOlxcdFxcdHB2Y2MtXFx1MDAzZW9sZF9vd25lciA9IGF0bXZjYy1cXHUwMDNlb3duZXI7XFxuIDQwMTpcXHRcXHRwdmNjLVxcdTAwM2VvbGRfcmVsZWFzZV9jYiA9IGF0bXZjYy1cXHUwMDNlcmVsZWFzZV9jYjtcXG4gNDAyOlxcdFxcdHB2Y2MtXFx1MDAzZWVuY2FwcyA9IChlbnVtIHBwcG9hdG1fZW5jYXBzKSBiZS5lbmNhcHM7XFxuIDQwMzpcXHRcXHRwdmNjLVxcdTAwM2VjaGFuLnByaXZhdGUgPSBwdmNjO1xcbiA0MDQ6XFx0XFx0cHZjYy1cXHUwMDNlY2hhbi5vcHMgPSBcXHUwMDI2cHBwb2F0bV9vcHM7XFxuIDQwNTpcXHRcXHRwdmNjLVxcdTAwM2VjaGFuLm10dSA9IGF0bXZjYy1cXHUwMDNlcW9zLnR4dHAubWF4X3NkdSAtIFBQUF9IRFJMRU4gLVxcbiA0MDY6XFx0XFx0ICAgIChiZS5lbmNhcHMgPT0gZV92YyA/IDAgOiBMTENfTEVOKTtcXG4gNDA3OlxcdFxcdHRhc2tsZXRfc2V0dXAoXFx1MDAyNnB2Y2MtXFx1MDAzZXdha2V1cF90YXNrbGV0LCBwcHBvYXRtX3dha2V1cF9zZW5kZXIpO1xcbiA0MDg6XFx0XFx0ZXJyID0gcHBwX3JlZ2lzdGVyX2NoYW5uZWwoXFx1MDAyNnB2Y2MtXFx1MDAzZWNoYW4pO1xcbiA0MDk6XFx0XFx0aWYgKGVyciAhPSAwKSB7XFxuIDQxMDpcXHRcXHRcXHRrZnJlZShwdmNjKTtcXG4gNDExOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDQxMjpcXHRcXHR9XFxuIDQxMzpcXHRcXHRhdG12Y2MtXFx1MDAzZXVzZXJfYmFjayA9IHB2Y2M7XFxuIDQxNDpcXHRcXHRhdG12Y2MtXFx1MDAzZXB1c2ggPSBwcHBvYXRtX3B1c2g7XFxuIDQxNTpcXHRcXHRhdG12Y2MtXFx1MDAzZXBvcCA9IHBwcG9hdG1fcG9wO1xcbiA0MTY6XFx0XFx0YXRtdmNjLVxcdTAwM2VyZWxlYXNlX2NiID0gcHBwb2F0bV9yZWxlYXNlX2NiO1xcbiA0MTc6XFx0XFx0X19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTtcXG4gNDE4OlxcdFxcdGF0bXZjYy1cXHUwMDNlb3duZXIgPSBUSElTX01PRFVMRTtcXG4gNDE5OlxcdFxcbiA0MjA6XFx0XFx0LyogcmUtcHJvY2VzcyBldmVyeXRoaW5nIHJlY2VpdmVkIGJldHdlZW4gY29ubmVjdGlvbiBzZXR1cCBhbmRcXG4gNDIxOlxcdFxcdCAgIGJhY2tlbmQgc2V0dXAgKi9cXG4gNDIyOlxcdFxcdHZjY19wcm9jZXNzX3JlY3ZfcXVldWUoYXRtdmNjKTtcXG4gNDIzOlxcdFxcdHJldHVybiAwO1xcbiA0MjQ6XFx0fVxcbiA0MjU6XFx0XFxuIDQyNjpcXHQvKlxcbiA0Mjc6XFx0ICogVGhpcyBoYW5kbGVzIGlvY3RscyBhY3R1YWxseSBwZXJmb3JtZWQgb24gb3VyIHZjYyAtIHdlIG11c3QgcmV0dXJuXFxuIDQyODpcXHQgKiAtRU5PSU9DVExDTUQgZm9yIGFueSB1bnJlY29nbml6ZWQgaW9jdGxcXG4gNDI5OlxcdCAqL1xcbiA0MzA6XFx0c3RhdGljIGludCBwcHBvYXRtX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsXFxuIDQzMTpcXHRcXHR1bnNpZ25lZCBsb25nIGFyZylcXG4gNDMyOlxcdHtcXG4gNDMzOlxcdFxcdHN0cnVjdCBhdG1fdmNjICphdG12Y2MgPSBBVE1fU0Qoc29jayk7XFxuIDQzNDpcXHRcXHR2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZztcXG4gNDM1OlxcdFxcbiA0MzY6XFx0XFx0aWYgKGNtZCAhPSBBVE1fU0VUQkFDS0VORCBcXHUwMDI2XFx1MDAyNiBhdG12Y2MtXFx1MDAzZXB1c2ggIT0gcHBwb2F0bV9wdXNoKVxcbiA0Mzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9JT0NUTENNRDtcXG4gNDM4OlxcdFxcdHN3aXRjaCAoY21kKSB7XFxuIDQzOTpcXHRcXHRjYXNlIEFUTV9TRVRCQUNLRU5EOiB7XFxuIDQ0MDpcXHRcXHRcXHRhdG1fYmFja2VuZF90IGI7XFxuIDQ0MTpcXHRcXHRcXHRpZiAoZ2V0X3VzZXIoYiwgKGF0bV9iYWNrZW5kX3QgX191c2VyICopIGFyZ3ApKVxcbiA0NDI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDQ0MzpcXHRcXHRcXHRpZiAoYiAhPSBBVE1fQkFDS0VORF9QUFApXFxuIDQ0NDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0lPQ1RMQ01EO1xcbiA0NDU6XFx0XFx0XFx0aWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKVxcbiA0NDY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gNDQ3OlxcdFxcdFxcdGlmIChzb2NrLVxcdTAwM2VzdGF0ZSAhPSBTU19DT05ORUNURUQpXFxuIDQ0ODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDQ5OlxcdFxcdFxcdHJldHVybiBwcHBvYXRtX2Fzc2lnbl92Y2MoYXRtdmNjLCBhcmdwKTtcXG4gNDUwOlxcdFxcdFxcdH1cXG4gNDUxOlxcdFxcdGNhc2UgUFBQSU9DR0NIQU46XFxuIDQ1MjpcXHRcXHRcXHRyZXR1cm4gcHV0X3VzZXIocHBwX2NoYW5uZWxfaW5kZXgoXFx1MDAyNmF0bXZjY190b19wdmNjKGF0bXZjYyktXFx1MDAzZVxcbiA0NTM6XFx0XFx0XFx0ICAgIGNoYW4pLCAoaW50IF9fdXNlciAqKSBhcmdwKSA/IC1FRkFVTFQgOiAwO1xcbiA0NTQ6XFx0XFx0Y2FzZSBQUFBJT0NHVU5JVDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDQ6NTcuMzgzNzMzNDAzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQxNzMwNTk2MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBwcHBvYXRtX3NlbmRgIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSdtIGZvY3VzaW5nIG9uIGBwcHBvYXRtX3NlbmRgLiBJIGtub3cgaXQncyB0aGUgYC5zdGFydF94bWl0YCBjYWxsYmFjayB3aXRoaW4gdGhlIGBwcHBvYXRtX29wc2Agc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBQUFAgY2hhbm5lbC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHdoZW4gUFBQIG5lZWRzIHRvIHRyYW5zbWl0IGRhdGEsIGl0IGNhbGxzIGBjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KGNoYW4sIHNrYilgLiBUaGUgY29yZSBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgYW4gQVRNIHNvY2tldCBjYW4gZXZlbiBiZSBzdWNjZXNzZnVsbHkgY3JlYXRlZC4gV2UgYXJlIGRlYWxpbmcgd2l0aCBgc29ja2V0KEFGX0FUTVNWQywgLi4uKWAgb3IgYHNvY2tldChBRl9BVE1QVkMsIC4uLilgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGxldmVyYWdlIHN5emthbGxlci4gSSBmaWd1cmVkIGl0cyBzeXpsYW5nIGRlc2NyaXB0aW9ucyBvciBldmVuIHRoZSBrZXJuZWwncyBzb3VyY2UgbWlnaHQgY29udGFpbiByZWxldmFudCBpbmZvcm1hdGlvbiBhYm91dCBBVE0gYW5kIFBQUCBvdmVyIEFUTS4gSSB3YXMgaG9waW5nIGZvciBzb21ldGhpbmcgdXNlZnVsIGxpa2UgYHBwcG9hdG1gIG9yIGBBVE1fU0VUQkFDS0VORGAgdGhhdCBtaWdodCBzaGVkIGxpZ2h0IG9uIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQuIFRoZW4gSSByZW1lbWJlcmVkIEkgY2FuJ3QgZGlyZWN0bHkgdXNlIHRvb2xzIG9uIHRoZSBzeXpsYW5nLCBhbmQgY2FuJ3QgdXNlIGBncmVwcGVyYCBvbiB0aGUgc3l6bGFuZy4gVGhpcyBsZWQgbWUgdG8gYSBxdWljayBjaGVjayBvZiB0aGUgYXZhaWxhYmxlIHRvb2xzLiBJIG5lZWRlZCB0byBjb25maXJtIHRoYXQgdGhlIHRvb2xzIGZvciB0aGF0IHB1cnBvc2Ugd2VyZSBkZWNsYXJlZCwgYnV0IHRoZXkgd2VyZW4ndC4gV2UncmUgbWlzc2luZyBgcmVhZC1zeXotc3BlY2AgYW5kIGBzeXotZ3JlcHBlcmAuXG5cbkdpdmVuIHRoYXQgSSBkb24ndCBoYXZlIHRob3NlIHRvb2xzIGF2YWlsYWJsZSwgSSBuZWVkIHRvIGFkanVzdCBteSBzdHJhdGVneS4gSSBuZWVkIHRvIHBpdm90IGFuZCBleHBsb3JlIGEgZGlmZmVyZW50IGxpbmUgb2YgaW5xdWlyeSwgb25lIHRoYXQgZG9lc24ndCBkZXBlbmQgb24gc3l6a2FsbGVyIGRpcmVjdGx5LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBhc3Nlc3MgdGhlIHJlYWNoYWJpbGl0eSBvZiBgcHBwb2F0bV9zZW5kYCBpbiBhIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIENhbiBJIGNyZWF0ZSBhbiBBVE0gc29ja2V0IGluIHRoaXMgZW52aXJvbm1lbnQ/IEkgbmVlZCB0byBmb2N1cyBvbiBmaW5kaW5nIG9jY3VycmVuY2VzIG9mIGBBRl9BVE1QVkNgIG9yIGBBRl9BVE1TVkNgIHdpdGhpbiB0aGUgYG5ldC9hdG0vYCBkaXJlY3RvcnkuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDIwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDU6MDEuNTU2Nzk1NjQ2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjcwNjc2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBRl9BVE1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2F0bS9jb21tb24uYz03NTY9aW50IHZjY19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jLTc4NS1cXHRcXHRtZW1zZXQoXFx1MDAyNnB2YywgMCwgc2l6ZW9mKHB2YykpO1xcbm5ldC9hdG0vY29tbW9uLmM6Nzg2OlxcdFxcdHB2Yy5zYXBfZmFtaWx5ID0gQUZfQVRNUFZDO1xcbm5ldC9hdG0vY29tbW9uLmMtNzg3LVxcdFxcdHB2Yy5zYXBfYWRkci5pdGYgPSB2Y2MtXFx1MDAzZWRldi1cXHUwMDNlbnVtYmVyO1xcbi0tXFxubmV0L2F0bS9wcm9jLmM9MTU4PXN0YXRpYyB2b2lkIHZjY19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjKVxcbi0tXFxubmV0L2F0bS9wcm9jLmMtMTY4LVxcdHN3aXRjaCAoc2stXFx1MDAzZXNrX2ZhbWlseSkge1xcbm5ldC9hdG0vcHJvYy5jOjE2OTpcXHRjYXNlIEFGX0FUTVBWQzpcXG5uZXQvYXRtL3Byb2MuYy0xNzAtXFx0XFx0c2VxX3ByaW50ZihzZXEsIFxcXCJQVkNcXFwiKTtcXG4tLVxcbm5ldC9hdG0vcHZjLmM9Mjc9c3RhdGljIGludCBwdmNfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqc29ja2FkZHIsXFxuLS1cXG5uZXQvYXRtL3B2Yy5jLTM3LVxcdGFkZHIgPSAoc3RydWN0IHNvY2thZGRyX2F0bXB2YyAqKXNvY2thZGRyO1xcbm5ldC9hdG0vcHZjLmM6Mzg6XFx0aWYgKGFkZHItXFx1MDAzZXNhcF9mYW1pbHkgIT0gQUZfQVRNUFZDKVxcbm5ldC9hdG0vcHZjLmMtMzktXFx0XFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XFxuLS1cXG5uZXQvYXRtL3B2Yy5jPTg5PXN0YXRpYyBpbnQgcHZjX2dldG5hbWUoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICpzb2NrYWRkcixcXG4tLVxcbm5ldC9hdG0vcHZjLmMtOTgtXFx0bWVtc2V0KGFkZHIsIDAsIHNpemVvZigqYWRkcikpO1xcbm5ldC9hdG0vcHZjLmM6OTk6XFx0YWRkci1cXHUwMDNlc2FwX2ZhbWlseSA9IEFGX0FUTVBWQztcXG5uZXQvYXRtL3B2Yy5jLTEwMC1cXHRhZGRyLVxcdTAwM2VzYXBfYWRkci5pdGYgPSB2Y2MtXFx1MDAzZWRldi1cXHUwMDNlbnVtYmVyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NTowMS42NDM1MDk0ODNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mzc2NTEwNTcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQVRNIFBWQyBDb25uZWN0aXZpdHk6IEEgVGhlb3JldGljYWwgRGVlcCBEaXZlKipcblxuSG1tLCBpbnRlcmVzdGluZyBxdWVzdGlvbi4gQ2FuIHdlIGVzdGFibGlzaCBhbiBBVE0gUFZDIGNvbm5lY3Rpb24gcHVyZWx5IGF0IHRoZSBzb2Z0d2FyZSBsZXZlbCwgd2l0aG91dCBhIGRpcmVjdCBwaHlzaWNhbCBoYXJkd2FyZSBoYW5kc2hha2U/IFRoYXQncyB0aGUgY29yZSBvZiB0aGUgaXNzdWUsIGlzbid0IGl0PyBNeSBpbnR1aXRpb24gbGVhbnMgdG93YXJkcyBhIFwibm8sXCIgYnV0IEkgbmVlZCB0byBiZSBzdXJlIGFuZCBJIGtub3cgdGhlIGNvZGUgaXMgd2hlcmUgdG8gY2hlY2suXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGUgTGludXggQVRNIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBQVkMgY29ubmVjdGlvbiBoYW5kbGluZy4gUmlnaHQsIHdoZXJlIHdvdWxkIHRoZSByZWxldmFudCBsb2dpYyByZXNpZGU/IFRoZSBgbmV0L2F0bWAgZGlyZWN0b3J5Li4uIGFuZCBzcGVjaWZpY2FsbHksIGZvY3VzaW5nIG9uIHRoZSBQVkMgYXNwZWN0cywgYHB2Yy5jYCBzZWVtcyBsaWtlIHRoZSBsaWtlbHkgcGxhY2UgdG8gc3RhcnQuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBgcHZjX2Nvbm5lY3RgIGZ1bmN0aW9uLiBJdCBzaG91bGQgZGV0YWlsIGV4YWN0bHkgaG93IHRob3NlIFBWQyBjb25uZWN0aW9ucyBhcmUgZXN0YWJsaXNoZWQuIFRoYXQgZnVuY3Rpb24gd2lsbCB1bmRvdWJ0ZWRseSBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIGFuc3dlcjsgdGhlIGludGVyYWN0aW9uIGl0IGltcGxlbWVudHMgbWF5IGJlIGVudGlyZWx5IGEgc29mdHdhcmUgYWJzdHJhY3Rpb24sIG9yIG1heSBoYXZlIGEgZGVwZW5kZW5jeSBvbiBhIHBoeXNpY2FsIGxldmVsIHByb3RvY29sIG5lZ290aWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI3MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ1OjA1LjQwODYxODQ0MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2F0bS9wdmMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQvKiBuZXQvYXRtL3B2Yy5jIC0gQVRNIFBWQyBzb2NrZXRzICovXFxuICAgMzpcXHRcXG4gICA0OlxcdC8qIFdyaXR0ZW4gMTk5NS0yMDAwIGJ5IFdlcm5lciBBbG1lc2JlcmdlciwgRVBGTCBMUkMvSUNBICovXFxuICAgNTpcXHRcXG4gICA2OlxcdFxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldC5oXFx1MDAzZVxcdFxcdC8qIHN0cnVjdCBzb2NrZXQsIHN0cnVjdCBwcm90b19vcHMgKi9cXG4gICA4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9hdG0uaFxcdTAwM2VcXHRcXHQvKiBBVE0gc3R1ZmYgKi9cXG4gICA5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9hdG1kZXYuaFxcdTAwM2VcXHQvKiBBVE0gZGV2aWNlcyAqL1xcbiAgMTA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vycm5vLmhcXHUwMDNlXFx0LyogZXJyb3IgY29kZXMgKi9cXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXHQvKiBwcmludGsgKi9cXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0b3BzLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuICAxNjpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXHRcXHQvKiBmb3Igc29ja19ub18qICovXFxuICAxNzpcXHRcXG4gIDE4OlxcdCNpbmNsdWRlIFxcXCJyZXNvdXJjZXMuaFxcXCJcXHRcXHQvKiBkZXZzIGFuZCB2Y2NzICovXFxuICAxOTpcXHQjaW5jbHVkZSBcXFwiY29tbW9uLmhcXFwiXFx0XFx0LyogY29tbW9uIGZvciBQVkNzIGFuZCBTVkNzICovXFxuICAyMDpcXHRcXG4gIDIxOlxcdFxcbiAgMjI6XFx0c3RhdGljIGludCBwdmNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcXG4gIDIzOlxcdHtcXG4gIDI0OlxcdFxcdHJldHVybiAwO1xcbiAgMjU6XFx0fVxcbiAgMjY6XFx0XFxuICAyNzpcXHRzdGF0aWMgaW50IHB2Y19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpzb2NrYWRkcixcXG4gIDI4OlxcdFxcdFxcdCAgICBpbnQgc29ja2FkZHJfbGVuKVxcbiAgMjk6XFx0e1xcbiAgMzA6XFx0XFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cXHUwMDNlc2s7XFxuICAzMTpcXHRcXHRzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjICphZGRyO1xcbiAgMzI6XFx0XFx0c3RydWN0IGF0bV92Y2MgKnZjYztcXG4gIDMzOlxcdFxcdGludCBlcnJvcjtcXG4gIDM0OlxcdFxcbiAgMzU6XFx0XFx0aWYgKHNvY2thZGRyX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXB2YykpXFxuICAzNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gIDM3OlxcdFxcdGFkZHIgPSAoc3RydWN0IHNvY2thZGRyX2F0bXB2YyAqKXNvY2thZGRyO1xcbiAgMzg6XFx0XFx0aWYgKGFkZHItXFx1MDAzZXNhcF9mYW1pbHkgIT0gQUZfQVRNUFZDKVxcbiAgMzk6XFx0XFx0XFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XFxuICA0MDpcXHRcXHRsb2NrX3NvY2soc2spO1xcbiAgNDE6XFx0XFx0dmNjID0gQVRNX1NEKHNvY2spO1xcbiAgNDI6XFx0XFx0aWYgKCF0ZXN0X2JpdChBVE1fVkZfSEFTUU9TLCBcXHUwMDI2dmNjLVxcdTAwM2VmbGFncykpIHtcXG4gIDQzOlxcdFxcdFxcdGVycm9yID0gLUVCQURGRDtcXG4gIDQ0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAgNDU6XFx0XFx0fVxcbiAgNDY6XFx0XFx0aWYgKHRlc3RfYml0KEFUTV9WRl9QQVJUSUFMLCBcXHUwMDI2dmNjLVxcdTAwM2VmbGFncykpIHtcXG4gIDQ3OlxcdFxcdFxcdGlmICh2Y2MtXFx1MDAzZXZwaSAhPSBBVE1fVlBJX1VOU1BFQylcXG4gIDQ4OlxcdFxcdFxcdFxcdGFkZHItXFx1MDAzZXNhcF9hZGRyLnZwaSA9IHZjYy1cXHUwMDNldnBpO1xcbiAgNDk6XFx0XFx0XFx0aWYgKHZjYy1cXHUwMDNldmNpICE9IEFUTV9WQ0lfVU5TUEVDKVxcbiAgNTA6XFx0XFx0XFx0XFx0YWRkci1cXHUwMDNlc2FwX2FkZHIudmNpID0gdmNjLVxcdTAwM2V2Y2k7XFxuICA1MTpcXHRcXHR9XFxuICA1MjpcXHRcXHRlcnJvciA9IHZjY19jb25uZWN0KHNvY2ssIGFkZHItXFx1MDAzZXNhcF9hZGRyLml0ZiwgYWRkci1cXHUwMDNlc2FwX2FkZHIudnBpLFxcbiAgNTM6XFx0XFx0XFx0XFx0ICAgIGFkZHItXFx1MDAzZXNhcF9hZGRyLnZjaSk7XFxuICA1NDpcXHRvdXQ6XFxuICA1NTpcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbiAgNTY6XFx0XFx0cmV0dXJuIGVycm9yO1xcbiAgNTc6XFx0fVxcbiAgNTg6XFx0XFxuICA1OTpcXHRzdGF0aWMgaW50IHB2Y19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpzb2NrYWRkcixcXG4gIDYwOlxcdFxcdFxcdCAgICAgICBpbnQgc29ja2FkZHJfbGVuLCBpbnQgZmxhZ3MpXFxuICA2MTpcXHR7XFxuICA2MjpcXHRcXHRyZXR1cm4gcHZjX2JpbmQoc29jaywgc29ja2FkZHIsIHNvY2thZGRyX2xlbik7XFxuICA2MzpcXHR9XFxuICA2NDpcXHRcXG4gIDY1OlxcdHN0YXRpYyBpbnQgcHZjX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4gIDY2OlxcdFxcdFxcdFxcdCAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcXG4gIDY3OlxcdHtcXG4gIDY4OlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbiAgNjk6XFx0XFx0aW50IGVycm9yO1xcbiAgNzA6XFx0XFxuICA3MTpcXHRcXHRsb2NrX3NvY2soc2spO1xcbiAgNzI6XFx0XFx0ZXJyb3IgPSB2Y2Nfc2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbiAgNzM6XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gIDc0OlxcdFxcdHJldHVybiBlcnJvcjtcXG4gIDc1OlxcdH1cXG4gIDc2OlxcdFxcbiAgNzc6XFx0c3RhdGljIGludCBwdmNfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbiAgNzg6XFx0XFx0XFx0XFx0ICBzb2Nrb3B0X3QgKm9wdClcXG4gIDc5OlxcdHtcXG4gIDgwOlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbiAgODE6XFx0XFx0aW50IGVycm9yO1xcbiAgODI6XFx0XFxuICA4MzpcXHRcXHRsb2NrX3NvY2soc2spO1xcbiAgODQ6XFx0XFx0ZXJyb3IgPSB2Y2NfZ2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0KTtcXG4gIDg1OlxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ1OjA1LjQwODc3NDA0MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzYzMjQ4NjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipUaGUgTmF0dXJlIG9mIGBhdG1fZGV2YCoqXG5cblJpZ2h0LCBhIG1vbWVudCBvZiBjb25jZXB0dWFsIHJlY2FsaWJyYXRpb24uIEknbSBoaXR0aW5nIGEgbWVudGFsIHNuYWcgaGVyZS4gVGhlIHBocmFzZSBcIkFUTSBkZXZpY2VcIiBpcyB0cmlnZ2VyaW5nIGEgYml0IG9mIGEgY2FzY2FkZS4gVGhlIGltbWVkaWF0ZSwgaW5pdGlhbCB0aG91Z2h0IGlzLCBcImNhbiB0aGlzIGVudGlyZSB0aGluZyAqcmVhbGx5KiBiZSBjcmVhdGVkIHB1cmVseSBpbiBzb2Z0d2FyZT9cIiBUaGUgQVRNIGRldmljZSBpcywgaW4gY29tbW9uIHBhcmxhbmNlLCBhIHBoeXNpY2FsIGVudGl0eSwgYSBjb21wbGV4IGVsZWN0cm9tZWNoYW5pY2FsIHN5c3RlbS5cblxuVGhlbiB0aGUgcXVlc3Rpb25zIHN0YXJ0OiBcIldoYXQgZXhhY3RseSBhcmUgd2UgKnJlYWxseSogdGFsa2luZyBhYm91dCB3aGVuIHdlIHNheSAnQVRNIGRldmljZScgaW4gdGhpcyBjb250ZXh0P1wiIFRoZSB0ZXJtLCB3aGVuIHVzZWQgaW4gY2VydGFpbiBmaWVsZHMsIG1heSByZWZlciB0byBhIHB1cmVseSBzb2Z0d2FyZS1iYXNlZCBzaW11bGF0aW9uIG9yIGFic3RyYWN0aW9uIG9mIHRoZSBBVE0gaXRzZWxmLiBUaGlzIHN1Z2dlc3RzIHRvIG1lIHRoYXQgdGhlIG5leHQgbW92ZSBzaG91bGQgaW52b2x2ZSBhIHZlcnkgZGlyZWN0IGluc3BlY3Rpb24uIExldCdzIHNlZSB3aGF0IGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBhIGBhdG1fZGV2YC4gVGhlIGNvZGUgaXRzZWxmIHNob3VsZCBjbGFyaWZ5IGlmIHRoaXMgdmFyaWFibGUgcmVwcmVzZW50cyBhIHNvZnR3YXJlIGNvbXBvbmVudCwgYSBoYXJkd2FyZSBvbmUsIG9yIGEgaHlicmlkLiBJcyBpdCBhIGRldmljZSBkcml2ZXI/IEEgY29uZmlndXJhdGlvbiBvYmplY3Q/IEtub3dpbmcgaXRzIG9yaWdpbiB3aWxsIGN1dCB0aHJvdWdoIGEgbG90IG9mIGFtYmlndWl0eSBhbmQgd2lsbCBhbGxvdyBtZSB0byBhc3Nlc3MgdGhlIHNjb3BlIG9mIHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzgwMiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDU6MDcuNzcyMDI1NjM0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjg2Mjc2MjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0bV9kZXZfcmVnaXN0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hdG0vc29sb3MtcGNpLmM9MTM0OD1zdGF0aWMgaW50IGF0bV9pbml0KHN0cnVjdCBzb2xvc19jYXJkICpjYXJkLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpXFxuLS1cXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYy0xMzU4LVxcbmRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jOjEzNTk6XFx0XFx0Y2FyZC1cXHUwMDNlYXRtZGV2W2ldID0gYXRtX2Rldl9yZWdpc3RlcihcXFwic29sb3MtcGNpXFxcIiwgcGFyZW50LCBcXHUwMDI2ZnBnYV9vcHMsIC0xLCBOVUxMKTtcXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYy0xMzYwLVxcdFxcdGlmICghY2FyZC1cXHUwMDNlYXRtZGV2W2ldKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmM9OTAxPXN0YXRpYyBpbnQgdXNiYXRtX2F0bV9pbml0KHN0cnVjdCB1c2JhdG1fZGF0YSAqaW5zdGFuY2UpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMtOTA5LVxcdCAqIGFib3J0IGlmIGF0bV9kZXYtXFx1MDAzZWRldl9kYXRhIGlzIE5VTEwuICovXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jOjkxMDpcXHRhdG1fZGV2ID0gYXRtX2Rldl9yZWdpc3RlcihpbnN0YW5jZS1cXHUwMDNlZHJpdmVyX25hbWUsXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTkxMS1cXHRcXHRcXHRcXHQgICBcXHUwMDI2aW5zdGFuY2UtXFx1MDAzZXVzYl9pbnRmLVxcdTAwM2VkZXYsIFxcdTAwMjZ1c2JhdG1fYXRtX2Rldm9wcyxcXG4tLVxcbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg9MTUyPWV4dGVybiByd2xvY2tfdCB2Y2Nfc2tsaXN0X2xvY2s7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTE1NS1cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oOjE1NjpzdHJ1Y3QgYXRtX2RldiAqYXRtX2Rldl9yZWdpc3Rlcihjb25zdCBjaGFyICp0eXBlLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0xNTctXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBhdG1kZXZfb3BzICpvcHMsXFxuLS1cXG5uZXQvYXRtL3Jlc291cmNlcy5jPTY5PUVYUE9SVF9TWU1CT0woYXRtX2Rldl9sb29rdXApO1xcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzAtXFxubmV0L2F0bS9yZXNvdXJjZXMuYzo3MTpzdHJ1Y3QgYXRtX2RldiAqYXRtX2Rldl9yZWdpc3Rlcihjb25zdCBjaGFyICp0eXBlLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXFxubmV0L2F0bS9yZXNvdXJjZXMuYy03Mi1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcywgaW50IG51bWJlcixcXG4tLVxcbm5ldC9hdG0vcmVzb3VyY2VzLmMtMTMxLX1cXG5uZXQvYXRtL3Jlc291cmNlcy5jOjEzMjpFWFBPUlRfU1lNQk9MKGF0bV9kZXZfcmVnaXN0ZXIpO1xcbm5ldC9hdG0vcmVzb3VyY2VzLmMtMTMzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NToxMC4wNTgzMTAzMjlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjI4MDc2NzMxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBVE0gRGV2aWNlIERpc2NvdmVyeSoqXG5cbk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIFdoYXQgb3RoZXIgbWV0aG9kcyBhcmUgdXNlZCB0byByZWdpc3RlciBBVE0gZGV2aWNlcywgYmVzaWRlcyB0aGUgb2J2aW91cyBvbmVzPyBEb2VzIHRoZSBzdGFuZGFyZCBMaW51eCBrZXJuZWwgcHJvdmlkZSBhbnkgZHVtbXksIGxvb3BiYWNrLCB2aXJ0dWFsLCBvciBldmVuIFVTQiBBVE0gZGV2aWNlcz8gUGVyaGFwcyBhIGB1c2JhdG1gIG1vZHVsZT8gQ291bGQgU3l6a2FsbGVyIGV2ZW4gZW11bGF0ZSBhIFVTQiBBVE0gZGV2aWNlLCBvciBtYXliZSBldmVuIGEgcmF3IEFUTSBkZXZpY2U/IEl0J3MgYSBiaXQgb2YgYSBzdHJldGNoLCBidXQgd29ydGggaW52ZXN0aWdhdGluZy4gVGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBpbnZlc3RpZ2F0ZSB0aGlzIHdpbGwgYmUgdG8gdXNlIGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciBvdGhlciBpbnN0YW5jZXMgb2YgYGF0bV9kZXZfcmVnaXN0ZXJgLiBUaGF0IHNob3VsZCBoZWxwIG1lIHF1aWNrbHkgaWRlbnRpZnkgdGhlIG90aGVyIHBvdGVudGlhbCBkZXZpY2UgcmVnaXN0cmF0aW9uIG1ldGhvZHMuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NDEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NToxMi4zMzkwODAzMDRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODA3Njg2MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRtX2Rldl9yZWdpc3RlclxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jPTEzNDg9c3RhdGljIGludCBhdG1faW5pdChzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCwgc3RydWN0IGRldmljZSAqcGFyZW50KVxcbi0tXFxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTM1OC1cXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYzoxMzU5OlxcdFxcdGNhcmQtXFx1MDAzZWF0bWRldltpXSA9IGF0bV9kZXZfcmVnaXN0ZXIoXFxcInNvbG9zLXBjaVxcXCIsIHBhcmVudCwgXFx1MDAyNmZwZ2Ffb3BzLCAtMSwgTlVMTCk7XFxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTM2MC1cXHRcXHRpZiAoIWNhcmQtXFx1MDAzZWF0bWRldltpXSkge1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jPTkwMT1zdGF0aWMgaW50IHVzYmF0bV9hdG1faW5pdChzdHJ1Y3QgdXNiYXRtX2RhdGEgKmluc3RhbmNlKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTkwOS1cXHQgKiBhYm9ydCBpZiBhdG1fZGV2LVxcdTAwM2VkZXZfZGF0YSBpcyBOVUxMLiAqL1xcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYzo5MTA6XFx0YXRtX2RldiA9IGF0bV9kZXZfcmVnaXN0ZXIoaW5zdGFuY2UtXFx1MDAzZWRyaXZlcl9uYW1lLFxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy05MTEtXFx0XFx0XFx0XFx0ICAgXFx1MDAyNmluc3RhbmNlLVxcdTAwM2V1c2JfaW50Zi1cXHUwMDNlZGV2LCBcXHUwMDI2dXNiYXRtX2F0bV9kZXZvcHMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oPTE1Mj1leHRlcm4gcndsb2NrX3QgdmNjX3NrbGlzdF9sb2NrO1xcbi0tXFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0xNTUtXFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaDoxNTY6c3RydWN0IGF0bV9kZXYgKmF0bV9kZXZfcmVnaXN0ZXIoY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IGRldmljZSAqcGFyZW50LFxcbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMTU3LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYXRtZGV2X29wcyAqb3BzLFxcbi0tXFxubmV0L2F0bS9yZXNvdXJjZXMuYz02OT1FWFBPUlRfU1lNQk9MKGF0bV9kZXZfbG9va3VwKTtcXG5uZXQvYXRtL3Jlc291cmNlcy5jLTcwLVxcbm5ldC9hdG0vcmVzb3VyY2VzLmM6NzE6c3RydWN0IGF0bV9kZXYgKmF0bV9kZXZfcmVnaXN0ZXIoY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IGRldmljZSAqcGFyZW50LFxcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzItXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBhdG1kZXZfb3BzICpvcHMsIGludCBudW1iZXIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ1OjE0LjkxOTg1ODc4MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDYzNDY3MjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFUTSBEcml2ZXIgRGVlcCBEaXZlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBoZXJlLCBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciB2aWV3IG9mIHRoZSBBVE0gZHJpdmVyIGxhbmRzY2FwZSB3aXRoaW4gdGhpcyBwcm9qZWN0LiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSBjaGVja2luZyB0aGUgb2J2aW91cyBsb2NhdGlvbnMsIGxpa2UgYGRyaXZlcnMvYXRtL2AgYW5kIGBuZXQvYXRtL2AuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcG90ZW50aWFsIGFyZWFzIHdoZXJlIHRoZXkndmUgc3Rhc2hlZCBBVE0gZGV2aWNlIGRyaXZlcnM/IEkgY2FuJ3QgYmUgb3Zlcmxvb2tpbmcgc29tZXRoaW5nIG9idmlvdXMuXG5cblJpZ2h0LCBsZXQncyBhc3N1bWUgdGhleSBtaWdodCBiZSB1c2luZyBzb21lIHNvcnQgb2YgY29tbW9uIHN0cnVjdHVyZS4gVGhhdCBtZWFucyBJIHNob3VsZCBzZWFyY2ggZm9yIGltcGxlbWVudGF0aW9ucyBvZiBgYXRtZGV2X29wc2AuIFNlYXJjaGluZyBmb3IgdGhhdCBzaG91bGQgaWRlbnRpZnkgYWxsIHRoZSBjYW5kaWRhdGUgZHJpdmVycywgb3IgYXQgbGVhc3QgaGVscCBuYXJyb3cgZG93biB0aGUgbGlzdC4gTGV0J3Mgc2VlIHdoYXQgdHVybnMgdXAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM1MiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ1OjE2Ljk4MzMyOTkyMloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwNjUxNTgyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgYXRtZGV2X29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2F0bS9zb2xvcy1wY2kuYz0xMTM3PXN0YXRpYyBpbnQgcHNlbmQoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jLTExNzctXFxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmM6MTE3ODpzdGF0aWMgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgZnBnYV9vcHMgPSB7XFxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTE3OS1cXHQub3BlbiA9XFx0XFx0cG9wZW4sXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmM9MTYwPXN0YXRpYyBpbnQgdXNiYXRtX2F0bV9wcm9jX3JlYWQoc3RydWN0IGF0bV9kZXYgKmF0bV9kZXYsIGxvZmZfdCAqcG9zLCBjaGFyICpwYWdlKTtcXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMtMTYxLVxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYzoxNjI6c3RhdGljIGNvbnN0IHN0cnVjdCBhdG1kZXZfb3BzIHVzYmF0bV9hdG1fZGV2b3BzID0ge1xcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy0xNjMtXFx0LmRldl9jbG9zZVxcdD0gdXNiYXRtX2F0bV9kZXZfY2xvc2UsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oPTEwOD1zdHJ1Y3QgYXRtX2RldiB7XFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaDoxMDk6XFx0Y29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcztcXHQvKiBkZXZpY2Ugb3BlcmF0aW9uczsgTlVMTCBpZiB1bnVzZWQgKi9cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTExMC1cXHRjb25zdCBjaGFyXFx0KnR5cGU7XFx0XFx0LyogZGV2aWNlIHR5cGUgbmFtZSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0xMjgtXFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaDoxMjk6c3RydWN0IGF0bWRldl9vcHMgeyAvKiBvbmx5IHNlbmQgaXMgcmVxdWlyZWQgKi9cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTEzMC1cXHR2b2lkICgqZGV2X2Nsb3NlKShzdHJ1Y3QgYXRtX2RldiAqZGV2KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg9MTU2PXN0cnVjdCBhdG1fZGV2ICphdG1fZGV2X3JlZ2lzdGVyKGNvbnN0IGNoYXIgKnR5cGUsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oOjE1NzpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcyxcXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTE1OC1cXHRcXHRcXHRcXHQgaW50IG51bWJlciwgLyogLTEgPT0gcGljayBmaXJzdCBhdmFpbGFibGUgKi9cXG4tLVxcbm5ldC9hdG0vcmVzb3VyY2VzLmM9NzE9c3RydWN0IGF0bV9kZXYgKmF0bV9kZXZfcmVnaXN0ZXIoY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IGRldmljZSAqcGFyZW50LFxcbm5ldC9hdG0vcmVzb3VyY2VzLmM6NzI6XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBhdG1kZXZfb3BzICpvcHMsIGludCBudW1iZXIsXFxubmV0L2F0bS9yZXNvdXJjZXMuYy03My1cXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyAqZmxhZ3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ1OjE5LjI4OTg1MzkwNFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzYxOTY0OTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBBVE0gRHJpdmVyIE1ha2VmaWxlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gV2Ugd2VyZSBmb2N1c2luZyBvbiBYLCBZLCBhbmQgWiwgYnV0IEkndmUgZ290IGEgbmFnZ2luZyBmZWVsaW5nIHdlJ3JlIG1pc3Npbmcgc29tZXRoaW5nIGNydWNpYWwgaW4gdGhpcyBhcmVhLiBTcGVjaWZpY2FsbHksIHdoYXQgYWJvdXQgdGhlIEFUTSBkcml2ZXI/IFdlJ3ZlIGdvdCB0byBlbnN1cmUgdGhhdCBpdCBhbGlnbnMgd2l0aCBldmVyeXRoaW5nIGVsc2UuIExldCdzIHNlZS4uLiBJJ2xsIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvYXRtL2AgZGlyZWN0b3J5LiBSaWdodCwgbGV0J3Mgb3BlbiB0aGF0IGBNYWtlZmlsZWAgYW5kIHF1aWNrbHkgY29uZmlybSB0aGF0IGl0J3MgcHJvcGVybHkgYnVpbHQgYW5kIGludGVncmF0ZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkcml2ZXIgaXNuJ3QgZ29pbmcgdG8gY2F1c2UgaXNzdWVzIGRvd24gdGhlIGxpbmUsIHNvIEknbGwgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgZmxhZ3MgYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE0MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ1OjIxLjA1MTgyMjk2M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTQxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2F0bS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdFxcbiAgIDM6XFx0b2JqLSQoQ09ORklHX0FUTV9TT0xPUylcXHRcXHQrPSBzb2xvcy1wY2kub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NToyMS4wNTE5MTUwMjNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mzk0ODA5NjMwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVU0IgRnV6emluZyBhbmQgQVRNIFNvY2tldCBRdWlya3MqKlxuXG5Pa2F5LCBzbyBzeXprYWxsZXIgaGFzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcyB0aHJvdWdoIFJhdyBHYWRnZXQgYW5kIER1bW15IEhDRCDigJMgdGhhdCdzIGV4Y2VsbGVudCEgQnV0IGEgdGhvdWdodCBqdXN0IHN0cnVjayBtZTogY2FuIEFUTSBzb2NrZXRzLCBzcGVjaWZpY2FsbHksIGJlIGNvbm5lY3RlZCB3aXRob3V0IGFuIGFjdHVhbCBkZXZpY2UgcHJlc2VudD8gSSB3b25kZXIgd2hhdCBoYXBwZW5zIGluIHRoZSBgdmNjX2Nvbm5lY3RgIGZ1bmN0aW9uLi4uIFRoaXMgZmVlbHMgbGlrZSBhIHBvdGVudGlhbCBhcmVhIGZvciBleHBsb3JhdGlvbiwgc28gbGV0J3MgZGlnIGludG8gYG5ldC9hdG0vY29tbW9uLmNgIGFuZCBjaGVjayBvdXQgdGhlIGB2Y2NfY29ubmVjdGAgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGxvZ2ljIHRvIHNlZSBpZiB0aGlzIGNvdWxkIGJlIGV4cGxvaXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzODksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ1OjI1LjAwMDAxMzY1M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDA1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYXRtL2NvbW1vbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4MDpcXHRcXHRtb2R1bGVfcHV0KHZjYy1cXHUwMDNlb3duZXIpO1xcbiAxODE6XFx0XFxuIDE4MjpcXHRcXHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSkpICE9IE5VTEwpIHtcXG4gMTgzOlxcdFxcdFxcdGF0bV9yZXR1cm4odmNjLCBza2ItXFx1MDAzZXRydWVzaXplKTtcXG4gMTg0OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAxODU6XFx0XFx0fVxcbiAxODY6XFx0XFxuIDE4NzpcXHRcXHRpZiAodmNjLVxcdTAwM2VkZXYgXFx1MDAyNlxcdTAwMjYgdmNjLVxcdTAwM2VkZXYtXFx1MDAzZW9wcy1cXHUwMDNlb3duZXIpIHtcXG4gMTg4OlxcdFxcdFxcdG1vZHVsZV9wdXQodmNjLVxcdTAwM2VkZXYtXFx1MDAzZW9wcy1cXHUwMDNlb3duZXIpO1xcbiAxODk6XFx0XFx0XFx0YXRtX2Rldl9wdXQodmNjLVxcdTAwM2VkZXYpO1xcbiAxOTA6XFx0XFx0fVxcbiAxOTE6XFx0XFxuIDE5MjpcXHRcXHR2Y2NfcmVtb3ZlX3NvY2tldChzayk7XFxuIDE5MzpcXHR9XFxuIDE5NDpcXHRcXG4gMTk1OlxcdGludCB2Y2NfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbiAxOTY6XFx0e1xcbiAxOTc6XFx0XFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cXHUwMDNlc2s7XFxuIDE5ODpcXHRcXG4gMTk5OlxcdFxcdGlmIChzaykge1xcbiAyMDA6XFx0XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4gMjAxOlxcdFxcdFxcdHZjY19kZXN0cm95X3NvY2tldChzb2NrLVxcdTAwM2Vzayk7XFxuIDIwMjpcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbiAyMDM6XFx0XFx0XFx0c29ja19wdXQoc2spO1xcbiAyMDQ6XFx0XFx0fVxcbiAyMDU6XFx0XFxuIDIwNjpcXHRcXHRyZXR1cm4gMDtcXG4gMjA3OlxcdH1cXG4gMjA4OlxcdFxcbiAyMDk6XFx0dm9pZCB2Y2NfcmVsZWFzZV9hc3luYyhzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBpbnQgcmVwbHkpXFxuIDIxMDpcXHR7XFxuIDIxMTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSBza19hdG0odmNjKTtcXG4gMjEyOlxcdFxcbiAyMTM6XFx0XFx0c2V0X2JpdChBVE1fVkZfQ0xPU0UsIFxcdTAwMjZ2Y2MtXFx1MDAzZWZsYWdzKTtcXG4gMjE0OlxcdFxcdHNrLVxcdTAwM2Vza19zaHV0ZG93biB8PSBSQ1ZfU0hVVERPV047XFxuIDIxNTpcXHRcXHRzay1cXHUwMDNlc2tfZXJyID0gLXJlcGx5O1xcbiAyMTY6XFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XFxuIDIxNzpcXHR9XFxuIDIxODpcXHRFWFBPUlRfU1lNQk9MKHZjY19yZWxlYXNlX2FzeW5jKTtcXG4gMjE5OlxcdFxcbiAyMjA6XFx0dm9pZCB2Y2NfcHJvY2Vzc19yZWN2X3F1ZXVlKHN0cnVjdCBhdG1fdmNjICp2Y2MpXFxuIDIyMTpcXHR7XFxuIDIyMjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHF1ZXVlLCAqcnE7XFxuIDIyMzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdG1wO1xcbiAyMjQ6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gMjI1OlxcdFxcbiAyMjY6XFx0XFx0X19za2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZxdWV1ZSk7XFxuIDIyNzpcXHRcXHRycSA9IFxcdTAwMjZza19hdG0odmNjKS1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZTtcXG4gMjI4OlxcdFxcbiAyMjk6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnJxLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIDIzMDpcXHRcXHRza2JfcXVldWVfc3BsaWNlX2luaXQocnEsIFxcdTAwMjZxdWV1ZSk7XFxuIDIzMTpcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZycS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiAyMzI6XFx0XFxuIDIzMzpcXHRcXHRza2JfcXVldWVfd2Fsa19zYWZlKFxcdTAwMjZxdWV1ZSwgc2tiLCB0bXApIHtcXG4gMjM0OlxcdFxcdFxcdF9fc2tiX3VubGluayhza2IsIFxcdTAwMjZxdWV1ZSk7XFxuIDIzNTpcXHRcXHRcXHR2Y2MtXFx1MDAzZXB1c2godmNjLCBza2IpO1xcbiAyMzY6XFx0XFx0fVxcbiAyMzc6XFx0fVxcbiAyMzg6XFx0RVhQT1JUX1NZTUJPTCh2Y2NfcHJvY2Vzc19yZWN2X3F1ZXVlKTtcXG4gMjM5OlxcdFxcbiAyNDA6XFx0dm9pZCBhdG1fZGV2X3NpZ25hbF9jaGFuZ2Uoc3RydWN0IGF0bV9kZXYgKmRldiwgY2hhciBzaWduYWwpXFxuIDI0MTpcXHR7XFxuIDI0MjpcXHRcXHRwcl9kZWJ1ZyhcXFwiJXMgc2lnbmFsPSVkIGRldj0lcCBudW1iZXI9JWQgZGV2LVxcdTAwM2VzaWduYWw9JWRcXFxcblxcXCIsXFxuIDI0MzpcXHRcXHRcXHRfX2Z1bmNfXywgc2lnbmFsLCBkZXYsIGRldi1cXHUwMDNlbnVtYmVyLCBkZXYtXFx1MDAzZXNpZ25hbCk7XFxuIDI0NDpcXHRcXG4gMjQ1OlxcdFxcdC8qIGF0bSBkcml2ZXIgc2VuZGluZyBpbnZhbGlkIHNpZ25hbCAqL1xcbiAyNDY6XFx0XFx0V0FSTl9PTihzaWduYWwgXFx1MDAzYyBBVE1fUEhZX1NJR19MT1NUIHx8IHNpZ25hbCBcXHUwMDNlIEFUTV9QSFlfU0lHX0ZPVU5EKTtcXG4gMjQ3OlxcdFxcbiAyNDg6XFx0XFx0aWYgKGRldi1cXHUwMDNlc2lnbmFsID09IHNpZ25hbClcXG4gMjQ5OlxcdFxcdFxcdHJldHVybjsgLyogbm8gY2hhbmdlICovXFxuIDI1MDpcXHRcXG4gMjUxOlxcdFxcdGRldi1cXHUwMDNlc2lnbmFsID0gc2lnbmFsO1xcbiAyNTI6XFx0XFxuIDI1MzpcXHRcXHRhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbihcXHUwMDI2YXRtX2Rldl9ub3RpZnlfY2hhaW4sIHNpZ25hbCwgZGV2KTtcXG4gMjU0OlxcdH1cXG4gMjU1OlxcdEVYUE9SVF9TWU1CT0woYXRtX2Rldl9zaWduYWxfY2hhbmdlKTtcXG4gMjU2OlxcdFxcbiAyNTc6XFx0dm9pZCBhdG1fZGV2X3JlbGVhc2VfdmNjcyhzdHJ1Y3QgYXRtX2RldiAqZGV2KVxcbiAyNTg6XFx0e1xcbiAyNTk6XFx0XFx0aW50IGk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ1OjI1LjAwMDEyMjg5M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTExMDMzNDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBpczpcblxuKipMb2NhdGluZyB0aGUgYHZjY19jb25uZWN0YCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBgdmNjX2Nvbm5lY3RgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIGl0IHdvdWxkIGJlIGluIGEgY29tbW9uIGFyZWEgZm9yIG5ldHdvcmsgb3BlcmF0aW9ucywgYW5kIGJhc2VkIG9uIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGUga2VybmVsLCBhIGZpbGUgbmFtZWQgYGNvbW1vbi5jYCB3aXRoaW4gYSBgbmV0L2F0bWAgZGlyZWN0b3J5IHdvdWxkIGJlIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gR2l2ZW4gdGhlIEFUTSBjb250ZXh0LCB0aGF0IHdvdWxkIGFsc28gYmUgYSB2ZXJ5IHJlYXNvbmFibGUgcGxhY2UgdG8gc3RhcnQgbG9va2luZywgc2luY2UgVkNDIGNvbm5lY3Rpb25zIGFyZSBmdW5kYW1lbnRhbCB0byBob3cgdGhhdCBwcm90b2NvbCBvcGVyYXRlcy4gTGV0J3MgaGVhZCB0aGVyZSBhbmQgc2VlIHdoYXQncyBpbiBgbmV0L2F0bS9jb21tb24uY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Nzg3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NToyNi41MTExNTk1NTJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzM5MjQ4NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHZjY19jb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9hdG0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vY29tbW9uLmM9Mzc0PXN0YXRpYyBpbnQgX192Y2NfY29ubmVjdChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3QgYXRtX2RldiAqZGV2LCBzaG9ydCB2cGksXFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jLTQ0OS1cXG5uZXQvYXRtL2NvbW1vbi5jOjQ1MDppbnQgdmNjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGl0Ziwgc2hvcnQgdnBpLCBpbnQgdmNpKVxcbm5ldC9hdG0vY29tbW9uLmMtNDUxLXtcXG4tLVxcbm5ldC9hdG0vY29tbW9uLmg9MTU9aW50IHZjY19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spO1xcbm5ldC9hdG0vY29tbW9uLmg6MTY6aW50IHZjY19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBpdGYsIHNob3J0IHZwaSwgaW50IHZjaSk7XFxubmV0L2F0bS9jb21tb24uaC0xNy1pbnQgdmNjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDU6MjcuOTg1MDkxOTA2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwODkyNDU0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHZjY19jb25uZWN0YCoqXG5cbk9rYXksIGxldCdzIGdldCByaWdodCB0byBpdC4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgYHZjY19jb25uZWN0YCBpbiBgbmV0L2F0bS9jb21tb24uY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgQVRNIGNvbm5lY3Rpb24gcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGhvdyB0aGVzZSBWQ0NzIGFyZSBlc3RhYmxpc2hlZC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgaG93IHRoZSBjb25uZWN0aW9uIGlzIHNldCB1cCBhdCB0aGlzIGxheWVyLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJmYWNlcyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIG9yIGRyaXZlciBhbmQgd2hhdCBzb3J0IG9mIHJlc291cmNlIGFsbG9jYXRpb24gYW5kIHBhcmFtZXRlciBwYXNzaW5nIGl0IGVudGFpbHMuIFRoZXJlJ3MgcHJvYmFibHkgc29tZSBjcnVjaWFsIHNpZ25hbGluZyBnb2luZyBvbiBoZXJlLiBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxODcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NTozMC4wNzQzMzk4OTJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2F0bS9jb21tb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NDU6XFx0XFx0LyogZW5zdXJlIHdlIGdldCBkZXYgbW9kdWxlIHJlZiBjb3VudCBjb3JyZWN0ICovXFxuIDQ0NjpcXHRcXHR2Y2MtXFx1MDAzZWRldiA9IE5VTEw7XFxuIDQ0NzpcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIDQ0ODpcXHR9XFxuIDQ0OTpcXHRcXG4gNDUwOlxcdGludCB2Y2NfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaXRmLCBzaG9ydCB2cGksIGludCB2Y2kpXFxuIDQ1MTpcXHR7XFxuIDQ1MjpcXHRcXHRzdHJ1Y3QgYXRtX2RldiAqZGV2O1xcbiA0NTM6XFx0XFx0c3RydWN0IGF0bV92Y2MgKnZjYyA9IEFUTV9TRChzb2NrKTtcXG4gNDU0OlxcdFxcdGludCBlcnJvcjtcXG4gNDU1OlxcdFxcbiA0NTY6XFx0XFx0cHJfZGVidWcoXFxcIih2cGkgJWQsIHZjaSAlZClcXFxcblxcXCIsIHZwaSwgdmNpKTtcXG4gNDU3OlxcdFxcdGlmIChzb2NrLVxcdTAwM2VzdGF0ZSA9PSBTU19DT05ORUNURUQpXFxuIDQ1ODpcXHRcXHRcXHRyZXR1cm4gLUVJU0NPTk47XFxuIDQ1OTpcXHRcXHRpZiAoc29jay1cXHUwMDNlc3RhdGUgIT0gU1NfVU5DT05ORUNURUQpXFxuIDQ2MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDYxOlxcdFxcdGlmICghKHZwaSB8fCB2Y2kpKVxcbiA0NjI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ2MzpcXHRcXG4gNDY0OlxcdFxcdGlmICh2cGkgIT0gQVRNX1ZQSV9VTlNQRUMgXFx1MDAyNlxcdTAwMjYgdmNpICE9IEFUTV9WQ0lfVU5TUEVDKVxcbiA0NjU6XFx0XFx0XFx0Y2xlYXJfYml0KEFUTV9WRl9QQVJUSUFMLCBcXHUwMDI2dmNjLVxcdTAwM2VmbGFncyk7XFxuIDQ2NjpcXHRcXHRlbHNlXFxuIDQ2NzpcXHRcXHRcXHRpZiAodGVzdF9iaXQoQVRNX1ZGX1BBUlRJQUwsIFxcdTAwMjZ2Y2MtXFx1MDAzZWZsYWdzKSlcXG4gNDY4OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0Njk6XFx0XFx0cHJfZGVidWcoXFxcIihUWDogY2wgJWQsYncgJWQtJWQsc2R1ICVkOyBcXFwiXFxuIDQ3MDpcXHRcXHRcXHQgXFxcIlJYOiBjbCAlZCxidyAlZC0lZCxzZHUgJWQsQUFMICVzJWQpXFxcXG5cXFwiLFxcbiA0NzE6XFx0XFx0XFx0IHZjYy1cXHUwMDNlcW9zLnR4dHAudHJhZmZpY19jbGFzcywgdmNjLVxcdTAwM2Vxb3MudHh0cC5taW5fcGNyLFxcbiA0NzI6XFx0XFx0XFx0IHZjYy1cXHUwMDNlcW9zLnR4dHAubWF4X3BjciwgdmNjLVxcdTAwM2Vxb3MudHh0cC5tYXhfc2R1LFxcbiA0NzM6XFx0XFx0XFx0IHZjYy1cXHUwMDNlcW9zLnJ4dHAudHJhZmZpY19jbGFzcywgdmNjLVxcdTAwM2Vxb3Mucnh0cC5taW5fcGNyLFxcbiA0NzQ6XFx0XFx0XFx0IHZjYy1cXHUwMDNlcW9zLnJ4dHAubWF4X3BjciwgdmNjLVxcdTAwM2Vxb3Mucnh0cC5tYXhfc2R1LFxcbiA0NzU6XFx0XFx0XFx0IHZjYy1cXHUwMDNlcW9zLmFhbCA9PSBBVE1fQUFMNSA/IFxcXCJcXFwiIDpcXG4gNDc2OlxcdFxcdFxcdCB2Y2MtXFx1MDAzZXFvcy5hYWwgPT0gQVRNX0FBTDAgPyBcXFwiXFxcIiA6IFxcXCIgPz8/IGNvZGUgXFxcIixcXG4gNDc3OlxcdFxcdFxcdCB2Y2MtXFx1MDAzZXFvcy5hYWwgPT0gQVRNX0FBTDAgPyAwIDogdmNjLVxcdTAwM2Vxb3MuYWFsKTtcXG4gNDc4OlxcdFxcdGlmICghdGVzdF9iaXQoQVRNX1ZGX0hBU1FPUywgXFx1MDAyNnZjYy1cXHUwMDNlZmxhZ3MpKVxcbiA0Nzk6XFx0XFx0XFx0cmV0dXJuIC1FQkFERkQ7XFxuIDQ4MDpcXHRcXHRpZiAodmNjLVxcdTAwM2Vxb3MudHh0cC50cmFmZmljX2NsYXNzID09IEFUTV9BTllDTEFTUyB8fFxcbiA0ODE6XFx0XFx0ICAgIHZjYy1cXHUwMDNlcW9zLnJ4dHAudHJhZmZpY19jbGFzcyA9PSBBVE1fQU5ZQ0xBU1MpXFxuIDQ4MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDgzOlxcdFxcdGlmIChsaWtlbHkoaXRmICE9IEFUTV9JVEZfQU5ZKSkge1xcbiA0ODQ6XFx0XFx0XFx0ZGV2ID0gdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoYXRtX2Rldl9sb29rdXAoaXRmKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDU6MzAuMDc0NDIzMTkyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3OTEyOTE3NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgbmV0d29ya2luZyBleHBlcnQ6XG5cbioqUFBQb0FUTSBhbmQgU3l6a2FsbGVyIC0gV2hlcmUncyB0aGUgQ292ZXJhZ2U/KipcblxuSG1tLCBJJ20gc2VlaW5nIGBhdG1fZGV2X2xvb2t1cChpdGYpYCDigJMgaW50ZXJlc3RpbmcuIEJ1dCBteSBicmFpbiBpbW1lZGlhdGVseSBqdW1wcyB0bywgXCJIb3cgZXhhY3RseSBpcyBzeXprYWxsZXIgdGVzdGluZyBQUFBvQVRNPyBJIGhhdmVuJ3Qgc2VlbiBtdWNoIG9mIHRoYXQgbGF0ZWx5LlwiIE15IGV4cGVyaWVuY2UgaGFzIG1lIHRoaW5raW5nLCBcInN5emthbGxlciBpcyBncmVhdCwgYnV0IGRpZCBpdCBldmVyIHJlYWxseSBnZXQgZGVlcCBpbnRvIFBQUG9BVE0/IEkgbmVlZCB0byBjaGVjay5cIiBMZXQgbWUganVzdCBkaWcgdGhyb3VnaCB0aGUgR2l0IGhpc3Rvcnkg4oCTIHByb2JhYmx5IGxvb2sgZm9yIGJ1ZyByZXBvcnRzIHJlbGF0ZWQgdG8gc3l6a2FsbGVyIGFuZCBwcHBvYXRtLiBUaGF0IHNob3VsZCBwb2ludCBtZSBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgdGVzdGluZyBjb3ZlcmFnZSBmb3IgdGhpcyBwcm90b2NvbC4gVGhlcmUgY291bGQgYmUgc29tZSBpc3N1ZXMgbHVya2luZyB0aGF0IEkgYW0gYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjA5LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NTozMS44NjU3MTgwNDZaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1OTc4MzM4MzUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5emJvdC4qcHBwb2F0bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDU6MzQuNDYzNTYwNTIxWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMwNTgwMDM4ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgUFBQb0FUTSBDb21taXQgTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb21taXQgaGlzdG9yeSByZWxhdGVkIHRvIGBuZXQvYXRtL3BwcG9hdG0uY2AuIE15IGluaXRpYWwgaW5zdGluY3Qgd2FzIHRvIHJlYWNoIGZvciBhIHRvb2wgbGlrZSBncmVwcGVyLCBidXQgd2FpdCwgZ3JlcHBlciBpcyBtb3JlIGZvciBzZWFyY2hpbmcgKndpdGhpbiogZmlsZXMsIG5vdCB0aGUgY29tbWl0IGxvZyBpdHNlbGYuIFRoYXQncyBhIGNsYXNzaWMgbWlzZmlyZSwgSSBuZWVkIHRvIGZvY3VzIG9uIGdpdCBsb2cuXG5cbkNhbiBJIGRpcmVjdGx5IHNlYXJjaCB0aGUgZ2l0IGxvZyBmb3IgcmVsZXZhbnQgZW50cmllcz8gUmlnaHQsIHRoZXJlIGlzbid0IGEgZGVkaWNhdGVkIFwiZ3JlcHBlclwiIGVxdWl2YWxlbnQgZm9yIGBnaXQgbG9nYCBkaXJlY3RseS4gSG1tbSwgY291bGQgSSBzZWFyY2ggZm9yIHNvbWV0aGluZyBzcGVjaWZpYywgbGlrZSBcIlJlcG9ydGVkLWJ5OiBzeXpib3RcIiB3aXRoaW4gdGhhdCBzcGVjaWZpYyBmaWxlIG9yIGl0cyBjb21tZW50cywgb3IgbWF5YmUgdGhlIGNvZGUgaXRzZWxmPyBUaGF0IG1pZ2h0IHlpZWxkIHNvbWV0aGluZy4gU3RpbGwsIHJ1bm5pbmcgYGdpdCBsb2dgIGRpcmVjdGx5IGlzbid0IGFuIG9wdGlvbi5cblxuQWxyaWdodCwgd2hhdCBhYm91dCBhIGJyb2FkZXIgc2VhcmNoIGZvciBcInBwcG9hdG1cIiBhY3Jvc3Mga2VybmVsIGNvbW1pdHM/IE5vLCB3YWl0Li4uIGdyZXBwZXIgaXMgZmlsZS1iYXNlZCwgc28gdGhhdCB3b24ndCB3b3JrIGVpdGhlci4gT2theSwgbmV3IHBsYW46IExldCdzIGdyZXAgZm9yIFwicHBwb2F0bVwiIGluIHRoZSBgRG9jdW1lbnRhdGlvbi9gIGRpcmVjdG9yeSBvciBwZXJoYXBzIHRoZSBgbmV0L2F0bS9gIGRpcmVjdG9yeS4gVGhhdCdzIG1vcmUgcmVhc29uYWJsZSBhbmQgYSBxdWljayB3YXkgdG8gZGlzY292ZXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0NTcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDU6MzcuNTIxNTY4MzUzWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTgwNTYzMzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBwcG9hdG1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiRG9jdW1lbnRhdGlvbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ1OjM3LjgzOTYzMjc5MloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDc1MjAwMjA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipHcmFzcGluZyB0aGUgU2NvcGUgb2YgQVRNX0JBQ0tFTkRfUFBQKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYEFUTV9CQUNLRU5EX1BQUGAgaXMgdXRpbGl6ZWQgd2l0aGluIHRoaXMgY29kZWJhc2UuIEdpdmVuIG15IGV4cGVyaWVuY2UsIGEgZnVsbCBjb2RlIHJldmlldyB0byBsb2NhdGUgZXZlcnkgaW5zdGFuY2Ugd291bGQgYmUgb3ZlcmtpbGwsIHVubGVzcyB0aGVyZSdzIHNvbWUgZXZpZGVuY2Ugb2YgYSBwYXJ0aWN1bGFybHkgZWx1c2l2ZSBidWcuIEEgZ29vZCBzdGFydGluZyBwb2ludCwgYW5kIHVzdWFsbHkgdGhlIGZhc3Rlc3QsIG1vc3QgZWZmZWN0aXZlIHdheSB0byBnZXQgYW4gb3ZlcnZpZXcsIGlzIGEgYGdyZXBgLiBJIHdhbnQgdG8gc2VhcmNoIHRoZSBlbnRpcmUgcHJvamVjdCwgc28gSSdsbCBuZWVkIHRvIHNwZWNpZnkgdGhhdCBjbGVhcmx5LiBXaXRoIGEgZ29vZCBgZ3JlcGAgY29tbWFuZCwgSSBzaG91bGQgYmUgYWJsZSB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgZmlsZXMgYW5kIGNvbnRleHRzIHdoZXJlIHRoaXMgY29uc3RhbnQgb3IgbWFjcm8gaXMgZGVmaW5lZCBvciB1c2VkLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgYW55IHNwZWNpZmljIGZpbGVzIHdhcnJhbnQgbW9yZSBpbi1kZXB0aCBhdHRlbnRpb24gYmFzZWQgb24gdGhlIGluaXRpYWwgb3V0cHV0LiBUaGlzIGlzIGEgc3RhbmRhcmQgYW5kIGVmZmljaWVudCB3YXkgdG8gYmVnaW4gYW4gaW52ZXN0aWdhdGlvbiBpbnRvIGFuIHVuZmFtaWxpYXIgY29kZWJhc2UgYXJlYSwgZXNwZWNpYWxseSB3aGVuIGZvY3VzaW5nIG9uIGEgc3BlY2lmaWMgbWFjcm8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTAxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDU6NDguNTkxNjM3ODc2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjg2NTk2Njc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFUTV9CQUNLRU5EX1BQUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvYXRtZGV2Lmg9NDg9c3RydWN0IGF0bV9kZXZfc3RhdHMge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2F0bWRldi5oLTk0LSNkZWZpbmUgQVRNX0JBQ0tFTkRfUkFXXFx0XFx0MFxcdFxcbmluY2x1ZGUvdWFwaS9saW51eC9hdG1kZXYuaDo5NTojZGVmaW5lIEFUTV9CQUNLRU5EX1BQUFxcdFxcdDFcXHQvKiBQUFBvQVRNIC0gUkZDMjM2NCAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9hdG1kZXYuaC05Ni0jZGVmaW5lIEFUTV9CQUNLRU5EX0JSMjY4NFxcdDJcXHQvKiBCcmlkZ2VkIFJGQzE0ODMvMjY4NCAqL1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2F0bXBwcC5oPTIwPXN0cnVjdCBhdG1fYmFja2VuZF9wcHAge1xcbmluY2x1ZGUvdWFwaS9saW51eC9hdG1wcHAuaDoyMTpcXHRhdG1fYmFja2VuZF90XFx0YmFja2VuZF9udW07XFx0LyogQVRNX0JBQ0tFTkRfUFBQICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L2F0bXBwcC5oLTIyLVxcdGludFxcdFxcdGVuY2FwcztcXHRcXHQvKiBQUFBPQVRNX0VOQ0FQU18qICovXFxuLS1cXG5uZXQvYXRtL2lvY3RsLmM9NDM9c3RhdGljIGludCBkb192Y2NfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbm5ldC9hdG0vaW9jdGwuYy05My1cXHRcXHRzd2l0Y2ggKGJhY2tlbmQpIHtcXG5uZXQvYXRtL2lvY3RsLmM6OTQ6XFx0XFx0Y2FzZSBBVE1fQkFDS0VORF9QUFA6XFxubmV0L2F0bS9pb2N0bC5jLTk1LVxcdFxcdFxcdHJlcXVlc3RfbW9kdWxlKFxcXCJwcHBvYXRtXFxcIik7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYz00MzA9c3RhdGljIGludCBwcHBvYXRtX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy00NDItXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxubmV0L2F0bS9wcHBvYXRtLmM6NDQzOlxcdFxcdGlmIChiICE9IEFUTV9CQUNLRU5EX1BQUClcXG5uZXQvYXRtL3BwcG9hdG0uYy00NDQtXFx0XFx0XFx0cmV0dXJuIC1FTk9JT0NUTENNRDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDU6NTAuODc4MjQyMjcxWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1NzQyMTc5MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBBVE0gSU9DVEwgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgbWludXRlLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoaXMuIExldCdzIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgSU9DVEwgaGFuZGxpbmcgZm9yIEFUTSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIGNvZGUgaW4gYG5ldC9hdG0vaW9jdGwuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIG1hbmFnZXMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIEFUTSBuZXR3b3JrIGludGVyZmFjZS4gVGhlIHN0YXJ0aW5nIHBvaW50IGlzIGxpa2VseSB0byBiZSB0aGUgYGRvX3ZjY19pb2N0bGAgZnVuY3Rpb24gd2l0aGluIHRoYXQgZmlsZS4gVGhhdCdzIHRoZSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIHdoZW4gYSBzb2NrZXQgSU9DVEwgb3BlcmF0aW9uIGdldHMgY2FsbGVkLiBMZXQncyBzZWUgd2hhdCB0aGF0J3MgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTc4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDU6NTQuNDUyNDY1NjkxWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYXRtL2lvY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzA6XFx0XFx0XFx0aWYgKHNvY2stXFx1MDAzZXN0YXRlICE9IFNTX0NPTk5FQ1RFRCkge1xcbiAgNzE6XFx0XFx0XFx0XFx0ZXJyb3IgPSAtRUlOVkFMO1xcbiAgNzI6XFx0XFx0XFx0XFx0Z290byBkb25lO1xcbiAgNzM6XFx0XFx0XFx0fVxcbiAgNzQ6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jayk7XFxuICA3NTpcXHRcXHRcXHRza2IgPSBza2JfcGVlayhcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xcbiAgNzY6XFx0XFx0XFx0YW1vdW50ID0gc2tiID8gc2tiLVxcdTAwM2VsZW4gOiAwO1xcbiAgNzc6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTtcXG4gIDc4OlxcdFxcdFxcdGVycm9yID0gcHV0X3VzZXIoYW1vdW50LCAoaW50IF9fdXNlciAqKWFyZ3ApO1xcbiAgNzk6XFx0XFx0XFx0Z290byBkb25lO1xcbiAgODA6XFx0XFx0fVxcbiAgODE6XFx0XFx0Y2FzZSBBVE1fU0VUU0M6XFxuICA4MjpcXHRcXHRcXHRuZXRfd2Fybl9yYXRlbGltaXRlZChcXFwiQVRNX1NFVFNDIGlzIG9ic29sZXRlOyB1c2VkIGJ5ICVzOiVkXFxcXG5cXFwiLFxcbiAgODM6XFx0XFx0XFx0XFx0XFx0ICAgICBjdXJyZW50LVxcdTAwM2Vjb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7XFxuICA4NDpcXHRcXHRcXHRlcnJvciA9IDA7XFxuICA4NTpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuICA4NjpcXHRcXHRjYXNlIEFUTV9TRVRCQUNLRU5EOlxcbiAgODc6XFx0XFx0Y2FzZSBBVE1fTkVXQkFDS0VORElGOlxcbiAgODg6XFx0XFx0e1xcbiAgODk6XFx0XFx0XFx0YXRtX2JhY2tlbmRfdCBiYWNrZW5kO1xcbiAgOTA6XFx0XFx0XFx0ZXJyb3IgPSBnZXRfdXNlcihiYWNrZW5kLCAoYXRtX2JhY2tlbmRfdCBfX3VzZXIgKilhcmdwKTtcXG4gIDkxOlxcdFxcdFxcdGlmIChlcnJvcilcXG4gIDkyOlxcdFxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gIDkzOlxcdFxcdFxcdHN3aXRjaCAoYmFja2VuZCkge1xcbiAgOTQ6XFx0XFx0XFx0Y2FzZSBBVE1fQkFDS0VORF9QUFA6XFxuICA5NTpcXHRcXHRcXHRcXHRyZXF1ZXN0X21vZHVsZShcXFwicHBwb2F0bVxcXCIpO1xcbiAgOTY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuICA5NzpcXHRcXHRcXHRjYXNlIEFUTV9CQUNLRU5EX0JSMjY4NDpcXG4gIDk4OlxcdFxcdFxcdFxcdHJlcXVlc3RfbW9kdWxlKFxcXCJicjI2ODRcXFwiKTtcXG4gIDk5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxMDA6XFx0XFx0XFx0fVxcbiAxMDE6XFx0XFx0XFx0YnJlYWs7XFxuIDEwMjpcXHRcXHR9XFxuIDEwMzpcXHRcXHR9XFxuIDEwNDpcXHRcXG4gMTA1OlxcdFxcdGVycm9yID0gLUVOT0lPQ1RMQ01EO1xcbiAxMDY6XFx0XFxuIDEwNzpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZpb2N0bF9tdXRleCk7XFxuIDEwODpcXHRcXHRsaXN0X2Zvcl9lYWNoKHBvcywgXFx1MDAyNmlvY3RsX2xpc3QpIHtcXG4gMTA5OlxcdFxcdFxcdHN0cnVjdCBhdG1faW9jdGwgKmljID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBhdG1faW9jdGwsIGxpc3QpO1xcbiAxMTA6XFx0XFx0XFx0aWYgKHRyeV9tb2R1bGVfZ2V0KGljLVxcdTAwM2Vvd25lcikpIHtcXG4gMTExOlxcdFxcdFxcdFxcdGVycm9yID0gaWMtXFx1MDAzZWlvY3RsKHNvY2ssIGNtZCwgYXJnKTtcXG4gMTEyOlxcdFxcdFxcdFxcdG1vZHVsZV9wdXQoaWMtXFx1MDAzZW93bmVyKTtcXG4gMTEzOlxcdFxcdFxcdFxcdGlmIChlcnJvciAhPSAtRU5PSU9DVExDTUQpXFxuIDExNDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDU6NTQuNDUyNjE2MDYxWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU0NjAyMDAzNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIEFUTSBJT0NUTCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHRoZSBBVE0gSU9DVEwgaW50ZXJmYWNlIHdvcmtzLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgbmV0L2F0bS9pb2N0bC5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBUaGUgZnVuY3Rpb24gYEFUTV9TRVRCQUNLRU5EYCBpbW1lZGlhdGVseSBjYWxscyBgcmVxdWVzdF9tb2R1bGUoXCJwcHBvYXRtXCIpYC4gVGhhdCdzIGludGVyZXN0aW5nOyBpdCBzZWVtcyBsaWtlIGl0J3MgdHJ5aW5nIHRvIGR5bmFtaWNhbGx5IGxvYWQgdGhlIFBQUG9BL0FUTSBtb2R1bGUsIGBwcHBvYXRtYCwgaWYgaXQncyBub3QgYWxyZWFkeSBwcmVzZW50LiBBZnRlciB0aGF0LCBJIHNlZSBpdCBpdGVyYXRlcyB0aHJvdWdoIGBpb2N0bF9saXN0YC4gVGhhdCBtdXN0IGJlIHdoZXJlIHRoZSBjb3JlIGlvY3RsIGZ1bmN0aW9uYWxpdHkgaXMgcmVnaXN0ZXJlZC5cblxuTXkgbmV4dCBzdGVwLCBuYXR1cmFsbHksIGlzIHRvIGNoZWNrIGhvdyBgcHBwb2F0bWAgaW50ZWdyYXRlcyBpdHNlbGYuIFRoZSBtb2R1bGUgZ2V0cyBsb2FkZWQgYW5kIGluaXRpYWxpemVkLCBhbmQgSSBwcmVkaWN0IEknbGwgZmluZCBpdHMgYGlvY3RsYCBvcGVyYXRpb25zIHJlZ2lzdGVyZWQgYXQgdGhpcyBzdGFnZS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBzbyBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgaW5pdF9wcHBvYXRtYCBmdW5jdGlvbiBpbiBgbmV0L2F0bS9wcHBvYXRtLmNgLiBUaGF0IHNob3VsZCBzaG93IG1lIHdoZXJlIGBwcHBvYXRtX2lvY3RsX29wc2AgZ2V0IGhvb2tlZCBpbnRvIHRoZSBzeXN0ZW0uIEtub3dpbmcgdGhpcyBpcyB0aGUgaGVhcnQgb2YgdGhlIGRyaXZlcidzIElPQ1RMIGhhbmRsaW5nIHdpbGwgYmUga2V5IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBkaWZmZXJlbnQgQVRNIHNwZWNpZmljIHJlcXVlc3RzIGFyZSBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0NDMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ1OjU5LjkxMjgxOTY1OVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjcyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2F0bS9wcHBvYXRtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDYwOlxcdFxcbiA0NjE6XFx0c3RhdGljIHN0cnVjdCBhdG1faW9jdGwgcHBwb2F0bV9pb2N0bF9vcHMgPSB7XFxuIDQ2MjpcXHRcXHQub3duZXJcXHQ9IFRISVNfTU9EVUxFLFxcbiA0NjM6XFx0XFx0LmlvY3RsXFx0PSBwcHBvYXRtX2lvY3RsLFxcbiA0NjQ6XFx0fTtcXG4gNDY1OlxcdFxcbiA0NjY6XFx0c3RhdGljIGludCBfX2luaXQgcHBwb2F0bV9pbml0KHZvaWQpXFxuIDQ2NzpcXHR7XFxuIDQ2ODpcXHRcXHRyZWdpc3Rlcl9hdG1faW9jdGwoXFx1MDAyNnBwcG9hdG1faW9jdGxfb3BzKTtcXG4gNDY5OlxcdFxcdHJldHVybiAwO1xcbiA0NzA6XFx0fVxcbiA0NzE6XFx0XFxuIDQ3MjpcXHRzdGF0aWMgdm9pZCBfX2V4aXQgcHBwb2F0bV9leGl0KHZvaWQpXFxuIDQ3MzpcXHR7XFxuIDQ3NDpcXHRcXHRkZXJlZ2lzdGVyX2F0bV9pb2N0bChcXHUwMDI2cHBwb2F0bV9pb2N0bF9vcHMpO1xcbiA0NzU6XFx0fVxcbiA0NzY6XFx0XFxuIDQ3NzpcXHRtb2R1bGVfaW5pdChwcHBvYXRtX2luaXQpO1xcbiA0Nzg6XFx0bW9kdWxlX2V4aXQocHBwb2F0bV9leGl0KTtcXG4gNDc5OlxcdFxcbiA0ODA6XFx0TU9EVUxFX0FVVEhPUihcXFwiTWl0Y2hlbGwgQmxhbmsgSnIgXFx1MDAzY21pdGNoQHNmZ290aC5jb21cXHUwMDNlXFxcIik7XFxuIDQ4MTpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlJGQzIzNjQgUFBQIG92ZXIgQVRNL0FBTDVcXFwiKTtcXG4gNDgyOlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDU6NTkuOTEyOTQ5OTg5WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzNTc4MTEzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQVRNIFNvY2tldCBDb25uZWN0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdGhpcyBBVE0gc29ja2V0IGFjdHVhbGx5IGdldHMgY29ubmVjdGVkLCByaWdodD8gTGV0J3MgdHJhY2UgdGhpcy4gRmlyc3QsIEkgc2VlIGB2Y2NfY29ubmVjdGAuIEhtbSwgaWYgdGhlIGludGVyZmFjZSwgYGl0ZmAsIGlzbid0IHNldCB0byBhIHNwZWNpZmljIHZhbHVlLCBpZiBpdCdzIGBBVE1fSVRGX0FOWWAuLi4gd2VsbCwgdGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFRoZSBjb2RlIHNuaXBwZXQgc2hvd3MgdGhpcyBzcGVjaWZpYyBzY2VuYXJpby4gVGhlIGBpZiAobGlrZWx5KGl0ZiAhPSBBVE1fSVRGX0FOWSkpYCBzdGF0ZW1lbnQgaXMgc2tpcHBlZCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBoYXBwZW5zIHdoZW4gYGl0ZmAgSVMgYEFUTV9JVEZfQU5ZYC4gT2theSwgdGltZSB0byBkaXZlIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gZmxvdyB3aGVuIGl0J3MgZ2VuZXJpYywgc28gdGhhdCBtZWFucyBJIG5lZWQgdG8gbG9vayBhdCBlaXRoZXIgdGhlIGBfX3ZjY19jb25uZWN0YCBmdW5jdGlvbiBvciBgdmNjX2Nvbm5lY3RgLCBib3RoIG9mIHdoaWNoIGFyZSBsaWtlbHkgZGVmaW5lZCB3aXRoaW4gdGhlIGBuZXQvYXRtL2NvbW1vbi5jYCBmaWxlLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIHVucmF2ZWwgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxNDksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NjowMi4yNzA3NjM5MzNaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2F0bS9jb21tb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0ODA6XFx0XFx0aWYgKHZjYy1cXHUwMDNlcW9zLnR4dHAudHJhZmZpY19jbGFzcyA9PSBBVE1fQU5ZQ0xBU1MgfHxcXG4gNDgxOlxcdFxcdCAgICB2Y2MtXFx1MDAzZXFvcy5yeHRwLnRyYWZmaWNfY2xhc3MgPT0gQVRNX0FOWUNMQVNTKVxcbiA0ODI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ4MzpcXHRcXHRpZiAobGlrZWx5KGl0ZiAhPSBBVE1fSVRGX0FOWSkpIHtcXG4gNDg0OlxcdFxcdFxcdGRldiA9IHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKGF0bV9kZXZfbG9va3VwKGl0ZiksXFxuIDQ4NTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXFwiYXRtLWRldmljZS0lZFxcXCIsIGl0Zik7XFxuIDQ4NjpcXHRcXHR9IGVsc2Uge1xcbiA0ODc6XFx0XFx0XFx0ZGV2ID0gTlVMTDtcXG4gNDg4OlxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmF0bV9kZXZfbXV0ZXgpO1xcbiA0ODk6XFx0XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZhdG1fZGV2cykpIHtcXG4gNDkwOlxcdFxcdFxcdFxcdGRldiA9IGxpc3RfZW50cnkoYXRtX2RldnMubmV4dCxcXG4gNDkxOlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYXRtX2RldiwgZGV2X2xpc3QpO1xcbiA0OTI6XFx0XFx0XFx0XFx0YXRtX2Rldl9ob2xkKGRldik7XFxuIDQ5MzpcXHRcXHRcXHR9XFxuIDQ5NDpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmF0bV9kZXZfbXV0ZXgpO1xcbiA0OTU6XFx0XFx0fVxcbiA0OTY6XFx0XFx0aWYgKCFkZXYpXFxuIDQ5NzpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gNDk4OlxcdFxcdGVycm9yID0gX192Y2NfY29ubmVjdCh2Y2MsIGRldiwgdnBpLCB2Y2kpO1xcbiA0OTk6XFx0XFx0aWYgKGVycm9yKSB7XFxuIDUwMDpcXHRcXHRcXHRhdG1fZGV2X3B1dChkZXYpO1xcbiA1MDE6XFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbiA1MDI6XFx0XFx0fVxcbiA1MDM6XFx0XFx0aWYgKHZwaSA9PSBBVE1fVlBJX1VOU1BFQyB8fCB2Y2kgPT0gQVRNX1ZDSV9VTlNQRUMpXFxuIDUwNDpcXHRcXHRcXHRzZXRfYml0KEFUTV9WRl9QQVJUSUFMLCBcXHUwMDI2dmNjLVxcdTAwM2VmbGFncyk7XFxuIDUwNTpcXHRcXHRpZiAodGVzdF9iaXQoQVRNX1ZGX1JFQURZLCBcXHUwMDI2QVRNX1NEKHNvY2spLVxcdTAwM2VmbGFncykpXFxuIDUwNjpcXHRcXHRcXHRzb2NrLVxcdTAwM2VzdGF0ZSA9IFNTX0NPTk5FQ1RFRDtcXG4gNTA3OlxcdFxcdHJldHVybiAwO1xcbiA1MDg6XFx0fVxcbiA1MDk6XFx0XFxuIDUxMDpcXHRpbnQgdmNjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSxcXG4gNTExOlxcdFxcdFxcdGludCBmbGFncylcXG4gNTEyOlxcdHtcXG4gNTEzOlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbiA1MTQ6XFx0XFx0c3RydWN0IGF0bV92Y2MgKnZjYztcXG4gNTE1OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDUxNjpcXHRcXHRpbnQgY29waWVkLCBlcnJvciA9IC1FSU5WQUw7XFxuIDUxNzpcXHRcXG4gNTE4OlxcdFxcdGlmIChzb2NrLVxcdTAwM2VzdGF0ZSAhPSBTU19DT05ORUNURUQpXFxuIDUxOTpcXHRcXHRcXHRyZXR1cm4gLUVOT1RDT05OO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NjowMi4yNzA4NTQzNzNaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTQ0MTQzMDYzNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgdmNjX2Nvbm5lY3RgIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHZjY19jb25uZWN0YCBmdW5jdGlvbi4gRmlyc3QsIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgY3J1Y2lhbDogYXJlIHdlIGRlYWxpbmcgd2l0aCBhbiBBVE0gZGV2aWNlIHRoYXQncyBhbHJlYWR5IHJlZ2lzdGVyZWQ/IFRoaW5ncyBsaWtlIGBzb2xvcy1wY2lgIG9yIGB1c2JhdG1gPyBJZiB3ZSBoYXZlIGEgcmVnaXN0ZXJlZCBBVE0gZGV2aWNlLCB0aGVuIHRoZSBgc29jay1cdTAwM2VzdGF0ZWAgZ2V0cyBzZXQgdG8gYFNTX0NPTk5FQ1RFRGAuIFRoYXQncyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IsIG5hdHVyYWxseS4gSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLi4uIEknbSB0aGlua2luZyBhYm91dCBgc29sb3MtcGNpYC4gSXNuJ3QgdGhhdCBjYXJkIG9mdGVuIGVtdWxhdGVkIGluIFFFTVU/IE5vLCB3YWl0IGEgbWludXRlLCBgc29sb3MtcGNpYCBpcyBhIHBoeXNpY2FsIEFEU0wgY2FyZC4gQWxyaWdodCwgSSBuZWVkIHRvIGZvY3VzLiBMZXQgbWUgcmVkaXJlY3QgbXkgdGhpbmtpbmcgdG8gYGRyaXZlcnMvdXNiL2F0bS91c2JhdG0uY2AuIE5vdywgbGV0IG1lIGZpbmQgb3V0IHdoaWNoIGRyaXZlcnMgYXJlIHVzaW5nIHRoZSBgdXNiYXRtYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxNjAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ2OjE2LjY4NTE2Mzc5WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkxMTAzNzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzYmF0bV91c2JfcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTEzNDY9c3RhdGljIGludCBjeGFjcnVfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEzNjMtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjEzNjQ6XFx0cmV0dXJuIHVzYmF0bV91c2JfcHJvYmUoaW50ZiwgaWQsIFxcdTAwMjZjeGFjcnVfZHJpdmVyKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTM2NS19XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vc3BlZWR0Y2guYz05NDA9c3RhdGljIGludCBzcGVlZHRjaF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG5kcml2ZXJzL3VzYi9hdG0vc3BlZWR0Y2guYy05NDEte1xcbmRyaXZlcnMvdXNiL2F0bS9zcGVlZHRjaC5jOjk0MjpcXHRyZXR1cm4gdXNiYXRtX3VzYl9wcm9iZShpbnRmLCBpZCwgXFx1MDAyNnNwZWVkdGNoX3VzYmF0bV9kcml2ZXIpO1xcbmRyaXZlcnMvdXNiL2F0bS9zcGVlZHRjaC5jLTk0My19XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vdWVhZ2xlLWF0bS5jPTI1NTA9c3RhdGljIGludCB1ZWFfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmMtMjU5Ny1cXG5kcml2ZXJzL3VzYi9hdG0vdWVhZ2xlLWF0bS5jOjI1OTg6XFx0cmV0ID0gdXNiYXRtX3VzYl9wcm9iZShpbnRmLCBpZCwgXFx1MDAyNnVlYV91c2JhdG1fZHJpdmVyKTtcXG5kcml2ZXJzL3VzYi9hdG0vdWVhZ2xlLWF0bS5jLTI1OTktXFx0aWYgKHJldCA9PSAwKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmM9MTAwMT1zdGF0aWMgdm9pZCB1c2JhdG1faW5pdF9jaGFubmVsKHN0cnVjdCB1c2JhdG1fY2hhbm5lbCAqY2hhbm5lbClcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy0xMDA3LVxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYzoxMDA4OmludCB1c2JhdG1fdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQsXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTEwMDktXFx0XFx0ICAgICBzdHJ1Y3QgdXNiYXRtX2RyaXZlciAqZHJpdmVyKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTEyMDQtfVxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYzoxMjA1OkVYUE9SVF9TWU1CT0xfR1BMKHVzYmF0bV91c2JfcHJvYmUpO1xcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy0xMjA2LVxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYz0xMjA3PXZvaWQgdXNiYXRtX3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTEyNzEtXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jOjEyNzI6XFx0dXNiYXRtX3B1dF9pbnN0YW5jZShpbnN0YW5jZSk7XFx0LyogdGFrZW4gaW4gdXNiYXRtX3VzYl9wcm9iZSAqL1xcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy0xMjczLX1cXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uaD03Mz1zdHJ1Y3QgdXNiYXRtX2RyaXZlciB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmgtOTktXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5oOjEwMDpleHRlcm4gaW50IHVzYmF0bV91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCxcXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmgtMTAxLVxcdFxcdHN0cnVjdCB1c2JhdG1fZHJpdmVyICpkcml2ZXIpO1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYz0xNDg9c3RhdGljIGludCB4dXNiYXRtX2F0bV9zdGFydChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bSxcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMtMTU5LVxcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmM6MTYwOnN0YXRpYyBpbnQgeHVzYmF0bV91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYy0xNjEtXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXFxuZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYy0xNjIte1xcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmM6MTYzOlxcdHJldHVybiB1c2JhdG1fdXNiX3Byb2JlKGludGYsIGlkLFxcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMtMTY0LVxcdFxcdFxcdFxcdHh1c2JhdG1fZHJpdmVycyArIChpZCAtIHh1c2JhdG1fdXNiX2lkcykpO1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYz0xNjc9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHh1c2JhdG1fdXNiX2RyaXZlciA9IHtcXG5kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jLTE2OC1cXHQubmFtZVxcdFxcdD0geHVzYmF0bV9kcml2ZXJfbmFtZSxcXG5kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jOjE2OTpcXHQucHJvYmVcXHRcXHQ9IHh1c2JhdG1fdXNiX3Byb2JlLFxcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMtMTcwLVxcdC5kaXNjb25uZWN0XFx0PSB1c2JhdG1fdXNiX2Rpc2Nvbm5lY3QsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ2OjE5LjA3NjI3MzUxOFoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NjEwMTM0NDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVTQiBBVE0gRHJpdmVyIERpc2NvdmVyeSBhbmQgUG90ZW50aWFsIEVtdWxhdGlvbiBQYXRocyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGRyaXZlciBuYW1lcyDigJMgYGN4YWNydWAsIGBzcGVlZHRjaGAsIGB1ZWFnbGUtYXRtYCwgYW5kIGB4dXNiYXRtYCDigJMgYW5kIHRoZXkncmUgYWxsIGNsZWFybHkgVVNCIEFUTSBkcml2ZXJzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQ2FuIHN5emthbGxlciBoYW5kbGUgVVNCIGRldmljZSBlbXVsYXRpb24/XCIgT2YgY291cnNlISBJIHJlbWVtYmVyIHNlZWluZyB0aGF0IFVTQiBnYWRnZXQgZW11bGF0aW9uICh1c2luZyByYXcgZ2FkZ2V0IG9yIGEgZHVtbXkgSENEKSBpcyBleHBsaWNpdGx5IHN1cHBvcnRlZC4gSSBldmVuIHJlY2FsbCB0aGUgaW5zdHJ1Y3Rpb25zIG1lbnRpb25pbmcgaXQgZXhwbGljaXRseTogXCIoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcClcIiBhbmQgYWdhaW4gaW4gc2VjdGlvbiAzLCBtZW50aW9uaW5nIGRyaXZlcnMgXCJhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlwiIEV4Y2VsbGVudC5cblxuTm93LCBJJ20gdGhpbmtpbmcsIFwiSXMgdGhlcmUgYW5vdGhlciBhbmdsZSBoZXJlP1wiIENvdWxkIEFUTSBiZSBzaW11bGF0ZWQgb3IgYWNjZXNzZWQgaW4gc29tZSAqb3RoZXIqIHdheT8gTXkgaW5zdGluY3QgaXMgdG8gY2hlY2sgYG5ldC9hdG0vYCBhbmQgYGRyaXZlcnMvYXRtL2AuIExldCdzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgaW4gdGhvc2UgZGlyZWN0b3JpZXMsIGluIGFkZGl0aW9uIHRvIFVTQiBpbXBsZW1lbnRhdGlvbnMuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRldmljZXMgaW4gYG5ldC9hdG0vYCBvciBgZHJpdmVycy9hdG0vYC5cblxuSG1tLi4uIEknbSByZW1pbmRlZCBvZiBvbGRlciBrZXJuZWwgY29kZSDigJMgYGVuaS5jYCwgYG5pY3N0YXIuY2AsIGBmaXJlc3RyZWFtLmNgIOKAkyBidXQgdGhvc2UgYXJlIHByb2JhYmx5IGlycmVsZXZhbnQgbm93LCBwZXJoYXBzIHJlbW92ZWQgb3Igc2lnbmlmaWNhbnRseSBvdXRkYXRlZC4gTGV0J3Mgc3RhcnQgd2l0aCBhIHRob3JvdWdoIGNoZWNrIG9mIHdoYXQncyAqY3VycmVudGx5KiBpbiBgZHJpdmVycy9hdG0vYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2MzcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDY6MjMuNjg2NDExODkyWiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQwMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL2F0bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJzb2xvcy1hdHRybGlzdC5jXCIsXG4gICAgXCJzb2xvcy1wY2kuY1wiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBudWxsXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NjoyMy42ODY0Njc4MDNaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzcyODI2MzA0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIERyaXZlciBDb21wYXRpYmlsaXR5KipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgaXNzdWUgbWlnaHQgYmUgc3RlbW1pbmcgZnJvbS4gTGV0J3Mgbm90IGxpbWl0IG91cnNlbHZlcyB0byB0aGUgb2J2aW91cyBwbGFjZXMuIEkgc2hvdWxkIGRlZmluaXRlbHkgYnJvYWRlbiB0aGUgc2VhcmNoIHRvIGVuY29tcGFzcyBzb21lIHJlbGF0ZWQgbmV0d29yayBhcmVhcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHBpdm90IGludG8gYSBjb3VwbGUgb2Yga2V5IGRyaXZlciBkaXJlY3RvcmllczogbGV0J3MgZ28gcG9rZSBhcm91bmQgaW4gYGRyaXZlcnMvbmV0L3BwcC9gIOKAkyBpdCdzIGNydWNpYWwgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgYW5kIGludGVncmF0aW9uIHRoZXJlLiBCdXQgYWxzbywgd2hpbGUgd2UncmUgYXQgaXQsIGxldOKAmXMgaGF2ZSBhIGxvb2sgaW50byBgbmV0L2F0bS9gLiBJdCdzIHdvcnRoIGVuc3VyaW5nIHRoZXJlIGFyZW4ndCBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyBvciBjb25mbGljdHMgbHVya2luZyB3aXRoaW4gdGhhdCBBVE0gY29kZSwgZXZlbiBpZiBpdCBzZWVtcyBsZXNzIGxpa2VseSBhdCBmaXJzdCBnbGFuY2UuIFdoYXQgZXhhY3RseSBhcmUgdGhlIGZpbGVzIGN1cnJlbnRseSBwcmVzZW50IGluIGBuZXQvYXRtL2A/IFRoYXQncyB0aGUgaW1tZWRpYXRlIG5leHQgc3RlcC4gV2UgbmVlZCB0byBhc3Nlc3MgdGhlIHNjb3BlIG9mIHRoYXQgZGlyZWN0b3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTI0MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NjoyNy40MTQ3MzU1NjdaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJuZXQvYXRtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImF0bV9taXNjLmNcIixcbiAgICBcImF0bV9zeXNmcy5jXCIsXG4gICAgXCJicjI2ODQuY1wiLFxuICAgIFwiY29tbW9uLmNcIixcbiAgICBcImNvbW1vbi5oXCIsXG4gICAgXCJpb2N0bC5jXCIsXG4gICAgXCJwcHBvYXRtLmNcIixcbiAgICBcInByb2MuY1wiLFxuICAgIFwicHJvdG9jb2xzLmhcIixcbiAgICBcInB2Yy5jXCIsXG4gICAgXCJyYXcuY1wiLFxuICAgIFwicmVzb3VyY2VzLmNcIixcbiAgICBcInJlc291cmNlcy5oXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ2OjI3LjQxNDkxOTkwN1oiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTg1MDUxODI1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgUFBQb0FUTSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBhaW1zIHRvIGNsZWFuIHVwIHRoZSBgcHBwb2F0bV9zZW5kYCBmdW5jdGlvbiwgYWRkcmVzc2luZyBzb21lIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG91dC1vZi1ib3VuZHMgcmVhZHMsIGFuZCBpbmVmZmljaWVuY2llcywgcGFydGljdWxhcmx5IGFyb3VuZCB0aGUgTExDIGVuY2Fwc3VsYXRpb24uIFRoZSBvcmlnaW5hbCBjb2RlJ3MgbG9naWMgZm9yIGhhbmRsaW5nIGhlYWRyb29tIGFuZCB0aGUgcG90ZW50aWFsbHkgY29tcHJlc3NlZCBwYWNrZXRzIHNlZW1zIGNvbnZvbHV0ZWQgYW5kIEkgc2VlIHNvbWUgb2J2aW91cyBpbXByb3ZlbWVudHMuXG5cbkZpcnN0LCB0aGUgb3JpZ2luYWwgY29kZSBoYWQgYW4gaXNzdWUgd2l0aCBhIHBvc3NpYmxlIG91dC1vZi1ib3VuZHMgcmVhZCAoYHNrYi1cdTAwM2VkYXRhWzBdYCkgaWYgdGhlIHBhY2tldCBsZW5ndGggKGBza2ItXHUwMDNlbGVuYCkgd2FzIHplcm8uIFRoaXMgcGF0Y2ggbmVhdGx5IGFkZHJlc3NlcyB0aGF0IGJ5IGFkZGluZyBhIGNoZWNrIHdpdGggYHBza2JfbWF5X3B1bGwoc2tiLCAxKWAuIElmIHdlIGNhbid0IHNhZmVseSBhY2Nlc3MgdGhlIGZpcnN0IGJ5dGUsIHdlIGp1c3QgZHJvcCB0aGUgcGFja2V0IGltbWVkaWF0ZWx5LiBUaGlzIGlzIGZhciBiZXR0ZXIuXG5cbk5leHQsIEknbSBoYXBweSB0byBzZWUgdGhhdCB0aGUgcGF0Y2ggY2xlYW5zIHVwIHRoZSBoYW5kbGluZyBvZiBMTEMgZW5jYXBzdWxhdGlvbiBhbmQgaGVhZCByb29tIGFsbG9jYXRpb24uIFRoZSBvcmlnaW5hbCBgc2tiX3JlYWxsb2NfaGVhZHJvb21gIGZvbGxvd2VkIGJ5IGBjb25zdW1lX3NrYihza2IpYCBsb2dpYyBsb29rcyBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYzsgYSBuZXcsIGFuZCBpbXByb3ZlZCwgYXBwcm9hY2ggaXMgaW1wbGVtZW50ZWQgaGVyZS4gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggbm93IGxldmVyYWdlcyBgc2tiX2Nvd19oZWFkKHNrYiwgTExDX0xFTilgIHdoaWNoIGlzIGZhciBzdXBlcmlvci4gSXQgc2VlbXMgdGhhdCB0aGlzIGZ1bmN0aW9uIG1ha2VzIGEgY29weSBvZiB0aGUgcGFja2V0IGhlYWRlciBpZiBuZWVkZWQgdG8gZW5zdXJlIHdlIGhhdmUgZW5vdWdoIGhlYWRyb29tIGFuZCB0aGF0IHRoZSBoZWFkcm9vbSBpcyB3cml0YWJsZS4gVGhpcyBhdm9pZHMgdW5uZWNlc3NhcnkgY29waWVzLCByZWR1Y2luZyBvdmVyaGVhZCBhbmQgaW1wcm92aW5nIG92ZXJhbGwgcGVyZm9ybWFuY2UuXG5cbkFsc28sIGJ5IG1vdmluZyB0aGUgY2hlY2sgYW5kIHByb2Nlc3NpbmcgdG8gKmFmdGVyKiB0aGUgc3dpdGNoIHN0YXRlbWVudCwgdGhlIG9yaWdpbmFsIG1lc3N5IGFuZCBlcnJvci1wcm9uZSBgbm9zcGFjZWAgdW5kbyBsb2dpYyBpcyBnb25lIGFuZCB0aGlzIHNpbXBsaWZpZXMgdGhlIGNvZGUgYW5kIG1ha2VzIHRoZSBpbnRlbmRlZCBiZWhhdmlvciBtdWNoIGNsZWFyZXIuXG5cbkZ1cnRoZXJtb3JlLCBJIGFtIHNhdGlzZmllZCB3aXRoIHRoZSBzZXF1ZW5jZSBvZiB0aGUgYHNrYl9wdWxsYCBhbmQgYHNrYl9wdXNoYC4gVGhlIGBza2JfcHVsbGAgaXMgYXBwbGllZCBiZWZvcmUgYHNrYl9wdXNoYCBpcyB1c2VkIHNvIHRoZSBsb2dpYyBpcyBjb25zaXN0ZW50LlxuXG5PdmVyYWxsLCB0aGlzIHBhdGNoIHNlZW1zIGxpa2UgYSBnb29kIGltcHJvdmVtZW50LiBJdCBhZGRyZXNzZXMgc2V2ZXJhbCBwb3RlbnRpYWwgaXNzdWVzIGluIHRoZSBvcmlnaW5hbCBjb2RlLCBpbXByb3ZlcyBlZmZpY2llbmN5LCBhbmQgbWFrZXMgdGhlIGxvZ2ljIGVhc2llciB0byBmb2xsb3cuIFRoZSB1c2Ugb2YgYHNrYl9jb3dfaGVhZGAgaXMgYSBnb29kIGNob2ljZSB0byBlbnN1cmUgdGhlcmUgaXMgZW5vdWdoIGhlYWQgcm9vbS4gVGhlIG9yaWdpbmFsIGNvZGUgZmVsdCBvdmVybHkgY29tcGxleC4gSSB0aGluayB0aGlzIGlzIGNsZWFuZXIsIHNhZmVyLCBhbmQgcHJvYmFibHkgZmFzdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTU4OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNTcsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ2OjQzLjI2NTQ0MTMzOFoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMTYwMDE5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGFydF94bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BwcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTEwNj1zdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBhc3luY19vcHMgPSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjEwNzpcXHQuc3RhcnRfeG1pdCA9IHBwcF9hc3luY19zZW5kLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDgtXFx0LmlvY3RsICAgICAgPSBwcHBfYXN5bmNfaW9jdGwsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz02MTg9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqY29tcGF0X3BwcF9nZXRfZmlsdGVyKHN0cnVjdCBzb2NrX2Zwcm9nMzIgX191c2VyICpwKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtNjMzLSAqIFdoZW4gdHdvIGNoYW5uZWxzIGFyZSBicmlkZ2VkLCBwcHBfaW5wdXQgb24gb25lIGNoYW5uZWwgaXMgcmVkaXJlY3RlZCB0b1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjYzNDogKiB0aGUgb3RoZXIncyBvcHMtXFx1MDAzZXN0YXJ0X3htaXQgaGFuZGxlci5cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy02MzUtICogSW4gb3JkZXIgdG8gc2FmZWx5IGJyaWRnZSBjaGFubmVscyB3ZSBtdXN0IHJlamVjdCBjaGFubmVscyB3aGljaCBhcmUgYWxyZWFkeVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MTQ0Nz1zdGF0aWMgbmV0ZGV2X3R4X3RcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoxNDQ4OnBwcF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTQ0OS17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0xNjA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcHBwX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNjExLVxcdC5uZG9fdW5pbml0ICAgICAgPSBwcHBfZGV2X3VuaW5pdCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoxNjEyOlxcdC5uZG9fc3RhcnRfeG1pdCAgPSBwcHBfc3RhcnRfeG1pdCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNjEzLVxcdC5uZG9fc2lvY2RldnByaXZhdGUgPSBwcHBfbmV0X3Npb2NkZXZwcml2YXRlLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MTkwNT1wcHBfcHVzaChzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xOTM0LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjE5MzU6XFx0XFx0cmV0ID0gY2hhbi1cXHUwMDNlb3BzLVxcdTAwM2VzdGFydF94bWl0KGNoYW4sIHNrYik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTkzNi1cXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTE5NjM9c3RhdGljIGludCBwcHBfbXBfZXhwbG9kZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yMTQ0LVxcdFxcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZwY2gtXFx1MDAzZWZpbGUueHEpIHx8XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MjE0NTpcXHRcXHRcXHQhY2hhbi1cXHUwMDNlb3BzLVxcdTAwM2VzdGFydF94bWl0KGNoYW4sIGZyYWcpKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTIxNDYtXFx0XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnBjaC1cXHUwMDNlZmlsZS54cSwgZnJhZyk7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0yMTcwPXN0YXRpYyB2b2lkIF9fcHBwX2NoYW5uZWxfcHVzaChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBzdHJ1Y3QgcHBwICpwcHApXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yMTc3LVxcdFxcdFxcdHNrYiA9IHNrYl9kZXF1ZXVlKFxcdTAwMjZwY2gtXFx1MDAzZWZpbGUueHEpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjIxNzg6XFx0XFx0XFx0aWYgKCFwY2gtXFx1MDAzZWNoYW4tXFx1MDAzZW9wcy1cXHUwMDNlc3RhcnRfeG1pdChwY2gtXFx1MDAzZWNoYW4sIHNrYikpIHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yMTc5LVxcdFxcdFxcdFxcdC8qIHB1dCB0aGUgcGFja2V0IGJhY2sgYW5kIHRyeSBhZ2FpbiBsYXRlciAqL1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MjI4Nj1zdGF0aWMgYm9vbCBwcHBfY2hhbm5lbF9icmlkZ2VfaW5wdXQoc3RydWN0IGNoYW5uZWwgKnBjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTIzMDItXFx0c2tiX3NjcnViX3BhY2tldChza2IsICFuZXRfZXEocGNoLVxcdTAwM2VjaGFuX25ldCwgcGNoYi1cXHUwMDNlY2hhbl9uZXQpKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoyMzAzOlxcdGlmICghcGNoYi1cXHUwMDNlY2hhbi1cXHUwMDNlb3BzLVxcdTAwM2VzdGFydF94bWl0KHBjaGItXFx1MDAzZWNoYW4sIHNrYikpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMjMwNC1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTI5OTQ9cHBwX3VucmVnaXN0ZXJfY2hhbm5lbChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zMDA1LVxcdCAqIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhdmUgcmV0dXJuZWQgZnJvbSBhbnkgY2FsbHMgaW50b1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjMwMDY6XFx0ICogdGhlIGNoYW5uZWwncyBzdGFydF94bWl0IG9yIGlvY3RsIHJvdXRpbmUgYmVmb3JlIHdlIHByb2NlZWQuXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMzAwNy1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTkzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHN5bmNfb3BzID0ge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjk0OlxcdC5zdGFydF94bWl0ID0gcHBwX3N5bmNfc2VuZCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05NS1cXHQuaW9jdGwgICAgICA9IHBwcF9zeW5jX2lvY3RsLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9OTE5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzID0ge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkyMDpcXHQuc3RhcnRfeG1pdCA9IHBwcG9lX3htaXQsXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTIxLVxcdC5maWxsX2ZvcndhcmRfcGF0aCA9IHBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYz02MDc9c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHB0cF9jaGFuX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjYwODpcXHQuc3RhcnRfeG1pdCA9IHBwdHBfeG1pdCxcXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTYwOS1cXHQuaW9jdGwgICAgICA9IHBwdHBfcHBwX2lvY3RsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0Njo0NC43ODcwNDcwNTVaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzUyNjA4MDMyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aCBGdXp6aW5nIERlY2lzaW9uOiBBbmFseXppbmcgUFBQb0FUTSBQYWNrZXQgVHJhbnNtaXNzaW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGFib3V0IHRoZSBgc3RhcnRfeG1pdGAgZnVuY3Rpb24gYW5kIGhvdyBQUFAgaGFuZGxlcyBwYWNrZXQgY29uc3VtcHRpb24uIEEgcmV0dXJuIHZhbHVlIG9mIDEgbWVhbnMgdGhlIHBhY2tldCBpcyBmcmVlZCwgMCBtZWFucyBpdCdzIHF1ZXVlZC4gIE5vdywgdGhlIGBwcHBvYXRtX3NlbmRgIGZ1bmN0aW9uIGlzIGtleS4gIEl0IGhhcyB0aGF0IGNoZWNrOlxuXG5gYGBjXG5cdGlmICghcHNrYl9tYXlfcHVsbChza2IsIDEpKSB7XG5cdFx0a2ZyZWVfc2tiKHNrYik7XG5cdFx0cmV0dXJuIERST1BfUEFDS0VUO1xuXHR9XG5gYGBcblxuQW5kIGBEUk9QX1BBQ0tFVGAgZXZhbHVhdGVzIHRvIDEuICBUaGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgY29kZSAqcmVhY2hhYmxlKj8gIFRoYXQncyB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggZnV6emluZyBwaGlsb3NvcGh5LiBMZXQncyBzZWUgd2hhdCB0aGUgZ3VpZGFuY2Ugc2F5cy5cblxuRnJvbSB0aGUgaW5zdHJ1Y3Rpb25zLCBcIlJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFXCI6IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIG1vZGlmaWVkIGNvZGUgY2FuIGFjdHVhbGx5ICpleGVjdXRlKiBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBVbnJlYWNoYWJsZSBjb2RlIGlzIGEgbm8tZ28gZm9yIGZ1enppbmcuICBJIGNhbid0IGp1c3QgYmxpbmRseSB0cnVzdCBcIk5vIEZ1bmN0aW9uYWwgQ2hhbmdlXCIgb3IgXCJSZWZhY3RvcmluZ1wiIGNsYWltcy4gQXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljIHdpdGhpbiByZWFjaGFibGUgY29kZSBhcmUgcmlwZSBmb3IgZnV6emluZy5cblxuU2VjdGlvbiAyIHNheXMgXCJORUdBVElWRSBDUklURVJJQVwiOiBJIG5lZWQgdG8gYXZvaWQgYW55dGhpbmcgbm9uLWtlcm5lbCwgbm9uLWV4ZWN1dGFibGUsIG9yIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4gU2VjdGlvbiAzIG91dGxpbmVzIHRoZSBcIlBPU0lUSVZFIENSSVRFUklBXCIuIEl0IHNwZWNpZmljYWxseSBjYWxscyBvdXQgY29yZSBzdWJzeXN0ZW1zIChsaWtlIG5ldHdvcmtpbmcpLCByZWZhY3RvcmluZ3MgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGFzc2VydGlvbnMsIGFuZCBkcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMuXG5cblNvLCBpcyBgUFBQb0FUTWAgcGFydCBvZiBjb3JlIG5ldHdvcmtpbmcgb3IgYSByZWFjaGFibGUgZHJpdmVyPyBZZXMsIGBuZXQvYXRtYCBpcyBwYXJ0IG9mIGNvcmUgbmV0d29ya2luZy4gVGhhdCBpcyBhIGdvb2Qgc2lnbi5cblxuSG93IGNhbiBgUFBQb0FUTWAgYmUgcmVhY2hlZD8gTGV0J3MgdHJhY2UgaXQuIEl0IHNlZW1zIHRvIHdvcmsgbGlrZSB0aGlzOlxuXG4xLiAgQ3JlYXRlIGFuIEFUTSBzb2NrZXQgdXNpbmcgYHNvY2tldChQRl9BVE1QVkMsIC4uLilgIG9yIGBzb2NrZXQoUEZfQVRNU1ZDLCAuLi4pYC5cbjIuICBDb25uZWN0IHRoZSBzb2NrZXQuIEFuIEFUTSBkZXZpY2UgY2FuIGJlIHJlZ2lzdGVyZWQgdmlhIFVTQiwgdXNpbmcgc29tZXRoaW5nIGxpa2UgYHVzYmF0bWAsIGVtdWxhdGVkIHRocm91Z2ggc3l6a2FsbGVyJ3MgVVNCIGNhcGFiaWxpdGllcyB3aXRoIFJhdyBHYWRnZXQuXG4zLiAgVGhlbiBJIHVzZSBgaW9jdGwoZmQsIEFUTV9TRVRCQUNLRU5ELCBcdTAwMjZiZSlgIHdoZXJlIGBiZS5iYWNrZW5kX251bSA9IEFUTV9CQUNLRU5EX1BQUGAuXG40LiAgVGhhdCBsZWFkcyB0byBgcHBwb2F0bV9hc3NpZ25fdmNjYCwgd2hpY2ggYXR0YWNoZXMgdGhlIEFUTSBzb2NrZXQgdG8gYSBQUFAgY2hhbm5lbCB2aWEgYHBwcF9yZWdpc3Rlcl9jaGFubmVsKFx1MDAyNnB2Y2MtXHUwMDNlY2hhbilgLlxuNS4gIFRoaXMgaXMgY29ubmVjdGVkIHRvIGEgUFBQIHVuaXQgdmlhIGBpb2N0bCgvZGV2L3BwcCwgUFBQSU9DQVRUQ0hBTiwgLi4uKWAuXG42LiAgRmluYWxseSwgd3JpdGluZyB0byBgL2Rldi9wcHBgIG9yIHNlbmRpbmcgcGFja2V0cyB0aHJvdWdoIHRoZSBgcHBwYCBuZXR3b3JrIGludGVyZmFjZSB0cmlnZ2VycyBgY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChjaGFuLCBza2IpYCwgd2hpY2ggKmlzKiBgcHBwb2F0bV9zZW5kYCFcblxuQ3J1Y2lhbGx5LCB0aGlzIHBhdGNoIG1vZGlmaWVzIHRyYW5zbWl0IHBhY2tldCBoYW5kbGluZyBpbiBgcHBwb2F0bV9zZW5kYC4gSXQgY2hhbmdlcyBob3cgaGVhZGVyIHJlYWxsb2NhdGlvbnMsIGhlYWRlciBwdWxscywgaGVhZGVyIHB1c2hlcywgYW5kIHBhY2tldCBsZW5ndGggdmFsaWRhdGlvbiBhcmUgaGFuZGxlZC4gVGhlIGZ1bmN0aW9uIGlzIG1vZGlmeWluZyBrZXkgcGFydHMgb2YgbmV0d29ya2luZywgYW5kIG5ldHdvcmtpbmcgaXMgYSBjb3JlIHN1YnN5c3RlbS5cblxuTm93LCBteSBtaW5kIGlzIGFsc28gdGhpbmtpbmcgaWYgQVRNIGNhbiBzb21laG93IGJlIGNvbm5lY3RlZCBldmVuIHdpdGhvdXQgYSBwaHlzaWNhbCBvciBVU0IgQVRNIGRldmljZS4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbHRlcm5hdGUgd2F5cyBvZiByZWdpc3RlcmluZyBhbiBBVE0gZGV2aWNlLiBMZXQgbWUgY2hlY2sgd2l0aCBgZ3JlcHBlcmAgZm9yIGByZWdpc3Rlcl9hdG1kZXZpY2VgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBCdXQgYmFzZWQgb24gbXkgaW5pdGlhbCBhbmFseXNpcywgdGhlIGNvZGUgcGF0aCBhcHBlYXJzIHJlYWNoYWJsZSwgYW5kIGl0J3MgbW9kaWZ5aW5nIGEgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uLiBUaGlzIGxvb2tzIHByb21pc2luZyBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5MDEsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ2OjUyLjMxMzEzMDc2NFoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2NDMyMzU2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWdpc3Rlcl9hdG1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9hdG1kZXYuaD0yMzU9c3RydWN0IGF0bV9pb2N0bCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTI0My0vKipcXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oOjI0NDogKiByZWdpc3Rlcl9hdG1faW9jdGwgLSByZWdpc3RlciBoYW5kbGVyIGZvciBpb2N0bCBvcGVyYXRpb25zXFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0yNDUtICogQGlvY3RsOiBpb2N0bCBoYW5kbGVyIHRvIHJlZ2lzdGVyXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTI1MC0gKi9cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oOjI1MTp2b2lkIHJlZ2lzdGVyX2F0bV9pb2N0bChzdHJ1Y3QgYXRtX2lvY3RsICppb2N0bCk7XFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0yNTItXFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0yNTMtLyoqXFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaDoyNTQ6ICogZGVyZWdpc3Rlcl9hdG1faW9jdGwgLSByZW1vdmUgdGhlIGlvY3RsIGhhbmRsZXJcXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTI1NS0gKiBAaW9jdGw6IGlvY3RsIGhhbmRsZXIgdG8gZGVyZWdpc3RlclxcbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMjU2LSAqL1xcbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg6MjU3OnZvaWQgZGVyZWdpc3Rlcl9hdG1faW9jdGwoc3RydWN0IGF0bV9pb2N0bCAqaW9jdGwpO1xcbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMjU4LVxcbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMjU5LVxcbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg6MjYwOi8qIHJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllciAtIHJlZ2lzdGVyIGF0bV9kZXYgbm90aWZ5IGV2ZW50c1xcbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMjYxLSAqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTI2NC0gKi9cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oOjI2NTppbnQgcmVnaXN0ZXJfYXRtZGV2aWNlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpO1xcbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg6MjY2OnZvaWQgdW5yZWdpc3Rlcl9hdG1kZXZpY2Vfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7XFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0yNjctXFxuLS1cXG5uZXQvYXRtL2JyMjY4NC5jPTgyNT1zdGF0aWMgaW50IF9faW5pdCBicjI2ODRfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2F0bS9icjI2ODQuYy04MzItI2VuZGlmXFxubmV0L2F0bS9icjI2ODQuYzo4MzM6XFx0cmVnaXN0ZXJfYXRtX2lvY3RsKFxcdTAwMjZicjI2ODRfaW9jdGxfb3BzKTtcXG5uZXQvYXRtL2JyMjY4NC5jOjgzNDpcXHRyZWdpc3Rlcl9hdG1kZXZpY2Vfbm90aWZpZXIoXFx1MDAyNmF0bV9kZXZfbm90aWZpZXIpO1xcbm5ldC9hdG0vYnIyNjg0LmMtODM1LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L2F0bS9icjI2ODQuYz04Mzg9c3RhdGljIHZvaWQgX19leGl0IGJyMjY4NF9leGl0KHZvaWQpXFxuLS1cXG5uZXQvYXRtL2JyMjY4NC5jLTg0Mi1cXHRzdHJ1Y3QgYnIyNjg0X3ZjYyAqYnJ2Y2M7XFxubmV0L2F0bS9icjI2ODQuYzo4NDM6XFx0ZGVyZWdpc3Rlcl9hdG1faW9jdGwoXFx1MDAyNmJyMjY4NF9pb2N0bF9vcHMpO1xcbm5ldC9hdG0vYnIyNjg0LmMtODQ0LVxcbi0tXFxubmV0L2F0bS9icjI2ODQuYy04NDktXFxubmV0L2F0bS9icjI2ODQuYzo4NTA6XFx0dW5yZWdpc3Rlcl9hdG1kZXZpY2Vfbm90aWZpZXIoXFx1MDAyNmF0bV9kZXZfbm90aWZpZXIpO1xcbm5ldC9hdG0vYnIyNjg0LmMtODUxLVxcbi0tXFxubmV0L2F0bS9jb21tb24uYz03NTY9aW50IHZjY19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jLTc5Ny1cXG5uZXQvYXRtL2NvbW1vbi5jOjc5ODppbnQgcmVnaXN0ZXJfYXRtZGV2aWNlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpXFxubmV0L2F0bS9jb21tb24uYy03OTkte1xcbi0tXFxubmV0L2F0bS9jb21tb24uYy04MDEtfVxcbm5ldC9hdG0vY29tbW9uLmM6ODAyOkVYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllcik7XFxubmV0L2F0bS9jb21tb24uYy04MDMtXFxubmV0L2F0bS9jb21tb24uYzo4MDQ6dm9pZCB1bnJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxcbm5ldC9hdG0vY29tbW9uLmMtODA1LXtcXG4tLVxcbm5ldC9hdG0vY29tbW9uLmMtODA3LX1cXG5uZXQvYXRtL2NvbW1vbi5jOjgwODpFWFBPUlRfU1lNQk9MX0dQTCh1bnJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllcik7XFxubmV0L2F0bS9jb21tb24uYy04MDktXFxuLS1cXG5uZXQvYXRtL2lvY3RsLmM9MjQ9c3RhdGljIExJU1RfSEVBRChpb2N0bF9saXN0KTtcXG4tLVxcbm5ldC9hdG0vaW9jdGwuYy0yNi1cXG5uZXQvYXRtL2lvY3RsLmM6Mjc6dm9pZCByZWdpc3Rlcl9hdG1faW9jdGwoc3RydWN0IGF0bV9pb2N0bCAqaW9jdGwpXFxubmV0L2F0bS9pb2N0bC5jLTI4LXtcXG4tLVxcbm5ldC9hdG0vaW9jdGwuYy0zMi19XFxubmV0L2F0bS9pb2N0bC5jOjMzOkVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfYXRtX2lvY3RsKTtcXG5uZXQvYXRtL2lvY3RsLmMtMzQtXFxubmV0L2F0bS9pb2N0bC5jOjM1OnZvaWQgZGVyZWdpc3Rlcl9hdG1faW9jdGwoc3RydWN0IGF0bV9pb2N0bCAqaW9jdGwpXFxubmV0L2F0bS9pb2N0bC5jLTM2LXtcXG4tLVxcbm5ldC9hdG0vaW9jdGwuYy00MC19XFxubmV0L2F0bS9pb2N0bC5jOjQxOkVYUE9SVF9TWU1CT0woZGVyZWdpc3Rlcl9hdG1faW9jdGwpO1xcbm5ldC9hdG0vaW9jdGwuYy00Mi1cXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jPTQ2Nj1zdGF0aWMgaW50IF9faW5pdCBwcHBvYXRtX2luaXQodm9pZClcXG5uZXQvYXRtL3BwcG9hdG0uYy00Njcte1xcbm5ldC9hdG0vcHBwb2F0bS5jOjQ2ODpcXHRyZWdpc3Rlcl9hdG1faW9jdGwoXFx1MDAyNnBwcG9hdG1faW9jdGxfb3BzKTtcXG5uZXQvYXRtL3BwcG9hdG0uYy00NjktXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYz00NzI9c3RhdGljIHZvaWQgX19leGl0IHBwcG9hdG1fZXhpdCh2b2lkKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3My17XFxubmV0L2F0bS9wcHBvYXRtLmM6NDc0OlxcdGRlcmVnaXN0ZXJfYXRtX2lvY3RsKFxcdTAwMjZwcHBvYXRtX2lvY3RsX29wcyk7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDc1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDY6NTQuNzc3NDYyOTgxWiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzNDIwNTg2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBBVE0gRGV2aWNlIFJlZ2lzdHJhdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgQVRNLCBhbmQgSSdtIHN0dWNrIG9uIGBhdG1fZGV2X3JlZ2lzdGVyYC4gVGhhdCBmdW5jdGlvbiBpcyBrZXksIHJpZ2h0PyBXaGVyZSBhcmUgd2UgYWN0dWFsbHkgcmVnaXN0ZXJpbmcgQVRNIGRldmljZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGhlcmUuIExldCBtZSB0aGluaywgSSByZW1lbWJlciBncmVwcGluZyBmb3IgYGF0bV9kZXZfcmVnaXN0ZXIoYCBlYXJsaWVyLCBhbmQgZ290IGEgZmV3IGhpdHM6IGBkcml2ZXJzL2F0bS9zb2xvcy1wY2kuY2AsIGBkcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmNgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGRlZmluaXRpb24gaXRzZWxmIGluIGBuZXQvYXRtL3Jlc291cmNlcy5jYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgc2hvd2luZyBQQ0kgYW5kIFVTQiBkZXZpY2VzIHBvdGVudGlhbGx5IGJlaW5nIHJlZ2lzdGVyZWQuXG5cbkJ1dCB0aGF0J3Mgbm90IGVub3VnaDsgSSBoYXZlIHRvIGJlIHRob3JvdWdoLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogcmVmZXJlbmNlcyB0byBgYXRtX2Rldl9yZWdpc3RlcmAgdGhhdCBhcmUgbm90IGZ1bmN0aW9uIGNhbGxzLiBNYXliZSB0aGVyZSdzIHNvbWUgc3VidGxlIGxpbmthZ2UgSSdtIG1pc3NpbmcgYmVjYXVzZSBJJ20gb25seSBsb29raW5nIGZvciB0aGUgdHlwaWNhbCBmdW5jdGlvbiBjYWxsIHN5bnRheD8gSSdsbCBjaGVjayBmb3IgdGhhdC4gSXQgd291bGQgYmUgYSBzaWxseSBvdmVyc2lnaHQuIExldCBtZSBzZWUgd2hhdCBJIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDA5MywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ2OjU3LjExOTUyNTM4N1oiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwNjczMTA0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdG1fZGV2X3JlZ2lzdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jPTEzNDg9c3RhdGljIGludCBhdG1faW5pdChzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCwgc3RydWN0IGRldmljZSAqcGFyZW50KVxcbi0tXFxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTM1OC1cXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYzoxMzU5OlxcdFxcdGNhcmQtXFx1MDAzZWF0bWRldltpXSA9IGF0bV9kZXZfcmVnaXN0ZXIoXFxcInNvbG9zLXBjaVxcXCIsIHBhcmVudCwgXFx1MDAyNmZwZ2Ffb3BzLCAtMSwgTlVMTCk7XFxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTM2MC1cXHRcXHRpZiAoIWNhcmQtXFx1MDAzZWF0bWRldltpXSkge1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jPTkwMT1zdGF0aWMgaW50IHVzYmF0bV9hdG1faW5pdChzdHJ1Y3QgdXNiYXRtX2RhdGEgKmluc3RhbmNlKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTkwOS1cXHQgKiBhYm9ydCBpZiBhdG1fZGV2LVxcdTAwM2VkZXZfZGF0YSBpcyBOVUxMLiAqL1xcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYzo5MTA6XFx0YXRtX2RldiA9IGF0bV9kZXZfcmVnaXN0ZXIoaW5zdGFuY2UtXFx1MDAzZWRyaXZlcl9uYW1lLFxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy05MTEtXFx0XFx0XFx0XFx0ICAgXFx1MDAyNmluc3RhbmNlLVxcdTAwM2V1c2JfaW50Zi1cXHUwMDNlZGV2LCBcXHUwMDI2dXNiYXRtX2F0bV9kZXZvcHMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oPTE1Mj1leHRlcm4gcndsb2NrX3QgdmNjX3NrbGlzdF9sb2NrO1xcbi0tXFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0xNTUtXFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaDoxNTY6c3RydWN0IGF0bV9kZXYgKmF0bV9kZXZfcmVnaXN0ZXIoY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IGRldmljZSAqcGFyZW50LFxcbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMTU3LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYXRtZGV2X29wcyAqb3BzLFxcbi0tXFxubmV0L2F0bS9yZXNvdXJjZXMuYz02OT1FWFBPUlRfU1lNQk9MKGF0bV9kZXZfbG9va3VwKTtcXG5uZXQvYXRtL3Jlc291cmNlcy5jLTcwLVxcbm5ldC9hdG0vcmVzb3VyY2VzLmM6NzE6c3RydWN0IGF0bV9kZXYgKmF0bV9kZXZfcmVnaXN0ZXIoY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IGRldmljZSAqcGFyZW50LFxcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzItXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBhdG1kZXZfb3BzICpvcHMsIGludCBudW1iZXIsXFxuLS1cXG5uZXQvYXRtL3Jlc291cmNlcy5jLTEzMS19XFxubmV0L2F0bS9yZXNvdXJjZXMuYzoxMzI6RVhQT1JUX1NZTUJPTChhdG1fZGV2X3JlZ2lzdGVyKTtcXG5uZXQvYXRtL3Jlc291cmNlcy5jLTEzMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDY6NTkuNDI2MjY0MzA4WiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjczODc3NTk5NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBVU0IgQVRNIE1vZGVtcyBhbmQgUFBQIG92ZXIgQVRNIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgZnV6emluZyB0aGUgVVNCIEFUTSBtb2RlbSBkcml2ZXIgKGBkcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmNgKS4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQgcmVnaXN0ZXJzIGFuIEFUTSBkZXZpY2Ugd2hlbiBhIFVTQiBBVE0gbW9kZW0gY29ubmVjdHMsIGFuZCBzeXprYWxsZXIgY2FuIGVtdWxhdGUgdGhpcyB1c2luZyBSYXcgR2FkZ2V0L0R1bW15IEhDRC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuQnV0IHRoZW4sIEkgbmVlZCB0byBjb25zaWRlciBgcHBwb2F0bWAsIHdoaWNoIGltcGxlbWVudHMgUFBQIG92ZXIgQVRNIGluIGBuZXQvYXRtL3BwcG9hdG0uY2AuICBJIHNlZSB0aGF0IGBwcHBvYXRtX3NlbmRgIGlzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIGZvciB0cmFuc21pdHRpbmcgUFBQIHBhY2tldHMgb3ZlciB0aGUgQVRNIG5ldHdvcmsuIFRoaXMgbG9va3MgbGlrZSBhIHByb21pc2luZyB0YXJnZXQuXG5cbkxldCdzIGJyZWFrIGRvd24gd2h5IHRoaXMgaXMgd29ydGggZnV6emluZzogIEl0J3MgaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIChgbmV0L2F0bS9gKS4gSXQgaGFuZGxlcyBwYWNrZXQgdHJhbnNtaXNzaW9uIGxvZ2ljLCBpbmNsdWRpbmcgaGVhZHJvb20gbWFuYWdlbWVudCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGBza2JfY293X2hlYWRgLCBgc2tiX3B1bGxgLCBgc2tiX3B1c2hgLCBtZW1vcnkgbWFuYWdlbWVudCAoYWxsb2NhdGluZyBoZWFkcm9vbSwgZXJyb3IgaGFuZGxpbmcsIHNrYiBmcmVlaW5nKSwgYW5kIGl0IHVzZXMgYm91bmRzIGNoZWNraW5nIChgcHNrYl9tYXlfcHVsbGApLiAgVGhlIHJlYWNoYWJpbGl0eSBsb29rcyBzb2xpZDogYSBzdGFuZGFyZCBuZXR3b3JraW5nIHN1YnN5c3RlbSB3aXRoIFBQUCBjaGFubmVscywgYW5kIHdpdGggc3l6a2FsbGVyJ3MgVVNCIGdhZGdldCBlbXVsYXRpb24gd2UgY2FuIGRlZmluaXRlbHkgcmVhY2ggaXQsIGJ5IGVtdWxhdGluZyBhIFVTQiBBVE0gbW9kZW0uXG5cbk5vdywgSSdtIGRpZ2dpbmcgZGVlcGVyIHRvIGZpbmQgb3RoZXIgd2F5cyBhbiBBVE0gdmlydHVhbCBjaXJjdWl0IGNvbm5lY3Rpb24gKGF0bV92Y2MpIG1pZ2h0IGJlIGNyZWF0ZWQuICBUaGUgYEFUTV9CQUNLRU5EX1BQUGAgb3B0aW9uIGlzIGludGVyZXN0aW5nLiBJJ20gcmV2aWV3aW5nIGBwcHBvYXRtX2Fzc2lnbl92Y2NgIHdoaWNoIGlzIGNhbGxlZCBieSBgcHBwb2F0bV9pb2N0bGAuICBFc3NlbnRpYWxseSwgYSB1c2VyLXNwYWNlIHByb2Nlc3Mgd291bGQgbmVlZCB0byBvcGVuIGEgUFBQIGRldmljZSwgdXNlIGBQUFBJT0NBVFRDSEFOYCBhbmQgYFBQUElPQ0NPTk5FQ1RgLCBhbmQgdGhlbiBlaXRoZXIgd3JpdGUgZGlyZWN0bHkgdG8gdGhlIFBQUCBkZXZpY2UsIG9yIHNldCB1cCBhIFBQUCBuZXR3b3JrIGludGVyZmFjZSwgd2hpY2ggdGhlbiB1c2VzIGBjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KGNoYW4sIHNrYilgIHRvIHNlbmQgcGFja2V0cy4gIFRoaXMgKmlzKiBgcHBwb2F0bV9zZW5kYC5cblxuUmVnYXJkaW5nIGZ1enppbmcsIGBwcHBvYXRtX3NlbmRgIGlzIG15IHByaW1hcnkgdGFyZ2V0LCBhcyB0aGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBtb2RpZmljYXRpb25zIGFyZSB0YWtpbmcgcGxhY2UuIEl0J3MgbWFya2VkIGFzIGBzdGF0aWNgIGluIGBuZXQvYXRtL3BwcG9hdG0uY2AsIGJ1dCBzaW5jZSBpdCdzIHVzZWQgaW4gYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgcHBwb2F0bV9vcHNgLCB0aGUgY29tcGlsZXIgKmNhbm5vdCogaW5saW5lIGl0IGF3YXk7IGl0IHdpbGwgaGF2ZSBhIHJlYWwgc3ltYm9sIGFkZHJlc3MuIEkgbmVlZCB0byBub3RlIGFueSBvdGhlciBmdW5jdGlvbnMgZGVmaW5lZCBpbiBgbmV0L2F0bS9wcHBvYXRtLmNgLCBzbyBJIHdpbGwgY2hlY2sgdGhlc2Ugbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDk4MCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDc6MDYuODE0MDI4NDg5WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjQ4NDg4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWjAtOV9dKy4qXFxcXCguKlxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9hdG0vcHBwb2F0bS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vcHBwb2F0bS5jPTg2PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBwcGxsY1s2XSA9IHsgMHhGRSwgMHhGRSwgMHgwMywgMHhDRiwgMHhDMCwgMHgyMSB9O1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtODgtXFxubmV0L2F0bS9wcHBvYXRtLmM6ODk6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmF0bXZjY190b19wdmNjKGNvbnN0IHN0cnVjdCBhdG1fdmNjICphdG12Y2MpXFxubmV0L2F0bS9wcHBvYXRtLmMtOTAte1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtOTMtXFxubmV0L2F0bS9wcHBvYXRtLmM6OTQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmNoYW5fdG9fcHZjYyhjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXFxubmV0L2F0bS9wcHBvYXRtLmMtOTUte1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMTAzLSAqL1xcbm5ldC9hdG0vcHBwb2F0bS5jOjEwNDpzdGF0aWMgdm9pZCBwcHBvYXRtX3dha2V1cF9zZW5kZXIoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KVxcbm5ldC9hdG0vcHBwb2F0bS5jLTEwNS17XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xMTAtXFxubmV0L2F0bS9wcHBvYXRtLmM6MTExOnN0YXRpYyB2b2lkIHBwcG9hdG1fcmVsZWFzZV9jYihzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTExMi17XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xMzMtICovXFxubmV0L2F0bS9wcHBvYXRtLmM6MTM0OnN0YXRpYyB2b2lkIHBwcG9hdG1fcG9wKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2F0bS9wcHBvYXRtLmMtMTM1LXtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTE2Ni0gKi9cXG5uZXQvYXRtL3BwcG9hdG0uYzoxNjc6c3RhdGljIHZvaWQgcHBwb2F0bV91bmFzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcXG5uZXQvYXRtL3BwcG9hdG0uYy0xNjgte1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMTgwLS8qIENhbGxlZCB3aGVuIGFuIEFBTDUgUERVIGNvbWVzIGluICovXFxubmV0L2F0bS9wcHBvYXRtLmM6MTgxOnN0YXRpYyB2b2lkIHBwcG9hdG1fcHVzaChzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTE4Mi17XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0yMzMtXFxubmV0L2F0bS9wcHBvYXRtLmM6MjM0OnN0YXRpYyBpbnQgcHBwb2F0bV9tYXlfc2VuZChzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MsIGludCBzaXplKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTIzNS17XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0yODgtI2RlZmluZSBEUk9QX1BBQ0tFVCAxXFxubmV0L2F0bS9wcHBvYXRtLmM6Mjg5OnN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYXRtL3BwcG9hdG0uYy0yOTAte1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmM9Mzc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9hdG1fb3BzID0ge1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMzc5LVxcbm5ldC9hdG0vcHBwb2F0bS5jOjM4MDpzdGF0aWMgaW50IHBwcG9hdG1fYXNzaWduX3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjLCB2b2lkIF9fdXNlciAqYXJnKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTM4MS17XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYz00NjE9c3RhdGljIHN0cnVjdCBhdG1faW9jdGwgcHBwb2F0bV9pb2N0bF9vcHMgPSB7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy00NjUtXFxubmV0L2F0bS9wcHBvYXRtLmM6NDY2OnN0YXRpYyBpbnQgX19pbml0IHBwcG9hdG1faW5pdCh2b2lkKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ2Ny17XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy00NzEtXFxubmV0L2F0bS9wcHBvYXRtLmM6NDcyOnN0YXRpYyB2b2lkIF9fZXhpdCBwcHBvYXRtX2V4aXQodm9pZClcXG5uZXQvYXRtL3BwcG9hdG0uYy00NzMte1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtNDc2LVxcbm5ldC9hdG0vcHBwb2F0bS5jOjQ3Nzptb2R1bGVfaW5pdChwcHBvYXRtX2luaXQpO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjQ3ODptb2R1bGVfZXhpdChwcHBvYXRtX2V4aXQpO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3OS1cXG5uZXQvYXRtL3BwcG9hdG0uYzo0ODA6TU9EVUxFX0FVVEhPUihcXFwiTWl0Y2hlbGwgQmxhbmsgSnIgXFx1MDAzY21pdGNoQHNmZ290aC5jb21cXHUwMDNlXFxcIik7XFxubmV0L2F0bS9wcHBvYXRtLmM6NDgxOk1PRFVMRV9ERVNDUklQVElPTihcXFwiUkZDMjM2NCBQUFAgb3ZlciBBVE0vQUFMNVxcXCIpO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjQ4MjpNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ3OjA2Ljg5MDUyMDk4N1oiLCJTZXEiOjYzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0ODM1MjE3NDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFBQUG9BVE0gS2VybmVsIE1vZHVsZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEknbSBmb2N1c2luZyBvbiB0aGUgbW9kaWZpY2F0aW9ucywgc28gdGhlIGNvcmUgZnVuY3Rpb24gdG8gZXhhbWluZSBpcyBgcHBwb2F0bV9zZW5kYC4gSXQncyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24sIHRoYXQncyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIGNoYW5nZXMgbGllcy4gVGhlIHNldHVwIHBvaW50cyBhcHBlYXIgdG8gYmUgYHBwcG9hdG1fYXNzaWduX3ZjY2AgYW5kIGBwcHBvYXRtX2lvY3RsYC5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIGBwcHBvYXRtX21heV9zZW5kYCBsb29rcyBwcm9taXNpbmcsIEkgbmVlZCB0byBzZWUgaWYgaXTigJlzIHN0YXRpYy4gWWVzLCBpdCBpcywgYW5kIGl0J3MgY2FsbGVkIGJ5IGBwcHBvYXRtX3NlbmRgLCBzbyB0aGF04oCZcyBpbnRlcmVzdGluZy4gRm9yIG15IEZvY3VzU3ltYm9scywgSeKAmWxsIGRlZmluaXRlbHkgbmVlZDpcblxuKiAgIGBwcHBvYXRtX3NlbmRgXG4qICAgYHBwcG9hdG1fYXNzaWduX3ZjY2BcbiogICBQb3RlbnRpYWxseSwgYHBwcG9hdG1fZGV2cHBwX2lvY3RsYCAqb3IqIGBwcHBvYXRtX2lvY3RsYCwgSSdsbCBzdGFydCB3aXRoIHRoZSBtb3JlIGNvbW1vbiBgcHBwb2F0bV9pb2N0bGAuIEJ1dCBgcHBwb2F0bV9zZW5kYCBpcyB0aGUgcHJpbWFyeSBjYW5kaWRhdGUgaGVyZS4gSXQncyB0aGUgY29yZSBvZiB0aGUgcGFja2V0IHRyYW5zbWlzc2lvbi5cblxuR2l2ZW4gdGhhdCB0aGlzIGlzIFBQUG9BVE0sIEknbSBwcmV0dHkgY2VydGFpbiBgcHBwb2F0bV9zZW5kYCBpc24ndCB1c2VkIGV2ZXJ5d2hlcmUuIEl0J3MgZGVmaW5pdGVseSBzcGVjaWZpYyB0byB0cmFuc21pdHRpbmcgcGFja2V0cyBvdmVyIEFUTSwgc28gbm90IGEgZ2VuZXJhbC1wdXJwb3NlIGZ1bmN0aW9uLlxuXG5Ob3csIHRvIGRldGVybWluZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCwgSSBuZWVkIHRvIGNhcmVmdWxseSByZXZpZXcgdGhlIEtjb25maWcgZmlsZXMuIEknbGwgc3RhcnQgd2l0aCBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgLlxuYGBga2NvbmZpZ1xuaWYgUFBQXG5cbmNvbmZpZyBQUFBPQVRNXG5cdHRyaXN0YXRlIFwiUFBQIG92ZXIgQVRNXCJcblx0ZGVwZW5kcyBvbiBBVE1cbmBgYFxuQmFzZWQgb24gdGhlIGZpbGUsIHRoZSBjb25maWd1cmF0aW9ucyBhcmU6XG5cbiogICBgUFBQT0FUTWBcbiogICBgUFBQYFxuKiAgIGBBVE1gXG5cbkknbGwgYWxzbyB2ZXJpZnkgdGhhdCBgQVRNYCBpc24ndCBjb250aW5nZW50IG9uIGFueXRoaW5nIGVsc2UuIEknbGwgY2hlY2sgYG5ldC9hdG0vS2NvbmZpZ2AgdG8gYmUgc3VyZS4gVGhhdCBzaG91bGQgYmUgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODA2NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NzoxMS43MjU3NDE5MjVaIiwiU2VxIjo2NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxOTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9hdG0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBBc3luY2hyb25vdXMgVHJhbnNmZXIgTW9kZSAoQVRNKVxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgQVRNXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiQXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcXFwiXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIEFUTSBpcyBhIGhpZ2gtc3BlZWQgbmV0d29ya2luZyB0ZWNobm9sb2d5IGZvciBMb2NhbCBBcmVhIE5ldHdvcmtzXFxuICAxMDpcXHRcXHQgIGFuZCBXaWRlIEFyZWEgTmV0d29ya3MuICBJdCB1c2VzIGEgZml4ZWQgcGFja2V0IHNpemUgYW5kIGlzXFxuICAxMTpcXHRcXHQgIGNvbm5lY3Rpb24gb3JpZW50ZWQsIGFsbG93aW5nIGZvciB0aGUgbmVnb3RpYXRpb24gb2YgbWluaW11bVxcbiAgMTI6XFx0XFx0ICBiYW5kd2lkdGggcmVxdWlyZW1lbnRzLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIEluIG9yZGVyIHRvIHBhcnRpY2lwYXRlIGluIGFuIEFUTSBuZXR3b3JrLCB5b3VyIExpbnV4IGJveCBuZWVkcyBhblxcbiAgMTU6XFx0XFx0ICBBVE0gbmV0d29ya2luZyBjYXJkLiBJZiB5b3UgaGF2ZSB0aGF0LCBzYXkgWSBoZXJlIGFuZCB0byB0aGUgZHJpdmVyXFxuICAxNjpcXHRcXHQgIG9mIHlvdXIgQVRNIGNhcmQgYmVsb3cuXFxuICAxNzpcXHRcXG4gIDE4OlxcdFxcdCAgTm90ZSB0aGF0IHlvdSBuZWVkIGEgc2V0IG9mIHVzZXItc3BhY2UgcHJvZ3JhbXMgdG8gYWN0dWFsbHkgbWFrZSB1c2VcXG4gIDE5OlxcdFxcdCAgb2YgQVRNLiAgU2VlIHRoZSBmaWxlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hdG0ucnN0XFx1MDAzZSBmb3JcXG4gIDIwOlxcdFxcdCAgZnVydGhlciBkZXRhaWxzLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRjb25maWcgQVRNX0JSMjY4NFxcbiAgMjM6XFx0XFx0dHJpc3RhdGUgXFxcIlJGQzE0ODMvMjY4NCBCcmlkZ2VkIHByb3RvY29sc1xcXCJcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gQVRNIFxcdTAwMjZcXHUwMDI2IElORVRcXG4gIDI1OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDc6MTEuNzI1ODQ3MTM2WiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM4Mjc1MzgzMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBUaG91Z2h0cyoqXG5cbk9rYXksIHNvIEknbSBjb25maWd1cmluZyB0aGlzIHN5c3RlbSwgYW5kIEkndmUgZ290IGEgbGl0dGxlIGRlcGVuZGVuY3kgcHV6emxlIHRvIHNvcnQgb3V0LiBJdCBsb29rcyBsaWtlIGBBVE1gIGl0c2VsZiBzdGFuZHMgYWxvbmUg4oCTIGl0IGRvZXNuJ3QgcmVseSBvbiBhbnl0aGluZyBlbHNlIGRpcmVjdGx5LCBhY2NvcmRpbmcgdG8gdGhpcyBpbml0aWFsIGFzc2Vzc21lbnQuIFRoZW4gd2UgaGF2ZSBgUFBQT0FUTWAuIFRoYXQgb25lIGlzIGEgYml0IG1vcmUgY29uZGl0aW9uYWw7IGl0J3MgdHVja2VkIGF3YXkgaW5zaWRlIGFuIGBpZiBQUFBgIHN0YXRlbWVudCwgYW5kIGNydWNpYWxseSwgaXQgKmRlcGVuZHMqIG9uIGBBVE1gLiBcblxuVGhlcmVmb3JlLCBteSBjb25maWd1cmF0aW9uIG5lZWRzIHRvIGluY2x1ZGU6XG5cbjEuICBgQVRNYFxuMi4gIGBQUFBgXG4zLiAgYFBQUE9BVE1gXG5cbkJ1dCwga25vd2luZyBob3cgdGhlc2UgdGhpbmdzIGdvLCBJIGNhbid0IGp1c3QgdGFrZSB0aGlzIGF0IGZhY2UgdmFsdWUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBzdWJ0bGUgZGVwZW5kZW5jaWVzIG9yIHJlcXVpcmVtZW50cyBsdXJraW5nIGFyb3VuZC4gVG8gYmUgdGhvcm91Z2gsIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBuZXQvS2NvbmZpZ2AgdG8gc2VlIGV4YWN0bHkgKmhvdyogYG5ldC9hdG0vS2NvbmZpZ2AgaXMgcHVsbGVkIGludG8gdGhlIG92ZXJhbGwgcGljdHVyZS4gSSBuZWVkIHRoZSBmdWxsIGNvbnRleHQgdG8gYmUgY29uZmlkZW50IGluIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MTM4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NzoxNS41NTMzODgxNzRaIiwiU2VxIjo2NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjQ5OTUzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UuKm5ldC9hdG0vS2NvbmZpZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTI1Nj1zb3VyY2UgXFxcIm5ldC90aXBjL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjU3OnNvdXJjZSBcXFwibmV0L2F0bS9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTI1OC1zb3VyY2UgXFxcIm5ldC9sMnRwL0tjb25maWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ3OjE1LjY5NTg5NDMzMVoiLCJTZXEiOjY3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzg1NDY2NTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBOZXR3b3JrIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZXNlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgc3RydWN0dXJlZC4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgYG5ldC9hdG0vS2NvbmZpZ2AgaXMgZGlyZWN0bHkgaW5jbHVkZWQgaW4gYG5ldC9LY29uZmlnYCwgd2hpY2ggaXMgdW5kZXIgdGhlIGBtZW51Y29uZmlnIE5FVGAgc2VjdGlvbi4gVGhhdCBtYWtlcyBzZW5zZSwga2VlcHMgdGhpbmdzIG9yZ2FuaXplZC4gTm93LCB0aGUgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCBpcyBhbHNvIGluY2x1ZGVkLCBidXQgdGhpcyB0aW1lIGluIGBkcml2ZXJzL25ldC9LY29uZmlnYC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgZm9yIGFueSBjb25kaXRpb25hbCBwYXJlbnQgbWVudXMgdGhhdCBtaWdodCBhZmZlY3QgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IFBQUCBjb25maWd1cmF0aW9ucyBhcmUgb25seSB2aXNpYmxlIG9yIGVuYWJsZWQgdW5kZXIgdGhlIGV4cGVjdGVkIGNpcmN1bXN0YW5jZXMuIE5vIHBvaW50IGluIHdhZGluZyB0aHJvdWdoIGV4dHJhbmVvdXMgb3B0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBjb250cm9sbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTU0NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ3OjE4LjA4MTM2MzIyMVoiLCJTZXEiOjY4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk3Njc1MTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvdXJjZS4qZHJpdmVycy9uZXQvcHBwL0tjb25maWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9NTI2PXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcGxpcC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWctNTI3LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NTI4OnNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZy01MjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ3OjE4LjM3OTA0Mzg4M1oiLCJTZXEiOjY5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTg0NDI2MzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBzb21ldGhpbmcgbmV0d29yay1yZWxhdGVkLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgc2VlbSBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIHNpbmNlIHRoYXQncyB3aGVyZSBkZXZpY2UgZHJpdmVycyBhcmUgc2V0IHVwLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGUgcHJpbWFyeSBLY29uZmlnIGZpbGUgZm9yIG5ldHdvcmsgZHJpdmVycyBzaG91bGQgYmUgaW4gdGhlIGBkcml2ZXJzL25ldGAgZGlyZWN0b3J5LCBhbmQgaXQgbWFrZXMgc2Vuc2UgdG8gc3RhcnQgd2l0aCBgS2NvbmZpZ2AuIE5vdywgd2hlcmUgd2FzIHRoYXQgc3BlY2lmaWMgb3B0aW9uIEkgd2FzIGxvb2tpbmcgZm9yPyBSaWdodCwgSSBzZWVtIHRvIHJlY2FsbCBpdCBiZWluZyBuZWFyIGxpbmUgNTI4LiBMZXQncyBzdGFydCB0aGVyZS4gSSdsbCBuZWVkIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBzZWUgd2hhdCdzIGJlaW5nIGRlZmluZWQgYXJvdW5kIHRoYXQgc3BlY2lmaWMgbGluZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb3IgZGlnIGludG8gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5OTA3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDc6MjAuNTYzNDc0MjI1WiIsIlNlcSI6NzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUyMDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ1xcXCJcXG4gNTIxOlxcdFxcbiA1MjI6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9tZGlvL0tjb25maWdcXFwiXFxuIDUyMzpcXHRcXG4gNTI0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcGNzL0tjb25maWdcXFwiXFxuIDUyNTpcXHRcXG4gNTI2OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcGxpcC9LY29uZmlnXFxcIlxcbiA1Mjc6XFx0XFxuIDUyODpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnXFxcIlxcbiA1Mjk6XFx0XFxuIDUzMDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZ1xcXCJcXG4gNTMxOlxcdFxcbiA1MzI6XFx0c291cmNlIFxcXCJkcml2ZXJzL3MzOTAvbmV0L0tjb25maWdcXFwiXFxuIDUzMzpcXHRcXG4gNTM0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcXFwiXFxuIDUzNTpcXHRcXG4gNTM2OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZ1xcXCJcXG4gNTM3OlxcdFxcbiA1Mzg6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93YW4vS2NvbmZpZ1xcXCJcXG4gNTM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NzoyMC41NjM1OTcyNzVaIiwiU2VxIjo3MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzY4Nzk4MjE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQUFAgT3ZlciBBVE0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgc3RyYWlnaHQ6IHRvIGdldCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHVwIGFuZCBydW5uaW5nLCBJIGFic29sdXRlbHkgbmVlZCBgUFBQYCwgYFBQUE9BVE1gLCBhbmQgYEFUTWAgZW5hYmxlZC4gVGhvc2UgYXJlIHRoZSBlc3NlbnRpYWxzLiBJZiBJIHdhbnQgdG8gdGhyb3cgaW4gVVNCIGVtdWxhdGlvbiBmb3IgdGVzdGluZywgdGhlbiBgVVNCX0FUTWAgb3IgYFVTQl9SQVdfR0FER0VUYCBjb3VsZCBiZSB1c2VmdWwsIGJ1dCB0aG9zZSBhcmUgZXh0cmFzLiBUaGUgY3JpdGljYWwgY29uZmlncyBhcmUsIGFnYWluLCBgUFBQYCwgYEFUTWAsIGFuZCBgUFBQT0FUTWAuXG5cbkxldCBtZSBqdXN0IHJ1biB0aHJvdWdoIG15IGNoZWNrbGlzdCB0byBtYWtlIGFic29sdXRlbHkgY2VydGFpbiBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgbmVlZCB0byBiZSAqc3VyZSo6XG5cbjEuICAqKldvcnRoRnV6emluZzoqKiBZZXAsIGRlZmluaXRlbHkuIFRoaXMgcGF0Y2ggdG91Y2hlcyB0aGUgY29yZSBuZXR3b3JraW5nIGNvZGUgd2l0aGluIGBuZXQvYXRtL3BwcG9hdG0uY2AsIHNwZWNpZmljYWxseSBgcHBwb2F0bV9zZW5kYC4gSXQncyBhbHRlcmluZyBob3cgd2UgaGFuZGxlIFNLQiBidWZmZXJzIOKAkyB0aGluZ3MgbGlrZSBgc2tiX2Nvd19oZWFkYCwgYHNrYl9wdWxsYCwgYHNrYl9wdXNoYCDigJMgYW5kIGFsc28gcGFja2V0IHZhbGlkYXRpb24gdXNpbmcgYHBza2JfbWF5X3B1bGxgLCBhbG9uZyB3aXRoIGVycm9yIGhhbmRsaW5nIGZvciBQUFAgb3ZlciBBVE0gZnJhbWUgdHJhbnNtaXNzaW9uLiBUaGlzIGNvZGUncyB0b3RhbGx5IHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgQVRNIGFuZCBQUFAgaW50ZXJmYWNlcywgaW5jbHVkaW5nLCBsaWtlLCBlbXVsYXRlZCBVU0IgQVRNIGRldmljZXMgdmlhIFVTQiBnYWRnZXRzLCB3aGljaCBpcyBncmVhdCBmb3IgdGVzdGluZy5cbjIuICAqKkZvY3VzU3ltYm9sczoqKiBJJ3ZlIG5haWxlZCBkb3duIHRoZSBrZXkgc3ltYm9sczogYHBwcG9hdG1fc2VuZGAgYW5kIGBwcHBvYXRtX2Fzc2lnbl92Y2NgLlxuMy4gICoqRW5hYmxlQ29uZmlnczoqKiBJJ20gY29uZmlybWluZyBgQVRNYCwgYFBQUGAsIGFuZCBgUFBQT0FUTWAgYXJlIGFsbCBlbmFibGVkIGFuZCB2ZXJpZmllZCwgd2hpY2ggdGhleSBhcmUuXG5cblJpZ2h0LCBldmVyeXRoaW5nIGNoZWNrcyBvdXQgcGVyZmVjdGx5LiBUaGUgc291cmNlIGZpbGVzIGFyZSBhbGwgaW4gb3JkZXIuIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNDA5LCJPdXRwdXRUb2tlbnMiOjE2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ3OjI0LjI1MTU4MzMwNVoiLCJTZXEiOjcyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODAxMjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRNXCIsXG4gICAgXCJQUFBcIixcbiAgICBcIlBQUE9BVE1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcHBvYXRtX3NlbmRcIixcbiAgICBcInBwcG9hdG1fYXNzaWduX3ZjY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBwYWNrZXQgdHJhbnNtaXNzaW9uIGhhbmRsaW5nIGFuZCBidWZmZXIgbWFuYWdlbWVudCBpbiBwcHBvYXRtX3NlbmQgd2l0aGluIG5ldC9hdG0vcHBwb2F0bS5jLiBJdCByZXBsYWNlcyBza2JfcmVhbGxvY19oZWFkcm9vbSB3aXRoIHNrYl9jb3dfaGVhZCwgcmVzdHJ1Y3R1cmVzIHRoZSBvcmRlciBvZiBza2JfcHVsbCBhbmQgc2tiX3B1c2gsIHJlbW92ZXMgdGhlIHVuZG8gbG9naWMgb24gc2VuZCBmYWlsdXJlLCBhbmQgYWRkcyBpbnB1dCB2YWxpZGF0aW9uIHZpYSBwc2tiX21heV9wdWxsLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBwYXRocyB0aGF0IGNhbiBiZSBleGVyY2lzZWQgdmlhIFBQUCBvdmVyIEFUTSBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBVE1cIixcbiAgICBcIlBQUFwiLFxuICAgIFwiUFBQT0FUTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBwcG9hdG1fc2VuZFwiLFxuICAgIFwicHBwb2F0bV9hc3NpZ25fdmNjXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIHBhY2tldCB0cmFuc21pc3Npb24gaGFuZGxpbmcgYW5kIGJ1ZmZlciBtYW5hZ2VtZW50IGluIHBwcG9hdG1fc2VuZCB3aXRoaW4gbmV0L2F0bS9wcHBvYXRtLmMuIEl0IHJlcGxhY2VzIHNrYl9yZWFsbG9jX2hlYWRyb29tIHdpdGggc2tiX2Nvd19oZWFkLCByZXN0cnVjdHVyZXMgdGhlIG9yZGVyIG9mIHNrYl9wdWxsIGFuZCBza2JfcHVzaCwgcmVtb3ZlcyB0aGUgdW5kbyBsb2dpYyBvbiBzZW5kIGZhaWx1cmUsIGFuZCBhZGRzIGlucHV0IHZhbGlkYXRpb24gdmlhIHBza2JfbWF5X3B1bGwuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIHBhdGhzIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgUFBQIG92ZXIgQVRNIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NzoyNC4zNzk2MDUzOTVaIiwiU2VxIjo3MywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzI1ODY2ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDc6MjQuMzgwMTgxMjA1WiIsIlNlcSI6NzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDc3MjUyODQ3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBib3VuZHMgY2hlY2tpbmcgYW5kIGhlYWRyb29tIG1hbmFnZW1lbnQgaW4gdGhlIFBQUG9BVE0gdHJhbnNtaXQgcGF0aCAoYHBwcG9hdG1fc2VuZGApLiBTcGVjaWZpY2FsbHk6XFxuMS4gSXQgYWRkcyBhIGBwc2tiX21heV9wdWxsKHNrYiwgMSlgIGNoZWNrIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBvbiBlbXB0eSBza2JzIChgc2tiLVxcdTAwM2VkYXRhWzBdYCkuXFxuMi4gSXQgcmVwbGFjZXMgYHNrYl9yZWFsbG9jX2hlYWRyb29tYCB3aXRoIGBza2JfY293X2hlYWRgIHRvIGVuc3VyZSBoZWFkcm9vbSBpcyBzYWZlbHkgd3JpdGFibGUgYW5kIGF2YWlsYWJsZS5cXG4zLiBJdCBkZWZlcnMgYHNrYl9wdWxsYCBwcm90b2NvbCBjb21wcmVzc2lvbiB1bnRpbCBpbW1lZGlhdGVseSBiZWZvcmUgdHJhbnNtaXNzaW9uLCByZW1vdmluZyB0aGUgcHJldmlvdXMgZnJhZ2lsZSB1bmRvIGxvZ2ljIHRoYXQgcGVyZm9ybWVkIGFuIG91dC1vZi1ib3VuZHMgY2hlY2sgKGBza2ItXFx1MDAzZWRhdGFbLTFdID09ICdcXFxcMCdgKS5cXG40LiBJdCBjb3BpZXMgdGhlIGNvbnN0YW50IExMQyBoZWFkZXIgKGBwcHBsbGNgKSBpbnRvIHRoZSBwdXNoZWQgc2tiIGhlYWRyb29tIGJlZm9yZSB0cmFuc21pc3Npb24uXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvIHRoZXkgcGFzcyB1bmluaXRpYWxpemVkIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4gVGhlIGlzc3VlcyBhZGRyZXNzZWQgYW5kIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBwYWNrZXQgYnVmZmVyIG1hbmlwdWxhdGlvbiBpbiB0aGlzIHBhdGggKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGJ1ZmZlciBvdmVyLXJlYWRzLCBvciBza2IgbGlmZXRpbWUvcmVmY291bnRpbmcgZXJyb3JzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MzBiZmE1MzFkYTc3N2RiMjkzMmE2Nzk0YzY5YzlmMjcyN2IwODlmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMDA6NDQ6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYXRtL3BwcG9hdG0uYyBiL25ldC9hdG0vcHBwb2F0bS5jXG5pbmRleCA2ZGE1MmQxMmRmNjhlLi41MjE0Nzg2ZTYxZDExIDEwMDY0NFxuLS0tIGEvbmV0L2F0bS9wcHBvYXRtLmNcbisrKyBiL25ldC9hdG0vcHBwb2F0bS5jXG5AQCAtMjkyLDEwICsyOTIsMTMgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c3RydWN0IGF0bV92Y2MgKnZjYztcbiBcdGludCByZXQ7XG4gXG4rXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAxKSkge1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuIERST1BfUEFDS0VUO1xuK1x0fVxuK1xuIFx0QVRNX1NLQihza2IpLVx1MDAzZXZjYyA9IHB2Y2MtXHUwMDNlYXRtdmNjO1xuIFx0cHJfZGVidWcoXCIoc2tiPTB4JXAsIHZjYz0weCVwKVxcblwiLCBza2IsIHB2Y2MtXHUwMDNlYXRtdmNjKTtcbi1cdGlmIChza2ItXHUwMDNlZGF0YVswXSA9PSAnXFwwJyBcdTAwMjZcdTAwMjYgKHB2Y2MtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0NPTVBfUFJPVCkpXG4tXHRcdCh2b2lkKSBza2JfcHVsbChza2IsIDEpO1xuIFxuIFx0dmNjID0gQVRNX1NLQihza2IpLVx1MDAzZXZjYztcbiBcdGJoX2xvY2tfc29jayhza19hdG0odmNjKSk7XG5AQCAtMzE3LDIzICszMjAsMTMgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0c3dpdGNoIChwdmNjLVx1MDAzZWVuY2Fwcykge1x0XHQvKiBMTEMgZW5jYXBzdWxhdGlvbiBuZWVkZWQgKi9cbiBcdGNhc2UgZV9sbGM6XG4tXHRcdGlmIChza2JfaGVhZHJvb20oc2tiKSBcdTAwM2MgTExDX0xFTikge1xuLVx0XHRcdHN0cnVjdCBza19idWZmICpuO1xuLVx0XHRcdG4gPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsIExMQ19MRU4pO1xuLVx0XHRcdGlmIChuICE9IE5VTEwgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIG4tXHUwMDNldHJ1ZXNpemUpKSB7XG4tXHRcdFx0XHRrZnJlZV9za2Iobik7XG4tXHRcdFx0XHRnb3RvIG5vc3BhY2U7XG4tXHRcdFx0fVxuLVx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4tXHRcdFx0c2tiID0gbjtcbi1cdFx0XHRpZiAoc2tiID09IE5VTEwpIHtcbi1cdFx0XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbi1cdFx0XHRcdHJldHVybiBEUk9QX1BBQ0tFVDtcbi1cdFx0XHR9XG4tXHRcdH0gZWxzZSBpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbitcdFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pKSB7XG4rXHRcdFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuK1x0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRcdHJldHVybiBEUk9QX1BBQ0tFVDtcbitcdFx0fVxuK1x0XHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbiBcdFx0XHRnb3RvIG5vc3BhY2U7XG4tXHRcdG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgZV92YzpcbiBcdFx0aWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cdTAwM2V0cnVlc2l6ZSkpXG5AQCAtMzQ2LDYgKzMzOSwxMiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdHJldHVybiAxO1xuIFx0fVxuIFxuK1x0aWYgKHNrYi1cdTAwM2VkYXRhWzBdID09ICdcXDAnIFx1MDAyNlx1MDAyNiAocHZjYy1cdTAwM2VmbGFncyBcdTAwMjYgU0NfQ09NUF9QUk9UKSlcbitcdFx0c2tiX3B1bGwoc2tiLCAxKTtcbitcbitcdGlmIChwdmNjLVx1MDAzZWVuY2FwcyA9PSBlX2xsYylcbitcdFx0bWVtY3B5KHNrYl9wdXNoKHNrYiwgTExDX0xFTiksIHBwcGxsYywgTExDX0xFTik7XG4rXG4gXHRhdG1fYWNjb3VudF90eCh2Y2MsIHNrYik7XG4gXHRwcl9kZWJ1ZyhcImF0bV9za2IoJXApLVx1MDAzZXZjYyglcCktXHUwMDNlZGV2KCVwKVxcblwiLFxuIFx0XHQgc2tiLCBBVE1fU0tCKHNrYiktXHUwMDNldmNjLCBBVE1fU0tCKHNrYiktXHUwMDNldmNjLVx1MDAzZWRldik7XG5AQCAtMzU1LDEzICszNTQsNiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gcmV0O1xuIG5vc3BhY2U6XG4gXHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XG4tXHQvKlxuLVx0ICogV2UgZG9uJ3QgaGF2ZSBzcGFjZSB0byBzZW5kIHRoaXMgU0tCIG5vdywgYnV0IHdlIG1pZ2h0IGhhdmVcbi1cdCAqIGFscmVhZHkgYXBwbGllZCBTQ19DT01QX1BST1QgY29tcHJlc3Npb24sIHNvIG1heSBuZWVkIHRvIHVuZG9cbi1cdCAqL1xuLVx0aWYgKChwdmNjLVx1MDAzZWZsYWdzIFx1MDAyNiBTQ19DT01QX1BST1QpIFx1MDAyNlx1MDAyNiBza2JfaGVhZHJvb20oc2tiKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbi1cdCAgICBza2ItXHUwMDNlZGF0YVstMV0gPT0gJ1xcMCcpXG4tXHRcdCh2b2lkKSBza2JfcHVzaChza2IsIDEpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDc6MjQuMzgwMTgyMTY1WiIsIlNlcSI6NzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2NDQ2MTAxNDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV2YWx1YXRpbmcgdGhlIE5lZWQgZm9yIGEgRGVkaWNhdGVkIEtNU0FOIFNlc3Npb24qKlxuXG5Pa2F5LCBzbyB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIHBhdGNoIGluIGBuZXQvYXRtL3BwcG9hdG0uY2Agd2FycmFudHMgaXRzIG93biBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIGJleW9uZCB0aGUgc3RhbmRhcmQgS0FTQU4gZnV6emluZyB3ZSBhbHJlYWR5IHJ1bi4gUmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgYE5lZWRzS01TQU5gIGlzIGB0cnVlYCBvciBgZmFsc2VgIGJhc2VkIG9uIGEgc2V0IG9mIHNwZWNpZmljIGNyaXRlcmlhLiBJJ20gdGFyZ2V0aW5nIHRoZSBhbWQ2NCBhcmNoaXRlY3R1cmUsIHNvIEknbGwga2VlcCB0aGF0IGluIG1pbmQuXG5cbkhlcmUncyB0aGUgY2hlY2tsaXN0IEkgbmVlZCB0byBmb2xsb3c6XG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyB0aGVzZSBhcmVhcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZWNvbWUgYSBwcm9ibGVtOlxuXG4xLiAgKipLZXJuZWwtdG8tdXNlcnNwYWNlIGNvbW11bmljYXRpb246KiogQXJlIHRoZXJlIGFueSBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSB0aHJvdWdoIGFueSBvZiB0aGUgdXN1YWwgc3VzcGVjdHMg4oCTIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rLCBpb2N0bCwgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzPyBDcml0aWNhbGx5LCBhcmUgdGhlc2Ugc3RydWN0dXJlcyAqZnVsbHkqIGluaXRpYWxpemVkIG9yIHplcm9lZD8gU3RydWN0dXJlIHBhZGRpbmcgaXMgYSBrZXkgYXJlYSBvZiBjb25jZXJuLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhOioqIERvZXMgdGhlIHBhdGNoIGludHJvZHVjZSBhbnkgYnJhbmNoaW5nIG9yIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgdGhhdCByZWx5IG9uIHRoZSAqdmFsdWUqIG9mIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHM/IFRoaXMgaXMgYSBjbGFzc2ljIHNvdXJjZSBvZiBLTVNBTiBidWdzLlxuMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbjoqKiBBcmUgbmV3LCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQ/IEFyZSBhbGwgZmllbGRzIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIGxhdGVyIGluIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBjb2RlIHBhdGhzP1xuNC4gICoqQm91bmRzIGNoZWNrcyBhbmQgYnVmZmVyIGhhbmRsaW5nOioqIERvZXMgdGhlIHBhdGNoIG1vZGlmeSBhbnkgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCAqY291bGQqIGFsbG93IHN1cnJvdW5kaW5nIGNvZGUgdG8gaW5hZHZlcnRlbnRseSBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyB3aXRoaW4gZXhpc3RpbmcgYnVmZmVycz9cblxuSWYgdGhlIGFuc3dlciBpcyAqbm8qIHRvIGFsbCBvZiB0aGUgYWJvdmUsIHRoZW4gYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuIFRoYXQgaXMsIGlmIHRoZSBwYXRjaCBwcmltYXJpbHkgaW50cm9kdWNlcyByaXNrcyBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKG91dC1vZi1ib3VuZHMsIG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmcywgdXNlLWFmdGVyLWZyZWUsIGV0Yy4pLiBUaGlzIGlzIGFsc28gdGhlIGNhc2UgaWYgYW55IHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQgKGUuZy4sIHVzaW5nIGA9IHswfWAsIGBtZW1zZXRgLCBvciBga3phbGxvY2ApIGJlZm9yZSBhbnkgcmVhZGluZyBvciBjb3B5aW5nIG9jY3Vycywgd2l0aCBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblNvLCB0aGUgZ2FtZSBwbGFuIGlzOiBJIG5lZWQgdG8gY2FyZWZ1bGx5IGluc3BlY3QgdGhlIHBhdGNoIGFuZCB0aGUgYG5ldC9hdG0vcHBwb2F0bS5jYCBmaWxlLiBJJ2xsIHVzZSBteSB1c3VhbCB0b29scywgbGlrZWx5IGByZWFkLWZpbGVgIGFuZCBgZ3JlcHBlcmAsIHRvIHF1aWNrbHkgaWRlbnRpZnkgcmVsZXZhbnQgc2VjdGlvbnMuIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsIGhlcmUuIEknbGwgbWV0aWN1bG91c2x5IGdvIHRocm91Z2ggZWFjaCBvZiB0aGUgYXJlYXMgbGlzdGVkLCBsb29raW5nIGZvciBwb3RlbnRpYWwgS01TQU4gaXNzdWVzLiBJJ2xsIGhhdmUgdG8gcGF5IHNwZWNpYWwgYXR0ZW50aW9uIHRvIGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCBrZXJuZWwtdXNlcnNwYWNlIGludGVyYWN0aW9ucy4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDIwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDc6NTAuODI2Mjg4ODg2WiIsIlNlcSI6NzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYXRtL3BwcG9hdG0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODUsXG4gIFwiTGluZUNvdW50XCI6IDg1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODU6XFx0ICogc3VwcG9ydCB0aGlzIHlldC4gIFdlIGp1c3QgcmV0dXJuICdEUk9QX1BBQ0tFVCcgd2hpY2ggd2UgYWN0dWFsbHkgZGVmaW5lXFxuIDI4NjpcXHQgKiBhcyBzdWNjZXNzLCBqdXN0IHRvIGJlIGNsZWFyIHdoYXQgd2UncmUgcmVhbGx5IGRvaW5nLlxcbiAyODc6XFx0ICovXFxuIDI4ODpcXHQjZGVmaW5lIERST1BfUEFDS0VUIDFcXG4gMjg5OlxcdHN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMjkwOlxcdHtcXG4gMjkxOlxcdFxcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGNoYW5fdG9fcHZjYyhjaGFuKTtcXG4gMjkyOlxcdFxcdHN0cnVjdCBhdG1fdmNjICp2Y2M7XFxuIDI5MzpcXHRcXHRpbnQgcmV0O1xcbiAyOTQ6XFx0XFxuIDI5NTpcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAxKSkge1xcbiAyOTY6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDI5NzpcXHRcXHRcXHRyZXR1cm4gRFJPUF9QQUNLRVQ7XFxuIDI5ODpcXHRcXHR9XFxuIDI5OTpcXHRcXG4gMzAwOlxcdFxcdEFUTV9TS0Ioc2tiKS1cXHUwMDNldmNjID0gcHZjYy1cXHUwMDNlYXRtdmNjO1xcbiAzMDE6XFx0XFx0cHJfZGVidWcoXFxcIihza2I9MHglcCwgdmNjPTB4JXApXFxcXG5cXFwiLCBza2IsIHB2Y2MtXFx1MDAzZWF0bXZjYyk7XFxuIDMwMjpcXHRcXG4gMzAzOlxcdFxcdHZjYyA9IEFUTV9TS0Ioc2tiKS1cXHUwMDNldmNjO1xcbiAzMDQ6XFx0XFx0YmhfbG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcXG4gMzA1OlxcdFxcdGlmIChzb2NrX293bmVkX2J5X3VzZXIoc2tfYXRtKHZjYykpKSB7XFxuIDMwNjpcXHRcXHRcXHQvKlxcbiAzMDc6XFx0XFx0XFx0ICogTmVlZHMgdG8gaGFwcGVuIChhbmQgYmUgZmx1c2hlZCwgaGVuY2UgdGVzdF9hbmRfKSBiZWZvcmUgd2UgdW5sb2NrXFxuIDMwODpcXHRcXHRcXHQgKiB0aGUgc29ja2V0LiBJdCBuZWVkcyB0byBiZSBzZWVuIGJ5IHRoZSB0aW1lIG91ciAtXFx1MDAzZXJlbGVhc2VfY2IgZ2V0c1xcbiAzMDk6XFx0XFx0XFx0ICogY2FsbGVkLlxcbiAzMTA6XFx0XFx0XFx0ICovXFxuIDMxMTpcXHRcXHRcXHR0ZXN0X2FuZF9zZXRfYml0KEJMT0NLRUQsIFxcdTAwMjZwdmNjLVxcdTAwM2VibG9ja2VkKTtcXG4gMzEyOlxcdFxcdFxcdGdvdG8gbm9zcGFjZTtcXG4gMzEzOlxcdFxcdH1cXG4gMzE0OlxcdFxcdGlmICh0ZXN0X2JpdChBVE1fVkZfQ0xPU0UsIFxcdTAwMjZ2Y2MtXFx1MDAzZWZsYWdzKSB8fFxcbiAzMTU6XFx0XFx0ICAgICF0ZXN0X2JpdChBVE1fVkZfUkVBRFksIFxcdTAwMjZ2Y2MtXFx1MDAzZWZsYWdzKSkge1xcbiAzMTY6XFx0XFx0XFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xcbiAzMTc6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDMxODpcXHRcXHRcXHRyZXR1cm4gRFJPUF9QQUNLRVQ7XFxuIDMxOTpcXHRcXHR9XFxuIDMyMDpcXHRcXG4gMzIxOlxcdFxcdHN3aXRjaCAocHZjYy1cXHUwMDNlZW5jYXBzKSB7XFx0XFx0LyogTExDIGVuY2Fwc3VsYXRpb24gbmVlZGVkICovXFxuIDMyMjpcXHRcXHRjYXNlIGVfbGxjOlxcbiAzMjM6XFx0XFx0XFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pKSB7XFxuIDMyNDpcXHRcXHRcXHRcXHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XFxuIDMyNTpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMzI2OlxcdFxcdFxcdFxcdHJldHVybiBEUk9QX1BBQ0tFVDtcXG4gMzI3OlxcdFxcdFxcdH1cXG4gMzI4OlxcdFxcdFxcdGlmICghcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBza2ItXFx1MDAzZXRydWVzaXplKSlcXG4gMzI5OlxcdFxcdFxcdFxcdGdvdG8gbm9zcGFjZTtcXG4gMzMwOlxcdFxcdFxcdGJyZWFrO1xcbiAzMzE6XFx0XFx0Y2FzZSBlX3ZjOlxcbiAzMzI6XFx0XFx0XFx0aWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cXHUwMDNldHJ1ZXNpemUpKVxcbiAzMzM6XFx0XFx0XFx0XFx0Z290byBub3NwYWNlO1xcbiAzMzQ6XFx0XFx0XFx0YnJlYWs7XFxuIDMzNTpcXHRcXHRjYXNlIGVfYXV0b2RldGVjdDpcXG4gMzM2OlxcdFxcdFxcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcXG4gMzM3OlxcdFxcdFxcdHByX2RlYnVnKFxcXCJUcnlpbmcgdG8gc2VuZCB3aXRob3V0IHNldHRpbmcgZW5jYXBzIVxcXFxuXFxcIik7XFxuIDMzODpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMzM5OlxcdFxcdFxcdHJldHVybiAxO1xcbiAzNDA6XFx0XFx0fVxcbiAzNDE6XFx0XFxuIDM0MjpcXHRcXHRpZiAoc2tiLVxcdTAwM2VkYXRhWzBdID09ICdcXFxcMCcgXFx1MDAyNlxcdTAwMjYgKHB2Y2MtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0NfQ09NUF9QUk9UKSlcXG4gMzQzOlxcdFxcdFxcdHNrYl9wdWxsKHNrYiwgMSk7XFxuIDM0NDpcXHRcXG4gMzQ1OlxcdFxcdGlmIChwdmNjLVxcdTAwM2VlbmNhcHMgPT0gZV9sbGMpXFxuIDM0NjpcXHRcXHRcXHRtZW1jcHkoc2tiX3B1c2goc2tiLCBMTENfTEVOKSwgcHBwbGxjLCBMTENfTEVOKTtcXG4gMzQ3OlxcdFxcbiAzNDg6XFx0XFx0YXRtX2FjY291bnRfdHgodmNjLCBza2IpO1xcbiAzNDk6XFx0XFx0cHJfZGVidWcoXFxcImF0bV9za2IoJXApLVxcdTAwM2V2Y2MoJXApLVxcdTAwM2VkZXYoJXApXFxcXG5cXFwiLFxcbiAzNTA6XFx0XFx0XFx0IHNrYiwgQVRNX1NLQihza2IpLVxcdTAwM2V2Y2MsIEFUTV9TS0Ioc2tiKS1cXHUwMDNldmNjLVxcdTAwM2VkZXYpO1xcbiAzNTE6XFx0XFx0cmV0ID0gQVRNX1NLQihza2IpLVxcdTAwM2V2Y2MtXFx1MDAzZXNlbmQoQVRNX1NLQihza2IpLVxcdTAwM2V2Y2MsIHNrYilcXG4gMzUyOlxcdFxcdCAgICA/IERST1BfUEFDS0VUIDogMTtcXG4gMzUzOlxcdFxcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcXG4gMzU0OlxcdFxcdHJldHVybiByZXQ7XFxuIDM1NTpcXHRub3NwYWNlOlxcbiAzNTY6XFx0XFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xcbiAzNTc6XFx0XFx0cmV0dXJuIDA7XFxuIDM1ODpcXHR9XFxuIDM1OTpcXHRcXG4gMzYwOlxcdC8qIFRoaXMgaGFuZGxlcyBpb2N0bHMgc2VudCB0byB0aGUgL2Rldi9wcHAgaW50ZXJmYWNlICovXFxuIDM2MTpcXHRzdGF0aWMgaW50IHBwcG9hdG1fZGV2cHBwX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCxcXG4gMzYyOlxcdFxcdHVuc2lnbmVkIGxvbmcgYXJnKVxcbiAzNjM6XFx0e1xcbiAzNjQ6XFx0XFx0c3dpdGNoIChjbWQpIHtcXG4gMzY1OlxcdFxcdGNhc2UgUFBQSU9DR0ZMQUdTOlxcbiAzNjY6XFx0XFx0XFx0cmV0dXJuIHB1dF91c2VyKGNoYW5fdG9fcHZjYyhjaGFuKS1cXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopIGFyZylcXG4gMzY3OlxcdFxcdFxcdCAgICA/IC1FRkFVTFQgOiAwO1xcbiAzNjg6XFx0XFx0Y2FzZSBQUFBJT0NTRkxBR1M6XFxuIDM2OTpcXHRcXHRcXHRyZXR1cm4gZ2V0X3VzZXIoY2hhbl90b19wdmNjKGNoYW4pLVxcdTAwM2VmbGFncywgKGludCBfX3VzZXIgKikgYXJnKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0Nzo1MC44MjY0MjAzMzZaIiwiU2VxIjo3NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODcyMzc4MjM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgUFBQb0FUTSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBGaXJzdCwgSSdtIGNoZWNraW5nIHRoZSBjb21taXQgaGlzdG9yeSwgbWF5YmUgdXNpbmcgYGdpdCBsb2cgLTFgIG9yIGdyZXBwZXIgdG8gZ2V0IGEgcXVpY2sgb3ZlcnZpZXcgb2Ygd2hhdCdzIGhhcHBlbmluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHdoYXQgcHJvYmxlbSB0aGlzIHBhdGNoIGlzIGZpeGluZy5cblxuUmlnaHQsIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBkZWFsaW5nIHdpdGggc29tZSBwb3RlbnRpYWwgaXNzdWVzIGluIHRoZSBQUFBvQVRNIGNvZGUuIFRoZSBpbml0aWFsIGNvZGUgbG9va3MgbGlrZSB0aGlzOlxuXG5gYGBjXG5cdEFUTV9TS0Ioc2tiKS1cdTAwM2V2Y2MgPSBwdmNjLVx1MDAzZWF0bXZjYztcblx0cHJfZGVidWcoXCIoc2tiPTB4JXAsIHZjYz0weCVwKVxcblwiLCBza2IsIHB2Y2MtXHUwMDNlYXRtdmNjKTtcblx0aWYgKHNrYi1cdTAwM2VkYXRhWzBdID09ICdcXDAnIFx1MDAyNlx1MDAyNiAocHZjYy1cdTAwM2VmbGFncyBcdTAwMjYgU0NfQ09NUF9QUk9UKSlcblx0XHQodm9pZCkgc2tiX3B1bGwoc2tiLCAxKTtcbmBgYFxuXG5JIGNhbiBpbW1lZGlhdGVseSBzZWUgYSBwb3RlbnRpYWwgcHJvYmxlbTogaWYgYHNrYi1cdTAwM2VsZW5gIGlzIDAsIHRoZW4gYHNrYi1cdTAwM2VkYXRhWzBdYCBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQuIFRoYXQncyBhIGNyaXRpY2FsIGJ1Zy4gSXQncyBhbHNvIHdvcnRoIG5vdGluZyB0aGUgdXNlIG9mIGBza2JfcmVhbGxvY19oZWFkcm9vbWAgdmVyc3VzIGBza2JfY293X2hlYWRgIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBza2IgaXMgY2xvbmVkL3NoYXJlZC5cblxuVGhlIGNvZGUgdGhlbiBjaGVja3MgZm9yIExMQyBlbmNhcHN1bGF0aW9uIG5lZWRlZDpcblxuYGBgY1xuXHRzd2l0Y2ggKHB2Y2MtXHUwMDNlZW5jYXBzKSB7XHRcdC8qIExMQyBlbmNhcHN1bGF0aW9uIG5lZWRlZCAqL1xuXHRjYXNlIGVfbGxjOlxuXHRcdGlmIChza2JfaGVhZHJvb20oc2tiKSBcdTAwM2MgTExDX0xFTikge1xuXHRcdFx0c3RydWN0IHNrX2J1ZmYgKm47XG5cdFx0XHRuID0gc2tiX3JlYWxsb2NfaGVhZHJvb20oc2tiLCBMTENfTEVOKTtcbi4uLlxuYGBgXG5cbkFuZCBpbiB0aGUgYG5vc3BhY2U6YCBwYXRoOlxuXG5gYGBjXG5ub3NwYWNlOlxuXHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XG5cdC8qXG5cdCAqIFdlIGRvbid0IGhhdmUgc3BhY2UgdG8gc2VuZCB0aGlzIFNLQiBub3csIGJ1dCB3ZSBtaWdodCBoYXZlXG5cdCAqIGFscmVhZHkgYXBwbGllZCBTQ19DT01QX1BST1QgY29tcHJlc3Npb24sIHNvIG1heSBuZWVkIHRvIHVuZG9cblx0ICovXG5cdGlmICgocHZjYy1cdTAwM2VmbGFncyBcdTAwMjYgU0NfQ09NUF9QUk9UKSBcdTAwMjZcdTAwMjYgc2tiX2hlYWRyb29tKHNrYikgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG5cdCAgICBza2ItXHUwMDNlZGF0YVstMV0gPT0gJ1xcMCcpXG5cdFx0KHZvaWQpIHNrYl9wdXNoKHNrYiwgMSk7XG5cdHJldHVybiAwO1xuYGBgXG5cbkhlcmUncyBhbm90aGVyIGlzc3VlLiBUaGUgYG5vc3BhY2VgIGxvZ2ljIHRyaWVzIHRvIHVuZG8gYSBwcmV2aW91cyBgc2tiX3B1bGxgIHdpdGggYHNrYl9wdXNoYCwgYnV0IGl0IGNoZWNrcyBgc2tiLVx1MDAzZWRhdGFbLTFdID09ICdcXDAnYC4gIFRoYXQgY2FuIGxlYWQgdG8gYW5vdGhlciBvdXQtb2YtYm91bmRzIHJlYWQgb3IgZXZlbiBjb3JydXB0IGRhdGEuIFlpa2VzLlxuXG5Ob3csIGxldCdzIGV4YW1pbmUgdGhlIHBhdGNoJ3MgY2hhbmdlczpcblxuMS4gIEEgY2hlY2sgaXMgYWRkZWQ6IGBpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAxKSkgeyBrZnJlZV9za2Ioc2tiKTsgcmV0dXJuIERST1BfUEFDS0VUOyB9YC4gVGhpcyBpcyBleGNlbGxlbnQ7IGl0IGVuc3VyZXMgdGhhdCB0aGUgYHNrYmAgaGFzIGF0IGxlYXN0IG9uZSBieXRlIGF2YWlsYWJsZSBiZWZvcmUgYWNjZXNzaW5nIGBza2ItXHUwMDNlZGF0YVswXWAuXG4yLiAgYHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pYCBpcyB1c2VkIGZvciBoZWFkcm9vbSBleHBhbnNpb24sIHdoaWNoIGlzIG11Y2ggY2xlYW5lciB0aGFuIHRoZSBvbGQgbWV0aG9kLlxuMy4gIFRoZSBgU0NfQ09NUF9QUk9UYCBjaGVjayBhbmQgYHNrYl9wdWxsYCBhcmUgbW92ZWQgKmRvd24qIGluIHRoZSBleGVjdXRpb24gcGF0aCwgYWZ0ZXIgdmFyaW91cyBvdGhlciBjaGVja3MgKGBzb2NrX293bmVkX2J5X3VzZXJgLCBgQVRNX1ZGX0NMT1NFL1JFQURZYCwgYHBwcG9hdG1fbWF5X3NlbmRgKS4gVGhpcyBpcyBhIGNydWNpYWwgaW1wcm92ZW1lbnQuIFRoZSBgc2tiX3B1bGxgIG9wZXJhdGlvbiBpcyBvbmx5IHBlcmZvcm1lZCByaWdodCBiZWZvcmUgdHJhbnNtaXNzaW9uLCBhZnRlciBoZWFkcm9vbSBoYXMgYmVlbiBlbnN1cmVkIGFuZCBhZnRlciBhbGwgdGhlIHBvdGVudGlhbCBgbm9zcGFjZWAgcGF0aHMgaGF2ZSBiZWVuIGNvbnNpZGVyZWQuIFRoaXMgc2ltcGxpZmllcyB0aGUgbG9naWMuXG40LiAgVGhlIGBtZW1jcHkoc2tiX3B1c2goc2tiLCBMTENfTEVOKSwgcHBwbGxjLCBMTENfTEVOKWAgaXMgYWxzbyBtb3ZlZCBkb3duLCBhZnRlciB0aGUgYHNrYl9wdWxsYC5cbjUuICBUaGUgcHJvYmxlbWF0aWMgdW5kbyBsb2dpYyBpbiB0aGUgYG5vc3BhY2U6YCBwYXRoIGlzIHJlbW92ZWQsIHdoaWNoIGlzIGdyZWF0LiBJdCBlbGltaW5hdGVzIHRoZSBvdXQtb2YtYm91bmRzIHJlYWQuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuXG5cbjEuICBEb2VzIGl0IG1vZGlmeSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZT8gTm8sIGBwcHBvYXRtX3NlbmRgIGlzIHRoZSB0cmFuc21pdCBwYXRoLCBhbmQgdGhlIGBza2JgIGlzIHRyYW5zbWl0dGVkIG92ZXIgQVRNLCB3aXRoIG5vIGNvcHkgdG8gdXNlciBzcGFjZS5cbjIuICBEb2VzIHRoZSBwYXRjaCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBObywgYHBza2JfbWF5X3B1bGwoc2tiLCAxKWAgYW5kIGBza2JfY293X2hlYWQoc2tiLCBMTENfTEVOKWAgYXJlIHNhZmUuIFRoZSByZWFkIG9mIGBza2ItXHUwMDNlZGF0YVswXWAgaXMgc2FmZSBiZWNhdXNlIG9mIHRoZSBgcHNrYl9tYXlfcHVsbGAgY2hlY2suXG4zLlxuXG4iLCJJbnB1dFRva2VucyI6NTUxMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzODYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0Nzo1OS41NTAyMDU5MDRaIiwiU2VxIjo3OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9hdG0vcHBwb2F0bS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuICAgMjpcXHQvKiBuZXQvYXRtL3BwcG9hdG0uYyAtIFJGQzIzNjQgUFBQIG92ZXIgQVRNL0FBTDUgKi9cXG4gICAzOlxcdFxcbiAgIDQ6XFx0LyogQ29weXJpZ2h0IDE5OTktMjAwMCBieSBNaXRjaGVsbCBCbGFuayBKciAqL1xcbiAgIDU6XFx0LyogQmFzZWQgb24gY2xpcC5jOyAxOTk1LTE5OTkgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBFUEZMIExSQy9JQ0EgKi9cXG4gICA2OlxcdC8qIEFuZCBvbiBwcHBfYXN5bmMuYzsgQ29weXJpZ2h0IDE5OTkgUGF1bCBNYWNrZXJyYXMgKi9cXG4gICA3OlxcdC8qIEFuZCBoZWxwIGZyb20gSmVucyBBeGJvZSAqL1xcbiAgIDg6XFx0XFxuICAgOTpcXHQvKlxcbiAgMTA6XFx0ICpcXG4gIDExOlxcdCAqIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHRoZSBlbmNhcHN1bGF0aW9uIGFuZCBmcmFtaW5nIGZvciBzZW5kaW5nXFxuICAxMjpcXHQgKiBhbmQgcmVjZWl2aW5nIFBQUCBmcmFtZXMgaW4gQVRNIEFBTDUgUERVcy5cXG4gIDEzOlxcdCAqL1xcbiAgMTQ6XFx0XFxuICAxNTpcXHQvKlxcbiAgMTY6XFx0ICogT25lIHNob3J0Y29taW5nIG9mIHRoaXMgZHJpdmVyIGlzIHRoYXQgaXQgZG9lcyBub3QgY29tcGx5IHdpdGhcXG4gIDE3OlxcdCAqIHNlY3Rpb24gOCBvZiBSRkMyMzY0IC0gd2UgYXJlIHN1cHBvc2VkIHRvIGRldGVjdCBhIGNoYW5nZVxcbiAgMTg6XFx0ICogaW4gZW5jYXBzdWxhdGlvbiBhbmQgaW1tZWRpYXRlbHkgYWJvcnQgdGhlIGNvbm5lY3Rpb24gKGluIG9yZGVyXFxuICAxOTpcXHQgKiB0byBhdm9pZCBhIGJsYWNrLWhvbGUgYmVpbmcgY3JlYXRlZCBpZiBvdXIgcGVlciBsb3NlcyBzdGF0ZVxcbiAgMjA6XFx0ICogYW5kIGNoYW5nZXMgZW5jYXBzdWxhdGlvbiB1bmlsYXRlcmFsbHkuICBIb3dldmVyLCBzaW5jZSB0aGVcXG4gIDIxOlxcdCAqIHBwcF9nZW5lcmljIGxheWVyIGFjdHVhbGx5IGRvZXMgdGhlIGRlY2Fwc3VsYXRpb24sIHdlIG5lZWRcXG4gIDIyOlxcdCAqIGEgd2F5IG9mIG5vdGlmeWluZyBpdCB3aGVuIHdlIF90aGlua18gdGhlcmUgbWlnaHQgYmUgYSBwcm9ibGVtKVxcbiAgMjM6XFx0ICogVGhlcmUncyB0d28gY2FzZXM6XFxuICAyNDpcXHQgKiAgIDEuXFx0TExDLWVuY2Fwc3VsYXRpb24gd2FzIG1pc3Npbmcgd2hlbiBpdCB3YXMgZW5hYmxlZC4gIEluXFxuICAyNTpcXHQgKlxcdHRoaXMgY2FzZSwgd2Ugc2hvdWxkIHRlbGwgdGhlIHVwcGVyIGxheWVyIFxcXCJ0ZWFyIGRvd25cXG4gIDI2OlxcdCAqXFx0dGhpcyBzZXNzaW9uIGlmIHRoaXMgc2tiIGxvb2tzIG9rIHRvIHlvdVxcXCJcXG4gIDI3OlxcdCAqICAgMi5cXHRMTEMtZW5jYXBzdWxhdGlvbiB3YXMgcHJlc2VudCB3aGVuIGl0IHdhcyBkaXNhYmxlZC4gIFRoZW5cXG4gIDI4OlxcdCAqXFx0d2UgbmVlZCB0byB0ZWxsIHRoZSB1cHBlciBsYXllciBcXFwidGhpcyBwYWNrZXQgbWF5IGJlXFxuICAyOTpcXHQgKlxcdG9rLCBidXQgaWYgaXRzIGluIGVycm9yIHRlYXIgZG93biB0aGUgc2Vzc2lvblxcXCJcXG4gIDMwOlxcdCAqIFRoZXNlIGhvb2tzIGFyZSBub3QgeWV0IGF2YWlsYWJsZSBpbiBwcHBfZ2VuZXJpY1xcbiAgMzE6XFx0ICovXFxuICAzMjpcXHRcXG4gIDMzOlxcdCNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXFxcIjolczogXFxcIiBmbXQsIF9fZnVuY19fXFxuICAzNDpcXHRcXG4gIDM1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gIDM2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuICAzNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaW50ZXJydXB0LmhcXHUwMDNlXFxuICAzODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICAzOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAgNDA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F0bS5oXFx1MDAzZVxcbiAgNDE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F0bWRldi5oXFx1MDAzZVxcbiAgNDI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NhcGFiaWxpdHkuaFxcdTAwM2VcXG4gIDQzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcHBfZGVmcy5oXFx1MDAzZVxcbiAgNDQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BwcC1pb2N0bC5oXFx1MDAzZVxcbiAgNDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BwcF9jaGFubmVsLmhcXHUwMDNlXFxuICA0NjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYXRtcHBwLmhcXHUwMDNlXFxuICA0NzpcXHRcXG4gIDQ4OlxcdCNpbmNsdWRlIFxcXCJjb21tb24uaFxcXCJcXG4gIDQ5OlxcdFxcbiAgNTA6XFx0ZW51bSBwcHBvYXRtX2VuY2FwcyB7XFxuICA1MTpcXHRcXHRlX2F1dG9kZXRlY3QgPSBQUFBPQVRNX0VOQ0FQU19BVVRPREVURUNULFxcbiAgNTI6XFx0XFx0ZV92YyA9IFBQUE9BVE1fRU5DQVBTX1ZDLFxcbiAgNTM6XFx0XFx0ZV9sbGMgPSBQUFBPQVRNX0VOQ0FQU19MTEMsXFxuICA1NDpcXHR9O1xcbiAgNTU6XFx0XFxuICA1NjpcXHRzdHJ1Y3QgcHBwb2F0bV92Y2Mge1xcbiAgNTc6XFx0XFx0c3RydWN0IGF0bV92Y2NcXHQqYXRtdmNjO1xcdC8qIFZDQyBkZXNjcmlwdG9yICovXFxuICA1ODpcXHRcXHR2b2lkICgqb2xkX3B1c2gpKHN0cnVjdCBhdG1fdmNjICosIHN0cnVjdCBza19idWZmICopO1xcbiAgNTk6XFx0XFx0dm9pZCAoKm9sZF9wb3ApKHN0cnVjdCBhdG1fdmNjICosIHN0cnVjdCBza19idWZmICopO1xcbiAgNjA6XFx0XFx0dm9pZCAoKm9sZF9yZWxlYXNlX2NiKShzdHJ1Y3QgYXRtX3ZjYyAqKTtcXG4gIDYxOlxcdFxcdHN0cnVjdCBtb2R1bGUgKm9sZF9vd25lcjtcXG4gIDYyOlxcdFxcdFxcdFxcdFxcdFxcdC8qIGtlZXAgb2xkIHB1c2gvcG9wIGZvciBkZXRhY2hpbmcgKi9cXG4gIDYzOlxcdFxcdGVudW0gcHBwb2F0bV9lbmNhcHMgZW5jYXBzO1xcbiAgNjQ6XFx0XFx0YXRvbWljX3QgaW5mbGlnaHQ7XFxuICA2NTpcXHRcXHR1bnNpZ25lZCBsb25nIGJsb2NrZWQ7XFxuICA2NjpcXHRcXHRpbnQgZmxhZ3M7XFx0XFx0XFx0LyogU0NfQ09NUF9QUk9UIC0gY29tcHJlc3MgcHJvdG9jb2wgKi9cXG4gIDY3OlxcdFxcdHN0cnVjdCBwcHBfY2hhbm5lbCBjaGFuO1xcdC8qIGludGVyZmFjZSB0byBnZW5lcmljIHBwcCBsYXllciAqL1xcbiAgNjg6XFx0XFx0c3RydWN0IHRhc2tsZXRfc3RydWN0IHdha2V1cF90YXNrbGV0O1xcbiAgNjk6XFx0fTtcXG4gIDcwOlxcdFxcbiAgNzE6XFx0LypcXG4gIDcyOlxcdCAqIFdlIHdhbnQgdG8gYWxsb3cgdHdvIHBhY2tldHMgaW4gdGhlIHF1ZXVlLiBUaGUgb25lIHRoYXQncyBjdXJyZW50bHkgaW5cXG4gIDczOlxcdCAqIGZsaWdodCwgYW5kICpvbmUqIHF1ZXVlZCB1cCByZWFkeSBmb3IgdGhlIEFUTSBkZXZpY2UgdG8gc2VuZCBpbW1lZGlhdGVseVxcbiAgNzQ6XFx0ICogZnJvbSBpdHMgVFggZG9uZSBJUlEuIFdlIHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgYXRvbWljX2luY19ub3RfemVybygpLCBzb1xcbiAgNzU6XFx0ICogaW5mbGlnaHQgPT0gLTIgcmVwcmVzZW50cyBhbiBlbXB0eSBxdWV1ZSwgLTEgb25lIHBhY2tldCwgYW5kIHplcm8gbWVhbnNcXG4gIDc2OlxcdCAqIHRoZXJlIGFyZSB0d28gcGFja2V0cyBpbiB0aGUgcXVldWUuXFxuICA3NzpcXHQgKi9cXG4gIDc4OlxcdCNkZWZpbmUgTk9ORV9JTkZMSUdIVCAtMlxcbiAgNzk6XFx0XFxuICA4MDpcXHQjZGVmaW5lIEJMT0NLRUQgMFxcbiAgODE6XFx0XFxuICA4MjpcXHQvKlxcbiAgODM6XFx0ICogSGVhZGVyIHVzZWQgZm9yIExMQyBFbmNhcHN1bGF0ZWQgUFBQICg0IGJ5dGVzKSBmb2xsb3dlZCBieSB0aGUgTENQIHByb3RvY29sXFxuICA4NDpcXHQgKiBJRCAoMHhDMDIxKSB1c2VkIGluIGF1dG9kZXRlY3Rpb25cXG4gIDg1OlxcdCAqL1xcbiAgODY6XFx0c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcHBwbGxjWzZdID0geyAweEZFLCAweEZFLCAweDAzLCAweENGLCAweEMwLCAweDIxIH07XFxuICA4NzpcXHQjZGVmaW5lIExMQ19MRU5cXHRcXHQoNClcXG4gIDg4OlxcdFxcbiAgODk6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmF0bXZjY190b19wdmNjKGNvbnN0IHN0cnVjdCBhdG1fdmNjICphdG12Y2MpXFxuICA5MDpcXHR7XFxuICA5MTpcXHRcXHRyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoYXRtdmNjLVxcdTAwM2V1c2VyX2JhY2spO1xcbiAgOTI6XFx0fVxcbiAgOTM6XFx0XFxuICA5NDpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqY2hhbl90b19wdmNjKGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcXG4gIDk1OlxcdHtcXG4gIDk2OlxcdFxcdHJldHVybiAoc3RydWN0IHBwcG9hdG1fdmNjICopIChjaGFuLVxcdTAwM2Vwcml2YXRlKTtcXG4gIDk3OlxcdH1cXG4gIDk4OlxcdFxcbiAgOTk6XFx0LypcXG4gMTAwOlxcdCAqIFdlIGNhbid0IGRvIHRoaXMgZGlyZWN0bHkgZnJvbSBvdXIgX3BvcCBoYW5kbGVyLCBzaW5jZSB0aGUgcHBwIGNvZGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDc6NTkuNTUwMzc3NzA0WiIsIlNlcSI6NzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5NDk1ODQzMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIERlZXBlciBpbnRvIGBwcHBvYXRtLmNgKipcblxuT2theSwgc28gSSd2ZSBhbHJlYWR5IGNvdmVyZWQgYSBnb29kIGNodW5rIG9mIGBwcHBvYXRtLmNgLCBzcGVjaWZpY2FsbHkgbGluZXMgMjgwLTM3MCBhcm91bmQgdGhhdCBgcHBwb2F0bV9zZW5kYCBmdW5jdGlvbi4gTm93LCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGJyb2FkZXIgcGljdHVyZSwgYW5kIGhvdyB0aGluZ3MgdGllIHRvZ2V0aGVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBgcHBwb2F0bV9kZXZwcHBfaW9jdGxgIGFuZCBzb21lIG9mIHRoZSBzdXBwb3J0aW5nIGZ1bmN0aW9ucy4gSSdsbCBmb2N1cyBvbiBsaW5lcyAzNzAtNDQwLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgZGV2aWNlIGNvbnRyb2wgb3BlcmF0aW9ucyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgUFBQLW92ZXItQVRNIGRyaXZlci4gVGhpcyBzaG91bGQgcHJvdmlkZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gYmV0dGVyIGFuYWx5emUgdGhlIGBwcHBvYXRtX3NlbmRgIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTc5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0ODowMS40OTk5NjQ0NjNaIiwiU2VxIjo4MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2F0bS9wcHBvYXRtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzY1LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzY1OlxcdFxcdGNhc2UgUFBQSU9DR0ZMQUdTOlxcbiAzNjY6XFx0XFx0XFx0cmV0dXJuIHB1dF91c2VyKGNoYW5fdG9fcHZjYyhjaGFuKS1cXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopIGFyZylcXG4gMzY3OlxcdFxcdFxcdCAgICA/IC1FRkFVTFQgOiAwO1xcbiAzNjg6XFx0XFx0Y2FzZSBQUFBJT0NTRkxBR1M6XFxuIDM2OTpcXHRcXHRcXHRyZXR1cm4gZ2V0X3VzZXIoY2hhbl90b19wdmNjKGNoYW4pLVxcdTAwM2VmbGFncywgKGludCBfX3VzZXIgKikgYXJnKVxcbiAzNzA6XFx0XFx0XFx0ICAgID8gLUVGQVVMVCA6IDA7XFxuIDM3MTpcXHRcXHR9XFxuIDM3MjpcXHRcXHRyZXR1cm4gLUVOT1RUWTtcXG4gMzczOlxcdH1cXG4gMzc0OlxcdFxcbiAzNzU6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2F0bV9vcHMgPSB7XFxuIDM3NjpcXHRcXHQuc3RhcnRfeG1pdCA9IHBwcG9hdG1fc2VuZCxcXG4gMzc3OlxcdFxcdC5pb2N0bCA9IHBwcG9hdG1fZGV2cHBwX2lvY3RsLFxcbiAzNzg6XFx0fTtcXG4gMzc5OlxcdFxcbiAzODA6XFx0c3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcXG4gMzgxOlxcdHtcXG4gMzgyOlxcdFxcdHN0cnVjdCBhdG1fYmFja2VuZF9wcHAgYmU7XFxuIDM4MzpcXHRcXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2M7XFxuIDM4NDpcXHRcXHRpbnQgZXJyO1xcbiAzODU6XFx0XFxuIDM4NjpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmJlLCBhcmcsIHNpemVvZiBiZSkpXFxuIDM4NzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gMzg4OlxcdFxcdGlmIChiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfQVVUT0RFVEVDVCBcXHUwMDI2XFx1MDAyNlxcbiAzODk6XFx0XFx0ICAgIGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19WQyBcXHUwMDI2XFx1MDAyNiBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfTExDKVxcbiAzOTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDM5MTpcXHRcXHRwdmNjID0ga3phbGxvY19vYmooKnB2Y2MpO1xcbiAzOTI6XFx0XFx0aWYgKHB2Y2MgPT0gTlVMTClcXG4gMzkzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzOTQ6XFx0XFx0cHZjYy1cXHUwMDNlYXRtdmNjID0gYXRtdmNjO1xcbiAzOTU6XFx0XFxuIDM5NjpcXHRcXHQvKiBNYXhpbXVtIGlzIHplcm8sIHNvIHRoYXQgd2UgY2FuIHVzZSBhdG9taWNfaW5jX25vdF96ZXJvKCkgKi9cXG4gMzk3OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNnB2Y2MtXFx1MDAzZWluZmxpZ2h0LCBOT05FX0lORkxJR0hUKTtcXG4gMzk4OlxcdFxcdHB2Y2MtXFx1MDAzZW9sZF9wdXNoID0gYXRtdmNjLVxcdTAwM2VwdXNoO1xcbiAzOTk6XFx0XFx0cHZjYy1cXHUwMDNlb2xkX3BvcCA9IGF0bXZjYy1cXHUwMDNlcG9wO1xcbiA0MDA6XFx0XFx0cHZjYy1cXHUwMDNlb2xkX293bmVyID0gYXRtdmNjLVxcdTAwM2Vvd25lcjtcXG4gNDAxOlxcdFxcdHB2Y2MtXFx1MDAzZW9sZF9yZWxlYXNlX2NiID0gYXRtdmNjLVxcdTAwM2VyZWxlYXNlX2NiO1xcbiA0MDI6XFx0XFx0cHZjYy1cXHUwMDNlZW5jYXBzID0gKGVudW0gcHBwb2F0bV9lbmNhcHMpIGJlLmVuY2FwcztcXG4gNDAzOlxcdFxcdHB2Y2MtXFx1MDAzZWNoYW4ucHJpdmF0ZSA9IHB2Y2M7XFxuIDQwNDpcXHRcXHRwdmNjLVxcdTAwM2VjaGFuLm9wcyA9IFxcdTAwMjZwcHBvYXRtX29wcztcXG4gNDA1OlxcdFxcdHB2Y2MtXFx1MDAzZWNoYW4ubXR1ID0gYXRtdmNjLVxcdTAwM2Vxb3MudHh0cC5tYXhfc2R1IC0gUFBQX0hEUkxFTiAtXFxuIDQwNjpcXHRcXHQgICAgKGJlLmVuY2FwcyA9PSBlX3ZjID8gMCA6IExMQ19MRU4pO1xcbiA0MDc6XFx0XFx0dGFza2xldF9zZXR1cChcXHUwMDI2cHZjYy1cXHUwMDNld2FrZXVwX3Rhc2tsZXQsIHBwcG9hdG1fd2FrZXVwX3NlbmRlcik7XFxuIDQwODpcXHRcXHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcXHUwMDI2cHZjYy1cXHUwMDNlY2hhbik7XFxuIDQwOTpcXHRcXHRpZiAoZXJyICE9IDApIHtcXG4gNDEwOlxcdFxcdFxcdGtmcmVlKHB2Y2MpO1xcbiA0MTE6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNDEyOlxcdFxcdH1cXG4gNDEzOlxcdFxcdGF0bXZjYy1cXHUwMDNldXNlcl9iYWNrID0gcHZjYztcXG4gNDE0OlxcdFxcdGF0bXZjYy1cXHUwMDNlcHVzaCA9IHBwcG9hdG1fcHVzaDtcXG4gNDE1OlxcdFxcdGF0bXZjYy1cXHUwMDNlcG9wID0gcHBwb2F0bV9wb3A7XFxuIDQxNjpcXHRcXHRhdG12Y2MtXFx1MDAzZXJlbGVhc2VfY2IgPSBwcHBvYXRtX3JlbGVhc2VfY2I7XFxuIDQxNzpcXHRcXHRfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpO1xcbiA0MTg6XFx0XFx0YXRtdmNjLVxcdTAwM2Vvd25lciA9IFRISVNfTU9EVUxFO1xcbiA0MTk6XFx0XFxuIDQyMDpcXHRcXHQvKiByZS1wcm9jZXNzIGV2ZXJ5dGhpbmcgcmVjZWl2ZWQgYmV0d2VlbiBjb25uZWN0aW9uIHNldHVwIGFuZFxcbiA0MjE6XFx0XFx0ICAgYmFja2VuZCBzZXR1cCAqL1xcbiA0MjI6XFx0XFx0dmNjX3Byb2Nlc3NfcmVjdl9xdWV1ZShhdG12Y2MpO1xcbiA0MjM6XFx0XFx0cmV0dXJuIDA7XFxuIDQyNDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ4OjAxLjUwMDA1ODIwM1oiLCJTZXEiOjgxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDYwNTM2NjIyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBQUG9BVE0gUGF0Y2ggZm9yIFNlY3VyaXR5IEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBwcmltYXJpbHkgYWRkcmVzc2VzIHBvdGVudGlhbCBidWZmZXIgb3ZlcnJ1bnMgYW5kIG91dC1vZi1ib3VuZHMgcmVhZHMgd2l0aGluIHRoZSBgcHBwb2F0bV9zZW5kYCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGlzc3VlIGxpa2VseSBpbnZvbHZlZCBzY2VuYXJpb3Mgd2hlcmUgdGhlIGNvZGUgd2FzIGVpdGhlciBhdHRlbXB0aW5nIHRvIHJlYWQgYmV5b25kIHRoZSBib3VuZGFyaWVzIG9mIGFuIFNLQidzIGRhdGEgYnVmZmVyIG9yIHBvdGVudGlhbGx5IGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuU3BlY2lmaWNhbGx5LCBJIHNlZSBhIGZldyBrZXkgYXJlYXMgdGhhdCB3ZXJlIGxpa2VseSBwcm9ibGVtYXRpYywgYW5kIHRoYXQgdGhpcyBwYXRjaCBhaW1zIHRvIHJlc29sdmU6XG5cbjEuICAqKk91dC1vZi1Cb3VuZHMgUmVhZHMgYW5kIEJ1ZmZlciBIYW5kbGluZzoqKiBUaGUgaW50cm9kdWN0aW9uIG9mIGBwc2tiX21heV9wdWxsKHNrYiwgMSlgIGlzIGNydWNpYWwuIFRoaXMgY2hlY2sgKmJlZm9yZSogYWNjZXNzaW5nIGBza2ItXHUwMDNlZGF0YVswXWAgaXMgYSBkaXJlY3QgcmVzcG9uc2UgdG8gYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGlmIHRoZSBTS0IgaGFwcGVuZWQgdG8gYmUgZW1wdHksIG9yIG5vdCBsYXJnZSBlbm91Z2ggdG8gYWNjb21tb2RhdGUgdGhlIGFjY2Vzcy4gVGhlIGBrZnJlZV9za2Ioc2tiKWAgYW5kIGBEUk9QX1BBQ0tFVGAgY29tYm8gbmVhdGx5IGhhbmRsZXMgdGhpcyBlZGdlIGNhc2UuXG5cbjIuICAqKlNLQiBIZWFkZXIgUm9vbSBNYW5hZ2VtZW50OioqIFRoZSBvcmlnaW5hbCBjb2RlJ3MgdXNlIG9mIGBza2JfcmVhbGxvY19oZWFkcm9vbWAgdG8gbWFrZSBzcGFjZSBmb3IgdGhlIExMQyBoZWFkZXIgd2FzIHByb2JsZW1hdGljIGluIHRoaXMgY2FzZS4gVGhlIG5ldyBgc2tiX2Nvd19oZWFkYCBpcyBtdWNoIGNsZWFuZXIuIFRoaXMgbGlrZWx5IGZpeGVzIHNvbWUgaXNzdWUgd2l0aCBhbGxvY2F0aW5nIG1vcmUgc3BhY2UgdG8gdGhlIHNrYi5cblxuMy4gICoqUHJvdG9jb2wgQ29tcHJlc3Npb24gVW5kbyAoU0NcXF9DT01QXFxfUFJPVCk6KiogVGhlIGxvZ2ljIHJlZ2FyZGluZyB0aGUgYFNDX0NPTVBfUFJPVGAgZmxhZyBhbmQgdGhlIHBvdGVudGlhbCBuZWVkIHRvIFwidW5kb1wiIGNvbXByZXNzaW9uIGlmIHRoZXJlIHdhcyBubyBzcGFjZSB0byBhZGQgdGhlIExMQyBoZWFkZXIgbG9va3MgbGlrZSBpdCB3YXMgY2F1c2luZyBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlIHBhdGNoIGVsaW1pbmF0ZXMgdGhpcyBhbHRvZ2V0aGVyIGJ5IHJlbW92aW5nIHRoZSBgc2tiX3B1c2hgIGFuZCBzdWJzZXF1ZW50IGNvZGUgYmxvY2ssIG1lYW5pbmcgdGhlIGNvZGUgbm93IGhhbmRsZXMgTExDIGhlYWRlciBpbnNlcnRpb24gKmFmdGVyKiB0aGUgaW5pdGlhbCBjaGVja3MuXG5cbjQuICAqKkRhdGEgVmFsaWRhdGlvbiBhbmQgRmxvdyBDb250cm9sOioqIFRoZSBgcHBwb2F0bV9tYXlfc2VuZGAgY2FsbHMgYXJlIGNyaXRpY2FsIGhlcmUuIFRoZSBtYWluIHBvaW50IGlzIHRvIG1ha2Ugc3VyZSBkYXRhIGlzIHdpdGhpbiBib3VuZHMgYW5kIGRvZXNuJ3QgZ2V0IG1lc3NlZCB1cC5cblxuTm93LCBjb25jZXJuaW5nIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplciksIEknbSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAgaGVyZS4gTXkgcmVhc29uaW5nIGlzIHNvbGlkOlxuXG4qICAgKipLQVNBTiBDb3ZlcnMgdGhlIFJpc2tzOioqIFRoZSBwcmltYXJ5IHJpc2tzIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGFyZSBleGFjdGx5IHRoZSBraW5kcyBvZiBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhbmQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB0aGF0IEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTQU5pdGl6ZXIpIGlzIGRlc2lnbmVkIHRvIGNhdGNoLiBXZSdyZSB0YWxraW5nIGFib3V0IHJlYWRpbmcvd3JpdGluZyBtZW1vcnkgYmV5b25kIHRoZSBidWZmZXIgYm91bmRhcmllcyBvciBkZXJlZmVyZW5jaW5nIGEgZGFuZ2xpbmcgcG9pbnRlci4gS0FTQU4gaXMgYWxyZWFkeSBlbmFibGVkIGluIHRoZSBrZXJuZWwgYnVpbGRzLCBzbyBpdCB3aWxsIGRldGVjdCB0aGUgbW9zdCBpbXBvcnRhbnQgaXNzdWVzLlxuKiAgICoqTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgRXhwb3N1cmU6KiogSSd2ZSBjYXJlZnVsbHkgcmV2aWV3ZWQgdGhlIHBhdGNoLCBhbmQgSSBzZWUgbm8gZXZpZGVuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoaXMgaXMgdGhlIGNydWNpYWwgcG9pbnQgZm9yIEtNU0FOLiBUaGUgY29kZSBub3cgKmV4cGxpY2l0bHkqIGNoZWNrcyBmb3IgYSBtaW5pbXVtIFNLQiBzaXplIGJlZm9yZSBhbnkgYWNjZXNzIHRvIGBza2ItXHUwMDNlZGF0YWAsIHRoZSBgcHBwbGxjYCBpcyBhIHN0YXRpYyBidWZmZXIgYW5kIGBza2JfY293X2hlYWRgIGlzIG9ubHkgYWxsb2NhdGluZyB3aXRoIGV4aXN0aW5nIGRhdGEuIEkndmUgYWxzbyBjaGVja2VkIHRoZXJlJ3Mgbm8gc3RydWN0IHBhZGRpbmcgdGhhdCBpcyBhY2Nlc3NlZCBpbiBhbnkgd2F5LlxuKiAgICoqTm8gSW5mbyBMZWFrczoqKiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB3YXlzIHRvIGxlYWsga2VybmVsIG1lbW9yeSBpbnRvIHRoZSB1c2Vyc3BhY2UsIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSB0aGUga2VybmVsLiBUaGlzIGlzIGltcG9ydGFudCB0byBub3RlIGFzIGl0J3MgdGhlIHNwZWNpZmljIGFyZWEgS01TQU4gd291bGQgYmUgZGVzaWduZWQgZm9yLlxuXG5UaGVyZWZvcmUsIHNpbmNlIHRoZSByaXNrcyBoZXJlIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMgKEtBU0FOKSBhbmQgdGhlIHBhdGNoIGRvZXMgbm90IGNyZWF0ZSBhbnkgbmV3IHdheXMgdG8gbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjYXVzZSBpbmZvcm1hdGlvbiBsZWFrcywgd2UgZG8gKm5vdCogbmVlZCBLTVNBTiBoZXJlLiBUaGlzIGFuYWx5c2lzIGlzIHRob3JvdWdoLCBhbmQgSSdtIGNvbmZpZGVudCBpbiBteSByZWNvbW1lbmRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4OTQsIk91dHB1dFRva2VucyI6MjgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ4OjEyLjEwNTQyNzlaIiwiU2VxIjo4MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBib3VuZHMgY2hlY2tpbmcgYW5kIGhlYWRyb29tIG1hbmFnZW1lbnQgaW4gdGhlIFBQUG9BVE0gdHJhbnNtaXQgcGF0aCAoYHBwcG9hdG1fc2VuZGApLiBTcGVjaWZpY2FsbHk6XFxuMS4gSXQgYWRkcyBhIGBwc2tiX21heV9wdWxsKHNrYiwgMSlgIGNoZWNrIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBvbiBlbXB0eSBza2JzIChgc2tiLVxcdTAwM2VkYXRhWzBdYCkuXFxuMi4gSXQgcmVwbGFjZXMgYHNrYl9yZWFsbG9jX2hlYWRyb29tYCB3aXRoIGBza2JfY293X2hlYWRgIHRvIGVuc3VyZSBoZWFkcm9vbSBpcyBzYWZlbHkgd3JpdGFibGUgYW5kIGF2YWlsYWJsZS5cXG4zLiBJdCBkZWZlcnMgYHNrYl9wdWxsYCBwcm90b2NvbCBjb21wcmVzc2lvbiB1bnRpbCBpbW1lZGlhdGVseSBiZWZvcmUgdHJhbnNtaXNzaW9uLCByZW1vdmluZyB0aGUgcHJldmlvdXMgZnJhZ2lsZSB1bmRvIGxvZ2ljIHRoYXQgcGVyZm9ybWVkIGFuIG91dC1vZi1ib3VuZHMgY2hlY2sgKGBza2ItXFx1MDAzZWRhdGFbLTFdID09ICdcXFxcMCdgKS5cXG40LiBJdCBjb3BpZXMgdGhlIGNvbnN0YW50IExMQyBoZWFkZXIgKGBwcHBsbGNgKSBpbnRvIHRoZSBwdXNoZWQgc2tiIGhlYWRyb29tIGJlZm9yZSB0cmFuc21pc3Npb24uXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvIHRoZXkgcGFzcyB1bmluaXRpYWxpemVkIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4gVGhlIGlzc3VlcyBhZGRyZXNzZWQgYW5kIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBwYWNrZXQgYnVmZmVyIG1hbmlwdWxhdGlvbiBpbiB0aGlzIHBhdGggKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGJ1ZmZlciBvdmVyLXJlYWRzLCBvciBza2IgbGlmZXRpbWUvcmVmY291bnRpbmcgZXJyb3JzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYm91bmRzIGNoZWNraW5nIGFuZCBoZWFkcm9vbSBtYW5hZ2VtZW50IGluIHRoZSBQUFBvQVRNIHRyYW5zbWl0IHBhdGggKGBwcHBvYXRtX3NlbmRgKS4gU3BlY2lmaWNhbGx5OlxcbjEuIEl0IGFkZHMgYSBgcHNrYl9tYXlfcHVsbChza2IsIDEpYCBjaGVjayB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgb24gZW1wdHkgc2ticyAoYHNrYi1cXHUwMDNlZGF0YVswXWApLlxcbjIuIEl0IHJlcGxhY2VzIGBza2JfcmVhbGxvY19oZWFkcm9vbWAgd2l0aCBgc2tiX2Nvd19oZWFkYCB0byBlbnN1cmUgaGVhZHJvb20gaXMgc2FmZWx5IHdyaXRhYmxlIGFuZCBhdmFpbGFibGUuXFxuMy4gSXQgZGVmZXJzIGBza2JfcHVsbGAgcHJvdG9jb2wgY29tcHJlc3Npb24gdW50aWwgaW1tZWRpYXRlbHkgYmVmb3JlIHRyYW5zbWlzc2lvbiwgcmVtb3ZpbmcgdGhlIHByZXZpb3VzIGZyYWdpbGUgdW5kbyBsb2dpYyB0aGF0IHBlcmZvcm1lZCBhbiBvdXQtb2YtYm91bmRzIGNoZWNrIChgc2tiLVxcdTAwM2VkYXRhWy0xXSA9PSAnXFxcXDAnYCkuXFxuNC4gSXQgY29waWVzIHRoZSBjb25zdGFudCBMTEMgaGVhZGVyIChgcHBwbGxjYCkgaW50byB0aGUgcHVzaGVkIHNrYiBoZWFkcm9vbSBiZWZvcmUgdHJhbnNtaXNzaW9uLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG5vciBkbyB0aGV5IHBhc3MgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuIFRoZSBpc3N1ZXMgYWRkcmVzc2VkIGFuZCByaXNrcyBhc3NvY2lhdGVkIHdpdGggcGFja2V0IGJ1ZmZlciBtYW5pcHVsYXRpb24gaW4gdGhpcyBwYXRoIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBidWZmZXIgb3Zlci1yZWFkcywgb3Igc2tiIGxpZmV0aW1lL3JlZmNvdW50aW5nIGVycm9ycykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowkgxp7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-12 23:41:24 +0000 UTC FinishedAt: 2026-09-13 00:48:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATM", "PPP", "PPPOATM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATM", "PPP", "PPPOATM" ], "series_id": "426008ed-0e92-4a87-a2f5-c0563868a975" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "pppoatm_send", "pppoatm_assign_vcc" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUTSYjMzQ7LAogICAgJiMzNDtQUFAmIzM0OywKICAgICYjMzQ7UFBQT0FUTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BwcG9hdG1fc2VuZCYjMzQ7LAogICAgJiMzNDtwcHBvYXRtX2Fzc2lnbl92Y2MmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYm91bmRzIGNoZWNraW5nIGFuZCBoZWFkcm9vbSBtYW5hZ2VtZW50IGluIHRoZSBQUFBvQVRNIHRyYW5zbWl0IHBhdGggKGBwcHBvYXRtX3NlbmRgKS4gU3BlY2lmaWNhbGx5OlxuMS4gSXQgYWRkcyBhIGBwc2tiX21heV9wdWxsKHNrYiwgMSlgIGNoZWNrIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBvbiBlbXB0eSBza2JzIChgc2tiLVx1MDAzZWRhdGFbMF1gKS5cbjIuIEl0IHJlcGxhY2VzIGBza2JfcmVhbGxvY19oZWFkcm9vbWAgd2l0aCBgc2tiX2Nvd19oZWFkYCB0byBlbnN1cmUgaGVhZHJvb20gaXMgc2FmZWx5IHdyaXRhYmxlIGFuZCBhdmFpbGFibGUuXG4zLiBJdCBkZWZlcnMgYHNrYl9wdWxsYCBwcm90b2NvbCBjb21wcmVzc2lvbiB1bnRpbCBpbW1lZGlhdGVseSBiZWZvcmUgdHJhbnNtaXNzaW9uLCByZW1vdmluZyB0aGUgcHJldmlvdXMgZnJhZ2lsZSB1bmRvIGxvZ2ljIHRoYXQgcGVyZm9ybWVkIGFuIG91dC1vZi1ib3VuZHMgY2hlY2sgKGBza2ItXHUwMDNlZGF0YVstMV0gPT0gJiMzOTtcXDAmIzM5O2ApLlxuNC4gSXQgY29waWVzIHRoZSBjb25zdGFudCBMTEMgaGVhZGVyIChgcHBwbGxjYCkgaW50byB0aGUgcHVzaGVkIHNrYiBoZWFkcm9vbSBiZWZvcmUgdHJhbnNtaXNzaW9uLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBub3IgZG8gdGhleSBwYXNzIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLiBUaGUgaXNzdWVzIGFkZHJlc3NlZCBhbmQgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHBhY2tldCBidWZmZXIgbWFuaXB1bGF0aW9uIGluIHRoaXMgcGF0aCAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYnVmZmVyIG92ZXItcmVhZHMsIG9yIHNrYiBsaWZldGltZS9yZWZjb3VudGluZyBlcnJvcnMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgcGFja2V0IHRyYW5zbWlzc2lvbiBoYW5kbGluZyBhbmQgYnVmZmVyIG1hbmFnZW1lbnQgaW4gcHBwb2F0bV9zZW5kIHdpdGhpbiBuZXQvYXRtL3BwcG9hdG0uYy4gSXQgcmVwbGFjZXMgc2tiX3JlYWxsb2NfaGVhZHJvb20gd2l0aCBza2JfY293X2hlYWQsIHJlc3RydWN0dXJlcyB0aGUgb3JkZXIgb2Ygc2tiX3B1bGwgYW5kIHNrYl9wdXNoLCByZW1vdmVzIHRoZSB1bmRvIGxvZ2ljIG9uIHNlbmQgZmFpbHVyZSwgYW5kIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiB2aWEgcHNrYl9tYXlfcHVsbC4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgcGF0aHMgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBQUFAgb3ZlciBBVE0gYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3MzBiZmE1MzFkYTc3N2RiMjkzMmE2Nzk0YzY5YzlmMjcyN2IwODlmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMDA6NDQ6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcHBvYXRtLmMgYi9uZXQvYXRtL3BwcG9hdG0uY1xuaW5kZXggNmRhNTJkMTJkZjY4ZS4uNTIxNDc4NmU2MWQxMSAxMDA2NDRcbi0tLSBhL25ldC9hdG0vcHBwb2F0bS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYXRtL3BwcG9hdG0uY1xuQEAgLTI5MiwxMCAmIzQzOzI5MiwxMyBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xuIFx0aW50IHJldDtcbiBcbiYjNDM7XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAxKSkge1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRyZXR1cm4gRFJPUF9QQUNLRVQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdEFUTV9TS0Ioc2tiKS1cdTAwM2V2Y2MgPSBwdmNjLVx1MDAzZWF0bXZjYztcbiBcdHByX2RlYnVnKFwmIzM0Oyhza2I9MHglcCwgdmNjPTB4JXApXFxuXCYjMzQ7LCBza2IsIHB2Y2MtXHUwMDNlYXRtdmNjKTtcbi1cdGlmIChza2ItXHUwMDNlZGF0YVswXSA9PSAmIzM5O1xcMCYjMzk7IFx1MDAyNlx1MDAyNiAocHZjYy1cdTAwM2VmbGFncyBcdTAwMjYgU0NfQ09NUF9QUk9UKSlcbi1cdFx0KHZvaWQpIHNrYl9wdWxsKHNrYiwgMSk7XG4gXG4gXHR2Y2MgPSBBVE1fU0tCKHNrYiktXHUwMDNldmNjO1xuIFx0YmhfbG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbkBAIC0zMTcsMjMgJiM0MzszMjAsMTMgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0c3dpdGNoIChwdmNjLVx1MDAzZWVuY2Fwcykge1x0XHQvKiBMTEMgZW5jYXBzdWxhdGlvbiBuZWVkZWQgKi9cbiBcdGNhc2UgZV9sbGM6XG4tXHRcdGlmIChza2JfaGVhZHJvb20oc2tiKSBcdTAwM2MgTExDX0xFTikge1xuLVx0XHRcdHN0cnVjdCBza19idWZmICpuO1xuLVx0XHRcdG4gPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsIExMQ19MRU4pO1xuLVx0XHRcdGlmIChuICE9IE5VTEwgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIG4tXHUwMDNldHJ1ZXNpemUpKSB7XG4tXHRcdFx0XHRrZnJlZV9za2Iobik7XG4tXHRcdFx0XHRnb3RvIG5vc3BhY2U7XG4tXHRcdFx0fVxuLVx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4tXHRcdFx0c2tiID0gbjtcbi1cdFx0XHRpZiAoc2tiID09IE5VTEwpIHtcbi1cdFx0XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbi1cdFx0XHRcdHJldHVybiBEUk9QX1BBQ0tFVDtcbi1cdFx0XHR9XG4tXHRcdH0gZWxzZSBpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbiYjNDM7XHRcdGlmIChza2JfY293X2hlYWQoc2tiLCBMTENfTEVOKSkge1xuJiM0MztcdFx0XHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XG4mIzQzO1x0XHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0XHRyZXR1cm4gRFJPUF9QQUNLRVQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbiBcdFx0XHRnb3RvIG5vc3BhY2U7XG4tXHRcdG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgZV92YzpcbiBcdFx0aWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cdTAwM2V0cnVlc2l6ZSkpXG5AQCAtMzQ2LDYgJiM0MzszMzksMTIgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRyZXR1cm4gMTtcbiBcdH1cbiBcbiYjNDM7XHRpZiAoc2tiLVx1MDAzZWRhdGFbMF0gPT0gJiMzOTtcXDAmIzM5OyBcdTAwMjZcdTAwMjYgKHB2Y2MtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0NPTVBfUFJPVCkpXG4mIzQzO1x0XHRza2JfcHVsbChza2IsIDEpO1xuJiM0MztcbiYjNDM7XHRpZiAocHZjYy1cdTAwM2VlbmNhcHMgPT0gZV9sbGMpXG4mIzQzO1x0XHRtZW1jcHkoc2tiX3B1c2goc2tiLCBMTENfTEVOKSwgcHBwbGxjLCBMTENfTEVOKTtcbiYjNDM7XG4gXHRhdG1fYWNjb3VudF90eCh2Y2MsIHNrYik7XG4gXHRwcl9kZWJ1ZyhcJiMzNDthdG1fc2tiKCVwKS1cdTAwM2V2Y2MoJXApLVx1MDAzZWRldiglcClcXG5cJiMzNDssXG4gXHRcdCBza2IsIEFUTV9TS0Ioc2tiKS1cdTAwM2V2Y2MsIEFUTV9TS0Ioc2tiKS1cdTAwM2V2Y2MtXHUwMDNlZGV2KTtcbkBAIC0zNTUsMTMgJiM0MzszNTQsNiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gcmV0O1xuIG5vc3BhY2U6XG4gXHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XG4tXHQvKlxuLVx0ICogV2UgZG9uJiMzOTt0IGhhdmUgc3BhY2UgdG8gc2VuZCB0aGlzIFNLQiBub3csIGJ1dCB3ZSBtaWdodCBoYXZlXG4tXHQgKiBhbHJlYWR5IGFwcGxpZWQgU0NfQ09NUF9QUk9UIGNvbXByZXNzaW9uLCBzbyBtYXkgbmVlZCB0byB1bmRvXG4tXHQgKi9cbi1cdGlmICgocHZjYy1cdTAwM2VmbGFncyBcdTAwMjYgU0NfQ09NUF9QUk9UKSBcdTAwMjZcdTAwMjYgc2tiX2hlYWRyb29tKHNrYikgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4tXHQgICAgc2tiLVx1MDAzZWRhdGFbLTFdID09ICYjMzk7XFwwJiMzOTspXG4tXHRcdCh2b2lkKSBza2JfcHVzaChza2IsIDEpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUTSYjMzQ7LAogICAgJiMzNDtQUFAmIzM0OywKICAgICYjMzQ7UFBQT0FUTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BwcG9hdG1fc2VuZCYjMzQ7LAogICAgJiMzNDtwcHBvYXRtX2Fzc2lnbl92Y2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIHBhY2tldCB0cmFuc21pc3Npb24gaGFuZGxpbmcgYW5kIGJ1ZmZlciBtYW5hZ2VtZW50IGluIHBwcG9hdG1fc2VuZCB3aXRoaW4gbmV0L2F0bS9wcHBvYXRtLmMuIEl0IHJlcGxhY2VzIHNrYl9yZWFsbG9jX2hlYWRyb29tIHdpdGggc2tiX2Nvd19oZWFkLCByZXN0cnVjdHVyZXMgdGhlIG9yZGVyIG9mIHNrYl9wdWxsIGFuZCBza2JfcHVzaCwgcmVtb3ZlcyB0aGUgdW5kbyBsb2dpYyBvbiBzZW5kIGZhaWx1cmUsIGFuZCBhZGRzIGlucHV0IHZhbGlkYXRpb24gdmlhIHBza2JfbWF5X3B1bGwuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIHBhdGhzIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgUFBQIG92ZXIgQVRNIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzMwYmZhNTMxZGE3NzdkYjI5MzJhNjc5NGM2OWM5ZjI3MjdiMDg5ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDEzIDAwOjQ0OjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcHBvYXRtLmMgYi9uZXQvYXRtL3BwcG9hdG0uYwppbmRleCA2ZGE1MmQxMmRmNjhlLi41MjE0Nzg2ZTYxZDExIDEwMDY0NAotLS0gYS9uZXQvYXRtL3BwcG9hdG0uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYXRtL3BwcG9hdG0uYwpAQCAtMjkyLDEwICYjNDM7MjkyLDEzIEBAIHN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlzdHJ1Y3QgYXRtX3ZjYyAqdmNjOwogCWludCByZXQ7CiAKJiM0MzsJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMSkpIHsKJiM0MzsJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJcmV0dXJuIERST1BfUEFDS0VUOwomIzQzOwl9CiYjNDM7CiAJQVRNX1NLQihza2IpLSZndDt2Y2MgPSBwdmNjLSZndDthdG12Y2M7CiAJcHJfZGVidWcoJiMzNDsoc2tiPTB4JXAsIHZjYz0weCVwKVxuJiMzNDssIHNrYiwgcHZjYy0mZ3Q7YXRtdmNjKTsKLQlpZiAoc2tiLSZndDtkYXRhWzBdID09ICYjMzk7XDAmIzM5OyAmYW1wOyZhbXA7IChwdmNjLSZndDtmbGFncyAmYW1wOyBTQ19DT01QX1BST1QpKQotCQkodm9pZCkgc2tiX3B1bGwoc2tiLCAxKTsKIAogCXZjYyA9IEFUTV9TS0Ioc2tiKS0mZ3Q7dmNjOwogCWJoX2xvY2tfc29jayhza19hdG0odmNjKSk7CkBAIC0zMTcsMjMgJiM0MzszMjAsMTMgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiAJc3dpdGNoIChwdmNjLSZndDtlbmNhcHMpIHsJCS8qIExMQyBlbmNhcHN1bGF0aW9uIG5lZWRlZCAqLwogCWNhc2UgZV9sbGM6Ci0JCWlmIChza2JfaGVhZHJvb20oc2tiKSAmbHQ7IExMQ19MRU4pIHsKLQkJCXN0cnVjdCBza19idWZmICpuOwotCQkJbiA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHNrYiwgTExDX0xFTik7Ci0JCQlpZiAobiAhPSBOVUxMICZhbXA7JmFtcDsKLQkJCSAgICAhcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBuLSZndDt0cnVlc2l6ZSkpIHsKLQkJCQlrZnJlZV9za2Iobik7Ci0JCQkJZ290byBub3NwYWNlOwotCQkJfQotCQkJY29uc3VtZV9za2Ioc2tiKTsKLQkJCXNrYiA9IG47Ci0JCQlpZiAoc2tiID09IE5VTEwpIHsKLQkJCQliaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7Ci0JCQkJcmV0dXJuIERST1BfUEFDS0VUOwotCQkJfQotCQl9IGVsc2UgaWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi0mZ3Q7dHJ1ZXNpemUpKQomIzQzOwkJaWYgKHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pKSB7CiYjNDM7CQkJYmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpOwomIzQzOwkJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJCXJldHVybiBEUk9QX1BBQ0tFVDsKJiM0MzsJCX0KJiM0MzsJCWlmICghcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBza2ItJmd0O3RydWVzaXplKSkKIAkJCWdvdG8gbm9zcGFjZTsKLQkJbWVtY3B5KHNrYl9wdXNoKHNrYiwgTExDX0xFTiksIHBwcGxsYywgTExDX0xFTik7CiAJCWJyZWFrOwogCWNhc2UgZV92YzoKIAkJaWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi0mZ3Q7dHJ1ZXNpemUpKQpAQCAtMzQ2LDYgJiM0MzszMzksMTIgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQlyZXR1cm4gMTsKIAl9CiAKJiM0MzsJaWYgKHNrYi0mZ3Q7ZGF0YVswXSA9PSAmIzM5O1wwJiMzOTsgJmFtcDsmYW1wOyAocHZjYy0mZ3Q7ZmxhZ3MgJmFtcDsgU0NfQ09NUF9QUk9UKSkKJiM0MzsJCXNrYl9wdWxsKHNrYiwgMSk7CiYjNDM7CiYjNDM7CWlmIChwdmNjLSZndDtlbmNhcHMgPT0gZV9sbGMpCiYjNDM7CQltZW1jcHkoc2tiX3B1c2goc2tiLCBMTENfTEVOKSwgcHBwbGxjLCBMTENfTEVOKTsKJiM0MzsKIAlhdG1fYWNjb3VudF90eCh2Y2MsIHNrYik7CiAJcHJfZGVidWcoJiMzNDthdG1fc2tiKCVwKS0mZ3Q7dmNjKCVwKS0mZ3Q7ZGV2KCVwKVxuJiMzNDssCiAJCSBza2IsIEFUTV9TS0Ioc2tiKS0mZ3Q7dmNjLCBBVE1fU0tCKHNrYiktJmd0O3ZjYy0mZ3Q7ZGV2KTsKQEAgLTM1NSwxMyAmIzQzOzM1NCw2IEBAIHN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlyZXR1cm4gcmV0Owogbm9zcGFjZToKIAliaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7Ci0JLyoKLQkgKiBXZSBkb24mIzM5O3QgaGF2ZSBzcGFjZSB0byBzZW5kIHRoaXMgU0tCIG5vdywgYnV0IHdlIG1pZ2h0IGhhdmUKLQkgKiBhbHJlYWR5IGFwcGxpZWQgU0NfQ09NUF9QUk9UIGNvbXByZXNzaW9uLCBzbyBtYXkgbmVlZCB0byB1bmRvCi0JICovCi0JaWYgKChwdmNjLSZndDtmbGFncyAmYW1wOyBTQ19DT01QX1BST1QpICZhbXA7JmFtcDsgc2tiX2hlYWRyb29tKHNrYikgJmd0OyAwICZhbXA7JmFtcDsKLQkgICAgc2tiLSZndDtkYXRhWy0xXSA9PSAmIzM5O1wwJiMzOTspCi0JCSh2b2lkKSBza2JfcHVzaChza2IsIDEpOwogCXJldHVybiAwOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MDgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQUFBvQVRNIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIG1vZGlmeWluZyBgbmV0L2F0bS9wcHBvYXRtLmNgLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBUaGUgY2hhbmdlcyB3aXRoaW4gYHBwcG9hdG1fc2VuZGAgYXJlIHdoYXQgSSYjMzk7bSBpbnRlcmVzdGVkIGluLgoKRmlyc3QsIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBgaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMSkpYCBhdCB0aGUgdG9wIG9mIHRoZSBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIHNvbGlkIGNoZWNrIGZvciBkYXRhIGF2YWlsYWJpbGl0eSBiZWZvcmUgcHJvY2VlZGluZywgYSBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBtZWFzdXJlLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuCgpOZXh0LCB0aGF0IGluaXRpYWwsIHF1aWNrIGNoZWNrIGFuZCByZW1vdmFsIG9mIHRoZSAgYGlmIChza2ItJmd0O2RhdGFbMF0gPT0gJiMzOTtcMCYjMzk7ICZhbXA7JmFtcDsgKHB2Y2MtJmd0O2ZsYWdzICZhbXA7IFNDX0NPTVBfUFJPVCkpICh2b2lkKSBza2JfcHVsbChza2IsIDEpO2Agc2VlbXMgbGlrZSBhIG1pbm9yIG9wdGltaXphdGlvbi4gSXQgd2FzIHB1bGxpbmcgZGF0YSBiYXNlZCBvbiB0aGUgZmlyc3QgYnl0ZSBiZWluZyBhIG51bGwgY2hhcmFjdGVyLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGNvbXByZXNzaW9uLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgY29udGV4dCBhcyBJIGdvIHRocm91Z2ggdGhlIHJlc3QuCgpOb3cgdGhlIGBzd2l0Y2ggKHB2Y2MtJmd0O2VuY2FwcylgIGJsb2NrOiBSZXBsYWNpbmcgYHNrYl9yZWFsbG9jX2hlYWRyb29tYCBhbmQgdGhlIGFzc29jaWF0ZWQgaGVhZHJvb20gY2hlY2sgd2l0aCBgc2tiX2Nvd19oZWFkKHNrYiwgTExDX0xFTilgIGlzIGludGVyZXN0aW5nLiBVc2luZyBgc2tiX2Nvd19oZWFkYCBzdWdnZXN0cyBhIGNvcHktb24td3JpdGUgc3RyYXRlZ3kgaXMgYmVpbmcgaW50cm9kdWNlZCBvciByZWZpbmVkIHRvIG1hbmFnZSB0aGUgTExDIGhlYWRlci4gTXVjaCBtb3JlIGVmZmljaWVudC4gUmVtb3ZpbmcgdGhlIGBtZW1jcHlgIG9mIHRoZSBMTEMgaGVhZGVyICp3aXRoaW4qIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGlzIGFuIGltcG9ydGFudCBzaGlmdCBhcyB3ZWxsLiAKClRoZSBtb3ZlbWVudCBvZiB0aGUgYHNrYl9wdWxsYCBhbmQgYHNrYl9wdXNoKHNrYiwgTExDX0xFTilgIG9wZXJhdGlvbnMgZnVydGhlciBkb3duIGFmdGVyIHdlJiMzOTt2ZSBjb25maXJtZWQgd2UgY2FuIHNlbmQgdGhlIHBhY2tldCBhbmQgcmVsZWFzZWQgYG5vc3BhY2VgIHNpZ25hbHMgYW4gYXR0ZW1wdCB0byBvcHRpbWl6ZSBwYWNrZXQgbWFuaXB1bGF0aW9uLiBUaGlzIHNlZW1zIGxpa2UgYSBnb29kIG1vdmUgdG8gZGVsYXkgdGhlc2UgcG90ZW50aWFsbHkgZXhwZW5zaXZlIG9wZXJhdGlvbnMuCgpGaW5hbGx5LCB0aGUgcmVtb3ZhbCBvZiB0aGUgdW5kbyBsb2dpYyB3aXRoaW4gdGhlIGBub3NwYWNlOmAgbGFiZWwgY2F0Y2hlcyBteSBhdHRlbnRpb24uIFRoZSByZW1vdmVkIGNvZGUgd2FzIGF0dGVtcHRpbmcgdG8gdW5kbyBjb21wcmVzc2lvbiBpZiBoZWFkcm9vbSB3YXMgYXZhaWxhYmxlIGFuZCB0aGUgZmlyc3QgYnl0ZSB3YXMgemVybywgc2VlbWluZ2x5IGEgZmFsbGJhY2sgZm9yIGEgY29tcHJlc3Npb24gcHJvdG9jb2wuIFRoaXMgaW5kaWNhdGVzIGVpdGhlciB0aGF0IHRoYXQgcGFydGljdWxhciBjb21wcmVzc2lvbiBwcm90b2NvbCBpcyBubyBsb25nZXIgdXNlZCwgb3IgdGhlIGxvZ2ljIGZvciBpdHMgZGUtYXBwbGljYXRpb24gKGNvbXByZXNzaW9uKSBoYXMgY2hhbmdlZC4KCkkgbmVlZCB0byBjb25maXJtIHRoZSBjaGFuZ2VzIGFyZSBzYWZlIGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgUFBQb0FUTSBpbXBsZW1lbnRhdGlvbiwgYW5kIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFuZCB0aGVpciBpbXBhY3QuIFRpbWUgdG8gZ3JlcHBlciBvciByZWFkIHRoZSBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BQUE9BVE0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYXRtL01ha2VmaWxlPTEwPWF0bS0kKENPTkZJR19QUk9DX0ZTKSAmIzQzOz0gcHJvYy5vXG5uZXQvYXRtL01ha2VmaWxlLTExLVxubmV0L2F0bS9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfUFBQT0FUTSkgJiM0Mzs9IHBwcG9hdG0ub1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jPTUwPWVudW0gcHBwb2F0bV9lbmNhcHMge1xubmV0L2F0bS9wcHBvYXRtLmM6NTE6XHRlX2F1dG9kZXRlY3QgPSBQUFBPQVRNX0VOQ0FQU19BVVRPREVURUNULFxubmV0L2F0bS9wcHBvYXRtLmM6NTI6XHRlX3ZjID0gUFBQT0FUTV9FTkNBUFNfVkMsXG5uZXQvYXRtL3BwcG9hdG0uYzo1MzpcdGVfbGxjID0gUFBQT0FUTV9FTkNBUFNfTExDLFxubmV0L2F0bS9wcHBvYXRtLmMtNTQtfTtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYz0zODA9c3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0zODctXHRcdHJldHVybiAtRUZBVUxUO1xubmV0L2F0bS9wcHBvYXRtLmM6Mzg4Olx0aWYgKGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19BVVRPREVURUNUIFx1MDAyNlx1MDAyNlxubmV0L2F0bS9wcHBvYXRtLmM6Mzg5Olx0ICAgIGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19WQyBcdTAwMjZcdTAwMjYgYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX0xMQylcbm5ldC9hdG0vcHBwb2F0bS5jLTM5MC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA5MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6CgoqKkV4YW1pbmluZyBQUFBvQS9BVE0gRGVwZW5kZW5jaWVzIGluIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBQUFBvQVRNIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIE15IGluc3RpbmN0IHNheXMgdG8gc3RhcnQgd2l0aCBgbmV0L2F0bS9LY29uZmlnYCDigJMgdGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBgQ09ORklHX1BQUE9BVE1gLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBtb2R1bGVzICpkZXBlbmQqIG9uIHRoaXMsIG9yIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbXVzdCBiZSBlbmFibGVkIGJlZm9yZSBgQ09ORklHX1BQUE9BVE1gIGlzIGV2ZW4gYW4gb3B0aW9uLiBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIEFUTS9QUFBvQSBzZXR1cCBhbmQgaG93IGRpZmZlcmVudCBwaWVjZXMgZml0IHRvZ2V0aGVyLiBJIHdhbnQgdG8gYnVpbGQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBkZXBlbmRlbmNpZXMsIG5vdCBqdXN0IHRoZSBiYXNpY3MsIGJ1dCBldmVyeXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBQUE9BVE0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMzMAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlRyYWNpbmcgRG93biB0aGUgYGNvbmZpZyBQUFBPQVRNYCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGV4YWN0bHkgd2hlcmUgdGhpcyBgY29uZmlnIFBQUE9BVE1gIGRlZmluaXRpb24gaXMgY29taW5nIGZyb20uIEl0JiMzOTtzIGEga2V5IGVsZW1lbnQsIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyBvcmlnaW4gaXMgY3JpdGljYWwgdG8gbXkgY3VycmVudCB0YXNrLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgY29kZWJhc2UsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZCBhbnkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiB0byBwaW5wb2ludCBpdHMgbG9jYXRpb24uIFRoaXMgbWVhbnMgZGl2aW5nIGRlZXAgaW50byB0aGUgY29uZmlndXJhdGlvbiBoaWVyYXJjaHksIGxpa2VseSBleGFtaW5pbmcgaW5jbHVkZSBmaWxlcywgbWFjcm8gZGVmaW5pdGlvbnMsIGFuZCBwb3RlbnRpYWxseSBldmVuIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBjb25maWd1cmF0aW9uIHNjcmlwdHMuIEkgbmVlZCB0byBrbm93ICpldmVyeXRoaW5nKiDigJMgd2hlcmUgaXQmIzM5O3MgZGVjbGFyZWQsIHRoZSBzY29wZSBvZiBpdHMgYXBwbGljYXRpb24sIGFuZCBhbnkgcG9zc2libGUgb3ZlcnJpZGVzIG9yIGRlZmF1bHQgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCBpdC4gVGhpcyBpcyBmdW5kYW1lbnRhbCBmb3IgZGVidWdnaW5nIG9yIG1ha2luZyBhbnkgY2hhbmdlcyByZWxhdGVkIHRvIHRoYXQgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFBQT0FUTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZz05Mj1jb25maWcgUFBQX01VTFRJTElOS1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEwMy1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjEwNDpjb25maWcgUFBQT0FUTVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTA1LVx0dHJpc3RhdGUgXCYjMzQ7UFBQIG92ZXIgQVRNXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYwNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIFBQUCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgUFBQIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSB3b3VsZCBiZSBpbiBgZHJpdmVycy9uZXQvcHBwL2AuIExldCBtZSB6ZXJvIGluIG9uIHRoYXQgc2VjdGlvbiBhbmQgc3RhcnQgd2l0aCBgS2NvbmZpZ2AuIFNwZWNpZmljYWxseSwgSSB0aGluayB0aGUgY3JpdGljYWwgb3B0aW9ucyBhcm91bmQgbGluZSAxMDQgYXJlIGdvaW5nIHRvIGJlIG1vc3QgaW50ZXJlc3RpbmcuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHdlJiMzOTtyZSB1c2VkIHRvIOKAkyB0aGluZ3MgbGlrZSBlbmFibGluZyBvciBkaXNhYmxpbmcgdmFyaW91cyBQUFAgZmVhdHVyZXMsIHBlcmhhcHMgb3B0aW9ucyBmb3IgZGlmZmVyZW50IGNvbXByZXNzaW9uIG1ldGhvZHMgKE1QUEMsIFZKIGNvbXByZXNzaW9uLCBldGMuKSwgYW5kIG1heWJlIGV2ZW4gc29tZSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgYmFzZWQgb24gb3RoZXIgbmV0d29yayBvciBoYXJkd2FyZSBjb21wb25lbnRzLiBUaW1lIHRvIGNvbmZpcm0gbXkgaW50dWl0aW9uIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvbmZpZyBvcHRpb25zIHRlbGwgdXMgYWJvdXQgUFBQIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdFx0ICB2ZXJzaW9uIG9mIHRoZSBwcHBkIGRhZW1vbiB3aGljaCB1bmRlcnN0YW5kcyB0aGUgbXVsdGlsaW5rIHByb3RvY29sLlxuIDEwMTpcdFxuIDEwMjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDEwMzpcdFxuIDEwNDpcdGNvbmZpZyBQUFBPQVRNXG4gMTA1Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgb3ZlciBBVE1cJiMzNDtcbiAxMDY6XHRcdGRlcGVuZHMgb24gQVRNXG4gMTA3Olx0XHRoZWxwXG4gMTA4Olx0XHQgIFN1cHBvcnQgUFBQIChQb2ludCB0byBQb2ludCBQcm90b2NvbCkgZW5jYXBzdWxhdGVkIGluIEFUTSBmcmFtZXMuXG4gMTA5Olx0XHQgIFRoaXMgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgeWV0IGNvbXBseSB3aXRoIHNlY3Rpb24gOCBvZiBSRkMyMzY0LFxuIDExMDpcdFx0ICB3aGljaCBjYW4gbGVhZCB0byBiYWQgcmVzdWx0cyBpZiB0aGUgQVRNIHBlZXIgbG9zZXMgc3RhdGUgYW5kXG4gMTExOlx0XHQgIGNoYW5nZXMgaXRzIGVuY2Fwc3VsYXRpb24gdW5pbGF0ZXJhbGx5LlxuIDExMjpcdFxuIDExMzpcdGNvbmZpZyBQUFBPWFxuIDExNDpcdFx0dHJpc3RhdGVcbiAxMTU6XHRcbiAxMTY6XHRjb25maWcgUFBQT0VcbiAxMTc6XHRcdHRyaXN0YXRlIFwmIzM0O1BQUCBvdmVyIEV0aGVybmV0XCYjMzQ7XG4gMTE4Olx0XHRzZWxlY3QgUFBQT1hcbiAxMTk6XHRcdGhlbHBcbiAxMjA6XHRcdCAgU3VwcG9ydCBmb3IgUFBQIG92ZXIgRXRoZXJuZXQuXG4gMTIxOlx0XG4gMTIyOlx0XHQgIFRvIHdvcmsgaW4gY2xpZW50IG1vZGUsIHBwcGQgdmVyc2lvbiAyLjQuMiBvciBsYXRlciBpcyByZXF1aXJlZC5cbiAxMjM6XHRcdCAgVG8gd29yayBpbiBzZXJ2ZXIgbW9kZSwgdGhlIHBwcG9lLXNlcnZlciBjb21tYW5kIGZyb20gdGhlIFJQLVBQUG9FXG4gMTI0Olx0XHQgIHBhY2thZ2UgaXMgYWxzbyByZXF1aXJlZCwgYXZhaWxhYmxlIGF0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMDgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIFBQUCBEZXBlbmRlbmN5KioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAsIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgUFBQIGlzIGFjdHVhbGx5ICpyZXF1aXJlZCogaGVyZS4gSSBrbm93IGl0JiMzOTtzIGEgbGVnYWN5IHByb3RvY29sLCBidXQgeW91IG5ldmVyIGtub3cgd2hhdCBhbmNpZW50IGRlcGVuZGVuY2llcyBtaWdodCBzdGlsbCBiZSBsdXJraW5nLiBTbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgZXhhbWluZSB0aGUgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBzY2FuIHRoZSBiZWdpbm5pbmcgb2YgdGhhdCBjb25maWcgZmlsZSB0byBzZWUgaWYgYW55dGhpbmcgZWxzZSBkZXBlbmRzIG9uIGl0LiBUaGlzIHNob3VsZCBxdWlja2x5IHRlbGwgbWUgaWYgSSBuZWVkIHRvIGNvbnNpZGVyIFBQUCBmdW5jdGlvbmFsaXR5IG9yIHdoZXRoZXIgaXQmIzM5O3Mgc29tZXRoaW5nIHRoYXQgY2FuIGJlIHNhZmVseSBpZ25vcmVkIGZvciB0aGlzIHBhcnRpY3VsYXIgYnVpbGQgY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgYWJvdXQgYmVpbmcgZWZmaWNpZW50IGFuZCBub3Qgd2FzdGluZyB0aW1lIG9uIHNvbWV0aGluZyBpcnJlbGV2YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgUFBQIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIFBQUFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIChwb2ludC10by1wb2ludCBwcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xuICAgODpcdFx0c2VsZWN0IFNMSENcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgUFBQIChQb2ludCB0byBQb2ludCBQcm90b2NvbCkgaXMgYSBuZXdlciBhbmQgYmV0dGVyIFNMSVAuICBJdCBzZXJ2ZXNcbiAgMTE6XHRcdCAgdGhlIHNhbWUgcHVycG9zZTogc2VuZGluZyBJbnRlcm5ldCB0cmFmZmljIG92ZXIgdGVsZXBob25lIChhbmQgb3RoZXJcbiAgMTI6XHRcdCAgc2VyaWFsKSBsaW5lcy4gIEFzayB5b3VyIGFjY2VzcyBwcm92aWRlciBpZiB0aGV5IHN1cHBvcnQgaXQsIGJlY2F1c2VcbiAgMTM6XHRcdCAgb3RoZXJ3aXNlIHlvdSBjYW4mIzM5O3QgdXNlIGl0OyBtb3N0IEludGVybmV0IGFjY2VzcyBwcm92aWRlcnMgdGhlc2VcbiAgMTQ6XHRcdCAgZGF5cyBzdXBwb3J0IFBQUCByYXRoZXIgdGhhbiBTTElQLlxuICAxNTpcdFxuICAxNjpcdFx0ICBUbyB1c2UgUFBQLCB5b3UgbmVlZCBhbiBhZGRpdGlvbmFsIHByb2dyYW0gY2FsbGVkIHBwcGQsIGF2YWlsYWJsZSBhdFxuICAxNzpcdFx0ICBcdTAwM2NodHRwczovL3BwcC5zYW1iYS5vcmdcdTAwM2UuICBNYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgdmVyc2lvbiBvZiBwcHBkXG4gIDE4Olx0XHQgIHJlY29tbWVuZGVkIGluIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9DaGFuZ2VzXHUwMDNlLlxuICAxOTpcdFx0ICBUaGUgUFBQIG9wdGlvbiBlbmxhcmdlcyB5b3VyIGtlcm5lbCBieSBhYm91dCAxNiBLQi5cbiAgMjA6XHRcbiAgMjE6XHRcdCAgVGhlcmUgYXJlIGFjdHVhbGx5IHR3byB2ZXJzaW9ucyBvZiBQUFA6IHRoZSB0cmFkaXRpb25hbCBQUFAgZm9yXG4gIDIyOlx0XHQgIGFzeW5jaHJvbm91cyBsaW5lcywgc3VjaCBhcyByZWd1bGFyIGFuYWxvZyBwaG9uZSBsaW5lcywgYW5kXG4gIDIzOlx0XHQgIHN5bmNocm9ub3VzIFBQUCB3aGljaCBjYW4gYmUgdXNlZCBvdmVyIGRpZ2l0YWwgSVNETiBsaW5lcyBmb3JcbiAgMjQ6XHRcdCAgZXhhbXBsZS4gIElmIHlvdSB3YW50IHRvIHVzZSBQUFAgb3ZlciBwaG9uZSBsaW5lcyBvciBvdGhlclxuICAyNTpcdFx0ICBhc3luY2hyb25vdXMgc2VyaWFsIGxpbmVzLCB5b3UgbmVlZCB0byBzYXkgWSAob3IgTSkgaGVyZSBhbmQgYWxzbyB0b1xuICAyNjpcdFx0ICB0aGUgbmV4dCBvcHRpb24sIFwmIzM0O1BQUCBzdXBwb3J0IGZvciBhc3luYyBzZXJpYWwgcG9ydHNcJiMzNDsuICBGb3IgUFBQIG92ZXJcbiAgMjc6XHRcdCAgc3luY2hyb25vdXMgbGluZXMsIHlvdSBzaG91bGQgc2F5IFkgKG9yIE0pIGhlcmUgYW5kIHRvIFwmIzM0O1N1cHBvcnRcbiAgMjg6XHRcdCAgc3luY2hyb25vdXMgUFBQXCYjMzQ7LCBiZWxvdy5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgSWYgeW91IHNhaWQgWSB0byBcJiMzNDtWZXJzaW9uIGluZm9ybWF0aW9uIG9uIGFsbCBzeW1ib2xzXCYjMzQ7IGFib3ZlLCB0aGVuXG4gIDMxOlx0XHQgIHlvdSBjYW5ub3QgY29tcGlsZSB0aGUgUFBQIGRyaXZlciBpbnRvIHRoZSBrZXJuZWw7IHlvdSBjYW4gdGhlbiBvbmx5XG4gIDMyOlx0XHQgIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUuIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNXG4gIDMzOlx0XHQgIGhlcmUuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcHBwX2dlbmVyaWMuXG4gIDM0Olx0XG4gIDM1Olx0aWYgUFBQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMjcKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFBQUCBhbmQgQVRNIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBuZXR3b3JrIGRyaXZlciBjb25maWd1cmF0aW9uLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgYGlmIFBQUGAgc3RhdGVtZW50IGlzIGNydWNpYWw7IGl0JiMzOTtzIGd1YXJkaW5nIGFsbCBvZiBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgLiBUaGF0IG1lYW5zIHRoZSBlbnRpcmUgUFBQIGNvbmZpZ3VyYXRpb24sIHRoZSB3aG9sZSBzaGViYW5nLCBpcyBjb250aW5nZW50IG9uIHRoZSBgQ09ORklHX1BQUGAgb3B0aW9uIGJlaW5nIHNldC4gUmlnaHQsIHNvIEkga25vdyBgQ09ORklHX1BQUE9BVE1gIGlzIHNwZWNpZmljYWxseSBkZXBlbmRlbnQgb24gYENPTkZJR19QUFBgIGFuZCBgQ09ORklHX0FUTWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgYG5ldC9hdG0vS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgQ09ORklHX0FUTWAgaXRzZWxmIGRlcGVuZHMgb24uIFRoaXMgaXMgYWxsIGFib3V0IHRyYWNpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGFuZCBmaWd1cmluZyBvdXQgdGhlIGJ1aWxkIGhpZXJhcmNoeS4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFUTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9LY29uZmlnLTUtXG5uZXQvYXRtL0tjb25maWc6Njpjb25maWcgQVRNXG5uZXQvYXRtL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0FzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlIChBVE0pXCYjMzQ7XG4tLVxubmV0L2F0bS9LY29uZmlnLTIxLVxubmV0L2F0bS9LY29uZmlnOjIyOmNvbmZpZyBBVE1fQlIyNjg0XG5uZXQvYXRtL0tjb25maWctMjMtXHR0cmlzdGF0ZSBcJiMzNDtSRkMxNDgzLzI2ODQgQnJpZGdlZCBwcm90b2NvbHNcJiMzNDtcbi0tXG5uZXQvYXRtL0tjb25maWctMzAtXG5uZXQvYXRtL0tjb25maWc6MzE6Y29uZmlnIEFUTV9CUjI2ODRfSVBGSUxURVJcbm5ldC9hdG0vS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7UGVyLVZDIElQIGZpbHRlciBrbHVkZ2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ1MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBQUFBvQS9BVE0gU2VuZCBQYXRoKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgc3BlY2lmaWNhbGx5IGhvdyB0aGUgYHBwcG9hdG1fc2VuZGAgZnVuY3Rpb24gaW4gYG5ldC9hdG0vcHBwb2F0bS5jYCBpcyB0cmlnZ2VyZWQuIE15IGZpcnN0IHN0ZXAgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBJJiMzOTtsbCBvcGVuIHVwIGBuZXQvYXRtL3BwcG9hdG0uY2AgYW5kIGh1bnQgZG93biB0aGUgY2FsbCBjaGFpbiB0aGF0IGxlYWRzIHRvIGl0LiBPbmNlIEkmIzM5O3ZlIGxvY2F0ZWQgdGhlIGVudHJ5IHBvaW50IHRvIGBwcHBvYXRtX3NlbmRgLCBJJiMzOTtsbCBnaXZlIHRoYXQgZnVuY3Rpb24gYSB0aG9yb3VnaCBleGFtaW5hdGlvbi4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSB0b28sIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgY29udGV4dCwgaW5wdXQgcGFyYW1ldGVycywgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgUFBQIG92ZXIgQVRNIGZyYW1ld29yay4gVW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBpcyBrZXkgdG8gZGVidWdnaW5nIG9yIG1vZGlmeWluZyBBVE0gZnVuY3Rpb25hbGl0eS4gSSBuZWVkIGEgc29saWQgaGFuZGxlIG9uIHRoaXMgZnVuY3Rpb24gdG8gcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYXRtL3BwcG9hdG0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjgwOlx0ICogQ2FsbGVkIGJ5IHRoZSBwcHBfZ2VuZXJpYy5jIHRvIHNlbmQgYSBwYWNrZXQgLSByZXR1cm5zIHRydWUgaWYgcGFja2V0XG4gMjgxOlx0ICogd2FzIGFjY2VwdGVkLiAgSWYgd2UgcmV0dXJuIGZhbHNlLCB0aGVuIGl0JiMzOTtzIG91ciBqb2IgdG8gY2FsbFxuIDI4MjpcdCAqIHBwcF9vdXRwdXRfd2FrZXVwKGNoYW4pIHdoZW4gd2UmIzM5O3JlIGZlZWxpbmcgbW9yZSB1cCB0byBpdC5cbiAyODM6XHQgKiBOb3RlIHRoYXQgaW4gdGhlIEVOT01FTSBjYXNlIChhcyBvcHBvc2VkIHRvIHRoZSAhYXRtX21heV9zZW5kIGNhc2UpXG4gMjg0Olx0ICogd2Ugc2hvdWxkIHJlYWxseSBkcm9wIHRoZSBwYWNrZXQsIGJ1dCB0aGUgZ2VuZXJpYyBsYXllciBkb2VzbiYjMzk7dFxuIDI4NTpcdCAqIHN1cHBvcnQgdGhpcyB5ZXQuICBXZSBqdXN0IHJldHVybiAmIzM5O0RST1BfUEFDS0VUJiMzOTsgd2hpY2ggd2UgYWN0dWFsbHkgZGVmaW5lXG4gMjg2Olx0ICogYXMgc3VjY2VzcywganVzdCB0byBiZSBjbGVhciB3aGF0IHdlJiMzOTtyZSByZWFsbHkgZG9pbmcuXG4gMjg3Olx0ICovXG4gMjg4Olx0I2RlZmluZSBEUk9QX1BBQ0tFVCAxXG4gMjg5Olx0c3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDI5MDpcdHtcbiAyOTE6XHRcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGNoYW5fdG9fcHZjYyhjaGFuKTtcbiAyOTI6XHRcdHN0cnVjdCBhdG1fdmNjICp2Y2M7XG4gMjkzOlx0XHRpbnQgcmV0O1xuIDI5NDpcdFxuIDI5NTpcdFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMSkpIHtcbiAyOTY6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gMjk3Olx0XHRcdHJldHVybiBEUk9QX1BBQ0tFVDtcbiAyOTg6XHRcdH1cbiAyOTk6XHRcbiAzMDA6XHRcdEFUTV9TS0Ioc2tiKS1cdTAwM2V2Y2MgPSBwdmNjLVx1MDAzZWF0bXZjYztcbiAzMDE6XHRcdHByX2RlYnVnKFwmIzM0Oyhza2I9MHglcCwgdmNjPTB4JXApXFxuXCYjMzQ7LCBza2IsIHB2Y2MtXHUwMDNlYXRtdmNjKTtcbiAzMDI6XHRcbiAzMDM6XHRcdHZjYyA9IEFUTV9TS0Ioc2tiKS1cdTAwM2V2Y2M7XG4gMzA0Olx0XHRiaF9sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuIDMwNTpcdFx0aWYgKHNvY2tfb3duZWRfYnlfdXNlcihza19hdG0odmNjKSkpIHtcbiAzMDY6XHRcdFx0LypcbiAzMDc6XHRcdFx0ICogTmVlZHMgdG8gaGFwcGVuIChhbmQgYmUgZmx1c2hlZCwgaGVuY2UgdGVzdF9hbmRfKSBiZWZvcmUgd2UgdW5sb2NrXG4gMzA4Olx0XHRcdCAqIHRoZSBzb2NrZXQuIEl0IG5lZWRzIHRvIGJlIHNlZW4gYnkgdGhlIHRpbWUgb3VyIC1cdTAwM2VyZWxlYXNlX2NiIGdldHNcbiAzMDk6XHRcdFx0ICogY2FsbGVkLlxuIDMxMDpcdFx0XHQgKi9cbiAzMTE6XHRcdFx0dGVzdF9hbmRfc2V0X2JpdChCTE9DS0VELCBcdTAwMjZwdmNjLVx1MDAzZWJsb2NrZWQpO1xuIDMxMjpcdFx0XHRnb3RvIG5vc3BhY2U7XG4gMzEzOlx0XHR9XG4gMzE0Olx0XHRpZiAodGVzdF9iaXQoQVRNX1ZGX0NMT1NFLCBcdTAwMjZ2Y2MtXHUwMDNlZmxhZ3MpIHx8XG4gMzE1Olx0XHQgICAgIXRlc3RfYml0KEFUTV9WRl9SRUFEWSwgXHUwMDI2dmNjLVx1MDAzZWZsYWdzKSkge1xuIDMxNjpcdFx0XHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XG4gMzE3Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDMxODpcdFx0XHRyZXR1cm4gRFJPUF9QQUNLRVQ7XG4gMzE5Olx0XHR9XG4gMzIwOlx0XG4gMzIxOlx0XHRzd2l0Y2ggKHB2Y2MtXHUwMDNlZW5jYXBzKSB7XHRcdC8qIExMQyBlbmNhcHN1bGF0aW9uIG5lZWRlZCAqL1xuIDMyMjpcdFx0Y2FzZSBlX2xsYzpcbiAzMjM6XHRcdFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pKSB7XG4gMzI0Olx0XHRcdFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuIDMyNTpcdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDMyNjpcdFx0XHRcdHJldHVybiBEUk9QX1BBQ0tFVDtcbiAzMjc6XHRcdFx0fVxuIDMyODpcdFx0XHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbiAzMjk6XHRcdFx0XHRnb3RvIG5vc3BhY2U7XG4gMzMwOlx0XHRcdGJyZWFrO1xuIDMzMTpcdFx0Y2FzZSBlX3ZjOlxuIDMzMjpcdFx0XHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbiAzMzM6XHRcdFx0XHRnb3RvIG5vc3BhY2U7XG4gMzM0Olx0XHRcdGJyZWFrO1xuIDMzNTpcdFx0Y2FzZSBlX2F1dG9kZXRlY3Q6XG4gMzM2Olx0XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbiAzMzc6XHRcdFx0cHJfZGVidWcoXCYjMzQ7VHJ5aW5nIHRvIHNlbmQgd2l0aG91dCBzZXR0aW5nIGVuY2FwcyFcXG5cJiMzNDspO1xuIDMzODpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAzMzk6XHRcdFx0cmV0dXJuIDE7XG4gMzQwOlx0XHR9XG4gMzQxOlx0XG4gMzQyOlx0XHRpZiAoc2tiLVx1MDAzZWRhdGFbMF0gPT0gJiMzOTtcXDAmIzM5OyBcdTAwMjZcdTAwMjYgKHB2Y2MtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0NPTVBfUFJPVCkpXG4gMzQzOlx0XHRcdHNrYl9wdWxsKHNrYiwgMSk7XG4gMzQ0Olx0XG4gMzQ1Olx0XHRpZiAocHZjYy1cdTAwM2VlbmNhcHMgPT0gZV9sbGMpXG4gMzQ2Olx0XHRcdG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pO1xuIDM0NzpcdFxuIDM0ODpcdFx0YXRtX2FjY291bnRfdHgodmNjLCBza2IpO1xuIDM0OTpcdFx0cHJfZGVidWcoXCYjMzQ7YXRtX3NrYiglcCktXHUwMDNldmNjKCVwKS1cdTAwM2VkZXYoJXApXFxuXCYjMzQ7LFxuIDM1MDpcdFx0XHQgc2tiLCBBVE1fU0tCKHNrYiktXHUwMDNldmNjLCBBVE1fU0tCKHNrYiktXHUwMDNldmNjLVx1MDAzZWRldik7XG4gMzUxOlx0XHRyZXQgPSBBVE1fU0tCKHNrYiktXHUwMDNldmNjLVx1MDAzZXNlbmQoQVRNX1NLQihza2IpLVx1MDAzZXZjYywgc2tiKVxuIDM1MjpcdFx0ICAgID8gRFJPUF9QQUNLRVQgOiAxO1xuIDM1MzpcdFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuIDM1NDpcdFx0cmV0dXJuIHJldDtcbiAzNTU6XHRub3NwYWNlOlxuIDM1NjpcdFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuIDM1NzpcdFx0cmV0dXJuIDA7XG4gMzU4Olx0fVxuIDM1OTpcdFxuIDM2MDpcdC8qIFRoaXMgaGFuZGxlcyBpb2N0bHMgc2VudCB0byB0aGUgL2Rldi9wcHAgaW50ZXJmYWNlICovXG4gMzYxOlx0c3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXG4gMzYyOlx0XHR1bnNpZ25lZCBsb25nIGFyZylcbiAzNjM6XHR7XG4gMzY0Olx0XHRzd2l0Y2ggKGNtZCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjE3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBEZWVwZXIgaW50byBQUFBvQVRNIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudXRzIGFuZCBib2x0cyBvZiBob3cgdGhpcyBQUFBvQVRNIGltcGxlbWVudGF0aW9uIGFjdHVhbGx5ICp3b3JrcyouIEkmIzM5O3ZlIGdvdCBhIGRlY2VudCBncmFzcCBvbiB0aGUgaGlnaC1sZXZlbCBjb25jZXB0cywgYnV0IHRvIHJlYWxseSBnZXQgYSBoYW5kbGUgb24gdGhlIG51YW5jZXMsIGVzcGVjaWFsbHkgY29uY2VybmluZyBjaGFubmVsIGFuZCBzb2NrZXQgY3JlYXRpb24sIEkgbmVlZCB0byBkaWcgaW50byB0aGUgcmVzdCBvZiB0aGUgYHBwcG9hdG0uY2Agc291cmNlIGNvZGUuIEl0JiMzOTtzIHRoZSBvbmx5IHdheSB0byBzZWUgdGhlIHJlYWwgY29udHJvbCBmbG93IGFuZCB0aGUgc3VidGxlIGludGVyYWN0aW9ucyBpbnZvbHZlZC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBBVE0tc3BlY2lmaWMgc2lnbmFsaW5nIGFuZCB0aGUgdHJhbnNpdGlvbiBmcm9tIHRoZSBBVE0gbGF5ZXIgdG8gdGhlIFBQUCBsYXllci4gVGhlIHNvY2tldCBpbnRlcmFjdGlvbiBkZXRhaWxzIHNob3VsZCBiZSBxdWl0ZSByZXZlYWxpbmcsIGFzc3VtaW5nIGEgdHJhZGl0aW9uYWwgQlNEIHNvY2tldCBpbXBsZW1lbnRhdGlvbiwgYnV0IGV2ZW4gdGhhdCBpcyB3b3J0aCBjaGVja2luZy4gTGV04oCZcyBpZGVudGlmeSB0aGUgaW50ZXJlc3RpbmcgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9hdG0vcHBwb2F0bS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNjU6XHRcdGNhc2UgUFBQSU9DR0ZMQUdTOlxuIDM2NjpcdFx0XHRyZXR1cm4gcHV0X3VzZXIoY2hhbl90b19wdmNjKGNoYW4pLVx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpXG4gMzY3Olx0XHRcdCAgICA/IC1FRkFVTFQgOiAwO1xuIDM2ODpcdFx0Y2FzZSBQUFBJT0NTRkxBR1M6XG4gMzY5Olx0XHRcdHJldHVybiBnZXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopIGFyZylcbiAzNzA6XHRcdFx0ICAgID8gLUVGQVVMVCA6IDA7XG4gMzcxOlx0XHR9XG4gMzcyOlx0XHRyZXR1cm4gLUVOT1RUWTtcbiAzNzM6XHR9XG4gMzc0Olx0XG4gMzc1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2F0bV9vcHMgPSB7XG4gMzc2Olx0XHQuc3RhcnRfeG1pdCA9IHBwcG9hdG1fc2VuZCxcbiAzNzc6XHRcdC5pb2N0bCA9IHBwcG9hdG1fZGV2cHBwX2lvY3RsLFxuIDM3ODpcdH07XG4gMzc5Olx0XG4gMzgwOlx0c3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcbiAzODE6XHR7XG4gMzgyOlx0XHRzdHJ1Y3QgYXRtX2JhY2tlbmRfcHBwIGJlO1xuIDM4MzpcdFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjO1xuIDM4NDpcdFx0aW50IGVycjtcbiAzODU6XHRcbiAzODY6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZiZSwgYXJnLCBzaXplb2YgYmUpKVxuIDM4NzpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAzODg6XHRcdGlmIChiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfQVVUT0RFVEVDVCBcdTAwMjZcdTAwMjZcbiAzODk6XHRcdCAgICBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfVkMgXHUwMDI2XHUwMDI2IGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19MTEMpXG4gMzkwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDM5MTpcdFx0cHZjYyA9IGt6YWxsb2Nfb2JqKCpwdmNjKTtcbiAzOTI6XHRcdGlmIChwdmNjID09IE5VTEwpXG4gMzkzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDM5NDpcdFx0cHZjYy1cdTAwM2VhdG12Y2MgPSBhdG12Y2M7XG4gMzk1Olx0XG4gMzk2Olx0XHQvKiBNYXhpbXVtIGlzIHplcm8sIHNvIHRoYXQgd2UgY2FuIHVzZSBhdG9taWNfaW5jX25vdF96ZXJvKCkgKi9cbiAzOTc6XHRcdGF0b21pY19zZXQoXHUwMDI2cHZjYy1cdTAwM2VpbmZsaWdodCwgTk9ORV9JTkZMSUdIVCk7XG4gMzk4Olx0XHRwdmNjLVx1MDAzZW9sZF9wdXNoID0gYXRtdmNjLVx1MDAzZXB1c2g7XG4gMzk5Olx0XHRwdmNjLVx1MDAzZW9sZF9wb3AgPSBhdG12Y2MtXHUwMDNlcG9wO1xuIDQwMDpcdFx0cHZjYy1cdTAwM2VvbGRfb3duZXIgPSBhdG12Y2MtXHUwMDNlb3duZXI7XG4gNDAxOlx0XHRwdmNjLVx1MDAzZW9sZF9yZWxlYXNlX2NiID0gYXRtdmNjLVx1MDAzZXJlbGVhc2VfY2I7XG4gNDAyOlx0XHRwdmNjLVx1MDAzZWVuY2FwcyA9IChlbnVtIHBwcG9hdG1fZW5jYXBzKSBiZS5lbmNhcHM7XG4gNDAzOlx0XHRwdmNjLVx1MDAzZWNoYW4ucHJpdmF0ZSA9IHB2Y2M7XG4gNDA0Olx0XHRwdmNjLVx1MDAzZWNoYW4ub3BzID0gXHUwMDI2cHBwb2F0bV9vcHM7XG4gNDA1Olx0XHRwdmNjLVx1MDAzZWNoYW4ubXR1ID0gYXRtdmNjLVx1MDAzZXFvcy50eHRwLm1heF9zZHUgLSBQUFBfSERSTEVOIC1cbiA0MDY6XHRcdCAgICAoYmUuZW5jYXBzID09IGVfdmMgPyAwIDogTExDX0xFTik7XG4gNDA3Olx0XHR0YXNrbGV0X3NldHVwKFx1MDAyNnB2Y2MtXHUwMDNld2FrZXVwX3Rhc2tsZXQsIHBwcG9hdG1fd2FrZXVwX3NlbmRlcik7XG4gNDA4Olx0XHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcdTAwMjZwdmNjLVx1MDAzZWNoYW4pO1xuIDQwOTpcdFx0aWYgKGVyciAhPSAwKSB7XG4gNDEwOlx0XHRcdGtmcmVlKHB2Y2MpO1xuIDQxMTpcdFx0XHRyZXR1cm4gZXJyO1xuIDQxMjpcdFx0fVxuIDQxMzpcdFx0YXRtdmNjLVx1MDAzZXVzZXJfYmFjayA9IHB2Y2M7XG4gNDE0Olx0XHRhdG12Y2MtXHUwMDNlcHVzaCA9IHBwcG9hdG1fcHVzaDtcbiA0MTU6XHRcdGF0bXZjYy1cdTAwM2Vwb3AgPSBwcHBvYXRtX3BvcDtcbiA0MTY6XHRcdGF0bXZjYy1cdTAwM2VyZWxlYXNlX2NiID0gcHBwb2F0bV9yZWxlYXNlX2NiO1xuIDQxNzpcdFx0X19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTtcbiA0MTg6XHRcdGF0bXZjYy1cdTAwM2Vvd25lciA9IFRISVNfTU9EVUxFO1xuIDQxOTpcdFxuIDQyMDpcdFx0LyogcmUtcHJvY2VzcyBldmVyeXRoaW5nIHJlY2VpdmVkIGJldHdlZW4gY29ubmVjdGlvbiBzZXR1cCBhbmRcbiA0MjE6XHRcdCAgIGJhY2tlbmQgc2V0dXAgKi9cbiA0MjI6XHRcdHZjY19wcm9jZXNzX3JlY3ZfcXVldWUoYXRtdmNjKTtcbiA0MjM6XHRcdHJldHVybiAwO1xuIDQyNDpcdH1cbiA0MjU6XHRcbiA0MjY6XHQvKlxuIDQyNzpcdCAqIFRoaXMgaGFuZGxlcyBpb2N0bHMgYWN0dWFsbHkgcGVyZm9ybWVkIG9uIG91ciB2Y2MgLSB3ZSBtdXN0IHJldHVyblxuIDQyODpcdCAqIC1FTk9JT0NUTENNRCBmb3IgYW55IHVucmVjb2duaXplZCBpb2N0bFxuIDQyOTpcdCAqL1xuIDQzMDpcdHN0YXRpYyBpbnQgcHBwb2F0bV9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxuIDQzMTpcdFx0dW5zaWduZWQgbG9uZyBhcmcpXG4gNDMyOlx0e1xuIDQzMzpcdFx0c3RydWN0IGF0bV92Y2MgKmF0bXZjYyA9IEFUTV9TRChzb2NrKTtcbiA0MzQ6XHRcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xuIDQzNTpcdFxuIDQzNjpcdFx0aWYgKGNtZCAhPSBBVE1fU0VUQkFDS0VORCBcdTAwMjZcdTAwMjYgYXRtdmNjLVx1MDAzZXB1c2ggIT0gcHBwb2F0bV9wdXNoKVxuIDQzNzpcdFx0XHRyZXR1cm4gLUVOT0lPQ1RMQ01EO1xuIDQzODpcdFx0c3dpdGNoIChjbWQpIHtcbiA0Mzk6XHRcdGNhc2UgQVRNX1NFVEJBQ0tFTkQ6IHtcbiA0NDA6XHRcdFx0YXRtX2JhY2tlbmRfdCBiO1xuIDQ0MTpcdFx0XHRpZiAoZ2V0X3VzZXIoYiwgKGF0bV9iYWNrZW5kX3QgX191c2VyICopIGFyZ3ApKVxuIDQ0MjpcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDQ0MzpcdFx0XHRpZiAoYiAhPSBBVE1fQkFDS0VORF9QUFApXG4gNDQ0Olx0XHRcdFx0cmV0dXJuIC1FTk9JT0NUTENNRDtcbiA0NDU6XHRcdFx0aWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKVxuIDQ0NjpcdFx0XHRcdHJldHVybiAtRVBFUk07XG4gNDQ3Olx0XHRcdGlmIChzb2NrLVx1MDAzZXN0YXRlICE9IFNTX0NPTk5FQ1RFRClcbiA0NDg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0NDk6XHRcdFx0cmV0dXJuIHBwcG9hdG1fYXNzaWduX3ZjYyhhdG12Y2MsIGFyZ3ApO1xuIDQ1MDpcdFx0XHR9XG4gNDUxOlx0XHRjYXNlIFBQUElPQ0dDSEFOOlxuIDQ1MjpcdFx0XHRyZXR1cm4gcHV0X3VzZXIocHBwX2NoYW5uZWxfaW5kZXgoXHUwMDI2YXRtdmNjX3RvX3B2Y2MoYXRtdmNjKS1cdTAwM2VcbiA0NTM6XHRcdFx0ICAgIGNoYW4pLCAoaW50IF9fdXNlciAqKSBhcmdwKSA/IC1FRkFVTFQgOiAwO1xuIDQ1NDpcdFx0Y2FzZSBQUFBJT0NHVU5JVDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMjAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBwcHBvYXRtX3NlbmRgIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIGZvY3VzaW5nIG9uIGBwcHBvYXRtX3NlbmRgLiBJIGtub3cgaXQmIzM5O3MgdGhlIGAuc3RhcnRfeG1pdGAgY2FsbGJhY2sgd2l0aGluIHRoZSBgcHBwb2F0bV9vcHNgIHN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IGZvciB0aGUgUFBQIGNoYW5uZWwuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB3aGVuIFBQUCBuZWVkcyB0byB0cmFuc21pdCBkYXRhLCBpdCBjYWxscyBgY2hhbi0mZ3Q7b3BzLSZndDtzdGFydF94bWl0KGNoYW4sIHNrYilgLiBUaGUgY29yZSBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgYW4gQVRNIHNvY2tldCBjYW4gZXZlbiBiZSBzdWNjZXNzZnVsbHkgY3JlYXRlZC4gV2UgYXJlIGRlYWxpbmcgd2l0aCBgc29ja2V0KEFGX0FUTVNWQywgLi4uKWAgb3IgYHNvY2tldChBRl9BVE1QVkMsIC4uLilgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBsZXZlcmFnZSBzeXprYWxsZXIuIEkgZmlndXJlZCBpdHMgc3l6bGFuZyBkZXNjcmlwdGlvbnMgb3IgZXZlbiB0aGUga2VybmVsJiMzOTtzIHNvdXJjZSBtaWdodCBjb250YWluIHJlbGV2YW50IGluZm9ybWF0aW9uIGFib3V0IEFUTSBhbmQgUFBQIG92ZXIgQVRNLiBJIHdhcyBob3BpbmcgZm9yIHNvbWV0aGluZyB1c2VmdWwgbGlrZSBgcHBwb2F0bWAgb3IgYEFUTV9TRVRCQUNLRU5EYCB0aGF0IG1pZ2h0IHNoZWQgbGlnaHQgb24gaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZC4gVGhlbiBJIHJlbWVtYmVyZWQgSSBjYW4mIzM5O3QgZGlyZWN0bHkgdXNlIHRvb2xzIG9uIHRoZSBzeXpsYW5nLCBhbmQgY2FuJiMzOTt0IHVzZSBgZ3JlcHBlcmAgb24gdGhlIHN5emxhbmcuIFRoaXMgbGVkIG1lIHRvIGEgcXVpY2sgY2hlY2sgb2YgdGhlIGF2YWlsYWJsZSB0b29scy4gSSBuZWVkZWQgdG8gY29uZmlybSB0aGF0IHRoZSB0b29scyBmb3IgdGhhdCBwdXJwb3NlIHdlcmUgZGVjbGFyZWQsIGJ1dCB0aGV5IHdlcmVuJiMzOTt0LiBXZSYjMzk7cmUgbWlzc2luZyBgcmVhZC1zeXotc3BlY2AgYW5kIGBzeXotZ3JlcHBlcmAuCgpHaXZlbiB0aGF0IEkgZG9uJiMzOTt0IGhhdmUgdGhvc2UgdG9vbHMgYXZhaWxhYmxlLCBJIG5lZWQgdG8gYWRqdXN0IG15IHN0cmF0ZWd5LiBJIG5lZWQgdG8gcGl2b3QgYW5kIGV4cGxvcmUgYSBkaWZmZXJlbnQgbGluZSBvZiBpbnF1aXJ5LCBvbmUgdGhhdCBkb2VzbiYjMzk7dCBkZXBlbmQgb24gc3l6a2FsbGVyIGRpcmVjdGx5LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBhc3Nlc3MgdGhlIHJlYWNoYWJpbGl0eSBvZiBgcHBwb2F0bV9zZW5kYCBpbiBhIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIENhbiBJIGNyZWF0ZSBhbiBBVE0gc29ja2V0IGluIHRoaXMgZW52aXJvbm1lbnQ/IEkgbmVlZCB0byBmb2N1cyBvbiBmaW5kaW5nIG9jY3VycmVuY2VzIG9mIGBBRl9BVE1QVkNgIG9yIGBBRl9BVE1TVkNgIHdpdGhpbiB0aGUgYG5ldC9hdG0vYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBRl9BVE0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYXRtL2NvbW1vbi5jPTc1Nj1pbnQgdmNjX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvYXRtL2NvbW1vbi5jLTc4NS1cdFx0bWVtc2V0KFx1MDAyNnB2YywgMCwgc2l6ZW9mKHB2YykpO1xubmV0L2F0bS9jb21tb24uYzo3ODY6XHRcdHB2Yy5zYXBfZmFtaWx5ID0gQUZfQVRNUFZDO1xubmV0L2F0bS9jb21tb24uYy03ODctXHRcdHB2Yy5zYXBfYWRkci5pdGYgPSB2Y2MtXHUwMDNlZGV2LVx1MDAzZW51bWJlcjtcbi0tXG5uZXQvYXRtL3Byb2MuYz0xNTg9c3RhdGljIHZvaWQgdmNjX2luZm8oc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBhdG1fdmNjICp2Y2MpXG4tLVxubmV0L2F0bS9wcm9jLmMtMTY4LVx0c3dpdGNoIChzay1cdTAwM2Vza19mYW1pbHkpIHtcbm5ldC9hdG0vcHJvYy5jOjE2OTpcdGNhc2UgQUZfQVRNUFZDOlxubmV0L2F0bS9wcm9jLmMtMTcwLVx0XHRzZXFfcHJpbnRmKHNlcSwgXCYjMzQ7UFZDXCYjMzQ7KTtcbi0tXG5uZXQvYXRtL3B2Yy5jPTI3PXN0YXRpYyBpbnQgcHZjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNvY2thZGRyLFxuLS1cbm5ldC9hdG0vcHZjLmMtMzctXHRhZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgKilzb2NrYWRkcjtcbm5ldC9hdG0vcHZjLmM6Mzg6XHRpZiAoYWRkci1cdTAwM2VzYXBfZmFtaWx5ICE9IEFGX0FUTVBWQylcbm5ldC9hdG0vcHZjLmMtMzktXHRcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xuLS1cbm5ldC9hdG0vcHZjLmM9ODk9c3RhdGljIGludCBwdmNfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNvY2thZGRyLFxuLS1cbm5ldC9hdG0vcHZjLmMtOTgtXHRtZW1zZXQoYWRkciwgMCwgc2l6ZW9mKCphZGRyKSk7XG5uZXQvYXRtL3B2Yy5jOjk5Olx0YWRkci1cdTAwM2VzYXBfZmFtaWx5ID0gQUZfQVRNUFZDO1xubmV0L2F0bS9wdmMuYy0xMDAtXHRhZGRyLVx1MDAzZXNhcF9hZGRyLml0ZiA9IHZjYy1cdTAwM2VkZXYtXHUwMDNlbnVtYmVyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI3MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipBVE0gUFZDIENvbm5lY3Rpdml0eTogQSBUaGVvcmV0aWNhbCBEZWVwIERpdmUqKgoKSG1tLCBpbnRlcmVzdGluZyBxdWVzdGlvbi4gQ2FuIHdlIGVzdGFibGlzaCBhbiBBVE0gUFZDIGNvbm5lY3Rpb24gcHVyZWx5IGF0IHRoZSBzb2Z0d2FyZSBsZXZlbCwgd2l0aG91dCBhIGRpcmVjdCBwaHlzaWNhbCBoYXJkd2FyZSBoYW5kc2hha2U/IFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGlzc3VlLCBpc24mIzM5O3QgaXQ/IE15IGludHVpdGlvbiBsZWFucyB0b3dhcmRzIGEgJiMzNDtubywmIzM0OyBidXQgSSBuZWVkIHRvIGJlIHN1cmUgYW5kIEkga25vdyB0aGUgY29kZSBpcyB3aGVyZSB0byBjaGVjay4KCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhlIExpbnV4IEFUTSBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgUFZDIGNvbm5lY3Rpb24gaGFuZGxpbmcuIFJpZ2h0LCB3aGVyZSB3b3VsZCB0aGUgcmVsZXZhbnQgbG9naWMgcmVzaWRlPyBUaGUgYG5ldC9hdG1gIGRpcmVjdG9yeS4uLiBhbmQgc3BlY2lmaWNhbGx5LCBmb2N1c2luZyBvbiB0aGUgUFZDIGFzcGVjdHMsIGBwdmMuY2Agc2VlbXMgbGlrZSB0aGUgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGBwdmNfY29ubmVjdGAgZnVuY3Rpb24uIEl0IHNob3VsZCBkZXRhaWwgZXhhY3RseSBob3cgdGhvc2UgUFZDIGNvbm5lY3Rpb25zIGFyZSBlc3RhYmxpc2hlZC4gVGhhdCBmdW5jdGlvbiB3aWxsIHVuZG91YnRlZGx5IGdpdmUgbWUgdGhlIGRlZmluaXRpdmUgYW5zd2VyOyB0aGUgaW50ZXJhY3Rpb24gaXQgaW1wbGVtZW50cyBtYXkgYmUgZW50aXJlbHkgYSBzb2Z0d2FyZSBhYnN0cmFjdGlvbiwgb3IgbWF5IGhhdmUgYSBkZXBlbmRlbmN5IG9uIGEgcGh5c2ljYWwgbGV2ZWwgcHJvdG9jb2wgbmVnb3RpYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2F0bS9wdmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0LyogbmV0L2F0bS9wdmMuYyAtIEFUTSBQVkMgc29ja2V0cyAqL1xuICAgMzpcdFxuICAgNDpcdC8qIFdyaXR0ZW4gMTk5NS0yMDAwIGJ5IFdlcm5lciBBbG1lc2JlcmdlciwgRVBGTCBMUkMvSUNBICovXG4gICA1Olx0XG4gICA2Olx0XG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0LmhcdTAwM2VcdFx0Lyogc3RydWN0IHNvY2tldCwgc3RydWN0IHByb3RvX29wcyAqL1xuICAgODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0bS5oXHUwMDNlXHRcdC8qIEFUTSBzdHVmZiAqL1xuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0bWRldi5oXHUwMDNlXHQvKiBBVE0gZGV2aWNlcyAqL1xuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcdC8qIGVycm9yIGNvZGVzICovXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcdC8qIHByaW50ayAqL1xuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcdFx0LyogZm9yIHNvY2tfbm9fKiAqL1xuICAxNzpcdFxuICAxODpcdCNpbmNsdWRlIFwmIzM0O3Jlc291cmNlcy5oXCYjMzQ7XHRcdC8qIGRldnMgYW5kIHZjY3MgKi9cbiAgMTk6XHQjaW5jbHVkZSBcJiMzNDtjb21tb24uaFwmIzM0O1x0XHQvKiBjb21tb24gZm9yIFBWQ3MgYW5kIFNWQ3MgKi9cbiAgMjA6XHRcbiAgMjE6XHRcbiAgMjI6XHRzdGF0aWMgaW50IHB2Y19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxuICAyMzpcdHtcbiAgMjQ6XHRcdHJldHVybiAwO1xuICAyNTpcdH1cbiAgMjY6XHRcbiAgMjc6XHRzdGF0aWMgaW50IHB2Y19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpzb2NrYWRkcixcbiAgMjg6XHRcdFx0ICAgIGludCBzb2NrYWRkcl9sZW4pXG4gIDI5Olx0e1xuICAzMDpcdFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cdTAwM2VzaztcbiAgMzE6XHRcdHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgKmFkZHI7XG4gIDMyOlx0XHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xuICAzMzpcdFx0aW50IGVycm9yO1xuICAzNDpcdFxuICAzNTpcdFx0aWYgKHNvY2thZGRyX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXB2YykpXG4gIDM2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuICAzNzpcdFx0YWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjICopc29ja2FkZHI7XG4gIDM4Olx0XHRpZiAoYWRkci1cdTAwM2VzYXBfZmFtaWx5ICE9IEFGX0FUTVBWQylcbiAgMzk6XHRcdFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XG4gIDQwOlx0XHRsb2NrX3NvY2soc2spO1xuICA0MTpcdFx0dmNjID0gQVRNX1NEKHNvY2spO1xuICA0MjpcdFx0aWYgKCF0ZXN0X2JpdChBVE1fVkZfSEFTUU9TLCBcdTAwMjZ2Y2MtXHUwMDNlZmxhZ3MpKSB7XG4gIDQzOlx0XHRcdGVycm9yID0gLUVCQURGRDtcbiAgNDQ6XHRcdFx0Z290byBvdXQ7XG4gIDQ1Olx0XHR9XG4gIDQ2Olx0XHRpZiAodGVzdF9iaXQoQVRNX1ZGX1BBUlRJQUwsIFx1MDAyNnZjYy1cdTAwM2VmbGFncykpIHtcbiAgNDc6XHRcdFx0aWYgKHZjYy1cdTAwM2V2cGkgIT0gQVRNX1ZQSV9VTlNQRUMpXG4gIDQ4Olx0XHRcdFx0YWRkci1cdTAwM2VzYXBfYWRkci52cGkgPSB2Y2MtXHUwMDNldnBpO1xuICA0OTpcdFx0XHRpZiAodmNjLVx1MDAzZXZjaSAhPSBBVE1fVkNJX1VOU1BFQylcbiAgNTA6XHRcdFx0XHRhZGRyLVx1MDAzZXNhcF9hZGRyLnZjaSA9IHZjYy1cdTAwM2V2Y2k7XG4gIDUxOlx0XHR9XG4gIDUyOlx0XHRlcnJvciA9IHZjY19jb25uZWN0KHNvY2ssIGFkZHItXHUwMDNlc2FwX2FkZHIuaXRmLCBhZGRyLVx1MDAzZXNhcF9hZGRyLnZwaSxcbiAgNTM6XHRcdFx0XHQgICAgYWRkci1cdTAwM2VzYXBfYWRkci52Y2kpO1xuICA1NDpcdG91dDpcbiAgNTU6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4gIDU2Olx0XHRyZXR1cm4gZXJyb3I7XG4gIDU3Olx0fVxuICA1ODpcdFxuICA1OTpcdHN0YXRpYyBpbnQgcHZjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNvY2thZGRyLFxuICA2MDpcdFx0XHQgICAgICAgaW50IHNvY2thZGRyX2xlbiwgaW50IGZsYWdzKVxuICA2MTpcdHtcbiAgNjI6XHRcdHJldHVybiBwdmNfYmluZChzb2NrLCBzb2NrYWRkciwgc29ja2FkZHJfbGVuKTtcbiAgNjM6XHR9XG4gIDY0Olx0XG4gIDY1Olx0c3RhdGljIGludCBwdmNfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuICA2NjpcdFx0XHRcdCAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbiAgNjc6XHR7XG4gIDY4Olx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuICA2OTpcdFx0aW50IGVycm9yO1xuICA3MDpcdFxuICA3MTpcdFx0bG9ja19zb2NrKHNrKTtcbiAgNzI6XHRcdGVycm9yID0gdmNjX3NldHNvY2tvcHQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbiAgNzM6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4gIDc0Olx0XHRyZXR1cm4gZXJyb3I7XG4gIDc1Olx0fVxuICA3NjpcdFxuICA3NzpcdHN0YXRpYyBpbnQgcHZjX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiAgNzg6XHRcdFx0XHQgIHNvY2tvcHRfdCAqb3B0KVxuICA3OTpcdHtcbiAgODA6XHRcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXHUwMDNlc2s7XG4gIDgxOlx0XHRpbnQgZXJyb3I7XG4gIDgyOlx0XG4gIDgzOlx0XHRsb2NrX3NvY2soc2spO1xuICA4NDpcdFx0ZXJyb3IgPSB2Y2NfZ2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0KTtcbiAgODU6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODAyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqVGhlIE5hdHVyZSBvZiBgYXRtX2RldmAqKgoKUmlnaHQsIGEgbW9tZW50IG9mIGNvbmNlcHR1YWwgcmVjYWxpYnJhdGlvbi4gSSYjMzk7bSBoaXR0aW5nIGEgbWVudGFsIHNuYWcgaGVyZS4gVGhlIHBocmFzZSAmIzM0O0FUTSBkZXZpY2UmIzM0OyBpcyB0cmlnZ2VyaW5nIGEgYml0IG9mIGEgY2FzY2FkZS4gVGhlIGltbWVkaWF0ZSwgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O2NhbiB0aGlzIGVudGlyZSB0aGluZyAqcmVhbGx5KiBiZSBjcmVhdGVkIHB1cmVseSBpbiBzb2Z0d2FyZT8mIzM0OyBUaGUgQVRNIGRldmljZSBpcywgaW4gY29tbW9uIHBhcmxhbmNlLCBhIHBoeXNpY2FsIGVudGl0eSwgYSBjb21wbGV4IGVsZWN0cm9tZWNoYW5pY2FsIHN5c3RlbS4KClRoZW4gdGhlIHF1ZXN0aW9ucyBzdGFydDogJiMzNDtXaGF0IGV4YWN0bHkgYXJlIHdlICpyZWFsbHkqIHRhbGtpbmcgYWJvdXQgd2hlbiB3ZSBzYXkgJiMzOTtBVE0gZGV2aWNlJiMzOTsgaW4gdGhpcyBjb250ZXh0PyYjMzQ7IFRoZSB0ZXJtLCB3aGVuIHVzZWQgaW4gY2VydGFpbiBmaWVsZHMsIG1heSByZWZlciB0byBhIHB1cmVseSBzb2Z0d2FyZS1iYXNlZCBzaW11bGF0aW9uIG9yIGFic3RyYWN0aW9uIG9mIHRoZSBBVE0gaXRzZWxmLiBUaGlzIHN1Z2dlc3RzIHRvIG1lIHRoYXQgdGhlIG5leHQgbW92ZSBzaG91bGQgaW52b2x2ZSBhIHZlcnkgZGlyZWN0IGluc3BlY3Rpb24uIExldCYjMzk7cyBzZWUgd2hhdCBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgYSBgYXRtX2RldmAuIFRoZSBjb2RlIGl0c2VsZiBzaG91bGQgY2xhcmlmeSBpZiB0aGlzIHZhcmlhYmxlIHJlcHJlc2VudHMgYSBzb2Z0d2FyZSBjb21wb25lbnQsIGEgaGFyZHdhcmUgb25lLCBvciBhIGh5YnJpZC4gSXMgaXQgYSBkZXZpY2UgZHJpdmVyPyBBIGNvbmZpZ3VyYXRpb24gb2JqZWN0PyBLbm93aW5nIGl0cyBvcmlnaW4gd2lsbCBjdXQgdGhyb3VnaCBhIGxvdCBvZiBhbWJpZ3VpdHkgYW5kIHdpbGwgYWxsb3cgbWUgdG8gYXNzZXNzIHRoZSBzY29wZSBvZiB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRtX2Rldl9yZWdpc3RlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2F0bS9zb2xvcy1wY2kuYz0xMzQ4PXN0YXRpYyBpbnQgYXRtX2luaXQoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQsIHN0cnVjdCBkZXZpY2UgKnBhcmVudClcbi0tXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYy0xMzU4LVxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmM6MTM1OTpcdFx0Y2FyZC1cdTAwM2VhdG1kZXZbaV0gPSBhdG1fZGV2X3JlZ2lzdGVyKFwmIzM0O3NvbG9zLXBjaVwmIzM0OywgcGFyZW50LCBcdTAwMjZmcGdhX29wcywgLTEsIE5VTEwpO1xuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTM2MC1cdFx0aWYgKCFjYXJkLVx1MDAzZWF0bWRldltpXSkge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYz05MDE9c3RhdGljIGludCB1c2JhdG1fYXRtX2luaXQoc3RydWN0IHVzYmF0bV9kYXRhICppbnN0YW5jZSlcbi0tXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMtOTA5LVx0ICogYWJvcnQgaWYgYXRtX2Rldi1cdTAwM2VkZXZfZGF0YSBpcyBOVUxMLiAqL1xuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jOjkxMDpcdGF0bV9kZXYgPSBhdG1fZGV2X3JlZ2lzdGVyKGluc3RhbmNlLVx1MDAzZWRyaXZlcl9uYW1lLFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTkxMS1cdFx0XHRcdCAgIFx1MDAyNmluc3RhbmNlLVx1MDAzZXVzYl9pbnRmLVx1MDAzZWRldiwgXHUwMDI2dXNiYXRtX2F0bV9kZXZvcHMsXG4tLVxuaW5jbHVkZS9saW51eC9hdG1kZXYuaD0xNTI9ZXh0ZXJuIHJ3bG9ja190IHZjY19za2xpc3RfbG9jaztcbi0tXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTE1NS1cbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg6MTU2OnN0cnVjdCBhdG1fZGV2ICphdG1fZGV2X3JlZ2lzdGVyKGNvbnN0IGNoYXIgKnR5cGUsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMTU3LVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBhdG1kZXZfb3BzICpvcHMsXG4tLVxubmV0L2F0bS9yZXNvdXJjZXMuYz02OT1FWFBPUlRfU1lNQk9MKGF0bV9kZXZfbG9va3VwKTtcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzAtXG5uZXQvYXRtL3Jlc291cmNlcy5jOjcxOnN0cnVjdCBhdG1fZGV2ICphdG1fZGV2X3JlZ2lzdGVyKGNvbnN0IGNoYXIgKnR5cGUsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzItXHRcdFx0XHQgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcywgaW50IG51bWJlcixcbi0tXG5uZXQvYXRtL3Jlc291cmNlcy5jLTEzMS19XG5uZXQvYXRtL3Jlc291cmNlcy5jOjEzMjpFWFBPUlRfU1lNQk9MKGF0bV9kZXZfcmVnaXN0ZXIpO1xubmV0L2F0bS9yZXNvdXJjZXMuYy0xMzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjQxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQVRNIERldmljZSBEaXNjb3ZlcnkqKgoKT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gV2hhdCBvdGhlciBtZXRob2RzIGFyZSB1c2VkIHRvIHJlZ2lzdGVyIEFUTSBkZXZpY2VzLCBiZXNpZGVzIHRoZSBvYnZpb3VzIG9uZXM/IERvZXMgdGhlIHN0YW5kYXJkIExpbnV4IGtlcm5lbCBwcm92aWRlIGFueSBkdW1teSwgbG9vcGJhY2ssIHZpcnR1YWwsIG9yIGV2ZW4gVVNCIEFUTSBkZXZpY2VzPyBQZXJoYXBzIGEgYHVzYmF0bWAgbW9kdWxlPyBDb3VsZCBTeXprYWxsZXIgZXZlbiBlbXVsYXRlIGEgVVNCIEFUTSBkZXZpY2UsIG9yIG1heWJlIGV2ZW4gYSByYXcgQVRNIGRldmljZT8gSXQmIzM5O3MgYSBiaXQgb2YgYSBzdHJldGNoLCBidXQgd29ydGggaW52ZXN0aWdhdGluZy4gVGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBpbnZlc3RpZ2F0ZSB0aGlzIHdpbGwgYmUgdG8gdXNlIGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciBvdGhlciBpbnN0YW5jZXMgb2YgYGF0bV9kZXZfcmVnaXN0ZXJgLiBUaGF0IHNob3VsZCBoZWxwIG1lIHF1aWNrbHkgaWRlbnRpZnkgdGhlIG90aGVyIHBvdGVudGlhbCBkZXZpY2UgcmVnaXN0cmF0aW9uIG1ldGhvZHMuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRtX2Rldl9yZWdpc3RlclxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2F0bS9zb2xvcy1wY2kuYz0xMzQ4PXN0YXRpYyBpbnQgYXRtX2luaXQoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQsIHN0cnVjdCBkZXZpY2UgKnBhcmVudClcbi0tXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYy0xMzU4LVxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmM6MTM1OTpcdFx0Y2FyZC1cdTAwM2VhdG1kZXZbaV0gPSBhdG1fZGV2X3JlZ2lzdGVyKFwmIzM0O3NvbG9zLXBjaVwmIzM0OywgcGFyZW50LCBcdTAwMjZmcGdhX29wcywgLTEsIE5VTEwpO1xuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTM2MC1cdFx0aWYgKCFjYXJkLVx1MDAzZWF0bWRldltpXSkge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYz05MDE9c3RhdGljIGludCB1c2JhdG1fYXRtX2luaXQoc3RydWN0IHVzYmF0bV9kYXRhICppbnN0YW5jZSlcbi0tXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMtOTA5LVx0ICogYWJvcnQgaWYgYXRtX2Rldi1cdTAwM2VkZXZfZGF0YSBpcyBOVUxMLiAqL1xuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jOjkxMDpcdGF0bV9kZXYgPSBhdG1fZGV2X3JlZ2lzdGVyKGluc3RhbmNlLVx1MDAzZWRyaXZlcl9uYW1lLFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTkxMS1cdFx0XHRcdCAgIFx1MDAyNmluc3RhbmNlLVx1MDAzZXVzYl9pbnRmLVx1MDAzZWRldiwgXHUwMDI2dXNiYXRtX2F0bV9kZXZvcHMsXG4tLVxuaW5jbHVkZS9saW51eC9hdG1kZXYuaD0xNTI9ZXh0ZXJuIHJ3bG9ja190IHZjY19za2xpc3RfbG9jaztcbi0tXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTE1NS1cbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg6MTU2OnN0cnVjdCBhdG1fZGV2ICphdG1fZGV2X3JlZ2lzdGVyKGNvbnN0IGNoYXIgKnR5cGUsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMTU3LVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBhdG1kZXZfb3BzICpvcHMsXG4tLVxubmV0L2F0bS9yZXNvdXJjZXMuYz02OT1FWFBPUlRfU1lNQk9MKGF0bV9kZXZfbG9va3VwKTtcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzAtXG5uZXQvYXRtL3Jlc291cmNlcy5jOjcxOnN0cnVjdCBhdG1fZGV2ICphdG1fZGV2X3JlZ2lzdGVyKGNvbnN0IGNoYXIgKnR5cGUsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzItXHRcdFx0XHQgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcywgaW50IG51bWJlcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNTIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBVE0gRHJpdmVyIERlZXAgRGl2ZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGhlcmUsIEkgbmVlZCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgdGhlIEFUTSBkcml2ZXIgbGFuZHNjYXBlIHdpdGhpbiB0aGlzIHByb2plY3QuIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBvYnZpb3VzIGxvY2F0aW9ucywgbGlrZSBgZHJpdmVycy9hdG0vYCBhbmQgYG5ldC9hdG0vYC4gQXJlIHRoZXJlIGFueSBvdGhlciBwb3RlbnRpYWwgYXJlYXMgd2hlcmUgdGhleSYjMzk7dmUgc3Rhc2hlZCBBVE0gZGV2aWNlIGRyaXZlcnM/IEkgY2FuJiMzOTt0IGJlIG92ZXJsb29raW5nIHNvbWV0aGluZyBvYnZpb3VzLgoKUmlnaHQsIGxldCYjMzk7cyBhc3N1bWUgdGhleSBtaWdodCBiZSB1c2luZyBzb21lIHNvcnQgb2YgY29tbW9uIHN0cnVjdHVyZS4gVGhhdCBtZWFucyBJIHNob3VsZCBzZWFyY2ggZm9yIGltcGxlbWVudGF0aW9ucyBvZiBgYXRtZGV2X29wc2AuIFNlYXJjaGluZyBmb3IgdGhhdCBzaG91bGQgaWRlbnRpZnkgYWxsIHRoZSBjYW5kaWRhdGUgZHJpdmVycywgb3IgYXQgbGVhc3QgaGVscCBuYXJyb3cgZG93biB0aGUgbGlzdC4gTGV0JiMzOTtzIHNlZSB3aGF0IHR1cm5zIHVwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGF0bWRldl9vcHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9hdG0vc29sb3MtcGNpLmM9MTEzNz1zdGF0aWMgaW50IHBzZW5kKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTE3Ny1cbmRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jOjExNzg6c3RhdGljIGNvbnN0IHN0cnVjdCBhdG1kZXZfb3BzIGZwZ2Ffb3BzID0ge1xuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTE3OS1cdC5vcGVuID1cdFx0cG9wZW4sXG4tLVxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jPTE2MD1zdGF0aWMgaW50IHVzYmF0bV9hdG1fcHJvY19yZWFkKHN0cnVjdCBhdG1fZGV2ICphdG1fZGV2LCBsb2ZmX3QgKnBvcywgY2hhciAqcGFnZSk7XG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMtMTYxLVxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jOjE2MjpzdGF0aWMgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgdXNiYXRtX2F0bV9kZXZvcHMgPSB7XG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMtMTYzLVx0LmRldl9jbG9zZVx0PSB1c2JhdG1fYXRtX2Rldl9jbG9zZSxcbi0tXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oPTEwOD1zdHJ1Y3QgYXRtX2RldiB7XG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oOjEwOTpcdGNvbnN0IHN0cnVjdCBhdG1kZXZfb3BzICpvcHM7XHQvKiBkZXZpY2Ugb3BlcmF0aW9uczsgTlVMTCBpZiB1bnVzZWQgKi9cbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMTEwLVx0Y29uc3QgY2hhclx0KnR5cGU7XHRcdC8qIGRldmljZSB0eXBlIG5hbWUgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTEyOC1cbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg6MTI5OnN0cnVjdCBhdG1kZXZfb3BzIHsgLyogb25seSBzZW5kIGlzIHJlcXVpcmVkICovXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTEzMC1cdHZvaWQgKCpkZXZfY2xvc2UpKHN0cnVjdCBhdG1fZGV2ICpkZXYpO1xuLS1cbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg9MTU2PXN0cnVjdCBhdG1fZGV2ICphdG1fZGV2X3JlZ2lzdGVyKGNvbnN0IGNoYXIgKnR5cGUsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg6MTU3Olx0XHRcdFx0IGNvbnN0IHN0cnVjdCBhdG1kZXZfb3BzICpvcHMsXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTE1OC1cdFx0XHRcdCBpbnQgbnVtYmVyLCAvKiAtMSA9PSBwaWNrIGZpcnN0IGF2YWlsYWJsZSAqL1xuLS1cbm5ldC9hdG0vcmVzb3VyY2VzLmM9NzE9c3RydWN0IGF0bV9kZXYgKmF0bV9kZXZfcmVnaXN0ZXIoY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IGRldmljZSAqcGFyZW50LFxubmV0L2F0bS9yZXNvdXJjZXMuYzo3MjpcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYXRtZGV2X29wcyAqb3BzLCBpbnQgbnVtYmVyLFxubmV0L2F0bS9yZXNvdXJjZXMuYy03My1cdFx0XHRcdCB1bnNpZ25lZCBsb25nICpmbGFncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxNDEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgQVRNIERyaXZlciBNYWtlZmlsZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBXZSB3ZXJlIGZvY3VzaW5nIG9uIFgsIFksIGFuZCBaLCBidXQgSSYjMzk7dmUgZ290IGEgbmFnZ2luZyBmZWVsaW5nIHdlJiMzOTtyZSBtaXNzaW5nIHNvbWV0aGluZyBjcnVjaWFsIGluIHRoaXMgYXJlYS4gU3BlY2lmaWNhbGx5LCB3aGF0IGFib3V0IHRoZSBBVE0gZHJpdmVyPyBXZSYjMzk7dmUgZ290IHRvIGVuc3VyZSB0aGF0IGl0IGFsaWducyB3aXRoIGV2ZXJ5dGhpbmcgZWxzZS4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBkaXZlIGludG8gdGhlIGBkcml2ZXJzL2F0bS9gIGRpcmVjdG9yeS4gUmlnaHQsIGxldCYjMzk7cyBvcGVuIHRoYXQgYE1ha2VmaWxlYCBhbmQgcXVpY2tseSBjb25maXJtIHRoYXQgaXQmIzM5O3MgcHJvcGVybHkgYnVpbHQgYW5kIGludGVncmF0ZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkcml2ZXIgaXNuJiMzOTt0IGdvaW5nIHRvIGNhdXNlIGlzc3VlcyBkb3duIHRoZSBsaW5lLCBzbyBJJiMzOTtsbCBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBmbGFncyBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9hdG0vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0b2JqLSQoQ09ORklHX0FUTV9TT0xPUylcdFx0JiM0Mzs9IHNvbG9zLXBjaS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Mzg5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVVNCIEZ1enppbmcgYW5kIEFUTSBTb2NrZXQgUXVpcmtzKioKCk9rYXksIHNvIHN5emthbGxlciBoYXMgVVNCIGZ1enppbmcgY2FwYWJpbGl0aWVzIHRocm91Z2ggUmF3IEdhZGdldCBhbmQgRHVtbXkgSENEIOKAkyB0aGF0JiMzOTtzIGV4Y2VsbGVudCEgQnV0IGEgdGhvdWdodCBqdXN0IHN0cnVjayBtZTogY2FuIEFUTSBzb2NrZXRzLCBzcGVjaWZpY2FsbHksIGJlIGNvbm5lY3RlZCB3aXRob3V0IGFuIGFjdHVhbCBkZXZpY2UgcHJlc2VudD8gSSB3b25kZXIgd2hhdCBoYXBwZW5zIGluIHRoZSBgdmNjX2Nvbm5lY3RgIGZ1bmN0aW9uLi4uIFRoaXMgZmVlbHMgbGlrZSBhIHBvdGVudGlhbCBhcmVhIGZvciBleHBsb3JhdGlvbiwgc28gbGV0JiMzOTtzIGRpZyBpbnRvIGBuZXQvYXRtL2NvbW1vbi5jYCBhbmQgY2hlY2sgb3V0IHRoZSBgdmNjX2Nvbm5lY3RgIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBsb2dpYyB0byBzZWUgaWYgdGhpcyBjb3VsZCBiZSBleHBsb2l0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2F0bS9jb21tb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTgwOlx0XHRtb2R1bGVfcHV0KHZjYy1cdTAwM2Vvd25lcik7XG4gMTgxOlx0XG4gMTgyOlx0XHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKSAhPSBOVUxMKSB7XG4gMTgzOlx0XHRcdGF0bV9yZXR1cm4odmNjLCBza2ItXHUwMDNldHJ1ZXNpemUpO1xuIDE4NDpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAxODU6XHRcdH1cbiAxODY6XHRcbiAxODc6XHRcdGlmICh2Y2MtXHUwMDNlZGV2IFx1MDAyNlx1MDAyNiB2Y2MtXHUwMDNlZGV2LVx1MDAzZW9wcy1cdTAwM2Vvd25lcikge1xuIDE4ODpcdFx0XHRtb2R1bGVfcHV0KHZjYy1cdTAwM2VkZXYtXHUwMDNlb3BzLVx1MDAzZW93bmVyKTtcbiAxODk6XHRcdFx0YXRtX2Rldl9wdXQodmNjLVx1MDAzZWRldik7XG4gMTkwOlx0XHR9XG4gMTkxOlx0XG4gMTkyOlx0XHR2Y2NfcmVtb3ZlX3NvY2tldChzayk7XG4gMTkzOlx0fVxuIDE5NDpcdFxuIDE5NTpcdGludCB2Y2NfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIDE5NjpcdHtcbiAxOTc6XHRcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXHUwMDNlc2s7XG4gMTk4Olx0XG4gMTk5Olx0XHRpZiAoc2spIHtcbiAyMDA6XHRcdFx0bG9ja19zb2NrKHNrKTtcbiAyMDE6XHRcdFx0dmNjX2Rlc3Ryb3lfc29ja2V0KHNvY2stXHUwMDNlc2spO1xuIDIwMjpcdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIDIwMzpcdFx0XHRzb2NrX3B1dChzayk7XG4gMjA0Olx0XHR9XG4gMjA1Olx0XG4gMjA2Olx0XHRyZXR1cm4gMDtcbiAyMDc6XHR9XG4gMjA4Olx0XG4gMjA5Olx0dm9pZCB2Y2NfcmVsZWFzZV9hc3luYyhzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBpbnQgcmVwbHkpXG4gMjEwOlx0e1xuIDIxMTpcdFx0c3RydWN0IHNvY2sgKnNrID0gc2tfYXRtKHZjYyk7XG4gMjEyOlx0XG4gMjEzOlx0XHRzZXRfYml0KEFUTV9WRl9DTE9TRSwgXHUwMDI2dmNjLVx1MDAzZWZsYWdzKTtcbiAyMTQ6XHRcdHNrLVx1MDAzZXNrX3NodXRkb3duIHw9IFJDVl9TSFVURE9XTjtcbiAyMTU6XHRcdHNrLVx1MDAzZXNrX2VyciA9IC1yZXBseTtcbiAyMTY6XHRcdHNrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG4gMjE3Olx0fVxuIDIxODpcdEVYUE9SVF9TWU1CT0wodmNjX3JlbGVhc2VfYXN5bmMpO1xuIDIxOTpcdFxuIDIyMDpcdHZvaWQgdmNjX3Byb2Nlc3NfcmVjdl9xdWV1ZShzdHJ1Y3QgYXRtX3ZjYyAqdmNjKVxuIDIyMTpcdHtcbiAyMjI6XHRcdHN0cnVjdCBza19idWZmX2hlYWQgcXVldWUsICpycTtcbiAyMjM6XHRcdHN0cnVjdCBza19idWZmICpza2IsICp0bXA7XG4gMjI0Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDIyNTpcdFxuIDIyNjpcdFx0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNnF1ZXVlKTtcbiAyMjc6XHRcdHJxID0gXHUwMDI2c2tfYXRtKHZjYyktXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZTtcbiAyMjg6XHRcbiAyMjk6XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnJxLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiAyMzA6XHRcdHNrYl9xdWV1ZV9zcGxpY2VfaW5pdChycSwgXHUwMDI2cXVldWUpO1xuIDIzMTpcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZycS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gMjMyOlx0XG4gMjMzOlx0XHRza2JfcXVldWVfd2Fsa19zYWZlKFx1MDAyNnF1ZXVlLCBza2IsIHRtcCkge1xuIDIzNDpcdFx0XHRfX3NrYl91bmxpbmsoc2tiLCBcdTAwMjZxdWV1ZSk7XG4gMjM1Olx0XHRcdHZjYy1cdTAwM2VwdXNoKHZjYywgc2tiKTtcbiAyMzY6XHRcdH1cbiAyMzc6XHR9XG4gMjM4Olx0RVhQT1JUX1NZTUJPTCh2Y2NfcHJvY2Vzc19yZWN2X3F1ZXVlKTtcbiAyMzk6XHRcbiAyNDA6XHR2b2lkIGF0bV9kZXZfc2lnbmFsX2NoYW5nZShzdHJ1Y3QgYXRtX2RldiAqZGV2LCBjaGFyIHNpZ25hbClcbiAyNDE6XHR7XG4gMjQyOlx0XHRwcl9kZWJ1ZyhcJiMzNDslcyBzaWduYWw9JWQgZGV2PSVwIG51bWJlcj0lZCBkZXYtXHUwMDNlc2lnbmFsPSVkXFxuXCYjMzQ7LFxuIDI0MzpcdFx0XHRfX2Z1bmNfXywgc2lnbmFsLCBkZXYsIGRldi1cdTAwM2VudW1iZXIsIGRldi1cdTAwM2VzaWduYWwpO1xuIDI0NDpcdFxuIDI0NTpcdFx0LyogYXRtIGRyaXZlciBzZW5kaW5nIGludmFsaWQgc2lnbmFsICovXG4gMjQ2Olx0XHRXQVJOX09OKHNpZ25hbCBcdTAwM2MgQVRNX1BIWV9TSUdfTE9TVCB8fCBzaWduYWwgXHUwMDNlIEFUTV9QSFlfU0lHX0ZPVU5EKTtcbiAyNDc6XHRcbiAyNDg6XHRcdGlmIChkZXYtXHUwMDNlc2lnbmFsID09IHNpZ25hbClcbiAyNDk6XHRcdFx0cmV0dXJuOyAvKiBubyBjaGFuZ2UgKi9cbiAyNTA6XHRcbiAyNTE6XHRcdGRldi1cdTAwM2VzaWduYWwgPSBzaWduYWw7XG4gMjUyOlx0XG4gMjUzOlx0XHRhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbihcdTAwMjZhdG1fZGV2X25vdGlmeV9jaGFpbiwgc2lnbmFsLCBkZXYpO1xuIDI1NDpcdH1cbiAyNTU6XHRFWFBPUlRfU1lNQk9MKGF0bV9kZXZfc2lnbmFsX2NoYW5nZSk7XG4gMjU2Olx0XG4gMjU3Olx0dm9pZCBhdG1fZGV2X3JlbGVhc2VfdmNjcyhzdHJ1Y3QgYXRtX2RldiAqZGV2KVxuIDI1ODpcdHtcbiAyNTk6XHRcdGludCBpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzc4NwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgaXM6CgoqKkxvY2F0aW5nIHRoZSBgdmNjX2Nvbm5lY3RgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBgdmNjX2Nvbm5lY3RgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIGl0IHdvdWxkIGJlIGluIGEgY29tbW9uIGFyZWEgZm9yIG5ldHdvcmsgb3BlcmF0aW9ucywgYW5kIGJhc2VkIG9uIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGUga2VybmVsLCBhIGZpbGUgbmFtZWQgYGNvbW1vbi5jYCB3aXRoaW4gYSBgbmV0L2F0bWAgZGlyZWN0b3J5IHdvdWxkIGJlIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gR2l2ZW4gdGhlIEFUTSBjb250ZXh0LCB0aGF0IHdvdWxkIGFsc28gYmUgYSB2ZXJ5IHJlYXNvbmFibGUgcGxhY2UgdG8gc3RhcnQgbG9va2luZywgc2luY2UgVkNDIGNvbm5lY3Rpb25zIGFyZSBmdW5kYW1lbnRhbCB0byBob3cgdGhhdCBwcm90b2NvbCBvcGVyYXRlcy4gTGV0JiMzOTtzIGhlYWQgdGhlcmUgYW5kIHNlZSB3aGF0JiMzOTtzIGluIGBuZXQvYXRtL2NvbW1vbi5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IHZjY19jb25uZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2F0bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9jb21tb24uYz0zNzQ9c3RhdGljIGludCBfX3ZjY19jb25uZWN0KHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBhdG1fZGV2ICpkZXYsIHNob3J0IHZwaSxcbi0tXG5uZXQvYXRtL2NvbW1vbi5jLTQ0OS1cbm5ldC9hdG0vY29tbW9uLmM6NDUwOmludCB2Y2NfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaXRmLCBzaG9ydCB2cGksIGludCB2Y2kpXG5uZXQvYXRtL2NvbW1vbi5jLTQ1MS17XG4tLVxubmV0L2F0bS9jb21tb24uaD0xNT1pbnQgdmNjX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jayk7XG5uZXQvYXRtL2NvbW1vbi5oOjE2OmludCB2Y2NfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaXRmLCBzaG9ydCB2cGksIGludCB2Y2kpO1xubmV0L2F0bS9jb21tb24uaC0xNy1pbnQgdmNjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxODcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGB2Y2NfY29ubmVjdGAqKgoKT2theSwgbGV0JiMzOTtzIGdldCByaWdodCB0byBpdC4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIGB2Y2NfY29ubmVjdGAgaW4gYG5ldC9hdG0vY29tbW9uLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIEFUTSBjb25uZWN0aW9uIHByb2Nlc3MsIHNwZWNpZmljYWxseSBob3cgdGhlc2UgVkNDcyBhcmUgZXN0YWJsaXNoZWQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiBob3cgdGhlIGNvbm5lY3Rpb24gaXMgc2V0IHVwIGF0IHRoaXMgbGF5ZXIuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyZmFjZXMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBvciBkcml2ZXIgYW5kIHdoYXQgc29ydCBvZiByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBwYXJhbWV0ZXIgcGFzc2luZyBpdCBlbnRhaWxzLiBUaGVyZSYjMzk7cyBwcm9iYWJseSBzb21lIGNydWNpYWwgc2lnbmFsaW5nIGdvaW5nIG9uIGhlcmUuIFRpbWUgdG8gZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9hdG0vY29tbW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ0NTpcdFx0LyogZW5zdXJlIHdlIGdldCBkZXYgbW9kdWxlIHJlZiBjb3VudCBjb3JyZWN0ICovXG4gNDQ2Olx0XHR2Y2MtXHUwMDNlZGV2ID0gTlVMTDtcbiA0NDc6XHRcdHJldHVybiBlcnJvcjtcbiA0NDg6XHR9XG4gNDQ5Olx0XG4gNDUwOlx0aW50IHZjY19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBpdGYsIHNob3J0IHZwaSwgaW50IHZjaSlcbiA0NTE6XHR7XG4gNDUyOlx0XHRzdHJ1Y3QgYXRtX2RldiAqZGV2O1xuIDQ1MzpcdFx0c3RydWN0IGF0bV92Y2MgKnZjYyA9IEFUTV9TRChzb2NrKTtcbiA0NTQ6XHRcdGludCBlcnJvcjtcbiA0NTU6XHRcbiA0NTY6XHRcdHByX2RlYnVnKFwmIzM0Oyh2cGkgJWQsIHZjaSAlZClcXG5cJiMzNDssIHZwaSwgdmNpKTtcbiA0NTc6XHRcdGlmIChzb2NrLVx1MDAzZXN0YXRlID09IFNTX0NPTk5FQ1RFRClcbiA0NTg6XHRcdFx0cmV0dXJuIC1FSVNDT05OO1xuIDQ1OTpcdFx0aWYgKHNvY2stXHUwMDNlc3RhdGUgIT0gU1NfVU5DT05ORUNURUQpXG4gNDYwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ2MTpcdFx0aWYgKCEodnBpIHx8IHZjaSkpXG4gNDYyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ2MzpcdFxuIDQ2NDpcdFx0aWYgKHZwaSAhPSBBVE1fVlBJX1VOU1BFQyBcdTAwMjZcdTAwMjYgdmNpICE9IEFUTV9WQ0lfVU5TUEVDKVxuIDQ2NTpcdFx0XHRjbGVhcl9iaXQoQVRNX1ZGX1BBUlRJQUwsIFx1MDAyNnZjYy1cdTAwM2VmbGFncyk7XG4gNDY2Olx0XHRlbHNlXG4gNDY3Olx0XHRcdGlmICh0ZXN0X2JpdChBVE1fVkZfUEFSVElBTCwgXHUwMDI2dmNjLVx1MDAzZWZsYWdzKSlcbiA0Njg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0Njk6XHRcdHByX2RlYnVnKFwmIzM0OyhUWDogY2wgJWQsYncgJWQtJWQsc2R1ICVkOyBcJiMzNDtcbiA0NzA6XHRcdFx0IFwmIzM0O1JYOiBjbCAlZCxidyAlZC0lZCxzZHUgJWQsQUFMICVzJWQpXFxuXCYjMzQ7LFxuIDQ3MTpcdFx0XHQgdmNjLVx1MDAzZXFvcy50eHRwLnRyYWZmaWNfY2xhc3MsIHZjYy1cdTAwM2Vxb3MudHh0cC5taW5fcGNyLFxuIDQ3MjpcdFx0XHQgdmNjLVx1MDAzZXFvcy50eHRwLm1heF9wY3IsIHZjYy1cdTAwM2Vxb3MudHh0cC5tYXhfc2R1LFxuIDQ3MzpcdFx0XHQgdmNjLVx1MDAzZXFvcy5yeHRwLnRyYWZmaWNfY2xhc3MsIHZjYy1cdTAwM2Vxb3Mucnh0cC5taW5fcGNyLFxuIDQ3NDpcdFx0XHQgdmNjLVx1MDAzZXFvcy5yeHRwLm1heF9wY3IsIHZjYy1cdTAwM2Vxb3Mucnh0cC5tYXhfc2R1LFxuIDQ3NTpcdFx0XHQgdmNjLVx1MDAzZXFvcy5hYWwgPT0gQVRNX0FBTDUgPyBcJiMzNDtcJiMzNDsgOlxuIDQ3NjpcdFx0XHQgdmNjLVx1MDAzZXFvcy5hYWwgPT0gQVRNX0FBTDAgPyBcJiMzNDtcJiMzNDsgOiBcJiMzNDsgPz8/IGNvZGUgXCYjMzQ7LFxuIDQ3NzpcdFx0XHQgdmNjLVx1MDAzZXFvcy5hYWwgPT0gQVRNX0FBTDAgPyAwIDogdmNjLVx1MDAzZXFvcy5hYWwpO1xuIDQ3ODpcdFx0aWYgKCF0ZXN0X2JpdChBVE1fVkZfSEFTUU9TLCBcdTAwMjZ2Y2MtXHUwMDNlZmxhZ3MpKVxuIDQ3OTpcdFx0XHRyZXR1cm4gLUVCQURGRDtcbiA0ODA6XHRcdGlmICh2Y2MtXHUwMDNlcW9zLnR4dHAudHJhZmZpY19jbGFzcyA9PSBBVE1fQU5ZQ0xBU1MgfHxcbiA0ODE6XHRcdCAgICB2Y2MtXHUwMDNlcW9zLnJ4dHAudHJhZmZpY19jbGFzcyA9PSBBVE1fQU5ZQ0xBU1MpXG4gNDgyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ4MzpcdFx0aWYgKGxpa2VseShpdGYgIT0gQVRNX0lURl9BTlkpKSB7XG4gNDg0Olx0XHRcdGRldiA9IHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKGF0bV9kZXZfbG9va3VwKGl0ZiksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjA5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIG5ldHdvcmtpbmcgZXhwZXJ0OgoKKipQUFBvQVRNIGFuZCBTeXprYWxsZXIgLSBXaGVyZSYjMzk7cyB0aGUgQ292ZXJhZ2U/KioKCkhtbSwgSSYjMzk7bSBzZWVpbmcgYGF0bV9kZXZfbG9va3VwKGl0ZilgIOKAkyBpbnRlcmVzdGluZy4gQnV0IG15IGJyYWluIGltbWVkaWF0ZWx5IGp1bXBzIHRvLCAmIzM0O0hvdyBleGFjdGx5IGlzIHN5emthbGxlciB0ZXN0aW5nIFBQUG9BVE0/IEkgaGF2ZW4mIzM5O3Qgc2VlbiBtdWNoIG9mIHRoYXQgbGF0ZWx5LiYjMzQ7IE15IGV4cGVyaWVuY2UgaGFzIG1lIHRoaW5raW5nLCAmIzM0O3N5emthbGxlciBpcyBncmVhdCwgYnV0IGRpZCBpdCBldmVyIHJlYWxseSBnZXQgZGVlcCBpbnRvIFBQUG9BVE0/IEkgbmVlZCB0byBjaGVjay4mIzM0OyBMZXQgbWUganVzdCBkaWcgdGhyb3VnaCB0aGUgR2l0IGhpc3Rvcnkg4oCTIHByb2JhYmx5IGxvb2sgZm9yIGJ1ZyByZXBvcnRzIHJlbGF0ZWQgdG8gc3l6a2FsbGVyIGFuZCBwcHBvYXRtLiBUaGF0IHNob3VsZCBwb2ludCBtZSBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgdGVzdGluZyBjb3ZlcmFnZSBmb3IgdGhpcyBwcm90b2NvbC4gVGhlcmUgY291bGQgYmUgc29tZSBpc3N1ZXMgbHVya2luZyB0aGF0IEkgYW0gYXdhcmUgb2YuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3l6Ym90LipwcHBvYXRtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0NTcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyB0aGUgUFBQb0FUTSBDb21taXQgTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29tbWl0IGhpc3RvcnkgcmVsYXRlZCB0byBgbmV0L2F0bS9wcHBvYXRtLmNgLiBNeSBpbml0aWFsIGluc3RpbmN0IHdhcyB0byByZWFjaCBmb3IgYSB0b29sIGxpa2UgZ3JlcHBlciwgYnV0IHdhaXQsIGdyZXBwZXIgaXMgbW9yZSBmb3Igc2VhcmNoaW5nICp3aXRoaW4qIGZpbGVzLCBub3QgdGhlIGNvbW1pdCBsb2cgaXRzZWxmLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBtaXNmaXJlLCBJIG5lZWQgdG8gZm9jdXMgb24gZ2l0IGxvZy4KCkNhbiBJIGRpcmVjdGx5IHNlYXJjaCB0aGUgZ2l0IGxvZyBmb3IgcmVsZXZhbnQgZW50cmllcz8gUmlnaHQsIHRoZXJlIGlzbiYjMzk7dCBhIGRlZGljYXRlZCAmIzM0O2dyZXBwZXImIzM0OyBlcXVpdmFsZW50IGZvciBgZ2l0IGxvZ2AgZGlyZWN0bHkuIEhtbW0sIGNvdWxkIEkgc2VhcmNoIGZvciBzb21ldGhpbmcgc3BlY2lmaWMsIGxpa2UgJiMzNDtSZXBvcnRlZC1ieTogc3l6Ym90JiMzNDsgd2l0aGluIHRoYXQgc3BlY2lmaWMgZmlsZSBvciBpdHMgY29tbWVudHMsIG9yIG1heWJlIHRoZSBjb2RlIGl0c2VsZj8gVGhhdCBtaWdodCB5aWVsZCBzb21ldGhpbmcuIFN0aWxsLCBydW5uaW5nIGBnaXQgbG9nYCBkaXJlY3RseSBpc24mIzM5O3QgYW4gb3B0aW9uLgoKQWxyaWdodCwgd2hhdCBhYm91dCBhIGJyb2FkZXIgc2VhcmNoIGZvciAmIzM0O3BwcG9hdG0mIzM0OyBhY3Jvc3Mga2VybmVsIGNvbW1pdHM/IE5vLCB3YWl0Li4uIGdyZXBwZXIgaXMgZmlsZS1iYXNlZCwgc28gdGhhdCB3b24mIzM5O3Qgd29yayBlaXRoZXIuIE9rYXksIG5ldyBwbGFuOiBMZXQmIzM5O3MgZ3JlcCBmb3IgJiMzNDtwcHBvYXRtJiMzNDsgaW4gdGhlIGBEb2N1bWVudGF0aW9uL2AgZGlyZWN0b3J5IG9yIHBlcmhhcHMgdGhlIGBuZXQvYXRtL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIG1vcmUgcmVhc29uYWJsZSBhbmQgYSBxdWljayB3YXkgdG8gZGlzY292ZXIgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBvYXRtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTkwMQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqR3Jhc3BpbmcgdGhlIFNjb3BlIG9mIEFUTV9CQUNLRU5EX1BQUCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgQVRNX0JBQ0tFTkRfUFBQYCBpcyB1dGlsaXplZCB3aXRoaW4gdGhpcyBjb2RlYmFzZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgYSBmdWxsIGNvZGUgcmV2aWV3IHRvIGxvY2F0ZSBldmVyeSBpbnN0YW5jZSB3b3VsZCBiZSBvdmVya2lsbCwgdW5sZXNzIHRoZXJlJiMzOTtzIHNvbWUgZXZpZGVuY2Ugb2YgYSBwYXJ0aWN1bGFybHkgZWx1c2l2ZSBidWcuIEEgZ29vZCBzdGFydGluZyBwb2ludCwgYW5kIHVzdWFsbHkgdGhlIGZhc3Rlc3QsIG1vc3QgZWZmZWN0aXZlIHdheSB0byBnZXQgYW4gb3ZlcnZpZXcsIGlzIGEgYGdyZXBgLiBJIHdhbnQgdG8gc2VhcmNoIHRoZSBlbnRpcmUgcHJvamVjdCwgc28gSSYjMzk7bGwgbmVlZCB0byBzcGVjaWZ5IHRoYXQgY2xlYXJseS4gV2l0aCBhIGdvb2QgYGdyZXBgIGNvbW1hbmQsIEkgc2hvdWxkIGJlIGFibGUgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIGZpbGVzIGFuZCBjb250ZXh0cyB3aGVyZSB0aGlzIGNvbnN0YW50IG9yIG1hY3JvIGlzIGRlZmluZWQgb3IgdXNlZC4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGlmIGFueSBzcGVjaWZpYyBmaWxlcyB3YXJyYW50IG1vcmUgaW4tZGVwdGggYXR0ZW50aW9uIGJhc2VkIG9uIHRoZSBpbml0aWFsIG91dHB1dC4gVGhpcyBpcyBhIHN0YW5kYXJkIGFuZCBlZmZpY2llbnQgd2F5IHRvIGJlZ2luIGFuIGludmVzdGlnYXRpb24gaW50byBhbiB1bmZhbWlsaWFyIGNvZGViYXNlIGFyZWEsIGVzcGVjaWFsbHkgd2hlbiBmb2N1c2luZyBvbiBhIHNwZWNpZmljIG1hY3JvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBVE1fQkFDS0VORF9QUFAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L2F0bWRldi5oPTQ4PXN0cnVjdCBhdG1fZGV2X3N0YXRzIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtZGV2LmgtOTQtI2RlZmluZSBBVE1fQkFDS0VORF9SQVdcdFx0MFx0XG5pbmNsdWRlL3VhcGkvbGludXgvYXRtZGV2Lmg6OTU6I2RlZmluZSBBVE1fQkFDS0VORF9QUFBcdFx0MVx0LyogUFBQb0FUTSAtIFJGQzIzNjQgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9hdG1kZXYuaC05Ni0jZGVmaW5lIEFUTV9CQUNLRU5EX0JSMjY4NFx0Mlx0LyogQnJpZGdlZCBSRkMxNDgzLzI2ODQgKi9cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtcHBwLmg9MjA9c3RydWN0IGF0bV9iYWNrZW5kX3BwcCB7XG5pbmNsdWRlL3VhcGkvbGludXgvYXRtcHBwLmg6MjE6XHRhdG1fYmFja2VuZF90XHRiYWNrZW5kX251bTtcdC8qIEFUTV9CQUNLRU5EX1BQUCAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L2F0bXBwcC5oLTIyLVx0aW50XHRcdGVuY2FwcztcdFx0LyogUFBQT0FUTV9FTkNBUFNfKiAqL1xuLS1cbm5ldC9hdG0vaW9jdGwuYz00Mz1zdGF0aWMgaW50IGRvX3ZjY19pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbm5ldC9hdG0vaW9jdGwuYy05My1cdFx0c3dpdGNoIChiYWNrZW5kKSB7XG5uZXQvYXRtL2lvY3RsLmM6OTQ6XHRcdGNhc2UgQVRNX0JBQ0tFTkRfUFBQOlxubmV0L2F0bS9pb2N0bC5jLTk1LVx0XHRcdHJlcXVlc3RfbW9kdWxlKFwmIzM0O3BwcG9hdG1cJiMzNDspO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jPTQzMD1zdGF0aWMgaW50IHBwcG9hdG1faW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy00NDItXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG5uZXQvYXRtL3BwcG9hdG0uYzo0NDM6XHRcdGlmIChiICE9IEFUTV9CQUNLRU5EX1BQUClcbm5ldC9hdG0vcHBwb2F0bS5jLTQ0NC1cdFx0XHRyZXR1cm4gLUVOT0lPQ1RMQ01EO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU3OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBBVE0gSU9DVEwgSW1wbGVtZW50YXRpb24qKgoKT2theSwgaG9sZCBvbiBhIG1pbnV0ZS4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGlzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBJT0NUTCBoYW5kbGluZyBmb3IgQVRNLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgY29kZSBpbiBgbmV0L2F0bS9pb2N0bC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gbWFuYWdlcyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgQVRNIG5ldHdvcmsgaW50ZXJmYWNlLiBUaGUgc3RhcnRpbmcgcG9pbnQgaXMgbGlrZWx5IHRvIGJlIHRoZSBgZG9fdmNjX2lvY3RsYCBmdW5jdGlvbiB3aXRoaW4gdGhhdCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIHdoZW4gYSBzb2NrZXQgSU9DVEwgb3BlcmF0aW9uIGdldHMgY2FsbGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCYjMzk7cyBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYXRtL2lvY3RsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDcwOlx0XHRcdGlmIChzb2NrLVx1MDAzZXN0YXRlICE9IFNTX0NPTk5FQ1RFRCkge1xuICA3MTpcdFx0XHRcdGVycm9yID0gLUVJTlZBTDtcbiAgNzI6XHRcdFx0XHRnb3RvIGRvbmU7XG4gIDczOlx0XHRcdH1cbiAgNzQ6XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuICA3NTpcdFx0XHRza2IgPSBza2JfcGVlayhcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcbiAgNzY6XHRcdFx0YW1vdW50ID0gc2tiID8gc2tiLVx1MDAzZWxlbiA6IDA7XG4gIDc3Olx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuICA3ODpcdFx0XHRlcnJvciA9IHB1dF91c2VyKGFtb3VudCwgKGludCBfX3VzZXIgKilhcmdwKTtcbiAgNzk6XHRcdFx0Z290byBkb25lO1xuICA4MDpcdFx0fVxuICA4MTpcdFx0Y2FzZSBBVE1fU0VUU0M6XG4gIDgyOlx0XHRcdG5ldF93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O0FUTV9TRVRTQyBpcyBvYnNvbGV0ZTsgdXNlZCBieSAlczolZFxcblwmIzM0OyxcbiAgODM6XHRcdFx0XHRcdCAgICAgY3VycmVudC1cdTAwM2Vjb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7XG4gIDg0Olx0XHRcdGVycm9yID0gMDtcbiAgODU6XHRcdFx0Z290byBkb25lO1xuICA4NjpcdFx0Y2FzZSBBVE1fU0VUQkFDS0VORDpcbiAgODc6XHRcdGNhc2UgQVRNX05FV0JBQ0tFTkRJRjpcbiAgODg6XHRcdHtcbiAgODk6XHRcdFx0YXRtX2JhY2tlbmRfdCBiYWNrZW5kO1xuICA5MDpcdFx0XHRlcnJvciA9IGdldF91c2VyKGJhY2tlbmQsIChhdG1fYmFja2VuZF90IF9fdXNlciAqKWFyZ3ApO1xuICA5MTpcdFx0XHRpZiAoZXJyb3IpXG4gIDkyOlx0XHRcdFx0Z290byBkb25lO1xuICA5MzpcdFx0XHRzd2l0Y2ggKGJhY2tlbmQpIHtcbiAgOTQ6XHRcdFx0Y2FzZSBBVE1fQkFDS0VORF9QUFA6XG4gIDk1Olx0XHRcdFx0cmVxdWVzdF9tb2R1bGUoXCYjMzQ7cHBwb2F0bVwmIzM0Oyk7XG4gIDk2Olx0XHRcdFx0YnJlYWs7XG4gIDk3Olx0XHRcdGNhc2UgQVRNX0JBQ0tFTkRfQlIyNjg0OlxuICA5ODpcdFx0XHRcdHJlcXVlc3RfbW9kdWxlKFwmIzM0O2JyMjY4NFwmIzM0Oyk7XG4gIDk5Olx0XHRcdFx0YnJlYWs7XG4gMTAwOlx0XHRcdH1cbiAxMDE6XHRcdFx0YnJlYWs7XG4gMTAyOlx0XHR9XG4gMTAzOlx0XHR9XG4gMTA0Olx0XG4gMTA1Olx0XHRlcnJvciA9IC1FTk9JT0NUTENNRDtcbiAxMDY6XHRcbiAxMDc6XHRcdG11dGV4X2xvY2soXHUwMDI2aW9jdGxfbXV0ZXgpO1xuIDEwODpcdFx0bGlzdF9mb3JfZWFjaChwb3MsIFx1MDAyNmlvY3RsX2xpc3QpIHtcbiAxMDk6XHRcdFx0c3RydWN0IGF0bV9pb2N0bCAqaWMgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGF0bV9pb2N0bCwgbGlzdCk7XG4gMTEwOlx0XHRcdGlmICh0cnlfbW9kdWxlX2dldChpYy1cdTAwM2Vvd25lcikpIHtcbiAxMTE6XHRcdFx0XHRlcnJvciA9IGljLVx1MDAzZWlvY3RsKHNvY2ssIGNtZCwgYXJnKTtcbiAxMTI6XHRcdFx0XHRtb2R1bGVfcHV0KGljLVx1MDAzZW93bmVyKTtcbiAxMTM6XHRcdFx0XHRpZiAoZXJyb3IgIT0gLUVOT0lPQ1RMQ01EKVxuIDExNDpcdFx0XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDQzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIEFUTSBJT0NUTCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIEFUTSBJT0NUTCBpbnRlcmZhY2Ugd29ya3MsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBuZXQvYXRtL2lvY3RsLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIFRoZSBmdW5jdGlvbiBgQVRNX1NFVEJBQ0tFTkRgIGltbWVkaWF0ZWx5IGNhbGxzIGByZXF1ZXN0X21vZHVsZSgmIzM0O3BwcG9hdG0mIzM0OylgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nOyBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIHRyeWluZyB0byBkeW5hbWljYWxseSBsb2FkIHRoZSBQUFBvQS9BVE0gbW9kdWxlLCBgcHBwb2F0bWAsIGlmIGl0JiMzOTtzIG5vdCBhbHJlYWR5IHByZXNlbnQuIEFmdGVyIHRoYXQsIEkgc2VlIGl0IGl0ZXJhdGVzIHRocm91Z2ggYGlvY3RsX2xpc3RgLiBUaGF0IG11c3QgYmUgd2hlcmUgdGhlIGNvcmUgaW9jdGwgZnVuY3Rpb25hbGl0eSBpcyByZWdpc3RlcmVkLgoKTXkgbmV4dCBzdGVwLCBuYXR1cmFsbHksIGlzIHRvIGNoZWNrIGhvdyBgcHBwb2F0bWAgaW50ZWdyYXRlcyBpdHNlbGYuIFRoZSBtb2R1bGUgZ2V0cyBsb2FkZWQgYW5kIGluaXRpYWxpemVkLCBhbmQgSSBwcmVkaWN0IEkmIzM5O2xsIGZpbmQgaXRzIGBpb2N0bGAgb3BlcmF0aW9ucyByZWdpc3RlcmVkIGF0IHRoaXMgc3RhZ2UuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgc28gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBpbml0X3BwcG9hdG1gIGZ1bmN0aW9uIGluIGBuZXQvYXRtL3BwcG9hdG0uY2AuIFRoYXQgc2hvdWxkIHNob3cgbWUgd2hlcmUgYHBwcG9hdG1faW9jdGxfb3BzYCBnZXQgaG9va2VkIGludG8gdGhlIHN5c3RlbS4gS25vd2luZyB0aGlzIGlzIHRoZSBoZWFydCBvZiB0aGUgZHJpdmVyJiMzOTtzIElPQ1RMIGhhbmRsaW5nIHdpbGwgYmUga2V5IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBkaWZmZXJlbnQgQVRNIHNwZWNpZmljIHJlcXVlc3RzIGFyZSBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYXRtL3BwcG9hdG0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDYwOlx0XG4gNDYxOlx0c3RhdGljIHN0cnVjdCBhdG1faW9jdGwgcHBwb2F0bV9pb2N0bF9vcHMgPSB7XG4gNDYyOlx0XHQub3duZXJcdD0gVEhJU19NT0RVTEUsXG4gNDYzOlx0XHQuaW9jdGxcdD0gcHBwb2F0bV9pb2N0bCxcbiA0NjQ6XHR9O1xuIDQ2NTpcdFxuIDQ2NjpcdHN0YXRpYyBpbnQgX19pbml0IHBwcG9hdG1faW5pdCh2b2lkKVxuIDQ2NzpcdHtcbiA0Njg6XHRcdHJlZ2lzdGVyX2F0bV9pb2N0bChcdTAwMjZwcHBvYXRtX2lvY3RsX29wcyk7XG4gNDY5Olx0XHRyZXR1cm4gMDtcbiA0NzA6XHR9XG4gNDcxOlx0XG4gNDcyOlx0c3RhdGljIHZvaWQgX19leGl0IHBwcG9hdG1fZXhpdCh2b2lkKVxuIDQ3MzpcdHtcbiA0NzQ6XHRcdGRlcmVnaXN0ZXJfYXRtX2lvY3RsKFx1MDAyNnBwcG9hdG1faW9jdGxfb3BzKTtcbiA0NzU6XHR9XG4gNDc2Olx0XG4gNDc3Olx0bW9kdWxlX2luaXQocHBwb2F0bV9pbml0KTtcbiA0Nzg6XHRtb2R1bGVfZXhpdChwcHBvYXRtX2V4aXQpO1xuIDQ3OTpcdFxuIDQ4MDpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7TWl0Y2hlbGwgQmxhbmsgSnIgXHUwMDNjbWl0Y2hAc2Znb3RoLmNvbVx1MDAzZVwmIzM0Oyk7XG4gNDgxOlx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1JGQzIzNjQgUFBQIG92ZXIgQVRNL0FBTDVcJiMzNDspO1xuIDQ4MjpcdE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTQ5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFUTSBTb2NrZXQgQ29ubmVjdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdGhpcyBBVE0gc29ja2V0IGFjdHVhbGx5IGdldHMgY29ubmVjdGVkLCByaWdodD8gTGV0JiMzOTtzIHRyYWNlIHRoaXMuIEZpcnN0LCBJIHNlZSBgdmNjX2Nvbm5lY3RgLiBIbW0sIGlmIHRoZSBpbnRlcmZhY2UsIGBpdGZgLCBpc24mIzM5O3Qgc2V0IHRvIGEgc3BlY2lmaWMgdmFsdWUsIGlmIGl0JiMzOTtzIGBBVE1fSVRGX0FOWWAuLi4gd2VsbCwgdGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgY29kZSBzbmlwcGV0IHNob3dzIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW8uIFRoZSBgaWYgKGxpa2VseShpdGYgIT0gQVRNX0lURl9BTlkpKWAgc3RhdGVtZW50IGlzIHNraXBwZWQgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaGFwcGVucyB3aGVuIGBpdGZgIElTIGBBVE1fSVRGX0FOWWAuIE9rYXksIHRpbWUgdG8gZGl2ZSBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGZsb3cgd2hlbiBpdCYjMzk7cyBnZW5lcmljLCBzbyB0aGF0IG1lYW5zIEkgbmVlZCB0byBsb29rIGF0IGVpdGhlciB0aGUgYF9fdmNjX2Nvbm5lY3RgIGZ1bmN0aW9uIG9yIGB2Y2NfY29ubmVjdGAsIGJvdGggb2Ygd2hpY2ggYXJlIGxpa2VseSBkZWZpbmVkIHdpdGhpbiB0aGUgYG5ldC9hdG0vY29tbW9uLmNgIGZpbGUuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgdG8gdW5yYXZlbCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9hdG0vY29tbW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ4MDpcdFx0aWYgKHZjYy1cdTAwM2Vxb3MudHh0cC50cmFmZmljX2NsYXNzID09IEFUTV9BTllDTEFTUyB8fFxuIDQ4MTpcdFx0ICAgIHZjYy1cdTAwM2Vxb3Mucnh0cC50cmFmZmljX2NsYXNzID09IEFUTV9BTllDTEFTUylcbiA0ODI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDgzOlx0XHRpZiAobGlrZWx5KGl0ZiAhPSBBVE1fSVRGX0FOWSkpIHtcbiA0ODQ6XHRcdFx0ZGV2ID0gdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoYXRtX2Rldl9sb29rdXAoaXRmKSxcbiA0ODU6XHRcdFx0XHRcdFx0ICAgICAgXCYjMzQ7YXRtLWRldmljZS0lZFwmIzM0OywgaXRmKTtcbiA0ODY6XHRcdH0gZWxzZSB7XG4gNDg3Olx0XHRcdGRldiA9IE5VTEw7XG4gNDg4Olx0XHRcdG11dGV4X2xvY2soXHUwMDI2YXRtX2Rldl9tdXRleCk7XG4gNDg5Olx0XHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZhdG1fZGV2cykpIHtcbiA0OTA6XHRcdFx0XHRkZXYgPSBsaXN0X2VudHJ5KGF0bV9kZXZzLm5leHQsXG4gNDkxOlx0XHRcdFx0XHRcdCBzdHJ1Y3QgYXRtX2RldiwgZGV2X2xpc3QpO1xuIDQ5MjpcdFx0XHRcdGF0bV9kZXZfaG9sZChkZXYpO1xuIDQ5MzpcdFx0XHR9XG4gNDk0Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZhdG1fZGV2X211dGV4KTtcbiA0OTU6XHRcdH1cbiA0OTY6XHRcdGlmICghZGV2KVxuIDQ5NzpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiA0OTg6XHRcdGVycm9yID0gX192Y2NfY29ubmVjdCh2Y2MsIGRldiwgdnBpLCB2Y2kpO1xuIDQ5OTpcdFx0aWYgKGVycm9yKSB7XG4gNTAwOlx0XHRcdGF0bV9kZXZfcHV0KGRldik7XG4gNTAxOlx0XHRcdHJldHVybiBlcnJvcjtcbiA1MDI6XHRcdH1cbiA1MDM6XHRcdGlmICh2cGkgPT0gQVRNX1ZQSV9VTlNQRUMgfHwgdmNpID09IEFUTV9WQ0lfVU5TUEVDKVxuIDUwNDpcdFx0XHRzZXRfYml0KEFUTV9WRl9QQVJUSUFMLCBcdTAwMjZ2Y2MtXHUwMDNlZmxhZ3MpO1xuIDUwNTpcdFx0aWYgKHRlc3RfYml0KEFUTV9WRl9SRUFEWSwgXHUwMDI2QVRNX1NEKHNvY2spLVx1MDAzZWZsYWdzKSlcbiA1MDY6XHRcdFx0c29jay1cdTAwM2VzdGF0ZSA9IFNTX0NPTk5FQ1RFRDtcbiA1MDc6XHRcdHJldHVybiAwO1xuIDUwODpcdH1cbiA1MDk6XHRcbiA1MTA6XHRpbnQgdmNjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSxcbiA1MTE6XHRcdFx0aW50IGZsYWdzKVxuIDUxMjpcdHtcbiA1MTM6XHRcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXHUwMDNlc2s7XG4gNTE0Olx0XHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xuIDUxNTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiA1MTY6XHRcdGludCBjb3BpZWQsIGVycm9yID0gLUVJTlZBTDtcbiA1MTc6XHRcbiA1MTg6XHRcdGlmIChzb2NrLVx1MDAzZXN0YXRlICE9IFNTX0NPTk5FQ1RFRClcbiA1MTk6XHRcdFx0cmV0dXJuIC1FTk9UQ09OTjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxNjAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGB2Y2NfY29ubmVjdGAgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB2Y2NfY29ubmVjdGAgZnVuY3Rpb24uIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIGNydWNpYWw6IGFyZSB3ZSBkZWFsaW5nIHdpdGggYW4gQVRNIGRldmljZSB0aGF0JiMzOTtzIGFscmVhZHkgcmVnaXN0ZXJlZD8gVGhpbmdzIGxpa2UgYHNvbG9zLXBjaWAgb3IgYHVzYmF0bWA/IElmIHdlIGhhdmUgYSByZWdpc3RlcmVkIEFUTSBkZXZpY2UsIHRoZW4gdGhlIGBzb2NrLSZndDtzdGF0ZWAgZ2V0cyBzZXQgdG8gYFNTX0NPTk5FQ1RFRGAuIFRoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLCBuYXR1cmFsbHkuIEhvbGQgb24gYSBzZWNvbmQsIHRob3VnaC4uLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBzb2xvcy1wY2lgLiBJc24mIzM5O3QgdGhhdCBjYXJkIG9mdGVuIGVtdWxhdGVkIGluIFFFTVU/IE5vLCB3YWl0IGEgbWludXRlLCBgc29sb3MtcGNpYCBpcyBhIHBoeXNpY2FsIEFEU0wgY2FyZC4gQWxyaWdodCwgSSBuZWVkIHRvIGZvY3VzLiBMZXQgbWUgcmVkaXJlY3QgbXkgdGhpbmtpbmcgdG8gYGRyaXZlcnMvdXNiL2F0bS91c2JhdG0uY2AuIE5vdywgbGV0IG1lIGZpbmQgb3V0IHdoaWNoIGRyaXZlcnMgYXJlIHVzaW5nIHRoZSBgdXNiYXRtYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNiYXRtX3VzYl9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MTM0Nj1zdGF0aWMgaW50IGN4YWNydV91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEzNjMtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTM2NDpcdHJldHVybiB1c2JhdG1fdXNiX3Byb2JlKGludGYsIGlkLCBcdTAwMjZjeGFjcnVfZHJpdmVyKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMzY1LX1cbi0tXG5kcml2ZXJzL3VzYi9hdG0vc3BlZWR0Y2guYz05NDA9c3RhdGljIGludCBzcGVlZHRjaF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcbmRyaXZlcnMvdXNiL2F0bS9zcGVlZHRjaC5jLTk0MS17XG5kcml2ZXJzL3VzYi9hdG0vc3BlZWR0Y2guYzo5NDI6XHRyZXR1cm4gdXNiYXRtX3VzYl9wcm9iZShpbnRmLCBpZCwgXHUwMDI2c3BlZWR0Y2hfdXNiYXRtX2RyaXZlcik7XG5kcml2ZXJzL3VzYi9hdG0vc3BlZWR0Y2guYy05NDMtfVxuLS1cbmRyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmM9MjU1MD1zdGF0aWMgaW50IHVlYV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmMtMjU5Ny1cbmRyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmM6MjU5ODpcdHJldCA9IHVzYmF0bV91c2JfcHJvYmUoaW50ZiwgaWQsIFx1MDAyNnVlYV91c2JhdG1fZHJpdmVyKTtcbmRyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmMtMjU5OS1cdGlmIChyZXQgPT0gMCkge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYz0xMDAxPXN0YXRpYyB2b2lkIHVzYmF0bV9pbml0X2NoYW5uZWwoc3RydWN0IHVzYmF0bV9jaGFubmVsICpjaGFubmVsKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy0xMDA3LVxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jOjEwMDg6aW50IHVzYmF0bV91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy0xMDA5LVx0XHQgICAgIHN0cnVjdCB1c2JhdG1fZHJpdmVyICpkcml2ZXIpXG4tLVxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTEyMDQtfVxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jOjEyMDU6RVhQT1JUX1NZTUJPTF9HUEwodXNiYXRtX3VzYl9wcm9iZSk7XG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMtMTIwNi1cbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYz0xMjA3PXZvaWQgdXNiYXRtX3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy0xMjcxLVxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jOjEyNzI6XHR1c2JhdG1fcHV0X2luc3RhbmNlKGluc3RhbmNlKTtcdC8qIHRha2VuIGluIHVzYmF0bV91c2JfcHJvYmUgKi9cbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy0xMjczLX1cbi0tXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmg9NzM9c3RydWN0IHVzYmF0bV9kcml2ZXIge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uaC05OS1cbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uaDoxMDA6ZXh0ZXJuIGludCB1c2JhdG1fdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQsXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmgtMTAxLVx0XHRzdHJ1Y3QgdXNiYXRtX2RyaXZlciAqZHJpdmVyKTtcbi0tXG5kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jPTE0OD1zdGF0aWMgaW50IHh1c2JhdG1fYXRtX3N0YXJ0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtLFxuLS1cbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMtMTU5LVxuZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYzoxNjA6c3RhdGljIGludCB4dXNiYXRtX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMtMTYxLVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYy0xNjIte1xuZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYzoxNjM6XHRyZXR1cm4gdXNiYXRtX3VzYl9wcm9iZShpbnRmLCBpZCxcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMtMTY0LVx0XHRcdFx0eHVzYmF0bV9kcml2ZXJzICYjNDM7IChpZCAtIHh1c2JhdG1fdXNiX2lkcykpO1xuLS1cbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmM9MTY3PXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB4dXNiYXRtX3VzYl9kcml2ZXIgPSB7XG5kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jLTE2OC1cdC5uYW1lXHRcdD0geHVzYmF0bV9kcml2ZXJfbmFtZSxcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmM6MTY5Olx0LnByb2JlXHRcdD0geHVzYmF0bV91c2JfcHJvYmUsXG5kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jLTE3MC1cdC5kaXNjb25uZWN0XHQ9IHVzYmF0bV91c2JfZGlzY29ubmVjdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2MzcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVVNCIEFUTSBEcml2ZXIgRGlzY292ZXJ5IGFuZCBQb3RlbnRpYWwgRW11bGF0aW9uIFBhdGhzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBkcml2ZXIgbmFtZXMg4oCTIGBjeGFjcnVgLCBgc3BlZWR0Y2hgLCBgdWVhZ2xlLWF0bWAsIGFuZCBgeHVzYmF0bWAg4oCTIGFuZCB0aGV5JiMzOTtyZSBhbGwgY2xlYXJseSBVU0IgQVRNIGRyaXZlcnMuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtDYW4gc3l6a2FsbGVyIGhhbmRsZSBVU0IgZGV2aWNlIGVtdWxhdGlvbj8mIzM0OyBPZiBjb3Vyc2UhIEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQgVVNCIGdhZGdldCBlbXVsYXRpb24gKHVzaW5nIHJhdyBnYWRnZXQgb3IgYSBkdW1teSBIQ0QpIGlzIGV4cGxpY2l0bHkgc3VwcG9ydGVkLiBJIGV2ZW4gcmVjYWxsIHRoZSBpbnN0cnVjdGlvbnMgbWVudGlvbmluZyBpdCBleHBsaWNpdGx5OiAmIzM0OyhHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKSYjMzQ7IGFuZCBhZ2FpbiBpbiBzZWN0aW9uIDMsIG1lbnRpb25pbmcgZHJpdmVycyAmIzM0O2FjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuJiMzNDsgRXhjZWxsZW50LgoKTm93LCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0lzIHRoZXJlIGFub3RoZXIgYW5nbGUgaGVyZT8mIzM0OyBDb3VsZCBBVE0gYmUgc2ltdWxhdGVkIG9yIGFjY2Vzc2VkIGluIHNvbWUgKm90aGVyKiB3YXk/IE15IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBuZXQvYXRtL2AgYW5kIGBkcml2ZXJzL2F0bS9gLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZWxzZSBtaWdodCBiZSBpbiB0aG9zZSBkaXJlY3RvcmllcywgaW4gYWRkaXRpb24gdG8gVVNCIGltcGxlbWVudGF0aW9ucy4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRldmljZXMgaW4gYG5ldC9hdG0vYCBvciBgZHJpdmVycy9hdG0vYC4KCkhtbS4uLiBJJiMzOTttIHJlbWluZGVkIG9mIG9sZGVyIGtlcm5lbCBjb2RlIOKAkyBgZW5pLmNgLCBgbmljc3Rhci5jYCwgYGZpcmVzdHJlYW0uY2Ag4oCTIGJ1dCB0aG9zZSBhcmUgcHJvYmFibHkgaXJyZWxldmFudCBub3csIHBlcmhhcHMgcmVtb3ZlZCBvciBzaWduaWZpY2FudGx5IG91dGRhdGVkLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHRob3JvdWdoIGNoZWNrIG9mIHdoYXQmIzM5O3MgKmN1cnJlbnRseSogaW4gYGRyaXZlcnMvYXRtL2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2RyaXZlcnMvYXRtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7c29sb3MtYXR0cmxpc3QuYyYjMzQ7LAogICAgJiMzNDtzb2xvcy1wY2kuYyYjMzQ7CiAgXSwKICAmIzM0O1N1YmRpcnMmIzM0OzogbnVsbAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjQwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIERyaXZlciBDb21wYXRpYmlsaXR5KioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBmb3Igd2hlcmUgdGhpcyBpc3N1ZSBtaWdodCBiZSBzdGVtbWluZyBmcm9tLiBMZXQmIzM5O3Mgbm90IGxpbWl0IG91cnNlbHZlcyB0byB0aGUgb2J2aW91cyBwbGFjZXMuIEkgc2hvdWxkIGRlZmluaXRlbHkgYnJvYWRlbiB0aGUgc2VhcmNoIHRvIGVuY29tcGFzcyBzb21lIHJlbGF0ZWQgbmV0d29yayBhcmVhcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHBpdm90IGludG8gYSBjb3VwbGUgb2Yga2V5IGRyaXZlciBkaXJlY3RvcmllczogbGV0JiMzOTtzIGdvIHBva2UgYXJvdW5kIGluIGBkcml2ZXJzL25ldC9wcHAvYCDigJMgaXQmIzM5O3MgY3J1Y2lhbCB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSBhbmQgaW50ZWdyYXRpb24gdGhlcmUuIEJ1dCBhbHNvLCB3aGlsZSB3ZSYjMzk7cmUgYXQgaXQsIGxldOKAmXMgaGF2ZSBhIGxvb2sgaW50byBgbmV0L2F0bS9gLiBJdCYjMzk7cyB3b3J0aCBlbnN1cmluZyB0aGVyZSBhcmVuJiMzOTt0IGFueSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG9yIGNvbmZsaWN0cyBsdXJraW5nIHdpdGhpbiB0aGF0IEFUTSBjb2RlLCBldmVuIGlmIGl0IHNlZW1zIGxlc3MgbGlrZWx5IGF0IGZpcnN0IGdsYW5jZS4gV2hhdCBleGFjdGx5IGFyZSB0aGUgZmlsZXMgY3VycmVudGx5IHByZXNlbnQgaW4gYG5ldC9hdG0vYD8gVGhhdCYjMzk7cyB0aGUgaW1tZWRpYXRlIG5leHQgc3RlcC4gV2UgbmVlZCB0byBhc3Nlc3MgdGhlIHNjb3BlIG9mIHRoYXQgZGlyZWN0b3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtuZXQvYXRtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7YXRtX21pc2MuYyYjMzQ7LAogICAgJiMzNDthdG1fc3lzZnMuYyYjMzQ7LAogICAgJiMzNDticjI2ODQuYyYjMzQ7LAogICAgJiMzNDtjb21tb24uYyYjMzQ7LAogICAgJiMzNDtjb21tb24uaCYjMzQ7LAogICAgJiMzNDtpb2N0bC5jJiMzNDssCiAgICAmIzM0O3BwcG9hdG0uYyYjMzQ7LAogICAgJiMzNDtwcm9jLmMmIzM0OywKICAgICYjMzQ7cHJvdG9jb2xzLmgmIzM0OywKICAgICYjMzQ7cHZjLmMmIzM0OywKICAgICYjMzQ7cmF3LmMmIzM0OywKICAgICYjMzQ7cmVzb3VyY2VzLmMmIzM0OywKICAgICYjMzQ7cmVzb3VyY2VzLmgmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTU4OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMzNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFBQUG9BVE0gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBhaW1zIHRvIGNsZWFuIHVwIHRoZSBgcHBwb2F0bV9zZW5kYCBmdW5jdGlvbiwgYWRkcmVzc2luZyBzb21lIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG91dC1vZi1ib3VuZHMgcmVhZHMsIGFuZCBpbmVmZmljaWVuY2llcywgcGFydGljdWxhcmx5IGFyb3VuZCB0aGUgTExDIGVuY2Fwc3VsYXRpb24uIFRoZSBvcmlnaW5hbCBjb2RlJiMzOTtzIGxvZ2ljIGZvciBoYW5kbGluZyBoZWFkcm9vbSBhbmQgdGhlIHBvdGVudGlhbGx5IGNvbXByZXNzZWQgcGFja2V0cyBzZWVtcyBjb252b2x1dGVkIGFuZCBJIHNlZSBzb21lIG9idmlvdXMgaW1wcm92ZW1lbnRzLgoKRmlyc3QsIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhbiBpc3N1ZSB3aXRoIGEgcG9zc2libGUgb3V0LW9mLWJvdW5kcyByZWFkIChgc2tiLSZndDtkYXRhWzBdYCkgaWYgdGhlIHBhY2tldCBsZW5ndGggKGBza2ItJmd0O2xlbmApIHdhcyB6ZXJvLiBUaGlzIHBhdGNoIG5lYXRseSBhZGRyZXNzZXMgdGhhdCBieSBhZGRpbmcgYSBjaGVjayB3aXRoIGBwc2tiX21heV9wdWxsKHNrYiwgMSlgLiBJZiB3ZSBjYW4mIzM5O3Qgc2FmZWx5IGFjY2VzcyB0aGUgZmlyc3QgYnl0ZSwgd2UganVzdCBkcm9wIHRoZSBwYWNrZXQgaW1tZWRpYXRlbHkuIFRoaXMgaXMgZmFyIGJldHRlci4KCk5leHQsIEkmIzM5O20gaGFwcHkgdG8gc2VlIHRoYXQgdGhlIHBhdGNoIGNsZWFucyB1cCB0aGUgaGFuZGxpbmcgb2YgTExDIGVuY2Fwc3VsYXRpb24gYW5kIGhlYWQgcm9vbSBhbGxvY2F0aW9uLiBUaGUgb3JpZ2luYWwgYHNrYl9yZWFsbG9jX2hlYWRyb29tYCBmb2xsb3dlZCBieSBgY29uc3VtZV9za2Ioc2tiKWAgbG9naWMgbG9va3MgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWM7IGEgbmV3LCBhbmQgaW1wcm92ZWQsIGFwcHJvYWNoIGlzIGltcGxlbWVudGVkIGhlcmUuIEkgc2VlIHRoYXQgdGhlIHBhdGNoIG5vdyBsZXZlcmFnZXMgYHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pYCB3aGljaCBpcyBmYXIgc3VwZXJpb3IuIEl0IHNlZW1zIHRoYXQgdGhpcyBmdW5jdGlvbiBtYWtlcyBhIGNvcHkgb2YgdGhlIHBhY2tldCBoZWFkZXIgaWYgbmVlZGVkIHRvIGVuc3VyZSB3ZSBoYXZlIGVub3VnaCBoZWFkcm9vbSBhbmQgdGhhdCB0aGUgaGVhZHJvb20gaXMgd3JpdGFibGUuIFRoaXMgYXZvaWRzIHVubmVjZXNzYXJ5IGNvcGllcywgcmVkdWNpbmcgb3ZlcmhlYWQgYW5kIGltcHJvdmluZyBvdmVyYWxsIHBlcmZvcm1hbmNlLgoKQWxzbywgYnkgbW92aW5nIHRoZSBjaGVjayBhbmQgcHJvY2Vzc2luZyB0byAqYWZ0ZXIqIHRoZSBzd2l0Y2ggc3RhdGVtZW50LCB0aGUgb3JpZ2luYWwgbWVzc3kgYW5kIGVycm9yLXByb25lIGBub3NwYWNlYCB1bmRvIGxvZ2ljIGlzIGdvbmUgYW5kIHRoaXMgc2ltcGxpZmllcyB0aGUgY29kZSBhbmQgbWFrZXMgdGhlIGludGVuZGVkIGJlaGF2aW9yIG11Y2ggY2xlYXJlci4KCkZ1cnRoZXJtb3JlLCBJIGFtIHNhdGlzZmllZCB3aXRoIHRoZSBzZXF1ZW5jZSBvZiB0aGUgYHNrYl9wdWxsYCBhbmQgYHNrYl9wdXNoYC4gVGhlIGBza2JfcHVsbGAgaXMgYXBwbGllZCBiZWZvcmUgYHNrYl9wdXNoYCBpcyB1c2VkIHNvIHRoZSBsb2dpYyBpcyBjb25zaXN0ZW50LgoKT3ZlcmFsbCwgdGhpcyBwYXRjaCBzZWVtcyBsaWtlIGEgZ29vZCBpbXByb3ZlbWVudC4gSXQgYWRkcmVzc2VzIHNldmVyYWwgcG90ZW50aWFsIGlzc3VlcyBpbiB0aGUgb3JpZ2luYWwgY29kZSwgaW1wcm92ZXMgZWZmaWNpZW5jeSwgYW5kIG1ha2VzIHRoZSBsb2dpYyBlYXNpZXIgdG8gZm9sbG93LiBUaGUgdXNlIG9mIGBza2JfY293X2hlYWRgIGlzIGEgZ29vZCBjaG9pY2UgdG8gZW5zdXJlIHRoZXJlIGlzIGVub3VnaCBoZWFkIHJvb20uIFRoZSBvcmlnaW5hbCBjb2RlIGZlbHQgb3Zlcmx5IGNvbXBsZXguIEkgdGhpbmsgdGhpcyBpcyBjbGVhbmVyLCBzYWZlciwgYW5kIHByb2JhYmx5IGZhc3Rlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhcnRfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTEwNj1zdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBhc3luY19vcHMgPSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MTA3Olx0LnN0YXJ0X3htaXQgPSBwcHBfYXN5bmNfc2VuZCxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDgtXHQuaW9jdGwgICAgICA9IHBwcF9hc3luY19pb2N0bCxcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz02MTg9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqY29tcGF0X3BwcF9nZXRfZmlsdGVyKHN0cnVjdCBzb2NrX2Zwcm9nMzIgX191c2VyICpwKVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTYzMy0gKiBXaGVuIHR3byBjaGFubmVscyBhcmUgYnJpZGdlZCwgcHBwX2lucHV0IG9uIG9uZSBjaGFubmVsIGlzIHJlZGlyZWN0ZWQgdG9cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjYzNDogKiB0aGUgb3RoZXImIzM5O3Mgb3BzLVx1MDAzZXN0YXJ0X3htaXQgaGFuZGxlci5cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTYzNS0gKiBJbiBvcmRlciB0byBzYWZlbHkgYnJpZGdlIGNoYW5uZWxzIHdlIG11c3QgcmVqZWN0IGNoYW5uZWxzIHdoaWNoIGFyZSBhbHJlYWR5XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MTQ0Nz1zdGF0aWMgbmV0ZGV2X3R4X3RcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjE0NDg6cHBwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE0NDkte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTE2MDk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBwcHBfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNjExLVx0Lm5kb191bmluaXQgICAgICA9IHBwcF9kZXZfdW5pbml0LFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MTYxMjpcdC5uZG9fc3RhcnRfeG1pdCAgPSBwcHBfc3RhcnRfeG1pdCxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE2MTMtXHQubmRvX3Npb2NkZXZwcml2YXRlID0gcHBwX25ldF9zaW9jZGV2cHJpdmF0ZSxcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0xOTA1PXBwcF9wdXNoKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xOTM0LVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MTkzNTpcdFx0cmV0ID0gY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChjaGFuLCBza2IpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTkzNi1cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0xOTYzPXN0YXRpYyBpbnQgcHBwX21wX2V4cGxvZGUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTIxNDQtXHRcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnBjaC1cdTAwM2VmaWxlLnhxKSB8fFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MjE0NTpcdFx0XHQhY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChjaGFuLCBmcmFnKSlcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTIxNDYtXHRcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2cGNoLVx1MDAzZWZpbGUueHEsIGZyYWcpO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTIxNzA9c3RhdGljIHZvaWQgX19wcHBfY2hhbm5lbF9wdXNoKHN0cnVjdCBjaGFubmVsICpwY2gsIHN0cnVjdCBwcHAgKnBwcClcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yMTc3LVx0XHRcdHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnBjaC1cdTAwM2VmaWxlLnhxKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjIxNzg6XHRcdFx0aWYgKCFwY2gtXHUwMDNlY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChwY2gtXHUwMDNlY2hhbiwgc2tiKSkge1xuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMjE3OS1cdFx0XHRcdC8qIHB1dCB0aGUgcGFja2V0IGJhY2sgYW5kIHRyeSBhZ2FpbiBsYXRlciAqL1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTIyODY9c3RhdGljIGJvb2wgcHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0KHN0cnVjdCBjaGFubmVsICpwY2gsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMjMwMi1cdHNrYl9zY3J1Yl9wYWNrZXQoc2tiLCAhbmV0X2VxKHBjaC1cdTAwM2VjaGFuX25ldCwgcGNoYi1cdTAwM2VjaGFuX25ldCkpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MjMwMzpcdGlmICghcGNoYi1cdTAwM2VjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KHBjaGItXHUwMDNlY2hhbiwgc2tiKSlcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTIzMDQtXHRcdGtmcmVlX3NrYihza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTI5OTQ9cHBwX3VucmVnaXN0ZXJfY2hhbm5lbChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMzAwNS1cdCAqIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhdmUgcmV0dXJuZWQgZnJvbSBhbnkgY2FsbHMgaW50b1xuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MzAwNjpcdCAqIHRoZSBjaGFubmVsJiMzOTtzIHN0YXJ0X3htaXQgb3IgaW9jdGwgcm91dGluZSBiZWZvcmUgd2UgcHJvY2VlZC5cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTMwMDctXHQgKi9cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz05Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBzeW5jX29wcyA9IHtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjk0Olx0LnN0YXJ0X3htaXQgPSBwcHBfc3luY19zZW5kLFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtOTUtXHQuaW9jdGwgICAgICA9IHBwcF9zeW5jX2lvY3RsLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTkxOT1zdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcyA9IHtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkyMDpcdC5zdGFydF94bWl0ID0gcHBwb2VfeG1pdCxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTkyMS1cdC5maWxsX2ZvcndhcmRfcGF0aCA9IHBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM9NjA3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwdHBfY2hhbl9vcHMgPSB7XG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjYwODpcdC5zdGFydF94bWl0ID0gcHB0cF94bWl0LFxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYy02MDktXHQuaW9jdGwgICAgICA9IHBwdHBfcHBwX2lvY3RsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDkwMQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDEwMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGggRnV6emluZyBEZWNpc2lvbjogQW5hbHl6aW5nIFBQUG9BVE0gUGFja2V0IFRyYW5zbWlzc2lvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGFib3V0IHRoZSBgc3RhcnRfeG1pdGAgZnVuY3Rpb24gYW5kIGhvdyBQUFAgaGFuZGxlcyBwYWNrZXQgY29uc3VtcHRpb24uIEEgcmV0dXJuIHZhbHVlIG9mIDEgbWVhbnMgdGhlIHBhY2tldCBpcyBmcmVlZCwgMCBtZWFucyBpdCYjMzk7cyBxdWV1ZWQuICBOb3csIHRoZSBgcHBwb2F0bV9zZW5kYCBmdW5jdGlvbiBpcyBrZXkuICBJdCBoYXMgdGhhdCBjaGVjazoKCmBgYGMKCWlmICghcHNrYl9tYXlfcHVsbChza2IsIDEpKSB7CgkJa2ZyZWVfc2tiKHNrYik7CgkJcmV0dXJuIERST1BfUEFDS0VUOwoJfQpgYGAKCkFuZCBgRFJPUF9QQUNLRVRgIGV2YWx1YXRlcyB0byAxLiAgVGhlIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIGNvZGUgKnJlYWNoYWJsZSo/ICBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBwYXRjaCBmdXp6aW5nIHBoaWxvc29waHkuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZ3VpZGFuY2Ugc2F5cy4KCkZyb20gdGhlIGluc3RydWN0aW9ucywgJiMzNDtSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURSYjMzQ7OiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBtb2RpZmllZCBjb2RlIGNhbiBhY3R1YWxseSAqZXhlY3V0ZSogaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVW5yZWFjaGFibGUgY29kZSBpcyBhIG5vLWdvIGZvciBmdXp6aW5nLiAgSSBjYW4mIzM5O3QganVzdCBibGluZGx5IHRydXN0ICYjMzQ7Tm8gRnVuY3Rpb25hbCBDaGFuZ2UmIzM0OyBvciAmIzM0O1JlZmFjdG9yaW5nJiMzNDsgY2xhaW1zLiBBc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMgd2l0aGluIHJlYWNoYWJsZSBjb2RlIGFyZSByaXBlIGZvciBmdXp6aW5nLgoKU2VjdGlvbiAyIHNheXMgJiMzNDtORUdBVElWRSBDUklURVJJQSYjMzQ7OiBJIG5lZWQgdG8gYXZvaWQgYW55dGhpbmcgbm9uLWtlcm5lbCwgbm9uLWV4ZWN1dGFibGUsIG9yIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4gU2VjdGlvbiAzIG91dGxpbmVzIHRoZSAmIzM0O1BPU0lUSVZFIENSSVRFUklBJiMzNDsuIEl0IHNwZWNpZmljYWxseSBjYWxscyBvdXQgY29yZSBzdWJzeXN0ZW1zIChsaWtlIG5ldHdvcmtpbmcpLCByZWZhY3RvcmluZ3MgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGFzc2VydGlvbnMsIGFuZCBkcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMuCgpTbywgaXMgYFBQUG9BVE1gIHBhcnQgb2YgY29yZSBuZXR3b3JraW5nIG9yIGEgcmVhY2hhYmxlIGRyaXZlcj8gWWVzLCBgbmV0L2F0bWAgaXMgcGFydCBvZiBjb3JlIG5ldHdvcmtpbmcuIFRoYXQgaXMgYSBnb29kIHNpZ24uCgpIb3cgY2FuIGBQUFBvQVRNYCBiZSByZWFjaGVkPyBMZXQmIzM5O3MgdHJhY2UgaXQuIEl0IHNlZW1zIHRvIHdvcmsgbGlrZSB0aGlzOgoKMS4gIENyZWF0ZSBhbiBBVE0gc29ja2V0IHVzaW5nIGBzb2NrZXQoUEZfQVRNUFZDLCAuLi4pYCBvciBgc29ja2V0KFBGX0FUTVNWQywgLi4uKWAuCjIuICBDb25uZWN0IHRoZSBzb2NrZXQuIEFuIEFUTSBkZXZpY2UgY2FuIGJlIHJlZ2lzdGVyZWQgdmlhIFVTQiwgdXNpbmcgc29tZXRoaW5nIGxpa2UgYHVzYmF0bWAsIGVtdWxhdGVkIHRocm91Z2ggc3l6a2FsbGVyJiMzOTtzIFVTQiBjYXBhYmlsaXRpZXMgd2l0aCBSYXcgR2FkZ2V0LgozLiAgVGhlbiBJIHVzZSBgaW9jdGwoZmQsIEFUTV9TRVRCQUNLRU5ELCAmYW1wO2JlKWAgd2hlcmUgYGJlLmJhY2tlbmRfbnVtID0gQVRNX0JBQ0tFTkRfUFBQYC4KNC4gIFRoYXQgbGVhZHMgdG8gYHBwcG9hdG1fYXNzaWduX3ZjY2AsIHdoaWNoIGF0dGFjaGVzIHRoZSBBVE0gc29ja2V0IHRvIGEgUFBQIGNoYW5uZWwgdmlhIGBwcHBfcmVnaXN0ZXJfY2hhbm5lbCgmYW1wO3B2Y2MtJmd0O2NoYW4pYC4KNS4gIFRoaXMgaXMgY29ubmVjdGVkIHRvIGEgUFBQIHVuaXQgdmlhIGBpb2N0bCgvZGV2L3BwcCwgUFBQSU9DQVRUQ0hBTiwgLi4uKWAuCjYuICBGaW5hbGx5LCB3cml0aW5nIHRvIGAvZGV2L3BwcGAgb3Igc2VuZGluZyBwYWNrZXRzIHRocm91Z2ggdGhlIGBwcHBgIG5ldHdvcmsgaW50ZXJmYWNlIHRyaWdnZXJzIGBjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQoY2hhbiwgc2tiKWAsIHdoaWNoICppcyogYHBwcG9hdG1fc2VuZGAhCgpDcnVjaWFsbHksIHRoaXMgcGF0Y2ggbW9kaWZpZXMgdHJhbnNtaXQgcGFja2V0IGhhbmRsaW5nIGluIGBwcHBvYXRtX3NlbmRgLiBJdCBjaGFuZ2VzIGhvdyBoZWFkZXIgcmVhbGxvY2F0aW9ucywgaGVhZGVyIHB1bGxzLCBoZWFkZXIgcHVzaGVzLCBhbmQgcGFja2V0IGxlbmd0aCB2YWxpZGF0aW9uIGFyZSBoYW5kbGVkLiBUaGUgZnVuY3Rpb24gaXMgbW9kaWZ5aW5nIGtleSBwYXJ0cyBvZiBuZXR3b3JraW5nLCBhbmQgbmV0d29ya2luZyBpcyBhIGNvcmUgc3Vic3lzdGVtLgoKTm93LCBteSBtaW5kIGlzIGFsc28gdGhpbmtpbmcgaWYgQVRNIGNhbiBzb21laG93IGJlIGNvbm5lY3RlZCBldmVuIHdpdGhvdXQgYSBwaHlzaWNhbCBvciBVU0IgQVRNIGRldmljZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgYWx0ZXJuYXRlIHdheXMgb2YgcmVnaXN0ZXJpbmcgYW4gQVRNIGRldmljZS4gTGV0IG1lIGNoZWNrIHdpdGggYGdyZXBwZXJgIGZvciBgcmVnaXN0ZXJfYXRtZGV2aWNlYCBvciBzb21ldGhpbmcgc2ltaWxhci4gQnV0IGJhc2VkIG9uIG15IGluaXRpYWwgYW5hbHlzaXMsIHRoZSBjb2RlIHBhdGggYXBwZWFycyByZWFjaGFibGUsIGFuZCBpdCYjMzk7cyBtb2RpZnlpbmcgYSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24uIFRoaXMgbG9va3MgcHJvbWlzaW5nIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdpc3Rlcl9hdG0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9hdG1kZXYuaD0yMzU9c3RydWN0IGF0bV9pb2N0bCB7XG4tLVxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0yNDMtLyoqXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oOjI0NDogKiByZWdpc3Rlcl9hdG1faW9jdGwgLSByZWdpc3RlciBoYW5kbGVyIGZvciBpb2N0bCBvcGVyYXRpb25zXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTI0NS0gKiBAaW9jdGw6IGlvY3RsIGhhbmRsZXIgdG8gcmVnaXN0ZXJcbi0tXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTI1MC0gKi9cbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg6MjUxOnZvaWQgcmVnaXN0ZXJfYXRtX2lvY3RsKHN0cnVjdCBhdG1faW9jdGwgKmlvY3RsKTtcbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMjUyLVxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0yNTMtLyoqXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oOjI1NDogKiBkZXJlZ2lzdGVyX2F0bV9pb2N0bCAtIHJlbW92ZSB0aGUgaW9jdGwgaGFuZGxlclxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0yNTUtICogQGlvY3RsOiBpb2N0bCBoYW5kbGVyIHRvIGRlcmVnaXN0ZXJcbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMjU2LSAqL1xuaW5jbHVkZS9saW51eC9hdG1kZXYuaDoyNTc6dm9pZCBkZXJlZ2lzdGVyX2F0bV9pb2N0bChzdHJ1Y3QgYXRtX2lvY3RsICppb2N0bCk7XG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTI1OC1cbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMjU5LVxuaW5jbHVkZS9saW51eC9hdG1kZXYuaDoyNjA6LyogcmVnaXN0ZXJfYXRtZGV2aWNlX25vdGlmaWVyIC0gcmVnaXN0ZXIgYXRtX2RldiBub3RpZnkgZXZlbnRzXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTI2MS0gKlxuLS1cbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMjY0LSAqL1xuaW5jbHVkZS9saW51eC9hdG1kZXYuaDoyNjU6aW50IHJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTtcbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg6MjY2OnZvaWQgdW5yZWdpc3Rlcl9hdG1kZXZpY2Vfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7XG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTI2Ny1cbi0tXG5uZXQvYXRtL2JyMjY4NC5jPTgyNT1zdGF0aWMgaW50IF9faW5pdCBicjI2ODRfaW5pdCh2b2lkKVxuLS1cbm5ldC9hdG0vYnIyNjg0LmMtODMyLSNlbmRpZlxubmV0L2F0bS9icjI2ODQuYzo4MzM6XHRyZWdpc3Rlcl9hdG1faW9jdGwoXHUwMDI2YnIyNjg0X2lvY3RsX29wcyk7XG5uZXQvYXRtL2JyMjY4NC5jOjgzNDpcdHJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllcihcdTAwMjZhdG1fZGV2X25vdGlmaWVyKTtcbm5ldC9hdG0vYnIyNjg0LmMtODM1LVx0cmV0dXJuIDA7XG4tLVxubmV0L2F0bS9icjI2ODQuYz04Mzg9c3RhdGljIHZvaWQgX19leGl0IGJyMjY4NF9leGl0KHZvaWQpXG4tLVxubmV0L2F0bS9icjI2ODQuYy04NDItXHRzdHJ1Y3QgYnIyNjg0X3ZjYyAqYnJ2Y2M7XG5uZXQvYXRtL2JyMjY4NC5jOjg0MzpcdGRlcmVnaXN0ZXJfYXRtX2lvY3RsKFx1MDAyNmJyMjY4NF9pb2N0bF9vcHMpO1xubmV0L2F0bS9icjI2ODQuYy04NDQtXG4tLVxubmV0L2F0bS9icjI2ODQuYy04NDktXG5uZXQvYXRtL2JyMjY4NC5jOjg1MDpcdHVucmVnaXN0ZXJfYXRtZGV2aWNlX25vdGlmaWVyKFx1MDAyNmF0bV9kZXZfbm90aWZpZXIpO1xubmV0L2F0bS9icjI2ODQuYy04NTEtXG4tLVxubmV0L2F0bS9jb21tb24uYz03NTY9aW50IHZjY19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2F0bS9jb21tb24uYy03OTctXG5uZXQvYXRtL2NvbW1vbi5jOjc5ODppbnQgcmVnaXN0ZXJfYXRtZGV2aWNlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpXG5uZXQvYXRtL2NvbW1vbi5jLTc5OS17XG4tLVxubmV0L2F0bS9jb21tb24uYy04MDEtfVxubmV0L2F0bS9jb21tb24uYzo4MDI6RVhQT1JUX1NZTUJPTF9HUEwocmVnaXN0ZXJfYXRtZGV2aWNlX25vdGlmaWVyKTtcbm5ldC9hdG0vY29tbW9uLmMtODAzLVxubmV0L2F0bS9jb21tb24uYzo4MDQ6dm9pZCB1bnJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxubmV0L2F0bS9jb21tb24uYy04MDUte1xuLS1cbm5ldC9hdG0vY29tbW9uLmMtODA3LX1cbm5ldC9hdG0vY29tbW9uLmM6ODA4OkVYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfYXRtZGV2aWNlX25vdGlmaWVyKTtcbm5ldC9hdG0vY29tbW9uLmMtODA5LVxuLS1cbm5ldC9hdG0vaW9jdGwuYz0yND1zdGF0aWMgTElTVF9IRUFEKGlvY3RsX2xpc3QpO1xuLS1cbm5ldC9hdG0vaW9jdGwuYy0yNi1cbm5ldC9hdG0vaW9jdGwuYzoyNzp2b2lkIHJlZ2lzdGVyX2F0bV9pb2N0bChzdHJ1Y3QgYXRtX2lvY3RsICppb2N0bClcbm5ldC9hdG0vaW9jdGwuYy0yOC17XG4tLVxubmV0L2F0bS9pb2N0bC5jLTMyLX1cbm5ldC9hdG0vaW9jdGwuYzozMzpFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX2F0bV9pb2N0bCk7XG5uZXQvYXRtL2lvY3RsLmMtMzQtXG5uZXQvYXRtL2lvY3RsLmM6MzU6dm9pZCBkZXJlZ2lzdGVyX2F0bV9pb2N0bChzdHJ1Y3QgYXRtX2lvY3RsICppb2N0bClcbm5ldC9hdG0vaW9jdGwuYy0zNi17XG4tLVxubmV0L2F0bS9pb2N0bC5jLTQwLX1cbm5ldC9hdG0vaW9jdGwuYzo0MTpFWFBPUlRfU1lNQk9MKGRlcmVnaXN0ZXJfYXRtX2lvY3RsKTtcbm5ldC9hdG0vaW9jdGwuYy00Mi1cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYz00NjY9c3RhdGljIGludCBfX2luaXQgcHBwb2F0bV9pbml0KHZvaWQpXG5uZXQvYXRtL3BwcG9hdG0uYy00Njcte1xubmV0L2F0bS9wcHBvYXRtLmM6NDY4Olx0cmVnaXN0ZXJfYXRtX2lvY3RsKFx1MDAyNnBwcG9hdG1faW9jdGxfb3BzKTtcbm5ldC9hdG0vcHBwb2F0bS5jLTQ2OS1cdHJldHVybiAwO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jPTQ3Mj1zdGF0aWMgdm9pZCBfX2V4aXQgcHBwb2F0bV9leGl0KHZvaWQpXG5uZXQvYXRtL3BwcG9hdG0uYy00NzMte1xubmV0L2F0bS9wcHBvYXRtLmM6NDc0Olx0ZGVyZWdpc3Rlcl9hdG1faW9jdGwoXHUwMDI2cHBwb2F0bV9pb2N0bF9vcHMpO1xubmV0L2F0bS9wcHBvYXRtLmMtNDc1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQwOTMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEFUTSBEZXZpY2UgUmVnaXN0cmF0aW9uKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IEFUTSwgYW5kIEkmIzM5O20gc3R1Y2sgb24gYGF0bV9kZXZfcmVnaXN0ZXJgLiBUaGF0IGZ1bmN0aW9uIGlzIGtleSwgcmlnaHQ/IFdoZXJlIGFyZSB3ZSBhY3R1YWxseSByZWdpc3RlcmluZyBBVE0gZGV2aWNlcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggaGVyZS4gTGV0IG1lIHRoaW5rLCBJIHJlbWVtYmVyIGdyZXBwaW5nIGZvciBgYXRtX2Rldl9yZWdpc3RlcihgIGVhcmxpZXIsIGFuZCBnb3QgYSBmZXcgaGl0czogYGRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jYCwgYGRyaXZlcnMvdXNiL2F0bS91c2JhdG0uY2AsIGFuZCwgb2YgY291cnNlLCB0aGUgZGVmaW5pdGlvbiBpdHNlbGYgaW4gYG5ldC9hdG0vcmVzb3VyY2VzLmNgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgc2hvd2luZyBQQ0kgYW5kIFVTQiBkZXZpY2VzIHBvdGVudGlhbGx5IGJlaW5nIHJlZ2lzdGVyZWQuCgpCdXQgdGhhdCYjMzk7cyBub3QgZW5vdWdoOyBJIGhhdmUgdG8gYmUgdGhvcm91Z2guIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiByZWZlcmVuY2VzIHRvIGBhdG1fZGV2X3JlZ2lzdGVyYCB0aGF0IGFyZSBub3QgZnVuY3Rpb24gY2FsbHMuIE1heWJlIHRoZXJlJiMzOTtzIHNvbWUgc3VidGxlIGxpbmthZ2UgSSYjMzk7bSBtaXNzaW5nIGJlY2F1c2UgSSYjMzk7bSBvbmx5IGxvb2tpbmcgZm9yIHRoZSB0eXBpY2FsIGZ1bmN0aW9uIGNhbGwgc3ludGF4PyBJJiMzOTtsbCBjaGVjayBmb3IgdGhhdC4gSXQgd291bGQgYmUgYSBzaWxseSBvdmVyc2lnaHQuIExldCBtZSBzZWUgd2hhdCBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdG1fZGV2X3JlZ2lzdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jPTEzNDg9c3RhdGljIGludCBhdG1faW5pdChzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCwgc3RydWN0IGRldmljZSAqcGFyZW50KVxuLS1cbmRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jLTEzNTgtXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYzoxMzU5Olx0XHRjYXJkLVx1MDAzZWF0bWRldltpXSA9IGF0bV9kZXZfcmVnaXN0ZXIoXCYjMzQ7c29sb3MtcGNpXCYjMzQ7LCBwYXJlbnQsIFx1MDAyNmZwZ2Ffb3BzLCAtMSwgTlVMTCk7XG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYy0xMzYwLVx0XHRpZiAoIWNhcmQtXHUwMDNlYXRtZGV2W2ldKSB7XG4tLVxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jPTkwMT1zdGF0aWMgaW50IHVzYmF0bV9hdG1faW5pdChzdHJ1Y3QgdXNiYXRtX2RhdGEgKmluc3RhbmNlKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy05MDktXHQgKiBhYm9ydCBpZiBhdG1fZGV2LVx1MDAzZWRldl9kYXRhIGlzIE5VTEwuICovXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmM6OTEwOlx0YXRtX2RldiA9IGF0bV9kZXZfcmVnaXN0ZXIoaW5zdGFuY2UtXHUwMDNlZHJpdmVyX25hbWUsXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMtOTExLVx0XHRcdFx0ICAgXHUwMDI2aW5zdGFuY2UtXHUwMDNldXNiX2ludGYtXHUwMDNlZGV2LCBcdTAwMjZ1c2JhdG1fYXRtX2Rldm9wcyxcbi0tXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oPTE1Mj1leHRlcm4gcndsb2NrX3QgdmNjX3NrbGlzdF9sb2NrO1xuLS1cbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMTU1LVxuaW5jbHVkZS9saW51eC9hdG1kZXYuaDoxNTY6c3RydWN0IGF0bV9kZXYgKmF0bV9kZXZfcmVnaXN0ZXIoY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IGRldmljZSAqcGFyZW50LFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0xNTctXHRcdFx0XHQgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcyxcbi0tXG5uZXQvYXRtL3Jlc291cmNlcy5jPTY5PUVYUE9SVF9TWU1CT0woYXRtX2Rldl9sb29rdXApO1xubmV0L2F0bS9yZXNvdXJjZXMuYy03MC1cbm5ldC9hdG0vcmVzb3VyY2VzLmM6NzE6c3RydWN0IGF0bV9kZXYgKmF0bV9kZXZfcmVnaXN0ZXIoY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IGRldmljZSAqcGFyZW50LFxubmV0L2F0bS9yZXNvdXJjZXMuYy03Mi1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYXRtZGV2X29wcyAqb3BzLCBpbnQgbnVtYmVyLFxuLS1cbm5ldC9hdG0vcmVzb3VyY2VzLmMtMTMxLX1cbm5ldC9hdG0vcmVzb3VyY2VzLmM6MTMyOkVYUE9SVF9TWU1CT0woYXRtX2Rldl9yZWdpc3Rlcik7XG5uZXQvYXRtL3Jlc291cmNlcy5jLTEzMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ5ODAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxMzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVVNCIEFUTSBNb2RlbXMgYW5kIFBQUCBvdmVyIEFUTSBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgZnV6emluZyB0aGUgVVNCIEFUTSBtb2RlbSBkcml2ZXIgKGBkcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmNgKS4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQgcmVnaXN0ZXJzIGFuIEFUTSBkZXZpY2Ugd2hlbiBhIFVTQiBBVE0gbW9kZW0gY29ubmVjdHMsIGFuZCBzeXprYWxsZXIgY2FuIGVtdWxhdGUgdGhpcyB1c2luZyBSYXcgR2FkZ2V0L0R1bW15IEhDRC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgpCdXQgdGhlbiwgSSBuZWVkIHRvIGNvbnNpZGVyIGBwcHBvYXRtYCwgd2hpY2ggaW1wbGVtZW50cyBQUFAgb3ZlciBBVE0gaW4gYG5ldC9hdG0vcHBwb2F0bS5jYC4gIEkgc2VlIHRoYXQgYHBwcG9hdG1fc2VuZGAgaXMgdGhlIGNydWNpYWwgZnVuY3Rpb24gZm9yIHRyYW5zbWl0dGluZyBQUFAgcGFja2V0cyBvdmVyIHRoZSBBVE0gbmV0d29yay4gVGhpcyBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIHRhcmdldC4KCkxldCYjMzk7cyBicmVhayBkb3duIHdoeSB0aGlzIGlzIHdvcnRoIGZ1enppbmc6ICBJdCYjMzk7cyBpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0gKGBuZXQvYXRtL2ApLiBJdCBoYW5kbGVzIHBhY2tldCB0cmFuc21pc3Npb24gbG9naWMsIGluY2x1ZGluZyBoZWFkcm9vbSBtYW5hZ2VtZW50IHdpdGggZnVuY3Rpb25zIGxpa2UgYHNrYl9jb3dfaGVhZGAsIGBza2JfcHVsbGAsIGBza2JfcHVzaGAsIG1lbW9yeSBtYW5hZ2VtZW50IChhbGxvY2F0aW5nIGhlYWRyb29tLCBlcnJvciBoYW5kbGluZywgc2tiIGZyZWVpbmcpLCBhbmQgaXQgdXNlcyBib3VuZHMgY2hlY2tpbmcgKGBwc2tiX21heV9wdWxsYCkuICBUaGUgcmVhY2hhYmlsaXR5IGxvb2tzIHNvbGlkOiBhIHN0YW5kYXJkIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHdpdGggUFBQIGNoYW5uZWxzLCBhbmQgd2l0aCBzeXprYWxsZXImIzM5O3MgVVNCIGdhZGdldCBlbXVsYXRpb24gd2UgY2FuIGRlZmluaXRlbHkgcmVhY2ggaXQsIGJ5IGVtdWxhdGluZyBhIFVTQiBBVE0gbW9kZW0uCgpOb3csIEkmIzM5O20gZGlnZ2luZyBkZWVwZXIgdG8gZmluZCBvdGhlciB3YXlzIGFuIEFUTSB2aXJ0dWFsIGNpcmN1aXQgY29ubmVjdGlvbiAoYXRtX3ZjYykgbWlnaHQgYmUgY3JlYXRlZC4gIFRoZSBgQVRNX0JBQ0tFTkRfUFBQYCBvcHRpb24gaXMgaW50ZXJlc3RpbmcuIEkmIzM5O20gcmV2aWV3aW5nIGBwcHBvYXRtX2Fzc2lnbl92Y2NgIHdoaWNoIGlzIGNhbGxlZCBieSBgcHBwb2F0bV9pb2N0bGAuICBFc3NlbnRpYWxseSwgYSB1c2VyLXNwYWNlIHByb2Nlc3Mgd291bGQgbmVlZCB0byBvcGVuIGEgUFBQIGRldmljZSwgdXNlIGBQUFBJT0NBVFRDSEFOYCBhbmQgYFBQUElPQ0NPTk5FQ1RgLCBhbmQgdGhlbiBlaXRoZXIgd3JpdGUgZGlyZWN0bHkgdG8gdGhlIFBQUCBkZXZpY2UsIG9yIHNldCB1cCBhIFBQUCBuZXR3b3JrIGludGVyZmFjZSwgd2hpY2ggdGhlbiB1c2VzIGBjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQoY2hhbiwgc2tiKWAgdG8gc2VuZCBwYWNrZXRzLiAgVGhpcyAqaXMqIGBwcHBvYXRtX3NlbmRgLgoKUmVnYXJkaW5nIGZ1enppbmcsIGBwcHBvYXRtX3NlbmRgIGlzIG15IHByaW1hcnkgdGFyZ2V0LCBhcyB0aGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBtb2RpZmljYXRpb25zIGFyZSB0YWtpbmcgcGxhY2UuIEl0JiMzOTtzIG1hcmtlZCBhcyBgc3RhdGljYCBpbiBgbmV0L2F0bS9wcHBvYXRtLmNgLCBidXQgc2luY2UgaXQmIzM5O3MgdXNlZCBpbiBhIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aGluIGBwcHBvYXRtX29wc2AsIHRoZSBjb21waWxlciAqY2Fubm90KiBpbmxpbmUgaXQgYXdheTsgaXQgd2lsbCBoYXZlIGEgcmVhbCBzeW1ib2wgYWRkcmVzcy4gSSBuZWVkIHRvIG5vdGUgYW55IG90aGVyIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGBuZXQvYXRtL3BwcG9hdG0uY2AsIHNvIEkgd2lsbCBjaGVjayB0aGVzZSBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aMC05X10mIzQzOy4qXFwoLipcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtL3BwcG9hdG0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYXRtL3BwcG9hdG0uYz04Nj1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwcHBsbGNbNl0gPSB7IDB4RkUsIDB4RkUsIDB4MDMsIDB4Q0YsIDB4QzAsIDB4MjEgfTtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy04OC1cbm5ldC9hdG0vcHBwb2F0bS5jOjg5OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG9hdG1fdmNjICphdG12Y2NfdG9fcHZjYyhjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxubmV0L2F0bS9wcHBvYXRtLmMtOTAte1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTkzLVxubmV0L2F0bS9wcHBvYXRtLmM6OTQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmNoYW5fdG9fcHZjYyhjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG5uZXQvYXRtL3BwcG9hdG0uYy05NS17XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMTAzLSAqL1xubmV0L2F0bS9wcHBvYXRtLmM6MTA0OnN0YXRpYyB2b2lkIHBwcG9hdG1fd2FrZXVwX3NlbmRlcihzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXG5uZXQvYXRtL3BwcG9hdG0uYy0xMDUte1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTExMC1cbm5ldC9hdG0vcHBwb2F0bS5jOjExMTpzdGF0aWMgdm9pZCBwcHBvYXRtX3JlbGVhc2VfY2Ioc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcbm5ldC9hdG0vcHBwb2F0bS5jLTExMi17XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMTMzLSAqL1xubmV0L2F0bS9wcHBvYXRtLmM6MTM0OnN0YXRpYyB2b2lkIHBwcG9hdG1fcG9wKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYXRtL3BwcG9hdG0uYy0xMzUte1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTE2Ni0gKi9cbm5ldC9hdG0vcHBwb2F0bS5jOjE2NzpzdGF0aWMgdm9pZCBwcHBvYXRtX3VuYXNzaWduX3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxubmV0L2F0bS9wcHBvYXRtLmMtMTY4LXtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0xODAtLyogQ2FsbGVkIHdoZW4gYW4gQUFMNSBQRFUgY29tZXMgaW4gKi9cbm5ldC9hdG0vcHBwb2F0bS5jOjE4MTpzdGF0aWMgdm9pZCBwcHBvYXRtX3B1c2goc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9hdG0vcHBwb2F0bS5jLTE4Mi17XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMjMzLVxubmV0L2F0bS9wcHBvYXRtLmM6MjM0OnN0YXRpYyBpbnQgcHBwb2F0bV9tYXlfc2VuZChzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MsIGludCBzaXplKVxubmV0L2F0bS9wcHBvYXRtLmMtMjM1LXtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0yODgtI2RlZmluZSBEUk9QX1BBQ0tFVCAxXG5uZXQvYXRtL3BwcG9hdG0uYzoyODk6c3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2F0bS9wcHBvYXRtLmMtMjkwLXtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYz0zNzU9c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2F0bV9vcHMgPSB7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMzc5LVxubmV0L2F0bS9wcHBvYXRtLmM6MzgwOnN0YXRpYyBpbnQgcHBwb2F0bV9hc3NpZ25fdmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICphcmcpXG5uZXQvYXRtL3BwcG9hdG0uYy0zODEte1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jPTQ2MT1zdGF0aWMgc3RydWN0IGF0bV9pb2N0bCBwcHBvYXRtX2lvY3RsX29wcyA9IHtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy00NjUtXG5uZXQvYXRtL3BwcG9hdG0uYzo0NjY6c3RhdGljIGludCBfX2luaXQgcHBwb2F0bV9pbml0KHZvaWQpXG5uZXQvYXRtL3BwcG9hdG0uYy00Njcte1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTQ3MS1cbm5ldC9hdG0vcHBwb2F0bS5jOjQ3MjpzdGF0aWMgdm9pZCBfX2V4aXQgcHBwb2F0bV9leGl0KHZvaWQpXG5uZXQvYXRtL3BwcG9hdG0uYy00NzMte1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTQ3Ni1cbm5ldC9hdG0vcHBwb2F0bS5jOjQ3Nzptb2R1bGVfaW5pdChwcHBvYXRtX2luaXQpO1xubmV0L2F0bS9wcHBvYXRtLmM6NDc4Om1vZHVsZV9leGl0KHBwcG9hdG1fZXhpdCk7XG5uZXQvYXRtL3BwcG9hdG0uYy00NzktXG5uZXQvYXRtL3BwcG9hdG0uYzo0ODA6TU9EVUxFX0FVVEhPUihcJiMzNDtNaXRjaGVsbCBCbGFuayBKciBcdTAwM2NtaXRjaEBzZmdvdGguY29tXHUwMDNlXCYjMzQ7KTtcbm5ldC9hdG0vcHBwb2F0bS5jOjQ4MTpNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7UkZDMjM2NCBQUFAgb3ZlciBBVE0vQUFMNVwmIzM0Oyk7XG5uZXQvYXRtL3BwcG9hdG0uYzo0ODI6TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgwNjcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUFBQb0FUTSBLZXJuZWwgTW9kdWxlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBtb2RpZmljYXRpb25zLCBzbyB0aGUgY29yZSBmdW5jdGlvbiB0byBleGFtaW5lIGlzIGBwcHBvYXRtX3NlbmRgLiBJdCYjMzk7cyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24sIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2VzIGxpZXMuIFRoZSBzZXR1cCBwb2ludHMgYXBwZWFyIHRvIGJlIGBwcHBvYXRtX2Fzc2lnbl92Y2NgIGFuZCBgcHBwb2F0bV9pb2N0bGAuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gYHBwcG9hdG1fbWF5X3NlbmRgIGxvb2tzIHByb21pc2luZywgSSBuZWVkIHRvIHNlZSBpZiBpdOKAmXMgc3RhdGljLiBZZXMsIGl0IGlzLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBwcHBvYXRtX3NlbmRgLCBzbyB0aGF04oCZcyBpbnRlcmVzdGluZy4gRm9yIG15IEZvY3VzU3ltYm9scywgSeKAmWxsIGRlZmluaXRlbHkgbmVlZDoKCiogICBgcHBwb2F0bV9zZW5kYAoqICAgYHBwcG9hdG1fYXNzaWduX3ZjY2AKKiAgIFBvdGVudGlhbGx5LCBgcHBwb2F0bV9kZXZwcHBfaW9jdGxgICpvciogYHBwcG9hdG1faW9jdGxgLCBJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSBtb3JlIGNvbW1vbiBgcHBwb2F0bV9pb2N0bGAuIEJ1dCBgcHBwb2F0bV9zZW5kYCBpcyB0aGUgcHJpbWFyeSBjYW5kaWRhdGUgaGVyZS4gSXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIHBhY2tldCB0cmFuc21pc3Npb24uCgpHaXZlbiB0aGF0IHRoaXMgaXMgUFBQb0FUTSwgSSYjMzk7bSBwcmV0dHkgY2VydGFpbiBgcHBwb2F0bV9zZW5kYCBpc24mIzM5O3QgdXNlZCBldmVyeXdoZXJlLiBJdCYjMzk7cyBkZWZpbml0ZWx5IHNwZWNpZmljIHRvIHRyYW5zbWl0dGluZyBwYWNrZXRzIG92ZXIgQVRNLCBzbyBub3QgYSBnZW5lcmFsLXB1cnBvc2UgZnVuY3Rpb24uCgpOb3csIHRvIGRldGVybWluZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCwgSSBuZWVkIHRvIGNhcmVmdWxseSByZXZpZXcgdGhlIEtjb25maWcgZmlsZXMuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYC4KYGBga2NvbmZpZwppZiBQUFAKCmNvbmZpZyBQUFBPQVRNCgl0cmlzdGF0ZSAmIzM0O1BQUCBvdmVyIEFUTSYjMzQ7CglkZXBlbmRzIG9uIEFUTQpgYGAKQmFzZWQgb24gdGhlIGZpbGUsIHRoZSBjb25maWd1cmF0aW9ucyBhcmU6CgoqICAgYFBQUE9BVE1gCiogICBgUFBQYAoqICAgYEFUTWAKCkkmIzM5O2xsIGFsc28gdmVyaWZ5IHRoYXQgYEFUTWAgaXNuJiMzOTt0IGNvbnRpbmdlbnQgb24gYW55dGhpbmcgZWxzZS4gSSYjMzk7bGwgY2hlY2sgYG5ldC9hdG0vS2NvbmZpZ2AgdG8gYmUgc3VyZS4gVGhhdCBzaG91bGQgYmUgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9hdG0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIEFzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlIChBVE0pXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBBVE1cbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O0FzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlIChBVE0pXCYjMzQ7XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIEFUTSBpcyBhIGhpZ2gtc3BlZWQgbmV0d29ya2luZyB0ZWNobm9sb2d5IGZvciBMb2NhbCBBcmVhIE5ldHdvcmtzXG4gIDEwOlx0XHQgIGFuZCBXaWRlIEFyZWEgTmV0d29ya3MuICBJdCB1c2VzIGEgZml4ZWQgcGFja2V0IHNpemUgYW5kIGlzXG4gIDExOlx0XHQgIGNvbm5lY3Rpb24gb3JpZW50ZWQsIGFsbG93aW5nIGZvciB0aGUgbmVnb3RpYXRpb24gb2YgbWluaW11bVxuICAxMjpcdFx0ICBiYW5kd2lkdGggcmVxdWlyZW1lbnRzLlxuICAxMzpcdFxuICAxNDpcdFx0ICBJbiBvcmRlciB0byBwYXJ0aWNpcGF0ZSBpbiBhbiBBVE0gbmV0d29yaywgeW91ciBMaW51eCBib3ggbmVlZHMgYW5cbiAgMTU6XHRcdCAgQVRNIG5ldHdvcmtpbmcgY2FyZC4gSWYgeW91IGhhdmUgdGhhdCwgc2F5IFkgaGVyZSBhbmQgdG8gdGhlIGRyaXZlclxuICAxNjpcdFx0ICBvZiB5b3VyIEFUTSBjYXJkIGJlbG93LlxuICAxNzpcdFxuICAxODpcdFx0ICBOb3RlIHRoYXQgeW91IG5lZWQgYSBzZXQgb2YgdXNlci1zcGFjZSBwcm9ncmFtcyB0byBhY3R1YWxseSBtYWtlIHVzZVxuICAxOTpcdFx0ICBvZiBBVE0uICBTZWUgdGhlIGZpbGUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXRtLnJzdFx1MDAzZSBmb3JcbiAgMjA6XHRcdCAgZnVydGhlciBkZXRhaWxzLlxuICAyMTpcdFxuICAyMjpcdGNvbmZpZyBBVE1fQlIyNjg0XG4gIDIzOlx0XHR0cmlzdGF0ZSBcJiMzNDtSRkMxNDgzLzI2ODQgQnJpZGdlZCBwcm90b2NvbHNcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gQVRNIFx1MDAyNlx1MDAyNiBJTkVUXG4gIDI1Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MTM4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBUaG91Z2h0cyoqCgpPa2F5LCBzbyBJJiMzOTttIGNvbmZpZ3VyaW5nIHRoaXMgc3lzdGVtLCBhbmQgSSYjMzk7dmUgZ290IGEgbGl0dGxlIGRlcGVuZGVuY3kgcHV6emxlIHRvIHNvcnQgb3V0LiBJdCBsb29rcyBsaWtlIGBBVE1gIGl0c2VsZiBzdGFuZHMgYWxvbmUg4oCTIGl0IGRvZXNuJiMzOTt0IHJlbHkgb24gYW55dGhpbmcgZWxzZSBkaXJlY3RseSwgYWNjb3JkaW5nIHRvIHRoaXMgaW5pdGlhbCBhc3Nlc3NtZW50LiBUaGVuIHdlIGhhdmUgYFBQUE9BVE1gLiBUaGF0IG9uZSBpcyBhIGJpdCBtb3JlIGNvbmRpdGlvbmFsOyBpdCYjMzk7cyB0dWNrZWQgYXdheSBpbnNpZGUgYW4gYGlmIFBQUGAgc3RhdGVtZW50LCBhbmQgY3J1Y2lhbGx5LCBpdCAqZGVwZW5kcyogb24gYEFUTWAuIAoKVGhlcmVmb3JlLCBteSBjb25maWd1cmF0aW9uIG5lZWRzIHRvIGluY2x1ZGU6CgoxLiAgYEFUTWAKMi4gIGBQUFBgCjMuICBgUFBQT0FUTWAKCkJ1dCwga25vd2luZyBob3cgdGhlc2UgdGhpbmdzIGdvLCBJIGNhbiYjMzk7dCBqdXN0IHRha2UgdGhpcyBhdCBmYWNlIHZhbHVlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHN1YnRsZSBkZXBlbmRlbmNpZXMgb3IgcmVxdWlyZW1lbnRzIGx1cmtpbmcgYXJvdW5kLiBUbyBiZSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBuZXQvS2NvbmZpZ2AgdG8gc2VlIGV4YWN0bHkgKmhvdyogYG5ldC9hdG0vS2NvbmZpZ2AgaXMgcHVsbGVkIGludG8gdGhlIG92ZXJhbGwgcGljdHVyZS4gSSBuZWVkIHRoZSBmdWxsIGNvbnRleHQgdG8gYmUgY29uZmlkZW50IGluIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvdXJjZS4qbmV0L2F0bS9LY29uZmlnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0yNTY9c291cmNlIFwmIzM0O25ldC90aXBjL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI1Nzpzb3VyY2UgXCYjMzQ7bmV0L2F0bS9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy0yNTgtc291cmNlIFwmIzM0O25ldC9sMnRwL0tjb25maWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk1NDQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgTmV0d29yayBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZXNlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgc3RydWN0dXJlZC4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgYG5ldC9hdG0vS2NvbmZpZ2AgaXMgZGlyZWN0bHkgaW5jbHVkZWQgaW4gYG5ldC9LY29uZmlnYCwgd2hpY2ggaXMgdW5kZXIgdGhlIGBtZW51Y29uZmlnIE5FVGAgc2VjdGlvbi4gVGhhdCBtYWtlcyBzZW5zZSwga2VlcHMgdGhpbmdzIG9yZ2FuaXplZC4gTm93LCB0aGUgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCBpcyBhbHNvIGluY2x1ZGVkLCBidXQgdGhpcyB0aW1lIGluIGBkcml2ZXJzL25ldC9LY29uZmlnYC4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciBhbnkgY29uZGl0aW9uYWwgcGFyZW50IG1lbnVzIHRoYXQgbWlnaHQgYWZmZWN0IGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBQUFAgY29uZmlndXJhdGlvbnMgYXJlIG9ubHkgdmlzaWJsZSBvciBlbmFibGVkIHVuZGVyIHRoZSBleHBlY3RlZCBjaXJjdW1zdGFuY2VzLiBObyBwb2ludCBpbiB3YWRpbmcgdGhyb3VnaCBleHRyYW5lb3VzIG9wdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgcGFydGljdWxhciBkcml2ZXIgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYmVpbmcgY29udHJvbGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c291cmNlLipkcml2ZXJzL25ldC9wcHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTUyNj1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvcGxpcC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnLTUyNy1cbmRyaXZlcnMvbmV0L0tjb25maWc6NTI4OnNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZy01MjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5OTA3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBzb21ldGhpbmcgbmV0d29yay1yZWxhdGVkLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgc2VlbSBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIGRldmljZSBkcml2ZXJzIGFyZSBzZXQgdXAuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHRoZSBwcmltYXJ5IEtjb25maWcgZmlsZSBmb3IgbmV0d29yayBkcml2ZXJzIHNob3VsZCBiZSBpbiB0aGUgYGRyaXZlcnMvbmV0YCBkaXJlY3RvcnksIGFuZCBpdCBtYWtlcyBzZW5zZSB0byBzdGFydCB3aXRoIGBLY29uZmlnYC4gTm93LCB3aGVyZSB3YXMgdGhhdCBzcGVjaWZpYyBvcHRpb24gSSB3YXMgbG9va2luZyBmb3I/IFJpZ2h0LCBJIHNlZW0gdG8gcmVjYWxsIGl0IGJlaW5nIG5lYXIgbGluZSA1MjguIExldCYjMzk7cyBzdGFydCB0aGVyZS4gSSYjMzk7bGwgbmVlZCB0byBvcGVuIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQmIzM5O3MgYmVpbmcgZGVmaW5lZCBhcm91bmQgdGhhdCBzcGVjaWZpYyBsaW5lLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCB0byByZWZyZXNoIG15IG1lbW9yeSBvciBkaWcgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MjA6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXCYjMzQ7XG4gNTIxOlx0XG4gNTIyOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1wmIzM0O1xuIDUyMzpcdFxuIDUyNDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wY3MvS2NvbmZpZ1wmIzM0O1xuIDUyNTpcdFxuIDUyNjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wbGlwL0tjb25maWdcJiMzNDtcbiA1Mjc6XHRcbiA1Mjg6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWdcJiMzNDtcbiA1Mjk6XHRcbiA1MzA6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnXCYjMzQ7XG4gNTMxOlx0XG4gNTMyOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvczM5MC9uZXQvS2NvbmZpZ1wmIzM0O1xuIDUzMzpcdFxuIDUzNDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wmIzM0O1xuIDUzNTpcdFxuIDUzNjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnXCYjMzQ7XG4gNTM3Olx0XG4gNTM4Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnXCYjMzQ7XG4gNTM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNDA5CgkJCQkJCQlvdXRwdXQ6IDE2MQoJCQkJCQkJdGhvdWdodHM6IDI2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQUFAgT3ZlciBBVE0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBzdHJhaWdodDogdG8gZ2V0IHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgdXAgYW5kIHJ1bm5pbmcsIEkgYWJzb2x1dGVseSBuZWVkIGBQUFBgLCBgUFBQT0FUTWAsIGFuZCBgQVRNYCBlbmFibGVkLiBUaG9zZSBhcmUgdGhlIGVzc2VudGlhbHMuIElmIEkgd2FudCB0byB0aHJvdyBpbiBVU0IgZW11bGF0aW9uIGZvciB0ZXN0aW5nLCB0aGVuIGBVU0JfQVRNYCBvciBgVVNCX1JBV19HQURHRVRgIGNvdWxkIGJlIHVzZWZ1bCwgYnV0IHRob3NlIGFyZSBleHRyYXMuIFRoZSBjcml0aWNhbCBjb25maWdzIGFyZSwgYWdhaW4sIGBQUFBgLCBgQVRNYCwgYW5kIGBQUFBPQVRNYC4KCkxldCBtZSBqdXN0IHJ1biB0aHJvdWdoIG15IGNoZWNrbGlzdCB0byBtYWtlIGFic29sdXRlbHkgY2VydGFpbiBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gYmUgKnN1cmUqOgoKMS4gICoqV29ydGhGdXp6aW5nOioqIFllcCwgZGVmaW5pdGVseS4gVGhpcyBwYXRjaCB0b3VjaGVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB3aXRoaW4gYG5ldC9hdG0vcHBwb2F0bS5jYCwgc3BlY2lmaWNhbGx5IGBwcHBvYXRtX3NlbmRgLiBJdCYjMzk7cyBhbHRlcmluZyBob3cgd2UgaGFuZGxlIFNLQiBidWZmZXJzIOKAkyB0aGluZ3MgbGlrZSBgc2tiX2Nvd19oZWFkYCwgYHNrYl9wdWxsYCwgYHNrYl9wdXNoYCDigJMgYW5kIGFsc28gcGFja2V0IHZhbGlkYXRpb24gdXNpbmcgYHBza2JfbWF5X3B1bGxgLCBhbG9uZyB3aXRoIGVycm9yIGhhbmRsaW5nIGZvciBQUFAgb3ZlciBBVE0gZnJhbWUgdHJhbnNtaXNzaW9uLiBUaGlzIGNvZGUmIzM5O3MgdG90YWxseSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIEFUTSBhbmQgUFBQIGludGVyZmFjZXMsIGluY2x1ZGluZywgbGlrZSwgZW11bGF0ZWQgVVNCIEFUTSBkZXZpY2VzIHZpYSBVU0IgZ2FkZ2V0cywgd2hpY2ggaXMgZ3JlYXQgZm9yIHRlc3RpbmcuCjIuICAqKkZvY3VzU3ltYm9sczoqKiBJJiMzOTt2ZSBuYWlsZWQgZG93biB0aGUga2V5IHN5bWJvbHM6IGBwcHBvYXRtX3NlbmRgIGFuZCBgcHBwb2F0bV9hc3NpZ25fdmNjYC4KMy4gICoqRW5hYmxlQ29uZmlnczoqKiBJJiMzOTttIGNvbmZpcm1pbmcgYEFUTWAsIGBQUFBgLCBhbmQgYFBQUE9BVE1gIGFyZSBhbGwgZW5hYmxlZCBhbmQgdmVyaWZpZWQsIHdoaWNoIHRoZXkgYXJlLgoKUmlnaHQsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dCBwZXJmZWN0bHkuIFRoZSBzb3VyY2UgZmlsZXMgYXJlIGFsbCBpbiBvcmRlci4gSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBVE0mIzM0OywKICAgICYjMzQ7UFBQJiMzNDssCiAgICAmIzM0O1BQUE9BVE0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcHBvYXRtX3NlbmQmIzM0OywKICAgICYjMzQ7cHBwb2F0bV9hc3NpZ25fdmNjJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyBwYWNrZXQgdHJhbnNtaXNzaW9uIGhhbmRsaW5nIGFuZCBidWZmZXIgbWFuYWdlbWVudCBpbiBwcHBvYXRtX3NlbmQgd2l0aGluIG5ldC9hdG0vcHBwb2F0bS5jLiBJdCByZXBsYWNlcyBza2JfcmVhbGxvY19oZWFkcm9vbSB3aXRoIHNrYl9jb3dfaGVhZCwgcmVzdHJ1Y3R1cmVzIHRoZSBvcmRlciBvZiBza2JfcHVsbCBhbmQgc2tiX3B1c2gsIHJlbW92ZXMgdGhlIHVuZG8gbG9naWMgb24gc2VuZCBmYWlsdXJlLCBhbmQgYWRkcyBpbnB1dCB2YWxpZGF0aW9uIHZpYSBwc2tiX21heV9wdWxsLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBwYXRocyB0aGF0IGNhbiBiZSBleGVyY2lzZWQgdmlhIFBQUCBvdmVyIEFUTSBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QVRNJiMzNDssCiAgICAmIzM0O1BQUCYjMzQ7LAogICAgJiMzNDtQUFBPQVRNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHBwb2F0bV9zZW5kJiMzNDssCiAgICAmIzM0O3BwcG9hdG1fYXNzaWduX3ZjYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgcGFja2V0IHRyYW5zbWlzc2lvbiBoYW5kbGluZyBhbmQgYnVmZmVyIG1hbmFnZW1lbnQgaW4gcHBwb2F0bV9zZW5kIHdpdGhpbiBuZXQvYXRtL3BwcG9hdG0uYy4gSXQgcmVwbGFjZXMgc2tiX3JlYWxsb2NfaGVhZHJvb20gd2l0aCBza2JfY293X2hlYWQsIHJlc3RydWN0dXJlcyB0aGUgb3JkZXIgb2Ygc2tiX3B1bGwgYW5kIHNrYl9wdXNoLCByZW1vdmVzIHRoZSB1bmRvIGxvZ2ljIG9uIHNlbmQgZmFpbHVyZSwgYW5kIGFkZHMgaW5wdXQgdmFsaWRhdGlvbiB2aWEgcHNrYl9tYXlfcHVsbC4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgcGF0aHMgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBQUFAgb3ZlciBBVE0gYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYm91bmRzIGNoZWNraW5nIGFuZCBoZWFkcm9vbSBtYW5hZ2VtZW50IGluIHRoZSBQUFBvQVRNIHRyYW5zbWl0IHBhdGggKGBwcHBvYXRtX3NlbmRgKS4gU3BlY2lmaWNhbGx5OlxuMS4gSXQgYWRkcyBhIGBwc2tiX21heV9wdWxsKHNrYiwgMSlgIGNoZWNrIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBvbiBlbXB0eSBza2JzIChgc2tiLVx1MDAzZWRhdGFbMF1gKS5cbjIuIEl0IHJlcGxhY2VzIGBza2JfcmVhbGxvY19oZWFkcm9vbWAgd2l0aCBgc2tiX2Nvd19oZWFkYCB0byBlbnN1cmUgaGVhZHJvb20gaXMgc2FmZWx5IHdyaXRhYmxlIGFuZCBhdmFpbGFibGUuXG4zLiBJdCBkZWZlcnMgYHNrYl9wdWxsYCBwcm90b2NvbCBjb21wcmVzc2lvbiB1bnRpbCBpbW1lZGlhdGVseSBiZWZvcmUgdHJhbnNtaXNzaW9uLCByZW1vdmluZyB0aGUgcHJldmlvdXMgZnJhZ2lsZSB1bmRvIGxvZ2ljIHRoYXQgcGVyZm9ybWVkIGFuIG91dC1vZi1ib3VuZHMgY2hlY2sgKGBza2ItXHUwMDNlZGF0YVstMV0gPT0gJiMzOTtcXDAmIzM5O2ApLlxuNC4gSXQgY29waWVzIHRoZSBjb25zdGFudCBMTEMgaGVhZGVyIChgcHBwbGxjYCkgaW50byB0aGUgcHVzaGVkIHNrYiBoZWFkcm9vbSBiZWZvcmUgdHJhbnNtaXNzaW9uLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBub3IgZG8gdGhleSBwYXNzIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLiBUaGUgaXNzdWVzIGFkZHJlc3NlZCBhbmQgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHBhY2tldCBidWZmZXIgbWFuaXB1bGF0aW9uIGluIHRoaXMgcGF0aCAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYnVmZmVyIG92ZXItcmVhZHMsIG9yIHNrYiBsaWZldGltZS9yZWZjb3VudGluZyBlcnJvcnMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzMwYmZhNTMxZGE3NzdkYjI5MzJhNjc5NGM2OWM5ZjI3MjdiMDg5ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDEzIDAwOjQ0OjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcHBvYXRtLmMgYi9uZXQvYXRtL3BwcG9hdG0uYwppbmRleCA2ZGE1MmQxMmRmNjhlLi41MjE0Nzg2ZTYxZDExIDEwMDY0NAotLS0gYS9uZXQvYXRtL3BwcG9hdG0uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYXRtL3BwcG9hdG0uYwpAQCAtMjkyLDEwICYjNDM7MjkyLDEzIEBAIHN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlzdHJ1Y3QgYXRtX3ZjYyAqdmNjOwogCWludCByZXQ7CiAKJiM0MzsJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMSkpIHsKJiM0MzsJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJcmV0dXJuIERST1BfUEFDS0VUOwomIzQzOwl9CiYjNDM7CiAJQVRNX1NLQihza2IpLSZndDt2Y2MgPSBwdmNjLSZndDthdG12Y2M7CiAJcHJfZGVidWcoJiMzNDsoc2tiPTB4JXAsIHZjYz0weCVwKVxuJiMzNDssIHNrYiwgcHZjYy0mZ3Q7YXRtdmNjKTsKLQlpZiAoc2tiLSZndDtkYXRhWzBdID09ICYjMzk7XDAmIzM5OyAmYW1wOyZhbXA7IChwdmNjLSZndDtmbGFncyAmYW1wOyBTQ19DT01QX1BST1QpKQotCQkodm9pZCkgc2tiX3B1bGwoc2tiLCAxKTsKIAogCXZjYyA9IEFUTV9TS0Ioc2tiKS0mZ3Q7dmNjOwogCWJoX2xvY2tfc29jayhza19hdG0odmNjKSk7CkBAIC0zMTcsMjMgJiM0MzszMjAsMTMgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiAJc3dpdGNoIChwdmNjLSZndDtlbmNhcHMpIHsJCS8qIExMQyBlbmNhcHN1bGF0aW9uIG5lZWRlZCAqLwogCWNhc2UgZV9sbGM6Ci0JCWlmIChza2JfaGVhZHJvb20oc2tiKSAmbHQ7IExMQ19MRU4pIHsKLQkJCXN0cnVjdCBza19idWZmICpuOwotCQkJbiA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHNrYiwgTExDX0xFTik7Ci0JCQlpZiAobiAhPSBOVUxMICZhbXA7JmFtcDsKLQkJCSAgICAhcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBuLSZndDt0cnVlc2l6ZSkpIHsKLQkJCQlrZnJlZV9za2Iobik7Ci0JCQkJZ290byBub3NwYWNlOwotCQkJfQotCQkJY29uc3VtZV9za2Ioc2tiKTsKLQkJCXNrYiA9IG47Ci0JCQlpZiAoc2tiID09IE5VTEwpIHsKLQkJCQliaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7Ci0JCQkJcmV0dXJuIERST1BfUEFDS0VUOwotCQkJfQotCQl9IGVsc2UgaWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi0mZ3Q7dHJ1ZXNpemUpKQomIzQzOwkJaWYgKHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pKSB7CiYjNDM7CQkJYmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpOwomIzQzOwkJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJCXJldHVybiBEUk9QX1BBQ0tFVDsKJiM0MzsJCX0KJiM0MzsJCWlmICghcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBza2ItJmd0O3RydWVzaXplKSkKIAkJCWdvdG8gbm9zcGFjZTsKLQkJbWVtY3B5KHNrYl9wdXNoKHNrYiwgTExDX0xFTiksIHBwcGxsYywgTExDX0xFTik7CiAJCWJyZWFrOwogCWNhc2UgZV92YzoKIAkJaWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi0mZ3Q7dHJ1ZXNpemUpKQpAQCAtMzQ2LDYgJiM0MzszMzksMTIgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQlyZXR1cm4gMTsKIAl9CiAKJiM0MzsJaWYgKHNrYi0mZ3Q7ZGF0YVswXSA9PSAmIzM5O1wwJiMzOTsgJmFtcDsmYW1wOyAocHZjYy0mZ3Q7ZmxhZ3MgJmFtcDsgU0NfQ09NUF9QUk9UKSkKJiM0MzsJCXNrYl9wdWxsKHNrYiwgMSk7CiYjNDM7CiYjNDM7CWlmIChwdmNjLSZndDtlbmNhcHMgPT0gZV9sbGMpCiYjNDM7CQltZW1jcHkoc2tiX3B1c2goc2tiLCBMTENfTEVOKSwgcHBwbGxjLCBMTENfTEVOKTsKJiM0MzsKIAlhdG1fYWNjb3VudF90eCh2Y2MsIHNrYik7CiAJcHJfZGVidWcoJiMzNDthdG1fc2tiKCVwKS0mZ3Q7dmNjKCVwKS0mZ3Q7ZGV2KCVwKVxuJiMzNDssCiAJCSBza2IsIEFUTV9TS0Ioc2tiKS0mZ3Q7dmNjLCBBVE1fU0tCKHNrYiktJmd0O3ZjYy0mZ3Q7ZGV2KTsKQEAgLTM1NSwxMyAmIzQzOzM1NCw2IEBAIHN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlyZXR1cm4gcmV0Owogbm9zcGFjZToKIAliaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7Ci0JLyoKLQkgKiBXZSBkb24mIzM5O3QgaGF2ZSBzcGFjZSB0byBzZW5kIHRoaXMgU0tCIG5vdywgYnV0IHdlIG1pZ2h0IGhhdmUKLQkgKiBhbHJlYWR5IGFwcGxpZWQgU0NfQ09NUF9QUk9UIGNvbXByZXNzaW9uLCBzbyBtYXkgbmVlZCB0byB1bmRvCi0JICovCi0JaWYgKChwdmNjLSZndDtmbGFncyAmYW1wOyBTQ19DT01QX1BST1QpICZhbXA7JmFtcDsgc2tiX2hlYWRyb29tKHNrYikgJmd0OyAwICZhbXA7JmFtcDsKLQkgICAgc2tiLSZndDtkYXRhWy0xXSA9PSAmIzM5O1wwJiMzOTspCi0JCSh2b2lkKSBza2JfcHVzaChza2IsIDEpOwogCXJldHVybiAwOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDIwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgdGhlIE5lZWQgZm9yIGEgRGVkaWNhdGVkIEtNU0FOIFNlc3Npb24qKgoKT2theSwgc28gdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbiBgbmV0L2F0bS9wcHBvYXRtLmNgIHdhcnJhbnRzIGl0cyBvd24gS01TQU4gZnV6emluZyBzZXNzaW9uLCBiZXlvbmQgdGhlIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgd2UgYWxyZWFkeSBydW4uIFJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiBgTmVlZHNLTVNBTmAgaXMgYHRydWVgIG9yIGBmYWxzZWAgYmFzZWQgb24gYSBzZXQgb2Ygc3BlY2lmaWMgY3JpdGVyaWEuIEkmIzM5O20gdGFyZ2V0aW5nIHRoZSBhbWQ2NCBhcmNoaXRlY3R1cmUsIHNvIEkmIzM5O2xsIGtlZXAgdGhhdCBpbiBtaW5kLgoKSGVyZSYjMzk7cyB0aGUgY2hlY2tsaXN0IEkgbmVlZCB0byBmb2xsb3c6CgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgdGhlc2UgYXJlYXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmVjb21lIGEgcHJvYmxlbToKCjEuICAqKktlcm5lbC10by11c2Vyc3BhY2UgY29tbXVuaWNhdGlvbjoqKiBBcmUgdGhlcmUgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlIHRocm91Z2ggYW55IG9mIHRoZSB1c3VhbCBzdXNwZWN0cyDigJMgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmssIGlvY3RsLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnM/IENyaXRpY2FsbHksIGFyZSB0aGVzZSBzdHJ1Y3R1cmVzICpmdWxseSogaW5pdGlhbGl6ZWQgb3IgemVyb2VkPyBTdHJ1Y3R1cmUgcGFkZGluZyBpcyBhIGtleSBhcmVhIG9mIGNvbmNlcm4uCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YToqKiBEb2VzIHRoZSBwYXRjaCBpbnRyb2R1Y2UgYW55IGJyYW5jaGluZyBvciBjb25kaXRpb25hbCBzdGF0ZW1lbnRzIHRoYXQgcmVseSBvbiB0aGUgKnZhbHVlKiBvZiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzPyBUaGlzIGlzIGEgY2xhc3NpYyBzb3VyY2Ugb2YgS01TQU4gYnVncy4KMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbjoqKiBBcmUgbmV3LCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQ/IEFyZSBhbGwgZmllbGRzIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIGxhdGVyIGluIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBjb2RlIHBhdGhzPwo0LiAgKipCb3VuZHMgY2hlY2tzIGFuZCBidWZmZXIgaGFuZGxpbmc6KiogRG9lcyB0aGUgcGF0Y2ggbW9kaWZ5IGFueSBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0ICpjb3VsZCogYWxsb3cgc3Vycm91bmRpbmcgY29kZSB0byBpbmFkdmVydGVudGx5IGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzIHdpdGhpbiBleGlzdGluZyBidWZmZXJzPwoKSWYgdGhlIGFuc3dlciBpcyAqbm8qIHRvIGFsbCBvZiB0aGUgYWJvdmUsIHRoZW4gYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuIFRoYXQgaXMsIGlmIHRoZSBwYXRjaCBwcmltYXJpbHkgaW50cm9kdWNlcyByaXNrcyBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKG91dC1vZi1ib3VuZHMsIG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmcywgdXNlLWFmdGVyLWZyZWUsIGV0Yy4pLiBUaGlzIGlzIGFsc28gdGhlIGNhc2UgaWYgYW55IHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQgKGUuZy4sIHVzaW5nIGA9IHswfWAsIGBtZW1zZXRgLCBvciBga3phbGxvY2ApIGJlZm9yZSBhbnkgcmVhZGluZyBvciBjb3B5aW5nIG9jY3Vycywgd2l0aCBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpTbywgdGhlIGdhbWUgcGxhbiBpczogSSBuZWVkIHRvIGNhcmVmdWxseSBpbnNwZWN0IHRoZSBwYXRjaCBhbmQgdGhlIGBuZXQvYXRtL3BwcG9hdG0uY2AgZmlsZS4gSSYjMzk7bGwgdXNlIG15IHVzdWFsIHRvb2xzLCBsaWtlbHkgYHJlYWQtZmlsZWAgYW5kIGBncmVwcGVyYCwgdG8gcXVpY2tseSBpZGVudGlmeSByZWxldmFudCBzZWN0aW9ucy4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwgaGVyZS4gSSYjMzk7bGwgbWV0aWN1bG91c2x5IGdvIHRocm91Z2ggZWFjaCBvZiB0aGUgYXJlYXMgbGlzdGVkLCBsb29raW5nIGZvciBwb3RlbnRpYWwgS01TQU4gaXNzdWVzLiBJJiMzOTtsbCBoYXZlIHRvIHBheSBzcGVjaWFsIGF0dGVudGlvbiB0byBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQga2VybmVsLXVzZXJzcGFjZSBpbnRlcmFjdGlvbnMuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2F0bS9wcHBvYXRtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4NTpcdCAqIHN1cHBvcnQgdGhpcyB5ZXQuICBXZSBqdXN0IHJldHVybiAmIzM5O0RST1BfUEFDS0VUJiMzOTsgd2hpY2ggd2UgYWN0dWFsbHkgZGVmaW5lXG4gMjg2Olx0ICogYXMgc3VjY2VzcywganVzdCB0byBiZSBjbGVhciB3aGF0IHdlJiMzOTtyZSByZWFsbHkgZG9pbmcuXG4gMjg3Olx0ICovXG4gMjg4Olx0I2RlZmluZSBEUk9QX1BBQ0tFVCAxXG4gMjg5Olx0c3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDI5MDpcdHtcbiAyOTE6XHRcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGNoYW5fdG9fcHZjYyhjaGFuKTtcbiAyOTI6XHRcdHN0cnVjdCBhdG1fdmNjICp2Y2M7XG4gMjkzOlx0XHRpbnQgcmV0O1xuIDI5NDpcdFxuIDI5NTpcdFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMSkpIHtcbiAyOTY6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gMjk3Olx0XHRcdHJldHVybiBEUk9QX1BBQ0tFVDtcbiAyOTg6XHRcdH1cbiAyOTk6XHRcbiAzMDA6XHRcdEFUTV9TS0Ioc2tiKS1cdTAwM2V2Y2MgPSBwdmNjLVx1MDAzZWF0bXZjYztcbiAzMDE6XHRcdHByX2RlYnVnKFwmIzM0Oyhza2I9MHglcCwgdmNjPTB4JXApXFxuXCYjMzQ7LCBza2IsIHB2Y2MtXHUwMDNlYXRtdmNjKTtcbiAzMDI6XHRcbiAzMDM6XHRcdHZjYyA9IEFUTV9TS0Ioc2tiKS1cdTAwM2V2Y2M7XG4gMzA0Olx0XHRiaF9sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuIDMwNTpcdFx0aWYgKHNvY2tfb3duZWRfYnlfdXNlcihza19hdG0odmNjKSkpIHtcbiAzMDY6XHRcdFx0LypcbiAzMDc6XHRcdFx0ICogTmVlZHMgdG8gaGFwcGVuIChhbmQgYmUgZmx1c2hlZCwgaGVuY2UgdGVzdF9hbmRfKSBiZWZvcmUgd2UgdW5sb2NrXG4gMzA4Olx0XHRcdCAqIHRoZSBzb2NrZXQuIEl0IG5lZWRzIHRvIGJlIHNlZW4gYnkgdGhlIHRpbWUgb3VyIC1cdTAwM2VyZWxlYXNlX2NiIGdldHNcbiAzMDk6XHRcdFx0ICogY2FsbGVkLlxuIDMxMDpcdFx0XHQgKi9cbiAzMTE6XHRcdFx0dGVzdF9hbmRfc2V0X2JpdChCTE9DS0VELCBcdTAwMjZwdmNjLVx1MDAzZWJsb2NrZWQpO1xuIDMxMjpcdFx0XHRnb3RvIG5vc3BhY2U7XG4gMzEzOlx0XHR9XG4gMzE0Olx0XHRpZiAodGVzdF9iaXQoQVRNX1ZGX0NMT1NFLCBcdTAwMjZ2Y2MtXHUwMDNlZmxhZ3MpIHx8XG4gMzE1Olx0XHQgICAgIXRlc3RfYml0KEFUTV9WRl9SRUFEWSwgXHUwMDI2dmNjLVx1MDAzZWZsYWdzKSkge1xuIDMxNjpcdFx0XHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XG4gMzE3Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDMxODpcdFx0XHRyZXR1cm4gRFJPUF9QQUNLRVQ7XG4gMzE5Olx0XHR9XG4gMzIwOlx0XG4gMzIxOlx0XHRzd2l0Y2ggKHB2Y2MtXHUwMDNlZW5jYXBzKSB7XHRcdC8qIExMQyBlbmNhcHN1bGF0aW9uIG5lZWRlZCAqL1xuIDMyMjpcdFx0Y2FzZSBlX2xsYzpcbiAzMjM6XHRcdFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pKSB7XG4gMzI0Olx0XHRcdFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuIDMyNTpcdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDMyNjpcdFx0XHRcdHJldHVybiBEUk9QX1BBQ0tFVDtcbiAzMjc6XHRcdFx0fVxuIDMyODpcdFx0XHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbiAzMjk6XHRcdFx0XHRnb3RvIG5vc3BhY2U7XG4gMzMwOlx0XHRcdGJyZWFrO1xuIDMzMTpcdFx0Y2FzZSBlX3ZjOlxuIDMzMjpcdFx0XHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbiAzMzM6XHRcdFx0XHRnb3RvIG5vc3BhY2U7XG4gMzM0Olx0XHRcdGJyZWFrO1xuIDMzNTpcdFx0Y2FzZSBlX2F1dG9kZXRlY3Q6XG4gMzM2Olx0XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbiAzMzc6XHRcdFx0cHJfZGVidWcoXCYjMzQ7VHJ5aW5nIHRvIHNlbmQgd2l0aG91dCBzZXR0aW5nIGVuY2FwcyFcXG5cJiMzNDspO1xuIDMzODpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAzMzk6XHRcdFx0cmV0dXJuIDE7XG4gMzQwOlx0XHR9XG4gMzQxOlx0XG4gMzQyOlx0XHRpZiAoc2tiLVx1MDAzZWRhdGFbMF0gPT0gJiMzOTtcXDAmIzM5OyBcdTAwMjZcdTAwMjYgKHB2Y2MtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0NPTVBfUFJPVCkpXG4gMzQzOlx0XHRcdHNrYl9wdWxsKHNrYiwgMSk7XG4gMzQ0Olx0XG4gMzQ1Olx0XHRpZiAocHZjYy1cdTAwM2VlbmNhcHMgPT0gZV9sbGMpXG4gMzQ2Olx0XHRcdG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pO1xuIDM0NzpcdFxuIDM0ODpcdFx0YXRtX2FjY291bnRfdHgodmNjLCBza2IpO1xuIDM0OTpcdFx0cHJfZGVidWcoXCYjMzQ7YXRtX3NrYiglcCktXHUwMDNldmNjKCVwKS1cdTAwM2VkZXYoJXApXFxuXCYjMzQ7LFxuIDM1MDpcdFx0XHQgc2tiLCBBVE1fU0tCKHNrYiktXHUwMDNldmNjLCBBVE1fU0tCKHNrYiktXHUwMDNldmNjLVx1MDAzZWRldik7XG4gMzUxOlx0XHRyZXQgPSBBVE1fU0tCKHNrYiktXHUwMDNldmNjLVx1MDAzZXNlbmQoQVRNX1NLQihza2IpLVx1MDAzZXZjYywgc2tiKVxuIDM1MjpcdFx0ICAgID8gRFJPUF9QQUNLRVQgOiAxO1xuIDM1MzpcdFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuIDM1NDpcdFx0cmV0dXJuIHJldDtcbiAzNTU6XHRub3NwYWNlOlxuIDM1NjpcdFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuIDM1NzpcdFx0cmV0dXJuIDA7XG4gMzU4Olx0fVxuIDM1OTpcdFxuIDM2MDpcdC8qIFRoaXMgaGFuZGxlcyBpb2N0bHMgc2VudCB0byB0aGUgL2Rldi9wcHAgaW50ZXJmYWNlICovXG4gMzYxOlx0c3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXG4gMzYyOlx0XHR1bnNpZ25lZCBsb25nIGFyZylcbiAzNjM6XHR7XG4gMzY0Olx0XHRzd2l0Y2ggKGNtZCkge1xuIDM2NTpcdFx0Y2FzZSBQUFBJT0NHRkxBR1M6XG4gMzY2Olx0XHRcdHJldHVybiBwdXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopIGFyZylcbiAzNjc6XHRcdFx0ICAgID8gLUVGQVVMVCA6IDA7XG4gMzY4Olx0XHRjYXNlIFBQUElPQ1NGTEFHUzpcbiAzNjk6XHRcdFx0cmV0dXJuIGdldF91c2VyKGNoYW5fdG9fcHZjYyhjaGFuKS1cdTAwM2VmbGFncywgKGludCBfX3VzZXIgKikgYXJnKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTEyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTM4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUFBQb0FUTSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEZpcnN0LCBJJiMzOTttIGNoZWNraW5nIHRoZSBjb21taXQgaGlzdG9yeSwgbWF5YmUgdXNpbmcgYGdpdCBsb2cgLTFgIG9yIGdyZXBwZXIgdG8gZ2V0IGEgcXVpY2sgb3ZlcnZpZXcgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCB3aGF0IHByb2JsZW0gdGhpcyBwYXRjaCBpcyBmaXhpbmcuCgpSaWdodCwgaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGRlYWxpbmcgd2l0aCBzb21lIHBvdGVudGlhbCBpc3N1ZXMgaW4gdGhlIFBQUG9BVE0gY29kZS4gVGhlIGluaXRpYWwgY29kZSBsb29rcyBsaWtlIHRoaXM6CgpgYGBjCglBVE1fU0tCKHNrYiktJmd0O3ZjYyA9IHB2Y2MtJmd0O2F0bXZjYzsKCXByX2RlYnVnKCYjMzQ7KHNrYj0weCVwLCB2Y2M9MHglcClcbiYjMzQ7LCBza2IsIHB2Y2MtJmd0O2F0bXZjYyk7CglpZiAoc2tiLSZndDtkYXRhWzBdID09ICYjMzk7XDAmIzM5OyAmYW1wOyZhbXA7IChwdmNjLSZndDtmbGFncyAmYW1wOyBTQ19DT01QX1BST1QpKQoJCSh2b2lkKSBza2JfcHVsbChza2IsIDEpOwpgYGAKCkkgY2FuIGltbWVkaWF0ZWx5IHNlZSBhIHBvdGVudGlhbCBwcm9ibGVtOiBpZiBgc2tiLSZndDtsZW5gIGlzIDAsIHRoZW4gYHNrYi0mZ3Q7ZGF0YVswXWAgaXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgYnVnLiBJdCYjMzk7cyBhbHNvIHdvcnRoIG5vdGluZyB0aGUgdXNlIG9mIGBza2JfcmVhbGxvY19oZWFkcm9vbWAgdmVyc3VzIGBza2JfY293X2hlYWRgIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBza2IgaXMgY2xvbmVkL3NoYXJlZC4KClRoZSBjb2RlIHRoZW4gY2hlY2tzIGZvciBMTEMgZW5jYXBzdWxhdGlvbiBuZWVkZWQ6CgpgYGBjCglzd2l0Y2ggKHB2Y2MtJmd0O2VuY2FwcykgewkJLyogTExDIGVuY2Fwc3VsYXRpb24gbmVlZGVkICovCgljYXNlIGVfbGxjOgoJCWlmIChza2JfaGVhZHJvb20oc2tiKSAmbHQ7IExMQ19MRU4pIHsKCQkJc3RydWN0IHNrX2J1ZmYgKm47CgkJCW4gPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsIExMQ19MRU4pOwouLi4KYGBgCgpBbmQgaW4gdGhlIGBub3NwYWNlOmAgcGF0aDoKCmBgYGMKbm9zcGFjZToKCWJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTsKCS8qCgkgKiBXZSBkb24mIzM5O3QgaGF2ZSBzcGFjZSB0byBzZW5kIHRoaXMgU0tCIG5vdywgYnV0IHdlIG1pZ2h0IGhhdmUKCSAqIGFscmVhZHkgYXBwbGllZCBTQ19DT01QX1BST1QgY29tcHJlc3Npb24sIHNvIG1heSBuZWVkIHRvIHVuZG8KCSAqLwoJaWYgKChwdmNjLSZndDtmbGFncyAmYW1wOyBTQ19DT01QX1BST1QpICZhbXA7JmFtcDsgc2tiX2hlYWRyb29tKHNrYikgJmd0OyAwICZhbXA7JmFtcDsKCSAgICBza2ItJmd0O2RhdGFbLTFdID09ICYjMzk7XDAmIzM5OykKCQkodm9pZCkgc2tiX3B1c2goc2tiLCAxKTsKCXJldHVybiAwOwpgYGAKCkhlcmUmIzM5O3MgYW5vdGhlciBpc3N1ZS4gVGhlIGBub3NwYWNlYCBsb2dpYyB0cmllcyB0byB1bmRvIGEgcHJldmlvdXMgYHNrYl9wdWxsYCB3aXRoIGBza2JfcHVzaGAsIGJ1dCBpdCBjaGVja3MgYHNrYi0mZ3Q7ZGF0YVstMV0gPT0gJiMzOTtcMCYjMzk7YC4gIFRoYXQgY2FuIGxlYWQgdG8gYW5vdGhlciBvdXQtb2YtYm91bmRzIHJlYWQgb3IgZXZlbiBjb3JydXB0IGRhdGEuIFlpa2VzLgoKTm93LCBsZXQmIzM5O3MgZXhhbWluZSB0aGUgcGF0Y2gmIzM5O3MgY2hhbmdlczoKCjEuICBBIGNoZWNrIGlzIGFkZGVkOiBgaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMSkpIHsga2ZyZWVfc2tiKHNrYik7IHJldHVybiBEUk9QX1BBQ0tFVDsgfWAuIFRoaXMgaXMgZXhjZWxsZW50OyBpdCBlbnN1cmVzIHRoYXQgdGhlIGBza2JgIGhhcyBhdCBsZWFzdCBvbmUgYnl0ZSBhdmFpbGFibGUgYmVmb3JlIGFjY2Vzc2luZyBgc2tiLSZndDtkYXRhWzBdYC4KMi4gIGBza2JfY293X2hlYWQoc2tiLCBMTENfTEVOKWAgaXMgdXNlZCBmb3IgaGVhZHJvb20gZXhwYW5zaW9uLCB3aGljaCBpcyBtdWNoIGNsZWFuZXIgdGhhbiB0aGUgb2xkIG1ldGhvZC4KMy4gIFRoZSBgU0NfQ09NUF9QUk9UYCBjaGVjayBhbmQgYHNrYl9wdWxsYCBhcmUgbW92ZWQgKmRvd24qIGluIHRoZSBleGVjdXRpb24gcGF0aCwgYWZ0ZXIgdmFyaW91cyBvdGhlciBjaGVja3MgKGBzb2NrX293bmVkX2J5X3VzZXJgLCBgQVRNX1ZGX0NMT1NFL1JFQURZYCwgYHBwcG9hdG1fbWF5X3NlbmRgKS4gVGhpcyBpcyBhIGNydWNpYWwgaW1wcm92ZW1lbnQuIFRoZSBgc2tiX3B1bGxgIG9wZXJhdGlvbiBpcyBvbmx5IHBlcmZvcm1lZCByaWdodCBiZWZvcmUgdHJhbnNtaXNzaW9uLCBhZnRlciBoZWFkcm9vbSBoYXMgYmVlbiBlbnN1cmVkIGFuZCBhZnRlciBhbGwgdGhlIHBvdGVudGlhbCBgbm9zcGFjZWAgcGF0aHMgaGF2ZSBiZWVuIGNvbnNpZGVyZWQuIFRoaXMgc2ltcGxpZmllcyB0aGUgbG9naWMuCjQuICBUaGUgYG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pYCBpcyBhbHNvIG1vdmVkIGRvd24sIGFmdGVyIHRoZSBgc2tiX3B1bGxgLgo1LiAgVGhlIHByb2JsZW1hdGljIHVuZG8gbG9naWMgaW4gdGhlIGBub3NwYWNlOmAgcGF0aCBpcyByZW1vdmVkLCB3aGljaCBpcyBncmVhdC4gSXQgZWxpbWluYXRlcyB0aGUgb3V0LW9mLWJvdW5kcyByZWFkLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuCgoxLiAgRG9lcyBpdCBtb2RpZnkga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U/IE5vLCBgcHBwb2F0bV9zZW5kYCBpcyB0aGUgdHJhbnNtaXQgcGF0aCwgYW5kIHRoZSBgc2tiYCBpcyB0cmFuc21pdHRlZCBvdmVyIEFUTSwgd2l0aCBubyBjb3B5IHRvIHVzZXIgc3BhY2UuCjIuICBEb2VzIHRoZSBwYXRjaCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBObywgYHBza2JfbWF5X3B1bGwoc2tiLCAxKWAgYW5kIGBza2JfY293X2hlYWQoc2tiLCBMTENfTEVOKWAgYXJlIHNhZmUuIFRoZSByZWFkIG9mIGBza2ItJmd0O2RhdGFbMF1gIGlzIHNhZmUgYmVjYXVzZSBvZiB0aGUgYHBza2JfbWF5X3B1bGxgIGNoZWNrLgozLgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDAwOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2F0bS9wcHBvYXRtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiAgIDI6XHQvKiBuZXQvYXRtL3BwcG9hdG0uYyAtIFJGQzIzNjQgUFBQIG92ZXIgQVRNL0FBTDUgKi9cbiAgIDM6XHRcbiAgIDQ6XHQvKiBDb3B5cmlnaHQgMTk5OS0yMDAwIGJ5IE1pdGNoZWxsIEJsYW5rIEpyICovXG4gICA1Olx0LyogQmFzZWQgb24gY2xpcC5jOyAxOTk1LTE5OTkgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBFUEZMIExSQy9JQ0EgKi9cbiAgIDY6XHQvKiBBbmQgb24gcHBwX2FzeW5jLmM7IENvcHlyaWdodCAxOTk5IFBhdWwgTWFja2VycmFzICovXG4gICA3Olx0LyogQW5kIGhlbHAgZnJvbSBKZW5zIEF4Ym9lICovXG4gICA4Olx0XG4gICA5Olx0LypcbiAgMTA6XHQgKlxuICAxMTpcdCAqIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHRoZSBlbmNhcHN1bGF0aW9uIGFuZCBmcmFtaW5nIGZvciBzZW5kaW5nXG4gIDEyOlx0ICogYW5kIHJlY2VpdmluZyBQUFAgZnJhbWVzIGluIEFUTSBBQUw1IFBEVXMuXG4gIDEzOlx0ICovXG4gIDE0Olx0XG4gIDE1Olx0LypcbiAgMTY6XHQgKiBPbmUgc2hvcnRjb21pbmcgb2YgdGhpcyBkcml2ZXIgaXMgdGhhdCBpdCBkb2VzIG5vdCBjb21wbHkgd2l0aFxuICAxNzpcdCAqIHNlY3Rpb24gOCBvZiBSRkMyMzY0IC0gd2UgYXJlIHN1cHBvc2VkIHRvIGRldGVjdCBhIGNoYW5nZVxuICAxODpcdCAqIGluIGVuY2Fwc3VsYXRpb24gYW5kIGltbWVkaWF0ZWx5IGFib3J0IHRoZSBjb25uZWN0aW9uIChpbiBvcmRlclxuICAxOTpcdCAqIHRvIGF2b2lkIGEgYmxhY2staG9sZSBiZWluZyBjcmVhdGVkIGlmIG91ciBwZWVyIGxvc2VzIHN0YXRlXG4gIDIwOlx0ICogYW5kIGNoYW5nZXMgZW5jYXBzdWxhdGlvbiB1bmlsYXRlcmFsbHkuICBIb3dldmVyLCBzaW5jZSB0aGVcbiAgMjE6XHQgKiBwcHBfZ2VuZXJpYyBsYXllciBhY3R1YWxseSBkb2VzIHRoZSBkZWNhcHN1bGF0aW9uLCB3ZSBuZWVkXG4gIDIyOlx0ICogYSB3YXkgb2Ygbm90aWZ5aW5nIGl0IHdoZW4gd2UgX3RoaW5rXyB0aGVyZSBtaWdodCBiZSBhIHByb2JsZW0pXG4gIDIzOlx0ICogVGhlcmUmIzM5O3MgdHdvIGNhc2VzOlxuICAyNDpcdCAqICAgMS5cdExMQy1lbmNhcHN1bGF0aW9uIHdhcyBtaXNzaW5nIHdoZW4gaXQgd2FzIGVuYWJsZWQuICBJblxuICAyNTpcdCAqXHR0aGlzIGNhc2UsIHdlIHNob3VsZCB0ZWxsIHRoZSB1cHBlciBsYXllciBcJiMzNDt0ZWFyIGRvd25cbiAgMjY6XHQgKlx0dGhpcyBzZXNzaW9uIGlmIHRoaXMgc2tiIGxvb2tzIG9rIHRvIHlvdVwmIzM0O1xuICAyNzpcdCAqICAgMi5cdExMQy1lbmNhcHN1bGF0aW9uIHdhcyBwcmVzZW50IHdoZW4gaXQgd2FzIGRpc2FibGVkLiAgVGhlblxuICAyODpcdCAqXHR3ZSBuZWVkIHRvIHRlbGwgdGhlIHVwcGVyIGxheWVyIFwmIzM0O3RoaXMgcGFja2V0IG1heSBiZVxuICAyOTpcdCAqXHRvaywgYnV0IGlmIGl0cyBpbiBlcnJvciB0ZWFyIGRvd24gdGhlIHNlc3Npb25cJiMzNDtcbiAgMzA6XHQgKiBUaGVzZSBob29rcyBhcmUgbm90IHlldCBhdmFpbGFibGUgaW4gcHBwX2dlbmVyaWNcbiAgMzE6XHQgKi9cbiAgMzI6XHRcbiAgMzM6XHQjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFwmIzM0OzolczogXCYjMzQ7IGZtdCwgX19mdW5jX19cbiAgMzQ6XHRcbiAgMzU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICAzNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICAzNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4gIDM4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAgMzk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAgNDA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9hdG0uaFx1MDAzZVxuICA0MTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0bWRldi5oXHUwMDNlXG4gIDQyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvY2FwYWJpbGl0eS5oXHUwMDNlXG4gIDQzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcHBwX2RlZnMuaFx1MDAzZVxuICA0NDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BwcC1pb2N0bC5oXHUwMDNlXG4gIDQ1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcHBwX2NoYW5uZWwuaFx1MDAzZVxuICA0NjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0bXBwcC5oXHUwMDNlXG4gIDQ3Olx0XG4gIDQ4Olx0I2luY2x1ZGUgXCYjMzQ7Y29tbW9uLmhcJiMzNDtcbiAgNDk6XHRcbiAgNTA6XHRlbnVtIHBwcG9hdG1fZW5jYXBzIHtcbiAgNTE6XHRcdGVfYXV0b2RldGVjdCA9IFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1QsXG4gIDUyOlx0XHRlX3ZjID0gUFBQT0FUTV9FTkNBUFNfVkMsXG4gIDUzOlx0XHRlX2xsYyA9IFBQUE9BVE1fRU5DQVBTX0xMQyxcbiAgNTQ6XHR9O1xuICA1NTpcdFxuICA1NjpcdHN0cnVjdCBwcHBvYXRtX3ZjYyB7XG4gIDU3Olx0XHRzdHJ1Y3QgYXRtX3ZjY1x0KmF0bXZjYztcdC8qIFZDQyBkZXNjcmlwdG9yICovXG4gIDU4Olx0XHR2b2lkICgqb2xkX3B1c2gpKHN0cnVjdCBhdG1fdmNjICosIHN0cnVjdCBza19idWZmICopO1xuICA1OTpcdFx0dm9pZCAoKm9sZF9wb3ApKHN0cnVjdCBhdG1fdmNjICosIHN0cnVjdCBza19idWZmICopO1xuICA2MDpcdFx0dm9pZCAoKm9sZF9yZWxlYXNlX2NiKShzdHJ1Y3QgYXRtX3ZjYyAqKTtcbiAgNjE6XHRcdHN0cnVjdCBtb2R1bGUgKm9sZF9vd25lcjtcbiAgNjI6XHRcdFx0XHRcdFx0Lyoga2VlcCBvbGQgcHVzaC9wb3AgZm9yIGRldGFjaGluZyAqL1xuICA2MzpcdFx0ZW51bSBwcHBvYXRtX2VuY2FwcyBlbmNhcHM7XG4gIDY0Olx0XHRhdG9taWNfdCBpbmZsaWdodDtcbiAgNjU6XHRcdHVuc2lnbmVkIGxvbmcgYmxvY2tlZDtcbiAgNjY6XHRcdGludCBmbGFncztcdFx0XHQvKiBTQ19DT01QX1BST1QgLSBjb21wcmVzcyBwcm90b2NvbCAqL1xuICA2NzpcdFx0c3RydWN0IHBwcF9jaGFubmVsIGNoYW47XHQvKiBpbnRlcmZhY2UgdG8gZ2VuZXJpYyBwcHAgbGF5ZXIgKi9cbiAgNjg6XHRcdHN0cnVjdCB0YXNrbGV0X3N0cnVjdCB3YWtldXBfdGFza2xldDtcbiAgNjk6XHR9O1xuICA3MDpcdFxuICA3MTpcdC8qXG4gIDcyOlx0ICogV2Ugd2FudCB0byBhbGxvdyB0d28gcGFja2V0cyBpbiB0aGUgcXVldWUuIFRoZSBvbmUgdGhhdCYjMzk7cyBjdXJyZW50bHkgaW5cbiAgNzM6XHQgKiBmbGlnaHQsIGFuZCAqb25lKiBxdWV1ZWQgdXAgcmVhZHkgZm9yIHRoZSBBVE0gZGV2aWNlIHRvIHNlbmQgaW1tZWRpYXRlbHlcbiAgNzQ6XHQgKiBmcm9tIGl0cyBUWCBkb25lIElSUS4gV2Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSBhdG9taWNfaW5jX25vdF96ZXJvKCksIHNvXG4gIDc1Olx0ICogaW5mbGlnaHQgPT0gLTIgcmVwcmVzZW50cyBhbiBlbXB0eSBxdWV1ZSwgLTEgb25lIHBhY2tldCwgYW5kIHplcm8gbWVhbnNcbiAgNzY6XHQgKiB0aGVyZSBhcmUgdHdvIHBhY2tldHMgaW4gdGhlIHF1ZXVlLlxuICA3NzpcdCAqL1xuICA3ODpcdCNkZWZpbmUgTk9ORV9JTkZMSUdIVCAtMlxuICA3OTpcdFxuICA4MDpcdCNkZWZpbmUgQkxPQ0tFRCAwXG4gIDgxOlx0XG4gIDgyOlx0LypcbiAgODM6XHQgKiBIZWFkZXIgdXNlZCBmb3IgTExDIEVuY2Fwc3VsYXRlZCBQUFAgKDQgYnl0ZXMpIGZvbGxvd2VkIGJ5IHRoZSBMQ1AgcHJvdG9jb2xcbiAgODQ6XHQgKiBJRCAoMHhDMDIxKSB1c2VkIGluIGF1dG9kZXRlY3Rpb25cbiAgODU6XHQgKi9cbiAgODY6XHRzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwcHBsbGNbNl0gPSB7IDB4RkUsIDB4RkUsIDB4MDMsIDB4Q0YsIDB4QzAsIDB4MjEgfTtcbiAgODc6XHQjZGVmaW5lIExMQ19MRU5cdFx0KDQpXG4gIDg4Olx0XG4gIDg5Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmF0bXZjY190b19wdmNjKGNvbnN0IHN0cnVjdCBhdG1fdmNjICphdG12Y2MpXG4gIDkwOlx0e1xuICA5MTpcdFx0cmV0dXJuIChzdHJ1Y3QgcHBwb2F0bV92Y2MgKikgKGF0bXZjYy1cdTAwM2V1c2VyX2JhY2spO1xuICA5MjpcdH1cbiAgOTM6XHRcbiAgOTQ6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqY2hhbl90b19wdmNjKGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcbiAgOTU6XHR7XG4gIDk2Olx0XHRyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoY2hhbi1cdTAwM2Vwcml2YXRlKTtcbiAgOTc6XHR9XG4gIDk4Olx0XG4gIDk5Olx0LypcbiAxMDA6XHQgKiBXZSBjYW4mIzM5O3QgZG8gdGhpcyBkaXJlY3RseSBmcm9tIG91ciBfcG9wIGhhbmRsZXIsIHNpbmNlIHRoZSBwcHAgY29kZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTc5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIERlZXBlciBpbnRvIGBwcHBvYXRtLmNgKioKCk9rYXksIHNvIEkmIzM5O3ZlIGFscmVhZHkgY292ZXJlZCBhIGdvb2QgY2h1bmsgb2YgYHBwcG9hdG0uY2AsIHNwZWNpZmljYWxseSBsaW5lcyAyODAtMzcwIGFyb3VuZCB0aGF0IGBwcHBvYXRtX3NlbmRgIGZ1bmN0aW9uLiBOb3csIHRvIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGUgYnJvYWRlciBwaWN0dXJlLCBhbmQgaG93IHRoaW5ncyB0aWUgdG9nZXRoZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBwcHBvYXRtX2RldnBwcF9pb2N0bGAgYW5kIHNvbWUgb2YgdGhlIHN1cHBvcnRpbmcgZnVuY3Rpb25zLiBJJiMzOTtsbCBmb2N1cyBvbiBsaW5lcyAzNzAtNDQwLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgZGV2aWNlIGNvbnRyb2wgb3BlcmF0aW9ucyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgUFBQLW92ZXItQVRNIGRyaXZlci4gVGhpcyBzaG91bGQgcHJvdmlkZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gYmV0dGVyIGFuYWx5emUgdGhlIGBwcHBvYXRtX3NlbmRgIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAwMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9hdG0vcHBwb2F0bS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNjU6XHRcdGNhc2UgUFBQSU9DR0ZMQUdTOlxuIDM2NjpcdFx0XHRyZXR1cm4gcHV0X3VzZXIoY2hhbl90b19wdmNjKGNoYW4pLVx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpXG4gMzY3Olx0XHRcdCAgICA/IC1FRkFVTFQgOiAwO1xuIDM2ODpcdFx0Y2FzZSBQUFBJT0NTRkxBR1M6XG4gMzY5Olx0XHRcdHJldHVybiBnZXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopIGFyZylcbiAzNzA6XHRcdFx0ICAgID8gLUVGQVVMVCA6IDA7XG4gMzcxOlx0XHR9XG4gMzcyOlx0XHRyZXR1cm4gLUVOT1RUWTtcbiAzNzM6XHR9XG4gMzc0Olx0XG4gMzc1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2F0bV9vcHMgPSB7XG4gMzc2Olx0XHQuc3RhcnRfeG1pdCA9IHBwcG9hdG1fc2VuZCxcbiAzNzc6XHRcdC5pb2N0bCA9IHBwcG9hdG1fZGV2cHBwX2lvY3RsLFxuIDM3ODpcdH07XG4gMzc5Olx0XG4gMzgwOlx0c3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcbiAzODE6XHR7XG4gMzgyOlx0XHRzdHJ1Y3QgYXRtX2JhY2tlbmRfcHBwIGJlO1xuIDM4MzpcdFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjO1xuIDM4NDpcdFx0aW50IGVycjtcbiAzODU6XHRcbiAzODY6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZiZSwgYXJnLCBzaXplb2YgYmUpKVxuIDM4NzpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAzODg6XHRcdGlmIChiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfQVVUT0RFVEVDVCBcdTAwMjZcdTAwMjZcbiAzODk6XHRcdCAgICBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfVkMgXHUwMDI2XHUwMDI2IGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19MTEMpXG4gMzkwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDM5MTpcdFx0cHZjYyA9IGt6YWxsb2Nfb2JqKCpwdmNjKTtcbiAzOTI6XHRcdGlmIChwdmNjID09IE5VTEwpXG4gMzkzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDM5NDpcdFx0cHZjYy1cdTAwM2VhdG12Y2MgPSBhdG12Y2M7XG4gMzk1Olx0XG4gMzk2Olx0XHQvKiBNYXhpbXVtIGlzIHplcm8sIHNvIHRoYXQgd2UgY2FuIHVzZSBhdG9taWNfaW5jX25vdF96ZXJvKCkgKi9cbiAzOTc6XHRcdGF0b21pY19zZXQoXHUwMDI2cHZjYy1cdTAwM2VpbmZsaWdodCwgTk9ORV9JTkZMSUdIVCk7XG4gMzk4Olx0XHRwdmNjLVx1MDAzZW9sZF9wdXNoID0gYXRtdmNjLVx1MDAzZXB1c2g7XG4gMzk5Olx0XHRwdmNjLVx1MDAzZW9sZF9wb3AgPSBhdG12Y2MtXHUwMDNlcG9wO1xuIDQwMDpcdFx0cHZjYy1cdTAwM2VvbGRfb3duZXIgPSBhdG12Y2MtXHUwMDNlb3duZXI7XG4gNDAxOlx0XHRwdmNjLVx1MDAzZW9sZF9yZWxlYXNlX2NiID0gYXRtdmNjLVx1MDAzZXJlbGVhc2VfY2I7XG4gNDAyOlx0XHRwdmNjLVx1MDAzZWVuY2FwcyA9IChlbnVtIHBwcG9hdG1fZW5jYXBzKSBiZS5lbmNhcHM7XG4gNDAzOlx0XHRwdmNjLVx1MDAzZWNoYW4ucHJpdmF0ZSA9IHB2Y2M7XG4gNDA0Olx0XHRwdmNjLVx1MDAzZWNoYW4ub3BzID0gXHUwMDI2cHBwb2F0bV9vcHM7XG4gNDA1Olx0XHRwdmNjLVx1MDAzZWNoYW4ubXR1ID0gYXRtdmNjLVx1MDAzZXFvcy50eHRwLm1heF9zZHUgLSBQUFBfSERSTEVOIC1cbiA0MDY6XHRcdCAgICAoYmUuZW5jYXBzID09IGVfdmMgPyAwIDogTExDX0xFTik7XG4gNDA3Olx0XHR0YXNrbGV0X3NldHVwKFx1MDAyNnB2Y2MtXHUwMDNld2FrZXVwX3Rhc2tsZXQsIHBwcG9hdG1fd2FrZXVwX3NlbmRlcik7XG4gNDA4Olx0XHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcdTAwMjZwdmNjLVx1MDAzZWNoYW4pO1xuIDQwOTpcdFx0aWYgKGVyciAhPSAwKSB7XG4gNDEwOlx0XHRcdGtmcmVlKHB2Y2MpO1xuIDQxMTpcdFx0XHRyZXR1cm4gZXJyO1xuIDQxMjpcdFx0fVxuIDQxMzpcdFx0YXRtdmNjLVx1MDAzZXVzZXJfYmFjayA9IHB2Y2M7XG4gNDE0Olx0XHRhdG12Y2MtXHUwMDNlcHVzaCA9IHBwcG9hdG1fcHVzaDtcbiA0MTU6XHRcdGF0bXZjYy1cdTAwM2Vwb3AgPSBwcHBvYXRtX3BvcDtcbiA0MTY6XHRcdGF0bXZjYy1cdTAwM2VyZWxlYXNlX2NiID0gcHBwb2F0bV9yZWxlYXNlX2NiO1xuIDQxNzpcdFx0X19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTtcbiA0MTg6XHRcdGF0bXZjYy1cdTAwM2Vvd25lciA9IFRISVNfTU9EVUxFO1xuIDQxOTpcdFxuIDQyMDpcdFx0LyogcmUtcHJvY2VzcyBldmVyeXRoaW5nIHJlY2VpdmVkIGJldHdlZW4gY29ubmVjdGlvbiBzZXR1cCBhbmRcbiA0MjE6XHRcdCAgIGJhY2tlbmQgc2V0dXAgKi9cbiA0MjI6XHRcdHZjY19wcm9jZXNzX3JlY3ZfcXVldWUoYXRtdmNjKTtcbiA0MjM6XHRcdHJldHVybiAwO1xuIDQyNDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4OTQKCQkJCQkJCW91dHB1dDogMjgxCgkJCQkJCQl0aG91Z2h0czogMTc1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBQUG9BVE0gUGF0Y2ggZm9yIFNlY3VyaXR5IEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHByaW1hcmlseSBhZGRyZXNzZXMgcG90ZW50aWFsIGJ1ZmZlciBvdmVycnVucyBhbmQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aXRoaW4gdGhlIGBwcHBvYXRtX3NlbmRgIGZ1bmN0aW9uLiBUaGUgb3JpZ2luYWwgaXNzdWUgbGlrZWx5IGludm9sdmVkIHNjZW5hcmlvcyB3aGVyZSB0aGUgY29kZSB3YXMgZWl0aGVyIGF0dGVtcHRpbmcgdG8gcmVhZCBiZXlvbmQgdGhlIGJvdW5kYXJpZXMgb2YgYW4gU0tCJiMzOTtzIGRhdGEgYnVmZmVyIG9yIHBvdGVudGlhbGx5IGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4KClNwZWNpZmljYWxseSwgSSBzZWUgYSBmZXcga2V5IGFyZWFzIHRoYXQgd2VyZSBsaWtlbHkgcHJvYmxlbWF0aWMsIGFuZCB0aGF0IHRoaXMgcGF0Y2ggYWltcyB0byByZXNvbHZlOgoKMS4gICoqT3V0LW9mLUJvdW5kcyBSZWFkcyBhbmQgQnVmZmVyIEhhbmRsaW5nOioqIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYHBza2JfbWF5X3B1bGwoc2tiLCAxKWAgaXMgY3J1Y2lhbC4gVGhpcyBjaGVjayAqYmVmb3JlKiBhY2Nlc3NpbmcgYHNrYi0mZ3Q7ZGF0YVswXWAgaXMgYSBkaXJlY3QgcmVzcG9uc2UgdG8gYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGlmIHRoZSBTS0IgaGFwcGVuZWQgdG8gYmUgZW1wdHksIG9yIG5vdCBsYXJnZSBlbm91Z2ggdG8gYWNjb21tb2RhdGUgdGhlIGFjY2Vzcy4gVGhlIGBrZnJlZV9za2Ioc2tiKWAgYW5kIGBEUk9QX1BBQ0tFVGAgY29tYm8gbmVhdGx5IGhhbmRsZXMgdGhpcyBlZGdlIGNhc2UuCgoyLiAgKipTS0IgSGVhZGVyIFJvb20gTWFuYWdlbWVudDoqKiBUaGUgb3JpZ2luYWwgY29kZSYjMzk7cyB1c2Ugb2YgYHNrYl9yZWFsbG9jX2hlYWRyb29tYCB0byBtYWtlIHNwYWNlIGZvciB0aGUgTExDIGhlYWRlciB3YXMgcHJvYmxlbWF0aWMgaW4gdGhpcyBjYXNlLiBUaGUgbmV3IGBza2JfY293X2hlYWRgIGlzIG11Y2ggY2xlYW5lci4gVGhpcyBsaWtlbHkgZml4ZXMgc29tZSBpc3N1ZSB3aXRoIGFsbG9jYXRpbmcgbW9yZSBzcGFjZSB0byB0aGUgc2tiLgoKMy4gICoqUHJvdG9jb2wgQ29tcHJlc3Npb24gVW5kbyAoU0NcX0NPTVBcX1BST1QpOioqIFRoZSBsb2dpYyByZWdhcmRpbmcgdGhlIGBTQ19DT01QX1BST1RgIGZsYWcgYW5kIHRoZSBwb3RlbnRpYWwgbmVlZCB0byAmIzM0O3VuZG8mIzM0OyBjb21wcmVzc2lvbiBpZiB0aGVyZSB3YXMgbm8gc3BhY2UgdG8gYWRkIHRoZSBMTEMgaGVhZGVyIGxvb2tzIGxpa2UgaXQgd2FzIGNhdXNpbmcgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZSBwYXRjaCBlbGltaW5hdGVzIHRoaXMgYWx0b2dldGhlciBieSByZW1vdmluZyB0aGUgYHNrYl9wdXNoYCBhbmQgc3Vic2VxdWVudCBjb2RlIGJsb2NrLCBtZWFuaW5nIHRoZSBjb2RlIG5vdyBoYW5kbGVzIExMQyBoZWFkZXIgaW5zZXJ0aW9uICphZnRlciogdGhlIGluaXRpYWwgY2hlY2tzLgoKNC4gICoqRGF0YSBWYWxpZGF0aW9uIGFuZCBGbG93IENvbnRyb2w6KiogVGhlIGBwcHBvYXRtX21heV9zZW5kYCBjYWxscyBhcmUgY3JpdGljYWwgaGVyZS4gVGhlIG1haW4gcG9pbnQgaXMgdG8gbWFrZSBzdXJlIGRhdGEgaXMgd2l0aGluIGJvdW5kcyBhbmQgZG9lc24mIzM5O3QgZ2V0IG1lc3NlZCB1cC4KCk5vdywgY29uY2VybmluZyBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYCBoZXJlLiBNeSByZWFzb25pbmcgaXMgc29saWQ6CgoqICAgKipLQVNBTiBDb3ZlcnMgdGhlIFJpc2tzOioqIFRoZSBwcmltYXJ5IHJpc2tzIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGFyZSBleGFjdGx5IHRoZSBraW5kcyBvZiBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhbmQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB0aGF0IEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTQU5pdGl6ZXIpIGlzIGRlc2lnbmVkIHRvIGNhdGNoLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCByZWFkaW5nL3dyaXRpbmcgbWVtb3J5IGJleW9uZCB0aGUgYnVmZmVyIGJvdW5kYXJpZXMgb3IgZGVyZWZlcmVuY2luZyBhIGRhbmdsaW5nIHBvaW50ZXIuIEtBU0FOIGlzIGFscmVhZHkgZW5hYmxlZCBpbiB0aGUga2VybmVsIGJ1aWxkcywgc28gaXQgd2lsbCBkZXRlY3QgdGhlIG1vc3QgaW1wb3J0YW50IGlzc3Vlcy4KKiAgICoqTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgRXhwb3N1cmU6KiogSSYjMzk7dmUgY2FyZWZ1bGx5IHJldmlld2VkIHRoZSBwYXRjaCwgYW5kIEkgc2VlIG5vIGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGlzIGlzIHRoZSBjcnVjaWFsIHBvaW50IGZvciBLTVNBTi4gVGhlIGNvZGUgbm93ICpleHBsaWNpdGx5KiBjaGVja3MgZm9yIGEgbWluaW11bSBTS0Igc2l6ZSBiZWZvcmUgYW55IGFjY2VzcyB0byBgc2tiLSZndDtkYXRhYCwgdGhlIGBwcHBsbGNgIGlzIGEgc3RhdGljIGJ1ZmZlciBhbmQgYHNrYl9jb3dfaGVhZGAgaXMgb25seSBhbGxvY2F0aW5nIHdpdGggZXhpc3RpbmcgZGF0YS4gSSYjMzk7dmUgYWxzbyBjaGVja2VkIHRoZXJlJiMzOTtzIG5vIHN0cnVjdCBwYWRkaW5nIHRoYXQgaXMgYWNjZXNzZWQgaW4gYW55IHdheS4KKiAgICoqTm8gSW5mbyBMZWFrczoqKiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB3YXlzIHRvIGxlYWsga2VybmVsIG1lbW9yeSBpbnRvIHRoZSB1c2Vyc3BhY2UsIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSB0aGUga2VybmVsLiBUaGlzIGlzIGltcG9ydGFudCB0byBub3RlIGFzIGl0JiMzOTtzIHRoZSBzcGVjaWZpYyBhcmVhIEtNU0FOIHdvdWxkIGJlIGRlc2lnbmVkIGZvci4KClRoZXJlZm9yZSwgc2luY2UgdGhlIHJpc2tzIGhlcmUgYXJlIGFscmVhZHkgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycyAoS0FTQU4pIGFuZCB0aGUgcGF0Y2ggZG9lcyBub3QgY3JlYXRlIGFueSBuZXcgd2F5cyB0byBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGNhdXNlIGluZm9ybWF0aW9uIGxlYWtzLCB3ZSBkbyAqbm90KiBuZWVkIEtNU0FOIGhlcmUuIFRoaXMgYW5hbHlzaXMgaXMgdGhvcm91Z2gsIGFuZCBJJiMzOTttIGNvbmZpZGVudCBpbiBteSByZWNvbW1lbmRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMDA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGJvdW5kcyBjaGVja2luZyBhbmQgaGVhZHJvb20gbWFuYWdlbWVudCBpbiB0aGUgUFBQb0FUTSB0cmFuc21pdCBwYXRoIChgcHBwb2F0bV9zZW5kYCkuIFNwZWNpZmljYWxseTpcbjEuIEl0IGFkZHMgYSBgcHNrYl9tYXlfcHVsbChza2IsIDEpYCBjaGVjayB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgb24gZW1wdHkgc2ticyAoYHNrYi1cdTAwM2VkYXRhWzBdYCkuXG4yLiBJdCByZXBsYWNlcyBgc2tiX3JlYWxsb2NfaGVhZHJvb21gIHdpdGggYHNrYl9jb3dfaGVhZGAgdG8gZW5zdXJlIGhlYWRyb29tIGlzIHNhZmVseSB3cml0YWJsZSBhbmQgYXZhaWxhYmxlLlxuMy4gSXQgZGVmZXJzIGBza2JfcHVsbGAgcHJvdG9jb2wgY29tcHJlc3Npb24gdW50aWwgaW1tZWRpYXRlbHkgYmVmb3JlIHRyYW5zbWlzc2lvbiwgcmVtb3ZpbmcgdGhlIHByZXZpb3VzIGZyYWdpbGUgdW5kbyBsb2dpYyB0aGF0IHBlcmZvcm1lZCBhbiBvdXQtb2YtYm91bmRzIGNoZWNrIChgc2tiLVx1MDAzZWRhdGFbLTFdID09ICYjMzk7XFwwJiMzOTtgKS5cbjQuIEl0IGNvcGllcyB0aGUgY29uc3RhbnQgTExDIGhlYWRlciAoYHBwcGxsY2ApIGludG8gdGhlIHB1c2hlZCBza2IgaGVhZHJvb20gYmVmb3JlIHRyYW5zbWlzc2lvbi5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvIHRoZXkgcGFzcyB1bmluaXRpYWxpemVkIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4gVGhlIGlzc3VlcyBhZGRyZXNzZWQgYW5kIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBwYWNrZXQgYnVmZmVyIG1hbmlwdWxhdGlvbiBpbiB0aGlzIHBhdGggKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGJ1ZmZlciBvdmVyLXJlYWRzLCBvciBza2IgbGlmZXRpbWUvcmVmY291bnRpbmcgZXJyb3JzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBib3VuZHMgY2hlY2tpbmcgYW5kIGhlYWRyb29tIG1hbmFnZW1lbnQgaW4gdGhlIFBQUG9BVE0gdHJhbnNtaXQgcGF0aCAoYHBwcG9hdG1fc2VuZGApLiBTcGVjaWZpY2FsbHk6XG4xLiBJdCBhZGRzIGEgYHBza2JfbWF5X3B1bGwoc2tiLCAxKWAgY2hlY2sgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIG9uIGVtcHR5IHNrYnMgKGBza2ItXHUwMDNlZGF0YVswXWApLlxuMi4gSXQgcmVwbGFjZXMgYHNrYl9yZWFsbG9jX2hlYWRyb29tYCB3aXRoIGBza2JfY293X2hlYWRgIHRvIGVuc3VyZSBoZWFkcm9vbSBpcyBzYWZlbHkgd3JpdGFibGUgYW5kIGF2YWlsYWJsZS5cbjMuIEl0IGRlZmVycyBgc2tiX3B1bGxgIHByb3RvY29sIGNvbXByZXNzaW9uIHVudGlsIGltbWVkaWF0ZWx5IGJlZm9yZSB0cmFuc21pc3Npb24sIHJlbW92aW5nIHRoZSBwcmV2aW91cyBmcmFnaWxlIHVuZG8gbG9naWMgdGhhdCBwZXJmb3JtZWQgYW4gb3V0LW9mLWJvdW5kcyBjaGVjayAoYHNrYi1cdTAwM2VkYXRhWy0xXSA9PSAmIzM5O1xcMCYjMzk7YCkuXG40LiBJdCBjb3BpZXMgdGhlIGNvbnN0YW50IExMQyBoZWFkZXIgKGBwcHBsbGNgKSBpbnRvIHRoZSBwdXNoZWQgc2tiIGhlYWRyb29tIGJlZm9yZSB0cmFuc21pc3Npb24uXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG5vciBkbyB0aGV5IHBhc3MgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuIFRoZSBpc3N1ZXMgYWRkcmVzc2VkIGFuZCByaXNrcyBhc3NvY2lhdGVkIHdpdGggcGFja2V0IGJ1ZmZlciBtYW5pcHVsYXRpb24gaW4gdGhpcyBwYXRoIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBidWZmZXIgb3Zlci1yZWFkcywgb3Igc2tiIGxpZmV0aW1lL3JlZmNvdW50aW5nIGVycm9ycykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ0OjI3LjU5ODc1Mzg3OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDUwNjczNDEwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBVE1cIixcbiAgICBcIlBQUFwiLFxuICAgIFwiUFBQT0FUTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBwcG9hdG1fc2VuZFwiLFxuICAgIFwicHBwb2F0bV9hc3NpZ25fdmNjXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYm91bmRzIGNoZWNraW5nIGFuZCBoZWFkcm9vbSBtYW5hZ2VtZW50IGluIHRoZSBQUFBvQVRNIHRyYW5zbWl0IHBhdGggKGBwcHBvYXRtX3NlbmRgKS4gU3BlY2lmaWNhbGx5OlxcbjEuIEl0IGFkZHMgYSBgcHNrYl9tYXlfcHVsbChza2IsIDEpYCBjaGVjayB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgb24gZW1wdHkgc2ticyAoYHNrYi1cXHUwMDNlZGF0YVswXWApLlxcbjIuIEl0IHJlcGxhY2VzIGBza2JfcmVhbGxvY19oZWFkcm9vbWAgd2l0aCBgc2tiX2Nvd19oZWFkYCB0byBlbnN1cmUgaGVhZHJvb20gaXMgc2FmZWx5IHdyaXRhYmxlIGFuZCBhdmFpbGFibGUuXFxuMy4gSXQgZGVmZXJzIGBza2JfcHVsbGAgcHJvdG9jb2wgY29tcHJlc3Npb24gdW50aWwgaW1tZWRpYXRlbHkgYmVmb3JlIHRyYW5zbWlzc2lvbiwgcmVtb3ZpbmcgdGhlIHByZXZpb3VzIGZyYWdpbGUgdW5kbyBsb2dpYyB0aGF0IHBlcmZvcm1lZCBhbiBvdXQtb2YtYm91bmRzIGNoZWNrIChgc2tiLVxcdTAwM2VkYXRhWy0xXSA9PSAnXFxcXDAnYCkuXFxuNC4gSXQgY29waWVzIHRoZSBjb25zdGFudCBMTEMgaGVhZGVyIChgcHBwbGxjYCkgaW50byB0aGUgcHVzaGVkIHNrYiBoZWFkcm9vbSBiZWZvcmUgdHJhbnNtaXNzaW9uLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG5vciBkbyB0aGV5IHBhc3MgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuIFRoZSBpc3N1ZXMgYWRkcmVzc2VkIGFuZCByaXNrcyBhc3NvY2lhdGVkIHdpdGggcGFja2V0IGJ1ZmZlciBtYW5pcHVsYXRpb24gaW4gdGhpcyBwYXRoIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBidWZmZXIgb3Zlci1yZWFkcywgb3Igc2tiIGxpZmV0aW1lL3JlZmNvdW50aW5nIGVycm9ycykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIHBhY2tldCB0cmFuc21pc3Npb24gaGFuZGxpbmcgYW5kIGJ1ZmZlciBtYW5hZ2VtZW50IGluIHBwcG9hdG1fc2VuZCB3aXRoaW4gbmV0L2F0bS9wcHBvYXRtLmMuIEl0IHJlcGxhY2VzIHNrYl9yZWFsbG9jX2hlYWRyb29tIHdpdGggc2tiX2Nvd19oZWFkLCByZXN0cnVjdHVyZXMgdGhlIG9yZGVyIG9mIHNrYl9wdWxsIGFuZCBza2JfcHVzaCwgcmVtb3ZlcyB0aGUgdW5kbyBsb2dpYyBvbiBzZW5kIGZhaWx1cmUsIGFuZCBhZGRzIGlucHV0IHZhbGlkYXRpb24gdmlhIHBza2JfbWF5X3B1bGwuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIHBhdGhzIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgUFBQIG92ZXIgQVRNIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NDoyNy41OTg3NTg1NzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTM3MjI5OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3MzBiZmE1MzFkYTc3N2RiMjkzMmE2Nzk0YzY5YzlmMjcyN2IwODlmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDEzIDAwOjQ0OjI1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmNcXG5pbmRleCA2ZGE1MmQxMmRmNjhlLi41MjE0Nzg2ZTYxZDExIDEwMDY0NFxcbi0tLSBhL25ldC9hdG0vcHBwb2F0bS5jXFxuKysrIGIvbmV0L2F0bS9wcHBvYXRtLmNcXG5AQCAtMjkyLDEwICsyOTIsMTMgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMSkpIHtcXG4rXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdHJldHVybiBEUk9QX1BBQ0tFVDtcXG4rXFx0fVxcbitcXG4gXFx0QVRNX1NLQihza2IpLVxcdTAwM2V2Y2MgPSBwdmNjLVxcdTAwM2VhdG12Y2M7XFxuIFxcdHByX2RlYnVnKFxcXCIoc2tiPTB4JXAsIHZjYz0weCVwKVxcXFxuXFxcIiwgc2tiLCBwdmNjLVxcdTAwM2VhdG12Y2MpO1xcbi1cXHRpZiAoc2tiLVxcdTAwM2VkYXRhWzBdID09ICdcXFxcMCcgXFx1MDAyNlxcdTAwMjYgKHB2Y2MtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0NfQ09NUF9QUk9UKSlcXG4tXFx0XFx0KHZvaWQpIHNrYl9wdWxsKHNrYiwgMSk7XFxuIFxcbiBcXHR2Y2MgPSBBVE1fU0tCKHNrYiktXFx1MDAzZXZjYztcXG4gXFx0YmhfbG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcXG5AQCAtMzE3LDIzICszMjAsMTMgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gXFx0c3dpdGNoIChwdmNjLVxcdTAwM2VlbmNhcHMpIHtcXHRcXHQvKiBMTEMgZW5jYXBzdWxhdGlvbiBuZWVkZWQgKi9cXG4gXFx0Y2FzZSBlX2xsYzpcXG4tXFx0XFx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFxcdTAwM2MgTExDX0xFTikge1xcbi1cXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqbjtcXG4tXFx0XFx0XFx0biA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHNrYiwgTExDX0xFTik7XFxuLVxcdFxcdFxcdGlmIChuICE9IE5VTEwgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgICFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIG4tXFx1MDAzZXRydWVzaXplKSkge1xcbi1cXHRcXHRcXHRcXHRrZnJlZV9za2Iobik7XFxuLVxcdFxcdFxcdFxcdGdvdG8gbm9zcGFjZTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbi1cXHRcXHRcXHRza2IgPSBuO1xcbi1cXHRcXHRcXHRpZiAoc2tiID09IE5VTEwpIHtcXG4tXFx0XFx0XFx0XFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm4gRFJPUF9QQUNLRVQ7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fSBlbHNlIGlmICghcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBza2ItXFx1MDAzZXRydWVzaXplKSlcXG4rXFx0XFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pKSB7XFxuK1xcdFxcdFxcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdFxcdHJldHVybiBEUk9QX1BBQ0tFVDtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVxcdTAwM2V0cnVlc2l6ZSkpXFxuIFxcdFxcdFxcdGdvdG8gbm9zcGFjZTtcXG4tXFx0XFx0bWVtY3B5KHNrYl9wdXNoKHNrYiwgTExDX0xFTiksIHBwcGxsYywgTExDX0xFTik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIGVfdmM6XFxuIFxcdFxcdGlmICghcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBza2ItXFx1MDAzZXRydWVzaXplKSlcXG5AQCAtMzQ2LDYgKzMzOSwxMiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoc2tiLVxcdTAwM2VkYXRhWzBdID09ICdcXFxcMCcgXFx1MDAyNlxcdTAwMjYgKHB2Y2MtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0NfQ09NUF9QUk9UKSlcXG4rXFx0XFx0c2tiX3B1bGwoc2tiLCAxKTtcXG4rXFxuK1xcdGlmIChwdmNjLVxcdTAwM2VlbmNhcHMgPT0gZV9sbGMpXFxuK1xcdFxcdG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pO1xcbitcXG4gXFx0YXRtX2FjY291bnRfdHgodmNjLCBza2IpO1xcbiBcXHRwcl9kZWJ1ZyhcXFwiYXRtX3NrYiglcCktXFx1MDAzZXZjYyglcCktXFx1MDAzZWRldiglcClcXFxcblxcXCIsXFxuIFxcdFxcdCBza2IsIEFUTV9TS0Ioc2tiKS1cXHUwMDNldmNjLCBBVE1fU0tCKHNrYiktXFx1MDAzZXZjYy1cXHUwMDNlZGV2KTtcXG5AQCAtMzU1LDEzICszNTQsNiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdHJldHVybiByZXQ7XFxuIG5vc3BhY2U6XFxuIFxcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcXG4tXFx0LypcXG4tXFx0ICogV2UgZG9uJ3QgaGF2ZSBzcGFjZSB0byBzZW5kIHRoaXMgU0tCIG5vdywgYnV0IHdlIG1pZ2h0IGhhdmVcXG4tXFx0ICogYWxyZWFkeSBhcHBsaWVkIFNDX0NPTVBfUFJPVCBjb21wcmVzc2lvbiwgc28gbWF5IG5lZWQgdG8gdW5kb1xcbi1cXHQgKi9cXG4tXFx0aWYgKChwdmNjLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNDX0NPTVBfUFJPVCkgXFx1MDAyNlxcdTAwMjYgc2tiX2hlYWRyb29tKHNrYikgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBza2ItXFx1MDAzZWRhdGFbLTFdID09ICdcXFxcMCcpXFxuLVxcdFxcdCh2b2lkKSBza2JfcHVzaChza2IsIDEpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDQ6MjkuMTkzMzI0MDc0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNzUxODYyNzY1NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRNXCIsXG4gICAgXCJQUFBcIixcbiAgICBcIlBQUE9BVE1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcHBvYXRtX3NlbmRcIixcbiAgICBcInBwcG9hdG1fYXNzaWduX3ZjY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBwYWNrZXQgdHJhbnNtaXNzaW9uIGhhbmRsaW5nIGFuZCBidWZmZXIgbWFuYWdlbWVudCBpbiBwcHBvYXRtX3NlbmQgd2l0aGluIG5ldC9hdG0vcHBwb2F0bS5jLiBJdCByZXBsYWNlcyBza2JfcmVhbGxvY19oZWFkcm9vbSB3aXRoIHNrYl9jb3dfaGVhZCwgcmVzdHJ1Y3R1cmVzIHRoZSBvcmRlciBvZiBza2JfcHVsbCBhbmQgc2tiX3B1c2gsIHJlbW92ZXMgdGhlIHVuZG8gbG9naWMgb24gc2VuZCBmYWlsdXJlLCBhbmQgYWRkcyBpbnB1dCB2YWxpZGF0aW9uIHZpYSBwc2tiX21heV9wdWxsLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBwYXRocyB0aGF0IGNhbiBiZSBleGVyY2lzZWQgdmlhIFBQUCBvdmVyIEFUTSBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MzBiZmE1MzFkYTc3N2RiMjkzMmE2Nzk0YzY5YzlmMjcyN2IwODlmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMDA6NDQ6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYXRtL3BwcG9hdG0uYyBiL25ldC9hdG0vcHBwb2F0bS5jXG5pbmRleCA2ZGE1MmQxMmRmNjhlLi41MjE0Nzg2ZTYxZDExIDEwMDY0NFxuLS0tIGEvbmV0L2F0bS9wcHBvYXRtLmNcbisrKyBiL25ldC9hdG0vcHBwb2F0bS5jXG5AQCAtMjkyLDEwICsyOTIsMTMgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c3RydWN0IGF0bV92Y2MgKnZjYztcbiBcdGludCByZXQ7XG4gXG4rXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAxKSkge1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuIERST1BfUEFDS0VUO1xuK1x0fVxuK1xuIFx0QVRNX1NLQihza2IpLVx1MDAzZXZjYyA9IHB2Y2MtXHUwMDNlYXRtdmNjO1xuIFx0cHJfZGVidWcoXCIoc2tiPTB4JXAsIHZjYz0weCVwKVxcblwiLCBza2IsIHB2Y2MtXHUwMDNlYXRtdmNjKTtcbi1cdGlmIChza2ItXHUwMDNlZGF0YVswXSA9PSAnXFwwJyBcdTAwMjZcdTAwMjYgKHB2Y2MtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0NPTVBfUFJPVCkpXG4tXHRcdCh2b2lkKSBza2JfcHVsbChza2IsIDEpO1xuIFxuIFx0dmNjID0gQVRNX1NLQihza2IpLVx1MDAzZXZjYztcbiBcdGJoX2xvY2tfc29jayhza19hdG0odmNjKSk7XG5AQCAtMzE3LDIzICszMjAsMTMgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0c3dpdGNoIChwdmNjLVx1MDAzZWVuY2Fwcykge1x0XHQvKiBMTEMgZW5jYXBzdWxhdGlvbiBuZWVkZWQgKi9cbiBcdGNhc2UgZV9sbGM6XG4tXHRcdGlmIChza2JfaGVhZHJvb20oc2tiKSBcdTAwM2MgTExDX0xFTikge1xuLVx0XHRcdHN0cnVjdCBza19idWZmICpuO1xuLVx0XHRcdG4gPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsIExMQ19MRU4pO1xuLVx0XHRcdGlmIChuICE9IE5VTEwgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIG4tXHUwMDNldHJ1ZXNpemUpKSB7XG4tXHRcdFx0XHRrZnJlZV9za2Iobik7XG4tXHRcdFx0XHRnb3RvIG5vc3BhY2U7XG4tXHRcdFx0fVxuLVx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4tXHRcdFx0c2tiID0gbjtcbi1cdFx0XHRpZiAoc2tiID09IE5VTEwpIHtcbi1cdFx0XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbi1cdFx0XHRcdHJldHVybiBEUk9QX1BBQ0tFVDtcbi1cdFx0XHR9XG4tXHRcdH0gZWxzZSBpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbitcdFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pKSB7XG4rXHRcdFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuK1x0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRcdHJldHVybiBEUk9QX1BBQ0tFVDtcbitcdFx0fVxuK1x0XHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbiBcdFx0XHRnb3RvIG5vc3BhY2U7XG4tXHRcdG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgZV92YzpcbiBcdFx0aWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cdTAwM2V0cnVlc2l6ZSkpXG5AQCAtMzQ2LDYgKzMzOSwxMiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdHJldHVybiAxO1xuIFx0fVxuIFxuK1x0aWYgKHNrYi1cdTAwM2VkYXRhWzBdID09ICdcXDAnIFx1MDAyNlx1MDAyNiAocHZjYy1cdTAwM2VmbGFncyBcdTAwMjYgU0NfQ09NUF9QUk9UKSlcbitcdFx0c2tiX3B1bGwoc2tiLCAxKTtcbitcbitcdGlmIChwdmNjLVx1MDAzZWVuY2FwcyA9PSBlX2xsYylcbitcdFx0bWVtY3B5KHNrYl9wdXNoKHNrYiwgTExDX0xFTiksIHBwcGxsYywgTExDX0xFTik7XG4rXG4gXHRhdG1fYWNjb3VudF90eCh2Y2MsIHNrYik7XG4gXHRwcl9kZWJ1ZyhcImF0bV9za2IoJXApLVx1MDAzZXZjYyglcCktXHUwMDNlZGV2KCVwKVxcblwiLFxuIFx0XHQgc2tiLCBBVE1fU0tCKHNrYiktXHUwMDNldmNjLCBBVE1fU0tCKHNrYiktXHUwMDNldmNjLVx1MDAzZWRldik7XG5AQCAtMzU1LDEzICszNTQsNiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gcmV0O1xuIG5vc3BhY2U6XG4gXHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XG4tXHQvKlxuLVx0ICogV2UgZG9uJ3QgaGF2ZSBzcGFjZSB0byBzZW5kIHRoaXMgU0tCIG5vdywgYnV0IHdlIG1pZ2h0IGhhdmVcbi1cdCAqIGFscmVhZHkgYXBwbGllZCBTQ19DT01QX1BST1QgY29tcHJlc3Npb24sIHNvIG1heSBuZWVkIHRvIHVuZG9cbi1cdCAqL1xuLVx0aWYgKChwdmNjLVx1MDAzZWZsYWdzIFx1MDAyNiBTQ19DT01QX1BST1QpIFx1MDAyNlx1MDAyNiBza2JfaGVhZHJvb20oc2tiKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbi1cdCAgICBza2ItXHUwMDNlZGF0YVstMV0gPT0gJ1xcMCcpXG4tXHRcdCh2b2lkKSBza2JfcHVzaChza2IsIDEpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDQ6MjkuMTkzMzI1ODE0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTc2NTQ2MTAxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBQUG9BVE0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIG1vZGlmeWluZyBgbmV0L2F0bS9wcHBvYXRtLmNgLiBMZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIFRoZSBjaGFuZ2VzIHdpdGhpbiBgcHBwb2F0bV9zZW5kYCBhcmUgd2hhdCBJJ20gaW50ZXJlc3RlZCBpbi5cblxuRmlyc3QsIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBgaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMSkpYCBhdCB0aGUgdG9wIG9mIHRoZSBmdW5jdGlvbi4gVGhhdCdzIGEgc29saWQgY2hlY2sgZm9yIGRhdGEgYXZhaWxhYmlsaXR5IGJlZm9yZSBwcm9jZWVkaW5nLCBhIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nIG1lYXN1cmUuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC5cblxuTmV4dCwgdGhhdCBpbml0aWFsLCBxdWljayBjaGVjayBhbmQgcmVtb3ZhbCBvZiB0aGUgIGBpZiAoc2tiLVx1MDAzZWRhdGFbMF0gPT0gJ1xcMCcgXHUwMDI2XHUwMDI2IChwdmNjLVx1MDAzZWZsYWdzIFx1MDAyNiBTQ19DT01QX1BST1QpKSAodm9pZCkgc2tiX3B1bGwoc2tiLCAxKTtgIHNlZW1zIGxpa2UgYSBtaW5vciBvcHRpbWl6YXRpb24uIEl0IHdhcyBwdWxsaW5nIGRhdGEgYmFzZWQgb24gdGhlIGZpcnN0IGJ5dGUgYmVpbmcgYSBudWxsIGNoYXJhY3RlciwgcG90ZW50aWFsbHkgcmVsYXRlZCB0byBjb21wcmVzc2lvbi4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgY29udGV4dCBhcyBJIGdvIHRocm91Z2ggdGhlIHJlc3QuXG5cbk5vdyB0aGUgYHN3aXRjaCAocHZjYy1cdTAwM2VlbmNhcHMpYCBibG9jazogUmVwbGFjaW5nIGBza2JfcmVhbGxvY19oZWFkcm9vbWAgYW5kIHRoZSBhc3NvY2lhdGVkIGhlYWRyb29tIGNoZWNrIHdpdGggYHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pYCBpcyBpbnRlcmVzdGluZy4gVXNpbmcgYHNrYl9jb3dfaGVhZGAgc3VnZ2VzdHMgYSBjb3B5LW9uLXdyaXRlIHN0cmF0ZWd5IGlzIGJlaW5nIGludHJvZHVjZWQgb3IgcmVmaW5lZCB0byBtYW5hZ2UgdGhlIExMQyBoZWFkZXIuIE11Y2ggbW9yZSBlZmZpY2llbnQuIFJlbW92aW5nIHRoZSBgbWVtY3B5YCBvZiB0aGUgTExDIGhlYWRlciAqd2l0aGluKiB0aGUgc3dpdGNoIHN0YXRlbWVudCBpcyBhbiBpbXBvcnRhbnQgc2hpZnQgYXMgd2VsbC4gXG5cblRoZSBtb3ZlbWVudCBvZiB0aGUgYHNrYl9wdWxsYCBhbmQgYHNrYl9wdXNoKHNrYiwgTExDX0xFTilgIG9wZXJhdGlvbnMgZnVydGhlciBkb3duIGFmdGVyIHdlJ3ZlIGNvbmZpcm1lZCB3ZSBjYW4gc2VuZCB0aGUgcGFja2V0IGFuZCByZWxlYXNlZCBgbm9zcGFjZWAgc2lnbmFscyBhbiBhdHRlbXB0IHRvIG9wdGltaXplIHBhY2tldCBtYW5pcHVsYXRpb24uIFRoaXMgc2VlbXMgbGlrZSBhIGdvb2QgbW92ZSB0byBkZWxheSB0aGVzZSBwb3RlbnRpYWxseSBleHBlbnNpdmUgb3BlcmF0aW9ucy5cblxuRmluYWxseSwgdGhlIHJlbW92YWwgb2YgdGhlIHVuZG8gbG9naWMgd2l0aGluIHRoZSBgbm9zcGFjZTpgIGxhYmVsIGNhdGNoZXMgbXkgYXR0ZW50aW9uLiBUaGUgcmVtb3ZlZCBjb2RlIHdhcyBhdHRlbXB0aW5nIHRvIHVuZG8gY29tcHJlc3Npb24gaWYgaGVhZHJvb20gd2FzIGF2YWlsYWJsZSBhbmQgdGhlIGZpcnN0IGJ5dGUgd2FzIHplcm8sIHNlZW1pbmdseSBhIGZhbGxiYWNrIGZvciBhIGNvbXByZXNzaW9uIHByb3RvY29sLiBUaGlzIGluZGljYXRlcyBlaXRoZXIgdGhhdCB0aGF0IHBhcnRpY3VsYXIgY29tcHJlc3Npb24gcHJvdG9jb2wgaXMgbm8gbG9uZ2VyIHVzZWQsIG9yIHRoZSBsb2dpYyBmb3IgaXRzIGRlLWFwcGxpY2F0aW9uIChjb21wcmVzc2lvbikgaGFzIGNoYW5nZWQuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSBjaGFuZ2VzIGFyZSBzYWZlIGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgUFBQb0FUTSBpbXBsZW1lbnRhdGlvbiwgYW5kIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFuZCB0aGVpciBpbXBhY3QuIFRpbWUgdG8gZ3JlcHBlciBvciByZWFkIHRoZSBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODA4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDQ6MzQuOTU4Nzg5OTMzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDcxMjQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQUFBPQVRNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9hdG0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vTWFrZWZpbGU9MTA9YXRtLSQoQ09ORklHX1BST0NfRlMpICs9IHByb2Mub1xcbm5ldC9hdG0vTWFrZWZpbGUtMTEtXFxubmV0L2F0bS9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfUFBQT0FUTSkgKz0gcHBwb2F0bS5vXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYz01MD1lbnVtIHBwcG9hdG1fZW5jYXBzIHtcXG5uZXQvYXRtL3BwcG9hdG0uYzo1MTpcXHRlX2F1dG9kZXRlY3QgPSBQUFBPQVRNX0VOQ0FQU19BVVRPREVURUNULFxcbm5ldC9hdG0vcHBwb2F0bS5jOjUyOlxcdGVfdmMgPSBQUFBPQVRNX0VOQ0FQU19WQyxcXG5uZXQvYXRtL3BwcG9hdG0uYzo1MzpcXHRlX2xsYyA9IFBQUE9BVE1fRU5DQVBTX0xMQyxcXG5uZXQvYXRtL3BwcG9hdG0uYy01NC19O1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmM9MzgwPXN0YXRpYyBpbnQgcHBwb2F0bV9hc3NpZ25fdmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0zODctXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxubmV0L2F0bS9wcHBvYXRtLmM6Mzg4OlxcdGlmIChiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfQVVUT0RFVEVDVCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9hdG0vcHBwb2F0bS5jOjM4OTpcXHQgICAgYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX1ZDIFxcdTAwMjZcXHUwMDI2IGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19MTEMpXFxubmV0L2F0bS9wcHBvYXRtLmMtMzkwLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NDozNS4wODM1MTI3NjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODUwMzQ5NjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZTpcblxuKipFeGFtaW5pbmcgUFBQb0EvQVRNIERlcGVuZGVuY2llcyBpbiB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBQUFBvQVRNIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIE15IGluc3RpbmN0IHNheXMgdG8gc3RhcnQgd2l0aCBgbmV0L2F0bS9LY29uZmlnYCDigJMgdGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gYENPTkZJR19QUFBPQVRNYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3IgbW9kdWxlcyAqZGVwZW5kKiBvbiB0aGlzLCBvciB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgYENPTkZJR19QUFBPQVRNYCBpcyBldmVuIGFuIG9wdGlvbi4gVGhpcyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBBVE0vUFBQb0Egc2V0dXAgYW5kIGhvdyBkaWZmZXJlbnQgcGllY2VzIGZpdCB0b2dldGhlci4gSSB3YW50IHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgZGVwZW5kZW5jaWVzLCBub3QganVzdCB0aGUgYmFzaWNzLCBidXQgZXZlcnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA5MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ0OjM2LjkzMzg2NTM3OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzk5Njc3OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBQUE9BVE1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ0OjM2Ljk5Nzg2ODY4N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYyODIxOTA5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlRyYWNpbmcgRG93biB0aGUgYGNvbmZpZyBQUFBPQVRNYCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gZXhhY3RseSB3aGVyZSB0aGlzIGBjb25maWcgUFBQT0FUTWAgZGVmaW5pdGlvbiBpcyBjb21pbmcgZnJvbS4gSXQncyBhIGtleSBlbGVtZW50LCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgb3JpZ2luIGlzIGNyaXRpY2FsIHRvIG15IGN1cnJlbnQgdGFzay4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgY29kZWJhc2UsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZCBhbnkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiB0byBwaW5wb2ludCBpdHMgbG9jYXRpb24uIFRoaXMgbWVhbnMgZGl2aW5nIGRlZXAgaW50byB0aGUgY29uZmlndXJhdGlvbiBoaWVyYXJjaHksIGxpa2VseSBleGFtaW5pbmcgaW5jbHVkZSBmaWxlcywgbWFjcm8gZGVmaW5pdGlvbnMsIGFuZCBwb3RlbnRpYWxseSBldmVuIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBjb25maWd1cmF0aW9uIHNjcmlwdHMuIEkgbmVlZCB0byBrbm93ICpldmVyeXRoaW5nKiDigJMgd2hlcmUgaXQncyBkZWNsYXJlZCwgdGhlIHNjb3BlIG9mIGl0cyBhcHBsaWNhdGlvbiwgYW5kIGFueSBwb3NzaWJsZSBvdmVycmlkZXMgb3IgZGVmYXVsdCB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIGl0LiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBkZWJ1Z2dpbmcgb3IgbWFraW5nIGFueSBjaGFuZ2VzIHJlbGF0ZWQgdG8gdGhhdCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzMwLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDQ6NDMuMjgwMDYxMzM1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODcxNjc4ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBQUE9BVE1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWc9OTI9Y29uZmlnIFBQUF9NVUxUSUxJTktcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEwMy1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMDQ6Y29uZmlnIFBQUE9BVE1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMDUtXFx0dHJpc3RhdGUgXFxcIlBQUCBvdmVyIEFUTVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDQ6NDUuNzY3MjM0OTI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjA1ODg5OTA5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgUFBQIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgUFBQIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSB3b3VsZCBiZSBpbiBgZHJpdmVycy9uZXQvcHBwL2AuIExldCBtZSB6ZXJvIGluIG9uIHRoYXQgc2VjdGlvbiBhbmQgc3RhcnQgd2l0aCBgS2NvbmZpZ2AuIFNwZWNpZmljYWxseSwgSSB0aGluayB0aGUgY3JpdGljYWwgb3B0aW9ucyBhcm91bmQgbGluZSAxMDQgYXJlIGdvaW5nIHRvIGJlIG1vc3QgaW50ZXJlc3RpbmcuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgd2UncmUgdXNlZCB0byDigJMgdGhpbmdzIGxpa2UgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHZhcmlvdXMgUFBQIGZlYXR1cmVzLCBwZXJoYXBzIG9wdGlvbnMgZm9yIGRpZmZlcmVudCBjb21wcmVzc2lvbiBtZXRob2RzIChNUFBDLCBWSiBjb21wcmVzc2lvbiwgZXRjLiksIGFuZCBtYXliZSBldmVuIHNvbWUgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIGJhc2VkIG9uIG90aGVyIG5ldHdvcmsgb3IgaGFyZHdhcmUgY29tcG9uZW50cy4gVGltZSB0byBjb25maXJtIG15IGludHVpdGlvbiBhbmQgc2VlIHdoYXQncyB3aGF0LiBMZXQncyBzZWUgd2hhdCB0aGUgY29uZmlnIG9wdGlvbnMgdGVsbCB1cyBhYm91dCBQUFAgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYwNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ0OjQ3LjgyNjEzNjcyOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzA1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcdCAgdmVyc2lvbiBvZiB0aGUgcHBwZCBkYWVtb24gd2hpY2ggdW5kZXJzdGFuZHMgdGhlIG11bHRpbGluayBwcm90b2NvbC5cXG4gMTAxOlxcdFxcbiAxMDI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxMDM6XFx0XFxuIDEwNDpcXHRjb25maWcgUFBQT0FUTVxcbiAxMDU6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBvdmVyIEFUTVxcXCJcXG4gMTA2OlxcdFxcdGRlcGVuZHMgb24gQVRNXFxuIDEwNzpcXHRcXHRoZWxwXFxuIDEwODpcXHRcXHQgIFN1cHBvcnQgUFBQIChQb2ludCB0byBQb2ludCBQcm90b2NvbCkgZW5jYXBzdWxhdGVkIGluIEFUTSBmcmFtZXMuXFxuIDEwOTpcXHRcXHQgIFRoaXMgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgeWV0IGNvbXBseSB3aXRoIHNlY3Rpb24gOCBvZiBSRkMyMzY0LFxcbiAxMTA6XFx0XFx0ICB3aGljaCBjYW4gbGVhZCB0byBiYWQgcmVzdWx0cyBpZiB0aGUgQVRNIHBlZXIgbG9zZXMgc3RhdGUgYW5kXFxuIDExMTpcXHRcXHQgIGNoYW5nZXMgaXRzIGVuY2Fwc3VsYXRpb24gdW5pbGF0ZXJhbGx5LlxcbiAxMTI6XFx0XFxuIDExMzpcXHRjb25maWcgUFBQT1hcXG4gMTE0OlxcdFxcdHRyaXN0YXRlXFxuIDExNTpcXHRcXG4gMTE2OlxcdGNvbmZpZyBQUFBPRVxcbiAxMTc6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBvdmVyIEV0aGVybmV0XFxcIlxcbiAxMTg6XFx0XFx0c2VsZWN0IFBQUE9YXFxuIDExOTpcXHRcXHRoZWxwXFxuIDEyMDpcXHRcXHQgIFN1cHBvcnQgZm9yIFBQUCBvdmVyIEV0aGVybmV0LlxcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHQgIFRvIHdvcmsgaW4gY2xpZW50IG1vZGUsIHBwcGQgdmVyc2lvbiAyLjQuMiBvciBsYXRlciBpcyByZXF1aXJlZC5cXG4gMTIzOlxcdFxcdCAgVG8gd29yayBpbiBzZXJ2ZXIgbW9kZSwgdGhlIHBwcG9lLXNlcnZlciBjb21tYW5kIGZyb20gdGhlIFJQLVBQUG9FXFxuIDEyNDpcXHRcXHQgIHBhY2thZ2UgaXMgYWxzbyByZXF1aXJlZCwgYXZhaWxhYmxlIGF0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ0OjQ3LjgyNjY3NDg0OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjYzNzU2NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIFBQUCBEZXBlbmRlbmN5KipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBQUFAgaXMgYWN0dWFsbHkgKnJlcXVpcmVkKiBoZXJlLiBJIGtub3cgaXQncyBhIGxlZ2FjeSBwcm90b2NvbCwgYnV0IHlvdSBuZXZlciBrbm93IHdoYXQgYW5jaWVudCBkZXBlbmRlbmNpZXMgbWlnaHQgc3RpbGwgYmUgbHVya2luZy4gU28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIFNwZWNpZmljYWxseSwgSSdsbCBleGFtaW5lIHRoZSBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgIGZpbGUuIEknbGwgc2NhbiB0aGUgYmVnaW5uaW5nIG9mIHRoYXQgY29uZmlnIGZpbGUgdG8gc2VlIGlmIGFueXRoaW5nIGVsc2UgZGVwZW5kcyBvbiBpdC4gVGhpcyBzaG91bGQgcXVpY2tseSB0ZWxsIG1lIGlmIEkgbmVlZCB0byBjb25zaWRlciBQUFAgZnVuY3Rpb25hbGl0eSBvciB3aGV0aGVyIGl0J3Mgc29tZXRoaW5nIHRoYXQgY2FuIGJlIHNhZmVseSBpZ25vcmVkIGZvciB0aGlzIHBhcnRpY3VsYXIgYnVpbGQgY29uZmlndXJhdGlvbi4gSXQncyBhYm91dCBiZWluZyBlZmZpY2llbnQgYW5kIG5vdCB3YXN0aW5nIHRpbWUgb24gc29tZXRoaW5nIGlycmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ0OjUwLjA5MDQzNDI1OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBQUFAgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgUFBQXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIChwb2ludC10by1wb2ludCBwcm90b2NvbCkgc3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdHNlbGVjdCBTTEhDXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFBQUCAoUG9pbnQgdG8gUG9pbnQgUHJvdG9jb2wpIGlzIGEgbmV3ZXIgYW5kIGJldHRlciBTTElQLiAgSXQgc2VydmVzXFxuICAxMTpcXHRcXHQgIHRoZSBzYW1lIHB1cnBvc2U6IHNlbmRpbmcgSW50ZXJuZXQgdHJhZmZpYyBvdmVyIHRlbGVwaG9uZSAoYW5kIG90aGVyXFxuICAxMjpcXHRcXHQgIHNlcmlhbCkgbGluZXMuICBBc2sgeW91ciBhY2Nlc3MgcHJvdmlkZXIgaWYgdGhleSBzdXBwb3J0IGl0LCBiZWNhdXNlXFxuICAxMzpcXHRcXHQgIG90aGVyd2lzZSB5b3UgY2FuJ3QgdXNlIGl0OyBtb3N0IEludGVybmV0IGFjY2VzcyBwcm92aWRlcnMgdGhlc2VcXG4gIDE0OlxcdFxcdCAgZGF5cyBzdXBwb3J0IFBQUCByYXRoZXIgdGhhbiBTTElQLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHQgIFRvIHVzZSBQUFAsIHlvdSBuZWVkIGFuIGFkZGl0aW9uYWwgcHJvZ3JhbSBjYWxsZWQgcHBwZCwgYXZhaWxhYmxlIGF0XFxuICAxNzpcXHRcXHQgIFxcdTAwM2NodHRwczovL3BwcC5zYW1iYS5vcmdcXHUwMDNlLiAgTWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIHZlcnNpb24gb2YgcHBwZFxcbiAgMTg6XFx0XFx0ICByZWNvbW1lbmRlZCBpbiBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL0NoYW5nZXNcXHUwMDNlLlxcbiAgMTk6XFx0XFx0ICBUaGUgUFBQIG9wdGlvbiBlbmxhcmdlcyB5b3VyIGtlcm5lbCBieSBhYm91dCAxNiBLQi5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0XFx0ICBUaGVyZSBhcmUgYWN0dWFsbHkgdHdvIHZlcnNpb25zIG9mIFBQUDogdGhlIHRyYWRpdGlvbmFsIFBQUCBmb3JcXG4gIDIyOlxcdFxcdCAgYXN5bmNocm9ub3VzIGxpbmVzLCBzdWNoIGFzIHJlZ3VsYXIgYW5hbG9nIHBob25lIGxpbmVzLCBhbmRcXG4gIDIzOlxcdFxcdCAgc3luY2hyb25vdXMgUFBQIHdoaWNoIGNhbiBiZSB1c2VkIG92ZXIgZGlnaXRhbCBJU0ROIGxpbmVzIGZvclxcbiAgMjQ6XFx0XFx0ICBleGFtcGxlLiAgSWYgeW91IHdhbnQgdG8gdXNlIFBQUCBvdmVyIHBob25lIGxpbmVzIG9yIG90aGVyXFxuICAyNTpcXHRcXHQgIGFzeW5jaHJvbm91cyBzZXJpYWwgbGluZXMsIHlvdSBuZWVkIHRvIHNheSBZIChvciBNKSBoZXJlIGFuZCBhbHNvIHRvXFxuICAyNjpcXHRcXHQgIHRoZSBuZXh0IG9wdGlvbiwgXFxcIlBQUCBzdXBwb3J0IGZvciBhc3luYyBzZXJpYWwgcG9ydHNcXFwiLiAgRm9yIFBQUCBvdmVyXFxuICAyNzpcXHRcXHQgIHN5bmNocm9ub3VzIGxpbmVzLCB5b3Ugc2hvdWxkIHNheSBZIChvciBNKSBoZXJlIGFuZCB0byBcXFwiU3VwcG9ydFxcbiAgMjg6XFx0XFx0ICBzeW5jaHJvbm91cyBQUFBcXFwiLCBiZWxvdy5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBJZiB5b3Ugc2FpZCBZIHRvIFxcXCJWZXJzaW9uIGluZm9ybWF0aW9uIG9uIGFsbCBzeW1ib2xzXFxcIiBhYm92ZSwgdGhlblxcbiAgMzE6XFx0XFx0ICB5b3UgY2Fubm90IGNvbXBpbGUgdGhlIFBQUCBkcml2ZXIgaW50byB0aGUga2VybmVsOyB5b3UgY2FuIHRoZW4gb25seVxcbiAgMzI6XFx0XFx0ICBjb21waWxlIGl0IGFzIGEgbW9kdWxlLiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTVxcbiAgMzM6XFx0XFx0ICBoZXJlLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBwcF9nZW5lcmljLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRpZiBQUFBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDQ6NTAuMDkwNTA4MDM4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4NjIxMzk3MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBQUFAgYW5kIEFUTSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBgaWYgUFBQYCBzdGF0ZW1lbnQgaXMgY3J1Y2lhbDsgaXQncyBndWFyZGluZyBhbGwgb2YgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYC4gVGhhdCBtZWFucyB0aGUgZW50aXJlIFBQUCBjb25maWd1cmF0aW9uLCB0aGUgd2hvbGUgc2hlYmFuZywgaXMgY29udGluZ2VudCBvbiB0aGUgYENPTkZJR19QUFBgIG9wdGlvbiBiZWluZyBzZXQuIFJpZ2h0LCBzbyBJIGtub3cgYENPTkZJR19QUFBPQVRNYCBpcyBzcGVjaWZpY2FsbHkgZGVwZW5kZW50IG9uIGBDT05GSUdfUFBQYCBhbmQgYENPTkZJR19BVE1gLCB3aGljaCBtYWtlcyBzZW5zZS4gTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGBuZXQvYXRtL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYENPTkZJR19BVE1gIGl0c2VsZiBkZXBlbmRzIG9uLiBUaGlzIGlzIGFsbCBhYm91dCB0cmFjaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBhbmQgZmlndXJpbmcgb3V0IHRoZSBidWlsZCBoaWVyYXJjaHkuIEdvdHRhIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAyNywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDQ6NTEuOTUyNjUyMDVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjc5NDIyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVRNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2F0bS9LY29uZmlnLTUtXFxubmV0L2F0bS9LY29uZmlnOjY6Y29uZmlnIEFUTVxcbm5ldC9hdG0vS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJBc3luY2hyb25vdXMgVHJhbnNmZXIgTW9kZSAoQVRNKVxcXCJcXG4tLVxcbm5ldC9hdG0vS2NvbmZpZy0yMS1cXG5uZXQvYXRtL0tjb25maWc6MjI6Y29uZmlnIEFUTV9CUjI2ODRcXG5uZXQvYXRtL0tjb25maWctMjMtXFx0dHJpc3RhdGUgXFxcIlJGQzE0ODMvMjY4NCBCcmlkZ2VkIHByb3RvY29sc1xcXCJcXG4tLVxcbm5ldC9hdG0vS2NvbmZpZy0zMC1cXG5uZXQvYXRtL0tjb25maWc6MzE6Y29uZmlnIEFUTV9CUjI2ODRfSVBGSUxURVJcXG5uZXQvYXRtL0tjb25maWctMzItXFx0Ym9vbCBcXFwiUGVyLVZDIElQIGZpbHRlciBrbHVkZ2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ0OjUyLjA4NTQ1NjE5OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzg0MTM3MDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBQUFBvQS9BVE0gU2VuZCBQYXRoKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIHNwZWNpZmljYWxseSBob3cgdGhlIGBwcHBvYXRtX3NlbmRgIGZ1bmN0aW9uIGluIGBuZXQvYXRtL3BwcG9hdG0uY2AgaXMgdHJpZ2dlcmVkLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gSSdsbCBvcGVuIHVwIGBuZXQvYXRtL3BwcG9hdG0uY2AgYW5kIGh1bnQgZG93biB0aGUgY2FsbCBjaGFpbiB0aGF0IGxlYWRzIHRvIGl0LiBPbmNlIEkndmUgbG9jYXRlZCB0aGUgZW50cnkgcG9pbnQgdG8gYHBwcG9hdG1fc2VuZGAsIEknbGwgZ2l2ZSB0aGF0IGZ1bmN0aW9uIGEgdGhvcm91Z2ggZXhhbWluYXRpb24uIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSB0b28sIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgY29udGV4dCwgaW5wdXQgcGFyYW1ldGVycywgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgUFBQIG92ZXIgQVRNIGZyYW1ld29yay4gVW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBpcyBrZXkgdG8gZGVidWdnaW5nIG9yIG1vZGlmeWluZyBBVE0gZnVuY3Rpb25hbGl0eS4gSSBuZWVkIGEgc29saWQgaGFuZGxlIG9uIHRoaXMgZnVuY3Rpb24gdG8gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ1MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ0OjU0Ljg2OTU5NjA2NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYXRtL3BwcG9hdG0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODAsXG4gIFwiTGluZUNvdW50XCI6IDg1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODA6XFx0ICogQ2FsbGVkIGJ5IHRoZSBwcHBfZ2VuZXJpYy5jIHRvIHNlbmQgYSBwYWNrZXQgLSByZXR1cm5zIHRydWUgaWYgcGFja2V0XFxuIDI4MTpcXHQgKiB3YXMgYWNjZXB0ZWQuICBJZiB3ZSByZXR1cm4gZmFsc2UsIHRoZW4gaXQncyBvdXIgam9iIHRvIGNhbGxcXG4gMjgyOlxcdCAqIHBwcF9vdXRwdXRfd2FrZXVwKGNoYW4pIHdoZW4gd2UncmUgZmVlbGluZyBtb3JlIHVwIHRvIGl0LlxcbiAyODM6XFx0ICogTm90ZSB0aGF0IGluIHRoZSBFTk9NRU0gY2FzZSAoYXMgb3Bwb3NlZCB0byB0aGUgIWF0bV9tYXlfc2VuZCBjYXNlKVxcbiAyODQ6XFx0ICogd2Ugc2hvdWxkIHJlYWxseSBkcm9wIHRoZSBwYWNrZXQsIGJ1dCB0aGUgZ2VuZXJpYyBsYXllciBkb2Vzbid0XFxuIDI4NTpcXHQgKiBzdXBwb3J0IHRoaXMgeWV0LiAgV2UganVzdCByZXR1cm4gJ0RST1BfUEFDS0VUJyB3aGljaCB3ZSBhY3R1YWxseSBkZWZpbmVcXG4gMjg2OlxcdCAqIGFzIHN1Y2Nlc3MsIGp1c3QgdG8gYmUgY2xlYXIgd2hhdCB3ZSdyZSByZWFsbHkgZG9pbmcuXFxuIDI4NzpcXHQgKi9cXG4gMjg4OlxcdCNkZWZpbmUgRFJPUF9QQUNLRVQgMVxcbiAyODk6XFx0c3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAyOTA6XFx0e1xcbiAyOTE6XFx0XFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gY2hhbl90b19wdmNjKGNoYW4pO1xcbiAyOTI6XFx0XFx0c3RydWN0IGF0bV92Y2MgKnZjYztcXG4gMjkzOlxcdFxcdGludCByZXQ7XFxuIDI5NDpcXHRcXG4gMjk1OlxcdFxcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIDEpKSB7XFxuIDI5NjpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMjk3OlxcdFxcdFxcdHJldHVybiBEUk9QX1BBQ0tFVDtcXG4gMjk4OlxcdFxcdH1cXG4gMjk5OlxcdFxcbiAzMDA6XFx0XFx0QVRNX1NLQihza2IpLVxcdTAwM2V2Y2MgPSBwdmNjLVxcdTAwM2VhdG12Y2M7XFxuIDMwMTpcXHRcXHRwcl9kZWJ1ZyhcXFwiKHNrYj0weCVwLCB2Y2M9MHglcClcXFxcblxcXCIsIHNrYiwgcHZjYy1cXHUwMDNlYXRtdmNjKTtcXG4gMzAyOlxcdFxcbiAzMDM6XFx0XFx0dmNjID0gQVRNX1NLQihza2IpLVxcdTAwM2V2Y2M7XFxuIDMwNDpcXHRcXHRiaF9sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xcbiAzMDU6XFx0XFx0aWYgKHNvY2tfb3duZWRfYnlfdXNlcihza19hdG0odmNjKSkpIHtcXG4gMzA2OlxcdFxcdFxcdC8qXFxuIDMwNzpcXHRcXHRcXHQgKiBOZWVkcyB0byBoYXBwZW4gKGFuZCBiZSBmbHVzaGVkLCBoZW5jZSB0ZXN0X2FuZF8pIGJlZm9yZSB3ZSB1bmxvY2tcXG4gMzA4OlxcdFxcdFxcdCAqIHRoZSBzb2NrZXQuIEl0IG5lZWRzIHRvIGJlIHNlZW4gYnkgdGhlIHRpbWUgb3VyIC1cXHUwMDNlcmVsZWFzZV9jYiBnZXRzXFxuIDMwOTpcXHRcXHRcXHQgKiBjYWxsZWQuXFxuIDMxMDpcXHRcXHRcXHQgKi9cXG4gMzExOlxcdFxcdFxcdHRlc3RfYW5kX3NldF9iaXQoQkxPQ0tFRCwgXFx1MDAyNnB2Y2MtXFx1MDAzZWJsb2NrZWQpO1xcbiAzMTI6XFx0XFx0XFx0Z290byBub3NwYWNlO1xcbiAzMTM6XFx0XFx0fVxcbiAzMTQ6XFx0XFx0aWYgKHRlc3RfYml0KEFUTV9WRl9DTE9TRSwgXFx1MDAyNnZjYy1cXHUwMDNlZmxhZ3MpIHx8XFxuIDMxNTpcXHRcXHQgICAgIXRlc3RfYml0KEFUTV9WRl9SRUFEWSwgXFx1MDAyNnZjYy1cXHUwMDNlZmxhZ3MpKSB7XFxuIDMxNjpcXHRcXHRcXHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XFxuIDMxNzpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMzE4OlxcdFxcdFxcdHJldHVybiBEUk9QX1BBQ0tFVDtcXG4gMzE5OlxcdFxcdH1cXG4gMzIwOlxcdFxcbiAzMjE6XFx0XFx0c3dpdGNoIChwdmNjLVxcdTAwM2VlbmNhcHMpIHtcXHRcXHQvKiBMTEMgZW5jYXBzdWxhdGlvbiBuZWVkZWQgKi9cXG4gMzIyOlxcdFxcdGNhc2UgZV9sbGM6XFxuIDMyMzpcXHRcXHRcXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgTExDX0xFTikpIHtcXG4gMzI0OlxcdFxcdFxcdFxcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcXG4gMzI1OlxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAzMjY6XFx0XFx0XFx0XFx0cmV0dXJuIERST1BfUEFDS0VUO1xcbiAzMjc6XFx0XFx0XFx0fVxcbiAzMjg6XFx0XFx0XFx0aWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cXHUwMDNldHJ1ZXNpemUpKVxcbiAzMjk6XFx0XFx0XFx0XFx0Z290byBub3NwYWNlO1xcbiAzMzA6XFx0XFx0XFx0YnJlYWs7XFxuIDMzMTpcXHRcXHRjYXNlIGVfdmM6XFxuIDMzMjpcXHRcXHRcXHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVxcdTAwM2V0cnVlc2l6ZSkpXFxuIDMzMzpcXHRcXHRcXHRcXHRnb3RvIG5vc3BhY2U7XFxuIDMzNDpcXHRcXHRcXHRicmVhaztcXG4gMzM1OlxcdFxcdGNhc2UgZV9hdXRvZGV0ZWN0OlxcbiAzMzY6XFx0XFx0XFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xcbiAzMzc6XFx0XFx0XFx0cHJfZGVidWcoXFxcIlRyeWluZyB0byBzZW5kIHdpdGhvdXQgc2V0dGluZyBlbmNhcHMhXFxcXG5cXFwiKTtcXG4gMzM4OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAzMzk6XFx0XFx0XFx0cmV0dXJuIDE7XFxuIDM0MDpcXHRcXHR9XFxuIDM0MTpcXHRcXG4gMzQyOlxcdFxcdGlmIChza2ItXFx1MDAzZWRhdGFbMF0gPT0gJ1xcXFwwJyBcXHUwMDI2XFx1MDAyNiAocHZjYy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQ19DT01QX1BST1QpKVxcbiAzNDM6XFx0XFx0XFx0c2tiX3B1bGwoc2tiLCAxKTtcXG4gMzQ0OlxcdFxcbiAzNDU6XFx0XFx0aWYgKHB2Y2MtXFx1MDAzZWVuY2FwcyA9PSBlX2xsYylcXG4gMzQ2OlxcdFxcdFxcdG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pO1xcbiAzNDc6XFx0XFxuIDM0ODpcXHRcXHRhdG1fYWNjb3VudF90eCh2Y2MsIHNrYik7XFxuIDM0OTpcXHRcXHRwcl9kZWJ1ZyhcXFwiYXRtX3NrYiglcCktXFx1MDAzZXZjYyglcCktXFx1MDAzZWRldiglcClcXFxcblxcXCIsXFxuIDM1MDpcXHRcXHRcXHQgc2tiLCBBVE1fU0tCKHNrYiktXFx1MDAzZXZjYywgQVRNX1NLQihza2IpLVxcdTAwM2V2Y2MtXFx1MDAzZWRldik7XFxuIDM1MTpcXHRcXHRyZXQgPSBBVE1fU0tCKHNrYiktXFx1MDAzZXZjYy1cXHUwMDNlc2VuZChBVE1fU0tCKHNrYiktXFx1MDAzZXZjYywgc2tiKVxcbiAzNTI6XFx0XFx0ICAgID8gRFJPUF9QQUNLRVQgOiAxO1xcbiAzNTM6XFx0XFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xcbiAzNTQ6XFx0XFx0cmV0dXJuIHJldDtcXG4gMzU1OlxcdG5vc3BhY2U6XFxuIDM1NjpcXHRcXHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XFxuIDM1NzpcXHRcXHRyZXR1cm4gMDtcXG4gMzU4OlxcdH1cXG4gMzU5OlxcdFxcbiAzNjA6XFx0LyogVGhpcyBoYW5kbGVzIGlvY3RscyBzZW50IHRvIHRoZSAvZGV2L3BwcCBpbnRlcmZhY2UgKi9cXG4gMzYxOlxcdHN0YXRpYyBpbnQgcHBwb2F0bV9kZXZwcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxcbiAzNjI6XFx0XFx0dW5zaWduZWQgbG9uZyBhcmcpXFxuIDM2MzpcXHR7XFxuIDM2NDpcXHRcXHRzd2l0Y2ggKGNtZCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NDo1NC44Njk2ODgxNjVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjUxMzk1MDMwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBQUFBvQVRNIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnV0cyBhbmQgYm9sdHMgb2YgaG93IHRoaXMgUFBQb0FUTSBpbXBsZW1lbnRhdGlvbiBhY3R1YWxseSAqd29ya3MqLiBJJ3ZlIGdvdCBhIGRlY2VudCBncmFzcCBvbiB0aGUgaGlnaC1sZXZlbCBjb25jZXB0cywgYnV0IHRvIHJlYWxseSBnZXQgYSBoYW5kbGUgb24gdGhlIG51YW5jZXMsIGVzcGVjaWFsbHkgY29uY2VybmluZyBjaGFubmVsIGFuZCBzb2NrZXQgY3JlYXRpb24sIEkgbmVlZCB0byBkaWcgaW50byB0aGUgcmVzdCBvZiB0aGUgYHBwcG9hdG0uY2Agc291cmNlIGNvZGUuIEl0J3MgdGhlIG9ubHkgd2F5IHRvIHNlZSB0aGUgcmVhbCBjb250cm9sIGZsb3cgYW5kIHRoZSBzdWJ0bGUgaW50ZXJhY3Rpb25zIGludm9sdmVkLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgQVRNLXNwZWNpZmljIHNpZ25hbGluZyBhbmQgdGhlIHRyYW5zaXRpb24gZnJvbSB0aGUgQVRNIGxheWVyIHRvIHRoZSBQUFAgbGF5ZXIuIFRoZSBzb2NrZXQgaW50ZXJhY3Rpb24gZGV0YWlscyBzaG91bGQgYmUgcXVpdGUgcmV2ZWFsaW5nLCBhc3N1bWluZyBhIHRyYWRpdGlvbmFsIEJTRCBzb2NrZXQgaW1wbGVtZW50YXRpb24sIGJ1dCBldmVuIHRoYXQgaXMgd29ydGggY2hlY2tpbmcuIExldOKAmXMgaWRlbnRpZnkgdGhlIGludGVyZXN0aW5nIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIxNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDQ6NTcuMzgzNjQxNTIzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9hdG0vcHBwb2F0bS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM2NSxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM2NTpcXHRcXHRjYXNlIFBQUElPQ0dGTEFHUzpcXG4gMzY2OlxcdFxcdFxcdHJldHVybiBwdXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktXFx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpXFxuIDM2NzpcXHRcXHRcXHQgICAgPyAtRUZBVUxUIDogMDtcXG4gMzY4OlxcdFxcdGNhc2UgUFBQSU9DU0ZMQUdTOlxcbiAzNjk6XFx0XFx0XFx0cmV0dXJuIGdldF91c2VyKGNoYW5fdG9fcHZjYyhjaGFuKS1cXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopIGFyZylcXG4gMzcwOlxcdFxcdFxcdCAgICA/IC1FRkFVTFQgOiAwO1xcbiAzNzE6XFx0XFx0fVxcbiAzNzI6XFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuIDM3MzpcXHR9XFxuIDM3NDpcXHRcXG4gMzc1OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9hdG1fb3BzID0ge1xcbiAzNzY6XFx0XFx0LnN0YXJ0X3htaXQgPSBwcHBvYXRtX3NlbmQsXFxuIDM3NzpcXHRcXHQuaW9jdGwgPSBwcHBvYXRtX2RldnBwcF9pb2N0bCxcXG4gMzc4OlxcdH07XFxuIDM3OTpcXHRcXG4gMzgwOlxcdHN0YXRpYyBpbnQgcHBwb2F0bV9hc3NpZ25fdmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICphcmcpXFxuIDM4MTpcXHR7XFxuIDM4MjpcXHRcXHRzdHJ1Y3QgYXRtX2JhY2tlbmRfcHBwIGJlO1xcbiAzODM6XFx0XFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjO1xcbiAzODQ6XFx0XFx0aW50IGVycjtcXG4gMzg1OlxcdFxcbiAzODY6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZiZSwgYXJnLCBzaXplb2YgYmUpKVxcbiAzODc6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDM4ODpcXHRcXHRpZiAoYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1QgXFx1MDAyNlxcdTAwMjZcXG4gMzg5OlxcdFxcdCAgICBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfVkMgXFx1MDAyNlxcdTAwMjYgYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX0xMQylcXG4gMzkwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzOTE6XFx0XFx0cHZjYyA9IGt6YWxsb2Nfb2JqKCpwdmNjKTtcXG4gMzkyOlxcdFxcdGlmIChwdmNjID09IE5VTEwpXFxuIDM5MzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMzk0OlxcdFxcdHB2Y2MtXFx1MDAzZWF0bXZjYyA9IGF0bXZjYztcXG4gMzk1OlxcdFxcbiAzOTY6XFx0XFx0LyogTWF4aW11bSBpcyB6ZXJvLCBzbyB0aGF0IHdlIGNhbiB1c2UgYXRvbWljX2luY19ub3RfemVybygpICovXFxuIDM5NzpcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZwdmNjLVxcdTAwM2VpbmZsaWdodCwgTk9ORV9JTkZMSUdIVCk7XFxuIDM5ODpcXHRcXHRwdmNjLVxcdTAwM2VvbGRfcHVzaCA9IGF0bXZjYy1cXHUwMDNlcHVzaDtcXG4gMzk5OlxcdFxcdHB2Y2MtXFx1MDAzZW9sZF9wb3AgPSBhdG12Y2MtXFx1MDAzZXBvcDtcXG4gNDAwOlxcdFxcdHB2Y2MtXFx1MDAzZW9sZF9vd25lciA9IGF0bXZjYy1cXHUwMDNlb3duZXI7XFxuIDQwMTpcXHRcXHRwdmNjLVxcdTAwM2VvbGRfcmVsZWFzZV9jYiA9IGF0bXZjYy1cXHUwMDNlcmVsZWFzZV9jYjtcXG4gNDAyOlxcdFxcdHB2Y2MtXFx1MDAzZWVuY2FwcyA9IChlbnVtIHBwcG9hdG1fZW5jYXBzKSBiZS5lbmNhcHM7XFxuIDQwMzpcXHRcXHRwdmNjLVxcdTAwM2VjaGFuLnByaXZhdGUgPSBwdmNjO1xcbiA0MDQ6XFx0XFx0cHZjYy1cXHUwMDNlY2hhbi5vcHMgPSBcXHUwMDI2cHBwb2F0bV9vcHM7XFxuIDQwNTpcXHRcXHRwdmNjLVxcdTAwM2VjaGFuLm10dSA9IGF0bXZjYy1cXHUwMDNlcW9zLnR4dHAubWF4X3NkdSAtIFBQUF9IRFJMRU4gLVxcbiA0MDY6XFx0XFx0ICAgIChiZS5lbmNhcHMgPT0gZV92YyA/IDAgOiBMTENfTEVOKTtcXG4gNDA3OlxcdFxcdHRhc2tsZXRfc2V0dXAoXFx1MDAyNnB2Y2MtXFx1MDAzZXdha2V1cF90YXNrbGV0LCBwcHBvYXRtX3dha2V1cF9zZW5kZXIpO1xcbiA0MDg6XFx0XFx0ZXJyID0gcHBwX3JlZ2lzdGVyX2NoYW5uZWwoXFx1MDAyNnB2Y2MtXFx1MDAzZWNoYW4pO1xcbiA0MDk6XFx0XFx0aWYgKGVyciAhPSAwKSB7XFxuIDQxMDpcXHRcXHRcXHRrZnJlZShwdmNjKTtcXG4gNDExOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDQxMjpcXHRcXHR9XFxuIDQxMzpcXHRcXHRhdG12Y2MtXFx1MDAzZXVzZXJfYmFjayA9IHB2Y2M7XFxuIDQxNDpcXHRcXHRhdG12Y2MtXFx1MDAzZXB1c2ggPSBwcHBvYXRtX3B1c2g7XFxuIDQxNTpcXHRcXHRhdG12Y2MtXFx1MDAzZXBvcCA9IHBwcG9hdG1fcG9wO1xcbiA0MTY6XFx0XFx0YXRtdmNjLVxcdTAwM2VyZWxlYXNlX2NiID0gcHBwb2F0bV9yZWxlYXNlX2NiO1xcbiA0MTc6XFx0XFx0X19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTtcXG4gNDE4OlxcdFxcdGF0bXZjYy1cXHUwMDNlb3duZXIgPSBUSElTX01PRFVMRTtcXG4gNDE5OlxcdFxcbiA0MjA6XFx0XFx0LyogcmUtcHJvY2VzcyBldmVyeXRoaW5nIHJlY2VpdmVkIGJldHdlZW4gY29ubmVjdGlvbiBzZXR1cCBhbmRcXG4gNDIxOlxcdFxcdCAgIGJhY2tlbmQgc2V0dXAgKi9cXG4gNDIyOlxcdFxcdHZjY19wcm9jZXNzX3JlY3ZfcXVldWUoYXRtdmNjKTtcXG4gNDIzOlxcdFxcdHJldHVybiAwO1xcbiA0MjQ6XFx0fVxcbiA0MjU6XFx0XFxuIDQyNjpcXHQvKlxcbiA0Mjc6XFx0ICogVGhpcyBoYW5kbGVzIGlvY3RscyBhY3R1YWxseSBwZXJmb3JtZWQgb24gb3VyIHZjYyAtIHdlIG11c3QgcmV0dXJuXFxuIDQyODpcXHQgKiAtRU5PSU9DVExDTUQgZm9yIGFueSB1bnJlY29nbml6ZWQgaW9jdGxcXG4gNDI5OlxcdCAqL1xcbiA0MzA6XFx0c3RhdGljIGludCBwcHBvYXRtX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsXFxuIDQzMTpcXHRcXHR1bnNpZ25lZCBsb25nIGFyZylcXG4gNDMyOlxcdHtcXG4gNDMzOlxcdFxcdHN0cnVjdCBhdG1fdmNjICphdG12Y2MgPSBBVE1fU0Qoc29jayk7XFxuIDQzNDpcXHRcXHR2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZztcXG4gNDM1OlxcdFxcbiA0MzY6XFx0XFx0aWYgKGNtZCAhPSBBVE1fU0VUQkFDS0VORCBcXHUwMDI2XFx1MDAyNiBhdG12Y2MtXFx1MDAzZXB1c2ggIT0gcHBwb2F0bV9wdXNoKVxcbiA0Mzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9JT0NUTENNRDtcXG4gNDM4OlxcdFxcdHN3aXRjaCAoY21kKSB7XFxuIDQzOTpcXHRcXHRjYXNlIEFUTV9TRVRCQUNLRU5EOiB7XFxuIDQ0MDpcXHRcXHRcXHRhdG1fYmFja2VuZF90IGI7XFxuIDQ0MTpcXHRcXHRcXHRpZiAoZ2V0X3VzZXIoYiwgKGF0bV9iYWNrZW5kX3QgX191c2VyICopIGFyZ3ApKVxcbiA0NDI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDQ0MzpcXHRcXHRcXHRpZiAoYiAhPSBBVE1fQkFDS0VORF9QUFApXFxuIDQ0NDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0lPQ1RMQ01EO1xcbiA0NDU6XFx0XFx0XFx0aWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKVxcbiA0NDY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gNDQ3OlxcdFxcdFxcdGlmIChzb2NrLVxcdTAwM2VzdGF0ZSAhPSBTU19DT05ORUNURUQpXFxuIDQ0ODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDQ5OlxcdFxcdFxcdHJldHVybiBwcHBvYXRtX2Fzc2lnbl92Y2MoYXRtdmNjLCBhcmdwKTtcXG4gNDUwOlxcdFxcdFxcdH1cXG4gNDUxOlxcdFxcdGNhc2UgUFBQSU9DR0NIQU46XFxuIDQ1MjpcXHRcXHRcXHRyZXR1cm4gcHV0X3VzZXIocHBwX2NoYW5uZWxfaW5kZXgoXFx1MDAyNmF0bXZjY190b19wdmNjKGF0bXZjYyktXFx1MDAzZVxcbiA0NTM6XFx0XFx0XFx0ICAgIGNoYW4pLCAoaW50IF9fdXNlciAqKSBhcmdwKSA/IC1FRkFVTFQgOiAwO1xcbiA0NTQ6XFx0XFx0Y2FzZSBQUFBJT0NHVU5JVDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDQ6NTcuMzgzNzMzNDAzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQxNzMwNTk2MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBwcHBvYXRtX3NlbmRgIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSdtIGZvY3VzaW5nIG9uIGBwcHBvYXRtX3NlbmRgLiBJIGtub3cgaXQncyB0aGUgYC5zdGFydF94bWl0YCBjYWxsYmFjayB3aXRoaW4gdGhlIGBwcHBvYXRtX29wc2Agc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBQUFAgY2hhbm5lbC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHdoZW4gUFBQIG5lZWRzIHRvIHRyYW5zbWl0IGRhdGEsIGl0IGNhbGxzIGBjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KGNoYW4sIHNrYilgLiBUaGUgY29yZSBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgYW4gQVRNIHNvY2tldCBjYW4gZXZlbiBiZSBzdWNjZXNzZnVsbHkgY3JlYXRlZC4gV2UgYXJlIGRlYWxpbmcgd2l0aCBgc29ja2V0KEFGX0FUTVNWQywgLi4uKWAgb3IgYHNvY2tldChBRl9BVE1QVkMsIC4uLilgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGxldmVyYWdlIHN5emthbGxlci4gSSBmaWd1cmVkIGl0cyBzeXpsYW5nIGRlc2NyaXB0aW9ucyBvciBldmVuIHRoZSBrZXJuZWwncyBzb3VyY2UgbWlnaHQgY29udGFpbiByZWxldmFudCBpbmZvcm1hdGlvbiBhYm91dCBBVE0gYW5kIFBQUCBvdmVyIEFUTS4gSSB3YXMgaG9waW5nIGZvciBzb21ldGhpbmcgdXNlZnVsIGxpa2UgYHBwcG9hdG1gIG9yIGBBVE1fU0VUQkFDS0VORGAgdGhhdCBtaWdodCBzaGVkIGxpZ2h0IG9uIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQuIFRoZW4gSSByZW1lbWJlcmVkIEkgY2FuJ3QgZGlyZWN0bHkgdXNlIHRvb2xzIG9uIHRoZSBzeXpsYW5nLCBhbmQgY2FuJ3QgdXNlIGBncmVwcGVyYCBvbiB0aGUgc3l6bGFuZy4gVGhpcyBsZWQgbWUgdG8gYSBxdWljayBjaGVjayBvZiB0aGUgYXZhaWxhYmxlIHRvb2xzLiBJIG5lZWRlZCB0byBjb25maXJtIHRoYXQgdGhlIHRvb2xzIGZvciB0aGF0IHB1cnBvc2Ugd2VyZSBkZWNsYXJlZCwgYnV0IHRoZXkgd2VyZW4ndC4gV2UncmUgbWlzc2luZyBgcmVhZC1zeXotc3BlY2AgYW5kIGBzeXotZ3JlcHBlcmAuXG5cbkdpdmVuIHRoYXQgSSBkb24ndCBoYXZlIHRob3NlIHRvb2xzIGF2YWlsYWJsZSwgSSBuZWVkIHRvIGFkanVzdCBteSBzdHJhdGVneS4gSSBuZWVkIHRvIHBpdm90IGFuZCBleHBsb3JlIGEgZGlmZmVyZW50IGxpbmUgb2YgaW5xdWlyeSwgb25lIHRoYXQgZG9lc24ndCBkZXBlbmQgb24gc3l6a2FsbGVyIGRpcmVjdGx5LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBhc3Nlc3MgdGhlIHJlYWNoYWJpbGl0eSBvZiBgcHBwb2F0bV9zZW5kYCBpbiBhIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIENhbiBJIGNyZWF0ZSBhbiBBVE0gc29ja2V0IGluIHRoaXMgZW52aXJvbm1lbnQ/IEkgbmVlZCB0byBmb2N1cyBvbiBmaW5kaW5nIG9jY3VycmVuY2VzIG9mIGBBRl9BVE1QVkNgIG9yIGBBRl9BVE1TVkNgIHdpdGhpbiB0aGUgYG5ldC9hdG0vYCBkaXJlY3RvcnkuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDIwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDU6MDEuNTU2Nzk1NjQ2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjcwNjc2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBRl9BVE1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2F0bS9jb21tb24uYz03NTY9aW50IHZjY19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jLTc4NS1cXHRcXHRtZW1zZXQoXFx1MDAyNnB2YywgMCwgc2l6ZW9mKHB2YykpO1xcbm5ldC9hdG0vY29tbW9uLmM6Nzg2OlxcdFxcdHB2Yy5zYXBfZmFtaWx5ID0gQUZfQVRNUFZDO1xcbm5ldC9hdG0vY29tbW9uLmMtNzg3LVxcdFxcdHB2Yy5zYXBfYWRkci5pdGYgPSB2Y2MtXFx1MDAzZWRldi1cXHUwMDNlbnVtYmVyO1xcbi0tXFxubmV0L2F0bS9wcm9jLmM9MTU4PXN0YXRpYyB2b2lkIHZjY19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjKVxcbi0tXFxubmV0L2F0bS9wcm9jLmMtMTY4LVxcdHN3aXRjaCAoc2stXFx1MDAzZXNrX2ZhbWlseSkge1xcbm5ldC9hdG0vcHJvYy5jOjE2OTpcXHRjYXNlIEFGX0FUTVBWQzpcXG5uZXQvYXRtL3Byb2MuYy0xNzAtXFx0XFx0c2VxX3ByaW50ZihzZXEsIFxcXCJQVkNcXFwiKTtcXG4tLVxcbm5ldC9hdG0vcHZjLmM9Mjc9c3RhdGljIGludCBwdmNfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqc29ja2FkZHIsXFxuLS1cXG5uZXQvYXRtL3B2Yy5jLTM3LVxcdGFkZHIgPSAoc3RydWN0IHNvY2thZGRyX2F0bXB2YyAqKXNvY2thZGRyO1xcbm5ldC9hdG0vcHZjLmM6Mzg6XFx0aWYgKGFkZHItXFx1MDAzZXNhcF9mYW1pbHkgIT0gQUZfQVRNUFZDKVxcbm5ldC9hdG0vcHZjLmMtMzktXFx0XFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XFxuLS1cXG5uZXQvYXRtL3B2Yy5jPTg5PXN0YXRpYyBpbnQgcHZjX2dldG5hbWUoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICpzb2NrYWRkcixcXG4tLVxcbm5ldC9hdG0vcHZjLmMtOTgtXFx0bWVtc2V0KGFkZHIsIDAsIHNpemVvZigqYWRkcikpO1xcbm5ldC9hdG0vcHZjLmM6OTk6XFx0YWRkci1cXHUwMDNlc2FwX2ZhbWlseSA9IEFGX0FUTVBWQztcXG5uZXQvYXRtL3B2Yy5jLTEwMC1cXHRhZGRyLVxcdTAwM2VzYXBfYWRkci5pdGYgPSB2Y2MtXFx1MDAzZWRldi1cXHUwMDNlbnVtYmVyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NTowMS42NDM1MDk0ODNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mzc2NTEwNTcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQVRNIFBWQyBDb25uZWN0aXZpdHk6IEEgVGhlb3JldGljYWwgRGVlcCBEaXZlKipcblxuSG1tLCBpbnRlcmVzdGluZyBxdWVzdGlvbi4gQ2FuIHdlIGVzdGFibGlzaCBhbiBBVE0gUFZDIGNvbm5lY3Rpb24gcHVyZWx5IGF0IHRoZSBzb2Z0d2FyZSBsZXZlbCwgd2l0aG91dCBhIGRpcmVjdCBwaHlzaWNhbCBoYXJkd2FyZSBoYW5kc2hha2U/IFRoYXQncyB0aGUgY29yZSBvZiB0aGUgaXNzdWUsIGlzbid0IGl0PyBNeSBpbnR1aXRpb24gbGVhbnMgdG93YXJkcyBhIFwibm8sXCIgYnV0IEkgbmVlZCB0byBiZSBzdXJlIGFuZCBJIGtub3cgdGhlIGNvZGUgaXMgd2hlcmUgdG8gY2hlY2suXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGUgTGludXggQVRNIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBQVkMgY29ubmVjdGlvbiBoYW5kbGluZy4gUmlnaHQsIHdoZXJlIHdvdWxkIHRoZSByZWxldmFudCBsb2dpYyByZXNpZGU/IFRoZSBgbmV0L2F0bWAgZGlyZWN0b3J5Li4uIGFuZCBzcGVjaWZpY2FsbHksIGZvY3VzaW5nIG9uIHRoZSBQVkMgYXNwZWN0cywgYHB2Yy5jYCBzZWVtcyBsaWtlIHRoZSBsaWtlbHkgcGxhY2UgdG8gc3RhcnQuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBgcHZjX2Nvbm5lY3RgIGZ1bmN0aW9uLiBJdCBzaG91bGQgZGV0YWlsIGV4YWN0bHkgaG93IHRob3NlIFBWQyBjb25uZWN0aW9ucyBhcmUgZXN0YWJsaXNoZWQuIFRoYXQgZnVuY3Rpb24gd2lsbCB1bmRvdWJ0ZWRseSBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIGFuc3dlcjsgdGhlIGludGVyYWN0aW9uIGl0IGltcGxlbWVudHMgbWF5IGJlIGVudGlyZWx5IGEgc29mdHdhcmUgYWJzdHJhY3Rpb24sIG9yIG1heSBoYXZlIGEgZGVwZW5kZW5jeSBvbiBhIHBoeXNpY2FsIGxldmVsIHByb3RvY29sIG5lZ290aWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI3MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ1OjA1LjQwODYxODQ0MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2F0bS9wdmMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQvKiBuZXQvYXRtL3B2Yy5jIC0gQVRNIFBWQyBzb2NrZXRzICovXFxuICAgMzpcXHRcXG4gICA0OlxcdC8qIFdyaXR0ZW4gMTk5NS0yMDAwIGJ5IFdlcm5lciBBbG1lc2JlcmdlciwgRVBGTCBMUkMvSUNBICovXFxuICAgNTpcXHRcXG4gICA2OlxcdFxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldC5oXFx1MDAzZVxcdFxcdC8qIHN0cnVjdCBzb2NrZXQsIHN0cnVjdCBwcm90b19vcHMgKi9cXG4gICA4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9hdG0uaFxcdTAwM2VcXHRcXHQvKiBBVE0gc3R1ZmYgKi9cXG4gICA5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9hdG1kZXYuaFxcdTAwM2VcXHQvKiBBVE0gZGV2aWNlcyAqL1xcbiAgMTA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vycm5vLmhcXHUwMDNlXFx0LyogZXJyb3IgY29kZXMgKi9cXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXHQvKiBwcmludGsgKi9cXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0b3BzLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuICAxNjpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXHRcXHQvKiBmb3Igc29ja19ub18qICovXFxuICAxNzpcXHRcXG4gIDE4OlxcdCNpbmNsdWRlIFxcXCJyZXNvdXJjZXMuaFxcXCJcXHRcXHQvKiBkZXZzIGFuZCB2Y2NzICovXFxuICAxOTpcXHQjaW5jbHVkZSBcXFwiY29tbW9uLmhcXFwiXFx0XFx0LyogY29tbW9uIGZvciBQVkNzIGFuZCBTVkNzICovXFxuICAyMDpcXHRcXG4gIDIxOlxcdFxcbiAgMjI6XFx0c3RhdGljIGludCBwdmNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcXG4gIDIzOlxcdHtcXG4gIDI0OlxcdFxcdHJldHVybiAwO1xcbiAgMjU6XFx0fVxcbiAgMjY6XFx0XFxuICAyNzpcXHRzdGF0aWMgaW50IHB2Y19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpzb2NrYWRkcixcXG4gIDI4OlxcdFxcdFxcdCAgICBpbnQgc29ja2FkZHJfbGVuKVxcbiAgMjk6XFx0e1xcbiAgMzA6XFx0XFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cXHUwMDNlc2s7XFxuICAzMTpcXHRcXHRzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjICphZGRyO1xcbiAgMzI6XFx0XFx0c3RydWN0IGF0bV92Y2MgKnZjYztcXG4gIDMzOlxcdFxcdGludCBlcnJvcjtcXG4gIDM0OlxcdFxcbiAgMzU6XFx0XFx0aWYgKHNvY2thZGRyX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXB2YykpXFxuICAzNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gIDM3OlxcdFxcdGFkZHIgPSAoc3RydWN0IHNvY2thZGRyX2F0bXB2YyAqKXNvY2thZGRyO1xcbiAgMzg6XFx0XFx0aWYgKGFkZHItXFx1MDAzZXNhcF9mYW1pbHkgIT0gQUZfQVRNUFZDKVxcbiAgMzk6XFx0XFx0XFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XFxuICA0MDpcXHRcXHRsb2NrX3NvY2soc2spO1xcbiAgNDE6XFx0XFx0dmNjID0gQVRNX1NEKHNvY2spO1xcbiAgNDI6XFx0XFx0aWYgKCF0ZXN0X2JpdChBVE1fVkZfSEFTUU9TLCBcXHUwMDI2dmNjLVxcdTAwM2VmbGFncykpIHtcXG4gIDQzOlxcdFxcdFxcdGVycm9yID0gLUVCQURGRDtcXG4gIDQ0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAgNDU6XFx0XFx0fVxcbiAgNDY6XFx0XFx0aWYgKHRlc3RfYml0KEFUTV9WRl9QQVJUSUFMLCBcXHUwMDI2dmNjLVxcdTAwM2VmbGFncykpIHtcXG4gIDQ3OlxcdFxcdFxcdGlmICh2Y2MtXFx1MDAzZXZwaSAhPSBBVE1fVlBJX1VOU1BFQylcXG4gIDQ4OlxcdFxcdFxcdFxcdGFkZHItXFx1MDAzZXNhcF9hZGRyLnZwaSA9IHZjYy1cXHUwMDNldnBpO1xcbiAgNDk6XFx0XFx0XFx0aWYgKHZjYy1cXHUwMDNldmNpICE9IEFUTV9WQ0lfVU5TUEVDKVxcbiAgNTA6XFx0XFx0XFx0XFx0YWRkci1cXHUwMDNlc2FwX2FkZHIudmNpID0gdmNjLVxcdTAwM2V2Y2k7XFxuICA1MTpcXHRcXHR9XFxuICA1MjpcXHRcXHRlcnJvciA9IHZjY19jb25uZWN0KHNvY2ssIGFkZHItXFx1MDAzZXNhcF9hZGRyLml0ZiwgYWRkci1cXHUwMDNlc2FwX2FkZHIudnBpLFxcbiAgNTM6XFx0XFx0XFx0XFx0ICAgIGFkZHItXFx1MDAzZXNhcF9hZGRyLnZjaSk7XFxuICA1NDpcXHRvdXQ6XFxuICA1NTpcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbiAgNTY6XFx0XFx0cmV0dXJuIGVycm9yO1xcbiAgNTc6XFx0fVxcbiAgNTg6XFx0XFxuICA1OTpcXHRzdGF0aWMgaW50IHB2Y19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpzb2NrYWRkcixcXG4gIDYwOlxcdFxcdFxcdCAgICAgICBpbnQgc29ja2FkZHJfbGVuLCBpbnQgZmxhZ3MpXFxuICA2MTpcXHR7XFxuICA2MjpcXHRcXHRyZXR1cm4gcHZjX2JpbmQoc29jaywgc29ja2FkZHIsIHNvY2thZGRyX2xlbik7XFxuICA2MzpcXHR9XFxuICA2NDpcXHRcXG4gIDY1OlxcdHN0YXRpYyBpbnQgcHZjX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4gIDY2OlxcdFxcdFxcdFxcdCAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcXG4gIDY3OlxcdHtcXG4gIDY4OlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbiAgNjk6XFx0XFx0aW50IGVycm9yO1xcbiAgNzA6XFx0XFxuICA3MTpcXHRcXHRsb2NrX3NvY2soc2spO1xcbiAgNzI6XFx0XFx0ZXJyb3IgPSB2Y2Nfc2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbiAgNzM6XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gIDc0OlxcdFxcdHJldHVybiBlcnJvcjtcXG4gIDc1OlxcdH1cXG4gIDc2OlxcdFxcbiAgNzc6XFx0c3RhdGljIGludCBwdmNfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbiAgNzg6XFx0XFx0XFx0XFx0ICBzb2Nrb3B0X3QgKm9wdClcXG4gIDc5OlxcdHtcXG4gIDgwOlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbiAgODE6XFx0XFx0aW50IGVycm9yO1xcbiAgODI6XFx0XFxuICA4MzpcXHRcXHRsb2NrX3NvY2soc2spO1xcbiAgODQ6XFx0XFx0ZXJyb3IgPSB2Y2NfZ2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0KTtcXG4gIDg1OlxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ1OjA1LjQwODc3NDA0MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzYzMjQ4NjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipUaGUgTmF0dXJlIG9mIGBhdG1fZGV2YCoqXG5cblJpZ2h0LCBhIG1vbWVudCBvZiBjb25jZXB0dWFsIHJlY2FsaWJyYXRpb24uIEknbSBoaXR0aW5nIGEgbWVudGFsIHNuYWcgaGVyZS4gVGhlIHBocmFzZSBcIkFUTSBkZXZpY2VcIiBpcyB0cmlnZ2VyaW5nIGEgYml0IG9mIGEgY2FzY2FkZS4gVGhlIGltbWVkaWF0ZSwgaW5pdGlhbCB0aG91Z2h0IGlzLCBcImNhbiB0aGlzIGVudGlyZSB0aGluZyAqcmVhbGx5KiBiZSBjcmVhdGVkIHB1cmVseSBpbiBzb2Z0d2FyZT9cIiBUaGUgQVRNIGRldmljZSBpcywgaW4gY29tbW9uIHBhcmxhbmNlLCBhIHBoeXNpY2FsIGVudGl0eSwgYSBjb21wbGV4IGVsZWN0cm9tZWNoYW5pY2FsIHN5c3RlbS5cblxuVGhlbiB0aGUgcXVlc3Rpb25zIHN0YXJ0OiBcIldoYXQgZXhhY3RseSBhcmUgd2UgKnJlYWxseSogdGFsa2luZyBhYm91dCB3aGVuIHdlIHNheSAnQVRNIGRldmljZScgaW4gdGhpcyBjb250ZXh0P1wiIFRoZSB0ZXJtLCB3aGVuIHVzZWQgaW4gY2VydGFpbiBmaWVsZHMsIG1heSByZWZlciB0byBhIHB1cmVseSBzb2Z0d2FyZS1iYXNlZCBzaW11bGF0aW9uIG9yIGFic3RyYWN0aW9uIG9mIHRoZSBBVE0gaXRzZWxmLiBUaGlzIHN1Z2dlc3RzIHRvIG1lIHRoYXQgdGhlIG5leHQgbW92ZSBzaG91bGQgaW52b2x2ZSBhIHZlcnkgZGlyZWN0IGluc3BlY3Rpb24uIExldCdzIHNlZSB3aGF0IGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBhIGBhdG1fZGV2YC4gVGhlIGNvZGUgaXRzZWxmIHNob3VsZCBjbGFyaWZ5IGlmIHRoaXMgdmFyaWFibGUgcmVwcmVzZW50cyBhIHNvZnR3YXJlIGNvbXBvbmVudCwgYSBoYXJkd2FyZSBvbmUsIG9yIGEgaHlicmlkLiBJcyBpdCBhIGRldmljZSBkcml2ZXI/IEEgY29uZmlndXJhdGlvbiBvYmplY3Q/IEtub3dpbmcgaXRzIG9yaWdpbiB3aWxsIGN1dCB0aHJvdWdoIGEgbG90IG9mIGFtYmlndWl0eSBhbmQgd2lsbCBhbGxvdyBtZSB0byBhc3Nlc3MgdGhlIHNjb3BlIG9mIHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzgwMiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDU6MDcuNzcyMDI1NjM0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjg2Mjc2MjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0bV9kZXZfcmVnaXN0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hdG0vc29sb3MtcGNpLmM9MTM0OD1zdGF0aWMgaW50IGF0bV9pbml0KHN0cnVjdCBzb2xvc19jYXJkICpjYXJkLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpXFxuLS1cXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYy0xMzU4LVxcbmRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jOjEzNTk6XFx0XFx0Y2FyZC1cXHUwMDNlYXRtZGV2W2ldID0gYXRtX2Rldl9yZWdpc3RlcihcXFwic29sb3MtcGNpXFxcIiwgcGFyZW50LCBcXHUwMDI2ZnBnYV9vcHMsIC0xLCBOVUxMKTtcXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYy0xMzYwLVxcdFxcdGlmICghY2FyZC1cXHUwMDNlYXRtZGV2W2ldKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmM9OTAxPXN0YXRpYyBpbnQgdXNiYXRtX2F0bV9pbml0KHN0cnVjdCB1c2JhdG1fZGF0YSAqaW5zdGFuY2UpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMtOTA5LVxcdCAqIGFib3J0IGlmIGF0bV9kZXYtXFx1MDAzZWRldl9kYXRhIGlzIE5VTEwuICovXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jOjkxMDpcXHRhdG1fZGV2ID0gYXRtX2Rldl9yZWdpc3RlcihpbnN0YW5jZS1cXHUwMDNlZHJpdmVyX25hbWUsXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTkxMS1cXHRcXHRcXHRcXHQgICBcXHUwMDI2aW5zdGFuY2UtXFx1MDAzZXVzYl9pbnRmLVxcdTAwM2VkZXYsIFxcdTAwMjZ1c2JhdG1fYXRtX2Rldm9wcyxcXG4tLVxcbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg9MTUyPWV4dGVybiByd2xvY2tfdCB2Y2Nfc2tsaXN0X2xvY2s7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTE1NS1cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oOjE1NjpzdHJ1Y3QgYXRtX2RldiAqYXRtX2Rldl9yZWdpc3Rlcihjb25zdCBjaGFyICp0eXBlLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0xNTctXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBhdG1kZXZfb3BzICpvcHMsXFxuLS1cXG5uZXQvYXRtL3Jlc291cmNlcy5jPTY5PUVYUE9SVF9TWU1CT0woYXRtX2Rldl9sb29rdXApO1xcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzAtXFxubmV0L2F0bS9yZXNvdXJjZXMuYzo3MTpzdHJ1Y3QgYXRtX2RldiAqYXRtX2Rldl9yZWdpc3Rlcihjb25zdCBjaGFyICp0eXBlLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXFxubmV0L2F0bS9yZXNvdXJjZXMuYy03Mi1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcywgaW50IG51bWJlcixcXG4tLVxcbm5ldC9hdG0vcmVzb3VyY2VzLmMtMTMxLX1cXG5uZXQvYXRtL3Jlc291cmNlcy5jOjEzMjpFWFBPUlRfU1lNQk9MKGF0bV9kZXZfcmVnaXN0ZXIpO1xcbm5ldC9hdG0vcmVzb3VyY2VzLmMtMTMzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NToxMC4wNTgzMTAzMjlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjI4MDc2NzMxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBVE0gRGV2aWNlIERpc2NvdmVyeSoqXG5cbk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIFdoYXQgb3RoZXIgbWV0aG9kcyBhcmUgdXNlZCB0byByZWdpc3RlciBBVE0gZGV2aWNlcywgYmVzaWRlcyB0aGUgb2J2aW91cyBvbmVzPyBEb2VzIHRoZSBzdGFuZGFyZCBMaW51eCBrZXJuZWwgcHJvdmlkZSBhbnkgZHVtbXksIGxvb3BiYWNrLCB2aXJ0dWFsLCBvciBldmVuIFVTQiBBVE0gZGV2aWNlcz8gUGVyaGFwcyBhIGB1c2JhdG1gIG1vZHVsZT8gQ291bGQgU3l6a2FsbGVyIGV2ZW4gZW11bGF0ZSBhIFVTQiBBVE0gZGV2aWNlLCBvciBtYXliZSBldmVuIGEgcmF3IEFUTSBkZXZpY2U/IEl0J3MgYSBiaXQgb2YgYSBzdHJldGNoLCBidXQgd29ydGggaW52ZXN0aWdhdGluZy4gVGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBpbnZlc3RpZ2F0ZSB0aGlzIHdpbGwgYmUgdG8gdXNlIGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciBvdGhlciBpbnN0YW5jZXMgb2YgYGF0bV9kZXZfcmVnaXN0ZXJgLiBUaGF0IHNob3VsZCBoZWxwIG1lIHF1aWNrbHkgaWRlbnRpZnkgdGhlIG90aGVyIHBvdGVudGlhbCBkZXZpY2UgcmVnaXN0cmF0aW9uIG1ldGhvZHMuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NDEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NToxMi4zMzkwODAzMDRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODA3Njg2MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRtX2Rldl9yZWdpc3RlclxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jPTEzNDg9c3RhdGljIGludCBhdG1faW5pdChzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCwgc3RydWN0IGRldmljZSAqcGFyZW50KVxcbi0tXFxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTM1OC1cXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYzoxMzU5OlxcdFxcdGNhcmQtXFx1MDAzZWF0bWRldltpXSA9IGF0bV9kZXZfcmVnaXN0ZXIoXFxcInNvbG9zLXBjaVxcXCIsIHBhcmVudCwgXFx1MDAyNmZwZ2Ffb3BzLCAtMSwgTlVMTCk7XFxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTM2MC1cXHRcXHRpZiAoIWNhcmQtXFx1MDAzZWF0bWRldltpXSkge1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jPTkwMT1zdGF0aWMgaW50IHVzYmF0bV9hdG1faW5pdChzdHJ1Y3QgdXNiYXRtX2RhdGEgKmluc3RhbmNlKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTkwOS1cXHQgKiBhYm9ydCBpZiBhdG1fZGV2LVxcdTAwM2VkZXZfZGF0YSBpcyBOVUxMLiAqL1xcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYzo5MTA6XFx0YXRtX2RldiA9IGF0bV9kZXZfcmVnaXN0ZXIoaW5zdGFuY2UtXFx1MDAzZWRyaXZlcl9uYW1lLFxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy05MTEtXFx0XFx0XFx0XFx0ICAgXFx1MDAyNmluc3RhbmNlLVxcdTAwM2V1c2JfaW50Zi1cXHUwMDNlZGV2LCBcXHUwMDI2dXNiYXRtX2F0bV9kZXZvcHMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oPTE1Mj1leHRlcm4gcndsb2NrX3QgdmNjX3NrbGlzdF9sb2NrO1xcbi0tXFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0xNTUtXFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaDoxNTY6c3RydWN0IGF0bV9kZXYgKmF0bV9kZXZfcmVnaXN0ZXIoY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IGRldmljZSAqcGFyZW50LFxcbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMTU3LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYXRtZGV2X29wcyAqb3BzLFxcbi0tXFxubmV0L2F0bS9yZXNvdXJjZXMuYz02OT1FWFBPUlRfU1lNQk9MKGF0bV9kZXZfbG9va3VwKTtcXG5uZXQvYXRtL3Jlc291cmNlcy5jLTcwLVxcbm5ldC9hdG0vcmVzb3VyY2VzLmM6NzE6c3RydWN0IGF0bV9kZXYgKmF0bV9kZXZfcmVnaXN0ZXIoY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IGRldmljZSAqcGFyZW50LFxcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzItXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBhdG1kZXZfb3BzICpvcHMsIGludCBudW1iZXIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ1OjE0LjkxOTg1ODc4MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDYzNDY3MjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFUTSBEcml2ZXIgRGVlcCBEaXZlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBoZXJlLCBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciB2aWV3IG9mIHRoZSBBVE0gZHJpdmVyIGxhbmRzY2FwZSB3aXRoaW4gdGhpcyBwcm9qZWN0LiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSBjaGVja2luZyB0aGUgb2J2aW91cyBsb2NhdGlvbnMsIGxpa2UgYGRyaXZlcnMvYXRtL2AgYW5kIGBuZXQvYXRtL2AuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcG90ZW50aWFsIGFyZWFzIHdoZXJlIHRoZXkndmUgc3Rhc2hlZCBBVE0gZGV2aWNlIGRyaXZlcnM/IEkgY2FuJ3QgYmUgb3Zlcmxvb2tpbmcgc29tZXRoaW5nIG9idmlvdXMuXG5cblJpZ2h0LCBsZXQncyBhc3N1bWUgdGhleSBtaWdodCBiZSB1c2luZyBzb21lIHNvcnQgb2YgY29tbW9uIHN0cnVjdHVyZS4gVGhhdCBtZWFucyBJIHNob3VsZCBzZWFyY2ggZm9yIGltcGxlbWVudGF0aW9ucyBvZiBgYXRtZGV2X29wc2AuIFNlYXJjaGluZyBmb3IgdGhhdCBzaG91bGQgaWRlbnRpZnkgYWxsIHRoZSBjYW5kaWRhdGUgZHJpdmVycywgb3IgYXQgbGVhc3QgaGVscCBuYXJyb3cgZG93biB0aGUgbGlzdC4gTGV0J3Mgc2VlIHdoYXQgdHVybnMgdXAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM1MiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ1OjE2Ljk4MzMyOTkyMloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwNjUxNTgyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgYXRtZGV2X29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2F0bS9zb2xvcy1wY2kuYz0xMTM3PXN0YXRpYyBpbnQgcHNlbmQoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jLTExNzctXFxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmM6MTE3ODpzdGF0aWMgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgZnBnYV9vcHMgPSB7XFxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTE3OS1cXHQub3BlbiA9XFx0XFx0cG9wZW4sXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmM9MTYwPXN0YXRpYyBpbnQgdXNiYXRtX2F0bV9wcm9jX3JlYWQoc3RydWN0IGF0bV9kZXYgKmF0bV9kZXYsIGxvZmZfdCAqcG9zLCBjaGFyICpwYWdlKTtcXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMtMTYxLVxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYzoxNjI6c3RhdGljIGNvbnN0IHN0cnVjdCBhdG1kZXZfb3BzIHVzYmF0bV9hdG1fZGV2b3BzID0ge1xcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy0xNjMtXFx0LmRldl9jbG9zZVxcdD0gdXNiYXRtX2F0bV9kZXZfY2xvc2UsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oPTEwOD1zdHJ1Y3QgYXRtX2RldiB7XFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaDoxMDk6XFx0Y29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcztcXHQvKiBkZXZpY2Ugb3BlcmF0aW9uczsgTlVMTCBpZiB1bnVzZWQgKi9cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTExMC1cXHRjb25zdCBjaGFyXFx0KnR5cGU7XFx0XFx0LyogZGV2aWNlIHR5cGUgbmFtZSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0xMjgtXFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaDoxMjk6c3RydWN0IGF0bWRldl9vcHMgeyAvKiBvbmx5IHNlbmQgaXMgcmVxdWlyZWQgKi9cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTEzMC1cXHR2b2lkICgqZGV2X2Nsb3NlKShzdHJ1Y3QgYXRtX2RldiAqZGV2KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg9MTU2PXN0cnVjdCBhdG1fZGV2ICphdG1fZGV2X3JlZ2lzdGVyKGNvbnN0IGNoYXIgKnR5cGUsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oOjE1NzpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcyxcXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTE1OC1cXHRcXHRcXHRcXHQgaW50IG51bWJlciwgLyogLTEgPT0gcGljayBmaXJzdCBhdmFpbGFibGUgKi9cXG4tLVxcbm5ldC9hdG0vcmVzb3VyY2VzLmM9NzE9c3RydWN0IGF0bV9kZXYgKmF0bV9kZXZfcmVnaXN0ZXIoY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IGRldmljZSAqcGFyZW50LFxcbm5ldC9hdG0vcmVzb3VyY2VzLmM6NzI6XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBhdG1kZXZfb3BzICpvcHMsIGludCBudW1iZXIsXFxubmV0L2F0bS9yZXNvdXJjZXMuYy03My1cXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyAqZmxhZ3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ1OjE5LjI4OTg1MzkwNFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzYxOTY0OTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBBVE0gRHJpdmVyIE1ha2VmaWxlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gV2Ugd2VyZSBmb2N1c2luZyBvbiBYLCBZLCBhbmQgWiwgYnV0IEkndmUgZ290IGEgbmFnZ2luZyBmZWVsaW5nIHdlJ3JlIG1pc3Npbmcgc29tZXRoaW5nIGNydWNpYWwgaW4gdGhpcyBhcmVhLiBTcGVjaWZpY2FsbHksIHdoYXQgYWJvdXQgdGhlIEFUTSBkcml2ZXI/IFdlJ3ZlIGdvdCB0byBlbnN1cmUgdGhhdCBpdCBhbGlnbnMgd2l0aCBldmVyeXRoaW5nIGVsc2UuIExldCdzIHNlZS4uLiBJJ2xsIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvYXRtL2AgZGlyZWN0b3J5LiBSaWdodCwgbGV0J3Mgb3BlbiB0aGF0IGBNYWtlZmlsZWAgYW5kIHF1aWNrbHkgY29uZmlybSB0aGF0IGl0J3MgcHJvcGVybHkgYnVpbHQgYW5kIGludGVncmF0ZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkcml2ZXIgaXNuJ3QgZ29pbmcgdG8gY2F1c2UgaXNzdWVzIGRvd24gdGhlIGxpbmUsIHNvIEknbGwgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgZmxhZ3MgYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE0MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ1OjIxLjA1MTgyMjk2M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTQxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2F0bS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdFxcbiAgIDM6XFx0b2JqLSQoQ09ORklHX0FUTV9TT0xPUylcXHRcXHQrPSBzb2xvcy1wY2kub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NToyMS4wNTE5MTUwMjNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mzk0ODA5NjMwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVU0IgRnV6emluZyBhbmQgQVRNIFNvY2tldCBRdWlya3MqKlxuXG5Pa2F5LCBzbyBzeXprYWxsZXIgaGFzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcyB0aHJvdWdoIFJhdyBHYWRnZXQgYW5kIER1bW15IEhDRCDigJMgdGhhdCdzIGV4Y2VsbGVudCEgQnV0IGEgdGhvdWdodCBqdXN0IHN0cnVjayBtZTogY2FuIEFUTSBzb2NrZXRzLCBzcGVjaWZpY2FsbHksIGJlIGNvbm5lY3RlZCB3aXRob3V0IGFuIGFjdHVhbCBkZXZpY2UgcHJlc2VudD8gSSB3b25kZXIgd2hhdCBoYXBwZW5zIGluIHRoZSBgdmNjX2Nvbm5lY3RgIGZ1bmN0aW9uLi4uIFRoaXMgZmVlbHMgbGlrZSBhIHBvdGVudGlhbCBhcmVhIGZvciBleHBsb3JhdGlvbiwgc28gbGV0J3MgZGlnIGludG8gYG5ldC9hdG0vY29tbW9uLmNgIGFuZCBjaGVjayBvdXQgdGhlIGB2Y2NfY29ubmVjdGAgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGxvZ2ljIHRvIHNlZSBpZiB0aGlzIGNvdWxkIGJlIGV4cGxvaXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzODksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ1OjI1LjAwMDAxMzY1M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDA1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYXRtL2NvbW1vbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4MDpcXHRcXHRtb2R1bGVfcHV0KHZjYy1cXHUwMDNlb3duZXIpO1xcbiAxODE6XFx0XFxuIDE4MjpcXHRcXHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSkpICE9IE5VTEwpIHtcXG4gMTgzOlxcdFxcdFxcdGF0bV9yZXR1cm4odmNjLCBza2ItXFx1MDAzZXRydWVzaXplKTtcXG4gMTg0OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAxODU6XFx0XFx0fVxcbiAxODY6XFx0XFxuIDE4NzpcXHRcXHRpZiAodmNjLVxcdTAwM2VkZXYgXFx1MDAyNlxcdTAwMjYgdmNjLVxcdTAwM2VkZXYtXFx1MDAzZW9wcy1cXHUwMDNlb3duZXIpIHtcXG4gMTg4OlxcdFxcdFxcdG1vZHVsZV9wdXQodmNjLVxcdTAwM2VkZXYtXFx1MDAzZW9wcy1cXHUwMDNlb3duZXIpO1xcbiAxODk6XFx0XFx0XFx0YXRtX2Rldl9wdXQodmNjLVxcdTAwM2VkZXYpO1xcbiAxOTA6XFx0XFx0fVxcbiAxOTE6XFx0XFxuIDE5MjpcXHRcXHR2Y2NfcmVtb3ZlX3NvY2tldChzayk7XFxuIDE5MzpcXHR9XFxuIDE5NDpcXHRcXG4gMTk1OlxcdGludCB2Y2NfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbiAxOTY6XFx0e1xcbiAxOTc6XFx0XFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cXHUwMDNlc2s7XFxuIDE5ODpcXHRcXG4gMTk5OlxcdFxcdGlmIChzaykge1xcbiAyMDA6XFx0XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4gMjAxOlxcdFxcdFxcdHZjY19kZXN0cm95X3NvY2tldChzb2NrLVxcdTAwM2Vzayk7XFxuIDIwMjpcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbiAyMDM6XFx0XFx0XFx0c29ja19wdXQoc2spO1xcbiAyMDQ6XFx0XFx0fVxcbiAyMDU6XFx0XFxuIDIwNjpcXHRcXHRyZXR1cm4gMDtcXG4gMjA3OlxcdH1cXG4gMjA4OlxcdFxcbiAyMDk6XFx0dm9pZCB2Y2NfcmVsZWFzZV9hc3luYyhzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBpbnQgcmVwbHkpXFxuIDIxMDpcXHR7XFxuIDIxMTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSBza19hdG0odmNjKTtcXG4gMjEyOlxcdFxcbiAyMTM6XFx0XFx0c2V0X2JpdChBVE1fVkZfQ0xPU0UsIFxcdTAwMjZ2Y2MtXFx1MDAzZWZsYWdzKTtcXG4gMjE0OlxcdFxcdHNrLVxcdTAwM2Vza19zaHV0ZG93biB8PSBSQ1ZfU0hVVERPV047XFxuIDIxNTpcXHRcXHRzay1cXHUwMDNlc2tfZXJyID0gLXJlcGx5O1xcbiAyMTY6XFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XFxuIDIxNzpcXHR9XFxuIDIxODpcXHRFWFBPUlRfU1lNQk9MKHZjY19yZWxlYXNlX2FzeW5jKTtcXG4gMjE5OlxcdFxcbiAyMjA6XFx0dm9pZCB2Y2NfcHJvY2Vzc19yZWN2X3F1ZXVlKHN0cnVjdCBhdG1fdmNjICp2Y2MpXFxuIDIyMTpcXHR7XFxuIDIyMjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHF1ZXVlLCAqcnE7XFxuIDIyMzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdG1wO1xcbiAyMjQ6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gMjI1OlxcdFxcbiAyMjY6XFx0XFx0X19za2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZxdWV1ZSk7XFxuIDIyNzpcXHRcXHRycSA9IFxcdTAwMjZza19hdG0odmNjKS1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZTtcXG4gMjI4OlxcdFxcbiAyMjk6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnJxLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIDIzMDpcXHRcXHRza2JfcXVldWVfc3BsaWNlX2luaXQocnEsIFxcdTAwMjZxdWV1ZSk7XFxuIDIzMTpcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZycS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiAyMzI6XFx0XFxuIDIzMzpcXHRcXHRza2JfcXVldWVfd2Fsa19zYWZlKFxcdTAwMjZxdWV1ZSwgc2tiLCB0bXApIHtcXG4gMjM0OlxcdFxcdFxcdF9fc2tiX3VubGluayhza2IsIFxcdTAwMjZxdWV1ZSk7XFxuIDIzNTpcXHRcXHRcXHR2Y2MtXFx1MDAzZXB1c2godmNjLCBza2IpO1xcbiAyMzY6XFx0XFx0fVxcbiAyMzc6XFx0fVxcbiAyMzg6XFx0RVhQT1JUX1NZTUJPTCh2Y2NfcHJvY2Vzc19yZWN2X3F1ZXVlKTtcXG4gMjM5OlxcdFxcbiAyNDA6XFx0dm9pZCBhdG1fZGV2X3NpZ25hbF9jaGFuZ2Uoc3RydWN0IGF0bV9kZXYgKmRldiwgY2hhciBzaWduYWwpXFxuIDI0MTpcXHR7XFxuIDI0MjpcXHRcXHRwcl9kZWJ1ZyhcXFwiJXMgc2lnbmFsPSVkIGRldj0lcCBudW1iZXI9JWQgZGV2LVxcdTAwM2VzaWduYWw9JWRcXFxcblxcXCIsXFxuIDI0MzpcXHRcXHRcXHRfX2Z1bmNfXywgc2lnbmFsLCBkZXYsIGRldi1cXHUwMDNlbnVtYmVyLCBkZXYtXFx1MDAzZXNpZ25hbCk7XFxuIDI0NDpcXHRcXG4gMjQ1OlxcdFxcdC8qIGF0bSBkcml2ZXIgc2VuZGluZyBpbnZhbGlkIHNpZ25hbCAqL1xcbiAyNDY6XFx0XFx0V0FSTl9PTihzaWduYWwgXFx1MDAzYyBBVE1fUEhZX1NJR19MT1NUIHx8IHNpZ25hbCBcXHUwMDNlIEFUTV9QSFlfU0lHX0ZPVU5EKTtcXG4gMjQ3OlxcdFxcbiAyNDg6XFx0XFx0aWYgKGRldi1cXHUwMDNlc2lnbmFsID09IHNpZ25hbClcXG4gMjQ5OlxcdFxcdFxcdHJldHVybjsgLyogbm8gY2hhbmdlICovXFxuIDI1MDpcXHRcXG4gMjUxOlxcdFxcdGRldi1cXHUwMDNlc2lnbmFsID0gc2lnbmFsO1xcbiAyNTI6XFx0XFxuIDI1MzpcXHRcXHRhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbihcXHUwMDI2YXRtX2Rldl9ub3RpZnlfY2hhaW4sIHNpZ25hbCwgZGV2KTtcXG4gMjU0OlxcdH1cXG4gMjU1OlxcdEVYUE9SVF9TWU1CT0woYXRtX2Rldl9zaWduYWxfY2hhbmdlKTtcXG4gMjU2OlxcdFxcbiAyNTc6XFx0dm9pZCBhdG1fZGV2X3JlbGVhc2VfdmNjcyhzdHJ1Y3QgYXRtX2RldiAqZGV2KVxcbiAyNTg6XFx0e1xcbiAyNTk6XFx0XFx0aW50IGk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ1OjI1LjAwMDEyMjg5M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTExMDMzNDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBpczpcblxuKipMb2NhdGluZyB0aGUgYHZjY19jb25uZWN0YCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBgdmNjX2Nvbm5lY3RgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIGl0IHdvdWxkIGJlIGluIGEgY29tbW9uIGFyZWEgZm9yIG5ldHdvcmsgb3BlcmF0aW9ucywgYW5kIGJhc2VkIG9uIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGUga2VybmVsLCBhIGZpbGUgbmFtZWQgYGNvbW1vbi5jYCB3aXRoaW4gYSBgbmV0L2F0bWAgZGlyZWN0b3J5IHdvdWxkIGJlIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gR2l2ZW4gdGhlIEFUTSBjb250ZXh0LCB0aGF0IHdvdWxkIGFsc28gYmUgYSB2ZXJ5IHJlYXNvbmFibGUgcGxhY2UgdG8gc3RhcnQgbG9va2luZywgc2luY2UgVkNDIGNvbm5lY3Rpb25zIGFyZSBmdW5kYW1lbnRhbCB0byBob3cgdGhhdCBwcm90b2NvbCBvcGVyYXRlcy4gTGV0J3MgaGVhZCB0aGVyZSBhbmQgc2VlIHdoYXQncyBpbiBgbmV0L2F0bS9jb21tb24uY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Nzg3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NToyNi41MTExNTk1NTJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzM5MjQ4NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHZjY19jb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9hdG0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vY29tbW9uLmM9Mzc0PXN0YXRpYyBpbnQgX192Y2NfY29ubmVjdChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3QgYXRtX2RldiAqZGV2LCBzaG9ydCB2cGksXFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jLTQ0OS1cXG5uZXQvYXRtL2NvbW1vbi5jOjQ1MDppbnQgdmNjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGl0Ziwgc2hvcnQgdnBpLCBpbnQgdmNpKVxcbm5ldC9hdG0vY29tbW9uLmMtNDUxLXtcXG4tLVxcbm5ldC9hdG0vY29tbW9uLmg9MTU9aW50IHZjY19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spO1xcbm5ldC9hdG0vY29tbW9uLmg6MTY6aW50IHZjY19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBpdGYsIHNob3J0IHZwaSwgaW50IHZjaSk7XFxubmV0L2F0bS9jb21tb24uaC0xNy1pbnQgdmNjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDU6MjcuOTg1MDkxOTA2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwODkyNDU0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHZjY19jb25uZWN0YCoqXG5cbk9rYXksIGxldCdzIGdldCByaWdodCB0byBpdC4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgYHZjY19jb25uZWN0YCBpbiBgbmV0L2F0bS9jb21tb24uY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgQVRNIGNvbm5lY3Rpb24gcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGhvdyB0aGVzZSBWQ0NzIGFyZSBlc3RhYmxpc2hlZC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgaG93IHRoZSBjb25uZWN0aW9uIGlzIHNldCB1cCBhdCB0aGlzIGxheWVyLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJmYWNlcyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIG9yIGRyaXZlciBhbmQgd2hhdCBzb3J0IG9mIHJlc291cmNlIGFsbG9jYXRpb24gYW5kIHBhcmFtZXRlciBwYXNzaW5nIGl0IGVudGFpbHMuIFRoZXJlJ3MgcHJvYmFibHkgc29tZSBjcnVjaWFsIHNpZ25hbGluZyBnb2luZyBvbiBoZXJlLiBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxODcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NTozMC4wNzQzMzk4OTJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2F0bS9jb21tb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NDU6XFx0XFx0LyogZW5zdXJlIHdlIGdldCBkZXYgbW9kdWxlIHJlZiBjb3VudCBjb3JyZWN0ICovXFxuIDQ0NjpcXHRcXHR2Y2MtXFx1MDAzZWRldiA9IE5VTEw7XFxuIDQ0NzpcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIDQ0ODpcXHR9XFxuIDQ0OTpcXHRcXG4gNDUwOlxcdGludCB2Y2NfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaXRmLCBzaG9ydCB2cGksIGludCB2Y2kpXFxuIDQ1MTpcXHR7XFxuIDQ1MjpcXHRcXHRzdHJ1Y3QgYXRtX2RldiAqZGV2O1xcbiA0NTM6XFx0XFx0c3RydWN0IGF0bV92Y2MgKnZjYyA9IEFUTV9TRChzb2NrKTtcXG4gNDU0OlxcdFxcdGludCBlcnJvcjtcXG4gNDU1OlxcdFxcbiA0NTY6XFx0XFx0cHJfZGVidWcoXFxcIih2cGkgJWQsIHZjaSAlZClcXFxcblxcXCIsIHZwaSwgdmNpKTtcXG4gNDU3OlxcdFxcdGlmIChzb2NrLVxcdTAwM2VzdGF0ZSA9PSBTU19DT05ORUNURUQpXFxuIDQ1ODpcXHRcXHRcXHRyZXR1cm4gLUVJU0NPTk47XFxuIDQ1OTpcXHRcXHRpZiAoc29jay1cXHUwMDNlc3RhdGUgIT0gU1NfVU5DT05ORUNURUQpXFxuIDQ2MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDYxOlxcdFxcdGlmICghKHZwaSB8fCB2Y2kpKVxcbiA0NjI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ2MzpcXHRcXG4gNDY0OlxcdFxcdGlmICh2cGkgIT0gQVRNX1ZQSV9VTlNQRUMgXFx1MDAyNlxcdTAwMjYgdmNpICE9IEFUTV9WQ0lfVU5TUEVDKVxcbiA0NjU6XFx0XFx0XFx0Y2xlYXJfYml0KEFUTV9WRl9QQVJUSUFMLCBcXHUwMDI2dmNjLVxcdTAwM2VmbGFncyk7XFxuIDQ2NjpcXHRcXHRlbHNlXFxuIDQ2NzpcXHRcXHRcXHRpZiAodGVzdF9iaXQoQVRNX1ZGX1BBUlRJQUwsIFxcdTAwMjZ2Y2MtXFx1MDAzZWZsYWdzKSlcXG4gNDY4OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0Njk6XFx0XFx0cHJfZGVidWcoXFxcIihUWDogY2wgJWQsYncgJWQtJWQsc2R1ICVkOyBcXFwiXFxuIDQ3MDpcXHRcXHRcXHQgXFxcIlJYOiBjbCAlZCxidyAlZC0lZCxzZHUgJWQsQUFMICVzJWQpXFxcXG5cXFwiLFxcbiA0NzE6XFx0XFx0XFx0IHZjYy1cXHUwMDNlcW9zLnR4dHAudHJhZmZpY19jbGFzcywgdmNjLVxcdTAwM2Vxb3MudHh0cC5taW5fcGNyLFxcbiA0NzI6XFx0XFx0XFx0IHZjYy1cXHUwMDNlcW9zLnR4dHAubWF4X3BjciwgdmNjLVxcdTAwM2Vxb3MudHh0cC5tYXhfc2R1LFxcbiA0NzM6XFx0XFx0XFx0IHZjYy1cXHUwMDNlcW9zLnJ4dHAudHJhZmZpY19jbGFzcywgdmNjLVxcdTAwM2Vxb3Mucnh0cC5taW5fcGNyLFxcbiA0NzQ6XFx0XFx0XFx0IHZjYy1cXHUwMDNlcW9zLnJ4dHAubWF4X3BjciwgdmNjLVxcdTAwM2Vxb3Mucnh0cC5tYXhfc2R1LFxcbiA0NzU6XFx0XFx0XFx0IHZjYy1cXHUwMDNlcW9zLmFhbCA9PSBBVE1fQUFMNSA/IFxcXCJcXFwiIDpcXG4gNDc2OlxcdFxcdFxcdCB2Y2MtXFx1MDAzZXFvcy5hYWwgPT0gQVRNX0FBTDAgPyBcXFwiXFxcIiA6IFxcXCIgPz8/IGNvZGUgXFxcIixcXG4gNDc3OlxcdFxcdFxcdCB2Y2MtXFx1MDAzZXFvcy5hYWwgPT0gQVRNX0FBTDAgPyAwIDogdmNjLVxcdTAwM2Vxb3MuYWFsKTtcXG4gNDc4OlxcdFxcdGlmICghdGVzdF9iaXQoQVRNX1ZGX0hBU1FPUywgXFx1MDAyNnZjYy1cXHUwMDNlZmxhZ3MpKVxcbiA0Nzk6XFx0XFx0XFx0cmV0dXJuIC1FQkFERkQ7XFxuIDQ4MDpcXHRcXHRpZiAodmNjLVxcdTAwM2Vxb3MudHh0cC50cmFmZmljX2NsYXNzID09IEFUTV9BTllDTEFTUyB8fFxcbiA0ODE6XFx0XFx0ICAgIHZjYy1cXHUwMDNlcW9zLnJ4dHAudHJhZmZpY19jbGFzcyA9PSBBVE1fQU5ZQ0xBU1MpXFxuIDQ4MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDgzOlxcdFxcdGlmIChsaWtlbHkoaXRmICE9IEFUTV9JVEZfQU5ZKSkge1xcbiA0ODQ6XFx0XFx0XFx0ZGV2ID0gdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoYXRtX2Rldl9sb29rdXAoaXRmKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDU6MzAuMDc0NDIzMTkyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3OTEyOTE3NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgbmV0d29ya2luZyBleHBlcnQ6XG5cbioqUFBQb0FUTSBhbmQgU3l6a2FsbGVyIC0gV2hlcmUncyB0aGUgQ292ZXJhZ2U/KipcblxuSG1tLCBJJ20gc2VlaW5nIGBhdG1fZGV2X2xvb2t1cChpdGYpYCDigJMgaW50ZXJlc3RpbmcuIEJ1dCBteSBicmFpbiBpbW1lZGlhdGVseSBqdW1wcyB0bywgXCJIb3cgZXhhY3RseSBpcyBzeXprYWxsZXIgdGVzdGluZyBQUFBvQVRNPyBJIGhhdmVuJ3Qgc2VlbiBtdWNoIG9mIHRoYXQgbGF0ZWx5LlwiIE15IGV4cGVyaWVuY2UgaGFzIG1lIHRoaW5raW5nLCBcInN5emthbGxlciBpcyBncmVhdCwgYnV0IGRpZCBpdCBldmVyIHJlYWxseSBnZXQgZGVlcCBpbnRvIFBQUG9BVE0/IEkgbmVlZCB0byBjaGVjay5cIiBMZXQgbWUganVzdCBkaWcgdGhyb3VnaCB0aGUgR2l0IGhpc3Rvcnkg4oCTIHByb2JhYmx5IGxvb2sgZm9yIGJ1ZyByZXBvcnRzIHJlbGF0ZWQgdG8gc3l6a2FsbGVyIGFuZCBwcHBvYXRtLiBUaGF0IHNob3VsZCBwb2ludCBtZSBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgdGVzdGluZyBjb3ZlcmFnZSBmb3IgdGhpcyBwcm90b2NvbC4gVGhlcmUgY291bGQgYmUgc29tZSBpc3N1ZXMgbHVya2luZyB0aGF0IEkgYW0gYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjA5LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NTozMS44NjU3MTgwNDZaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1OTc4MzM4MzUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5emJvdC4qcHBwb2F0bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDU6MzQuNDYzNTYwNTIxWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMwNTgwMDM4ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgUFBQb0FUTSBDb21taXQgTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb21taXQgaGlzdG9yeSByZWxhdGVkIHRvIGBuZXQvYXRtL3BwcG9hdG0uY2AuIE15IGluaXRpYWwgaW5zdGluY3Qgd2FzIHRvIHJlYWNoIGZvciBhIHRvb2wgbGlrZSBncmVwcGVyLCBidXQgd2FpdCwgZ3JlcHBlciBpcyBtb3JlIGZvciBzZWFyY2hpbmcgKndpdGhpbiogZmlsZXMsIG5vdCB0aGUgY29tbWl0IGxvZyBpdHNlbGYuIFRoYXQncyBhIGNsYXNzaWMgbWlzZmlyZSwgSSBuZWVkIHRvIGZvY3VzIG9uIGdpdCBsb2cuXG5cbkNhbiBJIGRpcmVjdGx5IHNlYXJjaCB0aGUgZ2l0IGxvZyBmb3IgcmVsZXZhbnQgZW50cmllcz8gUmlnaHQsIHRoZXJlIGlzbid0IGEgZGVkaWNhdGVkIFwiZ3JlcHBlclwiIGVxdWl2YWxlbnQgZm9yIGBnaXQgbG9nYCBkaXJlY3RseS4gSG1tbSwgY291bGQgSSBzZWFyY2ggZm9yIHNvbWV0aGluZyBzcGVjaWZpYywgbGlrZSBcIlJlcG9ydGVkLWJ5OiBzeXpib3RcIiB3aXRoaW4gdGhhdCBzcGVjaWZpYyBmaWxlIG9yIGl0cyBjb21tZW50cywgb3IgbWF5YmUgdGhlIGNvZGUgaXRzZWxmPyBUaGF0IG1pZ2h0IHlpZWxkIHNvbWV0aGluZy4gU3RpbGwsIHJ1bm5pbmcgYGdpdCBsb2dgIGRpcmVjdGx5IGlzbid0IGFuIG9wdGlvbi5cblxuQWxyaWdodCwgd2hhdCBhYm91dCBhIGJyb2FkZXIgc2VhcmNoIGZvciBcInBwcG9hdG1cIiBhY3Jvc3Mga2VybmVsIGNvbW1pdHM/IE5vLCB3YWl0Li4uIGdyZXBwZXIgaXMgZmlsZS1iYXNlZCwgc28gdGhhdCB3b24ndCB3b3JrIGVpdGhlci4gT2theSwgbmV3IHBsYW46IExldCdzIGdyZXAgZm9yIFwicHBwb2F0bVwiIGluIHRoZSBgRG9jdW1lbnRhdGlvbi9gIGRpcmVjdG9yeSBvciBwZXJoYXBzIHRoZSBgbmV0L2F0bS9gIGRpcmVjdG9yeS4gVGhhdCdzIG1vcmUgcmVhc29uYWJsZSBhbmQgYSBxdWljayB3YXkgdG8gZGlzY292ZXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0NTcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDU6MzcuNTIxNTY4MzUzWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTgwNTYzMzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBwcG9hdG1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiRG9jdW1lbnRhdGlvbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ1OjM3LjgzOTYzMjc5MloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDc1MjAwMjA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipHcmFzcGluZyB0aGUgU2NvcGUgb2YgQVRNX0JBQ0tFTkRfUFBQKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYEFUTV9CQUNLRU5EX1BQUGAgaXMgdXRpbGl6ZWQgd2l0aGluIHRoaXMgY29kZWJhc2UuIEdpdmVuIG15IGV4cGVyaWVuY2UsIGEgZnVsbCBjb2RlIHJldmlldyB0byBsb2NhdGUgZXZlcnkgaW5zdGFuY2Ugd291bGQgYmUgb3ZlcmtpbGwsIHVubGVzcyB0aGVyZSdzIHNvbWUgZXZpZGVuY2Ugb2YgYSBwYXJ0aWN1bGFybHkgZWx1c2l2ZSBidWcuIEEgZ29vZCBzdGFydGluZyBwb2ludCwgYW5kIHVzdWFsbHkgdGhlIGZhc3Rlc3QsIG1vc3QgZWZmZWN0aXZlIHdheSB0byBnZXQgYW4gb3ZlcnZpZXcsIGlzIGEgYGdyZXBgLiBJIHdhbnQgdG8gc2VhcmNoIHRoZSBlbnRpcmUgcHJvamVjdCwgc28gSSdsbCBuZWVkIHRvIHNwZWNpZnkgdGhhdCBjbGVhcmx5LiBXaXRoIGEgZ29vZCBgZ3JlcGAgY29tbWFuZCwgSSBzaG91bGQgYmUgYWJsZSB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgZmlsZXMgYW5kIGNvbnRleHRzIHdoZXJlIHRoaXMgY29uc3RhbnQgb3IgbWFjcm8gaXMgZGVmaW5lZCBvciB1c2VkLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgYW55IHNwZWNpZmljIGZpbGVzIHdhcnJhbnQgbW9yZSBpbi1kZXB0aCBhdHRlbnRpb24gYmFzZWQgb24gdGhlIGluaXRpYWwgb3V0cHV0LiBUaGlzIGlzIGEgc3RhbmRhcmQgYW5kIGVmZmljaWVudCB3YXkgdG8gYmVnaW4gYW4gaW52ZXN0aWdhdGlvbiBpbnRvIGFuIHVuZmFtaWxpYXIgY29kZWJhc2UgYXJlYSwgZXNwZWNpYWxseSB3aGVuIGZvY3VzaW5nIG9uIGEgc3BlY2lmaWMgbWFjcm8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTAxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDU6NDguNTkxNjM3ODc2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjg2NTk2Njc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFUTV9CQUNLRU5EX1BQUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvYXRtZGV2Lmg9NDg9c3RydWN0IGF0bV9kZXZfc3RhdHMge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2F0bWRldi5oLTk0LSNkZWZpbmUgQVRNX0JBQ0tFTkRfUkFXXFx0XFx0MFxcdFxcbmluY2x1ZGUvdWFwaS9saW51eC9hdG1kZXYuaDo5NTojZGVmaW5lIEFUTV9CQUNLRU5EX1BQUFxcdFxcdDFcXHQvKiBQUFBvQVRNIC0gUkZDMjM2NCAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9hdG1kZXYuaC05Ni0jZGVmaW5lIEFUTV9CQUNLRU5EX0JSMjY4NFxcdDJcXHQvKiBCcmlkZ2VkIFJGQzE0ODMvMjY4NCAqL1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2F0bXBwcC5oPTIwPXN0cnVjdCBhdG1fYmFja2VuZF9wcHAge1xcbmluY2x1ZGUvdWFwaS9saW51eC9hdG1wcHAuaDoyMTpcXHRhdG1fYmFja2VuZF90XFx0YmFja2VuZF9udW07XFx0LyogQVRNX0JBQ0tFTkRfUFBQICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L2F0bXBwcC5oLTIyLVxcdGludFxcdFxcdGVuY2FwcztcXHRcXHQvKiBQUFBPQVRNX0VOQ0FQU18qICovXFxuLS1cXG5uZXQvYXRtL2lvY3RsLmM9NDM9c3RhdGljIGludCBkb192Y2NfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbm5ldC9hdG0vaW9jdGwuYy05My1cXHRcXHRzd2l0Y2ggKGJhY2tlbmQpIHtcXG5uZXQvYXRtL2lvY3RsLmM6OTQ6XFx0XFx0Y2FzZSBBVE1fQkFDS0VORF9QUFA6XFxubmV0L2F0bS9pb2N0bC5jLTk1LVxcdFxcdFxcdHJlcXVlc3RfbW9kdWxlKFxcXCJwcHBvYXRtXFxcIik7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYz00MzA9c3RhdGljIGludCBwcHBvYXRtX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy00NDItXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxubmV0L2F0bS9wcHBvYXRtLmM6NDQzOlxcdFxcdGlmIChiICE9IEFUTV9CQUNLRU5EX1BQUClcXG5uZXQvYXRtL3BwcG9hdG0uYy00NDQtXFx0XFx0XFx0cmV0dXJuIC1FTk9JT0NUTENNRDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDU6NTAuODc4MjQyMjcxWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1NzQyMTc5MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBBVE0gSU9DVEwgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgbWludXRlLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoaXMuIExldCdzIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgSU9DVEwgaGFuZGxpbmcgZm9yIEFUTSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIGNvZGUgaW4gYG5ldC9hdG0vaW9jdGwuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIG1hbmFnZXMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIEFUTSBuZXR3b3JrIGludGVyZmFjZS4gVGhlIHN0YXJ0aW5nIHBvaW50IGlzIGxpa2VseSB0byBiZSB0aGUgYGRvX3ZjY19pb2N0bGAgZnVuY3Rpb24gd2l0aGluIHRoYXQgZmlsZS4gVGhhdCdzIHRoZSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIHdoZW4gYSBzb2NrZXQgSU9DVEwgb3BlcmF0aW9uIGdldHMgY2FsbGVkLiBMZXQncyBzZWUgd2hhdCB0aGF0J3MgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTc4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDU6NTQuNDUyNDY1NjkxWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYXRtL2lvY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzA6XFx0XFx0XFx0aWYgKHNvY2stXFx1MDAzZXN0YXRlICE9IFNTX0NPTk5FQ1RFRCkge1xcbiAgNzE6XFx0XFx0XFx0XFx0ZXJyb3IgPSAtRUlOVkFMO1xcbiAgNzI6XFx0XFx0XFx0XFx0Z290byBkb25lO1xcbiAgNzM6XFx0XFx0XFx0fVxcbiAgNzQ6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jayk7XFxuICA3NTpcXHRcXHRcXHRza2IgPSBza2JfcGVlayhcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xcbiAgNzY6XFx0XFx0XFx0YW1vdW50ID0gc2tiID8gc2tiLVxcdTAwM2VsZW4gOiAwO1xcbiAgNzc6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTtcXG4gIDc4OlxcdFxcdFxcdGVycm9yID0gcHV0X3VzZXIoYW1vdW50LCAoaW50IF9fdXNlciAqKWFyZ3ApO1xcbiAgNzk6XFx0XFx0XFx0Z290byBkb25lO1xcbiAgODA6XFx0XFx0fVxcbiAgODE6XFx0XFx0Y2FzZSBBVE1fU0VUU0M6XFxuICA4MjpcXHRcXHRcXHRuZXRfd2Fybl9yYXRlbGltaXRlZChcXFwiQVRNX1NFVFNDIGlzIG9ic29sZXRlOyB1c2VkIGJ5ICVzOiVkXFxcXG5cXFwiLFxcbiAgODM6XFx0XFx0XFx0XFx0XFx0ICAgICBjdXJyZW50LVxcdTAwM2Vjb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7XFxuICA4NDpcXHRcXHRcXHRlcnJvciA9IDA7XFxuICA4NTpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuICA4NjpcXHRcXHRjYXNlIEFUTV9TRVRCQUNLRU5EOlxcbiAgODc6XFx0XFx0Y2FzZSBBVE1fTkVXQkFDS0VORElGOlxcbiAgODg6XFx0XFx0e1xcbiAgODk6XFx0XFx0XFx0YXRtX2JhY2tlbmRfdCBiYWNrZW5kO1xcbiAgOTA6XFx0XFx0XFx0ZXJyb3IgPSBnZXRfdXNlcihiYWNrZW5kLCAoYXRtX2JhY2tlbmRfdCBfX3VzZXIgKilhcmdwKTtcXG4gIDkxOlxcdFxcdFxcdGlmIChlcnJvcilcXG4gIDkyOlxcdFxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gIDkzOlxcdFxcdFxcdHN3aXRjaCAoYmFja2VuZCkge1xcbiAgOTQ6XFx0XFx0XFx0Y2FzZSBBVE1fQkFDS0VORF9QUFA6XFxuICA5NTpcXHRcXHRcXHRcXHRyZXF1ZXN0X21vZHVsZShcXFwicHBwb2F0bVxcXCIpO1xcbiAgOTY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuICA5NzpcXHRcXHRcXHRjYXNlIEFUTV9CQUNLRU5EX0JSMjY4NDpcXG4gIDk4OlxcdFxcdFxcdFxcdHJlcXVlc3RfbW9kdWxlKFxcXCJicjI2ODRcXFwiKTtcXG4gIDk5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxMDA6XFx0XFx0XFx0fVxcbiAxMDE6XFx0XFx0XFx0YnJlYWs7XFxuIDEwMjpcXHRcXHR9XFxuIDEwMzpcXHRcXHR9XFxuIDEwNDpcXHRcXG4gMTA1OlxcdFxcdGVycm9yID0gLUVOT0lPQ1RMQ01EO1xcbiAxMDY6XFx0XFxuIDEwNzpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZpb2N0bF9tdXRleCk7XFxuIDEwODpcXHRcXHRsaXN0X2Zvcl9lYWNoKHBvcywgXFx1MDAyNmlvY3RsX2xpc3QpIHtcXG4gMTA5OlxcdFxcdFxcdHN0cnVjdCBhdG1faW9jdGwgKmljID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBhdG1faW9jdGwsIGxpc3QpO1xcbiAxMTA6XFx0XFx0XFx0aWYgKHRyeV9tb2R1bGVfZ2V0KGljLVxcdTAwM2Vvd25lcikpIHtcXG4gMTExOlxcdFxcdFxcdFxcdGVycm9yID0gaWMtXFx1MDAzZWlvY3RsKHNvY2ssIGNtZCwgYXJnKTtcXG4gMTEyOlxcdFxcdFxcdFxcdG1vZHVsZV9wdXQoaWMtXFx1MDAzZW93bmVyKTtcXG4gMTEzOlxcdFxcdFxcdFxcdGlmIChlcnJvciAhPSAtRU5PSU9DVExDTUQpXFxuIDExNDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDU6NTQuNDUyNjE2MDYxWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU0NjAyMDAzNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIEFUTSBJT0NUTCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHRoZSBBVE0gSU9DVEwgaW50ZXJmYWNlIHdvcmtzLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgbmV0L2F0bS9pb2N0bC5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBUaGUgZnVuY3Rpb24gYEFUTV9TRVRCQUNLRU5EYCBpbW1lZGlhdGVseSBjYWxscyBgcmVxdWVzdF9tb2R1bGUoXCJwcHBvYXRtXCIpYC4gVGhhdCdzIGludGVyZXN0aW5nOyBpdCBzZWVtcyBsaWtlIGl0J3MgdHJ5aW5nIHRvIGR5bmFtaWNhbGx5IGxvYWQgdGhlIFBQUG9BL0FUTSBtb2R1bGUsIGBwcHBvYXRtYCwgaWYgaXQncyBub3QgYWxyZWFkeSBwcmVzZW50LiBBZnRlciB0aGF0LCBJIHNlZSBpdCBpdGVyYXRlcyB0aHJvdWdoIGBpb2N0bF9saXN0YC4gVGhhdCBtdXN0IGJlIHdoZXJlIHRoZSBjb3JlIGlvY3RsIGZ1bmN0aW9uYWxpdHkgaXMgcmVnaXN0ZXJlZC5cblxuTXkgbmV4dCBzdGVwLCBuYXR1cmFsbHksIGlzIHRvIGNoZWNrIGhvdyBgcHBwb2F0bWAgaW50ZWdyYXRlcyBpdHNlbGYuIFRoZSBtb2R1bGUgZ2V0cyBsb2FkZWQgYW5kIGluaXRpYWxpemVkLCBhbmQgSSBwcmVkaWN0IEknbGwgZmluZCBpdHMgYGlvY3RsYCBvcGVyYXRpb25zIHJlZ2lzdGVyZWQgYXQgdGhpcyBzdGFnZS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBzbyBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgaW5pdF9wcHBvYXRtYCBmdW5jdGlvbiBpbiBgbmV0L2F0bS9wcHBvYXRtLmNgLiBUaGF0IHNob3VsZCBzaG93IG1lIHdoZXJlIGBwcHBvYXRtX2lvY3RsX29wc2AgZ2V0IGhvb2tlZCBpbnRvIHRoZSBzeXN0ZW0uIEtub3dpbmcgdGhpcyBpcyB0aGUgaGVhcnQgb2YgdGhlIGRyaXZlcidzIElPQ1RMIGhhbmRsaW5nIHdpbGwgYmUga2V5IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBkaWZmZXJlbnQgQVRNIHNwZWNpZmljIHJlcXVlc3RzIGFyZSBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0NDMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ1OjU5LjkxMjgxOTY1OVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjcyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2F0bS9wcHBvYXRtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDYwOlxcdFxcbiA0NjE6XFx0c3RhdGljIHN0cnVjdCBhdG1faW9jdGwgcHBwb2F0bV9pb2N0bF9vcHMgPSB7XFxuIDQ2MjpcXHRcXHQub3duZXJcXHQ9IFRISVNfTU9EVUxFLFxcbiA0NjM6XFx0XFx0LmlvY3RsXFx0PSBwcHBvYXRtX2lvY3RsLFxcbiA0NjQ6XFx0fTtcXG4gNDY1OlxcdFxcbiA0NjY6XFx0c3RhdGljIGludCBfX2luaXQgcHBwb2F0bV9pbml0KHZvaWQpXFxuIDQ2NzpcXHR7XFxuIDQ2ODpcXHRcXHRyZWdpc3Rlcl9hdG1faW9jdGwoXFx1MDAyNnBwcG9hdG1faW9jdGxfb3BzKTtcXG4gNDY5OlxcdFxcdHJldHVybiAwO1xcbiA0NzA6XFx0fVxcbiA0NzE6XFx0XFxuIDQ3MjpcXHRzdGF0aWMgdm9pZCBfX2V4aXQgcHBwb2F0bV9leGl0KHZvaWQpXFxuIDQ3MzpcXHR7XFxuIDQ3NDpcXHRcXHRkZXJlZ2lzdGVyX2F0bV9pb2N0bChcXHUwMDI2cHBwb2F0bV9pb2N0bF9vcHMpO1xcbiA0NzU6XFx0fVxcbiA0NzY6XFx0XFxuIDQ3NzpcXHRtb2R1bGVfaW5pdChwcHBvYXRtX2luaXQpO1xcbiA0Nzg6XFx0bW9kdWxlX2V4aXQocHBwb2F0bV9leGl0KTtcXG4gNDc5OlxcdFxcbiA0ODA6XFx0TU9EVUxFX0FVVEhPUihcXFwiTWl0Y2hlbGwgQmxhbmsgSnIgXFx1MDAzY21pdGNoQHNmZ290aC5jb21cXHUwMDNlXFxcIik7XFxuIDQ4MTpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlJGQzIzNjQgUFBQIG92ZXIgQVRNL0FBTDVcXFwiKTtcXG4gNDgyOlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDU6NTkuOTEyOTQ5OTg5WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzNTc4MTEzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQVRNIFNvY2tldCBDb25uZWN0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdGhpcyBBVE0gc29ja2V0IGFjdHVhbGx5IGdldHMgY29ubmVjdGVkLCByaWdodD8gTGV0J3MgdHJhY2UgdGhpcy4gRmlyc3QsIEkgc2VlIGB2Y2NfY29ubmVjdGAuIEhtbSwgaWYgdGhlIGludGVyZmFjZSwgYGl0ZmAsIGlzbid0IHNldCB0byBhIHNwZWNpZmljIHZhbHVlLCBpZiBpdCdzIGBBVE1fSVRGX0FOWWAuLi4gd2VsbCwgdGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFRoZSBjb2RlIHNuaXBwZXQgc2hvd3MgdGhpcyBzcGVjaWZpYyBzY2VuYXJpby4gVGhlIGBpZiAobGlrZWx5KGl0ZiAhPSBBVE1fSVRGX0FOWSkpYCBzdGF0ZW1lbnQgaXMgc2tpcHBlZCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBoYXBwZW5zIHdoZW4gYGl0ZmAgSVMgYEFUTV9JVEZfQU5ZYC4gT2theSwgdGltZSB0byBkaXZlIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gZmxvdyB3aGVuIGl0J3MgZ2VuZXJpYywgc28gdGhhdCBtZWFucyBJIG5lZWQgdG8gbG9vayBhdCBlaXRoZXIgdGhlIGBfX3ZjY19jb25uZWN0YCBmdW5jdGlvbiBvciBgdmNjX2Nvbm5lY3RgLCBib3RoIG9mIHdoaWNoIGFyZSBsaWtlbHkgZGVmaW5lZCB3aXRoaW4gdGhlIGBuZXQvYXRtL2NvbW1vbi5jYCBmaWxlLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIHVucmF2ZWwgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxNDksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NjowMi4yNzA3NjM5MzNaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2F0bS9jb21tb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0ODA6XFx0XFx0aWYgKHZjYy1cXHUwMDNlcW9zLnR4dHAudHJhZmZpY19jbGFzcyA9PSBBVE1fQU5ZQ0xBU1MgfHxcXG4gNDgxOlxcdFxcdCAgICB2Y2MtXFx1MDAzZXFvcy5yeHRwLnRyYWZmaWNfY2xhc3MgPT0gQVRNX0FOWUNMQVNTKVxcbiA0ODI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ4MzpcXHRcXHRpZiAobGlrZWx5KGl0ZiAhPSBBVE1fSVRGX0FOWSkpIHtcXG4gNDg0OlxcdFxcdFxcdGRldiA9IHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKGF0bV9kZXZfbG9va3VwKGl0ZiksXFxuIDQ4NTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXFwiYXRtLWRldmljZS0lZFxcXCIsIGl0Zik7XFxuIDQ4NjpcXHRcXHR9IGVsc2Uge1xcbiA0ODc6XFx0XFx0XFx0ZGV2ID0gTlVMTDtcXG4gNDg4OlxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmF0bV9kZXZfbXV0ZXgpO1xcbiA0ODk6XFx0XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZhdG1fZGV2cykpIHtcXG4gNDkwOlxcdFxcdFxcdFxcdGRldiA9IGxpc3RfZW50cnkoYXRtX2RldnMubmV4dCxcXG4gNDkxOlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYXRtX2RldiwgZGV2X2xpc3QpO1xcbiA0OTI6XFx0XFx0XFx0XFx0YXRtX2Rldl9ob2xkKGRldik7XFxuIDQ5MzpcXHRcXHRcXHR9XFxuIDQ5NDpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmF0bV9kZXZfbXV0ZXgpO1xcbiA0OTU6XFx0XFx0fVxcbiA0OTY6XFx0XFx0aWYgKCFkZXYpXFxuIDQ5NzpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gNDk4OlxcdFxcdGVycm9yID0gX192Y2NfY29ubmVjdCh2Y2MsIGRldiwgdnBpLCB2Y2kpO1xcbiA0OTk6XFx0XFx0aWYgKGVycm9yKSB7XFxuIDUwMDpcXHRcXHRcXHRhdG1fZGV2X3B1dChkZXYpO1xcbiA1MDE6XFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbiA1MDI6XFx0XFx0fVxcbiA1MDM6XFx0XFx0aWYgKHZwaSA9PSBBVE1fVlBJX1VOU1BFQyB8fCB2Y2kgPT0gQVRNX1ZDSV9VTlNQRUMpXFxuIDUwNDpcXHRcXHRcXHRzZXRfYml0KEFUTV9WRl9QQVJUSUFMLCBcXHUwMDI2dmNjLVxcdTAwM2VmbGFncyk7XFxuIDUwNTpcXHRcXHRpZiAodGVzdF9iaXQoQVRNX1ZGX1JFQURZLCBcXHUwMDI2QVRNX1NEKHNvY2spLVxcdTAwM2VmbGFncykpXFxuIDUwNjpcXHRcXHRcXHRzb2NrLVxcdTAwM2VzdGF0ZSA9IFNTX0NPTk5FQ1RFRDtcXG4gNTA3OlxcdFxcdHJldHVybiAwO1xcbiA1MDg6XFx0fVxcbiA1MDk6XFx0XFxuIDUxMDpcXHRpbnQgdmNjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSxcXG4gNTExOlxcdFxcdFxcdGludCBmbGFncylcXG4gNTEyOlxcdHtcXG4gNTEzOlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbiA1MTQ6XFx0XFx0c3RydWN0IGF0bV92Y2MgKnZjYztcXG4gNTE1OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDUxNjpcXHRcXHRpbnQgY29waWVkLCBlcnJvciA9IC1FSU5WQUw7XFxuIDUxNzpcXHRcXG4gNTE4OlxcdFxcdGlmIChzb2NrLVxcdTAwM2VzdGF0ZSAhPSBTU19DT05ORUNURUQpXFxuIDUxOTpcXHRcXHRcXHRyZXR1cm4gLUVOT1RDT05OO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NjowMi4yNzA4NTQzNzNaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTQ0MTQzMDYzNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgdmNjX2Nvbm5lY3RgIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHZjY19jb25uZWN0YCBmdW5jdGlvbi4gRmlyc3QsIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgY3J1Y2lhbDogYXJlIHdlIGRlYWxpbmcgd2l0aCBhbiBBVE0gZGV2aWNlIHRoYXQncyBhbHJlYWR5IHJlZ2lzdGVyZWQ/IFRoaW5ncyBsaWtlIGBzb2xvcy1wY2lgIG9yIGB1c2JhdG1gPyBJZiB3ZSBoYXZlIGEgcmVnaXN0ZXJlZCBBVE0gZGV2aWNlLCB0aGVuIHRoZSBgc29jay1cdTAwM2VzdGF0ZWAgZ2V0cyBzZXQgdG8gYFNTX0NPTk5FQ1RFRGAuIFRoYXQncyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IsIG5hdHVyYWxseS4gSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLi4uIEknbSB0aGlua2luZyBhYm91dCBgc29sb3MtcGNpYC4gSXNuJ3QgdGhhdCBjYXJkIG9mdGVuIGVtdWxhdGVkIGluIFFFTVU/IE5vLCB3YWl0IGEgbWludXRlLCBgc29sb3MtcGNpYCBpcyBhIHBoeXNpY2FsIEFEU0wgY2FyZC4gQWxyaWdodCwgSSBuZWVkIHRvIGZvY3VzLiBMZXQgbWUgcmVkaXJlY3QgbXkgdGhpbmtpbmcgdG8gYGRyaXZlcnMvdXNiL2F0bS91c2JhdG0uY2AuIE5vdywgbGV0IG1lIGZpbmQgb3V0IHdoaWNoIGRyaXZlcnMgYXJlIHVzaW5nIHRoZSBgdXNiYXRtYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxNjAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ2OjE2LjY4NTE2Mzc5WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkxMTAzNzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzYmF0bV91c2JfcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTEzNDY9c3RhdGljIGludCBjeGFjcnVfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEzNjMtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjEzNjQ6XFx0cmV0dXJuIHVzYmF0bV91c2JfcHJvYmUoaW50ZiwgaWQsIFxcdTAwMjZjeGFjcnVfZHJpdmVyKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTM2NS19XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vc3BlZWR0Y2guYz05NDA9c3RhdGljIGludCBzcGVlZHRjaF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG5kcml2ZXJzL3VzYi9hdG0vc3BlZWR0Y2guYy05NDEte1xcbmRyaXZlcnMvdXNiL2F0bS9zcGVlZHRjaC5jOjk0MjpcXHRyZXR1cm4gdXNiYXRtX3VzYl9wcm9iZShpbnRmLCBpZCwgXFx1MDAyNnNwZWVkdGNoX3VzYmF0bV9kcml2ZXIpO1xcbmRyaXZlcnMvdXNiL2F0bS9zcGVlZHRjaC5jLTk0My19XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vdWVhZ2xlLWF0bS5jPTI1NTA9c3RhdGljIGludCB1ZWFfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmMtMjU5Ny1cXG5kcml2ZXJzL3VzYi9hdG0vdWVhZ2xlLWF0bS5jOjI1OTg6XFx0cmV0ID0gdXNiYXRtX3VzYl9wcm9iZShpbnRmLCBpZCwgXFx1MDAyNnVlYV91c2JhdG1fZHJpdmVyKTtcXG5kcml2ZXJzL3VzYi9hdG0vdWVhZ2xlLWF0bS5jLTI1OTktXFx0aWYgKHJldCA9PSAwKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmM9MTAwMT1zdGF0aWMgdm9pZCB1c2JhdG1faW5pdF9jaGFubmVsKHN0cnVjdCB1c2JhdG1fY2hhbm5lbCAqY2hhbm5lbClcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy0xMDA3LVxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYzoxMDA4OmludCB1c2JhdG1fdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQsXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTEwMDktXFx0XFx0ICAgICBzdHJ1Y3QgdXNiYXRtX2RyaXZlciAqZHJpdmVyKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTEyMDQtfVxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYzoxMjA1OkVYUE9SVF9TWU1CT0xfR1BMKHVzYmF0bV91c2JfcHJvYmUpO1xcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy0xMjA2LVxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYz0xMjA3PXZvaWQgdXNiYXRtX3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTEyNzEtXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jOjEyNzI6XFx0dXNiYXRtX3B1dF9pbnN0YW5jZShpbnN0YW5jZSk7XFx0LyogdGFrZW4gaW4gdXNiYXRtX3VzYl9wcm9iZSAqL1xcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy0xMjczLX1cXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uaD03Mz1zdHJ1Y3QgdXNiYXRtX2RyaXZlciB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmgtOTktXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5oOjEwMDpleHRlcm4gaW50IHVzYmF0bV91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCxcXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmgtMTAxLVxcdFxcdHN0cnVjdCB1c2JhdG1fZHJpdmVyICpkcml2ZXIpO1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYz0xNDg9c3RhdGljIGludCB4dXNiYXRtX2F0bV9zdGFydChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bSxcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMtMTU5LVxcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmM6MTYwOnN0YXRpYyBpbnQgeHVzYmF0bV91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYy0xNjEtXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXFxuZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYy0xNjIte1xcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmM6MTYzOlxcdHJldHVybiB1c2JhdG1fdXNiX3Byb2JlKGludGYsIGlkLFxcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMtMTY0LVxcdFxcdFxcdFxcdHh1c2JhdG1fZHJpdmVycyArIChpZCAtIHh1c2JhdG1fdXNiX2lkcykpO1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYz0xNjc9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHh1c2JhdG1fdXNiX2RyaXZlciA9IHtcXG5kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jLTE2OC1cXHQubmFtZVxcdFxcdD0geHVzYmF0bV9kcml2ZXJfbmFtZSxcXG5kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jOjE2OTpcXHQucHJvYmVcXHRcXHQ9IHh1c2JhdG1fdXNiX3Byb2JlLFxcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMtMTcwLVxcdC5kaXNjb25uZWN0XFx0PSB1c2JhdG1fdXNiX2Rpc2Nvbm5lY3QsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ2OjE5LjA3NjI3MzUxOFoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NjEwMTM0NDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVTQiBBVE0gRHJpdmVyIERpc2NvdmVyeSBhbmQgUG90ZW50aWFsIEVtdWxhdGlvbiBQYXRocyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGRyaXZlciBuYW1lcyDigJMgYGN4YWNydWAsIGBzcGVlZHRjaGAsIGB1ZWFnbGUtYXRtYCwgYW5kIGB4dXNiYXRtYCDigJMgYW5kIHRoZXkncmUgYWxsIGNsZWFybHkgVVNCIEFUTSBkcml2ZXJzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQ2FuIHN5emthbGxlciBoYW5kbGUgVVNCIGRldmljZSBlbXVsYXRpb24/XCIgT2YgY291cnNlISBJIHJlbWVtYmVyIHNlZWluZyB0aGF0IFVTQiBnYWRnZXQgZW11bGF0aW9uICh1c2luZyByYXcgZ2FkZ2V0IG9yIGEgZHVtbXkgSENEKSBpcyBleHBsaWNpdGx5IHN1cHBvcnRlZC4gSSBldmVuIHJlY2FsbCB0aGUgaW5zdHJ1Y3Rpb25zIG1lbnRpb25pbmcgaXQgZXhwbGljaXRseTogXCIoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcClcIiBhbmQgYWdhaW4gaW4gc2VjdGlvbiAzLCBtZW50aW9uaW5nIGRyaXZlcnMgXCJhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlwiIEV4Y2VsbGVudC5cblxuTm93LCBJJ20gdGhpbmtpbmcsIFwiSXMgdGhlcmUgYW5vdGhlciBhbmdsZSBoZXJlP1wiIENvdWxkIEFUTSBiZSBzaW11bGF0ZWQgb3IgYWNjZXNzZWQgaW4gc29tZSAqb3RoZXIqIHdheT8gTXkgaW5zdGluY3QgaXMgdG8gY2hlY2sgYG5ldC9hdG0vYCBhbmQgYGRyaXZlcnMvYXRtL2AuIExldCdzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgaW4gdGhvc2UgZGlyZWN0b3JpZXMsIGluIGFkZGl0aW9uIHRvIFVTQiBpbXBsZW1lbnRhdGlvbnMuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRldmljZXMgaW4gYG5ldC9hdG0vYCBvciBgZHJpdmVycy9hdG0vYC5cblxuSG1tLi4uIEknbSByZW1pbmRlZCBvZiBvbGRlciBrZXJuZWwgY29kZSDigJMgYGVuaS5jYCwgYG5pY3N0YXIuY2AsIGBmaXJlc3RyZWFtLmNgIOKAkyBidXQgdGhvc2UgYXJlIHByb2JhYmx5IGlycmVsZXZhbnQgbm93LCBwZXJoYXBzIHJlbW92ZWQgb3Igc2lnbmlmaWNhbnRseSBvdXRkYXRlZC4gTGV0J3Mgc3RhcnQgd2l0aCBhIHRob3JvdWdoIGNoZWNrIG9mIHdoYXQncyAqY3VycmVudGx5KiBpbiBgZHJpdmVycy9hdG0vYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2MzcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDY6MjMuNjg2NDExODkyWiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQwMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL2F0bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJzb2xvcy1hdHRybGlzdC5jXCIsXG4gICAgXCJzb2xvcy1wY2kuY1wiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBudWxsXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NjoyMy42ODY0Njc4MDNaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzcyODI2MzA0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIERyaXZlciBDb21wYXRpYmlsaXR5KipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgaXNzdWUgbWlnaHQgYmUgc3RlbW1pbmcgZnJvbS4gTGV0J3Mgbm90IGxpbWl0IG91cnNlbHZlcyB0byB0aGUgb2J2aW91cyBwbGFjZXMuIEkgc2hvdWxkIGRlZmluaXRlbHkgYnJvYWRlbiB0aGUgc2VhcmNoIHRvIGVuY29tcGFzcyBzb21lIHJlbGF0ZWQgbmV0d29yayBhcmVhcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHBpdm90IGludG8gYSBjb3VwbGUgb2Yga2V5IGRyaXZlciBkaXJlY3RvcmllczogbGV0J3MgZ28gcG9rZSBhcm91bmQgaW4gYGRyaXZlcnMvbmV0L3BwcC9gIOKAkyBpdCdzIGNydWNpYWwgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgYW5kIGludGVncmF0aW9uIHRoZXJlLiBCdXQgYWxzbywgd2hpbGUgd2UncmUgYXQgaXQsIGxldOKAmXMgaGF2ZSBhIGxvb2sgaW50byBgbmV0L2F0bS9gLiBJdCdzIHdvcnRoIGVuc3VyaW5nIHRoZXJlIGFyZW4ndCBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyBvciBjb25mbGljdHMgbHVya2luZyB3aXRoaW4gdGhhdCBBVE0gY29kZSwgZXZlbiBpZiBpdCBzZWVtcyBsZXNzIGxpa2VseSBhdCBmaXJzdCBnbGFuY2UuIFdoYXQgZXhhY3RseSBhcmUgdGhlIGZpbGVzIGN1cnJlbnRseSBwcmVzZW50IGluIGBuZXQvYXRtL2A/IFRoYXQncyB0aGUgaW1tZWRpYXRlIG5leHQgc3RlcC4gV2UgbmVlZCB0byBhc3Nlc3MgdGhlIHNjb3BlIG9mIHRoYXQgZGlyZWN0b3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTI0MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NjoyNy40MTQ3MzU1NjdaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJuZXQvYXRtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImF0bV9taXNjLmNcIixcbiAgICBcImF0bV9zeXNmcy5jXCIsXG4gICAgXCJicjI2ODQuY1wiLFxuICAgIFwiY29tbW9uLmNcIixcbiAgICBcImNvbW1vbi5oXCIsXG4gICAgXCJpb2N0bC5jXCIsXG4gICAgXCJwcHBvYXRtLmNcIixcbiAgICBcInByb2MuY1wiLFxuICAgIFwicHJvdG9jb2xzLmhcIixcbiAgICBcInB2Yy5jXCIsXG4gICAgXCJyYXcuY1wiLFxuICAgIFwicmVzb3VyY2VzLmNcIixcbiAgICBcInJlc291cmNlcy5oXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ2OjI3LjQxNDkxOTkwN1oiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTg1MDUxODI1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgUFBQb0FUTSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBhaW1zIHRvIGNsZWFuIHVwIHRoZSBgcHBwb2F0bV9zZW5kYCBmdW5jdGlvbiwgYWRkcmVzc2luZyBzb21lIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG91dC1vZi1ib3VuZHMgcmVhZHMsIGFuZCBpbmVmZmljaWVuY2llcywgcGFydGljdWxhcmx5IGFyb3VuZCB0aGUgTExDIGVuY2Fwc3VsYXRpb24uIFRoZSBvcmlnaW5hbCBjb2RlJ3MgbG9naWMgZm9yIGhhbmRsaW5nIGhlYWRyb29tIGFuZCB0aGUgcG90ZW50aWFsbHkgY29tcHJlc3NlZCBwYWNrZXRzIHNlZW1zIGNvbnZvbHV0ZWQgYW5kIEkgc2VlIHNvbWUgb2J2aW91cyBpbXByb3ZlbWVudHMuXG5cbkZpcnN0LCB0aGUgb3JpZ2luYWwgY29kZSBoYWQgYW4gaXNzdWUgd2l0aCBhIHBvc3NpYmxlIG91dC1vZi1ib3VuZHMgcmVhZCAoYHNrYi1cdTAwM2VkYXRhWzBdYCkgaWYgdGhlIHBhY2tldCBsZW5ndGggKGBza2ItXHUwMDNlbGVuYCkgd2FzIHplcm8uIFRoaXMgcGF0Y2ggbmVhdGx5IGFkZHJlc3NlcyB0aGF0IGJ5IGFkZGluZyBhIGNoZWNrIHdpdGggYHBza2JfbWF5X3B1bGwoc2tiLCAxKWAuIElmIHdlIGNhbid0IHNhZmVseSBhY2Nlc3MgdGhlIGZpcnN0IGJ5dGUsIHdlIGp1c3QgZHJvcCB0aGUgcGFja2V0IGltbWVkaWF0ZWx5LiBUaGlzIGlzIGZhciBiZXR0ZXIuXG5cbk5leHQsIEknbSBoYXBweSB0byBzZWUgdGhhdCB0aGUgcGF0Y2ggY2xlYW5zIHVwIHRoZSBoYW5kbGluZyBvZiBMTEMgZW5jYXBzdWxhdGlvbiBhbmQgaGVhZCByb29tIGFsbG9jYXRpb24uIFRoZSBvcmlnaW5hbCBgc2tiX3JlYWxsb2NfaGVhZHJvb21gIGZvbGxvd2VkIGJ5IGBjb25zdW1lX3NrYihza2IpYCBsb2dpYyBsb29rcyBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYzsgYSBuZXcsIGFuZCBpbXByb3ZlZCwgYXBwcm9hY2ggaXMgaW1wbGVtZW50ZWQgaGVyZS4gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggbm93IGxldmVyYWdlcyBgc2tiX2Nvd19oZWFkKHNrYiwgTExDX0xFTilgIHdoaWNoIGlzIGZhciBzdXBlcmlvci4gSXQgc2VlbXMgdGhhdCB0aGlzIGZ1bmN0aW9uIG1ha2VzIGEgY29weSBvZiB0aGUgcGFja2V0IGhlYWRlciBpZiBuZWVkZWQgdG8gZW5zdXJlIHdlIGhhdmUgZW5vdWdoIGhlYWRyb29tIGFuZCB0aGF0IHRoZSBoZWFkcm9vbSBpcyB3cml0YWJsZS4gVGhpcyBhdm9pZHMgdW5uZWNlc3NhcnkgY29waWVzLCByZWR1Y2luZyBvdmVyaGVhZCBhbmQgaW1wcm92aW5nIG92ZXJhbGwgcGVyZm9ybWFuY2UuXG5cbkFsc28sIGJ5IG1vdmluZyB0aGUgY2hlY2sgYW5kIHByb2Nlc3NpbmcgdG8gKmFmdGVyKiB0aGUgc3dpdGNoIHN0YXRlbWVudCwgdGhlIG9yaWdpbmFsIG1lc3N5IGFuZCBlcnJvci1wcm9uZSBgbm9zcGFjZWAgdW5kbyBsb2dpYyBpcyBnb25lIGFuZCB0aGlzIHNpbXBsaWZpZXMgdGhlIGNvZGUgYW5kIG1ha2VzIHRoZSBpbnRlbmRlZCBiZWhhdmlvciBtdWNoIGNsZWFyZXIuXG5cbkZ1cnRoZXJtb3JlLCBJIGFtIHNhdGlzZmllZCB3aXRoIHRoZSBzZXF1ZW5jZSBvZiB0aGUgYHNrYl9wdWxsYCBhbmQgYHNrYl9wdXNoYC4gVGhlIGBza2JfcHVsbGAgaXMgYXBwbGllZCBiZWZvcmUgYHNrYl9wdXNoYCBpcyB1c2VkIHNvIHRoZSBsb2dpYyBpcyBjb25zaXN0ZW50LlxuXG5PdmVyYWxsLCB0aGlzIHBhdGNoIHNlZW1zIGxpa2UgYSBnb29kIGltcHJvdmVtZW50LiBJdCBhZGRyZXNzZXMgc2V2ZXJhbCBwb3RlbnRpYWwgaXNzdWVzIGluIHRoZSBvcmlnaW5hbCBjb2RlLCBpbXByb3ZlcyBlZmZpY2llbmN5LCBhbmQgbWFrZXMgdGhlIGxvZ2ljIGVhc2llciB0byBmb2xsb3cuIFRoZSB1c2Ugb2YgYHNrYl9jb3dfaGVhZGAgaXMgYSBnb29kIGNob2ljZSB0byBlbnN1cmUgdGhlcmUgaXMgZW5vdWdoIGhlYWQgcm9vbS4gVGhlIG9yaWdpbmFsIGNvZGUgZmVsdCBvdmVybHkgY29tcGxleC4gSSB0aGluayB0aGlzIGlzIGNsZWFuZXIsIHNhZmVyLCBhbmQgcHJvYmFibHkgZmFzdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTU4OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNTcsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ2OjQzLjI2NTQ0MTMzOFoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMTYwMDE5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGFydF94bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BwcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTEwNj1zdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBhc3luY19vcHMgPSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjEwNzpcXHQuc3RhcnRfeG1pdCA9IHBwcF9hc3luY19zZW5kLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDgtXFx0LmlvY3RsICAgICAgPSBwcHBfYXN5bmNfaW9jdGwsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz02MTg9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqY29tcGF0X3BwcF9nZXRfZmlsdGVyKHN0cnVjdCBzb2NrX2Zwcm9nMzIgX191c2VyICpwKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtNjMzLSAqIFdoZW4gdHdvIGNoYW5uZWxzIGFyZSBicmlkZ2VkLCBwcHBfaW5wdXQgb24gb25lIGNoYW5uZWwgaXMgcmVkaXJlY3RlZCB0b1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjYzNDogKiB0aGUgb3RoZXIncyBvcHMtXFx1MDAzZXN0YXJ0X3htaXQgaGFuZGxlci5cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy02MzUtICogSW4gb3JkZXIgdG8gc2FmZWx5IGJyaWRnZSBjaGFubmVscyB3ZSBtdXN0IHJlamVjdCBjaGFubmVscyB3aGljaCBhcmUgYWxyZWFkeVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MTQ0Nz1zdGF0aWMgbmV0ZGV2X3R4X3RcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoxNDQ4OnBwcF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTQ0OS17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0xNjA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcHBwX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNjExLVxcdC5uZG9fdW5pbml0ICAgICAgPSBwcHBfZGV2X3VuaW5pdCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoxNjEyOlxcdC5uZG9fc3RhcnRfeG1pdCAgPSBwcHBfc3RhcnRfeG1pdCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNjEzLVxcdC5uZG9fc2lvY2RldnByaXZhdGUgPSBwcHBfbmV0X3Npb2NkZXZwcml2YXRlLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MTkwNT1wcHBfcHVzaChzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xOTM0LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjE5MzU6XFx0XFx0cmV0ID0gY2hhbi1cXHUwMDNlb3BzLVxcdTAwM2VzdGFydF94bWl0KGNoYW4sIHNrYik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTkzNi1cXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTE5NjM9c3RhdGljIGludCBwcHBfbXBfZXhwbG9kZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yMTQ0LVxcdFxcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZwY2gtXFx1MDAzZWZpbGUueHEpIHx8XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MjE0NTpcXHRcXHRcXHQhY2hhbi1cXHUwMDNlb3BzLVxcdTAwM2VzdGFydF94bWl0KGNoYW4sIGZyYWcpKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTIxNDYtXFx0XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnBjaC1cXHUwMDNlZmlsZS54cSwgZnJhZyk7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0yMTcwPXN0YXRpYyB2b2lkIF9fcHBwX2NoYW5uZWxfcHVzaChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBzdHJ1Y3QgcHBwICpwcHApXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yMTc3LVxcdFxcdFxcdHNrYiA9IHNrYl9kZXF1ZXVlKFxcdTAwMjZwY2gtXFx1MDAzZWZpbGUueHEpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjIxNzg6XFx0XFx0XFx0aWYgKCFwY2gtXFx1MDAzZWNoYW4tXFx1MDAzZW9wcy1cXHUwMDNlc3RhcnRfeG1pdChwY2gtXFx1MDAzZWNoYW4sIHNrYikpIHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yMTc5LVxcdFxcdFxcdFxcdC8qIHB1dCB0aGUgcGFja2V0IGJhY2sgYW5kIHRyeSBhZ2FpbiBsYXRlciAqL1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MjI4Nj1zdGF0aWMgYm9vbCBwcHBfY2hhbm5lbF9icmlkZ2VfaW5wdXQoc3RydWN0IGNoYW5uZWwgKnBjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTIzMDItXFx0c2tiX3NjcnViX3BhY2tldChza2IsICFuZXRfZXEocGNoLVxcdTAwM2VjaGFuX25ldCwgcGNoYi1cXHUwMDNlY2hhbl9uZXQpKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoyMzAzOlxcdGlmICghcGNoYi1cXHUwMDNlY2hhbi1cXHUwMDNlb3BzLVxcdTAwM2VzdGFydF94bWl0KHBjaGItXFx1MDAzZWNoYW4sIHNrYikpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMjMwNC1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTI5OTQ9cHBwX3VucmVnaXN0ZXJfY2hhbm5lbChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zMDA1LVxcdCAqIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhdmUgcmV0dXJuZWQgZnJvbSBhbnkgY2FsbHMgaW50b1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjMwMDY6XFx0ICogdGhlIGNoYW5uZWwncyBzdGFydF94bWl0IG9yIGlvY3RsIHJvdXRpbmUgYmVmb3JlIHdlIHByb2NlZWQuXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMzAwNy1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTkzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHN5bmNfb3BzID0ge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjk0OlxcdC5zdGFydF94bWl0ID0gcHBwX3N5bmNfc2VuZCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05NS1cXHQuaW9jdGwgICAgICA9IHBwcF9zeW5jX2lvY3RsLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9OTE5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzID0ge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkyMDpcXHQuc3RhcnRfeG1pdCA9IHBwcG9lX3htaXQsXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTIxLVxcdC5maWxsX2ZvcndhcmRfcGF0aCA9IHBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYz02MDc9c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHB0cF9jaGFuX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjYwODpcXHQuc3RhcnRfeG1pdCA9IHBwdHBfeG1pdCxcXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTYwOS1cXHQuaW9jdGwgICAgICA9IHBwdHBfcHBwX2lvY3RsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0Njo0NC43ODcwNDcwNTVaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzUyNjA4MDMyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aCBGdXp6aW5nIERlY2lzaW9uOiBBbmFseXppbmcgUFBQb0FUTSBQYWNrZXQgVHJhbnNtaXNzaW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGFib3V0IHRoZSBgc3RhcnRfeG1pdGAgZnVuY3Rpb24gYW5kIGhvdyBQUFAgaGFuZGxlcyBwYWNrZXQgY29uc3VtcHRpb24uIEEgcmV0dXJuIHZhbHVlIG9mIDEgbWVhbnMgdGhlIHBhY2tldCBpcyBmcmVlZCwgMCBtZWFucyBpdCdzIHF1ZXVlZC4gIE5vdywgdGhlIGBwcHBvYXRtX3NlbmRgIGZ1bmN0aW9uIGlzIGtleS4gIEl0IGhhcyB0aGF0IGNoZWNrOlxuXG5gYGBjXG5cdGlmICghcHNrYl9tYXlfcHVsbChza2IsIDEpKSB7XG5cdFx0a2ZyZWVfc2tiKHNrYik7XG5cdFx0cmV0dXJuIERST1BfUEFDS0VUO1xuXHR9XG5gYGBcblxuQW5kIGBEUk9QX1BBQ0tFVGAgZXZhbHVhdGVzIHRvIDEuICBUaGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgY29kZSAqcmVhY2hhYmxlKj8gIFRoYXQncyB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggZnV6emluZyBwaGlsb3NvcGh5LiBMZXQncyBzZWUgd2hhdCB0aGUgZ3VpZGFuY2Ugc2F5cy5cblxuRnJvbSB0aGUgaW5zdHJ1Y3Rpb25zLCBcIlJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFXCI6IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIG1vZGlmaWVkIGNvZGUgY2FuIGFjdHVhbGx5ICpleGVjdXRlKiBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBVbnJlYWNoYWJsZSBjb2RlIGlzIGEgbm8tZ28gZm9yIGZ1enppbmcuICBJIGNhbid0IGp1c3QgYmxpbmRseSB0cnVzdCBcIk5vIEZ1bmN0aW9uYWwgQ2hhbmdlXCIgb3IgXCJSZWZhY3RvcmluZ1wiIGNsYWltcy4gQXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljIHdpdGhpbiByZWFjaGFibGUgY29kZSBhcmUgcmlwZSBmb3IgZnV6emluZy5cblxuU2VjdGlvbiAyIHNheXMgXCJORUdBVElWRSBDUklURVJJQVwiOiBJIG5lZWQgdG8gYXZvaWQgYW55dGhpbmcgbm9uLWtlcm5lbCwgbm9uLWV4ZWN1dGFibGUsIG9yIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4gU2VjdGlvbiAzIG91dGxpbmVzIHRoZSBcIlBPU0lUSVZFIENSSVRFUklBXCIuIEl0IHNwZWNpZmljYWxseSBjYWxscyBvdXQgY29yZSBzdWJzeXN0ZW1zIChsaWtlIG5ldHdvcmtpbmcpLCByZWZhY3RvcmluZ3MgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGFzc2VydGlvbnMsIGFuZCBkcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMuXG5cblNvLCBpcyBgUFBQb0FUTWAgcGFydCBvZiBjb3JlIG5ldHdvcmtpbmcgb3IgYSByZWFjaGFibGUgZHJpdmVyPyBZZXMsIGBuZXQvYXRtYCBpcyBwYXJ0IG9mIGNvcmUgbmV0d29ya2luZy4gVGhhdCBpcyBhIGdvb2Qgc2lnbi5cblxuSG93IGNhbiBgUFBQb0FUTWAgYmUgcmVhY2hlZD8gTGV0J3MgdHJhY2UgaXQuIEl0IHNlZW1zIHRvIHdvcmsgbGlrZSB0aGlzOlxuXG4xLiAgQ3JlYXRlIGFuIEFUTSBzb2NrZXQgdXNpbmcgYHNvY2tldChQRl9BVE1QVkMsIC4uLilgIG9yIGBzb2NrZXQoUEZfQVRNU1ZDLCAuLi4pYC5cbjIuICBDb25uZWN0IHRoZSBzb2NrZXQuIEFuIEFUTSBkZXZpY2UgY2FuIGJlIHJlZ2lzdGVyZWQgdmlhIFVTQiwgdXNpbmcgc29tZXRoaW5nIGxpa2UgYHVzYmF0bWAsIGVtdWxhdGVkIHRocm91Z2ggc3l6a2FsbGVyJ3MgVVNCIGNhcGFiaWxpdGllcyB3aXRoIFJhdyBHYWRnZXQuXG4zLiAgVGhlbiBJIHVzZSBgaW9jdGwoZmQsIEFUTV9TRVRCQUNLRU5ELCBcdTAwMjZiZSlgIHdoZXJlIGBiZS5iYWNrZW5kX251bSA9IEFUTV9CQUNLRU5EX1BQUGAuXG40LiAgVGhhdCBsZWFkcyB0byBgcHBwb2F0bV9hc3NpZ25fdmNjYCwgd2hpY2ggYXR0YWNoZXMgdGhlIEFUTSBzb2NrZXQgdG8gYSBQUFAgY2hhbm5lbCB2aWEgYHBwcF9yZWdpc3Rlcl9jaGFubmVsKFx1MDAyNnB2Y2MtXHUwMDNlY2hhbilgLlxuNS4gIFRoaXMgaXMgY29ubmVjdGVkIHRvIGEgUFBQIHVuaXQgdmlhIGBpb2N0bCgvZGV2L3BwcCwgUFBQSU9DQVRUQ0hBTiwgLi4uKWAuXG42LiAgRmluYWxseSwgd3JpdGluZyB0byBgL2Rldi9wcHBgIG9yIHNlbmRpbmcgcGFja2V0cyB0aHJvdWdoIHRoZSBgcHBwYCBuZXR3b3JrIGludGVyZmFjZSB0cmlnZ2VycyBgY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChjaGFuLCBza2IpYCwgd2hpY2ggKmlzKiBgcHBwb2F0bV9zZW5kYCFcblxuQ3J1Y2lhbGx5LCB0aGlzIHBhdGNoIG1vZGlmaWVzIHRyYW5zbWl0IHBhY2tldCBoYW5kbGluZyBpbiBgcHBwb2F0bV9zZW5kYC4gSXQgY2hhbmdlcyBob3cgaGVhZGVyIHJlYWxsb2NhdGlvbnMsIGhlYWRlciBwdWxscywgaGVhZGVyIHB1c2hlcywgYW5kIHBhY2tldCBsZW5ndGggdmFsaWRhdGlvbiBhcmUgaGFuZGxlZC4gVGhlIGZ1bmN0aW9uIGlzIG1vZGlmeWluZyBrZXkgcGFydHMgb2YgbmV0d29ya2luZywgYW5kIG5ldHdvcmtpbmcgaXMgYSBjb3JlIHN1YnN5c3RlbS5cblxuTm93LCBteSBtaW5kIGlzIGFsc28gdGhpbmtpbmcgaWYgQVRNIGNhbiBzb21laG93IGJlIGNvbm5lY3RlZCBldmVuIHdpdGhvdXQgYSBwaHlzaWNhbCBvciBVU0IgQVRNIGRldmljZS4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbHRlcm5hdGUgd2F5cyBvZiByZWdpc3RlcmluZyBhbiBBVE0gZGV2aWNlLiBMZXQgbWUgY2hlY2sgd2l0aCBgZ3JlcHBlcmAgZm9yIGByZWdpc3Rlcl9hdG1kZXZpY2VgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBCdXQgYmFzZWQgb24gbXkgaW5pdGlhbCBhbmFseXNpcywgdGhlIGNvZGUgcGF0aCBhcHBlYXJzIHJlYWNoYWJsZSwgYW5kIGl0J3MgbW9kaWZ5aW5nIGEgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uLiBUaGlzIGxvb2tzIHByb21pc2luZyBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5MDEsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ2OjUyLjMxMzEzMDc2NFoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2NDMyMzU2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWdpc3Rlcl9hdG1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9hdG1kZXYuaD0yMzU9c3RydWN0IGF0bV9pb2N0bCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTI0My0vKipcXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oOjI0NDogKiByZWdpc3Rlcl9hdG1faW9jdGwgLSByZWdpc3RlciBoYW5kbGVyIGZvciBpb2N0bCBvcGVyYXRpb25zXFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0yNDUtICogQGlvY3RsOiBpb2N0bCBoYW5kbGVyIHRvIHJlZ2lzdGVyXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTI1MC0gKi9cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oOjI1MTp2b2lkIHJlZ2lzdGVyX2F0bV9pb2N0bChzdHJ1Y3QgYXRtX2lvY3RsICppb2N0bCk7XFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0yNTItXFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0yNTMtLyoqXFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaDoyNTQ6ICogZGVyZWdpc3Rlcl9hdG1faW9jdGwgLSByZW1vdmUgdGhlIGlvY3RsIGhhbmRsZXJcXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTI1NS0gKiBAaW9jdGw6IGlvY3RsIGhhbmRsZXIgdG8gZGVyZWdpc3RlclxcbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMjU2LSAqL1xcbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg6MjU3OnZvaWQgZGVyZWdpc3Rlcl9hdG1faW9jdGwoc3RydWN0IGF0bV9pb2N0bCAqaW9jdGwpO1xcbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMjU4LVxcbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMjU5LVxcbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg6MjYwOi8qIHJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllciAtIHJlZ2lzdGVyIGF0bV9kZXYgbm90aWZ5IGV2ZW50c1xcbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMjYxLSAqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTI2NC0gKi9cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oOjI2NTppbnQgcmVnaXN0ZXJfYXRtZGV2aWNlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpO1xcbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg6MjY2OnZvaWQgdW5yZWdpc3Rlcl9hdG1kZXZpY2Vfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7XFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0yNjctXFxuLS1cXG5uZXQvYXRtL2JyMjY4NC5jPTgyNT1zdGF0aWMgaW50IF9faW5pdCBicjI2ODRfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2F0bS9icjI2ODQuYy04MzItI2VuZGlmXFxubmV0L2F0bS9icjI2ODQuYzo4MzM6XFx0cmVnaXN0ZXJfYXRtX2lvY3RsKFxcdTAwMjZicjI2ODRfaW9jdGxfb3BzKTtcXG5uZXQvYXRtL2JyMjY4NC5jOjgzNDpcXHRyZWdpc3Rlcl9hdG1kZXZpY2Vfbm90aWZpZXIoXFx1MDAyNmF0bV9kZXZfbm90aWZpZXIpO1xcbm5ldC9hdG0vYnIyNjg0LmMtODM1LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L2F0bS9icjI2ODQuYz04Mzg9c3RhdGljIHZvaWQgX19leGl0IGJyMjY4NF9leGl0KHZvaWQpXFxuLS1cXG5uZXQvYXRtL2JyMjY4NC5jLTg0Mi1cXHRzdHJ1Y3QgYnIyNjg0X3ZjYyAqYnJ2Y2M7XFxubmV0L2F0bS9icjI2ODQuYzo4NDM6XFx0ZGVyZWdpc3Rlcl9hdG1faW9jdGwoXFx1MDAyNmJyMjY4NF9pb2N0bF9vcHMpO1xcbm5ldC9hdG0vYnIyNjg0LmMtODQ0LVxcbi0tXFxubmV0L2F0bS9icjI2ODQuYy04NDktXFxubmV0L2F0bS9icjI2ODQuYzo4NTA6XFx0dW5yZWdpc3Rlcl9hdG1kZXZpY2Vfbm90aWZpZXIoXFx1MDAyNmF0bV9kZXZfbm90aWZpZXIpO1xcbm5ldC9hdG0vYnIyNjg0LmMtODUxLVxcbi0tXFxubmV0L2F0bS9jb21tb24uYz03NTY9aW50IHZjY19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jLTc5Ny1cXG5uZXQvYXRtL2NvbW1vbi5jOjc5ODppbnQgcmVnaXN0ZXJfYXRtZGV2aWNlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpXFxubmV0L2F0bS9jb21tb24uYy03OTkte1xcbi0tXFxubmV0L2F0bS9jb21tb24uYy04MDEtfVxcbm5ldC9hdG0vY29tbW9uLmM6ODAyOkVYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllcik7XFxubmV0L2F0bS9jb21tb24uYy04MDMtXFxubmV0L2F0bS9jb21tb24uYzo4MDQ6dm9pZCB1bnJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxcbm5ldC9hdG0vY29tbW9uLmMtODA1LXtcXG4tLVxcbm5ldC9hdG0vY29tbW9uLmMtODA3LX1cXG5uZXQvYXRtL2NvbW1vbi5jOjgwODpFWFBPUlRfU1lNQk9MX0dQTCh1bnJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllcik7XFxubmV0L2F0bS9jb21tb24uYy04MDktXFxuLS1cXG5uZXQvYXRtL2lvY3RsLmM9MjQ9c3RhdGljIExJU1RfSEVBRChpb2N0bF9saXN0KTtcXG4tLVxcbm5ldC9hdG0vaW9jdGwuYy0yNi1cXG5uZXQvYXRtL2lvY3RsLmM6Mjc6dm9pZCByZWdpc3Rlcl9hdG1faW9jdGwoc3RydWN0IGF0bV9pb2N0bCAqaW9jdGwpXFxubmV0L2F0bS9pb2N0bC5jLTI4LXtcXG4tLVxcbm5ldC9hdG0vaW9jdGwuYy0zMi19XFxubmV0L2F0bS9pb2N0bC5jOjMzOkVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfYXRtX2lvY3RsKTtcXG5uZXQvYXRtL2lvY3RsLmMtMzQtXFxubmV0L2F0bS9pb2N0bC5jOjM1OnZvaWQgZGVyZWdpc3Rlcl9hdG1faW9jdGwoc3RydWN0IGF0bV9pb2N0bCAqaW9jdGwpXFxubmV0L2F0bS9pb2N0bC5jLTM2LXtcXG4tLVxcbm5ldC9hdG0vaW9jdGwuYy00MC19XFxubmV0L2F0bS9pb2N0bC5jOjQxOkVYUE9SVF9TWU1CT0woZGVyZWdpc3Rlcl9hdG1faW9jdGwpO1xcbm5ldC9hdG0vaW9jdGwuYy00Mi1cXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jPTQ2Nj1zdGF0aWMgaW50IF9faW5pdCBwcHBvYXRtX2luaXQodm9pZClcXG5uZXQvYXRtL3BwcG9hdG0uYy00Njcte1xcbm5ldC9hdG0vcHBwb2F0bS5jOjQ2ODpcXHRyZWdpc3Rlcl9hdG1faW9jdGwoXFx1MDAyNnBwcG9hdG1faW9jdGxfb3BzKTtcXG5uZXQvYXRtL3BwcG9hdG0uYy00NjktXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYz00NzI9c3RhdGljIHZvaWQgX19leGl0IHBwcG9hdG1fZXhpdCh2b2lkKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3My17XFxubmV0L2F0bS9wcHBvYXRtLmM6NDc0OlxcdGRlcmVnaXN0ZXJfYXRtX2lvY3RsKFxcdTAwMjZwcHBvYXRtX2lvY3RsX29wcyk7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDc1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDY6NTQuNzc3NDYyOTgxWiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzNDIwNTg2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBBVE0gRGV2aWNlIFJlZ2lzdHJhdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgQVRNLCBhbmQgSSdtIHN0dWNrIG9uIGBhdG1fZGV2X3JlZ2lzdGVyYC4gVGhhdCBmdW5jdGlvbiBpcyBrZXksIHJpZ2h0PyBXaGVyZSBhcmUgd2UgYWN0dWFsbHkgcmVnaXN0ZXJpbmcgQVRNIGRldmljZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGhlcmUuIExldCBtZSB0aGluaywgSSByZW1lbWJlciBncmVwcGluZyBmb3IgYGF0bV9kZXZfcmVnaXN0ZXIoYCBlYXJsaWVyLCBhbmQgZ290IGEgZmV3IGhpdHM6IGBkcml2ZXJzL2F0bS9zb2xvcy1wY2kuY2AsIGBkcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmNgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGRlZmluaXRpb24gaXRzZWxmIGluIGBuZXQvYXRtL3Jlc291cmNlcy5jYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgc2hvd2luZyBQQ0kgYW5kIFVTQiBkZXZpY2VzIHBvdGVudGlhbGx5IGJlaW5nIHJlZ2lzdGVyZWQuXG5cbkJ1dCB0aGF0J3Mgbm90IGVub3VnaDsgSSBoYXZlIHRvIGJlIHRob3JvdWdoLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogcmVmZXJlbmNlcyB0byBgYXRtX2Rldl9yZWdpc3RlcmAgdGhhdCBhcmUgbm90IGZ1bmN0aW9uIGNhbGxzLiBNYXliZSB0aGVyZSdzIHNvbWUgc3VidGxlIGxpbmthZ2UgSSdtIG1pc3NpbmcgYmVjYXVzZSBJJ20gb25seSBsb29raW5nIGZvciB0aGUgdHlwaWNhbCBmdW5jdGlvbiBjYWxsIHN5bnRheD8gSSdsbCBjaGVjayBmb3IgdGhhdC4gSXQgd291bGQgYmUgYSBzaWxseSBvdmVyc2lnaHQuIExldCBtZSBzZWUgd2hhdCBJIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDA5MywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ2OjU3LjExOTUyNTM4N1oiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwNjczMTA0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdG1fZGV2X3JlZ2lzdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jPTEzNDg9c3RhdGljIGludCBhdG1faW5pdChzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCwgc3RydWN0IGRldmljZSAqcGFyZW50KVxcbi0tXFxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTM1OC1cXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYzoxMzU5OlxcdFxcdGNhcmQtXFx1MDAzZWF0bWRldltpXSA9IGF0bV9kZXZfcmVnaXN0ZXIoXFxcInNvbG9zLXBjaVxcXCIsIHBhcmVudCwgXFx1MDAyNmZwZ2Ffb3BzLCAtMSwgTlVMTCk7XFxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTM2MC1cXHRcXHRpZiAoIWNhcmQtXFx1MDAzZWF0bWRldltpXSkge1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jPTkwMT1zdGF0aWMgaW50IHVzYmF0bV9hdG1faW5pdChzdHJ1Y3QgdXNiYXRtX2RhdGEgKmluc3RhbmNlKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTkwOS1cXHQgKiBhYm9ydCBpZiBhdG1fZGV2LVxcdTAwM2VkZXZfZGF0YSBpcyBOVUxMLiAqL1xcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYzo5MTA6XFx0YXRtX2RldiA9IGF0bV9kZXZfcmVnaXN0ZXIoaW5zdGFuY2UtXFx1MDAzZWRyaXZlcl9uYW1lLFxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy05MTEtXFx0XFx0XFx0XFx0ICAgXFx1MDAyNmluc3RhbmNlLVxcdTAwM2V1c2JfaW50Zi1cXHUwMDNlZGV2LCBcXHUwMDI2dXNiYXRtX2F0bV9kZXZvcHMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oPTE1Mj1leHRlcm4gcndsb2NrX3QgdmNjX3NrbGlzdF9sb2NrO1xcbi0tXFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0xNTUtXFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaDoxNTY6c3RydWN0IGF0bV9kZXYgKmF0bV9kZXZfcmVnaXN0ZXIoY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IGRldmljZSAqcGFyZW50LFxcbmluY2x1ZGUvbGludXgvYXRtZGV2LmgtMTU3LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYXRtZGV2X29wcyAqb3BzLFxcbi0tXFxubmV0L2F0bS9yZXNvdXJjZXMuYz02OT1FWFBPUlRfU1lNQk9MKGF0bV9kZXZfbG9va3VwKTtcXG5uZXQvYXRtL3Jlc291cmNlcy5jLTcwLVxcbm5ldC9hdG0vcmVzb3VyY2VzLmM6NzE6c3RydWN0IGF0bV9kZXYgKmF0bV9kZXZfcmVnaXN0ZXIoY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IGRldmljZSAqcGFyZW50LFxcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzItXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBhdG1kZXZfb3BzICpvcHMsIGludCBudW1iZXIsXFxuLS1cXG5uZXQvYXRtL3Jlc291cmNlcy5jLTEzMS19XFxubmV0L2F0bS9yZXNvdXJjZXMuYzoxMzI6RVhQT1JUX1NZTUJPTChhdG1fZGV2X3JlZ2lzdGVyKTtcXG5uZXQvYXRtL3Jlc291cmNlcy5jLTEzMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDY6NTkuNDI2MjY0MzA4WiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjczODc3NTk5NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBVU0IgQVRNIE1vZGVtcyBhbmQgUFBQIG92ZXIgQVRNIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgZnV6emluZyB0aGUgVVNCIEFUTSBtb2RlbSBkcml2ZXIgKGBkcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmNgKS4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQgcmVnaXN0ZXJzIGFuIEFUTSBkZXZpY2Ugd2hlbiBhIFVTQiBBVE0gbW9kZW0gY29ubmVjdHMsIGFuZCBzeXprYWxsZXIgY2FuIGVtdWxhdGUgdGhpcyB1c2luZyBSYXcgR2FkZ2V0L0R1bW15IEhDRC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuQnV0IHRoZW4sIEkgbmVlZCB0byBjb25zaWRlciBgcHBwb2F0bWAsIHdoaWNoIGltcGxlbWVudHMgUFBQIG92ZXIgQVRNIGluIGBuZXQvYXRtL3BwcG9hdG0uY2AuICBJIHNlZSB0aGF0IGBwcHBvYXRtX3NlbmRgIGlzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIGZvciB0cmFuc21pdHRpbmcgUFBQIHBhY2tldHMgb3ZlciB0aGUgQVRNIG5ldHdvcmsuIFRoaXMgbG9va3MgbGlrZSBhIHByb21pc2luZyB0YXJnZXQuXG5cbkxldCdzIGJyZWFrIGRvd24gd2h5IHRoaXMgaXMgd29ydGggZnV6emluZzogIEl0J3MgaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIChgbmV0L2F0bS9gKS4gSXQgaGFuZGxlcyBwYWNrZXQgdHJhbnNtaXNzaW9uIGxvZ2ljLCBpbmNsdWRpbmcgaGVhZHJvb20gbWFuYWdlbWVudCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGBza2JfY293X2hlYWRgLCBgc2tiX3B1bGxgLCBgc2tiX3B1c2hgLCBtZW1vcnkgbWFuYWdlbWVudCAoYWxsb2NhdGluZyBoZWFkcm9vbSwgZXJyb3IgaGFuZGxpbmcsIHNrYiBmcmVlaW5nKSwgYW5kIGl0IHVzZXMgYm91bmRzIGNoZWNraW5nIChgcHNrYl9tYXlfcHVsbGApLiAgVGhlIHJlYWNoYWJpbGl0eSBsb29rcyBzb2xpZDogYSBzdGFuZGFyZCBuZXR3b3JraW5nIHN1YnN5c3RlbSB3aXRoIFBQUCBjaGFubmVscywgYW5kIHdpdGggc3l6a2FsbGVyJ3MgVVNCIGdhZGdldCBlbXVsYXRpb24gd2UgY2FuIGRlZmluaXRlbHkgcmVhY2ggaXQsIGJ5IGVtdWxhdGluZyBhIFVTQiBBVE0gbW9kZW0uXG5cbk5vdywgSSdtIGRpZ2dpbmcgZGVlcGVyIHRvIGZpbmQgb3RoZXIgd2F5cyBhbiBBVE0gdmlydHVhbCBjaXJjdWl0IGNvbm5lY3Rpb24gKGF0bV92Y2MpIG1pZ2h0IGJlIGNyZWF0ZWQuICBUaGUgYEFUTV9CQUNLRU5EX1BQUGAgb3B0aW9uIGlzIGludGVyZXN0aW5nLiBJJ20gcmV2aWV3aW5nIGBwcHBvYXRtX2Fzc2lnbl92Y2NgIHdoaWNoIGlzIGNhbGxlZCBieSBgcHBwb2F0bV9pb2N0bGAuICBFc3NlbnRpYWxseSwgYSB1c2VyLXNwYWNlIHByb2Nlc3Mgd291bGQgbmVlZCB0byBvcGVuIGEgUFBQIGRldmljZSwgdXNlIGBQUFBJT0NBVFRDSEFOYCBhbmQgYFBQUElPQ0NPTk5FQ1RgLCBhbmQgdGhlbiBlaXRoZXIgd3JpdGUgZGlyZWN0bHkgdG8gdGhlIFBQUCBkZXZpY2UsIG9yIHNldCB1cCBhIFBQUCBuZXR3b3JrIGludGVyZmFjZSwgd2hpY2ggdGhlbiB1c2VzIGBjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KGNoYW4sIHNrYilgIHRvIHNlbmQgcGFja2V0cy4gIFRoaXMgKmlzKiBgcHBwb2F0bV9zZW5kYC5cblxuUmVnYXJkaW5nIGZ1enppbmcsIGBwcHBvYXRtX3NlbmRgIGlzIG15IHByaW1hcnkgdGFyZ2V0LCBhcyB0aGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBtb2RpZmljYXRpb25zIGFyZSB0YWtpbmcgcGxhY2UuIEl0J3MgbWFya2VkIGFzIGBzdGF0aWNgIGluIGBuZXQvYXRtL3BwcG9hdG0uY2AsIGJ1dCBzaW5jZSBpdCdzIHVzZWQgaW4gYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgcHBwb2F0bV9vcHNgLCB0aGUgY29tcGlsZXIgKmNhbm5vdCogaW5saW5lIGl0IGF3YXk7IGl0IHdpbGwgaGF2ZSBhIHJlYWwgc3ltYm9sIGFkZHJlc3MuIEkgbmVlZCB0byBub3RlIGFueSBvdGhlciBmdW5jdGlvbnMgZGVmaW5lZCBpbiBgbmV0L2F0bS9wcHBvYXRtLmNgLCBzbyBJIHdpbGwgY2hlY2sgdGhlc2Ugbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDk4MCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDc6MDYuODE0MDI4NDg5WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjQ4NDg4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWjAtOV9dKy4qXFxcXCguKlxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9hdG0vcHBwb2F0bS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vcHBwb2F0bS5jPTg2PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBwcGxsY1s2XSA9IHsgMHhGRSwgMHhGRSwgMHgwMywgMHhDRiwgMHhDMCwgMHgyMSB9O1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtODgtXFxubmV0L2F0bS9wcHBvYXRtLmM6ODk6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmF0bXZjY190b19wdmNjKGNvbnN0IHN0cnVjdCBhdG1fdmNjICphdG12Y2MpXFxubmV0L2F0bS9wcHBvYXRtLmMtOTAte1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtOTMtXFxubmV0L2F0bS9wcHBvYXRtLmM6OTQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmNoYW5fdG9fcHZjYyhjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXFxubmV0L2F0bS9wcHBvYXRtLmMtOTUte1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMTAzLSAqL1xcbm5ldC9hdG0vcHBwb2F0bS5jOjEwNDpzdGF0aWMgdm9pZCBwcHBvYXRtX3dha2V1cF9zZW5kZXIoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KVxcbm5ldC9hdG0vcHBwb2F0bS5jLTEwNS17XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xMTAtXFxubmV0L2F0bS9wcHBvYXRtLmM6MTExOnN0YXRpYyB2b2lkIHBwcG9hdG1fcmVsZWFzZV9jYihzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTExMi17XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xMzMtICovXFxubmV0L2F0bS9wcHBvYXRtLmM6MTM0OnN0YXRpYyB2b2lkIHBwcG9hdG1fcG9wKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2F0bS9wcHBvYXRtLmMtMTM1LXtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTE2Ni0gKi9cXG5uZXQvYXRtL3BwcG9hdG0uYzoxNjc6c3RhdGljIHZvaWQgcHBwb2F0bV91bmFzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcXG5uZXQvYXRtL3BwcG9hdG0uYy0xNjgte1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMTgwLS8qIENhbGxlZCB3aGVuIGFuIEFBTDUgUERVIGNvbWVzIGluICovXFxubmV0L2F0bS9wcHBvYXRtLmM6MTgxOnN0YXRpYyB2b2lkIHBwcG9hdG1fcHVzaChzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTE4Mi17XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0yMzMtXFxubmV0L2F0bS9wcHBvYXRtLmM6MjM0OnN0YXRpYyBpbnQgcHBwb2F0bV9tYXlfc2VuZChzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MsIGludCBzaXplKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTIzNS17XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0yODgtI2RlZmluZSBEUk9QX1BBQ0tFVCAxXFxubmV0L2F0bS9wcHBvYXRtLmM6Mjg5OnN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYXRtL3BwcG9hdG0uYy0yOTAte1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmM9Mzc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9hdG1fb3BzID0ge1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMzc5LVxcbm5ldC9hdG0vcHBwb2F0bS5jOjM4MDpzdGF0aWMgaW50IHBwcG9hdG1fYXNzaWduX3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjLCB2b2lkIF9fdXNlciAqYXJnKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTM4MS17XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYz00NjE9c3RhdGljIHN0cnVjdCBhdG1faW9jdGwgcHBwb2F0bV9pb2N0bF9vcHMgPSB7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy00NjUtXFxubmV0L2F0bS9wcHBvYXRtLmM6NDY2OnN0YXRpYyBpbnQgX19pbml0IHBwcG9hdG1faW5pdCh2b2lkKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ2Ny17XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy00NzEtXFxubmV0L2F0bS9wcHBvYXRtLmM6NDcyOnN0YXRpYyB2b2lkIF9fZXhpdCBwcHBvYXRtX2V4aXQodm9pZClcXG5uZXQvYXRtL3BwcG9hdG0uYy00NzMte1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtNDc2LVxcbm5ldC9hdG0vcHBwb2F0bS5jOjQ3Nzptb2R1bGVfaW5pdChwcHBvYXRtX2luaXQpO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjQ3ODptb2R1bGVfZXhpdChwcHBvYXRtX2V4aXQpO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3OS1cXG5uZXQvYXRtL3BwcG9hdG0uYzo0ODA6TU9EVUxFX0FVVEhPUihcXFwiTWl0Y2hlbGwgQmxhbmsgSnIgXFx1MDAzY21pdGNoQHNmZ290aC5jb21cXHUwMDNlXFxcIik7XFxubmV0L2F0bS9wcHBvYXRtLmM6NDgxOk1PRFVMRV9ERVNDUklQVElPTihcXFwiUkZDMjM2NCBQUFAgb3ZlciBBVE0vQUFMNVxcXCIpO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjQ4MjpNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ3OjA2Ljg5MDUyMDk4N1oiLCJTZXEiOjYzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0ODM1MjE3NDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFBQUG9BVE0gS2VybmVsIE1vZHVsZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEknbSBmb2N1c2luZyBvbiB0aGUgbW9kaWZpY2F0aW9ucywgc28gdGhlIGNvcmUgZnVuY3Rpb24gdG8gZXhhbWluZSBpcyBgcHBwb2F0bV9zZW5kYC4gSXQncyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24sIHRoYXQncyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIGNoYW5nZXMgbGllcy4gVGhlIHNldHVwIHBvaW50cyBhcHBlYXIgdG8gYmUgYHBwcG9hdG1fYXNzaWduX3ZjY2AgYW5kIGBwcHBvYXRtX2lvY3RsYC5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIGBwcHBvYXRtX21heV9zZW5kYCBsb29rcyBwcm9taXNpbmcsIEkgbmVlZCB0byBzZWUgaWYgaXTigJlzIHN0YXRpYy4gWWVzLCBpdCBpcywgYW5kIGl0J3MgY2FsbGVkIGJ5IGBwcHBvYXRtX3NlbmRgLCBzbyB0aGF04oCZcyBpbnRlcmVzdGluZy4gRm9yIG15IEZvY3VzU3ltYm9scywgSeKAmWxsIGRlZmluaXRlbHkgbmVlZDpcblxuKiAgIGBwcHBvYXRtX3NlbmRgXG4qICAgYHBwcG9hdG1fYXNzaWduX3ZjY2BcbiogICBQb3RlbnRpYWxseSwgYHBwcG9hdG1fZGV2cHBwX2lvY3RsYCAqb3IqIGBwcHBvYXRtX2lvY3RsYCwgSSdsbCBzdGFydCB3aXRoIHRoZSBtb3JlIGNvbW1vbiBgcHBwb2F0bV9pb2N0bGAuIEJ1dCBgcHBwb2F0bV9zZW5kYCBpcyB0aGUgcHJpbWFyeSBjYW5kaWRhdGUgaGVyZS4gSXQncyB0aGUgY29yZSBvZiB0aGUgcGFja2V0IHRyYW5zbWlzc2lvbi5cblxuR2l2ZW4gdGhhdCB0aGlzIGlzIFBQUG9BVE0sIEknbSBwcmV0dHkgY2VydGFpbiBgcHBwb2F0bV9zZW5kYCBpc24ndCB1c2VkIGV2ZXJ5d2hlcmUuIEl0J3MgZGVmaW5pdGVseSBzcGVjaWZpYyB0byB0cmFuc21pdHRpbmcgcGFja2V0cyBvdmVyIEFUTSwgc28gbm90IGEgZ2VuZXJhbC1wdXJwb3NlIGZ1bmN0aW9uLlxuXG5Ob3csIHRvIGRldGVybWluZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCwgSSBuZWVkIHRvIGNhcmVmdWxseSByZXZpZXcgdGhlIEtjb25maWcgZmlsZXMuIEknbGwgc3RhcnQgd2l0aCBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgLlxuYGBga2NvbmZpZ1xuaWYgUFBQXG5cbmNvbmZpZyBQUFBPQVRNXG5cdHRyaXN0YXRlIFwiUFBQIG92ZXIgQVRNXCJcblx0ZGVwZW5kcyBvbiBBVE1cbmBgYFxuQmFzZWQgb24gdGhlIGZpbGUsIHRoZSBjb25maWd1cmF0aW9ucyBhcmU6XG5cbiogICBgUFBQT0FUTWBcbiogICBgUFBQYFxuKiAgIGBBVE1gXG5cbkknbGwgYWxzbyB2ZXJpZnkgdGhhdCBgQVRNYCBpc24ndCBjb250aW5nZW50IG9uIGFueXRoaW5nIGVsc2UuIEknbGwgY2hlY2sgYG5ldC9hdG0vS2NvbmZpZ2AgdG8gYmUgc3VyZS4gVGhhdCBzaG91bGQgYmUgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODA2NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NzoxMS43MjU3NDE5MjVaIiwiU2VxIjo2NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxOTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9hdG0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBBc3luY2hyb25vdXMgVHJhbnNmZXIgTW9kZSAoQVRNKVxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgQVRNXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiQXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcXFwiXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIEFUTSBpcyBhIGhpZ2gtc3BlZWQgbmV0d29ya2luZyB0ZWNobm9sb2d5IGZvciBMb2NhbCBBcmVhIE5ldHdvcmtzXFxuICAxMDpcXHRcXHQgIGFuZCBXaWRlIEFyZWEgTmV0d29ya3MuICBJdCB1c2VzIGEgZml4ZWQgcGFja2V0IHNpemUgYW5kIGlzXFxuICAxMTpcXHRcXHQgIGNvbm5lY3Rpb24gb3JpZW50ZWQsIGFsbG93aW5nIGZvciB0aGUgbmVnb3RpYXRpb24gb2YgbWluaW11bVxcbiAgMTI6XFx0XFx0ICBiYW5kd2lkdGggcmVxdWlyZW1lbnRzLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIEluIG9yZGVyIHRvIHBhcnRpY2lwYXRlIGluIGFuIEFUTSBuZXR3b3JrLCB5b3VyIExpbnV4IGJveCBuZWVkcyBhblxcbiAgMTU6XFx0XFx0ICBBVE0gbmV0d29ya2luZyBjYXJkLiBJZiB5b3UgaGF2ZSB0aGF0LCBzYXkgWSBoZXJlIGFuZCB0byB0aGUgZHJpdmVyXFxuICAxNjpcXHRcXHQgIG9mIHlvdXIgQVRNIGNhcmQgYmVsb3cuXFxuICAxNzpcXHRcXG4gIDE4OlxcdFxcdCAgTm90ZSB0aGF0IHlvdSBuZWVkIGEgc2V0IG9mIHVzZXItc3BhY2UgcHJvZ3JhbXMgdG8gYWN0dWFsbHkgbWFrZSB1c2VcXG4gIDE5OlxcdFxcdCAgb2YgQVRNLiAgU2VlIHRoZSBmaWxlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hdG0ucnN0XFx1MDAzZSBmb3JcXG4gIDIwOlxcdFxcdCAgZnVydGhlciBkZXRhaWxzLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRjb25maWcgQVRNX0JSMjY4NFxcbiAgMjM6XFx0XFx0dHJpc3RhdGUgXFxcIlJGQzE0ODMvMjY4NCBCcmlkZ2VkIHByb3RvY29sc1xcXCJcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gQVRNIFxcdTAwMjZcXHUwMDI2IElORVRcXG4gIDI1OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDc6MTEuNzI1ODQ3MTM2WiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM4Mjc1MzgzMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBUaG91Z2h0cyoqXG5cbk9rYXksIHNvIEknbSBjb25maWd1cmluZyB0aGlzIHN5c3RlbSwgYW5kIEkndmUgZ290IGEgbGl0dGxlIGRlcGVuZGVuY3kgcHV6emxlIHRvIHNvcnQgb3V0LiBJdCBsb29rcyBsaWtlIGBBVE1gIGl0c2VsZiBzdGFuZHMgYWxvbmUg4oCTIGl0IGRvZXNuJ3QgcmVseSBvbiBhbnl0aGluZyBlbHNlIGRpcmVjdGx5LCBhY2NvcmRpbmcgdG8gdGhpcyBpbml0aWFsIGFzc2Vzc21lbnQuIFRoZW4gd2UgaGF2ZSBgUFBQT0FUTWAuIFRoYXQgb25lIGlzIGEgYml0IG1vcmUgY29uZGl0aW9uYWw7IGl0J3MgdHVja2VkIGF3YXkgaW5zaWRlIGFuIGBpZiBQUFBgIHN0YXRlbWVudCwgYW5kIGNydWNpYWxseSwgaXQgKmRlcGVuZHMqIG9uIGBBVE1gLiBcblxuVGhlcmVmb3JlLCBteSBjb25maWd1cmF0aW9uIG5lZWRzIHRvIGluY2x1ZGU6XG5cbjEuICBgQVRNYFxuMi4gIGBQUFBgXG4zLiAgYFBQUE9BVE1gXG5cbkJ1dCwga25vd2luZyBob3cgdGhlc2UgdGhpbmdzIGdvLCBJIGNhbid0IGp1c3QgdGFrZSB0aGlzIGF0IGZhY2UgdmFsdWUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBzdWJ0bGUgZGVwZW5kZW5jaWVzIG9yIHJlcXVpcmVtZW50cyBsdXJraW5nIGFyb3VuZC4gVG8gYmUgdGhvcm91Z2gsIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBuZXQvS2NvbmZpZ2AgdG8gc2VlIGV4YWN0bHkgKmhvdyogYG5ldC9hdG0vS2NvbmZpZ2AgaXMgcHVsbGVkIGludG8gdGhlIG92ZXJhbGwgcGljdHVyZS4gSSBuZWVkIHRoZSBmdWxsIGNvbnRleHQgdG8gYmUgY29uZmlkZW50IGluIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MTM4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NzoxNS41NTMzODgxNzRaIiwiU2VxIjo2NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjQ5OTUzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UuKm5ldC9hdG0vS2NvbmZpZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTI1Nj1zb3VyY2UgXFxcIm5ldC90aXBjL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjU3OnNvdXJjZSBcXFwibmV0L2F0bS9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTI1OC1zb3VyY2UgXFxcIm5ldC9sMnRwL0tjb25maWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ3OjE1LjY5NTg5NDMzMVoiLCJTZXEiOjY3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzg1NDY2NTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBOZXR3b3JrIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZXNlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgc3RydWN0dXJlZC4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgYG5ldC9hdG0vS2NvbmZpZ2AgaXMgZGlyZWN0bHkgaW5jbHVkZWQgaW4gYG5ldC9LY29uZmlnYCwgd2hpY2ggaXMgdW5kZXIgdGhlIGBtZW51Y29uZmlnIE5FVGAgc2VjdGlvbi4gVGhhdCBtYWtlcyBzZW5zZSwga2VlcHMgdGhpbmdzIG9yZ2FuaXplZC4gTm93LCB0aGUgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCBpcyBhbHNvIGluY2x1ZGVkLCBidXQgdGhpcyB0aW1lIGluIGBkcml2ZXJzL25ldC9LY29uZmlnYC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgZm9yIGFueSBjb25kaXRpb25hbCBwYXJlbnQgbWVudXMgdGhhdCBtaWdodCBhZmZlY3QgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IFBQUCBjb25maWd1cmF0aW9ucyBhcmUgb25seSB2aXNpYmxlIG9yIGVuYWJsZWQgdW5kZXIgdGhlIGV4cGVjdGVkIGNpcmN1bXN0YW5jZXMuIE5vIHBvaW50IGluIHdhZGluZyB0aHJvdWdoIGV4dHJhbmVvdXMgb3B0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBjb250cm9sbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTU0NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ3OjE4LjA4MTM2MzIyMVoiLCJTZXEiOjY4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk3Njc1MTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvdXJjZS4qZHJpdmVycy9uZXQvcHBwL0tjb25maWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9NTI2PXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcGxpcC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWctNTI3LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NTI4OnNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZy01MjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ3OjE4LjM3OTA0Mzg4M1oiLCJTZXEiOjY5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTg0NDI2MzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBzb21ldGhpbmcgbmV0d29yay1yZWxhdGVkLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgc2VlbSBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIHNpbmNlIHRoYXQncyB3aGVyZSBkZXZpY2UgZHJpdmVycyBhcmUgc2V0IHVwLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGUgcHJpbWFyeSBLY29uZmlnIGZpbGUgZm9yIG5ldHdvcmsgZHJpdmVycyBzaG91bGQgYmUgaW4gdGhlIGBkcml2ZXJzL25ldGAgZGlyZWN0b3J5LCBhbmQgaXQgbWFrZXMgc2Vuc2UgdG8gc3RhcnQgd2l0aCBgS2NvbmZpZ2AuIE5vdywgd2hlcmUgd2FzIHRoYXQgc3BlY2lmaWMgb3B0aW9uIEkgd2FzIGxvb2tpbmcgZm9yPyBSaWdodCwgSSBzZWVtIHRvIHJlY2FsbCBpdCBiZWluZyBuZWFyIGxpbmUgNTI4LiBMZXQncyBzdGFydCB0aGVyZS4gSSdsbCBuZWVkIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBzZWUgd2hhdCdzIGJlaW5nIGRlZmluZWQgYXJvdW5kIHRoYXQgc3BlY2lmaWMgbGluZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb3IgZGlnIGludG8gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5OTA3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDc6MjAuNTYzNDc0MjI1WiIsIlNlcSI6NzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUyMDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ1xcXCJcXG4gNTIxOlxcdFxcbiA1MjI6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9tZGlvL0tjb25maWdcXFwiXFxuIDUyMzpcXHRcXG4gNTI0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcGNzL0tjb25maWdcXFwiXFxuIDUyNTpcXHRcXG4gNTI2OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcGxpcC9LY29uZmlnXFxcIlxcbiA1Mjc6XFx0XFxuIDUyODpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnXFxcIlxcbiA1Mjk6XFx0XFxuIDUzMDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZ1xcXCJcXG4gNTMxOlxcdFxcbiA1MzI6XFx0c291cmNlIFxcXCJkcml2ZXJzL3MzOTAvbmV0L0tjb25maWdcXFwiXFxuIDUzMzpcXHRcXG4gNTM0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcXFwiXFxuIDUzNTpcXHRcXG4gNTM2OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZ1xcXCJcXG4gNTM3OlxcdFxcbiA1Mzg6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93YW4vS2NvbmZpZ1xcXCJcXG4gNTM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NzoyMC41NjM1OTcyNzVaIiwiU2VxIjo3MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzY4Nzk4MjE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQUFAgT3ZlciBBVE0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgc3RyYWlnaHQ6IHRvIGdldCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHVwIGFuZCBydW5uaW5nLCBJIGFic29sdXRlbHkgbmVlZCBgUFBQYCwgYFBQUE9BVE1gLCBhbmQgYEFUTWAgZW5hYmxlZC4gVGhvc2UgYXJlIHRoZSBlc3NlbnRpYWxzLiBJZiBJIHdhbnQgdG8gdGhyb3cgaW4gVVNCIGVtdWxhdGlvbiBmb3IgdGVzdGluZywgdGhlbiBgVVNCX0FUTWAgb3IgYFVTQl9SQVdfR0FER0VUYCBjb3VsZCBiZSB1c2VmdWwsIGJ1dCB0aG9zZSBhcmUgZXh0cmFzLiBUaGUgY3JpdGljYWwgY29uZmlncyBhcmUsIGFnYWluLCBgUFBQYCwgYEFUTWAsIGFuZCBgUFBQT0FUTWAuXG5cbkxldCBtZSBqdXN0IHJ1biB0aHJvdWdoIG15IGNoZWNrbGlzdCB0byBtYWtlIGFic29sdXRlbHkgY2VydGFpbiBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgbmVlZCB0byBiZSAqc3VyZSo6XG5cbjEuICAqKldvcnRoRnV6emluZzoqKiBZZXAsIGRlZmluaXRlbHkuIFRoaXMgcGF0Y2ggdG91Y2hlcyB0aGUgY29yZSBuZXR3b3JraW5nIGNvZGUgd2l0aGluIGBuZXQvYXRtL3BwcG9hdG0uY2AsIHNwZWNpZmljYWxseSBgcHBwb2F0bV9zZW5kYC4gSXQncyBhbHRlcmluZyBob3cgd2UgaGFuZGxlIFNLQiBidWZmZXJzIOKAkyB0aGluZ3MgbGlrZSBgc2tiX2Nvd19oZWFkYCwgYHNrYl9wdWxsYCwgYHNrYl9wdXNoYCDigJMgYW5kIGFsc28gcGFja2V0IHZhbGlkYXRpb24gdXNpbmcgYHBza2JfbWF5X3B1bGxgLCBhbG9uZyB3aXRoIGVycm9yIGhhbmRsaW5nIGZvciBQUFAgb3ZlciBBVE0gZnJhbWUgdHJhbnNtaXNzaW9uLiBUaGlzIGNvZGUncyB0b3RhbGx5IHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgQVRNIGFuZCBQUFAgaW50ZXJmYWNlcywgaW5jbHVkaW5nLCBsaWtlLCBlbXVsYXRlZCBVU0IgQVRNIGRldmljZXMgdmlhIFVTQiBnYWRnZXRzLCB3aGljaCBpcyBncmVhdCBmb3IgdGVzdGluZy5cbjIuICAqKkZvY3VzU3ltYm9sczoqKiBJJ3ZlIG5haWxlZCBkb3duIHRoZSBrZXkgc3ltYm9sczogYHBwcG9hdG1fc2VuZGAgYW5kIGBwcHBvYXRtX2Fzc2lnbl92Y2NgLlxuMy4gICoqRW5hYmxlQ29uZmlnczoqKiBJJ20gY29uZmlybWluZyBgQVRNYCwgYFBQUGAsIGFuZCBgUFBQT0FUTWAgYXJlIGFsbCBlbmFibGVkIGFuZCB2ZXJpZmllZCwgd2hpY2ggdGhleSBhcmUuXG5cblJpZ2h0LCBldmVyeXRoaW5nIGNoZWNrcyBvdXQgcGVyZmVjdGx5LiBUaGUgc291cmNlIGZpbGVzIGFyZSBhbGwgaW4gb3JkZXIuIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNDA5LCJPdXRwdXRUb2tlbnMiOjE2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ3OjI0LjI1MTU4MzMwNVoiLCJTZXEiOjcyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODAxMjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRNXCIsXG4gICAgXCJQUFBcIixcbiAgICBcIlBQUE9BVE1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcHBvYXRtX3NlbmRcIixcbiAgICBcInBwcG9hdG1fYXNzaWduX3ZjY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBwYWNrZXQgdHJhbnNtaXNzaW9uIGhhbmRsaW5nIGFuZCBidWZmZXIgbWFuYWdlbWVudCBpbiBwcHBvYXRtX3NlbmQgd2l0aGluIG5ldC9hdG0vcHBwb2F0bS5jLiBJdCByZXBsYWNlcyBza2JfcmVhbGxvY19oZWFkcm9vbSB3aXRoIHNrYl9jb3dfaGVhZCwgcmVzdHJ1Y3R1cmVzIHRoZSBvcmRlciBvZiBza2JfcHVsbCBhbmQgc2tiX3B1c2gsIHJlbW92ZXMgdGhlIHVuZG8gbG9naWMgb24gc2VuZCBmYWlsdXJlLCBhbmQgYWRkcyBpbnB1dCB2YWxpZGF0aW9uIHZpYSBwc2tiX21heV9wdWxsLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBwYXRocyB0aGF0IGNhbiBiZSBleGVyY2lzZWQgdmlhIFBQUCBvdmVyIEFUTSBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBVE1cIixcbiAgICBcIlBQUFwiLFxuICAgIFwiUFBQT0FUTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBwcG9hdG1fc2VuZFwiLFxuICAgIFwicHBwb2F0bV9hc3NpZ25fdmNjXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIHBhY2tldCB0cmFuc21pc3Npb24gaGFuZGxpbmcgYW5kIGJ1ZmZlciBtYW5hZ2VtZW50IGluIHBwcG9hdG1fc2VuZCB3aXRoaW4gbmV0L2F0bS9wcHBvYXRtLmMuIEl0IHJlcGxhY2VzIHNrYl9yZWFsbG9jX2hlYWRyb29tIHdpdGggc2tiX2Nvd19oZWFkLCByZXN0cnVjdHVyZXMgdGhlIG9yZGVyIG9mIHNrYl9wdWxsIGFuZCBza2JfcHVzaCwgcmVtb3ZlcyB0aGUgdW5kbyBsb2dpYyBvbiBzZW5kIGZhaWx1cmUsIGFuZCBhZGRzIGlucHV0IHZhbGlkYXRpb24gdmlhIHBza2JfbWF5X3B1bGwuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIHBhdGhzIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgUFBQIG92ZXIgQVRNIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0NzoyNC4zNzk2MDUzOTVaIiwiU2VxIjo3MywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzI1ODY2ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDc6MjQuMzgwMTgxMjA1WiIsIlNlcSI6NzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDc3MjUyODQ3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBib3VuZHMgY2hlY2tpbmcgYW5kIGhlYWRyb29tIG1hbmFnZW1lbnQgaW4gdGhlIFBQUG9BVE0gdHJhbnNtaXQgcGF0aCAoYHBwcG9hdG1fc2VuZGApLiBTcGVjaWZpY2FsbHk6XFxuMS4gSXQgYWRkcyBhIGBwc2tiX21heV9wdWxsKHNrYiwgMSlgIGNoZWNrIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBvbiBlbXB0eSBza2JzIChgc2tiLVxcdTAwM2VkYXRhWzBdYCkuXFxuMi4gSXQgcmVwbGFjZXMgYHNrYl9yZWFsbG9jX2hlYWRyb29tYCB3aXRoIGBza2JfY293X2hlYWRgIHRvIGVuc3VyZSBoZWFkcm9vbSBpcyBzYWZlbHkgd3JpdGFibGUgYW5kIGF2YWlsYWJsZS5cXG4zLiBJdCBkZWZlcnMgYHNrYl9wdWxsYCBwcm90b2NvbCBjb21wcmVzc2lvbiB1bnRpbCBpbW1lZGlhdGVseSBiZWZvcmUgdHJhbnNtaXNzaW9uLCByZW1vdmluZyB0aGUgcHJldmlvdXMgZnJhZ2lsZSB1bmRvIGxvZ2ljIHRoYXQgcGVyZm9ybWVkIGFuIG91dC1vZi1ib3VuZHMgY2hlY2sgKGBza2ItXFx1MDAzZWRhdGFbLTFdID09ICdcXFxcMCdgKS5cXG40LiBJdCBjb3BpZXMgdGhlIGNvbnN0YW50IExMQyBoZWFkZXIgKGBwcHBsbGNgKSBpbnRvIHRoZSBwdXNoZWQgc2tiIGhlYWRyb29tIGJlZm9yZSB0cmFuc21pc3Npb24uXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvIHRoZXkgcGFzcyB1bmluaXRpYWxpemVkIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4gVGhlIGlzc3VlcyBhZGRyZXNzZWQgYW5kIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBwYWNrZXQgYnVmZmVyIG1hbmlwdWxhdGlvbiBpbiB0aGlzIHBhdGggKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGJ1ZmZlciBvdmVyLXJlYWRzLCBvciBza2IgbGlmZXRpbWUvcmVmY291bnRpbmcgZXJyb3JzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MzBiZmE1MzFkYTc3N2RiMjkzMmE2Nzk0YzY5YzlmMjcyN2IwODlmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMDA6NDQ6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYXRtL3BwcG9hdG0uYyBiL25ldC9hdG0vcHBwb2F0bS5jXG5pbmRleCA2ZGE1MmQxMmRmNjhlLi41MjE0Nzg2ZTYxZDExIDEwMDY0NFxuLS0tIGEvbmV0L2F0bS9wcHBvYXRtLmNcbisrKyBiL25ldC9hdG0vcHBwb2F0bS5jXG5AQCAtMjkyLDEwICsyOTIsMTMgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c3RydWN0IGF0bV92Y2MgKnZjYztcbiBcdGludCByZXQ7XG4gXG4rXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAxKSkge1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuIERST1BfUEFDS0VUO1xuK1x0fVxuK1xuIFx0QVRNX1NLQihza2IpLVx1MDAzZXZjYyA9IHB2Y2MtXHUwMDNlYXRtdmNjO1xuIFx0cHJfZGVidWcoXCIoc2tiPTB4JXAsIHZjYz0weCVwKVxcblwiLCBza2IsIHB2Y2MtXHUwMDNlYXRtdmNjKTtcbi1cdGlmIChza2ItXHUwMDNlZGF0YVswXSA9PSAnXFwwJyBcdTAwMjZcdTAwMjYgKHB2Y2MtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0NPTVBfUFJPVCkpXG4tXHRcdCh2b2lkKSBza2JfcHVsbChza2IsIDEpO1xuIFxuIFx0dmNjID0gQVRNX1NLQihza2IpLVx1MDAzZXZjYztcbiBcdGJoX2xvY2tfc29jayhza19hdG0odmNjKSk7XG5AQCAtMzE3LDIzICszMjAsMTMgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0c3dpdGNoIChwdmNjLVx1MDAzZWVuY2Fwcykge1x0XHQvKiBMTEMgZW5jYXBzdWxhdGlvbiBuZWVkZWQgKi9cbiBcdGNhc2UgZV9sbGM6XG4tXHRcdGlmIChza2JfaGVhZHJvb20oc2tiKSBcdTAwM2MgTExDX0xFTikge1xuLVx0XHRcdHN0cnVjdCBza19idWZmICpuO1xuLVx0XHRcdG4gPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsIExMQ19MRU4pO1xuLVx0XHRcdGlmIChuICE9IE5VTEwgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIG4tXHUwMDNldHJ1ZXNpemUpKSB7XG4tXHRcdFx0XHRrZnJlZV9za2Iobik7XG4tXHRcdFx0XHRnb3RvIG5vc3BhY2U7XG4tXHRcdFx0fVxuLVx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4tXHRcdFx0c2tiID0gbjtcbi1cdFx0XHRpZiAoc2tiID09IE5VTEwpIHtcbi1cdFx0XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbi1cdFx0XHRcdHJldHVybiBEUk9QX1BBQ0tFVDtcbi1cdFx0XHR9XG4tXHRcdH0gZWxzZSBpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbitcdFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pKSB7XG4rXHRcdFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuK1x0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRcdHJldHVybiBEUk9QX1BBQ0tFVDtcbitcdFx0fVxuK1x0XHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbiBcdFx0XHRnb3RvIG5vc3BhY2U7XG4tXHRcdG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgZV92YzpcbiBcdFx0aWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cdTAwM2V0cnVlc2l6ZSkpXG5AQCAtMzQ2LDYgKzMzOSwxMiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdHJldHVybiAxO1xuIFx0fVxuIFxuK1x0aWYgKHNrYi1cdTAwM2VkYXRhWzBdID09ICdcXDAnIFx1MDAyNlx1MDAyNiAocHZjYy1cdTAwM2VmbGFncyBcdTAwMjYgU0NfQ09NUF9QUk9UKSlcbitcdFx0c2tiX3B1bGwoc2tiLCAxKTtcbitcbitcdGlmIChwdmNjLVx1MDAzZWVuY2FwcyA9PSBlX2xsYylcbitcdFx0bWVtY3B5KHNrYl9wdXNoKHNrYiwgTExDX0xFTiksIHBwcGxsYywgTExDX0xFTik7XG4rXG4gXHRhdG1fYWNjb3VudF90eCh2Y2MsIHNrYik7XG4gXHRwcl9kZWJ1ZyhcImF0bV9za2IoJXApLVx1MDAzZXZjYyglcCktXHUwMDNlZGV2KCVwKVxcblwiLFxuIFx0XHQgc2tiLCBBVE1fU0tCKHNrYiktXHUwMDNldmNjLCBBVE1fU0tCKHNrYiktXHUwMDNldmNjLVx1MDAzZWRldik7XG5AQCAtMzU1LDEzICszNTQsNiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gcmV0O1xuIG5vc3BhY2U6XG4gXHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XG4tXHQvKlxuLVx0ICogV2UgZG9uJ3QgaGF2ZSBzcGFjZSB0byBzZW5kIHRoaXMgU0tCIG5vdywgYnV0IHdlIG1pZ2h0IGhhdmVcbi1cdCAqIGFscmVhZHkgYXBwbGllZCBTQ19DT01QX1BST1QgY29tcHJlc3Npb24sIHNvIG1heSBuZWVkIHRvIHVuZG9cbi1cdCAqL1xuLVx0aWYgKChwdmNjLVx1MDAzZWZsYWdzIFx1MDAyNiBTQ19DT01QX1BST1QpIFx1MDAyNlx1MDAyNiBza2JfaGVhZHJvb20oc2tiKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbi1cdCAgICBza2ItXHUwMDNlZGF0YVstMV0gPT0gJ1xcMCcpXG4tXHRcdCh2b2lkKSBza2JfcHVzaChza2IsIDEpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDc6MjQuMzgwMTgyMTY1WiIsIlNlcSI6NzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2NDQ2MTAxNDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV2YWx1YXRpbmcgdGhlIE5lZWQgZm9yIGEgRGVkaWNhdGVkIEtNU0FOIFNlc3Npb24qKlxuXG5Pa2F5LCBzbyB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIHBhdGNoIGluIGBuZXQvYXRtL3BwcG9hdG0uY2Agd2FycmFudHMgaXRzIG93biBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIGJleW9uZCB0aGUgc3RhbmRhcmQgS0FTQU4gZnV6emluZyB3ZSBhbHJlYWR5IHJ1bi4gUmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgYE5lZWRzS01TQU5gIGlzIGB0cnVlYCBvciBgZmFsc2VgIGJhc2VkIG9uIGEgc2V0IG9mIHNwZWNpZmljIGNyaXRlcmlhLiBJJ20gdGFyZ2V0aW5nIHRoZSBhbWQ2NCBhcmNoaXRlY3R1cmUsIHNvIEknbGwga2VlcCB0aGF0IGluIG1pbmQuXG5cbkhlcmUncyB0aGUgY2hlY2tsaXN0IEkgbmVlZCB0byBmb2xsb3c6XG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyB0aGVzZSBhcmVhcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZWNvbWUgYSBwcm9ibGVtOlxuXG4xLiAgKipLZXJuZWwtdG8tdXNlcnNwYWNlIGNvbW11bmljYXRpb246KiogQXJlIHRoZXJlIGFueSBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSB0aHJvdWdoIGFueSBvZiB0aGUgdXN1YWwgc3VzcGVjdHMg4oCTIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rLCBpb2N0bCwgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzPyBDcml0aWNhbGx5LCBhcmUgdGhlc2Ugc3RydWN0dXJlcyAqZnVsbHkqIGluaXRpYWxpemVkIG9yIHplcm9lZD8gU3RydWN0dXJlIHBhZGRpbmcgaXMgYSBrZXkgYXJlYSBvZiBjb25jZXJuLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhOioqIERvZXMgdGhlIHBhdGNoIGludHJvZHVjZSBhbnkgYnJhbmNoaW5nIG9yIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgdGhhdCByZWx5IG9uIHRoZSAqdmFsdWUqIG9mIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHM/IFRoaXMgaXMgYSBjbGFzc2ljIHNvdXJjZSBvZiBLTVNBTiBidWdzLlxuMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbjoqKiBBcmUgbmV3LCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQ/IEFyZSBhbGwgZmllbGRzIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIGxhdGVyIGluIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBjb2RlIHBhdGhzP1xuNC4gICoqQm91bmRzIGNoZWNrcyBhbmQgYnVmZmVyIGhhbmRsaW5nOioqIERvZXMgdGhlIHBhdGNoIG1vZGlmeSBhbnkgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCAqY291bGQqIGFsbG93IHN1cnJvdW5kaW5nIGNvZGUgdG8gaW5hZHZlcnRlbnRseSBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyB3aXRoaW4gZXhpc3RpbmcgYnVmZmVycz9cblxuSWYgdGhlIGFuc3dlciBpcyAqbm8qIHRvIGFsbCBvZiB0aGUgYWJvdmUsIHRoZW4gYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuIFRoYXQgaXMsIGlmIHRoZSBwYXRjaCBwcmltYXJpbHkgaW50cm9kdWNlcyByaXNrcyBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKG91dC1vZi1ib3VuZHMsIG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmcywgdXNlLWFmdGVyLWZyZWUsIGV0Yy4pLiBUaGlzIGlzIGFsc28gdGhlIGNhc2UgaWYgYW55IHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQgKGUuZy4sIHVzaW5nIGA9IHswfWAsIGBtZW1zZXRgLCBvciBga3phbGxvY2ApIGJlZm9yZSBhbnkgcmVhZGluZyBvciBjb3B5aW5nIG9jY3Vycywgd2l0aCBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblNvLCB0aGUgZ2FtZSBwbGFuIGlzOiBJIG5lZWQgdG8gY2FyZWZ1bGx5IGluc3BlY3QgdGhlIHBhdGNoIGFuZCB0aGUgYG5ldC9hdG0vcHBwb2F0bS5jYCBmaWxlLiBJJ2xsIHVzZSBteSB1c3VhbCB0b29scywgbGlrZWx5IGByZWFkLWZpbGVgIGFuZCBgZ3JlcHBlcmAsIHRvIHF1aWNrbHkgaWRlbnRpZnkgcmVsZXZhbnQgc2VjdGlvbnMuIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsIGhlcmUuIEknbGwgbWV0aWN1bG91c2x5IGdvIHRocm91Z2ggZWFjaCBvZiB0aGUgYXJlYXMgbGlzdGVkLCBsb29raW5nIGZvciBwb3RlbnRpYWwgS01TQU4gaXNzdWVzLiBJJ2xsIGhhdmUgdG8gcGF5IHNwZWNpYWwgYXR0ZW50aW9uIHRvIGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCBrZXJuZWwtdXNlcnNwYWNlIGludGVyYWN0aW9ucy4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDIwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDc6NTAuODI2Mjg4ODg2WiIsIlNlcSI6NzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYXRtL3BwcG9hdG0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODUsXG4gIFwiTGluZUNvdW50XCI6IDg1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODU6XFx0ICogc3VwcG9ydCB0aGlzIHlldC4gIFdlIGp1c3QgcmV0dXJuICdEUk9QX1BBQ0tFVCcgd2hpY2ggd2UgYWN0dWFsbHkgZGVmaW5lXFxuIDI4NjpcXHQgKiBhcyBzdWNjZXNzLCBqdXN0IHRvIGJlIGNsZWFyIHdoYXQgd2UncmUgcmVhbGx5IGRvaW5nLlxcbiAyODc6XFx0ICovXFxuIDI4ODpcXHQjZGVmaW5lIERST1BfUEFDS0VUIDFcXG4gMjg5OlxcdHN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMjkwOlxcdHtcXG4gMjkxOlxcdFxcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGNoYW5fdG9fcHZjYyhjaGFuKTtcXG4gMjkyOlxcdFxcdHN0cnVjdCBhdG1fdmNjICp2Y2M7XFxuIDI5MzpcXHRcXHRpbnQgcmV0O1xcbiAyOTQ6XFx0XFxuIDI5NTpcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAxKSkge1xcbiAyOTY6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDI5NzpcXHRcXHRcXHRyZXR1cm4gRFJPUF9QQUNLRVQ7XFxuIDI5ODpcXHRcXHR9XFxuIDI5OTpcXHRcXG4gMzAwOlxcdFxcdEFUTV9TS0Ioc2tiKS1cXHUwMDNldmNjID0gcHZjYy1cXHUwMDNlYXRtdmNjO1xcbiAzMDE6XFx0XFx0cHJfZGVidWcoXFxcIihza2I9MHglcCwgdmNjPTB4JXApXFxcXG5cXFwiLCBza2IsIHB2Y2MtXFx1MDAzZWF0bXZjYyk7XFxuIDMwMjpcXHRcXG4gMzAzOlxcdFxcdHZjYyA9IEFUTV9TS0Ioc2tiKS1cXHUwMDNldmNjO1xcbiAzMDQ6XFx0XFx0YmhfbG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcXG4gMzA1OlxcdFxcdGlmIChzb2NrX293bmVkX2J5X3VzZXIoc2tfYXRtKHZjYykpKSB7XFxuIDMwNjpcXHRcXHRcXHQvKlxcbiAzMDc6XFx0XFx0XFx0ICogTmVlZHMgdG8gaGFwcGVuIChhbmQgYmUgZmx1c2hlZCwgaGVuY2UgdGVzdF9hbmRfKSBiZWZvcmUgd2UgdW5sb2NrXFxuIDMwODpcXHRcXHRcXHQgKiB0aGUgc29ja2V0LiBJdCBuZWVkcyB0byBiZSBzZWVuIGJ5IHRoZSB0aW1lIG91ciAtXFx1MDAzZXJlbGVhc2VfY2IgZ2V0c1xcbiAzMDk6XFx0XFx0XFx0ICogY2FsbGVkLlxcbiAzMTA6XFx0XFx0XFx0ICovXFxuIDMxMTpcXHRcXHRcXHR0ZXN0X2FuZF9zZXRfYml0KEJMT0NLRUQsIFxcdTAwMjZwdmNjLVxcdTAwM2VibG9ja2VkKTtcXG4gMzEyOlxcdFxcdFxcdGdvdG8gbm9zcGFjZTtcXG4gMzEzOlxcdFxcdH1cXG4gMzE0OlxcdFxcdGlmICh0ZXN0X2JpdChBVE1fVkZfQ0xPU0UsIFxcdTAwMjZ2Y2MtXFx1MDAzZWZsYWdzKSB8fFxcbiAzMTU6XFx0XFx0ICAgICF0ZXN0X2JpdChBVE1fVkZfUkVBRFksIFxcdTAwMjZ2Y2MtXFx1MDAzZWZsYWdzKSkge1xcbiAzMTY6XFx0XFx0XFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xcbiAzMTc6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDMxODpcXHRcXHRcXHRyZXR1cm4gRFJPUF9QQUNLRVQ7XFxuIDMxOTpcXHRcXHR9XFxuIDMyMDpcXHRcXG4gMzIxOlxcdFxcdHN3aXRjaCAocHZjYy1cXHUwMDNlZW5jYXBzKSB7XFx0XFx0LyogTExDIGVuY2Fwc3VsYXRpb24gbmVlZGVkICovXFxuIDMyMjpcXHRcXHRjYXNlIGVfbGxjOlxcbiAzMjM6XFx0XFx0XFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pKSB7XFxuIDMyNDpcXHRcXHRcXHRcXHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XFxuIDMyNTpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMzI2OlxcdFxcdFxcdFxcdHJldHVybiBEUk9QX1BBQ0tFVDtcXG4gMzI3OlxcdFxcdFxcdH1cXG4gMzI4OlxcdFxcdFxcdGlmICghcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBza2ItXFx1MDAzZXRydWVzaXplKSlcXG4gMzI5OlxcdFxcdFxcdFxcdGdvdG8gbm9zcGFjZTtcXG4gMzMwOlxcdFxcdFxcdGJyZWFrO1xcbiAzMzE6XFx0XFx0Y2FzZSBlX3ZjOlxcbiAzMzI6XFx0XFx0XFx0aWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cXHUwMDNldHJ1ZXNpemUpKVxcbiAzMzM6XFx0XFx0XFx0XFx0Z290byBub3NwYWNlO1xcbiAzMzQ6XFx0XFx0XFx0YnJlYWs7XFxuIDMzNTpcXHRcXHRjYXNlIGVfYXV0b2RldGVjdDpcXG4gMzM2OlxcdFxcdFxcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcXG4gMzM3OlxcdFxcdFxcdHByX2RlYnVnKFxcXCJUcnlpbmcgdG8gc2VuZCB3aXRob3V0IHNldHRpbmcgZW5jYXBzIVxcXFxuXFxcIik7XFxuIDMzODpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMzM5OlxcdFxcdFxcdHJldHVybiAxO1xcbiAzNDA6XFx0XFx0fVxcbiAzNDE6XFx0XFxuIDM0MjpcXHRcXHRpZiAoc2tiLVxcdTAwM2VkYXRhWzBdID09ICdcXFxcMCcgXFx1MDAyNlxcdTAwMjYgKHB2Y2MtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0NfQ09NUF9QUk9UKSlcXG4gMzQzOlxcdFxcdFxcdHNrYl9wdWxsKHNrYiwgMSk7XFxuIDM0NDpcXHRcXG4gMzQ1OlxcdFxcdGlmIChwdmNjLVxcdTAwM2VlbmNhcHMgPT0gZV9sbGMpXFxuIDM0NjpcXHRcXHRcXHRtZW1jcHkoc2tiX3B1c2goc2tiLCBMTENfTEVOKSwgcHBwbGxjLCBMTENfTEVOKTtcXG4gMzQ3OlxcdFxcbiAzNDg6XFx0XFx0YXRtX2FjY291bnRfdHgodmNjLCBza2IpO1xcbiAzNDk6XFx0XFx0cHJfZGVidWcoXFxcImF0bV9za2IoJXApLVxcdTAwM2V2Y2MoJXApLVxcdTAwM2VkZXYoJXApXFxcXG5cXFwiLFxcbiAzNTA6XFx0XFx0XFx0IHNrYiwgQVRNX1NLQihza2IpLVxcdTAwM2V2Y2MsIEFUTV9TS0Ioc2tiKS1cXHUwMDNldmNjLVxcdTAwM2VkZXYpO1xcbiAzNTE6XFx0XFx0cmV0ID0gQVRNX1NLQihza2IpLVxcdTAwM2V2Y2MtXFx1MDAzZXNlbmQoQVRNX1NLQihza2IpLVxcdTAwM2V2Y2MsIHNrYilcXG4gMzUyOlxcdFxcdCAgICA/IERST1BfUEFDS0VUIDogMTtcXG4gMzUzOlxcdFxcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcXG4gMzU0OlxcdFxcdHJldHVybiByZXQ7XFxuIDM1NTpcXHRub3NwYWNlOlxcbiAzNTY6XFx0XFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xcbiAzNTc6XFx0XFx0cmV0dXJuIDA7XFxuIDM1ODpcXHR9XFxuIDM1OTpcXHRcXG4gMzYwOlxcdC8qIFRoaXMgaGFuZGxlcyBpb2N0bHMgc2VudCB0byB0aGUgL2Rldi9wcHAgaW50ZXJmYWNlICovXFxuIDM2MTpcXHRzdGF0aWMgaW50IHBwcG9hdG1fZGV2cHBwX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCxcXG4gMzYyOlxcdFxcdHVuc2lnbmVkIGxvbmcgYXJnKVxcbiAzNjM6XFx0e1xcbiAzNjQ6XFx0XFx0c3dpdGNoIChjbWQpIHtcXG4gMzY1OlxcdFxcdGNhc2UgUFBQSU9DR0ZMQUdTOlxcbiAzNjY6XFx0XFx0XFx0cmV0dXJuIHB1dF91c2VyKGNoYW5fdG9fcHZjYyhjaGFuKS1cXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopIGFyZylcXG4gMzY3OlxcdFxcdFxcdCAgICA/IC1FRkFVTFQgOiAwO1xcbiAzNjg6XFx0XFx0Y2FzZSBQUFBJT0NTRkxBR1M6XFxuIDM2OTpcXHRcXHRcXHRyZXR1cm4gZ2V0X3VzZXIoY2hhbl90b19wdmNjKGNoYW4pLVxcdTAwM2VmbGFncywgKGludCBfX3VzZXIgKikgYXJnKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0Nzo1MC44MjY0MjAzMzZaIiwiU2VxIjo3NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODcyMzc4MjM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgUFBQb0FUTSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBGaXJzdCwgSSdtIGNoZWNraW5nIHRoZSBjb21taXQgaGlzdG9yeSwgbWF5YmUgdXNpbmcgYGdpdCBsb2cgLTFgIG9yIGdyZXBwZXIgdG8gZ2V0IGEgcXVpY2sgb3ZlcnZpZXcgb2Ygd2hhdCdzIGhhcHBlbmluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHdoYXQgcHJvYmxlbSB0aGlzIHBhdGNoIGlzIGZpeGluZy5cblxuUmlnaHQsIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBkZWFsaW5nIHdpdGggc29tZSBwb3RlbnRpYWwgaXNzdWVzIGluIHRoZSBQUFBvQVRNIGNvZGUuIFRoZSBpbml0aWFsIGNvZGUgbG9va3MgbGlrZSB0aGlzOlxuXG5gYGBjXG5cdEFUTV9TS0Ioc2tiKS1cdTAwM2V2Y2MgPSBwdmNjLVx1MDAzZWF0bXZjYztcblx0cHJfZGVidWcoXCIoc2tiPTB4JXAsIHZjYz0weCVwKVxcblwiLCBza2IsIHB2Y2MtXHUwMDNlYXRtdmNjKTtcblx0aWYgKHNrYi1cdTAwM2VkYXRhWzBdID09ICdcXDAnIFx1MDAyNlx1MDAyNiAocHZjYy1cdTAwM2VmbGFncyBcdTAwMjYgU0NfQ09NUF9QUk9UKSlcblx0XHQodm9pZCkgc2tiX3B1bGwoc2tiLCAxKTtcbmBgYFxuXG5JIGNhbiBpbW1lZGlhdGVseSBzZWUgYSBwb3RlbnRpYWwgcHJvYmxlbTogaWYgYHNrYi1cdTAwM2VsZW5gIGlzIDAsIHRoZW4gYHNrYi1cdTAwM2VkYXRhWzBdYCBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQuIFRoYXQncyBhIGNyaXRpY2FsIGJ1Zy4gSXQncyBhbHNvIHdvcnRoIG5vdGluZyB0aGUgdXNlIG9mIGBza2JfcmVhbGxvY19oZWFkcm9vbWAgdmVyc3VzIGBza2JfY293X2hlYWRgIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBza2IgaXMgY2xvbmVkL3NoYXJlZC5cblxuVGhlIGNvZGUgdGhlbiBjaGVja3MgZm9yIExMQyBlbmNhcHN1bGF0aW9uIG5lZWRlZDpcblxuYGBgY1xuXHRzd2l0Y2ggKHB2Y2MtXHUwMDNlZW5jYXBzKSB7XHRcdC8qIExMQyBlbmNhcHN1bGF0aW9uIG5lZWRlZCAqL1xuXHRjYXNlIGVfbGxjOlxuXHRcdGlmIChza2JfaGVhZHJvb20oc2tiKSBcdTAwM2MgTExDX0xFTikge1xuXHRcdFx0c3RydWN0IHNrX2J1ZmYgKm47XG5cdFx0XHRuID0gc2tiX3JlYWxsb2NfaGVhZHJvb20oc2tiLCBMTENfTEVOKTtcbi4uLlxuYGBgXG5cbkFuZCBpbiB0aGUgYG5vc3BhY2U6YCBwYXRoOlxuXG5gYGBjXG5ub3NwYWNlOlxuXHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XG5cdC8qXG5cdCAqIFdlIGRvbid0IGhhdmUgc3BhY2UgdG8gc2VuZCB0aGlzIFNLQiBub3csIGJ1dCB3ZSBtaWdodCBoYXZlXG5cdCAqIGFscmVhZHkgYXBwbGllZCBTQ19DT01QX1BST1QgY29tcHJlc3Npb24sIHNvIG1heSBuZWVkIHRvIHVuZG9cblx0ICovXG5cdGlmICgocHZjYy1cdTAwM2VmbGFncyBcdTAwMjYgU0NfQ09NUF9QUk9UKSBcdTAwMjZcdTAwMjYgc2tiX2hlYWRyb29tKHNrYikgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG5cdCAgICBza2ItXHUwMDNlZGF0YVstMV0gPT0gJ1xcMCcpXG5cdFx0KHZvaWQpIHNrYl9wdXNoKHNrYiwgMSk7XG5cdHJldHVybiAwO1xuYGBgXG5cbkhlcmUncyBhbm90aGVyIGlzc3VlLiBUaGUgYG5vc3BhY2VgIGxvZ2ljIHRyaWVzIHRvIHVuZG8gYSBwcmV2aW91cyBgc2tiX3B1bGxgIHdpdGggYHNrYl9wdXNoYCwgYnV0IGl0IGNoZWNrcyBgc2tiLVx1MDAzZWRhdGFbLTFdID09ICdcXDAnYC4gIFRoYXQgY2FuIGxlYWQgdG8gYW5vdGhlciBvdXQtb2YtYm91bmRzIHJlYWQgb3IgZXZlbiBjb3JydXB0IGRhdGEuIFlpa2VzLlxuXG5Ob3csIGxldCdzIGV4YW1pbmUgdGhlIHBhdGNoJ3MgY2hhbmdlczpcblxuMS4gIEEgY2hlY2sgaXMgYWRkZWQ6IGBpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAxKSkgeyBrZnJlZV9za2Ioc2tiKTsgcmV0dXJuIERST1BfUEFDS0VUOyB9YC4gVGhpcyBpcyBleGNlbGxlbnQ7IGl0IGVuc3VyZXMgdGhhdCB0aGUgYHNrYmAgaGFzIGF0IGxlYXN0IG9uZSBieXRlIGF2YWlsYWJsZSBiZWZvcmUgYWNjZXNzaW5nIGBza2ItXHUwMDNlZGF0YVswXWAuXG4yLiAgYHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pYCBpcyB1c2VkIGZvciBoZWFkcm9vbSBleHBhbnNpb24sIHdoaWNoIGlzIG11Y2ggY2xlYW5lciB0aGFuIHRoZSBvbGQgbWV0aG9kLlxuMy4gIFRoZSBgU0NfQ09NUF9QUk9UYCBjaGVjayBhbmQgYHNrYl9wdWxsYCBhcmUgbW92ZWQgKmRvd24qIGluIHRoZSBleGVjdXRpb24gcGF0aCwgYWZ0ZXIgdmFyaW91cyBvdGhlciBjaGVja3MgKGBzb2NrX293bmVkX2J5X3VzZXJgLCBgQVRNX1ZGX0NMT1NFL1JFQURZYCwgYHBwcG9hdG1fbWF5X3NlbmRgKS4gVGhpcyBpcyBhIGNydWNpYWwgaW1wcm92ZW1lbnQuIFRoZSBgc2tiX3B1bGxgIG9wZXJhdGlvbiBpcyBvbmx5IHBlcmZvcm1lZCByaWdodCBiZWZvcmUgdHJhbnNtaXNzaW9uLCBhZnRlciBoZWFkcm9vbSBoYXMgYmVlbiBlbnN1cmVkIGFuZCBhZnRlciBhbGwgdGhlIHBvdGVudGlhbCBgbm9zcGFjZWAgcGF0aHMgaGF2ZSBiZWVuIGNvbnNpZGVyZWQuIFRoaXMgc2ltcGxpZmllcyB0aGUgbG9naWMuXG40LiAgVGhlIGBtZW1jcHkoc2tiX3B1c2goc2tiLCBMTENfTEVOKSwgcHBwbGxjLCBMTENfTEVOKWAgaXMgYWxzbyBtb3ZlZCBkb3duLCBhZnRlciB0aGUgYHNrYl9wdWxsYC5cbjUuICBUaGUgcHJvYmxlbWF0aWMgdW5kbyBsb2dpYyBpbiB0aGUgYG5vc3BhY2U6YCBwYXRoIGlzIHJlbW92ZWQsIHdoaWNoIGlzIGdyZWF0LiBJdCBlbGltaW5hdGVzIHRoZSBvdXQtb2YtYm91bmRzIHJlYWQuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuXG5cbjEuICBEb2VzIGl0IG1vZGlmeSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZT8gTm8sIGBwcHBvYXRtX3NlbmRgIGlzIHRoZSB0cmFuc21pdCBwYXRoLCBhbmQgdGhlIGBza2JgIGlzIHRyYW5zbWl0dGVkIG92ZXIgQVRNLCB3aXRoIG5vIGNvcHkgdG8gdXNlciBzcGFjZS5cbjIuICBEb2VzIHRoZSBwYXRjaCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBObywgYHBza2JfbWF5X3B1bGwoc2tiLCAxKWAgYW5kIGBza2JfY293X2hlYWQoc2tiLCBMTENfTEVOKWAgYXJlIHNhZmUuIFRoZSByZWFkIG9mIGBza2ItXHUwMDNlZGF0YVswXWAgaXMgc2FmZSBiZWNhdXNlIG9mIHRoZSBgcHNrYl9tYXlfcHVsbGAgY2hlY2suXG4zLlxuXG4iLCJJbnB1dFRva2VucyI6NTUxMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzODYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0Nzo1OS41NTAyMDU5MDRaIiwiU2VxIjo3OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9hdG0vcHBwb2F0bS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuICAgMjpcXHQvKiBuZXQvYXRtL3BwcG9hdG0uYyAtIFJGQzIzNjQgUFBQIG92ZXIgQVRNL0FBTDUgKi9cXG4gICAzOlxcdFxcbiAgIDQ6XFx0LyogQ29weXJpZ2h0IDE5OTktMjAwMCBieSBNaXRjaGVsbCBCbGFuayBKciAqL1xcbiAgIDU6XFx0LyogQmFzZWQgb24gY2xpcC5jOyAxOTk1LTE5OTkgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBFUEZMIExSQy9JQ0EgKi9cXG4gICA2OlxcdC8qIEFuZCBvbiBwcHBfYXN5bmMuYzsgQ29weXJpZ2h0IDE5OTkgUGF1bCBNYWNrZXJyYXMgKi9cXG4gICA3OlxcdC8qIEFuZCBoZWxwIGZyb20gSmVucyBBeGJvZSAqL1xcbiAgIDg6XFx0XFxuICAgOTpcXHQvKlxcbiAgMTA6XFx0ICpcXG4gIDExOlxcdCAqIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHRoZSBlbmNhcHN1bGF0aW9uIGFuZCBmcmFtaW5nIGZvciBzZW5kaW5nXFxuICAxMjpcXHQgKiBhbmQgcmVjZWl2aW5nIFBQUCBmcmFtZXMgaW4gQVRNIEFBTDUgUERVcy5cXG4gIDEzOlxcdCAqL1xcbiAgMTQ6XFx0XFxuICAxNTpcXHQvKlxcbiAgMTY6XFx0ICogT25lIHNob3J0Y29taW5nIG9mIHRoaXMgZHJpdmVyIGlzIHRoYXQgaXQgZG9lcyBub3QgY29tcGx5IHdpdGhcXG4gIDE3OlxcdCAqIHNlY3Rpb24gOCBvZiBSRkMyMzY0IC0gd2UgYXJlIHN1cHBvc2VkIHRvIGRldGVjdCBhIGNoYW5nZVxcbiAgMTg6XFx0ICogaW4gZW5jYXBzdWxhdGlvbiBhbmQgaW1tZWRpYXRlbHkgYWJvcnQgdGhlIGNvbm5lY3Rpb24gKGluIG9yZGVyXFxuICAxOTpcXHQgKiB0byBhdm9pZCBhIGJsYWNrLWhvbGUgYmVpbmcgY3JlYXRlZCBpZiBvdXIgcGVlciBsb3NlcyBzdGF0ZVxcbiAgMjA6XFx0ICogYW5kIGNoYW5nZXMgZW5jYXBzdWxhdGlvbiB1bmlsYXRlcmFsbHkuICBIb3dldmVyLCBzaW5jZSB0aGVcXG4gIDIxOlxcdCAqIHBwcF9nZW5lcmljIGxheWVyIGFjdHVhbGx5IGRvZXMgdGhlIGRlY2Fwc3VsYXRpb24sIHdlIG5lZWRcXG4gIDIyOlxcdCAqIGEgd2F5IG9mIG5vdGlmeWluZyBpdCB3aGVuIHdlIF90aGlua18gdGhlcmUgbWlnaHQgYmUgYSBwcm9ibGVtKVxcbiAgMjM6XFx0ICogVGhlcmUncyB0d28gY2FzZXM6XFxuICAyNDpcXHQgKiAgIDEuXFx0TExDLWVuY2Fwc3VsYXRpb24gd2FzIG1pc3Npbmcgd2hlbiBpdCB3YXMgZW5hYmxlZC4gIEluXFxuICAyNTpcXHQgKlxcdHRoaXMgY2FzZSwgd2Ugc2hvdWxkIHRlbGwgdGhlIHVwcGVyIGxheWVyIFxcXCJ0ZWFyIGRvd25cXG4gIDI2OlxcdCAqXFx0dGhpcyBzZXNzaW9uIGlmIHRoaXMgc2tiIGxvb2tzIG9rIHRvIHlvdVxcXCJcXG4gIDI3OlxcdCAqICAgMi5cXHRMTEMtZW5jYXBzdWxhdGlvbiB3YXMgcHJlc2VudCB3aGVuIGl0IHdhcyBkaXNhYmxlZC4gIFRoZW5cXG4gIDI4OlxcdCAqXFx0d2UgbmVlZCB0byB0ZWxsIHRoZSB1cHBlciBsYXllciBcXFwidGhpcyBwYWNrZXQgbWF5IGJlXFxuICAyOTpcXHQgKlxcdG9rLCBidXQgaWYgaXRzIGluIGVycm9yIHRlYXIgZG93biB0aGUgc2Vzc2lvblxcXCJcXG4gIDMwOlxcdCAqIFRoZXNlIGhvb2tzIGFyZSBub3QgeWV0IGF2YWlsYWJsZSBpbiBwcHBfZ2VuZXJpY1xcbiAgMzE6XFx0ICovXFxuICAzMjpcXHRcXG4gIDMzOlxcdCNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXFxcIjolczogXFxcIiBmbXQsIF9fZnVuY19fXFxuICAzNDpcXHRcXG4gIDM1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gIDM2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuICAzNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaW50ZXJydXB0LmhcXHUwMDNlXFxuICAzODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICAzOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAgNDA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F0bS5oXFx1MDAzZVxcbiAgNDE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F0bWRldi5oXFx1MDAzZVxcbiAgNDI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NhcGFiaWxpdHkuaFxcdTAwM2VcXG4gIDQzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcHBfZGVmcy5oXFx1MDAzZVxcbiAgNDQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BwcC1pb2N0bC5oXFx1MDAzZVxcbiAgNDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BwcF9jaGFubmVsLmhcXHUwMDNlXFxuICA0NjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYXRtcHBwLmhcXHUwMDNlXFxuICA0NzpcXHRcXG4gIDQ4OlxcdCNpbmNsdWRlIFxcXCJjb21tb24uaFxcXCJcXG4gIDQ5OlxcdFxcbiAgNTA6XFx0ZW51bSBwcHBvYXRtX2VuY2FwcyB7XFxuICA1MTpcXHRcXHRlX2F1dG9kZXRlY3QgPSBQUFBPQVRNX0VOQ0FQU19BVVRPREVURUNULFxcbiAgNTI6XFx0XFx0ZV92YyA9IFBQUE9BVE1fRU5DQVBTX1ZDLFxcbiAgNTM6XFx0XFx0ZV9sbGMgPSBQUFBPQVRNX0VOQ0FQU19MTEMsXFxuICA1NDpcXHR9O1xcbiAgNTU6XFx0XFxuICA1NjpcXHRzdHJ1Y3QgcHBwb2F0bV92Y2Mge1xcbiAgNTc6XFx0XFx0c3RydWN0IGF0bV92Y2NcXHQqYXRtdmNjO1xcdC8qIFZDQyBkZXNjcmlwdG9yICovXFxuICA1ODpcXHRcXHR2b2lkICgqb2xkX3B1c2gpKHN0cnVjdCBhdG1fdmNjICosIHN0cnVjdCBza19idWZmICopO1xcbiAgNTk6XFx0XFx0dm9pZCAoKm9sZF9wb3ApKHN0cnVjdCBhdG1fdmNjICosIHN0cnVjdCBza19idWZmICopO1xcbiAgNjA6XFx0XFx0dm9pZCAoKm9sZF9yZWxlYXNlX2NiKShzdHJ1Y3QgYXRtX3ZjYyAqKTtcXG4gIDYxOlxcdFxcdHN0cnVjdCBtb2R1bGUgKm9sZF9vd25lcjtcXG4gIDYyOlxcdFxcdFxcdFxcdFxcdFxcdC8qIGtlZXAgb2xkIHB1c2gvcG9wIGZvciBkZXRhY2hpbmcgKi9cXG4gIDYzOlxcdFxcdGVudW0gcHBwb2F0bV9lbmNhcHMgZW5jYXBzO1xcbiAgNjQ6XFx0XFx0YXRvbWljX3QgaW5mbGlnaHQ7XFxuICA2NTpcXHRcXHR1bnNpZ25lZCBsb25nIGJsb2NrZWQ7XFxuICA2NjpcXHRcXHRpbnQgZmxhZ3M7XFx0XFx0XFx0LyogU0NfQ09NUF9QUk9UIC0gY29tcHJlc3MgcHJvdG9jb2wgKi9cXG4gIDY3OlxcdFxcdHN0cnVjdCBwcHBfY2hhbm5lbCBjaGFuO1xcdC8qIGludGVyZmFjZSB0byBnZW5lcmljIHBwcCBsYXllciAqL1xcbiAgNjg6XFx0XFx0c3RydWN0IHRhc2tsZXRfc3RydWN0IHdha2V1cF90YXNrbGV0O1xcbiAgNjk6XFx0fTtcXG4gIDcwOlxcdFxcbiAgNzE6XFx0LypcXG4gIDcyOlxcdCAqIFdlIHdhbnQgdG8gYWxsb3cgdHdvIHBhY2tldHMgaW4gdGhlIHF1ZXVlLiBUaGUgb25lIHRoYXQncyBjdXJyZW50bHkgaW5cXG4gIDczOlxcdCAqIGZsaWdodCwgYW5kICpvbmUqIHF1ZXVlZCB1cCByZWFkeSBmb3IgdGhlIEFUTSBkZXZpY2UgdG8gc2VuZCBpbW1lZGlhdGVseVxcbiAgNzQ6XFx0ICogZnJvbSBpdHMgVFggZG9uZSBJUlEuIFdlIHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgYXRvbWljX2luY19ub3RfemVybygpLCBzb1xcbiAgNzU6XFx0ICogaW5mbGlnaHQgPT0gLTIgcmVwcmVzZW50cyBhbiBlbXB0eSBxdWV1ZSwgLTEgb25lIHBhY2tldCwgYW5kIHplcm8gbWVhbnNcXG4gIDc2OlxcdCAqIHRoZXJlIGFyZSB0d28gcGFja2V0cyBpbiB0aGUgcXVldWUuXFxuICA3NzpcXHQgKi9cXG4gIDc4OlxcdCNkZWZpbmUgTk9ORV9JTkZMSUdIVCAtMlxcbiAgNzk6XFx0XFxuICA4MDpcXHQjZGVmaW5lIEJMT0NLRUQgMFxcbiAgODE6XFx0XFxuICA4MjpcXHQvKlxcbiAgODM6XFx0ICogSGVhZGVyIHVzZWQgZm9yIExMQyBFbmNhcHN1bGF0ZWQgUFBQICg0IGJ5dGVzKSBmb2xsb3dlZCBieSB0aGUgTENQIHByb3RvY29sXFxuICA4NDpcXHQgKiBJRCAoMHhDMDIxKSB1c2VkIGluIGF1dG9kZXRlY3Rpb25cXG4gIDg1OlxcdCAqL1xcbiAgODY6XFx0c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcHBwbGxjWzZdID0geyAweEZFLCAweEZFLCAweDAzLCAweENGLCAweEMwLCAweDIxIH07XFxuICA4NzpcXHQjZGVmaW5lIExMQ19MRU5cXHRcXHQoNClcXG4gIDg4OlxcdFxcbiAgODk6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmF0bXZjY190b19wdmNjKGNvbnN0IHN0cnVjdCBhdG1fdmNjICphdG12Y2MpXFxuICA5MDpcXHR7XFxuICA5MTpcXHRcXHRyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoYXRtdmNjLVxcdTAwM2V1c2VyX2JhY2spO1xcbiAgOTI6XFx0fVxcbiAgOTM6XFx0XFxuICA5NDpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqY2hhbl90b19wdmNjKGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcXG4gIDk1OlxcdHtcXG4gIDk2OlxcdFxcdHJldHVybiAoc3RydWN0IHBwcG9hdG1fdmNjICopIChjaGFuLVxcdTAwM2Vwcml2YXRlKTtcXG4gIDk3OlxcdH1cXG4gIDk4OlxcdFxcbiAgOTk6XFx0LypcXG4gMTAwOlxcdCAqIFdlIGNhbid0IGRvIHRoaXMgZGlyZWN0bHkgZnJvbSBvdXIgX3BvcCBoYW5kbGVyLCBzaW5jZSB0aGUgcHBwIGNvZGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMDA6NDc6NTkuNTUwMzc3NzA0WiIsIlNlcSI6NzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5NDk1ODQzMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIERlZXBlciBpbnRvIGBwcHBvYXRtLmNgKipcblxuT2theSwgc28gSSd2ZSBhbHJlYWR5IGNvdmVyZWQgYSBnb29kIGNodW5rIG9mIGBwcHBvYXRtLmNgLCBzcGVjaWZpY2FsbHkgbGluZXMgMjgwLTM3MCBhcm91bmQgdGhhdCBgcHBwb2F0bV9zZW5kYCBmdW5jdGlvbi4gTm93LCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGJyb2FkZXIgcGljdHVyZSwgYW5kIGhvdyB0aGluZ3MgdGllIHRvZ2V0aGVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBgcHBwb2F0bV9kZXZwcHBfaW9jdGxgIGFuZCBzb21lIG9mIHRoZSBzdXBwb3J0aW5nIGZ1bmN0aW9ucy4gSSdsbCBmb2N1cyBvbiBsaW5lcyAzNzAtNDQwLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgZGV2aWNlIGNvbnRyb2wgb3BlcmF0aW9ucyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgUFBQLW92ZXItQVRNIGRyaXZlci4gVGhpcyBzaG91bGQgcHJvdmlkZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gYmV0dGVyIGFuYWx5emUgdGhlIGBwcHBvYXRtX3NlbmRgIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTc5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QwMDo0ODowMS40OTk5NjQ0NjNaIiwiU2VxIjo4MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2F0bS9wcHBvYXRtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzY1LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzY1OlxcdFxcdGNhc2UgUFBQSU9DR0ZMQUdTOlxcbiAzNjY6XFx0XFx0XFx0cmV0dXJuIHB1dF91c2VyKGNoYW5fdG9fcHZjYyhjaGFuKS1cXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopIGFyZylcXG4gMzY3OlxcdFxcdFxcdCAgICA/IC1FRkFVTFQgOiAwO1xcbiAzNjg6XFx0XFx0Y2FzZSBQUFBJT0NTRkxBR1M6XFxuIDM2OTpcXHRcXHRcXHRyZXR1cm4gZ2V0X3VzZXIoY2hhbl90b19wdmNjKGNoYW4pLVxcdTAwM2VmbGFncywgKGludCBfX3VzZXIgKikgYXJnKVxcbiAzNzA6XFx0XFx0XFx0ICAgID8gLUVGQVVMVCA6IDA7XFxuIDM3MTpcXHRcXHR9XFxuIDM3MjpcXHRcXHRyZXR1cm4gLUVOT1RUWTtcXG4gMzczOlxcdH1cXG4gMzc0OlxcdFxcbiAzNzU6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2F0bV9vcHMgPSB7XFxuIDM3NjpcXHRcXHQuc3RhcnRfeG1pdCA9IHBwcG9hdG1fc2VuZCxcXG4gMzc3OlxcdFxcdC5pb2N0bCA9IHBwcG9hdG1fZGV2cHBwX2lvY3RsLFxcbiAzNzg6XFx0fTtcXG4gMzc5OlxcdFxcbiAzODA6XFx0c3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcXG4gMzgxOlxcdHtcXG4gMzgyOlxcdFxcdHN0cnVjdCBhdG1fYmFja2VuZF9wcHAgYmU7XFxuIDM4MzpcXHRcXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2M7XFxuIDM4NDpcXHRcXHRpbnQgZXJyO1xcbiAzODU6XFx0XFxuIDM4NjpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmJlLCBhcmcsIHNpemVvZiBiZSkpXFxuIDM4NzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gMzg4OlxcdFxcdGlmIChiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfQVVUT0RFVEVDVCBcXHUwMDI2XFx1MDAyNlxcbiAzODk6XFx0XFx0ICAgIGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19WQyBcXHUwMDI2XFx1MDAyNiBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfTExDKVxcbiAzOTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDM5MTpcXHRcXHRwdmNjID0ga3phbGxvY19vYmooKnB2Y2MpO1xcbiAzOTI6XFx0XFx0aWYgKHB2Y2MgPT0gTlVMTClcXG4gMzkzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzOTQ6XFx0XFx0cHZjYy1cXHUwMDNlYXRtdmNjID0gYXRtdmNjO1xcbiAzOTU6XFx0XFxuIDM5NjpcXHRcXHQvKiBNYXhpbXVtIGlzIHplcm8sIHNvIHRoYXQgd2UgY2FuIHVzZSBhdG9taWNfaW5jX25vdF96ZXJvKCkgKi9cXG4gMzk3OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNnB2Y2MtXFx1MDAzZWluZmxpZ2h0LCBOT05FX0lORkxJR0hUKTtcXG4gMzk4OlxcdFxcdHB2Y2MtXFx1MDAzZW9sZF9wdXNoID0gYXRtdmNjLVxcdTAwM2VwdXNoO1xcbiAzOTk6XFx0XFx0cHZjYy1cXHUwMDNlb2xkX3BvcCA9IGF0bXZjYy1cXHUwMDNlcG9wO1xcbiA0MDA6XFx0XFx0cHZjYy1cXHUwMDNlb2xkX293bmVyID0gYXRtdmNjLVxcdTAwM2Vvd25lcjtcXG4gNDAxOlxcdFxcdHB2Y2MtXFx1MDAzZW9sZF9yZWxlYXNlX2NiID0gYXRtdmNjLVxcdTAwM2VyZWxlYXNlX2NiO1xcbiA0MDI6XFx0XFx0cHZjYy1cXHUwMDNlZW5jYXBzID0gKGVudW0gcHBwb2F0bV9lbmNhcHMpIGJlLmVuY2FwcztcXG4gNDAzOlxcdFxcdHB2Y2MtXFx1MDAzZWNoYW4ucHJpdmF0ZSA9IHB2Y2M7XFxuIDQwNDpcXHRcXHRwdmNjLVxcdTAwM2VjaGFuLm9wcyA9IFxcdTAwMjZwcHBvYXRtX29wcztcXG4gNDA1OlxcdFxcdHB2Y2MtXFx1MDAzZWNoYW4ubXR1ID0gYXRtdmNjLVxcdTAwM2Vxb3MudHh0cC5tYXhfc2R1IC0gUFBQX0hEUkxFTiAtXFxuIDQwNjpcXHRcXHQgICAgKGJlLmVuY2FwcyA9PSBlX3ZjID8gMCA6IExMQ19MRU4pO1xcbiA0MDc6XFx0XFx0dGFza2xldF9zZXR1cChcXHUwMDI2cHZjYy1cXHUwMDNld2FrZXVwX3Rhc2tsZXQsIHBwcG9hdG1fd2FrZXVwX3NlbmRlcik7XFxuIDQwODpcXHRcXHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcXHUwMDI2cHZjYy1cXHUwMDNlY2hhbik7XFxuIDQwOTpcXHRcXHRpZiAoZXJyICE9IDApIHtcXG4gNDEwOlxcdFxcdFxcdGtmcmVlKHB2Y2MpO1xcbiA0MTE6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNDEyOlxcdFxcdH1cXG4gNDEzOlxcdFxcdGF0bXZjYy1cXHUwMDNldXNlcl9iYWNrID0gcHZjYztcXG4gNDE0OlxcdFxcdGF0bXZjYy1cXHUwMDNlcHVzaCA9IHBwcG9hdG1fcHVzaDtcXG4gNDE1OlxcdFxcdGF0bXZjYy1cXHUwMDNlcG9wID0gcHBwb2F0bV9wb3A7XFxuIDQxNjpcXHRcXHRhdG12Y2MtXFx1MDAzZXJlbGVhc2VfY2IgPSBwcHBvYXRtX3JlbGVhc2VfY2I7XFxuIDQxNzpcXHRcXHRfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpO1xcbiA0MTg6XFx0XFx0YXRtdmNjLVxcdTAwM2Vvd25lciA9IFRISVNfTU9EVUxFO1xcbiA0MTk6XFx0XFxuIDQyMDpcXHRcXHQvKiByZS1wcm9jZXNzIGV2ZXJ5dGhpbmcgcmVjZWl2ZWQgYmV0d2VlbiBjb25uZWN0aW9uIHNldHVwIGFuZFxcbiA0MjE6XFx0XFx0ICAgYmFja2VuZCBzZXR1cCAqL1xcbiA0MjI6XFx0XFx0dmNjX3Byb2Nlc3NfcmVjdl9xdWV1ZShhdG12Y2MpO1xcbiA0MjM6XFx0XFx0cmV0dXJuIDA7XFxuIDQyNDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ4OjAxLjUwMDA1ODIwM1oiLCJTZXEiOjgxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDYwNTM2NjIyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBQUG9BVE0gUGF0Y2ggZm9yIFNlY3VyaXR5IEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBwcmltYXJpbHkgYWRkcmVzc2VzIHBvdGVudGlhbCBidWZmZXIgb3ZlcnJ1bnMgYW5kIG91dC1vZi1ib3VuZHMgcmVhZHMgd2l0aGluIHRoZSBgcHBwb2F0bV9zZW5kYCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGlzc3VlIGxpa2VseSBpbnZvbHZlZCBzY2VuYXJpb3Mgd2hlcmUgdGhlIGNvZGUgd2FzIGVpdGhlciBhdHRlbXB0aW5nIHRvIHJlYWQgYmV5b25kIHRoZSBib3VuZGFyaWVzIG9mIGFuIFNLQidzIGRhdGEgYnVmZmVyIG9yIHBvdGVudGlhbGx5IGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuU3BlY2lmaWNhbGx5LCBJIHNlZSBhIGZldyBrZXkgYXJlYXMgdGhhdCB3ZXJlIGxpa2VseSBwcm9ibGVtYXRpYywgYW5kIHRoYXQgdGhpcyBwYXRjaCBhaW1zIHRvIHJlc29sdmU6XG5cbjEuICAqKk91dC1vZi1Cb3VuZHMgUmVhZHMgYW5kIEJ1ZmZlciBIYW5kbGluZzoqKiBUaGUgaW50cm9kdWN0aW9uIG9mIGBwc2tiX21heV9wdWxsKHNrYiwgMSlgIGlzIGNydWNpYWwuIFRoaXMgY2hlY2sgKmJlZm9yZSogYWNjZXNzaW5nIGBza2ItXHUwMDNlZGF0YVswXWAgaXMgYSBkaXJlY3QgcmVzcG9uc2UgdG8gYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGlmIHRoZSBTS0IgaGFwcGVuZWQgdG8gYmUgZW1wdHksIG9yIG5vdCBsYXJnZSBlbm91Z2ggdG8gYWNjb21tb2RhdGUgdGhlIGFjY2Vzcy4gVGhlIGBrZnJlZV9za2Ioc2tiKWAgYW5kIGBEUk9QX1BBQ0tFVGAgY29tYm8gbmVhdGx5IGhhbmRsZXMgdGhpcyBlZGdlIGNhc2UuXG5cbjIuICAqKlNLQiBIZWFkZXIgUm9vbSBNYW5hZ2VtZW50OioqIFRoZSBvcmlnaW5hbCBjb2RlJ3MgdXNlIG9mIGBza2JfcmVhbGxvY19oZWFkcm9vbWAgdG8gbWFrZSBzcGFjZSBmb3IgdGhlIExMQyBoZWFkZXIgd2FzIHByb2JsZW1hdGljIGluIHRoaXMgY2FzZS4gVGhlIG5ldyBgc2tiX2Nvd19oZWFkYCBpcyBtdWNoIGNsZWFuZXIuIFRoaXMgbGlrZWx5IGZpeGVzIHNvbWUgaXNzdWUgd2l0aCBhbGxvY2F0aW5nIG1vcmUgc3BhY2UgdG8gdGhlIHNrYi5cblxuMy4gICoqUHJvdG9jb2wgQ29tcHJlc3Npb24gVW5kbyAoU0NcXF9DT01QXFxfUFJPVCk6KiogVGhlIGxvZ2ljIHJlZ2FyZGluZyB0aGUgYFNDX0NPTVBfUFJPVGAgZmxhZyBhbmQgdGhlIHBvdGVudGlhbCBuZWVkIHRvIFwidW5kb1wiIGNvbXByZXNzaW9uIGlmIHRoZXJlIHdhcyBubyBzcGFjZSB0byBhZGQgdGhlIExMQyBoZWFkZXIgbG9va3MgbGlrZSBpdCB3YXMgY2F1c2luZyBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlIHBhdGNoIGVsaW1pbmF0ZXMgdGhpcyBhbHRvZ2V0aGVyIGJ5IHJlbW92aW5nIHRoZSBgc2tiX3B1c2hgIGFuZCBzdWJzZXF1ZW50IGNvZGUgYmxvY2ssIG1lYW5pbmcgdGhlIGNvZGUgbm93IGhhbmRsZXMgTExDIGhlYWRlciBpbnNlcnRpb24gKmFmdGVyKiB0aGUgaW5pdGlhbCBjaGVja3MuXG5cbjQuICAqKkRhdGEgVmFsaWRhdGlvbiBhbmQgRmxvdyBDb250cm9sOioqIFRoZSBgcHBwb2F0bV9tYXlfc2VuZGAgY2FsbHMgYXJlIGNyaXRpY2FsIGhlcmUuIFRoZSBtYWluIHBvaW50IGlzIHRvIG1ha2Ugc3VyZSBkYXRhIGlzIHdpdGhpbiBib3VuZHMgYW5kIGRvZXNuJ3QgZ2V0IG1lc3NlZCB1cC5cblxuTm93LCBjb25jZXJuaW5nIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplciksIEknbSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAgaGVyZS4gTXkgcmVhc29uaW5nIGlzIHNvbGlkOlxuXG4qICAgKipLQVNBTiBDb3ZlcnMgdGhlIFJpc2tzOioqIFRoZSBwcmltYXJ5IHJpc2tzIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGFyZSBleGFjdGx5IHRoZSBraW5kcyBvZiBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhbmQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB0aGF0IEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTQU5pdGl6ZXIpIGlzIGRlc2lnbmVkIHRvIGNhdGNoLiBXZSdyZSB0YWxraW5nIGFib3V0IHJlYWRpbmcvd3JpdGluZyBtZW1vcnkgYmV5b25kIHRoZSBidWZmZXIgYm91bmRhcmllcyBvciBkZXJlZmVyZW5jaW5nIGEgZGFuZ2xpbmcgcG9pbnRlci4gS0FTQU4gaXMgYWxyZWFkeSBlbmFibGVkIGluIHRoZSBrZXJuZWwgYnVpbGRzLCBzbyBpdCB3aWxsIGRldGVjdCB0aGUgbW9zdCBpbXBvcnRhbnQgaXNzdWVzLlxuKiAgICoqTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgRXhwb3N1cmU6KiogSSd2ZSBjYXJlZnVsbHkgcmV2aWV3ZWQgdGhlIHBhdGNoLCBhbmQgSSBzZWUgbm8gZXZpZGVuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoaXMgaXMgdGhlIGNydWNpYWwgcG9pbnQgZm9yIEtNU0FOLiBUaGUgY29kZSBub3cgKmV4cGxpY2l0bHkqIGNoZWNrcyBmb3IgYSBtaW5pbXVtIFNLQiBzaXplIGJlZm9yZSBhbnkgYWNjZXNzIHRvIGBza2ItXHUwMDNlZGF0YWAsIHRoZSBgcHBwbGxjYCBpcyBhIHN0YXRpYyBidWZmZXIgYW5kIGBza2JfY293X2hlYWRgIGlzIG9ubHkgYWxsb2NhdGluZyB3aXRoIGV4aXN0aW5nIGRhdGEuIEkndmUgYWxzbyBjaGVja2VkIHRoZXJlJ3Mgbm8gc3RydWN0IHBhZGRpbmcgdGhhdCBpcyBhY2Nlc3NlZCBpbiBhbnkgd2F5LlxuKiAgICoqTm8gSW5mbyBMZWFrczoqKiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB3YXlzIHRvIGxlYWsga2VybmVsIG1lbW9yeSBpbnRvIHRoZSB1c2Vyc3BhY2UsIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSB0aGUga2VybmVsLiBUaGlzIGlzIGltcG9ydGFudCB0byBub3RlIGFzIGl0J3MgdGhlIHNwZWNpZmljIGFyZWEgS01TQU4gd291bGQgYmUgZGVzaWduZWQgZm9yLlxuXG5UaGVyZWZvcmUsIHNpbmNlIHRoZSByaXNrcyBoZXJlIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMgKEtBU0FOKSBhbmQgdGhlIHBhdGNoIGRvZXMgbm90IGNyZWF0ZSBhbnkgbmV3IHdheXMgdG8gbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjYXVzZSBpbmZvcm1hdGlvbiBsZWFrcywgd2UgZG8gKm5vdCogbmVlZCBLTVNBTiBoZXJlLiBUaGlzIGFuYWx5c2lzIGlzIHRob3JvdWdoLCBhbmQgSSdtIGNvbmZpZGVudCBpbiBteSByZWNvbW1lbmRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4OTQsIk91dHB1dFRva2VucyI6MjgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDAwOjQ4OjEyLjEwNTQyNzlaIiwiU2VxIjo4MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBib3VuZHMgY2hlY2tpbmcgYW5kIGhlYWRyb29tIG1hbmFnZW1lbnQgaW4gdGhlIFBQUG9BVE0gdHJhbnNtaXQgcGF0aCAoYHBwcG9hdG1fc2VuZGApLiBTcGVjaWZpY2FsbHk6XFxuMS4gSXQgYWRkcyBhIGBwc2tiX21heV9wdWxsKHNrYiwgMSlgIGNoZWNrIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBvbiBlbXB0eSBza2JzIChgc2tiLVxcdTAwM2VkYXRhWzBdYCkuXFxuMi4gSXQgcmVwbGFjZXMgYHNrYl9yZWFsbG9jX2hlYWRyb29tYCB3aXRoIGBza2JfY293X2hlYWRgIHRvIGVuc3VyZSBoZWFkcm9vbSBpcyBzYWZlbHkgd3JpdGFibGUgYW5kIGF2YWlsYWJsZS5cXG4zLiBJdCBkZWZlcnMgYHNrYl9wdWxsYCBwcm90b2NvbCBjb21wcmVzc2lvbiB1bnRpbCBpbW1lZGlhdGVseSBiZWZvcmUgdHJhbnNtaXNzaW9uLCByZW1vdmluZyB0aGUgcHJldmlvdXMgZnJhZ2lsZSB1bmRvIGxvZ2ljIHRoYXQgcGVyZm9ybWVkIGFuIG91dC1vZi1ib3VuZHMgY2hlY2sgKGBza2ItXFx1MDAzZWRhdGFbLTFdID09ICdcXFxcMCdgKS5cXG40LiBJdCBjb3BpZXMgdGhlIGNvbnN0YW50IExMQyBoZWFkZXIgKGBwcHBsbGNgKSBpbnRvIHRoZSBwdXNoZWQgc2tiIGhlYWRyb29tIGJlZm9yZSB0cmFuc21pc3Npb24uXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvIHRoZXkgcGFzcyB1bmluaXRpYWxpemVkIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4gVGhlIGlzc3VlcyBhZGRyZXNzZWQgYW5kIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBwYWNrZXQgYnVmZmVyIG1hbmlwdWxhdGlvbiBpbiB0aGlzIHBhdGggKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGJ1ZmZlciBvdmVyLXJlYWRzLCBvciBza2IgbGlmZXRpbWUvcmVmY291bnRpbmcgZXJyb3JzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYm91bmRzIGNoZWNraW5nIGFuZCBoZWFkcm9vbSBtYW5hZ2VtZW50IGluIHRoZSBQUFBvQVRNIHRyYW5zbWl0IHBhdGggKGBwcHBvYXRtX3NlbmRgKS4gU3BlY2lmaWNhbGx5OlxcbjEuIEl0IGFkZHMgYSBgcHNrYl9tYXlfcHVsbChza2IsIDEpYCBjaGVjayB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgb24gZW1wdHkgc2ticyAoYHNrYi1cXHUwMDNlZGF0YVswXWApLlxcbjIuIEl0IHJlcGxhY2VzIGBza2JfcmVhbGxvY19oZWFkcm9vbWAgd2l0aCBgc2tiX2Nvd19oZWFkYCB0byBlbnN1cmUgaGVhZHJvb20gaXMgc2FmZWx5IHdyaXRhYmxlIGFuZCBhdmFpbGFibGUuXFxuMy4gSXQgZGVmZXJzIGBza2JfcHVsbGAgcHJvdG9jb2wgY29tcHJlc3Npb24gdW50aWwgaW1tZWRpYXRlbHkgYmVmb3JlIHRyYW5zbWlzc2lvbiwgcmVtb3ZpbmcgdGhlIHByZXZpb3VzIGZyYWdpbGUgdW5kbyBsb2dpYyB0aGF0IHBlcmZvcm1lZCBhbiBvdXQtb2YtYm91bmRzIGNoZWNrIChgc2tiLVxcdTAwM2VkYXRhWy0xXSA9PSAnXFxcXDAnYCkuXFxuNC4gSXQgY29waWVzIHRoZSBjb25zdGFudCBMTEMgaGVhZGVyIChgcHBwbGxjYCkgaW50byB0aGUgcHVzaGVkIHNrYiBoZWFkcm9vbSBiZWZvcmUgdHJhbnNtaXNzaW9uLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG5vciBkbyB0aGV5IHBhc3MgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuIFRoZSBpc3N1ZXMgYWRkcmVzc2VkIGFuZCByaXNrcyBhc3NvY2lhdGVkIHdpdGggcGFja2V0IGJ1ZmZlciBtYW5pcHVsYXRpb24gaW4gdGhpcyBwYXRoIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBidWZmZXIgb3Zlci1yZWFkcywgb3Igc2tiIGxpZmV0aW1lL3JlZmNvdW50aW5nIGVycm9ycykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowkgxp7[1] Phase: Succeeded StartedAt: 2026-09-13 00:48:23 +0000 UTC FinishedAt: 2026-09-13 00:48:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgxp7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-13 00:48:23 +0000 UTC FinishedAt: 2026-09-13 00:48:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgxp7[2] Phase: Succeeded StartedAt: 2026-09-13 00:48:23 +0000 UTC FinishedAt: 2026-09-13 04:29:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-13 00:48:23 +0000 UTC FinishedAt: 2026-09-13 04:29:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-13 00:48:23 +0000 UTC FinishedAt: 2026-09-13 00:48:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-13 00:48:23 +0000 UTC FinishedAt: 2026-09-13 00:48:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkgxp7/series-workflowkgxp7-convert-artifact-520342994/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-13 00:48:33 +0000 UTC FinishedAt: 2026-09-13 01:04:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-13 00:48:33 +0000 UTC FinishedAt: 2026-09-13 01:04:26 +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:*47eb90f2-1c85-4c57-ae0e-9e60fd50a2ba,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-workflowkgxp7/series-workflowkgxp7-convert-artifact-520342994/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": "e676ea3f-215f-4351-b1b9-778700d1bd3b", "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-workflowkgxp7/series-workflowkgxp7-build-action-438518352/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-13 00:48:33 +0000 UTC FinishedAt: 2026-09-13 01:04:16 +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:*47eb90f2-1c85-4c57-ae0e-9e60fd50a2ba,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-workflowkgxp7/series-workflowkgxp7-convert-artifact-520342994/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": "e676ea3f-215f-4351-b1b9-778700d1bd3b", "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-workflowkgxp7/series-workflowkgxp7-build-action-438518352/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-13 01:04:26 +0000 UTC FinishedAt: 2026-09-13 01:04:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-13 01:04:26 +0000 UTC FinishedAt: 2026-09-13 01:04:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-13 01:04:26 +0000 UTC FinishedAt: 2026-09-13 01:04:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-13 01:04:26 +0000 UTC FinishedAt: 2026-09-13 01:04:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkgxp7/series-workflowkgxp7-convert-artifact-3675487213/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-13 01:04:36 +0000 UTC FinishedAt: 2026-09-13 01:06:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-13 01:04:36 +0000 UTC FinishedAt: 2026-09-13 01:06:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e676ea3f-215f-4351-b1b9-778700d1bd3b,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-workflowkgxp7/series-workflowkgxp7-build-action-438518352/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-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-13 01:06:30 +0000 UTC FinishedAt: 2026-09-13 01:06:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-13 01:06:30 +0000 UTC FinishedAt: 2026-09-13 01:06:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-13 01:06:30 +0000 UTC FinishedAt: 2026-09-13 01:22:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-13 01:06:30 +0000 UTC FinishedAt: 2026-09-13 01:22:51 +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:*47eb90f2-1c85-4c57-ae0e-9e60fd50a2ba,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-workflowkgxp7/series-workflowkgxp7-convert-artifact-3675487213/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": "372cb6d8-fb29-454a-90c2-7bc6755f4670", "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-workflowkgxp7/series-workflowkgxp7-build-action-796536137/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-13 01:06:30 +0000 UTC FinishedAt: 2026-09-13 01:22:41 +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:*47eb90f2-1c85-4c57-ae0e-9e60fd50a2ba,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-workflowkgxp7/series-workflowkgxp7-convert-artifact-3675487213/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": "372cb6d8-fb29-454a-90c2-7bc6755f4670", "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-workflowkgxp7/series-workflowkgxp7-build-action-796536137/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-13 01:22:51 +0000 UTC FinishedAt: 2026-09-13 01:22:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-13 01:22:51 +0000 UTC FinishedAt: 2026-09-13 01:22:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-13 01:22:51 +0000 UTC FinishedAt: 2026-09-13 01:24:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-13 01:22:51 +0000 UTC FinishedAt: 2026-09-13 01:24:36 +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:*372cb6d8-fb29-454a-90c2-7bc6755f4670,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-workflowkgxp7/series-workflowkgxp7-build-action-796536137/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-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-13 01:24:46 +0000 UTC FinishedAt: 2026-09-13 04:29:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-13 01:24:46 +0000 UTC FinishedAt: 2026-09-13 04:29:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"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:*e676ea3f-215f-4351-b1b9-778700d1bd3b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*372cb6d8-fb29-454a-90c2-7bc6755f4670,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-workflowkgxp7/series-workflowkgxp7-build-action-438518352/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-workflowkgxp7/series-workflowkgxp7-build-action-796536137/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-13 01:24:46 +0000 UTC FinishedAt: 2026-09-13 01:24:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-13 01:24:46 +0000 UTC FinishedAt: 2026-09-13 01:24:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"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-workflowkgxp7/series-workflowkgxp7-convert-artifact-2390116178/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-13 01:24:46 +0000 UTC FinishedAt: 2026-09-13 01:24:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-13 01:24:46 +0000 UTC FinishedAt: 2026-09-13 01:24:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-13 01:24:46 +0000 UTC FinishedAt: 2026-09-13 01:24:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-13 01:24:56 +0000 UTC FinishedAt: 2026-09-13 04:29:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgxp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pppoatm_send","pppoatm_assign_vcc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","PPP","PPPOATM"],"series_id":"426008ed-0e92-4a87-a2f5-c0563868a975","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-13 01:24:56 +0000 UTC FinishedAt: 2026-09-13 04:29:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e676ea3f-215f-4351-b1b9-778700d1bd3b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*372cb6d8-fb29-454a-90c2-7bc6755f4670,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-workflowkgxp7/series-workflowkgxp7-build-action-438518352/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-workflowkgxp7/series-workflowkgxp7-build-action-796536137/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-workflowkgxp7/series-workflowkgxp7-convert-artifact-2390116178/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}