Name: series-workflow2794c Phase: Succeeded StartedAt: 2026-09-01 02:54:10 +0000 UTC FinishedAt: 2026-09-01 07:03:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2794c[0] Phase: Succeeded StartedAt: 2026-09-01 02:54:10 +0000 UTC FinishedAt: 2026-09-01 03:13:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2794c[0].run-triage Phase: Succeeded StartedAt: 2026-09-01 02:54:10 +0000 UTC FinishedAt: 2026-09-01 03:13:53 +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": "7b120a771943ffc3cbce787daecdd23eccb0505f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING", "INET", "IPV6", "NET_CORE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7b120a771943ffc3cbce787daecdd23eccb0505f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING", "INET", "IPV6", "NET_CORE" ], "series_id": "dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "bond_xmit_alb_slave_get", "bond_xmit_tlb_slave_get", "bond_alb_xmit", "bond_tlb_xmit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O05FVF9DT1JFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Ym9uZF94bWl0X2FsYl9zbGF2ZV9nZXQmIzM0OywKICAgICYjMzQ7Ym9uZF94bWl0X3RsYl9zbGF2ZV9nZXQmIzM0OywKICAgICYjMzQ7Ym9uZF9hbGJfeG1pdCYjMzQ7LAogICAgJiMzNDtib25kX3RsYl94bWl0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGFsYl9kZXRlcm1pbmVfbmQoKWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY2AgdG8gY29tcHV0ZSB0aGUgSUNNUHY2IGhlYWRlciBsb2NhdGlvbiBkaXJlY3RseSBmb2xsb3dpbmcgdGhlIElQdjYgaGVhZGVyIChgKGNvbnN0IHN0cnVjdCBpY21wNmhkciAqKShpcDZoZHIgJiM0MzsgMSlgKSBpbnN0ZWFkIG9mIGludm9raW5nIGBpY21wNl9oZHIoc2tiKWAgKHdoaWNoIHJlbGllcyBvbiBgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKWAgYmVpbmcgaW5pdGlhbGl6ZWQpLiBJdCBhbHNvIGRyb3BzIGFuIHVudXNlZCBgYm9uZGAgcGFyYW1ldGVyLlxuXG5UaGUgcGFja2V0IHBheWxvYWQgYnl0ZXMgcmVhZCBieSB0aGlzIGZ1bmN0aW9uIGFyZSB2ZXJpZmllZCB0byBleGlzdCBpbiB0aGUgbGluZWFyIGJ1ZmZlciB1c2luZyBgcHNrYl9uZXR3b3JrX21heV9wdWxsKClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIEFueSBwb3RlbnRpYWwgYnVmZmVyIGJvdW5kcyBvciBza2IgZGVyZWZlcmVuY2UgaXNzdWVzIGluIHRoaXMgcGF0aCBhcmUgY292ZXJlZCBieSBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHBhY2tldCBoZWFkZXIgcGFyc2luZyBmb3IgSVB2NiBOZWlnaGJvciBEaXNjb3ZlcnkgKE5EKSBwYWNrZXRzIGR1cmluZyB0cmFuc21pdCBsb2FkIGJhbGFuY2luZyBpbiBib25kaW5nIEFMQiBhbmQgVExCIG1vZGVzIChhbGJfZGV0ZXJtaW5lX25kKS4gUHJldmlvdXNseSwgaXQgdXNlZCBpY21wNl9oZHIoc2tiKSAod2hpY2ggcmVsaWVzIG9uIHNrYl90cmFuc3BvcnRfaGVhZGVyLCBub3QgbmVjZXNzYXJpbHkgc2V0IG9uIHRoZSBUWCBwYXRoKSBhbmQgZGlkbiYjMzk7dCByZWxvYWQgdGhlIElQdjYgaGVhZGVyIHBvaW50ZXIgYWZ0ZXIgcHNrYl9uZXR3b3JrX21heV9wdWxsIHJlYWxsb2NhdGlvbnMuIFRoaXMgZnVuY3Rpb25hbCBmaXggYWZmZWN0cyBwYWNrZXQgdHJhbnNtaXNzaW9uIG92ZXIgYm9uZGluZyB2aXJ0dWFsIGludGVyZmFjZXMgYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDM6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkZDhkNjI1ODgzYzczZTNhMDgxMDJkODEzOTQxNjI1YWIyZjE4OWI0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAwMzoxMTozMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbmluZGV4IDgzOWY3NDgyZGMxODIuLjUwNzNhZWViYTZjOTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xuQEAgLTEyODEsMTAgJiM0MzsxMjgxLDEwIEBAIHN0YXRpYyBpbnQgYWxiX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdm9pZCAqYWRkcilcbiB9XG4gXG4gLyogZGV0ZXJtaW5lIGlmIHRoZSBwYWNrZXQgaXMgTkEgb3IgTlMgKi9cbi1zdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKVxuJiM0MztzdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IGlwdjZoZHIgKmlwNmhkcjtcbi1cdHN0cnVjdCBpY21wNmhkciAqaGRyO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoZHI7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGljbXA2aGRyICpoZHI7XG4gXG4gXHRpZiAoIXBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZigqaXA2aGRyKSkpXG4gXHRcdHJldHVybiB0cnVlO1xuQEAgLTEyOTYsNyAmIzQzOzEyOTYsOCBAQCBzdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKVxuIFx0aWYgKCFwc2tiX25ldHdvcmtfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwNmhkcikgJiM0Mzsgc2l6ZW9mKCpoZHIpKSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRoZHIgPSBpY21wNl9oZHIoc2tiKTtcbiYjNDM7XHRpcDZoZHIgPSBpcHY2X2hkcihza2IpO1xuJiM0MztcdGhkciA9IChjb25zdCBzdHJ1Y3QgaWNtcDZoZHIgKikoaXA2aGRyICYjNDM7IDEpO1xuIFx0cmV0dXJuIGhkci1cdTAwM2VpY21wNl90eXBlID09IE5ESVNDX05FSUdIQk9VUl9BRFZFUlRJU0VNRU5UIHx8XG4gXHRcdGhkci1cdTAwM2VpY21wNl90eXBlID09IE5ESVNDX05FSUdIQk9VUl9TT0xJQ0lUQVRJT047XG4gfVxuQEAgLTEzODEsNyAmIzQzOzEzODIsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuIFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cdTAwM2VoX2Rlc3QpKSB7XG4gXHRcdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG4gXHRcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4tXHRcdFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiLCBib25kKSlcbiYjNDM7XHRcdFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiKSlcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGZhbGx0aHJvdWdoO1xuIFx0XHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbkBAIC0xNDY3LDcgJiM0MzsxNDY4LDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuLVx0XHRpZiAoYWxiX2RldGVybWluZV9uZChza2IsIGJvbmQpKSB7XG4mIzQzO1x0XHRpZiAoYWxiX2RldGVybWluZV9uZChza2IpKSB7XG4gXHRcdFx0ZG9fdHhfYmFsYW5jZSA9IGZhbHNlO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDM6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Qk9ORElORyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7TkVUX0NPUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtib25kX3htaXRfYWxiX3NsYXZlX2dldCYjMzQ7LAogICAgJiMzNDtib25kX3htaXRfdGxiX3NsYXZlX2dldCYjMzQ7LAogICAgJiMzNDtib25kX2FsYl94bWl0JiMzNDssCiAgICAmIzM0O2JvbmRfdGxiX3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcGFja2V0IGhlYWRlciBwYXJzaW5nIGZvciBJUHY2IE5laWdoYm9yIERpc2NvdmVyeSAoTkQpIHBhY2tldHMgZHVyaW5nIHRyYW5zbWl0IGxvYWQgYmFsYW5jaW5nIGluIGJvbmRpbmcgQUxCIGFuZCBUTEIgbW9kZXMgKGFsYl9kZXRlcm1pbmVfbmQpLiBQcmV2aW91c2x5LCBpdCB1c2VkIGljbXA2X2hkcihza2IpICh3aGljaCByZWxpZXMgb24gc2tiX3RyYW5zcG9ydF9oZWFkZXIsIG5vdCBuZWNlc3NhcmlseSBzZXQgb24gdGhlIFRYIHBhdGgpIGFuZCBkaWRuJiMzOTt0IHJlbG9hZCB0aGUgSVB2NiBoZWFkZXIgcG9pbnRlciBhZnRlciBwc2tiX25ldHdvcmtfbWF5X3B1bGwgcmVhbGxvY2F0aW9ucy4gVGhpcyBmdW5jdGlvbmFsIGZpeCBhZmZlY3RzIHBhY2tldCB0cmFuc21pc3Npb24gb3ZlciBib25kaW5nIHZpcnR1YWwgaW50ZXJmYWNlcyBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRkOGQ2MjU4ODNjNzNlM2EwODEwMmQ4MTM5NDE2MjVhYjJmMTg5YjQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDAzOjExOjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCmluZGV4IDgzOWY3NDgyZGMxODIuLjUwNzNhZWViYTZjOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKQEAgLTEyODEsMTAgJiM0MzsxMjgxLDEwIEBAIHN0YXRpYyBpbnQgYWxiX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdm9pZCAqYWRkcikKIH0KIAogLyogZGV0ZXJtaW5lIGlmIHRoZSBwYWNrZXQgaXMgTkEgb3IgTlMgKi8KLXN0YXRpYyBib29sIGFsYl9kZXRlcm1pbmVfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQpCiYjNDM7c3RhdGljIGJvb2wgYWxiX2RldGVybWluZV9uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBpcHY2aGRyICppcDZoZHI7Ci0Jc3RydWN0IGljbXA2aGRyICpoZHI7CiYjNDM7CWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoZHI7CiYjNDM7CWNvbnN0IHN0cnVjdCBpY21wNmhkciAqaGRyOwogCiAJaWYgKCFwc2tiX25ldHdvcmtfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwNmhkcikpKQogCQlyZXR1cm4gdHJ1ZTsKQEAgLTEyOTYsNyAmIzQzOzEyOTYsOCBAQCBzdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKQogCWlmICghcHNrYl9uZXR3b3JrX21heV9wdWxsKHNrYiwgc2l6ZW9mKCppcDZoZHIpICYjNDM7IHNpemVvZigqaGRyKSkpCiAJCXJldHVybiB0cnVlOwogCi0JaGRyID0gaWNtcDZfaGRyKHNrYik7CiYjNDM7CWlwNmhkciA9IGlwdjZfaGRyKHNrYik7CiYjNDM7CWhkciA9IChjb25zdCBzdHJ1Y3QgaWNtcDZoZHIgKikoaXA2aGRyICYjNDM7IDEpOwogCXJldHVybiBoZHItJmd0O2ljbXA2X3R5cGUgPT0gTkRJU0NfTkVJR0hCT1VSX0FEVkVSVElTRU1FTlQgfHwKIAkJaGRyLSZndDtpY21wNl90eXBlID09IE5ESVNDX05FSUdIQk9VUl9TT0xJQ0lUQVRJT047CiB9CkBAIC0xMzgxLDcgJiM0MzsxMzgyLDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwKIAlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLSZndDtoX2Rlc3QpKSB7CiAJCXN3aXRjaCAoc2tiLSZndDtwcm90b2NvbCkgewogCQljYXNlIGh0b25zKEVUSF9QX0lQVjYpOgotCQkJaWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiLCBib25kKSkKJiM0MzsJCQlpZiAoYWxiX2RldGVybWluZV9uZChza2IpKQogCQkJCWJyZWFrOwogCQkJZmFsbHRocm91Z2g7CiAJCWNhc2UgaHRvbnMoRVRIX1BfSVApOgpAQCAtMTQ2Nyw3ICYjNDM7MTQ2OCw3IEBAIHN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsCiAJCQlicmVhazsKIAkJfQogCi0JCWlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYiwgYm9uZCkpIHsKJiM0MzsJCWlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYikpIHsKIAkJCWRvX3R4X2JhbGFuY2UgPSBmYWxzZTsKIAkJCWJyZWFrOwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NDMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA4MTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgYm9uZF9hbGIuY2AgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgcGF0Y2ggaXMgdGFyZ2V0aW5nIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgLCB3aGljaCBpbW1lZGlhdGVseSBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIEFjdGl2ZS1CYWNrdXAgKEFMQikgYm9uZGluZywgc3BlY2lmaWNhbGx5IHRoZSBsb2dpYyBmb3IgZGV0ZXJtaW5pbmcgTmVpZ2hib3IgRGlzY292ZXJ5IHBhY2tldHMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgYW5kIHN5bWJvbHMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCwgYnV0IGxldCYjMzk7cyByZWFkIHRoZSBwYXRjaCBmaXJzdCB0byBnZXQgYSBncmFzcCBvZiB0aGUgaW50ZW50LgoKQWxyaWdodCwgdGhlIHByaW1hcnkgbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiB0aGUgYGFsYl9kZXRlcm1pbmVfbmRgIGZ1bmN0aW9uLiBMb29raW5nIGF0IHRoZSBkaWZmLCBJIHNlZSB0aGUgY29yZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGhvdyB0aGUgYGljbXA2aGRyYCBpcyBhY2Nlc3NlZCBhZnRlciBhIHBvdGVudGlhbCBgcHNrYl9uZXR3b3JrX21heV9wdWxsYCBjYWxsLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgYmVjYXVzZSBjYWxsaW5nIGBwc2tiX25ldHdvcmtfbWF5X3B1bGxgIG1pZ2h0IHJlYWxsb2NhdGUgdGhlIGBza2ItJmd0O2hlYWRgLCBpbnZhbGlkYXRpbmcgdGhlIHBvaW50ZXJzIGBpcDZoZHJgIGFuZCB0aGUgcmVzdWx0IG9mIHRoZSBgaWNtcDZfaGRyKHNrYilgIG1hY3JvLiBUaGUgbWFjcm8gdXNlcyBgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKWAsIGJ1dCBpZiBgcHNrYl9uZXR3b3JrX21heV9wdWxsYCBoYXMgcmVhbGxvY2F0ZWQgdGhlIGhlYWRlcnMgdGhlbiB0aGUgdHJhbnNwb3J0IGhlYWRlciBtaWdodCBub3QgYmUgcHJvcGVybHkgc2V0LCBhbmQgdGhlIGBpY21wNl9oZHIoc2tiKWAgbWF5IGJlIHJlZmVyZW5jaW5nIGluY29ycmVjdCBtZW1vcnkuCgpFc3NlbnRpYWxseSwgdGhlIGZpeCBhdm9pZHMgdGhlIHBvdGVudGlhbCBkb3VibGUgZGVyZWZlcmVuY2Ugb2YgYGlwNmhkcmAgYW5kIG5vdyBjb3JyZWN0bHkgZGVyaXZlcyBgaGRyYCBmcm9tIHRoZSBwb3N0LWBwc2tiX25ldHdvcmtfbWF5X3B1bGxgIGxvY2F0aW9uIG9mIGBpcDZoZHJgLiBFeGNlbGxlbnQsIHRoaXMgaXMgYSBjbGVhbiBhbmQgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgYSBzdWJ0bGUgbWVtb3J5IHNhZmV0eSBpc3N1ZS4KCk5vdywgbGV0IG1lIGp1c3QgY3Jvc3MtcmVmZXJlbmNlIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBib25kX2FsYi5jYCB0byBjb25maXJtIHRoZSBmaXggaXMgbG9jYWxpemVkLCBhbmQgbWFrZSBzdXJlIHRoYXQgaXQmIzM5O3MgaW4gdGhlIHJpZ2h0IHNwb3QsIGFuZCBub3QgaW5kaWNhdGluZyBhbiBpc3N1ZSBlbHNld2hlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDM6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjc1Olx0XHRcdFx0XHQgIHJvbGxiYWNrX3NsYXZlLVx1MDAzZWRldi1cdTAwM2VhZGRyX2xlbik7XG4xMjc2Olx0XHRcdGRldl9zZXRfbWFjX2FkZHJlc3Mocm9sbGJhY2tfc2xhdmUtXHUwMDNlZGV2LCBcdTAwMjZzcywgTlVMTCk7XG4xMjc3Olx0XHRcdGRldl9hZGRyX3NldChyb2xsYmFja19zbGF2ZS1cdTAwM2VkZXYsIHRtcF9hZGRyKTtcbjEyNzg6XHRcdH1cbjEyNzk6XHRcbjEyODA6XHRcdHJldHVybiByZXM7XG4xMjgxOlx0fVxuMTI4MjpcdFxuMTI4MzpcdC8qIGRldGVybWluZSBpZiB0aGUgcGFja2V0IGlzIE5BIG9yIE5TICovXG4xMjg0Olx0c3RhdGljIGJvb2wgYWxiX2RldGVybWluZV9uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTI4NTpcdHtcbjEyODY6XHRcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoZHI7XG4xMjg3Olx0XHRjb25zdCBzdHJ1Y3QgaWNtcDZoZHIgKmhkcjtcbjEyODg6XHRcbjEyODk6XHRcdGlmICghcHNrYl9uZXR3b3JrX21heV9wdWxsKHNrYiwgc2l6ZW9mKCppcDZoZHIpKSlcbjEyOTA6XHRcdFx0cmV0dXJuIHRydWU7XG4xMjkxOlx0XG4xMjkyOlx0XHRpcDZoZHIgPSBpcHY2X2hkcihza2IpO1xuMTI5MzpcdFx0aWYgKGlwNmhkci1cdTAwM2VuZXh0aGRyICE9IElQUFJPVE9fSUNNUFY2KVxuMTI5NDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMjk1Olx0XG4xMjk2Olx0XHRpZiAoIXBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZigqaXA2aGRyKSAmIzQzOyBzaXplb2YoKmhkcikpKVxuMTI5NzpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjEyOTg6XHRcbjEyOTk6XHRcdGlwNmhkciA9IGlwdjZfaGRyKHNrYik7XG4xMzAwOlx0XHRoZHIgPSAoY29uc3Qgc3RydWN0IGljbXA2aGRyICopKGlwNmhkciAmIzQzOyAxKTtcbjEzMDE6XHRcdHJldHVybiBoZHItXHUwMDNlaWNtcDZfdHlwZSA9PSBORElTQ19ORUlHSEJPVVJfQURWRVJUSVNFTUVOVCB8fFxuMTMwMjpcdFx0XHRoZHItXHUwMDNlaWNtcDZfdHlwZSA9PSBORElTQ19ORUlHSEJPVVJfU09MSUNJVEFUSU9OO1xuMTMwMzpcdH1cbjEzMDQ6XHRcbjEzMDU6XHQvKioqKioqKioqKioqKioqKioqKioqKioqIGV4cG9ydGVkIGFsYiBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqL1xuMTMwNjpcdFxuMTMwNzpcdGludCBib25kX2FsYl9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kLCBpbnQgcmxiX2VuYWJsZWQpXG4xMzA4Olx0e1xuMTMwOTpcdFx0aW50IHJlcztcbjEzMTA6XHRcbjEzMTE6XHRcdHJlcyA9IHRsYl9pbml0aWFsaXplKGJvbmQpO1xuMTMxMjpcdFx0aWYgKHJlcylcbjEzMTM6XHRcdFx0cmV0dXJuIHJlcztcbjEzMTQ6XHRcbjEzMTU6XHRcdGlmIChybGJfZW5hYmxlZCkge1xuMTMxNjpcdFx0XHRyZXMgPSBybGJfaW5pdGlhbGl6ZShib25kKTtcbjEzMTc6XHRcdFx0aWYgKHJlcykge1xuMTMxODpcdFx0XHRcdHRsYl9kZWluaXRpYWxpemUoYm9uZCk7XG4xMzE5Olx0XHRcdFx0cmV0dXJuIHJlcztcbjEzMjA6XHRcdFx0fVxuMTMyMTpcdFx0XHRib25kLVx1MDAzZWFsYl9pbmZvLnJsYl9lbmFibGVkID0gMTtcbjEzMjI6XHRcdH0gZWxzZSB7XG4xMzIzOlx0XHRcdGJvbmQtXHUwMDNlYWxiX2luZm8ucmxiX2VuYWJsZWQgPSAwO1xuMTMyNDpcdFx0fVxuMTMyNTpcdFxuMTMyNjpcdFx0cmV0dXJuIDA7XG4xMzI3Olx0fVxuMTMyODpcdFxuMTMyOTpcdHZvaWQgYm9uZF9hbGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKVxuMTMzMDpcdHtcbjEzMzE6XHRcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcdTAwMjYoQk9ORF9BTEJfSU5GTyhib25kKSk7XG4xMzMyOlx0XG4xMzMzOlx0XHR0bGJfZGVpbml0aWFsaXplKGJvbmQpO1xuMTMzNDpcdFxuMTMzNTpcdFx0aWYgKGJvbmRfaW5mby1cdTAwM2VybGJfZW5hYmxlZClcbjEzMzY6XHRcdFx0cmxiX2RlaW5pdGlhbGl6ZShib25kKTtcbjEzMzc6XHR9XG4xMzM4Olx0XG4xMzM5Olx0c3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4xMzQwOlx0XHRcdFx0XHQgICAgc3RydWN0IHNsYXZlICp0eF9zbGF2ZSlcbjEzNDE6XHR7XG4xMzQyOlx0XHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xuMTM0MzpcdFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7XG4xMzQ0Olx0XG4xMzQ1Olx0XHRpZiAoIXR4X3NsYXZlKSB7XG4xMzQ2Olx0XHRcdC8qIHVuYmFsYW5jZWQgb3IgdW5hc3NpZ25lZCwgc2VuZCB0aHJvdWdoIHByaW1hcnkgKi9cbjEzNDc6XHRcdFx0dHhfc2xhdmUgPSByY3VfZGVyZWZlcmVuY2UoYm9uZC1cdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSk7XG4xMzQ4Olx0XHRcdGlmIChib25kLVx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYilcbjEzNDk6XHRcdFx0XHRib25kX2luZm8tXHUwMDNldW5iYWxhbmNlZF9sb2FkICYjNDM7PSBza2ItXHUwMDNlbGVuO1xuMTM1MDpcdFx0fVxuMTM1MTpcdFxuMTM1MjpcdFx0aWYgKHR4X3NsYXZlIFx1MDAyNlx1MDAyNiBib25kX3NsYXZlX2Nhbl90eCh0eF9zbGF2ZSkpIHtcbjEzNTM6XHRcdFx0aWYgKHR4X3NsYXZlICE9IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLVx1MDAzZWN1cnJfYWN0aXZlX3NsYXZlKSkge1xuMTM1NDpcdFx0XHRcdGV0aGVyX2FkZHJfY29weShldGhfZGF0YS1cdTAwM2VoX3NvdXJjZSxcbjEzNTU6XHRcdFx0XHRcdFx0dHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKTtcbjEzNTY6XHRcdFx0fVxuMTM1NzpcdFxuMTM1ODpcdFx0XHRyZXR1cm4gYm9uZF9kZXZfcXVldWVfeG1pdChib25kLCBza2IsIHR4X3NsYXZlLVx1MDAzZWRldik7XG4xMzU5Olx0XHR9XG4xMzYwOlx0XG4xMzYxOlx0XHRpZiAodHhfc2xhdmUgXHUwMDI2XHUwMDI2IGJvbmQtXHUwMDNlcGFyYW1zLnRsYl9keW5hbWljX2xiKSB7XG4xMzYyOlx0XHRcdHNwaW5fbG9jayhcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4xMzYzOlx0XHRcdF9fdGxiX2NsZWFyX3NsYXZlKGJvbmQsIHR4X3NsYXZlLCAwKTtcbjEzNjQ6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2Ym9uZC1cdTAwM2Vtb2RlX2xvY2spO1xuMTM2NTpcdFx0fVxuMTM2NjpcdFxuMTM2NzpcdFx0Lyogbm8gc3VpdGFibGUgaW50ZXJmYWNlLCBmcmFtZSBub3Qgc2VudCAqL1xuMTM2ODpcdFx0cmV0dXJuIGJvbmRfdHhfZHJvcChib25kLVx1MDAzZWRldiwgc2tiKTtcbjEzNjk6XHR9XG4xMzcwOlx0XG4xMzcxOlx0c3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbjEzNzI6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4xMzczOlx0e1xuMTM3NDpcdFx0c3RydWN0IHNsYXZlICp0eF9zbGF2ZSA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI1OAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqRGVlcGVyIERpdmUgaW50byBCb25kZWQgVHJhbnNtaXNzaW9uIGFuZCBUTEIvQUxCIFNsYXZlIFJldHJpZXZhbCoqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIGhvdyB0aGVzZSB0cmFuc21pc3Npb24gZnVuY3Rpb25zIChgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgIGFuZCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgKSBhbmQgdGhlIHdheSB0aGV5JiMzOTtyZSB1c2VkLiBJJiMzOTt2ZSBnb3QgYSBwcmV0dHkgc29saWQgZ3Jhc3Agb24gdGhlc2UgdG9waWNzIGluIGdlbmVyYWwsIGJ1dCBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdWJ0bGUgaW50ZXJhY3Rpb25zIG9yIGVkZ2UgY2FzZXMgSSYjMzk7bSBtaXNzaW5nIHJlbGF0ZWQgdG8gdGhlIGltcGxlbWVudGF0aW9uLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBtZXRob2RpY2FsbHkgdHJhY2UgYWxsIG9mIHRoZSBjYWxsZXJzIG9mIHRoZXNlIG1ldGhvZHMgdG8gZW5zdXJlIEkgYWNjb3VudCBmb3IgYWxsIGNvZGUgcGF0aHMuIFRoZSBmdW5jdGlvbnMgdGhlbXNlbHZlcyBzZWVtIGZpbmUsIGJ1dCBJJiMzOTt2ZSBsZWFybmVkIHRoYXQgYSBnb29kIGVuZ2luZWVyIG5lZWRzIHRvIGZvY3VzIG9uIHVzZSBjYXNlcyBqdXN0IGFzIGNhcmVmdWxseSBhcyB0aGUgaW1wbGVtZW50YXRpb25zLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aG9zZSBmdW5jdGlvbnMgYW5kIHRoZWlyIGNhbGxlcnMsIGFuZCB0aG9yb3VnaGx5IHJldmlldyB0aGUgcmVsYXRlZCBtb2R1bGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM3MDpcdFxuMTM3MTpcdHN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4xMzcyOlx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTM3MzpcdHtcbjEzNzQ6XHRcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUgPSBOVUxMO1xuMTM3NTpcdFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XG4xMzc2Olx0XHR1MzIgaGFzaF9pbmRleDtcbjEzNzc6XHRcbjEzNzg6XHRcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4xMzc5Olx0XHRldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTtcbjEzODA6XHRcbjEzODE6XHRcdC8qIERvIG5vdCBUWCBiYWxhbmNlIGFueSBtdWx0aWNhc3Qgb3IgYnJvYWRjYXN0ICovXG4xMzgyOlx0XHRpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLVx1MDAzZWhfZGVzdCkpIHtcbjEzODM6XHRcdFx0c3dpdGNoIChza2ItXHUwMDNlcHJvdG9jb2wpIHtcbjEzODQ6XHRcdFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbjEzODU6XHRcdFx0XHRpZiAoYWxiX2RldGVybWluZV9uZChza2IpKVxuMTM4NjpcdFx0XHRcdFx0YnJlYWs7XG4xMzg3Olx0XHRcdFx0ZmFsbHRocm91Z2g7XG4xMzg4Olx0XHRcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuMTM4OTpcdFx0XHRcdGhhc2hfaW5kZXggPSBib25kX3htaXRfaGFzaChib25kLCBza2IpO1xuMTM5MDpcdFx0XHRcdGlmIChib25kLVx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYikge1xuMTM5MTpcdFx0XHRcdFx0dHhfc2xhdmUgPSB0bGJfY2hvb3NlX2NoYW5uZWwoYm9uZCxcbjEzOTI6XHRcdFx0XHRcdFx0XHRcdCAgICAgIGhhc2hfaW5kZXggXHUwMDI2IDB4RkYsXG4xMzkzOlx0XHRcdFx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlbGVuKTtcbjEzOTQ6XHRcdFx0XHR9IGVsc2Uge1xuMTM5NTpcdFx0XHRcdFx0c3RydWN0IGJvbmRfdXBfc2xhdmUgKnNsYXZlcztcbjEzOTY6XHRcdFx0XHRcdHVuc2lnbmVkIGludCBjb3VudDtcbjEzOTc6XHRcbjEzOTg6XHRcdFx0XHRcdHNsYXZlcyA9IHJjdV9kZXJlZmVyZW5jZShib25kLVx1MDAzZXVzYWJsZV9zbGF2ZXMpO1xuMTM5OTpcdFx0XHRcdFx0Y291bnQgPSBzbGF2ZXMgPyBSRUFEX09OQ0Uoc2xhdmVzLVx1MDAzZWNvdW50KSA6IDA7XG4xNDAwOlx0XHRcdFx0XHRpZiAobGlrZWx5KGNvdW50KSlcbjE0MDE6XHRcdFx0XHRcdFx0dHhfc2xhdmUgPSBzbGF2ZXMtXHUwMDNlYXJyW2hhc2hfaW5kZXggJVxuMTQwMjpcdFx0XHRcdFx0XHRcdFx0ICAgICAgIGNvdW50XTtcbjE0MDM6XHRcdFx0XHR9XG4xNDA0Olx0XHRcdFx0YnJlYWs7XG4xNDA1Olx0XHRcdH1cbjE0MDY6XHRcdH1cbjE0MDc6XHRcdHJldHVybiB0eF9zbGF2ZTtcbjE0MDg6XHR9XG4xNDA5Olx0XG4xNDEwOlx0bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXG4xNDExOlx0e1xuMTQxMjpcdFx0c3RydWN0IGJvbmRpbmcgKmJvbmQgPSBuZXRkZXZfcHJpdihib25kX2Rldik7XG4xNDEzOlx0XHRzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlO1xuMTQxNDpcdFxuMTQxNTpcdFx0dHhfc2xhdmUgPSBib25kX3htaXRfdGxiX3NsYXZlX2dldChib25kLCBza2IpO1xuMTQxNjpcdFx0cmV0dXJuIGJvbmRfZG9fYWxiX3htaXQoc2tiLCBib25kLCB0eF9zbGF2ZSk7XG4xNDE3Olx0fVxuMTQxODpcdFxuMTQxOTpcdHN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4xNDIwOlx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTQyMTpcdHtcbjE0MjI6XHRcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcdTAwMjYoQk9ORF9BTEJfSU5GTyhib25kKSk7XG4xNDIzOlx0XHRzdGF0aWMgY29uc3QgX19iZTMyIGlwX2JjYXN0ID0gaHRvbmwoMHhmZmZmZmZmZik7XG4xNDI0Olx0XHRzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlID0gTlVMTDtcbjE0MjU6XHRcdGNvbnN0IHU4ICpoYXNoX3N0YXJ0ID0gTlVMTDtcbjE0MjY6XHRcdGJvb2wgZG9fdHhfYmFsYW5jZSA9IHRydWU7XG4xNDI3Olx0XHRzdHJ1Y3QgZXRoaGRyICpldGhfZGF0YTtcbjE0Mjg6XHRcdHUzMiBoYXNoX2luZGV4ID0gMDtcbjE0Mjk6XHRcdGludCBoYXNoX3NpemUgPSAwO1xuMTQzMDpcdFxuMTQzMTpcdFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbjE0MzI6XHRcdGV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xuMTQzMzpcdFxuMTQzNDpcdFx0c3dpdGNoIChudG9ocyhza2ItXHUwMDNlcHJvdG9jb2wpKSB7XG4xNDM1Olx0XHRjYXNlIEVUSF9QX0lQOiB7XG4xNDM2Olx0XHRcdGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoO1xuMTQzNzpcdFxuMTQzODpcdFx0XHRpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoZXRoX2RhdGEtXHUwMDNlaF9kZXN0KSB8fFxuMTQzOTpcdFx0XHQgICAgIXBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSkpIHtcbjE0NDA6XHRcdFx0XHRkb190eF9iYWxhbmNlID0gZmFsc2U7XG4xNDQxOlx0XHRcdFx0YnJlYWs7XG4xNDQyOlx0XHRcdH1cbjE0NDM6XHRcdFx0aXBoID0gaXBfaGRyKHNrYik7XG4xNDQ0Olx0XHRcdGlmIChpcGgtXHUwMDNlZGFkZHIgPT0gaXBfYmNhc3QgfHwgaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fSUdNUCkge1xuMTQ0NTpcdFx0XHRcdGRvX3R4X2JhbGFuY2UgPSBmYWxzZTtcbjE0NDY6XHRcdFx0XHRicmVhaztcbjE0NDc6XHRcdFx0fVxuMTQ0ODpcdFx0XHRoYXNoX3N0YXJ0ID0gKGNoYXIgKilcdTAwMjYoaXBoLVx1MDAzZWRhZGRyKTtcbjE0NDk6XHRcdFx0aGFzaF9zaXplID0gc2l6ZW9mKGlwaC1cdTAwM2VkYWRkcik7XG4xNDUwOlx0XHRcdGJyZWFrO1xuMTQ1MTpcdFx0fVxuMTQ1MjpcdFx0Y2FzZSBFVEhfUF9JUFY2OiB7XG4xNDUzOlx0XHRcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoZHI7XG4xNDU0Olx0XG4xNDU1Olx0XHRcdC8qIElQdjYgZG9lc24mIzM5O3QgcmVhbGx5IHVzZSBicm9hZGNhc3QgbWFjIGFkZHJlc3MsIGJ1dCBsZWF2ZVxuMTQ1NjpcdFx0XHQgKiB0aGF0IGhlcmUganVzdCBpbiBjYXNlLlxuMTQ1NzpcdFx0XHQgKi9cbjE0NTg6XHRcdFx0aWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLVx1MDAzZWhfZGVzdCkpIHtcbjE0NTk6XHRcdFx0XHRkb190eF9iYWxhbmNlID0gZmFsc2U7XG4xNDYwOlx0XHRcdFx0YnJlYWs7XG4xNDYxOlx0XHRcdH1cbjE0NjI6XHRcbjE0NjM6XHRcdFx0LyogSVB2NiB1c2VzIGFsbC1ub2RlcyBtdWx0aWNhc3QgYXMgYW4gZXF1aXZhbGVudCB0b1xuMTQ2NDpcdFx0XHQgKiBicm9hZGNhc3RzIGluIElQdjQuXG4xNDY1Olx0XHRcdCAqL1xuMTQ2NjpcdFx0XHRpZiAoZXRoZXJfYWRkcl9lcXVhbF82NGJpdHMoZXRoX2RhdGEtXHUwMDNlaF9kZXN0LCBtYWNfdjZfYWxsbWNhc3QpKSB7XG4xNDY3Olx0XHRcdFx0ZG9fdHhfYmFsYW5jZSA9IGZhbHNlO1xuMTQ2ODpcdFx0XHRcdGJyZWFrO1xuMTQ2OTpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA0MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHByb21wdDoKCioqQW5hbHl6aW5nIGBib25kX2FsYi5jYCYjMzk7cyBBbGxvY2F0aW9uIExvZ2ljKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHRoZSByZXF1ZXN0IGlzIHRvIGxvb2sgYXQgbGluZXMgMTQ3MC0xNTAwIG9mIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgLiBUaGF0IGNodW5rIG9mIGNvZGUgc2hvdWxkIGJlIGtleSB0byBob3cgdGhlIEFjdGl2ZS1CYWNrdXAgTG9hZCBCYWxhbmNpbmcgKGFsYikgbW9kZSBhbGxvY2F0ZXMgdHJhZmZpYyBhY3Jvc3MgdGhlIGJvbmRlZCBpbnRlcmZhY2VzLiBJJiMzOTttIGFzc3VtaW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcGFja2V0IGRpc3RyaWJ1dGlvbiwgbGlrZWx5IHJlbGF0ZWQgdG8gTUFDIGFkZHJlc3MgYXNzaWdubWVudCBvciBoYXNoIGNhbGN1bGF0aW9ucyBpZiBpdCYjMzk7cyBkeW5hbWljLgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IGl0IGlkZW50aWZpZXMgdGhlIGFjdGl2ZSBsaW5rLCBhbmQgdGhlbiBob3cgaXQgZGVjaWRlcyB3aGljaCBwYWNrZXRzIGdvIHRvIHRoYXQgYWN0aXZlIGxpbmsuIElzIGl0IGJhc2VkIG9uIGEgcm91bmQtcm9iaW4/IElzIHRoZXJlIHNvbWUga2luZCBvZiAmIzM0O2xlYXN0IGxvYWRlZCYjMzQ7IGhldXJpc3RpYyBpbiBwbGF5LCBldmVuIGlmIGl0JiMzOTtzIGJhc2ljPyBBcmUgdGhlcmUgYW55IGluZGljYXRpb25zIG9mIGxpbmsgbW9uaXRvcmluZyBvciBmYWlsb3ZlciBtZWNoYW5pc21zIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBzbmlwcGV0PyBJJiMzOTtsbCBuZWVkIHRvIHBhcnNlIHRoZSBjb250cm9sIGZsb3cuIFRoZSBjb21tZW50cyB3aWxsIGJlIGNyaXRpY2FsIGhlcmUsIHNvIEkmIzM5O2xsIGhvcGUgdGhlIGRldmVsb3BlcnMgd2VyZSBiZWluZyBkaWxpZ2VudC4KCkFuZCBtb3N0IGxpa2VseSwgSSB3b3VsZCBiZSBsb29raW5nIGZvciBhbnkgc2lnbnMgb2YgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIGJ1Z3MgdGhhdCBtaWdodCBoYXZlIGNyb3BwZWQgdXAgb3ZlciB0aGUgY29kZSYjMzk7cyBsaWZldGltZSwgZXNwZWNpYWxseSBpZiBpdCBkZWFscyB3aXRoIGhpZ2gtdm9sdW1lIG5ldHdvcmtzIG9yIHBhY2tldC1pbnRlbnNpdmUgYXBwbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDcwOlx0XG4xNDcxOlx0XHRcdGlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYikpIHtcbjE0NzI6XHRcdFx0XHRkb190eF9iYWxhbmNlID0gZmFsc2U7XG4xNDczOlx0XHRcdFx0YnJlYWs7XG4xNDc0Olx0XHRcdH1cbjE0NzU6XHRcbjE0NzY6XHRcdFx0LyogVGhlIElQdjYgaGVhZGVyIGlzIHB1bGxlZCBieSBhbGJfZGV0ZXJtaW5lX25kICovXG4xNDc3Olx0XHRcdC8qIEFkZGl0aW9uYWxseSwgREFEIHByb2JlcyBzaG91bGQgbm90IGJlIHR4LWJhbGFuY2VkIGFzIHRoYXRcbjE0Nzg6XHRcdFx0ICogd2lsbCBsZWFkIHRvIGZhbHNlIHBvc2l0aXZlcyBmb3IgZHVwbGljYXRlIGFkZHJlc3NlcyBhbmRcbjE0Nzk6XHRcdFx0ICogcHJldmVudCBhZGRyZXNzIGNvbmZpZ3VyYXRpb24gZnJvbSB3b3JraW5nLlxuMTQ4MDpcdFx0XHQgKi9cbjE0ODE6XHRcdFx0aXA2aGRyID0gaXB2Nl9oZHIoc2tiKTtcbjE0ODI6XHRcdFx0aWYgKGlwdjZfYWRkcl9hbnkoXHUwMDI2aXA2aGRyLVx1MDAzZXNhZGRyKSkge1xuMTQ4MzpcdFx0XHRcdGRvX3R4X2JhbGFuY2UgPSBmYWxzZTtcbjE0ODQ6XHRcdFx0XHRicmVhaztcbjE0ODU6XHRcdFx0fVxuMTQ4NjpcdFxuMTQ4NzpcdFx0XHRoYXNoX3N0YXJ0ID0gKGNoYXIgKilcdTAwMjZpcDZoZHItXHUwMDNlZGFkZHI7XG4xNDg4Olx0XHRcdGhhc2hfc2l6ZSA9IHNpemVvZihpcDZoZHItXHUwMDNlZGFkZHIpO1xuMTQ4OTpcdFx0XHRicmVhaztcbjE0OTA6XHRcdH1cbjE0OTE6XHRcdGNhc2UgRVRIX1BfQVJQOlxuMTQ5MjpcdFx0XHRkb190eF9iYWxhbmNlID0gZmFsc2U7XG4xNDkzOlx0XHRcdGlmIChib25kX2luZm8tXHUwMDNlcmxiX2VuYWJsZWQpXG4xNDk0Olx0XHRcdFx0dHhfc2xhdmUgPSBybGJfYXJwX3htaXQoc2tiLCBib25kKTtcbjE0OTU6XHRcdFx0YnJlYWs7XG4xNDk2Olx0XHRkZWZhdWx0OlxuMTQ5NzpcdFx0XHRkb190eF9iYWxhbmNlID0gZmFsc2U7XG4xNDk4Olx0XHRcdGJyZWFrO1xuMTQ5OTpcdFx0fVxuMTUwMDpcdFxuMTUwMTpcdFx0aWYgKGRvX3R4X2JhbGFuY2UpIHtcbjE1MDI6XHRcdFx0aWYgKGJvbmQtXHUwMDNlcGFyYW1zLnRsYl9keW5hbWljX2xiKSB7XG4xNTAzOlx0XHRcdFx0aGFzaF9pbmRleCA9IF9zaW1wbGVfaGFzaChoYXNoX3N0YXJ0LCBoYXNoX3NpemUpO1xuMTUwNDpcdFx0XHRcdHR4X3NsYXZlID0gdGxiX2Nob29zZV9jaGFubmVsKGJvbmQsIGhhc2hfaW5kZXgsIHNrYi1cdTAwM2VsZW4pO1xuMTUwNTpcdFx0XHR9IGVsc2Uge1xuMTUwNjpcdFx0XHRcdC8qXG4xNTA3Olx0XHRcdFx0ICogZG9fdHhfYmFsYW5jZSBtZWFucyB3ZSBhcmUgZnJlZSB0byBzZWxlY3QgdGhlIHR4X3NsYXZlXG4xNTA4Olx0XHRcdFx0ICogU28gd2UgZG8gZXhhY3RseSB3aGF0IHRsYiB3b3VsZCBkbyBmb3IgaGFzaCBzZWxlY3Rpb25cbjE1MDk6XHRcdFx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTc0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBib25kaW5nIGRyaXZlciBjb25maWd1cmF0aW9uLgoKKipFeGFtaW5pbmcgQm9uZGluZyBEcml2ZXIgS2NvbmZpZyBPcHRpb25zKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIEtjb25maWcgb3B0aW9ucyBnb3Zlcm4gdGhlIGJlaGF2aW9yIG9mIHRoZSBib25kaW5nIGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gSSYjMzk7bGwgc3RhcnQgYnkgc2VhcmNoaW5nIHdpdGhpbiB0aGUgb2J2aW91czogYGRyaXZlcnMvbmV0L2JvbmRpbmcvS2NvbmZpZ2AuIElmIHRoYXQgZG9lc24mIzM5O3QgeWllbGQgZXZlcnl0aGluZywgSSYjMzk7bGwgYnJvYWRlbiB0aGUgbmV0IGEgYml0IGFuZCBjaGVjayBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgZ2xvYmFsIG5ldHdvcmstcmVsYXRlZCBvcHRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGJvbmRpbmcgYmVoYXZpb3IsIG9yIGlmIHBlcmhhcHMgdGhlIGJvbmRpbmcgb3B0aW9ucyBhcmUgaW5jbHVkZWQgZnJvbSB0aGVyZS4gU2VhcmNoaW5nIGZvciAmIzM0O0JPTkRJTkcmIzM0OyBkaXJlY3RseSBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzeW1ib2xzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcy4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgc28gdG8gc3BlYWsuIFVuZGVyc3RhbmRpbmcgdGhlIEtjb25maWcgc3RydWN0dXJlIGlzIGNydWNpYWwgZm9yIGFueSBuZXR3b3JrIGRyaXZlciBleHBlcnQsIHNvIEkgd2lsbCBhbmFseXplIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGFueSBkZWZhdWx0IHZhbHVlcyB0byBnYWluIGluc2lnaHQgaW50byBob3cgdGhlIGJvbmRpbmcgZHJpdmVyIGlzIGN1c3RvbWl6ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCT05ESU5HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0zOT1pZiBORVRfQ09SRVxuZHJpdmVycy9uZXQvS2NvbmZpZy00MC1cbmRyaXZlcnMvbmV0L0tjb25maWc6NDE6Y29uZmlnIEJPTkRJTkdcbmRyaXZlcnMvbmV0L0tjb25maWctNDItXHR0cmlzdGF0ZSBcJiMzNDtCb25kaW5nIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyB0aGUgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEJhc2VkIG9uIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHNlY3Rpb25zIGFyb3VuZCBsaW5lIDQwLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGluaXRpYWwgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgbmV0d29yayBkcml2ZXJzIHdpbGwgbGlrZWx5IHJlc2lkZS4gRnJvbSB0aGVyZSwgSSBjYW4gdW5kZXJzdGFuZCB0aGUgZ2VuZXJhbCBzdHJ1Y3R1cmUgYW5kIHBlcmhhcHMgaWRlbnRpZnkgdGhlIHNwZWNpZmljIG9wdGlvbnMgdGhhdCBhcmUgaW5mbHVlbmNpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIG1vZHVsZXMgdGhhdCBJIGFtIGludGVyZXN0ZWQgaW4uIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzIGZvciB0aGlzIGFyZWEgb2YgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzU6XHRcdGhlbHBcbiAgMzY6XHRcdCAgWW91IGNhbiBzYXkgTiBoZXJlIGlmIHlvdSBkbyBub3QgaW50ZW5kIHRvIHVzZSBhbnkgb2YgdGhlXG4gIDM3Olx0XHQgIG5ldHdvcmtpbmcgY29yZSBkcml2ZXJzIChpLmUuIFZMQU4sIGJyaWRnaW5nLCBib25kaW5nLCBldGMuKVxuICAzODpcdFxuICAzOTpcdGlmIE5FVF9DT1JFXG4gIDQwOlx0XG4gIDQxOlx0Y29uZmlnIEJPTkRJTkdcbiAgNDI6XHRcdHRyaXN0YXRlIFwmIzM0O0JvbmRpbmcgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiAgNDM6XHRcdGRlcGVuZHMgb24gSU5FVFxuICA0NDpcdFx0ZGVwZW5kcyBvbiBUTFMgfHwgVExTX0RFVklDRT1uXG4gIDQ1Olx0XHRoZWxwXG4gIDQ2Olx0XHQgIFNheSAmIzM5O1kmIzM5OyBvciAmIzM5O00mIzM5OyBpZiB5b3Ugd2lzaCB0byBiZSBhYmxlIHRvICYjMzk7Ym9uZCYjMzk7IG11bHRpcGxlIEV0aGVybmV0XG4gIDQ3Olx0XHQgIENoYW5uZWxzIHRvZ2V0aGVyLiBUaGlzIGlzIGNhbGxlZCAmIzM5O0V0aGVyY2hhbm5lbCYjMzk7IGJ5IENpc2NvLFxuICA0ODpcdFx0ICAmIzM5O1RydW5raW5nJiMzOTsgYnkgU3VuLCA4MDIuM2FkIGJ5IHRoZSBJRUVFLCBhbmQgJiMzOTtCb25kaW5nJiMzOTsgaW4gTGludXguXG4gIDQ5Olx0XG4gIDUwOlx0XHQgIFRoZSBkcml2ZXIgc3VwcG9ydHMgbXVsdGlwbGUgYm9uZGluZyBtb2RlcyB0byBhbGxvdyBmb3IgYm90aCBoaWdoXG4gIDUxOlx0XHQgIHBlcmZvcm1hbmNlIGFuZCBoaWdoIGF2YWlsYWJpbGl0eSBvcGVyYXRpb24uXG4gIDUyOlx0XG4gIDUzOlx0XHQgIFJlZmVyIHRvIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcucnN0XHUwMDNlIGZvciBtb3JlXG4gIDU0Olx0XHQgIGluZm9ybWF0aW9uLlxuICA1NTpcdFxuICA1NjpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDU3Olx0XHQgIHdpbGwgYmUgY2FsbGVkIGJvbmRpbmcuXG4gIDU4Olx0XG4gIDU5Olx0Y29uZmlnIERVTU1ZXG4gIDYwOlx0XHR0cmlzdGF0ZSBcJiMzNDtEdW1teSBuZXQgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiAgNjE6XHRcdGhlbHBcbiAgNjI6XHRcdCAgVGhpcyBpcyBlc3NlbnRpYWxseSBhIGJpdC1idWNrZXQgZGV2aWNlIChpLmUuIHRyYWZmaWMgeW91IHNlbmQgdG9cbiAgNjM6XHRcdCAgdGhpcyBkZXZpY2UgaXMgY29uc2lnbmVkIGludG8gb2JsaXZpb24pIHdpdGggYSBjb25maWd1cmFibGUgSVBcbiAgNjQ6XHRcdCAgYWRkcmVzcy4gSXQgaXMgbW9zdCBjb21tb25seSB1c2VkIGluIG9yZGVyIHRvIG1ha2UgeW91ciBjdXJyZW50bHlcbiAgNjU6XHRcdCAgaW5hY3RpdmUgU0xJUCBhZGRyZXNzIHNlZW0gbGlrZSBhIHJlYWwgYWRkcmVzcyBmb3IgbG9jYWwgcHJvZ3JhbXMuXG4gIDY2Olx0XHQgIElmIHlvdSB1c2UgU0xJUCBvciBQUFAsIHlvdSBtaWdodCB3YW50IHRvIHNheSBZIGhlcmUuIEl0IHdvbiYjMzk7dFxuICA2NzpcdFx0ICBlbmxhcmdlIHlvdXIga2VybmVsLiBXaGF0IGEgZGVhbC4gUmVhZCBhYm91dCBpdCBpbiB0aGUgTmV0d29ya1xuICA2ODpcdFx0ICBBZG1pbmlzdHJhdG9yJiMzOTtzIEd1aWRlLCBhdmFpbGFibGUgZnJvbVxuICA2OTpcdFx0ICBcdTAwM2NodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNndWlkZVx1MDAzZS5cbiAgNzA6XHRcbiAgNzE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICA3MjpcdFx0ICB3aWxsIGJlIGNhbGxlZCBkdW1teS5cbiAgNzM6XHRcbiAgNzQ6XHRjb25maWcgV0lSRUdVQVJEXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMTgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyB0aGUgQm9uZGluZyBNb2R1bGUgQ29tcGlsYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBib25kX2FsYi5jYCBpcyBiZWluZyBjb21waWxlZCB3aXRoaW4gdGhlIGJvbmRpbmcgbW9kdWxlLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQsIGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGJ1aWxkIGluc3RydWN0aW9uczogdGhlIGBNYWtlZmlsZWAgbG9jYXRlZCBpbiB0aGUgYGRyaXZlcnMvbmV0L2JvbmRpbmcvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBhdCBsZWFzdCwgd2hlcmUgdGhlIGluc3RydWN0aW9ucyBmb3IgdGhlIG1hZ2ljIGFyZSB3cml0dGVuLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZWAgYW5kIHNlZSBleGFjdGx5IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGUgY29tcGlsYXRpb24gb2YgYGJvbmRfYWxiLmNgLiBUaGF0IGZpbGUgc2hvdWxkIGdpdmUgbWUgYWxsIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgcmVnYXJkaW5nIGNvbXBpbGVyIGZsYWdzLCBkZXBlbmRlbmNpZXMsIG9iamVjdCBmaWxlIGdlbmVyYXRpb24sIGFuZCBsaW5raW5nLiBUaGF0JiMzOTtzIHRoZSBiZXN0IHdheSB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGJ1aWxkcyB0aGF0IHNwZWNpZmljIGNvbXBvbmVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDM6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBFdGhlcm5ldCBCb25kaW5nIGRyaXZlclxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmotJChDT05GSUdfQk9ORElORykgJiM0Mzs9IGJvbmRpbmcub1xuICAgNzpcdFxuICAgODpcdGJvbmRpbmctb2JqcyA6PSBib25kX21haW4ubyBib25kXzNhZC5vIGJvbmRfYWxiLm8gYm9uZF9zeXNmcy5vIGJvbmRfc3lzZnNfc2xhdmUubyBib25kX2RlYnVnZnMubyBib25kX25ldGxpbmsubyBib25kX29wdGlvbnMub1xuICAgOTpcdFxuICAxMDpcdHByb2MtJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IGJvbmRfcHJvY2ZzLm9cbiAgMTE6XHRib25kaW5nLW9ianMgJiM0Mzs9ICQocHJvYy15KVxuICAxMjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTYxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEJvbmRpbmcgYW5kIElQdjYgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgQ09ORklHX0JPTkRJTkdgLCBhbmQgaXQmIzM5O3MgY2xlYXIgaXQgZGVwZW5kcyBvbiBgSU5FVGAgYW5kIGBORVRfQ09SRWAuIEJ1dCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIElQdjYgaXMgYWxzbyBhIHJlcXVpcmVtZW50LCBvciBhdCBsZWFzdCBhIGRlcGVuZGVuY3kgaW4gdGhlIEFkdmFuY2VkIExvYWQgQmFsYW5jaW5nIChBTEIpIGNvbnRleHQuIE15IGluc3RpbmN0IHNheXMgSSBzaG91bGQgZGl2ZSBpbnRvIHRoZSBjb2RlIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9ucyBhbmQgdG8gd2hhdCBleHRlbnQgSVB2NiBhbmQgdGhlIGJvbmRpbmcgZHJpdmVyIGFyZSBsaW5rZWQuCgpGaXJzdCwgSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBJUHY2IGludm9sdmVtZW50LiBTcGVjaWZpY2FsbHksIEkga25vdyB0aGF0IGBhbGJfZGV0ZXJtaW5lX25kYCBtZXRob2QgY291bGQgcG90ZW50aWFsbHkgcmV2ZWFsIHdoZXRoZXIgSVB2NiBpcyBpbnRlZ3JhbCB0byBpdHMgZnVuY3Rpb25pbmcuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaG93IGl0IGhhbmRsZXMgSVB2NiBoZWFkZXJzIGFuZCBJQ01QdjYgcGFja2V0cyAobmVpZ2hib3IgZGlzY292ZXJ5LCBhZHZlcnRpc2VtZW50cywgc29saWNpdGF0aW9ucyAtIE5ESVNDX05FSUdIQk9VUl9BRFZFUlRJU0VNRU5ULCBORElTQ19ORUlHSEJPVVJfU09MSUNJVEFUSU9OKS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaW5kaWNhdGlvbi4KClVsdGltYXRlbHksIEkgd2FudCB0byBjbGFyaWZ5IHdoZXRoZXIgYENPTkZJR19JUFY2YCBpcyAqYWJzb2x1dGVseSogbmVlZGVkIGZvciB0aGUgYm9uZGluZyBkcml2ZXIgdG8gZnVuY3Rpb24sIG9yIGlmIGJvbmRpbmcgY2FuIHdvcmsgaW5kZXBlbmRlbnRseSwgb3IgcGVyaGFwcyBvbmx5IHdvcmtzIHdpdGggYENPTkZJR19JUFY2YCBlbmFibGVkLiBJIGNhbiBhY2NvbXBsaXNoIHRoaXMgYnkgY2hlY2tpbmcgZm9yIGEgZGlyZWN0IGxpbmsgYmV0d2VlbiBgQ09ORklHX0lQVjZgIGFuZCB0aGUgYm9uZGluZyBkcml2ZXIsIHNvIEkmIzM5O2xsIG5leHQgc2VhcmNoIHRoZSBgZHJpdmVycy9uZXQvYm9uZGluZy9gIGRpcmVjdG9yeSBmb3IgcmVmZXJlbmNlcyB0byBpdC4gVGhpcyBzaG91bGQgcXVpY2tseSBhbnN3ZXIgbXkgcXVlc3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQVjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xMzcxPXN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzODMtXHRcdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTM4NDpcdFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzg1LVx0XHRcdGlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYikpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTE0MTk9c3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQ1MS1cdH1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNDUyOlx0Y2FzZSBFVEhfUF9JUFY2OiB7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQ1My1cdFx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNmhkcjtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTIxND1zdGF0aWMgY29uc3Qgc3RydWN0IGZsb3dfZGlzc2VjdG9yX2tleSBmbG93X2tleXNfYm9uZGluZ19rZXlzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMjctXHR7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjIyODpcdFx0LmtleV9pZCA9IEZMT1dfRElTU0VDVE9SX0tFWV9JUFY2X0FERFJTLFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMjktXHRcdC5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgZmxvd19rZXlzLCBhZGRycy52NmFkZHJzKSxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTMxNTQ9c3RhdGljIGludCBib25kX2FycF9yY3YoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zMjMzLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzozMjM0OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zMjM1LXN0YXRpYyB2b2lkIGJvbmRfbnNfc2VuZChzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MzQyMz1pbnQgYm9uZF9yY3ZfdmFsaWRhdGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zNDI1LXtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzQyNjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzQyNzpcdGJvb2wgaXNfaXB2NiA9IHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBfX2NwdV90b19iZTE2KEVUSF9QX0lQVjYpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zNDI4LSNlbmRpZlxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQzNi1cdFx0aWYgKChzbGF2ZV9kb19hcnBfdmFsaWRhdGVfb25seShib25kKSBcdTAwMjZcdTAwMjYgaXNfYXJwKSB8fFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzozNDM3OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zNDM4LVx0XHQgICAgKHNsYXZlX2RvX2FycF92YWxpZGF0ZV9vbmx5KGJvbmQpIFx1MDAyNlx1MDAyNiBpc19pcHY2KSB8fFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQ0NC1cdFx0cmV0dXJuIGJvbmRfYXJwX3Jjdihza2IsIGJvbmQsIHNsYXZlKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzQ0NTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQ0Ni1cdH0gZWxzZSBpZiAoaXNfaXB2NiBcdTAwMjZcdTAwMjYgbGlrZWx5KGlwdjZfbW9kX2VuYWJsZWQoKSkpIHtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTM0NTQ9c3RhdGljIHZvaWQgYm9uZF9zZW5kX3ZhbGlkYXRlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQ1Ni1cdGJvbmRfYXJwX3NlbmRfYWxsKGJvbmQsIHNsYXZlKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzQ1NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQ1OC1cdGlmIChsaWtlbHkoaXB2Nl9tb2RfZW5hYmxlZCgpKSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTQxMjg9c3RhdGljIGJvb2wgYm9uZF9mbG93X2lwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmbG93X2tleXMgKmZrLCBjb25zdCB2b2lkICpkYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDE0My1cdFx0XHQqaXBfcHJvdG8gPSBpcGgtXHUwMDNlcHJvdG9jb2w7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQxNDQ6XHR9IGVsc2UgaWYgKGwyX3Byb3RvID09IGh0b25zKEVUSF9QX0lQVjYpKSB7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQxNDUtXHRcdGRhdGEgPSBib25kX3B1bGxfZGF0YShza2IsIGRhdGEsIGhsZW4sICpuaG9mZiAmIzQzOyBzaXplb2YoKmlwaDYpKTtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTUyNjM9c3RhdGljIGJvb2wgYm9uZF9zaG91bGRfYnJvYWRjYXN0X25laWdoYm9yKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MjgwLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1MjgxOlx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkge1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MjgyLVx0XHRjb21iaW5lZCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNrYl9tYWNfaGVhZGVyX2xlbihza2IpLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTQ1Nz1zdGF0aWMgdm9pZCBib25kX3NrX3RvX2Zsb3coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd19rZXlzICpmbG93KVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTQ1OS1cdHN3aXRjaCAoc2stXHUwMDNlc2tfZmFtaWx5KSB7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU0NjA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU0NjEtXHRjYXNlIEFGX0lORVQ2OlxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NDYyLVx0XHRpZiAoaXB2Nl9vbmx5X3NvY2soc2spIHx8XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU0NjM6XHRcdCAgICBpcHY2X2FkZHJfdHlwZShcdTAwMjZzay1cdTAwM2Vza192Nl9kYWRkcikgIT0gSVBWNl9BRERSX01BUFBFRCkge1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1NDY0Olx0XHRcdGZsb3ctXHUwMDNlY29udHJvbC5hZGRyX3R5cGUgPSBGTE9XX0RJU1NFQ1RPUl9LRVlfSVBWNl9BRERSUztcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTQ2NS1cdFx0XHRmbG93LVx1MDAzZWFkZHJzLnY2YWRkcnMuc3JjID0gaW5ldDZfc2soc2spLVx1MDAzZXNhZGRyO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NjA4Nz1zdGF0aWMgaW50IF9faW5pdCBib25kX2NoZWNrX3BhcmFtcyhzdHJ1Y3QgYm9uZF9wYXJhbXMgKnBhcmFtcylcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTY0NzAtXHRtZW1jcHkocGFyYW1zLVx1MDAzZWFycF90YXJnZXRzLCBhcnBfdGFyZ2V0LCBzaXplb2YoYXJwX3RhcmdldCkpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2NDcxOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02NDcyLVx0bWVtc2V0KHBhcmFtcy1cdTAwM2Vuc190YXJnZXRzLCAwLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSAqIEJPTkRfTUFYX05TX1RBUkdFVFMpO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM9MjE2PXN0YXRpYyBpbnQgYm9uZF9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTMzOS1cdH1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6MzQwOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0zNDEtXHRpZiAoZGF0YVtJRkxBX0JPTkRfTlNfSVA2X1RBUkdFVF0pIHtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jPTcwMD1zdGF0aWMgaW50IGJvbmRfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy03NzAtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjc3MTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNzcyLVx0dGFyZ2V0cyA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgSUZMQV9CT05EX05TX0lQNl9UQVJHRVQpO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM9MTI2MD1zdGF0aWMgaW50IGJvbmRfb3B0aW9uX2FycF9pcF90YXJnZXRzX3NldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTEyODUtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jOjEyODY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTEyODctc3RhdGljIGJvb2wgc2xhdmVfY2FuX3NldF9uc19tYWRkcihjb25zdCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfcHJvY2ZzLmM9NTk9c3RhdGljIHZvaWQgYm9uZF9pbmZvX3Nob3dfbWFzdGVyKHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9wcm9jZnMuYy0xMzgtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfcHJvY2ZzLmM6MTM5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3Byb2Nmcy5jLTE0MC1cdFx0cHJpbnRlZCA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjY3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIGFuZCBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHdvcnRoIGZ1enppbmcuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGZ1bmN0aW9uYWwgY2hhbmdlIGludHJvZHVjZXMgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMuIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCBpdCBjb25jZXJucyBhbiB1cGRhdGUgdG8gaG93IElQdjYgcGFja2V0cyBhcmUgaGFuZGxlZCBpbiBib25kaW5nIFRMQi9BTEIgbW9kZXMgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBhbGJfZGV0ZXJtaW5lX25kYCBmdW5jdGlvbi4KCkkgc2VlIGEgY2hhbmdlIHdoZXJlIHRoZSBjb2RlIHByZXZpb3VzbHkgcmVsaWVkIG9uIGBpY21wNl9oZHIoc2tiKWAgYnV0IG1pZ2h0IGhhdmUgYmVlbiB1c2luZyBhbiBpbnZhbGlkIG9mZnNldCBmb3IgdGhlIHRyYW5zcG9ydCBoZWFkZXIuIFRoZSBjb2RlIHB1bGxzIGluIG1vcmUgZGF0YSBpbnRvIGxpbmVhciBtZW1vcnksIHdoaWNoIG1pZ2h0IGNhdXNlIGBza2ItJmd0O2hlYWRgIHRvIGdldCByZWFsbG9jYXRlZC4gSXQgYXBwZWFycyB0aGF0IGBpcDZoZHJgIHdhc24mIzM5O3QgcmVsb2FkZWQgYWZ0ZXIgYHBza2JfbmV0d29ya19tYXlfcHVsbGAsIGxlYWRpbmcgdG8gYSBwb3NzaWJsZSB1c2Ugb2YgYW4gaW52YWxpZCBwb2ludGVyLiBBbHNvLCB0aGVyZSYjMzk7cyBhIHJlbW92ZWQgdW51c2VkIGFyZ3VtZW50LgoKVGhpcyBtb2RpZmljYXRpb24gYWZmZWN0cyBJUHY2IHBhY2tldCB0cmFuc21pc3Npb24gaW4gYm9uZGluZyBUTEIgLyBBTEIgbW9kZXMsIGludm9sdmluZyBmdW5jdGlvbnMgbGlrZSBgYm9uZF90bGJfeG1pdGAsIGBib25kX2FsYl94bWl0YCwgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCBhbmQgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YC4gQm9uZGluZyBpcyBhIGZ1bGx5IHNvZnR3YXJlLWVtdWxhdGVkIHZpcnR1YWwgbmV0d29ya2luZyBkZXZpY2UgY3JlYXRlZCB2aWEgc3RhbmRhcmQgTGludXggbmV0d29ya2luZyB0b29scyAocnRubCwgbmV0bGluaywgc3lzZnMsIGlvY3RsKSBhbmQgY2FuIGJlIGVhc2lseSByZXByb2R1Y2VkIGluIFFFTVUvR0NFLiBBbnkgdXNlciBvciBmdXp6ZXIgY2FuIGNyZWF0ZSBhIGJvbmRpbmcgaW50ZXJmYWNlLCBlbnNsYXZlIHZpcnR1YWwgaW50ZXJmYWNlcywgc2V0IHRoZSBtb2RlIHRvIFRMQiBvciBBTEIsIGFuZCB0cmFuc21pdCBJUHY2IHBhY2tldHMgdGhyb3VnaCBpdC4KCkdpdmVuIHRoYXQgdGhpcyBjb2RlIGlzIGluIGEgcmVhY2hhYmxlIHBhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBjYW4gYmUgZWFzaWx5IHNldCB1cCBpbiBhIHN0YW5kYXJkIExpbnV4IGVudmlyb25tZW50LCBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFdlIGNhbiBjcmVhdGUgYSB0ZXN0IHNldHVwIHF1aWNrbHkgYW5kIHRyaWdnZXIgdGhlIGNvZGUgdGhhdCB3YXkuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHMgYW5kIHNlZSBpZiB3ZSBjYW4gaWRlbnRpZnkgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4KCmBhbGJfZGV0ZXJtaW5lX25kYCBzZWVtcyB0byBiZSBpbmxpbmVkIGludG8gYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCAvIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAuIFRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGlzIHBhdGggYXJlOgoKKiAgIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAKKiAgIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAKKiAgIGBib25kX3RsYl94bWl0YAoqICAgYGJvbmRfYWxiX3htaXRgCgpJIHdpbGwgZ3JlcCB0aGUgY29kZWJhc2UgZm9yIGBib25kX2FsYl94bWl0YCBvciBgYm9uZF90bGJfeG1pdGAgdG8gbWFrZSBzdXJlIHRoZSBzeW1ib2xzIGFyZSB1c2VkIGFuZCBleGlzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym9uZF8oYWxifHRsYilfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTIyNz1zdGF0aWMgc3RydWN0IHNsYXZlICp0bGJfY2hvb3NlX2NoYW5uZWwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHUzMiBoYXNoX2luZGV4LFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yMzItXHQvKiBXZSBkb24mIzM5O3QgbmVlZCB0byBkaXNhYmxlIHNvZnRpcnEgaGVyZSwgYmVjYXVzZVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjIzMzpcdCAqIHRsYl9jaG9vc2VfY2hhbm5lbCgpIGlzIG9ubHkgY2FsbGVkIGJ5IGJvbmRfYWxiX3htaXQoKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIzNC1cdCAqIHdoaWNoIGFscmVhZHkgaGFzIHNvZnRpcnEgZGlzYWJsZWQuXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTEzNzE9c3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQwOS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNDEwOm5ldGRldl90eF90IGJvbmRfdGxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MTEte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNDE5PXN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1MjMtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTUyNDpuZXRkZXZfdHhfdCBib25kX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTI1LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTU1NTI9c3RhdGljIG5ldGRldl90eF90IF9fYm9uZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTc4LVx0Y2FzZSBCT05EX01PREVfQUxCOlxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1NTc5Olx0XHRyZXR1cm4gYm9uZF9hbGJfeG1pdChza2IsIGRldik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU1ODAtXHRjYXNlIEJPTkRfTU9ERV9UTEI6XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU1ODE6XHRcdHJldHVybiBib25kX3RsYl94bWl0KHNrYiwgZGV2KTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTU4Mi1cdGRlZmF1bHQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDc2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgQm9uZCBBTEIgVHJhbnNtaXNzaW9uIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGVzZSB0cmFuc21pc3Npb24gZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGFuZCBkZWNsYXJlZC4gSSYjMzk7bSBmb2N1c2luZyBvbiBgYm9uZF9hbGJfeG1pdGAsIGBib25kX3RsYl94bWl0YCwgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCwgYW5kIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAuIFRoZSBmYWN0IHRoYXQgYWxsIGZvdXIgYXJlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBib25kX2FsYi5jYCBpcyB0aGUga2V5LiBOb3csIEkgbmVlZCB0byBjb25maXJtIHRoZWlyIGRlY2xhcmF0aW9ucyB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGludGVyZmFjZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgZWl0aGVyIGBpbmNsdWRlL25ldC9ib25kX2FsYi5oYCBvciBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5oYCDigJMgb25lIG9mIHRob3NlIHNob3VsZCBoYXZlIHRoZSBkZWZpbml0aW9ucyBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JvbmRfdGxiX3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xMzcxPXN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MDktXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTQxMDpuZXRkZXZfdHhfdCBib25kX3RsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNDExLXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTU1NTI9c3RhdGljIG5ldGRldl90eF90IF9fYm9uZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTgwLVx0Y2FzZSBCT05EX01PREVfVExCOlxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1NTgxOlx0XHRyZXR1cm4gYm9uZF90bGJfeG1pdChza2IsIGRldik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU1ODItXHRkZWZhdWx0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY0NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBCb25kaW5nIERyaXZlciBJbXBsZW1lbnRhdGlvbnMqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBib25kaW5nIGRyaXZlciBjb2RlIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGhhbmRsaW5nIHRoaXMgcGFydGljdWxhciBzaXR1YXRpb24uIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcyBmb3IgdGhlIGNvcmUgbG9naWMuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRvIGNoZWNrIHRoZSBoZWFkZXIgZmlsZXMgZmlyc3QuICBJJiMzOTttIHRoaW5raW5nIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmhgIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gQWRhcHRpdmUgTG9hZCBCYWxhbmNpbmcuIEFsdGVybmF0aXZlbHksICBgaW5jbHVkZS9uZXQvYm9uZGluZy5oYCBzaG91bGQgY29udGFpbiBtb3JlIGdlbmVyaWMgYm9uZGluZy1yZWxhdGVkIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiAgRGVwZW5kaW5nIG9uIHdoYXQgSSBmaW5kIGluIHRoZXNlIGhlYWRlcnMsIEkmIzM5O2xsIGtub3cgd2hlcmUgdG8gZHJpbGwgZG93biBuZXh0IOKAkyBwcm9iYWJseSBpbnRvIHRoZSBzb3VyY2UgZmlsZXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtib25kX2FsYl94bWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2JvbmRfYWxiLmg9MTU4PXZvaWQgYm9uZF9hbGJfaGFuZGxlX2FjdGl2ZV9jaGFuZ2Uoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqbmV3X3NsYXZlKTtcbmluY2x1ZGUvbmV0L2JvbmRfYWxiLmg6MTU5Om5ldGRldl90eF90IGJvbmRfYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KTtcbmluY2x1ZGUvbmV0L2JvbmRfYWxiLmgtMTYwLW5ldGRldl90eF90IGJvbmRfdGxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwMTQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyBgYm9uZF9hbGIuaGAgZm9yIFBvdGVudGlhbCBJc3N1ZXMqKgoKT2theSwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIEFjdGl2ZS1CYWNrdXAgTG9hZCBCYWxhbmNpbmcgKEFMQikgaW1wbGVtZW50YXRpb24gd2l0aGluIGJvbmRpbmcuIFRoZSBsaWtlbHkgc3BvdCBmb3IgdGhlIGhlYXJ0IG9mIHRoZSBsb2dpYywgb3IgYSBjcnVjaWFsIGRhdGEgc3RydWN0dXJlLCByZWxhdGVkIHRvIHRoZSBBTEIgZnVuY3Rpb25hbGl0eSB3b3VsZCBiZSBhcm91bmQgbGluZSAxNTUgaW4gYGluY2x1ZGUvbmV0L2JvbmRfYWxiLmhgLiBMZXQmIzM5O3MgcHVsbCB0aGF0IHVwIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEgcG90ZW50aWFsIGFyZWEgZm9yIG9wdGltaXphdGlvbiwgYSBidWcsIG9yIGp1c3QgYSBwbGFjZSBJIHNob3VsZCBiZSBtb3JlIGRlZXBseSBmYW1pbGlhciB3aXRoIGdpdmVuIHdoYXQgSSBhbSB3b3JraW5nIG9uIG5vdy4gVGhpcyBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pbmcgaG93IHdlIHNlbGVjdCB0aGUgYWN0aXZlIHNsYXZlLCB0byB0aGUgbG9naWMgdGhhdCBoYW5kbGVzIGxpbmsgZmFpbHVyZXMsIG9yIGV2ZW4gaG93IHdlIHRyYWNrIHRoZSBzdGF0ZSBvZiB0aGUgc2xhdmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2JvbmRfYWxiLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0NTpcdFx0XHRcdFx0XHRcdFx0ICAqIG9mIGNsaWVudCB1cGRhdGVcbiAxNDY6XHRcdFx0XHRcdFx0XHRcdCAgKi9cbiAxNDc6XHRcdHU4XHRcdFx0cmxiX3JlYmFsYW5jZTtcdC8qIGZsYWcgLSBpbmRpY2F0ZXMgdGhhdCB0aGVcbiAxNDg6XHRcdFx0XHRcdFx0XHQgKiByeCB0cmFmZmljIHNob3VsZCBiZVxuIDE0OTpcdFx0XHRcdFx0XHRcdCAqIHJlYmFsYW5jZWRcbiAxNTA6XHRcdFx0XHRcdFx0XHQgKi9cbiAxNTE6XHR9O1xuIDE1MjpcdFxuIDE1MzpcdGludCBib25kX2FsYl9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kLCBpbnQgcmxiX2VuYWJsZWQpO1xuIDE1NDpcdHZvaWQgYm9uZF9hbGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKTtcbiAxNTU6XHRpbnQgYm9uZF9hbGJfaW5pdF9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSk7XG4gMTU2Olx0dm9pZCBib25kX2FsYl9kZWluaXRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqc2xhdmUpO1xuIDE1NzpcdHZvaWQgYm9uZF9hbGJfaGFuZGxlX2xpbmtfY2hhbmdlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCBjaGFyIGxpbmspO1xuIDE1ODpcdHZvaWQgYm9uZF9hbGJfaGFuZGxlX2FjdGl2ZV9jaGFuZ2Uoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqbmV3X3NsYXZlKTtcbiAxNTk6XHRuZXRkZXZfdHhfdCBib25kX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldik7XG4gMTYwOlx0bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpO1xuIDE2MTpcdHN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4gMTYyOlx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiAxNjM6XHRzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuIDE2NDpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gMTY1Olx0dm9pZCBib25kX2FsYl9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTtcbiAxNjY6XHRpbnQgYm9uZF9hbGJfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgdm9pZCAqYWRkcik7XG4gMTY3Olx0dm9pZCBib25kX2FsYl9jbGVhcl92bGFuKHN0cnVjdCBib25kaW5nICpib25kLCB1bnNpZ25lZCBzaG9ydCB2bGFuX2lkKTtcbiAxNjg6XHQjZW5kaWYgLyogX05FVF9CT05EX0FMQl9IICovXG4gMTY5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzgyCgkJCQkJCQlvdXRwdXQ6IDIwNAoJCQkJCQkJdGhvdWdodHM6IDc4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBCb25kaW5nIERyaXZlciBQYXRjaCBmb3IgRnV6emluZyBQcmlvcml0aXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJdCBsb29rcyBsaWtlIHdlIG5lZWQgYEJPTkRJTkdgLCBuYXR1cmFsbHksIHNpbmNlIGl0JiMzOTtzIHRoZSB0YXJnZXQsIGFuZCBgSU5FVGAgYmVjYXVzZSBgQk9ORElOR2AgZGVwZW5kcyBvbiBpdC4gQ3J1Y2lhbGx5LCBnaXZlbiB0aGF0IHRoZSBjb2RlIHNwZWNpZmljYWxseSB0YXJnZXRzIElQdjYgTmVpZ2hib3IgRGlzY292ZXJ5IHBhY2tldHMsIGBJUFY2YCBpcyBhbHNvIGVzc2VudGlhbC4gIEZ1cnRoZXJtb3JlLCBgQk9ORElOR2AgaXMgbmVzdGVkIHdpdGhpbiBgTkVUX0NPUkVgIGluIHRoZSBLY29uZmlnLCBzbyB0aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgdG9vLgoKSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBpbiBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZm9yIGBCT05ESU5HYCBhbmQgeWVwLCBpdCYjMzk7cyBgSU5FVGAgYW5kIGVpdGhlciBgVExTYCBvciBgVExTX0RFVklDRT1uYCBhcyBleHBlY3RlZCwgYW5kIGl0JiMzOTtzIGFsbCBpbnNpZGUgYGlmIE5FVF9DT1JFYCwgYXMgSSBzYXcgYmVmb3JlLgoKTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggdG91Y2hlcy4gVGhlIGBGb2N1c1N5bWJvbHNgIGxvb2sgbGlrZTogYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCwgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCwgYGJvbmRfYWxiX3htaXRgLCBhbmQgYGJvbmRfdGxiX3htaXRgLgoKTm93LCBJIGxvb2sgYXQgdGhlIGdpdCBkaWZmIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgYW5kIHNjb3BlLiBJdCYjMzk7cyBqdXN0IGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgIHRoYXQmIzM5O3MgbW9kaWZpZWQuIFNwZWNpZmljYWxseSwgaW4gYGFsYl9kZXRlcm1pbmVfbmRgOiB0aGUgdW51c2VkIGBib25kYCBwYXJhbWV0ZXIgd2FzIHJlbW92ZWQsIHdoaWNoIGlzIG1pbm9yLiBNb3JlIGltcG9ydGFudGx5LCB0aGUgcGF0Y2ggYWRkcyBgaXA2aGRyID0gaXB2Nl9oZHIoc2tiKTtgIGFmdGVyIHRoZSBgcHNrYl9uZXR3b3JrX21heV9wdWxsYCBjYWxsIHRvIGhhbmRsZSBwb3RlbnRpYWwgcmVhbGxvY2F0aW9uIG9mIHRoZSBgc2tiLSZndDtoZWFkYC4gIEFsc28sIGl0IGNoYW5nZXMgaG93IHRoZSBJQ01QdjYgaGVhZGVyIGlzIGFjY2Vzc2VkOyB0aGUgdXNlIG9mIGBpY21wNl9oZHIoc2tiKWAgaXMgcmVwbGFjZWQuIFRoaXMgaXMgYmVjYXVzZSBvbiB0aGUgdHJhbnNtaXQgcGF0aCBgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKWAgaXNuJiMzOTt0IHZhbGlkLCBzbyBpdCBtYWtlcyBzZW5zZSB0byBkaXJlY3RseSBjYWxjdWxhdGUgaXQgZnJvbSB0aGUgSVB2NiBoZWFkZXIuIFRoZSBjYWxsZXJzIG9mIGBhbGJfZGV0ZXJtaW5lX25kYCwgd2hpY2ggYXJlIHRoZSBmb2N1c2VkIHN5bWJvbHMgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCBhbmQgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCwgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgY2hhbmdlcy4KCk5vdywgdGhlICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgZGVjaXNpb246IElzIGl0IGZ1bmN0aW9uYWw/IEFic29sdXRlbHksIGl0IGNvcnJlY3RzIGFuIGludmFsaWQgcG9pbnRlci9za2IgaGVhZGVyIGFjY2VzcyBidWcgcmVsYXRlZCB0byBJUHY2IHRyYW5zbWl0IG92ZXIgYm9uZGluZyBBTEIvVExCIGludGVyZmFjZXMuIElzIGl0IHJlYWNoYWJsZT8gWWVzLCBib25kaW5nIGlzIHB1cmVseSBzb2Z0d2FyZS4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpGaW5hbGx5LCB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycyBmb3IgYHNldC1yZXN1bHRzYDoKCiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgCiogICBgUmVhc29uaW5nYDogVGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nIGJlY2F1c2UgaXQgZml4ZXMgYSBjcml0aWNhbCBidWcgaW4gdGhlIHBhcnNpbmcgb2YgSUNNUHY2IE5laWdoYm91ciBBZHZlcnRpc2VtZW50L1NvbGljaXRhdGlvbiBwYWNrZXRzIGR1cmluZyB0cmFuc21pdCBpbiBib25kaW5nIEFMQiBhbmQgVExCIG1vZGVzLiBJdCBjb3JyZWN0cyBhIGhlYWRlciBvZmZzZXQgY2FsY3VsYXRpb24gYWZ0ZXIgdGhlIGBwc2tiX3B1bGxgIGNhbGwsIGFkZHJlc3NpbmcgYW4gaW52YWxpZCBtZW1vcnkgYWNjZXNzLgoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtib25kX3htaXRfYWxiX3NsYXZlX2dldCYjMzQ7LCAmIzM0O2JvbmRfeG1pdF90bGJfc2xhdmVfZ2V0JiMzNDssICYjMzQ7Ym9uZF9hbGJfeG1pdCYjMzQ7LCAmIzM0O2JvbmRfdGxiX3htaXQmIzM0O11gCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtCT05ESU5HJiMzNDssICYjMzQ7SU5FVCYjMzQ7LCAmIzM0O0lQVjYmIzM0OywgJiMzNDtORVRfQ09SRSYjMzQ7XWAKCk9rYXksIGFsbCB0aGUgcGFyYW1ldGVycyBhcmUgc2V0LiBJJiMzOTttIGNvbmZpZGVudCBpbiBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCT05ESU5HJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtORVRfQ09SRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0JiMzNDssCiAgICAmIzM0O2JvbmRfeG1pdF90bGJfc2xhdmVfZ2V0JiMzNDssCiAgICAmIzM0O2JvbmRfYWxiX3htaXQmIzM0OywKICAgICYjMzQ7Ym9uZF90bGJfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBwYWNrZXQgaGVhZGVyIHBhcnNpbmcgZm9yIElQdjYgTmVpZ2hib3IgRGlzY292ZXJ5IChORCkgcGFja2V0cyBkdXJpbmcgdHJhbnNtaXQgbG9hZCBiYWxhbmNpbmcgaW4gYm9uZGluZyBBTEIgYW5kIFRMQiBtb2RlcyAoYWxiX2RldGVybWluZV9uZCkuIFByZXZpb3VzbHksIGl0IHVzZWQgaWNtcDZfaGRyKHNrYikgKHdoaWNoIHJlbGllcyBvbiBza2JfdHJhbnNwb3J0X2hlYWRlciwgbm90IG5lY2Vzc2FyaWx5IHNldCBvbiB0aGUgVFggcGF0aCkgYW5kIGRpZG4mIzM5O3QgcmVsb2FkIHRoZSBJUHY2IGhlYWRlciBwb2ludGVyIGFmdGVyIHBza2JfbmV0d29ya19tYXlfcHVsbCByZWFsbG9jYXRpb25zLiBUaGlzIGZ1bmN0aW9uYWwgZml4IGFmZmVjdHMgcGFja2V0IHRyYW5zbWlzc2lvbiBvdmVyIGJvbmRpbmcgdmlydHVhbCBpbnRlcmZhY2VzIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCT05ESU5HJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtORVRfQ09SRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0JiMzNDssCiAgICAmIzM0O2JvbmRfeG1pdF90bGJfc2xhdmVfZ2V0JiMzNDssCiAgICAmIzM0O2JvbmRfYWxiX3htaXQmIzM0OywKICAgICYjMzQ7Ym9uZF90bGJfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBwYWNrZXQgaGVhZGVyIHBhcnNpbmcgZm9yIElQdjYgTmVpZ2hib3IgRGlzY292ZXJ5IChORCkgcGFja2V0cyBkdXJpbmcgdHJhbnNtaXQgbG9hZCBiYWxhbmNpbmcgaW4gYm9uZGluZyBBTEIgYW5kIFRMQiBtb2RlcyAoYWxiX2RldGVybWluZV9uZCkuIFByZXZpb3VzbHksIGl0IHVzZWQgaWNtcDZfaGRyKHNrYikgKHdoaWNoIHJlbGllcyBvbiBza2JfdHJhbnNwb3J0X2hlYWRlciwgbm90IG5lY2Vzc2FyaWx5IHNldCBvbiB0aGUgVFggcGF0aCkgYW5kIGRpZG4mIzM5O3QgcmVsb2FkIHRoZSBJUHY2IGhlYWRlciBwb2ludGVyIGFmdGVyIHBza2JfbmV0d29ya19tYXlfcHVsbCByZWFsbG9jYXRpb25zLiBUaGlzIGZ1bmN0aW9uYWwgZml4IGFmZmVjdHMgcGFja2V0IHRyYW5zbWlzc2lvbiBvdmVyIGJvbmRpbmcgdmlydHVhbCBpbnRlcmZhY2VzIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMzoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGFsYl9kZXRlcm1pbmVfbmQoKWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY2AgdG8gY29tcHV0ZSB0aGUgSUNNUHY2IGhlYWRlciBsb2NhdGlvbiBkaXJlY3RseSBmb2xsb3dpbmcgdGhlIElQdjYgaGVhZGVyIChgKGNvbnN0IHN0cnVjdCBpY21wNmhkciAqKShpcDZoZHIgJiM0MzsgMSlgKSBpbnN0ZWFkIG9mIGludm9raW5nIGBpY21wNl9oZHIoc2tiKWAgKHdoaWNoIHJlbGllcyBvbiBgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKWAgYmVpbmcgaW5pdGlhbGl6ZWQpLiBJdCBhbHNvIGRyb3BzIGFuIHVudXNlZCBgYm9uZGAgcGFyYW1ldGVyLlxuXG5UaGUgcGFja2V0IHBheWxvYWQgYnl0ZXMgcmVhZCBieSB0aGlzIGZ1bmN0aW9uIGFyZSB2ZXJpZmllZCB0byBleGlzdCBpbiB0aGUgbGluZWFyIGJ1ZmZlciB1c2luZyBgcHNrYl9uZXR3b3JrX21heV9wdWxsKClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIEFueSBwb3RlbnRpYWwgYnVmZmVyIGJvdW5kcyBvciBza2IgZGVyZWZlcmVuY2UgaXNzdWVzIGluIHRoaXMgcGF0aCBhcmUgY292ZXJlZCBieSBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRkOGQ2MjU4ODNjNzNlM2EwODEwMmQ4MTM5NDE2MjVhYjJmMTg5YjQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDAzOjExOjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCmluZGV4IDgzOWY3NDgyZGMxODIuLjUwNzNhZWViYTZjOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKQEAgLTEyODEsMTAgJiM0MzsxMjgxLDEwIEBAIHN0YXRpYyBpbnQgYWxiX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdm9pZCAqYWRkcikKIH0KIAogLyogZGV0ZXJtaW5lIGlmIHRoZSBwYWNrZXQgaXMgTkEgb3IgTlMgKi8KLXN0YXRpYyBib29sIGFsYl9kZXRlcm1pbmVfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQpCiYjNDM7c3RhdGljIGJvb2wgYWxiX2RldGVybWluZV9uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBpcHY2aGRyICppcDZoZHI7Ci0Jc3RydWN0IGljbXA2aGRyICpoZHI7CiYjNDM7CWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoZHI7CiYjNDM7CWNvbnN0IHN0cnVjdCBpY21wNmhkciAqaGRyOwogCiAJaWYgKCFwc2tiX25ldHdvcmtfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwNmhkcikpKQogCQlyZXR1cm4gdHJ1ZTsKQEAgLTEyOTYsNyAmIzQzOzEyOTYsOCBAQCBzdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKQogCWlmICghcHNrYl9uZXR3b3JrX21heV9wdWxsKHNrYiwgc2l6ZW9mKCppcDZoZHIpICYjNDM7IHNpemVvZigqaGRyKSkpCiAJCXJldHVybiB0cnVlOwogCi0JaGRyID0gaWNtcDZfaGRyKHNrYik7CiYjNDM7CWlwNmhkciA9IGlwdjZfaGRyKHNrYik7CiYjNDM7CWhkciA9IChjb25zdCBzdHJ1Y3QgaWNtcDZoZHIgKikoaXA2aGRyICYjNDM7IDEpOwogCXJldHVybiBoZHItJmd0O2ljbXA2X3R5cGUgPT0gTkRJU0NfTkVJR0hCT1VSX0FEVkVSVElTRU1FTlQgfHwKIAkJaGRyLSZndDtpY21wNl90eXBlID09IE5ESVNDX05FSUdIQk9VUl9TT0xJQ0lUQVRJT047CiB9CkBAIC0xMzgxLDcgJiM0MzsxMzgyLDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwKIAlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLSZndDtoX2Rlc3QpKSB7CiAJCXN3aXRjaCAoc2tiLSZndDtwcm90b2NvbCkgewogCQljYXNlIGh0b25zKEVUSF9QX0lQVjYpOgotCQkJaWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiLCBib25kKSkKJiM0MzsJCQlpZiAoYWxiX2RldGVybWluZV9uZChza2IpKQogCQkJCWJyZWFrOwogCQkJZmFsbHRocm91Z2g7CiAJCWNhc2UgaHRvbnMoRVRIX1BfSVApOgpAQCAtMTQ2Nyw3ICYjNDM7MTQ2OCw3IEBAIHN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsCiAJCQlicmVhazsKIAkJfQogCi0JCWlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYiwgYm9uZCkpIHsKJiM0MzsJCWlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYikpIHsKIAkJCWRvX3R4X2JhbGFuY2UgPSBmYWxzZTsKIAkJCWJyZWFrOwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTQwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IGJvbmRfYWxiLmMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGRpZmYuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY2AuIExvb2tzIGxpa2UgaXQmIzM5O3MgYSByZWxhdGl2ZWx5IGZvY3VzZWQgbW9kaWZpY2F0aW9uLCB3aGljaCBpcyBnb29kLiBUaGUgaW5kZXggY2hhbmdlIGNvbmZpcm1zIHRoaXMgaXMgYW4gZWRpdCBhbmQgbm90IGEgbmV3IGZpbGUuCgpOb3csIGxldCYjMzk7cyBleGFtaW5lIHRoZSBhY3R1YWwgY2hhbmdlLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBpbiB0aGUgYGFsYl9kZXRlcm1pbmVfbmRgIGZ1bmN0aW9uLiAgSXQgYXBwZWFycyB0aGUgZnVuY3Rpb24mIzM5O3Mgc2lnbmF0dXJlIGlzIHVwZGF0ZWQsIHJlbW92aW5nIGBzdHJ1Y3QgYm9uZGluZyAqYm9uZGAgZnJvbSB0aGUgYXJndW1lbnQgbGlzdC4gVGhpcyBoaW50cyBhdCBzb21lIHJlZmFjdG9yaW5nIG9yIGEgY2hhbmdlIGluIGhvdyB0aGUgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGJvbmRpbmcgY29udGV4dC4gSSBuZWVkIHRvIGtlZXAgYW4gb3BlbiBtaW5kLCBhcyB0aGlzIGNvdWxkIGJlIGFuIG9wdGltaXphdGlvbiBieSByZW1vdmluZyBhbiB1bm5lY2Vzc2FyeSBhcmd1bWVudCBvciBhIGxhcmdlciBhcmNoaXRlY3R1cmFsIGFkanVzdG1lbnQuCgpMb29raW5nIGF0IHRoZSBjb2RlIGluc2lkZSB0aGUgZnVuY3Rpb24sIEkgbm90aWNlIHRoZSB1c2Ugb2YgYGlwdjZoZHJgIGFuZCBgaWNtcDZoZHJgLiAgSXQgYXBwZWFycyB3ZSBhcmUgaW5zcGVjdGluZyBJUHY2IE5laWdoYm9yIERpc2NvdmVyeSBwYWNrZXRzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlaXRoZXIgTmVpZ2hib3IgQWR2ZXJ0aXNlbWVudHMgb3IgTmVpZ2hib3IgU29saWNpdGF0aW9ucy4gVGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdhcyBwb3RlbnRpYWxseSByZXRyaWV2aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIGJvbmRpbmcgY29udGV4dCB0aGF0IGNvdWxkIGluZmx1ZW5jZSB0aGlzIHByb2Nlc3MsIHNvIHJlbW92aW5nIHRoYXQgZnJvbSB0aGUgZnVuY3Rpb24mIzM5O3Mgc2NvcGUgd2lsbCBuZWVkIHRvIGJlIHdlbGwtdW5kZXJzdG9vZC4KClRoZSBzdWJzZXF1ZW50IGNvZGUgY2hhbmdlcyBhcHBlYXIgdG8gYWxpZ24gd2l0aCByZW1vdmluZyB0aGUgYGJvbmRgIHN0cnVjdC4gSXQgbG9va3MgbGlrZSB0aGUgYGlwdjZoZHJgIGFuZCBgaWNtcDZoZHJgIHBvaW50ZXJzIGFyZSBub3cgY2FzdCBhcyBgY29uc3RgLCB3aGljaCBpcyBhIGdvb2QgcHJhY3RpY2UgZm9yIHJlYWQtb25seSBhY2Nlc3MuIEl0IGFwcGVhcnMgd2UgYXJlIGFjY2Vzc2luZyB0aGUgaGVhZGVycyB1c2luZyBgaXB2Nl9oZHJgIGFuZCB1c2luZyBwb2ludGVyIGFyaXRobWV0aWMgdG8gYWNjZXNzIHRoZSBgaWNtcDZfaGRyYC4gVGhpcyBpcyBzdGFuZGFyZCBwcmFjdGljZSwgc28gdGhlIG1vZGlmaWNhdGlvbiBpcyBhIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIG9mIHRoZSBpbnRlbnRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGFzc3VtcHRpb25zIGJlaGluZCB0aGlzIGNhbGN1bGF0aW9uIGFyZSBub3QgYnJva2VuLiBBbHNvLCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZXMgbmV3IHBvdGVudGlhbCBzZWN1cml0eSBpc3N1ZXMgb3IgbG9naWMgZXJyb3JzLgoKSSYjMzk7bSBtYWtpbmcgYSBtZW50YWwgbm90ZSB0aGF0IHRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byBJUHY2IE5laWdoYm9yIERpc2NvdmVyeSBhbmQgaG93IHRoaXMgYm9uZGluZyBkcml2ZXIgaGFuZGxlcyB0aG9zZSBwYWNrZXRzLiBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBib25kaW5nIGNvbnRleHQgaXMgdXRpbGl6ZWQgZWxzZXdoZXJlIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBhcmd1bWVudCByZW1vdmFsIGlzIHNhZmUuIFVsdGltYXRlbHksIEkgbmVlZCB0byB0cmFjZSBiYWNrIHRvIHdoZXJlIHRoaXMgYGFsYl9kZXRlcm1pbmVfbmRgIGlzIGNhbGxlZCB0byBmdWxseSBncmFzcCB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIHBhdGNoLiBMZXQgbWUgY2hlY2sgdGhlIGNvbnRleHQgYXJvdW5kIGxpbmUgMTI4MSBpbiBgYm9uZF9hbGIuY2AgdG8gZ2FpbiBmdXJ0aGVyIGNsYXJpdHkgYWJvdXQgdGhlIHB1cnBvc2Ugb2YgdGhlc2UgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNzU6XHRcdFx0XHRcdCAgcm9sbGJhY2tfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZWFkZHJfbGVuKTtcbjEyNzY6XHRcdFx0ZGV2X3NldF9tYWNfYWRkcmVzcyhyb2xsYmFja19zbGF2ZS1cdTAwM2VkZXYsIFx1MDAyNnNzLCBOVUxMKTtcbjEyNzc6XHRcdFx0ZGV2X2FkZHJfc2V0KHJvbGxiYWNrX3NsYXZlLVx1MDAzZWRldiwgdG1wX2FkZHIpO1xuMTI3ODpcdFx0fVxuMTI3OTpcdFxuMTI4MDpcdFx0cmV0dXJuIHJlcztcbjEyODE6XHR9XG4xMjgyOlx0XG4xMjgzOlx0LyogZGV0ZXJtaW5lIGlmIHRoZSBwYWNrZXQgaXMgTkEgb3IgTlMgKi9cbjEyODQ6XHRzdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IpXG4xMjg1Olx0e1xuMTI4NjpcdFx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNmhkcjtcbjEyODc6XHRcdGNvbnN0IHN0cnVjdCBpY21wNmhkciAqaGRyO1xuMTI4ODpcdFxuMTI4OTpcdFx0aWYgKCFwc2tiX25ldHdvcmtfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwNmhkcikpKVxuMTI5MDpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjEyOTE6XHRcbjEyOTI6XHRcdGlwNmhkciA9IGlwdjZfaGRyKHNrYik7XG4xMjkzOlx0XHRpZiAoaXA2aGRyLVx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19JQ01QVjYpXG4xMjk0Olx0XHRcdHJldHVybiBmYWxzZTtcbjEyOTU6XHRcbjEyOTY6XHRcdGlmICghcHNrYl9uZXR3b3JrX21heV9wdWxsKHNrYiwgc2l6ZW9mKCppcDZoZHIpICYjNDM7IHNpemVvZigqaGRyKSkpXG4xMjk3Olx0XHRcdHJldHVybiB0cnVlO1xuMTI5ODpcdFxuMTI5OTpcdFx0aXA2aGRyID0gaXB2Nl9oZHIoc2tiKTtcbjEzMDA6XHRcdGhkciA9IChjb25zdCBzdHJ1Y3QgaWNtcDZoZHIgKikoaXA2aGRyICYjNDM7IDEpO1xuMTMwMTpcdFx0cmV0dXJuIGhkci1cdTAwM2VpY21wNl90eXBlID09IE5ESVNDX05FSUdIQk9VUl9BRFZFUlRJU0VNRU5UIHx8XG4xMzAyOlx0XHRcdGhkci1cdTAwM2VpY21wNl90eXBlID09IE5ESVNDX05FSUdIQk9VUl9TT0xJQ0lUQVRJT047XG4xMzAzOlx0fVxuMTMwNDpcdFxuMTMwNTpcdC8qKioqKioqKioqKioqKioqKioqKioqKiogZXhwb3J0ZWQgYWxiIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKiovXG4xMzA2Olx0XG4xMzA3Olx0aW50IGJvbmRfYWxiX2luaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQsIGludCBybGJfZW5hYmxlZClcbjEzMDg6XHR7XG4xMzA5Olx0XHRpbnQgcmVzO1xuMTMxMDpcdFxuMTMxMTpcdFx0cmVzID0gdGxiX2luaXRpYWxpemUoYm9uZCk7XG4xMzEyOlx0XHRpZiAocmVzKVxuMTMxMzpcdFx0XHRyZXR1cm4gcmVzO1xuMTMxNDpcdFxuMTMxNTpcdFx0aWYgKHJsYl9lbmFibGVkKSB7XG4xMzE2Olx0XHRcdHJlcyA9IHJsYl9pbml0aWFsaXplKGJvbmQpO1xuMTMxNzpcdFx0XHRpZiAocmVzKSB7XG4xMzE4Olx0XHRcdFx0dGxiX2RlaW5pdGlhbGl6ZShib25kKTtcbjEzMTk6XHRcdFx0XHRyZXR1cm4gcmVzO1xuMTMyMDpcdFx0XHR9XG4xMzIxOlx0XHRcdGJvbmQtXHUwMDNlYWxiX2luZm8ucmxiX2VuYWJsZWQgPSAxO1xuMTMyMjpcdFx0fSBlbHNlIHtcbjEzMjM6XHRcdFx0Ym9uZC1cdTAwM2VhbGJfaW5mby5ybGJfZW5hYmxlZCA9IDA7XG4xMzI0Olx0XHR9XG4xMzI1Olx0XG4xMzI2Olx0XHRyZXR1cm4gMDtcbjEzMjc6XHR9XG4xMzI4Olx0XG4xMzI5Olx0dm9pZCBib25kX2FsYl9kZWluaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4xMzMwOlx0e1xuMTMzMTpcdFx0c3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbyA9IFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcbjEzMzI6XHRcbjEzMzM6XHRcdHRsYl9kZWluaXRpYWxpemUoYm9uZCk7XG4xMzM0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MDcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gSUNNUHY2IEhlYWRlciBNYW5pcHVsYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlIGtlcm5lbCBjb2RlIGhhbmRsZXMgSUNNUHY2IGhlYWRlcnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQmIzM5O3MgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB1c2luZyBgaWNtcDZfaGRyKHNrYilgIGFuZCBzaW1wbHkgb2Zmc2V0dGluZyBmcm9tIHRoZSBJUHY2IGhlYWRlciB3aXRoIGAoaXA2aGRyICYjNDM7IDEpYD8mIzM0OyBJIHN1c3BlY3QgdGhlcmUmIzM5O3MgYSBnb29kIHJlYXNvbiBmb3IgdXNpbmcgdGhlIGZ1bmN0aW9uLCBwcm9iYWJseSByZWxhdGVkIHRvIHJvYnVzdG5lc3Mgb3Igc29tZSBudWFuY2VkIGhhbmRsaW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kLiAgSSB3YW50IHRvIGtub3cgaWYgdGhlcmUgaXMgYSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlc2UgdHdvIGRlZmluaXRpb25zLgoKVGltZSB0byBjdXQgdG8gdGhlIGNoYXNlIGFuZCBmaW5kIHRoZSBhY3R1YWwgZGVmaW5pdGlvbiBvZiBgaWNtcDZfaGRyYC4gSSYjMzk7bGwgcnVuIGEgYGdyZXBgIHRvIHF1aWNrbHkgbG9jYXRlIHdoZXJlIHRoYXQgbWFjcm8gb3IgZnVuY3Rpb24gaXMgZGVmaW5lZC4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhpcyBpcyBkb25lIHRoZSB3YXkgaXQgaXMuIFRoZSBhbnN3ZXIgaXMgbGlrZWx5IHRoZXJlIGluIHRoZSBjb2RlIGNvbW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ljbXA2X2hkclxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9hbXQuYz04MDg9c3RhdGljIHN0cnVjdCBza19idWZmICphbXRfYnVpbGRfbWxkX2dxKHN0cnVjdCBhbXRfZGV2ICphbXQpXG4tLVxuZHJpdmVycy9uZXQvYW10LmMtODU2LVx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbmRyaXZlcnMvbmV0L2FtdC5jOjg1NzpcdG1sZDJxXHRcdFx0PSAoc3RydWN0IG1sZDJfcXVlcnkgKilpY21wNl9oZHIoc2tiKTtcbmRyaXZlcnMvbmV0L2FtdC5jLTg1OC1cdG1sZDJxLVx1MDAzZW1sZDJxX21yY1x0PSBodG9ucygxKTtcbi0tXG5kcml2ZXJzL25ldC9hbXQuYz0yMTEzPXN0YXRpYyB2b2lkIGFtdF9tbGR2MV9yZXBvcnRfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L2FtdC5jLTIxMTUte1xuZHJpdmVycy9uZXQvYW10LmM6MjExNjpcdHN0cnVjdCBtbGRfbXNnICptbGQgPSAoc3RydWN0IG1sZF9tc2cgKilpY21wNl9oZHIoc2tiKTtcbmRyaXZlcnMvbmV0L2FtdC5jLTIxMTctXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7XG4tLVxuZHJpdmVycy9uZXQvYW10LmM9MjE1MD1zdGF0aWMgdm9pZCBhbXRfbWxkdjFfbGVhdmVfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L2FtdC5jLTIxNTIte1xuZHJpdmVycy9uZXQvYW10LmM6MjE1MzpcdHN0cnVjdCBtbGRfbXNnICptbGQgPSAoc3RydWN0IG1sZF9tc2cgKilpY21wNl9oZHIoc2tiKTtcbmRyaXZlcnMvbmV0L2FtdC5jLTIxNTQtXHRzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpO1xuLS1cbmRyaXZlcnMvbmV0L2FtdC5jPTIxNjk9c3RhdGljIHZvaWQgYW10X21sZHYyX3JlcG9ydF9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvYW10LmMtMjE3MS17XG5kcml2ZXJzL25ldC9hbXQuYzoyMTcyOlx0c3RydWN0IG1sZDJfcmVwb3J0ICptbGQyciA9IChzdHJ1Y3QgbWxkMl9yZXBvcnQgKilpY21wNl9oZHIoc2tiKTtcbmRyaXZlcnMvbmV0L2FtdC5jLTIxNzMtXHRpbnQgbGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSAmIzQzOyBzaXplb2YoKm1sZDJyKTtcbi0tXG5kcml2ZXJzL25ldC9hbXQuYz0yMjQ3PXN0YXRpYyB2b2lkIGFtdF9tbGRfcmVwb3J0X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9hbXQuYy0yMjQ5LXtcbmRyaXZlcnMvbmV0L2FtdC5jOjIyNTA6XHRzdHJ1Y3QgbWxkX21zZyAqbWxkID0gKHN0cnVjdCBtbGRfbXNnICopaWNtcDZfaGRyKHNrYik7XG5kcml2ZXJzL25ldC9hbXQuYy0yMjUxLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM9MTI5OD1zdGF0aWMgYm9vbCBiZV9zZW5kX3BrdF90b19ibWMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYy0xMzIyLVx0XHRpZiAobmV4dGhkciA9PSBJUFBST1RPX0lDTVBWNikge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYzoxMzIzOlx0XHRcdHN0cnVjdCBpY21wNmhkciAqaWNtcDYgPSBpY21wNl9oZHIoKCpza2IpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMtMTMyNC1cbi0tXG5pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oLTgtXG5pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oOjk6c3RhdGljIGlubGluZSBzdHJ1Y3QgaWNtcDZoZHIgKmljbXA2X2hkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9pY21wdjYuaC0xMC17XG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9MTAzNT1zdGF0aWMgYm9vbCBiYXRhZHZfbWNhc3RfaXNfcmVwb3J0X2lwdjYoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMDM5LVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6MTA0MDpcdHN3aXRjaCAoaWNtcDZfaGRyKHNrYiktXHUwMDNlaWNtcDZfdHlwZSkge1xubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTA0MS1cdGNhc2UgSUNNUFY2X01HTV9SRVBPUlQ6XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xMDY4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYnJfaXA2X211bHRpY2FzdF9hbGxvY19xdWVyeShzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTE2OS1cdGNhc2UgMTpcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTE3MDpcdFx0bWxkcSA9IChzdHJ1Y3QgbWxkX21zZyAqKWljbXA2X2hkcihza2IpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xMTcxLVx0XHRtbGRxLVx1MDAzZW1sZF90eXBlID0gSUNNUFY2X01HTV9RVUVSWTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTExODAtXHRjYXNlIDI6XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjExODE6XHRcdG1sZDJxID0gKHN0cnVjdCBtbGQyX3F1ZXJ5ICopaWNtcDZfaGRyKHNrYik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTExODItXHRcdG1sZDJxLVx1MDAzZW1sZDJxX21yYyA9IGh0b25zKG1sZHYyX21yYyhqaWZmaWVzX3RvX21zZWNzKGludGVydmFsKSkpO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MzAyNT1zdGF0aWMgaW50IGJyX2lwNl9tdWx0aWNhc3RfbWxkMl9yZXBvcnQoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTMwNDUtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjMwNDY6XHRtbGQyciA9IChzdHJ1Y3QgbWxkMl9yZXBvcnQgKilpY21wNl9oZHIoc2tiKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzA0Ny1cdG51bSA9IG50b2hzKG1sZDJyLVx1MDAzZW1sZDJyX25ncmVjKTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTM2MjQ9c3RhdGljIGludCBicl9pcDZfbXVsdGljYXN0X3F1ZXJ5KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zNjUxLVx0XHR9XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjM2NTI6XHRcdG1sZCA9IChzdHJ1Y3QgbWxkX21zZyAqKSBpY21wNl9oZHIoc2tiKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzY1My1cdFx0bWF4X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcyhudG9ocyhtbGQtXHUwMDNlbWxkX21heGRlbGF5KSk7XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zNjYwLVx0XHR9XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjM2NjE6XHRcdG1sZDJxID0gKHN0cnVjdCBtbGQyX3F1ZXJ5ICopaWNtcDZfaGRyKHNrYik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM2NjItXHRcdGlmICghbWxkMnEtXHUwMDNlbWxkMnFfbnNyY3MpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0zOTkwPXN0YXRpYyB2b2lkIGJyX2lwNl9tdWx0aWNhc3RfbXJkX3JjdihzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzk5My17XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjM5OTQ6XHRpZiAoaWNtcDZfaGRyKHNrYiktXHUwMDNlaWNtcDZfdHlwZSAhPSBJQ01QVjZfTVJESVNDX0FEVilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzk5NS1cdFx0cmV0dXJuO1xuLS1cbm5ldC9pcHY0L3BpbmcuYz00ODQ9dm9pZCBwaW5nX2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCB1MzIgaW5mbylcbi0tXG5uZXQvaXB2NC9waW5nLmMtNTAyLVx0XHRmYW1pbHkgPSBBRl9JTkVUNjtcbm5ldC9pcHY0L3BpbmcuYzo1MDM6XHRcdHR5cGUgPSBpY21wNl9oZHIoc2tiKS1cdTAwM2VpY21wNl90eXBlO1xubmV0L2lwdjQvcGluZy5jOjUwNDpcdFx0Y29kZSA9IGljbXA2X2hkcihza2IpLVx1MDAzZWljbXA2X2NvZGU7XG5uZXQvaXB2NC9waW5nLmMtNTA1LVx0XHRpY21waCA9IChzdHJ1Y3QgaWNtcGhkciAqKSAoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2Zmc2V0KTtcbi0tXG5uZXQvaXB2Ni9kYXRhZ3JhbS5jPTI5Nj1zdGF0aWMgdm9pZCBpcHY2X2ljbXBfZXJyb3JfcmZjNDg4NChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L2RhdGFncmFtLmMtMjk4LXtcbm5ldC9pcHY2L2RhdGFncmFtLmM6Mjk5Olx0c3dpdGNoIChpY21wNl9oZHIoc2tiKS1cdTAwM2VpY21wNl90eXBlKSB7XG5uZXQvaXB2Ni9kYXRhZ3JhbS5jLTMwMC1cdGNhc2UgSUNNUFY2X1RJTUVfRVhDRUVEOlxuLS1cbm5ldC9pcHY2L2RhdGFncmFtLmMtMzAyLVx0XHRpcF9pY21wX2Vycm9yX3JmYzQ4ODQoc2tiLCBvdXQsIHNpemVvZihzdHJ1Y3QgaWNtcDZoZHIpLFxubmV0L2lwdjYvZGF0YWdyYW0uYzozMDM6XHRcdFx0XHQgICAgICBpY21wNl9oZHIoc2tiKS1cdTAwM2VpY21wNl9kYXRhZ3JhbV9sZW4gKiA4KTtcbm5ldC9pcHY2L2RhdGFncmFtLmMtMzA0LVx0fVxuLS1cbm5ldC9pcHY2L2RhdGFncmFtLmM9MzA3PXZvaWQgaXB2Nl9pY21wX2Vycm9yKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycixcbi0tXG5uZXQvaXB2Ni9kYXRhZ3JhbS5jLTMwOS17XG5uZXQvaXB2Ni9kYXRhZ3JhbS5jOjMxMDpcdHN0cnVjdCBpY21wNmhkciAqaWNtcGggPSBpY21wNl9oZHIoc2tiKTtcbm5ldC9pcHY2L2RhdGFncmFtLmMtMzExLVx0c3RydWN0IHNvY2tfZXh0ZXJyX3NrYiAqc2Vycjtcbi0tXG5uZXQvaXB2Ni9pY21wLmM9Mjc2PXZvaWQgaWNtcHY2X3B1c2hfcGVuZGluZ19mcmFtZXMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k2ICpmbDYsXG4tLVxubmV0L2lwdjYvaWNtcC5jLTI4NS1cbm5ldC9pcHY2L2ljbXAuYzoyODY6XHRpY21wNmggPSBpY21wNl9oZHIoc2tiKTtcbm5ldC9pcHY2L2ljbXAuYy0yODctXHRtZW1jcHkoaWNtcDZoLCB0aGRyLCBzaXplb2Yoc3RydWN0IGljbXA2aGRyKSk7XG4tLVxubmV0L2lwdjYvaWNtcC5jPTkyMT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gaWNtcHY2X2VjaG9fcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9pY21wLmMtOTI3LVx0Y29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciA9IE5VTEw7XG5uZXQvaXB2Ni9pY21wLmM6OTI4Olx0c3RydWN0IGljbXA2aGRyICppY21waCA9IGljbXA2X2hkcihza2IpO1xubmV0L2lwdjYvaWNtcC5jLTkyOS1cdGJvb2wgYXBwbHlfcmF0ZWxpbWl0ID0gZmFsc2U7XG4tLVxubmV0L2lwdjYvaWNtcC5jPTExMDE9c3RhdGljIGludCBpY21wdjZfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvaWNtcC5jLTExNDYtXG5uZXQvaXB2Ni9pY21wLmM6MTE0NzpcdGhkciA9IGljbXA2X2hkcihza2IpO1xubmV0L2lwdjYvaWNtcC5jLTExNDgtXG4tLVxubmV0L2lwdjYvaWNtcC5jLTExNzYtXHRcdFx0Z290byBkaXNjYXJkX2l0O1xubmV0L2lwdjYvaWNtcC5jOjExNzc6XHRcdGhkciA9IGljbXA2X2hkcihza2IpO1xubmV0L2lwdjYvaWNtcC5jLTExNzgtXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jPTE5MjQ9c3RydWN0IHNrX2J1ZmYgKl9faXA2X21ha2Vfc2tiKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTk5OC1cdFx0ZWxzZVxubmV0L2lwdjYvaXA2X291dHB1dC5jOjE5OTk6XHRcdFx0aWNtcDZfdHlwZSA9IGljbXA2X2hkcihza2IpLVx1MDAzZWljbXA2X3R5cGU7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMjAwMC1cdFx0SUNNUDZNU0dPVVRfSU5DX1NUQVRTKG5ldCwgaWRldiwgaWNtcDZfdHlwZSk7XG4tLVxubmV0L2lwdjYvbWNhc3QuYz0xNDI2PXN0YXRpYyB2b2lkIF9fbWxkX3F1ZXJ5X3dvcmsoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jLTE0NjEtXG5uZXQvaXB2Ni9tY2FzdC5jOjE0NjI6XHRtbGQgPSAoc3RydWN0IG1sZF9tc2cgKilpY21wNl9oZHIoc2tiKTtcbm5ldC9pcHY2L21jYXN0LmMtMTQ2My1cdGdyb3VwID0gbWxkLVx1MDAzZW1sZF9tY2E7XG4tLVxubmV0L2lwdjYvbWNhc3QuYz0xNjA2PXN0YXRpYyB2b2lkIF9fbWxkX3JlcG9ydF93b3JrKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvbWNhc3QuYy0xNjI0LVxubmV0L2lwdjYvbWNhc3QuYzoxNjI1Olx0bWxkID0gKHN0cnVjdCBtbGRfbXNnICopaWNtcDZfaGRyKHNrYik7XG5uZXQvaXB2Ni9tY2FzdC5jLTE2MjYtXG4tLVxubmV0L2lwdjYvbmRpc2MuYz00Njk9dm9pZCBuZGlzY19zZW5kX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxuLS1cbm5ldC9pcHY2L25kaXNjLmMtNDcxLXtcbm5ldC9pcHY2L25kaXNjLmM6NDcyOlx0c3RydWN0IGljbXA2aGRyICppY21wNmggPSBpY21wNl9oZHIoc2tiKTtcbm5ldC9pcHY2L25kaXNjLmMtNDczLVx0c3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiX2RzdChza2IpO1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X05QVC5jPTgwPXN0YXRpYyBzdHJ1Y3QgaXB2NmhkciAqaWNtcHY2X2JvdW5jZWRfaXB2NmhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X05QVC5jLTg1LVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTlBULmM6ODY6XHRpZiAoIWljbXB2Nl9pc19lcnIoaWNtcDZfaGRyKHNrYiktXHUwMDNlaWNtcDZfdHlwZSkpXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9OUFQuYy04Ny1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L2lwdjYvcm91dGUuYz0zMjM4PXZvaWQgaXA2X3JlZGlyZWN0X25vX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsIGludCBvaWYpXG4tLVxubmV0L2lwdjYvcm91dGUuYy0zMjQwLVx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7XG5uZXQvaXB2Ni9yb3V0ZS5jOjMyNDE6XHRjb25zdCBzdHJ1Y3QgcmRfbXNnICptc2cgPSAoc3RydWN0IHJkX21zZyAqKWljbXA2X2hkcihza2IpO1xubmV0L2lwdjYvcm91dGUuYy0zMjQyLVx0c3RydWN0IGRzdF9lbnRyeSAqZHN0O1xuLS1cbm5ldC9pcHY2L3JvdXRlLmM9NDI0MT1zdGF0aWMgdm9pZCBydDZfZG9fcmVkaXJlY3Qoc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvcm91dGUuYy00MjYwLVxubmV0L2lwdjYvcm91dGUuYzo0MjYxOlx0bXNnID0gKHN0cnVjdCByZF9tc2cgKilpY21wNl9oZHIoc2tiKTtcbm5ldC9pcHY2L3JvdXRlLmMtNDI2Mi1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTM1OD1zdGF0aWMgdm9pZCB1cGRhdGVfaXB2Nl9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBsNF9wcm90byxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTM3OS1cdFx0aWYgKGxpa2VseSh0cmFuc3BvcnRfbGVuIFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBpY21wNmhkcikpKVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYzozODA6XHRcdFx0aW5ldF9wcm90b19jc3VtX3JlcGxhY2UxNihcdTAwMjZpY21wNl9oZHIoc2tiKS1cdTAwM2VpY21wNl9ja3N1bSxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMzgxLVx0XHRcdFx0XHRcdCAgc2tiLCBhZGRyLCBuZXdfYWRkciwgdHJ1ZSk7XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYz01NTA9c3RhdGljIGludCBwYXJzZV9pY21wdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy01NTIte1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYzo1NTM6XHRzdHJ1Y3QgaWNtcDZoZHIgKmljbXAgPSBpY21wNl9oZHIoc2tiKTtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtNTU0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDUyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiwgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHN0YXJ0aW5nIHBvaW50OgoKKipEaXZpbmcgaW50byB0aGUgSUNNUHY2IEhlYWRlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZSBjb2RlIHRoYXQmIzM5O3MgZGVhbGluZyB3aXRoIElDTVB2NiBwYWNrZXRzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoZWFkZXIgaXMgYmVpbmcgYWNjZXNzZWQuIFRoZSBpbml0aWFsIHN0ZXAgaXMgdXNpbmcgYGljbXA2X2hkcihza2IpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIGxldCYjMzk7cyB0cmFjZSB0aGlzIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuJiMzNDsgVGhpcyBwcm9iYWJseSByZXRyaWV2ZXMgdGhlIHBvaW50ZXIgdG8gdGhlIElDTVB2NiBoZWFkZXIuCgpUaGUgbmV4dCBzdGVwIGlzIHRvIHNlZSBob3cgYGljbXA2X2hkcihza2IpYCBkb2VzIHRoYXQ6IGl0IGNhbGxzIGBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGZldGNoaW5nIHRoZSB0cmFuc3BvcnQgbGF5ZXIgaGVhZGVyICh3aGljaCBpbiBJUHY2LCBmb3IgSUNNUHY2LCB3b3VsZCBiZSB0aGUgSUNNUHY2IGhlYWRlcikuIFRoYXQgbWFrZXMgc2Vuc2Ug4oCTIHRoZSBTS0IgKFNvY2tldCBCdWZmZXIpIHByb2JhYmx5IGNvbnRhaW5zIHRoZSB3aG9sZSBwYWNrZXQsIGFuZCB0aGlzIGZ1bmN0aW9uIGhlbHBzIHBpbnBvaW50IHRoZSBoZWFkZXImIzM5O3MgbG9jYXRpb24gd2l0aGluIHRoZSBkYXRhIHN0cnVjdHVyZS4KCk5vdywgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBhbmQgYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTttIGdvaW5nIHRvIGNvbnN1bHQgdGhlIGRlZmluaXRpb24gb2YgYGljbXA2X2hkcmAgYW5kIHJlbGF0ZWQgc3RydWN0cy4gSSBuZWVkIHRvIGNoZWNrIHRoZSBpbmNsdWRlIGZpbGVzIHRvIGNvbmZpcm0gdGhlIGRhdGEgbGF5b3V0IGFuZCBmaWVsZCBkZWZpbml0aW9ucyBpbiBgaW5jbHVkZS9saW51eC9pY21wdjYuaGAuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBlbnN1cmUgbXkgYW5hbHlzaXMgaXMgY29ycmVjdC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaWNtcHY2LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuICAgMjpcdCNpZm5kZWYgX0xJTlVYX0lDTVBWNl9IXG4gICAzOlx0I2RlZmluZSBfTElOVVhfSUNNUFY2X0hcbiAgIDQ6XHRcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvaWNtcHY2LmhcdTAwM2VcbiAgIDg6XHRcbiAgIDk6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBpY21wNmhkciAqaWNtcDZfaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4gIDEwOlx0e1xuICAxMTpcdFx0cmV0dXJuIChzdHJ1Y3QgaWNtcDZoZHIgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuICAxMjpcdH1cbiAgMTM6XHRcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICAxNTpcdFxuICAxNjpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuICAxNzpcdFxuICAxODpcdHZvaWQgaWNtcDZfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCB0eXBlLCB1OCBjb2RlLCBfX3UzMiBpbmZvLFxuICAxOTpcdFx0XHRjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmZvcmNlX3NhZGRyLFxuICAyMDpcdFx0XHRjb25zdCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKnBhcm0pO1xuICAyMTpcdFxuICAyMjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBpY21wdjZfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCB0eXBlLCB1OCBjb2RlLCBfX3UzMiBpbmZvKVxuICAyMzpcdHtcbiAgMjQ6XHRcdGljbXA2X3NlbmQoc2tiLCB0eXBlLCBjb2RlLCBpbmZvLCBOVUxMLCBJUDZDQihza2IpKTtcbiAgMjU6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMzkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA4MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQm9uZGVkIEludGVyZmFjZSYjMzk7cyBJUHY2IE5laWdoYm9yIERpc2NvdmVyeSBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBib25kaW5nLCBzcGVjaWZpY2FsbHkgdGhlIGBhbGJfZGV0ZXJtaW5lX25kYCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgdXNlcyBgaWNtcDZfaGRyKHNrYilgLCB3aGljaCByZWxpZXMgb24gYHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYilgLiBOb3csIHRoZSBwcm9ibGVtIGFyaXNlcyBiZWNhdXNlIGR1cmluZyB0aGUgdHJhbnNtaXNzaW9uIHBoYXNlIChsaWtlIGluIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgb3IgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCksIHRoZSB0cmFuc3BvcnQgaGVhZGVyIG9mZnNldCBpc24mIzM5O3QgYWx3YXlzIHNldCBjb3JyZWN0bHkuICBJdCBjb3VsZCBiZSB1bmluaXRpYWxpemVkIG9yIHBvaW50aW5nIHNvbWV3aGVyZSB3cm9uZy4gIE1lYW53aGlsZSwgdGhlIG5ldHdvcmsgaGVhZGVyIChgc2tiX25ldHdvcmtfaGVhZGVyYCkgKmlzKiBzZXQsIGFuZCB3ZSYjMzk7cmUgcHVsbGluZyB0aGF0IHdpdGggYHBza2JfbmV0d29ya19tYXlfcHVsbGAuCgpCZWZvcmUgdGhlIGNoYW5nZSwgdGhlIGxvZ2ljIHdhczoKMS4gIE1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IHRoZSBJUHY2IGhlYWRlciB3aXRoIGBwc2tiX25ldHdvcmtfbWF5X3B1bGxgLgoyLiAgR2V0IHRoZSBJUHY2IGhlYWRlciBhbmQgY2hlY2sgaWYgdGhlIG5leHQgaGVhZGVyIGlzIElDTVB2Ni4KMy4gIE1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IHRoZSBJUHY2IGFuZCBJQ01QdjYgaGVhZGVyIHdpdGggYW5vdGhlciBgcHNrYl9uZXR3b3JrX21heV9wdWxsYC4KNC4gIEdldCB0aGUgSUNNUHY2IGhlYWRlciB3aXRoIGBpY21wNl9oZHIoc2tiKWAgYW5kIGNoZWNrIHRoZSBJQ01QdjYgdHlwZS4KClRoZSBmbGF3PyBJZiBgc2tiX3RyYW5zcG9ydF9oZWFkZXJgIHdhc24mIzM5O3Qgc2V0LCB0aGVuIGBpY21wNl9oZHIoc2tiKWAgY291bGQgYmUgcmVhZGluZyBmcm9tICphbnl3aGVyZSogaW4gbWVtb3J5LCBwb3RlbnRpYWxseSBgc2tiLSZndDtoZWFkYCwgYHNrYi0mZ3Q7ZGF0YWAsIHNvbWUgdW5pbml0aWFsaXplZCBvZmZzZXQsIG9yIGV2ZW4gb3V0IG9mIGJvdW5kcy4gVGhlIEtBU0FOIG1pZ2h0IGJlIGNhdGNoaW5nIHRoaXMgb3V0LW9mLWJvdW5kcyByZWFkLCBidXQgaXQmIzM5O3MgYSBjcml0aWNhbCBidWcuCgpUaGUgcGF0Y2gmIzM5O3Mgc29sdXRpb24gaXMgZWxlZ2FudDogSXQgc2ltcGx5IGNhbGN1bGF0ZXMgdGhlIElDTVB2NiBoZWFkZXIgcG9pbnRlciBiYXNlZCBvbiB0aGUgSVB2NiBoZWFkZXI6IGBoZHIgPSAoY29uc3Qgc3RydWN0IGljbXA2aGRyICopKGlwNmhkciAmIzQzOyAxKWAuIFdlIGFsc28gZW5zdXJlIHRoZSBwYWNrZXQgZGF0YSBpcyB0aGVyZSB3aXRoIGBwc2tiX25ldHdvcmtfbWF5X3B1bGxgLiBUaGF0IGF2b2lkcyB0aGUgZGVwZW5kZW5jeSBvbiBgc2tiX3RyYW5zcG9ydF9oZWFkZXJgIGVudGlyZWx5LiAgQW5kIHRoZSB1bnVzZWQgYHN0cnVjdCBib25kaW5nICpib25kYCBwYXJhbWV0ZXIgaXMgcmVtb3ZlZCwgd2hpY2ggaXMgZ29vZCBjbGVhbnVwLgoKTm93LCBJIG5lZWQgdG8gdmVyaWZ5OiBkb2VzIHRoaXMgY2hhbmdlIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBMZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlOioqIE5vcGUsIHRoaXMgY29kZSBkb2VzbiYjMzk7dCBkaXJlY3RseSBzZW5kIGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuCjIuICAqKlVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNlIGluIGNvbmRpdGlvbmFsczoqKiBObywgZXZlcnl0aGluZyBpcyBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgYW5kIHB1bGxlZC4KMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbjoqKiBObywgdGhpcyBpcyBzdHJhaWdodGZvcndhcmQgcG9pbnRlciBhcml0aG1ldGljLgo0LiAgKipCb3VuZHMgY2hlY2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YToqKiBObywgdGhlIGBwc2tiX25ldHdvcmtfbWF5X3B1bGxgIGNhbGwgc2FmZWd1YXJkcyB0aGF0LgoKU28sIGZyb20gd2hhdCBJIGNhbiBzZWUsIHRoaXMgaXMgYSBzYWZlIGFuZCBjb3JyZWN0IGZpeC4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBjYWxsZXJzIGluIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbiwgYnV0IEkgZmVlbCBnb29kIGFib3V0IHRoaXMuIFRoaXMgc2hvdWxkIHJlc29sdmUgdGhlIG1lbW9yeSBhY2Nlc3MgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzNzA6XHRcbjEzNzE6XHRzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuMTM3MjpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjEzNzM6XHR7XG4xMzc0Olx0XHRzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlID0gTlVMTDtcbjEzNzU6XHRcdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhO1xuMTM3NjpcdFx0dTMyIGhhc2hfaW5kZXg7XG4xMzc3Olx0XG4xMzc4Olx0XHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuMTM3OTpcdFx0ZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7XG4xMzgwOlx0XG4xMzgxOlx0XHQvKiBEbyBub3QgVFggYmFsYW5jZSBhbnkgbXVsdGljYXN0IG9yIGJyb2FkY2FzdCAqL1xuMTM4MjpcdFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cdTAwM2VoX2Rlc3QpKSB7XG4xMzgzOlx0XHRcdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG4xMzg0Olx0XHRcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4xMzg1Olx0XHRcdFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiKSlcbjEzODY6XHRcdFx0XHRcdGJyZWFrO1xuMTM4NzpcdFx0XHRcdGZhbGx0aHJvdWdoO1xuMTM4ODpcdFx0XHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbjEzODk6XHRcdFx0XHRoYXNoX2luZGV4ID0gYm9uZF94bWl0X2hhc2goYm9uZCwgc2tiKTtcbjEzOTA6XHRcdFx0XHRpZiAoYm9uZC1cdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpIHtcbjEzOTE6XHRcdFx0XHRcdHR4X3NsYXZlID0gdGxiX2Nob29zZV9jaGFubmVsKGJvbmQsXG4xMzkyOlx0XHRcdFx0XHRcdFx0XHQgICAgICBoYXNoX2luZGV4IFx1MDAyNiAweEZGLFxuMTM5MzpcdFx0XHRcdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWxlbik7XG4xMzk0Olx0XHRcdFx0fSBlbHNlIHtcbjEzOTU6XHRcdFx0XHRcdHN0cnVjdCBib25kX3VwX3NsYXZlICpzbGF2ZXM7XG4xMzk2Olx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgY291bnQ7XG4xMzk3Olx0XG4xMzk4Olx0XHRcdFx0XHRzbGF2ZXMgPSByY3VfZGVyZWZlcmVuY2UoYm9uZC1cdTAwM2V1c2FibGVfc2xhdmVzKTtcbjEzOTk6XHRcdFx0XHRcdGNvdW50ID0gc2xhdmVzID8gUkVBRF9PTkNFKHNsYXZlcy1cdTAwM2Vjb3VudCkgOiAwO1xuMTQwMDpcdFx0XHRcdFx0aWYgKGxpa2VseShjb3VudCkpXG4xNDAxOlx0XHRcdFx0XHRcdHR4X3NsYXZlID0gc2xhdmVzLVx1MDAzZWFycltoYXNoX2luZGV4ICVcbjE0MDI6XHRcdFx0XHRcdFx0XHRcdCAgICAgICBjb3VudF07XG4xNDAzOlx0XHRcdFx0fVxuMTQwNDpcdFx0XHRcdGJyZWFrO1xuMTQwNTpcdFx0XHR9XG4xNDA2Olx0XHR9XG4xNDA3Olx0XHRyZXR1cm4gdHhfc2xhdmU7XG4xNDA4Olx0fVxuMTQwOTpcdFxuMTQxMDpcdG5ldGRldl90eF90IGJvbmRfdGxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuMTQxMTpcdHtcbjE0MTI6XHRcdHN0cnVjdCBib25kaW5nICpib25kID0gbmV0ZGV2X3ByaXYoYm9uZF9kZXYpO1xuMTQxMzpcdFx0c3RydWN0IHNsYXZlICp0eF9zbGF2ZTtcbjE0MTQ6XHRcbjE0MTU6XHRcdHR4X3NsYXZlID0gYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcbjE0MTY6XHRcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xuMTQxNzpcdH1cbjE0MTg6XHRcbjE0MTk6XHRzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuMTQyMDpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjE0MjE6XHR7XG4xNDIyOlx0XHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xuMTQyMzpcdFx0c3RhdGljIGNvbnN0IF9fYmUzMiBpcF9iY2FzdCA9IGh0b25sKDB4ZmZmZmZmZmYpO1xuMTQyNDpcdFx0c3RydWN0IHNsYXZlICp0eF9zbGF2ZSA9IE5VTEw7XG4xNDI1Olx0XHRjb25zdCB1OCAqaGFzaF9zdGFydCA9IE5VTEw7XG4xNDI2Olx0XHRib29sIGRvX3R4X2JhbGFuY2UgPSB0cnVlO1xuMTQyNzpcdFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XG4xNDI4Olx0XHR1MzIgaGFzaF9pbmRleCA9IDA7XG4xNDI5Olx0XHRpbnQgaGFzaF9zaXplID0gMDtcbjE0MzA6XHRcbjE0MzE6XHRcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4xNDMyOlx0XHRldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTtcbjE0MzM6XHRcbjE0MzQ6XHRcdHN3aXRjaCAobnRvaHMoc2tiLVx1MDAzZXByb3RvY29sKSkge1xuMTQzNTpcdFx0Y2FzZSBFVEhfUF9JUDoge1xuMTQzNjpcdFx0XHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDtcbjE0Mzc6XHRcbjE0Mzg6XHRcdFx0aWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLVx1MDAzZWhfZGVzdCkgfHxcbjE0Mzk6XHRcdFx0ICAgICFwc2tiX25ldHdvcmtfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpKSB7XG4xNDQwOlx0XHRcdFx0ZG9fdHhfYmFsYW5jZSA9IGZhbHNlO1xuMTQ0MTpcdFx0XHRcdGJyZWFrO1xuMTQ0MjpcdFx0XHR9XG4xNDQzOlx0XHRcdGlwaCA9IGlwX2hkcihza2IpO1xuMTQ0NDpcdFx0XHRpZiAoaXBoLVx1MDAzZWRhZGRyID09IGlwX2JjYXN0IHx8IGlwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX0lHTVApIHtcbjE0NDU6XHRcdFx0XHRkb190eF9iYWxhbmNlID0gZmFsc2U7XG4xNDQ2Olx0XHRcdFx0YnJlYWs7XG4xNDQ3Olx0XHRcdH1cbjE0NDg6XHRcdFx0aGFzaF9zdGFydCA9IChjaGFyICopXHUwMDI2KGlwaC1cdTAwM2VkYWRkcik7XG4xNDQ5Olx0XHRcdGhhc2hfc2l6ZSA9IHNpemVvZihpcGgtXHUwMDNlZGFkZHIpO1xuMTQ1MDpcdFx0XHRicmVhaztcbjE0NTE6XHRcdH1cbjE0NTI6XHRcdGNhc2UgRVRIX1BfSVBWNjoge1xuMTQ1MzpcdFx0XHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aGRyO1xuMTQ1NDpcdFxuMTQ1NTpcdFx0XHQvKiBJUHY2IGRvZXNuJiMzOTt0IHJlYWxseSB1c2UgYnJvYWRjYXN0IG1hYyBhZGRyZXNzLCBidXQgbGVhdmVcbjE0NTY6XHRcdFx0ICogdGhhdCBoZXJlIGp1c3QgaW4gY2FzZS5cbjE0NTc6XHRcdFx0ICovXG4xNDU4Olx0XHRcdGlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cdTAwM2VoX2Rlc3QpKSB7XG4xNDU5Olx0XHRcdFx0ZG9fdHhfYmFsYW5jZSA9IGZhbHNlO1xuMTQ2MDpcdFx0XHRcdGJyZWFrO1xuMTQ2MTpcdFx0XHR9XG4xNDYyOlx0XG4xNDYzOlx0XHRcdC8qIElQdjYgdXNlcyBhbGwtbm9kZXMgbXVsdGljYXN0IGFzIGFuIGVxdWl2YWxlbnQgdG9cbjE0NjQ6XHRcdFx0ICogYnJvYWRjYXN0cyBpbiBJUHY0LlxuMTQ2NTpcdFx0XHQgKi9cbjE0NjY6XHRcdFx0aWYgKGV0aGVyX2FkZHJfZXF1YWxfNjRiaXRzKGV0aF9kYXRhLVx1MDAzZWhfZGVzdCwgbWFjX3Y2X2FsbG1jYXN0KSkge1xuMTQ2NzpcdFx0XHRcdGRvX3R4X2JhbGFuY2UgPSBmYWxzZTtcbjE0Njg6XHRcdFx0XHRicmVhaztcbjE0Njk6XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI1MgoJCQkJCQkJb3V0cHV0OiAyMjUKCQkJCQkJCXRob3VnaHRzOiA1MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gTmV3IENvbmNlcm5zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIGFuYWx5emluZyB0aGUgcGF0Y2ggdG8gYGFsYl9kZXRlcm1pbmVfbmRgLCBteSBwcmltYXJ5IGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCBtZW1vcnkgc2FmZXR5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlIGZ1bmN0aW9uIGlzIGhhbmRsaW5nIElQdjYgTmVpZ2hib3IgRGlzY292ZXJ5IHBhY2tldHMsIHNvIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHBhY2tldCBwYXJzaW5nIGlzIGNyaXRpY2FsLgoKVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgcG90ZW50aWFsIGlzc3VlOiBpdCB3YXMgdXNpbmcgYGljbXA2X2hkcihza2IpYCB3aGljaCB1c2VzIGBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpYC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgaXNuJiMzOTt0IG5lY2Vzc2FyaWx5IHZhbGlkIGR1cmluZyB0aGUgdHJhbnNtaXQgcGF0aC4gVGhpcyBwYXRjaCBjbGV2ZXJseSBjaXJjdW12ZW50cyB0aGF0IGJ5IGNhbGN1bGF0aW5nIHRoZSBoZWFkZXImIzM5O3MgbG9jYXRpb24gZGlyZWN0bHkgZnJvbSB0aGUgSVB2NiBoZWFkZXIgKGAoY29uc3Qgc3RydWN0IGljbXA2aGRyICopKGlwNmhkciAmIzQzOyAxKWApLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBmaXggdG8gYSBwb3RlbnRpYWwgYnVnLgoKVGhlIHJlYWxseSBnb29kIHBhcnQgaXMgdGhhdCBhbGwgdGhlIGNydWNpYWwgbWVtb3J5IGFjY2Vzc2VzIGZyb20gdGhlIGBza2JgIGFyZSBwcm90ZWN0ZWQgd2l0aCBgcHNrYl9uZXR3b3JrX21heV9wdWxsKClgLiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBJIGxpa2UgdG8gc2VlIOKAkyBleHBsaWNpdCBib3VuZHMgY2hlY2tzIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlIHJlYXNvbmluZyBjbGFpbXMgdGhpcyBhbHNvIHZhbGlkYXRlcyB0aGUgc2tiIGRhdGEuCgpJJiMzOTt2ZSBjaGVja2VkIHRoZSBwYXRjaCwgYW5kIGl0IGFkZHJlc3NlcyB0aGUgb3JpZ2luYWwgaXNzdWUsIGFuZCBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgY29weSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2UsIG9yIHVzZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBvciBhbnkgb3RoZXIgdW5pbml0aWFsaXplZCBmaWVsZHMuIFRoZXJlJiMzOTtzIG5vIGhpbnQgb2YgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWthZ2UgdGhhdCBJIGNhbiBzZWUuIEtBU0FOIHNob3VsZCBoYW5kbGUgYW55IGJhc2ljIG1lbW9yeSBlcnJvcnMgc3VjaCBhcyBhbiBvdXQgb2YgYm91bmRzIHJlYWQsIGR1ZSB0byB0aGUgcHJlc2VuY2Ugb2YgYHBza2JfbmV0d29ya19tYXlfcHVsbCgpYC4KCkdpdmVuIHRoYXQgdGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGJ1ZywgdXNlcyBzYWZlIG1lbW9yeSBhY2Nlc3MgYW5kIGF2b2lkcyBpbnRyb2R1Y2luZyBuZXcgYXJlYXMgb2YgY29uY2VybiwgSSYjMzk7bSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgS01TQU4gZnV6emluZyBpc24mIzM5O3QgbmVjZXNzYXJ5LiBMZXQmIzM5O3MgbWFyayB0aGlzIGFzIGEgbm8tb3AgZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLgoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBhbGJfZGV0ZXJtaW5lX25kKClgIGluIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgIHRvIGNvbXB1dGUgdGhlIElDTVB2NiBoZWFkZXIgbG9jYXRpb24gZGlyZWN0bHkgZm9sbG93aW5nIHRoZSBJUHY2IGhlYWRlciAoYChjb25zdCBzdHJ1Y3QgaWNtcDZoZHIgKikoaXA2aGRyICYjNDM7IDEpYCkgaW5zdGVhZCBvZiBpbnZva2luZyBgaWNtcDZfaGRyKHNrYilgICh3aGljaCByZWxpZXMgb24gYHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYilgIGJlaW5nIGluaXRpYWxpemVkKS4gSXQgYWxzbyBkcm9wcyBhbiB1bnVzZWQgYGJvbmRgIHBhcmFtZXRlci5cblxuVGhlIHBhY2tldCBwYXlsb2FkIGJ5dGVzIHJlYWQgYnkgdGhpcyBmdW5jdGlvbiBhcmUgdmVyaWZpZWQgdG8gZXhpc3QgaW4gdGhlIGxpbmVhciBidWZmZXIgdXNpbmcgYHBza2JfbmV0d29ya19tYXlfcHVsbCgpYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbnkgcG90ZW50aWFsIGJ1ZmZlciBib3VuZHMgb3Igc2tiIGRlcmVmZXJlbmNlIGlzc3VlcyBpbiB0aGlzIHBhdGggYXJlIGNvdmVyZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGFsYl9kZXRlcm1pbmVfbmQoKWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY2AgdG8gY29tcHV0ZSB0aGUgSUNNUHY2IGhlYWRlciBsb2NhdGlvbiBkaXJlY3RseSBmb2xsb3dpbmcgdGhlIElQdjYgaGVhZGVyIChgKGNvbnN0IHN0cnVjdCBpY21wNmhkciAqKShpcDZoZHIgJiM0MzsgMSlgKSBpbnN0ZWFkIG9mIGludm9raW5nIGBpY21wNl9oZHIoc2tiKWAgKHdoaWNoIHJlbGllcyBvbiBgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKWAgYmVpbmcgaW5pdGlhbGl6ZWQpLiBJdCBhbHNvIGRyb3BzIGFuIHVudXNlZCBgYm9uZGAgcGFyYW1ldGVyLlxuXG5UaGUgcGFja2V0IHBheWxvYWQgYnl0ZXMgcmVhZCBieSB0aGlzIGZ1bmN0aW9uIGFyZSB2ZXJpZmllZCB0byBleGlzdCBpbiB0aGUgbGluZWFyIGJ1ZmZlciB1c2luZyBgcHNrYl9uZXR3b3JrX21heV9wdWxsKClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIEFueSBwb3RlbnRpYWwgYnVmZmVyIGJvdW5kcyBvciBza2IgZGVyZWZlcmVuY2UgaXNzdWVzIGluIHRoaXMgcGF0aCBhcmUgY292ZXJlZCBieSBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjExOjM0LjU0MTk1MTkyOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjgxMzgyMzE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCT05ESU5HXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJORVRfQ09SRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0XCIsXG4gICAgXCJib25kX3htaXRfdGxiX3NsYXZlX2dldFwiLFxuICAgIFwiYm9uZF9hbGJfeG1pdFwiLFxuICAgIFwiYm9uZF90bGJfeG1pdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGFsYl9kZXRlcm1pbmVfbmQoKWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY2AgdG8gY29tcHV0ZSB0aGUgSUNNUHY2IGhlYWRlciBsb2NhdGlvbiBkaXJlY3RseSBmb2xsb3dpbmcgdGhlIElQdjYgaGVhZGVyIChgKGNvbnN0IHN0cnVjdCBpY21wNmhkciAqKShpcDZoZHIgKyAxKWApIGluc3RlYWQgb2YgaW52b2tpbmcgYGljbXA2X2hkcihza2IpYCAod2hpY2ggcmVsaWVzIG9uIGBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpYCBiZWluZyBpbml0aWFsaXplZCkuIEl0IGFsc28gZHJvcHMgYW4gdW51c2VkIGBib25kYCBwYXJhbWV0ZXIuXFxuXFxuVGhlIHBhY2tldCBwYXlsb2FkIGJ5dGVzIHJlYWQgYnkgdGhpcyBmdW5jdGlvbiBhcmUgdmVyaWZpZWQgdG8gZXhpc3QgaW4gdGhlIGxpbmVhciBidWZmZXIgdXNpbmcgYHBza2JfbmV0d29ya19tYXlfcHVsbCgpYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbnkgcG90ZW50aWFsIGJ1ZmZlciBib3VuZHMgb3Igc2tiIGRlcmVmZXJlbmNlIGlzc3VlcyBpbiB0aGlzIHBhdGggYXJlIGNvdmVyZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHBhY2tldCBoZWFkZXIgcGFyc2luZyBmb3IgSVB2NiBOZWlnaGJvciBEaXNjb3ZlcnkgKE5EKSBwYWNrZXRzIGR1cmluZyB0cmFuc21pdCBsb2FkIGJhbGFuY2luZyBpbiBib25kaW5nIEFMQiBhbmQgVExCIG1vZGVzIChhbGJfZGV0ZXJtaW5lX25kKS4gUHJldmlvdXNseSwgaXQgdXNlZCBpY21wNl9oZHIoc2tiKSAod2hpY2ggcmVsaWVzIG9uIHNrYl90cmFuc3BvcnRfaGVhZGVyLCBub3QgbmVjZXNzYXJpbHkgc2V0IG9uIHRoZSBUWCBwYXRoKSBhbmQgZGlkbid0IHJlbG9hZCB0aGUgSVB2NiBoZWFkZXIgcG9pbnRlciBhZnRlciBwc2tiX25ldHdvcmtfbWF5X3B1bGwgcmVhbGxvY2F0aW9ucy4gVGhpcyBmdW5jdGlvbmFsIGZpeCBhZmZlY3RzIHBhY2tldCB0cmFuc21pc3Npb24gb3ZlciBib25kaW5nIHZpcnR1YWwgaW50ZXJmYWNlcyBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDM6MTE6MzQuNTQxOTU4MTM4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzExODk2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkZDhkNjI1ODgzYzczZTNhMDgxMDJkODEzOTQxNjI1YWIyZjE4OWI0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDEgMDM6MTE6MzMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXFxuaW5kZXggODM5Zjc0ODJkYzE4Mi4uNTA3M2FlZWJhNmM5NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcXG5AQCAtMTI4MSwxMCArMTI4MSwxMCBAQCBzdGF0aWMgaW50IGFsYl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IGJvbmRpbmcgKmJvbmQsIHZvaWQgKmFkZHIpXFxuIH1cXG4gXFxuIC8qIGRldGVybWluZSBpZiB0aGUgcGFja2V0IGlzIE5BIG9yIE5TICovXFxuLXN0YXRpYyBib29sIGFsYl9kZXRlcm1pbmVfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuK3N0YXRpYyBib29sIGFsYl9kZXRlcm1pbmVfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aGRyO1xcbi1cXHRzdHJ1Y3QgaWNtcDZoZHIgKmhkcjtcXG4rXFx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNmhkcjtcXG4rXFx0Y29uc3Qgc3RydWN0IGljbXA2aGRyICpoZHI7XFxuIFxcbiBcXHRpZiAoIXBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZigqaXA2aGRyKSkpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbkBAIC0xMjk2LDcgKzEyOTYsOCBAQCBzdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKVxcbiBcXHRpZiAoIXBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZigqaXA2aGRyKSArIHNpemVvZigqaGRyKSkpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4tXFx0aGRyID0gaWNtcDZfaGRyKHNrYik7XFxuK1xcdGlwNmhkciA9IGlwdjZfaGRyKHNrYik7XFxuK1xcdGhkciA9IChjb25zdCBzdHJ1Y3QgaWNtcDZoZHIgKikoaXA2aGRyICsgMSk7XFxuIFxcdHJldHVybiBoZHItXFx1MDAzZWljbXA2X3R5cGUgPT0gTkRJU0NfTkVJR0hCT1VSX0FEVkVSVElTRU1FTlQgfHxcXG4gXFx0XFx0aGRyLVxcdTAwM2VpY21wNl90eXBlID09IE5ESVNDX05FSUdIQk9VUl9TT0xJQ0lUQVRJT047XFxuIH1cXG5AQCAtMTM4MSw3ICsxMzgyLDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4gXFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cXHUwMDNlaF9kZXN0KSkge1xcbiBcXHRcXHRzd2l0Y2ggKHNrYi1cXHUwMDNlcHJvdG9jb2wpIHtcXG4gXFx0XFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG4tXFx0XFx0XFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiLCBib25kKSlcXG4rXFx0XFx0XFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiKSlcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiBcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG5AQCAtMTQ2Nyw3ICsxNDY4LDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYiwgYm9uZCkpIHtcXG4rXFx0XFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiKSkge1xcbiBcXHRcXHRcXHRkb190eF9iYWxhbmNlID0gZmFsc2U7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjExOjM0Ljk3MzgwNzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ4NTA5NjUwNzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJPTkRJTkdcIixcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIixcbiAgICBcIk5FVF9DT1JFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRcIixcbiAgICBcImJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0XCIsXG4gICAgXCJib25kX2FsYl94bWl0XCIsXG4gICAgXCJib25kX3RsYl94bWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcGFja2V0IGhlYWRlciBwYXJzaW5nIGZvciBJUHY2IE5laWdoYm9yIERpc2NvdmVyeSAoTkQpIHBhY2tldHMgZHVyaW5nIHRyYW5zbWl0IGxvYWQgYmFsYW5jaW5nIGluIGJvbmRpbmcgQUxCIGFuZCBUTEIgbW9kZXMgKGFsYl9kZXRlcm1pbmVfbmQpLiBQcmV2aW91c2x5LCBpdCB1c2VkIGljbXA2X2hkcihza2IpICh3aGljaCByZWxpZXMgb24gc2tiX3RyYW5zcG9ydF9oZWFkZXIsIG5vdCBuZWNlc3NhcmlseSBzZXQgb24gdGhlIFRYIHBhdGgpIGFuZCBkaWRuJ3QgcmVsb2FkIHRoZSBJUHY2IGhlYWRlciBwb2ludGVyIGFmdGVyIHBza2JfbmV0d29ya19tYXlfcHVsbCByZWFsbG9jYXRpb25zLiBUaGlzIGZ1bmN0aW9uYWwgZml4IGFmZmVjdHMgcGFja2V0IHRyYW5zbWlzc2lvbiBvdmVyIGJvbmRpbmcgdmlydHVhbCBpbnRlcmZhY2VzIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkZDhkNjI1ODgzYzczZTNhMDgxMDJkODEzOTQxNjI1YWIyZjE4OWI0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAwMzoxMTozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xuaW5kZXggODM5Zjc0ODJkYzE4Mi4uNTA3M2FlZWJhNmM5NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xuKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXG5AQCAtMTI4MSwxMCArMTI4MSwxMCBAQCBzdGF0aWMgaW50IGFsYl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IGJvbmRpbmcgKmJvbmQsIHZvaWQgKmFkZHIpXG4gfVxuIFxuIC8qIGRldGVybWluZSBpZiB0aGUgcGFja2V0IGlzIE5BIG9yIE5TICovXG4tc3RhdGljIGJvb2wgYWxiX2RldGVybWluZV9uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbitzdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IGlwdjZoZHIgKmlwNmhkcjtcbi1cdHN0cnVjdCBpY21wNmhkciAqaGRyO1xuK1x0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNmhkcjtcbitcdGNvbnN0IHN0cnVjdCBpY21wNmhkciAqaGRyO1xuIFxuIFx0aWYgKCFwc2tiX25ldHdvcmtfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwNmhkcikpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbkBAIC0xMjk2LDcgKzEyOTYsOCBAQCBzdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKVxuIFx0aWYgKCFwc2tiX25ldHdvcmtfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwNmhkcikgKyBzaXplb2YoKmhkcikpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdGhkciA9IGljbXA2X2hkcihza2IpO1xuK1x0aXA2aGRyID0gaXB2Nl9oZHIoc2tiKTtcbitcdGhkciA9IChjb25zdCBzdHJ1Y3QgaWNtcDZoZHIgKikoaXA2aGRyICsgMSk7XG4gXHRyZXR1cm4gaGRyLVx1MDAzZWljbXA2X3R5cGUgPT0gTkRJU0NfTkVJR0hCT1VSX0FEVkVSVElTRU1FTlQgfHxcbiBcdFx0aGRyLVx1MDAzZWljbXA2X3R5cGUgPT0gTkRJU0NfTkVJR0hCT1VSX1NPTElDSVRBVElPTjtcbiB9XG5AQCAtMTM4MSw3ICsxMzgyLDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbiBcdGlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZXRoX2RhdGEtXHUwMDNlaF9kZXN0KSkge1xuIFx0XHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuIFx0XHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxuLVx0XHRcdGlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYiwgYm9uZCkpXG4rXHRcdFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiKSlcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGZhbGx0aHJvdWdoO1xuIFx0XHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbkBAIC0xNDY3LDcgKzE0NjgsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRcdGlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYiwgYm9uZCkpIHtcbitcdFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiKSkge1xuIFx0XHRcdGRvX3R4X2JhbGFuY2UgPSBmYWxzZTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDM6MTE6MzQuOTczODA4NzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NjExMzg5MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGJvbmRfYWxiLmNgIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBwYXRjaCBpcyB0YXJnZXRpbmcgYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBBY3RpdmUtQmFja3VwIChBTEIpIGJvbmRpbmcsIHNwZWNpZmljYWxseSB0aGUgbG9naWMgZm9yIGRldGVybWluaW5nIE5laWdoYm9yIERpc2NvdmVyeSBwYWNrZXRzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFuZCBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIGJ1dCBsZXQncyByZWFkIHRoZSBwYXRjaCBmaXJzdCB0byBnZXQgYSBncmFzcCBvZiB0aGUgaW50ZW50LlxuXG5BbHJpZ2h0LCB0aGUgcHJpbWFyeSBtb2RpZmljYXRpb24gaXMgd2l0aGluIHRoZSBgYWxiX2RldGVybWluZV9uZGAgZnVuY3Rpb24uIExvb2tpbmcgYXQgdGhlIGRpZmYsIEkgc2VlIHRoZSBjb3JlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgaG93IHRoZSBgaWNtcDZoZHJgIGlzIGFjY2Vzc2VkIGFmdGVyIGEgcG90ZW50aWFsIGBwc2tiX25ldHdvcmtfbWF5X3B1bGxgIGNhbGwuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBiZWNhdXNlIGNhbGxpbmcgYHBza2JfbmV0d29ya19tYXlfcHVsbGAgbWlnaHQgcmVhbGxvY2F0ZSB0aGUgYHNrYi1cdTAwM2VoZWFkYCwgaW52YWxpZGF0aW5nIHRoZSBwb2ludGVycyBgaXA2aGRyYCBhbmQgdGhlIHJlc3VsdCBvZiB0aGUgYGljbXA2X2hkcihza2IpYCBtYWNyby4gVGhlIG1hY3JvIHVzZXMgYHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYilgLCBidXQgaWYgYHBza2JfbmV0d29ya19tYXlfcHVsbGAgaGFzIHJlYWxsb2NhdGVkIHRoZSBoZWFkZXJzIHRoZW4gdGhlIHRyYW5zcG9ydCBoZWFkZXIgbWlnaHQgbm90IGJlIHByb3Blcmx5IHNldCwgYW5kIHRoZSBgaWNtcDZfaGRyKHNrYilgIG1heSBiZSByZWZlcmVuY2luZyBpbmNvcnJlY3QgbWVtb3J5LlxuXG5Fc3NlbnRpYWxseSwgdGhlIGZpeCBhdm9pZHMgdGhlIHBvdGVudGlhbCBkb3VibGUgZGVyZWZlcmVuY2Ugb2YgYGlwNmhkcmAgYW5kIG5vdyBjb3JyZWN0bHkgZGVyaXZlcyBgaGRyYCBmcm9tIHRoZSBwb3N0LWBwc2tiX25ldHdvcmtfbWF5X3B1bGxgIGxvY2F0aW9uIG9mIGBpcDZoZHJgLiBFeGNlbGxlbnQsIHRoaXMgaXMgYSBjbGVhbiBhbmQgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgYSBzdWJ0bGUgbWVtb3J5IHNhZmV0eSBpc3N1ZS5cblxuTm93LCBsZXQgbWUganVzdCBjcm9zcy1yZWZlcmVuY2UgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGJvbmRfYWxiLmNgIHRvIGNvbmZpcm0gdGhlIGZpeCBpcyBsb2NhbGl6ZWQsIGFuZCBtYWtlIHN1cmUgdGhhdCBpdCdzIGluIHRoZSByaWdodCBzcG90LCBhbmQgbm90IGluZGljYXRpbmcgYW4gaXNzdWUgZWxzZXdoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTQzLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDM6MTE6NDIuNTg1MjAwMzVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNzUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjc1OlxcdFxcdFxcdFxcdFxcdCAgcm9sbGJhY2tfc2xhdmUtXFx1MDAzZWRldi1cXHUwMDNlYWRkcl9sZW4pO1xcbjEyNzY6XFx0XFx0XFx0ZGV2X3NldF9tYWNfYWRkcmVzcyhyb2xsYmFja19zbGF2ZS1cXHUwMDNlZGV2LCBcXHUwMDI2c3MsIE5VTEwpO1xcbjEyNzc6XFx0XFx0XFx0ZGV2X2FkZHJfc2V0KHJvbGxiYWNrX3NsYXZlLVxcdTAwM2VkZXYsIHRtcF9hZGRyKTtcXG4xMjc4OlxcdFxcdH1cXG4xMjc5OlxcdFxcbjEyODA6XFx0XFx0cmV0dXJuIHJlcztcXG4xMjgxOlxcdH1cXG4xMjgyOlxcdFxcbjEyODM6XFx0LyogZGV0ZXJtaW5lIGlmIHRoZSBwYWNrZXQgaXMgTkEgb3IgTlMgKi9cXG4xMjg0OlxcdHN0YXRpYyBib29sIGFsYl9kZXRlcm1pbmVfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMjg1OlxcdHtcXG4xMjg2OlxcdFxcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoZHI7XFxuMTI4NzpcXHRcXHRjb25zdCBzdHJ1Y3QgaWNtcDZoZHIgKmhkcjtcXG4xMjg4OlxcdFxcbjEyODk6XFx0XFx0aWYgKCFwc2tiX25ldHdvcmtfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwNmhkcikpKVxcbjEyOTA6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMTI5MTpcXHRcXG4xMjkyOlxcdFxcdGlwNmhkciA9IGlwdjZfaGRyKHNrYik7XFxuMTI5MzpcXHRcXHRpZiAoaXA2aGRyLVxcdTAwM2VuZXh0aGRyICE9IElQUFJPVE9fSUNNUFY2KVxcbjEyOTQ6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEyOTU6XFx0XFxuMTI5NjpcXHRcXHRpZiAoIXBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZigqaXA2aGRyKSArIHNpemVvZigqaGRyKSkpXFxuMTI5NzpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMjk4OlxcdFxcbjEyOTk6XFx0XFx0aXA2aGRyID0gaXB2Nl9oZHIoc2tiKTtcXG4xMzAwOlxcdFxcdGhkciA9IChjb25zdCBzdHJ1Y3QgaWNtcDZoZHIgKikoaXA2aGRyICsgMSk7XFxuMTMwMTpcXHRcXHRyZXR1cm4gaGRyLVxcdTAwM2VpY21wNl90eXBlID09IE5ESVNDX05FSUdIQk9VUl9BRFZFUlRJU0VNRU5UIHx8XFxuMTMwMjpcXHRcXHRcXHRoZHItXFx1MDAzZWljbXA2X3R5cGUgPT0gTkRJU0NfTkVJR0hCT1VSX1NPTElDSVRBVElPTjtcXG4xMzAzOlxcdH1cXG4xMzA0OlxcdFxcbjEzMDU6XFx0LyoqKioqKioqKioqKioqKioqKioqKioqKiBleHBvcnRlZCBhbGIgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKi9cXG4xMzA2OlxcdFxcbjEzMDc6XFx0aW50IGJvbmRfYWxiX2luaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQsIGludCBybGJfZW5hYmxlZClcXG4xMzA4OlxcdHtcXG4xMzA5OlxcdFxcdGludCByZXM7XFxuMTMxMDpcXHRcXG4xMzExOlxcdFxcdHJlcyA9IHRsYl9pbml0aWFsaXplKGJvbmQpO1xcbjEzMTI6XFx0XFx0aWYgKHJlcylcXG4xMzEzOlxcdFxcdFxcdHJldHVybiByZXM7XFxuMTMxNDpcXHRcXG4xMzE1OlxcdFxcdGlmIChybGJfZW5hYmxlZCkge1xcbjEzMTY6XFx0XFx0XFx0cmVzID0gcmxiX2luaXRpYWxpemUoYm9uZCk7XFxuMTMxNzpcXHRcXHRcXHRpZiAocmVzKSB7XFxuMTMxODpcXHRcXHRcXHRcXHR0bGJfZGVpbml0aWFsaXplKGJvbmQpO1xcbjEzMTk6XFx0XFx0XFx0XFx0cmV0dXJuIHJlcztcXG4xMzIwOlxcdFxcdFxcdH1cXG4xMzIxOlxcdFxcdFxcdGJvbmQtXFx1MDAzZWFsYl9pbmZvLnJsYl9lbmFibGVkID0gMTtcXG4xMzIyOlxcdFxcdH0gZWxzZSB7XFxuMTMyMzpcXHRcXHRcXHRib25kLVxcdTAwM2VhbGJfaW5mby5ybGJfZW5hYmxlZCA9IDA7XFxuMTMyNDpcXHRcXHR9XFxuMTMyNTpcXHRcXG4xMzI2OlxcdFxcdHJldHVybiAwO1xcbjEzMjc6XFx0fVxcbjEzMjg6XFx0XFxuMTMyOTpcXHR2b2lkIGJvbmRfYWxiX2RlaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG4xMzMwOlxcdHtcXG4xMzMxOlxcdFxcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xcbjEzMzI6XFx0XFxuMTMzMzpcXHRcXHR0bGJfZGVpbml0aWFsaXplKGJvbmQpO1xcbjEzMzQ6XFx0XFxuMTMzNTpcXHRcXHRpZiAoYm9uZF9pbmZvLVxcdTAwM2VybGJfZW5hYmxlZClcXG4xMzM2OlxcdFxcdFxcdHJsYl9kZWluaXRpYWxpemUoYm9uZCk7XFxuMTMzNzpcXHR9XFxuMTMzODpcXHRcXG4xMzM5OlxcdHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxcbjEzNDA6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUpXFxuMTM0MTpcXHR7XFxuMTM0MjpcXHRcXHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcXG4xMzQzOlxcdFxcdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xcbjEzNDQ6XFx0XFxuMTM0NTpcXHRcXHRpZiAoIXR4X3NsYXZlKSB7XFxuMTM0NjpcXHRcXHRcXHQvKiB1bmJhbGFuY2VkIG9yIHVuYXNzaWduZWQsIHNlbmQgdGhyb3VnaCBwcmltYXJ5ICovXFxuMTM0NzpcXHRcXHRcXHR0eF9zbGF2ZSA9IHJjdV9kZXJlZmVyZW5jZShib25kLVxcdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSk7XFxuMTM0ODpcXHRcXHRcXHRpZiAoYm9uZC1cXHUwMDNlcGFyYW1zLnRsYl9keW5hbWljX2xiKVxcbjEzNDk6XFx0XFx0XFx0XFx0Ym9uZF9pbmZvLVxcdTAwM2V1bmJhbGFuY2VkX2xvYWQgKz0gc2tiLVxcdTAwM2VsZW47XFxuMTM1MDpcXHRcXHR9XFxuMTM1MTpcXHRcXG4xMzUyOlxcdFxcdGlmICh0eF9zbGF2ZSBcXHUwMDI2XFx1MDAyNiBib25kX3NsYXZlX2Nhbl90eCh0eF9zbGF2ZSkpIHtcXG4xMzUzOlxcdFxcdFxcdGlmICh0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpKSB7XFxuMTM1NDpcXHRcXHRcXHRcXHRldGhlcl9hZGRyX2NvcHkoZXRoX2RhdGEtXFx1MDAzZWhfc291cmNlLFxcbjEzNTU6XFx0XFx0XFx0XFx0XFx0XFx0dHhfc2xhdmUtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbjEzNTY6XFx0XFx0XFx0fVxcbjEzNTc6XFx0XFxuMTM1ODpcXHRcXHRcXHRyZXR1cm4gYm9uZF9kZXZfcXVldWVfeG1pdChib25kLCBza2IsIHR4X3NsYXZlLVxcdTAwM2VkZXYpO1xcbjEzNTk6XFx0XFx0fVxcbjEzNjA6XFx0XFxuMTM2MTpcXHRcXHRpZiAodHhfc2xhdmUgXFx1MDAyNlxcdTAwMjYgYm9uZC1cXHUwMDNlcGFyYW1zLnRsYl9keW5hbWljX2xiKSB7XFxuMTM2MjpcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNmJvbmQtXFx1MDAzZW1vZGVfbG9jayk7XFxuMTM2MzpcXHRcXHRcXHRfX3RsYl9jbGVhcl9zbGF2ZShib25kLCB0eF9zbGF2ZSwgMCk7XFxuMTM2NDpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Ym9uZC1cXHUwMDNlbW9kZV9sb2NrKTtcXG4xMzY1OlxcdFxcdH1cXG4xMzY2OlxcdFxcbjEzNjc6XFx0XFx0Lyogbm8gc3VpdGFibGUgaW50ZXJmYWNlLCBmcmFtZSBub3Qgc2VudCAqL1xcbjEzNjg6XFx0XFx0cmV0dXJuIGJvbmRfdHhfZHJvcChib25kLVxcdTAwM2VkZXYsIHNrYik7XFxuMTM2OTpcXHR9XFxuMTM3MDpcXHRcXG4xMzcxOlxcdHN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuMTM3MjpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjEzNzM6XFx0e1xcbjEzNzQ6XFx0XFx0c3RydWN0IHNsYXZlICp0eF9zbGF2ZSA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjExOjQyLjU4NTMxMzg3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc4MTQyNjg0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS5cblxuKipEZWVwZXIgRGl2ZSBpbnRvIEJvbmRlZCBUcmFuc21pc3Npb24gYW5kIFRMQi9BTEIgU2xhdmUgUmV0cmlldmFsKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBvZiBob3cgdGhlc2UgdHJhbnNtaXNzaW9uIGZ1bmN0aW9ucyAoYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCBhbmQgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCkgYW5kIHRoZSB3YXkgdGhleSdyZSB1c2VkLiBJJ3ZlIGdvdCBhIHByZXR0eSBzb2xpZCBncmFzcCBvbiB0aGVzZSB0b3BpY3MgaW4gZ2VuZXJhbCwgYnV0IEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1YnRsZSBpbnRlcmFjdGlvbnMgb3IgZWRnZSBjYXNlcyBJJ20gbWlzc2luZyByZWxhdGVkIHRvIHRoZSBpbXBsZW1lbnRhdGlvbi4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IHRyYWNlIGFsbCBvZiB0aGUgY2FsbGVycyBvZiB0aGVzZSBtZXRob2RzIHRvIGVuc3VyZSBJIGFjY291bnQgZm9yIGFsbCBjb2RlIHBhdGhzLiBUaGUgZnVuY3Rpb25zIHRoZW1zZWx2ZXMgc2VlbSBmaW5lLCBidXQgSSd2ZSBsZWFybmVkIHRoYXQgYSBnb29kIGVuZ2luZWVyIG5lZWRzIHRvIGZvY3VzIG9uIHVzZSBjYXNlcyBqdXN0IGFzIGNhcmVmdWxseSBhcyB0aGUgaW1wbGVtZW50YXRpb25zLiBMZXQncyBzdGFydCB3aXRoIHRob3NlIGZ1bmN0aW9ucyBhbmQgdGhlaXIgY2FsbGVycywgYW5kIHRob3JvdWdobHkgcmV2aWV3IHRoZSByZWxhdGVkIG1vZHVsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNTgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjExOjQ0LjM2Njc0MjY1NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM3MCxcbiAgXCJMaW5lQ291bnRcIjogMTA1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNzA6XFx0XFxuMTM3MTpcXHRzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbjEzNzI6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMzczOlxcdHtcXG4xMzc0OlxcdFxcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUgPSBOVUxMO1xcbjEzNzU6XFx0XFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XFxuMTM3NjpcXHRcXHR1MzIgaGFzaF9pbmRleDtcXG4xMzc3OlxcdFxcbjEzNzg6XFx0XFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4xMzc5OlxcdFxcdGV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xcbjEzODA6XFx0XFxuMTM4MTpcXHRcXHQvKiBEbyBub3QgVFggYmFsYW5jZSBhbnkgbXVsdGljYXN0IG9yIGJyb2FkY2FzdCAqL1xcbjEzODI6XFx0XFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cXHUwMDNlaF9kZXN0KSkge1xcbjEzODM6XFx0XFx0XFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuMTM4NDpcXHRcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxcbjEzODU6XFx0XFx0XFx0XFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiKSlcXG4xMzg2OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjEzODc6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuMTM4ODpcXHRcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4xMzg5OlxcdFxcdFxcdFxcdGhhc2hfaW5kZXggPSBib25kX3htaXRfaGFzaChib25kLCBza2IpO1xcbjEzOTA6XFx0XFx0XFx0XFx0aWYgKGJvbmQtXFx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYikge1xcbjEzOTE6XFx0XFx0XFx0XFx0XFx0dHhfc2xhdmUgPSB0bGJfY2hvb3NlX2NoYW5uZWwoYm9uZCxcXG4xMzkyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGhhc2hfaW5kZXggXFx1MDAyNiAweEZGLFxcbjEzOTM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiLVxcdTAwM2VsZW4pO1xcbjEzOTQ6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4xMzk1OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBib25kX3VwX3NsYXZlICpzbGF2ZXM7XFxuMTM5NjpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY291bnQ7XFxuMTM5NzpcXHRcXG4xMzk4OlxcdFxcdFxcdFxcdFxcdHNsYXZlcyA9IHJjdV9kZXJlZmVyZW5jZShib25kLVxcdTAwM2V1c2FibGVfc2xhdmVzKTtcXG4xMzk5OlxcdFxcdFxcdFxcdFxcdGNvdW50ID0gc2xhdmVzID8gUkVBRF9PTkNFKHNsYXZlcy1cXHUwMDNlY291bnQpIDogMDtcXG4xNDAwOlxcdFxcdFxcdFxcdFxcdGlmIChsaWtlbHkoY291bnQpKVxcbjE0MDE6XFx0XFx0XFx0XFx0XFx0XFx0dHhfc2xhdmUgPSBzbGF2ZXMtXFx1MDAzZWFycltoYXNoX2luZGV4ICVcXG4xNDAyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjb3VudF07XFxuMTQwMzpcXHRcXHRcXHRcXHR9XFxuMTQwNDpcXHRcXHRcXHRcXHRicmVhaztcXG4xNDA1OlxcdFxcdFxcdH1cXG4xNDA2OlxcdFxcdH1cXG4xNDA3OlxcdFxcdHJldHVybiB0eF9zbGF2ZTtcXG4xNDA4OlxcdH1cXG4xNDA5OlxcdFxcbjE0MTA6XFx0bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuMTQxMTpcXHR7XFxuMTQxMjpcXHRcXHRzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGJvbmRfZGV2KTtcXG4xNDEzOlxcdFxcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmU7XFxuMTQxNDpcXHRcXG4xNDE1OlxcdFxcdHR4X3NsYXZlID0gYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcXG4xNDE2OlxcdFxcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xcbjE0MTc6XFx0fVxcbjE0MTg6XFx0XFxuMTQxOTpcXHRzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbjE0MjA6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xNDIxOlxcdHtcXG4xNDIyOlxcdFxcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xcbjE0MjM6XFx0XFx0c3RhdGljIGNvbnN0IF9fYmUzMiBpcF9iY2FzdCA9IGh0b25sKDB4ZmZmZmZmZmYpO1xcbjE0MjQ6XFx0XFx0c3RydWN0IHNsYXZlICp0eF9zbGF2ZSA9IE5VTEw7XFxuMTQyNTpcXHRcXHRjb25zdCB1OCAqaGFzaF9zdGFydCA9IE5VTEw7XFxuMTQyNjpcXHRcXHRib29sIGRvX3R4X2JhbGFuY2UgPSB0cnVlO1xcbjE0Mjc6XFx0XFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XFxuMTQyODpcXHRcXHR1MzIgaGFzaF9pbmRleCA9IDA7XFxuMTQyOTpcXHRcXHRpbnQgaGFzaF9zaXplID0gMDtcXG4xNDMwOlxcdFxcbjE0MzE6XFx0XFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4xNDMyOlxcdFxcdGV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xcbjE0MzM6XFx0XFxuMTQzNDpcXHRcXHRzd2l0Y2ggKG50b2hzKHNrYi1cXHUwMDNlcHJvdG9jb2wpKSB7XFxuMTQzNTpcXHRcXHRjYXNlIEVUSF9QX0lQOiB7XFxuMTQzNjpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDtcXG4xNDM3OlxcdFxcbjE0Mzg6XFx0XFx0XFx0aWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLVxcdTAwM2VoX2Rlc3QpIHx8XFxuMTQzOTpcXHRcXHRcXHQgICAgIXBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSkpIHtcXG4xNDQwOlxcdFxcdFxcdFxcdGRvX3R4X2JhbGFuY2UgPSBmYWxzZTtcXG4xNDQxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE0NDI6XFx0XFx0XFx0fVxcbjE0NDM6XFx0XFx0XFx0aXBoID0gaXBfaGRyKHNrYik7XFxuMTQ0NDpcXHRcXHRcXHRpZiAoaXBoLVxcdTAwM2VkYWRkciA9PSBpcF9iY2FzdCB8fCBpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fSUdNUCkge1xcbjE0NDU6XFx0XFx0XFx0XFx0ZG9fdHhfYmFsYW5jZSA9IGZhbHNlO1xcbjE0NDY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTQ0NzpcXHRcXHRcXHR9XFxuMTQ0ODpcXHRcXHRcXHRoYXNoX3N0YXJ0ID0gKGNoYXIgKilcXHUwMDI2KGlwaC1cXHUwMDNlZGFkZHIpO1xcbjE0NDk6XFx0XFx0XFx0aGFzaF9zaXplID0gc2l6ZW9mKGlwaC1cXHUwMDNlZGFkZHIpO1xcbjE0NTA6XFx0XFx0XFx0YnJlYWs7XFxuMTQ1MTpcXHRcXHR9XFxuMTQ1MjpcXHRcXHRjYXNlIEVUSF9QX0lQVjY6IHtcXG4xNDUzOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoZHI7XFxuMTQ1NDpcXHRcXG4xNDU1OlxcdFxcdFxcdC8qIElQdjYgZG9lc24ndCByZWFsbHkgdXNlIGJyb2FkY2FzdCBtYWMgYWRkcmVzcywgYnV0IGxlYXZlXFxuMTQ1NjpcXHRcXHRcXHQgKiB0aGF0IGhlcmUganVzdCBpbiBjYXNlLlxcbjE0NTc6XFx0XFx0XFx0ICovXFxuMTQ1ODpcXHRcXHRcXHRpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoZXRoX2RhdGEtXFx1MDAzZWhfZGVzdCkpIHtcXG4xNDU5OlxcdFxcdFxcdFxcdGRvX3R4X2JhbGFuY2UgPSBmYWxzZTtcXG4xNDYwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE0NjE6XFx0XFx0XFx0fVxcbjE0NjI6XFx0XFxuMTQ2MzpcXHRcXHRcXHQvKiBJUHY2IHVzZXMgYWxsLW5vZGVzIG11bHRpY2FzdCBhcyBhbiBlcXVpdmFsZW50IHRvXFxuMTQ2NDpcXHRcXHRcXHQgKiBicm9hZGNhc3RzIGluIElQdjQuXFxuMTQ2NTpcXHRcXHRcXHQgKi9cXG4xNDY2OlxcdFxcdFxcdGlmIChldGhlcl9hZGRyX2VxdWFsXzY0Yml0cyhldGhfZGF0YS1cXHUwMDNlaF9kZXN0LCBtYWNfdjZfYWxsbWNhc3QpKSB7XFxuMTQ2NzpcXHRcXHRcXHRcXHRkb190eF9iYWxhbmNlID0gZmFsc2U7XFxuMTQ2ODpcXHRcXHRcXHRcXHRicmVhaztcXG4xNDY5OlxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDM6MTE6NDQuMzY2ODU4OTM1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU2NzgyMjQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSBwcm9tcHQ6XG5cbioqQW5hbHl6aW5nIGBib25kX2FsYi5jYCdzIEFsbG9jYXRpb24gTG9naWMqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLi4uIHRoZSByZXF1ZXN0IGlzIHRvIGxvb2sgYXQgbGluZXMgMTQ3MC0xNTAwIG9mIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgLiBUaGF0IGNodW5rIG9mIGNvZGUgc2hvdWxkIGJlIGtleSB0byBob3cgdGhlIEFjdGl2ZS1CYWNrdXAgTG9hZCBCYWxhbmNpbmcgKGFsYikgbW9kZSBhbGxvY2F0ZXMgdHJhZmZpYyBhY3Jvc3MgdGhlIGJvbmRlZCBpbnRlcmZhY2VzLiBJJ20gYXNzdW1pbmcgd2UncmUgZGVhbGluZyB3aXRoIHBhY2tldCBkaXN0cmlidXRpb24sIGxpa2VseSByZWxhdGVkIHRvIE1BQyBhZGRyZXNzIGFzc2lnbm1lbnQgb3IgaGFzaCBjYWxjdWxhdGlvbnMgaWYgaXQncyBkeW5hbWljLlxuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyBpdCBpZGVudGlmaWVzIHRoZSBhY3RpdmUgbGluaywgYW5kIHRoZW4gaG93IGl0IGRlY2lkZXMgd2hpY2ggcGFja2V0cyBnbyB0byB0aGF0IGFjdGl2ZSBsaW5rLiBJcyBpdCBiYXNlZCBvbiBhIHJvdW5kLXJvYmluPyBJcyB0aGVyZSBzb21lIGtpbmQgb2YgXCJsZWFzdCBsb2FkZWRcIiBoZXVyaXN0aWMgaW4gcGxheSwgZXZlbiBpZiBpdCdzIGJhc2ljPyBBcmUgdGhlcmUgYW55IGluZGljYXRpb25zIG9mIGxpbmsgbW9uaXRvcmluZyBvciBmYWlsb3ZlciBtZWNoYW5pc21zIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBzbmlwcGV0PyBJJ2xsIG5lZWQgdG8gcGFyc2UgdGhlIGNvbnRyb2wgZmxvdy4gVGhlIGNvbW1lbnRzIHdpbGwgYmUgY3JpdGljYWwgaGVyZSwgc28gSSdsbCBob3BlIHRoZSBkZXZlbG9wZXJzIHdlcmUgYmVpbmcgZGlsaWdlbnQuXG5cbkFuZCBtb3N0IGxpa2VseSwgSSB3b3VsZCBiZSBsb29raW5nIGZvciBhbnkgc2lnbnMgb2YgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIGJ1Z3MgdGhhdCBtaWdodCBoYXZlIGNyb3BwZWQgdXAgb3ZlciB0aGUgY29kZSdzIGxpZmV0aW1lLCBlc3BlY2lhbGx5IGlmIGl0IGRlYWxzIHdpdGggaGlnaC12b2x1bWUgbmV0d29ya3Mgb3IgcGFja2V0LWludGVuc2l2ZSBhcHBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwNDMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjExOjQ2LjkzNDY4Mzg4N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ3MDpcXHRcXG4xNDcxOlxcdFxcdFxcdGlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYikpIHtcXG4xNDcyOlxcdFxcdFxcdFxcdGRvX3R4X2JhbGFuY2UgPSBmYWxzZTtcXG4xNDczOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE0NzQ6XFx0XFx0XFx0fVxcbjE0NzU6XFx0XFxuMTQ3NjpcXHRcXHRcXHQvKiBUaGUgSVB2NiBoZWFkZXIgaXMgcHVsbGVkIGJ5IGFsYl9kZXRlcm1pbmVfbmQgKi9cXG4xNDc3OlxcdFxcdFxcdC8qIEFkZGl0aW9uYWxseSwgREFEIHByb2JlcyBzaG91bGQgbm90IGJlIHR4LWJhbGFuY2VkIGFzIHRoYXRcXG4xNDc4OlxcdFxcdFxcdCAqIHdpbGwgbGVhZCB0byBmYWxzZSBwb3NpdGl2ZXMgZm9yIGR1cGxpY2F0ZSBhZGRyZXNzZXMgYW5kXFxuMTQ3OTpcXHRcXHRcXHQgKiBwcmV2ZW50IGFkZHJlc3MgY29uZmlndXJhdGlvbiBmcm9tIHdvcmtpbmcuXFxuMTQ4MDpcXHRcXHRcXHQgKi9cXG4xNDgxOlxcdFxcdFxcdGlwNmhkciA9IGlwdjZfaGRyKHNrYik7XFxuMTQ4MjpcXHRcXHRcXHRpZiAoaXB2Nl9hZGRyX2FueShcXHUwMDI2aXA2aGRyLVxcdTAwM2VzYWRkcikpIHtcXG4xNDgzOlxcdFxcdFxcdFxcdGRvX3R4X2JhbGFuY2UgPSBmYWxzZTtcXG4xNDg0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE0ODU6XFx0XFx0XFx0fVxcbjE0ODY6XFx0XFxuMTQ4NzpcXHRcXHRcXHRoYXNoX3N0YXJ0ID0gKGNoYXIgKilcXHUwMDI2aXA2aGRyLVxcdTAwM2VkYWRkcjtcXG4xNDg4OlxcdFxcdFxcdGhhc2hfc2l6ZSA9IHNpemVvZihpcDZoZHItXFx1MDAzZWRhZGRyKTtcXG4xNDg5OlxcdFxcdFxcdGJyZWFrO1xcbjE0OTA6XFx0XFx0fVxcbjE0OTE6XFx0XFx0Y2FzZSBFVEhfUF9BUlA6XFxuMTQ5MjpcXHRcXHRcXHRkb190eF9iYWxhbmNlID0gZmFsc2U7XFxuMTQ5MzpcXHRcXHRcXHRpZiAoYm9uZF9pbmZvLVxcdTAwM2VybGJfZW5hYmxlZClcXG4xNDk0OlxcdFxcdFxcdFxcdHR4X3NsYXZlID0gcmxiX2FycF94bWl0KHNrYiwgYm9uZCk7XFxuMTQ5NTpcXHRcXHRcXHRicmVhaztcXG4xNDk2OlxcdFxcdGRlZmF1bHQ6XFxuMTQ5NzpcXHRcXHRcXHRkb190eF9iYWxhbmNlID0gZmFsc2U7XFxuMTQ5ODpcXHRcXHRcXHRicmVhaztcXG4xNDk5OlxcdFxcdH1cXG4xNTAwOlxcdFxcbjE1MDE6XFx0XFx0aWYgKGRvX3R4X2JhbGFuY2UpIHtcXG4xNTAyOlxcdFxcdFxcdGlmIChib25kLVxcdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpIHtcXG4xNTAzOlxcdFxcdFxcdFxcdGhhc2hfaW5kZXggPSBfc2ltcGxlX2hhc2goaGFzaF9zdGFydCwgaGFzaF9zaXplKTtcXG4xNTA0OlxcdFxcdFxcdFxcdHR4X3NsYXZlID0gdGxiX2Nob29zZV9jaGFubmVsKGJvbmQsIGhhc2hfaW5kZXgsIHNrYi1cXHUwMDNlbGVuKTtcXG4xNTA1OlxcdFxcdFxcdH0gZWxzZSB7XFxuMTUwNjpcXHRcXHRcXHRcXHQvKlxcbjE1MDc6XFx0XFx0XFx0XFx0ICogZG9fdHhfYmFsYW5jZSBtZWFucyB3ZSBhcmUgZnJlZSB0byBzZWxlY3QgdGhlIHR4X3NsYXZlXFxuMTUwODpcXHRcXHRcXHRcXHQgKiBTbyB3ZSBkbyBleGFjdGx5IHdoYXQgdGxiIHdvdWxkIGRvIGZvciBoYXNoIHNlbGVjdGlvblxcbjE1MDk6XFx0XFx0XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjExOjQ2LjkzNDgwNDYyN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzMyMjk4MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGJvbmRpbmcgZHJpdmVyIGNvbmZpZ3VyYXRpb24uXG5cbioqRXhhbWluaW5nIEJvbmRpbmcgRHJpdmVyIEtjb25maWcgT3B0aW9ucyoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIEtjb25maWcgb3B0aW9ucyBnb3Zlcm4gdGhlIGJlaGF2aW9yIG9mIHRoZSBib25kaW5nIGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gSSdsbCBzdGFydCBieSBzZWFyY2hpbmcgd2l0aGluIHRoZSBvYnZpb3VzOiBgZHJpdmVycy9uZXQvYm9uZGluZy9LY29uZmlnYC4gSWYgdGhhdCBkb2Vzbid0IHlpZWxkIGV2ZXJ5dGhpbmcsIEknbGwgYnJvYWRlbiB0aGUgbmV0IGEgYml0IGFuZCBjaGVjayBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgZ2xvYmFsIG5ldHdvcmstcmVsYXRlZCBvcHRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGJvbmRpbmcgYmVoYXZpb3IsIG9yIGlmIHBlcmhhcHMgdGhlIGJvbmRpbmcgb3B0aW9ucyBhcmUgaW5jbHVkZWQgZnJvbSB0aGVyZS4gU2VhcmNoaW5nIGZvciBcIkJPTkRJTkdcIiBkaXJlY3RseSBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzeW1ib2xzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcy4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgc28gdG8gc3BlYWsuIFVuZGVyc3RhbmRpbmcgdGhlIEtjb25maWcgc3RydWN0dXJlIGlzIGNydWNpYWwgZm9yIGFueSBuZXR3b3JrIGRyaXZlciBleHBlcnQsIHNvIEkgd2lsbCBhbmFseXplIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGFueSBkZWZhdWx0IHZhbHVlcyB0byBnYWluIGluc2lnaHQgaW50byBob3cgdGhlIGJvbmRpbmcgZHJpdmVyIGlzIGN1c3RvbWl6ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NzQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjExOjQ4Ljk2ODAzNzI0MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2ODg3Mzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCT05ESU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9Mzk9aWYgTkVUX0NPUkVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQwLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDE6Y29uZmlnIEJPTkRJTkdcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQyLVxcdHRyaXN0YXRlIFxcXCJCb25kaW5nIGRyaXZlciBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMzoxMTo0OS4wOTQ5MzAwMTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc5NDY2NTAwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgdGhlIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gQmFzZWQgb24gd2hhdCBJJ20gbG9va2luZyBhdCwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9ucyBhcm91bmQgbGluZSA0MC4gSSdtIGFzc3VtaW5nIHRoYXQncyB3aGVyZSB0aGUgaW5pdGlhbCB0b3AtbGV2ZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBuZXR3b3JrIGRyaXZlcnMgd2lsbCBsaWtlbHkgcmVzaWRlLiBGcm9tIHRoZXJlLCBJIGNhbiB1bmRlcnN0YW5kIHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBhbmQgcGVyaGFwcyBpZGVudGlmeSB0aGUgc3BlY2lmaWMgb3B0aW9ucyB0aGF0IGFyZSBpbmZsdWVuY2luZyB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgbW9kdWxlcyB0aGF0IEkgYW0gaW50ZXJlc3RlZCBpbi4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIGJ1aWxkIHByb2Nlc3MgZm9yIHRoaXMgYXJlYSBvZiB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMxOSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjExOjUwLjg4OTU5OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI4MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzNTpcXHRcXHRoZWxwXFxuICAzNjpcXHRcXHQgIFlvdSBjYW4gc2F5IE4gaGVyZSBpZiB5b3UgZG8gbm90IGludGVuZCB0byB1c2UgYW55IG9mIHRoZVxcbiAgMzc6XFx0XFx0ICBuZXR3b3JraW5nIGNvcmUgZHJpdmVycyAoaS5lLiBWTEFOLCBicmlkZ2luZywgYm9uZGluZywgZXRjLilcXG4gIDM4OlxcdFxcbiAgMzk6XFx0aWYgTkVUX0NPUkVcXG4gIDQwOlxcdFxcbiAgNDE6XFx0Y29uZmlnIEJPTkRJTkdcXG4gIDQyOlxcdFxcdHRyaXN0YXRlIFxcXCJCb25kaW5nIGRyaXZlciBzdXBwb3J0XFxcIlxcbiAgNDM6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIFRMUyB8fCBUTFNfREVWSUNFPW5cXG4gIDQ1OlxcdFxcdGhlbHBcXG4gIDQ2OlxcdFxcdCAgU2F5ICdZJyBvciAnTScgaWYgeW91IHdpc2ggdG8gYmUgYWJsZSB0byAnYm9uZCcgbXVsdGlwbGUgRXRoZXJuZXRcXG4gIDQ3OlxcdFxcdCAgQ2hhbm5lbHMgdG9nZXRoZXIuIFRoaXMgaXMgY2FsbGVkICdFdGhlcmNoYW5uZWwnIGJ5IENpc2NvLFxcbiAgNDg6XFx0XFx0ICAnVHJ1bmtpbmcnIGJ5IFN1biwgODAyLjNhZCBieSB0aGUgSUVFRSwgYW5kICdCb25kaW5nJyBpbiBMaW51eC5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0ICBUaGUgZHJpdmVyIHN1cHBvcnRzIG11bHRpcGxlIGJvbmRpbmcgbW9kZXMgdG8gYWxsb3cgZm9yIGJvdGggaGlnaFxcbiAgNTE6XFx0XFx0ICBwZXJmb3JtYW5jZSBhbmQgaGlnaCBhdmFpbGFiaWxpdHkgb3BlcmF0aW9uLlxcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHQgIFJlZmVyIHRvIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnJzdFxcdTAwM2UgZm9yIG1vcmVcXG4gIDU0OlxcdFxcdCAgaW5mb3JtYXRpb24uXFxuICA1NTpcXHRcXG4gIDU2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgNTc6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBib25kaW5nLlxcbiAgNTg6XFx0XFxuICA1OTpcXHRjb25maWcgRFVNTVlcXG4gIDYwOlxcdFxcdHRyaXN0YXRlIFxcXCJEdW1teSBuZXQgZHJpdmVyIHN1cHBvcnRcXFwiXFxuICA2MTpcXHRcXHRoZWxwXFxuICA2MjpcXHRcXHQgIFRoaXMgaXMgZXNzZW50aWFsbHkgYSBiaXQtYnVja2V0IGRldmljZSAoaS5lLiB0cmFmZmljIHlvdSBzZW5kIHRvXFxuICA2MzpcXHRcXHQgIHRoaXMgZGV2aWNlIGlzIGNvbnNpZ25lZCBpbnRvIG9ibGl2aW9uKSB3aXRoIGEgY29uZmlndXJhYmxlIElQXFxuICA2NDpcXHRcXHQgIGFkZHJlc3MuIEl0IGlzIG1vc3QgY29tbW9ubHkgdXNlZCBpbiBvcmRlciB0byBtYWtlIHlvdXIgY3VycmVudGx5XFxuICA2NTpcXHRcXHQgIGluYWN0aXZlIFNMSVAgYWRkcmVzcyBzZWVtIGxpa2UgYSByZWFsIGFkZHJlc3MgZm9yIGxvY2FsIHByb2dyYW1zLlxcbiAgNjY6XFx0XFx0ICBJZiB5b3UgdXNlIFNMSVAgb3IgUFBQLCB5b3UgbWlnaHQgd2FudCB0byBzYXkgWSBoZXJlLiBJdCB3b24ndFxcbiAgNjc6XFx0XFx0ICBlbmxhcmdlIHlvdXIga2VybmVsLiBXaGF0IGEgZGVhbC4gUmVhZCBhYm91dCBpdCBpbiB0aGUgTmV0d29ya1xcbiAgNjg6XFx0XFx0ICBBZG1pbmlzdHJhdG9yJ3MgR3VpZGUsIGF2YWlsYWJsZSBmcm9tXFxuICA2OTpcXHRcXHQgIFxcdTAwM2NodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNndWlkZVxcdTAwM2UuXFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgNzI6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBkdW1teS5cXG4gIDczOlxcdFxcbiAgNzQ6XFx0Y29uZmlnIFdJUkVHVUFSRFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMzoxMTo1MC44ODk3MDI2OTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA4NjczNzU2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoYXQsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBCb25kaW5nIE1vZHVsZSBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgYm9uZF9hbGIuY2AgaXMgYmVpbmcgY29tcGlsZWQgd2l0aGluIHRoZSBib25kaW5nIG1vZHVsZS4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LCBpcyB0byBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlIG9mIHRydXRoIGZvciBidWlsZCBpbnN0cnVjdGlvbnM6IHRoZSBgTWFrZWZpbGVgIGxvY2F0ZWQgaW4gdGhlIGBkcml2ZXJzL25ldC9ib25kaW5nL2AgZGlyZWN0b3J5LiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBhdCBsZWFzdCwgd2hlcmUgdGhlIGluc3RydWN0aW9ucyBmb3IgdGhlIG1hZ2ljIGFyZSB3cml0dGVuLiBJJ2xsIHRha2UgYSBsb29rIGF0IGBkcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlYCBhbmQgc2VlIGV4YWN0bHkgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhlIGNvbXBpbGF0aW9uIG9mIGBib25kX2FsYi5jYC4gVGhhdCBmaWxlIHNob3VsZCBnaXZlIG1lIGFsbCB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHJlZ2FyZGluZyBjb21waWxlciBmbGFncywgZGVwZW5kZW5jaWVzLCBvYmplY3QgZmlsZSBnZW5lcmF0aW9uLCBhbmQgbGlua2luZy4gVGhhdCdzIHRoZSBiZXN0IHdheSB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGJ1aWxkcyB0aGF0IHNwZWNpZmljIGNvbXBvbmVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTExOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDM6MTE6NTIuOTc2NDQyNzIzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIHRoZSBFdGhlcm5ldCBCb25kaW5nIGRyaXZlclxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfQk9ORElORykgKz0gYm9uZGluZy5vXFxuICAgNzpcXHRcXG4gICA4OlxcdGJvbmRpbmctb2JqcyA6PSBib25kX21haW4ubyBib25kXzNhZC5vIGJvbmRfYWxiLm8gYm9uZF9zeXNmcy5vIGJvbmRfc3lzZnNfc2xhdmUubyBib25kX2RlYnVnZnMubyBib25kX25ldGxpbmsubyBib25kX29wdGlvbnMub1xcbiAgIDk6XFx0XFxuICAxMDpcXHRwcm9jLSQoQ09ORklHX1BST0NfRlMpICs9IGJvbmRfcHJvY2ZzLm9cXG4gIDExOlxcdGJvbmRpbmctb2JqcyArPSAkKHByb2MteSlcXG4gIDEyOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMzoxMTo1Mi45NzY1MTg3MDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjczNzg1OTA0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBCb25kaW5nIGFuZCBJUHY2IERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBDT05GSUdfQk9ORElOR2AsIGFuZCBpdCdzIGNsZWFyIGl0IGRlcGVuZHMgb24gYElORVRgIGFuZCBgTkVUX0NPUkVgLiBCdXQgSSBuZWVkIHRvIGRldGVybWluZSBpZiBJUHY2IGlzIGFsc28gYSByZXF1aXJlbWVudCwgb3IgYXQgbGVhc3QgYSBkZXBlbmRlbmN5IGluIHRoZSBBZHZhbmNlZCBMb2FkIEJhbGFuY2luZyAoQUxCKSBjb250ZXh0LiBNeSBpbnN0aW5jdCBzYXlzIEkgc2hvdWxkIGRpdmUgaW50byB0aGUgY29kZSB0byBjb25maXJtIG15IHN1c3BpY2lvbnMgYW5kIHRvIHdoYXQgZXh0ZW50IElQdjYgYW5kIHRoZSBib25kaW5nIGRyaXZlciBhcmUgbGlua2VkLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBJUHY2IGludm9sdmVtZW50LiBTcGVjaWZpY2FsbHksIEkga25vdyB0aGF0IGBhbGJfZGV0ZXJtaW5lX25kYCBtZXRob2QgY291bGQgcG90ZW50aWFsbHkgcmV2ZWFsIHdoZXRoZXIgSVB2NiBpcyBpbnRlZ3JhbCB0byBpdHMgZnVuY3Rpb25pbmcuIEknbGwgbmVlZCB0byBjaGVjayBob3cgaXQgaGFuZGxlcyBJUHY2IGhlYWRlcnMgYW5kIElDTVB2NiBwYWNrZXRzIChuZWlnaGJvciBkaXNjb3ZlcnksIGFkdmVydGlzZW1lbnRzLCBzb2xpY2l0YXRpb25zIC0gTkRJU0NfTkVJR0hCT1VSX0FEVkVSVElTRU1FTlQsIE5ESVNDX05FSUdIQk9VUl9TT0xJQ0lUQVRJT04pLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBpbmRpY2F0aW9uLlxuXG5VbHRpbWF0ZWx5LCBJIHdhbnQgdG8gY2xhcmlmeSB3aGV0aGVyIGBDT05GSUdfSVBWNmAgaXMgKmFic29sdXRlbHkqIG5lZWRlZCBmb3IgdGhlIGJvbmRpbmcgZHJpdmVyIHRvIGZ1bmN0aW9uLCBvciBpZiBib25kaW5nIGNhbiB3b3JrIGluZGVwZW5kZW50bHksIG9yIHBlcmhhcHMgb25seSB3b3JrcyB3aXRoIGBDT05GSUdfSVBWNmAgZW5hYmxlZC4gSSBjYW4gYWNjb21wbGlzaCB0aGlzIGJ5IGNoZWNraW5nIGZvciBhIGRpcmVjdCBsaW5rIGJldHdlZW4gYENPTkZJR19JUFY2YCBhbmQgdGhlIGJvbmRpbmcgZHJpdmVyLCBzbyBJJ2xsIG5leHQgc2VhcmNoIHRoZSBgZHJpdmVycy9uZXQvYm9uZGluZy9gIGRpcmVjdG9yeSBmb3IgcmVmZXJlbmNlcyB0byBpdC4gVGhpcyBzaG91bGQgcXVpY2tseSBhbnN3ZXIgbXkgcXVlc3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NjEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMzoxMTo1NS43MTQzODAzODhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzEzNDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQVjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTM3MT1zdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzODMtXFx0XFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjEzODQ6XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTM4NS1cXHRcXHRcXHRpZiAoYWxiX2RldGVybWluZV9uZChza2IpKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTE0MTk9c3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNDUxLVxcdH1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTQ1MjpcXHRjYXNlIEVUSF9QX0lQVjY6IHtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQ1My1cXHRcXHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aGRyO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0yMTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBmbG93X2Rpc3NlY3Rvcl9rZXkgZmxvd19rZXlzX2JvbmRpbmdfa2V5c1tdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMjctXFx0e1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MjI4OlxcdFxcdC5rZXlfaWQgPSBGTE9XX0RJU1NFQ1RPUl9LRVlfSVBWNl9BRERSUyxcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTIyOS1cXHRcXHQub2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGZsb3dfa2V5cywgYWRkcnMudjZhZGRycyksXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTMxNTQ9c3RhdGljIGludCBib25kX2FycF9yY3YoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTMyMzMtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzozMjM0OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzIzNS1zdGF0aWMgdm9pZCBib25kX25zX3NlbmQoc3RydWN0IHNsYXZlICpzbGF2ZSwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkcixcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MzQyMz1pbnQgYm9uZF9yY3ZfdmFsaWRhdGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTM0MjUte1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzQyNjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjM0Mjc6XFx0Ym9vbCBpc19pcHY2ID0gc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBfX2NwdV90b19iZTE2KEVUSF9QX0lQVjYpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQyOC0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQzNi1cXHRcXHRpZiAoKHNsYXZlX2RvX2FycF92YWxpZGF0ZV9vbmx5KGJvbmQpIFxcdTAwMjZcXHUwMDI2IGlzX2FycCkgfHxcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjM0Mzc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zNDM4LVxcdFxcdCAgICAoc2xhdmVfZG9fYXJwX3ZhbGlkYXRlX29ubHkoYm9uZCkgXFx1MDAyNlxcdTAwMjYgaXNfaXB2NikgfHxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQ0NC1cXHRcXHRyZXR1cm4gYm9uZF9hcnBfcmN2KHNrYiwgYm9uZCwgc2xhdmUpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzQ0NTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTM0NDYtXFx0fSBlbHNlIGlmIChpc19pcHY2IFxcdTAwMjZcXHUwMDI2IGxpa2VseShpcHY2X21vZF9lbmFibGVkKCkpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTM0NTQ9c3RhdGljIHZvaWQgYm9uZF9zZW5kX3ZhbGlkYXRlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zNDU2LVxcdGJvbmRfYXJwX3NlbmRfYWxsKGJvbmQsIHNsYXZlKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjM0NTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zNDU4LVxcdGlmIChsaWtlbHkoaXB2Nl9tb2RfZW5hYmxlZCgpKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NDEyOD1zdGF0aWMgYm9vbCBib25kX2Zsb3dfaXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZsb3dfa2V5cyAqZmssIGNvbnN0IHZvaWQgKmRhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQxNDMtXFx0XFx0XFx0KmlwX3Byb3RvID0gaXBoLVxcdTAwM2Vwcm90b2NvbDtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQxNDQ6XFx0fSBlbHNlIGlmIChsMl9wcm90byA9PSBodG9ucyhFVEhfUF9JUFY2KSkge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDE0NS1cXHRcXHRkYXRhID0gYm9uZF9wdWxsX2RhdGEoc2tiLCBkYXRhLCBobGVuLCAqbmhvZmYgKyBzaXplb2YoKmlwaDYpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTI2Mz1zdGF0aWMgYm9vbCBib25kX3Nob3VsZF9icm9hZGNhc3RfbmVpZ2hib3Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTI4MC1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjUyODE6XFx0aWYgKHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUyODItXFx0XFx0Y29tYmluZWQgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBza2JfbWFjX2hlYWRlcl9sZW4oc2tiKSxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTQ1Nz1zdGF0aWMgdm9pZCBib25kX3NrX3RvX2Zsb3coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd19rZXlzICpmbG93KVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NDU5LVxcdHN3aXRjaCAoc2stXFx1MDAzZXNrX2ZhbWlseSkge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTQ2MDojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU0NjEtXFx0Y2FzZSBBRl9JTkVUNjpcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU0NjItXFx0XFx0aWYgKGlwdjZfb25seV9zb2NrKHNrKSB8fFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTQ2MzpcXHRcXHQgICAgaXB2Nl9hZGRyX3R5cGUoXFx1MDAyNnNrLVxcdTAwM2Vza192Nl9kYWRkcikgIT0gSVBWNl9BRERSX01BUFBFRCkge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTQ2NDpcXHRcXHRcXHRmbG93LVxcdTAwM2Vjb250cm9sLmFkZHJfdHlwZSA9IEZMT1dfRElTU0VDVE9SX0tFWV9JUFY2X0FERFJTO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTQ2NS1cXHRcXHRcXHRmbG93LVxcdTAwM2VhZGRycy52NmFkZHJzLnNyYyA9IGluZXQ2X3NrKHNrKS1cXHUwMDNlc2FkZHI7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTYwODc9c3RhdGljIGludCBfX2luaXQgYm9uZF9jaGVja19wYXJhbXMoc3RydWN0IGJvbmRfcGFyYW1zICpwYXJhbXMpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTY0NzAtXFx0bWVtY3B5KHBhcmFtcy1cXHUwMDNlYXJwX3RhcmdldHMsIGFycF90YXJnZXQsIHNpemVvZihhcnBfdGFyZ2V0KSk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2NDcxOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjQ3Mi1cXHRtZW1zZXQocGFyYW1zLVxcdTAwM2Vuc190YXJnZXRzLCAwLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSAqIEJPTkRfTUFYX05TX1RBUkdFVFMpO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYz0yMTY9c3RhdGljIGludCBib25kX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0zMzktXFx0fVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6MzQwOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMzQxLVxcdGlmIChkYXRhW0lGTEFfQk9ORF9OU19JUDZfVEFSR0VUXSkge1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYz03MDA9c3RhdGljIGludCBib25kX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy03NzAtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo3NzE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy03NzItXFx0dGFyZ2V0cyA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgSUZMQV9CT05EX05TX0lQNl9UQVJHRVQpO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYz0xMjYwPXN0YXRpYyBpbnQgYm9uZF9vcHRpb25fYXJwX2lwX3RhcmdldHNfc2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xMjg1LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM6MTI4NjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTEyODctc3RhdGljIGJvb2wgc2xhdmVfY2FuX3NldF9uc19tYWRkcihjb25zdCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9wcm9jZnMuYz01OT1zdGF0aWMgdm9pZCBib25kX2luZm9fc2hvd19tYXN0ZXIoc3RydWN0IHNlcV9maWxlICpzZXEpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfcHJvY2ZzLmMtMTM4LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9wcm9jZnMuYzoxMzk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3Byb2Nmcy5jLTE0MC1cXHRcXHRwcmludGVkID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDM6MTE6NTUuNzU4NzAyOTg2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNzcyNDUzNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIGFuZCBmaWd1cmUgb3V0IGlmIGl0J3Mgd29ydGggZnV6emluZy4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcy4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIGl0IGNvbmNlcm5zIGFuIHVwZGF0ZSB0byBob3cgSVB2NiBwYWNrZXRzIGFyZSBoYW5kbGVkIGluIGJvbmRpbmcgVExCL0FMQiBtb2RlcyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGFsYl9kZXRlcm1pbmVfbmRgIGZ1bmN0aW9uLlxuXG5JIHNlZSBhIGNoYW5nZSB3aGVyZSB0aGUgY29kZSBwcmV2aW91c2x5IHJlbGllZCBvbiBgaWNtcDZfaGRyKHNrYilgIGJ1dCBtaWdodCBoYXZlIGJlZW4gdXNpbmcgYW4gaW52YWxpZCBvZmZzZXQgZm9yIHRoZSB0cmFuc3BvcnQgaGVhZGVyLiBUaGUgY29kZSBwdWxscyBpbiBtb3JlIGRhdGEgaW50byBsaW5lYXIgbWVtb3J5LCB3aGljaCBtaWdodCBjYXVzZSBgc2tiLVx1MDAzZWhlYWRgIHRvIGdldCByZWFsbG9jYXRlZC4gSXQgYXBwZWFycyB0aGF0IGBpcDZoZHJgIHdhc24ndCByZWxvYWRlZCBhZnRlciBgcHNrYl9uZXR3b3JrX21heV9wdWxsYCwgbGVhZGluZyB0byBhIHBvc3NpYmxlIHVzZSBvZiBhbiBpbnZhbGlkIHBvaW50ZXIuIEFsc28sIHRoZXJlJ3MgYSByZW1vdmVkIHVudXNlZCBhcmd1bWVudC5cblxuVGhpcyBtb2RpZmljYXRpb24gYWZmZWN0cyBJUHY2IHBhY2tldCB0cmFuc21pc3Npb24gaW4gYm9uZGluZyBUTEIgLyBBTEIgbW9kZXMsIGludm9sdmluZyBmdW5jdGlvbnMgbGlrZSBgYm9uZF90bGJfeG1pdGAsIGBib25kX2FsYl94bWl0YCwgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCBhbmQgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YC4gQm9uZGluZyBpcyBhIGZ1bGx5IHNvZnR3YXJlLWVtdWxhdGVkIHZpcnR1YWwgbmV0d29ya2luZyBkZXZpY2UgY3JlYXRlZCB2aWEgc3RhbmRhcmQgTGludXggbmV0d29ya2luZyB0b29scyAocnRubCwgbmV0bGluaywgc3lzZnMsIGlvY3RsKSBhbmQgY2FuIGJlIGVhc2lseSByZXByb2R1Y2VkIGluIFFFTVUvR0NFLiBBbnkgdXNlciBvciBmdXp6ZXIgY2FuIGNyZWF0ZSBhIGJvbmRpbmcgaW50ZXJmYWNlLCBlbnNsYXZlIHZpcnR1YWwgaW50ZXJmYWNlcywgc2V0IHRoZSBtb2RlIHRvIFRMQiBvciBBTEIsIGFuZCB0cmFuc21pdCBJUHY2IHBhY2tldHMgdGhyb3VnaCBpdC5cblxuR2l2ZW4gdGhhdCB0aGlzIGNvZGUgaXMgaW4gYSByZWFjaGFibGUgcGFydCBvZiB0aGUgbmV0d29ya2luZyBzdGFjayB0aGF0IGNhbiBiZSBlYXNpbHkgc2V0IHVwIGluIGEgc3RhbmRhcmQgTGludXggZW52aXJvbm1lbnQsIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBXZSBjYW4gY3JlYXRlIGEgdGVzdCBzZXR1cCBxdWlja2x5IGFuZCB0cmlnZ2VyIHRoZSBjb2RlIHRoYXQgd2F5LlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgZm9jdXMgc3ltYm9scyBhbmQgc2VlIGlmIHdlIGNhbiBpZGVudGlmeSBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLlxuXG5gYWxiX2RldGVybWluZV9uZGAgc2VlbXMgdG8gYmUgaW5saW5lZCBpbnRvIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgLyBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgLiBUaGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhpcyBwYXRoIGFyZTpcblxuKiAgIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGBcbiogICBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgXG4qICAgYGJvbmRfdGxiX3htaXRgXG4qICAgYGJvbmRfYWxiX3htaXRgXG5cbkkgd2lsbCBncmVwIHRoZSBjb2RlYmFzZSBmb3IgYGJvbmRfYWxiX3htaXRgIG9yIGBib25kX3RsYl94bWl0YCB0byBtYWtlIHN1cmUgdGhlIHN5bWJvbHMgYXJlIHVzZWQgYW5kIGV4aXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI2NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMzoxMjowMC44MzU5NTExMjJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzQxNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJvbmRfKGFsYnx0bGIpX3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MjI3PXN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnRsYl9jaG9vc2VfY2hhbm5lbChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdTMyIGhhc2hfaW5kZXgsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjMyLVxcdC8qIFdlIGRvbid0IG5lZWQgdG8gZGlzYWJsZSBzb2Z0aXJxIGhlcmUsIGJlY2F1c2VcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MjMzOlxcdCAqIHRsYl9jaG9vc2VfY2hhbm5lbCgpIGlzIG9ubHkgY2FsbGVkIGJ5IGJvbmRfYWxiX3htaXQoKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yMzQtXFx0ICogd2hpY2ggYWxyZWFkeSBoYXMgc29mdGlycSBkaXNhYmxlZC5cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xMzcxPXN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQwOS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTQxMDpuZXRkZXZfdHhfdCBib25kX3RsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQxMS17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTQxOT1zdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1MjMtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE1MjQ6bmV0ZGV2X3R4X3QgYm9uZF9hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1MjUte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01NTUyPXN0YXRpYyBuZXRkZXZfdHhfdCBfX2JvbmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTc4LVxcdGNhc2UgQk9ORF9NT0RFX0FMQjpcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU1Nzk6XFx0XFx0cmV0dXJuIGJvbmRfYWxiX3htaXQoc2tiLCBkZXYpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTU4MC1cXHRjYXNlIEJPTkRfTU9ERV9UTEI6XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1NTgxOlxcdFxcdHJldHVybiBib25kX3RsYl94bWl0KHNrYiwgZGV2KTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU1ODItXFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDM6MTI6MDAuODgwMzAxNzRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE1OTcwOTY1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEJvbmQgQUxCIFRyYW5zbWlzc2lvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoZXNlIHRyYW5zbWlzc2lvbiBmdW5jdGlvbnMgYXJlIGRlZmluZWQgYW5kIGRlY2xhcmVkLiBJJ20gZm9jdXNpbmcgb24gYGJvbmRfYWxiX3htaXRgLCBgYm9uZF90bGJfeG1pdGAsIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAsIGFuZCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgLiBUaGUgZmFjdCB0aGF0IGFsbCBmb3VyIGFyZSBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgYm9uZF9hbGIuY2AgaXMgdGhlIGtleS4gTm93LCBJIG5lZWQgdG8gY29uZmlybSB0aGVpciBkZWNsYXJhdGlvbnMgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmZhY2UuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGVpdGhlciBgaW5jbHVkZS9uZXQvYm9uZF9hbGIuaGAgb3IgYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuaGAg4oCTIG9uZSBvZiB0aG9zZSBzaG91bGQgaGF2ZSB0aGUgZGVmaW5pdGlvbnMgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA3NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMzoxMjowMy4wNDAwMTM3ODlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MTc0NDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJvbmRfdGxiX3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTM3MT1zdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MDktXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE0MTA6bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MTEte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01NTUyPXN0YXRpYyBuZXRkZXZfdHhfdCBfX2JvbmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTgwLVxcdGNhc2UgQk9ORF9NT0RFX1RMQjpcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU1ODE6XFx0XFx0cmV0dXJuIGJvbmRfdGxiX3htaXQoc2tiLCBkZXYpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTU4Mi1cXHRkZWZhdWx0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMzoxMjowMy4wODQxOTQwNDdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODE5OTM0MDQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIEJvbmRpbmcgRHJpdmVyIEltcGxlbWVudGF0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYm9uZGluZyBkcml2ZXIgY29kZSB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGhhbmRsaW5nIHRoaXMgcGFydGljdWxhciBzaXR1YXRpb24uIEdpdmVuIG15IGV4cGVydGlzZSwgSSdsbCBzdGFydCB3aXRoIHRoZSBtb3N0IGxpa2VseSBjYW5kaWRhdGVzIGZvciB0aGUgY29yZSBsb2dpYy4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdG8gY2hlY2sgdGhlIGhlYWRlciBmaWxlcyBmaXJzdC4gIEknbSB0aGlua2luZyBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5oYCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBkZWZpbml0aW9ucyByZWxhdGVkIHRvIEFkYXB0aXZlIExvYWQgQmFsYW5jaW5nLiBBbHRlcm5hdGl2ZWx5LCAgYGluY2x1ZGUvbmV0L2JvbmRpbmcuaGAgc2hvdWxkIGNvbnRhaW4gbW9yZSBnZW5lcmljIGJvbmRpbmctcmVsYXRlZCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gIERlcGVuZGluZyBvbiB3aGF0IEkgZmluZCBpbiB0aGVzZSBoZWFkZXJzLCBJJ2xsIGtub3cgd2hlcmUgdG8gZHJpbGwgZG93biBuZXh0IOKAkyBwcm9iYWJseSBpbnRvIHRoZSBzb3VyY2UgZmlsZXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY0NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjEyOjExLjI4MzUzNzU1M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1NjgyOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYm9uZF9hbGJfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvYm9uZF9hbGIuaD0xNTg9dm9pZCBib25kX2FsYl9oYW5kbGVfYWN0aXZlX2NoYW5nZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpuZXdfc2xhdmUpO1xcbmluY2x1ZGUvbmV0L2JvbmRfYWxiLmg6MTU5Om5ldGRldl90eF90IGJvbmRfYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KTtcXG5pbmNsdWRlL25ldC9ib25kX2FsYi5oLTE2MC1uZXRkZXZfdHhfdCBib25kX3RsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjEyOjExLjM0MjExMTYyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0MDEzNDQwMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIGBib25kX2FsYi5oYCBmb3IgUG90ZW50aWFsIElzc3VlcyoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBBY3RpdmUtQmFja3VwIExvYWQgQmFsYW5jaW5nIChBTEIpIGltcGxlbWVudGF0aW9uIHdpdGhpbiBib25kaW5nLiBUaGUgbGlrZWx5IHNwb3QgZm9yIHRoZSBoZWFydCBvZiB0aGUgbG9naWMsIG9yIGEgY3J1Y2lhbCBkYXRhIHN0cnVjdHVyZSwgcmVsYXRlZCB0byB0aGUgQUxCIGZ1bmN0aW9uYWxpdHkgd291bGQgYmUgYXJvdW5kIGxpbmUgMTU1IGluIGBpbmNsdWRlL25ldC9ib25kX2FsYi5oYC4gTGV0J3MgcHVsbCB0aGF0IHVwIGFuZCBzZWUgd2hhdCdzIHdoYXQuIEknbSBleHBlY3RpbmcgdG8gZmluZCBhIHBvdGVudGlhbCBhcmVhIGZvciBvcHRpbWl6YXRpb24sIGEgYnVnLCBvciBqdXN0IGEgcGxhY2UgSSBzaG91bGQgYmUgbW9yZSBkZWVwbHkgZmFtaWxpYXIgd2l0aCBnaXZlbiB3aGF0IEkgYW0gd29ya2luZyBvbiBub3cuIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSB0aGUgc3RydWN0dXJlIGRlZmluaW5nIGhvdyB3ZSBzZWxlY3QgdGhlIGFjdGl2ZSBzbGF2ZSwgdG8gdGhlIGxvZ2ljIHRoYXQgaGFuZGxlcyBsaW5rIGZhaWx1cmVzLCBvciBldmVuIGhvdyB3ZSB0cmFjayB0aGUgc3RhdGUgb2YgdGhlIHNsYXZlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMTQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMzoxMjoxNS43NDM0NTc5NzVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvYm9uZF9hbGIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNDUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAqIG9mIGNsaWVudCB1cGRhdGVcXG4gMTQ2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgKi9cXG4gMTQ3OlxcdFxcdHU4XFx0XFx0XFx0cmxiX3JlYmFsYW5jZTtcXHQvKiBmbGFnIC0gaW5kaWNhdGVzIHRoYXQgdGhlXFxuIDE0ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgKiByeCB0cmFmZmljIHNob3VsZCBiZVxcbiAxNDk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICogcmViYWxhbmNlZFxcbiAxNTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICovXFxuIDE1MTpcXHR9O1xcbiAxNTI6XFx0XFxuIDE1MzpcXHRpbnQgYm9uZF9hbGJfaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgaW50IHJsYl9lbmFibGVkKTtcXG4gMTU0OlxcdHZvaWQgYm9uZF9hbGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKTtcXG4gMTU1OlxcdGludCBib25kX2FsYl9pbml0X3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKTtcXG4gMTU2OlxcdHZvaWQgYm9uZF9hbGJfZGVpbml0X3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKTtcXG4gMTU3OlxcdHZvaWQgYm9uZF9hbGJfaGFuZGxlX2xpbmtfY2hhbmdlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCBjaGFyIGxpbmspO1xcbiAxNTg6XFx0dm9pZCBib25kX2FsYl9oYW5kbGVfYWN0aXZlX2NoYW5nZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpuZXdfc2xhdmUpO1xcbiAxNTk6XFx0bmV0ZGV2X3R4X3QgYm9uZF9hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpO1xcbiAxNjA6XFx0bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpO1xcbiAxNjE6XFx0c3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4gMTYyOlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpO1xcbiAxNjM6XFx0c3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4gMTY0OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpO1xcbiAxNjU6XFx0dm9pZCBib25kX2FsYl9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTtcXG4gMTY2OlxcdGludCBib25kX2FsYl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCB2b2lkICphZGRyKTtcXG4gMTY3OlxcdHZvaWQgYm9uZF9hbGJfY2xlYXJfdmxhbihzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdW5zaWduZWQgc2hvcnQgdmxhbl9pZCk7XFxuIDE2ODpcXHQjZW5kaWYgLyogX05FVF9CT05EX0FMQl9IICovXFxuIDE2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDM6MTI6MTUuNzQzNTI1Mjg1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc2NDk1MTc1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgQm9uZGluZyBEcml2ZXIgUGF0Y2ggZm9yIEZ1enppbmcgUHJpb3JpdGl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEl0IGxvb2tzIGxpa2Ugd2UgbmVlZCBgQk9ORElOR2AsIG5hdHVyYWxseSwgc2luY2UgaXQncyB0aGUgdGFyZ2V0LCBhbmQgYElORVRgIGJlY2F1c2UgYEJPTkRJTkdgIGRlcGVuZHMgb24gaXQuIENydWNpYWxseSwgZ2l2ZW4gdGhhdCB0aGUgY29kZSBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBJUHY2IE5laWdoYm9yIERpc2NvdmVyeSBwYWNrZXRzLCBgSVBWNmAgaXMgYWxzbyBlc3NlbnRpYWwuICBGdXJ0aGVybW9yZSwgYEJPTkRJTkdgIGlzIG5lc3RlZCB3aXRoaW4gYE5FVF9DT1JFYCBpbiB0aGUgS2NvbmZpZywgc28gdGhhdCBuZWVkcyB0byBiZSBlbmFibGVkIHRvby5cblxuSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIGluIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmb3IgYEJPTkRJTkdgIGFuZCB5ZXAsIGl0J3MgYElORVRgIGFuZCBlaXRoZXIgYFRMU2Agb3IgYFRMU19ERVZJQ0U9bmAgYXMgZXhwZWN0ZWQsIGFuZCBpdCdzIGFsbCBpbnNpZGUgYGlmIE5FVF9DT1JFYCwgYXMgSSBzYXcgYmVmb3JlLlxuXG5OZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhpcyBwYXRjaCB0b3VjaGVzLiBUaGUgYEZvY3VzU3ltYm9sc2AgbG9vayBsaWtlOiBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgLCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgLCBgYm9uZF9hbGJfeG1pdGAsIGFuZCBgYm9uZF90bGJfeG1pdGAuXG5cbk5vdywgSSBsb29rIGF0IHRoZSBnaXQgZGlmZiB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIGFuZCBzY29wZS4gSXQncyBqdXN0IGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgIHRoYXQncyBtb2RpZmllZC4gU3BlY2lmaWNhbGx5LCBpbiBgYWxiX2RldGVybWluZV9uZGA6IHRoZSB1bnVzZWQgYGJvbmRgIHBhcmFtZXRlciB3YXMgcmVtb3ZlZCwgd2hpY2ggaXMgbWlub3IuIE1vcmUgaW1wb3J0YW50bHksIHRoZSBwYXRjaCBhZGRzIGBpcDZoZHIgPSBpcHY2X2hkcihza2IpO2AgYWZ0ZXIgdGhlIGBwc2tiX25ldHdvcmtfbWF5X3B1bGxgIGNhbGwgdG8gaGFuZGxlIHBvdGVudGlhbCByZWFsbG9jYXRpb24gb2YgdGhlIGBza2ItXHUwMDNlaGVhZGAuICBBbHNvLCBpdCBjaGFuZ2VzIGhvdyB0aGUgSUNNUHY2IGhlYWRlciBpcyBhY2Nlc3NlZDsgdGhlIHVzZSBvZiBgaWNtcDZfaGRyKHNrYilgIGlzIHJlcGxhY2VkLiBUaGlzIGlzIGJlY2F1c2Ugb24gdGhlIHRyYW5zbWl0IHBhdGggYHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYilgIGlzbid0IHZhbGlkLCBzbyBpdCBtYWtlcyBzZW5zZSB0byBkaXJlY3RseSBjYWxjdWxhdGUgaXQgZnJvbSB0aGUgSVB2NiBoZWFkZXIuIFRoZSBjYWxsZXJzIG9mIGBhbGJfZGV0ZXJtaW5lX25kYCwgd2hpY2ggYXJlIHRoZSBmb2N1c2VkIHN5bWJvbHMgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCBhbmQgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCwgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgY2hhbmdlcy5cblxuTm93LCB0aGUgXCJXb3J0aEZ1enppbmdcIiBkZWNpc2lvbjogSXMgaXQgZnVuY3Rpb25hbD8gQWJzb2x1dGVseSwgaXQgY29ycmVjdHMgYW4gaW52YWxpZCBwb2ludGVyL3NrYiBoZWFkZXIgYWNjZXNzIGJ1ZyByZWxhdGVkIHRvIElQdjYgdHJhbnNtaXQgb3ZlciBib25kaW5nIEFMQi9UTEIgaW50ZXJmYWNlcy4gSXMgaXQgcmVhY2hhYmxlPyBZZXMsIGJvbmRpbmcgaXMgcHVyZWx5IHNvZnR3YXJlLiBUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmcgPSB0cnVlYC5cblxuRmluYWxseSwgdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2A6XG5cbiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgXG4qICAgYFJlYXNvbmluZ2A6IFRoaXMgcGF0Y2ggaXMgd29ydGggZnV6emluZyBiZWNhdXNlIGl0IGZpeGVzIGEgY3JpdGljYWwgYnVnIGluIHRoZSBwYXJzaW5nIG9mIElDTVB2NiBOZWlnaGJvdXIgQWR2ZXJ0aXNlbWVudC9Tb2xpY2l0YXRpb24gcGFja2V0cyBkdXJpbmcgdHJhbnNtaXQgaW4gYm9uZGluZyBBTEIgYW5kIFRMQiBtb2Rlcy4gSXQgY29ycmVjdHMgYSBoZWFkZXIgb2Zmc2V0IGNhbGN1bGF0aW9uIGFmdGVyIHRoZSBgcHNrYl9wdWxsYCBjYWxsLCBhZGRyZXNzaW5nIGFuIGludmFsaWQgbWVtb3J5IGFjY2Vzcy5cbiogICBgRm9jdXNTeW1ib2xzYDogYFtcImJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0XCIsIFwiYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRcIiwgXCJib25kX2FsYl94bWl0XCIsIFwiYm9uZF90bGJfeG1pdFwiXWBcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXCJCT05ESU5HXCIsIFwiSU5FVFwiLCBcIklQVjZcIiwgXCJORVRfQ09SRVwiXWBcblxuT2theSwgYWxsIHRoZSBwYXJhbWV0ZXJzIGFyZSBzZXQuIEknbSBjb25maWRlbnQgaW4gY2FsbGluZyBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTc4MiwiT3V0cHV0VG9rZW5zIjoyMDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMzoxMjoyMy4zOTMwNDU4NDNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDQwODM2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQk9ORElOR1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiLFxuICAgIFwiTkVUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX3htaXRfYWxiX3NsYXZlX2dldFwiLFxuICAgIFwiYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRcIixcbiAgICBcImJvbmRfYWxiX3htaXRcIixcbiAgICBcImJvbmRfdGxiX3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwYWNrZXQgaGVhZGVyIHBhcnNpbmcgZm9yIElQdjYgTmVpZ2hib3IgRGlzY292ZXJ5IChORCkgcGFja2V0cyBkdXJpbmcgdHJhbnNtaXQgbG9hZCBiYWxhbmNpbmcgaW4gYm9uZGluZyBBTEIgYW5kIFRMQiBtb2RlcyAoYWxiX2RldGVybWluZV9uZCkuIFByZXZpb3VzbHksIGl0IHVzZWQgaWNtcDZfaGRyKHNrYikgKHdoaWNoIHJlbGllcyBvbiBza2JfdHJhbnNwb3J0X2hlYWRlciwgbm90IG5lY2Vzc2FyaWx5IHNldCBvbiB0aGUgVFggcGF0aCkgYW5kIGRpZG4ndCByZWxvYWQgdGhlIElQdjYgaGVhZGVyIHBvaW50ZXIgYWZ0ZXIgcHNrYl9uZXR3b3JrX21heV9wdWxsIHJlYWxsb2NhdGlvbnMuIFRoaXMgZnVuY3Rpb25hbCBmaXggYWZmZWN0cyBwYWNrZXQgdHJhbnNtaXNzaW9uIG92ZXIgYm9uZGluZyB2aXJ0dWFsIGludGVyZmFjZXMgYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQk9ORElOR1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiLFxuICAgIFwiTkVUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX3htaXRfYWxiX3NsYXZlX2dldFwiLFxuICAgIFwiYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRcIixcbiAgICBcImJvbmRfYWxiX3htaXRcIixcbiAgICBcImJvbmRfdGxiX3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwYWNrZXQgaGVhZGVyIHBhcnNpbmcgZm9yIElQdjYgTmVpZ2hib3IgRGlzY292ZXJ5IChORCkgcGFja2V0cyBkdXJpbmcgdHJhbnNtaXQgbG9hZCBiYWxhbmNpbmcgaW4gYm9uZGluZyBBTEIgYW5kIFRMQiBtb2RlcyAoYWxiX2RldGVybWluZV9uZCkuIFByZXZpb3VzbHksIGl0IHVzZWQgaWNtcDZfaGRyKHNrYikgKHdoaWNoIHJlbGllcyBvbiBza2JfdHJhbnNwb3J0X2hlYWRlciwgbm90IG5lY2Vzc2FyaWx5IHNldCBvbiB0aGUgVFggcGF0aCkgYW5kIGRpZG4ndCByZWxvYWQgdGhlIElQdjYgaGVhZGVyIHBvaW50ZXIgYWZ0ZXIgcHNrYl9uZXR3b3JrX21heV9wdWxsIHJlYWxsb2NhdGlvbnMuIFRoaXMgZnVuY3Rpb25hbCBmaXggYWZmZWN0cyBwYWNrZXQgdHJhbnNtaXNzaW9uIG92ZXIgYm9uZGluZyB2aXJ0dWFsIGludGVyZmFjZXMgYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjEyOjIzLjQ4MzQ2MTc5OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc4NzIzMDMyNDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMzoxMjoyMy40ODM5NTg1MTlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3Nzg3MTgwMDkyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGFsYl9kZXRlcm1pbmVfbmQoKWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY2AgdG8gY29tcHV0ZSB0aGUgSUNNUHY2IGhlYWRlciBsb2NhdGlvbiBkaXJlY3RseSBmb2xsb3dpbmcgdGhlIElQdjYgaGVhZGVyIChgKGNvbnN0IHN0cnVjdCBpY21wNmhkciAqKShpcDZoZHIgKyAxKWApIGluc3RlYWQgb2YgaW52b2tpbmcgYGljbXA2X2hkcihza2IpYCAod2hpY2ggcmVsaWVzIG9uIGBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpYCBiZWluZyBpbml0aWFsaXplZCkuIEl0IGFsc28gZHJvcHMgYW4gdW51c2VkIGBib25kYCBwYXJhbWV0ZXIuXFxuXFxuVGhlIHBhY2tldCBwYXlsb2FkIGJ5dGVzIHJlYWQgYnkgdGhpcyBmdW5jdGlvbiBhcmUgdmVyaWZpZWQgdG8gZXhpc3QgaW4gdGhlIGxpbmVhciBidWZmZXIgdXNpbmcgYHBza2JfbmV0d29ya19tYXlfcHVsbCgpYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbnkgcG90ZW50aWFsIGJ1ZmZlciBib3VuZHMgb3Igc2tiIGRlcmVmZXJlbmNlIGlzc3VlcyBpbiB0aGlzIHBhdGggYXJlIGNvdmVyZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRkOGQ2MjU4ODNjNzNlM2EwODEwMmQ4MTM5NDE2MjVhYjJmMTg5YjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDAzOjExOjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXG5pbmRleCA4MzlmNzQ4MmRjMTgyLi41MDczYWVlYmE2Yzk3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXG4rKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbkBAIC0xMjgxLDEwICsxMjgxLDEwIEBAIHN0YXRpYyBpbnQgYWxiX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdm9pZCAqYWRkcilcbiB9XG4gXG4gLyogZGV0ZXJtaW5lIGlmIHRoZSBwYWNrZXQgaXMgTkEgb3IgTlMgKi9cbi1zdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKVxuK3N0YXRpYyBib29sIGFsYl9kZXRlcm1pbmVfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aGRyO1xuLVx0c3RydWN0IGljbXA2aGRyICpoZHI7XG4rXHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aGRyO1xuK1x0Y29uc3Qgc3RydWN0IGljbXA2aGRyICpoZHI7XG4gXG4gXHRpZiAoIXBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZigqaXA2aGRyKSkpXG4gXHRcdHJldHVybiB0cnVlO1xuQEAgLTEyOTYsNyArMTI5Niw4IEBAIHN0YXRpYyBib29sIGFsYl9kZXRlcm1pbmVfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4gXHRpZiAoIXBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZigqaXA2aGRyKSArIHNpemVvZigqaGRyKSkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0aGRyID0gaWNtcDZfaGRyKHNrYik7XG4rXHRpcDZoZHIgPSBpcHY2X2hkcihza2IpO1xuK1x0aGRyID0gKGNvbnN0IHN0cnVjdCBpY21wNmhkciAqKShpcDZoZHIgKyAxKTtcbiBcdHJldHVybiBoZHItXHUwMDNlaWNtcDZfdHlwZSA9PSBORElTQ19ORUlHSEJPVVJfQURWRVJUSVNFTUVOVCB8fFxuIFx0XHRoZHItXHUwMDNlaWNtcDZfdHlwZSA9PSBORElTQ19ORUlHSEJPVVJfU09MSUNJVEFUSU9OO1xuIH1cbkBAIC0xMzgxLDcgKzEzODIsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuIFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cdTAwM2VoX2Rlc3QpKSB7XG4gXHRcdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG4gXHRcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4tXHRcdFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiLCBib25kKSlcbitcdFx0XHRpZiAoYWxiX2RldGVybWluZV9uZChza2IpKVxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0ZmFsbHRocm91Z2g7XG4gXHRcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuQEAgLTE0NjcsNyArMTQ2OCw3IEBAIHN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiLCBib25kKSkge1xuK1x0XHRpZiAoYWxiX2RldGVybWluZV9uZChza2IpKSB7XG4gXHRcdFx0ZG9fdHhfYmFsYW5jZSA9IGZhbHNlO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMzoxMjoyMy40ODM5NjE3NTlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njc2OTk4ODY2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBib25kX2FsYi5jKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jYC4gTG9va3MgbGlrZSBpdCdzIGEgcmVsYXRpdmVseSBmb2N1c2VkIG1vZGlmaWNhdGlvbiwgd2hpY2ggaXMgZ29vZC4gVGhlIGluZGV4IGNoYW5nZSBjb25maXJtcyB0aGlzIGlzIGFuIGVkaXQgYW5kIG5vdCBhIG5ldyBmaWxlLlxuXG5Ob3csIGxldCdzIGV4YW1pbmUgdGhlIGFjdHVhbCBjaGFuZ2UuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGluIHRoZSBgYWxiX2RldGVybWluZV9uZGAgZnVuY3Rpb24uICBJdCBhcHBlYXJzIHRoZSBmdW5jdGlvbidzIHNpZ25hdHVyZSBpcyB1cGRhdGVkLCByZW1vdmluZyBgc3RydWN0IGJvbmRpbmcgKmJvbmRgIGZyb20gdGhlIGFyZ3VtZW50IGxpc3QuIFRoaXMgaGludHMgYXQgc29tZSByZWZhY3RvcmluZyBvciBhIGNoYW5nZSBpbiBob3cgdGhlIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBib25kaW5nIGNvbnRleHQuIEkgbmVlZCB0byBrZWVwIGFuIG9wZW4gbWluZCwgYXMgdGhpcyBjb3VsZCBiZSBhbiBvcHRpbWl6YXRpb24gYnkgcmVtb3ZpbmcgYW4gdW5uZWNlc3NhcnkgYXJndW1lbnQgb3IgYSBsYXJnZXIgYXJjaGl0ZWN0dXJhbCBhZGp1c3RtZW50LlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIGluc2lkZSB0aGUgZnVuY3Rpb24sIEkgbm90aWNlIHRoZSB1c2Ugb2YgYGlwdjZoZHJgIGFuZCBgaWNtcDZoZHJgLiAgSXQgYXBwZWFycyB3ZSBhcmUgaW5zcGVjdGluZyBJUHY2IE5laWdoYm9yIERpc2NvdmVyeSBwYWNrZXRzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlaXRoZXIgTmVpZ2hib3IgQWR2ZXJ0aXNlbWVudHMgb3IgTmVpZ2hib3IgU29saWNpdGF0aW9ucy4gVGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdhcyBwb3RlbnRpYWxseSByZXRyaWV2aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIGJvbmRpbmcgY29udGV4dCB0aGF0IGNvdWxkIGluZmx1ZW5jZSB0aGlzIHByb2Nlc3MsIHNvIHJlbW92aW5nIHRoYXQgZnJvbSB0aGUgZnVuY3Rpb24ncyBzY29wZSB3aWxsIG5lZWQgdG8gYmUgd2VsbC11bmRlcnN0b29kLlxuXG5UaGUgc3Vic2VxdWVudCBjb2RlIGNoYW5nZXMgYXBwZWFyIHRvIGFsaWduIHdpdGggcmVtb3ZpbmcgdGhlIGBib25kYCBzdHJ1Y3QuIEl0IGxvb2tzIGxpa2UgdGhlIGBpcHY2aGRyYCBhbmQgYGljbXA2aGRyYCBwb2ludGVycyBhcmUgbm93IGNhc3QgYXMgYGNvbnN0YCwgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlIGZvciByZWFkLW9ubHkgYWNjZXNzLiBJdCBhcHBlYXJzIHdlIGFyZSBhY2Nlc3NpbmcgdGhlIGhlYWRlcnMgdXNpbmcgYGlwdjZfaGRyYCBhbmQgdXNpbmcgcG9pbnRlciBhcml0aG1ldGljIHRvIGFjY2VzcyB0aGUgYGljbXA2X2hkcmAuIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UsIHNvIHRoZSBtb2RpZmljYXRpb24gaXMgYSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBvZiB0aGUgaW50ZW50aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBhc3N1bXB0aW9ucyBiZWhpbmQgdGhpcyBjYWxjdWxhdGlvbiBhcmUgbm90IGJyb2tlbi4gQWxzbywgSSBuZWVkIHRvIGRldGVybWluZSBpZiBhbnkgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2VzIG5ldyBwb3RlbnRpYWwgc2VjdXJpdHkgaXNzdWVzIG9yIGxvZ2ljIGVycm9ycy5cblxuSSdtIG1ha2luZyBhIG1lbnRhbCBub3RlIHRoYXQgdGhpcyBpcyBwcm9iYWJseSByZWxhdGVkIHRvIElQdjYgTmVpZ2hib3IgRGlzY292ZXJ5IGFuZCBob3cgdGhpcyBib25kaW5nIGRyaXZlciBoYW5kbGVzIHRob3NlIHBhY2tldHMuIEkgbmVlZCB0byBjaGVjayBob3cgdGhlIGJvbmRpbmcgY29udGV4dCBpcyB1dGlsaXplZCBlbHNld2hlcmUgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGFyZ3VtZW50IHJlbW92YWwgaXMgc2FmZS4gVWx0aW1hdGVseSwgSSBuZWVkIHRvIHRyYWNlIGJhY2sgdG8gd2hlcmUgdGhpcyBgYWxiX2RldGVybWluZV9uZGAgaXMgY2FsbGVkIHRvIGZ1bGx5IGdyYXNwIHRoZSByYW1pZmljYXRpb25zIG9mIHRoaXMgcGF0Y2guIExldCBtZSBjaGVjayB0aGUgY29udGV4dCBhcm91bmQgbGluZSAxMjgxIGluIGBib25kX2FsYi5jYCB0byBnYWluIGZ1cnRoZXIgY2xhcml0eSBhYm91dCB0aGUgcHVycG9zZSBvZiB0aGVzZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTQwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDM6MTI6MzAuMjUzOTUzMjE1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjcxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI3NSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI3NTpcXHRcXHRcXHRcXHRcXHQgIHJvbGxiYWNrX3NsYXZlLVxcdTAwM2VkZXYtXFx1MDAzZWFkZHJfbGVuKTtcXG4xMjc2OlxcdFxcdFxcdGRldl9zZXRfbWFjX2FkZHJlc3Mocm9sbGJhY2tfc2xhdmUtXFx1MDAzZWRldiwgXFx1MDAyNnNzLCBOVUxMKTtcXG4xMjc3OlxcdFxcdFxcdGRldl9hZGRyX3NldChyb2xsYmFja19zbGF2ZS1cXHUwMDNlZGV2LCB0bXBfYWRkcik7XFxuMTI3ODpcXHRcXHR9XFxuMTI3OTpcXHRcXG4xMjgwOlxcdFxcdHJldHVybiByZXM7XFxuMTI4MTpcXHR9XFxuMTI4MjpcXHRcXG4xMjgzOlxcdC8qIGRldGVybWluZSBpZiB0aGUgcGFja2V0IGlzIE5BIG9yIE5TICovXFxuMTI4NDpcXHRzdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IpXFxuMTI4NTpcXHR7XFxuMTI4NjpcXHRcXHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aGRyO1xcbjEyODc6XFx0XFx0Y29uc3Qgc3RydWN0IGljbXA2aGRyICpoZHI7XFxuMTI4ODpcXHRcXG4xMjg5OlxcdFxcdGlmICghcHNrYl9uZXR3b3JrX21heV9wdWxsKHNrYiwgc2l6ZW9mKCppcDZoZHIpKSlcXG4xMjkwOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjEyOTE6XFx0XFxuMTI5MjpcXHRcXHRpcDZoZHIgPSBpcHY2X2hkcihza2IpO1xcbjEyOTM6XFx0XFx0aWYgKGlwNmhkci1cXHUwMDNlbmV4dGhkciAhPSBJUFBST1RPX0lDTVBWNilcXG4xMjk0OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMjk1OlxcdFxcbjEyOTY6XFx0XFx0aWYgKCFwc2tiX25ldHdvcmtfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwNmhkcikgKyBzaXplb2YoKmhkcikpKVxcbjEyOTc6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMTI5ODpcXHRcXG4xMjk5OlxcdFxcdGlwNmhkciA9IGlwdjZfaGRyKHNrYik7XFxuMTMwMDpcXHRcXHRoZHIgPSAoY29uc3Qgc3RydWN0IGljbXA2aGRyICopKGlwNmhkciArIDEpO1xcbjEzMDE6XFx0XFx0cmV0dXJuIGhkci1cXHUwMDNlaWNtcDZfdHlwZSA9PSBORElTQ19ORUlHSEJPVVJfQURWRVJUSVNFTUVOVCB8fFxcbjEzMDI6XFx0XFx0XFx0aGRyLVxcdTAwM2VpY21wNl90eXBlID09IE5ESVNDX05FSUdIQk9VUl9TT0xJQ0lUQVRJT047XFxuMTMwMzpcXHR9XFxuMTMwNDpcXHRcXG4xMzA1OlxcdC8qKioqKioqKioqKioqKioqKioqKioqKiogZXhwb3J0ZWQgYWxiIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKiovXFxuMTMwNjpcXHRcXG4xMzA3OlxcdGludCBib25kX2FsYl9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kLCBpbnQgcmxiX2VuYWJsZWQpXFxuMTMwODpcXHR7XFxuMTMwOTpcXHRcXHRpbnQgcmVzO1xcbjEzMTA6XFx0XFxuMTMxMTpcXHRcXHRyZXMgPSB0bGJfaW5pdGlhbGl6ZShib25kKTtcXG4xMzEyOlxcdFxcdGlmIChyZXMpXFxuMTMxMzpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjEzMTQ6XFx0XFxuMTMxNTpcXHRcXHRpZiAocmxiX2VuYWJsZWQpIHtcXG4xMzE2OlxcdFxcdFxcdHJlcyA9IHJsYl9pbml0aWFsaXplKGJvbmQpO1xcbjEzMTc6XFx0XFx0XFx0aWYgKHJlcykge1xcbjEzMTg6XFx0XFx0XFx0XFx0dGxiX2RlaW5pdGlhbGl6ZShib25kKTtcXG4xMzE5OlxcdFxcdFxcdFxcdHJldHVybiByZXM7XFxuMTMyMDpcXHRcXHRcXHR9XFxuMTMyMTpcXHRcXHRcXHRib25kLVxcdTAwM2VhbGJfaW5mby5ybGJfZW5hYmxlZCA9IDE7XFxuMTMyMjpcXHRcXHR9IGVsc2Uge1xcbjEzMjM6XFx0XFx0XFx0Ym9uZC1cXHUwMDNlYWxiX2luZm8ucmxiX2VuYWJsZWQgPSAwO1xcbjEzMjQ6XFx0XFx0fVxcbjEzMjU6XFx0XFxuMTMyNjpcXHRcXHRyZXR1cm4gMDtcXG4xMzI3OlxcdH1cXG4xMzI4OlxcdFxcbjEzMjk6XFx0dm9pZCBib25kX2FsYl9kZWluaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuMTMzMDpcXHR7XFxuMTMzMTpcXHRcXHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcXG4xMzMyOlxcdFxcbjEzMzM6XFx0XFx0dGxiX2RlaW5pdGlhbGl6ZShib25kKTtcXG4xMzM0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMzoxMjozMC4yNTQwNjc4MDRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIxOTk3Njk2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIElDTVB2NiBIZWFkZXIgTWFuaXB1bGF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUga2VybmVsIGNvZGUgaGFuZGxlcyBJQ01QdjYgaGVhZGVycy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCdzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdXNpbmcgYGljbXA2X2hkcihza2IpYCBhbmQgc2ltcGx5IG9mZnNldHRpbmcgZnJvbSB0aGUgSVB2NiBoZWFkZXIgd2l0aCBgKGlwNmhkciArIDEpYD9cIiBJIHN1c3BlY3QgdGhlcmUncyBhIGdvb2QgcmVhc29uIGZvciB1c2luZyB0aGUgZnVuY3Rpb24sIHByb2JhYmx5IHJlbGF0ZWQgdG8gcm9idXN0bmVzcyBvciBzb21lIG51YW5jZWQgaGFuZGxpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQuICBJIHdhbnQgdG8ga25vdyBpZiB0aGVyZSBpcyBhIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVzZSB0d28gZGVmaW5pdGlvbnMuXG5cblRpbWUgdG8gY3V0IHRvIHRoZSBjaGFzZSBhbmQgZmluZCB0aGUgYWN0dWFsIGRlZmluaXRpb24gb2YgYGljbXA2X2hkcmAuIEknbGwgcnVuIGEgYGdyZXBgIHRvIHF1aWNrbHkgbG9jYXRlIHdoZXJlIHRoYXQgbWFjcm8gb3IgZnVuY3Rpb24gaXMgZGVmaW5lZC4gVGhhdCdsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoeSB0aGlzIGlzIGRvbmUgdGhlIHdheSBpdCBpcy4gVGhlIGFuc3dlciBpcyBsaWtlbHkgdGhlcmUgaW4gdGhlIGNvZGUgY29tbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQwNywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDM6MTI6MzMuNDc0MDQ3NjE5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzUzMDc4MTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImljbXA2X2hkclxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2FtdC5jPTgwOD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmFtdF9idWlsZF9tbGRfZ3Eoc3RydWN0IGFtdF9kZXYgKmFtdClcXG4tLVxcbmRyaXZlcnMvbmV0L2FtdC5jLTg1Ni1cXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbmRyaXZlcnMvbmV0L2FtdC5jOjg1NzpcXHRtbGQycVxcdFxcdFxcdD0gKHN0cnVjdCBtbGQyX3F1ZXJ5ICopaWNtcDZfaGRyKHNrYik7XFxuZHJpdmVycy9uZXQvYW10LmMtODU4LVxcdG1sZDJxLVxcdTAwM2VtbGQycV9tcmNcXHQ9IGh0b25zKDEpO1xcbi0tXFxuZHJpdmVycy9uZXQvYW10LmM9MjExMz1zdGF0aWMgdm9pZCBhbXRfbWxkdjFfcmVwb3J0X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2FtdC5jLTIxMTUte1xcbmRyaXZlcnMvbmV0L2FtdC5jOjIxMTY6XFx0c3RydWN0IG1sZF9tc2cgKm1sZCA9IChzdHJ1Y3QgbWxkX21zZyAqKWljbXA2X2hkcihza2IpO1xcbmRyaXZlcnMvbmV0L2FtdC5jLTIxMTctXFx0c3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvYW10LmM9MjE1MD1zdGF0aWMgdm9pZCBhbXRfbWxkdjFfbGVhdmVfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvYW10LmMtMjE1Mi17XFxuZHJpdmVycy9uZXQvYW10LmM6MjE1MzpcXHRzdHJ1Y3QgbWxkX21zZyAqbWxkID0gKHN0cnVjdCBtbGRfbXNnICopaWNtcDZfaGRyKHNrYik7XFxuZHJpdmVycy9uZXQvYW10LmMtMjE1NC1cXHRzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvYW10LmM9MjE2OT1zdGF0aWMgdm9pZCBhbXRfbWxkdjJfcmVwb3J0X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2FtdC5jLTIxNzEte1xcbmRyaXZlcnMvbmV0L2FtdC5jOjIxNzI6XFx0c3RydWN0IG1sZDJfcmVwb3J0ICptbGQyciA9IChzdHJ1Y3QgbWxkMl9yZXBvcnQgKilpY21wNl9oZHIoc2tiKTtcXG5kcml2ZXJzL25ldC9hbXQuYy0yMTczLVxcdGludCBsZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgc2l6ZW9mKCptbGQycik7XFxuLS1cXG5kcml2ZXJzL25ldC9hbXQuYz0yMjQ3PXN0YXRpYyB2b2lkIGFtdF9tbGRfcmVwb3J0X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2FtdC5jLTIyNDkte1xcbmRyaXZlcnMvbmV0L2FtdC5jOjIyNTA6XFx0c3RydWN0IG1sZF9tc2cgKm1sZCA9IChzdHJ1Y3QgbWxkX21zZyAqKWljbXA2X2hkcihza2IpO1xcbmRyaXZlcnMvbmV0L2FtdC5jLTIyNTEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jPTEyOTg9c3RhdGljIGJvb2wgYmVfc2VuZF9wa3RfdG9fYm1jKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYy0xMzIyLVxcdFxcdGlmIChuZXh0aGRyID09IElQUFJPVE9fSUNNUFY2KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYzoxMzIzOlxcdFxcdFxcdHN0cnVjdCBpY21wNmhkciAqaWNtcDYgPSBpY21wNl9oZHIoKCpza2IpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTEzMjQtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oLTgtXFxuaW5jbHVkZS9saW51eC9pY21wdjYuaDo5OnN0YXRpYyBpbmxpbmUgc3RydWN0IGljbXA2aGRyICppY21wNl9oZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oLTEwLXtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTEwMzU9c3RhdGljIGJvb2wgYmF0YWR2X21jYXN0X2lzX3JlcG9ydF9pcHY2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMDM5LVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjEwNDA6XFx0c3dpdGNoIChpY21wNl9oZHIoc2tiKS1cXHUwMDNlaWNtcDZfdHlwZSkge1xcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEwNDEtXFx0Y2FzZSBJQ01QVjZfTUdNX1JFUE9SVDpcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTA2OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmJyX2lwNl9tdWx0aWNhc3RfYWxsb2NfcXVlcnkoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTE2OS1cXHRjYXNlIDE6XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxMTcwOlxcdFxcdG1sZHEgPSAoc3RydWN0IG1sZF9tc2cgKilpY21wNl9oZHIoc2tiKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTExNzEtXFx0XFx0bWxkcS1cXHUwMDNlbWxkX3R5cGUgPSBJQ01QVjZfTUdNX1FVRVJZO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xMTgwLVxcdGNhc2UgMjpcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjExODE6XFx0XFx0bWxkMnEgPSAoc3RydWN0IG1sZDJfcXVlcnkgKilpY21wNl9oZHIoc2tiKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTExODItXFx0XFx0bWxkMnEtXFx1MDAzZW1sZDJxX21yYyA9IGh0b25zKG1sZHYyX21yYyhqaWZmaWVzX3RvX21zZWNzKGludGVydmFsKSkpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0zMDI1PXN0YXRpYyBpbnQgYnJfaXA2X211bHRpY2FzdF9tbGQyX3JlcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zMDQ1LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MzA0NjpcXHRtbGQyciA9IChzdHJ1Y3QgbWxkMl9yZXBvcnQgKilpY21wNl9oZHIoc2tiKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTMwNDctXFx0bnVtID0gbnRvaHMobWxkMnItXFx1MDAzZW1sZDJyX25ncmVjKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MzYyND1zdGF0aWMgaW50IGJyX2lwNl9tdWx0aWNhc3RfcXVlcnkoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzY1MS1cXHRcXHR9XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozNjUyOlxcdFxcdG1sZCA9IChzdHJ1Y3QgbWxkX21zZyAqKSBpY21wNl9oZHIoc2tiKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM2NTMtXFx0XFx0bWF4X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcyhudG9ocyhtbGQtXFx1MDAzZW1sZF9tYXhkZWxheSkpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zNjYwLVxcdFxcdH1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjM2NjE6XFx0XFx0bWxkMnEgPSAoc3RydWN0IG1sZDJfcXVlcnkgKilpY21wNl9oZHIoc2tiKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM2NjItXFx0XFx0aWYgKCFtbGQycS1cXHUwMDNlbWxkMnFfbnNyY3MpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTM5OTA9c3RhdGljIHZvaWQgYnJfaXA2X211bHRpY2FzdF9tcmRfcmN2KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM5OTMte1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6Mzk5NDpcXHRpZiAoaWNtcDZfaGRyKHNrYiktXFx1MDAzZWljbXA2X3R5cGUgIT0gSUNNUFY2X01SRElTQ19BRFYpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zOTk1LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9pcHY0L3BpbmcuYz00ODQ9dm9pZCBwaW5nX2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCB1MzIgaW5mbylcXG4tLVxcbm5ldC9pcHY0L3BpbmcuYy01MDItXFx0XFx0ZmFtaWx5ID0gQUZfSU5FVDY7XFxubmV0L2lwdjQvcGluZy5jOjUwMzpcXHRcXHR0eXBlID0gaWNtcDZfaGRyKHNrYiktXFx1MDAzZWljbXA2X3R5cGU7XFxubmV0L2lwdjQvcGluZy5jOjUwNDpcXHRcXHRjb2RlID0gaWNtcDZfaGRyKHNrYiktXFx1MDAzZWljbXA2X2NvZGU7XFxubmV0L2lwdjQvcGluZy5jLTUwNS1cXHRcXHRpY21waCA9IChzdHJ1Y3QgaWNtcGhkciAqKSAoc2tiLVxcdTAwM2VkYXRhICsgb2Zmc2V0KTtcXG4tLVxcbm5ldC9pcHY2L2RhdGFncmFtLmM9Mjk2PXN0YXRpYyB2b2lkIGlwdjZfaWNtcF9lcnJvcl9yZmM0ODg0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9kYXRhZ3JhbS5jLTI5OC17XFxubmV0L2lwdjYvZGF0YWdyYW0uYzoyOTk6XFx0c3dpdGNoIChpY21wNl9oZHIoc2tiKS1cXHUwMDNlaWNtcDZfdHlwZSkge1xcbm5ldC9pcHY2L2RhdGFncmFtLmMtMzAwLVxcdGNhc2UgSUNNUFY2X1RJTUVfRVhDRUVEOlxcbi0tXFxubmV0L2lwdjYvZGF0YWdyYW0uYy0zMDItXFx0XFx0aXBfaWNtcF9lcnJvcl9yZmM0ODg0KHNrYiwgb3V0LCBzaXplb2Yoc3RydWN0IGljbXA2aGRyKSxcXG5uZXQvaXB2Ni9kYXRhZ3JhbS5jOjMwMzpcXHRcXHRcXHRcXHQgICAgICBpY21wNl9oZHIoc2tiKS1cXHUwMDNlaWNtcDZfZGF0YWdyYW1fbGVuICogOCk7XFxubmV0L2lwdjYvZGF0YWdyYW0uYy0zMDQtXFx0fVxcbi0tXFxubmV0L2lwdjYvZGF0YWdyYW0uYz0zMDc9dm9pZCBpcHY2X2ljbXBfZXJyb3Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyLFxcbi0tXFxubmV0L2lwdjYvZGF0YWdyYW0uYy0zMDkte1xcbm5ldC9pcHY2L2RhdGFncmFtLmM6MzEwOlxcdHN0cnVjdCBpY21wNmhkciAqaWNtcGggPSBpY21wNl9oZHIoc2tiKTtcXG5uZXQvaXB2Ni9kYXRhZ3JhbS5jLTMxMS1cXHRzdHJ1Y3Qgc29ja19leHRlcnJfc2tiICpzZXJyO1xcbi0tXFxubmV0L2lwdjYvaWNtcC5jPTI3Nj12b2lkIGljbXB2Nl9wdXNoX3BlbmRpbmdfZnJhbWVzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGZsb3dpNiAqZmw2LFxcbi0tXFxubmV0L2lwdjYvaWNtcC5jLTI4NS1cXG5uZXQvaXB2Ni9pY21wLmM6Mjg2OlxcdGljbXA2aCA9IGljbXA2X2hkcihza2IpO1xcbm5ldC9pcHY2L2ljbXAuYy0yODctXFx0bWVtY3B5KGljbXA2aCwgdGhkciwgc2l6ZW9mKHN0cnVjdCBpY21wNmhkcikpO1xcbi0tXFxubmV0L2lwdjYvaWNtcC5jPTkyMT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gaWNtcHY2X2VjaG9fcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2ljbXAuYy05MjctXFx0Y29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciA9IE5VTEw7XFxubmV0L2lwdjYvaWNtcC5jOjkyODpcXHRzdHJ1Y3QgaWNtcDZoZHIgKmljbXBoID0gaWNtcDZfaGRyKHNrYik7XFxubmV0L2lwdjYvaWNtcC5jLTkyOS1cXHRib29sIGFwcGx5X3JhdGVsaW1pdCA9IGZhbHNlO1xcbi0tXFxubmV0L2lwdjYvaWNtcC5jPTExMDE9c3RhdGljIGludCBpY21wdjZfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9pY21wLmMtMTE0Ni1cXG5uZXQvaXB2Ni9pY21wLmM6MTE0NzpcXHRoZHIgPSBpY21wNl9oZHIoc2tiKTtcXG5uZXQvaXB2Ni9pY21wLmMtMTE0OC1cXG4tLVxcbm5ldC9pcHY2L2ljbXAuYy0xMTc2LVxcdFxcdFxcdGdvdG8gZGlzY2FyZF9pdDtcXG5uZXQvaXB2Ni9pY21wLmM6MTE3NzpcXHRcXHRoZHIgPSBpY21wNl9oZHIoc2tiKTtcXG5uZXQvaXB2Ni9pY21wLmMtMTE3OC1cXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYz0xOTI0PXN0cnVjdCBza19idWZmICpfX2lwNl9tYWtlX3NrYihzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTk5OC1cXHRcXHRlbHNlXFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjE5OTk6XFx0XFx0XFx0aWNtcDZfdHlwZSA9IGljbXA2X2hkcihza2IpLVxcdTAwM2VpY21wNl90eXBlO1xcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0yMDAwLVxcdFxcdElDTVA2TVNHT1VUX0lOQ19TVEFUUyhuZXQsIGlkZXYsIGljbXA2X3R5cGUpO1xcbi0tXFxubmV0L2lwdjYvbWNhc3QuYz0xNDI2PXN0YXRpYyB2b2lkIF9fbWxkX3F1ZXJ5X3dvcmsoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtMTQ2MS1cXG5uZXQvaXB2Ni9tY2FzdC5jOjE0NjI6XFx0bWxkID0gKHN0cnVjdCBtbGRfbXNnICopaWNtcDZfaGRyKHNrYik7XFxubmV0L2lwdjYvbWNhc3QuYy0xNDYzLVxcdGdyb3VwID0gbWxkLVxcdTAwM2VtbGRfbWNhO1xcbi0tXFxubmV0L2lwdjYvbWNhc3QuYz0xNjA2PXN0YXRpYyB2b2lkIF9fbWxkX3JlcG9ydF93b3JrKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTE2MjQtXFxubmV0L2lwdjYvbWNhc3QuYzoxNjI1OlxcdG1sZCA9IChzdHJ1Y3QgbWxkX21zZyAqKWljbXA2X2hkcihza2IpO1xcbm5ldC9pcHY2L21jYXN0LmMtMTYyNi1cXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9NDY5PXZvaWQgbmRpc2Nfc2VuZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkcixcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtNDcxLXtcXG5uZXQvaXB2Ni9uZGlzYy5jOjQ3MjpcXHRzdHJ1Y3QgaWNtcDZoZHIgKmljbXA2aCA9IGljbXA2X2hkcihza2IpO1xcbm5ldC9pcHY2L25kaXNjLmMtNDczLVxcdHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHNrYl9kc3Qoc2tiKTtcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X05QVC5jPTgwPXN0YXRpYyBzdHJ1Y3QgaXB2NmhkciAqaWNtcHY2X2JvdW5jZWRfaXB2NmhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTlBULmMtODUtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTlBULmM6ODY6XFx0aWYgKCFpY21wdjZfaXNfZXJyKGljbXA2X2hkcihza2IpLVxcdTAwM2VpY21wNl90eXBlKSlcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9OUFQuYy04Ny1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9MzIzOD12b2lkIGlwNl9yZWRpcmVjdF9ub19oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCBpbnQgb2lmKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0zMjQwLVxcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpO1xcbm5ldC9pcHY2L3JvdXRlLmM6MzI0MTpcXHRjb25zdCBzdHJ1Y3QgcmRfbXNnICptc2cgPSAoc3RydWN0IHJkX21zZyAqKWljbXA2X2hkcihza2IpO1xcbm5ldC9pcHY2L3JvdXRlLmMtMzI0Mi1cXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTQyNDE9c3RhdGljIHZvaWQgcnQ2X2RvX3JlZGlyZWN0KHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy00MjYwLVxcbm5ldC9pcHY2L3JvdXRlLmM6NDI2MTpcXHRtc2cgPSAoc3RydWN0IHJkX21zZyAqKWljbXA2X2hkcihza2IpO1xcbm5ldC9pcHY2L3JvdXRlLmMtNDI2Mi1cXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM9MzU4PXN0YXRpYyB2b2lkIHVwZGF0ZV9pcHY2X2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHU4IGw0X3Byb3RvLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0zNzktXFx0XFx0aWYgKGxpa2VseSh0cmFuc3BvcnRfbGVuIFxcdTAwM2U9IHNpemVvZihzdHJ1Y3QgaWNtcDZoZHIpKSlcXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjM4MDpcXHRcXHRcXHRpbmV0X3Byb3RvX2NzdW1fcmVwbGFjZTE2KFxcdTAwMjZpY21wNl9oZHIoc2tiKS1cXHUwMDNlaWNtcDZfY2tzdW0sXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0zODEtXFx0XFx0XFx0XFx0XFx0XFx0ICBza2IsIGFkZHIsIG5ld19hZGRyLCB0cnVlKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM9NTUwPXN0YXRpYyBpbnQgcGFyc2VfaWNtcHY2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy01NTIte1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6NTUzOlxcdHN0cnVjdCBpY21wNmhkciAqaWNtcCA9IGljbXA2X2hkcihza2IpO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtNTU0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMzoxMjozNS44MjcxMzIzOVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjA4NzA1Mjk2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHdoYXQncyBnb2luZyBvbiwgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHN0YXJ0aW5nIHBvaW50OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJQ01QdjYgSGVhZGVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgc29tZSBjb2RlIHRoYXQncyBkZWFsaW5nIHdpdGggSUNNUHY2IHBhY2tldHMsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGhlYWRlciBpcyBiZWluZyBhY2Nlc3NlZC4gVGhlIGluaXRpYWwgc3RlcCBpcyB1c2luZyBgaWNtcDZfaGRyKHNrYilgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJSaWdodCwgbGV0J3MgdHJhY2UgdGhpcyBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuXCIgVGhpcyBwcm9iYWJseSByZXRyaWV2ZXMgdGhlIHBvaW50ZXIgdG8gdGhlIElDTVB2NiBoZWFkZXIuXG5cblRoZSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGhvdyBgaWNtcDZfaGRyKHNrYilgIGRvZXMgdGhhdDogaXQgY2FsbHMgYHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYilgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgZmV0Y2hpbmcgdGhlIHRyYW5zcG9ydCBsYXllciBoZWFkZXIgKHdoaWNoIGluIElQdjYsIGZvciBJQ01QdjYsIHdvdWxkIGJlIHRoZSBJQ01QdjYgaGVhZGVyKS4gVGhhdCBtYWtlcyBzZW5zZSDigJMgdGhlIFNLQiAoU29ja2V0IEJ1ZmZlcikgcHJvYmFibHkgY29udGFpbnMgdGhlIHdob2xlIHBhY2tldCwgYW5kIHRoaXMgZnVuY3Rpb24gaGVscHMgcGlucG9pbnQgdGhlIGhlYWRlcidzIGxvY2F0aW9uIHdpdGhpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUuXG5cbk5vdywgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBhbmQgYmUgYWJzb2x1dGVseSBzdXJlLCBJJ20gZ29pbmcgdG8gY29uc3VsdCB0aGUgZGVmaW5pdGlvbiBvZiBgaWNtcDZfaGRyYCBhbmQgcmVsYXRlZCBzdHJ1Y3RzLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGluY2x1ZGUgZmlsZXMgdG8gY29uZmlybSB0aGUgZGF0YSBsYXlvdXQgYW5kIGZpZWxkIGRlZmluaXRpb25zIGluIGBpbmNsdWRlL2xpbnV4L2ljbXB2Ni5oYC4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIGVuc3VyZSBteSBhbmFseXNpcyBpcyBjb3JyZWN0LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ1MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjEzOjA3LjkxNDE4OTA5NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mjc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2ljbXB2Ni5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4gICAyOlxcdCNpZm5kZWYgX0xJTlVYX0lDTVBWNl9IXFxuICAgMzpcXHQjZGVmaW5lIF9MSU5VWF9JQ01QVjZfSFxcbiAgIDQ6XFx0XFxuICAgNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaXB2Ni5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvaWNtcHY2LmhcXHUwMDNlXFxuICAgODpcXHRcXG4gICA5OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGljbXA2aGRyICppY21wNl9oZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gIDEwOlxcdHtcXG4gIDExOlxcdFxcdHJldHVybiAoc3RydWN0IGljbXA2aGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG4gIDEyOlxcdH1cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbiAgMTU6XFx0XFxuICAxNjpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4gIDE3OlxcdFxcbiAgMTg6XFx0dm9pZCBpY21wNl9zZW5kKHN0cnVjdCBza19idWZmICpza2IsIHU4IHR5cGUsIHU4IGNvZGUsIF9fdTMyIGluZm8sXFxuICAxOTpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmZvcmNlX3NhZGRyLFxcbiAgMjA6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpwYXJtKTtcXG4gIDIxOlxcdFxcbiAgMjI6XFx0c3RhdGljIGlubGluZSB2b2lkIGljbXB2Nl9zZW5kKHN0cnVjdCBza19idWZmICpza2IsIHU4IHR5cGUsIHU4IGNvZGUsIF9fdTMyIGluZm8pXFxuICAyMzpcXHR7XFxuICAyNDpcXHRcXHRpY21wNl9zZW5kKHNrYiwgdHlwZSwgY29kZSwgaW5mbywgTlVMTCwgSVA2Q0Ioc2tiKSk7XFxuICAyNTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjEzOjA3LjkxNDI4MTg5NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NTMwNDk3ODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJvbmRlZCBJbnRlcmZhY2UncyBJUHY2IE5laWdoYm9yIERpc2NvdmVyeSBQYXRoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYm9uZGluZywgc3BlY2lmaWNhbGx5IHRoZSBgYWxiX2RldGVybWluZV9uZGAgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCBjb2RlIHVzZXMgYGljbXA2X2hkcihza2IpYCwgd2hpY2ggcmVsaWVzIG9uIGBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpYC4gTm93LCB0aGUgcHJvYmxlbSBhcmlzZXMgYmVjYXVzZSBkdXJpbmcgdGhlIHRyYW5zbWlzc2lvbiBwaGFzZSAobGlrZSBpbiBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgIG9yIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGApLCB0aGUgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXQgaXNuJ3QgYWx3YXlzIHNldCBjb3JyZWN0bHkuICBJdCBjb3VsZCBiZSB1bmluaXRpYWxpemVkIG9yIHBvaW50aW5nIHNvbWV3aGVyZSB3cm9uZy4gIE1lYW53aGlsZSwgdGhlIG5ldHdvcmsgaGVhZGVyIChgc2tiX25ldHdvcmtfaGVhZGVyYCkgKmlzKiBzZXQsIGFuZCB3ZSdyZSBwdWxsaW5nIHRoYXQgd2l0aCBgcHNrYl9uZXR3b3JrX21heV9wdWxsYC5cblxuQmVmb3JlIHRoZSBjaGFuZ2UsIHRoZSBsb2dpYyB3YXM6XG4xLiAgTWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgdGhlIElQdjYgaGVhZGVyIHdpdGggYHBza2JfbmV0d29ya19tYXlfcHVsbGAuXG4yLiAgR2V0IHRoZSBJUHY2IGhlYWRlciBhbmQgY2hlY2sgaWYgdGhlIG5leHQgaGVhZGVyIGlzIElDTVB2Ni5cbjMuICBNYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCB0aGUgSVB2NiBhbmQgSUNNUHY2IGhlYWRlciB3aXRoIGFub3RoZXIgYHBza2JfbmV0d29ya19tYXlfcHVsbGAuXG40LiAgR2V0IHRoZSBJQ01QdjYgaGVhZGVyIHdpdGggYGljbXA2X2hkcihza2IpYCBhbmQgY2hlY2sgdGhlIElDTVB2NiB0eXBlLlxuXG5UaGUgZmxhdz8gSWYgYHNrYl90cmFuc3BvcnRfaGVhZGVyYCB3YXNuJ3Qgc2V0LCB0aGVuIGBpY21wNl9oZHIoc2tiKWAgY291bGQgYmUgcmVhZGluZyBmcm9tICphbnl3aGVyZSogaW4gbWVtb3J5LCBwb3RlbnRpYWxseSBgc2tiLVx1MDAzZWhlYWRgLCBgc2tiLVx1MDAzZWRhdGFgLCBzb21lIHVuaW5pdGlhbGl6ZWQgb2Zmc2V0LCBvciBldmVuIG91dCBvZiBib3VuZHMuIFRoZSBLQVNBTiBtaWdodCBiZSBjYXRjaGluZyB0aGlzIG91dC1vZi1ib3VuZHMgcmVhZCwgYnV0IGl0J3MgYSBjcml0aWNhbCBidWcuXG5cblRoZSBwYXRjaCdzIHNvbHV0aW9uIGlzIGVsZWdhbnQ6IEl0IHNpbXBseSBjYWxjdWxhdGVzIHRoZSBJQ01QdjYgaGVhZGVyIHBvaW50ZXIgYmFzZWQgb24gdGhlIElQdjYgaGVhZGVyOiBgaGRyID0gKGNvbnN0IHN0cnVjdCBpY21wNmhkciAqKShpcDZoZHIgKyAxKWAuIFdlIGFsc28gZW5zdXJlIHRoZSBwYWNrZXQgZGF0YSBpcyB0aGVyZSB3aXRoIGBwc2tiX25ldHdvcmtfbWF5X3B1bGxgLiBUaGF0IGF2b2lkcyB0aGUgZGVwZW5kZW5jeSBvbiBgc2tiX3RyYW5zcG9ydF9oZWFkZXJgIGVudGlyZWx5LiAgQW5kIHRoZSB1bnVzZWQgYHN0cnVjdCBib25kaW5nICpib25kYCBwYXJhbWV0ZXIgaXMgcmVtb3ZlZCwgd2hpY2ggaXMgZ29vZCBjbGVhbnVwLlxuXG5Ob3csIEkgbmVlZCB0byB2ZXJpZnk6IGRvZXMgdGhpcyBjaGFuZ2UgaW50cm9kdWNlIGFueSBuZXcgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnk/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdDpcblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlOioqIE5vcGUsIHRoaXMgY29kZSBkb2Vzbid0IGRpcmVjdGx5IHNlbmQga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS5cbjIuICAqKlVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNlIGluIGNvbmRpdGlvbmFsczoqKiBObywgZXZlcnl0aGluZyBpcyBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgYW5kIHB1bGxlZC5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb246KiogTm8sIHRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkIHBvaW50ZXIgYXJpdGhtZXRpYy5cbjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBkYXRhOioqIE5vLCB0aGUgYHBza2JfbmV0d29ya19tYXlfcHVsbGAgY2FsbCBzYWZlZ3VhcmRzIHRoYXQuXG5cblNvLCBmcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGlzIGlzIGEgc2FmZSBhbmQgY29ycmVjdCBmaXguIEknbGwgZG91YmxlLWNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBjYWxsZXJzIGluIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbiwgYnV0IEkgZmVlbCBnb29kIGFib3V0IHRoaXMuIFRoaXMgc2hvdWxkIHJlc29sdmUgdGhlIG1lbW9yeSBhY2Nlc3MgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjM5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDM6MTM6MTYuNDQ0Nzg1Nzg3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM3MCxcbiAgXCJMaW5lQ291bnRcIjogMTEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNzA6XFx0XFxuMTM3MTpcXHRzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbjEzNzI6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMzczOlxcdHtcXG4xMzc0OlxcdFxcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUgPSBOVUxMO1xcbjEzNzU6XFx0XFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XFxuMTM3NjpcXHRcXHR1MzIgaGFzaF9pbmRleDtcXG4xMzc3OlxcdFxcbjEzNzg6XFx0XFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4xMzc5OlxcdFxcdGV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xcbjEzODA6XFx0XFxuMTM4MTpcXHRcXHQvKiBEbyBub3QgVFggYmFsYW5jZSBhbnkgbXVsdGljYXN0IG9yIGJyb2FkY2FzdCAqL1xcbjEzODI6XFx0XFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cXHUwMDNlaF9kZXN0KSkge1xcbjEzODM6XFx0XFx0XFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuMTM4NDpcXHRcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxcbjEzODU6XFx0XFx0XFx0XFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiKSlcXG4xMzg2OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjEzODc6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuMTM4ODpcXHRcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4xMzg5OlxcdFxcdFxcdFxcdGhhc2hfaW5kZXggPSBib25kX3htaXRfaGFzaChib25kLCBza2IpO1xcbjEzOTA6XFx0XFx0XFx0XFx0aWYgKGJvbmQtXFx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYikge1xcbjEzOTE6XFx0XFx0XFx0XFx0XFx0dHhfc2xhdmUgPSB0bGJfY2hvb3NlX2NoYW5uZWwoYm9uZCxcXG4xMzkyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGhhc2hfaW5kZXggXFx1MDAyNiAweEZGLFxcbjEzOTM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiLVxcdTAwM2VsZW4pO1xcbjEzOTQ6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4xMzk1OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBib25kX3VwX3NsYXZlICpzbGF2ZXM7XFxuMTM5NjpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY291bnQ7XFxuMTM5NzpcXHRcXG4xMzk4OlxcdFxcdFxcdFxcdFxcdHNsYXZlcyA9IHJjdV9kZXJlZmVyZW5jZShib25kLVxcdTAwM2V1c2FibGVfc2xhdmVzKTtcXG4xMzk5OlxcdFxcdFxcdFxcdFxcdGNvdW50ID0gc2xhdmVzID8gUkVBRF9PTkNFKHNsYXZlcy1cXHUwMDNlY291bnQpIDogMDtcXG4xNDAwOlxcdFxcdFxcdFxcdFxcdGlmIChsaWtlbHkoY291bnQpKVxcbjE0MDE6XFx0XFx0XFx0XFx0XFx0XFx0dHhfc2xhdmUgPSBzbGF2ZXMtXFx1MDAzZWFycltoYXNoX2luZGV4ICVcXG4xNDAyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjb3VudF07XFxuMTQwMzpcXHRcXHRcXHRcXHR9XFxuMTQwNDpcXHRcXHRcXHRcXHRicmVhaztcXG4xNDA1OlxcdFxcdFxcdH1cXG4xNDA2OlxcdFxcdH1cXG4xNDA3OlxcdFxcdHJldHVybiB0eF9zbGF2ZTtcXG4xNDA4OlxcdH1cXG4xNDA5OlxcdFxcbjE0MTA6XFx0bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuMTQxMTpcXHR7XFxuMTQxMjpcXHRcXHRzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGJvbmRfZGV2KTtcXG4xNDEzOlxcdFxcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmU7XFxuMTQxNDpcXHRcXG4xNDE1OlxcdFxcdHR4X3NsYXZlID0gYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcXG4xNDE2OlxcdFxcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xcbjE0MTc6XFx0fVxcbjE0MTg6XFx0XFxuMTQxOTpcXHRzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbjE0MjA6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xNDIxOlxcdHtcXG4xNDIyOlxcdFxcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xcbjE0MjM6XFx0XFx0c3RhdGljIGNvbnN0IF9fYmUzMiBpcF9iY2FzdCA9IGh0b25sKDB4ZmZmZmZmZmYpO1xcbjE0MjQ6XFx0XFx0c3RydWN0IHNsYXZlICp0eF9zbGF2ZSA9IE5VTEw7XFxuMTQyNTpcXHRcXHRjb25zdCB1OCAqaGFzaF9zdGFydCA9IE5VTEw7XFxuMTQyNjpcXHRcXHRib29sIGRvX3R4X2JhbGFuY2UgPSB0cnVlO1xcbjE0Mjc6XFx0XFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XFxuMTQyODpcXHRcXHR1MzIgaGFzaF9pbmRleCA9IDA7XFxuMTQyOTpcXHRcXHRpbnQgaGFzaF9zaXplID0gMDtcXG4xNDMwOlxcdFxcbjE0MzE6XFx0XFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4xNDMyOlxcdFxcdGV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xcbjE0MzM6XFx0XFxuMTQzNDpcXHRcXHRzd2l0Y2ggKG50b2hzKHNrYi1cXHUwMDNlcHJvdG9jb2wpKSB7XFxuMTQzNTpcXHRcXHRjYXNlIEVUSF9QX0lQOiB7XFxuMTQzNjpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDtcXG4xNDM3OlxcdFxcbjE0Mzg6XFx0XFx0XFx0aWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLVxcdTAwM2VoX2Rlc3QpIHx8XFxuMTQzOTpcXHRcXHRcXHQgICAgIXBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSkpIHtcXG4xNDQwOlxcdFxcdFxcdFxcdGRvX3R4X2JhbGFuY2UgPSBmYWxzZTtcXG4xNDQxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE0NDI6XFx0XFx0XFx0fVxcbjE0NDM6XFx0XFx0XFx0aXBoID0gaXBfaGRyKHNrYik7XFxuMTQ0NDpcXHRcXHRcXHRpZiAoaXBoLVxcdTAwM2VkYWRkciA9PSBpcF9iY2FzdCB8fCBpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fSUdNUCkge1xcbjE0NDU6XFx0XFx0XFx0XFx0ZG9fdHhfYmFsYW5jZSA9IGZhbHNlO1xcbjE0NDY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTQ0NzpcXHRcXHRcXHR9XFxuMTQ0ODpcXHRcXHRcXHRoYXNoX3N0YXJ0ID0gKGNoYXIgKilcXHUwMDI2KGlwaC1cXHUwMDNlZGFkZHIpO1xcbjE0NDk6XFx0XFx0XFx0aGFzaF9zaXplID0gc2l6ZW9mKGlwaC1cXHUwMDNlZGFkZHIpO1xcbjE0NTA6XFx0XFx0XFx0YnJlYWs7XFxuMTQ1MTpcXHRcXHR9XFxuMTQ1MjpcXHRcXHRjYXNlIEVUSF9QX0lQVjY6IHtcXG4xNDUzOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoZHI7XFxuMTQ1NDpcXHRcXG4xNDU1OlxcdFxcdFxcdC8qIElQdjYgZG9lc24ndCByZWFsbHkgdXNlIGJyb2FkY2FzdCBtYWMgYWRkcmVzcywgYnV0IGxlYXZlXFxuMTQ1NjpcXHRcXHRcXHQgKiB0aGF0IGhlcmUganVzdCBpbiBjYXNlLlxcbjE0NTc6XFx0XFx0XFx0ICovXFxuMTQ1ODpcXHRcXHRcXHRpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoZXRoX2RhdGEtXFx1MDAzZWhfZGVzdCkpIHtcXG4xNDU5OlxcdFxcdFxcdFxcdGRvX3R4X2JhbGFuY2UgPSBmYWxzZTtcXG4xNDYwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE0NjE6XFx0XFx0XFx0fVxcbjE0NjI6XFx0XFxuMTQ2MzpcXHRcXHRcXHQvKiBJUHY2IHVzZXMgYWxsLW5vZGVzIG11bHRpY2FzdCBhcyBhbiBlcXVpdmFsZW50IHRvXFxuMTQ2NDpcXHRcXHRcXHQgKiBicm9hZGNhc3RzIGluIElQdjQuXFxuMTQ2NTpcXHRcXHRcXHQgKi9cXG4xNDY2OlxcdFxcdFxcdGlmIChldGhlcl9hZGRyX2VxdWFsXzY0Yml0cyhldGhfZGF0YS1cXHUwMDNlaF9kZXN0LCBtYWNfdjZfYWxsbWNhc3QpKSB7XFxuMTQ2NzpcXHRcXHRcXHRcXHRkb190eF9iYWxhbmNlID0gZmFsc2U7XFxuMTQ2ODpcXHRcXHRcXHRcXHRicmVhaztcXG4xNDY5OlxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDM6MTM6MTYuNDQ0OTYxNzI3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTEwNzcxOTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5ldyBDb25jZXJucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gYW5hbHl6aW5nIHRoZSBwYXRjaCB0byBgYWxiX2RldGVybWluZV9uZGAsIG15IHByaW1hcnkgY29uY2VybiBpcyBhbHdheXMgYXJvdW5kIG1lbW9yeSBzYWZldHkgYW5kIGluZm9ybWF0aW9uIGxlYWtzLiBUaGUgZnVuY3Rpb24gaXMgaGFuZGxpbmcgSVB2NiBOZWlnaGJvciBEaXNjb3ZlcnkgcGFja2V0cywgc28gdGhlIGludGVncml0eSBvZiB0aGUgcGFja2V0IHBhcnNpbmcgaXMgY3JpdGljYWwuXG5cblRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIHBvdGVudGlhbCBpc3N1ZTogaXQgd2FzIHVzaW5nIGBpY21wNl9oZHIoc2tiKWAgd2hpY2ggdXNlcyBgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKWAuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGlzbid0IG5lY2Vzc2FyaWx5IHZhbGlkIGR1cmluZyB0aGUgdHJhbnNtaXQgcGF0aC4gVGhpcyBwYXRjaCBjbGV2ZXJseSBjaXJjdW12ZW50cyB0aGF0IGJ5IGNhbGN1bGF0aW5nIHRoZSBoZWFkZXIncyBsb2NhdGlvbiBkaXJlY3RseSBmcm9tIHRoZSBJUHY2IGhlYWRlciAoYChjb25zdCBzdHJ1Y3QgaWNtcDZoZHIgKikoaXA2aGRyICsgMSlgKS4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgZml4IHRvIGEgcG90ZW50aWFsIGJ1Zy5cblxuVGhlIHJlYWxseSBnb29kIHBhcnQgaXMgdGhhdCBhbGwgdGhlIGNydWNpYWwgbWVtb3J5IGFjY2Vzc2VzIGZyb20gdGhlIGBza2JgIGFyZSBwcm90ZWN0ZWQgd2l0aCBgcHNrYl9uZXR3b3JrX21heV9wdWxsKClgLiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBJIGxpa2UgdG8gc2VlIOKAkyBleHBsaWNpdCBib3VuZHMgY2hlY2tzIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlIHJlYXNvbmluZyBjbGFpbXMgdGhpcyBhbHNvIHZhbGlkYXRlcyB0aGUgc2tiIGRhdGEuXG5cbkkndmUgY2hlY2tlZCB0aGUgcGF0Y2gsIGFuZCBpdCBhZGRyZXNzZXMgdGhlIG9yaWdpbmFsIGlzc3VlLCBhbmQgaXQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgY29weSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2UsIG9yIHVzZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBvciBhbnkgb3RoZXIgdW5pbml0aWFsaXplZCBmaWVsZHMuIFRoZXJlJ3Mgbm8gaGludCBvZiBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha2FnZSB0aGF0IEkgY2FuIHNlZS4gS0FTQU4gc2hvdWxkIGhhbmRsZSBhbnkgYmFzaWMgbWVtb3J5IGVycm9ycyBzdWNoIGFzIGFuIG91dCBvZiBib3VuZHMgcmVhZCwgZHVlIHRvIHRoZSBwcmVzZW5jZSBvZiBgcHNrYl9uZXR3b3JrX21heV9wdWxsKClgLlxuXG5HaXZlbiB0aGF0IHRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBidWcsIHVzZXMgc2FmZSBtZW1vcnkgYWNjZXNzIGFuZCBhdm9pZHMgaW50cm9kdWNpbmcgbmV3IGFyZWFzIG9mIGNvbmNlcm4sIEknbSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgS01TQU4gZnV6emluZyBpc24ndCBuZWNlc3NhcnkuIExldCdzIG1hcmsgdGhpcyBhcyBhIG5vLW9wIGZyb20gYSBLTVNBTiBwZXJzcGVjdGl2ZS5cblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjUyLCJPdXRwdXRUb2tlbnMiOjIyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjEzOjQxLjM1NTczNzI0MloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGFsYl9kZXRlcm1pbmVfbmQoKWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY2AgdG8gY29tcHV0ZSB0aGUgSUNNUHY2IGhlYWRlciBsb2NhdGlvbiBkaXJlY3RseSBmb2xsb3dpbmcgdGhlIElQdjYgaGVhZGVyIChgKGNvbnN0IHN0cnVjdCBpY21wNmhkciAqKShpcDZoZHIgKyAxKWApIGluc3RlYWQgb2YgaW52b2tpbmcgYGljbXA2X2hkcihza2IpYCAod2hpY2ggcmVsaWVzIG9uIGBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpYCBiZWluZyBpbml0aWFsaXplZCkuIEl0IGFsc28gZHJvcHMgYW4gdW51c2VkIGBib25kYCBwYXJhbWV0ZXIuXFxuXFxuVGhlIHBhY2tldCBwYXlsb2FkIGJ5dGVzIHJlYWQgYnkgdGhpcyBmdW5jdGlvbiBhcmUgdmVyaWZpZWQgdG8gZXhpc3QgaW4gdGhlIGxpbmVhciBidWZmZXIgdXNpbmcgYHBza2JfbmV0d29ya19tYXlfcHVsbCgpYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbnkgcG90ZW50aWFsIGJ1ZmZlciBib3VuZHMgb3Igc2tiIGRlcmVmZXJlbmNlIGlzc3VlcyBpbiB0aGlzIHBhdGggYXJlIGNvdmVyZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBhbGJfZGV0ZXJtaW5lX25kKClgIGluIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgIHRvIGNvbXB1dGUgdGhlIElDTVB2NiBoZWFkZXIgbG9jYXRpb24gZGlyZWN0bHkgZm9sbG93aW5nIHRoZSBJUHY2IGhlYWRlciAoYChjb25zdCBzdHJ1Y3QgaWNtcDZoZHIgKikoaXA2aGRyICsgMSlgKSBpbnN0ZWFkIG9mIGludm9raW5nIGBpY21wNl9oZHIoc2tiKWAgKHdoaWNoIHJlbGllcyBvbiBgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKWAgYmVpbmcgaW5pdGlhbGl6ZWQpLiBJdCBhbHNvIGRyb3BzIGFuIHVudXNlZCBgYm9uZGAgcGFyYW1ldGVyLlxcblxcblRoZSBwYWNrZXQgcGF5bG9hZCBieXRlcyByZWFkIGJ5IHRoaXMgZnVuY3Rpb24gYXJlIHZlcmlmaWVkIHRvIGV4aXN0IGluIHRoZSBsaW5lYXIgYnVmZmVyIHVzaW5nIGBwc2tiX25ldHdvcmtfbWF5X3B1bGwoKWAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGRvZXMgbm90IGNvcHkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGZpZWxkcy4gQW55IHBvdGVudGlhbCBidWZmZXIgYm91bmRzIG9yIHNrYiBkZXJlZmVyZW5jZSBpc3N1ZXMgaW4gdGhpcyBwYXRoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2794c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-01 02:54:10 +0000 UTC FinishedAt: 2026-09-01 03:13:43 +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": "7b120a771943ffc3cbce787daecdd23eccb0505f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING", "INET", "IPV6", "NET_CORE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7b120a771943ffc3cbce787daecdd23eccb0505f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING", "INET", "IPV6", "NET_CORE" ], "series_id": "dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "bond_xmit_alb_slave_get", "bond_xmit_tlb_slave_get", "bond_alb_xmit", "bond_tlb_xmit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O05FVF9DT1JFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Ym9uZF94bWl0X2FsYl9zbGF2ZV9nZXQmIzM0OywKICAgICYjMzQ7Ym9uZF94bWl0X3RsYl9zbGF2ZV9nZXQmIzM0OywKICAgICYjMzQ7Ym9uZF9hbGJfeG1pdCYjMzQ7LAogICAgJiMzNDtib25kX3RsYl94bWl0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGFsYl9kZXRlcm1pbmVfbmQoKWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY2AgdG8gY29tcHV0ZSB0aGUgSUNNUHY2IGhlYWRlciBsb2NhdGlvbiBkaXJlY3RseSBmb2xsb3dpbmcgdGhlIElQdjYgaGVhZGVyIChgKGNvbnN0IHN0cnVjdCBpY21wNmhkciAqKShpcDZoZHIgJiM0MzsgMSlgKSBpbnN0ZWFkIG9mIGludm9raW5nIGBpY21wNl9oZHIoc2tiKWAgKHdoaWNoIHJlbGllcyBvbiBgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKWAgYmVpbmcgaW5pdGlhbGl6ZWQpLiBJdCBhbHNvIGRyb3BzIGFuIHVudXNlZCBgYm9uZGAgcGFyYW1ldGVyLlxuXG5UaGUgcGFja2V0IHBheWxvYWQgYnl0ZXMgcmVhZCBieSB0aGlzIGZ1bmN0aW9uIGFyZSB2ZXJpZmllZCB0byBleGlzdCBpbiB0aGUgbGluZWFyIGJ1ZmZlciB1c2luZyBgcHNrYl9uZXR3b3JrX21heV9wdWxsKClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIEFueSBwb3RlbnRpYWwgYnVmZmVyIGJvdW5kcyBvciBza2IgZGVyZWZlcmVuY2UgaXNzdWVzIGluIHRoaXMgcGF0aCBhcmUgY292ZXJlZCBieSBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHBhY2tldCBoZWFkZXIgcGFyc2luZyBmb3IgSVB2NiBOZWlnaGJvciBEaXNjb3ZlcnkgKE5EKSBwYWNrZXRzIGR1cmluZyB0cmFuc21pdCBsb2FkIGJhbGFuY2luZyBpbiBib25kaW5nIEFMQiBhbmQgVExCIG1vZGVzIChhbGJfZGV0ZXJtaW5lX25kKS4gUHJldmlvdXNseSwgaXQgdXNlZCBpY21wNl9oZHIoc2tiKSAod2hpY2ggcmVsaWVzIG9uIHNrYl90cmFuc3BvcnRfaGVhZGVyLCBub3QgbmVjZXNzYXJpbHkgc2V0IG9uIHRoZSBUWCBwYXRoKSBhbmQgZGlkbiYjMzk7dCByZWxvYWQgdGhlIElQdjYgaGVhZGVyIHBvaW50ZXIgYWZ0ZXIgcHNrYl9uZXR3b3JrX21heV9wdWxsIHJlYWxsb2NhdGlvbnMuIFRoaXMgZnVuY3Rpb25hbCBmaXggYWZmZWN0cyBwYWNrZXQgdHJhbnNtaXNzaW9uIG92ZXIgYm9uZGluZyB2aXJ0dWFsIGludGVyZmFjZXMgYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDM6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkZDhkNjI1ODgzYzczZTNhMDgxMDJkODEzOTQxNjI1YWIyZjE4OWI0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAwMzoxMTozMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbmluZGV4IDgzOWY3NDgyZGMxODIuLjUwNzNhZWViYTZjOTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xuQEAgLTEyODEsMTAgJiM0MzsxMjgxLDEwIEBAIHN0YXRpYyBpbnQgYWxiX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdm9pZCAqYWRkcilcbiB9XG4gXG4gLyogZGV0ZXJtaW5lIGlmIHRoZSBwYWNrZXQgaXMgTkEgb3IgTlMgKi9cbi1zdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKVxuJiM0MztzdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IGlwdjZoZHIgKmlwNmhkcjtcbi1cdHN0cnVjdCBpY21wNmhkciAqaGRyO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoZHI7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGljbXA2aGRyICpoZHI7XG4gXG4gXHRpZiAoIXBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZigqaXA2aGRyKSkpXG4gXHRcdHJldHVybiB0cnVlO1xuQEAgLTEyOTYsNyAmIzQzOzEyOTYsOCBAQCBzdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKVxuIFx0aWYgKCFwc2tiX25ldHdvcmtfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwNmhkcikgJiM0Mzsgc2l6ZW9mKCpoZHIpKSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRoZHIgPSBpY21wNl9oZHIoc2tiKTtcbiYjNDM7XHRpcDZoZHIgPSBpcHY2X2hkcihza2IpO1xuJiM0MztcdGhkciA9IChjb25zdCBzdHJ1Y3QgaWNtcDZoZHIgKikoaXA2aGRyICYjNDM7IDEpO1xuIFx0cmV0dXJuIGhkci1cdTAwM2VpY21wNl90eXBlID09IE5ESVNDX05FSUdIQk9VUl9BRFZFUlRJU0VNRU5UIHx8XG4gXHRcdGhkci1cdTAwM2VpY21wNl90eXBlID09IE5ESVNDX05FSUdIQk9VUl9TT0xJQ0lUQVRJT047XG4gfVxuQEAgLTEzODEsNyAmIzQzOzEzODIsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuIFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cdTAwM2VoX2Rlc3QpKSB7XG4gXHRcdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG4gXHRcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4tXHRcdFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiLCBib25kKSlcbiYjNDM7XHRcdFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiKSlcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGZhbGx0aHJvdWdoO1xuIFx0XHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbkBAIC0xNDY3LDcgJiM0MzsxNDY4LDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuLVx0XHRpZiAoYWxiX2RldGVybWluZV9uZChza2IsIGJvbmQpKSB7XG4mIzQzO1x0XHRpZiAoYWxiX2RldGVybWluZV9uZChza2IpKSB7XG4gXHRcdFx0ZG9fdHhfYmFsYW5jZSA9IGZhbHNlO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDM6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Qk9ORElORyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7TkVUX0NPUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtib25kX3htaXRfYWxiX3NsYXZlX2dldCYjMzQ7LAogICAgJiMzNDtib25kX3htaXRfdGxiX3NsYXZlX2dldCYjMzQ7LAogICAgJiMzNDtib25kX2FsYl94bWl0JiMzNDssCiAgICAmIzM0O2JvbmRfdGxiX3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcGFja2V0IGhlYWRlciBwYXJzaW5nIGZvciBJUHY2IE5laWdoYm9yIERpc2NvdmVyeSAoTkQpIHBhY2tldHMgZHVyaW5nIHRyYW5zbWl0IGxvYWQgYmFsYW5jaW5nIGluIGJvbmRpbmcgQUxCIGFuZCBUTEIgbW9kZXMgKGFsYl9kZXRlcm1pbmVfbmQpLiBQcmV2aW91c2x5LCBpdCB1c2VkIGljbXA2X2hkcihza2IpICh3aGljaCByZWxpZXMgb24gc2tiX3RyYW5zcG9ydF9oZWFkZXIsIG5vdCBuZWNlc3NhcmlseSBzZXQgb24gdGhlIFRYIHBhdGgpIGFuZCBkaWRuJiMzOTt0IHJlbG9hZCB0aGUgSVB2NiBoZWFkZXIgcG9pbnRlciBhZnRlciBwc2tiX25ldHdvcmtfbWF5X3B1bGwgcmVhbGxvY2F0aW9ucy4gVGhpcyBmdW5jdGlvbmFsIGZpeCBhZmZlY3RzIHBhY2tldCB0cmFuc21pc3Npb24gb3ZlciBib25kaW5nIHZpcnR1YWwgaW50ZXJmYWNlcyBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRkOGQ2MjU4ODNjNzNlM2EwODEwMmQ4MTM5NDE2MjVhYjJmMTg5YjQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDAzOjExOjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCmluZGV4IDgzOWY3NDgyZGMxODIuLjUwNzNhZWViYTZjOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKQEAgLTEyODEsMTAgJiM0MzsxMjgxLDEwIEBAIHN0YXRpYyBpbnQgYWxiX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdm9pZCAqYWRkcikKIH0KIAogLyogZGV0ZXJtaW5lIGlmIHRoZSBwYWNrZXQgaXMgTkEgb3IgTlMgKi8KLXN0YXRpYyBib29sIGFsYl9kZXRlcm1pbmVfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQpCiYjNDM7c3RhdGljIGJvb2wgYWxiX2RldGVybWluZV9uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBpcHY2aGRyICppcDZoZHI7Ci0Jc3RydWN0IGljbXA2aGRyICpoZHI7CiYjNDM7CWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoZHI7CiYjNDM7CWNvbnN0IHN0cnVjdCBpY21wNmhkciAqaGRyOwogCiAJaWYgKCFwc2tiX25ldHdvcmtfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwNmhkcikpKQogCQlyZXR1cm4gdHJ1ZTsKQEAgLTEyOTYsNyAmIzQzOzEyOTYsOCBAQCBzdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKQogCWlmICghcHNrYl9uZXR3b3JrX21heV9wdWxsKHNrYiwgc2l6ZW9mKCppcDZoZHIpICYjNDM7IHNpemVvZigqaGRyKSkpCiAJCXJldHVybiB0cnVlOwogCi0JaGRyID0gaWNtcDZfaGRyKHNrYik7CiYjNDM7CWlwNmhkciA9IGlwdjZfaGRyKHNrYik7CiYjNDM7CWhkciA9IChjb25zdCBzdHJ1Y3QgaWNtcDZoZHIgKikoaXA2aGRyICYjNDM7IDEpOwogCXJldHVybiBoZHItJmd0O2ljbXA2X3R5cGUgPT0gTkRJU0NfTkVJR0hCT1VSX0FEVkVSVElTRU1FTlQgfHwKIAkJaGRyLSZndDtpY21wNl90eXBlID09IE5ESVNDX05FSUdIQk9VUl9TT0xJQ0lUQVRJT047CiB9CkBAIC0xMzgxLDcgJiM0MzsxMzgyLDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwKIAlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLSZndDtoX2Rlc3QpKSB7CiAJCXN3aXRjaCAoc2tiLSZndDtwcm90b2NvbCkgewogCQljYXNlIGh0b25zKEVUSF9QX0lQVjYpOgotCQkJaWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiLCBib25kKSkKJiM0MzsJCQlpZiAoYWxiX2RldGVybWluZV9uZChza2IpKQogCQkJCWJyZWFrOwogCQkJZmFsbHRocm91Z2g7CiAJCWNhc2UgaHRvbnMoRVRIX1BfSVApOgpAQCAtMTQ2Nyw3ICYjNDM7MTQ2OCw3IEBAIHN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsCiAJCQlicmVhazsKIAkJfQogCi0JCWlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYiwgYm9uZCkpIHsKJiM0MzsJCWlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYikpIHsKIAkJCWRvX3R4X2JhbGFuY2UgPSBmYWxzZTsKIAkJCWJyZWFrOwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NDMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA4MTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgYm9uZF9hbGIuY2AgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgcGF0Y2ggaXMgdGFyZ2V0aW5nIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgLCB3aGljaCBpbW1lZGlhdGVseSBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIEFjdGl2ZS1CYWNrdXAgKEFMQikgYm9uZGluZywgc3BlY2lmaWNhbGx5IHRoZSBsb2dpYyBmb3IgZGV0ZXJtaW5pbmcgTmVpZ2hib3IgRGlzY292ZXJ5IHBhY2tldHMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgYW5kIHN5bWJvbHMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCwgYnV0IGxldCYjMzk7cyByZWFkIHRoZSBwYXRjaCBmaXJzdCB0byBnZXQgYSBncmFzcCBvZiB0aGUgaW50ZW50LgoKQWxyaWdodCwgdGhlIHByaW1hcnkgbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiB0aGUgYGFsYl9kZXRlcm1pbmVfbmRgIGZ1bmN0aW9uLiBMb29raW5nIGF0IHRoZSBkaWZmLCBJIHNlZSB0aGUgY29yZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGhvdyB0aGUgYGljbXA2aGRyYCBpcyBhY2Nlc3NlZCBhZnRlciBhIHBvdGVudGlhbCBgcHNrYl9uZXR3b3JrX21heV9wdWxsYCBjYWxsLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgYmVjYXVzZSBjYWxsaW5nIGBwc2tiX25ldHdvcmtfbWF5X3B1bGxgIG1pZ2h0IHJlYWxsb2NhdGUgdGhlIGBza2ItJmd0O2hlYWRgLCBpbnZhbGlkYXRpbmcgdGhlIHBvaW50ZXJzIGBpcDZoZHJgIGFuZCB0aGUgcmVzdWx0IG9mIHRoZSBgaWNtcDZfaGRyKHNrYilgIG1hY3JvLiBUaGUgbWFjcm8gdXNlcyBgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKWAsIGJ1dCBpZiBgcHNrYl9uZXR3b3JrX21heV9wdWxsYCBoYXMgcmVhbGxvY2F0ZWQgdGhlIGhlYWRlcnMgdGhlbiB0aGUgdHJhbnNwb3J0IGhlYWRlciBtaWdodCBub3QgYmUgcHJvcGVybHkgc2V0LCBhbmQgdGhlIGBpY21wNl9oZHIoc2tiKWAgbWF5IGJlIHJlZmVyZW5jaW5nIGluY29ycmVjdCBtZW1vcnkuCgpFc3NlbnRpYWxseSwgdGhlIGZpeCBhdm9pZHMgdGhlIHBvdGVudGlhbCBkb3VibGUgZGVyZWZlcmVuY2Ugb2YgYGlwNmhkcmAgYW5kIG5vdyBjb3JyZWN0bHkgZGVyaXZlcyBgaGRyYCBmcm9tIHRoZSBwb3N0LWBwc2tiX25ldHdvcmtfbWF5X3B1bGxgIGxvY2F0aW9uIG9mIGBpcDZoZHJgLiBFeGNlbGxlbnQsIHRoaXMgaXMgYSBjbGVhbiBhbmQgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgYSBzdWJ0bGUgbWVtb3J5IHNhZmV0eSBpc3N1ZS4KCk5vdywgbGV0IG1lIGp1c3QgY3Jvc3MtcmVmZXJlbmNlIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBib25kX2FsYi5jYCB0byBjb25maXJtIHRoZSBmaXggaXMgbG9jYWxpemVkLCBhbmQgbWFrZSBzdXJlIHRoYXQgaXQmIzM5O3MgaW4gdGhlIHJpZ2h0IHNwb3QsIGFuZCBub3QgaW5kaWNhdGluZyBhbiBpc3N1ZSBlbHNld2hlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDM6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjc1Olx0XHRcdFx0XHQgIHJvbGxiYWNrX3NsYXZlLVx1MDAzZWRldi1cdTAwM2VhZGRyX2xlbik7XG4xMjc2Olx0XHRcdGRldl9zZXRfbWFjX2FkZHJlc3Mocm9sbGJhY2tfc2xhdmUtXHUwMDNlZGV2LCBcdTAwMjZzcywgTlVMTCk7XG4xMjc3Olx0XHRcdGRldl9hZGRyX3NldChyb2xsYmFja19zbGF2ZS1cdTAwM2VkZXYsIHRtcF9hZGRyKTtcbjEyNzg6XHRcdH1cbjEyNzk6XHRcbjEyODA6XHRcdHJldHVybiByZXM7XG4xMjgxOlx0fVxuMTI4MjpcdFxuMTI4MzpcdC8qIGRldGVybWluZSBpZiB0aGUgcGFja2V0IGlzIE5BIG9yIE5TICovXG4xMjg0Olx0c3RhdGljIGJvb2wgYWxiX2RldGVybWluZV9uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTI4NTpcdHtcbjEyODY6XHRcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoZHI7XG4xMjg3Olx0XHRjb25zdCBzdHJ1Y3QgaWNtcDZoZHIgKmhkcjtcbjEyODg6XHRcbjEyODk6XHRcdGlmICghcHNrYl9uZXR3b3JrX21heV9wdWxsKHNrYiwgc2l6ZW9mKCppcDZoZHIpKSlcbjEyOTA6XHRcdFx0cmV0dXJuIHRydWU7XG4xMjkxOlx0XG4xMjkyOlx0XHRpcDZoZHIgPSBpcHY2X2hkcihza2IpO1xuMTI5MzpcdFx0aWYgKGlwNmhkci1cdTAwM2VuZXh0aGRyICE9IElQUFJPVE9fSUNNUFY2KVxuMTI5NDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMjk1Olx0XG4xMjk2Olx0XHRpZiAoIXBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZigqaXA2aGRyKSAmIzQzOyBzaXplb2YoKmhkcikpKVxuMTI5NzpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjEyOTg6XHRcbjEyOTk6XHRcdGlwNmhkciA9IGlwdjZfaGRyKHNrYik7XG4xMzAwOlx0XHRoZHIgPSAoY29uc3Qgc3RydWN0IGljbXA2aGRyICopKGlwNmhkciAmIzQzOyAxKTtcbjEzMDE6XHRcdHJldHVybiBoZHItXHUwMDNlaWNtcDZfdHlwZSA9PSBORElTQ19ORUlHSEJPVVJfQURWRVJUSVNFTUVOVCB8fFxuMTMwMjpcdFx0XHRoZHItXHUwMDNlaWNtcDZfdHlwZSA9PSBORElTQ19ORUlHSEJPVVJfU09MSUNJVEFUSU9OO1xuMTMwMzpcdH1cbjEzMDQ6XHRcbjEzMDU6XHQvKioqKioqKioqKioqKioqKioqKioqKioqIGV4cG9ydGVkIGFsYiBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqL1xuMTMwNjpcdFxuMTMwNzpcdGludCBib25kX2FsYl9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kLCBpbnQgcmxiX2VuYWJsZWQpXG4xMzA4Olx0e1xuMTMwOTpcdFx0aW50IHJlcztcbjEzMTA6XHRcbjEzMTE6XHRcdHJlcyA9IHRsYl9pbml0aWFsaXplKGJvbmQpO1xuMTMxMjpcdFx0aWYgKHJlcylcbjEzMTM6XHRcdFx0cmV0dXJuIHJlcztcbjEzMTQ6XHRcbjEzMTU6XHRcdGlmIChybGJfZW5hYmxlZCkge1xuMTMxNjpcdFx0XHRyZXMgPSBybGJfaW5pdGlhbGl6ZShib25kKTtcbjEzMTc6XHRcdFx0aWYgKHJlcykge1xuMTMxODpcdFx0XHRcdHRsYl9kZWluaXRpYWxpemUoYm9uZCk7XG4xMzE5Olx0XHRcdFx0cmV0dXJuIHJlcztcbjEzMjA6XHRcdFx0fVxuMTMyMTpcdFx0XHRib25kLVx1MDAzZWFsYl9pbmZvLnJsYl9lbmFibGVkID0gMTtcbjEzMjI6XHRcdH0gZWxzZSB7XG4xMzIzOlx0XHRcdGJvbmQtXHUwMDNlYWxiX2luZm8ucmxiX2VuYWJsZWQgPSAwO1xuMTMyNDpcdFx0fVxuMTMyNTpcdFxuMTMyNjpcdFx0cmV0dXJuIDA7XG4xMzI3Olx0fVxuMTMyODpcdFxuMTMyOTpcdHZvaWQgYm9uZF9hbGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKVxuMTMzMDpcdHtcbjEzMzE6XHRcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcdTAwMjYoQk9ORF9BTEJfSU5GTyhib25kKSk7XG4xMzMyOlx0XG4xMzMzOlx0XHR0bGJfZGVpbml0aWFsaXplKGJvbmQpO1xuMTMzNDpcdFxuMTMzNTpcdFx0aWYgKGJvbmRfaW5mby1cdTAwM2VybGJfZW5hYmxlZClcbjEzMzY6XHRcdFx0cmxiX2RlaW5pdGlhbGl6ZShib25kKTtcbjEzMzc6XHR9XG4xMzM4Olx0XG4xMzM5Olx0c3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4xMzQwOlx0XHRcdFx0XHQgICAgc3RydWN0IHNsYXZlICp0eF9zbGF2ZSlcbjEzNDE6XHR7XG4xMzQyOlx0XHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xuMTM0MzpcdFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7XG4xMzQ0Olx0XG4xMzQ1Olx0XHRpZiAoIXR4X3NsYXZlKSB7XG4xMzQ2Olx0XHRcdC8qIHVuYmFsYW5jZWQgb3IgdW5hc3NpZ25lZCwgc2VuZCB0aHJvdWdoIHByaW1hcnkgKi9cbjEzNDc6XHRcdFx0dHhfc2xhdmUgPSByY3VfZGVyZWZlcmVuY2UoYm9uZC1cdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSk7XG4xMzQ4Olx0XHRcdGlmIChib25kLVx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYilcbjEzNDk6XHRcdFx0XHRib25kX2luZm8tXHUwMDNldW5iYWxhbmNlZF9sb2FkICYjNDM7PSBza2ItXHUwMDNlbGVuO1xuMTM1MDpcdFx0fVxuMTM1MTpcdFxuMTM1MjpcdFx0aWYgKHR4X3NsYXZlIFx1MDAyNlx1MDAyNiBib25kX3NsYXZlX2Nhbl90eCh0eF9zbGF2ZSkpIHtcbjEzNTM6XHRcdFx0aWYgKHR4X3NsYXZlICE9IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLVx1MDAzZWN1cnJfYWN0aXZlX3NsYXZlKSkge1xuMTM1NDpcdFx0XHRcdGV0aGVyX2FkZHJfY29weShldGhfZGF0YS1cdTAwM2VoX3NvdXJjZSxcbjEzNTU6XHRcdFx0XHRcdFx0dHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKTtcbjEzNTY6XHRcdFx0fVxuMTM1NzpcdFxuMTM1ODpcdFx0XHRyZXR1cm4gYm9uZF9kZXZfcXVldWVfeG1pdChib25kLCBza2IsIHR4X3NsYXZlLVx1MDAzZWRldik7XG4xMzU5Olx0XHR9XG4xMzYwOlx0XG4xMzYxOlx0XHRpZiAodHhfc2xhdmUgXHUwMDI2XHUwMDI2IGJvbmQtXHUwMDNlcGFyYW1zLnRsYl9keW5hbWljX2xiKSB7XG4xMzYyOlx0XHRcdHNwaW5fbG9jayhcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4xMzYzOlx0XHRcdF9fdGxiX2NsZWFyX3NsYXZlKGJvbmQsIHR4X3NsYXZlLCAwKTtcbjEzNjQ6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2Ym9uZC1cdTAwM2Vtb2RlX2xvY2spO1xuMTM2NTpcdFx0fVxuMTM2NjpcdFxuMTM2NzpcdFx0Lyogbm8gc3VpdGFibGUgaW50ZXJmYWNlLCBmcmFtZSBub3Qgc2VudCAqL1xuMTM2ODpcdFx0cmV0dXJuIGJvbmRfdHhfZHJvcChib25kLVx1MDAzZWRldiwgc2tiKTtcbjEzNjk6XHR9XG4xMzcwOlx0XG4xMzcxOlx0c3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbjEzNzI6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4xMzczOlx0e1xuMTM3NDpcdFx0c3RydWN0IHNsYXZlICp0eF9zbGF2ZSA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI1OAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqRGVlcGVyIERpdmUgaW50byBCb25kZWQgVHJhbnNtaXNzaW9uIGFuZCBUTEIvQUxCIFNsYXZlIFJldHJpZXZhbCoqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIGhvdyB0aGVzZSB0cmFuc21pc3Npb24gZnVuY3Rpb25zIChgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgIGFuZCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgKSBhbmQgdGhlIHdheSB0aGV5JiMzOTtyZSB1c2VkLiBJJiMzOTt2ZSBnb3QgYSBwcmV0dHkgc29saWQgZ3Jhc3Agb24gdGhlc2UgdG9waWNzIGluIGdlbmVyYWwsIGJ1dCBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdWJ0bGUgaW50ZXJhY3Rpb25zIG9yIGVkZ2UgY2FzZXMgSSYjMzk7bSBtaXNzaW5nIHJlbGF0ZWQgdG8gdGhlIGltcGxlbWVudGF0aW9uLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBtZXRob2RpY2FsbHkgdHJhY2UgYWxsIG9mIHRoZSBjYWxsZXJzIG9mIHRoZXNlIG1ldGhvZHMgdG8gZW5zdXJlIEkgYWNjb3VudCBmb3IgYWxsIGNvZGUgcGF0aHMuIFRoZSBmdW5jdGlvbnMgdGhlbXNlbHZlcyBzZWVtIGZpbmUsIGJ1dCBJJiMzOTt2ZSBsZWFybmVkIHRoYXQgYSBnb29kIGVuZ2luZWVyIG5lZWRzIHRvIGZvY3VzIG9uIHVzZSBjYXNlcyBqdXN0IGFzIGNhcmVmdWxseSBhcyB0aGUgaW1wbGVtZW50YXRpb25zLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aG9zZSBmdW5jdGlvbnMgYW5kIHRoZWlyIGNhbGxlcnMsIGFuZCB0aG9yb3VnaGx5IHJldmlldyB0aGUgcmVsYXRlZCBtb2R1bGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM3MDpcdFxuMTM3MTpcdHN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4xMzcyOlx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTM3MzpcdHtcbjEzNzQ6XHRcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUgPSBOVUxMO1xuMTM3NTpcdFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XG4xMzc2Olx0XHR1MzIgaGFzaF9pbmRleDtcbjEzNzc6XHRcbjEzNzg6XHRcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4xMzc5Olx0XHRldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTtcbjEzODA6XHRcbjEzODE6XHRcdC8qIERvIG5vdCBUWCBiYWxhbmNlIGFueSBtdWx0aWNhc3Qgb3IgYnJvYWRjYXN0ICovXG4xMzgyOlx0XHRpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLVx1MDAzZWhfZGVzdCkpIHtcbjEzODM6XHRcdFx0c3dpdGNoIChza2ItXHUwMDNlcHJvdG9jb2wpIHtcbjEzODQ6XHRcdFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbjEzODU6XHRcdFx0XHRpZiAoYWxiX2RldGVybWluZV9uZChza2IpKVxuMTM4NjpcdFx0XHRcdFx0YnJlYWs7XG4xMzg3Olx0XHRcdFx0ZmFsbHRocm91Z2g7XG4xMzg4Olx0XHRcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuMTM4OTpcdFx0XHRcdGhhc2hfaW5kZXggPSBib25kX3htaXRfaGFzaChib25kLCBza2IpO1xuMTM5MDpcdFx0XHRcdGlmIChib25kLVx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYikge1xuMTM5MTpcdFx0XHRcdFx0dHhfc2xhdmUgPSB0bGJfY2hvb3NlX2NoYW5uZWwoYm9uZCxcbjEzOTI6XHRcdFx0XHRcdFx0XHRcdCAgICAgIGhhc2hfaW5kZXggXHUwMDI2IDB4RkYsXG4xMzkzOlx0XHRcdFx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlbGVuKTtcbjEzOTQ6XHRcdFx0XHR9IGVsc2Uge1xuMTM5NTpcdFx0XHRcdFx0c3RydWN0IGJvbmRfdXBfc2xhdmUgKnNsYXZlcztcbjEzOTY6XHRcdFx0XHRcdHVuc2lnbmVkIGludCBjb3VudDtcbjEzOTc6XHRcbjEzOTg6XHRcdFx0XHRcdHNsYXZlcyA9IHJjdV9kZXJlZmVyZW5jZShib25kLVx1MDAzZXVzYWJsZV9zbGF2ZXMpO1xuMTM5OTpcdFx0XHRcdFx0Y291bnQgPSBzbGF2ZXMgPyBSRUFEX09OQ0Uoc2xhdmVzLVx1MDAzZWNvdW50KSA6IDA7XG4xNDAwOlx0XHRcdFx0XHRpZiAobGlrZWx5KGNvdW50KSlcbjE0MDE6XHRcdFx0XHRcdFx0dHhfc2xhdmUgPSBzbGF2ZXMtXHUwMDNlYXJyW2hhc2hfaW5kZXggJVxuMTQwMjpcdFx0XHRcdFx0XHRcdFx0ICAgICAgIGNvdW50XTtcbjE0MDM6XHRcdFx0XHR9XG4xNDA0Olx0XHRcdFx0YnJlYWs7XG4xNDA1Olx0XHRcdH1cbjE0MDY6XHRcdH1cbjE0MDc6XHRcdHJldHVybiB0eF9zbGF2ZTtcbjE0MDg6XHR9XG4xNDA5Olx0XG4xNDEwOlx0bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXG4xNDExOlx0e1xuMTQxMjpcdFx0c3RydWN0IGJvbmRpbmcgKmJvbmQgPSBuZXRkZXZfcHJpdihib25kX2Rldik7XG4xNDEzOlx0XHRzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlO1xuMTQxNDpcdFxuMTQxNTpcdFx0dHhfc2xhdmUgPSBib25kX3htaXRfdGxiX3NsYXZlX2dldChib25kLCBza2IpO1xuMTQxNjpcdFx0cmV0dXJuIGJvbmRfZG9fYWxiX3htaXQoc2tiLCBib25kLCB0eF9zbGF2ZSk7XG4xNDE3Olx0fVxuMTQxODpcdFxuMTQxOTpcdHN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4xNDIwOlx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTQyMTpcdHtcbjE0MjI6XHRcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcdTAwMjYoQk9ORF9BTEJfSU5GTyhib25kKSk7XG4xNDIzOlx0XHRzdGF0aWMgY29uc3QgX19iZTMyIGlwX2JjYXN0ID0gaHRvbmwoMHhmZmZmZmZmZik7XG4xNDI0Olx0XHRzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlID0gTlVMTDtcbjE0MjU6XHRcdGNvbnN0IHU4ICpoYXNoX3N0YXJ0ID0gTlVMTDtcbjE0MjY6XHRcdGJvb2wgZG9fdHhfYmFsYW5jZSA9IHRydWU7XG4xNDI3Olx0XHRzdHJ1Y3QgZXRoaGRyICpldGhfZGF0YTtcbjE0Mjg6XHRcdHUzMiBoYXNoX2luZGV4ID0gMDtcbjE0Mjk6XHRcdGludCBoYXNoX3NpemUgPSAwO1xuMTQzMDpcdFxuMTQzMTpcdFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbjE0MzI6XHRcdGV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xuMTQzMzpcdFxuMTQzNDpcdFx0c3dpdGNoIChudG9ocyhza2ItXHUwMDNlcHJvdG9jb2wpKSB7XG4xNDM1Olx0XHRjYXNlIEVUSF9QX0lQOiB7XG4xNDM2Olx0XHRcdGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoO1xuMTQzNzpcdFxuMTQzODpcdFx0XHRpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoZXRoX2RhdGEtXHUwMDNlaF9kZXN0KSB8fFxuMTQzOTpcdFx0XHQgICAgIXBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSkpIHtcbjE0NDA6XHRcdFx0XHRkb190eF9iYWxhbmNlID0gZmFsc2U7XG4xNDQxOlx0XHRcdFx0YnJlYWs7XG4xNDQyOlx0XHRcdH1cbjE0NDM6XHRcdFx0aXBoID0gaXBfaGRyKHNrYik7XG4xNDQ0Olx0XHRcdGlmIChpcGgtXHUwMDNlZGFkZHIgPT0gaXBfYmNhc3QgfHwgaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fSUdNUCkge1xuMTQ0NTpcdFx0XHRcdGRvX3R4X2JhbGFuY2UgPSBmYWxzZTtcbjE0NDY6XHRcdFx0XHRicmVhaztcbjE0NDc6XHRcdFx0fVxuMTQ0ODpcdFx0XHRoYXNoX3N0YXJ0ID0gKGNoYXIgKilcdTAwMjYoaXBoLVx1MDAzZWRhZGRyKTtcbjE0NDk6XHRcdFx0aGFzaF9zaXplID0gc2l6ZW9mKGlwaC1cdTAwM2VkYWRkcik7XG4xNDUwOlx0XHRcdGJyZWFrO1xuMTQ1MTpcdFx0fVxuMTQ1MjpcdFx0Y2FzZSBFVEhfUF9JUFY2OiB7XG4xNDUzOlx0XHRcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoZHI7XG4xNDU0Olx0XG4xNDU1Olx0XHRcdC8qIElQdjYgZG9lc24mIzM5O3QgcmVhbGx5IHVzZSBicm9hZGNhc3QgbWFjIGFkZHJlc3MsIGJ1dCBsZWF2ZVxuMTQ1NjpcdFx0XHQgKiB0aGF0IGhlcmUganVzdCBpbiBjYXNlLlxuMTQ1NzpcdFx0XHQgKi9cbjE0NTg6XHRcdFx0aWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLVx1MDAzZWhfZGVzdCkpIHtcbjE0NTk6XHRcdFx0XHRkb190eF9iYWxhbmNlID0gZmFsc2U7XG4xNDYwOlx0XHRcdFx0YnJlYWs7XG4xNDYxOlx0XHRcdH1cbjE0NjI6XHRcbjE0NjM6XHRcdFx0LyogSVB2NiB1c2VzIGFsbC1ub2RlcyBtdWx0aWNhc3QgYXMgYW4gZXF1aXZhbGVudCB0b1xuMTQ2NDpcdFx0XHQgKiBicm9hZGNhc3RzIGluIElQdjQuXG4xNDY1Olx0XHRcdCAqL1xuMTQ2NjpcdFx0XHRpZiAoZXRoZXJfYWRkcl9lcXVhbF82NGJpdHMoZXRoX2RhdGEtXHUwMDNlaF9kZXN0LCBtYWNfdjZfYWxsbWNhc3QpKSB7XG4xNDY3Olx0XHRcdFx0ZG9fdHhfYmFsYW5jZSA9IGZhbHNlO1xuMTQ2ODpcdFx0XHRcdGJyZWFrO1xuMTQ2OTpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA0MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHByb21wdDoKCioqQW5hbHl6aW5nIGBib25kX2FsYi5jYCYjMzk7cyBBbGxvY2F0aW9uIExvZ2ljKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHRoZSByZXF1ZXN0IGlzIHRvIGxvb2sgYXQgbGluZXMgMTQ3MC0xNTAwIG9mIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgLiBUaGF0IGNodW5rIG9mIGNvZGUgc2hvdWxkIGJlIGtleSB0byBob3cgdGhlIEFjdGl2ZS1CYWNrdXAgTG9hZCBCYWxhbmNpbmcgKGFsYikgbW9kZSBhbGxvY2F0ZXMgdHJhZmZpYyBhY3Jvc3MgdGhlIGJvbmRlZCBpbnRlcmZhY2VzLiBJJiMzOTttIGFzc3VtaW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcGFja2V0IGRpc3RyaWJ1dGlvbiwgbGlrZWx5IHJlbGF0ZWQgdG8gTUFDIGFkZHJlc3MgYXNzaWdubWVudCBvciBoYXNoIGNhbGN1bGF0aW9ucyBpZiBpdCYjMzk7cyBkeW5hbWljLgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IGl0IGlkZW50aWZpZXMgdGhlIGFjdGl2ZSBsaW5rLCBhbmQgdGhlbiBob3cgaXQgZGVjaWRlcyB3aGljaCBwYWNrZXRzIGdvIHRvIHRoYXQgYWN0aXZlIGxpbmsuIElzIGl0IGJhc2VkIG9uIGEgcm91bmQtcm9iaW4/IElzIHRoZXJlIHNvbWUga2luZCBvZiAmIzM0O2xlYXN0IGxvYWRlZCYjMzQ7IGhldXJpc3RpYyBpbiBwbGF5LCBldmVuIGlmIGl0JiMzOTtzIGJhc2ljPyBBcmUgdGhlcmUgYW55IGluZGljYXRpb25zIG9mIGxpbmsgbW9uaXRvcmluZyBvciBmYWlsb3ZlciBtZWNoYW5pc21zIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBzbmlwcGV0PyBJJiMzOTtsbCBuZWVkIHRvIHBhcnNlIHRoZSBjb250cm9sIGZsb3cuIFRoZSBjb21tZW50cyB3aWxsIGJlIGNyaXRpY2FsIGhlcmUsIHNvIEkmIzM5O2xsIGhvcGUgdGhlIGRldmVsb3BlcnMgd2VyZSBiZWluZyBkaWxpZ2VudC4KCkFuZCBtb3N0IGxpa2VseSwgSSB3b3VsZCBiZSBsb29raW5nIGZvciBhbnkgc2lnbnMgb2YgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIGJ1Z3MgdGhhdCBtaWdodCBoYXZlIGNyb3BwZWQgdXAgb3ZlciB0aGUgY29kZSYjMzk7cyBsaWZldGltZSwgZXNwZWNpYWxseSBpZiBpdCBkZWFscyB3aXRoIGhpZ2gtdm9sdW1lIG5ldHdvcmtzIG9yIHBhY2tldC1pbnRlbnNpdmUgYXBwbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDcwOlx0XG4xNDcxOlx0XHRcdGlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYikpIHtcbjE0NzI6XHRcdFx0XHRkb190eF9iYWxhbmNlID0gZmFsc2U7XG4xNDczOlx0XHRcdFx0YnJlYWs7XG4xNDc0Olx0XHRcdH1cbjE0NzU6XHRcbjE0NzY6XHRcdFx0LyogVGhlIElQdjYgaGVhZGVyIGlzIHB1bGxlZCBieSBhbGJfZGV0ZXJtaW5lX25kICovXG4xNDc3Olx0XHRcdC8qIEFkZGl0aW9uYWxseSwgREFEIHByb2JlcyBzaG91bGQgbm90IGJlIHR4LWJhbGFuY2VkIGFzIHRoYXRcbjE0Nzg6XHRcdFx0ICogd2lsbCBsZWFkIHRvIGZhbHNlIHBvc2l0aXZlcyBmb3IgZHVwbGljYXRlIGFkZHJlc3NlcyBhbmRcbjE0Nzk6XHRcdFx0ICogcHJldmVudCBhZGRyZXNzIGNvbmZpZ3VyYXRpb24gZnJvbSB3b3JraW5nLlxuMTQ4MDpcdFx0XHQgKi9cbjE0ODE6XHRcdFx0aXA2aGRyID0gaXB2Nl9oZHIoc2tiKTtcbjE0ODI6XHRcdFx0aWYgKGlwdjZfYWRkcl9hbnkoXHUwMDI2aXA2aGRyLVx1MDAzZXNhZGRyKSkge1xuMTQ4MzpcdFx0XHRcdGRvX3R4X2JhbGFuY2UgPSBmYWxzZTtcbjE0ODQ6XHRcdFx0XHRicmVhaztcbjE0ODU6XHRcdFx0fVxuMTQ4NjpcdFxuMTQ4NzpcdFx0XHRoYXNoX3N0YXJ0ID0gKGNoYXIgKilcdTAwMjZpcDZoZHItXHUwMDNlZGFkZHI7XG4xNDg4Olx0XHRcdGhhc2hfc2l6ZSA9IHNpemVvZihpcDZoZHItXHUwMDNlZGFkZHIpO1xuMTQ4OTpcdFx0XHRicmVhaztcbjE0OTA6XHRcdH1cbjE0OTE6XHRcdGNhc2UgRVRIX1BfQVJQOlxuMTQ5MjpcdFx0XHRkb190eF9iYWxhbmNlID0gZmFsc2U7XG4xNDkzOlx0XHRcdGlmIChib25kX2luZm8tXHUwMDNlcmxiX2VuYWJsZWQpXG4xNDk0Olx0XHRcdFx0dHhfc2xhdmUgPSBybGJfYXJwX3htaXQoc2tiLCBib25kKTtcbjE0OTU6XHRcdFx0YnJlYWs7XG4xNDk2Olx0XHRkZWZhdWx0OlxuMTQ5NzpcdFx0XHRkb190eF9iYWxhbmNlID0gZmFsc2U7XG4xNDk4Olx0XHRcdGJyZWFrO1xuMTQ5OTpcdFx0fVxuMTUwMDpcdFxuMTUwMTpcdFx0aWYgKGRvX3R4X2JhbGFuY2UpIHtcbjE1MDI6XHRcdFx0aWYgKGJvbmQtXHUwMDNlcGFyYW1zLnRsYl9keW5hbWljX2xiKSB7XG4xNTAzOlx0XHRcdFx0aGFzaF9pbmRleCA9IF9zaW1wbGVfaGFzaChoYXNoX3N0YXJ0LCBoYXNoX3NpemUpO1xuMTUwNDpcdFx0XHRcdHR4X3NsYXZlID0gdGxiX2Nob29zZV9jaGFubmVsKGJvbmQsIGhhc2hfaW5kZXgsIHNrYi1cdTAwM2VsZW4pO1xuMTUwNTpcdFx0XHR9IGVsc2Uge1xuMTUwNjpcdFx0XHRcdC8qXG4xNTA3Olx0XHRcdFx0ICogZG9fdHhfYmFsYW5jZSBtZWFucyB3ZSBhcmUgZnJlZSB0byBzZWxlY3QgdGhlIHR4X3NsYXZlXG4xNTA4Olx0XHRcdFx0ICogU28gd2UgZG8gZXhhY3RseSB3aGF0IHRsYiB3b3VsZCBkbyBmb3IgaGFzaCBzZWxlY3Rpb25cbjE1MDk6XHRcdFx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTc0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBib25kaW5nIGRyaXZlciBjb25maWd1cmF0aW9uLgoKKipFeGFtaW5pbmcgQm9uZGluZyBEcml2ZXIgS2NvbmZpZyBPcHRpb25zKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIEtjb25maWcgb3B0aW9ucyBnb3Zlcm4gdGhlIGJlaGF2aW9yIG9mIHRoZSBib25kaW5nIGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gSSYjMzk7bGwgc3RhcnQgYnkgc2VhcmNoaW5nIHdpdGhpbiB0aGUgb2J2aW91czogYGRyaXZlcnMvbmV0L2JvbmRpbmcvS2NvbmZpZ2AuIElmIHRoYXQgZG9lc24mIzM5O3QgeWllbGQgZXZlcnl0aGluZywgSSYjMzk7bGwgYnJvYWRlbiB0aGUgbmV0IGEgYml0IGFuZCBjaGVjayBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgZ2xvYmFsIG5ldHdvcmstcmVsYXRlZCBvcHRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGJvbmRpbmcgYmVoYXZpb3IsIG9yIGlmIHBlcmhhcHMgdGhlIGJvbmRpbmcgb3B0aW9ucyBhcmUgaW5jbHVkZWQgZnJvbSB0aGVyZS4gU2VhcmNoaW5nIGZvciAmIzM0O0JPTkRJTkcmIzM0OyBkaXJlY3RseSBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzeW1ib2xzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcy4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgc28gdG8gc3BlYWsuIFVuZGVyc3RhbmRpbmcgdGhlIEtjb25maWcgc3RydWN0dXJlIGlzIGNydWNpYWwgZm9yIGFueSBuZXR3b3JrIGRyaXZlciBleHBlcnQsIHNvIEkgd2lsbCBhbmFseXplIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGFueSBkZWZhdWx0IHZhbHVlcyB0byBnYWluIGluc2lnaHQgaW50byBob3cgdGhlIGJvbmRpbmcgZHJpdmVyIGlzIGN1c3RvbWl6ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCT05ESU5HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0zOT1pZiBORVRfQ09SRVxuZHJpdmVycy9uZXQvS2NvbmZpZy00MC1cbmRyaXZlcnMvbmV0L0tjb25maWc6NDE6Y29uZmlnIEJPTkRJTkdcbmRyaXZlcnMvbmV0L0tjb25maWctNDItXHR0cmlzdGF0ZSBcJiMzNDtCb25kaW5nIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyB0aGUgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEJhc2VkIG9uIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHNlY3Rpb25zIGFyb3VuZCBsaW5lIDQwLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGluaXRpYWwgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgbmV0d29yayBkcml2ZXJzIHdpbGwgbGlrZWx5IHJlc2lkZS4gRnJvbSB0aGVyZSwgSSBjYW4gdW5kZXJzdGFuZCB0aGUgZ2VuZXJhbCBzdHJ1Y3R1cmUgYW5kIHBlcmhhcHMgaWRlbnRpZnkgdGhlIHNwZWNpZmljIG9wdGlvbnMgdGhhdCBhcmUgaW5mbHVlbmNpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIG1vZHVsZXMgdGhhdCBJIGFtIGludGVyZXN0ZWQgaW4uIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzIGZvciB0aGlzIGFyZWEgb2YgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzU6XHRcdGhlbHBcbiAgMzY6XHRcdCAgWW91IGNhbiBzYXkgTiBoZXJlIGlmIHlvdSBkbyBub3QgaW50ZW5kIHRvIHVzZSBhbnkgb2YgdGhlXG4gIDM3Olx0XHQgIG5ldHdvcmtpbmcgY29yZSBkcml2ZXJzIChpLmUuIFZMQU4sIGJyaWRnaW5nLCBib25kaW5nLCBldGMuKVxuICAzODpcdFxuICAzOTpcdGlmIE5FVF9DT1JFXG4gIDQwOlx0XG4gIDQxOlx0Y29uZmlnIEJPTkRJTkdcbiAgNDI6XHRcdHRyaXN0YXRlIFwmIzM0O0JvbmRpbmcgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiAgNDM6XHRcdGRlcGVuZHMgb24gSU5FVFxuICA0NDpcdFx0ZGVwZW5kcyBvbiBUTFMgfHwgVExTX0RFVklDRT1uXG4gIDQ1Olx0XHRoZWxwXG4gIDQ2Olx0XHQgIFNheSAmIzM5O1kmIzM5OyBvciAmIzM5O00mIzM5OyBpZiB5b3Ugd2lzaCB0byBiZSBhYmxlIHRvICYjMzk7Ym9uZCYjMzk7IG11bHRpcGxlIEV0aGVybmV0XG4gIDQ3Olx0XHQgIENoYW5uZWxzIHRvZ2V0aGVyLiBUaGlzIGlzIGNhbGxlZCAmIzM5O0V0aGVyY2hhbm5lbCYjMzk7IGJ5IENpc2NvLFxuICA0ODpcdFx0ICAmIzM5O1RydW5raW5nJiMzOTsgYnkgU3VuLCA4MDIuM2FkIGJ5IHRoZSBJRUVFLCBhbmQgJiMzOTtCb25kaW5nJiMzOTsgaW4gTGludXguXG4gIDQ5Olx0XG4gIDUwOlx0XHQgIFRoZSBkcml2ZXIgc3VwcG9ydHMgbXVsdGlwbGUgYm9uZGluZyBtb2RlcyB0byBhbGxvdyBmb3IgYm90aCBoaWdoXG4gIDUxOlx0XHQgIHBlcmZvcm1hbmNlIGFuZCBoaWdoIGF2YWlsYWJpbGl0eSBvcGVyYXRpb24uXG4gIDUyOlx0XG4gIDUzOlx0XHQgIFJlZmVyIHRvIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcucnN0XHUwMDNlIGZvciBtb3JlXG4gIDU0Olx0XHQgIGluZm9ybWF0aW9uLlxuICA1NTpcdFxuICA1NjpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDU3Olx0XHQgIHdpbGwgYmUgY2FsbGVkIGJvbmRpbmcuXG4gIDU4Olx0XG4gIDU5Olx0Y29uZmlnIERVTU1ZXG4gIDYwOlx0XHR0cmlzdGF0ZSBcJiMzNDtEdW1teSBuZXQgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiAgNjE6XHRcdGhlbHBcbiAgNjI6XHRcdCAgVGhpcyBpcyBlc3NlbnRpYWxseSBhIGJpdC1idWNrZXQgZGV2aWNlIChpLmUuIHRyYWZmaWMgeW91IHNlbmQgdG9cbiAgNjM6XHRcdCAgdGhpcyBkZXZpY2UgaXMgY29uc2lnbmVkIGludG8gb2JsaXZpb24pIHdpdGggYSBjb25maWd1cmFibGUgSVBcbiAgNjQ6XHRcdCAgYWRkcmVzcy4gSXQgaXMgbW9zdCBjb21tb25seSB1c2VkIGluIG9yZGVyIHRvIG1ha2UgeW91ciBjdXJyZW50bHlcbiAgNjU6XHRcdCAgaW5hY3RpdmUgU0xJUCBhZGRyZXNzIHNlZW0gbGlrZSBhIHJlYWwgYWRkcmVzcyBmb3IgbG9jYWwgcHJvZ3JhbXMuXG4gIDY2Olx0XHQgIElmIHlvdSB1c2UgU0xJUCBvciBQUFAsIHlvdSBtaWdodCB3YW50IHRvIHNheSBZIGhlcmUuIEl0IHdvbiYjMzk7dFxuICA2NzpcdFx0ICBlbmxhcmdlIHlvdXIga2VybmVsLiBXaGF0IGEgZGVhbC4gUmVhZCBhYm91dCBpdCBpbiB0aGUgTmV0d29ya1xuICA2ODpcdFx0ICBBZG1pbmlzdHJhdG9yJiMzOTtzIEd1aWRlLCBhdmFpbGFibGUgZnJvbVxuICA2OTpcdFx0ICBcdTAwM2NodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNndWlkZVx1MDAzZS5cbiAgNzA6XHRcbiAgNzE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICA3MjpcdFx0ICB3aWxsIGJlIGNhbGxlZCBkdW1teS5cbiAgNzM6XHRcbiAgNzQ6XHRjb25maWcgV0lSRUdVQVJEXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMTgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyB0aGUgQm9uZGluZyBNb2R1bGUgQ29tcGlsYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBib25kX2FsYi5jYCBpcyBiZWluZyBjb21waWxlZCB3aXRoaW4gdGhlIGJvbmRpbmcgbW9kdWxlLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQsIGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGJ1aWxkIGluc3RydWN0aW9uczogdGhlIGBNYWtlZmlsZWAgbG9jYXRlZCBpbiB0aGUgYGRyaXZlcnMvbmV0L2JvbmRpbmcvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBhdCBsZWFzdCwgd2hlcmUgdGhlIGluc3RydWN0aW9ucyBmb3IgdGhlIG1hZ2ljIGFyZSB3cml0dGVuLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZWAgYW5kIHNlZSBleGFjdGx5IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGUgY29tcGlsYXRpb24gb2YgYGJvbmRfYWxiLmNgLiBUaGF0IGZpbGUgc2hvdWxkIGdpdmUgbWUgYWxsIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgcmVnYXJkaW5nIGNvbXBpbGVyIGZsYWdzLCBkZXBlbmRlbmNpZXMsIG9iamVjdCBmaWxlIGdlbmVyYXRpb24sIGFuZCBsaW5raW5nLiBUaGF0JiMzOTtzIHRoZSBiZXN0IHdheSB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGJ1aWxkcyB0aGF0IHNwZWNpZmljIGNvbXBvbmVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDM6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBFdGhlcm5ldCBCb25kaW5nIGRyaXZlclxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmotJChDT05GSUdfQk9ORElORykgJiM0Mzs9IGJvbmRpbmcub1xuICAgNzpcdFxuICAgODpcdGJvbmRpbmctb2JqcyA6PSBib25kX21haW4ubyBib25kXzNhZC5vIGJvbmRfYWxiLm8gYm9uZF9zeXNmcy5vIGJvbmRfc3lzZnNfc2xhdmUubyBib25kX2RlYnVnZnMubyBib25kX25ldGxpbmsubyBib25kX29wdGlvbnMub1xuICAgOTpcdFxuICAxMDpcdHByb2MtJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IGJvbmRfcHJvY2ZzLm9cbiAgMTE6XHRib25kaW5nLW9ianMgJiM0Mzs9ICQocHJvYy15KVxuICAxMjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTYxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEJvbmRpbmcgYW5kIElQdjYgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgQ09ORklHX0JPTkRJTkdgLCBhbmQgaXQmIzM5O3MgY2xlYXIgaXQgZGVwZW5kcyBvbiBgSU5FVGAgYW5kIGBORVRfQ09SRWAuIEJ1dCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIElQdjYgaXMgYWxzbyBhIHJlcXVpcmVtZW50LCBvciBhdCBsZWFzdCBhIGRlcGVuZGVuY3kgaW4gdGhlIEFkdmFuY2VkIExvYWQgQmFsYW5jaW5nIChBTEIpIGNvbnRleHQuIE15IGluc3RpbmN0IHNheXMgSSBzaG91bGQgZGl2ZSBpbnRvIHRoZSBjb2RlIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9ucyBhbmQgdG8gd2hhdCBleHRlbnQgSVB2NiBhbmQgdGhlIGJvbmRpbmcgZHJpdmVyIGFyZSBsaW5rZWQuCgpGaXJzdCwgSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBJUHY2IGludm9sdmVtZW50LiBTcGVjaWZpY2FsbHksIEkga25vdyB0aGF0IGBhbGJfZGV0ZXJtaW5lX25kYCBtZXRob2QgY291bGQgcG90ZW50aWFsbHkgcmV2ZWFsIHdoZXRoZXIgSVB2NiBpcyBpbnRlZ3JhbCB0byBpdHMgZnVuY3Rpb25pbmcuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaG93IGl0IGhhbmRsZXMgSVB2NiBoZWFkZXJzIGFuZCBJQ01QdjYgcGFja2V0cyAobmVpZ2hib3IgZGlzY292ZXJ5LCBhZHZlcnRpc2VtZW50cywgc29saWNpdGF0aW9ucyAtIE5ESVNDX05FSUdIQk9VUl9BRFZFUlRJU0VNRU5ULCBORElTQ19ORUlHSEJPVVJfU09MSUNJVEFUSU9OKS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaW5kaWNhdGlvbi4KClVsdGltYXRlbHksIEkgd2FudCB0byBjbGFyaWZ5IHdoZXRoZXIgYENPTkZJR19JUFY2YCBpcyAqYWJzb2x1dGVseSogbmVlZGVkIGZvciB0aGUgYm9uZGluZyBkcml2ZXIgdG8gZnVuY3Rpb24sIG9yIGlmIGJvbmRpbmcgY2FuIHdvcmsgaW5kZXBlbmRlbnRseSwgb3IgcGVyaGFwcyBvbmx5IHdvcmtzIHdpdGggYENPTkZJR19JUFY2YCBlbmFibGVkLiBJIGNhbiBhY2NvbXBsaXNoIHRoaXMgYnkgY2hlY2tpbmcgZm9yIGEgZGlyZWN0IGxpbmsgYmV0d2VlbiBgQ09ORklHX0lQVjZgIGFuZCB0aGUgYm9uZGluZyBkcml2ZXIsIHNvIEkmIzM5O2xsIG5leHQgc2VhcmNoIHRoZSBgZHJpdmVycy9uZXQvYm9uZGluZy9gIGRpcmVjdG9yeSBmb3IgcmVmZXJlbmNlcyB0byBpdC4gVGhpcyBzaG91bGQgcXVpY2tseSBhbnN3ZXIgbXkgcXVlc3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQVjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xMzcxPXN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzODMtXHRcdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTM4NDpcdFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzg1LVx0XHRcdGlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYikpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTE0MTk9c3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQ1MS1cdH1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNDUyOlx0Y2FzZSBFVEhfUF9JUFY2OiB7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQ1My1cdFx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNmhkcjtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTIxND1zdGF0aWMgY29uc3Qgc3RydWN0IGZsb3dfZGlzc2VjdG9yX2tleSBmbG93X2tleXNfYm9uZGluZ19rZXlzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMjctXHR7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjIyODpcdFx0LmtleV9pZCA9IEZMT1dfRElTU0VDVE9SX0tFWV9JUFY2X0FERFJTLFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMjktXHRcdC5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgZmxvd19rZXlzLCBhZGRycy52NmFkZHJzKSxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTMxNTQ9c3RhdGljIGludCBib25kX2FycF9yY3YoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zMjMzLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzozMjM0OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zMjM1LXN0YXRpYyB2b2lkIGJvbmRfbnNfc2VuZChzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MzQyMz1pbnQgYm9uZF9yY3ZfdmFsaWRhdGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zNDI1LXtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzQyNjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzQyNzpcdGJvb2wgaXNfaXB2NiA9IHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBfX2NwdV90b19iZTE2KEVUSF9QX0lQVjYpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zNDI4LSNlbmRpZlxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQzNi1cdFx0aWYgKChzbGF2ZV9kb19hcnBfdmFsaWRhdGVfb25seShib25kKSBcdTAwMjZcdTAwMjYgaXNfYXJwKSB8fFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzozNDM3OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zNDM4LVx0XHQgICAgKHNsYXZlX2RvX2FycF92YWxpZGF0ZV9vbmx5KGJvbmQpIFx1MDAyNlx1MDAyNiBpc19pcHY2KSB8fFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQ0NC1cdFx0cmV0dXJuIGJvbmRfYXJwX3Jjdihza2IsIGJvbmQsIHNsYXZlKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzQ0NTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQ0Ni1cdH0gZWxzZSBpZiAoaXNfaXB2NiBcdTAwMjZcdTAwMjYgbGlrZWx5KGlwdjZfbW9kX2VuYWJsZWQoKSkpIHtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTM0NTQ9c3RhdGljIHZvaWQgYm9uZF9zZW5kX3ZhbGlkYXRlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQ1Ni1cdGJvbmRfYXJwX3NlbmRfYWxsKGJvbmQsIHNsYXZlKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzQ1NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQ1OC1cdGlmIChsaWtlbHkoaXB2Nl9tb2RfZW5hYmxlZCgpKSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTQxMjg9c3RhdGljIGJvb2wgYm9uZF9mbG93X2lwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmbG93X2tleXMgKmZrLCBjb25zdCB2b2lkICpkYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDE0My1cdFx0XHQqaXBfcHJvdG8gPSBpcGgtXHUwMDNlcHJvdG9jb2w7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQxNDQ6XHR9IGVsc2UgaWYgKGwyX3Byb3RvID09IGh0b25zKEVUSF9QX0lQVjYpKSB7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQxNDUtXHRcdGRhdGEgPSBib25kX3B1bGxfZGF0YShza2IsIGRhdGEsIGhsZW4sICpuaG9mZiAmIzQzOyBzaXplb2YoKmlwaDYpKTtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTUyNjM9c3RhdGljIGJvb2wgYm9uZF9zaG91bGRfYnJvYWRjYXN0X25laWdoYm9yKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MjgwLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1MjgxOlx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkge1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MjgyLVx0XHRjb21iaW5lZCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNrYl9tYWNfaGVhZGVyX2xlbihza2IpLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTQ1Nz1zdGF0aWMgdm9pZCBib25kX3NrX3RvX2Zsb3coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd19rZXlzICpmbG93KVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTQ1OS1cdHN3aXRjaCAoc2stXHUwMDNlc2tfZmFtaWx5KSB7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU0NjA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU0NjEtXHRjYXNlIEFGX0lORVQ2OlxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NDYyLVx0XHRpZiAoaXB2Nl9vbmx5X3NvY2soc2spIHx8XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU0NjM6XHRcdCAgICBpcHY2X2FkZHJfdHlwZShcdTAwMjZzay1cdTAwM2Vza192Nl9kYWRkcikgIT0gSVBWNl9BRERSX01BUFBFRCkge1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1NDY0Olx0XHRcdGZsb3ctXHUwMDNlY29udHJvbC5hZGRyX3R5cGUgPSBGTE9XX0RJU1NFQ1RPUl9LRVlfSVBWNl9BRERSUztcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTQ2NS1cdFx0XHRmbG93LVx1MDAzZWFkZHJzLnY2YWRkcnMuc3JjID0gaW5ldDZfc2soc2spLVx1MDAzZXNhZGRyO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NjA4Nz1zdGF0aWMgaW50IF9faW5pdCBib25kX2NoZWNrX3BhcmFtcyhzdHJ1Y3QgYm9uZF9wYXJhbXMgKnBhcmFtcylcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTY0NzAtXHRtZW1jcHkocGFyYW1zLVx1MDAzZWFycF90YXJnZXRzLCBhcnBfdGFyZ2V0LCBzaXplb2YoYXJwX3RhcmdldCkpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2NDcxOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02NDcyLVx0bWVtc2V0KHBhcmFtcy1cdTAwM2Vuc190YXJnZXRzLCAwLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSAqIEJPTkRfTUFYX05TX1RBUkdFVFMpO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM9MjE2PXN0YXRpYyBpbnQgYm9uZF9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTMzOS1cdH1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6MzQwOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0zNDEtXHRpZiAoZGF0YVtJRkxBX0JPTkRfTlNfSVA2X1RBUkdFVF0pIHtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jPTcwMD1zdGF0aWMgaW50IGJvbmRfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy03NzAtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjc3MTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNzcyLVx0dGFyZ2V0cyA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgSUZMQV9CT05EX05TX0lQNl9UQVJHRVQpO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM9MTI2MD1zdGF0aWMgaW50IGJvbmRfb3B0aW9uX2FycF9pcF90YXJnZXRzX3NldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTEyODUtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jOjEyODY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTEyODctc3RhdGljIGJvb2wgc2xhdmVfY2FuX3NldF9uc19tYWRkcihjb25zdCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfcHJvY2ZzLmM9NTk9c3RhdGljIHZvaWQgYm9uZF9pbmZvX3Nob3dfbWFzdGVyKHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9wcm9jZnMuYy0xMzgtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfcHJvY2ZzLmM6MTM5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3Byb2Nmcy5jLTE0MC1cdFx0cHJpbnRlZCA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjY3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIGFuZCBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHdvcnRoIGZ1enppbmcuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGZ1bmN0aW9uYWwgY2hhbmdlIGludHJvZHVjZXMgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMuIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCBpdCBjb25jZXJucyBhbiB1cGRhdGUgdG8gaG93IElQdjYgcGFja2V0cyBhcmUgaGFuZGxlZCBpbiBib25kaW5nIFRMQi9BTEIgbW9kZXMgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBhbGJfZGV0ZXJtaW5lX25kYCBmdW5jdGlvbi4KCkkgc2VlIGEgY2hhbmdlIHdoZXJlIHRoZSBjb2RlIHByZXZpb3VzbHkgcmVsaWVkIG9uIGBpY21wNl9oZHIoc2tiKWAgYnV0IG1pZ2h0IGhhdmUgYmVlbiB1c2luZyBhbiBpbnZhbGlkIG9mZnNldCBmb3IgdGhlIHRyYW5zcG9ydCBoZWFkZXIuIFRoZSBjb2RlIHB1bGxzIGluIG1vcmUgZGF0YSBpbnRvIGxpbmVhciBtZW1vcnksIHdoaWNoIG1pZ2h0IGNhdXNlIGBza2ItJmd0O2hlYWRgIHRvIGdldCByZWFsbG9jYXRlZC4gSXQgYXBwZWFycyB0aGF0IGBpcDZoZHJgIHdhc24mIzM5O3QgcmVsb2FkZWQgYWZ0ZXIgYHBza2JfbmV0d29ya19tYXlfcHVsbGAsIGxlYWRpbmcgdG8gYSBwb3NzaWJsZSB1c2Ugb2YgYW4gaW52YWxpZCBwb2ludGVyLiBBbHNvLCB0aGVyZSYjMzk7cyBhIHJlbW92ZWQgdW51c2VkIGFyZ3VtZW50LgoKVGhpcyBtb2RpZmljYXRpb24gYWZmZWN0cyBJUHY2IHBhY2tldCB0cmFuc21pc3Npb24gaW4gYm9uZGluZyBUTEIgLyBBTEIgbW9kZXMsIGludm9sdmluZyBmdW5jdGlvbnMgbGlrZSBgYm9uZF90bGJfeG1pdGAsIGBib25kX2FsYl94bWl0YCwgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCBhbmQgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YC4gQm9uZGluZyBpcyBhIGZ1bGx5IHNvZnR3YXJlLWVtdWxhdGVkIHZpcnR1YWwgbmV0d29ya2luZyBkZXZpY2UgY3JlYXRlZCB2aWEgc3RhbmRhcmQgTGludXggbmV0d29ya2luZyB0b29scyAocnRubCwgbmV0bGluaywgc3lzZnMsIGlvY3RsKSBhbmQgY2FuIGJlIGVhc2lseSByZXByb2R1Y2VkIGluIFFFTVUvR0NFLiBBbnkgdXNlciBvciBmdXp6ZXIgY2FuIGNyZWF0ZSBhIGJvbmRpbmcgaW50ZXJmYWNlLCBlbnNsYXZlIHZpcnR1YWwgaW50ZXJmYWNlcywgc2V0IHRoZSBtb2RlIHRvIFRMQiBvciBBTEIsIGFuZCB0cmFuc21pdCBJUHY2IHBhY2tldHMgdGhyb3VnaCBpdC4KCkdpdmVuIHRoYXQgdGhpcyBjb2RlIGlzIGluIGEgcmVhY2hhYmxlIHBhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBjYW4gYmUgZWFzaWx5IHNldCB1cCBpbiBhIHN0YW5kYXJkIExpbnV4IGVudmlyb25tZW50LCBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFdlIGNhbiBjcmVhdGUgYSB0ZXN0IHNldHVwIHF1aWNrbHkgYW5kIHRyaWdnZXIgdGhlIGNvZGUgdGhhdCB3YXkuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHMgYW5kIHNlZSBpZiB3ZSBjYW4gaWRlbnRpZnkgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4KCmBhbGJfZGV0ZXJtaW5lX25kYCBzZWVtcyB0byBiZSBpbmxpbmVkIGludG8gYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCAvIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAuIFRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGlzIHBhdGggYXJlOgoKKiAgIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAKKiAgIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAKKiAgIGBib25kX3RsYl94bWl0YAoqICAgYGJvbmRfYWxiX3htaXRgCgpJIHdpbGwgZ3JlcCB0aGUgY29kZWJhc2UgZm9yIGBib25kX2FsYl94bWl0YCBvciBgYm9uZF90bGJfeG1pdGAgdG8gbWFrZSBzdXJlIHRoZSBzeW1ib2xzIGFyZSB1c2VkIGFuZCBleGlzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym9uZF8oYWxifHRsYilfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTIyNz1zdGF0aWMgc3RydWN0IHNsYXZlICp0bGJfY2hvb3NlX2NoYW5uZWwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHUzMiBoYXNoX2luZGV4LFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yMzItXHQvKiBXZSBkb24mIzM5O3QgbmVlZCB0byBkaXNhYmxlIHNvZnRpcnEgaGVyZSwgYmVjYXVzZVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjIzMzpcdCAqIHRsYl9jaG9vc2VfY2hhbm5lbCgpIGlzIG9ubHkgY2FsbGVkIGJ5IGJvbmRfYWxiX3htaXQoKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIzNC1cdCAqIHdoaWNoIGFscmVhZHkgaGFzIHNvZnRpcnEgZGlzYWJsZWQuXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTEzNzE9c3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQwOS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNDEwOm5ldGRldl90eF90IGJvbmRfdGxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MTEte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNDE5PXN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1MjMtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTUyNDpuZXRkZXZfdHhfdCBib25kX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTI1LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTU1NTI9c3RhdGljIG5ldGRldl90eF90IF9fYm9uZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTc4LVx0Y2FzZSBCT05EX01PREVfQUxCOlxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1NTc5Olx0XHRyZXR1cm4gYm9uZF9hbGJfeG1pdChza2IsIGRldik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU1ODAtXHRjYXNlIEJPTkRfTU9ERV9UTEI6XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU1ODE6XHRcdHJldHVybiBib25kX3RsYl94bWl0KHNrYiwgZGV2KTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTU4Mi1cdGRlZmF1bHQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDc2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgQm9uZCBBTEIgVHJhbnNtaXNzaW9uIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGVzZSB0cmFuc21pc3Npb24gZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGFuZCBkZWNsYXJlZC4gSSYjMzk7bSBmb2N1c2luZyBvbiBgYm9uZF9hbGJfeG1pdGAsIGBib25kX3RsYl94bWl0YCwgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCwgYW5kIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAuIFRoZSBmYWN0IHRoYXQgYWxsIGZvdXIgYXJlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBib25kX2FsYi5jYCBpcyB0aGUga2V5LiBOb3csIEkgbmVlZCB0byBjb25maXJtIHRoZWlyIGRlY2xhcmF0aW9ucyB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGludGVyZmFjZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgZWl0aGVyIGBpbmNsdWRlL25ldC9ib25kX2FsYi5oYCBvciBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5oYCDigJMgb25lIG9mIHRob3NlIHNob3VsZCBoYXZlIHRoZSBkZWZpbml0aW9ucyBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JvbmRfdGxiX3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xMzcxPXN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MDktXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTQxMDpuZXRkZXZfdHhfdCBib25kX3RsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNDExLXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTU1NTI9c3RhdGljIG5ldGRldl90eF90IF9fYm9uZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTgwLVx0Y2FzZSBCT05EX01PREVfVExCOlxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1NTgxOlx0XHRyZXR1cm4gYm9uZF90bGJfeG1pdChza2IsIGRldik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU1ODItXHRkZWZhdWx0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY0NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBCb25kaW5nIERyaXZlciBJbXBsZW1lbnRhdGlvbnMqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBib25kaW5nIGRyaXZlciBjb2RlIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGhhbmRsaW5nIHRoaXMgcGFydGljdWxhciBzaXR1YXRpb24uIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcyBmb3IgdGhlIGNvcmUgbG9naWMuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRvIGNoZWNrIHRoZSBoZWFkZXIgZmlsZXMgZmlyc3QuICBJJiMzOTttIHRoaW5raW5nIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmhgIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gQWRhcHRpdmUgTG9hZCBCYWxhbmNpbmcuIEFsdGVybmF0aXZlbHksICBgaW5jbHVkZS9uZXQvYm9uZGluZy5oYCBzaG91bGQgY29udGFpbiBtb3JlIGdlbmVyaWMgYm9uZGluZy1yZWxhdGVkIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiAgRGVwZW5kaW5nIG9uIHdoYXQgSSBmaW5kIGluIHRoZXNlIGhlYWRlcnMsIEkmIzM5O2xsIGtub3cgd2hlcmUgdG8gZHJpbGwgZG93biBuZXh0IOKAkyBwcm9iYWJseSBpbnRvIHRoZSBzb3VyY2UgZmlsZXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtib25kX2FsYl94bWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2JvbmRfYWxiLmg9MTU4PXZvaWQgYm9uZF9hbGJfaGFuZGxlX2FjdGl2ZV9jaGFuZ2Uoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqbmV3X3NsYXZlKTtcbmluY2x1ZGUvbmV0L2JvbmRfYWxiLmg6MTU5Om5ldGRldl90eF90IGJvbmRfYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KTtcbmluY2x1ZGUvbmV0L2JvbmRfYWxiLmgtMTYwLW5ldGRldl90eF90IGJvbmRfdGxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwMTQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyBgYm9uZF9hbGIuaGAgZm9yIFBvdGVudGlhbCBJc3N1ZXMqKgoKT2theSwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIEFjdGl2ZS1CYWNrdXAgTG9hZCBCYWxhbmNpbmcgKEFMQikgaW1wbGVtZW50YXRpb24gd2l0aGluIGJvbmRpbmcuIFRoZSBsaWtlbHkgc3BvdCBmb3IgdGhlIGhlYXJ0IG9mIHRoZSBsb2dpYywgb3IgYSBjcnVjaWFsIGRhdGEgc3RydWN0dXJlLCByZWxhdGVkIHRvIHRoZSBBTEIgZnVuY3Rpb25hbGl0eSB3b3VsZCBiZSBhcm91bmQgbGluZSAxNTUgaW4gYGluY2x1ZGUvbmV0L2JvbmRfYWxiLmhgLiBMZXQmIzM5O3MgcHVsbCB0aGF0IHVwIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEgcG90ZW50aWFsIGFyZWEgZm9yIG9wdGltaXphdGlvbiwgYSBidWcsIG9yIGp1c3QgYSBwbGFjZSBJIHNob3VsZCBiZSBtb3JlIGRlZXBseSBmYW1pbGlhciB3aXRoIGdpdmVuIHdoYXQgSSBhbSB3b3JraW5nIG9uIG5vdy4gVGhpcyBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pbmcgaG93IHdlIHNlbGVjdCB0aGUgYWN0aXZlIHNsYXZlLCB0byB0aGUgbG9naWMgdGhhdCBoYW5kbGVzIGxpbmsgZmFpbHVyZXMsIG9yIGV2ZW4gaG93IHdlIHRyYWNrIHRoZSBzdGF0ZSBvZiB0aGUgc2xhdmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2JvbmRfYWxiLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0NTpcdFx0XHRcdFx0XHRcdFx0ICAqIG9mIGNsaWVudCB1cGRhdGVcbiAxNDY6XHRcdFx0XHRcdFx0XHRcdCAgKi9cbiAxNDc6XHRcdHU4XHRcdFx0cmxiX3JlYmFsYW5jZTtcdC8qIGZsYWcgLSBpbmRpY2F0ZXMgdGhhdCB0aGVcbiAxNDg6XHRcdFx0XHRcdFx0XHQgKiByeCB0cmFmZmljIHNob3VsZCBiZVxuIDE0OTpcdFx0XHRcdFx0XHRcdCAqIHJlYmFsYW5jZWRcbiAxNTA6XHRcdFx0XHRcdFx0XHQgKi9cbiAxNTE6XHR9O1xuIDE1MjpcdFxuIDE1MzpcdGludCBib25kX2FsYl9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kLCBpbnQgcmxiX2VuYWJsZWQpO1xuIDE1NDpcdHZvaWQgYm9uZF9hbGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKTtcbiAxNTU6XHRpbnQgYm9uZF9hbGJfaW5pdF9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSk7XG4gMTU2Olx0dm9pZCBib25kX2FsYl9kZWluaXRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqc2xhdmUpO1xuIDE1NzpcdHZvaWQgYm9uZF9hbGJfaGFuZGxlX2xpbmtfY2hhbmdlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCBjaGFyIGxpbmspO1xuIDE1ODpcdHZvaWQgYm9uZF9hbGJfaGFuZGxlX2FjdGl2ZV9jaGFuZ2Uoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqbmV3X3NsYXZlKTtcbiAxNTk6XHRuZXRkZXZfdHhfdCBib25kX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldik7XG4gMTYwOlx0bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpO1xuIDE2MTpcdHN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4gMTYyOlx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiAxNjM6XHRzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuIDE2NDpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gMTY1Olx0dm9pZCBib25kX2FsYl9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTtcbiAxNjY6XHRpbnQgYm9uZF9hbGJfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgdm9pZCAqYWRkcik7XG4gMTY3Olx0dm9pZCBib25kX2FsYl9jbGVhcl92bGFuKHN0cnVjdCBib25kaW5nICpib25kLCB1bnNpZ25lZCBzaG9ydCB2bGFuX2lkKTtcbiAxNjg6XHQjZW5kaWYgLyogX05FVF9CT05EX0FMQl9IICovXG4gMTY5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzgyCgkJCQkJCQlvdXRwdXQ6IDIwNAoJCQkJCQkJdGhvdWdodHM6IDc4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBCb25kaW5nIERyaXZlciBQYXRjaCBmb3IgRnV6emluZyBQcmlvcml0aXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJdCBsb29rcyBsaWtlIHdlIG5lZWQgYEJPTkRJTkdgLCBuYXR1cmFsbHksIHNpbmNlIGl0JiMzOTtzIHRoZSB0YXJnZXQsIGFuZCBgSU5FVGAgYmVjYXVzZSBgQk9ORElOR2AgZGVwZW5kcyBvbiBpdC4gQ3J1Y2lhbGx5LCBnaXZlbiB0aGF0IHRoZSBjb2RlIHNwZWNpZmljYWxseSB0YXJnZXRzIElQdjYgTmVpZ2hib3IgRGlzY292ZXJ5IHBhY2tldHMsIGBJUFY2YCBpcyBhbHNvIGVzc2VudGlhbC4gIEZ1cnRoZXJtb3JlLCBgQk9ORElOR2AgaXMgbmVzdGVkIHdpdGhpbiBgTkVUX0NPUkVgIGluIHRoZSBLY29uZmlnLCBzbyB0aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgdG9vLgoKSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBpbiBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZm9yIGBCT05ESU5HYCBhbmQgeWVwLCBpdCYjMzk7cyBgSU5FVGAgYW5kIGVpdGhlciBgVExTYCBvciBgVExTX0RFVklDRT1uYCBhcyBleHBlY3RlZCwgYW5kIGl0JiMzOTtzIGFsbCBpbnNpZGUgYGlmIE5FVF9DT1JFYCwgYXMgSSBzYXcgYmVmb3JlLgoKTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggdG91Y2hlcy4gVGhlIGBGb2N1c1N5bWJvbHNgIGxvb2sgbGlrZTogYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCwgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCwgYGJvbmRfYWxiX3htaXRgLCBhbmQgYGJvbmRfdGxiX3htaXRgLgoKTm93LCBJIGxvb2sgYXQgdGhlIGdpdCBkaWZmIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgYW5kIHNjb3BlLiBJdCYjMzk7cyBqdXN0IGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgIHRoYXQmIzM5O3MgbW9kaWZpZWQuIFNwZWNpZmljYWxseSwgaW4gYGFsYl9kZXRlcm1pbmVfbmRgOiB0aGUgdW51c2VkIGBib25kYCBwYXJhbWV0ZXIgd2FzIHJlbW92ZWQsIHdoaWNoIGlzIG1pbm9yLiBNb3JlIGltcG9ydGFudGx5LCB0aGUgcGF0Y2ggYWRkcyBgaXA2aGRyID0gaXB2Nl9oZHIoc2tiKTtgIGFmdGVyIHRoZSBgcHNrYl9uZXR3b3JrX21heV9wdWxsYCBjYWxsIHRvIGhhbmRsZSBwb3RlbnRpYWwgcmVhbGxvY2F0aW9uIG9mIHRoZSBgc2tiLSZndDtoZWFkYC4gIEFsc28sIGl0IGNoYW5nZXMgaG93IHRoZSBJQ01QdjYgaGVhZGVyIGlzIGFjY2Vzc2VkOyB0aGUgdXNlIG9mIGBpY21wNl9oZHIoc2tiKWAgaXMgcmVwbGFjZWQuIFRoaXMgaXMgYmVjYXVzZSBvbiB0aGUgdHJhbnNtaXQgcGF0aCBgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKWAgaXNuJiMzOTt0IHZhbGlkLCBzbyBpdCBtYWtlcyBzZW5zZSB0byBkaXJlY3RseSBjYWxjdWxhdGUgaXQgZnJvbSB0aGUgSVB2NiBoZWFkZXIuIFRoZSBjYWxsZXJzIG9mIGBhbGJfZGV0ZXJtaW5lX25kYCwgd2hpY2ggYXJlIHRoZSBmb2N1c2VkIHN5bWJvbHMgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCBhbmQgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCwgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgY2hhbmdlcy4KCk5vdywgdGhlICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgZGVjaXNpb246IElzIGl0IGZ1bmN0aW9uYWw/IEFic29sdXRlbHksIGl0IGNvcnJlY3RzIGFuIGludmFsaWQgcG9pbnRlci9za2IgaGVhZGVyIGFjY2VzcyBidWcgcmVsYXRlZCB0byBJUHY2IHRyYW5zbWl0IG92ZXIgYm9uZGluZyBBTEIvVExCIGludGVyZmFjZXMuIElzIGl0IHJlYWNoYWJsZT8gWWVzLCBib25kaW5nIGlzIHB1cmVseSBzb2Z0d2FyZS4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpGaW5hbGx5LCB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycyBmb3IgYHNldC1yZXN1bHRzYDoKCiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgCiogICBgUmVhc29uaW5nYDogVGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nIGJlY2F1c2UgaXQgZml4ZXMgYSBjcml0aWNhbCBidWcgaW4gdGhlIHBhcnNpbmcgb2YgSUNNUHY2IE5laWdoYm91ciBBZHZlcnRpc2VtZW50L1NvbGljaXRhdGlvbiBwYWNrZXRzIGR1cmluZyB0cmFuc21pdCBpbiBib25kaW5nIEFMQiBhbmQgVExCIG1vZGVzLiBJdCBjb3JyZWN0cyBhIGhlYWRlciBvZmZzZXQgY2FsY3VsYXRpb24gYWZ0ZXIgdGhlIGBwc2tiX3B1bGxgIGNhbGwsIGFkZHJlc3NpbmcgYW4gaW52YWxpZCBtZW1vcnkgYWNjZXNzLgoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtib25kX3htaXRfYWxiX3NsYXZlX2dldCYjMzQ7LCAmIzM0O2JvbmRfeG1pdF90bGJfc2xhdmVfZ2V0JiMzNDssICYjMzQ7Ym9uZF9hbGJfeG1pdCYjMzQ7LCAmIzM0O2JvbmRfdGxiX3htaXQmIzM0O11gCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtCT05ESU5HJiMzNDssICYjMzQ7SU5FVCYjMzQ7LCAmIzM0O0lQVjYmIzM0OywgJiMzNDtORVRfQ09SRSYjMzQ7XWAKCk9rYXksIGFsbCB0aGUgcGFyYW1ldGVycyBhcmUgc2V0LiBJJiMzOTttIGNvbmZpZGVudCBpbiBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCT05ESU5HJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtORVRfQ09SRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0JiMzNDssCiAgICAmIzM0O2JvbmRfeG1pdF90bGJfc2xhdmVfZ2V0JiMzNDssCiAgICAmIzM0O2JvbmRfYWxiX3htaXQmIzM0OywKICAgICYjMzQ7Ym9uZF90bGJfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBwYWNrZXQgaGVhZGVyIHBhcnNpbmcgZm9yIElQdjYgTmVpZ2hib3IgRGlzY292ZXJ5IChORCkgcGFja2V0cyBkdXJpbmcgdHJhbnNtaXQgbG9hZCBiYWxhbmNpbmcgaW4gYm9uZGluZyBBTEIgYW5kIFRMQiBtb2RlcyAoYWxiX2RldGVybWluZV9uZCkuIFByZXZpb3VzbHksIGl0IHVzZWQgaWNtcDZfaGRyKHNrYikgKHdoaWNoIHJlbGllcyBvbiBza2JfdHJhbnNwb3J0X2hlYWRlciwgbm90IG5lY2Vzc2FyaWx5IHNldCBvbiB0aGUgVFggcGF0aCkgYW5kIGRpZG4mIzM5O3QgcmVsb2FkIHRoZSBJUHY2IGhlYWRlciBwb2ludGVyIGFmdGVyIHBza2JfbmV0d29ya19tYXlfcHVsbCByZWFsbG9jYXRpb25zLiBUaGlzIGZ1bmN0aW9uYWwgZml4IGFmZmVjdHMgcGFja2V0IHRyYW5zbWlzc2lvbiBvdmVyIGJvbmRpbmcgdmlydHVhbCBpbnRlcmZhY2VzIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCT05ESU5HJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtORVRfQ09SRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0JiMzNDssCiAgICAmIzM0O2JvbmRfeG1pdF90bGJfc2xhdmVfZ2V0JiMzNDssCiAgICAmIzM0O2JvbmRfYWxiX3htaXQmIzM0OywKICAgICYjMzQ7Ym9uZF90bGJfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBwYWNrZXQgaGVhZGVyIHBhcnNpbmcgZm9yIElQdjYgTmVpZ2hib3IgRGlzY292ZXJ5IChORCkgcGFja2V0cyBkdXJpbmcgdHJhbnNtaXQgbG9hZCBiYWxhbmNpbmcgaW4gYm9uZGluZyBBTEIgYW5kIFRMQiBtb2RlcyAoYWxiX2RldGVybWluZV9uZCkuIFByZXZpb3VzbHksIGl0IHVzZWQgaWNtcDZfaGRyKHNrYikgKHdoaWNoIHJlbGllcyBvbiBza2JfdHJhbnNwb3J0X2hlYWRlciwgbm90IG5lY2Vzc2FyaWx5IHNldCBvbiB0aGUgVFggcGF0aCkgYW5kIGRpZG4mIzM5O3QgcmVsb2FkIHRoZSBJUHY2IGhlYWRlciBwb2ludGVyIGFmdGVyIHBza2JfbmV0d29ya19tYXlfcHVsbCByZWFsbG9jYXRpb25zLiBUaGlzIGZ1bmN0aW9uYWwgZml4IGFmZmVjdHMgcGFja2V0IHRyYW5zbWlzc2lvbiBvdmVyIGJvbmRpbmcgdmlydHVhbCBpbnRlcmZhY2VzIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMzoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGFsYl9kZXRlcm1pbmVfbmQoKWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY2AgdG8gY29tcHV0ZSB0aGUgSUNNUHY2IGhlYWRlciBsb2NhdGlvbiBkaXJlY3RseSBmb2xsb3dpbmcgdGhlIElQdjYgaGVhZGVyIChgKGNvbnN0IHN0cnVjdCBpY21wNmhkciAqKShpcDZoZHIgJiM0MzsgMSlgKSBpbnN0ZWFkIG9mIGludm9raW5nIGBpY21wNl9oZHIoc2tiKWAgKHdoaWNoIHJlbGllcyBvbiBgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKWAgYmVpbmcgaW5pdGlhbGl6ZWQpLiBJdCBhbHNvIGRyb3BzIGFuIHVudXNlZCBgYm9uZGAgcGFyYW1ldGVyLlxuXG5UaGUgcGFja2V0IHBheWxvYWQgYnl0ZXMgcmVhZCBieSB0aGlzIGZ1bmN0aW9uIGFyZSB2ZXJpZmllZCB0byBleGlzdCBpbiB0aGUgbGluZWFyIGJ1ZmZlciB1c2luZyBgcHNrYl9uZXR3b3JrX21heV9wdWxsKClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIEFueSBwb3RlbnRpYWwgYnVmZmVyIGJvdW5kcyBvciBza2IgZGVyZWZlcmVuY2UgaXNzdWVzIGluIHRoaXMgcGF0aCBhcmUgY292ZXJlZCBieSBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRkOGQ2MjU4ODNjNzNlM2EwODEwMmQ4MTM5NDE2MjVhYjJmMTg5YjQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDAzOjExOjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCmluZGV4IDgzOWY3NDgyZGMxODIuLjUwNzNhZWViYTZjOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKQEAgLTEyODEsMTAgJiM0MzsxMjgxLDEwIEBAIHN0YXRpYyBpbnQgYWxiX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdm9pZCAqYWRkcikKIH0KIAogLyogZGV0ZXJtaW5lIGlmIHRoZSBwYWNrZXQgaXMgTkEgb3IgTlMgKi8KLXN0YXRpYyBib29sIGFsYl9kZXRlcm1pbmVfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQpCiYjNDM7c3RhdGljIGJvb2wgYWxiX2RldGVybWluZV9uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBpcHY2aGRyICppcDZoZHI7Ci0Jc3RydWN0IGljbXA2aGRyICpoZHI7CiYjNDM7CWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoZHI7CiYjNDM7CWNvbnN0IHN0cnVjdCBpY21wNmhkciAqaGRyOwogCiAJaWYgKCFwc2tiX25ldHdvcmtfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwNmhkcikpKQogCQlyZXR1cm4gdHJ1ZTsKQEAgLTEyOTYsNyAmIzQzOzEyOTYsOCBAQCBzdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKQogCWlmICghcHNrYl9uZXR3b3JrX21heV9wdWxsKHNrYiwgc2l6ZW9mKCppcDZoZHIpICYjNDM7IHNpemVvZigqaGRyKSkpCiAJCXJldHVybiB0cnVlOwogCi0JaGRyID0gaWNtcDZfaGRyKHNrYik7CiYjNDM7CWlwNmhkciA9IGlwdjZfaGRyKHNrYik7CiYjNDM7CWhkciA9IChjb25zdCBzdHJ1Y3QgaWNtcDZoZHIgKikoaXA2aGRyICYjNDM7IDEpOwogCXJldHVybiBoZHItJmd0O2ljbXA2X3R5cGUgPT0gTkRJU0NfTkVJR0hCT1VSX0FEVkVSVElTRU1FTlQgfHwKIAkJaGRyLSZndDtpY21wNl90eXBlID09IE5ESVNDX05FSUdIQk9VUl9TT0xJQ0lUQVRJT047CiB9CkBAIC0xMzgxLDcgJiM0MzsxMzgyLDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwKIAlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLSZndDtoX2Rlc3QpKSB7CiAJCXN3aXRjaCAoc2tiLSZndDtwcm90b2NvbCkgewogCQljYXNlIGh0b25zKEVUSF9QX0lQVjYpOgotCQkJaWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiLCBib25kKSkKJiM0MzsJCQlpZiAoYWxiX2RldGVybWluZV9uZChza2IpKQogCQkJCWJyZWFrOwogCQkJZmFsbHRocm91Z2g7CiAJCWNhc2UgaHRvbnMoRVRIX1BfSVApOgpAQCAtMTQ2Nyw3ICYjNDM7MTQ2OCw3IEBAIHN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsCiAJCQlicmVhazsKIAkJfQogCi0JCWlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYiwgYm9uZCkpIHsKJiM0MzsJCWlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYikpIHsKIAkJCWRvX3R4X2JhbGFuY2UgPSBmYWxzZTsKIAkJCWJyZWFrOwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTQwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IGJvbmRfYWxiLmMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGRpZmYuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY2AuIExvb2tzIGxpa2UgaXQmIzM5O3MgYSByZWxhdGl2ZWx5IGZvY3VzZWQgbW9kaWZpY2F0aW9uLCB3aGljaCBpcyBnb29kLiBUaGUgaW5kZXggY2hhbmdlIGNvbmZpcm1zIHRoaXMgaXMgYW4gZWRpdCBhbmQgbm90IGEgbmV3IGZpbGUuCgpOb3csIGxldCYjMzk7cyBleGFtaW5lIHRoZSBhY3R1YWwgY2hhbmdlLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBpbiB0aGUgYGFsYl9kZXRlcm1pbmVfbmRgIGZ1bmN0aW9uLiAgSXQgYXBwZWFycyB0aGUgZnVuY3Rpb24mIzM5O3Mgc2lnbmF0dXJlIGlzIHVwZGF0ZWQsIHJlbW92aW5nIGBzdHJ1Y3QgYm9uZGluZyAqYm9uZGAgZnJvbSB0aGUgYXJndW1lbnQgbGlzdC4gVGhpcyBoaW50cyBhdCBzb21lIHJlZmFjdG9yaW5nIG9yIGEgY2hhbmdlIGluIGhvdyB0aGUgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGJvbmRpbmcgY29udGV4dC4gSSBuZWVkIHRvIGtlZXAgYW4gb3BlbiBtaW5kLCBhcyB0aGlzIGNvdWxkIGJlIGFuIG9wdGltaXphdGlvbiBieSByZW1vdmluZyBhbiB1bm5lY2Vzc2FyeSBhcmd1bWVudCBvciBhIGxhcmdlciBhcmNoaXRlY3R1cmFsIGFkanVzdG1lbnQuCgpMb29raW5nIGF0IHRoZSBjb2RlIGluc2lkZSB0aGUgZnVuY3Rpb24sIEkgbm90aWNlIHRoZSB1c2Ugb2YgYGlwdjZoZHJgIGFuZCBgaWNtcDZoZHJgLiAgSXQgYXBwZWFycyB3ZSBhcmUgaW5zcGVjdGluZyBJUHY2IE5laWdoYm9yIERpc2NvdmVyeSBwYWNrZXRzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlaXRoZXIgTmVpZ2hib3IgQWR2ZXJ0aXNlbWVudHMgb3IgTmVpZ2hib3IgU29saWNpdGF0aW9ucy4gVGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdhcyBwb3RlbnRpYWxseSByZXRyaWV2aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIGJvbmRpbmcgY29udGV4dCB0aGF0IGNvdWxkIGluZmx1ZW5jZSB0aGlzIHByb2Nlc3MsIHNvIHJlbW92aW5nIHRoYXQgZnJvbSB0aGUgZnVuY3Rpb24mIzM5O3Mgc2NvcGUgd2lsbCBuZWVkIHRvIGJlIHdlbGwtdW5kZXJzdG9vZC4KClRoZSBzdWJzZXF1ZW50IGNvZGUgY2hhbmdlcyBhcHBlYXIgdG8gYWxpZ24gd2l0aCByZW1vdmluZyB0aGUgYGJvbmRgIHN0cnVjdC4gSXQgbG9va3MgbGlrZSB0aGUgYGlwdjZoZHJgIGFuZCBgaWNtcDZoZHJgIHBvaW50ZXJzIGFyZSBub3cgY2FzdCBhcyBgY29uc3RgLCB3aGljaCBpcyBhIGdvb2QgcHJhY3RpY2UgZm9yIHJlYWQtb25seSBhY2Nlc3MuIEl0IGFwcGVhcnMgd2UgYXJlIGFjY2Vzc2luZyB0aGUgaGVhZGVycyB1c2luZyBgaXB2Nl9oZHJgIGFuZCB1c2luZyBwb2ludGVyIGFyaXRobWV0aWMgdG8gYWNjZXNzIHRoZSBgaWNtcDZfaGRyYC4gVGhpcyBpcyBzdGFuZGFyZCBwcmFjdGljZSwgc28gdGhlIG1vZGlmaWNhdGlvbiBpcyBhIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIG9mIHRoZSBpbnRlbnRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGFzc3VtcHRpb25zIGJlaGluZCB0aGlzIGNhbGN1bGF0aW9uIGFyZSBub3QgYnJva2VuLiBBbHNvLCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZXMgbmV3IHBvdGVudGlhbCBzZWN1cml0eSBpc3N1ZXMgb3IgbG9naWMgZXJyb3JzLgoKSSYjMzk7bSBtYWtpbmcgYSBtZW50YWwgbm90ZSB0aGF0IHRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byBJUHY2IE5laWdoYm9yIERpc2NvdmVyeSBhbmQgaG93IHRoaXMgYm9uZGluZyBkcml2ZXIgaGFuZGxlcyB0aG9zZSBwYWNrZXRzLiBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBib25kaW5nIGNvbnRleHQgaXMgdXRpbGl6ZWQgZWxzZXdoZXJlIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBhcmd1bWVudCByZW1vdmFsIGlzIHNhZmUuIFVsdGltYXRlbHksIEkgbmVlZCB0byB0cmFjZSBiYWNrIHRvIHdoZXJlIHRoaXMgYGFsYl9kZXRlcm1pbmVfbmRgIGlzIGNhbGxlZCB0byBmdWxseSBncmFzcCB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIHBhdGNoLiBMZXQgbWUgY2hlY2sgdGhlIGNvbnRleHQgYXJvdW5kIGxpbmUgMTI4MSBpbiBgYm9uZF9hbGIuY2AgdG8gZ2FpbiBmdXJ0aGVyIGNsYXJpdHkgYWJvdXQgdGhlIHB1cnBvc2Ugb2YgdGhlc2UgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNzU6XHRcdFx0XHRcdCAgcm9sbGJhY2tfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZWFkZHJfbGVuKTtcbjEyNzY6XHRcdFx0ZGV2X3NldF9tYWNfYWRkcmVzcyhyb2xsYmFja19zbGF2ZS1cdTAwM2VkZXYsIFx1MDAyNnNzLCBOVUxMKTtcbjEyNzc6XHRcdFx0ZGV2X2FkZHJfc2V0KHJvbGxiYWNrX3NsYXZlLVx1MDAzZWRldiwgdG1wX2FkZHIpO1xuMTI3ODpcdFx0fVxuMTI3OTpcdFxuMTI4MDpcdFx0cmV0dXJuIHJlcztcbjEyODE6XHR9XG4xMjgyOlx0XG4xMjgzOlx0LyogZGV0ZXJtaW5lIGlmIHRoZSBwYWNrZXQgaXMgTkEgb3IgTlMgKi9cbjEyODQ6XHRzdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IpXG4xMjg1Olx0e1xuMTI4NjpcdFx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNmhkcjtcbjEyODc6XHRcdGNvbnN0IHN0cnVjdCBpY21wNmhkciAqaGRyO1xuMTI4ODpcdFxuMTI4OTpcdFx0aWYgKCFwc2tiX25ldHdvcmtfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwNmhkcikpKVxuMTI5MDpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjEyOTE6XHRcbjEyOTI6XHRcdGlwNmhkciA9IGlwdjZfaGRyKHNrYik7XG4xMjkzOlx0XHRpZiAoaXA2aGRyLVx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19JQ01QVjYpXG4xMjk0Olx0XHRcdHJldHVybiBmYWxzZTtcbjEyOTU6XHRcbjEyOTY6XHRcdGlmICghcHNrYl9uZXR3b3JrX21heV9wdWxsKHNrYiwgc2l6ZW9mKCppcDZoZHIpICYjNDM7IHNpemVvZigqaGRyKSkpXG4xMjk3Olx0XHRcdHJldHVybiB0cnVlO1xuMTI5ODpcdFxuMTI5OTpcdFx0aXA2aGRyID0gaXB2Nl9oZHIoc2tiKTtcbjEzMDA6XHRcdGhkciA9IChjb25zdCBzdHJ1Y3QgaWNtcDZoZHIgKikoaXA2aGRyICYjNDM7IDEpO1xuMTMwMTpcdFx0cmV0dXJuIGhkci1cdTAwM2VpY21wNl90eXBlID09IE5ESVNDX05FSUdIQk9VUl9BRFZFUlRJU0VNRU5UIHx8XG4xMzAyOlx0XHRcdGhkci1cdTAwM2VpY21wNl90eXBlID09IE5ESVNDX05FSUdIQk9VUl9TT0xJQ0lUQVRJT047XG4xMzAzOlx0fVxuMTMwNDpcdFxuMTMwNTpcdC8qKioqKioqKioqKioqKioqKioqKioqKiogZXhwb3J0ZWQgYWxiIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKiovXG4xMzA2Olx0XG4xMzA3Olx0aW50IGJvbmRfYWxiX2luaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQsIGludCBybGJfZW5hYmxlZClcbjEzMDg6XHR7XG4xMzA5Olx0XHRpbnQgcmVzO1xuMTMxMDpcdFxuMTMxMTpcdFx0cmVzID0gdGxiX2luaXRpYWxpemUoYm9uZCk7XG4xMzEyOlx0XHRpZiAocmVzKVxuMTMxMzpcdFx0XHRyZXR1cm4gcmVzO1xuMTMxNDpcdFxuMTMxNTpcdFx0aWYgKHJsYl9lbmFibGVkKSB7XG4xMzE2Olx0XHRcdHJlcyA9IHJsYl9pbml0aWFsaXplKGJvbmQpO1xuMTMxNzpcdFx0XHRpZiAocmVzKSB7XG4xMzE4Olx0XHRcdFx0dGxiX2RlaW5pdGlhbGl6ZShib25kKTtcbjEzMTk6XHRcdFx0XHRyZXR1cm4gcmVzO1xuMTMyMDpcdFx0XHR9XG4xMzIxOlx0XHRcdGJvbmQtXHUwMDNlYWxiX2luZm8ucmxiX2VuYWJsZWQgPSAxO1xuMTMyMjpcdFx0fSBlbHNlIHtcbjEzMjM6XHRcdFx0Ym9uZC1cdTAwM2VhbGJfaW5mby5ybGJfZW5hYmxlZCA9IDA7XG4xMzI0Olx0XHR9XG4xMzI1Olx0XG4xMzI2Olx0XHRyZXR1cm4gMDtcbjEzMjc6XHR9XG4xMzI4Olx0XG4xMzI5Olx0dm9pZCBib25kX2FsYl9kZWluaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4xMzMwOlx0e1xuMTMzMTpcdFx0c3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbyA9IFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcbjEzMzI6XHRcbjEzMzM6XHRcdHRsYl9kZWluaXRpYWxpemUoYm9uZCk7XG4xMzM0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MDcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gSUNNUHY2IEhlYWRlciBNYW5pcHVsYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlIGtlcm5lbCBjb2RlIGhhbmRsZXMgSUNNUHY2IGhlYWRlcnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQmIzM5O3MgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB1c2luZyBgaWNtcDZfaGRyKHNrYilgIGFuZCBzaW1wbHkgb2Zmc2V0dGluZyBmcm9tIHRoZSBJUHY2IGhlYWRlciB3aXRoIGAoaXA2aGRyICYjNDM7IDEpYD8mIzM0OyBJIHN1c3BlY3QgdGhlcmUmIzM5O3MgYSBnb29kIHJlYXNvbiBmb3IgdXNpbmcgdGhlIGZ1bmN0aW9uLCBwcm9iYWJseSByZWxhdGVkIHRvIHJvYnVzdG5lc3Mgb3Igc29tZSBudWFuY2VkIGhhbmRsaW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kLiAgSSB3YW50IHRvIGtub3cgaWYgdGhlcmUgaXMgYSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlc2UgdHdvIGRlZmluaXRpb25zLgoKVGltZSB0byBjdXQgdG8gdGhlIGNoYXNlIGFuZCBmaW5kIHRoZSBhY3R1YWwgZGVmaW5pdGlvbiBvZiBgaWNtcDZfaGRyYC4gSSYjMzk7bGwgcnVuIGEgYGdyZXBgIHRvIHF1aWNrbHkgbG9jYXRlIHdoZXJlIHRoYXQgbWFjcm8gb3IgZnVuY3Rpb24gaXMgZGVmaW5lZC4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhpcyBpcyBkb25lIHRoZSB3YXkgaXQgaXMuIFRoZSBhbnN3ZXIgaXMgbGlrZWx5IHRoZXJlIGluIHRoZSBjb2RlIGNvbW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ljbXA2X2hkclxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9hbXQuYz04MDg9c3RhdGljIHN0cnVjdCBza19idWZmICphbXRfYnVpbGRfbWxkX2dxKHN0cnVjdCBhbXRfZGV2ICphbXQpXG4tLVxuZHJpdmVycy9uZXQvYW10LmMtODU2LVx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbmRyaXZlcnMvbmV0L2FtdC5jOjg1NzpcdG1sZDJxXHRcdFx0PSAoc3RydWN0IG1sZDJfcXVlcnkgKilpY21wNl9oZHIoc2tiKTtcbmRyaXZlcnMvbmV0L2FtdC5jLTg1OC1cdG1sZDJxLVx1MDAzZW1sZDJxX21yY1x0PSBodG9ucygxKTtcbi0tXG5kcml2ZXJzL25ldC9hbXQuYz0yMTEzPXN0YXRpYyB2b2lkIGFtdF9tbGR2MV9yZXBvcnRfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L2FtdC5jLTIxMTUte1xuZHJpdmVycy9uZXQvYW10LmM6MjExNjpcdHN0cnVjdCBtbGRfbXNnICptbGQgPSAoc3RydWN0IG1sZF9tc2cgKilpY21wNl9oZHIoc2tiKTtcbmRyaXZlcnMvbmV0L2FtdC5jLTIxMTctXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7XG4tLVxuZHJpdmVycy9uZXQvYW10LmM9MjE1MD1zdGF0aWMgdm9pZCBhbXRfbWxkdjFfbGVhdmVfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L2FtdC5jLTIxNTIte1xuZHJpdmVycy9uZXQvYW10LmM6MjE1MzpcdHN0cnVjdCBtbGRfbXNnICptbGQgPSAoc3RydWN0IG1sZF9tc2cgKilpY21wNl9oZHIoc2tiKTtcbmRyaXZlcnMvbmV0L2FtdC5jLTIxNTQtXHRzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpO1xuLS1cbmRyaXZlcnMvbmV0L2FtdC5jPTIxNjk9c3RhdGljIHZvaWQgYW10X21sZHYyX3JlcG9ydF9oYW5kbGVyKHN0cnVjdCBhbXRfZGV2ICphbXQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvYW10LmMtMjE3MS17XG5kcml2ZXJzL25ldC9hbXQuYzoyMTcyOlx0c3RydWN0IG1sZDJfcmVwb3J0ICptbGQyciA9IChzdHJ1Y3QgbWxkMl9yZXBvcnQgKilpY21wNl9oZHIoc2tiKTtcbmRyaXZlcnMvbmV0L2FtdC5jLTIxNzMtXHRpbnQgbGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSAmIzQzOyBzaXplb2YoKm1sZDJyKTtcbi0tXG5kcml2ZXJzL25ldC9hbXQuYz0yMjQ3PXN0YXRpYyB2b2lkIGFtdF9tbGRfcmVwb3J0X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9hbXQuYy0yMjQ5LXtcbmRyaXZlcnMvbmV0L2FtdC5jOjIyNTA6XHRzdHJ1Y3QgbWxkX21zZyAqbWxkID0gKHN0cnVjdCBtbGRfbXNnICopaWNtcDZfaGRyKHNrYik7XG5kcml2ZXJzL25ldC9hbXQuYy0yMjUxLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM9MTI5OD1zdGF0aWMgYm9vbCBiZV9zZW5kX3BrdF90b19ibWMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYy0xMzIyLVx0XHRpZiAobmV4dGhkciA9PSBJUFBST1RPX0lDTVBWNikge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYzoxMzIzOlx0XHRcdHN0cnVjdCBpY21wNmhkciAqaWNtcDYgPSBpY21wNl9oZHIoKCpza2IpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMtMTMyNC1cbi0tXG5pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oLTgtXG5pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oOjk6c3RhdGljIGlubGluZSBzdHJ1Y3QgaWNtcDZoZHIgKmljbXA2X2hkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9pY21wdjYuaC0xMC17XG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9MTAzNT1zdGF0aWMgYm9vbCBiYXRhZHZfbWNhc3RfaXNfcmVwb3J0X2lwdjYoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMDM5LVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6MTA0MDpcdHN3aXRjaCAoaWNtcDZfaGRyKHNrYiktXHUwMDNlaWNtcDZfdHlwZSkge1xubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTA0MS1cdGNhc2UgSUNNUFY2X01HTV9SRVBPUlQ6XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xMDY4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYnJfaXA2X211bHRpY2FzdF9hbGxvY19xdWVyeShzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTE2OS1cdGNhc2UgMTpcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTE3MDpcdFx0bWxkcSA9IChzdHJ1Y3QgbWxkX21zZyAqKWljbXA2X2hkcihza2IpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xMTcxLVx0XHRtbGRxLVx1MDAzZW1sZF90eXBlID0gSUNNUFY2X01HTV9RVUVSWTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTExODAtXHRjYXNlIDI6XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjExODE6XHRcdG1sZDJxID0gKHN0cnVjdCBtbGQyX3F1ZXJ5ICopaWNtcDZfaGRyKHNrYik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTExODItXHRcdG1sZDJxLVx1MDAzZW1sZDJxX21yYyA9IGh0b25zKG1sZHYyX21yYyhqaWZmaWVzX3RvX21zZWNzKGludGVydmFsKSkpO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MzAyNT1zdGF0aWMgaW50IGJyX2lwNl9tdWx0aWNhc3RfbWxkMl9yZXBvcnQoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTMwNDUtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjMwNDY6XHRtbGQyciA9IChzdHJ1Y3QgbWxkMl9yZXBvcnQgKilpY21wNl9oZHIoc2tiKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzA0Ny1cdG51bSA9IG50b2hzKG1sZDJyLVx1MDAzZW1sZDJyX25ncmVjKTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTM2MjQ9c3RhdGljIGludCBicl9pcDZfbXVsdGljYXN0X3F1ZXJ5KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zNjUxLVx0XHR9XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjM2NTI6XHRcdG1sZCA9IChzdHJ1Y3QgbWxkX21zZyAqKSBpY21wNl9oZHIoc2tiKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzY1My1cdFx0bWF4X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcyhudG9ocyhtbGQtXHUwMDNlbWxkX21heGRlbGF5KSk7XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zNjYwLVx0XHR9XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjM2NjE6XHRcdG1sZDJxID0gKHN0cnVjdCBtbGQyX3F1ZXJ5ICopaWNtcDZfaGRyKHNrYik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM2NjItXHRcdGlmICghbWxkMnEtXHUwMDNlbWxkMnFfbnNyY3MpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0zOTkwPXN0YXRpYyB2b2lkIGJyX2lwNl9tdWx0aWNhc3RfbXJkX3JjdihzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzk5My17XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjM5OTQ6XHRpZiAoaWNtcDZfaGRyKHNrYiktXHUwMDNlaWNtcDZfdHlwZSAhPSBJQ01QVjZfTVJESVNDX0FEVilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzk5NS1cdFx0cmV0dXJuO1xuLS1cbm5ldC9pcHY0L3BpbmcuYz00ODQ9dm9pZCBwaW5nX2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCB1MzIgaW5mbylcbi0tXG5uZXQvaXB2NC9waW5nLmMtNTAyLVx0XHRmYW1pbHkgPSBBRl9JTkVUNjtcbm5ldC9pcHY0L3BpbmcuYzo1MDM6XHRcdHR5cGUgPSBpY21wNl9oZHIoc2tiKS1cdTAwM2VpY21wNl90eXBlO1xubmV0L2lwdjQvcGluZy5jOjUwNDpcdFx0Y29kZSA9IGljbXA2X2hkcihza2IpLVx1MDAzZWljbXA2X2NvZGU7XG5uZXQvaXB2NC9waW5nLmMtNTA1LVx0XHRpY21waCA9IChzdHJ1Y3QgaWNtcGhkciAqKSAoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2Zmc2V0KTtcbi0tXG5uZXQvaXB2Ni9kYXRhZ3JhbS5jPTI5Nj1zdGF0aWMgdm9pZCBpcHY2X2ljbXBfZXJyb3JfcmZjNDg4NChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L2RhdGFncmFtLmMtMjk4LXtcbm5ldC9pcHY2L2RhdGFncmFtLmM6Mjk5Olx0c3dpdGNoIChpY21wNl9oZHIoc2tiKS1cdTAwM2VpY21wNl90eXBlKSB7XG5uZXQvaXB2Ni9kYXRhZ3JhbS5jLTMwMC1cdGNhc2UgSUNNUFY2X1RJTUVfRVhDRUVEOlxuLS1cbm5ldC9pcHY2L2RhdGFncmFtLmMtMzAyLVx0XHRpcF9pY21wX2Vycm9yX3JmYzQ4ODQoc2tiLCBvdXQsIHNpemVvZihzdHJ1Y3QgaWNtcDZoZHIpLFxubmV0L2lwdjYvZGF0YWdyYW0uYzozMDM6XHRcdFx0XHQgICAgICBpY21wNl9oZHIoc2tiKS1cdTAwM2VpY21wNl9kYXRhZ3JhbV9sZW4gKiA4KTtcbm5ldC9pcHY2L2RhdGFncmFtLmMtMzA0LVx0fVxuLS1cbm5ldC9pcHY2L2RhdGFncmFtLmM9MzA3PXZvaWQgaXB2Nl9pY21wX2Vycm9yKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycixcbi0tXG5uZXQvaXB2Ni9kYXRhZ3JhbS5jLTMwOS17XG5uZXQvaXB2Ni9kYXRhZ3JhbS5jOjMxMDpcdHN0cnVjdCBpY21wNmhkciAqaWNtcGggPSBpY21wNl9oZHIoc2tiKTtcbm5ldC9pcHY2L2RhdGFncmFtLmMtMzExLVx0c3RydWN0IHNvY2tfZXh0ZXJyX3NrYiAqc2Vycjtcbi0tXG5uZXQvaXB2Ni9pY21wLmM9Mjc2PXZvaWQgaWNtcHY2X3B1c2hfcGVuZGluZ19mcmFtZXMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k2ICpmbDYsXG4tLVxubmV0L2lwdjYvaWNtcC5jLTI4NS1cbm5ldC9pcHY2L2ljbXAuYzoyODY6XHRpY21wNmggPSBpY21wNl9oZHIoc2tiKTtcbm5ldC9pcHY2L2ljbXAuYy0yODctXHRtZW1jcHkoaWNtcDZoLCB0aGRyLCBzaXplb2Yoc3RydWN0IGljbXA2aGRyKSk7XG4tLVxubmV0L2lwdjYvaWNtcC5jPTkyMT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gaWNtcHY2X2VjaG9fcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9pY21wLmMtOTI3LVx0Y29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciA9IE5VTEw7XG5uZXQvaXB2Ni9pY21wLmM6OTI4Olx0c3RydWN0IGljbXA2aGRyICppY21waCA9IGljbXA2X2hkcihza2IpO1xubmV0L2lwdjYvaWNtcC5jLTkyOS1cdGJvb2wgYXBwbHlfcmF0ZWxpbWl0ID0gZmFsc2U7XG4tLVxubmV0L2lwdjYvaWNtcC5jPTExMDE9c3RhdGljIGludCBpY21wdjZfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvaWNtcC5jLTExNDYtXG5uZXQvaXB2Ni9pY21wLmM6MTE0NzpcdGhkciA9IGljbXA2X2hkcihza2IpO1xubmV0L2lwdjYvaWNtcC5jLTExNDgtXG4tLVxubmV0L2lwdjYvaWNtcC5jLTExNzYtXHRcdFx0Z290byBkaXNjYXJkX2l0O1xubmV0L2lwdjYvaWNtcC5jOjExNzc6XHRcdGhkciA9IGljbXA2X2hkcihza2IpO1xubmV0L2lwdjYvaWNtcC5jLTExNzgtXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jPTE5MjQ9c3RydWN0IHNrX2J1ZmYgKl9faXA2X21ha2Vfc2tiKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTk5OC1cdFx0ZWxzZVxubmV0L2lwdjYvaXA2X291dHB1dC5jOjE5OTk6XHRcdFx0aWNtcDZfdHlwZSA9IGljbXA2X2hkcihza2IpLVx1MDAzZWljbXA2X3R5cGU7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMjAwMC1cdFx0SUNNUDZNU0dPVVRfSU5DX1NUQVRTKG5ldCwgaWRldiwgaWNtcDZfdHlwZSk7XG4tLVxubmV0L2lwdjYvbWNhc3QuYz0xNDI2PXN0YXRpYyB2b2lkIF9fbWxkX3F1ZXJ5X3dvcmsoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jLTE0NjEtXG5uZXQvaXB2Ni9tY2FzdC5jOjE0NjI6XHRtbGQgPSAoc3RydWN0IG1sZF9tc2cgKilpY21wNl9oZHIoc2tiKTtcbm5ldC9pcHY2L21jYXN0LmMtMTQ2My1cdGdyb3VwID0gbWxkLVx1MDAzZW1sZF9tY2E7XG4tLVxubmV0L2lwdjYvbWNhc3QuYz0xNjA2PXN0YXRpYyB2b2lkIF9fbWxkX3JlcG9ydF93b3JrKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvbWNhc3QuYy0xNjI0LVxubmV0L2lwdjYvbWNhc3QuYzoxNjI1Olx0bWxkID0gKHN0cnVjdCBtbGRfbXNnICopaWNtcDZfaGRyKHNrYik7XG5uZXQvaXB2Ni9tY2FzdC5jLTE2MjYtXG4tLVxubmV0L2lwdjYvbmRpc2MuYz00Njk9dm9pZCBuZGlzY19zZW5kX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxuLS1cbm5ldC9pcHY2L25kaXNjLmMtNDcxLXtcbm5ldC9pcHY2L25kaXNjLmM6NDcyOlx0c3RydWN0IGljbXA2aGRyICppY21wNmggPSBpY21wNl9oZHIoc2tiKTtcbm5ldC9pcHY2L25kaXNjLmMtNDczLVx0c3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiX2RzdChza2IpO1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X05QVC5jPTgwPXN0YXRpYyBzdHJ1Y3QgaXB2NmhkciAqaWNtcHY2X2JvdW5jZWRfaXB2NmhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X05QVC5jLTg1LVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTlBULmM6ODY6XHRpZiAoIWljbXB2Nl9pc19lcnIoaWNtcDZfaGRyKHNrYiktXHUwMDNlaWNtcDZfdHlwZSkpXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9OUFQuYy04Ny1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L2lwdjYvcm91dGUuYz0zMjM4PXZvaWQgaXA2X3JlZGlyZWN0X25vX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsIGludCBvaWYpXG4tLVxubmV0L2lwdjYvcm91dGUuYy0zMjQwLVx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7XG5uZXQvaXB2Ni9yb3V0ZS5jOjMyNDE6XHRjb25zdCBzdHJ1Y3QgcmRfbXNnICptc2cgPSAoc3RydWN0IHJkX21zZyAqKWljbXA2X2hkcihza2IpO1xubmV0L2lwdjYvcm91dGUuYy0zMjQyLVx0c3RydWN0IGRzdF9lbnRyeSAqZHN0O1xuLS1cbm5ldC9pcHY2L3JvdXRlLmM9NDI0MT1zdGF0aWMgdm9pZCBydDZfZG9fcmVkaXJlY3Qoc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvcm91dGUuYy00MjYwLVxubmV0L2lwdjYvcm91dGUuYzo0MjYxOlx0bXNnID0gKHN0cnVjdCByZF9tc2cgKilpY21wNl9oZHIoc2tiKTtcbm5ldC9pcHY2L3JvdXRlLmMtNDI2Mi1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTM1OD1zdGF0aWMgdm9pZCB1cGRhdGVfaXB2Nl9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBsNF9wcm90byxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTM3OS1cdFx0aWYgKGxpa2VseSh0cmFuc3BvcnRfbGVuIFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBpY21wNmhkcikpKVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYzozODA6XHRcdFx0aW5ldF9wcm90b19jc3VtX3JlcGxhY2UxNihcdTAwMjZpY21wNl9oZHIoc2tiKS1cdTAwM2VpY21wNl9ja3N1bSxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMzgxLVx0XHRcdFx0XHRcdCAgc2tiLCBhZGRyLCBuZXdfYWRkciwgdHJ1ZSk7XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYz01NTA9c3RhdGljIGludCBwYXJzZV9pY21wdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy01NTIte1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYzo1NTM6XHRzdHJ1Y3QgaWNtcDZoZHIgKmljbXAgPSBpY21wNl9oZHIoc2tiKTtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtNTU0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDUyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiwgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHN0YXJ0aW5nIHBvaW50OgoKKipEaXZpbmcgaW50byB0aGUgSUNNUHY2IEhlYWRlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZSBjb2RlIHRoYXQmIzM5O3MgZGVhbGluZyB3aXRoIElDTVB2NiBwYWNrZXRzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoZWFkZXIgaXMgYmVpbmcgYWNjZXNzZWQuIFRoZSBpbml0aWFsIHN0ZXAgaXMgdXNpbmcgYGljbXA2X2hkcihza2IpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIGxldCYjMzk7cyB0cmFjZSB0aGlzIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuJiMzNDsgVGhpcyBwcm9iYWJseSByZXRyaWV2ZXMgdGhlIHBvaW50ZXIgdG8gdGhlIElDTVB2NiBoZWFkZXIuCgpUaGUgbmV4dCBzdGVwIGlzIHRvIHNlZSBob3cgYGljbXA2X2hkcihza2IpYCBkb2VzIHRoYXQ6IGl0IGNhbGxzIGBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGZldGNoaW5nIHRoZSB0cmFuc3BvcnQgbGF5ZXIgaGVhZGVyICh3aGljaCBpbiBJUHY2LCBmb3IgSUNNUHY2LCB3b3VsZCBiZSB0aGUgSUNNUHY2IGhlYWRlcikuIFRoYXQgbWFrZXMgc2Vuc2Ug4oCTIHRoZSBTS0IgKFNvY2tldCBCdWZmZXIpIHByb2JhYmx5IGNvbnRhaW5zIHRoZSB3aG9sZSBwYWNrZXQsIGFuZCB0aGlzIGZ1bmN0aW9uIGhlbHBzIHBpbnBvaW50IHRoZSBoZWFkZXImIzM5O3MgbG9jYXRpb24gd2l0aGluIHRoZSBkYXRhIHN0cnVjdHVyZS4KCk5vdywgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBhbmQgYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTttIGdvaW5nIHRvIGNvbnN1bHQgdGhlIGRlZmluaXRpb24gb2YgYGljbXA2X2hkcmAgYW5kIHJlbGF0ZWQgc3RydWN0cy4gSSBuZWVkIHRvIGNoZWNrIHRoZSBpbmNsdWRlIGZpbGVzIHRvIGNvbmZpcm0gdGhlIGRhdGEgbGF5b3V0IGFuZCBmaWVsZCBkZWZpbml0aW9ucyBpbiBgaW5jbHVkZS9saW51eC9pY21wdjYuaGAuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBlbnN1cmUgbXkgYW5hbHlzaXMgaXMgY29ycmVjdC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaWNtcHY2LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuICAgMjpcdCNpZm5kZWYgX0xJTlVYX0lDTVBWNl9IXG4gICAzOlx0I2RlZmluZSBfTElOVVhfSUNNUFY2X0hcbiAgIDQ6XHRcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvaWNtcHY2LmhcdTAwM2VcbiAgIDg6XHRcbiAgIDk6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBpY21wNmhkciAqaWNtcDZfaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4gIDEwOlx0e1xuICAxMTpcdFx0cmV0dXJuIChzdHJ1Y3QgaWNtcDZoZHIgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuICAxMjpcdH1cbiAgMTM6XHRcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICAxNTpcdFxuICAxNjpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuICAxNzpcdFxuICAxODpcdHZvaWQgaWNtcDZfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCB0eXBlLCB1OCBjb2RlLCBfX3UzMiBpbmZvLFxuICAxOTpcdFx0XHRjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmZvcmNlX3NhZGRyLFxuICAyMDpcdFx0XHRjb25zdCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKnBhcm0pO1xuICAyMTpcdFxuICAyMjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBpY21wdjZfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCB0eXBlLCB1OCBjb2RlLCBfX3UzMiBpbmZvKVxuICAyMzpcdHtcbiAgMjQ6XHRcdGljbXA2X3NlbmQoc2tiLCB0eXBlLCBjb2RlLCBpbmZvLCBOVUxMLCBJUDZDQihza2IpKTtcbiAgMjU6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMzkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA4MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQm9uZGVkIEludGVyZmFjZSYjMzk7cyBJUHY2IE5laWdoYm9yIERpc2NvdmVyeSBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBib25kaW5nLCBzcGVjaWZpY2FsbHkgdGhlIGBhbGJfZGV0ZXJtaW5lX25kYCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgdXNlcyBgaWNtcDZfaGRyKHNrYilgLCB3aGljaCByZWxpZXMgb24gYHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYilgLiBOb3csIHRoZSBwcm9ibGVtIGFyaXNlcyBiZWNhdXNlIGR1cmluZyB0aGUgdHJhbnNtaXNzaW9uIHBoYXNlIChsaWtlIGluIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgb3IgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCksIHRoZSB0cmFuc3BvcnQgaGVhZGVyIG9mZnNldCBpc24mIzM5O3QgYWx3YXlzIHNldCBjb3JyZWN0bHkuICBJdCBjb3VsZCBiZSB1bmluaXRpYWxpemVkIG9yIHBvaW50aW5nIHNvbWV3aGVyZSB3cm9uZy4gIE1lYW53aGlsZSwgdGhlIG5ldHdvcmsgaGVhZGVyIChgc2tiX25ldHdvcmtfaGVhZGVyYCkgKmlzKiBzZXQsIGFuZCB3ZSYjMzk7cmUgcHVsbGluZyB0aGF0IHdpdGggYHBza2JfbmV0d29ya19tYXlfcHVsbGAuCgpCZWZvcmUgdGhlIGNoYW5nZSwgdGhlIGxvZ2ljIHdhczoKMS4gIE1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IHRoZSBJUHY2IGhlYWRlciB3aXRoIGBwc2tiX25ldHdvcmtfbWF5X3B1bGxgLgoyLiAgR2V0IHRoZSBJUHY2IGhlYWRlciBhbmQgY2hlY2sgaWYgdGhlIG5leHQgaGVhZGVyIGlzIElDTVB2Ni4KMy4gIE1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IHRoZSBJUHY2IGFuZCBJQ01QdjYgaGVhZGVyIHdpdGggYW5vdGhlciBgcHNrYl9uZXR3b3JrX21heV9wdWxsYC4KNC4gIEdldCB0aGUgSUNNUHY2IGhlYWRlciB3aXRoIGBpY21wNl9oZHIoc2tiKWAgYW5kIGNoZWNrIHRoZSBJQ01QdjYgdHlwZS4KClRoZSBmbGF3PyBJZiBgc2tiX3RyYW5zcG9ydF9oZWFkZXJgIHdhc24mIzM5O3Qgc2V0LCB0aGVuIGBpY21wNl9oZHIoc2tiKWAgY291bGQgYmUgcmVhZGluZyBmcm9tICphbnl3aGVyZSogaW4gbWVtb3J5LCBwb3RlbnRpYWxseSBgc2tiLSZndDtoZWFkYCwgYHNrYi0mZ3Q7ZGF0YWAsIHNvbWUgdW5pbml0aWFsaXplZCBvZmZzZXQsIG9yIGV2ZW4gb3V0IG9mIGJvdW5kcy4gVGhlIEtBU0FOIG1pZ2h0IGJlIGNhdGNoaW5nIHRoaXMgb3V0LW9mLWJvdW5kcyByZWFkLCBidXQgaXQmIzM5O3MgYSBjcml0aWNhbCBidWcuCgpUaGUgcGF0Y2gmIzM5O3Mgc29sdXRpb24gaXMgZWxlZ2FudDogSXQgc2ltcGx5IGNhbGN1bGF0ZXMgdGhlIElDTVB2NiBoZWFkZXIgcG9pbnRlciBiYXNlZCBvbiB0aGUgSVB2NiBoZWFkZXI6IGBoZHIgPSAoY29uc3Qgc3RydWN0IGljbXA2aGRyICopKGlwNmhkciAmIzQzOyAxKWAuIFdlIGFsc28gZW5zdXJlIHRoZSBwYWNrZXQgZGF0YSBpcyB0aGVyZSB3aXRoIGBwc2tiX25ldHdvcmtfbWF5X3B1bGxgLiBUaGF0IGF2b2lkcyB0aGUgZGVwZW5kZW5jeSBvbiBgc2tiX3RyYW5zcG9ydF9oZWFkZXJgIGVudGlyZWx5LiAgQW5kIHRoZSB1bnVzZWQgYHN0cnVjdCBib25kaW5nICpib25kYCBwYXJhbWV0ZXIgaXMgcmVtb3ZlZCwgd2hpY2ggaXMgZ29vZCBjbGVhbnVwLgoKTm93LCBJIG5lZWQgdG8gdmVyaWZ5OiBkb2VzIHRoaXMgY2hhbmdlIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBMZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlOioqIE5vcGUsIHRoaXMgY29kZSBkb2VzbiYjMzk7dCBkaXJlY3RseSBzZW5kIGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuCjIuICAqKlVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNlIGluIGNvbmRpdGlvbmFsczoqKiBObywgZXZlcnl0aGluZyBpcyBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgYW5kIHB1bGxlZC4KMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbjoqKiBObywgdGhpcyBpcyBzdHJhaWdodGZvcndhcmQgcG9pbnRlciBhcml0aG1ldGljLgo0LiAgKipCb3VuZHMgY2hlY2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YToqKiBObywgdGhlIGBwc2tiX25ldHdvcmtfbWF5X3B1bGxgIGNhbGwgc2FmZWd1YXJkcyB0aGF0LgoKU28sIGZyb20gd2hhdCBJIGNhbiBzZWUsIHRoaXMgaXMgYSBzYWZlIGFuZCBjb3JyZWN0IGZpeC4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBjYWxsZXJzIGluIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbiwgYnV0IEkgZmVlbCBnb29kIGFib3V0IHRoaXMuIFRoaXMgc2hvdWxkIHJlc29sdmUgdGhlIG1lbW9yeSBhY2Nlc3MgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzNzA6XHRcbjEzNzE6XHRzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuMTM3MjpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjEzNzM6XHR7XG4xMzc0Olx0XHRzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlID0gTlVMTDtcbjEzNzU6XHRcdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhO1xuMTM3NjpcdFx0dTMyIGhhc2hfaW5kZXg7XG4xMzc3Olx0XG4xMzc4Olx0XHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuMTM3OTpcdFx0ZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7XG4xMzgwOlx0XG4xMzgxOlx0XHQvKiBEbyBub3QgVFggYmFsYW5jZSBhbnkgbXVsdGljYXN0IG9yIGJyb2FkY2FzdCAqL1xuMTM4MjpcdFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cdTAwM2VoX2Rlc3QpKSB7XG4xMzgzOlx0XHRcdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG4xMzg0Olx0XHRcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4xMzg1Olx0XHRcdFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiKSlcbjEzODY6XHRcdFx0XHRcdGJyZWFrO1xuMTM4NzpcdFx0XHRcdGZhbGx0aHJvdWdoO1xuMTM4ODpcdFx0XHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbjEzODk6XHRcdFx0XHRoYXNoX2luZGV4ID0gYm9uZF94bWl0X2hhc2goYm9uZCwgc2tiKTtcbjEzOTA6XHRcdFx0XHRpZiAoYm9uZC1cdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpIHtcbjEzOTE6XHRcdFx0XHRcdHR4X3NsYXZlID0gdGxiX2Nob29zZV9jaGFubmVsKGJvbmQsXG4xMzkyOlx0XHRcdFx0XHRcdFx0XHQgICAgICBoYXNoX2luZGV4IFx1MDAyNiAweEZGLFxuMTM5MzpcdFx0XHRcdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWxlbik7XG4xMzk0Olx0XHRcdFx0fSBlbHNlIHtcbjEzOTU6XHRcdFx0XHRcdHN0cnVjdCBib25kX3VwX3NsYXZlICpzbGF2ZXM7XG4xMzk2Olx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgY291bnQ7XG4xMzk3Olx0XG4xMzk4Olx0XHRcdFx0XHRzbGF2ZXMgPSByY3VfZGVyZWZlcmVuY2UoYm9uZC1cdTAwM2V1c2FibGVfc2xhdmVzKTtcbjEzOTk6XHRcdFx0XHRcdGNvdW50ID0gc2xhdmVzID8gUkVBRF9PTkNFKHNsYXZlcy1cdTAwM2Vjb3VudCkgOiAwO1xuMTQwMDpcdFx0XHRcdFx0aWYgKGxpa2VseShjb3VudCkpXG4xNDAxOlx0XHRcdFx0XHRcdHR4X3NsYXZlID0gc2xhdmVzLVx1MDAzZWFycltoYXNoX2luZGV4ICVcbjE0MDI6XHRcdFx0XHRcdFx0XHRcdCAgICAgICBjb3VudF07XG4xNDAzOlx0XHRcdFx0fVxuMTQwNDpcdFx0XHRcdGJyZWFrO1xuMTQwNTpcdFx0XHR9XG4xNDA2Olx0XHR9XG4xNDA3Olx0XHRyZXR1cm4gdHhfc2xhdmU7XG4xNDA4Olx0fVxuMTQwOTpcdFxuMTQxMDpcdG5ldGRldl90eF90IGJvbmRfdGxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuMTQxMTpcdHtcbjE0MTI6XHRcdHN0cnVjdCBib25kaW5nICpib25kID0gbmV0ZGV2X3ByaXYoYm9uZF9kZXYpO1xuMTQxMzpcdFx0c3RydWN0IHNsYXZlICp0eF9zbGF2ZTtcbjE0MTQ6XHRcbjE0MTU6XHRcdHR4X3NsYXZlID0gYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcbjE0MTY6XHRcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xuMTQxNzpcdH1cbjE0MTg6XHRcbjE0MTk6XHRzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuMTQyMDpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjE0MjE6XHR7XG4xNDIyOlx0XHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xuMTQyMzpcdFx0c3RhdGljIGNvbnN0IF9fYmUzMiBpcF9iY2FzdCA9IGh0b25sKDB4ZmZmZmZmZmYpO1xuMTQyNDpcdFx0c3RydWN0IHNsYXZlICp0eF9zbGF2ZSA9IE5VTEw7XG4xNDI1Olx0XHRjb25zdCB1OCAqaGFzaF9zdGFydCA9IE5VTEw7XG4xNDI2Olx0XHRib29sIGRvX3R4X2JhbGFuY2UgPSB0cnVlO1xuMTQyNzpcdFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XG4xNDI4Olx0XHR1MzIgaGFzaF9pbmRleCA9IDA7XG4xNDI5Olx0XHRpbnQgaGFzaF9zaXplID0gMDtcbjE0MzA6XHRcbjE0MzE6XHRcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4xNDMyOlx0XHRldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTtcbjE0MzM6XHRcbjE0MzQ6XHRcdHN3aXRjaCAobnRvaHMoc2tiLVx1MDAzZXByb3RvY29sKSkge1xuMTQzNTpcdFx0Y2FzZSBFVEhfUF9JUDoge1xuMTQzNjpcdFx0XHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDtcbjE0Mzc6XHRcbjE0Mzg6XHRcdFx0aWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLVx1MDAzZWhfZGVzdCkgfHxcbjE0Mzk6XHRcdFx0ICAgICFwc2tiX25ldHdvcmtfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpKSB7XG4xNDQwOlx0XHRcdFx0ZG9fdHhfYmFsYW5jZSA9IGZhbHNlO1xuMTQ0MTpcdFx0XHRcdGJyZWFrO1xuMTQ0MjpcdFx0XHR9XG4xNDQzOlx0XHRcdGlwaCA9IGlwX2hkcihza2IpO1xuMTQ0NDpcdFx0XHRpZiAoaXBoLVx1MDAzZWRhZGRyID09IGlwX2JjYXN0IHx8IGlwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX0lHTVApIHtcbjE0NDU6XHRcdFx0XHRkb190eF9iYWxhbmNlID0gZmFsc2U7XG4xNDQ2Olx0XHRcdFx0YnJlYWs7XG4xNDQ3Olx0XHRcdH1cbjE0NDg6XHRcdFx0aGFzaF9zdGFydCA9IChjaGFyICopXHUwMDI2KGlwaC1cdTAwM2VkYWRkcik7XG4xNDQ5Olx0XHRcdGhhc2hfc2l6ZSA9IHNpemVvZihpcGgtXHUwMDNlZGFkZHIpO1xuMTQ1MDpcdFx0XHRicmVhaztcbjE0NTE6XHRcdH1cbjE0NTI6XHRcdGNhc2UgRVRIX1BfSVBWNjoge1xuMTQ1MzpcdFx0XHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aGRyO1xuMTQ1NDpcdFxuMTQ1NTpcdFx0XHQvKiBJUHY2IGRvZXNuJiMzOTt0IHJlYWxseSB1c2UgYnJvYWRjYXN0IG1hYyBhZGRyZXNzLCBidXQgbGVhdmVcbjE0NTY6XHRcdFx0ICogdGhhdCBoZXJlIGp1c3QgaW4gY2FzZS5cbjE0NTc6XHRcdFx0ICovXG4xNDU4Olx0XHRcdGlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cdTAwM2VoX2Rlc3QpKSB7XG4xNDU5Olx0XHRcdFx0ZG9fdHhfYmFsYW5jZSA9IGZhbHNlO1xuMTQ2MDpcdFx0XHRcdGJyZWFrO1xuMTQ2MTpcdFx0XHR9XG4xNDYyOlx0XG4xNDYzOlx0XHRcdC8qIElQdjYgdXNlcyBhbGwtbm9kZXMgbXVsdGljYXN0IGFzIGFuIGVxdWl2YWxlbnQgdG9cbjE0NjQ6XHRcdFx0ICogYnJvYWRjYXN0cyBpbiBJUHY0LlxuMTQ2NTpcdFx0XHQgKi9cbjE0NjY6XHRcdFx0aWYgKGV0aGVyX2FkZHJfZXF1YWxfNjRiaXRzKGV0aF9kYXRhLVx1MDAzZWhfZGVzdCwgbWFjX3Y2X2FsbG1jYXN0KSkge1xuMTQ2NzpcdFx0XHRcdGRvX3R4X2JhbGFuY2UgPSBmYWxzZTtcbjE0Njg6XHRcdFx0XHRicmVhaztcbjE0Njk6XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI1MgoJCQkJCQkJb3V0cHV0OiAyMjUKCQkJCQkJCXRob3VnaHRzOiA1MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gTmV3IENvbmNlcm5zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIGFuYWx5emluZyB0aGUgcGF0Y2ggdG8gYGFsYl9kZXRlcm1pbmVfbmRgLCBteSBwcmltYXJ5IGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCBtZW1vcnkgc2FmZXR5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlIGZ1bmN0aW9uIGlzIGhhbmRsaW5nIElQdjYgTmVpZ2hib3IgRGlzY292ZXJ5IHBhY2tldHMsIHNvIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHBhY2tldCBwYXJzaW5nIGlzIGNyaXRpY2FsLgoKVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgcG90ZW50aWFsIGlzc3VlOiBpdCB3YXMgdXNpbmcgYGljbXA2X2hkcihza2IpYCB3aGljaCB1c2VzIGBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpYC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgaXNuJiMzOTt0IG5lY2Vzc2FyaWx5IHZhbGlkIGR1cmluZyB0aGUgdHJhbnNtaXQgcGF0aC4gVGhpcyBwYXRjaCBjbGV2ZXJseSBjaXJjdW12ZW50cyB0aGF0IGJ5IGNhbGN1bGF0aW5nIHRoZSBoZWFkZXImIzM5O3MgbG9jYXRpb24gZGlyZWN0bHkgZnJvbSB0aGUgSVB2NiBoZWFkZXIgKGAoY29uc3Qgc3RydWN0IGljbXA2aGRyICopKGlwNmhkciAmIzQzOyAxKWApLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBmaXggdG8gYSBwb3RlbnRpYWwgYnVnLgoKVGhlIHJlYWxseSBnb29kIHBhcnQgaXMgdGhhdCBhbGwgdGhlIGNydWNpYWwgbWVtb3J5IGFjY2Vzc2VzIGZyb20gdGhlIGBza2JgIGFyZSBwcm90ZWN0ZWQgd2l0aCBgcHNrYl9uZXR3b3JrX21heV9wdWxsKClgLiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBJIGxpa2UgdG8gc2VlIOKAkyBleHBsaWNpdCBib3VuZHMgY2hlY2tzIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlIHJlYXNvbmluZyBjbGFpbXMgdGhpcyBhbHNvIHZhbGlkYXRlcyB0aGUgc2tiIGRhdGEuCgpJJiMzOTt2ZSBjaGVja2VkIHRoZSBwYXRjaCwgYW5kIGl0IGFkZHJlc3NlcyB0aGUgb3JpZ2luYWwgaXNzdWUsIGFuZCBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgY29weSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2UsIG9yIHVzZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBvciBhbnkgb3RoZXIgdW5pbml0aWFsaXplZCBmaWVsZHMuIFRoZXJlJiMzOTtzIG5vIGhpbnQgb2YgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWthZ2UgdGhhdCBJIGNhbiBzZWUuIEtBU0FOIHNob3VsZCBoYW5kbGUgYW55IGJhc2ljIG1lbW9yeSBlcnJvcnMgc3VjaCBhcyBhbiBvdXQgb2YgYm91bmRzIHJlYWQsIGR1ZSB0byB0aGUgcHJlc2VuY2Ugb2YgYHBza2JfbmV0d29ya19tYXlfcHVsbCgpYC4KCkdpdmVuIHRoYXQgdGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGJ1ZywgdXNlcyBzYWZlIG1lbW9yeSBhY2Nlc3MgYW5kIGF2b2lkcyBpbnRyb2R1Y2luZyBuZXcgYXJlYXMgb2YgY29uY2VybiwgSSYjMzk7bSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgS01TQU4gZnV6emluZyBpc24mIzM5O3QgbmVjZXNzYXJ5LiBMZXQmIzM5O3MgbWFyayB0aGlzIGFzIGEgbm8tb3AgZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLgoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBhbGJfZGV0ZXJtaW5lX25kKClgIGluIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgIHRvIGNvbXB1dGUgdGhlIElDTVB2NiBoZWFkZXIgbG9jYXRpb24gZGlyZWN0bHkgZm9sbG93aW5nIHRoZSBJUHY2IGhlYWRlciAoYChjb25zdCBzdHJ1Y3QgaWNtcDZoZHIgKikoaXA2aGRyICYjNDM7IDEpYCkgaW5zdGVhZCBvZiBpbnZva2luZyBgaWNtcDZfaGRyKHNrYilgICh3aGljaCByZWxpZXMgb24gYHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYilgIGJlaW5nIGluaXRpYWxpemVkKS4gSXQgYWxzbyBkcm9wcyBhbiB1bnVzZWQgYGJvbmRgIHBhcmFtZXRlci5cblxuVGhlIHBhY2tldCBwYXlsb2FkIGJ5dGVzIHJlYWQgYnkgdGhpcyBmdW5jdGlvbiBhcmUgdmVyaWZpZWQgdG8gZXhpc3QgaW4gdGhlIGxpbmVhciBidWZmZXIgdXNpbmcgYHBza2JfbmV0d29ya19tYXlfcHVsbCgpYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbnkgcG90ZW50aWFsIGJ1ZmZlciBib3VuZHMgb3Igc2tiIGRlcmVmZXJlbmNlIGlzc3VlcyBpbiB0aGlzIHBhdGggYXJlIGNvdmVyZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGFsYl9kZXRlcm1pbmVfbmQoKWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY2AgdG8gY29tcHV0ZSB0aGUgSUNNUHY2IGhlYWRlciBsb2NhdGlvbiBkaXJlY3RseSBmb2xsb3dpbmcgdGhlIElQdjYgaGVhZGVyIChgKGNvbnN0IHN0cnVjdCBpY21wNmhkciAqKShpcDZoZHIgJiM0MzsgMSlgKSBpbnN0ZWFkIG9mIGludm9raW5nIGBpY21wNl9oZHIoc2tiKWAgKHdoaWNoIHJlbGllcyBvbiBgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKWAgYmVpbmcgaW5pdGlhbGl6ZWQpLiBJdCBhbHNvIGRyb3BzIGFuIHVudXNlZCBgYm9uZGAgcGFyYW1ldGVyLlxuXG5UaGUgcGFja2V0IHBheWxvYWQgYnl0ZXMgcmVhZCBieSB0aGlzIGZ1bmN0aW9uIGFyZSB2ZXJpZmllZCB0byBleGlzdCBpbiB0aGUgbGluZWFyIGJ1ZmZlciB1c2luZyBgcHNrYl9uZXR3b3JrX21heV9wdWxsKClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIEFueSBwb3RlbnRpYWwgYnVmZmVyIGJvdW5kcyBvciBza2IgZGVyZWZlcmVuY2UgaXNzdWVzIGluIHRoaXMgcGF0aCBhcmUgY292ZXJlZCBieSBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjExOjM0LjU0MTk1MTkyOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjgxMzgyMzE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCT05ESU5HXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJORVRfQ09SRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0XCIsXG4gICAgXCJib25kX3htaXRfdGxiX3NsYXZlX2dldFwiLFxuICAgIFwiYm9uZF9hbGJfeG1pdFwiLFxuICAgIFwiYm9uZF90bGJfeG1pdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGFsYl9kZXRlcm1pbmVfbmQoKWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY2AgdG8gY29tcHV0ZSB0aGUgSUNNUHY2IGhlYWRlciBsb2NhdGlvbiBkaXJlY3RseSBmb2xsb3dpbmcgdGhlIElQdjYgaGVhZGVyIChgKGNvbnN0IHN0cnVjdCBpY21wNmhkciAqKShpcDZoZHIgKyAxKWApIGluc3RlYWQgb2YgaW52b2tpbmcgYGljbXA2X2hkcihza2IpYCAod2hpY2ggcmVsaWVzIG9uIGBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpYCBiZWluZyBpbml0aWFsaXplZCkuIEl0IGFsc28gZHJvcHMgYW4gdW51c2VkIGBib25kYCBwYXJhbWV0ZXIuXFxuXFxuVGhlIHBhY2tldCBwYXlsb2FkIGJ5dGVzIHJlYWQgYnkgdGhpcyBmdW5jdGlvbiBhcmUgdmVyaWZpZWQgdG8gZXhpc3QgaW4gdGhlIGxpbmVhciBidWZmZXIgdXNpbmcgYHBza2JfbmV0d29ya19tYXlfcHVsbCgpYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbnkgcG90ZW50aWFsIGJ1ZmZlciBib3VuZHMgb3Igc2tiIGRlcmVmZXJlbmNlIGlzc3VlcyBpbiB0aGlzIHBhdGggYXJlIGNvdmVyZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHBhY2tldCBoZWFkZXIgcGFyc2luZyBmb3IgSVB2NiBOZWlnaGJvciBEaXNjb3ZlcnkgKE5EKSBwYWNrZXRzIGR1cmluZyB0cmFuc21pdCBsb2FkIGJhbGFuY2luZyBpbiBib25kaW5nIEFMQiBhbmQgVExCIG1vZGVzIChhbGJfZGV0ZXJtaW5lX25kKS4gUHJldmlvdXNseSwgaXQgdXNlZCBpY21wNl9oZHIoc2tiKSAod2hpY2ggcmVsaWVzIG9uIHNrYl90cmFuc3BvcnRfaGVhZGVyLCBub3QgbmVjZXNzYXJpbHkgc2V0IG9uIHRoZSBUWCBwYXRoKSBhbmQgZGlkbid0IHJlbG9hZCB0aGUgSVB2NiBoZWFkZXIgcG9pbnRlciBhZnRlciBwc2tiX25ldHdvcmtfbWF5X3B1bGwgcmVhbGxvY2F0aW9ucy4gVGhpcyBmdW5jdGlvbmFsIGZpeCBhZmZlY3RzIHBhY2tldCB0cmFuc21pc3Npb24gb3ZlciBib25kaW5nIHZpcnR1YWwgaW50ZXJmYWNlcyBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDM6MTE6MzQuNTQxOTU4MTM4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzExODk2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkZDhkNjI1ODgzYzczZTNhMDgxMDJkODEzOTQxNjI1YWIyZjE4OWI0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDEgMDM6MTE6MzMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXFxuaW5kZXggODM5Zjc0ODJkYzE4Mi4uNTA3M2FlZWJhNmM5NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcXG5AQCAtMTI4MSwxMCArMTI4MSwxMCBAQCBzdGF0aWMgaW50IGFsYl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IGJvbmRpbmcgKmJvbmQsIHZvaWQgKmFkZHIpXFxuIH1cXG4gXFxuIC8qIGRldGVybWluZSBpZiB0aGUgcGFja2V0IGlzIE5BIG9yIE5TICovXFxuLXN0YXRpYyBib29sIGFsYl9kZXRlcm1pbmVfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuK3N0YXRpYyBib29sIGFsYl9kZXRlcm1pbmVfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aGRyO1xcbi1cXHRzdHJ1Y3QgaWNtcDZoZHIgKmhkcjtcXG4rXFx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNmhkcjtcXG4rXFx0Y29uc3Qgc3RydWN0IGljbXA2aGRyICpoZHI7XFxuIFxcbiBcXHRpZiAoIXBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZigqaXA2aGRyKSkpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbkBAIC0xMjk2LDcgKzEyOTYsOCBAQCBzdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKVxcbiBcXHRpZiAoIXBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZigqaXA2aGRyKSArIHNpemVvZigqaGRyKSkpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4tXFx0aGRyID0gaWNtcDZfaGRyKHNrYik7XFxuK1xcdGlwNmhkciA9IGlwdjZfaGRyKHNrYik7XFxuK1xcdGhkciA9IChjb25zdCBzdHJ1Y3QgaWNtcDZoZHIgKikoaXA2aGRyICsgMSk7XFxuIFxcdHJldHVybiBoZHItXFx1MDAzZWljbXA2X3R5cGUgPT0gTkRJU0NfTkVJR0hCT1VSX0FEVkVSVElTRU1FTlQgfHxcXG4gXFx0XFx0aGRyLVxcdTAwM2VpY21wNl90eXBlID09IE5ESVNDX05FSUdIQk9VUl9TT0xJQ0lUQVRJT047XFxuIH1cXG5AQCAtMTM4MSw3ICsxMzgyLDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4gXFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cXHUwMDNlaF9kZXN0KSkge1xcbiBcXHRcXHRzd2l0Y2ggKHNrYi1cXHUwMDNlcHJvdG9jb2wpIHtcXG4gXFx0XFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG4tXFx0XFx0XFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiLCBib25kKSlcXG4rXFx0XFx0XFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiKSlcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiBcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG5AQCAtMTQ2Nyw3ICsxNDY4LDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYiwgYm9uZCkpIHtcXG4rXFx0XFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiKSkge1xcbiBcXHRcXHRcXHRkb190eF9iYWxhbmNlID0gZmFsc2U7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjExOjM0Ljk3MzgwNzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ4NTA5NjUwNzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJPTkRJTkdcIixcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIixcbiAgICBcIk5FVF9DT1JFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRcIixcbiAgICBcImJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0XCIsXG4gICAgXCJib25kX2FsYl94bWl0XCIsXG4gICAgXCJib25kX3RsYl94bWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcGFja2V0IGhlYWRlciBwYXJzaW5nIGZvciBJUHY2IE5laWdoYm9yIERpc2NvdmVyeSAoTkQpIHBhY2tldHMgZHVyaW5nIHRyYW5zbWl0IGxvYWQgYmFsYW5jaW5nIGluIGJvbmRpbmcgQUxCIGFuZCBUTEIgbW9kZXMgKGFsYl9kZXRlcm1pbmVfbmQpLiBQcmV2aW91c2x5LCBpdCB1c2VkIGljbXA2X2hkcihza2IpICh3aGljaCByZWxpZXMgb24gc2tiX3RyYW5zcG9ydF9oZWFkZXIsIG5vdCBuZWNlc3NhcmlseSBzZXQgb24gdGhlIFRYIHBhdGgpIGFuZCBkaWRuJ3QgcmVsb2FkIHRoZSBJUHY2IGhlYWRlciBwb2ludGVyIGFmdGVyIHBza2JfbmV0d29ya19tYXlfcHVsbCByZWFsbG9jYXRpb25zLiBUaGlzIGZ1bmN0aW9uYWwgZml4IGFmZmVjdHMgcGFja2V0IHRyYW5zbWlzc2lvbiBvdmVyIGJvbmRpbmcgdmlydHVhbCBpbnRlcmZhY2VzIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkZDhkNjI1ODgzYzczZTNhMDgxMDJkODEzOTQxNjI1YWIyZjE4OWI0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAwMzoxMTozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xuaW5kZXggODM5Zjc0ODJkYzE4Mi4uNTA3M2FlZWJhNmM5NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xuKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXG5AQCAtMTI4MSwxMCArMTI4MSwxMCBAQCBzdGF0aWMgaW50IGFsYl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IGJvbmRpbmcgKmJvbmQsIHZvaWQgKmFkZHIpXG4gfVxuIFxuIC8qIGRldGVybWluZSBpZiB0aGUgcGFja2V0IGlzIE5BIG9yIE5TICovXG4tc3RhdGljIGJvb2wgYWxiX2RldGVybWluZV9uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbitzdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IGlwdjZoZHIgKmlwNmhkcjtcbi1cdHN0cnVjdCBpY21wNmhkciAqaGRyO1xuK1x0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNmhkcjtcbitcdGNvbnN0IHN0cnVjdCBpY21wNmhkciAqaGRyO1xuIFxuIFx0aWYgKCFwc2tiX25ldHdvcmtfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwNmhkcikpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbkBAIC0xMjk2LDcgKzEyOTYsOCBAQCBzdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKVxuIFx0aWYgKCFwc2tiX25ldHdvcmtfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwNmhkcikgKyBzaXplb2YoKmhkcikpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdGhkciA9IGljbXA2X2hkcihza2IpO1xuK1x0aXA2aGRyID0gaXB2Nl9oZHIoc2tiKTtcbitcdGhkciA9IChjb25zdCBzdHJ1Y3QgaWNtcDZoZHIgKikoaXA2aGRyICsgMSk7XG4gXHRyZXR1cm4gaGRyLVx1MDAzZWljbXA2X3R5cGUgPT0gTkRJU0NfTkVJR0hCT1VSX0FEVkVSVElTRU1FTlQgfHxcbiBcdFx0aGRyLVx1MDAzZWljbXA2X3R5cGUgPT0gTkRJU0NfTkVJR0hCT1VSX1NPTElDSVRBVElPTjtcbiB9XG5AQCAtMTM4MSw3ICsxMzgyLDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbiBcdGlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZXRoX2RhdGEtXHUwMDNlaF9kZXN0KSkge1xuIFx0XHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuIFx0XHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxuLVx0XHRcdGlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYiwgYm9uZCkpXG4rXHRcdFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiKSlcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGZhbGx0aHJvdWdoO1xuIFx0XHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbkBAIC0xNDY3LDcgKzE0NjgsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRcdGlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYiwgYm9uZCkpIHtcbitcdFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiKSkge1xuIFx0XHRcdGRvX3R4X2JhbGFuY2UgPSBmYWxzZTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDM6MTE6MzQuOTczODA4NzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NjExMzg5MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGJvbmRfYWxiLmNgIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBwYXRjaCBpcyB0YXJnZXRpbmcgYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBBY3RpdmUtQmFja3VwIChBTEIpIGJvbmRpbmcsIHNwZWNpZmljYWxseSB0aGUgbG9naWMgZm9yIGRldGVybWluaW5nIE5laWdoYm9yIERpc2NvdmVyeSBwYWNrZXRzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFuZCBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIGJ1dCBsZXQncyByZWFkIHRoZSBwYXRjaCBmaXJzdCB0byBnZXQgYSBncmFzcCBvZiB0aGUgaW50ZW50LlxuXG5BbHJpZ2h0LCB0aGUgcHJpbWFyeSBtb2RpZmljYXRpb24gaXMgd2l0aGluIHRoZSBgYWxiX2RldGVybWluZV9uZGAgZnVuY3Rpb24uIExvb2tpbmcgYXQgdGhlIGRpZmYsIEkgc2VlIHRoZSBjb3JlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgaG93IHRoZSBgaWNtcDZoZHJgIGlzIGFjY2Vzc2VkIGFmdGVyIGEgcG90ZW50aWFsIGBwc2tiX25ldHdvcmtfbWF5X3B1bGxgIGNhbGwuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBiZWNhdXNlIGNhbGxpbmcgYHBza2JfbmV0d29ya19tYXlfcHVsbGAgbWlnaHQgcmVhbGxvY2F0ZSB0aGUgYHNrYi1cdTAwM2VoZWFkYCwgaW52YWxpZGF0aW5nIHRoZSBwb2ludGVycyBgaXA2aGRyYCBhbmQgdGhlIHJlc3VsdCBvZiB0aGUgYGljbXA2X2hkcihza2IpYCBtYWNyby4gVGhlIG1hY3JvIHVzZXMgYHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYilgLCBidXQgaWYgYHBza2JfbmV0d29ya19tYXlfcHVsbGAgaGFzIHJlYWxsb2NhdGVkIHRoZSBoZWFkZXJzIHRoZW4gdGhlIHRyYW5zcG9ydCBoZWFkZXIgbWlnaHQgbm90IGJlIHByb3Blcmx5IHNldCwgYW5kIHRoZSBgaWNtcDZfaGRyKHNrYilgIG1heSBiZSByZWZlcmVuY2luZyBpbmNvcnJlY3QgbWVtb3J5LlxuXG5Fc3NlbnRpYWxseSwgdGhlIGZpeCBhdm9pZHMgdGhlIHBvdGVudGlhbCBkb3VibGUgZGVyZWZlcmVuY2Ugb2YgYGlwNmhkcmAgYW5kIG5vdyBjb3JyZWN0bHkgZGVyaXZlcyBgaGRyYCBmcm9tIHRoZSBwb3N0LWBwc2tiX25ldHdvcmtfbWF5X3B1bGxgIGxvY2F0aW9uIG9mIGBpcDZoZHJgLiBFeGNlbGxlbnQsIHRoaXMgaXMgYSBjbGVhbiBhbmQgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgYSBzdWJ0bGUgbWVtb3J5IHNhZmV0eSBpc3N1ZS5cblxuTm93LCBsZXQgbWUganVzdCBjcm9zcy1yZWZlcmVuY2UgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGJvbmRfYWxiLmNgIHRvIGNvbmZpcm0gdGhlIGZpeCBpcyBsb2NhbGl6ZWQsIGFuZCBtYWtlIHN1cmUgdGhhdCBpdCdzIGluIHRoZSByaWdodCBzcG90LCBhbmQgbm90IGluZGljYXRpbmcgYW4gaXNzdWUgZWxzZXdoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTQzLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDM6MTE6NDIuNTg1MjAwMzVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNzUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjc1OlxcdFxcdFxcdFxcdFxcdCAgcm9sbGJhY2tfc2xhdmUtXFx1MDAzZWRldi1cXHUwMDNlYWRkcl9sZW4pO1xcbjEyNzY6XFx0XFx0XFx0ZGV2X3NldF9tYWNfYWRkcmVzcyhyb2xsYmFja19zbGF2ZS1cXHUwMDNlZGV2LCBcXHUwMDI2c3MsIE5VTEwpO1xcbjEyNzc6XFx0XFx0XFx0ZGV2X2FkZHJfc2V0KHJvbGxiYWNrX3NsYXZlLVxcdTAwM2VkZXYsIHRtcF9hZGRyKTtcXG4xMjc4OlxcdFxcdH1cXG4xMjc5OlxcdFxcbjEyODA6XFx0XFx0cmV0dXJuIHJlcztcXG4xMjgxOlxcdH1cXG4xMjgyOlxcdFxcbjEyODM6XFx0LyogZGV0ZXJtaW5lIGlmIHRoZSBwYWNrZXQgaXMgTkEgb3IgTlMgKi9cXG4xMjg0OlxcdHN0YXRpYyBib29sIGFsYl9kZXRlcm1pbmVfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMjg1OlxcdHtcXG4xMjg2OlxcdFxcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoZHI7XFxuMTI4NzpcXHRcXHRjb25zdCBzdHJ1Y3QgaWNtcDZoZHIgKmhkcjtcXG4xMjg4OlxcdFxcbjEyODk6XFx0XFx0aWYgKCFwc2tiX25ldHdvcmtfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwNmhkcikpKVxcbjEyOTA6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMTI5MTpcXHRcXG4xMjkyOlxcdFxcdGlwNmhkciA9IGlwdjZfaGRyKHNrYik7XFxuMTI5MzpcXHRcXHRpZiAoaXA2aGRyLVxcdTAwM2VuZXh0aGRyICE9IElQUFJPVE9fSUNNUFY2KVxcbjEyOTQ6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEyOTU6XFx0XFxuMTI5NjpcXHRcXHRpZiAoIXBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZigqaXA2aGRyKSArIHNpemVvZigqaGRyKSkpXFxuMTI5NzpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMjk4OlxcdFxcbjEyOTk6XFx0XFx0aXA2aGRyID0gaXB2Nl9oZHIoc2tiKTtcXG4xMzAwOlxcdFxcdGhkciA9IChjb25zdCBzdHJ1Y3QgaWNtcDZoZHIgKikoaXA2aGRyICsgMSk7XFxuMTMwMTpcXHRcXHRyZXR1cm4gaGRyLVxcdTAwM2VpY21wNl90eXBlID09IE5ESVNDX05FSUdIQk9VUl9BRFZFUlRJU0VNRU5UIHx8XFxuMTMwMjpcXHRcXHRcXHRoZHItXFx1MDAzZWljbXA2X3R5cGUgPT0gTkRJU0NfTkVJR0hCT1VSX1NPTElDSVRBVElPTjtcXG4xMzAzOlxcdH1cXG4xMzA0OlxcdFxcbjEzMDU6XFx0LyoqKioqKioqKioqKioqKioqKioqKioqKiBleHBvcnRlZCBhbGIgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKi9cXG4xMzA2OlxcdFxcbjEzMDc6XFx0aW50IGJvbmRfYWxiX2luaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQsIGludCBybGJfZW5hYmxlZClcXG4xMzA4OlxcdHtcXG4xMzA5OlxcdFxcdGludCByZXM7XFxuMTMxMDpcXHRcXG4xMzExOlxcdFxcdHJlcyA9IHRsYl9pbml0aWFsaXplKGJvbmQpO1xcbjEzMTI6XFx0XFx0aWYgKHJlcylcXG4xMzEzOlxcdFxcdFxcdHJldHVybiByZXM7XFxuMTMxNDpcXHRcXG4xMzE1OlxcdFxcdGlmIChybGJfZW5hYmxlZCkge1xcbjEzMTY6XFx0XFx0XFx0cmVzID0gcmxiX2luaXRpYWxpemUoYm9uZCk7XFxuMTMxNzpcXHRcXHRcXHRpZiAocmVzKSB7XFxuMTMxODpcXHRcXHRcXHRcXHR0bGJfZGVpbml0aWFsaXplKGJvbmQpO1xcbjEzMTk6XFx0XFx0XFx0XFx0cmV0dXJuIHJlcztcXG4xMzIwOlxcdFxcdFxcdH1cXG4xMzIxOlxcdFxcdFxcdGJvbmQtXFx1MDAzZWFsYl9pbmZvLnJsYl9lbmFibGVkID0gMTtcXG4xMzIyOlxcdFxcdH0gZWxzZSB7XFxuMTMyMzpcXHRcXHRcXHRib25kLVxcdTAwM2VhbGJfaW5mby5ybGJfZW5hYmxlZCA9IDA7XFxuMTMyNDpcXHRcXHR9XFxuMTMyNTpcXHRcXG4xMzI2OlxcdFxcdHJldHVybiAwO1xcbjEzMjc6XFx0fVxcbjEzMjg6XFx0XFxuMTMyOTpcXHR2b2lkIGJvbmRfYWxiX2RlaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG4xMzMwOlxcdHtcXG4xMzMxOlxcdFxcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xcbjEzMzI6XFx0XFxuMTMzMzpcXHRcXHR0bGJfZGVpbml0aWFsaXplKGJvbmQpO1xcbjEzMzQ6XFx0XFxuMTMzNTpcXHRcXHRpZiAoYm9uZF9pbmZvLVxcdTAwM2VybGJfZW5hYmxlZClcXG4xMzM2OlxcdFxcdFxcdHJsYl9kZWluaXRpYWxpemUoYm9uZCk7XFxuMTMzNzpcXHR9XFxuMTMzODpcXHRcXG4xMzM5OlxcdHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxcbjEzNDA6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUpXFxuMTM0MTpcXHR7XFxuMTM0MjpcXHRcXHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcXG4xMzQzOlxcdFxcdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xcbjEzNDQ6XFx0XFxuMTM0NTpcXHRcXHRpZiAoIXR4X3NsYXZlKSB7XFxuMTM0NjpcXHRcXHRcXHQvKiB1bmJhbGFuY2VkIG9yIHVuYXNzaWduZWQsIHNlbmQgdGhyb3VnaCBwcmltYXJ5ICovXFxuMTM0NzpcXHRcXHRcXHR0eF9zbGF2ZSA9IHJjdV9kZXJlZmVyZW5jZShib25kLVxcdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSk7XFxuMTM0ODpcXHRcXHRcXHRpZiAoYm9uZC1cXHUwMDNlcGFyYW1zLnRsYl9keW5hbWljX2xiKVxcbjEzNDk6XFx0XFx0XFx0XFx0Ym9uZF9pbmZvLVxcdTAwM2V1bmJhbGFuY2VkX2xvYWQgKz0gc2tiLVxcdTAwM2VsZW47XFxuMTM1MDpcXHRcXHR9XFxuMTM1MTpcXHRcXG4xMzUyOlxcdFxcdGlmICh0eF9zbGF2ZSBcXHUwMDI2XFx1MDAyNiBib25kX3NsYXZlX2Nhbl90eCh0eF9zbGF2ZSkpIHtcXG4xMzUzOlxcdFxcdFxcdGlmICh0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpKSB7XFxuMTM1NDpcXHRcXHRcXHRcXHRldGhlcl9hZGRyX2NvcHkoZXRoX2RhdGEtXFx1MDAzZWhfc291cmNlLFxcbjEzNTU6XFx0XFx0XFx0XFx0XFx0XFx0dHhfc2xhdmUtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbjEzNTY6XFx0XFx0XFx0fVxcbjEzNTc6XFx0XFxuMTM1ODpcXHRcXHRcXHRyZXR1cm4gYm9uZF9kZXZfcXVldWVfeG1pdChib25kLCBza2IsIHR4X3NsYXZlLVxcdTAwM2VkZXYpO1xcbjEzNTk6XFx0XFx0fVxcbjEzNjA6XFx0XFxuMTM2MTpcXHRcXHRpZiAodHhfc2xhdmUgXFx1MDAyNlxcdTAwMjYgYm9uZC1cXHUwMDNlcGFyYW1zLnRsYl9keW5hbWljX2xiKSB7XFxuMTM2MjpcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNmJvbmQtXFx1MDAzZW1vZGVfbG9jayk7XFxuMTM2MzpcXHRcXHRcXHRfX3RsYl9jbGVhcl9zbGF2ZShib25kLCB0eF9zbGF2ZSwgMCk7XFxuMTM2NDpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Ym9uZC1cXHUwMDNlbW9kZV9sb2NrKTtcXG4xMzY1OlxcdFxcdH1cXG4xMzY2OlxcdFxcbjEzNjc6XFx0XFx0Lyogbm8gc3VpdGFibGUgaW50ZXJmYWNlLCBmcmFtZSBub3Qgc2VudCAqL1xcbjEzNjg6XFx0XFx0cmV0dXJuIGJvbmRfdHhfZHJvcChib25kLVxcdTAwM2VkZXYsIHNrYik7XFxuMTM2OTpcXHR9XFxuMTM3MDpcXHRcXG4xMzcxOlxcdHN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuMTM3MjpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjEzNzM6XFx0e1xcbjEzNzQ6XFx0XFx0c3RydWN0IHNsYXZlICp0eF9zbGF2ZSA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjExOjQyLjU4NTMxMzg3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc4MTQyNjg0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS5cblxuKipEZWVwZXIgRGl2ZSBpbnRvIEJvbmRlZCBUcmFuc21pc3Npb24gYW5kIFRMQi9BTEIgU2xhdmUgUmV0cmlldmFsKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBvZiBob3cgdGhlc2UgdHJhbnNtaXNzaW9uIGZ1bmN0aW9ucyAoYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCBhbmQgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCkgYW5kIHRoZSB3YXkgdGhleSdyZSB1c2VkLiBJJ3ZlIGdvdCBhIHByZXR0eSBzb2xpZCBncmFzcCBvbiB0aGVzZSB0b3BpY3MgaW4gZ2VuZXJhbCwgYnV0IEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1YnRsZSBpbnRlcmFjdGlvbnMgb3IgZWRnZSBjYXNlcyBJJ20gbWlzc2luZyByZWxhdGVkIHRvIHRoZSBpbXBsZW1lbnRhdGlvbi4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IHRyYWNlIGFsbCBvZiB0aGUgY2FsbGVycyBvZiB0aGVzZSBtZXRob2RzIHRvIGVuc3VyZSBJIGFjY291bnQgZm9yIGFsbCBjb2RlIHBhdGhzLiBUaGUgZnVuY3Rpb25zIHRoZW1zZWx2ZXMgc2VlbSBmaW5lLCBidXQgSSd2ZSBsZWFybmVkIHRoYXQgYSBnb29kIGVuZ2luZWVyIG5lZWRzIHRvIGZvY3VzIG9uIHVzZSBjYXNlcyBqdXN0IGFzIGNhcmVmdWxseSBhcyB0aGUgaW1wbGVtZW50YXRpb25zLiBMZXQncyBzdGFydCB3aXRoIHRob3NlIGZ1bmN0aW9ucyBhbmQgdGhlaXIgY2FsbGVycywgYW5kIHRob3JvdWdobHkgcmV2aWV3IHRoZSByZWxhdGVkIG1vZHVsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNTgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjExOjQ0LjM2Njc0MjY1NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM3MCxcbiAgXCJMaW5lQ291bnRcIjogMTA1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNzA6XFx0XFxuMTM3MTpcXHRzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbjEzNzI6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMzczOlxcdHtcXG4xMzc0OlxcdFxcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUgPSBOVUxMO1xcbjEzNzU6XFx0XFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XFxuMTM3NjpcXHRcXHR1MzIgaGFzaF9pbmRleDtcXG4xMzc3OlxcdFxcbjEzNzg6XFx0XFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4xMzc5OlxcdFxcdGV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xcbjEzODA6XFx0XFxuMTM4MTpcXHRcXHQvKiBEbyBub3QgVFggYmFsYW5jZSBhbnkgbXVsdGljYXN0IG9yIGJyb2FkY2FzdCAqL1xcbjEzODI6XFx0XFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cXHUwMDNlaF9kZXN0KSkge1xcbjEzODM6XFx0XFx0XFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuMTM4NDpcXHRcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxcbjEzODU6XFx0XFx0XFx0XFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiKSlcXG4xMzg2OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjEzODc6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuMTM4ODpcXHRcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4xMzg5OlxcdFxcdFxcdFxcdGhhc2hfaW5kZXggPSBib25kX3htaXRfaGFzaChib25kLCBza2IpO1xcbjEzOTA6XFx0XFx0XFx0XFx0aWYgKGJvbmQtXFx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYikge1xcbjEzOTE6XFx0XFx0XFx0XFx0XFx0dHhfc2xhdmUgPSB0bGJfY2hvb3NlX2NoYW5uZWwoYm9uZCxcXG4xMzkyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGhhc2hfaW5kZXggXFx1MDAyNiAweEZGLFxcbjEzOTM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiLVxcdTAwM2VsZW4pO1xcbjEzOTQ6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4xMzk1OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBib25kX3VwX3NsYXZlICpzbGF2ZXM7XFxuMTM5NjpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY291bnQ7XFxuMTM5NzpcXHRcXG4xMzk4OlxcdFxcdFxcdFxcdFxcdHNsYXZlcyA9IHJjdV9kZXJlZmVyZW5jZShib25kLVxcdTAwM2V1c2FibGVfc2xhdmVzKTtcXG4xMzk5OlxcdFxcdFxcdFxcdFxcdGNvdW50ID0gc2xhdmVzID8gUkVBRF9PTkNFKHNsYXZlcy1cXHUwMDNlY291bnQpIDogMDtcXG4xNDAwOlxcdFxcdFxcdFxcdFxcdGlmIChsaWtlbHkoY291bnQpKVxcbjE0MDE6XFx0XFx0XFx0XFx0XFx0XFx0dHhfc2xhdmUgPSBzbGF2ZXMtXFx1MDAzZWFycltoYXNoX2luZGV4ICVcXG4xNDAyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjb3VudF07XFxuMTQwMzpcXHRcXHRcXHRcXHR9XFxuMTQwNDpcXHRcXHRcXHRcXHRicmVhaztcXG4xNDA1OlxcdFxcdFxcdH1cXG4xNDA2OlxcdFxcdH1cXG4xNDA3OlxcdFxcdHJldHVybiB0eF9zbGF2ZTtcXG4xNDA4OlxcdH1cXG4xNDA5OlxcdFxcbjE0MTA6XFx0bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuMTQxMTpcXHR7XFxuMTQxMjpcXHRcXHRzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGJvbmRfZGV2KTtcXG4xNDEzOlxcdFxcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmU7XFxuMTQxNDpcXHRcXG4xNDE1OlxcdFxcdHR4X3NsYXZlID0gYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcXG4xNDE2OlxcdFxcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xcbjE0MTc6XFx0fVxcbjE0MTg6XFx0XFxuMTQxOTpcXHRzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbjE0MjA6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xNDIxOlxcdHtcXG4xNDIyOlxcdFxcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xcbjE0MjM6XFx0XFx0c3RhdGljIGNvbnN0IF9fYmUzMiBpcF9iY2FzdCA9IGh0b25sKDB4ZmZmZmZmZmYpO1xcbjE0MjQ6XFx0XFx0c3RydWN0IHNsYXZlICp0eF9zbGF2ZSA9IE5VTEw7XFxuMTQyNTpcXHRcXHRjb25zdCB1OCAqaGFzaF9zdGFydCA9IE5VTEw7XFxuMTQyNjpcXHRcXHRib29sIGRvX3R4X2JhbGFuY2UgPSB0cnVlO1xcbjE0Mjc6XFx0XFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XFxuMTQyODpcXHRcXHR1MzIgaGFzaF9pbmRleCA9IDA7XFxuMTQyOTpcXHRcXHRpbnQgaGFzaF9zaXplID0gMDtcXG4xNDMwOlxcdFxcbjE0MzE6XFx0XFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4xNDMyOlxcdFxcdGV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xcbjE0MzM6XFx0XFxuMTQzNDpcXHRcXHRzd2l0Y2ggKG50b2hzKHNrYi1cXHUwMDNlcHJvdG9jb2wpKSB7XFxuMTQzNTpcXHRcXHRjYXNlIEVUSF9QX0lQOiB7XFxuMTQzNjpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDtcXG4xNDM3OlxcdFxcbjE0Mzg6XFx0XFx0XFx0aWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLVxcdTAwM2VoX2Rlc3QpIHx8XFxuMTQzOTpcXHRcXHRcXHQgICAgIXBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSkpIHtcXG4xNDQwOlxcdFxcdFxcdFxcdGRvX3R4X2JhbGFuY2UgPSBmYWxzZTtcXG4xNDQxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE0NDI6XFx0XFx0XFx0fVxcbjE0NDM6XFx0XFx0XFx0aXBoID0gaXBfaGRyKHNrYik7XFxuMTQ0NDpcXHRcXHRcXHRpZiAoaXBoLVxcdTAwM2VkYWRkciA9PSBpcF9iY2FzdCB8fCBpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fSUdNUCkge1xcbjE0NDU6XFx0XFx0XFx0XFx0ZG9fdHhfYmFsYW5jZSA9IGZhbHNlO1xcbjE0NDY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTQ0NzpcXHRcXHRcXHR9XFxuMTQ0ODpcXHRcXHRcXHRoYXNoX3N0YXJ0ID0gKGNoYXIgKilcXHUwMDI2KGlwaC1cXHUwMDNlZGFkZHIpO1xcbjE0NDk6XFx0XFx0XFx0aGFzaF9zaXplID0gc2l6ZW9mKGlwaC1cXHUwMDNlZGFkZHIpO1xcbjE0NTA6XFx0XFx0XFx0YnJlYWs7XFxuMTQ1MTpcXHRcXHR9XFxuMTQ1MjpcXHRcXHRjYXNlIEVUSF9QX0lQVjY6IHtcXG4xNDUzOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoZHI7XFxuMTQ1NDpcXHRcXG4xNDU1OlxcdFxcdFxcdC8qIElQdjYgZG9lc24ndCByZWFsbHkgdXNlIGJyb2FkY2FzdCBtYWMgYWRkcmVzcywgYnV0IGxlYXZlXFxuMTQ1NjpcXHRcXHRcXHQgKiB0aGF0IGhlcmUganVzdCBpbiBjYXNlLlxcbjE0NTc6XFx0XFx0XFx0ICovXFxuMTQ1ODpcXHRcXHRcXHRpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoZXRoX2RhdGEtXFx1MDAzZWhfZGVzdCkpIHtcXG4xNDU5OlxcdFxcdFxcdFxcdGRvX3R4X2JhbGFuY2UgPSBmYWxzZTtcXG4xNDYwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE0NjE6XFx0XFx0XFx0fVxcbjE0NjI6XFx0XFxuMTQ2MzpcXHRcXHRcXHQvKiBJUHY2IHVzZXMgYWxsLW5vZGVzIG11bHRpY2FzdCBhcyBhbiBlcXVpdmFsZW50IHRvXFxuMTQ2NDpcXHRcXHRcXHQgKiBicm9hZGNhc3RzIGluIElQdjQuXFxuMTQ2NTpcXHRcXHRcXHQgKi9cXG4xNDY2OlxcdFxcdFxcdGlmIChldGhlcl9hZGRyX2VxdWFsXzY0Yml0cyhldGhfZGF0YS1cXHUwMDNlaF9kZXN0LCBtYWNfdjZfYWxsbWNhc3QpKSB7XFxuMTQ2NzpcXHRcXHRcXHRcXHRkb190eF9iYWxhbmNlID0gZmFsc2U7XFxuMTQ2ODpcXHRcXHRcXHRcXHRicmVhaztcXG4xNDY5OlxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDM6MTE6NDQuMzY2ODU4OTM1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU2NzgyMjQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSBwcm9tcHQ6XG5cbioqQW5hbHl6aW5nIGBib25kX2FsYi5jYCdzIEFsbG9jYXRpb24gTG9naWMqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLi4uIHRoZSByZXF1ZXN0IGlzIHRvIGxvb2sgYXQgbGluZXMgMTQ3MC0xNTAwIG9mIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgLiBUaGF0IGNodW5rIG9mIGNvZGUgc2hvdWxkIGJlIGtleSB0byBob3cgdGhlIEFjdGl2ZS1CYWNrdXAgTG9hZCBCYWxhbmNpbmcgKGFsYikgbW9kZSBhbGxvY2F0ZXMgdHJhZmZpYyBhY3Jvc3MgdGhlIGJvbmRlZCBpbnRlcmZhY2VzLiBJJ20gYXNzdW1pbmcgd2UncmUgZGVhbGluZyB3aXRoIHBhY2tldCBkaXN0cmlidXRpb24sIGxpa2VseSByZWxhdGVkIHRvIE1BQyBhZGRyZXNzIGFzc2lnbm1lbnQgb3IgaGFzaCBjYWxjdWxhdGlvbnMgaWYgaXQncyBkeW5hbWljLlxuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyBpdCBpZGVudGlmaWVzIHRoZSBhY3RpdmUgbGluaywgYW5kIHRoZW4gaG93IGl0IGRlY2lkZXMgd2hpY2ggcGFja2V0cyBnbyB0byB0aGF0IGFjdGl2ZSBsaW5rLiBJcyBpdCBiYXNlZCBvbiBhIHJvdW5kLXJvYmluPyBJcyB0aGVyZSBzb21lIGtpbmQgb2YgXCJsZWFzdCBsb2FkZWRcIiBoZXVyaXN0aWMgaW4gcGxheSwgZXZlbiBpZiBpdCdzIGJhc2ljPyBBcmUgdGhlcmUgYW55IGluZGljYXRpb25zIG9mIGxpbmsgbW9uaXRvcmluZyBvciBmYWlsb3ZlciBtZWNoYW5pc21zIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBzbmlwcGV0PyBJJ2xsIG5lZWQgdG8gcGFyc2UgdGhlIGNvbnRyb2wgZmxvdy4gVGhlIGNvbW1lbnRzIHdpbGwgYmUgY3JpdGljYWwgaGVyZSwgc28gSSdsbCBob3BlIHRoZSBkZXZlbG9wZXJzIHdlcmUgYmVpbmcgZGlsaWdlbnQuXG5cbkFuZCBtb3N0IGxpa2VseSwgSSB3b3VsZCBiZSBsb29raW5nIGZvciBhbnkgc2lnbnMgb2YgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIGJ1Z3MgdGhhdCBtaWdodCBoYXZlIGNyb3BwZWQgdXAgb3ZlciB0aGUgY29kZSdzIGxpZmV0aW1lLCBlc3BlY2lhbGx5IGlmIGl0IGRlYWxzIHdpdGggaGlnaC12b2x1bWUgbmV0d29ya3Mgb3IgcGFja2V0LWludGVuc2l2ZSBhcHBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwNDMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjExOjQ2LjkzNDY4Mzg4N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ3MDpcXHRcXG4xNDcxOlxcdFxcdFxcdGlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYikpIHtcXG4xNDcyOlxcdFxcdFxcdFxcdGRvX3R4X2JhbGFuY2UgPSBmYWxzZTtcXG4xNDczOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE0NzQ6XFx0XFx0XFx0fVxcbjE0NzU6XFx0XFxuMTQ3NjpcXHRcXHRcXHQvKiBUaGUgSVB2NiBoZWFkZXIgaXMgcHVsbGVkIGJ5IGFsYl9kZXRlcm1pbmVfbmQgKi9cXG4xNDc3OlxcdFxcdFxcdC8qIEFkZGl0aW9uYWxseSwgREFEIHByb2JlcyBzaG91bGQgbm90IGJlIHR4LWJhbGFuY2VkIGFzIHRoYXRcXG4xNDc4OlxcdFxcdFxcdCAqIHdpbGwgbGVhZCB0byBmYWxzZSBwb3NpdGl2ZXMgZm9yIGR1cGxpY2F0ZSBhZGRyZXNzZXMgYW5kXFxuMTQ3OTpcXHRcXHRcXHQgKiBwcmV2ZW50IGFkZHJlc3MgY29uZmlndXJhdGlvbiBmcm9tIHdvcmtpbmcuXFxuMTQ4MDpcXHRcXHRcXHQgKi9cXG4xNDgxOlxcdFxcdFxcdGlwNmhkciA9IGlwdjZfaGRyKHNrYik7XFxuMTQ4MjpcXHRcXHRcXHRpZiAoaXB2Nl9hZGRyX2FueShcXHUwMDI2aXA2aGRyLVxcdTAwM2VzYWRkcikpIHtcXG4xNDgzOlxcdFxcdFxcdFxcdGRvX3R4X2JhbGFuY2UgPSBmYWxzZTtcXG4xNDg0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE0ODU6XFx0XFx0XFx0fVxcbjE0ODY6XFx0XFxuMTQ4NzpcXHRcXHRcXHRoYXNoX3N0YXJ0ID0gKGNoYXIgKilcXHUwMDI2aXA2aGRyLVxcdTAwM2VkYWRkcjtcXG4xNDg4OlxcdFxcdFxcdGhhc2hfc2l6ZSA9IHNpemVvZihpcDZoZHItXFx1MDAzZWRhZGRyKTtcXG4xNDg5OlxcdFxcdFxcdGJyZWFrO1xcbjE0OTA6XFx0XFx0fVxcbjE0OTE6XFx0XFx0Y2FzZSBFVEhfUF9BUlA6XFxuMTQ5MjpcXHRcXHRcXHRkb190eF9iYWxhbmNlID0gZmFsc2U7XFxuMTQ5MzpcXHRcXHRcXHRpZiAoYm9uZF9pbmZvLVxcdTAwM2VybGJfZW5hYmxlZClcXG4xNDk0OlxcdFxcdFxcdFxcdHR4X3NsYXZlID0gcmxiX2FycF94bWl0KHNrYiwgYm9uZCk7XFxuMTQ5NTpcXHRcXHRcXHRicmVhaztcXG4xNDk2OlxcdFxcdGRlZmF1bHQ6XFxuMTQ5NzpcXHRcXHRcXHRkb190eF9iYWxhbmNlID0gZmFsc2U7XFxuMTQ5ODpcXHRcXHRcXHRicmVhaztcXG4xNDk5OlxcdFxcdH1cXG4xNTAwOlxcdFxcbjE1MDE6XFx0XFx0aWYgKGRvX3R4X2JhbGFuY2UpIHtcXG4xNTAyOlxcdFxcdFxcdGlmIChib25kLVxcdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpIHtcXG4xNTAzOlxcdFxcdFxcdFxcdGhhc2hfaW5kZXggPSBfc2ltcGxlX2hhc2goaGFzaF9zdGFydCwgaGFzaF9zaXplKTtcXG4xNTA0OlxcdFxcdFxcdFxcdHR4X3NsYXZlID0gdGxiX2Nob29zZV9jaGFubmVsKGJvbmQsIGhhc2hfaW5kZXgsIHNrYi1cXHUwMDNlbGVuKTtcXG4xNTA1OlxcdFxcdFxcdH0gZWxzZSB7XFxuMTUwNjpcXHRcXHRcXHRcXHQvKlxcbjE1MDc6XFx0XFx0XFx0XFx0ICogZG9fdHhfYmFsYW5jZSBtZWFucyB3ZSBhcmUgZnJlZSB0byBzZWxlY3QgdGhlIHR4X3NsYXZlXFxuMTUwODpcXHRcXHRcXHRcXHQgKiBTbyB3ZSBkbyBleGFjdGx5IHdoYXQgdGxiIHdvdWxkIGRvIGZvciBoYXNoIHNlbGVjdGlvblxcbjE1MDk6XFx0XFx0XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjExOjQ2LjkzNDgwNDYyN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzMyMjk4MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGJvbmRpbmcgZHJpdmVyIGNvbmZpZ3VyYXRpb24uXG5cbioqRXhhbWluaW5nIEJvbmRpbmcgRHJpdmVyIEtjb25maWcgT3B0aW9ucyoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIEtjb25maWcgb3B0aW9ucyBnb3Zlcm4gdGhlIGJlaGF2aW9yIG9mIHRoZSBib25kaW5nIGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gSSdsbCBzdGFydCBieSBzZWFyY2hpbmcgd2l0aGluIHRoZSBvYnZpb3VzOiBgZHJpdmVycy9uZXQvYm9uZGluZy9LY29uZmlnYC4gSWYgdGhhdCBkb2Vzbid0IHlpZWxkIGV2ZXJ5dGhpbmcsIEknbGwgYnJvYWRlbiB0aGUgbmV0IGEgYml0IGFuZCBjaGVjayBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgZ2xvYmFsIG5ldHdvcmstcmVsYXRlZCBvcHRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGJvbmRpbmcgYmVoYXZpb3IsIG9yIGlmIHBlcmhhcHMgdGhlIGJvbmRpbmcgb3B0aW9ucyBhcmUgaW5jbHVkZWQgZnJvbSB0aGVyZS4gU2VhcmNoaW5nIGZvciBcIkJPTkRJTkdcIiBkaXJlY3RseSBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzeW1ib2xzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcy4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgc28gdG8gc3BlYWsuIFVuZGVyc3RhbmRpbmcgdGhlIEtjb25maWcgc3RydWN0dXJlIGlzIGNydWNpYWwgZm9yIGFueSBuZXR3b3JrIGRyaXZlciBleHBlcnQsIHNvIEkgd2lsbCBhbmFseXplIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGFueSBkZWZhdWx0IHZhbHVlcyB0byBnYWluIGluc2lnaHQgaW50byBob3cgdGhlIGJvbmRpbmcgZHJpdmVyIGlzIGN1c3RvbWl6ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NzQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjExOjQ4Ljk2ODAzNzI0MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2ODg3Mzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCT05ESU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9Mzk9aWYgTkVUX0NPUkVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQwLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDE6Y29uZmlnIEJPTkRJTkdcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQyLVxcdHRyaXN0YXRlIFxcXCJCb25kaW5nIGRyaXZlciBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMzoxMTo0OS4wOTQ5MzAwMTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc5NDY2NTAwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgdGhlIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gQmFzZWQgb24gd2hhdCBJJ20gbG9va2luZyBhdCwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9ucyBhcm91bmQgbGluZSA0MC4gSSdtIGFzc3VtaW5nIHRoYXQncyB3aGVyZSB0aGUgaW5pdGlhbCB0b3AtbGV2ZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBuZXR3b3JrIGRyaXZlcnMgd2lsbCBsaWtlbHkgcmVzaWRlLiBGcm9tIHRoZXJlLCBJIGNhbiB1bmRlcnN0YW5kIHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBhbmQgcGVyaGFwcyBpZGVudGlmeSB0aGUgc3BlY2lmaWMgb3B0aW9ucyB0aGF0IGFyZSBpbmZsdWVuY2luZyB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgbW9kdWxlcyB0aGF0IEkgYW0gaW50ZXJlc3RlZCBpbi4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIGJ1aWxkIHByb2Nlc3MgZm9yIHRoaXMgYXJlYSBvZiB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMxOSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjExOjUwLjg4OTU5OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI4MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzNTpcXHRcXHRoZWxwXFxuICAzNjpcXHRcXHQgIFlvdSBjYW4gc2F5IE4gaGVyZSBpZiB5b3UgZG8gbm90IGludGVuZCB0byB1c2UgYW55IG9mIHRoZVxcbiAgMzc6XFx0XFx0ICBuZXR3b3JraW5nIGNvcmUgZHJpdmVycyAoaS5lLiBWTEFOLCBicmlkZ2luZywgYm9uZGluZywgZXRjLilcXG4gIDM4OlxcdFxcbiAgMzk6XFx0aWYgTkVUX0NPUkVcXG4gIDQwOlxcdFxcbiAgNDE6XFx0Y29uZmlnIEJPTkRJTkdcXG4gIDQyOlxcdFxcdHRyaXN0YXRlIFxcXCJCb25kaW5nIGRyaXZlciBzdXBwb3J0XFxcIlxcbiAgNDM6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIFRMUyB8fCBUTFNfREVWSUNFPW5cXG4gIDQ1OlxcdFxcdGhlbHBcXG4gIDQ2OlxcdFxcdCAgU2F5ICdZJyBvciAnTScgaWYgeW91IHdpc2ggdG8gYmUgYWJsZSB0byAnYm9uZCcgbXVsdGlwbGUgRXRoZXJuZXRcXG4gIDQ3OlxcdFxcdCAgQ2hhbm5lbHMgdG9nZXRoZXIuIFRoaXMgaXMgY2FsbGVkICdFdGhlcmNoYW5uZWwnIGJ5IENpc2NvLFxcbiAgNDg6XFx0XFx0ICAnVHJ1bmtpbmcnIGJ5IFN1biwgODAyLjNhZCBieSB0aGUgSUVFRSwgYW5kICdCb25kaW5nJyBpbiBMaW51eC5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0ICBUaGUgZHJpdmVyIHN1cHBvcnRzIG11bHRpcGxlIGJvbmRpbmcgbW9kZXMgdG8gYWxsb3cgZm9yIGJvdGggaGlnaFxcbiAgNTE6XFx0XFx0ICBwZXJmb3JtYW5jZSBhbmQgaGlnaCBhdmFpbGFiaWxpdHkgb3BlcmF0aW9uLlxcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHQgIFJlZmVyIHRvIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnJzdFxcdTAwM2UgZm9yIG1vcmVcXG4gIDU0OlxcdFxcdCAgaW5mb3JtYXRpb24uXFxuICA1NTpcXHRcXG4gIDU2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgNTc6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBib25kaW5nLlxcbiAgNTg6XFx0XFxuICA1OTpcXHRjb25maWcgRFVNTVlcXG4gIDYwOlxcdFxcdHRyaXN0YXRlIFxcXCJEdW1teSBuZXQgZHJpdmVyIHN1cHBvcnRcXFwiXFxuICA2MTpcXHRcXHRoZWxwXFxuICA2MjpcXHRcXHQgIFRoaXMgaXMgZXNzZW50aWFsbHkgYSBiaXQtYnVja2V0IGRldmljZSAoaS5lLiB0cmFmZmljIHlvdSBzZW5kIHRvXFxuICA2MzpcXHRcXHQgIHRoaXMgZGV2aWNlIGlzIGNvbnNpZ25lZCBpbnRvIG9ibGl2aW9uKSB3aXRoIGEgY29uZmlndXJhYmxlIElQXFxuICA2NDpcXHRcXHQgIGFkZHJlc3MuIEl0IGlzIG1vc3QgY29tbW9ubHkgdXNlZCBpbiBvcmRlciB0byBtYWtlIHlvdXIgY3VycmVudGx5XFxuICA2NTpcXHRcXHQgIGluYWN0aXZlIFNMSVAgYWRkcmVzcyBzZWVtIGxpa2UgYSByZWFsIGFkZHJlc3MgZm9yIGxvY2FsIHByb2dyYW1zLlxcbiAgNjY6XFx0XFx0ICBJZiB5b3UgdXNlIFNMSVAgb3IgUFBQLCB5b3UgbWlnaHQgd2FudCB0byBzYXkgWSBoZXJlLiBJdCB3b24ndFxcbiAgNjc6XFx0XFx0ICBlbmxhcmdlIHlvdXIga2VybmVsLiBXaGF0IGEgZGVhbC4gUmVhZCBhYm91dCBpdCBpbiB0aGUgTmV0d29ya1xcbiAgNjg6XFx0XFx0ICBBZG1pbmlzdHJhdG9yJ3MgR3VpZGUsIGF2YWlsYWJsZSBmcm9tXFxuICA2OTpcXHRcXHQgIFxcdTAwM2NodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNndWlkZVxcdTAwM2UuXFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgNzI6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBkdW1teS5cXG4gIDczOlxcdFxcbiAgNzQ6XFx0Y29uZmlnIFdJUkVHVUFSRFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMzoxMTo1MC44ODk3MDI2OTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA4NjczNzU2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoYXQsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBCb25kaW5nIE1vZHVsZSBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgYm9uZF9hbGIuY2AgaXMgYmVpbmcgY29tcGlsZWQgd2l0aGluIHRoZSBib25kaW5nIG1vZHVsZS4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LCBpcyB0byBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlIG9mIHRydXRoIGZvciBidWlsZCBpbnN0cnVjdGlvbnM6IHRoZSBgTWFrZWZpbGVgIGxvY2F0ZWQgaW4gdGhlIGBkcml2ZXJzL25ldC9ib25kaW5nL2AgZGlyZWN0b3J5LiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBhdCBsZWFzdCwgd2hlcmUgdGhlIGluc3RydWN0aW9ucyBmb3IgdGhlIG1hZ2ljIGFyZSB3cml0dGVuLiBJJ2xsIHRha2UgYSBsb29rIGF0IGBkcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlYCBhbmQgc2VlIGV4YWN0bHkgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhlIGNvbXBpbGF0aW9uIG9mIGBib25kX2FsYi5jYC4gVGhhdCBmaWxlIHNob3VsZCBnaXZlIG1lIGFsbCB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHJlZ2FyZGluZyBjb21waWxlciBmbGFncywgZGVwZW5kZW5jaWVzLCBvYmplY3QgZmlsZSBnZW5lcmF0aW9uLCBhbmQgbGlua2luZy4gVGhhdCdzIHRoZSBiZXN0IHdheSB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGJ1aWxkcyB0aGF0IHNwZWNpZmljIGNvbXBvbmVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTExOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDM6MTE6NTIuOTc2NDQyNzIzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIHRoZSBFdGhlcm5ldCBCb25kaW5nIGRyaXZlclxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfQk9ORElORykgKz0gYm9uZGluZy5vXFxuICAgNzpcXHRcXG4gICA4OlxcdGJvbmRpbmctb2JqcyA6PSBib25kX21haW4ubyBib25kXzNhZC5vIGJvbmRfYWxiLm8gYm9uZF9zeXNmcy5vIGJvbmRfc3lzZnNfc2xhdmUubyBib25kX2RlYnVnZnMubyBib25kX25ldGxpbmsubyBib25kX29wdGlvbnMub1xcbiAgIDk6XFx0XFxuICAxMDpcXHRwcm9jLSQoQ09ORklHX1BST0NfRlMpICs9IGJvbmRfcHJvY2ZzLm9cXG4gIDExOlxcdGJvbmRpbmctb2JqcyArPSAkKHByb2MteSlcXG4gIDEyOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMzoxMTo1Mi45NzY1MTg3MDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjczNzg1OTA0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBCb25kaW5nIGFuZCBJUHY2IERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBDT05GSUdfQk9ORElOR2AsIGFuZCBpdCdzIGNsZWFyIGl0IGRlcGVuZHMgb24gYElORVRgIGFuZCBgTkVUX0NPUkVgLiBCdXQgSSBuZWVkIHRvIGRldGVybWluZSBpZiBJUHY2IGlzIGFsc28gYSByZXF1aXJlbWVudCwgb3IgYXQgbGVhc3QgYSBkZXBlbmRlbmN5IGluIHRoZSBBZHZhbmNlZCBMb2FkIEJhbGFuY2luZyAoQUxCKSBjb250ZXh0LiBNeSBpbnN0aW5jdCBzYXlzIEkgc2hvdWxkIGRpdmUgaW50byB0aGUgY29kZSB0byBjb25maXJtIG15IHN1c3BpY2lvbnMgYW5kIHRvIHdoYXQgZXh0ZW50IElQdjYgYW5kIHRoZSBib25kaW5nIGRyaXZlciBhcmUgbGlua2VkLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBJUHY2IGludm9sdmVtZW50LiBTcGVjaWZpY2FsbHksIEkga25vdyB0aGF0IGBhbGJfZGV0ZXJtaW5lX25kYCBtZXRob2QgY291bGQgcG90ZW50aWFsbHkgcmV2ZWFsIHdoZXRoZXIgSVB2NiBpcyBpbnRlZ3JhbCB0byBpdHMgZnVuY3Rpb25pbmcuIEknbGwgbmVlZCB0byBjaGVjayBob3cgaXQgaGFuZGxlcyBJUHY2IGhlYWRlcnMgYW5kIElDTVB2NiBwYWNrZXRzIChuZWlnaGJvciBkaXNjb3ZlcnksIGFkdmVydGlzZW1lbnRzLCBzb2xpY2l0YXRpb25zIC0gTkRJU0NfTkVJR0hCT1VSX0FEVkVSVElTRU1FTlQsIE5ESVNDX05FSUdIQk9VUl9TT0xJQ0lUQVRJT04pLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBpbmRpY2F0aW9uLlxuXG5VbHRpbWF0ZWx5LCBJIHdhbnQgdG8gY2xhcmlmeSB3aGV0aGVyIGBDT05GSUdfSVBWNmAgaXMgKmFic29sdXRlbHkqIG5lZWRlZCBmb3IgdGhlIGJvbmRpbmcgZHJpdmVyIHRvIGZ1bmN0aW9uLCBvciBpZiBib25kaW5nIGNhbiB3b3JrIGluZGVwZW5kZW50bHksIG9yIHBlcmhhcHMgb25seSB3b3JrcyB3aXRoIGBDT05GSUdfSVBWNmAgZW5hYmxlZC4gSSBjYW4gYWNjb21wbGlzaCB0aGlzIGJ5IGNoZWNraW5nIGZvciBhIGRpcmVjdCBsaW5rIGJldHdlZW4gYENPTkZJR19JUFY2YCBhbmQgdGhlIGJvbmRpbmcgZHJpdmVyLCBzbyBJJ2xsIG5leHQgc2VhcmNoIHRoZSBgZHJpdmVycy9uZXQvYm9uZGluZy9gIGRpcmVjdG9yeSBmb3IgcmVmZXJlbmNlcyB0byBpdC4gVGhpcyBzaG91bGQgcXVpY2tseSBhbnN3ZXIgbXkgcXVlc3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NjEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMzoxMTo1NS43MTQzODAzODhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzEzNDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQVjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTM3MT1zdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzODMtXFx0XFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjEzODQ6XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTM4NS1cXHRcXHRcXHRpZiAoYWxiX2RldGVybWluZV9uZChza2IpKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTE0MTk9c3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNDUxLVxcdH1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTQ1MjpcXHRjYXNlIEVUSF9QX0lQVjY6IHtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQ1My1cXHRcXHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aGRyO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0yMTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBmbG93X2Rpc3NlY3Rvcl9rZXkgZmxvd19rZXlzX2JvbmRpbmdfa2V5c1tdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMjctXFx0e1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MjI4OlxcdFxcdC5rZXlfaWQgPSBGTE9XX0RJU1NFQ1RPUl9LRVlfSVBWNl9BRERSUyxcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTIyOS1cXHRcXHQub2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGZsb3dfa2V5cywgYWRkcnMudjZhZGRycyksXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTMxNTQ9c3RhdGljIGludCBib25kX2FycF9yY3YoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTMyMzMtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzozMjM0OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzIzNS1zdGF0aWMgdm9pZCBib25kX25zX3NlbmQoc3RydWN0IHNsYXZlICpzbGF2ZSwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkcixcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MzQyMz1pbnQgYm9uZF9yY3ZfdmFsaWRhdGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTM0MjUte1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzQyNjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjM0Mjc6XFx0Ym9vbCBpc19pcHY2ID0gc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBfX2NwdV90b19iZTE2KEVUSF9QX0lQVjYpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQyOC0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQzNi1cXHRcXHRpZiAoKHNsYXZlX2RvX2FycF92YWxpZGF0ZV9vbmx5KGJvbmQpIFxcdTAwMjZcXHUwMDI2IGlzX2FycCkgfHxcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjM0Mzc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zNDM4LVxcdFxcdCAgICAoc2xhdmVfZG9fYXJwX3ZhbGlkYXRlX29ubHkoYm9uZCkgXFx1MDAyNlxcdTAwMjYgaXNfaXB2NikgfHxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQ0NC1cXHRcXHRyZXR1cm4gYm9uZF9hcnBfcmN2KHNrYiwgYm9uZCwgc2xhdmUpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzQ0NTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTM0NDYtXFx0fSBlbHNlIGlmIChpc19pcHY2IFxcdTAwMjZcXHUwMDI2IGxpa2VseShpcHY2X21vZF9lbmFibGVkKCkpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTM0NTQ9c3RhdGljIHZvaWQgYm9uZF9zZW5kX3ZhbGlkYXRlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zNDU2LVxcdGJvbmRfYXJwX3NlbmRfYWxsKGJvbmQsIHNsYXZlKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjM0NTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zNDU4LVxcdGlmIChsaWtlbHkoaXB2Nl9tb2RfZW5hYmxlZCgpKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NDEyOD1zdGF0aWMgYm9vbCBib25kX2Zsb3dfaXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZsb3dfa2V5cyAqZmssIGNvbnN0IHZvaWQgKmRhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQxNDMtXFx0XFx0XFx0KmlwX3Byb3RvID0gaXBoLVxcdTAwM2Vwcm90b2NvbDtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQxNDQ6XFx0fSBlbHNlIGlmIChsMl9wcm90byA9PSBodG9ucyhFVEhfUF9JUFY2KSkge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDE0NS1cXHRcXHRkYXRhID0gYm9uZF9wdWxsX2RhdGEoc2tiLCBkYXRhLCBobGVuLCAqbmhvZmYgKyBzaXplb2YoKmlwaDYpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTI2Mz1zdGF0aWMgYm9vbCBib25kX3Nob3VsZF9icm9hZGNhc3RfbmVpZ2hib3Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTI4MC1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjUyODE6XFx0aWYgKHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUyODItXFx0XFx0Y29tYmluZWQgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBza2JfbWFjX2hlYWRlcl9sZW4oc2tiKSxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTQ1Nz1zdGF0aWMgdm9pZCBib25kX3NrX3RvX2Zsb3coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd19rZXlzICpmbG93KVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NDU5LVxcdHN3aXRjaCAoc2stXFx1MDAzZXNrX2ZhbWlseSkge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTQ2MDojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU0NjEtXFx0Y2FzZSBBRl9JTkVUNjpcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU0NjItXFx0XFx0aWYgKGlwdjZfb25seV9zb2NrKHNrKSB8fFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTQ2MzpcXHRcXHQgICAgaXB2Nl9hZGRyX3R5cGUoXFx1MDAyNnNrLVxcdTAwM2Vza192Nl9kYWRkcikgIT0gSVBWNl9BRERSX01BUFBFRCkge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTQ2NDpcXHRcXHRcXHRmbG93LVxcdTAwM2Vjb250cm9sLmFkZHJfdHlwZSA9IEZMT1dfRElTU0VDVE9SX0tFWV9JUFY2X0FERFJTO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTQ2NS1cXHRcXHRcXHRmbG93LVxcdTAwM2VhZGRycy52NmFkZHJzLnNyYyA9IGluZXQ2X3NrKHNrKS1cXHUwMDNlc2FkZHI7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTYwODc9c3RhdGljIGludCBfX2luaXQgYm9uZF9jaGVja19wYXJhbXMoc3RydWN0IGJvbmRfcGFyYW1zICpwYXJhbXMpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTY0NzAtXFx0bWVtY3B5KHBhcmFtcy1cXHUwMDNlYXJwX3RhcmdldHMsIGFycF90YXJnZXQsIHNpemVvZihhcnBfdGFyZ2V0KSk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2NDcxOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjQ3Mi1cXHRtZW1zZXQocGFyYW1zLVxcdTAwM2Vuc190YXJnZXRzLCAwLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSAqIEJPTkRfTUFYX05TX1RBUkdFVFMpO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYz0yMTY9c3RhdGljIGludCBib25kX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0zMzktXFx0fVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6MzQwOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMzQxLVxcdGlmIChkYXRhW0lGTEFfQk9ORF9OU19JUDZfVEFSR0VUXSkge1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYz03MDA9c3RhdGljIGludCBib25kX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy03NzAtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo3NzE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy03NzItXFx0dGFyZ2V0cyA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgSUZMQV9CT05EX05TX0lQNl9UQVJHRVQpO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYz0xMjYwPXN0YXRpYyBpbnQgYm9uZF9vcHRpb25fYXJwX2lwX3RhcmdldHNfc2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xMjg1LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM6MTI4NjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTEyODctc3RhdGljIGJvb2wgc2xhdmVfY2FuX3NldF9uc19tYWRkcihjb25zdCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9wcm9jZnMuYz01OT1zdGF0aWMgdm9pZCBib25kX2luZm9fc2hvd19tYXN0ZXIoc3RydWN0IHNlcV9maWxlICpzZXEpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfcHJvY2ZzLmMtMTM4LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9wcm9jZnMuYzoxMzk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3Byb2Nmcy5jLTE0MC1cXHRcXHRwcmludGVkID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDM6MTE6NTUuNzU4NzAyOTg2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNzcyNDUzNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIGFuZCBmaWd1cmUgb3V0IGlmIGl0J3Mgd29ydGggZnV6emluZy4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcy4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIGl0IGNvbmNlcm5zIGFuIHVwZGF0ZSB0byBob3cgSVB2NiBwYWNrZXRzIGFyZSBoYW5kbGVkIGluIGJvbmRpbmcgVExCL0FMQiBtb2RlcyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGFsYl9kZXRlcm1pbmVfbmRgIGZ1bmN0aW9uLlxuXG5JIHNlZSBhIGNoYW5nZSB3aGVyZSB0aGUgY29kZSBwcmV2aW91c2x5IHJlbGllZCBvbiBgaWNtcDZfaGRyKHNrYilgIGJ1dCBtaWdodCBoYXZlIGJlZW4gdXNpbmcgYW4gaW52YWxpZCBvZmZzZXQgZm9yIHRoZSB0cmFuc3BvcnQgaGVhZGVyLiBUaGUgY29kZSBwdWxscyBpbiBtb3JlIGRhdGEgaW50byBsaW5lYXIgbWVtb3J5LCB3aGljaCBtaWdodCBjYXVzZSBgc2tiLVx1MDAzZWhlYWRgIHRvIGdldCByZWFsbG9jYXRlZC4gSXQgYXBwZWFycyB0aGF0IGBpcDZoZHJgIHdhc24ndCByZWxvYWRlZCBhZnRlciBgcHNrYl9uZXR3b3JrX21heV9wdWxsYCwgbGVhZGluZyB0byBhIHBvc3NpYmxlIHVzZSBvZiBhbiBpbnZhbGlkIHBvaW50ZXIuIEFsc28sIHRoZXJlJ3MgYSByZW1vdmVkIHVudXNlZCBhcmd1bWVudC5cblxuVGhpcyBtb2RpZmljYXRpb24gYWZmZWN0cyBJUHY2IHBhY2tldCB0cmFuc21pc3Npb24gaW4gYm9uZGluZyBUTEIgLyBBTEIgbW9kZXMsIGludm9sdmluZyBmdW5jdGlvbnMgbGlrZSBgYm9uZF90bGJfeG1pdGAsIGBib25kX2FsYl94bWl0YCwgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCBhbmQgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YC4gQm9uZGluZyBpcyBhIGZ1bGx5IHNvZnR3YXJlLWVtdWxhdGVkIHZpcnR1YWwgbmV0d29ya2luZyBkZXZpY2UgY3JlYXRlZCB2aWEgc3RhbmRhcmQgTGludXggbmV0d29ya2luZyB0b29scyAocnRubCwgbmV0bGluaywgc3lzZnMsIGlvY3RsKSBhbmQgY2FuIGJlIGVhc2lseSByZXByb2R1Y2VkIGluIFFFTVUvR0NFLiBBbnkgdXNlciBvciBmdXp6ZXIgY2FuIGNyZWF0ZSBhIGJvbmRpbmcgaW50ZXJmYWNlLCBlbnNsYXZlIHZpcnR1YWwgaW50ZXJmYWNlcywgc2V0IHRoZSBtb2RlIHRvIFRMQiBvciBBTEIsIGFuZCB0cmFuc21pdCBJUHY2IHBhY2tldHMgdGhyb3VnaCBpdC5cblxuR2l2ZW4gdGhhdCB0aGlzIGNvZGUgaXMgaW4gYSByZWFjaGFibGUgcGFydCBvZiB0aGUgbmV0d29ya2luZyBzdGFjayB0aGF0IGNhbiBiZSBlYXNpbHkgc2V0IHVwIGluIGEgc3RhbmRhcmQgTGludXggZW52aXJvbm1lbnQsIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBXZSBjYW4gY3JlYXRlIGEgdGVzdCBzZXR1cCBxdWlja2x5IGFuZCB0cmlnZ2VyIHRoZSBjb2RlIHRoYXQgd2F5LlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgZm9jdXMgc3ltYm9scyBhbmQgc2VlIGlmIHdlIGNhbiBpZGVudGlmeSBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLlxuXG5gYWxiX2RldGVybWluZV9uZGAgc2VlbXMgdG8gYmUgaW5saW5lZCBpbnRvIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgLyBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgLiBUaGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhpcyBwYXRoIGFyZTpcblxuKiAgIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGBcbiogICBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgXG4qICAgYGJvbmRfdGxiX3htaXRgXG4qICAgYGJvbmRfYWxiX3htaXRgXG5cbkkgd2lsbCBncmVwIHRoZSBjb2RlYmFzZSBmb3IgYGJvbmRfYWxiX3htaXRgIG9yIGBib25kX3RsYl94bWl0YCB0byBtYWtlIHN1cmUgdGhlIHN5bWJvbHMgYXJlIHVzZWQgYW5kIGV4aXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI2NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMzoxMjowMC44MzU5NTExMjJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzQxNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJvbmRfKGFsYnx0bGIpX3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MjI3PXN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnRsYl9jaG9vc2VfY2hhbm5lbChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdTMyIGhhc2hfaW5kZXgsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjMyLVxcdC8qIFdlIGRvbid0IG5lZWQgdG8gZGlzYWJsZSBzb2Z0aXJxIGhlcmUsIGJlY2F1c2VcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MjMzOlxcdCAqIHRsYl9jaG9vc2VfY2hhbm5lbCgpIGlzIG9ubHkgY2FsbGVkIGJ5IGJvbmRfYWxiX3htaXQoKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yMzQtXFx0ICogd2hpY2ggYWxyZWFkeSBoYXMgc29mdGlycSBkaXNhYmxlZC5cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xMzcxPXN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQwOS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTQxMDpuZXRkZXZfdHhfdCBib25kX3RsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQxMS17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTQxOT1zdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1MjMtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE1MjQ6bmV0ZGV2X3R4X3QgYm9uZF9hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1MjUte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01NTUyPXN0YXRpYyBuZXRkZXZfdHhfdCBfX2JvbmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTc4LVxcdGNhc2UgQk9ORF9NT0RFX0FMQjpcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU1Nzk6XFx0XFx0cmV0dXJuIGJvbmRfYWxiX3htaXQoc2tiLCBkZXYpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTU4MC1cXHRjYXNlIEJPTkRfTU9ERV9UTEI6XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1NTgxOlxcdFxcdHJldHVybiBib25kX3RsYl94bWl0KHNrYiwgZGV2KTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU1ODItXFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDM6MTI6MDAuODgwMzAxNzRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE1OTcwOTY1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEJvbmQgQUxCIFRyYW5zbWlzc2lvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoZXNlIHRyYW5zbWlzc2lvbiBmdW5jdGlvbnMgYXJlIGRlZmluZWQgYW5kIGRlY2xhcmVkLiBJJ20gZm9jdXNpbmcgb24gYGJvbmRfYWxiX3htaXRgLCBgYm9uZF90bGJfeG1pdGAsIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAsIGFuZCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgLiBUaGUgZmFjdCB0aGF0IGFsbCBmb3VyIGFyZSBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgYm9uZF9hbGIuY2AgaXMgdGhlIGtleS4gTm93LCBJIG5lZWQgdG8gY29uZmlybSB0aGVpciBkZWNsYXJhdGlvbnMgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmZhY2UuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGVpdGhlciBgaW5jbHVkZS9uZXQvYm9uZF9hbGIuaGAgb3IgYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuaGAg4oCTIG9uZSBvZiB0aG9zZSBzaG91bGQgaGF2ZSB0aGUgZGVmaW5pdGlvbnMgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA3NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMzoxMjowMy4wNDAwMTM3ODlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MTc0NDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJvbmRfdGxiX3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTM3MT1zdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MDktXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE0MTA6bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MTEte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01NTUyPXN0YXRpYyBuZXRkZXZfdHhfdCBfX2JvbmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTgwLVxcdGNhc2UgQk9ORF9NT0RFX1RMQjpcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU1ODE6XFx0XFx0cmV0dXJuIGJvbmRfdGxiX3htaXQoc2tiLCBkZXYpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTU4Mi1cXHRkZWZhdWx0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMzoxMjowMy4wODQxOTQwNDdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODE5OTM0MDQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIEJvbmRpbmcgRHJpdmVyIEltcGxlbWVudGF0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYm9uZGluZyBkcml2ZXIgY29kZSB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGhhbmRsaW5nIHRoaXMgcGFydGljdWxhciBzaXR1YXRpb24uIEdpdmVuIG15IGV4cGVydGlzZSwgSSdsbCBzdGFydCB3aXRoIHRoZSBtb3N0IGxpa2VseSBjYW5kaWRhdGVzIGZvciB0aGUgY29yZSBsb2dpYy4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdG8gY2hlY2sgdGhlIGhlYWRlciBmaWxlcyBmaXJzdC4gIEknbSB0aGlua2luZyBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5oYCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBkZWZpbml0aW9ucyByZWxhdGVkIHRvIEFkYXB0aXZlIExvYWQgQmFsYW5jaW5nLiBBbHRlcm5hdGl2ZWx5LCAgYGluY2x1ZGUvbmV0L2JvbmRpbmcuaGAgc2hvdWxkIGNvbnRhaW4gbW9yZSBnZW5lcmljIGJvbmRpbmctcmVsYXRlZCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gIERlcGVuZGluZyBvbiB3aGF0IEkgZmluZCBpbiB0aGVzZSBoZWFkZXJzLCBJJ2xsIGtub3cgd2hlcmUgdG8gZHJpbGwgZG93biBuZXh0IOKAkyBwcm9iYWJseSBpbnRvIHRoZSBzb3VyY2UgZmlsZXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY0NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjEyOjExLjI4MzUzNzU1M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1NjgyOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYm9uZF9hbGJfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvYm9uZF9hbGIuaD0xNTg9dm9pZCBib25kX2FsYl9oYW5kbGVfYWN0aXZlX2NoYW5nZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpuZXdfc2xhdmUpO1xcbmluY2x1ZGUvbmV0L2JvbmRfYWxiLmg6MTU5Om5ldGRldl90eF90IGJvbmRfYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KTtcXG5pbmNsdWRlL25ldC9ib25kX2FsYi5oLTE2MC1uZXRkZXZfdHhfdCBib25kX3RsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjEyOjExLjM0MjExMTYyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0MDEzNDQwMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIGBib25kX2FsYi5oYCBmb3IgUG90ZW50aWFsIElzc3VlcyoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBBY3RpdmUtQmFja3VwIExvYWQgQmFsYW5jaW5nIChBTEIpIGltcGxlbWVudGF0aW9uIHdpdGhpbiBib25kaW5nLiBUaGUgbGlrZWx5IHNwb3QgZm9yIHRoZSBoZWFydCBvZiB0aGUgbG9naWMsIG9yIGEgY3J1Y2lhbCBkYXRhIHN0cnVjdHVyZSwgcmVsYXRlZCB0byB0aGUgQUxCIGZ1bmN0aW9uYWxpdHkgd291bGQgYmUgYXJvdW5kIGxpbmUgMTU1IGluIGBpbmNsdWRlL25ldC9ib25kX2FsYi5oYC4gTGV0J3MgcHVsbCB0aGF0IHVwIGFuZCBzZWUgd2hhdCdzIHdoYXQuIEknbSBleHBlY3RpbmcgdG8gZmluZCBhIHBvdGVudGlhbCBhcmVhIGZvciBvcHRpbWl6YXRpb24sIGEgYnVnLCBvciBqdXN0IGEgcGxhY2UgSSBzaG91bGQgYmUgbW9yZSBkZWVwbHkgZmFtaWxpYXIgd2l0aCBnaXZlbiB3aGF0IEkgYW0gd29ya2luZyBvbiBub3cuIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSB0aGUgc3RydWN0dXJlIGRlZmluaW5nIGhvdyB3ZSBzZWxlY3QgdGhlIGFjdGl2ZSBzbGF2ZSwgdG8gdGhlIGxvZ2ljIHRoYXQgaGFuZGxlcyBsaW5rIGZhaWx1cmVzLCBvciBldmVuIGhvdyB3ZSB0cmFjayB0aGUgc3RhdGUgb2YgdGhlIHNsYXZlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMTQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMzoxMjoxNS43NDM0NTc5NzVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvYm9uZF9hbGIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNDUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAqIG9mIGNsaWVudCB1cGRhdGVcXG4gMTQ2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgKi9cXG4gMTQ3OlxcdFxcdHU4XFx0XFx0XFx0cmxiX3JlYmFsYW5jZTtcXHQvKiBmbGFnIC0gaW5kaWNhdGVzIHRoYXQgdGhlXFxuIDE0ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgKiByeCB0cmFmZmljIHNob3VsZCBiZVxcbiAxNDk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICogcmViYWxhbmNlZFxcbiAxNTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICovXFxuIDE1MTpcXHR9O1xcbiAxNTI6XFx0XFxuIDE1MzpcXHRpbnQgYm9uZF9hbGJfaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgaW50IHJsYl9lbmFibGVkKTtcXG4gMTU0OlxcdHZvaWQgYm9uZF9hbGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKTtcXG4gMTU1OlxcdGludCBib25kX2FsYl9pbml0X3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKTtcXG4gMTU2OlxcdHZvaWQgYm9uZF9hbGJfZGVpbml0X3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKTtcXG4gMTU3OlxcdHZvaWQgYm9uZF9hbGJfaGFuZGxlX2xpbmtfY2hhbmdlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCBjaGFyIGxpbmspO1xcbiAxNTg6XFx0dm9pZCBib25kX2FsYl9oYW5kbGVfYWN0aXZlX2NoYW5nZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpuZXdfc2xhdmUpO1xcbiAxNTk6XFx0bmV0ZGV2X3R4X3QgYm9uZF9hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpO1xcbiAxNjA6XFx0bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpO1xcbiAxNjE6XFx0c3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4gMTYyOlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpO1xcbiAxNjM6XFx0c3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4gMTY0OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpO1xcbiAxNjU6XFx0dm9pZCBib25kX2FsYl9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTtcXG4gMTY2OlxcdGludCBib25kX2FsYl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCB2b2lkICphZGRyKTtcXG4gMTY3OlxcdHZvaWQgYm9uZF9hbGJfY2xlYXJfdmxhbihzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdW5zaWduZWQgc2hvcnQgdmxhbl9pZCk7XFxuIDE2ODpcXHQjZW5kaWYgLyogX05FVF9CT05EX0FMQl9IICovXFxuIDE2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDM6MTI6MTUuNzQzNTI1Mjg1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc2NDk1MTc1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgQm9uZGluZyBEcml2ZXIgUGF0Y2ggZm9yIEZ1enppbmcgUHJpb3JpdGl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEl0IGxvb2tzIGxpa2Ugd2UgbmVlZCBgQk9ORElOR2AsIG5hdHVyYWxseSwgc2luY2UgaXQncyB0aGUgdGFyZ2V0LCBhbmQgYElORVRgIGJlY2F1c2UgYEJPTkRJTkdgIGRlcGVuZHMgb24gaXQuIENydWNpYWxseSwgZ2l2ZW4gdGhhdCB0aGUgY29kZSBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBJUHY2IE5laWdoYm9yIERpc2NvdmVyeSBwYWNrZXRzLCBgSVBWNmAgaXMgYWxzbyBlc3NlbnRpYWwuICBGdXJ0aGVybW9yZSwgYEJPTkRJTkdgIGlzIG5lc3RlZCB3aXRoaW4gYE5FVF9DT1JFYCBpbiB0aGUgS2NvbmZpZywgc28gdGhhdCBuZWVkcyB0byBiZSBlbmFibGVkIHRvby5cblxuSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIGluIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmb3IgYEJPTkRJTkdgIGFuZCB5ZXAsIGl0J3MgYElORVRgIGFuZCBlaXRoZXIgYFRMU2Agb3IgYFRMU19ERVZJQ0U9bmAgYXMgZXhwZWN0ZWQsIGFuZCBpdCdzIGFsbCBpbnNpZGUgYGlmIE5FVF9DT1JFYCwgYXMgSSBzYXcgYmVmb3JlLlxuXG5OZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhpcyBwYXRjaCB0b3VjaGVzLiBUaGUgYEZvY3VzU3ltYm9sc2AgbG9vayBsaWtlOiBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgLCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgLCBgYm9uZF9hbGJfeG1pdGAsIGFuZCBgYm9uZF90bGJfeG1pdGAuXG5cbk5vdywgSSBsb29rIGF0IHRoZSBnaXQgZGlmZiB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIGFuZCBzY29wZS4gSXQncyBqdXN0IGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgIHRoYXQncyBtb2RpZmllZC4gU3BlY2lmaWNhbGx5LCBpbiBgYWxiX2RldGVybWluZV9uZGA6IHRoZSB1bnVzZWQgYGJvbmRgIHBhcmFtZXRlciB3YXMgcmVtb3ZlZCwgd2hpY2ggaXMgbWlub3IuIE1vcmUgaW1wb3J0YW50bHksIHRoZSBwYXRjaCBhZGRzIGBpcDZoZHIgPSBpcHY2X2hkcihza2IpO2AgYWZ0ZXIgdGhlIGBwc2tiX25ldHdvcmtfbWF5X3B1bGxgIGNhbGwgdG8gaGFuZGxlIHBvdGVudGlhbCByZWFsbG9jYXRpb24gb2YgdGhlIGBza2ItXHUwMDNlaGVhZGAuICBBbHNvLCBpdCBjaGFuZ2VzIGhvdyB0aGUgSUNNUHY2IGhlYWRlciBpcyBhY2Nlc3NlZDsgdGhlIHVzZSBvZiBgaWNtcDZfaGRyKHNrYilgIGlzIHJlcGxhY2VkLiBUaGlzIGlzIGJlY2F1c2Ugb24gdGhlIHRyYW5zbWl0IHBhdGggYHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYilgIGlzbid0IHZhbGlkLCBzbyBpdCBtYWtlcyBzZW5zZSB0byBkaXJlY3RseSBjYWxjdWxhdGUgaXQgZnJvbSB0aGUgSVB2NiBoZWFkZXIuIFRoZSBjYWxsZXJzIG9mIGBhbGJfZGV0ZXJtaW5lX25kYCwgd2hpY2ggYXJlIHRoZSBmb2N1c2VkIHN5bWJvbHMgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCBhbmQgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCwgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgY2hhbmdlcy5cblxuTm93LCB0aGUgXCJXb3J0aEZ1enppbmdcIiBkZWNpc2lvbjogSXMgaXQgZnVuY3Rpb25hbD8gQWJzb2x1dGVseSwgaXQgY29ycmVjdHMgYW4gaW52YWxpZCBwb2ludGVyL3NrYiBoZWFkZXIgYWNjZXNzIGJ1ZyByZWxhdGVkIHRvIElQdjYgdHJhbnNtaXQgb3ZlciBib25kaW5nIEFMQi9UTEIgaW50ZXJmYWNlcy4gSXMgaXQgcmVhY2hhYmxlPyBZZXMsIGJvbmRpbmcgaXMgcHVyZWx5IHNvZnR3YXJlLiBUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmcgPSB0cnVlYC5cblxuRmluYWxseSwgdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2A6XG5cbiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgXG4qICAgYFJlYXNvbmluZ2A6IFRoaXMgcGF0Y2ggaXMgd29ydGggZnV6emluZyBiZWNhdXNlIGl0IGZpeGVzIGEgY3JpdGljYWwgYnVnIGluIHRoZSBwYXJzaW5nIG9mIElDTVB2NiBOZWlnaGJvdXIgQWR2ZXJ0aXNlbWVudC9Tb2xpY2l0YXRpb24gcGFja2V0cyBkdXJpbmcgdHJhbnNtaXQgaW4gYm9uZGluZyBBTEIgYW5kIFRMQiBtb2Rlcy4gSXQgY29ycmVjdHMgYSBoZWFkZXIgb2Zmc2V0IGNhbGN1bGF0aW9uIGFmdGVyIHRoZSBgcHNrYl9wdWxsYCBjYWxsLCBhZGRyZXNzaW5nIGFuIGludmFsaWQgbWVtb3J5IGFjY2Vzcy5cbiogICBgRm9jdXNTeW1ib2xzYDogYFtcImJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0XCIsIFwiYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRcIiwgXCJib25kX2FsYl94bWl0XCIsIFwiYm9uZF90bGJfeG1pdFwiXWBcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXCJCT05ESU5HXCIsIFwiSU5FVFwiLCBcIklQVjZcIiwgXCJORVRfQ09SRVwiXWBcblxuT2theSwgYWxsIHRoZSBwYXJhbWV0ZXJzIGFyZSBzZXQuIEknbSBjb25maWRlbnQgaW4gY2FsbGluZyBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTc4MiwiT3V0cHV0VG9rZW5zIjoyMDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMzoxMjoyMy4zOTMwNDU4NDNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDQwODM2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQk9ORElOR1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiLFxuICAgIFwiTkVUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX3htaXRfYWxiX3NsYXZlX2dldFwiLFxuICAgIFwiYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRcIixcbiAgICBcImJvbmRfYWxiX3htaXRcIixcbiAgICBcImJvbmRfdGxiX3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwYWNrZXQgaGVhZGVyIHBhcnNpbmcgZm9yIElQdjYgTmVpZ2hib3IgRGlzY292ZXJ5IChORCkgcGFja2V0cyBkdXJpbmcgdHJhbnNtaXQgbG9hZCBiYWxhbmNpbmcgaW4gYm9uZGluZyBBTEIgYW5kIFRMQiBtb2RlcyAoYWxiX2RldGVybWluZV9uZCkuIFByZXZpb3VzbHksIGl0IHVzZWQgaWNtcDZfaGRyKHNrYikgKHdoaWNoIHJlbGllcyBvbiBza2JfdHJhbnNwb3J0X2hlYWRlciwgbm90IG5lY2Vzc2FyaWx5IHNldCBvbiB0aGUgVFggcGF0aCkgYW5kIGRpZG4ndCByZWxvYWQgdGhlIElQdjYgaGVhZGVyIHBvaW50ZXIgYWZ0ZXIgcHNrYl9uZXR3b3JrX21heV9wdWxsIHJlYWxsb2NhdGlvbnMuIFRoaXMgZnVuY3Rpb25hbCBmaXggYWZmZWN0cyBwYWNrZXQgdHJhbnNtaXNzaW9uIG92ZXIgYm9uZGluZyB2aXJ0dWFsIGludGVyZmFjZXMgYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQk9ORElOR1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiLFxuICAgIFwiTkVUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX3htaXRfYWxiX3NsYXZlX2dldFwiLFxuICAgIFwiYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRcIixcbiAgICBcImJvbmRfYWxiX3htaXRcIixcbiAgICBcImJvbmRfdGxiX3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwYWNrZXQgaGVhZGVyIHBhcnNpbmcgZm9yIElQdjYgTmVpZ2hib3IgRGlzY292ZXJ5IChORCkgcGFja2V0cyBkdXJpbmcgdHJhbnNtaXQgbG9hZCBiYWxhbmNpbmcgaW4gYm9uZGluZyBBTEIgYW5kIFRMQiBtb2RlcyAoYWxiX2RldGVybWluZV9uZCkuIFByZXZpb3VzbHksIGl0IHVzZWQgaWNtcDZfaGRyKHNrYikgKHdoaWNoIHJlbGllcyBvbiBza2JfdHJhbnNwb3J0X2hlYWRlciwgbm90IG5lY2Vzc2FyaWx5IHNldCBvbiB0aGUgVFggcGF0aCkgYW5kIGRpZG4ndCByZWxvYWQgdGhlIElQdjYgaGVhZGVyIHBvaW50ZXIgYWZ0ZXIgcHNrYl9uZXR3b3JrX21heV9wdWxsIHJlYWxsb2NhdGlvbnMuIFRoaXMgZnVuY3Rpb25hbCBmaXggYWZmZWN0cyBwYWNrZXQgdHJhbnNtaXNzaW9uIG92ZXIgYm9uZGluZyB2aXJ0dWFsIGludGVyZmFjZXMgYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjEyOjIzLjQ4MzQ2MTc5OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc4NzIzMDMyNDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMzoxMjoyMy40ODM5NTg1MTlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3Nzg3MTgwMDkyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGFsYl9kZXRlcm1pbmVfbmQoKWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY2AgdG8gY29tcHV0ZSB0aGUgSUNNUHY2IGhlYWRlciBsb2NhdGlvbiBkaXJlY3RseSBmb2xsb3dpbmcgdGhlIElQdjYgaGVhZGVyIChgKGNvbnN0IHN0cnVjdCBpY21wNmhkciAqKShpcDZoZHIgKyAxKWApIGluc3RlYWQgb2YgaW52b2tpbmcgYGljbXA2X2hkcihza2IpYCAod2hpY2ggcmVsaWVzIG9uIGBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpYCBiZWluZyBpbml0aWFsaXplZCkuIEl0IGFsc28gZHJvcHMgYW4gdW51c2VkIGBib25kYCBwYXJhbWV0ZXIuXFxuXFxuVGhlIHBhY2tldCBwYXlsb2FkIGJ5dGVzIHJlYWQgYnkgdGhpcyBmdW5jdGlvbiBhcmUgdmVyaWZpZWQgdG8gZXhpc3QgaW4gdGhlIGxpbmVhciBidWZmZXIgdXNpbmcgYHBza2JfbmV0d29ya19tYXlfcHVsbCgpYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbnkgcG90ZW50aWFsIGJ1ZmZlciBib3VuZHMgb3Igc2tiIGRlcmVmZXJlbmNlIGlzc3VlcyBpbiB0aGlzIHBhdGggYXJlIGNvdmVyZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRkOGQ2MjU4ODNjNzNlM2EwODEwMmQ4MTM5NDE2MjVhYjJmMTg5YjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDAzOjExOjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXG5pbmRleCA4MzlmNzQ4MmRjMTgyLi41MDczYWVlYmE2Yzk3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXG4rKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbkBAIC0xMjgxLDEwICsxMjgxLDEwIEBAIHN0YXRpYyBpbnQgYWxiX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdm9pZCAqYWRkcilcbiB9XG4gXG4gLyogZGV0ZXJtaW5lIGlmIHRoZSBwYWNrZXQgaXMgTkEgb3IgTlMgKi9cbi1zdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKVxuK3N0YXRpYyBib29sIGFsYl9kZXRlcm1pbmVfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aGRyO1xuLVx0c3RydWN0IGljbXA2aGRyICpoZHI7XG4rXHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aGRyO1xuK1x0Y29uc3Qgc3RydWN0IGljbXA2aGRyICpoZHI7XG4gXG4gXHRpZiAoIXBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZigqaXA2aGRyKSkpXG4gXHRcdHJldHVybiB0cnVlO1xuQEAgLTEyOTYsNyArMTI5Niw4IEBAIHN0YXRpYyBib29sIGFsYl9kZXRlcm1pbmVfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4gXHRpZiAoIXBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZigqaXA2aGRyKSArIHNpemVvZigqaGRyKSkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0aGRyID0gaWNtcDZfaGRyKHNrYik7XG4rXHRpcDZoZHIgPSBpcHY2X2hkcihza2IpO1xuK1x0aGRyID0gKGNvbnN0IHN0cnVjdCBpY21wNmhkciAqKShpcDZoZHIgKyAxKTtcbiBcdHJldHVybiBoZHItXHUwMDNlaWNtcDZfdHlwZSA9PSBORElTQ19ORUlHSEJPVVJfQURWRVJUSVNFTUVOVCB8fFxuIFx0XHRoZHItXHUwMDNlaWNtcDZfdHlwZSA9PSBORElTQ19ORUlHSEJPVVJfU09MSUNJVEFUSU9OO1xuIH1cbkBAIC0xMzgxLDcgKzEzODIsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuIFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cdTAwM2VoX2Rlc3QpKSB7XG4gXHRcdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG4gXHRcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4tXHRcdFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiLCBib25kKSlcbitcdFx0XHRpZiAoYWxiX2RldGVybWluZV9uZChza2IpKVxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0ZmFsbHRocm91Z2g7XG4gXHRcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuQEAgLTE0NjcsNyArMTQ2OCw3IEBAIHN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiLCBib25kKSkge1xuK1x0XHRpZiAoYWxiX2RldGVybWluZV9uZChza2IpKSB7XG4gXHRcdFx0ZG9fdHhfYmFsYW5jZSA9IGZhbHNlO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMzoxMjoyMy40ODM5NjE3NTlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njc2OTk4ODY2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBib25kX2FsYi5jKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jYC4gTG9va3MgbGlrZSBpdCdzIGEgcmVsYXRpdmVseSBmb2N1c2VkIG1vZGlmaWNhdGlvbiwgd2hpY2ggaXMgZ29vZC4gVGhlIGluZGV4IGNoYW5nZSBjb25maXJtcyB0aGlzIGlzIGFuIGVkaXQgYW5kIG5vdCBhIG5ldyBmaWxlLlxuXG5Ob3csIGxldCdzIGV4YW1pbmUgdGhlIGFjdHVhbCBjaGFuZ2UuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGluIHRoZSBgYWxiX2RldGVybWluZV9uZGAgZnVuY3Rpb24uICBJdCBhcHBlYXJzIHRoZSBmdW5jdGlvbidzIHNpZ25hdHVyZSBpcyB1cGRhdGVkLCByZW1vdmluZyBgc3RydWN0IGJvbmRpbmcgKmJvbmRgIGZyb20gdGhlIGFyZ3VtZW50IGxpc3QuIFRoaXMgaGludHMgYXQgc29tZSByZWZhY3RvcmluZyBvciBhIGNoYW5nZSBpbiBob3cgdGhlIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBib25kaW5nIGNvbnRleHQuIEkgbmVlZCB0byBrZWVwIGFuIG9wZW4gbWluZCwgYXMgdGhpcyBjb3VsZCBiZSBhbiBvcHRpbWl6YXRpb24gYnkgcmVtb3ZpbmcgYW4gdW5uZWNlc3NhcnkgYXJndW1lbnQgb3IgYSBsYXJnZXIgYXJjaGl0ZWN0dXJhbCBhZGp1c3RtZW50LlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIGluc2lkZSB0aGUgZnVuY3Rpb24sIEkgbm90aWNlIHRoZSB1c2Ugb2YgYGlwdjZoZHJgIGFuZCBgaWNtcDZoZHJgLiAgSXQgYXBwZWFycyB3ZSBhcmUgaW5zcGVjdGluZyBJUHY2IE5laWdoYm9yIERpc2NvdmVyeSBwYWNrZXRzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlaXRoZXIgTmVpZ2hib3IgQWR2ZXJ0aXNlbWVudHMgb3IgTmVpZ2hib3IgU29saWNpdGF0aW9ucy4gVGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdhcyBwb3RlbnRpYWxseSByZXRyaWV2aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIGJvbmRpbmcgY29udGV4dCB0aGF0IGNvdWxkIGluZmx1ZW5jZSB0aGlzIHByb2Nlc3MsIHNvIHJlbW92aW5nIHRoYXQgZnJvbSB0aGUgZnVuY3Rpb24ncyBzY29wZSB3aWxsIG5lZWQgdG8gYmUgd2VsbC11bmRlcnN0b29kLlxuXG5UaGUgc3Vic2VxdWVudCBjb2RlIGNoYW5nZXMgYXBwZWFyIHRvIGFsaWduIHdpdGggcmVtb3ZpbmcgdGhlIGBib25kYCBzdHJ1Y3QuIEl0IGxvb2tzIGxpa2UgdGhlIGBpcHY2aGRyYCBhbmQgYGljbXA2aGRyYCBwb2ludGVycyBhcmUgbm93IGNhc3QgYXMgYGNvbnN0YCwgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlIGZvciByZWFkLW9ubHkgYWNjZXNzLiBJdCBhcHBlYXJzIHdlIGFyZSBhY2Nlc3NpbmcgdGhlIGhlYWRlcnMgdXNpbmcgYGlwdjZfaGRyYCBhbmQgdXNpbmcgcG9pbnRlciBhcml0aG1ldGljIHRvIGFjY2VzcyB0aGUgYGljbXA2X2hkcmAuIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UsIHNvIHRoZSBtb2RpZmljYXRpb24gaXMgYSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBvZiB0aGUgaW50ZW50aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBhc3N1bXB0aW9ucyBiZWhpbmQgdGhpcyBjYWxjdWxhdGlvbiBhcmUgbm90IGJyb2tlbi4gQWxzbywgSSBuZWVkIHRvIGRldGVybWluZSBpZiBhbnkgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2VzIG5ldyBwb3RlbnRpYWwgc2VjdXJpdHkgaXNzdWVzIG9yIGxvZ2ljIGVycm9ycy5cblxuSSdtIG1ha2luZyBhIG1lbnRhbCBub3RlIHRoYXQgdGhpcyBpcyBwcm9iYWJseSByZWxhdGVkIHRvIElQdjYgTmVpZ2hib3IgRGlzY292ZXJ5IGFuZCBob3cgdGhpcyBib25kaW5nIGRyaXZlciBoYW5kbGVzIHRob3NlIHBhY2tldHMuIEkgbmVlZCB0byBjaGVjayBob3cgdGhlIGJvbmRpbmcgY29udGV4dCBpcyB1dGlsaXplZCBlbHNld2hlcmUgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGFyZ3VtZW50IHJlbW92YWwgaXMgc2FmZS4gVWx0aW1hdGVseSwgSSBuZWVkIHRvIHRyYWNlIGJhY2sgdG8gd2hlcmUgdGhpcyBgYWxiX2RldGVybWluZV9uZGAgaXMgY2FsbGVkIHRvIGZ1bGx5IGdyYXNwIHRoZSByYW1pZmljYXRpb25zIG9mIHRoaXMgcGF0Y2guIExldCBtZSBjaGVjayB0aGUgY29udGV4dCBhcm91bmQgbGluZSAxMjgxIGluIGBib25kX2FsYi5jYCB0byBnYWluIGZ1cnRoZXIgY2xhcml0eSBhYm91dCB0aGUgcHVycG9zZSBvZiB0aGVzZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTQwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDM6MTI6MzAuMjUzOTUzMjE1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjcxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI3NSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI3NTpcXHRcXHRcXHRcXHRcXHQgIHJvbGxiYWNrX3NsYXZlLVxcdTAwM2VkZXYtXFx1MDAzZWFkZHJfbGVuKTtcXG4xMjc2OlxcdFxcdFxcdGRldl9zZXRfbWFjX2FkZHJlc3Mocm9sbGJhY2tfc2xhdmUtXFx1MDAzZWRldiwgXFx1MDAyNnNzLCBOVUxMKTtcXG4xMjc3OlxcdFxcdFxcdGRldl9hZGRyX3NldChyb2xsYmFja19zbGF2ZS1cXHUwMDNlZGV2LCB0bXBfYWRkcik7XFxuMTI3ODpcXHRcXHR9XFxuMTI3OTpcXHRcXG4xMjgwOlxcdFxcdHJldHVybiByZXM7XFxuMTI4MTpcXHR9XFxuMTI4MjpcXHRcXG4xMjgzOlxcdC8qIGRldGVybWluZSBpZiB0aGUgcGFja2V0IGlzIE5BIG9yIE5TICovXFxuMTI4NDpcXHRzdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IpXFxuMTI4NTpcXHR7XFxuMTI4NjpcXHRcXHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aGRyO1xcbjEyODc6XFx0XFx0Y29uc3Qgc3RydWN0IGljbXA2aGRyICpoZHI7XFxuMTI4ODpcXHRcXG4xMjg5OlxcdFxcdGlmICghcHNrYl9uZXR3b3JrX21heV9wdWxsKHNrYiwgc2l6ZW9mKCppcDZoZHIpKSlcXG4xMjkwOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjEyOTE6XFx0XFxuMTI5MjpcXHRcXHRpcDZoZHIgPSBpcHY2X2hkcihza2IpO1xcbjEyOTM6XFx0XFx0aWYgKGlwNmhkci1cXHUwMDNlbmV4dGhkciAhPSBJUFBST1RPX0lDTVBWNilcXG4xMjk0OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMjk1OlxcdFxcbjEyOTY6XFx0XFx0aWYgKCFwc2tiX25ldHdvcmtfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwNmhkcikgKyBzaXplb2YoKmhkcikpKVxcbjEyOTc6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMTI5ODpcXHRcXG4xMjk5OlxcdFxcdGlwNmhkciA9IGlwdjZfaGRyKHNrYik7XFxuMTMwMDpcXHRcXHRoZHIgPSAoY29uc3Qgc3RydWN0IGljbXA2aGRyICopKGlwNmhkciArIDEpO1xcbjEzMDE6XFx0XFx0cmV0dXJuIGhkci1cXHUwMDNlaWNtcDZfdHlwZSA9PSBORElTQ19ORUlHSEJPVVJfQURWRVJUSVNFTUVOVCB8fFxcbjEzMDI6XFx0XFx0XFx0aGRyLVxcdTAwM2VpY21wNl90eXBlID09IE5ESVNDX05FSUdIQk9VUl9TT0xJQ0lUQVRJT047XFxuMTMwMzpcXHR9XFxuMTMwNDpcXHRcXG4xMzA1OlxcdC8qKioqKioqKioqKioqKioqKioqKioqKiogZXhwb3J0ZWQgYWxiIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKiovXFxuMTMwNjpcXHRcXG4xMzA3OlxcdGludCBib25kX2FsYl9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kLCBpbnQgcmxiX2VuYWJsZWQpXFxuMTMwODpcXHR7XFxuMTMwOTpcXHRcXHRpbnQgcmVzO1xcbjEzMTA6XFx0XFxuMTMxMTpcXHRcXHRyZXMgPSB0bGJfaW5pdGlhbGl6ZShib25kKTtcXG4xMzEyOlxcdFxcdGlmIChyZXMpXFxuMTMxMzpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjEzMTQ6XFx0XFxuMTMxNTpcXHRcXHRpZiAocmxiX2VuYWJsZWQpIHtcXG4xMzE2OlxcdFxcdFxcdHJlcyA9IHJsYl9pbml0aWFsaXplKGJvbmQpO1xcbjEzMTc6XFx0XFx0XFx0aWYgKHJlcykge1xcbjEzMTg6XFx0XFx0XFx0XFx0dGxiX2RlaW5pdGlhbGl6ZShib25kKTtcXG4xMzE5OlxcdFxcdFxcdFxcdHJldHVybiByZXM7XFxuMTMyMDpcXHRcXHRcXHR9XFxuMTMyMTpcXHRcXHRcXHRib25kLVxcdTAwM2VhbGJfaW5mby5ybGJfZW5hYmxlZCA9IDE7XFxuMTMyMjpcXHRcXHR9IGVsc2Uge1xcbjEzMjM6XFx0XFx0XFx0Ym9uZC1cXHUwMDNlYWxiX2luZm8ucmxiX2VuYWJsZWQgPSAwO1xcbjEzMjQ6XFx0XFx0fVxcbjEzMjU6XFx0XFxuMTMyNjpcXHRcXHRyZXR1cm4gMDtcXG4xMzI3OlxcdH1cXG4xMzI4OlxcdFxcbjEzMjk6XFx0dm9pZCBib25kX2FsYl9kZWluaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuMTMzMDpcXHR7XFxuMTMzMTpcXHRcXHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcXG4xMzMyOlxcdFxcbjEzMzM6XFx0XFx0dGxiX2RlaW5pdGlhbGl6ZShib25kKTtcXG4xMzM0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMzoxMjozMC4yNTQwNjc4MDRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIxOTk3Njk2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIElDTVB2NiBIZWFkZXIgTWFuaXB1bGF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUga2VybmVsIGNvZGUgaGFuZGxlcyBJQ01QdjYgaGVhZGVycy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCdzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdXNpbmcgYGljbXA2X2hkcihza2IpYCBhbmQgc2ltcGx5IG9mZnNldHRpbmcgZnJvbSB0aGUgSVB2NiBoZWFkZXIgd2l0aCBgKGlwNmhkciArIDEpYD9cIiBJIHN1c3BlY3QgdGhlcmUncyBhIGdvb2QgcmVhc29uIGZvciB1c2luZyB0aGUgZnVuY3Rpb24sIHByb2JhYmx5IHJlbGF0ZWQgdG8gcm9idXN0bmVzcyBvciBzb21lIG51YW5jZWQgaGFuZGxpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQuICBJIHdhbnQgdG8ga25vdyBpZiB0aGVyZSBpcyBhIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVzZSB0d28gZGVmaW5pdGlvbnMuXG5cblRpbWUgdG8gY3V0IHRvIHRoZSBjaGFzZSBhbmQgZmluZCB0aGUgYWN0dWFsIGRlZmluaXRpb24gb2YgYGljbXA2X2hkcmAuIEknbGwgcnVuIGEgYGdyZXBgIHRvIHF1aWNrbHkgbG9jYXRlIHdoZXJlIHRoYXQgbWFjcm8gb3IgZnVuY3Rpb24gaXMgZGVmaW5lZC4gVGhhdCdsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoeSB0aGlzIGlzIGRvbmUgdGhlIHdheSBpdCBpcy4gVGhlIGFuc3dlciBpcyBsaWtlbHkgdGhlcmUgaW4gdGhlIGNvZGUgY29tbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQwNywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDM6MTI6MzMuNDc0MDQ3NjE5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzUzMDc4MTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImljbXA2X2hkclxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2FtdC5jPTgwOD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmFtdF9idWlsZF9tbGRfZ3Eoc3RydWN0IGFtdF9kZXYgKmFtdClcXG4tLVxcbmRyaXZlcnMvbmV0L2FtdC5jLTg1Ni1cXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbmRyaXZlcnMvbmV0L2FtdC5jOjg1NzpcXHRtbGQycVxcdFxcdFxcdD0gKHN0cnVjdCBtbGQyX3F1ZXJ5ICopaWNtcDZfaGRyKHNrYik7XFxuZHJpdmVycy9uZXQvYW10LmMtODU4LVxcdG1sZDJxLVxcdTAwM2VtbGQycV9tcmNcXHQ9IGh0b25zKDEpO1xcbi0tXFxuZHJpdmVycy9uZXQvYW10LmM9MjExMz1zdGF0aWMgdm9pZCBhbXRfbWxkdjFfcmVwb3J0X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2FtdC5jLTIxMTUte1xcbmRyaXZlcnMvbmV0L2FtdC5jOjIxMTY6XFx0c3RydWN0IG1sZF9tc2cgKm1sZCA9IChzdHJ1Y3QgbWxkX21zZyAqKWljbXA2X2hkcihza2IpO1xcbmRyaXZlcnMvbmV0L2FtdC5jLTIxMTctXFx0c3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvYW10LmM9MjE1MD1zdGF0aWMgdm9pZCBhbXRfbWxkdjFfbGVhdmVfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvYW10LmMtMjE1Mi17XFxuZHJpdmVycy9uZXQvYW10LmM6MjE1MzpcXHRzdHJ1Y3QgbWxkX21zZyAqbWxkID0gKHN0cnVjdCBtbGRfbXNnICopaWNtcDZfaGRyKHNrYik7XFxuZHJpdmVycy9uZXQvYW10LmMtMjE1NC1cXHRzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvYW10LmM9MjE2OT1zdGF0aWMgdm9pZCBhbXRfbWxkdjJfcmVwb3J0X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2FtdC5jLTIxNzEte1xcbmRyaXZlcnMvbmV0L2FtdC5jOjIxNzI6XFx0c3RydWN0IG1sZDJfcmVwb3J0ICptbGQyciA9IChzdHJ1Y3QgbWxkMl9yZXBvcnQgKilpY21wNl9oZHIoc2tiKTtcXG5kcml2ZXJzL25ldC9hbXQuYy0yMTczLVxcdGludCBsZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgc2l6ZW9mKCptbGQycik7XFxuLS1cXG5kcml2ZXJzL25ldC9hbXQuYz0yMjQ3PXN0YXRpYyB2b2lkIGFtdF9tbGRfcmVwb3J0X2hhbmRsZXIoc3RydWN0IGFtdF9kZXYgKmFtdCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2FtdC5jLTIyNDkte1xcbmRyaXZlcnMvbmV0L2FtdC5jOjIyNTA6XFx0c3RydWN0IG1sZF9tc2cgKm1sZCA9IChzdHJ1Y3QgbWxkX21zZyAqKWljbXA2X2hkcihza2IpO1xcbmRyaXZlcnMvbmV0L2FtdC5jLTIyNTEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jPTEyOTg9c3RhdGljIGJvb2wgYmVfc2VuZF9wa3RfdG9fYm1jKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYy0xMzIyLVxcdFxcdGlmIChuZXh0aGRyID09IElQUFJPVE9fSUNNUFY2KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYzoxMzIzOlxcdFxcdFxcdHN0cnVjdCBpY21wNmhkciAqaWNtcDYgPSBpY21wNl9oZHIoKCpza2IpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTEzMjQtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oLTgtXFxuaW5jbHVkZS9saW51eC9pY21wdjYuaDo5OnN0YXRpYyBpbmxpbmUgc3RydWN0IGljbXA2aGRyICppY21wNl9oZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oLTEwLXtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTEwMzU9c3RhdGljIGJvb2wgYmF0YWR2X21jYXN0X2lzX3JlcG9ydF9pcHY2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMDM5LVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjEwNDA6XFx0c3dpdGNoIChpY21wNl9oZHIoc2tiKS1cXHUwMDNlaWNtcDZfdHlwZSkge1xcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEwNDEtXFx0Y2FzZSBJQ01QVjZfTUdNX1JFUE9SVDpcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTA2OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmJyX2lwNl9tdWx0aWNhc3RfYWxsb2NfcXVlcnkoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTE2OS1cXHRjYXNlIDE6XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxMTcwOlxcdFxcdG1sZHEgPSAoc3RydWN0IG1sZF9tc2cgKilpY21wNl9oZHIoc2tiKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTExNzEtXFx0XFx0bWxkcS1cXHUwMDNlbWxkX3R5cGUgPSBJQ01QVjZfTUdNX1FVRVJZO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xMTgwLVxcdGNhc2UgMjpcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjExODE6XFx0XFx0bWxkMnEgPSAoc3RydWN0IG1sZDJfcXVlcnkgKilpY21wNl9oZHIoc2tiKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTExODItXFx0XFx0bWxkMnEtXFx1MDAzZW1sZDJxX21yYyA9IGh0b25zKG1sZHYyX21yYyhqaWZmaWVzX3RvX21zZWNzKGludGVydmFsKSkpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0zMDI1PXN0YXRpYyBpbnQgYnJfaXA2X211bHRpY2FzdF9tbGQyX3JlcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zMDQ1LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MzA0NjpcXHRtbGQyciA9IChzdHJ1Y3QgbWxkMl9yZXBvcnQgKilpY21wNl9oZHIoc2tiKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTMwNDctXFx0bnVtID0gbnRvaHMobWxkMnItXFx1MDAzZW1sZDJyX25ncmVjKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MzYyND1zdGF0aWMgaW50IGJyX2lwNl9tdWx0aWNhc3RfcXVlcnkoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzY1MS1cXHRcXHR9XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozNjUyOlxcdFxcdG1sZCA9IChzdHJ1Y3QgbWxkX21zZyAqKSBpY21wNl9oZHIoc2tiKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM2NTMtXFx0XFx0bWF4X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcyhudG9ocyhtbGQtXFx1MDAzZW1sZF9tYXhkZWxheSkpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zNjYwLVxcdFxcdH1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjM2NjE6XFx0XFx0bWxkMnEgPSAoc3RydWN0IG1sZDJfcXVlcnkgKilpY21wNl9oZHIoc2tiKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM2NjItXFx0XFx0aWYgKCFtbGQycS1cXHUwMDNlbWxkMnFfbnNyY3MpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTM5OTA9c3RhdGljIHZvaWQgYnJfaXA2X211bHRpY2FzdF9tcmRfcmN2KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM5OTMte1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6Mzk5NDpcXHRpZiAoaWNtcDZfaGRyKHNrYiktXFx1MDAzZWljbXA2X3R5cGUgIT0gSUNNUFY2X01SRElTQ19BRFYpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zOTk1LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9pcHY0L3BpbmcuYz00ODQ9dm9pZCBwaW5nX2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCB1MzIgaW5mbylcXG4tLVxcbm5ldC9pcHY0L3BpbmcuYy01MDItXFx0XFx0ZmFtaWx5ID0gQUZfSU5FVDY7XFxubmV0L2lwdjQvcGluZy5jOjUwMzpcXHRcXHR0eXBlID0gaWNtcDZfaGRyKHNrYiktXFx1MDAzZWljbXA2X3R5cGU7XFxubmV0L2lwdjQvcGluZy5jOjUwNDpcXHRcXHRjb2RlID0gaWNtcDZfaGRyKHNrYiktXFx1MDAzZWljbXA2X2NvZGU7XFxubmV0L2lwdjQvcGluZy5jLTUwNS1cXHRcXHRpY21waCA9IChzdHJ1Y3QgaWNtcGhkciAqKSAoc2tiLVxcdTAwM2VkYXRhICsgb2Zmc2V0KTtcXG4tLVxcbm5ldC9pcHY2L2RhdGFncmFtLmM9Mjk2PXN0YXRpYyB2b2lkIGlwdjZfaWNtcF9lcnJvcl9yZmM0ODg0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9kYXRhZ3JhbS5jLTI5OC17XFxubmV0L2lwdjYvZGF0YWdyYW0uYzoyOTk6XFx0c3dpdGNoIChpY21wNl9oZHIoc2tiKS1cXHUwMDNlaWNtcDZfdHlwZSkge1xcbm5ldC9pcHY2L2RhdGFncmFtLmMtMzAwLVxcdGNhc2UgSUNNUFY2X1RJTUVfRVhDRUVEOlxcbi0tXFxubmV0L2lwdjYvZGF0YWdyYW0uYy0zMDItXFx0XFx0aXBfaWNtcF9lcnJvcl9yZmM0ODg0KHNrYiwgb3V0LCBzaXplb2Yoc3RydWN0IGljbXA2aGRyKSxcXG5uZXQvaXB2Ni9kYXRhZ3JhbS5jOjMwMzpcXHRcXHRcXHRcXHQgICAgICBpY21wNl9oZHIoc2tiKS1cXHUwMDNlaWNtcDZfZGF0YWdyYW1fbGVuICogOCk7XFxubmV0L2lwdjYvZGF0YWdyYW0uYy0zMDQtXFx0fVxcbi0tXFxubmV0L2lwdjYvZGF0YWdyYW0uYz0zMDc9dm9pZCBpcHY2X2ljbXBfZXJyb3Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyLFxcbi0tXFxubmV0L2lwdjYvZGF0YWdyYW0uYy0zMDkte1xcbm5ldC9pcHY2L2RhdGFncmFtLmM6MzEwOlxcdHN0cnVjdCBpY21wNmhkciAqaWNtcGggPSBpY21wNl9oZHIoc2tiKTtcXG5uZXQvaXB2Ni9kYXRhZ3JhbS5jLTMxMS1cXHRzdHJ1Y3Qgc29ja19leHRlcnJfc2tiICpzZXJyO1xcbi0tXFxubmV0L2lwdjYvaWNtcC5jPTI3Nj12b2lkIGljbXB2Nl9wdXNoX3BlbmRpbmdfZnJhbWVzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGZsb3dpNiAqZmw2LFxcbi0tXFxubmV0L2lwdjYvaWNtcC5jLTI4NS1cXG5uZXQvaXB2Ni9pY21wLmM6Mjg2OlxcdGljbXA2aCA9IGljbXA2X2hkcihza2IpO1xcbm5ldC9pcHY2L2ljbXAuYy0yODctXFx0bWVtY3B5KGljbXA2aCwgdGhkciwgc2l6ZW9mKHN0cnVjdCBpY21wNmhkcikpO1xcbi0tXFxubmV0L2lwdjYvaWNtcC5jPTkyMT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gaWNtcHY2X2VjaG9fcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2ljbXAuYy05MjctXFx0Y29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciA9IE5VTEw7XFxubmV0L2lwdjYvaWNtcC5jOjkyODpcXHRzdHJ1Y3QgaWNtcDZoZHIgKmljbXBoID0gaWNtcDZfaGRyKHNrYik7XFxubmV0L2lwdjYvaWNtcC5jLTkyOS1cXHRib29sIGFwcGx5X3JhdGVsaW1pdCA9IGZhbHNlO1xcbi0tXFxubmV0L2lwdjYvaWNtcC5jPTExMDE9c3RhdGljIGludCBpY21wdjZfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9pY21wLmMtMTE0Ni1cXG5uZXQvaXB2Ni9pY21wLmM6MTE0NzpcXHRoZHIgPSBpY21wNl9oZHIoc2tiKTtcXG5uZXQvaXB2Ni9pY21wLmMtMTE0OC1cXG4tLVxcbm5ldC9pcHY2L2ljbXAuYy0xMTc2LVxcdFxcdFxcdGdvdG8gZGlzY2FyZF9pdDtcXG5uZXQvaXB2Ni9pY21wLmM6MTE3NzpcXHRcXHRoZHIgPSBpY21wNl9oZHIoc2tiKTtcXG5uZXQvaXB2Ni9pY21wLmMtMTE3OC1cXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYz0xOTI0PXN0cnVjdCBza19idWZmICpfX2lwNl9tYWtlX3NrYihzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTk5OC1cXHRcXHRlbHNlXFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjE5OTk6XFx0XFx0XFx0aWNtcDZfdHlwZSA9IGljbXA2X2hkcihza2IpLVxcdTAwM2VpY21wNl90eXBlO1xcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0yMDAwLVxcdFxcdElDTVA2TVNHT1VUX0lOQ19TVEFUUyhuZXQsIGlkZXYsIGljbXA2X3R5cGUpO1xcbi0tXFxubmV0L2lwdjYvbWNhc3QuYz0xNDI2PXN0YXRpYyB2b2lkIF9fbWxkX3F1ZXJ5X3dvcmsoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtMTQ2MS1cXG5uZXQvaXB2Ni9tY2FzdC5jOjE0NjI6XFx0bWxkID0gKHN0cnVjdCBtbGRfbXNnICopaWNtcDZfaGRyKHNrYik7XFxubmV0L2lwdjYvbWNhc3QuYy0xNDYzLVxcdGdyb3VwID0gbWxkLVxcdTAwM2VtbGRfbWNhO1xcbi0tXFxubmV0L2lwdjYvbWNhc3QuYz0xNjA2PXN0YXRpYyB2b2lkIF9fbWxkX3JlcG9ydF93b3JrKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTE2MjQtXFxubmV0L2lwdjYvbWNhc3QuYzoxNjI1OlxcdG1sZCA9IChzdHJ1Y3QgbWxkX21zZyAqKWljbXA2X2hkcihza2IpO1xcbm5ldC9pcHY2L21jYXN0LmMtMTYyNi1cXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9NDY5PXZvaWQgbmRpc2Nfc2VuZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkcixcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtNDcxLXtcXG5uZXQvaXB2Ni9uZGlzYy5jOjQ3MjpcXHRzdHJ1Y3QgaWNtcDZoZHIgKmljbXA2aCA9IGljbXA2X2hkcihza2IpO1xcbm5ldC9pcHY2L25kaXNjLmMtNDczLVxcdHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHNrYl9kc3Qoc2tiKTtcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X05QVC5jPTgwPXN0YXRpYyBzdHJ1Y3QgaXB2NmhkciAqaWNtcHY2X2JvdW5jZWRfaXB2NmhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTlBULmMtODUtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTlBULmM6ODY6XFx0aWYgKCFpY21wdjZfaXNfZXJyKGljbXA2X2hkcihza2IpLVxcdTAwM2VpY21wNl90eXBlKSlcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9OUFQuYy04Ny1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9MzIzOD12b2lkIGlwNl9yZWRpcmVjdF9ub19oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCBpbnQgb2lmKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0zMjQwLVxcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpO1xcbm5ldC9pcHY2L3JvdXRlLmM6MzI0MTpcXHRjb25zdCBzdHJ1Y3QgcmRfbXNnICptc2cgPSAoc3RydWN0IHJkX21zZyAqKWljbXA2X2hkcihza2IpO1xcbm5ldC9pcHY2L3JvdXRlLmMtMzI0Mi1cXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTQyNDE9c3RhdGljIHZvaWQgcnQ2X2RvX3JlZGlyZWN0KHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy00MjYwLVxcbm5ldC9pcHY2L3JvdXRlLmM6NDI2MTpcXHRtc2cgPSAoc3RydWN0IHJkX21zZyAqKWljbXA2X2hkcihza2IpO1xcbm5ldC9pcHY2L3JvdXRlLmMtNDI2Mi1cXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM9MzU4PXN0YXRpYyB2b2lkIHVwZGF0ZV9pcHY2X2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHU4IGw0X3Byb3RvLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0zNzktXFx0XFx0aWYgKGxpa2VseSh0cmFuc3BvcnRfbGVuIFxcdTAwM2U9IHNpemVvZihzdHJ1Y3QgaWNtcDZoZHIpKSlcXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjM4MDpcXHRcXHRcXHRpbmV0X3Byb3RvX2NzdW1fcmVwbGFjZTE2KFxcdTAwMjZpY21wNl9oZHIoc2tiKS1cXHUwMDNlaWNtcDZfY2tzdW0sXFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0zODEtXFx0XFx0XFx0XFx0XFx0XFx0ICBza2IsIGFkZHIsIG5ld19hZGRyLCB0cnVlKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM9NTUwPXN0YXRpYyBpbnQgcGFyc2VfaWNtcHY2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy01NTIte1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6NTUzOlxcdHN0cnVjdCBpY21wNmhkciAqaWNtcCA9IGljbXA2X2hkcihza2IpO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtNTU0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMzoxMjozNS44MjcxMzIzOVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjA4NzA1Mjk2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHdoYXQncyBnb2luZyBvbiwgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHN0YXJ0aW5nIHBvaW50OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJQ01QdjYgSGVhZGVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgc29tZSBjb2RlIHRoYXQncyBkZWFsaW5nIHdpdGggSUNNUHY2IHBhY2tldHMsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGhlYWRlciBpcyBiZWluZyBhY2Nlc3NlZC4gVGhlIGluaXRpYWwgc3RlcCBpcyB1c2luZyBgaWNtcDZfaGRyKHNrYilgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJSaWdodCwgbGV0J3MgdHJhY2UgdGhpcyBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuXCIgVGhpcyBwcm9iYWJseSByZXRyaWV2ZXMgdGhlIHBvaW50ZXIgdG8gdGhlIElDTVB2NiBoZWFkZXIuXG5cblRoZSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGhvdyBgaWNtcDZfaGRyKHNrYilgIGRvZXMgdGhhdDogaXQgY2FsbHMgYHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYilgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgZmV0Y2hpbmcgdGhlIHRyYW5zcG9ydCBsYXllciBoZWFkZXIgKHdoaWNoIGluIElQdjYsIGZvciBJQ01QdjYsIHdvdWxkIGJlIHRoZSBJQ01QdjYgaGVhZGVyKS4gVGhhdCBtYWtlcyBzZW5zZSDigJMgdGhlIFNLQiAoU29ja2V0IEJ1ZmZlcikgcHJvYmFibHkgY29udGFpbnMgdGhlIHdob2xlIHBhY2tldCwgYW5kIHRoaXMgZnVuY3Rpb24gaGVscHMgcGlucG9pbnQgdGhlIGhlYWRlcidzIGxvY2F0aW9uIHdpdGhpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUuXG5cbk5vdywgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBhbmQgYmUgYWJzb2x1dGVseSBzdXJlLCBJJ20gZ29pbmcgdG8gY29uc3VsdCB0aGUgZGVmaW5pdGlvbiBvZiBgaWNtcDZfaGRyYCBhbmQgcmVsYXRlZCBzdHJ1Y3RzLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGluY2x1ZGUgZmlsZXMgdG8gY29uZmlybSB0aGUgZGF0YSBsYXlvdXQgYW5kIGZpZWxkIGRlZmluaXRpb25zIGluIGBpbmNsdWRlL2xpbnV4L2ljbXB2Ni5oYC4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIGVuc3VyZSBteSBhbmFseXNpcyBpcyBjb3JyZWN0LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ1MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjEzOjA3LjkxNDE4OTA5NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mjc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2ljbXB2Ni5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4gICAyOlxcdCNpZm5kZWYgX0xJTlVYX0lDTVBWNl9IXFxuICAgMzpcXHQjZGVmaW5lIF9MSU5VWF9JQ01QVjZfSFxcbiAgIDQ6XFx0XFxuICAgNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaXB2Ni5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvaWNtcHY2LmhcXHUwMDNlXFxuICAgODpcXHRcXG4gICA5OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGljbXA2aGRyICppY21wNl9oZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gIDEwOlxcdHtcXG4gIDExOlxcdFxcdHJldHVybiAoc3RydWN0IGljbXA2aGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG4gIDEyOlxcdH1cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbiAgMTU6XFx0XFxuICAxNjpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4gIDE3OlxcdFxcbiAgMTg6XFx0dm9pZCBpY21wNl9zZW5kKHN0cnVjdCBza19idWZmICpza2IsIHU4IHR5cGUsIHU4IGNvZGUsIF9fdTMyIGluZm8sXFxuICAxOTpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmZvcmNlX3NhZGRyLFxcbiAgMjA6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpwYXJtKTtcXG4gIDIxOlxcdFxcbiAgMjI6XFx0c3RhdGljIGlubGluZSB2b2lkIGljbXB2Nl9zZW5kKHN0cnVjdCBza19idWZmICpza2IsIHU4IHR5cGUsIHU4IGNvZGUsIF9fdTMyIGluZm8pXFxuICAyMzpcXHR7XFxuICAyNDpcXHRcXHRpY21wNl9zZW5kKHNrYiwgdHlwZSwgY29kZSwgaW5mbywgTlVMTCwgSVA2Q0Ioc2tiKSk7XFxuICAyNTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjEzOjA3LjkxNDI4MTg5NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NTMwNDk3ODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJvbmRlZCBJbnRlcmZhY2UncyBJUHY2IE5laWdoYm9yIERpc2NvdmVyeSBQYXRoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYm9uZGluZywgc3BlY2lmaWNhbGx5IHRoZSBgYWxiX2RldGVybWluZV9uZGAgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCBjb2RlIHVzZXMgYGljbXA2X2hkcihza2IpYCwgd2hpY2ggcmVsaWVzIG9uIGBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpYC4gTm93LCB0aGUgcHJvYmxlbSBhcmlzZXMgYmVjYXVzZSBkdXJpbmcgdGhlIHRyYW5zbWlzc2lvbiBwaGFzZSAobGlrZSBpbiBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgIG9yIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGApLCB0aGUgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXQgaXNuJ3QgYWx3YXlzIHNldCBjb3JyZWN0bHkuICBJdCBjb3VsZCBiZSB1bmluaXRpYWxpemVkIG9yIHBvaW50aW5nIHNvbWV3aGVyZSB3cm9uZy4gIE1lYW53aGlsZSwgdGhlIG5ldHdvcmsgaGVhZGVyIChgc2tiX25ldHdvcmtfaGVhZGVyYCkgKmlzKiBzZXQsIGFuZCB3ZSdyZSBwdWxsaW5nIHRoYXQgd2l0aCBgcHNrYl9uZXR3b3JrX21heV9wdWxsYC5cblxuQmVmb3JlIHRoZSBjaGFuZ2UsIHRoZSBsb2dpYyB3YXM6XG4xLiAgTWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgdGhlIElQdjYgaGVhZGVyIHdpdGggYHBza2JfbmV0d29ya19tYXlfcHVsbGAuXG4yLiAgR2V0IHRoZSBJUHY2IGhlYWRlciBhbmQgY2hlY2sgaWYgdGhlIG5leHQgaGVhZGVyIGlzIElDTVB2Ni5cbjMuICBNYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCB0aGUgSVB2NiBhbmQgSUNNUHY2IGhlYWRlciB3aXRoIGFub3RoZXIgYHBza2JfbmV0d29ya19tYXlfcHVsbGAuXG40LiAgR2V0IHRoZSBJQ01QdjYgaGVhZGVyIHdpdGggYGljbXA2X2hkcihza2IpYCBhbmQgY2hlY2sgdGhlIElDTVB2NiB0eXBlLlxuXG5UaGUgZmxhdz8gSWYgYHNrYl90cmFuc3BvcnRfaGVhZGVyYCB3YXNuJ3Qgc2V0LCB0aGVuIGBpY21wNl9oZHIoc2tiKWAgY291bGQgYmUgcmVhZGluZyBmcm9tICphbnl3aGVyZSogaW4gbWVtb3J5LCBwb3RlbnRpYWxseSBgc2tiLVx1MDAzZWhlYWRgLCBgc2tiLVx1MDAzZWRhdGFgLCBzb21lIHVuaW5pdGlhbGl6ZWQgb2Zmc2V0LCBvciBldmVuIG91dCBvZiBib3VuZHMuIFRoZSBLQVNBTiBtaWdodCBiZSBjYXRjaGluZyB0aGlzIG91dC1vZi1ib3VuZHMgcmVhZCwgYnV0IGl0J3MgYSBjcml0aWNhbCBidWcuXG5cblRoZSBwYXRjaCdzIHNvbHV0aW9uIGlzIGVsZWdhbnQ6IEl0IHNpbXBseSBjYWxjdWxhdGVzIHRoZSBJQ01QdjYgaGVhZGVyIHBvaW50ZXIgYmFzZWQgb24gdGhlIElQdjYgaGVhZGVyOiBgaGRyID0gKGNvbnN0IHN0cnVjdCBpY21wNmhkciAqKShpcDZoZHIgKyAxKWAuIFdlIGFsc28gZW5zdXJlIHRoZSBwYWNrZXQgZGF0YSBpcyB0aGVyZSB3aXRoIGBwc2tiX25ldHdvcmtfbWF5X3B1bGxgLiBUaGF0IGF2b2lkcyB0aGUgZGVwZW5kZW5jeSBvbiBgc2tiX3RyYW5zcG9ydF9oZWFkZXJgIGVudGlyZWx5LiAgQW5kIHRoZSB1bnVzZWQgYHN0cnVjdCBib25kaW5nICpib25kYCBwYXJhbWV0ZXIgaXMgcmVtb3ZlZCwgd2hpY2ggaXMgZ29vZCBjbGVhbnVwLlxuXG5Ob3csIEkgbmVlZCB0byB2ZXJpZnk6IGRvZXMgdGhpcyBjaGFuZ2UgaW50cm9kdWNlIGFueSBuZXcgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnk/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdDpcblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlOioqIE5vcGUsIHRoaXMgY29kZSBkb2Vzbid0IGRpcmVjdGx5IHNlbmQga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS5cbjIuICAqKlVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNlIGluIGNvbmRpdGlvbmFsczoqKiBObywgZXZlcnl0aGluZyBpcyBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgYW5kIHB1bGxlZC5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb246KiogTm8sIHRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkIHBvaW50ZXIgYXJpdGhtZXRpYy5cbjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBkYXRhOioqIE5vLCB0aGUgYHBza2JfbmV0d29ya19tYXlfcHVsbGAgY2FsbCBzYWZlZ3VhcmRzIHRoYXQuXG5cblNvLCBmcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGlzIGlzIGEgc2FmZSBhbmQgY29ycmVjdCBmaXguIEknbGwgZG91YmxlLWNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBjYWxsZXJzIGluIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbiwgYnV0IEkgZmVlbCBnb29kIGFib3V0IHRoaXMuIFRoaXMgc2hvdWxkIHJlc29sdmUgdGhlIG1lbW9yeSBhY2Nlc3MgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjM5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDM6MTM6MTYuNDQ0Nzg1Nzg3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM3MCxcbiAgXCJMaW5lQ291bnRcIjogMTEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNzA6XFx0XFxuMTM3MTpcXHRzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbjEzNzI6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMzczOlxcdHtcXG4xMzc0OlxcdFxcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUgPSBOVUxMO1xcbjEzNzU6XFx0XFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XFxuMTM3NjpcXHRcXHR1MzIgaGFzaF9pbmRleDtcXG4xMzc3OlxcdFxcbjEzNzg6XFx0XFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4xMzc5OlxcdFxcdGV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xcbjEzODA6XFx0XFxuMTM4MTpcXHRcXHQvKiBEbyBub3QgVFggYmFsYW5jZSBhbnkgbXVsdGljYXN0IG9yIGJyb2FkY2FzdCAqL1xcbjEzODI6XFx0XFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cXHUwMDNlaF9kZXN0KSkge1xcbjEzODM6XFx0XFx0XFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuMTM4NDpcXHRcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxcbjEzODU6XFx0XFx0XFx0XFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiKSlcXG4xMzg2OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjEzODc6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuMTM4ODpcXHRcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4xMzg5OlxcdFxcdFxcdFxcdGhhc2hfaW5kZXggPSBib25kX3htaXRfaGFzaChib25kLCBza2IpO1xcbjEzOTA6XFx0XFx0XFx0XFx0aWYgKGJvbmQtXFx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYikge1xcbjEzOTE6XFx0XFx0XFx0XFx0XFx0dHhfc2xhdmUgPSB0bGJfY2hvb3NlX2NoYW5uZWwoYm9uZCxcXG4xMzkyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGhhc2hfaW5kZXggXFx1MDAyNiAweEZGLFxcbjEzOTM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiLVxcdTAwM2VsZW4pO1xcbjEzOTQ6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4xMzk1OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBib25kX3VwX3NsYXZlICpzbGF2ZXM7XFxuMTM5NjpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY291bnQ7XFxuMTM5NzpcXHRcXG4xMzk4OlxcdFxcdFxcdFxcdFxcdHNsYXZlcyA9IHJjdV9kZXJlZmVyZW5jZShib25kLVxcdTAwM2V1c2FibGVfc2xhdmVzKTtcXG4xMzk5OlxcdFxcdFxcdFxcdFxcdGNvdW50ID0gc2xhdmVzID8gUkVBRF9PTkNFKHNsYXZlcy1cXHUwMDNlY291bnQpIDogMDtcXG4xNDAwOlxcdFxcdFxcdFxcdFxcdGlmIChsaWtlbHkoY291bnQpKVxcbjE0MDE6XFx0XFx0XFx0XFx0XFx0XFx0dHhfc2xhdmUgPSBzbGF2ZXMtXFx1MDAzZWFycltoYXNoX2luZGV4ICVcXG4xNDAyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjb3VudF07XFxuMTQwMzpcXHRcXHRcXHRcXHR9XFxuMTQwNDpcXHRcXHRcXHRcXHRicmVhaztcXG4xNDA1OlxcdFxcdFxcdH1cXG4xNDA2OlxcdFxcdH1cXG4xNDA3OlxcdFxcdHJldHVybiB0eF9zbGF2ZTtcXG4xNDA4OlxcdH1cXG4xNDA5OlxcdFxcbjE0MTA6XFx0bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuMTQxMTpcXHR7XFxuMTQxMjpcXHRcXHRzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGJvbmRfZGV2KTtcXG4xNDEzOlxcdFxcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmU7XFxuMTQxNDpcXHRcXG4xNDE1OlxcdFxcdHR4X3NsYXZlID0gYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcXG4xNDE2OlxcdFxcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xcbjE0MTc6XFx0fVxcbjE0MTg6XFx0XFxuMTQxOTpcXHRzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbjE0MjA6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xNDIxOlxcdHtcXG4xNDIyOlxcdFxcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xcbjE0MjM6XFx0XFx0c3RhdGljIGNvbnN0IF9fYmUzMiBpcF9iY2FzdCA9IGh0b25sKDB4ZmZmZmZmZmYpO1xcbjE0MjQ6XFx0XFx0c3RydWN0IHNsYXZlICp0eF9zbGF2ZSA9IE5VTEw7XFxuMTQyNTpcXHRcXHRjb25zdCB1OCAqaGFzaF9zdGFydCA9IE5VTEw7XFxuMTQyNjpcXHRcXHRib29sIGRvX3R4X2JhbGFuY2UgPSB0cnVlO1xcbjE0Mjc6XFx0XFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XFxuMTQyODpcXHRcXHR1MzIgaGFzaF9pbmRleCA9IDA7XFxuMTQyOTpcXHRcXHRpbnQgaGFzaF9zaXplID0gMDtcXG4xNDMwOlxcdFxcbjE0MzE6XFx0XFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4xNDMyOlxcdFxcdGV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xcbjE0MzM6XFx0XFxuMTQzNDpcXHRcXHRzd2l0Y2ggKG50b2hzKHNrYi1cXHUwMDNlcHJvdG9jb2wpKSB7XFxuMTQzNTpcXHRcXHRjYXNlIEVUSF9QX0lQOiB7XFxuMTQzNjpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDtcXG4xNDM3OlxcdFxcbjE0Mzg6XFx0XFx0XFx0aWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLVxcdTAwM2VoX2Rlc3QpIHx8XFxuMTQzOTpcXHRcXHRcXHQgICAgIXBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSkpIHtcXG4xNDQwOlxcdFxcdFxcdFxcdGRvX3R4X2JhbGFuY2UgPSBmYWxzZTtcXG4xNDQxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE0NDI6XFx0XFx0XFx0fVxcbjE0NDM6XFx0XFx0XFx0aXBoID0gaXBfaGRyKHNrYik7XFxuMTQ0NDpcXHRcXHRcXHRpZiAoaXBoLVxcdTAwM2VkYWRkciA9PSBpcF9iY2FzdCB8fCBpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fSUdNUCkge1xcbjE0NDU6XFx0XFx0XFx0XFx0ZG9fdHhfYmFsYW5jZSA9IGZhbHNlO1xcbjE0NDY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTQ0NzpcXHRcXHRcXHR9XFxuMTQ0ODpcXHRcXHRcXHRoYXNoX3N0YXJ0ID0gKGNoYXIgKilcXHUwMDI2KGlwaC1cXHUwMDNlZGFkZHIpO1xcbjE0NDk6XFx0XFx0XFx0aGFzaF9zaXplID0gc2l6ZW9mKGlwaC1cXHUwMDNlZGFkZHIpO1xcbjE0NTA6XFx0XFx0XFx0YnJlYWs7XFxuMTQ1MTpcXHRcXHR9XFxuMTQ1MjpcXHRcXHRjYXNlIEVUSF9QX0lQVjY6IHtcXG4xNDUzOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoZHI7XFxuMTQ1NDpcXHRcXG4xNDU1OlxcdFxcdFxcdC8qIElQdjYgZG9lc24ndCByZWFsbHkgdXNlIGJyb2FkY2FzdCBtYWMgYWRkcmVzcywgYnV0IGxlYXZlXFxuMTQ1NjpcXHRcXHRcXHQgKiB0aGF0IGhlcmUganVzdCBpbiBjYXNlLlxcbjE0NTc6XFx0XFx0XFx0ICovXFxuMTQ1ODpcXHRcXHRcXHRpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoZXRoX2RhdGEtXFx1MDAzZWhfZGVzdCkpIHtcXG4xNDU5OlxcdFxcdFxcdFxcdGRvX3R4X2JhbGFuY2UgPSBmYWxzZTtcXG4xNDYwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE0NjE6XFx0XFx0XFx0fVxcbjE0NjI6XFx0XFxuMTQ2MzpcXHRcXHRcXHQvKiBJUHY2IHVzZXMgYWxsLW5vZGVzIG11bHRpY2FzdCBhcyBhbiBlcXVpdmFsZW50IHRvXFxuMTQ2NDpcXHRcXHRcXHQgKiBicm9hZGNhc3RzIGluIElQdjQuXFxuMTQ2NTpcXHRcXHRcXHQgKi9cXG4xNDY2OlxcdFxcdFxcdGlmIChldGhlcl9hZGRyX2VxdWFsXzY0Yml0cyhldGhfZGF0YS1cXHUwMDNlaF9kZXN0LCBtYWNfdjZfYWxsbWNhc3QpKSB7XFxuMTQ2NzpcXHRcXHRcXHRcXHRkb190eF9iYWxhbmNlID0gZmFsc2U7XFxuMTQ2ODpcXHRcXHRcXHRcXHRicmVhaztcXG4xNDY5OlxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDM6MTM6MTYuNDQ0OTYxNzI3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTEwNzcxOTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5ldyBDb25jZXJucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gYW5hbHl6aW5nIHRoZSBwYXRjaCB0byBgYWxiX2RldGVybWluZV9uZGAsIG15IHByaW1hcnkgY29uY2VybiBpcyBhbHdheXMgYXJvdW5kIG1lbW9yeSBzYWZldHkgYW5kIGluZm9ybWF0aW9uIGxlYWtzLiBUaGUgZnVuY3Rpb24gaXMgaGFuZGxpbmcgSVB2NiBOZWlnaGJvciBEaXNjb3ZlcnkgcGFja2V0cywgc28gdGhlIGludGVncml0eSBvZiB0aGUgcGFja2V0IHBhcnNpbmcgaXMgY3JpdGljYWwuXG5cblRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIHBvdGVudGlhbCBpc3N1ZTogaXQgd2FzIHVzaW5nIGBpY21wNl9oZHIoc2tiKWAgd2hpY2ggdXNlcyBgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKWAuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGlzbid0IG5lY2Vzc2FyaWx5IHZhbGlkIGR1cmluZyB0aGUgdHJhbnNtaXQgcGF0aC4gVGhpcyBwYXRjaCBjbGV2ZXJseSBjaXJjdW12ZW50cyB0aGF0IGJ5IGNhbGN1bGF0aW5nIHRoZSBoZWFkZXIncyBsb2NhdGlvbiBkaXJlY3RseSBmcm9tIHRoZSBJUHY2IGhlYWRlciAoYChjb25zdCBzdHJ1Y3QgaWNtcDZoZHIgKikoaXA2aGRyICsgMSlgKS4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgZml4IHRvIGEgcG90ZW50aWFsIGJ1Zy5cblxuVGhlIHJlYWxseSBnb29kIHBhcnQgaXMgdGhhdCBhbGwgdGhlIGNydWNpYWwgbWVtb3J5IGFjY2Vzc2VzIGZyb20gdGhlIGBza2JgIGFyZSBwcm90ZWN0ZWQgd2l0aCBgcHNrYl9uZXR3b3JrX21heV9wdWxsKClgLiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBJIGxpa2UgdG8gc2VlIOKAkyBleHBsaWNpdCBib3VuZHMgY2hlY2tzIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlIHJlYXNvbmluZyBjbGFpbXMgdGhpcyBhbHNvIHZhbGlkYXRlcyB0aGUgc2tiIGRhdGEuXG5cbkkndmUgY2hlY2tlZCB0aGUgcGF0Y2gsIGFuZCBpdCBhZGRyZXNzZXMgdGhlIG9yaWdpbmFsIGlzc3VlLCBhbmQgaXQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgY29weSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2UsIG9yIHVzZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBvciBhbnkgb3RoZXIgdW5pbml0aWFsaXplZCBmaWVsZHMuIFRoZXJlJ3Mgbm8gaGludCBvZiBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha2FnZSB0aGF0IEkgY2FuIHNlZS4gS0FTQU4gc2hvdWxkIGhhbmRsZSBhbnkgYmFzaWMgbWVtb3J5IGVycm9ycyBzdWNoIGFzIGFuIG91dCBvZiBib3VuZHMgcmVhZCwgZHVlIHRvIHRoZSBwcmVzZW5jZSBvZiBgcHNrYl9uZXR3b3JrX21heV9wdWxsKClgLlxuXG5HaXZlbiB0aGF0IHRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBidWcsIHVzZXMgc2FmZSBtZW1vcnkgYWNjZXNzIGFuZCBhdm9pZHMgaW50cm9kdWNpbmcgbmV3IGFyZWFzIG9mIGNvbmNlcm4sIEknbSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgS01TQU4gZnV6emluZyBpc24ndCBuZWNlc3NhcnkuIExldCdzIG1hcmsgdGhpcyBhcyBhIG5vLW9wIGZyb20gYSBLTVNBTiBwZXJzcGVjdGl2ZS5cblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjUyLCJPdXRwdXRUb2tlbnMiOjIyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAzOjEzOjQxLjM1NTczNzI0MloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGFsYl9kZXRlcm1pbmVfbmQoKWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY2AgdG8gY29tcHV0ZSB0aGUgSUNNUHY2IGhlYWRlciBsb2NhdGlvbiBkaXJlY3RseSBmb2xsb3dpbmcgdGhlIElQdjYgaGVhZGVyIChgKGNvbnN0IHN0cnVjdCBpY21wNmhkciAqKShpcDZoZHIgKyAxKWApIGluc3RlYWQgb2YgaW52b2tpbmcgYGljbXA2X2hkcihza2IpYCAod2hpY2ggcmVsaWVzIG9uIGBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpYCBiZWluZyBpbml0aWFsaXplZCkuIEl0IGFsc28gZHJvcHMgYW4gdW51c2VkIGBib25kYCBwYXJhbWV0ZXIuXFxuXFxuVGhlIHBhY2tldCBwYXlsb2FkIGJ5dGVzIHJlYWQgYnkgdGhpcyBmdW5jdGlvbiBhcmUgdmVyaWZpZWQgdG8gZXhpc3QgaW4gdGhlIGxpbmVhciBidWZmZXIgdXNpbmcgYHBza2JfbmV0d29ya19tYXlfcHVsbCgpYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbnkgcG90ZW50aWFsIGJ1ZmZlciBib3VuZHMgb3Igc2tiIGRlcmVmZXJlbmNlIGlzc3VlcyBpbiB0aGlzIHBhdGggYXJlIGNvdmVyZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBhbGJfZGV0ZXJtaW5lX25kKClgIGluIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgIHRvIGNvbXB1dGUgdGhlIElDTVB2NiBoZWFkZXIgbG9jYXRpb24gZGlyZWN0bHkgZm9sbG93aW5nIHRoZSBJUHY2IGhlYWRlciAoYChjb25zdCBzdHJ1Y3QgaWNtcDZoZHIgKikoaXA2aGRyICsgMSlgKSBpbnN0ZWFkIG9mIGludm9raW5nIGBpY21wNl9oZHIoc2tiKWAgKHdoaWNoIHJlbGllcyBvbiBgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKWAgYmVpbmcgaW5pdGlhbGl6ZWQpLiBJdCBhbHNvIGRyb3BzIGFuIHVudXNlZCBgYm9uZGAgcGFyYW1ldGVyLlxcblxcblRoZSBwYWNrZXQgcGF5bG9hZCBieXRlcyByZWFkIGJ5IHRoaXMgZnVuY3Rpb24gYXJlIHZlcmlmaWVkIHRvIGV4aXN0IGluIHRoZSBsaW5lYXIgYnVmZmVyIHVzaW5nIGBwc2tiX25ldHdvcmtfbWF5X3B1bGwoKWAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGRvZXMgbm90IGNvcHkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGZpZWxkcy4gQW55IHBvdGVudGlhbCBidWZmZXIgYm91bmRzIG9yIHNrYiBkZXJlZmVyZW5jZSBpc3N1ZXMgaW4gdGhpcyBwYXRoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2794c[1] Phase: Succeeded StartedAt: 2026-09-01 03:13:53 +0000 UTC FinishedAt: 2026-09-01 03:13:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2794c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-01 03:13:53 +0000 UTC FinishedAt: 2026-09-01 03:13:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2794c[2] Phase: Succeeded StartedAt: 2026-09-01 03:13:53 +0000 UTC FinishedAt: 2026-09-01 07:03:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:13:53 +0000 UTC FinishedAt: 2026-09-01 07:03:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:13:53 +0000 UTC FinishedAt: 2026-09-01 03:14:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:13:53 +0000 UTC FinishedAt: 2026-09-01 03:14:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"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-workflow2794c/series-workflow2794c-convert-artifact-579408810/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:14:14 +0000 UTC FinishedAt: 2026-09-01 03:34:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:14:14 +0000 UTC FinishedAt: 2026-09-01 03:34:36 +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:*a5b9d082-cb3f-4280-9863-1f8dee5e3969,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-workflow2794c/series-workflow2794c-convert-artifact-579408810/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": "4aebd0e2-f5a2-4e54-b33d-878e62ffa294", "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-workflow2794c/series-workflow2794c-build-action-2261683480/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:14:14 +0000 UTC FinishedAt: 2026-09-01 03:34: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:*a5b9d082-cb3f-4280-9863-1f8dee5e3969,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-workflow2794c/series-workflow2794c-convert-artifact-579408810/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": "4aebd0e2-f5a2-4e54-b33d-878e62ffa294", "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-workflow2794c/series-workflow2794c-build-action-2261683480/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:34:36 +0000 UTC FinishedAt: 2026-09-01 03:34:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:34:36 +0000 UTC FinishedAt: 2026-09-01 03:34:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:34:36 +0000 UTC FinishedAt: 2026-09-01 03:34:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:34:36 +0000 UTC FinishedAt: 2026-09-01 03:34:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-workflow2794c/series-workflow2794c-convert-artifact-2326699205/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:34:46 +0000 UTC FinishedAt: 2026-09-01 03:36:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:34:46 +0000 UTC FinishedAt: 2026-09-01 03:36:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4aebd0e2-f5a2-4e54-b33d-878e62ffa294,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-workflow2794c/series-workflow2794c-build-action-2261683480/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-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:36:44 +0000 UTC FinishedAt: 2026-09-01 03:36:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:36:44 +0000 UTC FinishedAt: 2026-09-01 03:36:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:36:44 +0000 UTC FinishedAt: 2026-09-01 03:56:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:36:44 +0000 UTC FinishedAt: 2026-09-01 03:56:58 +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:*a5b9d082-cb3f-4280-9863-1f8dee5e3969,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-workflow2794c/series-workflow2794c-convert-artifact-2326699205/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": "cb9f179c-58ef-4d26-a905-97c82f84f9f7", "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-workflow2794c/series-workflow2794c-build-action-4168745233/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:36:44 +0000 UTC FinishedAt: 2026-09-01 03:56:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a5b9d082-cb3f-4280-9863-1f8dee5e3969,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-workflow2794c/series-workflow2794c-convert-artifact-2326699205/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": "cb9f179c-58ef-4d26-a905-97c82f84f9f7", "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-workflow2794c/series-workflow2794c-build-action-4168745233/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:56:58 +0000 UTC FinishedAt: 2026-09-01 03:56:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:56:58 +0000 UTC FinishedAt: 2026-09-01 03:56:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:56:58 +0000 UTC FinishedAt: 2026-09-01 03:58:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:56:58 +0000 UTC FinishedAt: 2026-09-01 03:58:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cb9f179c-58ef-4d26-a905-97c82f84f9f7,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-workflow2794c/series-workflow2794c-build-action-4168745233/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-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:58:49 +0000 UTC FinishedAt: 2026-09-01 07:03:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:58:49 +0000 UTC FinishedAt: 2026-09-01 07:03:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"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:*4aebd0e2-f5a2-4e54-b33d-878e62ffa294,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cb9f179c-58ef-4d26-a905-97c82f84f9f7,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-workflow2794c/series-workflow2794c-build-action-2261683480/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-workflow2794c/series-workflow2794c-build-action-4168745233/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:58:49 +0000 UTC FinishedAt: 2026-09-01 03:59:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:58:49 +0000 UTC FinishedAt: 2026-09-01 03:58:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"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-workflow2794c/series-workflow2794c-convert-artifact-4110123082/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:58:49 +0000 UTC FinishedAt: 2026-09-01 03:58:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:58:49 +0000 UTC FinishedAt: 2026-09-01 03:58:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:58:49 +0000 UTC FinishedAt: 2026-09-01 03:58:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:59:01 +0000 UTC FinishedAt: 2026-09-01 07:03:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2794c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get","bond_alb_xmit","bond_tlb_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b120a771943ffc3cbce787daecdd23eccb0505f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IPV6","NET_CORE"],"series_id":"dd27dbac-d7db-4c5c-a2f3-0bc0eaf468ec","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-01 03:59:01 +0000 UTC FinishedAt: 2026-09-01 07:02:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4aebd0e2-f5a2-4e54-b33d-878e62ffa294,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cb9f179c-58ef-4d26-a905-97c82f84f9f7,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-workflow2794c/series-workflow2794c-build-action-2261683480/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-workflow2794c/series-workflow2794c-build-action-4168745233/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-workflow2794c/series-workflow2794c-convert-artifact-4110123082/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,}