Name: series-workflowcrzcr Phase: Succeeded StartedAt: 2026-08-31 22:28:02 +0000 UTC FinishedAt: 2026-09-01 02:16:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrzcr[0] Phase: Succeeded StartedAt: 2026-08-31 22:28:02 +0000 UTC FinishedAt: 2026-08-31 22:30:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrzcr[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 22:28:02 +0000 UTC FinishedAt: 2026-08-31 22:30:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_IO_TRACE", "BLOCK", "SYSFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_IO_TRACE", "BLOCK", "SYSFS" ], "series_id": "d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "blk_trace_ioctl", "blk_trace_setup" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfSU9fVFJBQ0UmIzM0OywKICAgICYjMzQ7QkxPQ0smIzM0OywKICAgICYjMzQ7U1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtfdHJhY2VfaW9jdGwmIzM0OywKICAgICYjMzQ7YmxrX3RyYWNlX3NldHVwJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvciBjaGVja2luZyBhbmQgdW53aW5kaW5nIHRvIGJsa3RyYWNlIHRyYWNlcG9pbnQgcmVnaXN0cmF0aW9uIChibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHMsIGdldF9wcm9iZV9yZWYsIGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZSwgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKS4gSW4gZmFpbHVyZSBjYXNlcywgaXQgcHJvcGVybHkgcm9sbHMgYmFjayByZWdpc3RlcmVkIHRyYWNlcG9pbnRzLCBkZWNyZW1lbnRzIHByb2JlIHJlZmVyZW5jZSBjb3VudHMsIGNsZWFucyB1cCBhbGxvY2F0ZWQgYmxrX3RyYWNlIHN0cnVjdHVyZXMgdmlhIGJsa190cmFjZV9mcmVlLCBhbmQgcmV0dXJucyBlcnJvciBjb2RlcyBiZWZvcmUgYW55IGRhdGEgaXMgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZS4gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBhcmUgcmVhZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggdW5pbml0aWFsaXplZCBhbGxvY2F0aW9ucyBvciBjb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIGRhdGEgYXJlIGludHJvZHVjZWQuIFBvdGVudGlhbCByaXNrcyBvbiB0aGVzZSBwYXRocyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBsb2NrL2NsZWFudXAgZXJyb3JzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzOyB0aHVzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJsa3RyYWNlIHRyYWNlcG9pbnQgcmVnaXN0cmF0aW9uIGFuZCBzZXR1cCBlcnJvciB1bndpbmRpbmcgcGF0aHMgaW4ga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMuIEl0IG1ha2VzIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyByZXR1cm4gZXJyb3IgY29kZXMgYW5kIHJvbGxiYWNrIHJlZ2lzdGVyZWQgdHJhY2Vwb2ludHMgdXBvbiBmYWlsdXJlLCBhbmQgcHJvcGVybHkgaGFuZGxlcyB0cmFjZXBvaW50IHNldHVwIGVycm9ycyBhY3Jvc3MgYmxrX3RyYWNlX3NldHVwKCksIGJsa190cmFjZV9zZXR1cDIoKSwgY29tcGF0X2Jsa190cmFjZV9zZXR1cCgpLCBhbmQgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKCksIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGJsb2NrIGRldmljZSBpb2N0bHMgYW5kIHN5c2ZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzU4Y2ZlNjQ1NmM4NDYzYjcxNzA0OWI5OTYwMTk2MGM5MDM5NjhhOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDIyOjI5OjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jIGIva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNcbmluZGV4IDhjZDI1MjBiNGM5OWUuLmMyMzI0Mjk4YzZjMTUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNcbkBAIC02MCw3ICYjNDM7NjAsNyBAQCBzdGF0aWMgc3RydWN0IHRyYWNlcl9mbGFncyBibGtfdHJhY2VyX2ZsYWdzID0ge1xuIHN0YXRpYyBERUZJTkVfTVVURVgoYmxrX3Byb2JlX211dGV4KTtcbiBzdGF0aWMgaW50IGJsa19wcm9iZXNfcmVmO1xuIFxuLXN0YXRpYyB2b2lkIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKTtcbiYjNDM7c3RhdGljIGludCBibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZCk7XG4gc3RhdGljIHZvaWQgYmxrX3VucmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZCk7XG4gXG4gc3RhdGljIHZvaWQgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50KHN0cnVjdCBibGtfaW9fdHJhY2UgKnQsIHBpZF90IHBpZCwgaW50IGNwdSxcbkBAIC00ODUsMTIgJiM0Mzs0ODUsMTggQEAgc3RhdGljIHZvaWQgYmxrX3RyYWNlX2ZyZWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBibGtfdHJhY2UgKmJ0KVxuIFx0a2ZyZWUoYnQpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBnZXRfcHJvYmVfcmVmKHZvaWQpXG4mIzQzO3N0YXRpYyBpbnQgZ2V0X3Byb2JlX3JlZih2b2lkKVxuIHtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4gXHRtdXRleF9sb2NrKFx1MDAyNmJsa19wcm9iZV9tdXRleCk7XG4tXHRpZiAoJiM0MzsmIzQzO2Jsa19wcm9iZXNfcmVmID09IDEpXG4tXHRcdGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cygpO1xuJiM0MztcdGlmICgmIzQzOyYjNDM7YmxrX3Byb2Jlc19yZWYgPT0gMSkge1xuJiM0MztcdFx0cmV0ID0gYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRibGtfcHJvYmVzX3JlZi0tO1xuJiM0MztcdH1cbiBcdG11dGV4X3VubG9jayhcdTAwMjZibGtfcHJvYmVfbXV0ZXgpO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHB1dF9wcm9iZV9yZWYodm9pZClcbkBAIC03MjcsMTIgJiM0Mzs3MzMsMTQgQEAgc3RhdGljIHN0cnVjdCBibGtfdHJhY2UgKmJsa190cmFjZV9zZXR1cF9wcmVwYXJlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuIFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuLVx0XHRcdFx0ICAgICBjaGFyICpuYW1lLCBpbnQgdmVyc2lvbixcbi1cdFx0XHRcdCAgICAgc3RydWN0IGJsa190cmFjZSAqYnQsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cDIgKmJ1dHMpXG4mIzQzO3N0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuJiM0MztcdFx0XHRcdCAgICBjaGFyICpuYW1lLCBpbnQgdmVyc2lvbixcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGJsa190cmFjZSAqYnQsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cDIgKmJ1dHMpXG4gXG4ge1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuIFx0c3Ryc2NweV9wYWQoYnV0cy1cdTAwM2VuYW1lLCBuYW1lLCBCTEtUUkFDRV9CREVWX1NJWkUyKTtcbiBcbiBcdC8qXG5AQCAtNzU1LDggJiM0Mzs3NjMsMTIgQEAgc3RhdGljIHZvaWQgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuIFx0YnQtXHUwMDNlcGlkID0gYnV0cy1cdTAwM2VwaWQ7XG4gXHRidC1cdTAwM2V0cmFjZV9zdGF0ZSA9IEJsa3RyYWNlX3NldHVwO1xuIFxuJiM0MztcdHJldCA9IGdldF9wcm9iZV9yZWYoKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4gXHRyY3VfYXNzaWduX3BvaW50ZXIocS1cdTAwM2VibGtfdHJhY2UsIGJ0KTtcbi1cdGdldF9wcm9iZV9yZWYoKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gaW50IGJsa190cmFjZV9zZXR1cChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSwgZGV2X3QgZGV2LFxuQEAgLTc5Miw3ICYjNDM7ODA0LDEyIEBAIGludCBibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldixcbiBcdFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcbiBcdFx0cmV0dXJuIFBUUl9FUlIoYnQpO1xuIFx0fVxuLVx0YmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDEsIGJ0LCBcdTAwMjZidXRzMik7XG4mIzQzO1x0cmV0ID0gYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDEsIGJ0LCBcdTAwMjZidXRzMik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0YmxrX3RyYWNlX2ZyZWUocSwgYnQpO1xuJiM0MztcdFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuIFx0c3Ryc2NweShidXRzLm5hbWUsIGJ1dHMyLm5hbWUsIEJMS1RSQUNFX0JERVZfU0laRSk7XG4gXHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuIFxuQEAgLTgxMCw2ICYjNDM7ODI3LDcgQEAgc3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXAyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXG4gXHRzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAyIGJ1dHMyO1xuIFx0c3RydWN0IGJsa190cmFjZSAqYnQ7XG4gXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZidXRzMiwgYXJnLCBzaXplb2YoYnV0czIpKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG5AQCAtODI3LDcgJiM0Mzs4NDUsMTIgQEAgc3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXAyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXG4gXHRcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XG4gXHRcdHJldHVybiBQVFJfRVJSKGJ0KTtcbiBcdH1cbi1cdGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAyLCBidCwgXHUwMDI2YnV0czIpO1xuJiM0MztcdHJldCA9IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAyLCBidCwgXHUwMDI2YnV0czIpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcbiYjNDM7XHRcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiBcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XG4gXG4gXHRpZiAoY29weV90b191c2VyKGFyZywgXHUwMDI2YnV0czIsIHNpemVvZihidXRzMikpKSB7XG5AQCAtODQ2LDYgJiM0Mzs4NjksNyBAQCBzdGF0aWMgaW50IGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsXG4gXHRzdHJ1Y3QgY29tcGF0X2Jsa191c2VyX3RyYWNlX3NldHVwIGNidXRzO1xuIFx0c3RydWN0IGJsa190cmFjZSAqYnQ7XG4gXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZjYnV0cywgYXJnLCBzaXplb2YoY2J1dHMpKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG5AQCAtODY5LDcgJiM0Mzs4OTMsMTIgQEAgc3RhdGljIGludCBjb21wYXRfYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLFxuIFx0XHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuIFx0XHRyZXR1cm4gUFRSX0VSUihidCk7XG4gXHR9XG4tXHRibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMSwgYnQsIFx1MDAyNmJ1dHMyKTtcbiYjNDM7XHRyZXQgPSBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMSwgYnQsIFx1MDAyNmJ1dHMyKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRibGtfdHJhY2VfZnJlZShxLCBidCk7XG4mIzQzO1x0XHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4gXHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuIFxuIFx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFx1MDAyNmJ1dHMyLm5hbWUsIEFSUkFZX1NJWkUoYnV0czIubmFtZSkpKSB7XG5AQCAtMTMyNCw0OSAmIzQzOzEzNTMsMTA4IEBAIHZvaWQgYmxrX2FkZF9kcml2ZXJfZGF0YShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGJsa19hZGRfZHJpdmVyX2RhdGEpO1xuIFxuLXN0YXRpYyB2b2lkIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKVxuJiM0MztzdGF0aWMgaW50IGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKVxuIHtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9pbnNlcnQoYmxrX2FkZF90cmFjZV9ycV9pbnNlcnQsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2lzc3VlKGJsa19hZGRfdHJhY2VfcnFfaXNzdWUsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9ycV9pbnNlcnQ7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9tZXJnZShibGtfYWRkX3RyYWNlX3JxX21lcmdlLCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcnFfaXNzdWU7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9yZXF1ZXVlKGJsa19hZGRfdHJhY2VfcnFfcmVxdWV1ZSwgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3JxX21lcmdlO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfY29tcGxldGUoYmxrX2FkZF90cmFjZV9ycV9jb21wbGV0ZSwgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3JxX3JlcXVldWU7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fY29tcGxldGUoYmxrX2FkZF90cmFjZV9iaW9fY29tcGxldGUsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9ycV9jb21wbGV0ZTtcbiBcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19iYWNrbWVyZ2UoYmxrX2FkZF90cmFjZV9iaW9fYmFja21lcmdlLCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfYmlvX2NvbXBsZXRlO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2Zyb250bWVyZ2UoYmxrX2FkZF90cmFjZV9iaW9fZnJvbnRtZXJnZSwgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X2Jpb19iYWNrbWVyZ2U7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fcXVldWUoYmxrX2FkZF90cmFjZV9iaW9fcXVldWUsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9iaW9fZnJvbnRtZXJnZTtcbiBcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2dldHJxKGJsa19hZGRfdHJhY2VfZ2V0cnEsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9iaW9fcXVldWU7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibGtfem9uZV9hcHBlbmRfdXBkYXRlX3JlcXVlc3RfYmlvKFxuIFx0XHRibGtfYWRkX3RyYWNlX3pvbmVfdXBkYXRlX3JlcXVlc3QsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9nZXRycTtcbiBcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Rpc2tfem9uZV93cGx1Z19hZGRfYmlvKGJsa19hZGRfdHJhY2Vfem9uZV9wbHVnLFxuIFx0XHRcdFx0XHRcdCAgICAgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3pvbmVfdXBkYXRlX3JlcXVlc3Q7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibGtfem9uZV93cGx1Z19iaW8oYmxrX2FkZF90cmFjZV96b25lX3VucGx1ZyxcbiBcdFx0XHRcdFx0XHROVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfem9uZV9wbHVnO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcGx1ZyhibGtfYWRkX3RyYWNlX3BsdWcsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF96b25lX3VucGx1ZztcbiBcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3VucGx1ZyhibGtfYWRkX3RyYWNlX3VucGx1ZywgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3BsdWc7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19zcGxpdChibGtfYWRkX3RyYWNlX3NwbGl0LCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfdW5wbHVnO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX3JlbWFwKGJsa19hZGRfdHJhY2VfYmlvX3JlbWFwLCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfc3BsaXQ7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9yZW1hcChibGtfYWRkX3RyYWNlX3JxX3JlbWFwLCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfYmlvX3JlbWFwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO291dF9iaW9fcmVtYXA6XG4mIzQzO1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fcmVtYXAoYmxrX2FkZF90cmFjZV9iaW9fcmVtYXAsIE5VTEwpO1xuJiM0MztvdXRfc3BsaXQ6XG4mIzQzO1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19zcGxpdChibGtfYWRkX3RyYWNlX3NwbGl0LCBOVUxMKTtcbiYjNDM7b3V0X3VucGx1ZzpcbiYjNDM7XHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3VucGx1ZyhibGtfYWRkX3RyYWNlX3VucGx1ZywgTlVMTCk7XG4mIzQzO291dF9wbHVnOlxuJiM0MztcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcGx1ZyhibGtfYWRkX3RyYWNlX3BsdWcsIE5VTEwpO1xuJiM0MztvdXRfem9uZV91bnBsdWc6XG4mIzQzO1x0dW5yZWdpc3Rlcl90cmFjZV9ibGtfem9uZV93cGx1Z19iaW8oYmxrX2FkZF90cmFjZV96b25lX3VucGx1ZywgTlVMTCk7XG4mIzQzO291dF96b25lX3BsdWc6XG4mIzQzO1x0dW5yZWdpc3Rlcl90cmFjZV9kaXNrX3pvbmVfd3BsdWdfYWRkX2JpbyhibGtfYWRkX3RyYWNlX3pvbmVfcGx1ZywgTlVMTCk7XG4mIzQzO291dF96b25lX3VwZGF0ZV9yZXF1ZXN0OlxuJiM0MztcdHVucmVnaXN0ZXJfdHJhY2VfYmxrX3pvbmVfYXBwZW5kX3VwZGF0ZV9yZXF1ZXN0X2JpbyhcbiYjNDM7XHRcdGJsa19hZGRfdHJhY2Vfem9uZV91cGRhdGVfcmVxdWVzdCwgTlVMTCk7XG4mIzQzO291dF9nZXRycTpcbiYjNDM7XHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2dldHJxKGJsa19hZGRfdHJhY2VfZ2V0cnEsIE5VTEwpO1xuJiM0MztvdXRfYmlvX3F1ZXVlOlxuJiM0MztcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX3F1ZXVlKGJsa19hZGRfdHJhY2VfYmlvX3F1ZXVlLCBOVUxMKTtcbiYjNDM7b3V0X2Jpb19mcm9udG1lcmdlOlxuJiM0MztcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2Zyb250bWVyZ2UoYmxrX2FkZF90cmFjZV9iaW9fZnJvbnRtZXJnZSwgTlVMTCk7XG4mIzQzO291dF9iaW9fYmFja21lcmdlOlxuJiM0MztcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2JhY2ttZXJnZShibGtfYWRkX3RyYWNlX2Jpb19iYWNrbWVyZ2UsIE5VTEwpO1xuJiM0MztvdXRfYmlvX2NvbXBsZXRlOlxuJiM0MztcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2NvbXBsZXRlKGJsa19hZGRfdHJhY2VfYmlvX2NvbXBsZXRlLCBOVUxMKTtcbiYjNDM7b3V0X3JxX2NvbXBsZXRlOlxuJiM0MztcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfY29tcGxldGUoYmxrX2FkZF90cmFjZV9ycV9jb21wbGV0ZSwgTlVMTCk7XG4mIzQzO291dF9ycV9yZXF1ZXVlOlxuJiM0MztcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfcmVxdWV1ZShibGtfYWRkX3RyYWNlX3JxX3JlcXVldWUsIE5VTEwpO1xuJiM0MztvdXRfcnFfbWVyZ2U6XG4mIzQzO1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9tZXJnZShibGtfYWRkX3RyYWNlX3JxX21lcmdlLCBOVUxMKTtcbiYjNDM7b3V0X3JxX2lzc3VlOlxuJiM0MztcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfaXNzdWUoYmxrX2FkZF90cmFjZV9ycV9pc3N1ZSwgTlVMTCk7XG4mIzQzO291dF9ycV9pbnNlcnQ6XG4mIzQzO1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9pbnNlcnQoYmxrX2FkZF90cmFjZV9ycV9pbnNlcnQsIE5VTEwpO1xuJiM0MztcdHRyYWNlcG9pbnRfc3luY2hyb25pemVfdW5yZWdpc3RlcigpO1xuJiM0MztvdXQ6XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYmxrX3VucmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZClcbkBAIC0xOTE2LDggJiM0MzsyMDA0LDExIEBAIHN0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuIFxuIFx0YmxrX3RyYWNlX3NldHVwX2xiYShidCwgYmRldik7XG4gXG4mIzQzO1x0cmV0ID0gZ2V0X3Byb2JlX3JlZigpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGZyZWVfYnQ7XG4mIzQzO1xuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKHEtXHUwMDNlYmxrX3RyYWNlLCBidCk7XG4tXHRnZXRfcHJvYmVfcmVmKCk7XG4gXHRyZXR1cm4gMDtcbiBcbiBmcmVlX2J0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfSU9fVFJBQ0UmIzM0OywKICAgICYjMzQ7QkxPQ0smIzM0OywKICAgICYjMzQ7U1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtfdHJhY2VfaW9jdGwmIzM0OywKICAgICYjMzQ7YmxrX3RyYWNlX3NldHVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJsa3RyYWNlIHRyYWNlcG9pbnQgcmVnaXN0cmF0aW9uIGFuZCBzZXR1cCBlcnJvciB1bndpbmRpbmcgcGF0aHMgaW4ga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMuIEl0IG1ha2VzIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyByZXR1cm4gZXJyb3IgY29kZXMgYW5kIHJvbGxiYWNrIHJlZ2lzdGVyZWQgdHJhY2Vwb2ludHMgdXBvbiBmYWlsdXJlLCBhbmQgcHJvcGVybHkgaGFuZGxlcyB0cmFjZXBvaW50IHNldHVwIGVycm9ycyBhY3Jvc3MgYmxrX3RyYWNlX3NldHVwKCksIGJsa190cmFjZV9zZXR1cDIoKSwgY29tcGF0X2Jsa190cmFjZV9zZXR1cCgpLCBhbmQgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKCksIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGJsb2NrIGRldmljZSBpb2N0bHMgYW5kIHN5c2ZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzU4Y2ZlNjQ1NmM4NDYzYjcxNzA0OWI5OTYwMTk2MGM5MDM5NjhhOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDIyOjI5OjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYwppbmRleCA4Y2QyNTIwYjRjOTllLi5jMjMyNDI5OGM2YzE1IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYwpAQCAtNjAsNyAmIzQzOzYwLDcgQEAgc3RhdGljIHN0cnVjdCB0cmFjZXJfZmxhZ3MgYmxrX3RyYWNlcl9mbGFncyA9IHsKIHN0YXRpYyBERUZJTkVfTVVURVgoYmxrX3Byb2JlX211dGV4KTsKIHN0YXRpYyBpbnQgYmxrX3Byb2Jlc19yZWY7CiAKLXN0YXRpYyB2b2lkIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKTsKJiM0MztzdGF0aWMgaW50IGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKTsKIHN0YXRpYyB2b2lkIGJsa191bnJlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpOwogCiBzdGF0aWMgdm9pZCByZWNvcmRfYmxrdHJhY2VfZXZlbnQoc3RydWN0IGJsa19pb190cmFjZSAqdCwgcGlkX3QgcGlkLCBpbnQgY3B1LApAQCAtNDg1LDEyICYjNDM7NDg1LDE4IEBAIHN0YXRpYyB2b2lkIGJsa190cmFjZV9mcmVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmxrX3RyYWNlICpidCkKIAlrZnJlZShidCk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldF9wcm9iZV9yZWYodm9pZCkKJiM0MztzdGF0aWMgaW50IGdldF9wcm9iZV9yZWYodm9pZCkKIHsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiAJbXV0ZXhfbG9jaygmYW1wO2Jsa19wcm9iZV9tdXRleCk7Ci0JaWYgKCYjNDM7JiM0MztibGtfcHJvYmVzX3JlZiA9PSAxKQotCQlibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHMoKTsKJiM0MzsJaWYgKCYjNDM7JiM0MztibGtfcHJvYmVzX3JlZiA9PSAxKSB7CiYjNDM7CQlyZXQgPSBibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHMoKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJYmxrX3Byb2Jlc19yZWYtLTsKJiM0MzsJfQogCW11dGV4X3VubG9jaygmYW1wO2Jsa19wcm9iZV9tdXRleCk7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHB1dF9wcm9iZV9yZWYodm9pZCkKQEAgLTcyNywxMiAmIzQzOzczMywxNCBAQCBzdGF0aWMgc3RydWN0IGJsa190cmFjZSAqYmxrX3RyYWNlX3NldHVwX3ByZXBhcmUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCiAJcmV0dXJuIEVSUl9QVFIocmV0KTsKIH0KIAotc3RhdGljIHZvaWQgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAotCQkJCSAgICAgY2hhciAqbmFtZSwgaW50IHZlcnNpb24sCi0JCQkJICAgICBzdHJ1Y3QgYmxrX3RyYWNlICpidCwKLQkJCQkgICAgIHN0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cDIgKmJ1dHMpCiYjNDM7c3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCiYjNDM7CQkJCSAgICBjaGFyICpuYW1lLCBpbnQgdmVyc2lvbiwKJiM0MzsJCQkJICAgIHN0cnVjdCBibGtfdHJhY2UgKmJ0LAomIzQzOwkJCQkgICAgc3RydWN0IGJsa191c2VyX3RyYWNlX3NldHVwMiAqYnV0cykKIAogewomIzQzOwlpbnQgcmV0OwomIzQzOwogCXN0cnNjcHlfcGFkKGJ1dHMtJmd0O25hbWUsIG5hbWUsIEJMS1RSQUNFX0JERVZfU0laRTIpOwogCiAJLyoKQEAgLTc1NSw4ICYjNDM7NzYzLDEyIEBAIHN0YXRpYyB2b2lkIGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKIAlidC0mZ3Q7cGlkID0gYnV0cy0mZ3Q7cGlkOwogCWJ0LSZndDt0cmFjZV9zdGF0ZSA9IEJsa3RyYWNlX3NldHVwOwogCiYjNDM7CXJldCA9IGdldF9wcm9iZV9yZWYoKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKHEtJmd0O2Jsa190cmFjZSwgYnQpOwotCWdldF9wcm9iZV9yZWYoKTsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIGludCBibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldiwKQEAgLTc5Miw3ICYjNDM7ODA0LDEyIEBAIGludCBibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldiwKIAkJYmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTsKIAkJcmV0dXJuIFBUUl9FUlIoYnQpOwogCX0KLQlibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMSwgYnQsICZhbXA7YnV0czIpOwomIzQzOwlyZXQgPSBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMSwgYnQsICZhbXA7YnV0czIpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlibGtfdHJhY2VfZnJlZShxLCBidCk7CiYjNDM7CQlibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQogCXN0cnNjcHkoYnV0cy5uYW1lLCBidXRzMi5uYW1lLCBCTEtUUkFDRV9CREVWX1NJWkUpOwogCWJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7CiAKQEAgLTgxMCw2ICYjNDM7ODI3LDcgQEAgc3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXAyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsCiAJc3RydWN0IGJsa191c2VyX3RyYWNlX3NldHVwMiBidXRzMjsKIAlzdHJ1Y3QgYmxrX3RyYWNlICpidDsKIAl1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7CiYjNDM7CWludCByZXQ7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDtidXRzMiwgYXJnLCBzaXplb2YoYnV0czIpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC04MjcsNyAmIzQzOzg0NSwxMiBAQCBzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cDIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldiwKIAkJYmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTsKIAkJcmV0dXJuIFBUUl9FUlIoYnQpOwogCX0KLQlibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMiwgYnQsICZhbXA7YnV0czIpOwomIzQzOwlyZXQgPSBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMiwgYnQsICZhbXA7YnV0czIpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlibGtfdHJhY2VfZnJlZShxLCBidCk7CiYjNDM7CQlibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQogCWJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7CiAKIAlpZiAoY29weV90b191c2VyKGFyZywgJmFtcDtidXRzMiwgc2l6ZW9mKGJ1dHMyKSkpIHsKQEAgLTg0Niw2ICYjNDM7ODY5LDcgQEAgc3RhdGljIGludCBjb21wYXRfYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLAogCXN0cnVjdCBjb21wYXRfYmxrX3VzZXJfdHJhY2Vfc2V0dXAgY2J1dHM7CiAJc3RydWN0IGJsa190cmFjZSAqYnQ7CiAJdW5zaWduZWQgaW50IG1lbWZsYWdzOwomIzQzOwlpbnQgcmV0OwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7Y2J1dHMsIGFyZywgc2l6ZW9mKGNidXRzKSkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtODY5LDcgJiM0Mzs4OTMsMTIgQEAgc3RhdGljIGludCBjb21wYXRfYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLAogCQlibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpOwogCQlyZXR1cm4gUFRSX0VSUihidCk7CiAJfQotCWJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAxLCBidCwgJmFtcDtidXRzMik7CiYjNDM7CXJldCA9IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAxLCBidCwgJmFtcDtidXRzMik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWJsa190cmFjZV9mcmVlKHEsIGJ0KTsKJiM0MzsJCWJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiAJYmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTsKIAogCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYW1wO2J1dHMyLm5hbWUsIEFSUkFZX1NJWkUoYnV0czIubmFtZSkpKSB7CkBAIC0xMzI0LDQ5ICYjNDM7MTM1MywxMDggQEAgdm9pZCBibGtfYWRkX2RyaXZlcl9kYXRhKHN0cnVjdCByZXF1ZXN0ICpycSwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGJsa19hZGRfZHJpdmVyX2RhdGEpOwogCi1zdGF0aWMgdm9pZCBibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZCkKJiM0MztzdGF0aWMgaW50IGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKQogewogCWludCByZXQ7CiAKIAlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9pbnNlcnQoYmxrX2FkZF90cmFjZV9ycV9pbnNlcnQsIE5VTEwpOwotCVdBUk5fT04ocmV0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0OwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2lzc3VlKGJsa19hZGRfdHJhY2VfcnFfaXNzdWUsIE5VTEwpOwotCVdBUk5fT04ocmV0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3JxX2luc2VydDsKIAlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9tZXJnZShibGtfYWRkX3RyYWNlX3JxX21lcmdlLCBOVUxMKTsKLQlXQVJOX09OKHJldCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9ycV9pc3N1ZTsKIAlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9yZXF1ZXVlKGJsa19hZGRfdHJhY2VfcnFfcmVxdWV1ZSwgTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcnFfbWVyZ2U7CiAJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfY29tcGxldGUoYmxrX2FkZF90cmFjZV9ycV9jb21wbGV0ZSwgTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcnFfcmVxdWV1ZTsKIAlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fY29tcGxldGUoYmxrX2FkZF90cmFjZV9iaW9fY29tcGxldGUsIE5VTEwpOwotCVdBUk5fT04ocmV0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3JxX2NvbXBsZXRlOwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19iYWNrbWVyZ2UoYmxrX2FkZF90cmFjZV9iaW9fYmFja21lcmdlLCBOVUxMKTsKLQlXQVJOX09OKHJldCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9iaW9fY29tcGxldGU7CiAJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2Zyb250bWVyZ2UoYmxrX2FkZF90cmFjZV9iaW9fZnJvbnRtZXJnZSwgTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfYmlvX2JhY2ttZXJnZTsKIAlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fcXVldWUoYmxrX2FkZF90cmFjZV9iaW9fcXVldWUsIE5VTEwpOwotCVdBUk5fT04ocmV0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X2Jpb19mcm9udG1lcmdlOwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2dldHJxKGJsa19hZGRfdHJhY2VfZ2V0cnEsIE5VTEwpOwotCVdBUk5fT04ocmV0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X2Jpb19xdWV1ZTsKIAlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibGtfem9uZV9hcHBlbmRfdXBkYXRlX3JlcXVlc3RfYmlvKAogCQlibGtfYWRkX3RyYWNlX3pvbmVfdXBkYXRlX3JlcXVlc3QsIE5VTEwpOwotCVdBUk5fT04ocmV0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X2dldHJxOwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Rpc2tfem9uZV93cGx1Z19hZGRfYmlvKGJsa19hZGRfdHJhY2Vfem9uZV9wbHVnLAogCQkJCQkJICAgICBOVUxMKTsKLQlXQVJOX09OKHJldCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF96b25lX3VwZGF0ZV9yZXF1ZXN0OwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsa196b25lX3dwbHVnX2JpbyhibGtfYWRkX3RyYWNlX3pvbmVfdW5wbHVnLAogCQkJCQkJTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfem9uZV9wbHVnOwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3BsdWcoYmxrX2FkZF90cmFjZV9wbHVnLCBOVUxMKTsKLQlXQVJOX09OKHJldCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF96b25lX3VucGx1ZzsKIAlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWcoYmxrX2FkZF90cmFjZV91bnBsdWcsIE5VTEwpOwotCVdBUk5fT04ocmV0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3BsdWc7CiAJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfc3BsaXQoYmxrX2FkZF90cmFjZV9zcGxpdCwgTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfdW5wbHVnOwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19yZW1hcChibGtfYWRkX3RyYWNlX2Jpb19yZW1hcCwgTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfc3BsaXQ7CiAJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfcmVtYXAoYmxrX2FkZF90cmFjZV9ycV9yZW1hcCwgTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfYmlvX3JlbWFwOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztvdXRfYmlvX3JlbWFwOgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19yZW1hcChibGtfYWRkX3RyYWNlX2Jpb19yZW1hcCwgTlVMTCk7CiYjNDM7b3V0X3NwbGl0OgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3NwbGl0KGJsa19hZGRfdHJhY2Vfc3BsaXQsIE5VTEwpOwomIzQzO291dF91bnBsdWc6CiYjNDM7CXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfdW5wbHVnKGJsa19hZGRfdHJhY2VfdW5wbHVnLCBOVUxMKTsKJiM0MztvdXRfcGx1ZzoKJiM0MzsJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19wbHVnKGJsa19hZGRfdHJhY2VfcGx1ZywgTlVMTCk7CiYjNDM7b3V0X3pvbmVfdW5wbHVnOgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsa196b25lX3dwbHVnX2JpbyhibGtfYWRkX3RyYWNlX3pvbmVfdW5wbHVnLCBOVUxMKTsKJiM0MztvdXRfem9uZV9wbHVnOgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Rpc2tfem9uZV93cGx1Z19hZGRfYmlvKGJsa19hZGRfdHJhY2Vfem9uZV9wbHVnLCBOVUxMKTsKJiM0MztvdXRfem9uZV91cGRhdGVfcmVxdWVzdDoKJiM0MzsJdW5yZWdpc3Rlcl90cmFjZV9ibGtfem9uZV9hcHBlbmRfdXBkYXRlX3JlcXVlc3RfYmlvKAomIzQzOwkJYmxrX2FkZF90cmFjZV96b25lX3VwZGF0ZV9yZXF1ZXN0LCBOVUxMKTsKJiM0MztvdXRfZ2V0cnE6CiYjNDM7CXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfZ2V0cnEoYmxrX2FkZF90cmFjZV9nZXRycSwgTlVMTCk7CiYjNDM7b3V0X2Jpb19xdWV1ZToKJiM0MzsJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fcXVldWUoYmxrX2FkZF90cmFjZV9iaW9fcXVldWUsIE5VTEwpOwomIzQzO291dF9iaW9fZnJvbnRtZXJnZToKJiM0MzsJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fZnJvbnRtZXJnZShibGtfYWRkX3RyYWNlX2Jpb19mcm9udG1lcmdlLCBOVUxMKTsKJiM0MztvdXRfYmlvX2JhY2ttZXJnZToKJiM0MzsJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fYmFja21lcmdlKGJsa19hZGRfdHJhY2VfYmlvX2JhY2ttZXJnZSwgTlVMTCk7CiYjNDM7b3V0X2Jpb19jb21wbGV0ZToKJiM0MzsJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fY29tcGxldGUoYmxrX2FkZF90cmFjZV9iaW9fY29tcGxldGUsIE5VTEwpOwomIzQzO291dF9ycV9jb21wbGV0ZToKJiM0MzsJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9jb21wbGV0ZShibGtfYWRkX3RyYWNlX3JxX2NvbXBsZXRlLCBOVUxMKTsKJiM0MztvdXRfcnFfcmVxdWV1ZToKJiM0MzsJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9yZXF1ZXVlKGJsa19hZGRfdHJhY2VfcnFfcmVxdWV1ZSwgTlVMTCk7CiYjNDM7b3V0X3JxX21lcmdlOgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX21lcmdlKGJsa19hZGRfdHJhY2VfcnFfbWVyZ2UsIE5VTEwpOwomIzQzO291dF9ycV9pc3N1ZToKJiM0MzsJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9pc3N1ZShibGtfYWRkX3RyYWNlX3JxX2lzc3VlLCBOVUxMKTsKJiM0MztvdXRfcnFfaW5zZXJ0OgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2luc2VydChibGtfYWRkX3RyYWNlX3JxX2luc2VydCwgTlVMTCk7CiYjNDM7CXRyYWNlcG9pbnRfc3luY2hyb25pemVfdW5yZWdpc3RlcigpOwomIzQzO291dDoKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgYmxrX3VucmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZCkKQEAgLTE5MTYsOCAmIzQzOzIwMDQsMTEgQEAgc3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXBfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCiAKIAlibGtfdHJhY2Vfc2V0dXBfbGJhKGJ0LCBiZGV2KTsKIAomIzQzOwlyZXQgPSBnZXRfcHJvYmVfcmVmKCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGZyZWVfYnQ7CiYjNDM7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKHEtJmd0O2Jsa190cmFjZSwgYnQpOwotCWdldF9wcm9iZV9yZWYoKTsKIAlyZXR1cm4gMDsKIAogZnJlZV9idDoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM2MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJsa3RyYWNlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCBpbnRyb2R1Y2VzIGFueSBuZXcgZnVuY3Rpb25hbGl0eSB0aGF0IHdhcnJhbnRzIHNvbWUgZnV6emluZyBhdHRlbnRpb24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhpcyBpcyBwcmltYXJpbHkgZm9jdXNlZCBvbiB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIGluaXRpYWxpemF0aW9uIG9mIGJsa3RyYWNlIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIHRyYWNpbmcgZnJhbWV3b3JrLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGluIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AuIFRoZSBtb3N0IHNpZ25pZmljYW50IGFkanVzdG1lbnQgc2VlbXMgdG8gYmUgdGhhdCBgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzYCBub3cgcmV0dXJucyBhbiBpbnRlZ2VyLCBhbiBlcnJvciBjb2RlLCByYXRoZXIgdGhhbiB2b2lkLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIOKAkyBpdCBzdWdnZXN0cyBhIHNoaWZ0IHRvd2FyZHMgbW9yZSByb2J1c3QgZXJyb3IgY2hlY2tpbmcgZHVyaW5nIHRyYWNlcG9pbnQgcmVnaXN0cmF0aW9uLiBUaGUgcGF0Y2ggdGhlbiBzaG93cyB0aGF0IGlmIGFueSBvZiB0aGUgYHJlZ2lzdGVyX3RyYWNlXypgIGNhbGxzIGZhaWwgZHVyaW5nIHRoZSByZWdpc3RyYXRpb24sIGl0IGNvcnJlY3RseSB1bndpbmRzIGJ5IHVzaW5nIGB0cmFjZXBvaW50X3N5bmNocm9uaXplX3VucmVnaXN0ZXIoKWAgdG8gY2xlYW4gdXAgYW55IHByZXZpb3VzbHkgcmVnaXN0ZXJlZCB0cmFjZXBvaW50cy4gVGhhdCBpcyBhIGdvb2QsIGltcG9ydGFudCBjaGFuZ2UgZm9yIGF2b2lkaW5nIHJlc291cmNlIGxlYWtzIGFuZCBwb3RlbnRpYWxseSBjb3JydXB0aW5nIHRyYWNlIGRhdGEuCgpUaGUgc3Vic2VxdWVudCBjaGFuZ2VzIGNhc2NhZGUgZnJvbSB0aGlzLiBGdW5jdGlvbnMgbGlrZSBgZ2V0X3Byb2JlX3JlZigpYCBub3cgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBvZiBgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKClgLiBJZiByZWdpc3RyYXRpb24gZmFpbHMsIGBibGtfcHJvYmVzX3JlZmAgaXMgZGVjcmVtZW50ZWQsIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgZXJyb3IgY29kZS4gU2ltaWxhcmx5LCBgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKClgIG5vdyBjYWxscyBgZ2V0X3Byb2JlX3JlZigpYCBiZWZvcmUgc2V0dGluZyB0aGUgUkNVIHBvaW50ZXIsIGFuZCB0aGF0JiMzOTtzIGNyaXRpY2FsIHRvIG1ha2Ugc3VyZSB0aGUgc2V0dXAgaGFwcGVucyBjb3JyZWN0bHkuIFdlIGFyZSBhdm9pZGluZyB0aGUgdXNlIG9mIGFuIHVuaW5pdGlhbGl6ZWQgb3IgYnJva2VuIGBibGtfdHJhY2VgLiBUaGUgY2FsbHMgdG8gYGJsa190cmFjZV9zZXR1cGAsIGBibGtfdHJhY2Vfc2V0dXAyYCwgYGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXBgLCBhbmQgYGJsa190cmFjZV9zZXR1cF9xdWV1ZWAgaGF2ZSBiZWVuIG1vZGlmaWVkIHRvIGhhbmRsZSB0aGUgcG90ZW50aWFsIGVycm9yIHJldHVybiBmcm9tIGBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUoKWAsIGFnYWluIGVuc3VyaW5nIGEgc2FmZSBhbmQgY2xlYW4gaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4KClRvIGNvbmZpcm0gdGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uIGNhbGxzLCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNgIGFuZCBLY29uZmlnIHRvIHNlZSBob3cgYmxrdHJhY2UgaXMgYWN0dWFsbHkgdXNlZCBhbmQgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgaW50byB0aGUgc3lzdGVtLiBMZXQgbWUgcnVuIGBncmVwcGVyYCBvciBjaGVjayB0aGUgS2NvbmZpZyBjb25maWd1cmF0aW9uIHRvIGdldCBhIGJldHRlciBvdmVydmlldyBvZiB3aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgbWVhbnQgdG8gZG8sIGFuZCB3aG8gaXMgY2FsbGluZyB0aGVtLiBUaGlzIHdpbGwgaGVscCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIG5ldyBjb2RlIHBhdGhzIHRoYXQgbWlnaHQgbmVlZCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JMS19ERVZfSU9fVFJBQ0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9NzE3PWNvbmZpZyBCUkFOQ0hfVFJBQ0VSXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctNzMwLVxua2VybmVsL3RyYWNlL0tjb25maWc6NzMxOmNvbmZpZyBCTEtfREVWX0lPX1RSQUNFXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy03MzItXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHRyYWNpbmcgYmxvY2sgSU8gYWN0aW9uc1wmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZT05MT1vYmotJChDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORykgJiM0Mzs9IHRyYWNlX2JyYW5jaC5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6OTI6b2JqLSQoQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UpICYjNDM7PSBibGt0cmFjZS5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtOTMtb2JqLSQoQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUikgJiM0Mzs9IGZncmFwaC5vXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjgtXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoyOTojaWZkZWYgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0Vcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTMwLVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTIxNjI9c3RhdGljIHNzaXplX3Qgc3lzZnNfYmxrX3RyYWNlX2F0dHJfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIyMjctfVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjIyODojZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgKi9cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIyMjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUyNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIFRyYWNlcG9pbnQgRGVwZW5kZW5jaWVzIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHNvbWUgdHJhY2luZyBmdW5jdGlvbmFsaXR5LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBwbGFjZSB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIGFyZSBkZWZpbmVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSA3MzAg4oCTIHRoYXQmIzM5O3Mgb2Z0ZW4gd2hlcmUgcmVsYXRlZCBvcHRpb25zIGFyZSBjbHVzdGVyZWQgdG9nZXRoZXIsIG9yIGF0IGxlYXN0IGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgYmxvY2tzIG9mIGNvZGUuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJlIGFibGUgdG8gdHJhY2UgZG93biB3aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGZ1bmN0aW9uYWxpdHkgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGFuZCB1bmRlcnN0YW5kIGl0cyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uIGludG8gd2hhdCBjb21wb25lbnRzIGFyZSB0aWVkIHRvIHRoaXMgdHJhY2Vwb2ludCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcyNTpcdFx0ICBoaXN0b2dyYW0gb2YgdGhlIGNhbGxlcnMsIGJ1dCBhY3R1YWxseSBwbGFjZXMgdGhlIGNhbGxpbmdcbiA3MjY6XHRcdCAgZXZlbnRzIGludG8gYSBydW5uaW5nIHRyYWNlIGJ1ZmZlciB0byBzZWUgd2hlbiBhbmQgd2hlcmUgdGhlXG4gNzI3Olx0XHQgIGV2ZW50cyBoYXBwZW5lZCwgYXMgd2VsbCBhcyB0aGVpciByZXN1bHRzLlxuIDcyODpcdFxuIDcyOTpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4gNzMwOlx0XG4gNzMxOlx0Y29uZmlnIEJMS19ERVZfSU9fVFJBQ0VcbiA3MzI6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgdHJhY2luZyBibG9jayBJTyBhY3Rpb25zXCYjMzQ7XG4gNzMzOlx0XHRkZXBlbmRzIG9uIFNZU0ZTXG4gNzM0Olx0XHRkZXBlbmRzIG9uIEJMT0NLXG4gNzM1Olx0XHRzZWxlY3QgUkVMQVlcbiA3MzY6XHRcdHNlbGVjdCBERUJVR19GU1xuIDczNzpcdFx0c2VsZWN0IFRSQUNFUE9JTlRTXG4gNzM4Olx0XHRzZWxlY3QgR0VORVJJQ19UUkFDRVJcbiA3Mzk6XHRcdHNlbGVjdCBTVEFDS1RSQUNFXG4gNzQwOlx0XHRoZWxwXG4gNzQxOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byB0cmFjZSB0aGUgYmxvY2sgbGF5ZXIgYWN0aW9uc1xuIDc0MjpcdFx0ICBvbiBhIGdpdmVuIHF1ZXVlLiBUcmFjaW5nIGFsbG93cyB5b3UgdG8gc2VlIGFueSB0cmFmZmljIGhhcHBlbmluZ1xuIDc0MzpcdFx0ICBvbiBhIGJsb2NrIGRldmljZSBxdWV1ZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gKGFuZCB0aGUgdXNlcnNwYWNlXG4gNzQ0Olx0XHQgIHN1cHBvcnQgdG9vbHMgbmVlZGVkKSwgZmV0Y2ggdGhlIGJsa3RyYWNlIHRvb2xzIGZyb206XG4gNzQ1Olx0XG4gNzQ2Olx0XHQgIGdpdDovL2dpdC5rZXJuZWwuZGsvYmxrdHJhY2UuZ2l0XG4gNzQ3Olx0XG4gNzQ4Olx0XHQgIFRyYWNpbmcgYWxzbyBpcyBwb3NzaWJsZSB1c2luZyB0aGUgZnRyYWNlIGludGVyZmFjZSwgZS5nLjpcbiA3NDk6XHRcbiA3NTA6XHRcdCAgICBlY2hvIDEgXHUwMDNlIC9zeXMvYmxvY2svc2RhL3NkYTEvdHJhY2UvZW5hYmxlXG4gNzUxOlx0XHQgICAgZWNobyBibGsgXHUwMDNlIC9zeXMva2VybmVsL3RyYWNpbmcvY3VycmVudF90cmFjZXJcbiA3NTI6XHRcdCAgICBjYXQgL3N5cy9rZXJuZWwvdHJhY2luZy90cmFjZV9waXBlXG4gNzUzOlx0XG4gNzU0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIwMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGV4YW1pbmluZyBga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNgOgoKKipBbmFseXppbmcgYGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jYCoqCgpBbHJpZ2h0LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIG1vZGlmaWNhdGlvbnMgb3IgbmV3IGludGVyZmFjZXMgYWRkZWQgc3BlY2lmaWNhbGx5IHdpdGhpbiBga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlZW4gY2hhbmdlZCByZWxhdGl2ZSB0bywgcGVyaGFwcywgYSBwcmV2aW91cyB2ZXJzaW9uLCBvciB3aGF0JiMzOTtzICpuZXcqIGhlcmUuIFdoYXQgZnVuY3Rpb25hbGl0aWVzIGFyZSBjb3JlIHRvIHRoaXMgZmlsZT8KClRoZW4sIEkmIzM5O2xsIHN0cmF0ZWdpY2FsbHkgbW92ZSBhcm91bmQgdGhvc2Uga2V5IGVudHJ5IHBvaW50cyB3aXRoaW4gdGhlIGNvZGUuIEkmIzM5O2xsIHJlYWQgYXJvdW5kIHRoZSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuIEkgd2FudCB0byBidWlsZCBhIGhpZ2gtbGV2ZWwgdW5kZXJzdGFuZGluZyBvZiB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBjb250cm9sIGZsb3cuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGluZ3MgYXJlIGluaXRpYWxpemVkLCBob3cgZGF0YSBpcyBjYXB0dXJlZCwgd2hlcmUgaXQmIzM5O3Mgc3RvcmVkLCBhbmQgaG93IGV4dGVybmFsIGNvbXBvbmVudHMgaW50ZXJhY3Qgd2l0aCB0aGlzIHRyYWNpbmcgbWVjaGFuaXNtLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhbmQgaG93IGRvIHRoZXkgZnVuY3Rpb24/IEkmIzM5O2xsIHF1aWNrbHkgd2FudCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGdvdGNoYXMgb3IgYXJlYXMgdGhhdCBtaWdodCByZXF1aXJlIGNsb3NlciBhdHRlbnRpb24gZHVyaW5nIGFuYWx5c2lzIG9yIGRldmVsb3BtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa190cmFjZV8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYmxrdHJhY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0yMjc9c3RhdGljIHZvaWQgdHJhY2Vfbm90ZV90aW1lKHN0cnVjdCBibGtfdHJhY2UgKmJ0KVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTI0Mi1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjI0Mzp2b2lkIF9fYmxrX3RyYWNlX25vdGVfbWVzc2FnZShzdHJ1Y3QgYmxrX3RyYWNlICpidCxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTI0NC1cdFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgY29uc3QgY2hhciAqZm10LCAuLi4pXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjc3LX1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjI3ODpFWFBPUlRfU1lNQk9MX0dQTChfX2Jsa190cmFjZV9ub3RlX21lc3NhZ2UpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjc5LVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTMxMD1zdGF0aWMgdm9pZCBfX2Jsa19hZGRfdHJhY2Uoc3RydWN0IGJsa190cmFjZSAqYnQsIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTM5Ny1cdFx0XHQgKiBGb3Igc3lzZnMtZW5hYmxlZCB0cmFjaW5nIHBhdGggKGVuYWJsZWQgdmlhXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzozOTg6XHRcdFx0ICogL3N5cy9ibG9jay9ERVYvdHJhY2UvZW5hYmxlKSwgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKClcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTM5OS1cdFx0XHQgKiBuZXZlciBpbml0aWFsaXplcyBidC1cdTAwM2V2ZXJzaW9uLCBsZWF2aW5nIGl0IDAgZnJvbVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTQ2OC1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjQ2OTpzdGF0aWMgdm9pZCBibGtfdHJhY2VfZnJlZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJsa190cmFjZSAqYnQpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy00NzAte1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTUwMj1zdGF0aWMgdm9pZCBwdXRfcHJvYmVfcmVmKHZvaWQpXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNTA5LVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NTEwOnN0YXRpYyBpbnQgYmxrX3RyYWNlX3N0YXJ0KHN0cnVjdCBibGtfdHJhY2UgKmJ0KVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNTExLXtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01MjYtXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo1Mjc6c3RhdGljIGludCBibGtfdHJhY2Vfc3RvcChzdHJ1Y3QgYmxrX3RyYWNlICpidClcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTUyOC17XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNTQwLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NTQxOnN0YXRpYyB2b2lkIGJsa190cmFjZV9jbGVhbnVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmxrX3RyYWNlICpidClcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTU0Mi17XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo1NDM6XHRibGtfdHJhY2Vfc3RvcChidCk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01NDQtXHRzeW5jaHJvbml6ZV9yY3UoKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjU0NTpcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTU0Ni1cdHB1dF9wcm9iZV9yZWYoKTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01NDgtXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo1NDk6c3RhdGljIGludCBfX2Jsa190cmFjZV9yZW1vdmUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01NTAte1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTU1Ny1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjU1ODpcdGJsa190cmFjZV9jbGVhbnVwKHEsIGJ0KTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTU1OS1cbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01NjItXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo1NjM6aW50IGJsa190cmFjZV9yZW1vdmUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01NjQte1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTU2Ny1cdGJsa19kZWJ1Z2ZzX2xvY2tfbm9tZW1zYXZlKHEpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NTY4Olx0cmV0ID0gX19ibGtfdHJhY2VfcmVtb3ZlKHEpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNTY5LVx0YmxrX2RlYnVnZnNfdW5sb2NrX25vbWVtcmVzdG9yZShxKTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01NzItfVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NTczOkVYUE9SVF9TWU1CT0xfR1BMKGJsa190cmFjZV9yZW1vdmUpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNTc0LVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTU5ND1zdGF0aWMgc3NpemVfdCBibGtfbXNnX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTYwNy1cdGJ0ID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo2MDg6XHRfX2Jsa190cmFjZV9ub3RlX21lc3NhZ2UoYnQsIE5VTEwsIFwmIzM0OyVzXCYjMzQ7LCBtc2cpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNjA5LVx0a2ZyZWUobXNnKTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz02Mzg9c3RhdGljIGNvbnN0IHN0cnVjdCByY2hhbl9jYWxsYmFja3MgYmxrX3JlbGF5X2NhbGxiYWNrcyA9IHtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy02NDItXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo2NDM6c3RhdGljIHZvaWQgYmxrX3RyYWNlX3NldHVwX2xiYShzdHJ1Y3QgYmxrX3RyYWNlICpidCxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTY0NC1cdFx0XHRcdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNjU3LSAqL1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NjU4OnN0YXRpYyBzdHJ1Y3QgYmxrX3RyYWNlICpibGtfdHJhY2Vfc2V0dXBfcHJlcGFyZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTY1OS1cdFx0XHRcdFx0XHQgY2hhciAqbmFtZSwgZGV2X3QgZGV2LFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTcyNS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjcyNjpcdGJsa190cmFjZV9zZXR1cF9sYmEoYnQsIGJkZXYpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNzI3LVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTczMC1lcnI6XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo3MzE6XHRibGtfdHJhY2VfZnJlZShxLCBidCk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy03MzItXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNzM1LVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NzM2OnN0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNzM3LVx0XHRcdFx0ICAgIGNoYXIgKm5hbWUsIGludCB2ZXJzaW9uLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTc3My1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjc3NDppbnQgYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy03NzUtXHRcdCAgICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTgwMC1cdG1lbWZsYWdzID0gYmxrX2RlYnVnZnNfbG9jayhxKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjgwMTpcdGJ0ID0gYmxrX3RyYWNlX3NldHVwX3ByZXBhcmUocSwgbmFtZSwgZGV2LCBidXRzLmJ1Zl9zaXplLCBidXRzLmJ1Zl9ucixcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTgwMi1cdFx0XHRcdCAgICAgYmRldik7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODA2LVx0fVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6ODA3Olx0cmV0ID0gYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDEsIGJ0LCBcdTAwMjZidXRzMik7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04MDgtXHRpZiAocmV0KSB7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo4MDk6XHRcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTgxMC1cdFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04MTYtXHRpZiAoY29weV90b191c2VyKGFyZywgXHUwMDI2YnV0cywgc2l6ZW9mKGJ1dHMpKSkge1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6ODE3Olx0XHRibGtfdHJhY2VfcmVtb3ZlKHEpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODE4LVx0XHRyZXR1cm4gLUVGQVVMVDtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04MjEtfVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6ODIyOkVYUE9SVF9TWU1CT0xfR1BMKGJsa190cmFjZV9zZXR1cCk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04MjMtXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo4MjQ6c3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXAyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04MjUtXHRcdFx0ICAgIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGNoYXIgX191c2VyICphcmcpXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODQxLVx0bWVtZmxhZ3MgPSBibGtfZGVidWdmc19sb2NrKHEpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6ODQyOlx0YnQgPSBibGtfdHJhY2Vfc2V0dXBfcHJlcGFyZShxLCBuYW1lLCBkZXYsIGJ1dHMyLmJ1Zl9zaXplLCBidXRzMi5idWZfbnIsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04NDMtXHRcdFx0XHQgICAgIGJkZXYpO1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTg0Ny1cdH1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjg0ODpcdHJldCA9IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAyLCBidCwgXHUwMDI2YnV0czIpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODQ5LVx0aWYgKHJldCkge1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6ODUwOlx0XHRibGtfdHJhY2VfZnJlZShxLCBidCk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04NTEtXHRcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODU2LVx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFx1MDAyNmJ1dHMyLCBzaXplb2YoYnV0czIpKSkge1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6ODU3Olx0XHRibGtfdHJhY2VfcmVtb3ZlKHEpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODU4LVx0XHRyZXR1cm4gLUVGQVVMVDtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04NjMtI2lmIGRlZmluZWQoQ09ORklHX0NPTVBBVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1g4Nl82NClcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjg2NDpzdGF0aWMgaW50IGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04NjUtXHRcdFx0XHQgIGRldl90IGRldiwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04ODktXHRtZW1mbGFncyA9IGJsa19kZWJ1Z2ZzX2xvY2socSk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo4OTA6XHRidCA9IGJsa190cmFjZV9zZXR1cF9wcmVwYXJlKHEsIG5hbWUsIGRldiwgYnV0czIuYnVmX3NpemUsIGJ1dHMyLmJ1Zl9ucixcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTg5MS1cdFx0XHRcdCAgICAgYmRldik7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODk1LVx0fVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6ODk2Olx0cmV0ID0gYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDEsIGJ0LCBcdTAwMjZidXRzMik7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04OTctXHRpZiAocmV0KSB7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo4OTg6XHRcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTg5OS1cdFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05MDQtXHRpZiAoY29weV90b191c2VyKGFyZywgXHUwMDI2YnV0czIubmFtZSwgQVJSQVlfU0laRShidXRzMi5uYW1lKSkpIHtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjkwNTpcdFx0YmxrX3RyYWNlX3JlbW92ZShxKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTkwNi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTEyLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTEzOnN0YXRpYyBpbnQgX19ibGtfdHJhY2Vfc3RhcnRzdG9wKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgc3RhcnQpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05MTQte1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTkyMi1cdGlmIChzdGFydClcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjkyMzpcdFx0cmV0dXJuIGJsa190cmFjZV9zdGFydChidCk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05MjQtXHRlbHNlXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5MjU6XHRcdHJldHVybiBibGtfdHJhY2Vfc3RvcChidCk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05MjYtfVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTI3LVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTI4OmludCBibGtfdHJhY2Vfc3RhcnRzdG9wKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgc3RhcnQpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05Mjkte1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTkzMi1cdGJsa19kZWJ1Z2ZzX2xvY2tfbm9tZW1zYXZlKHEpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTMzOlx0cmV0ID0gX19ibGtfdHJhY2Vfc3RhcnRzdG9wKHEsIHN0YXJ0KTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTkzNC1cdGJsa19kZWJ1Z2ZzX3VubG9ja19ub21lbXJlc3RvcmUocSk7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTM3LX1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjkzODpFWFBPUlRfU1lNQk9MX0dQTChibGtfdHJhY2Vfc3RhcnRzdG9wKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTkzOS1cbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NDYtLyoqXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5NDc6ICogYmxrX3RyYWNlX2lvY3RsIC0gaGFuZGxlIHRoZSBpb2N0bHMgYXNzb2NpYXRlZCB3aXRoIHRyYWNpbmdcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk0OC0gKiBAYmRldjpcdHRoZSBibG9jayBkZXZpY2Vcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NTItICoqL1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTUzOmludCBibGtfdHJhY2VfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgY21kLCBjaGFyIF9fdXNlciAqYXJnKVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTU0LXtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NjEtXHRcdHNucHJpbnRmKGIsIHNpemVvZihiKSwgXCYjMzQ7JXBnXCYjMzQ7LCBiZGV2KTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjk2MjpcdFx0cmV0ID0gYmxrX3RyYWNlX3NldHVwMihxLCBiLCBiZGV2LVx1MDAzZWJkX2RldiwgYmRldiwgYXJnKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk2My1cdFx0YnJlYWs7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTY1LVx0XHRzbnByaW50ZihiLCBzaXplb2YoYiksIFwmIzM0OyVwZ1wmIzM0OywgYmRldik7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5NjY6XHRcdHJldCA9IGJsa190cmFjZV9zZXR1cChxLCBiLCBiZGV2LVx1MDAzZWJkX2RldiwgYmRldiwgYXJnKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk2Ny1cdFx0YnJlYWs7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTcwLVx0XHRzbnByaW50ZihiLCBzaXplb2YoYiksIFwmIzM0OyVwZ1wmIzM0OywgYmRldik7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5NzE6XHRcdHJldCA9IGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAocSwgYiwgYmRldi1cdTAwM2ViZF9kZXYsIGJkZXYsIGFyZyk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NzItXHRcdGJyZWFrO1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk3Ny1cdGNhc2UgQkxLVFJBQ0VTVE9QOlxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTc4Olx0XHRyZXQgPSBibGtfdHJhY2Vfc3RhcnRzdG9wKHEsIHN0YXJ0KTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk3OS1cdFx0YnJlYWs7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05ODAtXHRjYXNlIEJMS1RSQUNFVEVBUkRPV046XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5ODE6XHRcdHJldCA9IGJsa190cmFjZV9yZW1vdmUocSk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05ODItXHRcdGJyZWFrO1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk5MC0vKipcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjk5MTogKiBibGtfdHJhY2Vfc2h1dGRvd24gLSBzdG9wIGFuZCBjbGVhbnVwIHRyYWNlIHN0cnVjdHVyZXNcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk5Mi0gKiBAcTogICAgdGhlIHJlcXVlc3QgcXVldWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2Vcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05OTQtICoqL1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTk1OnZvaWQgYmxrX3RyYWNlX3NodXRkb3duKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTk2LXtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05OTgtXHRcdFx0XHQgICAgICBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2cS1cdTAwM2VkZWJ1Z2ZzX211dGV4KSkpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5OTk6XHRcdF9fYmxrX3RyYWNlX3JlbW92ZShxKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwMDAtfVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwMDItI2lmZGVmIENPTkZJR19CTEtfQ0dST1VQXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMDAzOnN0YXRpYyB1NjQgYmxrX3RyYWNlX2Jpb19nZXRfY2dpZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTAwNC17XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTAxOC0jZWxzZVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTAxOTpzdGF0aWMgdTY0IGJsa190cmFjZV9iaW9fZ2V0X2NnaWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbylcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwMjAte1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTEwMjU9c3RhdGljIHU2NFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTAyNjpibGtfdHJhY2VfcmVxdWVzdF9nZXRfY2dpZChzdHJ1Y3QgcmVxdWVzdCAqcnEpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDI3LXtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDMwLVx0LyogVXNlIHRoZSBmaXJzdCBiaW8gKi9cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEwMzE6XHRyZXR1cm4gYmxrX3RyYWNlX2Jpb19nZXRfY2dpZChycS1cdTAwM2VxLCBycS1cdTAwM2ViaW8pO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTAzMi19XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTA3Mj1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JxX2luc2VydCh2b2lkICppZ25vcmUsIHN0cnVjdCByZXF1ZXN0ICpycSlcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDc0LVx0YmxrX2FkZF90cmFjZV9ycShycSwgMCwgYmxrX3JxX2J5dGVzKHJxKSwgQkxLX1RBX0lOU0VSVCxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEwNzU6XHRcdFx0IGJsa190cmFjZV9yZXF1ZXN0X2dldF9jZ2lkKHJxKSk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDc2LX1cbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMDc4PXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnFfaXNzdWUodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTA4MC1cdGJsa19hZGRfdHJhY2VfcnEocnEsIDAsIGJsa19ycV9ieXRlcyhycSksIEJMS19UQV9JU1NVRSxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEwODE6XHRcdFx0IGJsa190cmFjZV9yZXF1ZXN0X2dldF9jZ2lkKHJxKSk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDgyLX1cbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMDg0PXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnFfbWVyZ2Uodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTA4Ni1cdGJsa19hZGRfdHJhY2VfcnEocnEsIDAsIGJsa19ycV9ieXRlcyhycSksIEJMS19UQV9CQUNLTUVSR0UsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMDg3Olx0XHRcdCBibGtfdHJhY2VfcmVxdWVzdF9nZXRfY2dpZChycSkpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTA4OC19XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTA5MD1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JxX3JlcXVldWUodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTA5Mi1cdGJsa19hZGRfdHJhY2VfcnEocnEsIDAsIGJsa19ycV9ieXRlcyhycSksIEJMS19UQV9SRVFVRVVFLFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTA5MzpcdFx0XHQgYmxrX3RyYWNlX3JlcXVlc3RfZ2V0X2NnaWQocnEpKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwOTQtfVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTEwOTY9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9ycV9jb21wbGV0ZSh2b2lkICppZ25vcmUsIHN0cnVjdCByZXF1ZXN0ICpycSxcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDk5LVx0YmxrX2FkZF90cmFjZV9ycShycSwgZXJyb3IsIG5yX2J5dGVzLCBCTEtfVEFfQ09NUExFVEUsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMTAwOlx0XHRcdCBibGtfdHJhY2VfcmVxdWVzdF9nZXRfY2dpZChycSkpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTEwMS19XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTEwMz1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3pvbmVfdXBkYXRlX3JlcXVlc3Qodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTExNS1cdGJsa19hZGRfdHJhY2VfcnEocnEsIDAsIGJsa19ycV9ieXRlcyhycSksIEJMS19UQV9aT05FX0FQUEVORCxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjExMTY6XHRcdFx0IGJsa190cmFjZV9yZXF1ZXN0X2dldF9jZ2lkKHJxKSk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMTE3LX1cbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMTMwPXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfYmlvKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8sXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTE0My1cdFx0XHRiaW8tXHUwMDNlYmlfb3BmLCB3aGF0LCBlcnJvciwgMCwgTlVMTCxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjExNDQ6XHRcdFx0YmxrX3RyYWNlX2Jpb19nZXRfY2dpZChxLCBiaW8pKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTExNDUtXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMjQwPXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2Vfc3BsaXQodm9pZCAqaWdub3JlLCBzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGludCBwZHUpXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTI1My1cdFx0XHRcdHNpemVvZihycGR1KSwgXHUwMDI2cnBkdSxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEyNTQ6XHRcdFx0XHRibGtfdHJhY2VfYmlvX2dldF9jZ2lkKHEsIGJpbykpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTI1NS1cdH1cbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMjY4PXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfYmlvX3JlbWFwKHZvaWQgKmlnbm9yZSwgc3RydWN0IGJpbyAqYmlvLCBkZXZfdCBkZXYsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTI4OC1cdFx0XHRibGtfc3RhdHVzX3RvX2Vycm5vKGJpby1cdTAwM2ViaV9zdGF0dXMpLFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTI4OTpcdFx0XHRzaXplb2YociksIFx1MDAyNnIsIGJsa190cmFjZV9iaW9fZ2V0X2NnaWQocSwgYmlvKSk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjkwLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTMwNT1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JxX3JlbWFwKHZvaWQgKmlnbm9yZSwgc3RydWN0IHJlcXVlc3QgKnJxLCBkZXZfdCBkZXYsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTMyMy1cdFx0XHRycS1cdTAwM2VjbWRfZmxhZ3MsIEJMS19UQV9SRU1BUCwgMCxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEzMjQ6XHRcdFx0c2l6ZW9mKHIpLCBcdTAwMjZyLCBibGtfdHJhY2VfcmVxdWVzdF9nZXRfY2dpZChycSkpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTMyNS1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTEzMzg9dm9pZCBibGtfYWRkX2RyaXZlcl9kYXRhKHN0cnVjdCByZXF1ZXN0ICpycSwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbilcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMzUwLVx0XHRcdFx0QkxLX1RBX0RSVl9EQVRBLCAwLCBsZW4sIGRhdGEsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMzUxOlx0XHRcdFx0YmxrX3RyYWNlX3JlcXVlc3RfZ2V0X2NnaWQocnEpKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEzNTItXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xODE4PXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBwcmludF9vbmVfbGluZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTg1MC1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE4NTE6c3RhdGljIGVudW0gcHJpbnRfbGluZV90IGJsa190cmFjZV9ldmVudF9wcmludChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODUyLVx0XHRcdFx0XHQgICAgICAgaW50IGZsYWdzLCBzdHJ1Y3QgdHJhY2VfZXZlbnQgKmV2ZW50KVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE4NTYtXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxODU3OnN0YXRpYyB2b2lkIGJsa190cmFjZV9zeW50aGVzaXplX29sZF90cmFjZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODU4LXtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xODcyPXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTg3MzpibGtfdHJhY2VfZXZlbnRfcHJpbnRfYmluYXJ5KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzLFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTg3NC1cdFx0XHQgICAgIHN0cnVjdCB0cmFjZV9ldmVudCAqZXZlbnQpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODc1LXtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE4NzY6XHRibGtfdHJhY2Vfc3ludGhlc2l6ZV9vbGRfdHJhY2UoaXRlcik7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODc3LVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTE5MTU9c3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudF9mdW5jdGlvbnMgdHJhY2VfYmxrX2V2ZW50X2Z1bmNzID0ge1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTkxNjpcdC50cmFjZVx0XHQ9IGJsa190cmFjZV9ldmVudF9wcmludCxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE5MTc6XHQuYmluYXJ5XHRcdD0gYmxrX3RyYWNlX2V2ZW50X3ByaW50X2JpbmFyeSxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE5MTgtfTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xOTY2PWRldmljZV9pbml0Y2FsbChpbml0X2Jsa190cmFjZXIpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTk2Ny1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE5Njg6c3RhdGljIGludCBibGtfdHJhY2VfcmVtb3ZlX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTk2OS17XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTk3Ni1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE5Nzc6XHRibGtfdHJhY2Vfc3RvcChidCk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xOTc4LVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE5ODAtXHRzeW5jaHJvbml6ZV9yY3UoKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE5ODE6XHRibGtfdHJhY2VfZnJlZShxLCBidCk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xOTgyLVx0cmV0dXJuIDA7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTk4Ny0gKi9cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE5ODg6c3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXBfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xOTg5LVx0XHRcdFx0IHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjAwNC1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIwMDU6XHRibGtfdHJhY2Vfc2V0dXBfbGJhKGJ0LCBiZGV2KTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIwMDYtXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjAxNC1mcmVlX2J0Olxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjAxNTpcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIwMTYtXHRyZXR1cm4gcmV0O1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIwMjItXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoyMDIzOnN0YXRpYyBzc2l6ZV90IHN5c2ZzX2Jsa190cmFjZV9hdHRyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjAyNC1cdFx0XHRcdFx0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjAyNS1cdFx0XHRcdFx0IGNoYXIgKmJ1Zik7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoyMDI2OnN0YXRpYyBzc2l6ZV90IHN5c2ZzX2Jsa190cmFjZV9hdHRyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIwMjctXHRcdFx0XHRcdCAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjAzMC1cdERFVklDRV9BVFRSKF9uYW1lLCBTX0lSVUdPIHwgU19JV1VTUiwgXFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIwMzE6XHRcdCAgICBzeXNmc19ibGtfdHJhY2VfYXR0cl9zaG93LCBcXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjAzMjpcdFx0ICAgIHN5c2ZzX2Jsa190cmFjZV9hdHRyX3N0b3JlKVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjAzMy1cbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0yMDM4PXN0YXRpYyBCTEtfVFJBQ0VfREVWSUNFX0FUVFIoZW5kX2xiYSk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDM5LVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjA0MDpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYmxrX3RyYWNlX2F0dHJzW10gPSB7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDQxLVx0XHUwMDI2ZGV2X2F0dHJfZW5hYmxlLmF0dHIsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjA0OC1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIwNDk6c3RydWN0IGF0dHJpYnV0ZV9ncm91cCBibGtfdHJhY2VfYXR0cl9ncm91cCA9IHtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIwNTAtXHQubmFtZSAgPSBcJiMzNDt0cmFjZVwmIzM0Oyxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIwNTE6XHQuYXR0cnMgPSBibGtfdHJhY2VfYXR0cnMsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDUyLX07XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MjA1ND1zdGF0aWMgY29uc3Qgc3RydWN0IHtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDc2LVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjA3NzpzdGF0aWMgaW50IGJsa190cmFjZV9zdHIybWFzayhjb25zdCBjaGFyICpzdHIpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDc4LXtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMTExLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjExMjpzdGF0aWMgc3NpemVfdCBibGtfdHJhY2VfbWFzazJzdHIoY2hhciAqYnVmLCBpbnQgbWFzaylcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIxMTMte1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIxMjctXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoyMTI4OnN0YXRpYyBzc2l6ZV90IHN5c2ZzX2Jsa190cmFjZV9hdHRyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjEyOS1cdFx0XHRcdFx0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIxNDgtXHRlbHNlIGlmIChhdHRyID09IFx1MDAyNmRldl9hdHRyX2FjdF9tYXNrKVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjE0OTpcdFx0cmV0ID0gYmxrX3RyYWNlX21hc2syc3RyKGJ1ZiwgYnQtXHUwMDNlYWN0X21hc2spO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjE1MC1cdGVsc2UgaWYgKGF0dHIgPT0gXHUwMDI2ZGV2X2F0dHJfcGlkKVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIxNjEtXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoyMTYyOnN0YXRpYyBzc2l6ZV90IHN5c2ZzX2Jsa190cmFjZV9hdHRyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIxNjMtXHRcdFx0XHRcdCAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjE3OC1cdFx0XHQvKiBBc3N1bWUgaXQgaXMgYSBsaXN0IG9mIHRyYWNlIGNhdGVnb3J5IG5hbWVzICovXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoyMTc5Olx0XHRcdHJldCA9IGJsa190cmFjZV9zdHIybWFzayhidWYpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjE4MC1cdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIxOTgtXHRcdGlmICh2YWx1ZSlcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIxOTk6XHRcdFx0cmV0ID0gYmxrX3RyYWNlX3NldHVwX3F1ZXVlKHEsIGJkZXYpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjIwMC1cdFx0ZWxzZVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjIwMTpcdFx0XHRyZXQgPSBibGtfdHJhY2VfcmVtb3ZlX3F1ZXVlKHEpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjIwMi1cdFx0Z290byBvdXRfdW5sb2NrX2JkZXY7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjIwNi1cdGlmIChidCA9PSBOVUxMKSB7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoyMjA3Olx0XHRyZXQgPSBibGtfdHJhY2Vfc2V0dXBfcXVldWUocSwgYmRldik7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMjA4LVx0XHRidCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocS1cdTAwM2VibGtfdHJhY2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzOTEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGJsa3RyYWNlIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXRoZXIgYGJsa3RyYWNlYCBpcyBhIHZpYWJsZSB0YXJnZXQgZm9yIGZ1enppbmcuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdCYjMzk7cyBldmVuICpyZWFjaGFibGUqIGZyb20gdXNlcnNwYWNlLiBBbmQgdGhlIGFuc3dlciwgdGhhbmtmdWxseSwgaXMgYSByZXNvdW5kaW5nIHllcyEgSSBzZWUgdGhyZWUgZGlzdGluY3QgYWNjZXNzIHBvaW50czogdGhlIGBibGtfdHJhY2VfaW9jdGxgIGZ1bmN0aW9uLCBoYW5kbGluZyBhIHdob2xlIHN1aXRlIG9mIGBCTEtUUkFDRWAgaW9jdGxzIGxpa2UgYFNFVFVgLCBgU1RBUlRgLCBgU1RPUGAsIGFuZCBgVEVBUkRPV05gIG9uIHRoZSBzdGFuZGFyZCBibG9jayBkZXZpY2VzLiBUaGVuIHRoZXJlJiMzOTtzIHN5c2ZzLCBzcGVjaWZpY2FsbHkgdGhlIGAvc3lzL2Jsb2NrLyZsdDtkZXYmZ3Q7L3RyYWNlLy4uLmAgZW50cmllcyBmb3IgZW5hYmxpbmcsIG1hbmFnaW5nIHRoZSBgYWN0X21hc2tgLCB0aGUgYHBpZGAsIGFuZCBvdGhlciBwcm9wZXJ0aWVzLiBGaW5hbGx5LCB3ZSBoYXZlIGRlYnVnZnMvdHJhY2VmcyB3aXRoIHRoZSBgL3N5cy9rZXJuZWwvdHJhY2luZy9jdXJyZW50X3RyYWNlcmAgcGF0aCBhbGxvd2luZyBmb3IgdGhlIGJsb2NrIHRyYWNlIHRyYWNlci4KCk5leHQsIGl0JiMzOTtzIHBydWRlbnQgdG8gZXhhbWluZSB0aGUgY2FsbGVycyBvZiBgYmxrX3RyYWNlX2lvY3RsYCB0byBnYWluIGFuIHVuZGVyc3RhbmRpbmcgb2YgaG93IGV4YWN0bHkgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrX3RyYWNlX2lvY3RsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2lvY3RsLmM9NjUxPXN0YXRpYyBpbnQgYmxrZGV2X2NvbW1vbl9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG4tLVxuYmxvY2svaW9jdGwuYy03MTctXHRjYXNlIEJMS1RSQUNFVEVBUkRPV046XG5ibG9jay9pb2N0bC5jOjcxODpcdFx0cmV0dXJuIGJsa190cmFjZV9pb2N0bChiZGV2LCBjbWQsIGFyZ3ApO1xuYmxvY2svaW9jdGwuYy03MTktXHRjYXNlIEJMS0NSWVBUT0lNUE9SVEtFWTpcbi0tXG5ibG9jay9pb2N0bC5jPTc1MD1sb25nIGJsa2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5ibG9jay9pb2N0bC5jLTc4Ni1cdGNhc2UgQkxLVFJBQ0VTRVRVUDI6XG5ibG9jay9pb2N0bC5jOjc4NzpcdFx0cmV0dXJuIGJsa190cmFjZV9pb2N0bChiZGV2LCBjbWQsIGFyZ3ApO1xuYmxvY2svaW9jdGwuYy03ODgtXHRkZWZhdWx0OlxuLS1cbmJsb2NrL2lvY3RsLmM9ODEwPWxvbmcgY29tcGF0X2Jsa2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5ibG9jay9pb2N0bC5jLTg0Ni1cdGNhc2UgQkxLVFJBQ0VTRVRVUDMyOlxuYmxvY2svaW9jdGwuYzo4NDc6XHRcdHJldHVybiBibGtfdHJhY2VfaW9jdGwoYmRldiwgY21kLCBhcmdwKTtcbmJsb2NrL2lvY3RsLmMtODQ4LVx0ZGVmYXVsdDpcbi0tXG5pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oPTE2PXN0cnVjdCBibGtfdHJhY2Uge1xuLS1cbmluY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgtMzEtXG5pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oOjMyOmV4dGVybiBpbnQgYmxrX3RyYWNlX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgdW5zaWduZWQsIGNoYXIgX191c2VyICopO1xuaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaC0zMy1leHRlcm4gdm9pZCBibGtfdHJhY2Vfc2h1dGRvd24oc3RydWN0IHJlcXVlc3RfcXVldWUgKik7XG4tLVxuaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaD04MT1leHRlcm4gaW50IGJsa190cmFjZV9yZW1vdmUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpO1xuLS1cbmluY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgtODMtI2Vsc2UgLyogIUNPTkZJR19CTEtfREVWX0lPX1RSQUNFICovXG5pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oOjg0OiMgZGVmaW5lIGJsa190cmFjZV9pb2N0bChiZGV2LCBjbWQsIGFyZylcdFx0KC1FTk9UVFkpXG5pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oLTg1LSMgZGVmaW5lIGJsa190cmFjZV9zaHV0ZG93bihxKVx0XHRcdFx0ZG8geyB9IHdoaWxlICgwKVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTkzOD1FWFBPUlRfU1lNQk9MX0dQTChibGtfdHJhY2Vfc3RhcnRzdG9wKTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NDYtLyoqXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5NDc6ICogYmxrX3RyYWNlX2lvY3RsIC0gaGFuZGxlIHRoZSBpb2N0bHMgYXNzb2NpYXRlZCB3aXRoIHRyYWNpbmdcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk0OC0gKiBAYmRldjpcdHRoZSBibG9jayBkZXZpY2Vcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NTItICoqL1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTUzOmludCBibGtfdHJhY2VfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgY21kLCBjaGFyIF9fdXNlciAqYXJnKVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTU0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1NDAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA5OTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCbGt0cmFjZSBFcnJvciBIYW5kbGluZyBGaXggZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgYmxrdHJhY2UgY29yZSBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgaW4gZXJyb3IgaGFuZGxpbmcgYW5kIHRyYWNlcG9pbnQgcmVnaXN0cmF0aW9uIGR1cmluZyBzZXR1cCBhbmQgdGVhcmRvd24uIEl0IGFwcGVhcnMgdGhhdCB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gaGFkIHNvbWUgaXNzdWVzIHdpdGggaWdub3JpbmcgcmV0dXJuIHZhbHVlcyBmcm9tIGNyaXRpY2FsIGZ1bmN0aW9ucyBsaWtlIGBibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHMoKWAgYW5kIGBnZXRfcHJvYmVfcmVmKClgLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHN1YnRsZSBlcnJvcnMuCgpUaGUgZml4IGFkZHJlc3NlcyB0aGlzIGJ5OgoKMS4gIEVuc3VyaW5nIHRoYXQgYGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cygpYCBub3cgY29ycmVjdGx5IHJldHVybnMgYW4gZXJyb3IgYW5kIHVud2luZHMgaWYgdGhlcmUmIzM5O3MgYSBwcm9ibGVtIHJlZ2lzdGVyaW5nIHRyYWNlcG9pbnRzLgoyLiAgYGdldF9wcm9iZV9yZWYoKWAgYWxzbyByZXR1cm5zIGl0cyBlcnJvciBzdGF0dXMuCjMuICBDcml0aWNhbGx5LCBgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKClgIGNhbGxzIGBnZXRfcHJvYmVfcmVmKClgICpiZWZvcmUqIGFzc2lnbmluZyB0aGUgdHJhY2Ugc3RydWN0dXJlIGFuZCByZXR1cm5zIGFuIGVycm9yIGlmIGBnZXRfcHJvYmVfcmVmKClgIGZhaWxzLgo0LiAgVGhlIGNhbGxlcnMgbm93IGhhbmRsZSBmYWlsdXJlcyBmcm9tIGBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUoKWAgYnkgY2xlYW5pbmcgdXAgdGhlIHRyYWNlIHN0cnVjdHVyZSBhbmQgcmV0dXJuaW5nIGFuIGVycm9yLgo1LiAgSW4gYGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpYCwgYGdldF9wcm9iZV9yZWYoKWAgaXMgY2FsbGVkIGJlZm9yZSBhc3NpZ25tZW50IHRvby4KClRoaXMgaXMgYSBjbGVhciBpbXByb3ZlbWVudCBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgZm9yIHRoaXMgY3JpdGljYWwgdHJhY2luZyBpbmZyYXN0cnVjdHVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHNob3VsZCB3ZSBmdXp6IHRoaXM/IExldCYjMzk7cyBjaGVjayB0aGUgZ3VpZGVsaW5lcyB0byBiZSBjZXJ0YWluLgoKQWNjb3JkaW5nIHRvIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMsIHRoZSBjaGFuZ2VzIGRlZmluaXRlbHkgaW52b2x2ZSBjb3JlIGtlcm5lbCBsb2dpYyB3aXRoaW4gdGhlIGJsb2NrIGxheWVyLiBJdCYjMzk7cyBub3QganVzdCBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgb3IgZGVjb3JhdGl2ZSBsb2dnaW5nLiBUaGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQgaW4gdGhlIGJsa3RyYWNlIHNldHVwIGFuZCB0ZWFyZG93biBwcm9jZXNzLiBUaGUgY29kZSYjMzk7cyBjbGVhcmx5IHJlYWNoYWJsZSwgc28gdGhhdCBtYWtlcyB0aGlzIGEgc29saWQgJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZSYjMzQ7IHNpdHVhdGlvbi4KCk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBhcHByb3ByaWF0ZSBmdXp6aW5nIHRhcmdldHMuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgZnV6emluZy4gSSB3aWxsIGxvb2sgYXQgdGhlIGludm9sdmVkIGZ1bmN0aW9ucyB0byBzZWxlY3QgZ29vZCBmdXp6aW5nIGVudHJ5cG9pbnRzIGFuZCB2ZXJpZnkgRm9jdXNTeW1ib2xzIGFuZCBFbmFibGVDb25maWdzLgoKRmlyc3QsIEkmIzM5O2xsIGdvIHRocm91Z2ggYGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jYCB0byBpZGVudGlmeSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHdoaWNoIGFyZSBlYXNpZXIgdG8gdGFyZ2V0LiBMb29raW5nIGF0IHRoZSBjb2RlLCBJIHNlZToKCiogICBgYmxrX3RyYWNlX3NldHVwYCAoYSBub24tc3RhdGljIEdQTC1leHBvcnRlZCBmdW5jdGlvbikKKiAgIGBibGtfdHJhY2VfaW9jdGxgIChjYWxsZWQgYnkgYGJsa2Rldl9pb2N0bGApCiogICBgYmxrX3RyYWNlX3JlbW92ZWAgKGFub3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbikKKiAgIGBibGtfdHJhY2Vfc3RhcnRzdG9wYCAobm9uLXN0YXRpYykKCkkgbmVlZCB0byBkZWNpZGUgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMuIFN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIGFyZW4mIzM5O3QgYXMgZ29vZCBhIHRhcmdldCBhcyBub24tc3RhdGljIGVudHJ5cG9pbnRzLCBzbyBgYmxrX3RyYWNlX2lvY3RsYCBhbmQgYGJsa190cmFjZV9zZXR1cGAgc3RhbmQgb3V0IGFzIHRoZSBwcmltYXJ5IGNhbmRpZGF0ZXMuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AgZmlsZSBpbmRpY2F0ZXMgdGhhdCBgQkxLX0RFVl9JT19UUkFDRWAgaXMgdGhlIGNyaXRpY2FsIGNvbmZpZyBvcHRpb24uIExvb2tpbmcgYXQgaXRzIGRlcGVuZGVuY2llcywgSSBzZWUgaXQgZGVwZW5kcyBvbiBgU1lTRlNgLCBgQkxPQ0tgLCBhbmQgc2VsZWN0cyBgUkVMQVlgLCBgREVCVUdfRlNgLCBgVFJBQ0VQT0lOVFNgLCBgR0VORVJJQ19UUkFDRVJgLCBhbmQgYFNUQUNLVFJBQ0VgLiBJJiMzOTtsbCBhbHNvIGRvIGEgcXVpY2sgYGdyZXBgIGZvciBvdGhlciBjb25maWcgb3B0aW9ucyBpbiBgYmxrdHJhY2UuY2AsIGp1c3QgdG8gYmUgc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSYjMzk7bSBhbGwgc2V0IHdpdGggdGhlIEZvY3VzU3ltYm9scyBhbmQgRW5hYmxlQ29uZmlncyBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTI4LVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6Mjk6I2lmZGVmIENPTkZJR19CTEtfREVWX0lPX1RSQUNFXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0zMC1cbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz00ND1zdGF0aWMgc3RydWN0IHRyYWNlcl9vcHQgYmxrX3RyYWNlcl9vcHRzW10gPSB7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNDYtXHR7IFRSQUNFUl9PUFQoYmxrX2NsYXNzaWMsIFRSQUNFX0JMS19PUFRfQ0xBU1NJQykgfSxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjQ3OiNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNDgtXHR7IFRSQUNFUl9PUFQoYmxrX2Nncm91cCwgVFJBQ0VfQkxLX09QVF9DR1JPVVApIH0sXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MjQzPXZvaWQgX19ibGtfdHJhY2Vfbm90ZV9tZXNzYWdlKHN0cnVjdCBibGtfdHJhY2UgKmJ0LFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTI2OC1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjI2OTojaWZkZWYgQ09ORklHX0JMS19DR1JPVVBcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTI3MC1cdGlmIChjc3MgXHUwMDI2XHUwMDI2IChibGtfdHJhY2VyX2ZsYWdzLnZhbCBcdTAwMjYgVFJBQ0VfQkxLX09QVF9DR1JPVVApKVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTgyND1zdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cDIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldixcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04NjItXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo4NjM6I2lmIGRlZmluZWQoQ09ORklHX0NPTVBBVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1g4Nl82NClcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTg2NC1zdGF0aWMgaW50IGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9OTUzPWludCBibGtfdHJhY2VfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgY21kLCBjaGFyIF9fdXNlciAqYXJnKVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk2Ny1cdFx0YnJlYWs7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5Njg6I2lmIGRlZmluZWQoQ09ORklHX0NPTVBBVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1g4Nl82NClcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk2OS1cdGNhc2UgQkxLVFJBQ0VTRVRVUDMyOlxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTk5NT12b2lkIGJsa190cmFjZV9zaHV0ZG93bihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDAxLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTAwMjojaWZkZWYgQ09ORklHX0JMS19DR1JPVVBcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwMDMtc3RhdGljIHU2NCBibGtfdHJhY2VfYmlvX2dldF9jZ2lkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MjE2Mj1zdGF0aWMgc3NpemVfdCBzeXNmc19ibGtfdHJhY2VfYXR0cl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjIyNy19XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoyMjI4OiNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSAqL1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjIyOS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIyMzA6I2lmZGVmIENPTkZJR19FVkVOVF9UUkFDSU5HXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMjMxLVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTIzMTI9RVhQT1JUX1NZTUJPTF9HUEwoYmxrX2ZpbGxfcndicyk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMzEzLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjMxNDojZW5kaWYgLyogQ09ORklHX0VWRU5UX1RSQUNJTkcgKi9cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIzMTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTgzCgkJCQkJCQlvdXRwdXQ6IDE2NwoJCQkJCQkJdGhvdWdodHM6IDMwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCbG9jayBUcmFjaW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmlnaHQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBzZXQgZm9yIGJsb2NrIEkvTyB0cmFjaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgQkxLX0RFVl9JT19UUkFDRWAgaXMgdGhlIGtleSwgYnV0IGl0IHJlbGllcyBvbiBgU1lTRlNgIGFuZCBgQkxPQ0tgLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgb3RoZXIgaW1wbGljaXQgZGVwZW5kZW5jaWVzLiBZZXMsIGxpc3RpbmcgYEJMS19ERVZfSU9fVFJBQ0VgLCBgQkxPQ0tgLCBhbmQgYFNZU0ZTYCBleHBsaWNpdGx5IGNvdmVycyBldmVyeXRoaW5nLCBzdGFuZGFyZCBhbmQgYWNjdXJhdGUuCgpOZXh0LCBJIHNob3VsZCBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBzeW1ib2xzLiBMb29raW5nIGF0IGBGb2N1c1N5bWJvbHNgLCBJIHNlZSBgYmxrX3RyYWNlX2lvY3RsYCBhbmQgYGJsa190cmFjZV9zZXR1cGAgYXJlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgaGVyZS4gR29vZC4KCk5vdywgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgcmV2aWV3IHRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpdHNlbGYuIEl0JiMzOTtzIGZvY3VzZWQgb24gaW1wcm92aW5nIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKClgIHdpdGhpbiBga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNgLiBTcGVjaWZpY2FsbHksIGl0IGFkZHJlc3NlcyB0aGUgY2xlYW51cCBvZiB0cmFjZXBvaW50cyBvbiBmYWlsdXJlIGR1cmluZyByZWdpc3RyYXRpb24uIFRoZSBwYXRjaCBhbHNvIHByb3BhZ2F0ZXMgdGhlIGVycm9yIGhhbmRsaW5nIHRvIGZ1bmN0aW9ucyBsaWtlIGBnZXRfcHJvYmVfcmVmKClgLCBgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKClgLCBgYmxrX3RyYWNlX3NldHVwKClgLCBgYmxrX3RyYWNlX3NldHVwMigpYCwgYGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAoKWAsIGFuZCBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKClgLiBBbGwgb2YgdGhlc2UgYXJlIHJlYWNoZWQgdGhyb3VnaCBibG9jayBkZXZpY2UgaW9jdGxzIChgQkxLVFJBQ0VTRVRVUGAsIGBCTEtUUkFDRVNFVFVQMmAsIGBCTEtUUkFDRVNFVFVQMzJgKSBhbmQgc3lzZnMgaW50ZXJmYWNlcy4KCkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBhdGNoLCBJIGFtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfSU9fVFJBQ0UmIzM0OywKICAgICYjMzQ7QkxPQ0smIzM0OywKICAgICYjMzQ7U1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtfdHJhY2VfaW9jdGwmIzM0OywKICAgICYjMzQ7YmxrX3RyYWNlX3NldHVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJsa3RyYWNlIHRyYWNlcG9pbnQgcmVnaXN0cmF0aW9uIGFuZCBzZXR1cCBlcnJvciB1bndpbmRpbmcgcGF0aHMgaW4ga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMuIEl0IG1ha2VzIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyByZXR1cm4gZXJyb3IgY29kZXMgYW5kIHJvbGxiYWNrIHJlZ2lzdGVyZWQgdHJhY2Vwb2ludHMgdXBvbiBmYWlsdXJlLCBhbmQgcHJvcGVybHkgaGFuZGxlcyB0cmFjZXBvaW50IHNldHVwIGVycm9ycyBhY3Jvc3MgYmxrX3RyYWNlX3NldHVwKCksIGJsa190cmFjZV9zZXR1cDIoKSwgY29tcGF0X2Jsa190cmFjZV9zZXR1cCgpLCBhbmQgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKCksIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGJsb2NrIGRldmljZSBpb2N0bHMgYW5kIHN5c2ZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0lPX1RSQUNFJiMzNDssCiAgICAmIzM0O0JMT0NLJiMzNDssCiAgICAmIzM0O1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrX3RyYWNlX2lvY3RsJiMzNDssCiAgICAmIzM0O2Jsa190cmFjZV9zZXR1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBibGt0cmFjZSB0cmFjZXBvaW50IHJlZ2lzdHJhdGlvbiBhbmQgc2V0dXAgZXJyb3IgdW53aW5kaW5nIHBhdGhzIGluIGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLiBJdCBtYWtlcyBibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHMgcmV0dXJuIGVycm9yIGNvZGVzIGFuZCByb2xsYmFjayByZWdpc3RlcmVkIHRyYWNlcG9pbnRzIHVwb24gZmFpbHVyZSwgYW5kIHByb3Blcmx5IGhhbmRsZXMgdHJhY2Vwb2ludCBzZXR1cCBlcnJvcnMgYWNyb3NzIGJsa190cmFjZV9zZXR1cCgpLCBibGtfdHJhY2Vfc2V0dXAyKCksIGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAoKSwgYW5kIGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBibG9jayBkZXZpY2UgaW9jdGxzIGFuZCBzeXNmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjoyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tpbmcgYW5kIHVud2luZGluZyB0byBibGt0cmFjZSB0cmFjZXBvaW50IHJlZ2lzdHJhdGlvbiAoYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzLCBnZXRfcHJvYmVfcmVmLCBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUsIGJsa190cmFjZV9zZXR1cF9xdWV1ZSkuIEluIGZhaWx1cmUgY2FzZXMsIGl0IHByb3Blcmx5IHJvbGxzIGJhY2sgcmVnaXN0ZXJlZCB0cmFjZXBvaW50cywgZGVjcmVtZW50cyBwcm9iZSByZWZlcmVuY2UgY291bnRzLCBjbGVhbnMgdXAgYWxsb2NhdGVkIGJsa190cmFjZSBzdHJ1Y3R1cmVzIHZpYSBibGtfdHJhY2VfZnJlZSwgYW5kIHJldHVybnMgZXJyb3IgY29kZXMgYmVmb3JlIGFueSBkYXRhIGlzIGNvcGllZCBiYWNrIHRvIHVzZXIgc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYXJlIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgYWxsb2NhdGlvbnMgb3IgY29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLiBQb3RlbnRpYWwgcmlza3Mgb24gdGhlc2UgcGF0aHMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgbG9jay9jbGVhbnVwIGVycm9ycykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllczsgdGh1cywgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNThjZmU2NDU2Yzg0NjNiNzE3MDQ5Yjk5NjAxOTYwYzkwMzk2OGE4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMjI6Mjk6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCmluZGV4IDhjZDI1MjBiNGM5OWUuLmMyMzI0Mjk4YzZjMTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCkBAIC02MCw3ICYjNDM7NjAsNyBAQCBzdGF0aWMgc3RydWN0IHRyYWNlcl9mbGFncyBibGtfdHJhY2VyX2ZsYWdzID0gewogc3RhdGljIERFRklORV9NVVRFWChibGtfcHJvYmVfbXV0ZXgpOwogc3RhdGljIGludCBibGtfcHJvYmVzX3JlZjsKIAotc3RhdGljIHZvaWQgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpOwomIzQzO3N0YXRpYyBpbnQgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpOwogc3RhdGljIHZvaWQgYmxrX3VucmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZCk7CiAKIHN0YXRpYyB2b2lkIHJlY29yZF9ibGt0cmFjZV9ldmVudChzdHJ1Y3QgYmxrX2lvX3RyYWNlICp0LCBwaWRfdCBwaWQsIGludCBjcHUsCkBAIC00ODUsMTIgJiM0Mzs0ODUsMTggQEAgc3RhdGljIHZvaWQgYmxrX3RyYWNlX2ZyZWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBibGtfdHJhY2UgKmJ0KQogCWtmcmVlKGJ0KTsKIH0KIAotc3RhdGljIHZvaWQgZ2V0X3Byb2JlX3JlZih2b2lkKQomIzQzO3N0YXRpYyBpbnQgZ2V0X3Byb2JlX3JlZih2b2lkKQogewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKIAltdXRleF9sb2NrKCZhbXA7YmxrX3Byb2JlX211dGV4KTsKLQlpZiAoJiM0MzsmIzQzO2Jsa19wcm9iZXNfcmVmID09IDEpCi0JCWJsa19yZWdpc3Rlcl90cmFjZXBvaW50cygpOwomIzQzOwlpZiAoJiM0MzsmIzQzO2Jsa19wcm9iZXNfcmVmID09IDEpIHsKJiM0MzsJCXJldCA9IGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cygpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlibGtfcHJvYmVzX3JlZi0tOwomIzQzOwl9CiAJbXV0ZXhfdW5sb2NrKCZhbXA7YmxrX3Byb2JlX211dGV4KTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgcHV0X3Byb2JlX3JlZih2b2lkKQpAQCAtNzI3LDEyICYjNDM7NzMzLDE0IEBAIHN0YXRpYyBzdHJ1Y3QgYmxrX3RyYWNlICpibGtfdHJhY2Vfc2V0dXBfcHJlcGFyZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCi1zdGF0aWMgdm9pZCBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCi0JCQkJICAgICBjaGFyICpuYW1lLCBpbnQgdmVyc2lvbiwKLQkJCQkgICAgIHN0cnVjdCBibGtfdHJhY2UgKmJ0LAotCQkJCSAgICAgc3RydWN0IGJsa191c2VyX3RyYWNlX3NldHVwMiAqYnV0cykKJiM0MztzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKJiM0MzsJCQkJICAgIGNoYXIgKm5hbWUsIGludCB2ZXJzaW9uLAomIzQzOwkJCQkgICAgc3RydWN0IGJsa190cmFjZSAqYnQsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAyICpidXRzKQogCiB7CiYjNDM7CWludCByZXQ7CiYjNDM7CiAJc3Ryc2NweV9wYWQoYnV0cy0mZ3Q7bmFtZSwgbmFtZSwgQkxLVFJBQ0VfQkRFVl9TSVpFMik7CiAKIAkvKgpAQCAtNzU1LDggJiM0Mzs3NjMsMTIgQEAgc3RhdGljIHZvaWQgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAogCWJ0LSZndDtwaWQgPSBidXRzLSZndDtwaWQ7CiAJYnQtJmd0O3RyYWNlX3N0YXRlID0gQmxrdHJhY2Vfc2V0dXA7CiAKJiM0MzsJcmV0ID0gZ2V0X3Byb2JlX3JlZigpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKIAlyY3VfYXNzaWduX3BvaW50ZXIocS0mZ3Q7YmxrX3RyYWNlLCBidCk7Ci0JZ2V0X3Byb2JlX3JlZigpOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogaW50IGJsa190cmFjZV9zZXR1cChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSwgZGV2X3QgZGV2LApAQCAtNzkyLDcgJiM0Mzs4MDQsMTIgQEAgaW50IGJsa190cmFjZV9zZXR1cChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSwgZGV2X3QgZGV2LAogCQlibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpOwogCQlyZXR1cm4gUFRSX0VSUihidCk7CiAJfQotCWJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAxLCBidCwgJmFtcDtidXRzMik7CiYjNDM7CXJldCA9IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAxLCBidCwgJmFtcDtidXRzMik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWJsa190cmFjZV9mcmVlKHEsIGJ0KTsKJiM0MzsJCWJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiAJc3Ryc2NweShidXRzLm5hbWUsIGJ1dHMyLm5hbWUsIEJMS1RSQUNFX0JERVZfU0laRSk7CiAJYmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTsKIApAQCAtODEwLDYgJiM0Mzs4MjcsNyBAQCBzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cDIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldiwKIAlzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAyIGJ1dHMyOwogCXN0cnVjdCBibGtfdHJhY2UgKmJ0OwogCXVuc2lnbmVkIGludCBtZW1mbGFnczsKJiM0MzsJaW50IHJldDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2J1dHMyLCBhcmcsIHNpemVvZihidXRzMikpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTgyNyw3ICYjNDM7ODQ1LDEyIEBAIHN0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwMihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSwgZGV2X3QgZGV2LAogCQlibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpOwogCQlyZXR1cm4gUFRSX0VSUihidCk7CiAJfQotCWJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAyLCBidCwgJmFtcDtidXRzMik7CiYjNDM7CXJldCA9IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAyLCBidCwgJmFtcDtidXRzMik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWJsa190cmFjZV9mcmVlKHEsIGJ0KTsKJiM0MzsJCWJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiAJYmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTsKIAogCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYW1wO2J1dHMyLCBzaXplb2YoYnV0czIpKSkgewpAQCAtODQ2LDYgJiM0Mzs4NjksNyBAQCBzdGF0aWMgaW50IGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsCiAJc3RydWN0IGNvbXBhdF9ibGtfdXNlcl90cmFjZV9zZXR1cCBjYnV0czsKIAlzdHJ1Y3QgYmxrX3RyYWNlICpidDsKIAl1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7CiYjNDM7CWludCByZXQ7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDtjYnV0cywgYXJnLCBzaXplb2YoY2J1dHMpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC04NjksNyAmIzQzOzg5MywxMiBAQCBzdGF0aWMgaW50IGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsCiAJCWJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7CiAJCXJldHVybiBQVFJfRVJSKGJ0KTsKIAl9Ci0JYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDEsIGJ0LCAmYW1wO2J1dHMyKTsKJiM0MzsJcmV0ID0gYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDEsIGJ0LCAmYW1wO2J1dHMyKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJYmxrX3RyYWNlX2ZyZWUocSwgYnQpOwomIzQzOwkJYmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KIAlibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpOwogCiAJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZhbXA7YnV0czIubmFtZSwgQVJSQVlfU0laRShidXRzMi5uYW1lKSkpIHsKQEAgLTEzMjQsNDkgJiM0MzsxMzUzLDEwOCBAQCB2b2lkIGJsa19hZGRfZHJpdmVyX2RhdGEoc3RydWN0IHJlcXVlc3QgKnJxLCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQogfQogRVhQT1JUX1NZTUJPTF9HUEwoYmxrX2FkZF9kcml2ZXJfZGF0YSk7CiAKLXN0YXRpYyB2b2lkIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKQomIzQzO3N0YXRpYyBpbnQgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpCiB7CiAJaW50IHJldDsKIAogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2luc2VydChibGtfYWRkX3RyYWNlX3JxX2luc2VydCwgTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXQ7CiAJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfaXNzdWUoYmxrX2FkZF90cmFjZV9ycV9pc3N1ZSwgTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcnFfaW5zZXJ0OwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX21lcmdlKGJsa19hZGRfdHJhY2VfcnFfbWVyZ2UsIE5VTEwpOwotCVdBUk5fT04ocmV0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3JxX2lzc3VlOwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX3JlcXVldWUoYmxrX2FkZF90cmFjZV9ycV9yZXF1ZXVlLCBOVUxMKTsKLQlXQVJOX09OKHJldCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9ycV9tZXJnZTsKIAlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9jb21wbGV0ZShibGtfYWRkX3RyYWNlX3JxX2NvbXBsZXRlLCBOVUxMKTsKLQlXQVJOX09OKHJldCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9ycV9yZXF1ZXVlOwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19jb21wbGV0ZShibGtfYWRkX3RyYWNlX2Jpb19jb21wbGV0ZSwgTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcnFfY29tcGxldGU7CiAJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2JhY2ttZXJnZShibGtfYWRkX3RyYWNlX2Jpb19iYWNrbWVyZ2UsIE5VTEwpOwotCVdBUk5fT04ocmV0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X2Jpb19jb21wbGV0ZTsKIAlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fZnJvbnRtZXJnZShibGtfYWRkX3RyYWNlX2Jpb19mcm9udG1lcmdlLCBOVUxMKTsKLQlXQVJOX09OKHJldCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9iaW9fYmFja21lcmdlOwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19xdWV1ZShibGtfYWRkX3RyYWNlX2Jpb19xdWV1ZSwgTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfYmlvX2Zyb250bWVyZ2U7CiAJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfZ2V0cnEoYmxrX2FkZF90cmFjZV9nZXRycSwgTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfYmlvX3F1ZXVlOwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsa196b25lX2FwcGVuZF91cGRhdGVfcmVxdWVzdF9iaW8oCiAJCWJsa19hZGRfdHJhY2Vfem9uZV91cGRhdGVfcmVxdWVzdCwgTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfZ2V0cnE7CiAJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfZGlza196b25lX3dwbHVnX2FkZF9iaW8oYmxrX2FkZF90cmFjZV96b25lX3BsdWcsCiAJCQkJCQkgICAgIE5VTEwpOwotCVdBUk5fT04ocmV0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3pvbmVfdXBkYXRlX3JlcXVlc3Q7CiAJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxrX3pvbmVfd3BsdWdfYmlvKGJsa19hZGRfdHJhY2Vfem9uZV91bnBsdWcsCiAJCQkJCQlOVUxMKTsKLQlXQVJOX09OKHJldCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF96b25lX3BsdWc7CiAJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcGx1ZyhibGtfYWRkX3RyYWNlX3BsdWcsIE5VTEwpOwotCVdBUk5fT04ocmV0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3pvbmVfdW5wbHVnOwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3VucGx1ZyhibGtfYWRkX3RyYWNlX3VucGx1ZywgTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcGx1ZzsKIAlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19zcGxpdChibGtfYWRkX3RyYWNlX3NwbGl0LCBOVUxMKTsKLQlXQVJOX09OKHJldCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF91bnBsdWc7CiAJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX3JlbWFwKGJsa19hZGRfdHJhY2VfYmlvX3JlbWFwLCBOVUxMKTsKLQlXQVJOX09OKHJldCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9zcGxpdDsKIAlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9yZW1hcChibGtfYWRkX3RyYWNlX3JxX3JlbWFwLCBOVUxMKTsKLQlXQVJOX09OKHJldCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9iaW9fcmVtYXA7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO291dF9iaW9fcmVtYXA6CiYjNDM7CXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX3JlbWFwKGJsa19hZGRfdHJhY2VfYmlvX3JlbWFwLCBOVUxMKTsKJiM0MztvdXRfc3BsaXQ6CiYjNDM7CXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfc3BsaXQoYmxrX2FkZF90cmFjZV9zcGxpdCwgTlVMTCk7CiYjNDM7b3V0X3VucGx1ZzoKJiM0MzsJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWcoYmxrX2FkZF90cmFjZV91bnBsdWcsIE5VTEwpOwomIzQzO291dF9wbHVnOgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3BsdWcoYmxrX2FkZF90cmFjZV9wbHVnLCBOVUxMKTsKJiM0MztvdXRfem9uZV91bnBsdWc6CiYjNDM7CXVucmVnaXN0ZXJfdHJhY2VfYmxrX3pvbmVfd3BsdWdfYmlvKGJsa19hZGRfdHJhY2Vfem9uZV91bnBsdWcsIE5VTEwpOwomIzQzO291dF96b25lX3BsdWc6CiYjNDM7CXVucmVnaXN0ZXJfdHJhY2VfZGlza196b25lX3dwbHVnX2FkZF9iaW8oYmxrX2FkZF90cmFjZV96b25lX3BsdWcsIE5VTEwpOwomIzQzO291dF96b25lX3VwZGF0ZV9yZXF1ZXN0OgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsa196b25lX2FwcGVuZF91cGRhdGVfcmVxdWVzdF9iaW8oCiYjNDM7CQlibGtfYWRkX3RyYWNlX3pvbmVfdXBkYXRlX3JlcXVlc3QsIE5VTEwpOwomIzQzO291dF9nZXRycToKJiM0MzsJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19nZXRycShibGtfYWRkX3RyYWNlX2dldHJxLCBOVUxMKTsKJiM0MztvdXRfYmlvX3F1ZXVlOgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19xdWV1ZShibGtfYWRkX3RyYWNlX2Jpb19xdWV1ZSwgTlVMTCk7CiYjNDM7b3V0X2Jpb19mcm9udG1lcmdlOgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19mcm9udG1lcmdlKGJsa19hZGRfdHJhY2VfYmlvX2Zyb250bWVyZ2UsIE5VTEwpOwomIzQzO291dF9iaW9fYmFja21lcmdlOgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19iYWNrbWVyZ2UoYmxrX2FkZF90cmFjZV9iaW9fYmFja21lcmdlLCBOVUxMKTsKJiM0MztvdXRfYmlvX2NvbXBsZXRlOgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19jb21wbGV0ZShibGtfYWRkX3RyYWNlX2Jpb19jb21wbGV0ZSwgTlVMTCk7CiYjNDM7b3V0X3JxX2NvbXBsZXRlOgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2NvbXBsZXRlKGJsa19hZGRfdHJhY2VfcnFfY29tcGxldGUsIE5VTEwpOwomIzQzO291dF9ycV9yZXF1ZXVlOgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX3JlcXVldWUoYmxrX2FkZF90cmFjZV9ycV9yZXF1ZXVlLCBOVUxMKTsKJiM0MztvdXRfcnFfbWVyZ2U6CiYjNDM7CXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfbWVyZ2UoYmxrX2FkZF90cmFjZV9ycV9tZXJnZSwgTlVMTCk7CiYjNDM7b3V0X3JxX2lzc3VlOgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2lzc3VlKGJsa19hZGRfdHJhY2VfcnFfaXNzdWUsIE5VTEwpOwomIzQzO291dF9ycV9pbnNlcnQ6CiYjNDM7CXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfaW5zZXJ0KGJsa19hZGRfdHJhY2VfcnFfaW5zZXJ0LCBOVUxMKTsKJiM0MzsJdHJhY2Vwb2ludF9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyKCk7CiYjNDM7b3V0OgomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBibGtfdW5yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKQpAQCAtMTkxNiw4ICYjNDM7MjAwNCwxMSBAQCBzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKIAogCWJsa190cmFjZV9zZXR1cF9sYmEoYnQsIGJkZXYpOwogCiYjNDM7CXJldCA9IGdldF9wcm9iZV9yZWYoKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZnJlZV9idDsKJiM0MzsKIAlyY3VfYXNzaWduX3BvaW50ZXIocS0mZ3Q7YmxrX3RyYWNlLCBidCk7Ci0JZ2V0X3Byb2JlX3JlZigpOwogCXJldHVybiAwOwogCiBmcmVlX2J0Ogo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM1NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDYwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJMS1RSQUNFIFBhdGNoIGZvciBFcnJvciBIYW5kbGluZyBhbmQgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhleSYjMzk7dmUgbWFkZSBzb21lIHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGUgdHJhY2Vwb2ludCByZWdpc3RyYXRpb24gcHJvY2VzcywgYW5kIEkgbmVlZCB0byBhc3Nlc3MgdGhlIGltcGFjdC4KCkZpcnN0LCBJIHNlZSBgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzYCBoYXMgYmVlbiBhbHRlcmVkLiBQcmV2aW91c2x5LCBpdCBqdXN0IHJldHVybmVkIHZvaWQsIGFuZCBhbnkgZXJyb3JzIHdlcmUgc2ltcGx5IFdBUk4mIzM5O2QuIE5vdywgaXQgcmV0dXJucyBhbiBpbnQsIGFsbG93aW5nIGZvciBleHBsaWNpdCBlcnJvciBjb2Rlcy4gSW1wb3J0YW50bHksIGlmIHJlZ2lzdGVyaW5nIGEgdHJhY2Vwb2ludCBmYWlscywgaXQgKnVud2luZHMqIHRoZSBhbHJlYWR5IHJlZ2lzdGVyZWQgb25lcyBhbmQgcHJvcGFnYXRlcyB0aGUgZXJyb3IuIEdvb2QsIHRoYXQmIzM5O3MgYSBkZWZpbml0ZSBpbXByb3ZlbWVudCBpbiByb2J1c3RuZXNzLgoKTmV4dCwgYGdldF9wcm9iZV9yZWZgIG5vdyByZXR1cm5zIGFuIGludCB0b28uIEl0cyBsb2dpYyBzZWVtcyBkZXNpZ25lZCB0byBoYW5kbGUgdGhlIGVycm9yIHJldHVybiBmcm9tIGBibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHNgIHdoZW4gYGJsa19wcm9iZXNfcmVmYCBpcyAxLiBJZiByZWdpc3RyYXRpb24gZmFpbGVkLCBpdCBkZWNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgYW5kIGFsc28gcmV0dXJucyB0aGUgZXJyb3IuCgpUaGVuLCBgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplYCBpcyBtb2RpZmllZCwgYWxzbyByZXR1cm5pbmcgYW4gYGludGAgbm93LiBJdCBjYWxscyBgZ2V0X3Byb2JlX3JlZigpYCwgYW5kIGlmICp0aGF0KiBmYWlscywgaXQgcmV0dXJucyB0aGUgZXJyb3IgKmJlZm9yZSogdGhlIGByY3VfYXNzaWduX3BvaW50ZXJgIGNhbGwuIFRoaXMgaXMga2V5LCBhcyB3ZSBhdm9pZCBzb21lIGZvcm0gb2YgYSByYWNlIGNvbmRpdGlvbiBhbmQgYSBwb3NzaWJsZSBjb3JydXB0aW9uLgoKSSBub3RpY2UgdGhhdCB0aGUgY2FsbGVycyBvZiBgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplYCDigJMgYGJsa190cmFjZV9zZXR1cGAsIGBibGtfdHJhY2Vfc2V0dXAyYCwgYW5kIGBjb21wYXRfYmxrX3RyYWNlX3NldHVwYCDigJMgYXJlIGFsbCB1cGRhdGVkIHRvIGNoZWNrIHRoaXMgcmV0dXJuIHZhbHVlLiBJZiBgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplYCBmYWlscywgdGhlbiB0aGV5IGZyZWUgdGhlIHRyYWNlIHN0cnVjdHVyZSwgdW5sb2NrIGRlYnVnZnMsIGFuZCBwcm9wYWdhdGUgdGhlIGVycm9yLiBBbHNvLCBJIHNlZSBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlYCBub3cgaGFuZGxlcyB0aGUgZmFpbHVyZSBvZiBgZ2V0X3Byb2JlX3JlZigpYCBieSBqdW1waW5nIHRvIGBmcmVlX2J0YC4gQWxsIG9mIHRoZXNlIHRoaW5ncyBsb29rIGdvb2QsIGF0IGEgZ2xhbmNlLCBmcm9tIGEgY29udHJvbCBmbG93IHBlcnNwZWN0aXZlLgoKT2theSwgbm93IGZvciB0aGUgcGFydCB0aGF0IHJlYWxseSBpbnRlcmVzdHMgbWU6IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFRoZSBwcmltYXJ5IHRoaW5nIEkgd2FudCB0byBldmFsdWF0ZSBpcyB0aGUgcG9zc2liaWxpdHkgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm9ybWF0aW9uIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyBhIGNvbW1vbiBjbGFzcyBvZiBidWdzIGluIGtlcm5lbCBjb2RlLgoKU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBjb2RlIGludGVyYWN0cyB3aXRoIHVzZXItc3BhY2UgZGF0YSBzdHJ1Y3R1cmVzLiBNeSBmb2N1cyBpcyBvbiB0aGUgYGJsa190cmFjZV9zZXR1cGAgZnVuY3Rpb24uIFRoZSBjb2RlIGxvb2tzIGxpa2UgdGhpczoKCmBgYGMKaW50IGJsa190cmFjZV9zZXR1cChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSwgZGV2X3QgZGV2LAouLi4KCXJldCA9IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAxLCBidCwgJmFtcDtidXRzMik7CglpZiAocmV0KSB7CgkJYmxrX3RyYWNlX2ZyZWUocSwgYnQpOwoJCWJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7CgkJcmV0dXJuIHJldDsKCX0KCXN0cnNjcHkoYnV0cy5uYW1lLCBidXRzMi5uYW1lLCBCTEtUUkFDRV9CREVWX1NJWkUpOwoJYmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTsKCglpZiAoY29weV90b191c2VyKGFyZywgJmFtcDtidXRzLCBzaXplb2YoYnV0cykpKQouLi4KYGBgCgpTbywgSeKAmW0gemVyb2luZyBpbiBvbiB0aGlzIGBjb3B5X3RvX3VzZXJgIGNhbGwuIEkgc2VlIHRoZSBjb2RlIGNhbGxzIGBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemVgLiBJZiB0aGF0IGZhaWxzLCB0aGUgcHJvZ3JhbSByZXR1cm5zLiBIb3dldmVyLCBiZWZvcmUgdGhlIGBjb3B5X3RvX3VzZXJgIGNhbGwsIGBzdHJzY3B5YCBpcyB1c2VkIHRvIGNvcHkgZnJvbSBgYnV0czIubmFtZWAgdG8gYGJ1dHMubmFtZWAuIE5vdywgaWYgYGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZWAgZmFpbHMsIGlzIHRoZSBkYXRhIGluIHRoZSBgYnV0czJgIHN0cnVjdHVyZSB3ZWxsIGRlZmluZWQsIG9yIGRvZXMgaXQgaGF2ZSBnYXJiYWdlIGRhdGE/IFRoaXMgaGFzIGEgZ29vZCBjaGFuY2Ugb2YgYmVpbmcgd2hlcmUgYSBidWcgY2FuIGJlIGxvY2F0ZWQuIEkgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AgYXJvdW5kIGxpbmVzIDc4MCB0byA5MjAgdG8gY2hlY2sgdGhlIGNvbnRleHQgYXJvdW5kIHRoZXNlIHZhcmlhYmxlcyB0byBkZXRlcm1pbmUgaWYgaXQgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LiBNeSBodW5jaCBpcyB0aGF0IHRoaXMgaXMgdGhlIHBvaW50IEkmIzM5O2xsIGZpbmQgYW4gaXNzdWUgaWYgdGhlcmUgaXMgb25lLiBMZXQmIzM5O3Mgc3RhcnQgdGhlIHJlYWRpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NzA6XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihxLVx1MDAzZWJsa190cmFjZSwgYnQpO1xuIDc3MTpcdFx0cmV0dXJuIDA7XG4gNzcyOlx0fVxuIDc3MzpcdFxuIDc3NDpcdGludCBibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldixcbiA3NzU6XHRcdFx0ICAgIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXG4gNzc2Olx0XHRcdCAgICBjaGFyIF9fdXNlciAqYXJnKVxuIDc3NzpcdHtcbiA3Nzg6XHRcdHN0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cDIgYnV0czI7XG4gNzc5Olx0XHRzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAgYnV0cztcbiA3ODA6XHRcdHN0cnVjdCBibGtfdHJhY2UgKmJ0O1xuIDc4MTpcdFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuIDc4MjpcdFx0aW50IHJldDtcbiA3ODM6XHRcbiA3ODQ6XHRcdHJldCA9IGNvcHlfZnJvbV91c2VyKFx1MDAyNmJ1dHMsIGFyZywgc2l6ZW9mKGJ1dHMpKTtcbiA3ODU6XHRcdGlmIChyZXQpXG4gNzg2Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDc4NzpcdFxuIDc4ODpcdFx0aWYgKCFidXRzLmJ1Zl9zaXplIHx8ICFidXRzLmJ1Zl9ucilcbiA3ODk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzkwOlx0XG4gNzkxOlx0XHRidXRzMiA9IChzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAyKSB7XG4gNzkyOlx0XHRcdC5hY3RfbWFzayA9IGJ1dHMuYWN0X21hc2ssXG4gNzkzOlx0XHRcdC5idWZfc2l6ZSA9IGJ1dHMuYnVmX3NpemUsXG4gNzk0Olx0XHRcdC5idWZfbnIgPSBidXRzLmJ1Zl9ucixcbiA3OTU6XHRcdFx0LnN0YXJ0X2xiYSA9IGJ1dHMuc3RhcnRfbGJhLFxuIDc5NjpcdFx0XHQuZW5kX2xiYSA9IGJ1dHMuZW5kX2xiYSxcbiA3OTc6XHRcdFx0LnBpZCA9IGJ1dHMucGlkLFxuIDc5ODpcdFx0fTtcbiA3OTk6XHRcbiA4MDA6XHRcdG1lbWZsYWdzID0gYmxrX2RlYnVnZnNfbG9jayhxKTtcbiA4MDE6XHRcdGJ0ID0gYmxrX3RyYWNlX3NldHVwX3ByZXBhcmUocSwgbmFtZSwgZGV2LCBidXRzLmJ1Zl9zaXplLCBidXRzLmJ1Zl9ucixcbiA4MDI6XHRcdFx0XHRcdCAgICAgYmRldik7XG4gODAzOlx0XHRpZiAoSVNfRVJSKGJ0KSkge1xuIDgwNDpcdFx0XHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuIDgwNTpcdFx0XHRyZXR1cm4gUFRSX0VSUihidCk7XG4gODA2Olx0XHR9XG4gODA3Olx0XHRyZXQgPSBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMSwgYnQsIFx1MDAyNmJ1dHMyKTtcbiA4MDg6XHRcdGlmIChyZXQpIHtcbiA4MDk6XHRcdFx0YmxrX3RyYWNlX2ZyZWUocSwgYnQpO1xuIDgxMDpcdFx0XHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuIDgxMTpcdFx0XHRyZXR1cm4gcmV0O1xuIDgxMjpcdFx0fVxuIDgxMzpcdFx0c3Ryc2NweShidXRzLm5hbWUsIGJ1dHMyLm5hbWUsIEJMS1RSQUNFX0JERVZfU0laRSk7XG4gODE0Olx0XHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuIDgxNTpcdFxuIDgxNjpcdFx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFx1MDAyNmJ1dHMsIHNpemVvZihidXRzKSkpIHtcbiA4MTc6XHRcdFx0YmxrX3RyYWNlX3JlbW92ZShxKTtcbiA4MTg6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gODE5Olx0XHR9XG4gODIwOlx0XHRyZXR1cm4gMDtcbiA4MjE6XHR9XG4gODIyOlx0RVhQT1JUX1NZTUJPTF9HUEwoYmxrX3RyYWNlX3NldHVwKTtcbiA4MjM6XHRcbiA4MjQ6XHRzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cDIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldixcbiA4MjU6XHRcdFx0XHQgICAgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgY2hhciBfX3VzZXIgKmFyZylcbiA4MjY6XHR7XG4gODI3Olx0XHRzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAyIGJ1dHMyO1xuIDgyODpcdFx0c3RydWN0IGJsa190cmFjZSAqYnQ7XG4gODI5Olx0XHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XG4gODMwOlx0XHRpbnQgcmV0O1xuIDgzMTpcdFxuIDgzMjpcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmJ1dHMyLCBhcmcsIHNpemVvZihidXRzMikpKVxuIDgzMzpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiA4MzQ6XHRcbiA4MzU6XHRcdGlmICghYnV0czIuYnVmX3NpemUgfHwgIWJ1dHMyLmJ1Zl9ucilcbiA4MzY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODM3Olx0XG4gODM4Olx0XHRpZiAoYnV0czIuZmxhZ3MgIT0gMClcbiA4Mzk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODQwOlx0XG4gODQxOlx0XHRtZW1mbGFncyA9IGJsa19kZWJ1Z2ZzX2xvY2socSk7XG4gODQyOlx0XHRidCA9IGJsa190cmFjZV9zZXR1cF9wcmVwYXJlKHEsIG5hbWUsIGRldiwgYnV0czIuYnVmX3NpemUsIGJ1dHMyLmJ1Zl9ucixcbiA4NDM6XHRcdFx0XHRcdCAgICAgYmRldik7XG4gODQ0Olx0XHRpZiAoSVNfRVJSKGJ0KSkge1xuIDg0NTpcdFx0XHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuIDg0NjpcdFx0XHRyZXR1cm4gUFRSX0VSUihidCk7XG4gODQ3Olx0XHR9XG4gODQ4Olx0XHRyZXQgPSBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMiwgYnQsIFx1MDAyNmJ1dHMyKTtcbiA4NDk6XHRcdGlmIChyZXQpIHtcbiA4NTA6XHRcdFx0YmxrX3RyYWNlX2ZyZWUocSwgYnQpO1xuIDg1MTpcdFx0XHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuIDg1MjpcdFx0XHRyZXR1cm4gcmV0O1xuIDg1MzpcdFx0fVxuIDg1NDpcdFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcbiA4NTU6XHRcbiA4NTY6XHRcdGlmIChjb3B5X3RvX3VzZXIoYXJnLCBcdTAwMjZidXRzMiwgc2l6ZW9mKGJ1dHMyKSkpIHtcbiA4NTc6XHRcdFx0YmxrX3RyYWNlX3JlbW92ZShxKTtcbiA4NTg6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gODU5Olx0XHR9XG4gODYwOlx0XHRyZXR1cm4gMDtcbiA4NjE6XHR9XG4gODYyOlx0XG4gODYzOlx0I2lmIGRlZmluZWQoQ09ORklHX0NPTVBBVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1g4Nl82NClcbiA4NjQ6XHRzdGF0aWMgaW50IGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsXG4gODY1Olx0XHRcdFx0XHQgIGRldl90IGRldiwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcbiA4NjY6XHRcdFx0XHRcdCAgY2hhciBfX3VzZXIgKmFyZylcbiA4Njc6XHR7XG4gODY4Olx0XHRzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAyIGJ1dHMyO1xuIDg2OTpcdFx0c3RydWN0IGNvbXBhdF9ibGtfdXNlcl90cmFjZV9zZXR1cCBjYnV0cztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ1MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBpZiBJIGFtIHRoZSBvbmUgdGhpbmtpbmcgaXQsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkZvY3VzZWQgUmV2aWV3IG9mIFNwZWNpZmljIENvZGUgTGluZXMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHRob3JvdWdoIGhlcmUuIEdpdmVuIHRoZSBjb250ZXh0IG9mIHRoaXMgaXNzdWUsIGFuZCBjb25zaWRlcmluZyB3aGF0IEkga25vdyBhYm91dCB0aGUgc3lzdGVtJiMzOTtzIGFyY2hpdGVjdHVyZSwgSSB3YW50IHRvIHplcm8gaW4gb24gYSBwYXJ0aWN1bGFyIHNlY3Rpb24gb2YgY29kZS4gU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGxpbmVzIDg3MCB0aHJvdWdoIDkxMC4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgYW5hbHl6ZSB0aGUgbG9naWMgaW1wbGVtZW50ZWQgdGhlcmUsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIG9yIHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBtb2R1bGVzLiBJIGV4cGVjdCB0aGVyZSB0byBiZSB0aGUgcm9vdCBvZiB0aGUgaXNzdWUgdGhlcmUuIFRpbWUgdG8gZGl2ZSBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYmxrdHJhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODcwOlx0XHRzdHJ1Y3QgYmxrX3RyYWNlICpidDtcbiA4NzE6XHRcdHVuc2lnbmVkIGludCBtZW1mbGFncztcbiA4NzI6XHRcdGludCByZXQ7XG4gODczOlx0XG4gODc0Olx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2Y2J1dHMsIGFyZywgc2l6ZW9mKGNidXRzKSkpXG4gODc1Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDg3NjpcdFxuIDg3NzpcdFx0aWYgKCFjYnV0cy5idWZfc2l6ZSB8fCAhY2J1dHMuYnVmX25yKVxuIDg3ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA4Nzk6XHRcbiA4ODA6XHRcdGJ1dHMyID0gKHN0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cDIpIHtcbiA4ODE6XHRcdFx0LmFjdF9tYXNrID0gY2J1dHMuYWN0X21hc2ssXG4gODgyOlx0XHRcdC5idWZfc2l6ZSA9IGNidXRzLmJ1Zl9zaXplLFxuIDg4MzpcdFx0XHQuYnVmX25yID0gY2J1dHMuYnVmX25yLFxuIDg4NDpcdFx0XHQuc3RhcnRfbGJhID0gY2J1dHMuc3RhcnRfbGJhLFxuIDg4NTpcdFx0XHQuZW5kX2xiYSA9IGNidXRzLmVuZF9sYmEsXG4gODg2Olx0XHRcdC5waWQgPSBjYnV0cy5waWQsXG4gODg3Olx0XHR9O1xuIDg4ODpcdFxuIDg4OTpcdFx0bWVtZmxhZ3MgPSBibGtfZGVidWdmc19sb2NrKHEpO1xuIDg5MDpcdFx0YnQgPSBibGtfdHJhY2Vfc2V0dXBfcHJlcGFyZShxLCBuYW1lLCBkZXYsIGJ1dHMyLmJ1Zl9zaXplLCBidXRzMi5idWZfbnIsXG4gODkxOlx0XHRcdFx0XHQgICAgIGJkZXYpO1xuIDg5MjpcdFx0aWYgKElTX0VSUihidCkpIHtcbiA4OTM6XHRcdFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcbiA4OTQ6XHRcdFx0cmV0dXJuIFBUUl9FUlIoYnQpO1xuIDg5NTpcdFx0fVxuIDg5NjpcdFx0cmV0ID0gYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDEsIGJ0LCBcdTAwMjZidXRzMik7XG4gODk3Olx0XHRpZiAocmV0KSB7XG4gODk4Olx0XHRcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcbiA4OTk6XHRcdFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcbiA5MDA6XHRcdFx0cmV0dXJuIHJldDtcbiA5MDE6XHRcdH1cbiA5MDI6XHRcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XG4gOTAzOlx0XG4gOTA0Olx0XHRpZiAoY29weV90b191c2VyKGFyZywgXHUwMDI2YnV0czIubmFtZSwgQVJSQVlfU0laRShidXRzMi5uYW1lKSkpIHtcbiA5MDU6XHRcdFx0YmxrX3RyYWNlX3JlbW92ZShxKTtcbiA5MDY6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gOTA3Olx0XHR9XG4gOTA4Olx0XG4gOTA5Olx0XHRyZXR1cm4gMDtcbiA5MTA6XHR9XG4gOTExOlx0I2VuZGlmXG4gOTEyOlx0XG4gOTEzOlx0c3RhdGljIGludCBfX2Jsa190cmFjZV9zdGFydHN0b3Aoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGludCBzdGFydClcbiA5MTQ6XHR7XG4gOTE1Olx0XHRzdHJ1Y3QgYmxrX3RyYWNlICpidDtcbiA5MTY6XHRcbiA5MTc6XHRcdGJ0ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChxLVx1MDAzZWJsa190cmFjZSxcbiA5MTg6XHRcdFx0XHRcdCAgICAgICBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2cS1cdTAwM2VkZWJ1Z2ZzX211dGV4KSk7XG4gOTE5Olx0XHRpZiAoYnQgPT0gTlVMTClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQzNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gQmxvY2sgVHJhY2luZyBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGZvciB0aGUgYmxvY2sgdHJhY2luZyBpbmZyYXN0cnVjdHVyZS4gSSBrbm93IHRoZSByZWxldmFudCBzZWN0aW9uIGlzIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBibGtfdHJhY2Vfc2V0dXBfcXVldWVgIGZ1bmN0aW9uLiBUbyB6ZXJvIGluIG9uIHRoZSBrZXkgbG9naWMsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZWZlcmVuY2UgYXJvdW5kIGxpbmVzIDE5OTAgdGhyb3VnaCAyMDIwLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyBxdWV1ZXMgYXJlIHNldCB1cCBpbiBkZXRhaWwgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5ODA6XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuMTk4MTpcdFx0YmxrX3RyYWNlX2ZyZWUocSwgYnQpO1xuMTk4MjpcdFx0cmV0dXJuIDA7XG4xOTgzOlx0fVxuMTk4NDpcdFxuMTk4NTpcdC8qXG4xOTg2Olx0ICogU2V0dXAgZXZlcnl0aGluZyByZXF1aXJlZCB0byBzdGFydCB0cmFjaW5nXG4xOTg3Olx0ICovXG4xOTg4Olx0c3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXBfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4xOTg5Olx0XHRcdFx0XHQgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbjE5OTA6XHR7XG4xOTkxOlx0XHRzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IE5VTEw7XG4xOTkyOlx0XHRpbnQgcmV0ID0gLUVOT01FTTtcbjE5OTM6XHRcbjE5OTQ6XHRcdGJ0ID0ga3phbGxvY19vYmooKmJ0KTtcbjE5OTU6XHRcdGlmICghYnQpXG4xOTk2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTk5NzpcdFxuMTk5ODpcdFx0YnQtXHUwMDNlbXNnX2RhdGEgPSBfX2FsbG9jX3BlcmNwdShCTEtfVE5fTUFYX01TRywgX19hbGlnbm9mX18oY2hhcikpO1xuMTk5OTpcdFx0aWYgKCFidC1cdTAwM2Vtc2dfZGF0YSlcbjIwMDA6XHRcdFx0Z290byBmcmVlX2J0O1xuMjAwMTpcdFxuMjAwMjpcdFx0YnQtXHUwMDNlZGV2ID0gYmRldi1cdTAwM2ViZF9kZXY7XG4yMDAzOlx0XHRidC1cdTAwM2VhY3RfbWFzayA9ICh1MTYpLTE7XG4yMDA0Olx0XG4yMDA1Olx0XHRibGtfdHJhY2Vfc2V0dXBfbGJhKGJ0LCBiZGV2KTtcbjIwMDY6XHRcbjIwMDc6XHRcdHJldCA9IGdldF9wcm9iZV9yZWYoKTtcbjIwMDg6XHRcdGlmIChyZXQpXG4yMDA5Olx0XHRcdGdvdG8gZnJlZV9idDtcbjIwMTA6XHRcbjIwMTE6XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihxLVx1MDAzZWJsa190cmFjZSwgYnQpO1xuMjAxMjpcdFx0cmV0dXJuIDA7XG4yMDEzOlx0XG4yMDE0Olx0ZnJlZV9idDpcbjIwMTU6XHRcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcbjIwMTY6XHRcdHJldHVybiByZXQ7XG4yMDE3Olx0fVxuMjAxODpcdFxuMjAxOTpcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTUwCgkJCQkJCQlvdXRwdXQ6IDE5NAoJCQkJCQkJdGhvdWdodHM6IDY0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJsa3RyYWNlIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQmIzM5O3MgYWxsIGFib3V0IGltcHJvdmluZyBlcnJvciBoYW5kbGluZyBkdXJpbmcgYmxrdHJhY2UgdHJhY2Vwb2ludCByZWdpc3RyYXRpb24uIFByZXZpb3VzbHksIGEgZmFpbGVkIHJlZ2lzdHJhdGlvbiB3YXMganVzdCBhIGBXQVJOX09OYCwgd2hpY2ggaXMgaGFyZGx5IHJvYnVzdC4gTm93LCBgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzYCBhY3R1YWxseSByZXR1cm5zIGFuIGVycm9yIGNvZGUsIGFuZCBjcnVjaWFsbHksICp1bnJlZ2lzdGVycyogYW55IGFscmVhZHkgcmVnaXN0ZXJlZCB0cmFjZXBvaW50cyBpZiBvbmUgZmFpbHMuIFRoaXMgaXMgYSBzb2xpZCBpbXByb3ZlbWVudCwgcHJldmVudGluZyBwYXJ0aWFsIHRyYWNlcG9pbnQgc2V0dXBzLiBUaGUgYGdldF9wcm9iZV9yZWZgIGZ1bmN0aW9uLCBhbmQgdGhlIGNhbGxzIHRvIHRoaXMgYnkgdmFyaW91cyBmdW5jdGlvbnMsIGFyZSBhbGwgY2hlY2tpbmcgdGhlIGVycm9yIGNvZGVzIGFuZCBlbnN1cmluZyBwcm9wZXIgdW53aW5kaW5nIG9uIGZhaWx1cmUuIEdvb2QuCgpUaGUgbW9yZSBwcmVzc2luZyBxdWVzdGlvbiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgb3IgaW5mb3JtYXRpb24gbGVha3MsIGVpdGhlciB0byB1c2VyIG9yIHdpdGhpbiB0aGUga2VybmVsLiBMZXQmIzM5O3MgbWV0aG9kaWNhbGx5IGxvb2s6CgoxLiAgYGNvcHlfdG9fdXNlcmAgY2FsbHM6IFNlZW1zIGxpa2UgZXZlcnl0aGluZyBpcyBndWFyZGVkIHByb3Blcmx5LiBJbiBgYmxrX3RyYWNlX3NldHVwYCBhbmQgYGJsa190cmFjZV9zZXR1cDJgLCBhbnkgZXJyb3JzIHByb3BhZ2F0ZSAqYmVmb3JlKiByZWFjaGluZyBhbnkgYGNvcHlfdG9fdXNlcmAgY2FsbC4gQW5kIHRoZSBkYXRhIGJlaW5nIGNvcGllZCBpcyBlaXRoZXIgaW5pdGlhbGl6ZWQgZnJvbSB1c2VyIGlucHV0ICh2YWxpZGF0ZWQpIG9yIGluaXRpYWxpemVkIGJlZm9yZSBjb3B5aW5nLiBObyBzdXJwcmlzZXMgaGVyZS4KMi4gIFRyYWNlcG9pbnQgdW53aW5kaW5nOiBUaGUgcGF0Y2ggY29ycmVjdGx5IHVucmVnaXN0ZXJzIGZ1bmN0aW9uIHBvaW50ZXJzIG9yIGNhbGxiYWNrcyBvbiBlcnJvciwgbm90IHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBzdHJ1Y3R1cmVzLgozLiAgUmV0dXJuIGNvZGVzOiBFdmVyeXRoaW5nIGxvb2tzIGNvbnNpc3RlbnQ7IGByZXRgIGlzIGNvcnJlY3RseSBhc3NpZ25lZCBpbiBhbGwgYnJhbmNoZXMuCjQuICBTdHJ1Y3RzOiBObyBuZXcgc3RydWN0cyBvciB1bmluaXRpYWxpemVkIGZpZWxkcyBpbnRyb2R1Y2VkLiBFeGNlbGxlbnQuCgpOb3csIGZvciBLTVNBTiBhcHBsaWNhYmlsaXR5LCBteSBndXQgZmVlbGluZyBzYXlzIHRoaXMgaXMgYSAmIzM0O25vLiYjMzQ7IFRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgZXJyb3IgdW53aW5kaW5nLCB0cmFjZXBvaW50IHJlZ2lzdHJhdGlvbiwgYW5kIGVycm9yIGhhbmRsaW5nLiBBbnkgYnVncyB3b3VsZCBsZWFuIHRvd2FyZCByZXNvdXJjZSBsZWFrcywgZXJyb3IgcGF0aCBoYW5kbGluZyBpc3N1ZXMsIG9yIG1heWJlIGxvY2tpbmcgcHJvYmxlbXMgb3IgdXNlLWFmdGVyLWZyZWUsIG5vdCB0aGUga2luZCBvZiB0aGluZ3MgS01TQU4gdHlwaWNhbGx5IGNhdGNoZXMsIG5vciBkbyBJIHNlZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgaW50cm9kdWNlZC4gU3RhbmRhcmQgdG9vbHMsIEtBU0FOLCBhbmQgTE9DS0RFUCBhcmUgZ29pbmcgdG8gYmUgbW9yZSB1c2VmdWwgaGVyZS4KCkkmIzM5O20gY29uZmlkZW50OyBJJiMzOTtsbCBzZXQgYE5lZWRzS01TQU4gPSBmYWxzZWAgd2l0aCBhIGNsZWFyIGNvbnNjaWVuY2UuIFRoaXMgaXMgc291bmQsIHdlbGwtcmVhc29uZWQsIGFuZCBhIGRlZmluaXRlIGltcHJvdmVtZW50IHRvIHRoZSBlcnJvciBoYW5kbGluZyBvZiBibGt0cmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvciBjaGVja2luZyBhbmQgdW53aW5kaW5nIHRvIGJsa3RyYWNlIHRyYWNlcG9pbnQgcmVnaXN0cmF0aW9uIChibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHMsIGdldF9wcm9iZV9yZWYsIGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZSwgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKS4gSW4gZmFpbHVyZSBjYXNlcywgaXQgcHJvcGVybHkgcm9sbHMgYmFjayByZWdpc3RlcmVkIHRyYWNlcG9pbnRzLCBkZWNyZW1lbnRzIHByb2JlIHJlZmVyZW5jZSBjb3VudHMsIGNsZWFucyB1cCBhbGxvY2F0ZWQgYmxrX3RyYWNlIHN0cnVjdHVyZXMgdmlhIGJsa190cmFjZV9mcmVlLCBhbmQgcmV0dXJucyBlcnJvciBjb2RlcyBiZWZvcmUgYW55IGRhdGEgaXMgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZS4gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBhcmUgcmVhZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggdW5pbml0aWFsaXplZCBhbGxvY2F0aW9ucyBvciBjb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIGRhdGEgYXJlIGludHJvZHVjZWQuIFBvdGVudGlhbCByaXNrcyBvbiB0aGVzZSBwYXRocyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBsb2NrL2NsZWFudXAgZXJyb3JzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzOyB0aHVzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGVycm9yIGNoZWNraW5nIGFuZCB1bndpbmRpbmcgdG8gYmxrdHJhY2UgdHJhY2Vwb2ludCByZWdpc3RyYXRpb24gKGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cywgZ2V0X3Byb2JlX3JlZiwgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplLCBibGtfdHJhY2Vfc2V0dXBfcXVldWUpLiBJbiBmYWlsdXJlIGNhc2VzLCBpdCBwcm9wZXJseSByb2xscyBiYWNrIHJlZ2lzdGVyZWQgdHJhY2Vwb2ludHMsIGRlY3JlbWVudHMgcHJvYmUgcmVmZXJlbmNlIGNvdW50cywgY2xlYW5zIHVwIGFsbG9jYXRlZCBibGtfdHJhY2Ugc3RydWN0dXJlcyB2aWEgYmxrX3RyYWNlX2ZyZWUsIGFuZCByZXR1cm5zIGVycm9yIGNvZGVzIGJlZm9yZSBhbnkgZGF0YSBpcyBjb3BpZWQgYmFjayB0byB1c2VyIHNwYWNlLiBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGFyZSByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCB1bmluaXRpYWxpemVkIGFsbG9jYXRpb25zIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmUgaW50cm9kdWNlZC4gUG90ZW50aWFsIHJpc2tzIG9uIHRoZXNlIHBhdGhzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGxvY2svY2xlYW51cCBlcnJvcnMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXM7IHRodXMsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6Mjk6MDkuMTEwODMwODg5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk0MTAwMDg1ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9JT19UUkFDRVwiLFxuICAgIFwiQkxPQ0tcIixcbiAgICBcIlNZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrX3RyYWNlX2lvY3RsXCIsXG4gICAgXCJibGtfdHJhY2Vfc2V0dXBcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tpbmcgYW5kIHVud2luZGluZyB0byBibGt0cmFjZSB0cmFjZXBvaW50IHJlZ2lzdHJhdGlvbiAoYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzLCBnZXRfcHJvYmVfcmVmLCBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUsIGJsa190cmFjZV9zZXR1cF9xdWV1ZSkuIEluIGZhaWx1cmUgY2FzZXMsIGl0IHByb3Blcmx5IHJvbGxzIGJhY2sgcmVnaXN0ZXJlZCB0cmFjZXBvaW50cywgZGVjcmVtZW50cyBwcm9iZSByZWZlcmVuY2UgY291bnRzLCBjbGVhbnMgdXAgYWxsb2NhdGVkIGJsa190cmFjZSBzdHJ1Y3R1cmVzIHZpYSBibGtfdHJhY2VfZnJlZSwgYW5kIHJldHVybnMgZXJyb3IgY29kZXMgYmVmb3JlIGFueSBkYXRhIGlzIGNvcGllZCBiYWNrIHRvIHVzZXIgc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYXJlIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgYWxsb2NhdGlvbnMgb3IgY29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLiBQb3RlbnRpYWwgcmlza3Mgb24gdGhlc2UgcGF0aHMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgbG9jay9jbGVhbnVwIGVycm9ycykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllczsgdGh1cywgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJsa3RyYWNlIHRyYWNlcG9pbnQgcmVnaXN0cmF0aW9uIGFuZCBzZXR1cCBlcnJvciB1bndpbmRpbmcgcGF0aHMgaW4ga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMuIEl0IG1ha2VzIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyByZXR1cm4gZXJyb3IgY29kZXMgYW5kIHJvbGxiYWNrIHJlZ2lzdGVyZWQgdHJhY2Vwb2ludHMgdXBvbiBmYWlsdXJlLCBhbmQgcHJvcGVybHkgaGFuZGxlcyB0cmFjZXBvaW50IHNldHVwIGVycm9ycyBhY3Jvc3MgYmxrX3RyYWNlX3NldHVwKCksIGJsa190cmFjZV9zZXR1cDIoKSwgY29tcGF0X2Jsa190cmFjZV9zZXR1cCgpLCBhbmQgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKCksIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGJsb2NrIGRldmljZSBpb2N0bHMgYW5kIHN5c2ZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjoyOTowOS4xMTA4MzcyMzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODUyNDQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM1OGNmZTY0NTZjODQ2M2I3MTcwNDliOTk2MDE5NjBjOTAzOTY4YThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMzEgMjI6Mjk6MDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuY1xcbmluZGV4IDhjZDI1MjBiNGM5OWUuLmMyMzI0Mjk4YzZjMTUgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNcXG4rKysgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuY1xcbkBAIC02MCw3ICs2MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgdHJhY2VyX2ZsYWdzIGJsa190cmFjZXJfZmxhZ3MgPSB7XFxuIHN0YXRpYyBERUZJTkVfTVVURVgoYmxrX3Byb2JlX211dGV4KTtcXG4gc3RhdGljIGludCBibGtfcHJvYmVzX3JlZjtcXG4gXFxuLXN0YXRpYyB2b2lkIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKTtcXG4rc3RhdGljIGludCBibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZCk7XFxuIHN0YXRpYyB2b2lkIGJsa191bnJlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpO1xcbiBcXG4gc3RhdGljIHZvaWQgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50KHN0cnVjdCBibGtfaW9fdHJhY2UgKnQsIHBpZF90IHBpZCwgaW50IGNwdSxcXG5AQCAtNDg1LDEyICs0ODUsMTggQEAgc3RhdGljIHZvaWQgYmxrX3RyYWNlX2ZyZWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBibGtfdHJhY2UgKmJ0KVxcbiBcXHRrZnJlZShidCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGdldF9wcm9iZV9yZWYodm9pZClcXG4rc3RhdGljIGludCBnZXRfcHJvYmVfcmVmKHZvaWQpXFxuIHtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZibGtfcHJvYmVfbXV0ZXgpO1xcbi1cXHRpZiAoKytibGtfcHJvYmVzX3JlZiA9PSAxKVxcbi1cXHRcXHRibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHMoKTtcXG4rXFx0aWYgKCsrYmxrX3Byb2Jlc19yZWYgPT0gMSkge1xcbitcXHRcXHRyZXQgPSBibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHMoKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0YmxrX3Byb2Jlc19yZWYtLTtcXG4rXFx0fVxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmJsa19wcm9iZV9tdXRleCk7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHB1dF9wcm9iZV9yZWYodm9pZClcXG5AQCAtNzI3LDEyICs3MzMsMTQgQEAgc3RhdGljIHN0cnVjdCBibGtfdHJhY2UgKmJsa190cmFjZV9zZXR1cF9wcmVwYXJlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbiBcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXFxuLVxcdFxcdFxcdFxcdCAgICAgY2hhciAqbmFtZSwgaW50IHZlcnNpb24sXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJsa190cmFjZSAqYnQsXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJsa191c2VyX3RyYWNlX3NldHVwMiAqYnV0cylcXG4rc3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXFxuK1xcdFxcdFxcdFxcdCAgICBjaGFyICpuYW1lLCBpbnQgdmVyc2lvbixcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBibGtfdHJhY2UgKmJ0LFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IGJsa191c2VyX3RyYWNlX3NldHVwMiAqYnV0cylcXG4gXFxuIHtcXG4rXFx0aW50IHJldDtcXG4rXFxuIFxcdHN0cnNjcHlfcGFkKGJ1dHMtXFx1MDAzZW5hbWUsIG5hbWUsIEJMS1RSQUNFX0JERVZfU0laRTIpO1xcbiBcXG4gXFx0LypcXG5AQCAtNzU1LDggKzc2MywxMiBAQCBzdGF0aWMgdm9pZCBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXFxuIFxcdGJ0LVxcdTAwM2VwaWQgPSBidXRzLVxcdTAwM2VwaWQ7XFxuIFxcdGJ0LVxcdTAwM2V0cmFjZV9zdGF0ZSA9IEJsa3RyYWNlX3NldHVwO1xcbiBcXG4rXFx0cmV0ID0gZ2V0X3Byb2JlX3JlZigpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4gXFx0cmN1X2Fzc2lnbl9wb2ludGVyKHEtXFx1MDAzZWJsa190cmFjZSwgYnQpO1xcbi1cXHRnZXRfcHJvYmVfcmVmKCk7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBpbnQgYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXFxuQEAgLTc5Miw3ICs4MDQsMTIgQEAgaW50IGJsa190cmFjZV9zZXR1cChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSwgZGV2X3QgZGV2LFxcbiBcXHRcXHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihidCk7XFxuIFxcdH1cXG4tXFx0YmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDEsIGJ0LCBcXHUwMDI2YnV0czIpO1xcbitcXHRyZXQgPSBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMSwgYnQsIFxcdTAwMjZidXRzMik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0YmxrX3RyYWNlX2ZyZWUocSwgYnQpO1xcbitcXHRcXHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuIFxcdHN0cnNjcHkoYnV0cy5uYW1lLCBidXRzMi5uYW1lLCBCTEtUUkFDRV9CREVWX1NJWkUpO1xcbiBcXHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xcbiBcXG5AQCAtODEwLDYgKzgyNyw3IEBAIHN0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwMihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSwgZGV2X3QgZGV2LFxcbiBcXHRzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAyIGJ1dHMyO1xcbiBcXHRzdHJ1Y3QgYmxrX3RyYWNlICpidDtcXG4gXFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZidXRzMiwgYXJnLCBzaXplb2YoYnV0czIpKSlcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuQEAgLTgyNyw3ICs4NDUsMTIgQEAgc3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXAyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXFxuIFxcdFxcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKGJ0KTtcXG4gXFx0fVxcbi1cXHRibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMiwgYnQsIFxcdTAwMjZidXRzMik7XFxuK1xcdHJldCA9IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAyLCBidCwgXFx1MDAyNmJ1dHMyKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRibGtfdHJhY2VfZnJlZShxLCBidCk7XFxuK1xcdFxcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4gXFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcXG4gXFxuIFxcdGlmIChjb3B5X3RvX3VzZXIoYXJnLCBcXHUwMDI2YnV0czIsIHNpemVvZihidXRzMikpKSB7XFxuQEAgLTg0Niw2ICs4NjksNyBAQCBzdGF0aWMgaW50IGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsXFxuIFxcdHN0cnVjdCBjb21wYXRfYmxrX3VzZXJfdHJhY2Vfc2V0dXAgY2J1dHM7XFxuIFxcdHN0cnVjdCBibGtfdHJhY2UgKmJ0O1xcbiBcXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmNidXRzLCBhcmcsIHNpemVvZihjYnV0cykpKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG5AQCAtODY5LDcgKzg5MywxMiBAQCBzdGF0aWMgaW50IGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsXFxuIFxcdFxcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKGJ0KTtcXG4gXFx0fVxcbi1cXHRibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMSwgYnQsIFxcdTAwMjZidXRzMik7XFxuK1xcdHJldCA9IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAxLCBidCwgXFx1MDAyNmJ1dHMyKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRibGtfdHJhY2VfZnJlZShxLCBidCk7XFxuK1xcdFxcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4gXFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcXG4gXFxuIFxcdGlmIChjb3B5X3RvX3VzZXIoYXJnLCBcXHUwMDI2YnV0czIubmFtZSwgQVJSQVlfU0laRShidXRzMi5uYW1lKSkpIHtcXG5AQCAtMTMyNCw0OSArMTM1MywxMDggQEAgdm9pZCBibGtfYWRkX2RyaXZlcl9kYXRhKHN0cnVjdCByZXF1ZXN0ICpycSwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChibGtfYWRkX2RyaXZlcl9kYXRhKTtcXG4gXFxuLXN0YXRpYyB2b2lkIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKVxcbitzdGF0aWMgaW50IGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9pbnNlcnQoYmxrX2FkZF90cmFjZV9ycV9pbnNlcnQsIE5VTEwpO1xcbi1cXHRXQVJOX09OKHJldCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9pc3N1ZShibGtfYWRkX3RyYWNlX3JxX2lzc3VlLCBOVUxMKTtcXG4tXFx0V0FSTl9PTihyZXQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9ycV9pbnNlcnQ7XFxuIFxcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX21lcmdlKGJsa19hZGRfdHJhY2VfcnFfbWVyZ2UsIE5VTEwpO1xcbi1cXHRXQVJOX09OKHJldCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3JxX2lzc3VlO1xcbiBcXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9yZXF1ZXVlKGJsa19hZGRfdHJhY2VfcnFfcmVxdWV1ZSwgTlVMTCk7XFxuLVxcdFdBUk5fT04ocmV0KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcnFfbWVyZ2U7XFxuIFxcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2NvbXBsZXRlKGJsa19hZGRfdHJhY2VfcnFfY29tcGxldGUsIE5VTEwpO1xcbi1cXHRXQVJOX09OKHJldCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3JxX3JlcXVldWU7XFxuIFxcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19jb21wbGV0ZShibGtfYWRkX3RyYWNlX2Jpb19jb21wbGV0ZSwgTlVMTCk7XFxuLVxcdFdBUk5fT04ocmV0KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcnFfY29tcGxldGU7XFxuIFxcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19iYWNrbWVyZ2UoYmxrX2FkZF90cmFjZV9iaW9fYmFja21lcmdlLCBOVUxMKTtcXG4tXFx0V0FSTl9PTihyZXQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9iaW9fY29tcGxldGU7XFxuIFxcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19mcm9udG1lcmdlKGJsa19hZGRfdHJhY2VfYmlvX2Zyb250bWVyZ2UsIE5VTEwpO1xcbi1cXHRXQVJOX09OKHJldCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X2Jpb19iYWNrbWVyZ2U7XFxuIFxcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19xdWV1ZShibGtfYWRkX3RyYWNlX2Jpb19xdWV1ZSwgTlVMTCk7XFxuLVxcdFdBUk5fT04ocmV0KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfYmlvX2Zyb250bWVyZ2U7XFxuIFxcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2dldHJxKGJsa19hZGRfdHJhY2VfZ2V0cnEsIE5VTEwpO1xcbi1cXHRXQVJOX09OKHJldCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X2Jpb19xdWV1ZTtcXG4gXFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxrX3pvbmVfYXBwZW5kX3VwZGF0ZV9yZXF1ZXN0X2JpbyhcXG4gXFx0XFx0YmxrX2FkZF90cmFjZV96b25lX3VwZGF0ZV9yZXF1ZXN0LCBOVUxMKTtcXG4tXFx0V0FSTl9PTihyZXQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9nZXRycTtcXG4gXFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfZGlza196b25lX3dwbHVnX2FkZF9iaW8oYmxrX2FkZF90cmFjZV96b25lX3BsdWcsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgTlVMTCk7XFxuLVxcdFdBUk5fT04ocmV0KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfem9uZV91cGRhdGVfcmVxdWVzdDtcXG4gXFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxrX3pvbmVfd3BsdWdfYmlvKGJsa19hZGRfdHJhY2Vfem9uZV91bnBsdWcsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdE5VTEwpO1xcbi1cXHRXQVJOX09OKHJldCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3pvbmVfcGx1ZztcXG4gXFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcGx1ZyhibGtfYWRkX3RyYWNlX3BsdWcsIE5VTEwpO1xcbi1cXHRXQVJOX09OKHJldCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3pvbmVfdW5wbHVnO1xcbiBcXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWcoYmxrX2FkZF90cmFjZV91bnBsdWcsIE5VTEwpO1xcbi1cXHRXQVJOX09OKHJldCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3BsdWc7XFxuIFxcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3NwbGl0KGJsa19hZGRfdHJhY2Vfc3BsaXQsIE5VTEwpO1xcbi1cXHRXQVJOX09OKHJldCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3VucGx1ZztcXG4gXFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX3JlbWFwKGJsa19hZGRfdHJhY2VfYmlvX3JlbWFwLCBOVUxMKTtcXG4tXFx0V0FSTl9PTihyZXQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9zcGxpdDtcXG4gXFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfcmVtYXAoYmxrX2FkZF90cmFjZV9ycV9yZW1hcCwgTlVMTCk7XFxuLVxcdFdBUk5fT04ocmV0KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfYmlvX3JlbWFwO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitvdXRfYmlvX3JlbWFwOlxcbitcXHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19yZW1hcChibGtfYWRkX3RyYWNlX2Jpb19yZW1hcCwgTlVMTCk7XFxuK291dF9zcGxpdDpcXG4rXFx0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19zcGxpdChibGtfYWRkX3RyYWNlX3NwbGl0LCBOVUxMKTtcXG4rb3V0X3VucGx1ZzpcXG4rXFx0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWcoYmxrX2FkZF90cmFjZV91bnBsdWcsIE5VTEwpO1xcbitvdXRfcGx1ZzpcXG4rXFx0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19wbHVnKGJsa19hZGRfdHJhY2VfcGx1ZywgTlVMTCk7XFxuK291dF96b25lX3VucGx1ZzpcXG4rXFx0dW5yZWdpc3Rlcl90cmFjZV9ibGtfem9uZV93cGx1Z19iaW8oYmxrX2FkZF90cmFjZV96b25lX3VucGx1ZywgTlVMTCk7XFxuK291dF96b25lX3BsdWc6XFxuK1xcdHVucmVnaXN0ZXJfdHJhY2VfZGlza196b25lX3dwbHVnX2FkZF9iaW8oYmxrX2FkZF90cmFjZV96b25lX3BsdWcsIE5VTEwpO1xcbitvdXRfem9uZV91cGRhdGVfcmVxdWVzdDpcXG4rXFx0dW5yZWdpc3Rlcl90cmFjZV9ibGtfem9uZV9hcHBlbmRfdXBkYXRlX3JlcXVlc3RfYmlvKFxcbitcXHRcXHRibGtfYWRkX3RyYWNlX3pvbmVfdXBkYXRlX3JlcXVlc3QsIE5VTEwpO1xcbitvdXRfZ2V0cnE6XFxuK1xcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfZ2V0cnEoYmxrX2FkZF90cmFjZV9nZXRycSwgTlVMTCk7XFxuK291dF9iaW9fcXVldWU6XFxuK1xcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX3F1ZXVlKGJsa19hZGRfdHJhY2VfYmlvX3F1ZXVlLCBOVUxMKTtcXG4rb3V0X2Jpb19mcm9udG1lcmdlOlxcbitcXHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19mcm9udG1lcmdlKGJsa19hZGRfdHJhY2VfYmlvX2Zyb250bWVyZ2UsIE5VTEwpO1xcbitvdXRfYmlvX2JhY2ttZXJnZTpcXG4rXFx0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fYmFja21lcmdlKGJsa19hZGRfdHJhY2VfYmlvX2JhY2ttZXJnZSwgTlVMTCk7XFxuK291dF9iaW9fY29tcGxldGU6XFxuK1xcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2NvbXBsZXRlKGJsa19hZGRfdHJhY2VfYmlvX2NvbXBsZXRlLCBOVUxMKTtcXG4rb3V0X3JxX2NvbXBsZXRlOlxcbitcXHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2NvbXBsZXRlKGJsa19hZGRfdHJhY2VfcnFfY29tcGxldGUsIE5VTEwpO1xcbitvdXRfcnFfcmVxdWV1ZTpcXG4rXFx0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9yZXF1ZXVlKGJsa19hZGRfdHJhY2VfcnFfcmVxdWV1ZSwgTlVMTCk7XFxuK291dF9ycV9tZXJnZTpcXG4rXFx0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9tZXJnZShibGtfYWRkX3RyYWNlX3JxX21lcmdlLCBOVUxMKTtcXG4rb3V0X3JxX2lzc3VlOlxcbitcXHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2lzc3VlKGJsa19hZGRfdHJhY2VfcnFfaXNzdWUsIE5VTEwpO1xcbitvdXRfcnFfaW5zZXJ0OlxcbitcXHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2luc2VydChibGtfYWRkX3RyYWNlX3JxX2luc2VydCwgTlVMTCk7XFxuK1xcdHRyYWNlcG9pbnRfc3luY2hyb25pemVfdW5yZWdpc3RlcigpO1xcbitvdXQ6XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGJsa191bnJlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpXFxuQEAgLTE5MTYsOCArMjAwNCwxMSBAQCBzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG4gXFxuIFxcdGJsa190cmFjZV9zZXR1cF9sYmEoYnQsIGJkZXYpO1xcbiBcXG4rXFx0cmV0ID0gZ2V0X3Byb2JlX3JlZigpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGZyZWVfYnQ7XFxuK1xcbiBcXHRyY3VfYXNzaWduX3BvaW50ZXIocS1cXHUwMDNlYmxrX3RyYWNlLCBidCk7XFxuLVxcdGdldF9wcm9iZV9yZWYoKTtcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiBmcmVlX2J0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjoyOTowOS41Njk5OTQ3MTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM4Mzc5Nzk4Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfSU9fVFJBQ0VcIixcbiAgICBcIkJMT0NLXCIsXG4gICAgXCJTWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa190cmFjZV9pb2N0bFwiLFxuICAgIFwiYmxrX3RyYWNlX3NldHVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYmxrdHJhY2UgdHJhY2Vwb2ludCByZWdpc3RyYXRpb24gYW5kIHNldHVwIGVycm9yIHVud2luZGluZyBwYXRocyBpbiBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy4gSXQgbWFrZXMgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzIHJldHVybiBlcnJvciBjb2RlcyBhbmQgcm9sbGJhY2sgcmVnaXN0ZXJlZCB0cmFjZXBvaW50cyB1cG9uIGZhaWx1cmUsIGFuZCBwcm9wZXJseSBoYW5kbGVzIHRyYWNlcG9pbnQgc2V0dXAgZXJyb3JzIGFjcm9zcyBibGtfdHJhY2Vfc2V0dXAoKSwgYmxrX3RyYWNlX3NldHVwMigpLCBjb21wYXRfYmxrX3RyYWNlX3NldHVwKCksIGFuZCBibGtfdHJhY2Vfc2V0dXBfcXVldWUoKSwgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYmxvY2sgZGV2aWNlIGlvY3RscyBhbmQgc3lzZnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM1OGNmZTY0NTZjODQ2M2I3MTcwNDliOTk2MDE5NjBjOTAzOTY4YThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMjoyOTowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jIGIva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNcbmluZGV4IDhjZDI1MjBiNGM5OWUuLmMyMzI0Mjk4YzZjMTUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuY1xuKysrIGIva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNcbkBAIC02MCw3ICs2MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgdHJhY2VyX2ZsYWdzIGJsa190cmFjZXJfZmxhZ3MgPSB7XG4gc3RhdGljIERFRklORV9NVVRFWChibGtfcHJvYmVfbXV0ZXgpO1xuIHN0YXRpYyBpbnQgYmxrX3Byb2Jlc19yZWY7XG4gXG4tc3RhdGljIHZvaWQgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpO1xuK3N0YXRpYyBpbnQgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpO1xuIHN0YXRpYyB2b2lkIGJsa191bnJlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpO1xuIFxuIHN0YXRpYyB2b2lkIHJlY29yZF9ibGt0cmFjZV9ldmVudChzdHJ1Y3QgYmxrX2lvX3RyYWNlICp0LCBwaWRfdCBwaWQsIGludCBjcHUsXG5AQCAtNDg1LDEyICs0ODUsMTggQEAgc3RhdGljIHZvaWQgYmxrX3RyYWNlX2ZyZWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBibGtfdHJhY2UgKmJ0KVxuIFx0a2ZyZWUoYnQpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBnZXRfcHJvYmVfcmVmKHZvaWQpXG4rc3RhdGljIGludCBnZXRfcHJvYmVfcmVmKHZvaWQpXG4ge1xuK1x0aW50IHJldCA9IDA7XG4rXG4gXHRtdXRleF9sb2NrKFx1MDAyNmJsa19wcm9iZV9tdXRleCk7XG4tXHRpZiAoKytibGtfcHJvYmVzX3JlZiA9PSAxKVxuLVx0XHRibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHMoKTtcbitcdGlmICgrK2Jsa19wcm9iZXNfcmVmID09IDEpIHtcbitcdFx0cmV0ID0gYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0YmxrX3Byb2Jlc19yZWYtLTtcbitcdH1cbiBcdG11dGV4X3VubG9jayhcdTAwMjZibGtfcHJvYmVfbXV0ZXgpO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcHV0X3Byb2JlX3JlZih2b2lkKVxuQEAgLTcyNywxMiArNzMzLDE0IEBAIHN0YXRpYyBzdHJ1Y3QgYmxrX3RyYWNlICpibGtfdHJhY2Vfc2V0dXBfcHJlcGFyZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbiBcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbi1cdFx0XHRcdCAgICAgY2hhciAqbmFtZSwgaW50IHZlcnNpb24sXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBibGtfdHJhY2UgKmJ0LFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAyICpidXRzKVxuK3N0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuK1x0XHRcdFx0ICAgIGNoYXIgKm5hbWUsIGludCB2ZXJzaW9uLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBibGtfdHJhY2UgKmJ0LFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cDIgKmJ1dHMpXG4gXG4ge1xuK1x0aW50IHJldDtcbitcbiBcdHN0cnNjcHlfcGFkKGJ1dHMtXHUwMDNlbmFtZSwgbmFtZSwgQkxLVFJBQ0VfQkRFVl9TSVpFMik7XG4gXG4gXHQvKlxuQEAgLTc1NSw4ICs3NjMsMTIgQEAgc3RhdGljIHZvaWQgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuIFx0YnQtXHUwMDNlcGlkID0gYnV0cy1cdTAwM2VwaWQ7XG4gXHRidC1cdTAwM2V0cmFjZV9zdGF0ZSA9IEJsa3RyYWNlX3NldHVwO1xuIFxuK1x0cmV0ID0gZ2V0X3Byb2JlX3JlZigpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihxLVx1MDAzZWJsa190cmFjZSwgYnQpO1xuLVx0Z2V0X3Byb2JlX3JlZigpO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIGludCBibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldixcbkBAIC03OTIsNyArODA0LDEyIEBAIGludCBibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldixcbiBcdFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcbiBcdFx0cmV0dXJuIFBUUl9FUlIoYnQpO1xuIFx0fVxuLVx0YmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDEsIGJ0LCBcdTAwMjZidXRzMik7XG4rXHRyZXQgPSBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMSwgYnQsIFx1MDAyNmJ1dHMyKTtcbitcdGlmIChyZXQpIHtcbitcdFx0YmxrX3RyYWNlX2ZyZWUocSwgYnQpO1xuK1x0XHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuIFx0c3Ryc2NweShidXRzLm5hbWUsIGJ1dHMyLm5hbWUsIEJMS1RSQUNFX0JERVZfU0laRSk7XG4gXHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuIFxuQEAgLTgxMCw2ICs4MjcsNyBAQCBzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cDIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldixcbiBcdHN0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cDIgYnV0czI7XG4gXHRzdHJ1Y3QgYmxrX3RyYWNlICpidDtcbiBcdHVuc2lnbmVkIGludCBtZW1mbGFncztcbitcdGludCByZXQ7XG4gXG4gXHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2YnV0czIsIGFyZywgc2l6ZW9mKGJ1dHMyKSkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuQEAgLTgyNyw3ICs4NDUsMTIgQEAgc3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXAyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXG4gXHRcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XG4gXHRcdHJldHVybiBQVFJfRVJSKGJ0KTtcbiBcdH1cbi1cdGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAyLCBidCwgXHUwMDI2YnV0czIpO1xuK1x0cmV0ID0gYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDIsIGJ0LCBcdTAwMjZidXRzMik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcbitcdFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XG4gXG4gXHRpZiAoY29weV90b191c2VyKGFyZywgXHUwMDI2YnV0czIsIHNpemVvZihidXRzMikpKSB7XG5AQCAtODQ2LDYgKzg2OSw3IEBAIHN0YXRpYyBpbnQgY29tcGF0X2Jsa190cmFjZV9zZXR1cChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSxcbiBcdHN0cnVjdCBjb21wYXRfYmxrX3VzZXJfdHJhY2Vfc2V0dXAgY2J1dHM7XG4gXHRzdHJ1Y3QgYmxrX3RyYWNlICpidDtcbiBcdHVuc2lnbmVkIGludCBtZW1mbGFncztcbitcdGludCByZXQ7XG4gXG4gXHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2Y2J1dHMsIGFyZywgc2l6ZW9mKGNidXRzKSkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuQEAgLTg2OSw3ICs4OTMsMTIgQEAgc3RhdGljIGludCBjb21wYXRfYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLFxuIFx0XHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuIFx0XHRyZXR1cm4gUFRSX0VSUihidCk7XG4gXHR9XG4tXHRibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMSwgYnQsIFx1MDAyNmJ1dHMyKTtcbitcdHJldCA9IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAxLCBidCwgXHUwMDI2YnV0czIpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRibGtfdHJhY2VfZnJlZShxLCBidCk7XG4rXHRcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4gXHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuIFxuIFx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFx1MDAyNmJ1dHMyLm5hbWUsIEFSUkFZX1NJWkUoYnV0czIubmFtZSkpKSB7XG5AQCAtMTMyNCw0OSArMTM1MywxMDggQEAgdm9pZCBibGtfYWRkX2RyaXZlcl9kYXRhKHN0cnVjdCByZXF1ZXN0ICpycSwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoYmxrX2FkZF9kcml2ZXJfZGF0YSk7XG4gXG4tc3RhdGljIHZvaWQgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpXG4rc3RhdGljIGludCBibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZClcbiB7XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfaW5zZXJ0KGJsa19hZGRfdHJhY2VfcnFfaW5zZXJ0LCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0O1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfaXNzdWUoYmxrX2FkZF90cmFjZV9ycV9pc3N1ZSwgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9ycV9pbnNlcnQ7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9tZXJnZShibGtfYWRkX3RyYWNlX3JxX21lcmdlLCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3JxX2lzc3VlO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfcmVxdWV1ZShibGtfYWRkX3RyYWNlX3JxX3JlcXVldWUsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcnFfbWVyZ2U7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9jb21wbGV0ZShibGtfYWRkX3RyYWNlX3JxX2NvbXBsZXRlLCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3JxX3JlcXVldWU7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fY29tcGxldGUoYmxrX2FkZF90cmFjZV9iaW9fY29tcGxldGUsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcnFfY29tcGxldGU7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fYmFja21lcmdlKGJsa19hZGRfdHJhY2VfYmlvX2JhY2ttZXJnZSwgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9iaW9fY29tcGxldGU7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fZnJvbnRtZXJnZShibGtfYWRkX3RyYWNlX2Jpb19mcm9udG1lcmdlLCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X2Jpb19iYWNrbWVyZ2U7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fcXVldWUoYmxrX2FkZF90cmFjZV9iaW9fcXVldWUsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfYmlvX2Zyb250bWVyZ2U7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19nZXRycShibGtfYWRkX3RyYWNlX2dldHJxLCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X2Jpb19xdWV1ZTtcbiBcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsa196b25lX2FwcGVuZF91cGRhdGVfcmVxdWVzdF9iaW8oXG4gXHRcdGJsa19hZGRfdHJhY2Vfem9uZV91cGRhdGVfcmVxdWVzdCwgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9nZXRycTtcbiBcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Rpc2tfem9uZV93cGx1Z19hZGRfYmlvKGJsa19hZGRfdHJhY2Vfem9uZV9wbHVnLFxuIFx0XHRcdFx0XHRcdCAgICAgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF96b25lX3VwZGF0ZV9yZXF1ZXN0O1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxrX3pvbmVfd3BsdWdfYmlvKGJsa19hZGRfdHJhY2Vfem9uZV91bnBsdWcsXG4gXHRcdFx0XHRcdFx0TlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF96b25lX3BsdWc7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19wbHVnKGJsa19hZGRfdHJhY2VfcGx1ZywgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF96b25lX3VucGx1ZztcbiBcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3VucGx1ZyhibGtfYWRkX3RyYWNlX3VucGx1ZywgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9wbHVnO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfc3BsaXQoYmxrX2FkZF90cmFjZV9zcGxpdCwgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF91bnBsdWc7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fcmVtYXAoYmxrX2FkZF90cmFjZV9iaW9fcmVtYXAsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfc3BsaXQ7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9yZW1hcChibGtfYWRkX3RyYWNlX3JxX3JlbWFwLCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X2Jpb19yZW1hcDtcbitcbitcdHJldHVybiAwO1xuK1xuK291dF9iaW9fcmVtYXA6XG4rXHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19yZW1hcChibGtfYWRkX3RyYWNlX2Jpb19yZW1hcCwgTlVMTCk7XG4rb3V0X3NwbGl0OlxuK1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19zcGxpdChibGtfYWRkX3RyYWNlX3NwbGl0LCBOVUxMKTtcbitvdXRfdW5wbHVnOlxuK1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWcoYmxrX2FkZF90cmFjZV91bnBsdWcsIE5VTEwpO1xuK291dF9wbHVnOlxuK1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19wbHVnKGJsa19hZGRfdHJhY2VfcGx1ZywgTlVMTCk7XG4rb3V0X3pvbmVfdW5wbHVnOlxuK1x0dW5yZWdpc3Rlcl90cmFjZV9ibGtfem9uZV93cGx1Z19iaW8oYmxrX2FkZF90cmFjZV96b25lX3VucGx1ZywgTlVMTCk7XG4rb3V0X3pvbmVfcGx1ZzpcbitcdHVucmVnaXN0ZXJfdHJhY2VfZGlza196b25lX3dwbHVnX2FkZF9iaW8oYmxrX2FkZF90cmFjZV96b25lX3BsdWcsIE5VTEwpO1xuK291dF96b25lX3VwZGF0ZV9yZXF1ZXN0OlxuK1x0dW5yZWdpc3Rlcl90cmFjZV9ibGtfem9uZV9hcHBlbmRfdXBkYXRlX3JlcXVlc3RfYmlvKFxuK1x0XHRibGtfYWRkX3RyYWNlX3pvbmVfdXBkYXRlX3JlcXVlc3QsIE5VTEwpO1xuK291dF9nZXRycTpcbitcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfZ2V0cnEoYmxrX2FkZF90cmFjZV9nZXRycSwgTlVMTCk7XG4rb3V0X2Jpb19xdWV1ZTpcbitcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX3F1ZXVlKGJsa19hZGRfdHJhY2VfYmlvX3F1ZXVlLCBOVUxMKTtcbitvdXRfYmlvX2Zyb250bWVyZ2U6XG4rXHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19mcm9udG1lcmdlKGJsa19hZGRfdHJhY2VfYmlvX2Zyb250bWVyZ2UsIE5VTEwpO1xuK291dF9iaW9fYmFja21lcmdlOlxuK1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fYmFja21lcmdlKGJsa19hZGRfdHJhY2VfYmlvX2JhY2ttZXJnZSwgTlVMTCk7XG4rb3V0X2Jpb19jb21wbGV0ZTpcbitcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2NvbXBsZXRlKGJsa19hZGRfdHJhY2VfYmlvX2NvbXBsZXRlLCBOVUxMKTtcbitvdXRfcnFfY29tcGxldGU6XG4rXHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2NvbXBsZXRlKGJsa19hZGRfdHJhY2VfcnFfY29tcGxldGUsIE5VTEwpO1xuK291dF9ycV9yZXF1ZXVlOlxuK1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9yZXF1ZXVlKGJsa19hZGRfdHJhY2VfcnFfcmVxdWV1ZSwgTlVMTCk7XG4rb3V0X3JxX21lcmdlOlxuK1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9tZXJnZShibGtfYWRkX3RyYWNlX3JxX21lcmdlLCBOVUxMKTtcbitvdXRfcnFfaXNzdWU6XG4rXHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2lzc3VlKGJsa19hZGRfdHJhY2VfcnFfaXNzdWUsIE5VTEwpO1xuK291dF9ycV9pbnNlcnQ6XG4rXHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2luc2VydChibGtfYWRkX3RyYWNlX3JxX2luc2VydCwgTlVMTCk7XG4rXHR0cmFjZXBvaW50X3N5bmNocm9uaXplX3VucmVnaXN0ZXIoKTtcbitvdXQ6XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBibGtfdW5yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKVxuQEAgLTE5MTYsOCArMjAwNCwxMSBAQCBzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbiBcbiBcdGJsa190cmFjZV9zZXR1cF9sYmEoYnQsIGJkZXYpO1xuIFxuK1x0cmV0ID0gZ2V0X3Byb2JlX3JlZigpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBmcmVlX2J0O1xuK1xuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKHEtXHUwMDNlYmxrX3RyYWNlLCBidCk7XG4tXHRnZXRfcHJvYmVfcmVmKCk7XG4gXHRyZXR1cm4gMDtcbiBcbiBmcmVlX2J0OlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6Mjk6MDkuNTY5OTk2MzE0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDY2NzA1MTU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJsa3RyYWNlIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQgaW50cm9kdWNlcyBhbnkgbmV3IGZ1bmN0aW9uYWxpdHkgdGhhdCB3YXJyYW50cyBzb21lIGZ1enppbmcgYXR0ZW50aW9uLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgdGhpcyBpcyBwcmltYXJpbHkgZm9jdXNlZCBvbiB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIGluaXRpYWxpemF0aW9uIG9mIGJsa3RyYWNlIHdpdGhpbiB0aGUga2VybmVsJ3MgdHJhY2luZyBmcmFtZXdvcmsuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBpbiBga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNgLiBUaGUgbW9zdCBzaWduaWZpY2FudCBhZGp1c3RtZW50IHNlZW1zIHRvIGJlIHRoYXQgYGJsa19yZWdpc3Rlcl90cmFjZXBvaW50c2Agbm93IHJldHVybnMgYW4gaW50ZWdlciwgYW4gZXJyb3IgY29kZSwgcmF0aGVyIHRoYW4gdm9pZC4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIOKAkyBpdCBzdWdnZXN0cyBhIHNoaWZ0IHRvd2FyZHMgbW9yZSByb2J1c3QgZXJyb3IgY2hlY2tpbmcgZHVyaW5nIHRyYWNlcG9pbnQgcmVnaXN0cmF0aW9uLiBUaGUgcGF0Y2ggdGhlbiBzaG93cyB0aGF0IGlmIGFueSBvZiB0aGUgYHJlZ2lzdGVyX3RyYWNlXypgIGNhbGxzIGZhaWwgZHVyaW5nIHRoZSByZWdpc3RyYXRpb24sIGl0IGNvcnJlY3RseSB1bndpbmRzIGJ5IHVzaW5nIGB0cmFjZXBvaW50X3N5bmNocm9uaXplX3VucmVnaXN0ZXIoKWAgdG8gY2xlYW4gdXAgYW55IHByZXZpb3VzbHkgcmVnaXN0ZXJlZCB0cmFjZXBvaW50cy4gVGhhdCBpcyBhIGdvb2QsIGltcG9ydGFudCBjaGFuZ2UgZm9yIGF2b2lkaW5nIHJlc291cmNlIGxlYWtzIGFuZCBwb3RlbnRpYWxseSBjb3JydXB0aW5nIHRyYWNlIGRhdGEuXG5cblRoZSBzdWJzZXF1ZW50IGNoYW5nZXMgY2FzY2FkZSBmcm9tIHRoaXMuIEZ1bmN0aW9ucyBsaWtlIGBnZXRfcHJvYmVfcmVmKClgIG5vdyBjaGVjayB0aGUgcmV0dXJuIHZhbHVlIG9mIGBibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHMoKWAuIElmIHJlZ2lzdHJhdGlvbiBmYWlscywgYGJsa19wcm9iZXNfcmVmYCBpcyBkZWNyZW1lbnRlZCwgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBlcnJvciBjb2RlLiBTaW1pbGFybHksIGBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUoKWAgbm93IGNhbGxzIGBnZXRfcHJvYmVfcmVmKClgIGJlZm9yZSBzZXR0aW5nIHRoZSBSQ1UgcG9pbnRlciwgYW5kIHRoYXQncyBjcml0aWNhbCB0byBtYWtlIHN1cmUgdGhlIHNldHVwIGhhcHBlbnMgY29ycmVjdGx5LiBXZSBhcmUgYXZvaWRpbmcgdGhlIHVzZSBvZiBhbiB1bmluaXRpYWxpemVkIG9yIGJyb2tlbiBgYmxrX3RyYWNlYC4gVGhlIGNhbGxzIHRvIGBibGtfdHJhY2Vfc2V0dXBgLCBgYmxrX3RyYWNlX3NldHVwMmAsIGBjb21wYXRfYmxrX3RyYWNlX3NldHVwYCwgYW5kIGBibGtfdHJhY2Vfc2V0dXBfcXVldWVgIGhhdmUgYmVlbiBtb2RpZmllZCB0byBoYW5kbGUgdGhlIHBvdGVudGlhbCBlcnJvciByZXR1cm4gZnJvbSBgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKClgLCBhZ2FpbiBlbnN1cmluZyBhIHNhZmUgYW5kIGNsZWFuIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuXG5cblRvIGNvbmZpcm0gdGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uIGNhbGxzLCBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AgYW5kIEtjb25maWcgdG8gc2VlIGhvdyBibGt0cmFjZSBpcyBhY3R1YWxseSB1c2VkIGFuZCBob3cgaXQncyBpbnRlZ3JhdGVkIGludG8gdGhlIHN5c3RlbS4gTGV0IG1lIHJ1biBgZ3JlcHBlcmAgb3IgY2hlY2sgdGhlIEtjb25maWcgY29uZmlndXJhdGlvbiB0byBnZXQgYSBiZXR0ZXIgb3ZlcnZpZXcgb2Ygd2hhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIG1lYW50IHRvIGRvLCBhbmQgd2hvIGlzIGNhbGxpbmcgdGhlbS4gVGhpcyB3aWxsIGhlbHAgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBuZXcgY29kZSBwYXRocyB0aGF0IG1pZ2h0IG5lZWQgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM2MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjI5OjE0LjIzNzA1MDI1NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTkxNzg3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCTEtfREVWX0lPX1RSQUNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZz03MTc9Y29uZmlnIEJSQU5DSF9UUkFDRVJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTczMC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo3MzE6Y29uZmlnIEJMS19ERVZfSU9fVFJBQ0VcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy03MzItXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgdHJhY2luZyBibG9jayBJTyBhY3Rpb25zXFxcIlxcbi0tXFxua2VybmVsL3RyYWNlL01ha2VmaWxlPTkxPW9iai0kKENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HKSArPSB0cmFjZV9icmFuY2gub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo5MjpvYmotJChDT05GSUdfQkxLX0RFVl9JT19UUkFDRSkgKz0gYmxrdHJhY2Uub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS05My1vYmotJChDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSKSArPSBmZ3JhcGgub1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjgtXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6Mjk6I2lmZGVmIENPTkZJR19CTEtfREVWX0lPX1RSQUNFXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMzAtXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0yMTYyPXN0YXRpYyBzc2l6ZV90IHN5c2ZzX2Jsa190cmFjZV9hdHRyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIyMjctfVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIyMjg6I2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lPX1RSQUNFICovXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjIyOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6Mjk6MTQuMjgyOTc0NjkzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQyNTc2MTUxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBUcmFjZXBvaW50IERlcGVuZGVuY2llcyBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHNvbWUgdHJhY2luZyBmdW5jdGlvbmFsaXR5LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHVzdWFsbHkgdGhlIHBsYWNlIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgYXJlIGRlZmluZWQuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgdG8gYXJvdW5kIGxpbmUgNzMwIOKAkyB0aGF0J3Mgb2Z0ZW4gd2hlcmUgcmVsYXRlZCBvcHRpb25zIGFyZSBjbHVzdGVyZWQgdG9nZXRoZXIsIG9yIGF0IGxlYXN0IGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgYmxvY2tzIG9mIGNvZGUuIEZyb20gdGhlcmUsIEknbGwgYmUgYWJsZSB0byB0cmFjZSBkb3duIHdoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSBJJ20gaW50ZXJlc3RlZCBpbiBhbmQgdW5kZXJzdGFuZCBpdHMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEl0J3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uIGludG8gd2hhdCBjb21wb25lbnRzIGFyZSB0aWVkIHRvIHRoaXMgdHJhY2Vwb2ludCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTI1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6Mjk6MTcuNzA4NzM4ODA3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcyNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcyNTpcXHRcXHQgIGhpc3RvZ3JhbSBvZiB0aGUgY2FsbGVycywgYnV0IGFjdHVhbGx5IHBsYWNlcyB0aGUgY2FsbGluZ1xcbiA3MjY6XFx0XFx0ICBldmVudHMgaW50byBhIHJ1bm5pbmcgdHJhY2UgYnVmZmVyIHRvIHNlZSB3aGVuIGFuZCB3aGVyZSB0aGVcXG4gNzI3OlxcdFxcdCAgZXZlbnRzIGhhcHBlbmVkLCBhcyB3ZWxsIGFzIHRoZWlyIHJlc3VsdHMuXFxuIDcyODpcXHRcXG4gNzI5OlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbiA3MzA6XFx0XFxuIDczMTpcXHRjb25maWcgQkxLX0RFVl9JT19UUkFDRVxcbiA3MzI6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgdHJhY2luZyBibG9jayBJTyBhY3Rpb25zXFxcIlxcbiA3MzM6XFx0XFx0ZGVwZW5kcyBvbiBTWVNGU1xcbiA3MzQ6XFx0XFx0ZGVwZW5kcyBvbiBCTE9DS1xcbiA3MzU6XFx0XFx0c2VsZWN0IFJFTEFZXFxuIDczNjpcXHRcXHRzZWxlY3QgREVCVUdfRlNcXG4gNzM3OlxcdFxcdHNlbGVjdCBUUkFDRVBPSU5UU1xcbiA3Mzg6XFx0XFx0c2VsZWN0IEdFTkVSSUNfVFJBQ0VSXFxuIDczOTpcXHRcXHRzZWxlY3QgU1RBQ0tUUkFDRVxcbiA3NDA6XFx0XFx0aGVscFxcbiA3NDE6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gdHJhY2UgdGhlIGJsb2NrIGxheWVyIGFjdGlvbnNcXG4gNzQyOlxcdFxcdCAgb24gYSBnaXZlbiBxdWV1ZS4gVHJhY2luZyBhbGxvd3MgeW91IHRvIHNlZSBhbnkgdHJhZmZpYyBoYXBwZW5pbmdcXG4gNzQzOlxcdFxcdCAgb24gYSBibG9jayBkZXZpY2UgcXVldWUuIEZvciBtb3JlIGluZm9ybWF0aW9uIChhbmQgdGhlIHVzZXJzcGFjZVxcbiA3NDQ6XFx0XFx0ICBzdXBwb3J0IHRvb2xzIG5lZWRlZCksIGZldGNoIHRoZSBibGt0cmFjZSB0b29scyBmcm9tOlxcbiA3NDU6XFx0XFxuIDc0NjpcXHRcXHQgIGdpdDovL2dpdC5rZXJuZWwuZGsvYmxrdHJhY2UuZ2l0XFxuIDc0NzpcXHRcXG4gNzQ4OlxcdFxcdCAgVHJhY2luZyBhbHNvIGlzIHBvc3NpYmxlIHVzaW5nIHRoZSBmdHJhY2UgaW50ZXJmYWNlLCBlLmcuOlxcbiA3NDk6XFx0XFxuIDc1MDpcXHRcXHQgICAgZWNobyAxIFxcdTAwM2UgL3N5cy9ibG9jay9zZGEvc2RhMS90cmFjZS9lbmFibGVcXG4gNzUxOlxcdFxcdCAgICBlY2hvIGJsayBcXHUwMDNlIC9zeXMva2VybmVsL3RyYWNpbmcvY3VycmVudF90cmFjZXJcXG4gNzUyOlxcdFxcdCAgICBjYXQgL3N5cy9rZXJuZWwvdHJhY2luZy90cmFjZV9waXBlXFxuIDc1MzpcXHRcXG4gNzU0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6Mjk6MTcuNzA4ODQ2NTk3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzYxMDIxNTUxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZXhhbWluaW5nIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2A6XG5cbioqQW5hbHl6aW5nIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AqKlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgbW9kaWZpY2F0aW9ucyBvciBuZXcgaW50ZXJmYWNlcyBhZGRlZCBzcGVjaWZpY2FsbHkgd2l0aGluIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWVuIGNoYW5nZWQgcmVsYXRpdmUgdG8sIHBlcmhhcHMsIGEgcHJldmlvdXMgdmVyc2lvbiwgb3Igd2hhdCdzICpuZXcqIGhlcmUuIFdoYXQgZnVuY3Rpb25hbGl0aWVzIGFyZSBjb3JlIHRvIHRoaXMgZmlsZT9cblxuVGhlbiwgSSdsbCBzdHJhdGVnaWNhbGx5IG1vdmUgYXJvdW5kIHRob3NlIGtleSBlbnRyeSBwb2ludHMgd2l0aGluIHRoZSBjb2RlLiBJJ2xsIHJlYWQgYXJvdW5kIHRoZSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuIEkgd2FudCB0byBidWlsZCBhIGhpZ2gtbGV2ZWwgdW5kZXJzdGFuZGluZyBvZiB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBjb250cm9sIGZsb3cuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IHRoaW5ncyBhcmUgaW5pdGlhbGl6ZWQsIGhvdyBkYXRhIGlzIGNhcHR1cmVkLCB3aGVyZSBpdCdzIHN0b3JlZCwgYW5kIGhvdyBleHRlcm5hbCBjb21wb25lbnRzIGludGVyYWN0IHdpdGggdGhpcyB0cmFjaW5nIG1lY2hhbmlzbS4gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYW5kIGhvdyBkbyB0aGV5IGZ1bmN0aW9uPyBJJ2xsIHF1aWNrbHkgd2FudCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGdvdGNoYXMgb3IgYXJlYXMgdGhhdCBtaWdodCByZXF1aXJlIGNsb3NlciBhdHRlbnRpb24gZHVyaW5nIGFuYWx5c2lzIG9yIGRldmVsb3BtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjAzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjoyOToyMS4zMTkwNjQxMzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ0OTI0ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrX3RyYWNlX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0yMjc9c3RhdGljIHZvaWQgdHJhY2Vfbm90ZV90aW1lKHN0cnVjdCBibGtfdHJhY2UgKmJ0KVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjQyLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjI0Mzp2b2lkIF9fYmxrX3RyYWNlX25vdGVfbWVzc2FnZShzdHJ1Y3QgYmxrX3RyYWNlICpidCxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yNDQtXFx0XFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yNzctfVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjI3ODpFWFBPUlRfU1lNQk9MX0dQTChfX2Jsa190cmFjZV9ub3RlX21lc3NhZ2UpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTI3OS1cXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTMxMD1zdGF0aWMgdm9pZCBfX2Jsa19hZGRfdHJhY2Uoc3RydWN0IGJsa190cmFjZSAqYnQsIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMzk3LVxcdFxcdFxcdCAqIEZvciBzeXNmcy1lbmFibGVkIHRyYWNpbmcgcGF0aCAoZW5hYmxlZCB2aWFcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzozOTg6XFx0XFx0XFx0ICogL3N5cy9ibG9jay9ERVYvdHJhY2UvZW5hYmxlKSwgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKClcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0zOTktXFx0XFx0XFx0ICogbmV2ZXIgaW5pdGlhbGl6ZXMgYnQtXFx1MDAzZXZlcnNpb24sIGxlYXZpbmcgaXQgMCBmcm9tXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy00NjgtXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NDY5OnN0YXRpYyB2b2lkIGJsa190cmFjZV9mcmVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmxrX3RyYWNlICpidClcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy00NzAte1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9NTAyPXN0YXRpYyB2b2lkIHB1dF9wcm9iZV9yZWYodm9pZClcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTUwOS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo1MTA6c3RhdGljIGludCBibGtfdHJhY2Vfc3RhcnQoc3RydWN0IGJsa190cmFjZSAqYnQpXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNTExLXtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTUyNi1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo1Mjc6c3RhdGljIGludCBibGtfdHJhY2Vfc3RvcChzdHJ1Y3QgYmxrX3RyYWNlICpidClcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01Mjgte1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNTQwLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjU0MTpzdGF0aWMgdm9pZCBibGtfdHJhY2VfY2xlYW51cChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJsa190cmFjZSAqYnQpXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNTQyLXtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo1NDM6XFx0YmxrX3RyYWNlX3N0b3AoYnQpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTU0NC1cXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo1NDU6XFx0YmxrX3RyYWNlX2ZyZWUocSwgYnQpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTU0Ni1cXHRwdXRfcHJvYmVfcmVmKCk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01NDgtXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NTQ5OnN0YXRpYyBpbnQgX19ibGtfdHJhY2VfcmVtb3ZlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTU1MC17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01NTctXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NTU4OlxcdGJsa190cmFjZV9jbGVhbnVwKHEsIGJ0KTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01NTktXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01NjItXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NTYzOmludCBibGtfdHJhY2VfcmVtb3ZlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTU2NC17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01NjctXFx0YmxrX2RlYnVnZnNfbG9ja19ub21lbXNhdmUocSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NTY4OlxcdHJldCA9IF9fYmxrX3RyYWNlX3JlbW92ZShxKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01NjktXFx0YmxrX2RlYnVnZnNfdW5sb2NrX25vbWVtcmVzdG9yZShxKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTU3Mi19XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NTczOkVYUE9SVF9TWU1CT0xfR1BMKGJsa190cmFjZV9yZW1vdmUpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTU3NC1cXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTU5ND1zdGF0aWMgc3NpemVfdCBibGtfbXNnX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNjA3LVxcdGJ0ID0gZmlscC1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjYwODpcXHRfX2Jsa190cmFjZV9ub3RlX21lc3NhZ2UoYnQsIE5VTEwsIFxcXCIlc1xcXCIsIG1zZyk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNjA5LVxcdGtmcmVlKG1zZyk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz02Mzg9c3RhdGljIGNvbnN0IHN0cnVjdCByY2hhbl9jYWxsYmFja3MgYmxrX3JlbGF5X2NhbGxiYWNrcyA9IHtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTY0Mi1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo2NDM6c3RhdGljIHZvaWQgYmxrX3RyYWNlX3NldHVwX2xiYShzdHJ1Y3QgYmxrX3RyYWNlICpidCxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy02NDQtXFx0XFx0XFx0XFx0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTY1Ny0gKi9cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo2NTg6c3RhdGljIHN0cnVjdCBibGtfdHJhY2UgKmJsa190cmFjZV9zZXR1cF9wcmVwYXJlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTY1OS1cXHRcXHRcXHRcXHRcXHRcXHQgY2hhciAqbmFtZSwgZGV2X3QgZGV2LFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNzI1LVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjcyNjpcXHRibGtfdHJhY2Vfc2V0dXBfbGJhKGJ0LCBiZGV2KTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy03MjctXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy03MzAtZXJyOlxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjczMTpcXHRibGtfdHJhY2VfZnJlZShxLCBidCk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNzMyLVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNzM1LVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjczNjpzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy03MzctXFx0XFx0XFx0XFx0ICAgIGNoYXIgKm5hbWUsIGludCB2ZXJzaW9uLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNzczLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjc3NDppbnQgYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNzc1LVxcdFxcdCAgICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODAwLVxcdG1lbWZsYWdzID0gYmxrX2RlYnVnZnNfbG9jayhxKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo4MDE6XFx0YnQgPSBibGtfdHJhY2Vfc2V0dXBfcHJlcGFyZShxLCBuYW1lLCBkZXYsIGJ1dHMuYnVmX3NpemUsIGJ1dHMuYnVmX25yLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTgwMi1cXHRcXHRcXHRcXHQgICAgIGJkZXYpO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODA2LVxcdH1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo4MDc6XFx0cmV0ID0gYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDEsIGJ0LCBcXHUwMDI2YnV0czIpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTgwOC1cXHRpZiAocmV0KSB7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6ODA5OlxcdFxcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04MTAtXFx0XFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTgxNi1cXHRpZiAoY29weV90b191c2VyKGFyZywgXFx1MDAyNmJ1dHMsIHNpemVvZihidXRzKSkpIHtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo4MTc6XFx0XFx0YmxrX3RyYWNlX3JlbW92ZShxKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04MTgtXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04MjEtfVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjgyMjpFWFBPUlRfU1lNQk9MX0dQTChibGtfdHJhY2Vfc2V0dXApO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTgyMy1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo4MjQ6c3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXAyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODI1LVxcdFxcdFxcdCAgICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBjaGFyIF9fdXNlciAqYXJnKVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODQxLVxcdG1lbWZsYWdzID0gYmxrX2RlYnVnZnNfbG9jayhxKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo4NDI6XFx0YnQgPSBibGtfdHJhY2Vfc2V0dXBfcHJlcGFyZShxLCBuYW1lLCBkZXYsIGJ1dHMyLmJ1Zl9zaXplLCBidXRzMi5idWZfbnIsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODQzLVxcdFxcdFxcdFxcdCAgICAgYmRldik7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04NDctXFx0fVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjg0ODpcXHRyZXQgPSBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMiwgYnQsIFxcdTAwMjZidXRzMik7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODQ5LVxcdGlmIChyZXQpIHtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo4NTA6XFx0XFx0YmxrX3RyYWNlX2ZyZWUocSwgYnQpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTg1MS1cXHRcXHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODU2LVxcdGlmIChjb3B5X3RvX3VzZXIoYXJnLCBcXHUwMDI2YnV0czIsIHNpemVvZihidXRzMikpKSB7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6ODU3OlxcdFxcdGJsa190cmFjZV9yZW1vdmUocSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODU4LVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODYzLSNpZiBkZWZpbmVkKENPTkZJR19DT01QQVQpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1g4Nl82NClcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo4NjQ6c3RhdGljIGludCBjb21wYXRfYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTg2NS1cXHRcXHRcXHRcXHQgIGRldl90IGRldiwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTg4OS1cXHRtZW1mbGFncyA9IGJsa19kZWJ1Z2ZzX2xvY2socSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6ODkwOlxcdGJ0ID0gYmxrX3RyYWNlX3NldHVwX3ByZXBhcmUocSwgbmFtZSwgZGV2LCBidXRzMi5idWZfc2l6ZSwgYnV0czIuYnVmX25yLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTg5MS1cXHRcXHRcXHRcXHQgICAgIGJkZXYpO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODk1LVxcdH1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo4OTY6XFx0cmV0ID0gYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDEsIGJ0LCBcXHUwMDI2YnV0czIpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTg5Ny1cXHRpZiAocmV0KSB7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6ODk4OlxcdFxcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04OTktXFx0XFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTkwNC1cXHRpZiAoY29weV90b191c2VyKGFyZywgXFx1MDAyNmJ1dHMyLm5hbWUsIEFSUkFZX1NJWkUoYnV0czIubmFtZSkpKSB7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTA1OlxcdFxcdGJsa190cmFjZV9yZW1vdmUocSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTA2LVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTEyLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjkxMzpzdGF0aWMgaW50IF9fYmxrX3RyYWNlX3N0YXJ0c3RvcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IHN0YXJ0KVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTkxNC17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05MjItXFx0aWYgKHN0YXJ0KVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjkyMzpcXHRcXHRyZXR1cm4gYmxrX3RyYWNlX3N0YXJ0KGJ0KTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05MjQtXFx0ZWxzZVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjkyNTpcXHRcXHRyZXR1cm4gYmxrX3RyYWNlX3N0b3AoYnQpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTkyNi19XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTI3LVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjkyODppbnQgYmxrX3RyYWNlX3N0YXJ0c3RvcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IHN0YXJ0KVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTkyOS17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05MzItXFx0YmxrX2RlYnVnZnNfbG9ja19ub21lbXNhdmUocSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTMzOlxcdHJldCA9IF9fYmxrX3RyYWNlX3N0YXJ0c3RvcChxLCBzdGFydCk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTM0LVxcdGJsa19kZWJ1Z2ZzX3VubG9ja19ub21lbXJlc3RvcmUocSk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05MzctfVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjkzODpFWFBPUlRfU1lNQk9MX0dQTChibGtfdHJhY2Vfc3RhcnRzdG9wKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05MzktXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NDYtLyoqXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTQ3OiAqIGJsa190cmFjZV9pb2N0bCAtIGhhbmRsZSB0aGUgaW9jdGxzIGFzc29jaWF0ZWQgd2l0aCB0cmFjaW5nXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTQ4LSAqIEBiZGV2OlxcdHRoZSBibG9jayBkZXZpY2VcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk1Mi0gKiovXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTUzOmludCBibGtfdHJhY2VfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgY21kLCBjaGFyIF9fdXNlciAqYXJnKVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk1NC17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NjEtXFx0XFx0c25wcmludGYoYiwgc2l6ZW9mKGIpLCBcXFwiJXBnXFxcIiwgYmRldik7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTYyOlxcdFxcdHJldCA9IGJsa190cmFjZV9zZXR1cDIocSwgYiwgYmRldi1cXHUwMDNlYmRfZGV2LCBiZGV2LCBhcmcpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk2My1cXHRcXHRicmVhaztcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk2NS1cXHRcXHRzbnByaW50ZihiLCBzaXplb2YoYiksIFxcXCIlcGdcXFwiLCBiZGV2KTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5NjY6XFx0XFx0cmV0ID0gYmxrX3RyYWNlX3NldHVwKHEsIGIsIGJkZXYtXFx1MDAzZWJkX2RldiwgYmRldiwgYXJnKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NjctXFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NzAtXFx0XFx0c25wcmludGYoYiwgc2l6ZW9mKGIpLCBcXFwiJXBnXFxcIiwgYmRldik7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTcxOlxcdFxcdHJldCA9IGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAocSwgYiwgYmRldi1cXHUwMDNlYmRfZGV2LCBiZGV2LCBhcmcpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk3Mi1cXHRcXHRicmVhaztcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk3Ny1cXHRjYXNlIEJMS1RSQUNFU1RPUDpcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5Nzg6XFx0XFx0cmV0ID0gYmxrX3RyYWNlX3N0YXJ0c3RvcChxLCBzdGFydCk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTc5LVxcdFxcdGJyZWFrO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk4MC1cXHRjYXNlIEJMS1RSQUNFVEVBUkRPV046XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTgxOlxcdFxcdHJldCA9IGJsa190cmFjZV9yZW1vdmUocSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTgyLVxcdFxcdGJyZWFrO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTkwLS8qKlxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjk5MTogKiBibGtfdHJhY2Vfc2h1dGRvd24gLSBzdG9wIGFuZCBjbGVhbnVwIHRyYWNlIHN0cnVjdHVyZXNcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05OTItICogQHE6ICAgIHRoZSByZXF1ZXN0IHF1ZXVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05OTQtICoqL1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjk5NTp2b2lkIGJsa190cmFjZV9zaHV0ZG93bihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05OTYte1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTk4LVxcdFxcdFxcdFxcdCAgICAgIGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2cS1cXHUwMDNlZGVidWdmc19tdXRleCkpKVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjk5OTpcXHRcXHRfX2Jsa190cmFjZV9yZW1vdmUocSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTAwMC19XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDAyLSNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEwMDM6c3RhdGljIHU2NCBibGtfdHJhY2VfYmlvX2dldF9jZ2lkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTAwNC17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDE4LSNlbHNlXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTAxOTpzdGF0aWMgdTY0IGJsa190cmFjZV9iaW9fZ2V0X2NnaWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbylcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDIwLXtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTEwMjU9c3RhdGljIHU2NFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEwMjY6YmxrX3RyYWNlX3JlcXVlc3RfZ2V0X2NnaWQoc3RydWN0IHJlcXVlc3QgKnJxKVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwMjcte1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTAzMC1cXHQvKiBVc2UgdGhlIGZpcnN0IGJpbyAqL1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEwMzE6XFx0cmV0dXJuIGJsa190cmFjZV9iaW9fZ2V0X2NnaWQocnEtXFx1MDAzZXEsIHJxLVxcdTAwM2ViaW8pO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwMzItfVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTA3Mj1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JxX2luc2VydCh2b2lkICppZ25vcmUsIHN0cnVjdCByZXF1ZXN0ICpycSlcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwNzQtXFx0YmxrX2FkZF90cmFjZV9ycShycSwgMCwgYmxrX3JxX2J5dGVzKHJxKSwgQkxLX1RBX0lOU0VSVCxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMDc1OlxcdFxcdFxcdCBibGtfdHJhY2VfcmVxdWVzdF9nZXRfY2dpZChycSkpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwNzYtfVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTA3OD1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JxX2lzc3VlKHZvaWQgKmlnbm9yZSwgc3RydWN0IHJlcXVlc3QgKnJxKVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTA4MC1cXHRibGtfYWRkX3RyYWNlX3JxKHJxLCAwLCBibGtfcnFfYnl0ZXMocnEpLCBCTEtfVEFfSVNTVUUsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTA4MTpcXHRcXHRcXHQgYmxrX3RyYWNlX3JlcXVlc3RfZ2V0X2NnaWQocnEpKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDgyLX1cXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTEwODQ9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9ycV9tZXJnZSh2b2lkICppZ25vcmUsIHN0cnVjdCByZXF1ZXN0ICpycSlcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwODYtXFx0YmxrX2FkZF90cmFjZV9ycShycSwgMCwgYmxrX3JxX2J5dGVzKHJxKSwgQkxLX1RBX0JBQ0tNRVJHRSxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMDg3OlxcdFxcdFxcdCBibGtfdHJhY2VfcmVxdWVzdF9nZXRfY2dpZChycSkpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwODgtfVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTA5MD1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JxX3JlcXVldWUodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDkyLVxcdGJsa19hZGRfdHJhY2VfcnEocnEsIDAsIGJsa19ycV9ieXRlcyhycSksIEJMS19UQV9SRVFVRVVFLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEwOTM6XFx0XFx0XFx0IGJsa190cmFjZV9yZXF1ZXN0X2dldF9jZ2lkKHJxKSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTA5NC19XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMDk2PXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnFfY29tcGxldGUodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDk5LVxcdGJsa19hZGRfdHJhY2VfcnEocnEsIGVycm9yLCBucl9ieXRlcywgQkxLX1RBX0NPTVBMRVRFLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjExMDA6XFx0XFx0XFx0IGJsa190cmFjZV9yZXF1ZXN0X2dldF9jZ2lkKHJxKSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTEwMS19XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMTAzPXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2Vfem9uZV91cGRhdGVfcmVxdWVzdCh2b2lkICppZ25vcmUsIHN0cnVjdCByZXF1ZXN0ICpycSlcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTExMTUtXFx0YmxrX2FkZF90cmFjZV9ycShycSwgMCwgYmxrX3JxX2J5dGVzKHJxKSwgQkxLX1RBX1pPTkVfQVBQRU5ELFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjExMTY6XFx0XFx0XFx0IGJsa190cmFjZV9yZXF1ZXN0X2dldF9jZ2lkKHJxKSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTExNy19XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMTMwPXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfYmlvKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8sXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMTQzLVxcdFxcdFxcdGJpby1cXHUwMDNlYmlfb3BmLCB3aGF0LCBlcnJvciwgMCwgTlVMTCxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMTQ0OlxcdFxcdFxcdGJsa190cmFjZV9iaW9fZ2V0X2NnaWQocSwgYmlvKSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTE0NS1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTEyNDA9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9zcGxpdCh2b2lkICppZ25vcmUsIHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IHBkdSlcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEyNTMtXFx0XFx0XFx0XFx0c2l6ZW9mKHJwZHUpLCBcXHUwMDI2cnBkdSxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMjU0OlxcdFxcdFxcdFxcdGJsa190cmFjZV9iaW9fZ2V0X2NnaWQocSwgYmlvKSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTI1NS1cXHR9XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMjY4PXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfYmlvX3JlbWFwKHZvaWQgKmlnbm9yZSwgc3RydWN0IGJpbyAqYmlvLCBkZXZfdCBkZXYsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjg4LVxcdFxcdFxcdGJsa19zdGF0dXNfdG9fZXJybm8oYmlvLVxcdTAwM2ViaV9zdGF0dXMpLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEyODk6XFx0XFx0XFx0c2l6ZW9mKHIpLCBcXHUwMDI2ciwgYmxrX3RyYWNlX2Jpb19nZXRfY2dpZChxLCBiaW8pKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjkwLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTMwNT1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JxX3JlbWFwKHZvaWQgKmlnbm9yZSwgc3RydWN0IHJlcXVlc3QgKnJxLCBkZXZfdCBkZXYsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMzIzLVxcdFxcdFxcdHJxLVxcdTAwM2VjbWRfZmxhZ3MsIEJMS19UQV9SRU1BUCwgMCxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMzI0OlxcdFxcdFxcdHNpemVvZihyKSwgXFx1MDAyNnIsIGJsa190cmFjZV9yZXF1ZXN0X2dldF9jZ2lkKHJxKSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTMyNS1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTEzMzg9dm9pZCBibGtfYWRkX2RyaXZlcl9kYXRhKHN0cnVjdCByZXF1ZXN0ICpycSwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbilcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEzNTAtXFx0XFx0XFx0XFx0QkxLX1RBX0RSVl9EQVRBLCAwLCBsZW4sIGRhdGEsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTM1MTpcXHRcXHRcXHRcXHRibGtfdHJhY2VfcmVxdWVzdF9nZXRfY2dpZChycSkpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEzNTItXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xODE4PXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBwcmludF9vbmVfbGluZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODUwLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE4NTE6c3RhdGljIGVudW0gcHJpbnRfbGluZV90IGJsa190cmFjZV9ldmVudF9wcmludChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTg1Mi1cXHRcXHRcXHRcXHRcXHQgICAgICAgaW50IGZsYWdzLCBzdHJ1Y3QgdHJhY2VfZXZlbnQgKmV2ZW50KVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTg1Ni1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxODU3OnN0YXRpYyB2b2lkIGJsa190cmFjZV9zeW50aGVzaXplX29sZF90cmFjZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTg1OC17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xODcyPXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE4NzM6YmxrX3RyYWNlX2V2ZW50X3ByaW50X2JpbmFyeShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncyxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODc0LVxcdFxcdFxcdCAgICAgc3RydWN0IHRyYWNlX2V2ZW50ICpldmVudClcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODc1LXtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxODc2OlxcdGJsa190cmFjZV9zeW50aGVzaXplX29sZF90cmFjZShpdGVyKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODc3LVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTkxNT1zdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50X2Z1bmN0aW9ucyB0cmFjZV9ibGtfZXZlbnRfZnVuY3MgPSB7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTkxNjpcXHQudHJhY2VcXHRcXHQ9IGJsa190cmFjZV9ldmVudF9wcmludCxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxOTE3OlxcdC5iaW5hcnlcXHRcXHQ9IGJsa190cmFjZV9ldmVudF9wcmludF9iaW5hcnksXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTkxOC19O1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTk2Nj1kZXZpY2VfaW5pdGNhbGwoaW5pdF9ibGtfdHJhY2VyKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xOTY3LVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE5Njg6c3RhdGljIGludCBibGtfdHJhY2VfcmVtb3ZlX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE5Njkte1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTk3Ni1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxOTc3OlxcdGJsa190cmFjZV9zdG9wKGJ0KTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xOTc4LVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTk4MC1cXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxOTgxOlxcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xOTgyLVxcdHJldHVybiAwO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTk4Ny0gKi9cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxOTg4OnN0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE5ODktXFx0XFx0XFx0XFx0IHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDA0LVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIwMDU6XFx0YmxrX3RyYWNlX3NldHVwX2xiYShidCwgYmRldik7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjAwNi1cXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIwMTQtZnJlZV9idDpcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoyMDE1OlxcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDE2LVxcdHJldHVybiByZXQ7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDIyLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIwMjM6c3RhdGljIHNzaXplX3Qgc3lzZnNfYmxrX3RyYWNlX2F0dHJfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjAyNC1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjAyNS1cXHRcXHRcXHRcXHRcXHQgY2hhciAqYnVmKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoyMDI2OnN0YXRpYyBzc2l6ZV90IHN5c2ZzX2Jsa190cmFjZV9hdHRyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDI3LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDMwLVxcdERFVklDRV9BVFRSKF9uYW1lLCBTX0lSVUdPIHwgU19JV1VTUiwgXFxcXFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIwMzE6XFx0XFx0ICAgIHN5c2ZzX2Jsa190cmFjZV9hdHRyX3Nob3csIFxcXFxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoyMDMyOlxcdFxcdCAgICBzeXNmc19ibGtfdHJhY2VfYXR0cl9zdG9yZSlcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDMzLVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MjAzOD1zdGF0aWMgQkxLX1RSQUNFX0RFVklDRV9BVFRSKGVuZF9sYmEpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIwMzktXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjA0MDpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYmxrX3RyYWNlX2F0dHJzW10gPSB7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjA0MS1cXHRcXHUwMDI2ZGV2X2F0dHJfZW5hYmxlLmF0dHIsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDQ4LVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIwNDk6c3RydWN0IGF0dHJpYnV0ZV9ncm91cCBibGtfdHJhY2VfYXR0cl9ncm91cCA9IHtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDUwLVxcdC5uYW1lICA9IFxcXCJ0cmFjZVxcXCIsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjA1MTpcXHQuYXR0cnMgPSBibGtfdHJhY2VfYXR0cnMsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjA1Mi19O1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MjA1ND1zdGF0aWMgY29uc3Qgc3RydWN0IHtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIwNzYtXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjA3NzpzdGF0aWMgaW50IGJsa190cmFjZV9zdHIybWFzayhjb25zdCBjaGFyICpzdHIpXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjA3OC17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMTExLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIxMTI6c3RhdGljIHNzaXplX3QgYmxrX3RyYWNlX21hc2syc3RyKGNoYXIgKmJ1ZiwgaW50IG1hc2spXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjExMy17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMTI3LVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIxMjg6c3RhdGljIHNzaXplX3Qgc3lzZnNfYmxrX3RyYWNlX2F0dHJfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjEyOS1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMTQ4LVxcdGVsc2UgaWYgKGF0dHIgPT0gXFx1MDAyNmRldl9hdHRyX2FjdF9tYXNrKVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIxNDk6XFx0XFx0cmV0ID0gYmxrX3RyYWNlX21hc2syc3RyKGJ1ZiwgYnQtXFx1MDAzZWFjdF9tYXNrKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMTUwLVxcdGVsc2UgaWYgKGF0dHIgPT0gXFx1MDAyNmRldl9hdHRyX3BpZClcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIxNjEtXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjE2MjpzdGF0aWMgc3NpemVfdCBzeXNmc19ibGtfdHJhY2VfYXR0cl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjE2My1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjE3OC1cXHRcXHRcXHQvKiBBc3N1bWUgaXQgaXMgYSBsaXN0IG9mIHRyYWNlIGNhdGVnb3J5IG5hbWVzICovXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjE3OTpcXHRcXHRcXHRyZXQgPSBibGtfdHJhY2Vfc3RyMm1hc2soYnVmKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMTgwLVxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjE5OC1cXHRcXHRpZiAodmFsdWUpXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjE5OTpcXHRcXHRcXHRyZXQgPSBibGtfdHJhY2Vfc2V0dXBfcXVldWUocSwgYmRldik7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjIwMC1cXHRcXHRlbHNlXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjIwMTpcXHRcXHRcXHRyZXQgPSBibGtfdHJhY2VfcmVtb3ZlX3F1ZXVlKHEpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIyMDItXFx0XFx0Z290byBvdXRfdW5sb2NrX2JkZXY7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMjA2LVxcdGlmIChidCA9PSBOVUxMKSB7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjIwNzpcXHRcXHRyZXQgPSBibGtfdHJhY2Vfc2V0dXBfcXVldWUocSwgYmRldik7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjIwOC1cXHRcXHRidCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocS1cXHUwMDNlYmxrX3RyYWNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjoyOToyMS4zNjM1NjA3NDVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTM0NDM1MTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBibGt0cmFjZSBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgd2hldGhlciBgYmxrdHJhY2VgIGlzIGEgdmlhYmxlIHRhcmdldCBmb3IgZnV6emluZy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0J3MgZXZlbiAqcmVhY2hhYmxlKiBmcm9tIHVzZXJzcGFjZS4gQW5kIHRoZSBhbnN3ZXIsIHRoYW5rZnVsbHksIGlzIGEgcmVzb3VuZGluZyB5ZXMhIEkgc2VlIHRocmVlIGRpc3RpbmN0IGFjY2VzcyBwb2ludHM6IHRoZSBgYmxrX3RyYWNlX2lvY3RsYCBmdW5jdGlvbiwgaGFuZGxpbmcgYSB3aG9sZSBzdWl0ZSBvZiBgQkxLVFJBQ0VgIGlvY3RscyBsaWtlIGBTRVRVYCwgYFNUQVJUYCwgYFNUT1BgLCBhbmQgYFRFQVJET1dOYCBvbiB0aGUgc3RhbmRhcmQgYmxvY2sgZGV2aWNlcy4gVGhlbiB0aGVyZSdzIHN5c2ZzLCBzcGVjaWZpY2FsbHkgdGhlIGAvc3lzL2Jsb2NrL1x1MDAzY2Rldlx1MDAzZS90cmFjZS8uLi5gIGVudHJpZXMgZm9yIGVuYWJsaW5nLCBtYW5hZ2luZyB0aGUgYGFjdF9tYXNrYCwgdGhlIGBwaWRgLCBhbmQgb3RoZXIgcHJvcGVydGllcy4gRmluYWxseSwgd2UgaGF2ZSBkZWJ1Z2ZzL3RyYWNlZnMgd2l0aCB0aGUgYC9zeXMva2VybmVsL3RyYWNpbmcvY3VycmVudF90cmFjZXJgIHBhdGggYWxsb3dpbmcgZm9yIHRoZSBibG9jayB0cmFjZSB0cmFjZXIuXG5cbk5leHQsIGl0J3MgcHJ1ZGVudCB0byBleGFtaW5lIHRoZSBjYWxsZXJzIG9mIGBibGtfdHJhY2VfaW9jdGxgIHRvIGdhaW4gYW4gdW5kZXJzdGFuZGluZyBvZiBob3cgZXhhY3RseSB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM5MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjoyOToyNC40OTc5OTgxNzFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDg4MzUyOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrX3RyYWNlX2lvY3RsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2lvY3RsLmM9NjUxPXN0YXRpYyBpbnQgYmxrZGV2X2NvbW1vbl9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuLS1cXG5ibG9jay9pb2N0bC5jLTcxNy1cXHRjYXNlIEJMS1RSQUNFVEVBUkRPV046XFxuYmxvY2svaW9jdGwuYzo3MTg6XFx0XFx0cmV0dXJuIGJsa190cmFjZV9pb2N0bChiZGV2LCBjbWQsIGFyZ3ApO1xcbmJsb2NrL2lvY3RsLmMtNzE5LVxcdGNhc2UgQkxLQ1JZUFRPSU1QT1JUS0VZOlxcbi0tXFxuYmxvY2svaW9jdGwuYz03NTA9bG9uZyBibGtkZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5ibG9jay9pb2N0bC5jLTc4Ni1cXHRjYXNlIEJMS1RSQUNFU0VUVVAyOlxcbmJsb2NrL2lvY3RsLmM6Nzg3OlxcdFxcdHJldHVybiBibGtfdHJhY2VfaW9jdGwoYmRldiwgY21kLCBhcmdwKTtcXG5ibG9jay9pb2N0bC5jLTc4OC1cXHRkZWZhdWx0Olxcbi0tXFxuYmxvY2svaW9jdGwuYz04MTA9bG9uZyBjb21wYXRfYmxrZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYmxvY2svaW9jdGwuYy04NDYtXFx0Y2FzZSBCTEtUUkFDRVNFVFVQMzI6XFxuYmxvY2svaW9jdGwuYzo4NDc6XFx0XFx0cmV0dXJuIGJsa190cmFjZV9pb2N0bChiZGV2LCBjbWQsIGFyZ3ApO1xcbmJsb2NrL2lvY3RsLmMtODQ4LVxcdGRlZmF1bHQ6XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oPTE2PXN0cnVjdCBibGtfdHJhY2Uge1xcbi0tXFxuaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaC0zMS1cXG5pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oOjMyOmV4dGVybiBpbnQgYmxrX3RyYWNlX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgdW5zaWduZWQsIGNoYXIgX191c2VyICopO1xcbmluY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgtMzMtZXh0ZXJuIHZvaWQgYmxrX3RyYWNlX3NodXRkb3duKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICopO1xcbi0tXFxuaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaD04MT1leHRlcm4gaW50IGJsa190cmFjZV9yZW1vdmUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaC04My0jZWxzZSAvKiAhQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgKi9cXG5pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oOjg0OiMgZGVmaW5lIGJsa190cmFjZV9pb2N0bChiZGV2LCBjbWQsIGFyZylcXHRcXHQoLUVOT1RUWSlcXG5pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oLTg1LSMgZGVmaW5lIGJsa190cmFjZV9zaHV0ZG93bihxKVxcdFxcdFxcdFxcdGRvIHsgfSB3aGlsZSAoMClcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTkzOD1FWFBPUlRfU1lNQk9MX0dQTChibGtfdHJhY2Vfc3RhcnRzdG9wKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk0Ni0vKipcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5NDc6ICogYmxrX3RyYWNlX2lvY3RsIC0gaGFuZGxlIHRoZSBpb2N0bHMgYXNzb2NpYXRlZCB3aXRoIHRyYWNpbmdcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NDgtICogQGJkZXY6XFx0dGhlIGJsb2NrIGRldmljZVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTUyLSAqKi9cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5NTM6aW50IGJsa190cmFjZV9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCB1bnNpZ25lZCBjbWQsIGNoYXIgX191c2VyICphcmcpXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTU0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6Mjk6MjYuNDA2ODM4NDA4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNDI2MzAzNzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQmxrdHJhY2UgRXJyb3IgSGFuZGxpbmcgRml4IGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIHRoZSBibGt0cmFjZSBjb3JlIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSB0aGUgY2hhbmdlcyBpbiBlcnJvciBoYW5kbGluZyBhbmQgdHJhY2Vwb2ludCByZWdpc3RyYXRpb24gZHVyaW5nIHNldHVwIGFuZCB0ZWFyZG93bi4gSXQgYXBwZWFycyB0aGF0IHRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbiBoYWQgc29tZSBpc3N1ZXMgd2l0aCBpZ25vcmluZyByZXR1cm4gdmFsdWVzIGZyb20gY3JpdGljYWwgZnVuY3Rpb25zIGxpa2UgYGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cygpYCBhbmQgYGdldF9wcm9iZV9yZWYoKWAsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gc3VidGxlIGVycm9ycy5cblxuVGhlIGZpeCBhZGRyZXNzZXMgdGhpcyBieTpcblxuMS4gIEVuc3VyaW5nIHRoYXQgYGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cygpYCBub3cgY29ycmVjdGx5IHJldHVybnMgYW4gZXJyb3IgYW5kIHVud2luZHMgaWYgdGhlcmUncyBhIHByb2JsZW0gcmVnaXN0ZXJpbmcgdHJhY2Vwb2ludHMuXG4yLiAgYGdldF9wcm9iZV9yZWYoKWAgYWxzbyByZXR1cm5zIGl0cyBlcnJvciBzdGF0dXMuXG4zLiAgQ3JpdGljYWxseSwgYGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZSgpYCBjYWxscyBgZ2V0X3Byb2JlX3JlZigpYCAqYmVmb3JlKiBhc3NpZ25pbmcgdGhlIHRyYWNlIHN0cnVjdHVyZSBhbmQgcmV0dXJucyBhbiBlcnJvciBpZiBgZ2V0X3Byb2JlX3JlZigpYCBmYWlscy5cbjQuICBUaGUgY2FsbGVycyBub3cgaGFuZGxlIGZhaWx1cmVzIGZyb20gYGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZSgpYCBieSBjbGVhbmluZyB1cCB0aGUgdHJhY2Ugc3RydWN0dXJlIGFuZCByZXR1cm5pbmcgYW4gZXJyb3IuXG41LiAgSW4gYGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpYCwgYGdldF9wcm9iZV9yZWYoKWAgaXMgY2FsbGVkIGJlZm9yZSBhc3NpZ25tZW50IHRvby5cblxuVGhpcyBpcyBhIGNsZWFyIGltcHJvdmVtZW50IGluIHRoZSBlcnJvciBoYW5kbGluZyBmb3IgdGhpcyBjcml0aWNhbCB0cmFjaW5nIGluZnJhc3RydWN0dXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgc2hvdWxkIHdlIGZ1enogdGhpcz8gTGV0J3MgY2hlY2sgdGhlIGd1aWRlbGluZXMgdG8gYmUgY2VydGFpbi5cblxuQWNjb3JkaW5nIHRvIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMsIHRoZSBjaGFuZ2VzIGRlZmluaXRlbHkgaW52b2x2ZSBjb3JlIGtlcm5lbCBsb2dpYyB3aXRoaW4gdGhlIGJsb2NrIGxheWVyLiBJdCdzIG5vdCBqdXN0IGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCBvciBkZWNvcmF0aXZlIGxvZ2dpbmcuIFRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IGVycm9ycyBhcmUgaGFuZGxlZCBpbiB0aGUgYmxrdHJhY2Ugc2V0dXAgYW5kIHRlYXJkb3duIHByb2Nlc3MuIFRoZSBjb2RlJ3MgY2xlYXJseSByZWFjaGFibGUsIHNvIHRoYXQgbWFrZXMgdGhpcyBhIHNvbGlkIFwiV29ydGhGdXp6aW5nPXRydWVcIiBzaXR1YXRpb24uXG5cbk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBhcHByb3ByaWF0ZSBmdXp6aW5nIHRhcmdldHMuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgZnV6emluZy4gSSB3aWxsIGxvb2sgYXQgdGhlIGludm9sdmVkIGZ1bmN0aW9ucyB0byBzZWxlY3QgZ29vZCBmdXp6aW5nIGVudHJ5cG9pbnRzIGFuZCB2ZXJpZnkgRm9jdXNTeW1ib2xzIGFuZCBFbmFibGVDb25maWdzLlxuXG5GaXJzdCwgSSdsbCBnbyB0aHJvdWdoIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AgdG8gaWRlbnRpZnkgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB3aGljaCBhcmUgZWFzaWVyIHRvIHRhcmdldC4gTG9va2luZyBhdCB0aGUgY29kZSwgSSBzZWU6XG5cbiogICBgYmxrX3RyYWNlX3NldHVwYCAoYSBub24tc3RhdGljIEdQTC1leHBvcnRlZCBmdW5jdGlvbilcbiogICBgYmxrX3RyYWNlX2lvY3RsYCAoY2FsbGVkIGJ5IGBibGtkZXZfaW9jdGxgKVxuKiAgIGBibGtfdHJhY2VfcmVtb3ZlYCAoYW5vdGhlciBub24tc3RhdGljIGZ1bmN0aW9uKVxuKiAgIGBibGtfdHJhY2Vfc3RhcnRzdG9wYCAobm9uLXN0YXRpYylcblxuSSBuZWVkIHRvIGRlY2lkZSBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucy4gU3RhdGljIGhlbHBlciBmdW5jdGlvbnMgYXJlbid0IGFzIGdvb2QgYSB0YXJnZXQgYXMgbm9uLXN0YXRpYyBlbnRyeXBvaW50cywgc28gYGJsa190cmFjZV9pb2N0bGAgYW5kIGBibGtfdHJhY2Vfc2V0dXBgIHN0YW5kIG91dCBhcyB0aGUgcHJpbWFyeSBjYW5kaWRhdGVzLlxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AgZmlsZSBpbmRpY2F0ZXMgdGhhdCBgQkxLX0RFVl9JT19UUkFDRWAgaXMgdGhlIGNyaXRpY2FsIGNvbmZpZyBvcHRpb24uIExvb2tpbmcgYXQgaXRzIGRlcGVuZGVuY2llcywgSSBzZWUgaXQgZGVwZW5kcyBvbiBgU1lTRlNgLCBgQkxPQ0tgLCBhbmQgc2VsZWN0cyBgUkVMQVlgLCBgREVCVUdfRlNgLCBgVFJBQ0VQT0lOVFNgLCBgR0VORVJJQ19UUkFDRVJgLCBhbmQgYFNUQUNLVFJBQ0VgLiBJJ2xsIGFsc28gZG8gYSBxdWljayBgZ3JlcGAgZm9yIG90aGVyIGNvbmZpZyBvcHRpb25zIGluIGBibGt0cmFjZS5jYCwganVzdCB0byBiZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEknbSBhbGwgc2V0IHdpdGggdGhlIEZvY3VzU3ltYm9scyBhbmQgRW5hYmxlQ29uZmlncyBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1NDAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6Mjk6MzcuODMzMTQ0NTE2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDcwNDgzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9ibGt0cmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTI4LVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjI5OiNpZmRlZiBDT05GSUdfQkxLX0RFVl9JT19UUkFDRVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTMwLVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9NDQ9c3RhdGljIHN0cnVjdCB0cmFjZXJfb3B0IGJsa190cmFjZXJfb3B0c1tdID0ge1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNDYtXFx0eyBUUkFDRVJfT1BUKGJsa19jbGFzc2ljLCBUUkFDRV9CTEtfT1BUX0NMQVNTSUMpIH0sXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NDc6I2lmZGVmIENPTkZJR19CTEtfQ0dST1VQXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNDgtXFx0eyBUUkFDRVJfT1BUKGJsa19jZ3JvdXAsIFRSQUNFX0JMS19PUFRfQ0dST1VQKSB9LFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MjQzPXZvaWQgX19ibGtfdHJhY2Vfbm90ZV9tZXNzYWdlKHN0cnVjdCBibGtfdHJhY2UgKmJ0LFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjY4LVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjI2OTojaWZkZWYgQ09ORklHX0JMS19DR1JPVVBcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yNzAtXFx0aWYgKGNzcyBcXHUwMDI2XFx1MDAyNiAoYmxrX3RyYWNlcl9mbGFncy52YWwgXFx1MDAyNiBUUkFDRV9CTEtfT1BUX0NHUk9VUCkpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz04MjQ9c3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXAyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04NjItXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6ODYzOiNpZiBkZWZpbmVkKENPTkZJR19DT01QQVQpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1g4Nl82NClcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04NjQtc3RhdGljIGludCBjb21wYXRfYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9OTUzPWludCBibGtfdHJhY2VfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgY21kLCBjaGFyIF9fdXNlciAqYXJnKVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTY3LVxcdFxcdGJyZWFrO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjk2ODojaWYgZGVmaW5lZChDT05GSUdfQ09NUEFUKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19YODZfNjQpXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTY5LVxcdGNhc2UgQkxLVFJBQ0VTRVRVUDMyOlxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9OTk1PXZvaWQgYmxrX3RyYWNlX3NodXRkb3duKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTAwMS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMDAyOiNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwMDMtc3RhdGljIHU2NCBibGtfdHJhY2VfYmlvX2dldF9jZ2lkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0yMTYyPXN0YXRpYyBzc2l6ZV90IHN5c2ZzX2Jsa190cmFjZV9hdHRyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIyMjctfVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIyMjg6I2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lPX1RSQUNFICovXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjIyOS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoyMjMwOiNpZmRlZiBDT05GSUdfRVZFTlRfVFJBQ0lOR1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIyMzEtXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0yMzEyPUVYUE9SVF9TWU1CT0xfR1BMKGJsa19maWxsX3J3YnMpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIzMTMtXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjMxNDojZW5kaWYgLyogQ09ORklHX0VWRU5UX1RSQUNJTkcgKi9cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMzE1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjoyOTozNy44Nzc4NTM0NzNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTk5MDA5MjM3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCbG9jayBUcmFjaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIHNldCBmb3IgYmxvY2sgSS9PIHRyYWNpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBCTEtfREVWX0lPX1RSQUNFYCBpcyB0aGUga2V5LCBidXQgaXQgcmVsaWVzIG9uIGBTWVNGU2AgYW5kIGBCTE9DS2AuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBJJ20gbm90IG1pc3NpbmcgYW55IG90aGVyIGltcGxpY2l0IGRlcGVuZGVuY2llcy4gWWVzLCBsaXN0aW5nIGBCTEtfREVWX0lPX1RSQUNFYCwgYEJMT0NLYCwgYW5kIGBTWVNGU2AgZXhwbGljaXRseSBjb3ZlcnMgZXZlcnl0aGluZywgc3RhbmRhcmQgYW5kIGFjY3VyYXRlLlxuXG5OZXh0LCBJIHNob3VsZCBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBzeW1ib2xzLiBMb29raW5nIGF0IGBGb2N1c1N5bWJvbHNgLCBJIHNlZSBgYmxrX3RyYWNlX2lvY3RsYCBhbmQgYGJsa190cmFjZV9zZXR1cGAgYXJlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgaGVyZS4gR29vZC5cblxuTm93LCBsZXQncyBzdGVwIGJhY2sgYW5kIHJldmlldyB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaXRzZWxmLiBJdCdzIGZvY3VzZWQgb24gaW1wcm92aW5nIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKClgIHdpdGhpbiBga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNgLiBTcGVjaWZpY2FsbHksIGl0IGFkZHJlc3NlcyB0aGUgY2xlYW51cCBvZiB0cmFjZXBvaW50cyBvbiBmYWlsdXJlIGR1cmluZyByZWdpc3RyYXRpb24uIFRoZSBwYXRjaCBhbHNvIHByb3BhZ2F0ZXMgdGhlIGVycm9yIGhhbmRsaW5nIHRvIGZ1bmN0aW9ucyBsaWtlIGBnZXRfcHJvYmVfcmVmKClgLCBgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKClgLCBgYmxrX3RyYWNlX3NldHVwKClgLCBgYmxrX3RyYWNlX3NldHVwMigpYCwgYGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAoKWAsIGFuZCBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKClgLiBBbGwgb2YgdGhlc2UgYXJlIHJlYWNoZWQgdGhyb3VnaCBibG9jayBkZXZpY2UgaW9jdGxzIChgQkxLVFJBQ0VTRVRVUGAsIGBCTEtUUkFDRVNFVFVQMmAsIGBCTEtUUkFDRVNFVFVQMzJgKSBhbmQgc3lzZnMgaW50ZXJmYWNlcy5cblxuR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2gsIEkgYW0gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTE4MywiT3V0cHV0VG9rZW5zIjoxNjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6Mjk6NDcuODY3OTQ5Nzg4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE4NDA1MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfSU9fVFJBQ0VcIixcbiAgICBcIkJMT0NLXCIsXG4gICAgXCJTWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa190cmFjZV9pb2N0bFwiLFxuICAgIFwiYmxrX3RyYWNlX3NldHVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYmxrdHJhY2UgdHJhY2Vwb2ludCByZWdpc3RyYXRpb24gYW5kIHNldHVwIGVycm9yIHVud2luZGluZyBwYXRocyBpbiBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy4gSXQgbWFrZXMgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzIHJldHVybiBlcnJvciBjb2RlcyBhbmQgcm9sbGJhY2sgcmVnaXN0ZXJlZCB0cmFjZXBvaW50cyB1cG9uIGZhaWx1cmUsIGFuZCBwcm9wZXJseSBoYW5kbGVzIHRyYWNlcG9pbnQgc2V0dXAgZXJyb3JzIGFjcm9zcyBibGtfdHJhY2Vfc2V0dXAoKSwgYmxrX3RyYWNlX3NldHVwMigpLCBjb21wYXRfYmxrX3RyYWNlX3NldHVwKCksIGFuZCBibGtfdHJhY2Vfc2V0dXBfcXVldWUoKSwgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYmxvY2sgZGV2aWNlIGlvY3RscyBhbmQgc3lzZnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9JT19UUkFDRVwiLFxuICAgIFwiQkxPQ0tcIixcbiAgICBcIlNZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrX3RyYWNlX2lvY3RsXCIsXG4gICAgXCJibGtfdHJhY2Vfc2V0dXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBibGt0cmFjZSB0cmFjZXBvaW50IHJlZ2lzdHJhdGlvbiBhbmQgc2V0dXAgZXJyb3IgdW53aW5kaW5nIHBhdGhzIGluIGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLiBJdCBtYWtlcyBibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHMgcmV0dXJuIGVycm9yIGNvZGVzIGFuZCByb2xsYmFjayByZWdpc3RlcmVkIHRyYWNlcG9pbnRzIHVwb24gZmFpbHVyZSwgYW5kIHByb3Blcmx5IGhhbmRsZXMgdHJhY2Vwb2ludCBzZXR1cCBlcnJvcnMgYWNyb3NzIGJsa190cmFjZV9zZXR1cCgpLCBibGtfdHJhY2Vfc2V0dXAyKCksIGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAoKSwgYW5kIGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBibG9jayBkZXZpY2UgaW9jdGxzIGFuZCBzeXNmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6Mjk6NDcuOTQ5Nzk2ODgyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDU3MTAzMjQyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjI5OjQ3Ljk1MDI3MzU2MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIwNTcwNTUxMjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yIGNoZWNraW5nIGFuZCB1bndpbmRpbmcgdG8gYmxrdHJhY2UgdHJhY2Vwb2ludCByZWdpc3RyYXRpb24gKGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cywgZ2V0X3Byb2JlX3JlZiwgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplLCBibGtfdHJhY2Vfc2V0dXBfcXVldWUpLiBJbiBmYWlsdXJlIGNhc2VzLCBpdCBwcm9wZXJseSByb2xscyBiYWNrIHJlZ2lzdGVyZWQgdHJhY2Vwb2ludHMsIGRlY3JlbWVudHMgcHJvYmUgcmVmZXJlbmNlIGNvdW50cywgY2xlYW5zIHVwIGFsbG9jYXRlZCBibGtfdHJhY2Ugc3RydWN0dXJlcyB2aWEgYmxrX3RyYWNlX2ZyZWUsIGFuZCByZXR1cm5zIGVycm9yIGNvZGVzIGJlZm9yZSBhbnkgZGF0YSBpcyBjb3BpZWQgYmFjayB0byB1c2VyIHNwYWNlLiBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGFyZSByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCB1bmluaXRpYWxpemVkIGFsbG9jYXRpb25zIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmUgaW50cm9kdWNlZC4gUG90ZW50aWFsIHJpc2tzIG9uIHRoZXNlIHBhdGhzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGxvY2svY2xlYW51cCBlcnJvcnMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXM7IHRodXMsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNThjZmU2NDU2Yzg0NjNiNzE3MDQ5Yjk5NjAxOTYwYzkwMzk2OGE4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMjI6Mjk6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jXG5pbmRleCA4Y2QyNTIwYjRjOTllLi5jMjMyNDI5OGM2YzE1IDEwMDY0NFxuLS0tIGEva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNcbisrKyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jXG5AQCAtNjAsNyArNjAsNyBAQCBzdGF0aWMgc3RydWN0IHRyYWNlcl9mbGFncyBibGtfdHJhY2VyX2ZsYWdzID0ge1xuIHN0YXRpYyBERUZJTkVfTVVURVgoYmxrX3Byb2JlX211dGV4KTtcbiBzdGF0aWMgaW50IGJsa19wcm9iZXNfcmVmO1xuIFxuLXN0YXRpYyB2b2lkIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKTtcbitzdGF0aWMgaW50IGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKTtcbiBzdGF0aWMgdm9pZCBibGtfdW5yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKTtcbiBcbiBzdGF0aWMgdm9pZCByZWNvcmRfYmxrdHJhY2VfZXZlbnQoc3RydWN0IGJsa19pb190cmFjZSAqdCwgcGlkX3QgcGlkLCBpbnQgY3B1LFxuQEAgLTQ4NSwxMiArNDg1LDE4IEBAIHN0YXRpYyB2b2lkIGJsa190cmFjZV9mcmVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmxrX3RyYWNlICpidClcbiBcdGtmcmVlKGJ0KTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgZ2V0X3Byb2JlX3JlZih2b2lkKVxuK3N0YXRpYyBpbnQgZ2V0X3Byb2JlX3JlZih2b2lkKVxuIHtcbitcdGludCByZXQgPSAwO1xuK1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZibGtfcHJvYmVfbXV0ZXgpO1xuLVx0aWYgKCsrYmxrX3Byb2Jlc19yZWYgPT0gMSlcbi1cdFx0YmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKCk7XG4rXHRpZiAoKytibGtfcHJvYmVzX3JlZiA9PSAxKSB7XG4rXHRcdHJldCA9IGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cygpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGJsa19wcm9iZXNfcmVmLS07XG4rXHR9XG4gXHRtdXRleF91bmxvY2soXHUwMDI2YmxrX3Byb2JlX211dGV4KTtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHB1dF9wcm9iZV9yZWYodm9pZClcbkBAIC03MjcsMTIgKzczMywxNCBAQCBzdGF0aWMgc3RydWN0IGJsa190cmFjZSAqYmxrX3RyYWNlX3NldHVwX3ByZXBhcmUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4gXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4tXHRcdFx0XHQgICAgIGNoYXIgKm5hbWUsIGludCB2ZXJzaW9uLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgYmxrX3RyYWNlICpidCxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGJsa191c2VyX3RyYWNlX3NldHVwMiAqYnV0cylcbitzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbitcdFx0XHRcdCAgICBjaGFyICpuYW1lLCBpbnQgdmVyc2lvbixcbitcdFx0XHRcdCAgICBzdHJ1Y3QgYmxrX3RyYWNlICpidCxcbitcdFx0XHRcdCAgICBzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAyICpidXRzKVxuIFxuIHtcbitcdGludCByZXQ7XG4rXG4gXHRzdHJzY3B5X3BhZChidXRzLVx1MDAzZW5hbWUsIG5hbWUsIEJMS1RSQUNFX0JERVZfU0laRTIpO1xuIFxuIFx0LypcbkBAIC03NTUsOCArNzYzLDEyIEBAIHN0YXRpYyB2b2lkIGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbiBcdGJ0LVx1MDAzZXBpZCA9IGJ1dHMtXHUwMDNlcGlkO1xuIFx0YnQtXHUwMDNldHJhY2Vfc3RhdGUgPSBCbGt0cmFjZV9zZXR1cDtcbiBcbitcdHJldCA9IGdldF9wcm9iZV9yZWYoKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIocS1cdTAwM2VibGtfdHJhY2UsIGJ0KTtcbi1cdGdldF9wcm9iZV9yZWYoKTtcbitcdHJldHVybiAwO1xuIH1cbiBcbiBpbnQgYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXG5AQCAtNzkyLDcgKzgwNCwxMiBAQCBpbnQgYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXG4gXHRcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XG4gXHRcdHJldHVybiBQVFJfRVJSKGJ0KTtcbiBcdH1cbi1cdGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAxLCBidCwgXHUwMDI2YnV0czIpO1xuK1x0cmV0ID0gYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDEsIGJ0LCBcdTAwMjZidXRzMik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcbitcdFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcdHN0cnNjcHkoYnV0cy5uYW1lLCBidXRzMi5uYW1lLCBCTEtUUkFDRV9CREVWX1NJWkUpO1xuIFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcbiBcbkBAIC04MTAsNiArODI3LDcgQEAgc3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXAyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXG4gXHRzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAyIGJ1dHMyO1xuIFx0c3RydWN0IGJsa190cmFjZSAqYnQ7XG4gXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XG4rXHRpbnQgcmV0O1xuIFxuIFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmJ1dHMyLCBhcmcsIHNpemVvZihidXRzMikpKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbkBAIC04MjcsNyArODQ1LDEyIEBAIHN0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwMihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSwgZGV2X3QgZGV2LFxuIFx0XHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuIFx0XHRyZXR1cm4gUFRSX0VSUihidCk7XG4gXHR9XG4tXHRibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMiwgYnQsIFx1MDAyNmJ1dHMyKTtcbitcdHJldCA9IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAyLCBidCwgXHUwMDI2YnV0czIpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRibGtfdHJhY2VfZnJlZShxLCBidCk7XG4rXHRcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4gXHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuIFxuIFx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFx1MDAyNmJ1dHMyLCBzaXplb2YoYnV0czIpKSkge1xuQEAgLTg0Niw2ICs4NjksNyBAQCBzdGF0aWMgaW50IGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsXG4gXHRzdHJ1Y3QgY29tcGF0X2Jsa191c2VyX3RyYWNlX3NldHVwIGNidXRzO1xuIFx0c3RydWN0IGJsa190cmFjZSAqYnQ7XG4gXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XG4rXHRpbnQgcmV0O1xuIFxuIFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmNidXRzLCBhcmcsIHNpemVvZihjYnV0cykpKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbkBAIC04NjksNyArODkzLDEyIEBAIHN0YXRpYyBpbnQgY29tcGF0X2Jsa190cmFjZV9zZXR1cChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSxcbiBcdFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcbiBcdFx0cmV0dXJuIFBUUl9FUlIoYnQpO1xuIFx0fVxuLVx0YmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDEsIGJ0LCBcdTAwMjZidXRzMik7XG4rXHRyZXQgPSBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMSwgYnQsIFx1MDAyNmJ1dHMyKTtcbitcdGlmIChyZXQpIHtcbitcdFx0YmxrX3RyYWNlX2ZyZWUocSwgYnQpO1xuK1x0XHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuIFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcbiBcbiBcdGlmIChjb3B5X3RvX3VzZXIoYXJnLCBcdTAwMjZidXRzMi5uYW1lLCBBUlJBWV9TSVpFKGJ1dHMyLm5hbWUpKSkge1xuQEAgLTEzMjQsNDkgKzEzNTMsMTA4IEBAIHZvaWQgYmxrX2FkZF9kcml2ZXJfZGF0YShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGJsa19hZGRfZHJpdmVyX2RhdGEpO1xuIFxuLXN0YXRpYyB2b2lkIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKVxuK3N0YXRpYyBpbnQgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbiBcbiBcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2luc2VydChibGtfYWRkX3RyYWNlX3JxX2luc2VydCwgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dDtcbiBcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2lzc3VlKGJsa19hZGRfdHJhY2VfcnFfaXNzdWUsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcnFfaW5zZXJ0O1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfbWVyZ2UoYmxrX2FkZF90cmFjZV9ycV9tZXJnZSwgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9ycV9pc3N1ZTtcbiBcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX3JlcXVldWUoYmxrX2FkZF90cmFjZV9ycV9yZXF1ZXVlLCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3JxX21lcmdlO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfY29tcGxldGUoYmxrX2FkZF90cmFjZV9ycV9jb21wbGV0ZSwgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9ycV9yZXF1ZXVlO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2NvbXBsZXRlKGJsa19hZGRfdHJhY2VfYmlvX2NvbXBsZXRlLCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3JxX2NvbXBsZXRlO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2JhY2ttZXJnZShibGtfYWRkX3RyYWNlX2Jpb19iYWNrbWVyZ2UsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfYmlvX2NvbXBsZXRlO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2Zyb250bWVyZ2UoYmxrX2FkZF90cmFjZV9iaW9fZnJvbnRtZXJnZSwgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9iaW9fYmFja21lcmdlO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX3F1ZXVlKGJsa19hZGRfdHJhY2VfYmlvX3F1ZXVlLCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X2Jpb19mcm9udG1lcmdlO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfZ2V0cnEoYmxrX2FkZF90cmFjZV9nZXRycSwgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9iaW9fcXVldWU7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibGtfem9uZV9hcHBlbmRfdXBkYXRlX3JlcXVlc3RfYmlvKFxuIFx0XHRibGtfYWRkX3RyYWNlX3pvbmVfdXBkYXRlX3JlcXVlc3QsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfZ2V0cnE7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9kaXNrX3pvbmVfd3BsdWdfYWRkX2JpbyhibGtfYWRkX3RyYWNlX3pvbmVfcGx1ZyxcbiBcdFx0XHRcdFx0XHQgICAgIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfem9uZV91cGRhdGVfcmVxdWVzdDtcbiBcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsa196b25lX3dwbHVnX2JpbyhibGtfYWRkX3RyYWNlX3pvbmVfdW5wbHVnLFxuIFx0XHRcdFx0XHRcdE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfem9uZV9wbHVnO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcGx1ZyhibGtfYWRkX3RyYWNlX3BsdWcsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfem9uZV91bnBsdWc7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWcoYmxrX2FkZF90cmFjZV91bnBsdWcsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcGx1ZztcbiBcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3NwbGl0KGJsa19hZGRfdHJhY2Vfc3BsaXQsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfdW5wbHVnO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX3JlbWFwKGJsa19hZGRfdHJhY2VfYmlvX3JlbWFwLCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3NwbGl0O1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfcmVtYXAoYmxrX2FkZF90cmFjZV9ycV9yZW1hcCwgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9iaW9fcmVtYXA7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitvdXRfYmlvX3JlbWFwOlxuK1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fcmVtYXAoYmxrX2FkZF90cmFjZV9iaW9fcmVtYXAsIE5VTEwpO1xuK291dF9zcGxpdDpcbitcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfc3BsaXQoYmxrX2FkZF90cmFjZV9zcGxpdCwgTlVMTCk7XG4rb3V0X3VucGx1ZzpcbitcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfdW5wbHVnKGJsa19hZGRfdHJhY2VfdW5wbHVnLCBOVUxMKTtcbitvdXRfcGx1ZzpcbitcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcGx1ZyhibGtfYWRkX3RyYWNlX3BsdWcsIE5VTEwpO1xuK291dF96b25lX3VucGx1ZzpcbitcdHVucmVnaXN0ZXJfdHJhY2VfYmxrX3pvbmVfd3BsdWdfYmlvKGJsa19hZGRfdHJhY2Vfem9uZV91bnBsdWcsIE5VTEwpO1xuK291dF96b25lX3BsdWc6XG4rXHR1bnJlZ2lzdGVyX3RyYWNlX2Rpc2tfem9uZV93cGx1Z19hZGRfYmlvKGJsa19hZGRfdHJhY2Vfem9uZV9wbHVnLCBOVUxMKTtcbitvdXRfem9uZV91cGRhdGVfcmVxdWVzdDpcbitcdHVucmVnaXN0ZXJfdHJhY2VfYmxrX3pvbmVfYXBwZW5kX3VwZGF0ZV9yZXF1ZXN0X2JpbyhcbitcdFx0YmxrX2FkZF90cmFjZV96b25lX3VwZGF0ZV9yZXF1ZXN0LCBOVUxMKTtcbitvdXRfZ2V0cnE6XG4rXHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2dldHJxKGJsa19hZGRfdHJhY2VfZ2V0cnEsIE5VTEwpO1xuK291dF9iaW9fcXVldWU6XG4rXHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19xdWV1ZShibGtfYWRkX3RyYWNlX2Jpb19xdWV1ZSwgTlVMTCk7XG4rb3V0X2Jpb19mcm9udG1lcmdlOlxuK1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fZnJvbnRtZXJnZShibGtfYWRkX3RyYWNlX2Jpb19mcm9udG1lcmdlLCBOVUxMKTtcbitvdXRfYmlvX2JhY2ttZXJnZTpcbitcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2JhY2ttZXJnZShibGtfYWRkX3RyYWNlX2Jpb19iYWNrbWVyZ2UsIE5VTEwpO1xuK291dF9iaW9fY29tcGxldGU6XG4rXHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19jb21wbGV0ZShibGtfYWRkX3RyYWNlX2Jpb19jb21wbGV0ZSwgTlVMTCk7XG4rb3V0X3JxX2NvbXBsZXRlOlxuK1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9jb21wbGV0ZShibGtfYWRkX3RyYWNlX3JxX2NvbXBsZXRlLCBOVUxMKTtcbitvdXRfcnFfcmVxdWV1ZTpcbitcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfcmVxdWV1ZShibGtfYWRkX3RyYWNlX3JxX3JlcXVldWUsIE5VTEwpO1xuK291dF9ycV9tZXJnZTpcbitcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfbWVyZ2UoYmxrX2FkZF90cmFjZV9ycV9tZXJnZSwgTlVMTCk7XG4rb3V0X3JxX2lzc3VlOlxuK1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9pc3N1ZShibGtfYWRkX3RyYWNlX3JxX2lzc3VlLCBOVUxMKTtcbitvdXRfcnFfaW5zZXJ0OlxuK1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9pbnNlcnQoYmxrX2FkZF90cmFjZV9ycV9pbnNlcnQsIE5VTEwpO1xuK1x0dHJhY2Vwb2ludF9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyKCk7XG4rb3V0OlxuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYmxrX3VucmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZClcbkBAIC0xOTE2LDggKzIwMDQsMTEgQEAgc3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXBfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4gXG4gXHRibGtfdHJhY2Vfc2V0dXBfbGJhKGJ0LCBiZGV2KTtcbiBcbitcdHJldCA9IGdldF9wcm9iZV9yZWYoKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZnJlZV9idDtcbitcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihxLVx1MDAzZWJsa190cmFjZSwgYnQpO1xuLVx0Z2V0X3Byb2JlX3JlZigpO1xuIFx0cmV0dXJuIDA7XG4gXG4gZnJlZV9idDpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjI5OjQ3Ljk1MDI3NDc3MloiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTgwMDA0OTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQkxLVFJBQ0UgUGF0Y2ggZm9yIEVycm9yIEhhbmRsaW5nIGFuZCBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0aWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhleSd2ZSBtYWRlIHNvbWUgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSB0cmFjZXBvaW50IHJlZ2lzdHJhdGlvbiBwcm9jZXNzLCBhbmQgSSBuZWVkIHRvIGFzc2VzcyB0aGUgaW1wYWN0LlxuXG5GaXJzdCwgSSBzZWUgYGJsa19yZWdpc3Rlcl90cmFjZXBvaW50c2AgaGFzIGJlZW4gYWx0ZXJlZC4gUHJldmlvdXNseSwgaXQganVzdCByZXR1cm5lZCB2b2lkLCBhbmQgYW55IGVycm9ycyB3ZXJlIHNpbXBseSBXQVJOJ2QuIE5vdywgaXQgcmV0dXJucyBhbiBpbnQsIGFsbG93aW5nIGZvciBleHBsaWNpdCBlcnJvciBjb2Rlcy4gSW1wb3J0YW50bHksIGlmIHJlZ2lzdGVyaW5nIGEgdHJhY2Vwb2ludCBmYWlscywgaXQgKnVud2luZHMqIHRoZSBhbHJlYWR5IHJlZ2lzdGVyZWQgb25lcyBhbmQgcHJvcGFnYXRlcyB0aGUgZXJyb3IuIEdvb2QsIHRoYXQncyBhIGRlZmluaXRlIGltcHJvdmVtZW50IGluIHJvYnVzdG5lc3MuXG5cbk5leHQsIGBnZXRfcHJvYmVfcmVmYCBub3cgcmV0dXJucyBhbiBpbnQgdG9vLiBJdHMgbG9naWMgc2VlbXMgZGVzaWduZWQgdG8gaGFuZGxlIHRoZSBlcnJvciByZXR1cm4gZnJvbSBgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzYCB3aGVuIGBibGtfcHJvYmVzX3JlZmAgaXMgMS4gSWYgcmVnaXN0cmF0aW9uIGZhaWxlZCwgaXQgZGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IGFuZCBhbHNvIHJldHVybnMgdGhlIGVycm9yLlxuXG5UaGVuLCBgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplYCBpcyBtb2RpZmllZCwgYWxzbyByZXR1cm5pbmcgYW4gYGludGAgbm93LiBJdCBjYWxscyBgZ2V0X3Byb2JlX3JlZigpYCwgYW5kIGlmICp0aGF0KiBmYWlscywgaXQgcmV0dXJucyB0aGUgZXJyb3IgKmJlZm9yZSogdGhlIGByY3VfYXNzaWduX3BvaW50ZXJgIGNhbGwuIFRoaXMgaXMga2V5LCBhcyB3ZSBhdm9pZCBzb21lIGZvcm0gb2YgYSByYWNlIGNvbmRpdGlvbiBhbmQgYSBwb3NzaWJsZSBjb3JydXB0aW9uLlxuXG5JIG5vdGljZSB0aGF0IHRoZSBjYWxsZXJzIG9mIGBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemVgIOKAkyBgYmxrX3RyYWNlX3NldHVwYCwgYGJsa190cmFjZV9zZXR1cDJgLCBhbmQgYGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXBgIOKAkyBhcmUgYWxsIHVwZGF0ZWQgdG8gY2hlY2sgdGhpcyByZXR1cm4gdmFsdWUuIElmIGBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemVgIGZhaWxzLCB0aGVuIHRoZXkgZnJlZSB0aGUgdHJhY2Ugc3RydWN0dXJlLCB1bmxvY2sgZGVidWdmcywgYW5kIHByb3BhZ2F0ZSB0aGUgZXJyb3IuIEFsc28sIEkgc2VlIGBibGtfdHJhY2Vfc2V0dXBfcXVldWVgIG5vdyBoYW5kbGVzIHRoZSBmYWlsdXJlIG9mIGBnZXRfcHJvYmVfcmVmKClgIGJ5IGp1bXBpbmcgdG8gYGZyZWVfYnRgLiBBbGwgb2YgdGhlc2UgdGhpbmdzIGxvb2sgZ29vZCwgYXQgYSBnbGFuY2UsIGZyb20gYSBjb250cm9sIGZsb3cgcGVyc3BlY3RpdmUuXG5cbk9rYXksIG5vdyBmb3IgdGhlIHBhcnQgdGhhdCByZWFsbHkgaW50ZXJlc3RzIG1lOiBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBUaGUgcHJpbWFyeSB0aGluZyBJIHdhbnQgdG8gZXZhbHVhdGUgaXMgdGhlIHBvc3NpYmlsaXR5IG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvcm1hdGlvbiBsZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgYSBjb21tb24gY2xhc3Mgb2YgYnVncyBpbiBrZXJuZWwgY29kZS5cblxuU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBjb2RlIGludGVyYWN0cyB3aXRoIHVzZXItc3BhY2UgZGF0YSBzdHJ1Y3R1cmVzLiBNeSBmb2N1cyBpcyBvbiB0aGUgYGJsa190cmFjZV9zZXR1cGAgZnVuY3Rpb24uIFRoZSBjb2RlIGxvb2tzIGxpa2UgdGhpczpcblxuYGBgY1xuaW50IGJsa190cmFjZV9zZXR1cChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSwgZGV2X3QgZGV2LFxuLi4uXG5cdHJldCA9IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAxLCBidCwgXHUwMDI2YnV0czIpO1xuXHRpZiAocmV0KSB7XG5cdFx0YmxrX3RyYWNlX2ZyZWUocSwgYnQpO1xuXHRcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XG5cdFx0cmV0dXJuIHJldDtcblx0fVxuXHRzdHJzY3B5KGJ1dHMubmFtZSwgYnV0czIubmFtZSwgQkxLVFJBQ0VfQkRFVl9TSVpFKTtcblx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcblxuXHRpZiAoY29weV90b191c2VyKGFyZywgXHUwMDI2YnV0cywgc2l6ZW9mKGJ1dHMpKSlcbi4uLlxuYGBgXG5cblNvLCBJ4oCZbSB6ZXJvaW5nIGluIG9uIHRoaXMgYGNvcHlfdG9fdXNlcmAgY2FsbC4gSSBzZWUgdGhlIGNvZGUgY2FsbHMgYGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZWAuIElmIHRoYXQgZmFpbHMsIHRoZSBwcm9ncmFtIHJldHVybnMuIEhvd2V2ZXIsIGJlZm9yZSB0aGUgYGNvcHlfdG9fdXNlcmAgY2FsbCwgYHN0cnNjcHlgIGlzIHVzZWQgdG8gY29weSBmcm9tIGBidXRzMi5uYW1lYCB0byBgYnV0cy5uYW1lYC4gTm93LCBpZiBgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplYCBmYWlscywgaXMgdGhlIGRhdGEgaW4gdGhlIGBidXRzMmAgc3RydWN0dXJlIHdlbGwgZGVmaW5lZCwgb3IgZG9lcyBpdCBoYXZlIGdhcmJhZ2UgZGF0YT8gVGhpcyBoYXMgYSBnb29kIGNoYW5jZSBvZiBiZWluZyB3aGVyZSBhIGJ1ZyBjYW4gYmUgbG9jYXRlZC4gSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gYGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jYCBhcm91bmQgbGluZXMgNzgwIHRvIDkyMCB0byBjaGVjayB0aGUgY29udGV4dCBhcm91bmQgdGhlc2UgdmFyaWFibGVzIHRvIGRldGVybWluZSBpZiBpdCBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkuIE15IGh1bmNoIGlzIHRoYXQgdGhpcyBpcyB0aGUgcG9pbnQgSSdsbCBmaW5kIGFuIGlzc3VlIGlmIHRoZXJlIGlzIG9uZS4gTGV0J3Mgc3RhcnQgdGhlIHJlYWRpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNTcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjoyOTo1My41MzAyODMxMTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9ibGt0cmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NzA6XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHEtXFx1MDAzZWJsa190cmFjZSwgYnQpO1xcbiA3NzE6XFx0XFx0cmV0dXJuIDA7XFxuIDc3MjpcXHR9XFxuIDc3MzpcXHRcXG4gNzc0OlxcdGludCBibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldixcXG4gNzc1OlxcdFxcdFxcdCAgICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxcbiA3NzY6XFx0XFx0XFx0ICAgIGNoYXIgX191c2VyICphcmcpXFxuIDc3NzpcXHR7XFxuIDc3ODpcXHRcXHRzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAyIGJ1dHMyO1xcbiA3Nzk6XFx0XFx0c3RydWN0IGJsa191c2VyX3RyYWNlX3NldHVwIGJ1dHM7XFxuIDc4MDpcXHRcXHRzdHJ1Y3QgYmxrX3RyYWNlICpidDtcXG4gNzgxOlxcdFxcdHVuc2lnbmVkIGludCBtZW1mbGFncztcXG4gNzgyOlxcdFxcdGludCByZXQ7XFxuIDc4MzpcXHRcXG4gNzg0OlxcdFxcdHJldCA9IGNvcHlfZnJvbV91c2VyKFxcdTAwMjZidXRzLCBhcmcsIHNpemVvZihidXRzKSk7XFxuIDc4NTpcXHRcXHRpZiAocmV0KVxcbiA3ODY6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDc4NzpcXHRcXG4gNzg4OlxcdFxcdGlmICghYnV0cy5idWZfc2l6ZSB8fCAhYnV0cy5idWZfbnIpXFxuIDc4OTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzkwOlxcdFxcbiA3OTE6XFx0XFx0YnV0czIgPSAoc3RydWN0IGJsa191c2VyX3RyYWNlX3NldHVwMikge1xcbiA3OTI6XFx0XFx0XFx0LmFjdF9tYXNrID0gYnV0cy5hY3RfbWFzayxcXG4gNzkzOlxcdFxcdFxcdC5idWZfc2l6ZSA9IGJ1dHMuYnVmX3NpemUsXFxuIDc5NDpcXHRcXHRcXHQuYnVmX25yID0gYnV0cy5idWZfbnIsXFxuIDc5NTpcXHRcXHRcXHQuc3RhcnRfbGJhID0gYnV0cy5zdGFydF9sYmEsXFxuIDc5NjpcXHRcXHRcXHQuZW5kX2xiYSA9IGJ1dHMuZW5kX2xiYSxcXG4gNzk3OlxcdFxcdFxcdC5waWQgPSBidXRzLnBpZCxcXG4gNzk4OlxcdFxcdH07XFxuIDc5OTpcXHRcXG4gODAwOlxcdFxcdG1lbWZsYWdzID0gYmxrX2RlYnVnZnNfbG9jayhxKTtcXG4gODAxOlxcdFxcdGJ0ID0gYmxrX3RyYWNlX3NldHVwX3ByZXBhcmUocSwgbmFtZSwgZGV2LCBidXRzLmJ1Zl9zaXplLCBidXRzLmJ1Zl9ucixcXG4gODAyOlxcdFxcdFxcdFxcdFxcdCAgICAgYmRldik7XFxuIDgwMzpcXHRcXHRpZiAoSVNfRVJSKGJ0KSkge1xcbiA4MDQ6XFx0XFx0XFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcXG4gODA1OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGJ0KTtcXG4gODA2OlxcdFxcdH1cXG4gODA3OlxcdFxcdHJldCA9IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAxLCBidCwgXFx1MDAyNmJ1dHMyKTtcXG4gODA4OlxcdFxcdGlmIChyZXQpIHtcXG4gODA5OlxcdFxcdFxcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcXG4gODEwOlxcdFxcdFxcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XFxuIDgxMTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA4MTI6XFx0XFx0fVxcbiA4MTM6XFx0XFx0c3Ryc2NweShidXRzLm5hbWUsIGJ1dHMyLm5hbWUsIEJMS1RSQUNFX0JERVZfU0laRSk7XFxuIDgxNDpcXHRcXHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xcbiA4MTU6XFx0XFxuIDgxNjpcXHRcXHRpZiAoY29weV90b191c2VyKGFyZywgXFx1MDAyNmJ1dHMsIHNpemVvZihidXRzKSkpIHtcXG4gODE3OlxcdFxcdFxcdGJsa190cmFjZV9yZW1vdmUocSk7XFxuIDgxODpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gODE5OlxcdFxcdH1cXG4gODIwOlxcdFxcdHJldHVybiAwO1xcbiA4MjE6XFx0fVxcbiA4MjI6XFx0RVhQT1JUX1NZTUJPTF9HUEwoYmxrX3RyYWNlX3NldHVwKTtcXG4gODIzOlxcdFxcbiA4MjQ6XFx0c3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXAyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXFxuIDgyNTpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgY2hhciBfX3VzZXIgKmFyZylcXG4gODI2OlxcdHtcXG4gODI3OlxcdFxcdHN0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cDIgYnV0czI7XFxuIDgyODpcXHRcXHRzdHJ1Y3QgYmxrX3RyYWNlICpidDtcXG4gODI5OlxcdFxcdHVuc2lnbmVkIGludCBtZW1mbGFncztcXG4gODMwOlxcdFxcdGludCByZXQ7XFxuIDgzMTpcXHRcXG4gODMyOlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2YnV0czIsIGFyZywgc2l6ZW9mKGJ1dHMyKSkpXFxuIDgzMzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gODM0OlxcdFxcbiA4MzU6XFx0XFx0aWYgKCFidXRzMi5idWZfc2l6ZSB8fCAhYnV0czIuYnVmX25yKVxcbiA4MzY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDgzNzpcXHRcXG4gODM4OlxcdFxcdGlmIChidXRzMi5mbGFncyAhPSAwKVxcbiA4Mzk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDg0MDpcXHRcXG4gODQxOlxcdFxcdG1lbWZsYWdzID0gYmxrX2RlYnVnZnNfbG9jayhxKTtcXG4gODQyOlxcdFxcdGJ0ID0gYmxrX3RyYWNlX3NldHVwX3ByZXBhcmUocSwgbmFtZSwgZGV2LCBidXRzMi5idWZfc2l6ZSwgYnV0czIuYnVmX25yLFxcbiA4NDM6XFx0XFx0XFx0XFx0XFx0ICAgICBiZGV2KTtcXG4gODQ0OlxcdFxcdGlmIChJU19FUlIoYnQpKSB7XFxuIDg0NTpcXHRcXHRcXHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xcbiA4NDY6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoYnQpO1xcbiA4NDc6XFx0XFx0fVxcbiA4NDg6XFx0XFx0cmV0ID0gYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDIsIGJ0LCBcXHUwMDI2YnV0czIpO1xcbiA4NDk6XFx0XFx0aWYgKHJldCkge1xcbiA4NTA6XFx0XFx0XFx0YmxrX3RyYWNlX2ZyZWUocSwgYnQpO1xcbiA4NTE6XFx0XFx0XFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcXG4gODUyOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDg1MzpcXHRcXHR9XFxuIDg1NDpcXHRcXHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xcbiA4NTU6XFx0XFxuIDg1NjpcXHRcXHRpZiAoY29weV90b191c2VyKGFyZywgXFx1MDAyNmJ1dHMyLCBzaXplb2YoYnV0czIpKSkge1xcbiA4NTc6XFx0XFx0XFx0YmxrX3RyYWNlX3JlbW92ZShxKTtcXG4gODU4OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiA4NTk6XFx0XFx0fVxcbiA4NjA6XFx0XFx0cmV0dXJuIDA7XFxuIDg2MTpcXHR9XFxuIDg2MjpcXHRcXG4gODYzOlxcdCNpZiBkZWZpbmVkKENPTkZJR19DT01QQVQpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1g4Nl82NClcXG4gODY0OlxcdHN0YXRpYyBpbnQgY29tcGF0X2Jsa190cmFjZV9zZXR1cChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSxcXG4gODY1OlxcdFxcdFxcdFxcdFxcdCAgZGV2X3QgZGV2LCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxcbiA4NjY6XFx0XFx0XFx0XFx0XFx0ICBjaGFyIF9fdXNlciAqYXJnKVxcbiA4Njc6XFx0e1xcbiA4Njg6XFx0XFx0c3RydWN0IGJsa191c2VyX3RyYWNlX3NldHVwMiBidXRzMjtcXG4gODY5OlxcdFxcdHN0cnVjdCBjb21wYXRfYmxrX3VzZXJfdHJhY2Vfc2V0dXAgY2J1dHM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjI5OjUzLjUzMDQzMDE1NloiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTE1MDM5NjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGlmIEkgYW0gdGhlIG9uZSB0aGlua2luZyBpdCwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipGb2N1c2VkIFJldmlldyBvZiBTcGVjaWZpYyBDb2RlIExpbmVzKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gdGhvcm91Z2ggaGVyZS4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgdGhpcyBpc3N1ZSwgYW5kIGNvbnNpZGVyaW5nIHdoYXQgSSBrbm93IGFib3V0IHRoZSBzeXN0ZW0ncyBhcmNoaXRlY3R1cmUsIEkgd2FudCB0byB6ZXJvIGluIG9uIGEgcGFydGljdWxhciBzZWN0aW9uIG9mIGNvZGUuIFNwZWNpZmljYWxseSwgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGxpbmVzIDg3MCB0aHJvdWdoIDkxMC4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSBhbmFseXplIHRoZSBsb2dpYyBpbXBsZW1lbnRlZCB0aGVyZSwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgb3Igc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIG1vZHVsZXMuIEkgZXhwZWN0IHRoZXJlIHRvIGJlIHRoZSByb290IG9mIHRoZSBpc3N1ZSB0aGVyZS4gVGltZSB0byBkaXZlIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDUzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjoyOTo1Ni40NDU0NzIxMThaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9ibGt0cmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg3MDpcXHRcXHRzdHJ1Y3QgYmxrX3RyYWNlICpidDtcXG4gODcxOlxcdFxcdHVuc2lnbmVkIGludCBtZW1mbGFncztcXG4gODcyOlxcdFxcdGludCByZXQ7XFxuIDg3MzpcXHRcXG4gODc0OlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2Y2J1dHMsIGFyZywgc2l6ZW9mKGNidXRzKSkpXFxuIDg3NTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gODc2OlxcdFxcbiA4Nzc6XFx0XFx0aWYgKCFjYnV0cy5idWZfc2l6ZSB8fCAhY2J1dHMuYnVmX25yKVxcbiA4Nzg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDg3OTpcXHRcXG4gODgwOlxcdFxcdGJ1dHMyID0gKHN0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cDIpIHtcXG4gODgxOlxcdFxcdFxcdC5hY3RfbWFzayA9IGNidXRzLmFjdF9tYXNrLFxcbiA4ODI6XFx0XFx0XFx0LmJ1Zl9zaXplID0gY2J1dHMuYnVmX3NpemUsXFxuIDg4MzpcXHRcXHRcXHQuYnVmX25yID0gY2J1dHMuYnVmX25yLFxcbiA4ODQ6XFx0XFx0XFx0LnN0YXJ0X2xiYSA9IGNidXRzLnN0YXJ0X2xiYSxcXG4gODg1OlxcdFxcdFxcdC5lbmRfbGJhID0gY2J1dHMuZW5kX2xiYSxcXG4gODg2OlxcdFxcdFxcdC5waWQgPSBjYnV0cy5waWQsXFxuIDg4NzpcXHRcXHR9O1xcbiA4ODg6XFx0XFxuIDg4OTpcXHRcXHRtZW1mbGFncyA9IGJsa19kZWJ1Z2ZzX2xvY2socSk7XFxuIDg5MDpcXHRcXHRidCA9IGJsa190cmFjZV9zZXR1cF9wcmVwYXJlKHEsIG5hbWUsIGRldiwgYnV0czIuYnVmX3NpemUsIGJ1dHMyLmJ1Zl9ucixcXG4gODkxOlxcdFxcdFxcdFxcdFxcdCAgICAgYmRldik7XFxuIDg5MjpcXHRcXHRpZiAoSVNfRVJSKGJ0KSkge1xcbiA4OTM6XFx0XFx0XFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcXG4gODk0OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGJ0KTtcXG4gODk1OlxcdFxcdH1cXG4gODk2OlxcdFxcdHJldCA9IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAxLCBidCwgXFx1MDAyNmJ1dHMyKTtcXG4gODk3OlxcdFxcdGlmIChyZXQpIHtcXG4gODk4OlxcdFxcdFxcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcXG4gODk5OlxcdFxcdFxcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XFxuIDkwMDpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA5MDE6XFx0XFx0fVxcbiA5MDI6XFx0XFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcXG4gOTAzOlxcdFxcbiA5MDQ6XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFxcdTAwMjZidXRzMi5uYW1lLCBBUlJBWV9TSVpFKGJ1dHMyLm5hbWUpKSkge1xcbiA5MDU6XFx0XFx0XFx0YmxrX3RyYWNlX3JlbW92ZShxKTtcXG4gOTA2OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiA5MDc6XFx0XFx0fVxcbiA5MDg6XFx0XFxuIDkwOTpcXHRcXHRyZXR1cm4gMDtcXG4gOTEwOlxcdH1cXG4gOTExOlxcdCNlbmRpZlxcbiA5MTI6XFx0XFxuIDkxMzpcXHRzdGF0aWMgaW50IF9fYmxrX3RyYWNlX3N0YXJ0c3RvcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IHN0YXJ0KVxcbiA5MTQ6XFx0e1xcbiA5MTU6XFx0XFx0c3RydWN0IGJsa190cmFjZSAqYnQ7XFxuIDkxNjpcXHRcXG4gOTE3OlxcdFxcdGJ0ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChxLVxcdTAwM2VibGtfdHJhY2UsXFxuIDkxODpcXHRcXHRcXHRcXHRcXHQgICAgICAgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZxLVxcdTAwM2VkZWJ1Z2ZzX211dGV4KSk7XFxuIDkxOTpcXHRcXHRpZiAoYnQgPT0gTlVMTClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6Mjk6NTYuNDQ1NjI4MjE4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0ODA5ODQzNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gQmxvY2sgVHJhY2luZyBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBNeSBmb2N1cyByaWdodCBub3cgaXMgb24gdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgZm9yIHRoZSBibG9jayB0cmFjaW5nIGluZnJhc3RydWN0dXJlLiBJIGtub3cgdGhlIHJlbGV2YW50IHNlY3Rpb24gaXMgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgYGJsa190cmFjZV9zZXR1cF9xdWV1ZWAgZnVuY3Rpb24uIFRvIHplcm8gaW4gb24gdGhlIGtleSBsb2dpYywgSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmVmZXJlbmNlIGFyb3VuZCBsaW5lcyAxOTkwIHRocm91Z2ggMjAyMC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSdtIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyBxdWV1ZXMgYXJlIHNldCB1cCBpbiBkZXRhaWwgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MzQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjMwOjAwLjkyNjYxNTMxNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk4MDpcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4xOTgxOlxcdFxcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcXG4xOTgyOlxcdFxcdHJldHVybiAwO1xcbjE5ODM6XFx0fVxcbjE5ODQ6XFx0XFxuMTk4NTpcXHQvKlxcbjE5ODY6XFx0ICogU2V0dXAgZXZlcnl0aGluZyByZXF1aXJlZCB0byBzdGFydCB0cmFjaW5nXFxuMTk4NzpcXHQgKi9cXG4xOTg4OlxcdHN0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbjE5ODk6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXFxuMTk5MDpcXHR7XFxuMTk5MTpcXHRcXHRzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IE5VTEw7XFxuMTk5MjpcXHRcXHRpbnQgcmV0ID0gLUVOT01FTTtcXG4xOTkzOlxcdFxcbjE5OTQ6XFx0XFx0YnQgPSBremFsbG9jX29iaigqYnQpO1xcbjE5OTU6XFx0XFx0aWYgKCFidClcXG4xOTk2OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjE5OTc6XFx0XFxuMTk5ODpcXHRcXHRidC1cXHUwMDNlbXNnX2RhdGEgPSBfX2FsbG9jX3BlcmNwdShCTEtfVE5fTUFYX01TRywgX19hbGlnbm9mX18oY2hhcikpO1xcbjE5OTk6XFx0XFx0aWYgKCFidC1cXHUwMDNlbXNnX2RhdGEpXFxuMjAwMDpcXHRcXHRcXHRnb3RvIGZyZWVfYnQ7XFxuMjAwMTpcXHRcXG4yMDAyOlxcdFxcdGJ0LVxcdTAwM2VkZXYgPSBiZGV2LVxcdTAwM2ViZF9kZXY7XFxuMjAwMzpcXHRcXHRidC1cXHUwMDNlYWN0X21hc2sgPSAodTE2KS0xO1xcbjIwMDQ6XFx0XFxuMjAwNTpcXHRcXHRibGtfdHJhY2Vfc2V0dXBfbGJhKGJ0LCBiZGV2KTtcXG4yMDA2OlxcdFxcbjIwMDc6XFx0XFx0cmV0ID0gZ2V0X3Byb2JlX3JlZigpO1xcbjIwMDg6XFx0XFx0aWYgKHJldClcXG4yMDA5OlxcdFxcdFxcdGdvdG8gZnJlZV9idDtcXG4yMDEwOlxcdFxcbjIwMTE6XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHEtXFx1MDAzZWJsa190cmFjZSwgYnQpO1xcbjIwMTI6XFx0XFx0cmV0dXJuIDA7XFxuMjAxMzpcXHRcXG4yMDE0OlxcdGZyZWVfYnQ6XFxuMjAxNTpcXHRcXHRibGtfdHJhY2VfZnJlZShxLCBidCk7XFxuMjAxNjpcXHRcXHRyZXR1cm4gcmV0O1xcbjIwMTc6XFx0fVxcbjIwMTg6XFx0XFxuMjAxOTpcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjozMDowMC45MjY4Mzc4ODRaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzU5Mzk1NzQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJsa3RyYWNlIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0J3MgYWxsIGFib3V0IGltcHJvdmluZyBlcnJvciBoYW5kbGluZyBkdXJpbmcgYmxrdHJhY2UgdHJhY2Vwb2ludCByZWdpc3RyYXRpb24uIFByZXZpb3VzbHksIGEgZmFpbGVkIHJlZ2lzdHJhdGlvbiB3YXMganVzdCBhIGBXQVJOX09OYCwgd2hpY2ggaXMgaGFyZGx5IHJvYnVzdC4gTm93LCBgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzYCBhY3R1YWxseSByZXR1cm5zIGFuIGVycm9yIGNvZGUsIGFuZCBjcnVjaWFsbHksICp1bnJlZ2lzdGVycyogYW55IGFscmVhZHkgcmVnaXN0ZXJlZCB0cmFjZXBvaW50cyBpZiBvbmUgZmFpbHMuIFRoaXMgaXMgYSBzb2xpZCBpbXByb3ZlbWVudCwgcHJldmVudGluZyBwYXJ0aWFsIHRyYWNlcG9pbnQgc2V0dXBzLiBUaGUgYGdldF9wcm9iZV9yZWZgIGZ1bmN0aW9uLCBhbmQgdGhlIGNhbGxzIHRvIHRoaXMgYnkgdmFyaW91cyBmdW5jdGlvbnMsIGFyZSBhbGwgY2hlY2tpbmcgdGhlIGVycm9yIGNvZGVzIGFuZCBlbnN1cmluZyBwcm9wZXIgdW53aW5kaW5nIG9uIGZhaWx1cmUuIEdvb2QuXG5cblRoZSBtb3JlIHByZXNzaW5nIHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgZWl0aGVyIHRvIHVzZXIgb3Igd2l0aGluIHRoZSBrZXJuZWwuIExldCdzIG1ldGhvZGljYWxseSBsb29rOlxuXG4xLiAgYGNvcHlfdG9fdXNlcmAgY2FsbHM6IFNlZW1zIGxpa2UgZXZlcnl0aGluZyBpcyBndWFyZGVkIHByb3Blcmx5LiBJbiBgYmxrX3RyYWNlX3NldHVwYCBhbmQgYGJsa190cmFjZV9zZXR1cDJgLCBhbnkgZXJyb3JzIHByb3BhZ2F0ZSAqYmVmb3JlKiByZWFjaGluZyBhbnkgYGNvcHlfdG9fdXNlcmAgY2FsbC4gQW5kIHRoZSBkYXRhIGJlaW5nIGNvcGllZCBpcyBlaXRoZXIgaW5pdGlhbGl6ZWQgZnJvbSB1c2VyIGlucHV0ICh2YWxpZGF0ZWQpIG9yIGluaXRpYWxpemVkIGJlZm9yZSBjb3B5aW5nLiBObyBzdXJwcmlzZXMgaGVyZS5cbjIuICBUcmFjZXBvaW50IHVud2luZGluZzogVGhlIHBhdGNoIGNvcnJlY3RseSB1bnJlZ2lzdGVycyBmdW5jdGlvbiBwb2ludGVycyBvciBjYWxsYmFja3Mgb24gZXJyb3IsIG5vdCB1bmluaXRpYWxpemVkIGRhdGEgb3Igc3RydWN0dXJlcy5cbjMuICBSZXR1cm4gY29kZXM6IEV2ZXJ5dGhpbmcgbG9va3MgY29uc2lzdGVudDsgYHJldGAgaXMgY29ycmVjdGx5IGFzc2lnbmVkIGluIGFsbCBicmFuY2hlcy5cbjQuICBTdHJ1Y3RzOiBObyBuZXcgc3RydWN0cyBvciB1bmluaXRpYWxpemVkIGZpZWxkcyBpbnRyb2R1Y2VkLiBFeGNlbGxlbnQuXG5cbk5vdywgZm9yIEtNU0FOIGFwcGxpY2FiaWxpdHksIG15IGd1dCBmZWVsaW5nIHNheXMgdGhpcyBpcyBhIFwibm8uXCIgVGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCBlcnJvciB1bndpbmRpbmcsIHRyYWNlcG9pbnQgcmVnaXN0cmF0aW9uLCBhbmQgZXJyb3IgaGFuZGxpbmcuIEFueSBidWdzIHdvdWxkIGxlYW4gdG93YXJkIHJlc291cmNlIGxlYWtzLCBlcnJvciBwYXRoIGhhbmRsaW5nIGlzc3Vlcywgb3IgbWF5YmUgbG9ja2luZyBwcm9ibGVtcyBvciB1c2UtYWZ0ZXItZnJlZSwgbm90IHRoZSBraW5kIG9mIHRoaW5ncyBLTVNBTiB0eXBpY2FsbHkgY2F0Y2hlcywgbm9yIGRvIEkgc2VlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkLiBTdGFuZGFyZCB0b29scywgS0FTQU4sIGFuZCBMT0NLREVQIGFyZSBnb2luZyB0byBiZSBtb3JlIHVzZWZ1bCBoZXJlLlxuXG5JJ20gY29uZmlkZW50OyBJJ2xsIHNldCBgTmVlZHNLTVNBTiA9IGZhbHNlYCB3aXRoIGEgY2xlYXIgY29uc2NpZW5jZS4gVGhpcyBpcyBzb3VuZCwgd2VsbC1yZWFzb25lZCwgYW5kIGEgZGVmaW5pdGUgaW1wcm92ZW1lbnQgdG8gdGhlIGVycm9yIGhhbmRsaW5nIG9mIGJsa3RyYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE1MCwiT3V0cHV0VG9rZW5zIjoxOTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjozMDowOC41MjA3OTc0ODhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tpbmcgYW5kIHVud2luZGluZyB0byBibGt0cmFjZSB0cmFjZXBvaW50IHJlZ2lzdHJhdGlvbiAoYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzLCBnZXRfcHJvYmVfcmVmLCBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUsIGJsa190cmFjZV9zZXR1cF9xdWV1ZSkuIEluIGZhaWx1cmUgY2FzZXMsIGl0IHByb3Blcmx5IHJvbGxzIGJhY2sgcmVnaXN0ZXJlZCB0cmFjZXBvaW50cywgZGVjcmVtZW50cyBwcm9iZSByZWZlcmVuY2UgY291bnRzLCBjbGVhbnMgdXAgYWxsb2NhdGVkIGJsa190cmFjZSBzdHJ1Y3R1cmVzIHZpYSBibGtfdHJhY2VfZnJlZSwgYW5kIHJldHVybnMgZXJyb3IgY29kZXMgYmVmb3JlIGFueSBkYXRhIGlzIGNvcGllZCBiYWNrIHRvIHVzZXIgc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYXJlIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgYWxsb2NhdGlvbnMgb3IgY29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLiBQb3RlbnRpYWwgcmlza3Mgb24gdGhlc2UgcGF0aHMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgbG9jay9jbGVhbnVwIGVycm9ycykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllczsgdGh1cywgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tpbmcgYW5kIHVud2luZGluZyB0byBibGt0cmFjZSB0cmFjZXBvaW50IHJlZ2lzdHJhdGlvbiAoYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzLCBnZXRfcHJvYmVfcmVmLCBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUsIGJsa190cmFjZV9zZXR1cF9xdWV1ZSkuIEluIGZhaWx1cmUgY2FzZXMsIGl0IHByb3Blcmx5IHJvbGxzIGJhY2sgcmVnaXN0ZXJlZCB0cmFjZXBvaW50cywgZGVjcmVtZW50cyBwcm9iZSByZWZlcmVuY2UgY291bnRzLCBjbGVhbnMgdXAgYWxsb2NhdGVkIGJsa190cmFjZSBzdHJ1Y3R1cmVzIHZpYSBibGtfdHJhY2VfZnJlZSwgYW5kIHJldHVybnMgZXJyb3IgY29kZXMgYmVmb3JlIGFueSBkYXRhIGlzIGNvcGllZCBiYWNrIHRvIHVzZXIgc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYXJlIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgYWxsb2NhdGlvbnMgb3IgY29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLiBQb3RlbnRpYWwgcmlza3Mgb24gdGhlc2UgcGF0aHMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgbG9jay9jbGVhbnVwIGVycm9ycykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllczsgdGh1cywgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowcrzcr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 22:28:02 +0000 UTC FinishedAt: 2026-08-31 22:30:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_IO_TRACE", "BLOCK", "SYSFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_IO_TRACE", "BLOCK", "SYSFS" ], "series_id": "d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "blk_trace_ioctl", "blk_trace_setup" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfSU9fVFJBQ0UmIzM0OywKICAgICYjMzQ7QkxPQ0smIzM0OywKICAgICYjMzQ7U1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtfdHJhY2VfaW9jdGwmIzM0OywKICAgICYjMzQ7YmxrX3RyYWNlX3NldHVwJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvciBjaGVja2luZyBhbmQgdW53aW5kaW5nIHRvIGJsa3RyYWNlIHRyYWNlcG9pbnQgcmVnaXN0cmF0aW9uIChibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHMsIGdldF9wcm9iZV9yZWYsIGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZSwgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKS4gSW4gZmFpbHVyZSBjYXNlcywgaXQgcHJvcGVybHkgcm9sbHMgYmFjayByZWdpc3RlcmVkIHRyYWNlcG9pbnRzLCBkZWNyZW1lbnRzIHByb2JlIHJlZmVyZW5jZSBjb3VudHMsIGNsZWFucyB1cCBhbGxvY2F0ZWQgYmxrX3RyYWNlIHN0cnVjdHVyZXMgdmlhIGJsa190cmFjZV9mcmVlLCBhbmQgcmV0dXJucyBlcnJvciBjb2RlcyBiZWZvcmUgYW55IGRhdGEgaXMgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZS4gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBhcmUgcmVhZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggdW5pbml0aWFsaXplZCBhbGxvY2F0aW9ucyBvciBjb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIGRhdGEgYXJlIGludHJvZHVjZWQuIFBvdGVudGlhbCByaXNrcyBvbiB0aGVzZSBwYXRocyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBsb2NrL2NsZWFudXAgZXJyb3JzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzOyB0aHVzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJsa3RyYWNlIHRyYWNlcG9pbnQgcmVnaXN0cmF0aW9uIGFuZCBzZXR1cCBlcnJvciB1bndpbmRpbmcgcGF0aHMgaW4ga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMuIEl0IG1ha2VzIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyByZXR1cm4gZXJyb3IgY29kZXMgYW5kIHJvbGxiYWNrIHJlZ2lzdGVyZWQgdHJhY2Vwb2ludHMgdXBvbiBmYWlsdXJlLCBhbmQgcHJvcGVybHkgaGFuZGxlcyB0cmFjZXBvaW50IHNldHVwIGVycm9ycyBhY3Jvc3MgYmxrX3RyYWNlX3NldHVwKCksIGJsa190cmFjZV9zZXR1cDIoKSwgY29tcGF0X2Jsa190cmFjZV9zZXR1cCgpLCBhbmQgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKCksIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGJsb2NrIGRldmljZSBpb2N0bHMgYW5kIHN5c2ZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzU4Y2ZlNjQ1NmM4NDYzYjcxNzA0OWI5OTYwMTk2MGM5MDM5NjhhOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDIyOjI5OjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jIGIva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNcbmluZGV4IDhjZDI1MjBiNGM5OWUuLmMyMzI0Mjk4YzZjMTUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNcbkBAIC02MCw3ICYjNDM7NjAsNyBAQCBzdGF0aWMgc3RydWN0IHRyYWNlcl9mbGFncyBibGtfdHJhY2VyX2ZsYWdzID0ge1xuIHN0YXRpYyBERUZJTkVfTVVURVgoYmxrX3Byb2JlX211dGV4KTtcbiBzdGF0aWMgaW50IGJsa19wcm9iZXNfcmVmO1xuIFxuLXN0YXRpYyB2b2lkIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKTtcbiYjNDM7c3RhdGljIGludCBibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZCk7XG4gc3RhdGljIHZvaWQgYmxrX3VucmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZCk7XG4gXG4gc3RhdGljIHZvaWQgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50KHN0cnVjdCBibGtfaW9fdHJhY2UgKnQsIHBpZF90IHBpZCwgaW50IGNwdSxcbkBAIC00ODUsMTIgJiM0Mzs0ODUsMTggQEAgc3RhdGljIHZvaWQgYmxrX3RyYWNlX2ZyZWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBibGtfdHJhY2UgKmJ0KVxuIFx0a2ZyZWUoYnQpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBnZXRfcHJvYmVfcmVmKHZvaWQpXG4mIzQzO3N0YXRpYyBpbnQgZ2V0X3Byb2JlX3JlZih2b2lkKVxuIHtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4gXHRtdXRleF9sb2NrKFx1MDAyNmJsa19wcm9iZV9tdXRleCk7XG4tXHRpZiAoJiM0MzsmIzQzO2Jsa19wcm9iZXNfcmVmID09IDEpXG4tXHRcdGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cygpO1xuJiM0MztcdGlmICgmIzQzOyYjNDM7YmxrX3Byb2Jlc19yZWYgPT0gMSkge1xuJiM0MztcdFx0cmV0ID0gYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRibGtfcHJvYmVzX3JlZi0tO1xuJiM0MztcdH1cbiBcdG11dGV4X3VubG9jayhcdTAwMjZibGtfcHJvYmVfbXV0ZXgpO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHB1dF9wcm9iZV9yZWYodm9pZClcbkBAIC03MjcsMTIgJiM0Mzs3MzMsMTQgQEAgc3RhdGljIHN0cnVjdCBibGtfdHJhY2UgKmJsa190cmFjZV9zZXR1cF9wcmVwYXJlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuIFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuLVx0XHRcdFx0ICAgICBjaGFyICpuYW1lLCBpbnQgdmVyc2lvbixcbi1cdFx0XHRcdCAgICAgc3RydWN0IGJsa190cmFjZSAqYnQsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cDIgKmJ1dHMpXG4mIzQzO3N0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuJiM0MztcdFx0XHRcdCAgICBjaGFyICpuYW1lLCBpbnQgdmVyc2lvbixcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGJsa190cmFjZSAqYnQsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cDIgKmJ1dHMpXG4gXG4ge1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuIFx0c3Ryc2NweV9wYWQoYnV0cy1cdTAwM2VuYW1lLCBuYW1lLCBCTEtUUkFDRV9CREVWX1NJWkUyKTtcbiBcbiBcdC8qXG5AQCAtNzU1LDggJiM0Mzs3NjMsMTIgQEAgc3RhdGljIHZvaWQgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuIFx0YnQtXHUwMDNlcGlkID0gYnV0cy1cdTAwM2VwaWQ7XG4gXHRidC1cdTAwM2V0cmFjZV9zdGF0ZSA9IEJsa3RyYWNlX3NldHVwO1xuIFxuJiM0MztcdHJldCA9IGdldF9wcm9iZV9yZWYoKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4gXHRyY3VfYXNzaWduX3BvaW50ZXIocS1cdTAwM2VibGtfdHJhY2UsIGJ0KTtcbi1cdGdldF9wcm9iZV9yZWYoKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gaW50IGJsa190cmFjZV9zZXR1cChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSwgZGV2X3QgZGV2LFxuQEAgLTc5Miw3ICYjNDM7ODA0LDEyIEBAIGludCBibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldixcbiBcdFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcbiBcdFx0cmV0dXJuIFBUUl9FUlIoYnQpO1xuIFx0fVxuLVx0YmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDEsIGJ0LCBcdTAwMjZidXRzMik7XG4mIzQzO1x0cmV0ID0gYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDEsIGJ0LCBcdTAwMjZidXRzMik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0YmxrX3RyYWNlX2ZyZWUocSwgYnQpO1xuJiM0MztcdFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuIFx0c3Ryc2NweShidXRzLm5hbWUsIGJ1dHMyLm5hbWUsIEJMS1RSQUNFX0JERVZfU0laRSk7XG4gXHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuIFxuQEAgLTgxMCw2ICYjNDM7ODI3LDcgQEAgc3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXAyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXG4gXHRzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAyIGJ1dHMyO1xuIFx0c3RydWN0IGJsa190cmFjZSAqYnQ7XG4gXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZidXRzMiwgYXJnLCBzaXplb2YoYnV0czIpKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG5AQCAtODI3LDcgJiM0Mzs4NDUsMTIgQEAgc3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXAyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXG4gXHRcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XG4gXHRcdHJldHVybiBQVFJfRVJSKGJ0KTtcbiBcdH1cbi1cdGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAyLCBidCwgXHUwMDI2YnV0czIpO1xuJiM0MztcdHJldCA9IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAyLCBidCwgXHUwMDI2YnV0czIpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcbiYjNDM7XHRcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiBcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XG4gXG4gXHRpZiAoY29weV90b191c2VyKGFyZywgXHUwMDI2YnV0czIsIHNpemVvZihidXRzMikpKSB7XG5AQCAtODQ2LDYgJiM0Mzs4NjksNyBAQCBzdGF0aWMgaW50IGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsXG4gXHRzdHJ1Y3QgY29tcGF0X2Jsa191c2VyX3RyYWNlX3NldHVwIGNidXRzO1xuIFx0c3RydWN0IGJsa190cmFjZSAqYnQ7XG4gXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZjYnV0cywgYXJnLCBzaXplb2YoY2J1dHMpKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG5AQCAtODY5LDcgJiM0Mzs4OTMsMTIgQEAgc3RhdGljIGludCBjb21wYXRfYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLFxuIFx0XHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuIFx0XHRyZXR1cm4gUFRSX0VSUihidCk7XG4gXHR9XG4tXHRibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMSwgYnQsIFx1MDAyNmJ1dHMyKTtcbiYjNDM7XHRyZXQgPSBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMSwgYnQsIFx1MDAyNmJ1dHMyKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRibGtfdHJhY2VfZnJlZShxLCBidCk7XG4mIzQzO1x0XHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4gXHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuIFxuIFx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFx1MDAyNmJ1dHMyLm5hbWUsIEFSUkFZX1NJWkUoYnV0czIubmFtZSkpKSB7XG5AQCAtMTMyNCw0OSAmIzQzOzEzNTMsMTA4IEBAIHZvaWQgYmxrX2FkZF9kcml2ZXJfZGF0YShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGJsa19hZGRfZHJpdmVyX2RhdGEpO1xuIFxuLXN0YXRpYyB2b2lkIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKVxuJiM0MztzdGF0aWMgaW50IGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKVxuIHtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9pbnNlcnQoYmxrX2FkZF90cmFjZV9ycV9pbnNlcnQsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2lzc3VlKGJsa19hZGRfdHJhY2VfcnFfaXNzdWUsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9ycV9pbnNlcnQ7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9tZXJnZShibGtfYWRkX3RyYWNlX3JxX21lcmdlLCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcnFfaXNzdWU7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9yZXF1ZXVlKGJsa19hZGRfdHJhY2VfcnFfcmVxdWV1ZSwgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3JxX21lcmdlO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfY29tcGxldGUoYmxrX2FkZF90cmFjZV9ycV9jb21wbGV0ZSwgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3JxX3JlcXVldWU7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fY29tcGxldGUoYmxrX2FkZF90cmFjZV9iaW9fY29tcGxldGUsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9ycV9jb21wbGV0ZTtcbiBcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19iYWNrbWVyZ2UoYmxrX2FkZF90cmFjZV9iaW9fYmFja21lcmdlLCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfYmlvX2NvbXBsZXRlO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2Zyb250bWVyZ2UoYmxrX2FkZF90cmFjZV9iaW9fZnJvbnRtZXJnZSwgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X2Jpb19iYWNrbWVyZ2U7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fcXVldWUoYmxrX2FkZF90cmFjZV9iaW9fcXVldWUsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9iaW9fZnJvbnRtZXJnZTtcbiBcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2dldHJxKGJsa19hZGRfdHJhY2VfZ2V0cnEsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9iaW9fcXVldWU7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibGtfem9uZV9hcHBlbmRfdXBkYXRlX3JlcXVlc3RfYmlvKFxuIFx0XHRibGtfYWRkX3RyYWNlX3pvbmVfdXBkYXRlX3JlcXVlc3QsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9nZXRycTtcbiBcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Rpc2tfem9uZV93cGx1Z19hZGRfYmlvKGJsa19hZGRfdHJhY2Vfem9uZV9wbHVnLFxuIFx0XHRcdFx0XHRcdCAgICAgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3pvbmVfdXBkYXRlX3JlcXVlc3Q7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibGtfem9uZV93cGx1Z19iaW8oYmxrX2FkZF90cmFjZV96b25lX3VucGx1ZyxcbiBcdFx0XHRcdFx0XHROVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfem9uZV9wbHVnO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcGx1ZyhibGtfYWRkX3RyYWNlX3BsdWcsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF96b25lX3VucGx1ZztcbiBcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3VucGx1ZyhibGtfYWRkX3RyYWNlX3VucGx1ZywgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3BsdWc7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19zcGxpdChibGtfYWRkX3RyYWNlX3NwbGl0LCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfdW5wbHVnO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX3JlbWFwKGJsa19hZGRfdHJhY2VfYmlvX3JlbWFwLCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfc3BsaXQ7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9yZW1hcChibGtfYWRkX3RyYWNlX3JxX3JlbWFwLCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfYmlvX3JlbWFwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO291dF9iaW9fcmVtYXA6XG4mIzQzO1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fcmVtYXAoYmxrX2FkZF90cmFjZV9iaW9fcmVtYXAsIE5VTEwpO1xuJiM0MztvdXRfc3BsaXQ6XG4mIzQzO1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19zcGxpdChibGtfYWRkX3RyYWNlX3NwbGl0LCBOVUxMKTtcbiYjNDM7b3V0X3VucGx1ZzpcbiYjNDM7XHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3VucGx1ZyhibGtfYWRkX3RyYWNlX3VucGx1ZywgTlVMTCk7XG4mIzQzO291dF9wbHVnOlxuJiM0MztcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcGx1ZyhibGtfYWRkX3RyYWNlX3BsdWcsIE5VTEwpO1xuJiM0MztvdXRfem9uZV91bnBsdWc6XG4mIzQzO1x0dW5yZWdpc3Rlcl90cmFjZV9ibGtfem9uZV93cGx1Z19iaW8oYmxrX2FkZF90cmFjZV96b25lX3VucGx1ZywgTlVMTCk7XG4mIzQzO291dF96b25lX3BsdWc6XG4mIzQzO1x0dW5yZWdpc3Rlcl90cmFjZV9kaXNrX3pvbmVfd3BsdWdfYWRkX2JpbyhibGtfYWRkX3RyYWNlX3pvbmVfcGx1ZywgTlVMTCk7XG4mIzQzO291dF96b25lX3VwZGF0ZV9yZXF1ZXN0OlxuJiM0MztcdHVucmVnaXN0ZXJfdHJhY2VfYmxrX3pvbmVfYXBwZW5kX3VwZGF0ZV9yZXF1ZXN0X2JpbyhcbiYjNDM7XHRcdGJsa19hZGRfdHJhY2Vfem9uZV91cGRhdGVfcmVxdWVzdCwgTlVMTCk7XG4mIzQzO291dF9nZXRycTpcbiYjNDM7XHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2dldHJxKGJsa19hZGRfdHJhY2VfZ2V0cnEsIE5VTEwpO1xuJiM0MztvdXRfYmlvX3F1ZXVlOlxuJiM0MztcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX3F1ZXVlKGJsa19hZGRfdHJhY2VfYmlvX3F1ZXVlLCBOVUxMKTtcbiYjNDM7b3V0X2Jpb19mcm9udG1lcmdlOlxuJiM0MztcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2Zyb250bWVyZ2UoYmxrX2FkZF90cmFjZV9iaW9fZnJvbnRtZXJnZSwgTlVMTCk7XG4mIzQzO291dF9iaW9fYmFja21lcmdlOlxuJiM0MztcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2JhY2ttZXJnZShibGtfYWRkX3RyYWNlX2Jpb19iYWNrbWVyZ2UsIE5VTEwpO1xuJiM0MztvdXRfYmlvX2NvbXBsZXRlOlxuJiM0MztcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2NvbXBsZXRlKGJsa19hZGRfdHJhY2VfYmlvX2NvbXBsZXRlLCBOVUxMKTtcbiYjNDM7b3V0X3JxX2NvbXBsZXRlOlxuJiM0MztcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfY29tcGxldGUoYmxrX2FkZF90cmFjZV9ycV9jb21wbGV0ZSwgTlVMTCk7XG4mIzQzO291dF9ycV9yZXF1ZXVlOlxuJiM0MztcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfcmVxdWV1ZShibGtfYWRkX3RyYWNlX3JxX3JlcXVldWUsIE5VTEwpO1xuJiM0MztvdXRfcnFfbWVyZ2U6XG4mIzQzO1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9tZXJnZShibGtfYWRkX3RyYWNlX3JxX21lcmdlLCBOVUxMKTtcbiYjNDM7b3V0X3JxX2lzc3VlOlxuJiM0MztcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfaXNzdWUoYmxrX2FkZF90cmFjZV9ycV9pc3N1ZSwgTlVMTCk7XG4mIzQzO291dF9ycV9pbnNlcnQ6XG4mIzQzO1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9pbnNlcnQoYmxrX2FkZF90cmFjZV9ycV9pbnNlcnQsIE5VTEwpO1xuJiM0MztcdHRyYWNlcG9pbnRfc3luY2hyb25pemVfdW5yZWdpc3RlcigpO1xuJiM0MztvdXQ6XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYmxrX3VucmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZClcbkBAIC0xOTE2LDggJiM0MzsyMDA0LDExIEBAIHN0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuIFxuIFx0YmxrX3RyYWNlX3NldHVwX2xiYShidCwgYmRldik7XG4gXG4mIzQzO1x0cmV0ID0gZ2V0X3Byb2JlX3JlZigpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGZyZWVfYnQ7XG4mIzQzO1xuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKHEtXHUwMDNlYmxrX3RyYWNlLCBidCk7XG4tXHRnZXRfcHJvYmVfcmVmKCk7XG4gXHRyZXR1cm4gMDtcbiBcbiBmcmVlX2J0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfSU9fVFJBQ0UmIzM0OywKICAgICYjMzQ7QkxPQ0smIzM0OywKICAgICYjMzQ7U1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtfdHJhY2VfaW9jdGwmIzM0OywKICAgICYjMzQ7YmxrX3RyYWNlX3NldHVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJsa3RyYWNlIHRyYWNlcG9pbnQgcmVnaXN0cmF0aW9uIGFuZCBzZXR1cCBlcnJvciB1bndpbmRpbmcgcGF0aHMgaW4ga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMuIEl0IG1ha2VzIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyByZXR1cm4gZXJyb3IgY29kZXMgYW5kIHJvbGxiYWNrIHJlZ2lzdGVyZWQgdHJhY2Vwb2ludHMgdXBvbiBmYWlsdXJlLCBhbmQgcHJvcGVybHkgaGFuZGxlcyB0cmFjZXBvaW50IHNldHVwIGVycm9ycyBhY3Jvc3MgYmxrX3RyYWNlX3NldHVwKCksIGJsa190cmFjZV9zZXR1cDIoKSwgY29tcGF0X2Jsa190cmFjZV9zZXR1cCgpLCBhbmQgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKCksIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGJsb2NrIGRldmljZSBpb2N0bHMgYW5kIHN5c2ZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzU4Y2ZlNjQ1NmM4NDYzYjcxNzA0OWI5OTYwMTk2MGM5MDM5NjhhOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDIyOjI5OjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYwppbmRleCA4Y2QyNTIwYjRjOTllLi5jMjMyNDI5OGM2YzE1IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYwpAQCAtNjAsNyAmIzQzOzYwLDcgQEAgc3RhdGljIHN0cnVjdCB0cmFjZXJfZmxhZ3MgYmxrX3RyYWNlcl9mbGFncyA9IHsKIHN0YXRpYyBERUZJTkVfTVVURVgoYmxrX3Byb2JlX211dGV4KTsKIHN0YXRpYyBpbnQgYmxrX3Byb2Jlc19yZWY7CiAKLXN0YXRpYyB2b2lkIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKTsKJiM0MztzdGF0aWMgaW50IGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKTsKIHN0YXRpYyB2b2lkIGJsa191bnJlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpOwogCiBzdGF0aWMgdm9pZCByZWNvcmRfYmxrdHJhY2VfZXZlbnQoc3RydWN0IGJsa19pb190cmFjZSAqdCwgcGlkX3QgcGlkLCBpbnQgY3B1LApAQCAtNDg1LDEyICYjNDM7NDg1LDE4IEBAIHN0YXRpYyB2b2lkIGJsa190cmFjZV9mcmVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmxrX3RyYWNlICpidCkKIAlrZnJlZShidCk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldF9wcm9iZV9yZWYodm9pZCkKJiM0MztzdGF0aWMgaW50IGdldF9wcm9iZV9yZWYodm9pZCkKIHsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiAJbXV0ZXhfbG9jaygmYW1wO2Jsa19wcm9iZV9tdXRleCk7Ci0JaWYgKCYjNDM7JiM0MztibGtfcHJvYmVzX3JlZiA9PSAxKQotCQlibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHMoKTsKJiM0MzsJaWYgKCYjNDM7JiM0MztibGtfcHJvYmVzX3JlZiA9PSAxKSB7CiYjNDM7CQlyZXQgPSBibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHMoKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJYmxrX3Byb2Jlc19yZWYtLTsKJiM0MzsJfQogCW11dGV4X3VubG9jaygmYW1wO2Jsa19wcm9iZV9tdXRleCk7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHB1dF9wcm9iZV9yZWYodm9pZCkKQEAgLTcyNywxMiAmIzQzOzczMywxNCBAQCBzdGF0aWMgc3RydWN0IGJsa190cmFjZSAqYmxrX3RyYWNlX3NldHVwX3ByZXBhcmUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCiAJcmV0dXJuIEVSUl9QVFIocmV0KTsKIH0KIAotc3RhdGljIHZvaWQgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAotCQkJCSAgICAgY2hhciAqbmFtZSwgaW50IHZlcnNpb24sCi0JCQkJICAgICBzdHJ1Y3QgYmxrX3RyYWNlICpidCwKLQkJCQkgICAgIHN0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cDIgKmJ1dHMpCiYjNDM7c3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCiYjNDM7CQkJCSAgICBjaGFyICpuYW1lLCBpbnQgdmVyc2lvbiwKJiM0MzsJCQkJICAgIHN0cnVjdCBibGtfdHJhY2UgKmJ0LAomIzQzOwkJCQkgICAgc3RydWN0IGJsa191c2VyX3RyYWNlX3NldHVwMiAqYnV0cykKIAogewomIzQzOwlpbnQgcmV0OwomIzQzOwogCXN0cnNjcHlfcGFkKGJ1dHMtJmd0O25hbWUsIG5hbWUsIEJMS1RSQUNFX0JERVZfU0laRTIpOwogCiAJLyoKQEAgLTc1NSw4ICYjNDM7NzYzLDEyIEBAIHN0YXRpYyB2b2lkIGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKIAlidC0mZ3Q7cGlkID0gYnV0cy0mZ3Q7cGlkOwogCWJ0LSZndDt0cmFjZV9zdGF0ZSA9IEJsa3RyYWNlX3NldHVwOwogCiYjNDM7CXJldCA9IGdldF9wcm9iZV9yZWYoKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKHEtJmd0O2Jsa190cmFjZSwgYnQpOwotCWdldF9wcm9iZV9yZWYoKTsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIGludCBibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldiwKQEAgLTc5Miw3ICYjNDM7ODA0LDEyIEBAIGludCBibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldiwKIAkJYmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTsKIAkJcmV0dXJuIFBUUl9FUlIoYnQpOwogCX0KLQlibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMSwgYnQsICZhbXA7YnV0czIpOwomIzQzOwlyZXQgPSBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMSwgYnQsICZhbXA7YnV0czIpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlibGtfdHJhY2VfZnJlZShxLCBidCk7CiYjNDM7CQlibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQogCXN0cnNjcHkoYnV0cy5uYW1lLCBidXRzMi5uYW1lLCBCTEtUUkFDRV9CREVWX1NJWkUpOwogCWJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7CiAKQEAgLTgxMCw2ICYjNDM7ODI3LDcgQEAgc3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXAyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsCiAJc3RydWN0IGJsa191c2VyX3RyYWNlX3NldHVwMiBidXRzMjsKIAlzdHJ1Y3QgYmxrX3RyYWNlICpidDsKIAl1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7CiYjNDM7CWludCByZXQ7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDtidXRzMiwgYXJnLCBzaXplb2YoYnV0czIpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC04MjcsNyAmIzQzOzg0NSwxMiBAQCBzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cDIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldiwKIAkJYmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTsKIAkJcmV0dXJuIFBUUl9FUlIoYnQpOwogCX0KLQlibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMiwgYnQsICZhbXA7YnV0czIpOwomIzQzOwlyZXQgPSBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMiwgYnQsICZhbXA7YnV0czIpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlibGtfdHJhY2VfZnJlZShxLCBidCk7CiYjNDM7CQlibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQogCWJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7CiAKIAlpZiAoY29weV90b191c2VyKGFyZywgJmFtcDtidXRzMiwgc2l6ZW9mKGJ1dHMyKSkpIHsKQEAgLTg0Niw2ICYjNDM7ODY5LDcgQEAgc3RhdGljIGludCBjb21wYXRfYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLAogCXN0cnVjdCBjb21wYXRfYmxrX3VzZXJfdHJhY2Vfc2V0dXAgY2J1dHM7CiAJc3RydWN0IGJsa190cmFjZSAqYnQ7CiAJdW5zaWduZWQgaW50IG1lbWZsYWdzOwomIzQzOwlpbnQgcmV0OwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7Y2J1dHMsIGFyZywgc2l6ZW9mKGNidXRzKSkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtODY5LDcgJiM0Mzs4OTMsMTIgQEAgc3RhdGljIGludCBjb21wYXRfYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLAogCQlibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpOwogCQlyZXR1cm4gUFRSX0VSUihidCk7CiAJfQotCWJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAxLCBidCwgJmFtcDtidXRzMik7CiYjNDM7CXJldCA9IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAxLCBidCwgJmFtcDtidXRzMik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWJsa190cmFjZV9mcmVlKHEsIGJ0KTsKJiM0MzsJCWJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiAJYmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTsKIAogCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYW1wO2J1dHMyLm5hbWUsIEFSUkFZX1NJWkUoYnV0czIubmFtZSkpKSB7CkBAIC0xMzI0LDQ5ICYjNDM7MTM1MywxMDggQEAgdm9pZCBibGtfYWRkX2RyaXZlcl9kYXRhKHN0cnVjdCByZXF1ZXN0ICpycSwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGJsa19hZGRfZHJpdmVyX2RhdGEpOwogCi1zdGF0aWMgdm9pZCBibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZCkKJiM0MztzdGF0aWMgaW50IGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKQogewogCWludCByZXQ7CiAKIAlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9pbnNlcnQoYmxrX2FkZF90cmFjZV9ycV9pbnNlcnQsIE5VTEwpOwotCVdBUk5fT04ocmV0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0OwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2lzc3VlKGJsa19hZGRfdHJhY2VfcnFfaXNzdWUsIE5VTEwpOwotCVdBUk5fT04ocmV0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3JxX2luc2VydDsKIAlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9tZXJnZShibGtfYWRkX3RyYWNlX3JxX21lcmdlLCBOVUxMKTsKLQlXQVJOX09OKHJldCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9ycV9pc3N1ZTsKIAlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9yZXF1ZXVlKGJsa19hZGRfdHJhY2VfcnFfcmVxdWV1ZSwgTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcnFfbWVyZ2U7CiAJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfY29tcGxldGUoYmxrX2FkZF90cmFjZV9ycV9jb21wbGV0ZSwgTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcnFfcmVxdWV1ZTsKIAlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fY29tcGxldGUoYmxrX2FkZF90cmFjZV9iaW9fY29tcGxldGUsIE5VTEwpOwotCVdBUk5fT04ocmV0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3JxX2NvbXBsZXRlOwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19iYWNrbWVyZ2UoYmxrX2FkZF90cmFjZV9iaW9fYmFja21lcmdlLCBOVUxMKTsKLQlXQVJOX09OKHJldCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9iaW9fY29tcGxldGU7CiAJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2Zyb250bWVyZ2UoYmxrX2FkZF90cmFjZV9iaW9fZnJvbnRtZXJnZSwgTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfYmlvX2JhY2ttZXJnZTsKIAlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fcXVldWUoYmxrX2FkZF90cmFjZV9iaW9fcXVldWUsIE5VTEwpOwotCVdBUk5fT04ocmV0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X2Jpb19mcm9udG1lcmdlOwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2dldHJxKGJsa19hZGRfdHJhY2VfZ2V0cnEsIE5VTEwpOwotCVdBUk5fT04ocmV0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X2Jpb19xdWV1ZTsKIAlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibGtfem9uZV9hcHBlbmRfdXBkYXRlX3JlcXVlc3RfYmlvKAogCQlibGtfYWRkX3RyYWNlX3pvbmVfdXBkYXRlX3JlcXVlc3QsIE5VTEwpOwotCVdBUk5fT04ocmV0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X2dldHJxOwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Rpc2tfem9uZV93cGx1Z19hZGRfYmlvKGJsa19hZGRfdHJhY2Vfem9uZV9wbHVnLAogCQkJCQkJICAgICBOVUxMKTsKLQlXQVJOX09OKHJldCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF96b25lX3VwZGF0ZV9yZXF1ZXN0OwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsa196b25lX3dwbHVnX2JpbyhibGtfYWRkX3RyYWNlX3pvbmVfdW5wbHVnLAogCQkJCQkJTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfem9uZV9wbHVnOwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3BsdWcoYmxrX2FkZF90cmFjZV9wbHVnLCBOVUxMKTsKLQlXQVJOX09OKHJldCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF96b25lX3VucGx1ZzsKIAlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWcoYmxrX2FkZF90cmFjZV91bnBsdWcsIE5VTEwpOwotCVdBUk5fT04ocmV0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3BsdWc7CiAJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfc3BsaXQoYmxrX2FkZF90cmFjZV9zcGxpdCwgTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfdW5wbHVnOwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19yZW1hcChibGtfYWRkX3RyYWNlX2Jpb19yZW1hcCwgTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfc3BsaXQ7CiAJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfcmVtYXAoYmxrX2FkZF90cmFjZV9ycV9yZW1hcCwgTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfYmlvX3JlbWFwOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztvdXRfYmlvX3JlbWFwOgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19yZW1hcChibGtfYWRkX3RyYWNlX2Jpb19yZW1hcCwgTlVMTCk7CiYjNDM7b3V0X3NwbGl0OgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3NwbGl0KGJsa19hZGRfdHJhY2Vfc3BsaXQsIE5VTEwpOwomIzQzO291dF91bnBsdWc6CiYjNDM7CXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfdW5wbHVnKGJsa19hZGRfdHJhY2VfdW5wbHVnLCBOVUxMKTsKJiM0MztvdXRfcGx1ZzoKJiM0MzsJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19wbHVnKGJsa19hZGRfdHJhY2VfcGx1ZywgTlVMTCk7CiYjNDM7b3V0X3pvbmVfdW5wbHVnOgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsa196b25lX3dwbHVnX2JpbyhibGtfYWRkX3RyYWNlX3pvbmVfdW5wbHVnLCBOVUxMKTsKJiM0MztvdXRfem9uZV9wbHVnOgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Rpc2tfem9uZV93cGx1Z19hZGRfYmlvKGJsa19hZGRfdHJhY2Vfem9uZV9wbHVnLCBOVUxMKTsKJiM0MztvdXRfem9uZV91cGRhdGVfcmVxdWVzdDoKJiM0MzsJdW5yZWdpc3Rlcl90cmFjZV9ibGtfem9uZV9hcHBlbmRfdXBkYXRlX3JlcXVlc3RfYmlvKAomIzQzOwkJYmxrX2FkZF90cmFjZV96b25lX3VwZGF0ZV9yZXF1ZXN0LCBOVUxMKTsKJiM0MztvdXRfZ2V0cnE6CiYjNDM7CXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfZ2V0cnEoYmxrX2FkZF90cmFjZV9nZXRycSwgTlVMTCk7CiYjNDM7b3V0X2Jpb19xdWV1ZToKJiM0MzsJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fcXVldWUoYmxrX2FkZF90cmFjZV9iaW9fcXVldWUsIE5VTEwpOwomIzQzO291dF9iaW9fZnJvbnRtZXJnZToKJiM0MzsJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fZnJvbnRtZXJnZShibGtfYWRkX3RyYWNlX2Jpb19mcm9udG1lcmdlLCBOVUxMKTsKJiM0MztvdXRfYmlvX2JhY2ttZXJnZToKJiM0MzsJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fYmFja21lcmdlKGJsa19hZGRfdHJhY2VfYmlvX2JhY2ttZXJnZSwgTlVMTCk7CiYjNDM7b3V0X2Jpb19jb21wbGV0ZToKJiM0MzsJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fY29tcGxldGUoYmxrX2FkZF90cmFjZV9iaW9fY29tcGxldGUsIE5VTEwpOwomIzQzO291dF9ycV9jb21wbGV0ZToKJiM0MzsJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9jb21wbGV0ZShibGtfYWRkX3RyYWNlX3JxX2NvbXBsZXRlLCBOVUxMKTsKJiM0MztvdXRfcnFfcmVxdWV1ZToKJiM0MzsJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9yZXF1ZXVlKGJsa19hZGRfdHJhY2VfcnFfcmVxdWV1ZSwgTlVMTCk7CiYjNDM7b3V0X3JxX21lcmdlOgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX21lcmdlKGJsa19hZGRfdHJhY2VfcnFfbWVyZ2UsIE5VTEwpOwomIzQzO291dF9ycV9pc3N1ZToKJiM0MzsJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9pc3N1ZShibGtfYWRkX3RyYWNlX3JxX2lzc3VlLCBOVUxMKTsKJiM0MztvdXRfcnFfaW5zZXJ0OgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2luc2VydChibGtfYWRkX3RyYWNlX3JxX2luc2VydCwgTlVMTCk7CiYjNDM7CXRyYWNlcG9pbnRfc3luY2hyb25pemVfdW5yZWdpc3RlcigpOwomIzQzO291dDoKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgYmxrX3VucmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZCkKQEAgLTE5MTYsOCAmIzQzOzIwMDQsMTEgQEAgc3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXBfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCiAKIAlibGtfdHJhY2Vfc2V0dXBfbGJhKGJ0LCBiZGV2KTsKIAomIzQzOwlyZXQgPSBnZXRfcHJvYmVfcmVmKCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGZyZWVfYnQ7CiYjNDM7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKHEtJmd0O2Jsa190cmFjZSwgYnQpOwotCWdldF9wcm9iZV9yZWYoKTsKIAlyZXR1cm4gMDsKIAogZnJlZV9idDoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM2MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJsa3RyYWNlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCBpbnRyb2R1Y2VzIGFueSBuZXcgZnVuY3Rpb25hbGl0eSB0aGF0IHdhcnJhbnRzIHNvbWUgZnV6emluZyBhdHRlbnRpb24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhpcyBpcyBwcmltYXJpbHkgZm9jdXNlZCBvbiB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIGluaXRpYWxpemF0aW9uIG9mIGJsa3RyYWNlIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIHRyYWNpbmcgZnJhbWV3b3JrLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGluIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AuIFRoZSBtb3N0IHNpZ25pZmljYW50IGFkanVzdG1lbnQgc2VlbXMgdG8gYmUgdGhhdCBgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzYCBub3cgcmV0dXJucyBhbiBpbnRlZ2VyLCBhbiBlcnJvciBjb2RlLCByYXRoZXIgdGhhbiB2b2lkLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIOKAkyBpdCBzdWdnZXN0cyBhIHNoaWZ0IHRvd2FyZHMgbW9yZSByb2J1c3QgZXJyb3IgY2hlY2tpbmcgZHVyaW5nIHRyYWNlcG9pbnQgcmVnaXN0cmF0aW9uLiBUaGUgcGF0Y2ggdGhlbiBzaG93cyB0aGF0IGlmIGFueSBvZiB0aGUgYHJlZ2lzdGVyX3RyYWNlXypgIGNhbGxzIGZhaWwgZHVyaW5nIHRoZSByZWdpc3RyYXRpb24sIGl0IGNvcnJlY3RseSB1bndpbmRzIGJ5IHVzaW5nIGB0cmFjZXBvaW50X3N5bmNocm9uaXplX3VucmVnaXN0ZXIoKWAgdG8gY2xlYW4gdXAgYW55IHByZXZpb3VzbHkgcmVnaXN0ZXJlZCB0cmFjZXBvaW50cy4gVGhhdCBpcyBhIGdvb2QsIGltcG9ydGFudCBjaGFuZ2UgZm9yIGF2b2lkaW5nIHJlc291cmNlIGxlYWtzIGFuZCBwb3RlbnRpYWxseSBjb3JydXB0aW5nIHRyYWNlIGRhdGEuCgpUaGUgc3Vic2VxdWVudCBjaGFuZ2VzIGNhc2NhZGUgZnJvbSB0aGlzLiBGdW5jdGlvbnMgbGlrZSBgZ2V0X3Byb2JlX3JlZigpYCBub3cgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBvZiBgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKClgLiBJZiByZWdpc3RyYXRpb24gZmFpbHMsIGBibGtfcHJvYmVzX3JlZmAgaXMgZGVjcmVtZW50ZWQsIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgZXJyb3IgY29kZS4gU2ltaWxhcmx5LCBgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKClgIG5vdyBjYWxscyBgZ2V0X3Byb2JlX3JlZigpYCBiZWZvcmUgc2V0dGluZyB0aGUgUkNVIHBvaW50ZXIsIGFuZCB0aGF0JiMzOTtzIGNyaXRpY2FsIHRvIG1ha2Ugc3VyZSB0aGUgc2V0dXAgaGFwcGVucyBjb3JyZWN0bHkuIFdlIGFyZSBhdm9pZGluZyB0aGUgdXNlIG9mIGFuIHVuaW5pdGlhbGl6ZWQgb3IgYnJva2VuIGBibGtfdHJhY2VgLiBUaGUgY2FsbHMgdG8gYGJsa190cmFjZV9zZXR1cGAsIGBibGtfdHJhY2Vfc2V0dXAyYCwgYGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXBgLCBhbmQgYGJsa190cmFjZV9zZXR1cF9xdWV1ZWAgaGF2ZSBiZWVuIG1vZGlmaWVkIHRvIGhhbmRsZSB0aGUgcG90ZW50aWFsIGVycm9yIHJldHVybiBmcm9tIGBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUoKWAsIGFnYWluIGVuc3VyaW5nIGEgc2FmZSBhbmQgY2xlYW4gaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4KClRvIGNvbmZpcm0gdGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uIGNhbGxzLCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNgIGFuZCBLY29uZmlnIHRvIHNlZSBob3cgYmxrdHJhY2UgaXMgYWN0dWFsbHkgdXNlZCBhbmQgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgaW50byB0aGUgc3lzdGVtLiBMZXQgbWUgcnVuIGBncmVwcGVyYCBvciBjaGVjayB0aGUgS2NvbmZpZyBjb25maWd1cmF0aW9uIHRvIGdldCBhIGJldHRlciBvdmVydmlldyBvZiB3aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgbWVhbnQgdG8gZG8sIGFuZCB3aG8gaXMgY2FsbGluZyB0aGVtLiBUaGlzIHdpbGwgaGVscCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIG5ldyBjb2RlIHBhdGhzIHRoYXQgbWlnaHQgbmVlZCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JMS19ERVZfSU9fVFJBQ0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9NzE3PWNvbmZpZyBCUkFOQ0hfVFJBQ0VSXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctNzMwLVxua2VybmVsL3RyYWNlL0tjb25maWc6NzMxOmNvbmZpZyBCTEtfREVWX0lPX1RSQUNFXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy03MzItXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHRyYWNpbmcgYmxvY2sgSU8gYWN0aW9uc1wmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZT05MT1vYmotJChDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORykgJiM0Mzs9IHRyYWNlX2JyYW5jaC5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6OTI6b2JqLSQoQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UpICYjNDM7PSBibGt0cmFjZS5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtOTMtb2JqLSQoQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUikgJiM0Mzs9IGZncmFwaC5vXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjgtXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoyOTojaWZkZWYgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0Vcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTMwLVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTIxNjI9c3RhdGljIHNzaXplX3Qgc3lzZnNfYmxrX3RyYWNlX2F0dHJfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIyMjctfVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjIyODojZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgKi9cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIyMjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUyNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIFRyYWNlcG9pbnQgRGVwZW5kZW5jaWVzIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHNvbWUgdHJhY2luZyBmdW5jdGlvbmFsaXR5LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBwbGFjZSB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIGFyZSBkZWZpbmVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSA3MzAg4oCTIHRoYXQmIzM5O3Mgb2Z0ZW4gd2hlcmUgcmVsYXRlZCBvcHRpb25zIGFyZSBjbHVzdGVyZWQgdG9nZXRoZXIsIG9yIGF0IGxlYXN0IGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgYmxvY2tzIG9mIGNvZGUuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJlIGFibGUgdG8gdHJhY2UgZG93biB3aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGZ1bmN0aW9uYWxpdHkgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGFuZCB1bmRlcnN0YW5kIGl0cyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uIGludG8gd2hhdCBjb21wb25lbnRzIGFyZSB0aWVkIHRvIHRoaXMgdHJhY2Vwb2ludCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcyNTpcdFx0ICBoaXN0b2dyYW0gb2YgdGhlIGNhbGxlcnMsIGJ1dCBhY3R1YWxseSBwbGFjZXMgdGhlIGNhbGxpbmdcbiA3MjY6XHRcdCAgZXZlbnRzIGludG8gYSBydW5uaW5nIHRyYWNlIGJ1ZmZlciB0byBzZWUgd2hlbiBhbmQgd2hlcmUgdGhlXG4gNzI3Olx0XHQgIGV2ZW50cyBoYXBwZW5lZCwgYXMgd2VsbCBhcyB0aGVpciByZXN1bHRzLlxuIDcyODpcdFxuIDcyOTpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4gNzMwOlx0XG4gNzMxOlx0Y29uZmlnIEJMS19ERVZfSU9fVFJBQ0VcbiA3MzI6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgdHJhY2luZyBibG9jayBJTyBhY3Rpb25zXCYjMzQ7XG4gNzMzOlx0XHRkZXBlbmRzIG9uIFNZU0ZTXG4gNzM0Olx0XHRkZXBlbmRzIG9uIEJMT0NLXG4gNzM1Olx0XHRzZWxlY3QgUkVMQVlcbiA3MzY6XHRcdHNlbGVjdCBERUJVR19GU1xuIDczNzpcdFx0c2VsZWN0IFRSQUNFUE9JTlRTXG4gNzM4Olx0XHRzZWxlY3QgR0VORVJJQ19UUkFDRVJcbiA3Mzk6XHRcdHNlbGVjdCBTVEFDS1RSQUNFXG4gNzQwOlx0XHRoZWxwXG4gNzQxOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byB0cmFjZSB0aGUgYmxvY2sgbGF5ZXIgYWN0aW9uc1xuIDc0MjpcdFx0ICBvbiBhIGdpdmVuIHF1ZXVlLiBUcmFjaW5nIGFsbG93cyB5b3UgdG8gc2VlIGFueSB0cmFmZmljIGhhcHBlbmluZ1xuIDc0MzpcdFx0ICBvbiBhIGJsb2NrIGRldmljZSBxdWV1ZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gKGFuZCB0aGUgdXNlcnNwYWNlXG4gNzQ0Olx0XHQgIHN1cHBvcnQgdG9vbHMgbmVlZGVkKSwgZmV0Y2ggdGhlIGJsa3RyYWNlIHRvb2xzIGZyb206XG4gNzQ1Olx0XG4gNzQ2Olx0XHQgIGdpdDovL2dpdC5rZXJuZWwuZGsvYmxrdHJhY2UuZ2l0XG4gNzQ3Olx0XG4gNzQ4Olx0XHQgIFRyYWNpbmcgYWxzbyBpcyBwb3NzaWJsZSB1c2luZyB0aGUgZnRyYWNlIGludGVyZmFjZSwgZS5nLjpcbiA3NDk6XHRcbiA3NTA6XHRcdCAgICBlY2hvIDEgXHUwMDNlIC9zeXMvYmxvY2svc2RhL3NkYTEvdHJhY2UvZW5hYmxlXG4gNzUxOlx0XHQgICAgZWNobyBibGsgXHUwMDNlIC9zeXMva2VybmVsL3RyYWNpbmcvY3VycmVudF90cmFjZXJcbiA3NTI6XHRcdCAgICBjYXQgL3N5cy9rZXJuZWwvdHJhY2luZy90cmFjZV9waXBlXG4gNzUzOlx0XG4gNzU0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIwMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGV4YW1pbmluZyBga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNgOgoKKipBbmFseXppbmcgYGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jYCoqCgpBbHJpZ2h0LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIG1vZGlmaWNhdGlvbnMgb3IgbmV3IGludGVyZmFjZXMgYWRkZWQgc3BlY2lmaWNhbGx5IHdpdGhpbiBga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlZW4gY2hhbmdlZCByZWxhdGl2ZSB0bywgcGVyaGFwcywgYSBwcmV2aW91cyB2ZXJzaW9uLCBvciB3aGF0JiMzOTtzICpuZXcqIGhlcmUuIFdoYXQgZnVuY3Rpb25hbGl0aWVzIGFyZSBjb3JlIHRvIHRoaXMgZmlsZT8KClRoZW4sIEkmIzM5O2xsIHN0cmF0ZWdpY2FsbHkgbW92ZSBhcm91bmQgdGhvc2Uga2V5IGVudHJ5IHBvaW50cyB3aXRoaW4gdGhlIGNvZGUuIEkmIzM5O2xsIHJlYWQgYXJvdW5kIHRoZSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuIEkgd2FudCB0byBidWlsZCBhIGhpZ2gtbGV2ZWwgdW5kZXJzdGFuZGluZyBvZiB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBjb250cm9sIGZsb3cuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGluZ3MgYXJlIGluaXRpYWxpemVkLCBob3cgZGF0YSBpcyBjYXB0dXJlZCwgd2hlcmUgaXQmIzM5O3Mgc3RvcmVkLCBhbmQgaG93IGV4dGVybmFsIGNvbXBvbmVudHMgaW50ZXJhY3Qgd2l0aCB0aGlzIHRyYWNpbmcgbWVjaGFuaXNtLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhbmQgaG93IGRvIHRoZXkgZnVuY3Rpb24/IEkmIzM5O2xsIHF1aWNrbHkgd2FudCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGdvdGNoYXMgb3IgYXJlYXMgdGhhdCBtaWdodCByZXF1aXJlIGNsb3NlciBhdHRlbnRpb24gZHVyaW5nIGFuYWx5c2lzIG9yIGRldmVsb3BtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa190cmFjZV8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYmxrdHJhY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0yMjc9c3RhdGljIHZvaWQgdHJhY2Vfbm90ZV90aW1lKHN0cnVjdCBibGtfdHJhY2UgKmJ0KVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTI0Mi1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjI0Mzp2b2lkIF9fYmxrX3RyYWNlX25vdGVfbWVzc2FnZShzdHJ1Y3QgYmxrX3RyYWNlICpidCxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTI0NC1cdFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgY29uc3QgY2hhciAqZm10LCAuLi4pXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjc3LX1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjI3ODpFWFBPUlRfU1lNQk9MX0dQTChfX2Jsa190cmFjZV9ub3RlX21lc3NhZ2UpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjc5LVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTMxMD1zdGF0aWMgdm9pZCBfX2Jsa19hZGRfdHJhY2Uoc3RydWN0IGJsa190cmFjZSAqYnQsIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTM5Ny1cdFx0XHQgKiBGb3Igc3lzZnMtZW5hYmxlZCB0cmFjaW5nIHBhdGggKGVuYWJsZWQgdmlhXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzozOTg6XHRcdFx0ICogL3N5cy9ibG9jay9ERVYvdHJhY2UvZW5hYmxlKSwgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKClcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTM5OS1cdFx0XHQgKiBuZXZlciBpbml0aWFsaXplcyBidC1cdTAwM2V2ZXJzaW9uLCBsZWF2aW5nIGl0IDAgZnJvbVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTQ2OC1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjQ2OTpzdGF0aWMgdm9pZCBibGtfdHJhY2VfZnJlZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJsa190cmFjZSAqYnQpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy00NzAte1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTUwMj1zdGF0aWMgdm9pZCBwdXRfcHJvYmVfcmVmKHZvaWQpXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNTA5LVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NTEwOnN0YXRpYyBpbnQgYmxrX3RyYWNlX3N0YXJ0KHN0cnVjdCBibGtfdHJhY2UgKmJ0KVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNTExLXtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01MjYtXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo1Mjc6c3RhdGljIGludCBibGtfdHJhY2Vfc3RvcChzdHJ1Y3QgYmxrX3RyYWNlICpidClcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTUyOC17XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNTQwLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NTQxOnN0YXRpYyB2b2lkIGJsa190cmFjZV9jbGVhbnVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmxrX3RyYWNlICpidClcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTU0Mi17XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo1NDM6XHRibGtfdHJhY2Vfc3RvcChidCk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01NDQtXHRzeW5jaHJvbml6ZV9yY3UoKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjU0NTpcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTU0Ni1cdHB1dF9wcm9iZV9yZWYoKTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01NDgtXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo1NDk6c3RhdGljIGludCBfX2Jsa190cmFjZV9yZW1vdmUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01NTAte1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTU1Ny1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjU1ODpcdGJsa190cmFjZV9jbGVhbnVwKHEsIGJ0KTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTU1OS1cbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01NjItXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo1NjM6aW50IGJsa190cmFjZV9yZW1vdmUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01NjQte1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTU2Ny1cdGJsa19kZWJ1Z2ZzX2xvY2tfbm9tZW1zYXZlKHEpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NTY4Olx0cmV0ID0gX19ibGtfdHJhY2VfcmVtb3ZlKHEpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNTY5LVx0YmxrX2RlYnVnZnNfdW5sb2NrX25vbWVtcmVzdG9yZShxKTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01NzItfVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NTczOkVYUE9SVF9TWU1CT0xfR1BMKGJsa190cmFjZV9yZW1vdmUpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNTc0LVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTU5ND1zdGF0aWMgc3NpemVfdCBibGtfbXNnX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTYwNy1cdGJ0ID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo2MDg6XHRfX2Jsa190cmFjZV9ub3RlX21lc3NhZ2UoYnQsIE5VTEwsIFwmIzM0OyVzXCYjMzQ7LCBtc2cpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNjA5LVx0a2ZyZWUobXNnKTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz02Mzg9c3RhdGljIGNvbnN0IHN0cnVjdCByY2hhbl9jYWxsYmFja3MgYmxrX3JlbGF5X2NhbGxiYWNrcyA9IHtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy02NDItXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo2NDM6c3RhdGljIHZvaWQgYmxrX3RyYWNlX3NldHVwX2xiYShzdHJ1Y3QgYmxrX3RyYWNlICpidCxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTY0NC1cdFx0XHRcdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNjU3LSAqL1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NjU4OnN0YXRpYyBzdHJ1Y3QgYmxrX3RyYWNlICpibGtfdHJhY2Vfc2V0dXBfcHJlcGFyZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTY1OS1cdFx0XHRcdFx0XHQgY2hhciAqbmFtZSwgZGV2X3QgZGV2LFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTcyNS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjcyNjpcdGJsa190cmFjZV9zZXR1cF9sYmEoYnQsIGJkZXYpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNzI3LVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTczMC1lcnI6XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo3MzE6XHRibGtfdHJhY2VfZnJlZShxLCBidCk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy03MzItXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNzM1LVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NzM2OnN0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNzM3LVx0XHRcdFx0ICAgIGNoYXIgKm5hbWUsIGludCB2ZXJzaW9uLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTc3My1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjc3NDppbnQgYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy03NzUtXHRcdCAgICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTgwMC1cdG1lbWZsYWdzID0gYmxrX2RlYnVnZnNfbG9jayhxKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjgwMTpcdGJ0ID0gYmxrX3RyYWNlX3NldHVwX3ByZXBhcmUocSwgbmFtZSwgZGV2LCBidXRzLmJ1Zl9zaXplLCBidXRzLmJ1Zl9ucixcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTgwMi1cdFx0XHRcdCAgICAgYmRldik7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODA2LVx0fVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6ODA3Olx0cmV0ID0gYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDEsIGJ0LCBcdTAwMjZidXRzMik7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04MDgtXHRpZiAocmV0KSB7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo4MDk6XHRcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTgxMC1cdFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04MTYtXHRpZiAoY29weV90b191c2VyKGFyZywgXHUwMDI2YnV0cywgc2l6ZW9mKGJ1dHMpKSkge1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6ODE3Olx0XHRibGtfdHJhY2VfcmVtb3ZlKHEpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODE4LVx0XHRyZXR1cm4gLUVGQVVMVDtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04MjEtfVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6ODIyOkVYUE9SVF9TWU1CT0xfR1BMKGJsa190cmFjZV9zZXR1cCk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04MjMtXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo4MjQ6c3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXAyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04MjUtXHRcdFx0ICAgIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGNoYXIgX191c2VyICphcmcpXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODQxLVx0bWVtZmxhZ3MgPSBibGtfZGVidWdmc19sb2NrKHEpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6ODQyOlx0YnQgPSBibGtfdHJhY2Vfc2V0dXBfcHJlcGFyZShxLCBuYW1lLCBkZXYsIGJ1dHMyLmJ1Zl9zaXplLCBidXRzMi5idWZfbnIsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04NDMtXHRcdFx0XHQgICAgIGJkZXYpO1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTg0Ny1cdH1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjg0ODpcdHJldCA9IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAyLCBidCwgXHUwMDI2YnV0czIpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODQ5LVx0aWYgKHJldCkge1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6ODUwOlx0XHRibGtfdHJhY2VfZnJlZShxLCBidCk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04NTEtXHRcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODU2LVx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFx1MDAyNmJ1dHMyLCBzaXplb2YoYnV0czIpKSkge1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6ODU3Olx0XHRibGtfdHJhY2VfcmVtb3ZlKHEpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODU4LVx0XHRyZXR1cm4gLUVGQVVMVDtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04NjMtI2lmIGRlZmluZWQoQ09ORklHX0NPTVBBVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1g4Nl82NClcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjg2NDpzdGF0aWMgaW50IGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04NjUtXHRcdFx0XHQgIGRldl90IGRldiwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04ODktXHRtZW1mbGFncyA9IGJsa19kZWJ1Z2ZzX2xvY2socSk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo4OTA6XHRidCA9IGJsa190cmFjZV9zZXR1cF9wcmVwYXJlKHEsIG5hbWUsIGRldiwgYnV0czIuYnVmX3NpemUsIGJ1dHMyLmJ1Zl9ucixcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTg5MS1cdFx0XHRcdCAgICAgYmRldik7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODk1LVx0fVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6ODk2Olx0cmV0ID0gYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDEsIGJ0LCBcdTAwMjZidXRzMik7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04OTctXHRpZiAocmV0KSB7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo4OTg6XHRcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTg5OS1cdFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05MDQtXHRpZiAoY29weV90b191c2VyKGFyZywgXHUwMDI2YnV0czIubmFtZSwgQVJSQVlfU0laRShidXRzMi5uYW1lKSkpIHtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjkwNTpcdFx0YmxrX3RyYWNlX3JlbW92ZShxKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTkwNi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTEyLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTEzOnN0YXRpYyBpbnQgX19ibGtfdHJhY2Vfc3RhcnRzdG9wKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgc3RhcnQpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05MTQte1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTkyMi1cdGlmIChzdGFydClcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjkyMzpcdFx0cmV0dXJuIGJsa190cmFjZV9zdGFydChidCk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05MjQtXHRlbHNlXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5MjU6XHRcdHJldHVybiBibGtfdHJhY2Vfc3RvcChidCk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05MjYtfVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTI3LVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTI4OmludCBibGtfdHJhY2Vfc3RhcnRzdG9wKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgc3RhcnQpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05Mjkte1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTkzMi1cdGJsa19kZWJ1Z2ZzX2xvY2tfbm9tZW1zYXZlKHEpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTMzOlx0cmV0ID0gX19ibGtfdHJhY2Vfc3RhcnRzdG9wKHEsIHN0YXJ0KTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTkzNC1cdGJsa19kZWJ1Z2ZzX3VubG9ja19ub21lbXJlc3RvcmUocSk7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTM3LX1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjkzODpFWFBPUlRfU1lNQk9MX0dQTChibGtfdHJhY2Vfc3RhcnRzdG9wKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTkzOS1cbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NDYtLyoqXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5NDc6ICogYmxrX3RyYWNlX2lvY3RsIC0gaGFuZGxlIHRoZSBpb2N0bHMgYXNzb2NpYXRlZCB3aXRoIHRyYWNpbmdcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk0OC0gKiBAYmRldjpcdHRoZSBibG9jayBkZXZpY2Vcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NTItICoqL1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTUzOmludCBibGtfdHJhY2VfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgY21kLCBjaGFyIF9fdXNlciAqYXJnKVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTU0LXtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NjEtXHRcdHNucHJpbnRmKGIsIHNpemVvZihiKSwgXCYjMzQ7JXBnXCYjMzQ7LCBiZGV2KTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjk2MjpcdFx0cmV0ID0gYmxrX3RyYWNlX3NldHVwMihxLCBiLCBiZGV2LVx1MDAzZWJkX2RldiwgYmRldiwgYXJnKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk2My1cdFx0YnJlYWs7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTY1LVx0XHRzbnByaW50ZihiLCBzaXplb2YoYiksIFwmIzM0OyVwZ1wmIzM0OywgYmRldik7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5NjY6XHRcdHJldCA9IGJsa190cmFjZV9zZXR1cChxLCBiLCBiZGV2LVx1MDAzZWJkX2RldiwgYmRldiwgYXJnKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk2Ny1cdFx0YnJlYWs7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTcwLVx0XHRzbnByaW50ZihiLCBzaXplb2YoYiksIFwmIzM0OyVwZ1wmIzM0OywgYmRldik7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5NzE6XHRcdHJldCA9IGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAocSwgYiwgYmRldi1cdTAwM2ViZF9kZXYsIGJkZXYsIGFyZyk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NzItXHRcdGJyZWFrO1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk3Ny1cdGNhc2UgQkxLVFJBQ0VTVE9QOlxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTc4Olx0XHRyZXQgPSBibGtfdHJhY2Vfc3RhcnRzdG9wKHEsIHN0YXJ0KTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk3OS1cdFx0YnJlYWs7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05ODAtXHRjYXNlIEJMS1RSQUNFVEVBUkRPV046XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5ODE6XHRcdHJldCA9IGJsa190cmFjZV9yZW1vdmUocSk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05ODItXHRcdGJyZWFrO1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk5MC0vKipcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjk5MTogKiBibGtfdHJhY2Vfc2h1dGRvd24gLSBzdG9wIGFuZCBjbGVhbnVwIHRyYWNlIHN0cnVjdHVyZXNcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk5Mi0gKiBAcTogICAgdGhlIHJlcXVlc3QgcXVldWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2Vcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05OTQtICoqL1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTk1OnZvaWQgYmxrX3RyYWNlX3NodXRkb3duKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTk2LXtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05OTgtXHRcdFx0XHQgICAgICBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2cS1cdTAwM2VkZWJ1Z2ZzX211dGV4KSkpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5OTk6XHRcdF9fYmxrX3RyYWNlX3JlbW92ZShxKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwMDAtfVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwMDItI2lmZGVmIENPTkZJR19CTEtfQ0dST1VQXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMDAzOnN0YXRpYyB1NjQgYmxrX3RyYWNlX2Jpb19nZXRfY2dpZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTAwNC17XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTAxOC0jZWxzZVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTAxOTpzdGF0aWMgdTY0IGJsa190cmFjZV9iaW9fZ2V0X2NnaWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbylcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwMjAte1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTEwMjU9c3RhdGljIHU2NFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTAyNjpibGtfdHJhY2VfcmVxdWVzdF9nZXRfY2dpZChzdHJ1Y3QgcmVxdWVzdCAqcnEpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDI3LXtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDMwLVx0LyogVXNlIHRoZSBmaXJzdCBiaW8gKi9cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEwMzE6XHRyZXR1cm4gYmxrX3RyYWNlX2Jpb19nZXRfY2dpZChycS1cdTAwM2VxLCBycS1cdTAwM2ViaW8pO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTAzMi19XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTA3Mj1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JxX2luc2VydCh2b2lkICppZ25vcmUsIHN0cnVjdCByZXF1ZXN0ICpycSlcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDc0LVx0YmxrX2FkZF90cmFjZV9ycShycSwgMCwgYmxrX3JxX2J5dGVzKHJxKSwgQkxLX1RBX0lOU0VSVCxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEwNzU6XHRcdFx0IGJsa190cmFjZV9yZXF1ZXN0X2dldF9jZ2lkKHJxKSk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDc2LX1cbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMDc4PXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnFfaXNzdWUodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTA4MC1cdGJsa19hZGRfdHJhY2VfcnEocnEsIDAsIGJsa19ycV9ieXRlcyhycSksIEJMS19UQV9JU1NVRSxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEwODE6XHRcdFx0IGJsa190cmFjZV9yZXF1ZXN0X2dldF9jZ2lkKHJxKSk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDgyLX1cbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMDg0PXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnFfbWVyZ2Uodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTA4Ni1cdGJsa19hZGRfdHJhY2VfcnEocnEsIDAsIGJsa19ycV9ieXRlcyhycSksIEJMS19UQV9CQUNLTUVSR0UsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMDg3Olx0XHRcdCBibGtfdHJhY2VfcmVxdWVzdF9nZXRfY2dpZChycSkpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTA4OC19XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTA5MD1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JxX3JlcXVldWUodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTA5Mi1cdGJsa19hZGRfdHJhY2VfcnEocnEsIDAsIGJsa19ycV9ieXRlcyhycSksIEJMS19UQV9SRVFVRVVFLFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTA5MzpcdFx0XHQgYmxrX3RyYWNlX3JlcXVlc3RfZ2V0X2NnaWQocnEpKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwOTQtfVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTEwOTY9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9ycV9jb21wbGV0ZSh2b2lkICppZ25vcmUsIHN0cnVjdCByZXF1ZXN0ICpycSxcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDk5LVx0YmxrX2FkZF90cmFjZV9ycShycSwgZXJyb3IsIG5yX2J5dGVzLCBCTEtfVEFfQ09NUExFVEUsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMTAwOlx0XHRcdCBibGtfdHJhY2VfcmVxdWVzdF9nZXRfY2dpZChycSkpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTEwMS19XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTEwMz1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3pvbmVfdXBkYXRlX3JlcXVlc3Qodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTExNS1cdGJsa19hZGRfdHJhY2VfcnEocnEsIDAsIGJsa19ycV9ieXRlcyhycSksIEJMS19UQV9aT05FX0FQUEVORCxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjExMTY6XHRcdFx0IGJsa190cmFjZV9yZXF1ZXN0X2dldF9jZ2lkKHJxKSk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMTE3LX1cbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMTMwPXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfYmlvKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8sXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTE0My1cdFx0XHRiaW8tXHUwMDNlYmlfb3BmLCB3aGF0LCBlcnJvciwgMCwgTlVMTCxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjExNDQ6XHRcdFx0YmxrX3RyYWNlX2Jpb19nZXRfY2dpZChxLCBiaW8pKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTExNDUtXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMjQwPXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2Vfc3BsaXQodm9pZCAqaWdub3JlLCBzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGludCBwZHUpXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTI1My1cdFx0XHRcdHNpemVvZihycGR1KSwgXHUwMDI2cnBkdSxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEyNTQ6XHRcdFx0XHRibGtfdHJhY2VfYmlvX2dldF9jZ2lkKHEsIGJpbykpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTI1NS1cdH1cbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMjY4PXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfYmlvX3JlbWFwKHZvaWQgKmlnbm9yZSwgc3RydWN0IGJpbyAqYmlvLCBkZXZfdCBkZXYsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTI4OC1cdFx0XHRibGtfc3RhdHVzX3RvX2Vycm5vKGJpby1cdTAwM2ViaV9zdGF0dXMpLFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTI4OTpcdFx0XHRzaXplb2YociksIFx1MDAyNnIsIGJsa190cmFjZV9iaW9fZ2V0X2NnaWQocSwgYmlvKSk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjkwLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTMwNT1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JxX3JlbWFwKHZvaWQgKmlnbm9yZSwgc3RydWN0IHJlcXVlc3QgKnJxLCBkZXZfdCBkZXYsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTMyMy1cdFx0XHRycS1cdTAwM2VjbWRfZmxhZ3MsIEJMS19UQV9SRU1BUCwgMCxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEzMjQ6XHRcdFx0c2l6ZW9mKHIpLCBcdTAwMjZyLCBibGtfdHJhY2VfcmVxdWVzdF9nZXRfY2dpZChycSkpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTMyNS1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTEzMzg9dm9pZCBibGtfYWRkX2RyaXZlcl9kYXRhKHN0cnVjdCByZXF1ZXN0ICpycSwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbilcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMzUwLVx0XHRcdFx0QkxLX1RBX0RSVl9EQVRBLCAwLCBsZW4sIGRhdGEsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMzUxOlx0XHRcdFx0YmxrX3RyYWNlX3JlcXVlc3RfZ2V0X2NnaWQocnEpKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEzNTItXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xODE4PXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBwcmludF9vbmVfbGluZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTg1MC1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE4NTE6c3RhdGljIGVudW0gcHJpbnRfbGluZV90IGJsa190cmFjZV9ldmVudF9wcmludChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODUyLVx0XHRcdFx0XHQgICAgICAgaW50IGZsYWdzLCBzdHJ1Y3QgdHJhY2VfZXZlbnQgKmV2ZW50KVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE4NTYtXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxODU3OnN0YXRpYyB2b2lkIGJsa190cmFjZV9zeW50aGVzaXplX29sZF90cmFjZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODU4LXtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xODcyPXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTg3MzpibGtfdHJhY2VfZXZlbnRfcHJpbnRfYmluYXJ5KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzLFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTg3NC1cdFx0XHQgICAgIHN0cnVjdCB0cmFjZV9ldmVudCAqZXZlbnQpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODc1LXtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE4NzY6XHRibGtfdHJhY2Vfc3ludGhlc2l6ZV9vbGRfdHJhY2UoaXRlcik7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODc3LVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTE5MTU9c3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudF9mdW5jdGlvbnMgdHJhY2VfYmxrX2V2ZW50X2Z1bmNzID0ge1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTkxNjpcdC50cmFjZVx0XHQ9IGJsa190cmFjZV9ldmVudF9wcmludCxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE5MTc6XHQuYmluYXJ5XHRcdD0gYmxrX3RyYWNlX2V2ZW50X3ByaW50X2JpbmFyeSxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE5MTgtfTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xOTY2PWRldmljZV9pbml0Y2FsbChpbml0X2Jsa190cmFjZXIpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTk2Ny1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE5Njg6c3RhdGljIGludCBibGtfdHJhY2VfcmVtb3ZlX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTk2OS17XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTk3Ni1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE5Nzc6XHRibGtfdHJhY2Vfc3RvcChidCk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xOTc4LVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE5ODAtXHRzeW5jaHJvbml6ZV9yY3UoKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE5ODE6XHRibGtfdHJhY2VfZnJlZShxLCBidCk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xOTgyLVx0cmV0dXJuIDA7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTk4Ny0gKi9cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE5ODg6c3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXBfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xOTg5LVx0XHRcdFx0IHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjAwNC1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIwMDU6XHRibGtfdHJhY2Vfc2V0dXBfbGJhKGJ0LCBiZGV2KTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIwMDYtXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjAxNC1mcmVlX2J0Olxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjAxNTpcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIwMTYtXHRyZXR1cm4gcmV0O1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIwMjItXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoyMDIzOnN0YXRpYyBzc2l6ZV90IHN5c2ZzX2Jsa190cmFjZV9hdHRyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjAyNC1cdFx0XHRcdFx0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjAyNS1cdFx0XHRcdFx0IGNoYXIgKmJ1Zik7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoyMDI2OnN0YXRpYyBzc2l6ZV90IHN5c2ZzX2Jsa190cmFjZV9hdHRyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIwMjctXHRcdFx0XHRcdCAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjAzMC1cdERFVklDRV9BVFRSKF9uYW1lLCBTX0lSVUdPIHwgU19JV1VTUiwgXFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIwMzE6XHRcdCAgICBzeXNmc19ibGtfdHJhY2VfYXR0cl9zaG93LCBcXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjAzMjpcdFx0ICAgIHN5c2ZzX2Jsa190cmFjZV9hdHRyX3N0b3JlKVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjAzMy1cbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0yMDM4PXN0YXRpYyBCTEtfVFJBQ0VfREVWSUNFX0FUVFIoZW5kX2xiYSk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDM5LVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjA0MDpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYmxrX3RyYWNlX2F0dHJzW10gPSB7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDQxLVx0XHUwMDI2ZGV2X2F0dHJfZW5hYmxlLmF0dHIsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjA0OC1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIwNDk6c3RydWN0IGF0dHJpYnV0ZV9ncm91cCBibGtfdHJhY2VfYXR0cl9ncm91cCA9IHtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIwNTAtXHQubmFtZSAgPSBcJiMzNDt0cmFjZVwmIzM0Oyxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIwNTE6XHQuYXR0cnMgPSBibGtfdHJhY2VfYXR0cnMsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDUyLX07XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MjA1ND1zdGF0aWMgY29uc3Qgc3RydWN0IHtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDc2LVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjA3NzpzdGF0aWMgaW50IGJsa190cmFjZV9zdHIybWFzayhjb25zdCBjaGFyICpzdHIpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDc4LXtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMTExLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjExMjpzdGF0aWMgc3NpemVfdCBibGtfdHJhY2VfbWFzazJzdHIoY2hhciAqYnVmLCBpbnQgbWFzaylcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIxMTMte1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIxMjctXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoyMTI4OnN0YXRpYyBzc2l6ZV90IHN5c2ZzX2Jsa190cmFjZV9hdHRyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjEyOS1cdFx0XHRcdFx0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIxNDgtXHRlbHNlIGlmIChhdHRyID09IFx1MDAyNmRldl9hdHRyX2FjdF9tYXNrKVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjE0OTpcdFx0cmV0ID0gYmxrX3RyYWNlX21hc2syc3RyKGJ1ZiwgYnQtXHUwMDNlYWN0X21hc2spO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjE1MC1cdGVsc2UgaWYgKGF0dHIgPT0gXHUwMDI2ZGV2X2F0dHJfcGlkKVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIxNjEtXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoyMTYyOnN0YXRpYyBzc2l6ZV90IHN5c2ZzX2Jsa190cmFjZV9hdHRyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIxNjMtXHRcdFx0XHRcdCAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjE3OC1cdFx0XHQvKiBBc3N1bWUgaXQgaXMgYSBsaXN0IG9mIHRyYWNlIGNhdGVnb3J5IG5hbWVzICovXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoyMTc5Olx0XHRcdHJldCA9IGJsa190cmFjZV9zdHIybWFzayhidWYpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjE4MC1cdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIxOTgtXHRcdGlmICh2YWx1ZSlcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIxOTk6XHRcdFx0cmV0ID0gYmxrX3RyYWNlX3NldHVwX3F1ZXVlKHEsIGJkZXYpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjIwMC1cdFx0ZWxzZVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjIwMTpcdFx0XHRyZXQgPSBibGtfdHJhY2VfcmVtb3ZlX3F1ZXVlKHEpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjIwMi1cdFx0Z290byBvdXRfdW5sb2NrX2JkZXY7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjIwNi1cdGlmIChidCA9PSBOVUxMKSB7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoyMjA3Olx0XHRyZXQgPSBibGtfdHJhY2Vfc2V0dXBfcXVldWUocSwgYmRldik7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMjA4LVx0XHRidCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocS1cdTAwM2VibGtfdHJhY2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzOTEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGJsa3RyYWNlIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXRoZXIgYGJsa3RyYWNlYCBpcyBhIHZpYWJsZSB0YXJnZXQgZm9yIGZ1enppbmcuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdCYjMzk7cyBldmVuICpyZWFjaGFibGUqIGZyb20gdXNlcnNwYWNlLiBBbmQgdGhlIGFuc3dlciwgdGhhbmtmdWxseSwgaXMgYSByZXNvdW5kaW5nIHllcyEgSSBzZWUgdGhyZWUgZGlzdGluY3QgYWNjZXNzIHBvaW50czogdGhlIGBibGtfdHJhY2VfaW9jdGxgIGZ1bmN0aW9uLCBoYW5kbGluZyBhIHdob2xlIHN1aXRlIG9mIGBCTEtUUkFDRWAgaW9jdGxzIGxpa2UgYFNFVFVgLCBgU1RBUlRgLCBgU1RPUGAsIGFuZCBgVEVBUkRPV05gIG9uIHRoZSBzdGFuZGFyZCBibG9jayBkZXZpY2VzLiBUaGVuIHRoZXJlJiMzOTtzIHN5c2ZzLCBzcGVjaWZpY2FsbHkgdGhlIGAvc3lzL2Jsb2NrLyZsdDtkZXYmZ3Q7L3RyYWNlLy4uLmAgZW50cmllcyBmb3IgZW5hYmxpbmcsIG1hbmFnaW5nIHRoZSBgYWN0X21hc2tgLCB0aGUgYHBpZGAsIGFuZCBvdGhlciBwcm9wZXJ0aWVzLiBGaW5hbGx5LCB3ZSBoYXZlIGRlYnVnZnMvdHJhY2VmcyB3aXRoIHRoZSBgL3N5cy9rZXJuZWwvdHJhY2luZy9jdXJyZW50X3RyYWNlcmAgcGF0aCBhbGxvd2luZyBmb3IgdGhlIGJsb2NrIHRyYWNlIHRyYWNlci4KCk5leHQsIGl0JiMzOTtzIHBydWRlbnQgdG8gZXhhbWluZSB0aGUgY2FsbGVycyBvZiBgYmxrX3RyYWNlX2lvY3RsYCB0byBnYWluIGFuIHVuZGVyc3RhbmRpbmcgb2YgaG93IGV4YWN0bHkgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrX3RyYWNlX2lvY3RsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2lvY3RsLmM9NjUxPXN0YXRpYyBpbnQgYmxrZGV2X2NvbW1vbl9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG4tLVxuYmxvY2svaW9jdGwuYy03MTctXHRjYXNlIEJMS1RSQUNFVEVBUkRPV046XG5ibG9jay9pb2N0bC5jOjcxODpcdFx0cmV0dXJuIGJsa190cmFjZV9pb2N0bChiZGV2LCBjbWQsIGFyZ3ApO1xuYmxvY2svaW9jdGwuYy03MTktXHRjYXNlIEJMS0NSWVBUT0lNUE9SVEtFWTpcbi0tXG5ibG9jay9pb2N0bC5jPTc1MD1sb25nIGJsa2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5ibG9jay9pb2N0bC5jLTc4Ni1cdGNhc2UgQkxLVFJBQ0VTRVRVUDI6XG5ibG9jay9pb2N0bC5jOjc4NzpcdFx0cmV0dXJuIGJsa190cmFjZV9pb2N0bChiZGV2LCBjbWQsIGFyZ3ApO1xuYmxvY2svaW9jdGwuYy03ODgtXHRkZWZhdWx0OlxuLS1cbmJsb2NrL2lvY3RsLmM9ODEwPWxvbmcgY29tcGF0X2Jsa2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5ibG9jay9pb2N0bC5jLTg0Ni1cdGNhc2UgQkxLVFJBQ0VTRVRVUDMyOlxuYmxvY2svaW9jdGwuYzo4NDc6XHRcdHJldHVybiBibGtfdHJhY2VfaW9jdGwoYmRldiwgY21kLCBhcmdwKTtcbmJsb2NrL2lvY3RsLmMtODQ4LVx0ZGVmYXVsdDpcbi0tXG5pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oPTE2PXN0cnVjdCBibGtfdHJhY2Uge1xuLS1cbmluY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgtMzEtXG5pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oOjMyOmV4dGVybiBpbnQgYmxrX3RyYWNlX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgdW5zaWduZWQsIGNoYXIgX191c2VyICopO1xuaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaC0zMy1leHRlcm4gdm9pZCBibGtfdHJhY2Vfc2h1dGRvd24oc3RydWN0IHJlcXVlc3RfcXVldWUgKik7XG4tLVxuaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaD04MT1leHRlcm4gaW50IGJsa190cmFjZV9yZW1vdmUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpO1xuLS1cbmluY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgtODMtI2Vsc2UgLyogIUNPTkZJR19CTEtfREVWX0lPX1RSQUNFICovXG5pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oOjg0OiMgZGVmaW5lIGJsa190cmFjZV9pb2N0bChiZGV2LCBjbWQsIGFyZylcdFx0KC1FTk9UVFkpXG5pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oLTg1LSMgZGVmaW5lIGJsa190cmFjZV9zaHV0ZG93bihxKVx0XHRcdFx0ZG8geyB9IHdoaWxlICgwKVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTkzOD1FWFBPUlRfU1lNQk9MX0dQTChibGtfdHJhY2Vfc3RhcnRzdG9wKTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NDYtLyoqXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5NDc6ICogYmxrX3RyYWNlX2lvY3RsIC0gaGFuZGxlIHRoZSBpb2N0bHMgYXNzb2NpYXRlZCB3aXRoIHRyYWNpbmdcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk0OC0gKiBAYmRldjpcdHRoZSBibG9jayBkZXZpY2Vcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NTItICoqL1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTUzOmludCBibGtfdHJhY2VfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgY21kLCBjaGFyIF9fdXNlciAqYXJnKVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTU0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1NDAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA5OTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCbGt0cmFjZSBFcnJvciBIYW5kbGluZyBGaXggZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgYmxrdHJhY2UgY29yZSBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgaW4gZXJyb3IgaGFuZGxpbmcgYW5kIHRyYWNlcG9pbnQgcmVnaXN0cmF0aW9uIGR1cmluZyBzZXR1cCBhbmQgdGVhcmRvd24uIEl0IGFwcGVhcnMgdGhhdCB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gaGFkIHNvbWUgaXNzdWVzIHdpdGggaWdub3JpbmcgcmV0dXJuIHZhbHVlcyBmcm9tIGNyaXRpY2FsIGZ1bmN0aW9ucyBsaWtlIGBibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHMoKWAgYW5kIGBnZXRfcHJvYmVfcmVmKClgLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHN1YnRsZSBlcnJvcnMuCgpUaGUgZml4IGFkZHJlc3NlcyB0aGlzIGJ5OgoKMS4gIEVuc3VyaW5nIHRoYXQgYGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cygpYCBub3cgY29ycmVjdGx5IHJldHVybnMgYW4gZXJyb3IgYW5kIHVud2luZHMgaWYgdGhlcmUmIzM5O3MgYSBwcm9ibGVtIHJlZ2lzdGVyaW5nIHRyYWNlcG9pbnRzLgoyLiAgYGdldF9wcm9iZV9yZWYoKWAgYWxzbyByZXR1cm5zIGl0cyBlcnJvciBzdGF0dXMuCjMuICBDcml0aWNhbGx5LCBgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKClgIGNhbGxzIGBnZXRfcHJvYmVfcmVmKClgICpiZWZvcmUqIGFzc2lnbmluZyB0aGUgdHJhY2Ugc3RydWN0dXJlIGFuZCByZXR1cm5zIGFuIGVycm9yIGlmIGBnZXRfcHJvYmVfcmVmKClgIGZhaWxzLgo0LiAgVGhlIGNhbGxlcnMgbm93IGhhbmRsZSBmYWlsdXJlcyBmcm9tIGBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUoKWAgYnkgY2xlYW5pbmcgdXAgdGhlIHRyYWNlIHN0cnVjdHVyZSBhbmQgcmV0dXJuaW5nIGFuIGVycm9yLgo1LiAgSW4gYGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpYCwgYGdldF9wcm9iZV9yZWYoKWAgaXMgY2FsbGVkIGJlZm9yZSBhc3NpZ25tZW50IHRvby4KClRoaXMgaXMgYSBjbGVhciBpbXByb3ZlbWVudCBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgZm9yIHRoaXMgY3JpdGljYWwgdHJhY2luZyBpbmZyYXN0cnVjdHVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHNob3VsZCB3ZSBmdXp6IHRoaXM/IExldCYjMzk7cyBjaGVjayB0aGUgZ3VpZGVsaW5lcyB0byBiZSBjZXJ0YWluLgoKQWNjb3JkaW5nIHRvIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMsIHRoZSBjaGFuZ2VzIGRlZmluaXRlbHkgaW52b2x2ZSBjb3JlIGtlcm5lbCBsb2dpYyB3aXRoaW4gdGhlIGJsb2NrIGxheWVyLiBJdCYjMzk7cyBub3QganVzdCBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgb3IgZGVjb3JhdGl2ZSBsb2dnaW5nLiBUaGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQgaW4gdGhlIGJsa3RyYWNlIHNldHVwIGFuZCB0ZWFyZG93biBwcm9jZXNzLiBUaGUgY29kZSYjMzk7cyBjbGVhcmx5IHJlYWNoYWJsZSwgc28gdGhhdCBtYWtlcyB0aGlzIGEgc29saWQgJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZSYjMzQ7IHNpdHVhdGlvbi4KCk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBhcHByb3ByaWF0ZSBmdXp6aW5nIHRhcmdldHMuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgZnV6emluZy4gSSB3aWxsIGxvb2sgYXQgdGhlIGludm9sdmVkIGZ1bmN0aW9ucyB0byBzZWxlY3QgZ29vZCBmdXp6aW5nIGVudHJ5cG9pbnRzIGFuZCB2ZXJpZnkgRm9jdXNTeW1ib2xzIGFuZCBFbmFibGVDb25maWdzLgoKRmlyc3QsIEkmIzM5O2xsIGdvIHRocm91Z2ggYGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jYCB0byBpZGVudGlmeSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHdoaWNoIGFyZSBlYXNpZXIgdG8gdGFyZ2V0LiBMb29raW5nIGF0IHRoZSBjb2RlLCBJIHNlZToKCiogICBgYmxrX3RyYWNlX3NldHVwYCAoYSBub24tc3RhdGljIEdQTC1leHBvcnRlZCBmdW5jdGlvbikKKiAgIGBibGtfdHJhY2VfaW9jdGxgIChjYWxsZWQgYnkgYGJsa2Rldl9pb2N0bGApCiogICBgYmxrX3RyYWNlX3JlbW92ZWAgKGFub3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbikKKiAgIGBibGtfdHJhY2Vfc3RhcnRzdG9wYCAobm9uLXN0YXRpYykKCkkgbmVlZCB0byBkZWNpZGUgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMuIFN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIGFyZW4mIzM5O3QgYXMgZ29vZCBhIHRhcmdldCBhcyBub24tc3RhdGljIGVudHJ5cG9pbnRzLCBzbyBgYmxrX3RyYWNlX2lvY3RsYCBhbmQgYGJsa190cmFjZV9zZXR1cGAgc3RhbmQgb3V0IGFzIHRoZSBwcmltYXJ5IGNhbmRpZGF0ZXMuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AgZmlsZSBpbmRpY2F0ZXMgdGhhdCBgQkxLX0RFVl9JT19UUkFDRWAgaXMgdGhlIGNyaXRpY2FsIGNvbmZpZyBvcHRpb24uIExvb2tpbmcgYXQgaXRzIGRlcGVuZGVuY2llcywgSSBzZWUgaXQgZGVwZW5kcyBvbiBgU1lTRlNgLCBgQkxPQ0tgLCBhbmQgc2VsZWN0cyBgUkVMQVlgLCBgREVCVUdfRlNgLCBgVFJBQ0VQT0lOVFNgLCBgR0VORVJJQ19UUkFDRVJgLCBhbmQgYFNUQUNLVFJBQ0VgLiBJJiMzOTtsbCBhbHNvIGRvIGEgcXVpY2sgYGdyZXBgIGZvciBvdGhlciBjb25maWcgb3B0aW9ucyBpbiBgYmxrdHJhY2UuY2AsIGp1c3QgdG8gYmUgc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSYjMzk7bSBhbGwgc2V0IHdpdGggdGhlIEZvY3VzU3ltYm9scyBhbmQgRW5hYmxlQ29uZmlncyBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTI4LVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6Mjk6I2lmZGVmIENPTkZJR19CTEtfREVWX0lPX1RSQUNFXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0zMC1cbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz00ND1zdGF0aWMgc3RydWN0IHRyYWNlcl9vcHQgYmxrX3RyYWNlcl9vcHRzW10gPSB7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNDYtXHR7IFRSQUNFUl9PUFQoYmxrX2NsYXNzaWMsIFRSQUNFX0JMS19PUFRfQ0xBU1NJQykgfSxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjQ3OiNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNDgtXHR7IFRSQUNFUl9PUFQoYmxrX2Nncm91cCwgVFJBQ0VfQkxLX09QVF9DR1JPVVApIH0sXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MjQzPXZvaWQgX19ibGtfdHJhY2Vfbm90ZV9tZXNzYWdlKHN0cnVjdCBibGtfdHJhY2UgKmJ0LFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTI2OC1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjI2OTojaWZkZWYgQ09ORklHX0JMS19DR1JPVVBcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTI3MC1cdGlmIChjc3MgXHUwMDI2XHUwMDI2IChibGtfdHJhY2VyX2ZsYWdzLnZhbCBcdTAwMjYgVFJBQ0VfQkxLX09QVF9DR1JPVVApKVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTgyND1zdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cDIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldixcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04NjItXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo4NjM6I2lmIGRlZmluZWQoQ09ORklHX0NPTVBBVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1g4Nl82NClcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTg2NC1zdGF0aWMgaW50IGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9OTUzPWludCBibGtfdHJhY2VfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgY21kLCBjaGFyIF9fdXNlciAqYXJnKVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk2Ny1cdFx0YnJlYWs7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5Njg6I2lmIGRlZmluZWQoQ09ORklHX0NPTVBBVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1g4Nl82NClcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk2OS1cdGNhc2UgQkxLVFJBQ0VTRVRVUDMyOlxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTk5NT12b2lkIGJsa190cmFjZV9zaHV0ZG93bihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDAxLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTAwMjojaWZkZWYgQ09ORklHX0JMS19DR1JPVVBcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwMDMtc3RhdGljIHU2NCBibGtfdHJhY2VfYmlvX2dldF9jZ2lkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MjE2Mj1zdGF0aWMgc3NpemVfdCBzeXNmc19ibGtfdHJhY2VfYXR0cl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjIyNy19XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoyMjI4OiNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSAqL1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjIyOS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIyMzA6I2lmZGVmIENPTkZJR19FVkVOVF9UUkFDSU5HXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMjMxLVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTIzMTI9RVhQT1JUX1NZTUJPTF9HUEwoYmxrX2ZpbGxfcndicyk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMzEzLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjMxNDojZW5kaWYgLyogQ09ORklHX0VWRU5UX1RSQUNJTkcgKi9cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIzMTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTgzCgkJCQkJCQlvdXRwdXQ6IDE2NwoJCQkJCQkJdGhvdWdodHM6IDMwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCbG9jayBUcmFjaW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmlnaHQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBzZXQgZm9yIGJsb2NrIEkvTyB0cmFjaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgQkxLX0RFVl9JT19UUkFDRWAgaXMgdGhlIGtleSwgYnV0IGl0IHJlbGllcyBvbiBgU1lTRlNgIGFuZCBgQkxPQ0tgLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgb3RoZXIgaW1wbGljaXQgZGVwZW5kZW5jaWVzLiBZZXMsIGxpc3RpbmcgYEJMS19ERVZfSU9fVFJBQ0VgLCBgQkxPQ0tgLCBhbmQgYFNZU0ZTYCBleHBsaWNpdGx5IGNvdmVycyBldmVyeXRoaW5nLCBzdGFuZGFyZCBhbmQgYWNjdXJhdGUuCgpOZXh0LCBJIHNob3VsZCBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBzeW1ib2xzLiBMb29raW5nIGF0IGBGb2N1c1N5bWJvbHNgLCBJIHNlZSBgYmxrX3RyYWNlX2lvY3RsYCBhbmQgYGJsa190cmFjZV9zZXR1cGAgYXJlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgaGVyZS4gR29vZC4KCk5vdywgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgcmV2aWV3IHRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpdHNlbGYuIEl0JiMzOTtzIGZvY3VzZWQgb24gaW1wcm92aW5nIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKClgIHdpdGhpbiBga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNgLiBTcGVjaWZpY2FsbHksIGl0IGFkZHJlc3NlcyB0aGUgY2xlYW51cCBvZiB0cmFjZXBvaW50cyBvbiBmYWlsdXJlIGR1cmluZyByZWdpc3RyYXRpb24uIFRoZSBwYXRjaCBhbHNvIHByb3BhZ2F0ZXMgdGhlIGVycm9yIGhhbmRsaW5nIHRvIGZ1bmN0aW9ucyBsaWtlIGBnZXRfcHJvYmVfcmVmKClgLCBgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKClgLCBgYmxrX3RyYWNlX3NldHVwKClgLCBgYmxrX3RyYWNlX3NldHVwMigpYCwgYGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAoKWAsIGFuZCBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKClgLiBBbGwgb2YgdGhlc2UgYXJlIHJlYWNoZWQgdGhyb3VnaCBibG9jayBkZXZpY2UgaW9jdGxzIChgQkxLVFJBQ0VTRVRVUGAsIGBCTEtUUkFDRVNFVFVQMmAsIGBCTEtUUkFDRVNFVFVQMzJgKSBhbmQgc3lzZnMgaW50ZXJmYWNlcy4KCkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBhdGNoLCBJIGFtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfSU9fVFJBQ0UmIzM0OywKICAgICYjMzQ7QkxPQ0smIzM0OywKICAgICYjMzQ7U1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtfdHJhY2VfaW9jdGwmIzM0OywKICAgICYjMzQ7YmxrX3RyYWNlX3NldHVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJsa3RyYWNlIHRyYWNlcG9pbnQgcmVnaXN0cmF0aW9uIGFuZCBzZXR1cCBlcnJvciB1bndpbmRpbmcgcGF0aHMgaW4ga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMuIEl0IG1ha2VzIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyByZXR1cm4gZXJyb3IgY29kZXMgYW5kIHJvbGxiYWNrIHJlZ2lzdGVyZWQgdHJhY2Vwb2ludHMgdXBvbiBmYWlsdXJlLCBhbmQgcHJvcGVybHkgaGFuZGxlcyB0cmFjZXBvaW50IHNldHVwIGVycm9ycyBhY3Jvc3MgYmxrX3RyYWNlX3NldHVwKCksIGJsa190cmFjZV9zZXR1cDIoKSwgY29tcGF0X2Jsa190cmFjZV9zZXR1cCgpLCBhbmQgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKCksIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGJsb2NrIGRldmljZSBpb2N0bHMgYW5kIHN5c2ZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0lPX1RSQUNFJiMzNDssCiAgICAmIzM0O0JMT0NLJiMzNDssCiAgICAmIzM0O1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrX3RyYWNlX2lvY3RsJiMzNDssCiAgICAmIzM0O2Jsa190cmFjZV9zZXR1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBibGt0cmFjZSB0cmFjZXBvaW50IHJlZ2lzdHJhdGlvbiBhbmQgc2V0dXAgZXJyb3IgdW53aW5kaW5nIHBhdGhzIGluIGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLiBJdCBtYWtlcyBibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHMgcmV0dXJuIGVycm9yIGNvZGVzIGFuZCByb2xsYmFjayByZWdpc3RlcmVkIHRyYWNlcG9pbnRzIHVwb24gZmFpbHVyZSwgYW5kIHByb3Blcmx5IGhhbmRsZXMgdHJhY2Vwb2ludCBzZXR1cCBlcnJvcnMgYWNyb3NzIGJsa190cmFjZV9zZXR1cCgpLCBibGtfdHJhY2Vfc2V0dXAyKCksIGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAoKSwgYW5kIGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBibG9jayBkZXZpY2UgaW9jdGxzIGFuZCBzeXNmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjoyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tpbmcgYW5kIHVud2luZGluZyB0byBibGt0cmFjZSB0cmFjZXBvaW50IHJlZ2lzdHJhdGlvbiAoYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzLCBnZXRfcHJvYmVfcmVmLCBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUsIGJsa190cmFjZV9zZXR1cF9xdWV1ZSkuIEluIGZhaWx1cmUgY2FzZXMsIGl0IHByb3Blcmx5IHJvbGxzIGJhY2sgcmVnaXN0ZXJlZCB0cmFjZXBvaW50cywgZGVjcmVtZW50cyBwcm9iZSByZWZlcmVuY2UgY291bnRzLCBjbGVhbnMgdXAgYWxsb2NhdGVkIGJsa190cmFjZSBzdHJ1Y3R1cmVzIHZpYSBibGtfdHJhY2VfZnJlZSwgYW5kIHJldHVybnMgZXJyb3IgY29kZXMgYmVmb3JlIGFueSBkYXRhIGlzIGNvcGllZCBiYWNrIHRvIHVzZXIgc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYXJlIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgYWxsb2NhdGlvbnMgb3IgY29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLiBQb3RlbnRpYWwgcmlza3Mgb24gdGhlc2UgcGF0aHMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgbG9jay9jbGVhbnVwIGVycm9ycykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllczsgdGh1cywgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNThjZmU2NDU2Yzg0NjNiNzE3MDQ5Yjk5NjAxOTYwYzkwMzk2OGE4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMjI6Mjk6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCmluZGV4IDhjZDI1MjBiNGM5OWUuLmMyMzI0Mjk4YzZjMTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCkBAIC02MCw3ICYjNDM7NjAsNyBAQCBzdGF0aWMgc3RydWN0IHRyYWNlcl9mbGFncyBibGtfdHJhY2VyX2ZsYWdzID0gewogc3RhdGljIERFRklORV9NVVRFWChibGtfcHJvYmVfbXV0ZXgpOwogc3RhdGljIGludCBibGtfcHJvYmVzX3JlZjsKIAotc3RhdGljIHZvaWQgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpOwomIzQzO3N0YXRpYyBpbnQgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpOwogc3RhdGljIHZvaWQgYmxrX3VucmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZCk7CiAKIHN0YXRpYyB2b2lkIHJlY29yZF9ibGt0cmFjZV9ldmVudChzdHJ1Y3QgYmxrX2lvX3RyYWNlICp0LCBwaWRfdCBwaWQsIGludCBjcHUsCkBAIC00ODUsMTIgJiM0Mzs0ODUsMTggQEAgc3RhdGljIHZvaWQgYmxrX3RyYWNlX2ZyZWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBibGtfdHJhY2UgKmJ0KQogCWtmcmVlKGJ0KTsKIH0KIAotc3RhdGljIHZvaWQgZ2V0X3Byb2JlX3JlZih2b2lkKQomIzQzO3N0YXRpYyBpbnQgZ2V0X3Byb2JlX3JlZih2b2lkKQogewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKIAltdXRleF9sb2NrKCZhbXA7YmxrX3Byb2JlX211dGV4KTsKLQlpZiAoJiM0MzsmIzQzO2Jsa19wcm9iZXNfcmVmID09IDEpCi0JCWJsa19yZWdpc3Rlcl90cmFjZXBvaW50cygpOwomIzQzOwlpZiAoJiM0MzsmIzQzO2Jsa19wcm9iZXNfcmVmID09IDEpIHsKJiM0MzsJCXJldCA9IGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cygpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlibGtfcHJvYmVzX3JlZi0tOwomIzQzOwl9CiAJbXV0ZXhfdW5sb2NrKCZhbXA7YmxrX3Byb2JlX211dGV4KTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgcHV0X3Byb2JlX3JlZih2b2lkKQpAQCAtNzI3LDEyICYjNDM7NzMzLDE0IEBAIHN0YXRpYyBzdHJ1Y3QgYmxrX3RyYWNlICpibGtfdHJhY2Vfc2V0dXBfcHJlcGFyZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCi1zdGF0aWMgdm9pZCBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCi0JCQkJICAgICBjaGFyICpuYW1lLCBpbnQgdmVyc2lvbiwKLQkJCQkgICAgIHN0cnVjdCBibGtfdHJhY2UgKmJ0LAotCQkJCSAgICAgc3RydWN0IGJsa191c2VyX3RyYWNlX3NldHVwMiAqYnV0cykKJiM0MztzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKJiM0MzsJCQkJICAgIGNoYXIgKm5hbWUsIGludCB2ZXJzaW9uLAomIzQzOwkJCQkgICAgc3RydWN0IGJsa190cmFjZSAqYnQsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAyICpidXRzKQogCiB7CiYjNDM7CWludCByZXQ7CiYjNDM7CiAJc3Ryc2NweV9wYWQoYnV0cy0mZ3Q7bmFtZSwgbmFtZSwgQkxLVFJBQ0VfQkRFVl9TSVpFMik7CiAKIAkvKgpAQCAtNzU1LDggJiM0Mzs3NjMsMTIgQEAgc3RhdGljIHZvaWQgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAogCWJ0LSZndDtwaWQgPSBidXRzLSZndDtwaWQ7CiAJYnQtJmd0O3RyYWNlX3N0YXRlID0gQmxrdHJhY2Vfc2V0dXA7CiAKJiM0MzsJcmV0ID0gZ2V0X3Byb2JlX3JlZigpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKIAlyY3VfYXNzaWduX3BvaW50ZXIocS0mZ3Q7YmxrX3RyYWNlLCBidCk7Ci0JZ2V0X3Byb2JlX3JlZigpOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogaW50IGJsa190cmFjZV9zZXR1cChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSwgZGV2X3QgZGV2LApAQCAtNzkyLDcgJiM0Mzs4MDQsMTIgQEAgaW50IGJsa190cmFjZV9zZXR1cChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSwgZGV2X3QgZGV2LAogCQlibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpOwogCQlyZXR1cm4gUFRSX0VSUihidCk7CiAJfQotCWJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAxLCBidCwgJmFtcDtidXRzMik7CiYjNDM7CXJldCA9IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAxLCBidCwgJmFtcDtidXRzMik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWJsa190cmFjZV9mcmVlKHEsIGJ0KTsKJiM0MzsJCWJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiAJc3Ryc2NweShidXRzLm5hbWUsIGJ1dHMyLm5hbWUsIEJMS1RSQUNFX0JERVZfU0laRSk7CiAJYmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTsKIApAQCAtODEwLDYgJiM0Mzs4MjcsNyBAQCBzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cDIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldiwKIAlzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAyIGJ1dHMyOwogCXN0cnVjdCBibGtfdHJhY2UgKmJ0OwogCXVuc2lnbmVkIGludCBtZW1mbGFnczsKJiM0MzsJaW50IHJldDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2J1dHMyLCBhcmcsIHNpemVvZihidXRzMikpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTgyNyw3ICYjNDM7ODQ1LDEyIEBAIHN0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwMihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSwgZGV2X3QgZGV2LAogCQlibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpOwogCQlyZXR1cm4gUFRSX0VSUihidCk7CiAJfQotCWJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAyLCBidCwgJmFtcDtidXRzMik7CiYjNDM7CXJldCA9IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAyLCBidCwgJmFtcDtidXRzMik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWJsa190cmFjZV9mcmVlKHEsIGJ0KTsKJiM0MzsJCWJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiAJYmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTsKIAogCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYW1wO2J1dHMyLCBzaXplb2YoYnV0czIpKSkgewpAQCAtODQ2LDYgJiM0Mzs4NjksNyBAQCBzdGF0aWMgaW50IGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsCiAJc3RydWN0IGNvbXBhdF9ibGtfdXNlcl90cmFjZV9zZXR1cCBjYnV0czsKIAlzdHJ1Y3QgYmxrX3RyYWNlICpidDsKIAl1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7CiYjNDM7CWludCByZXQ7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDtjYnV0cywgYXJnLCBzaXplb2YoY2J1dHMpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC04NjksNyAmIzQzOzg5MywxMiBAQCBzdGF0aWMgaW50IGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsCiAJCWJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7CiAJCXJldHVybiBQVFJfRVJSKGJ0KTsKIAl9Ci0JYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDEsIGJ0LCAmYW1wO2J1dHMyKTsKJiM0MzsJcmV0ID0gYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDEsIGJ0LCAmYW1wO2J1dHMyKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJYmxrX3RyYWNlX2ZyZWUocSwgYnQpOwomIzQzOwkJYmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KIAlibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpOwogCiAJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZhbXA7YnV0czIubmFtZSwgQVJSQVlfU0laRShidXRzMi5uYW1lKSkpIHsKQEAgLTEzMjQsNDkgJiM0MzsxMzUzLDEwOCBAQCB2b2lkIGJsa19hZGRfZHJpdmVyX2RhdGEoc3RydWN0IHJlcXVlc3QgKnJxLCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQogfQogRVhQT1JUX1NZTUJPTF9HUEwoYmxrX2FkZF9kcml2ZXJfZGF0YSk7CiAKLXN0YXRpYyB2b2lkIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKQomIzQzO3N0YXRpYyBpbnQgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpCiB7CiAJaW50IHJldDsKIAogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2luc2VydChibGtfYWRkX3RyYWNlX3JxX2luc2VydCwgTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXQ7CiAJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfaXNzdWUoYmxrX2FkZF90cmFjZV9ycV9pc3N1ZSwgTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcnFfaW5zZXJ0OwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX21lcmdlKGJsa19hZGRfdHJhY2VfcnFfbWVyZ2UsIE5VTEwpOwotCVdBUk5fT04ocmV0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3JxX2lzc3VlOwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX3JlcXVldWUoYmxrX2FkZF90cmFjZV9ycV9yZXF1ZXVlLCBOVUxMKTsKLQlXQVJOX09OKHJldCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9ycV9tZXJnZTsKIAlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9jb21wbGV0ZShibGtfYWRkX3RyYWNlX3JxX2NvbXBsZXRlLCBOVUxMKTsKLQlXQVJOX09OKHJldCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9ycV9yZXF1ZXVlOwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19jb21wbGV0ZShibGtfYWRkX3RyYWNlX2Jpb19jb21wbGV0ZSwgTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcnFfY29tcGxldGU7CiAJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2JhY2ttZXJnZShibGtfYWRkX3RyYWNlX2Jpb19iYWNrbWVyZ2UsIE5VTEwpOwotCVdBUk5fT04ocmV0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X2Jpb19jb21wbGV0ZTsKIAlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fZnJvbnRtZXJnZShibGtfYWRkX3RyYWNlX2Jpb19mcm9udG1lcmdlLCBOVUxMKTsKLQlXQVJOX09OKHJldCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9iaW9fYmFja21lcmdlOwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19xdWV1ZShibGtfYWRkX3RyYWNlX2Jpb19xdWV1ZSwgTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfYmlvX2Zyb250bWVyZ2U7CiAJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfZ2V0cnEoYmxrX2FkZF90cmFjZV9nZXRycSwgTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfYmlvX3F1ZXVlOwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsa196b25lX2FwcGVuZF91cGRhdGVfcmVxdWVzdF9iaW8oCiAJCWJsa19hZGRfdHJhY2Vfem9uZV91cGRhdGVfcmVxdWVzdCwgTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfZ2V0cnE7CiAJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfZGlza196b25lX3dwbHVnX2FkZF9iaW8oYmxrX2FkZF90cmFjZV96b25lX3BsdWcsCiAJCQkJCQkgICAgIE5VTEwpOwotCVdBUk5fT04ocmV0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3pvbmVfdXBkYXRlX3JlcXVlc3Q7CiAJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxrX3pvbmVfd3BsdWdfYmlvKGJsa19hZGRfdHJhY2Vfem9uZV91bnBsdWcsCiAJCQkJCQlOVUxMKTsKLQlXQVJOX09OKHJldCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF96b25lX3BsdWc7CiAJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcGx1ZyhibGtfYWRkX3RyYWNlX3BsdWcsIE5VTEwpOwotCVdBUk5fT04ocmV0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3pvbmVfdW5wbHVnOwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3VucGx1ZyhibGtfYWRkX3RyYWNlX3VucGx1ZywgTlVMTCk7Ci0JV0FSTl9PTihyZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcGx1ZzsKIAlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19zcGxpdChibGtfYWRkX3RyYWNlX3NwbGl0LCBOVUxMKTsKLQlXQVJOX09OKHJldCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF91bnBsdWc7CiAJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX3JlbWFwKGJsa19hZGRfdHJhY2VfYmlvX3JlbWFwLCBOVUxMKTsKLQlXQVJOX09OKHJldCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9zcGxpdDsKIAlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9yZW1hcChibGtfYWRkX3RyYWNlX3JxX3JlbWFwLCBOVUxMKTsKLQlXQVJOX09OKHJldCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9iaW9fcmVtYXA7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO291dF9iaW9fcmVtYXA6CiYjNDM7CXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX3JlbWFwKGJsa19hZGRfdHJhY2VfYmlvX3JlbWFwLCBOVUxMKTsKJiM0MztvdXRfc3BsaXQ6CiYjNDM7CXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfc3BsaXQoYmxrX2FkZF90cmFjZV9zcGxpdCwgTlVMTCk7CiYjNDM7b3V0X3VucGx1ZzoKJiM0MzsJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWcoYmxrX2FkZF90cmFjZV91bnBsdWcsIE5VTEwpOwomIzQzO291dF9wbHVnOgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3BsdWcoYmxrX2FkZF90cmFjZV9wbHVnLCBOVUxMKTsKJiM0MztvdXRfem9uZV91bnBsdWc6CiYjNDM7CXVucmVnaXN0ZXJfdHJhY2VfYmxrX3pvbmVfd3BsdWdfYmlvKGJsa19hZGRfdHJhY2Vfem9uZV91bnBsdWcsIE5VTEwpOwomIzQzO291dF96b25lX3BsdWc6CiYjNDM7CXVucmVnaXN0ZXJfdHJhY2VfZGlza196b25lX3dwbHVnX2FkZF9iaW8oYmxrX2FkZF90cmFjZV96b25lX3BsdWcsIE5VTEwpOwomIzQzO291dF96b25lX3VwZGF0ZV9yZXF1ZXN0OgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsa196b25lX2FwcGVuZF91cGRhdGVfcmVxdWVzdF9iaW8oCiYjNDM7CQlibGtfYWRkX3RyYWNlX3pvbmVfdXBkYXRlX3JlcXVlc3QsIE5VTEwpOwomIzQzO291dF9nZXRycToKJiM0MzsJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19nZXRycShibGtfYWRkX3RyYWNlX2dldHJxLCBOVUxMKTsKJiM0MztvdXRfYmlvX3F1ZXVlOgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19xdWV1ZShibGtfYWRkX3RyYWNlX2Jpb19xdWV1ZSwgTlVMTCk7CiYjNDM7b3V0X2Jpb19mcm9udG1lcmdlOgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19mcm9udG1lcmdlKGJsa19hZGRfdHJhY2VfYmlvX2Zyb250bWVyZ2UsIE5VTEwpOwomIzQzO291dF9iaW9fYmFja21lcmdlOgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19iYWNrbWVyZ2UoYmxrX2FkZF90cmFjZV9iaW9fYmFja21lcmdlLCBOVUxMKTsKJiM0MztvdXRfYmlvX2NvbXBsZXRlOgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19jb21wbGV0ZShibGtfYWRkX3RyYWNlX2Jpb19jb21wbGV0ZSwgTlVMTCk7CiYjNDM7b3V0X3JxX2NvbXBsZXRlOgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2NvbXBsZXRlKGJsa19hZGRfdHJhY2VfcnFfY29tcGxldGUsIE5VTEwpOwomIzQzO291dF9ycV9yZXF1ZXVlOgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX3JlcXVldWUoYmxrX2FkZF90cmFjZV9ycV9yZXF1ZXVlLCBOVUxMKTsKJiM0MztvdXRfcnFfbWVyZ2U6CiYjNDM7CXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfbWVyZ2UoYmxrX2FkZF90cmFjZV9ycV9tZXJnZSwgTlVMTCk7CiYjNDM7b3V0X3JxX2lzc3VlOgomIzQzOwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2lzc3VlKGJsa19hZGRfdHJhY2VfcnFfaXNzdWUsIE5VTEwpOwomIzQzO291dF9ycV9pbnNlcnQ6CiYjNDM7CXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfaW5zZXJ0KGJsa19hZGRfdHJhY2VfcnFfaW5zZXJ0LCBOVUxMKTsKJiM0MzsJdHJhY2Vwb2ludF9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyKCk7CiYjNDM7b3V0OgomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBibGtfdW5yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKQpAQCAtMTkxNiw4ICYjNDM7MjAwNCwxMSBAQCBzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKIAogCWJsa190cmFjZV9zZXR1cF9sYmEoYnQsIGJkZXYpOwogCiYjNDM7CXJldCA9IGdldF9wcm9iZV9yZWYoKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZnJlZV9idDsKJiM0MzsKIAlyY3VfYXNzaWduX3BvaW50ZXIocS0mZ3Q7YmxrX3RyYWNlLCBidCk7Ci0JZ2V0X3Byb2JlX3JlZigpOwogCXJldHVybiAwOwogCiBmcmVlX2J0Ogo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM1NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDYwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJMS1RSQUNFIFBhdGNoIGZvciBFcnJvciBIYW5kbGluZyBhbmQgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhleSYjMzk7dmUgbWFkZSBzb21lIHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGUgdHJhY2Vwb2ludCByZWdpc3RyYXRpb24gcHJvY2VzcywgYW5kIEkgbmVlZCB0byBhc3Nlc3MgdGhlIGltcGFjdC4KCkZpcnN0LCBJIHNlZSBgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzYCBoYXMgYmVlbiBhbHRlcmVkLiBQcmV2aW91c2x5LCBpdCBqdXN0IHJldHVybmVkIHZvaWQsIGFuZCBhbnkgZXJyb3JzIHdlcmUgc2ltcGx5IFdBUk4mIzM5O2QuIE5vdywgaXQgcmV0dXJucyBhbiBpbnQsIGFsbG93aW5nIGZvciBleHBsaWNpdCBlcnJvciBjb2Rlcy4gSW1wb3J0YW50bHksIGlmIHJlZ2lzdGVyaW5nIGEgdHJhY2Vwb2ludCBmYWlscywgaXQgKnVud2luZHMqIHRoZSBhbHJlYWR5IHJlZ2lzdGVyZWQgb25lcyBhbmQgcHJvcGFnYXRlcyB0aGUgZXJyb3IuIEdvb2QsIHRoYXQmIzM5O3MgYSBkZWZpbml0ZSBpbXByb3ZlbWVudCBpbiByb2J1c3RuZXNzLgoKTmV4dCwgYGdldF9wcm9iZV9yZWZgIG5vdyByZXR1cm5zIGFuIGludCB0b28uIEl0cyBsb2dpYyBzZWVtcyBkZXNpZ25lZCB0byBoYW5kbGUgdGhlIGVycm9yIHJldHVybiBmcm9tIGBibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHNgIHdoZW4gYGJsa19wcm9iZXNfcmVmYCBpcyAxLiBJZiByZWdpc3RyYXRpb24gZmFpbGVkLCBpdCBkZWNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgYW5kIGFsc28gcmV0dXJucyB0aGUgZXJyb3IuCgpUaGVuLCBgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplYCBpcyBtb2RpZmllZCwgYWxzbyByZXR1cm5pbmcgYW4gYGludGAgbm93LiBJdCBjYWxscyBgZ2V0X3Byb2JlX3JlZigpYCwgYW5kIGlmICp0aGF0KiBmYWlscywgaXQgcmV0dXJucyB0aGUgZXJyb3IgKmJlZm9yZSogdGhlIGByY3VfYXNzaWduX3BvaW50ZXJgIGNhbGwuIFRoaXMgaXMga2V5LCBhcyB3ZSBhdm9pZCBzb21lIGZvcm0gb2YgYSByYWNlIGNvbmRpdGlvbiBhbmQgYSBwb3NzaWJsZSBjb3JydXB0aW9uLgoKSSBub3RpY2UgdGhhdCB0aGUgY2FsbGVycyBvZiBgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplYCDigJMgYGJsa190cmFjZV9zZXR1cGAsIGBibGtfdHJhY2Vfc2V0dXAyYCwgYW5kIGBjb21wYXRfYmxrX3RyYWNlX3NldHVwYCDigJMgYXJlIGFsbCB1cGRhdGVkIHRvIGNoZWNrIHRoaXMgcmV0dXJuIHZhbHVlLiBJZiBgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplYCBmYWlscywgdGhlbiB0aGV5IGZyZWUgdGhlIHRyYWNlIHN0cnVjdHVyZSwgdW5sb2NrIGRlYnVnZnMsIGFuZCBwcm9wYWdhdGUgdGhlIGVycm9yLiBBbHNvLCBJIHNlZSBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlYCBub3cgaGFuZGxlcyB0aGUgZmFpbHVyZSBvZiBgZ2V0X3Byb2JlX3JlZigpYCBieSBqdW1waW5nIHRvIGBmcmVlX2J0YC4gQWxsIG9mIHRoZXNlIHRoaW5ncyBsb29rIGdvb2QsIGF0IGEgZ2xhbmNlLCBmcm9tIGEgY29udHJvbCBmbG93IHBlcnNwZWN0aXZlLgoKT2theSwgbm93IGZvciB0aGUgcGFydCB0aGF0IHJlYWxseSBpbnRlcmVzdHMgbWU6IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFRoZSBwcmltYXJ5IHRoaW5nIEkgd2FudCB0byBldmFsdWF0ZSBpcyB0aGUgcG9zc2liaWxpdHkgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm9ybWF0aW9uIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyBhIGNvbW1vbiBjbGFzcyBvZiBidWdzIGluIGtlcm5lbCBjb2RlLgoKU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBjb2RlIGludGVyYWN0cyB3aXRoIHVzZXItc3BhY2UgZGF0YSBzdHJ1Y3R1cmVzLiBNeSBmb2N1cyBpcyBvbiB0aGUgYGJsa190cmFjZV9zZXR1cGAgZnVuY3Rpb24uIFRoZSBjb2RlIGxvb2tzIGxpa2UgdGhpczoKCmBgYGMKaW50IGJsa190cmFjZV9zZXR1cChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSwgZGV2X3QgZGV2LAouLi4KCXJldCA9IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAxLCBidCwgJmFtcDtidXRzMik7CglpZiAocmV0KSB7CgkJYmxrX3RyYWNlX2ZyZWUocSwgYnQpOwoJCWJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7CgkJcmV0dXJuIHJldDsKCX0KCXN0cnNjcHkoYnV0cy5uYW1lLCBidXRzMi5uYW1lLCBCTEtUUkFDRV9CREVWX1NJWkUpOwoJYmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTsKCglpZiAoY29weV90b191c2VyKGFyZywgJmFtcDtidXRzLCBzaXplb2YoYnV0cykpKQouLi4KYGBgCgpTbywgSeKAmW0gemVyb2luZyBpbiBvbiB0aGlzIGBjb3B5X3RvX3VzZXJgIGNhbGwuIEkgc2VlIHRoZSBjb2RlIGNhbGxzIGBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemVgLiBJZiB0aGF0IGZhaWxzLCB0aGUgcHJvZ3JhbSByZXR1cm5zLiBIb3dldmVyLCBiZWZvcmUgdGhlIGBjb3B5X3RvX3VzZXJgIGNhbGwsIGBzdHJzY3B5YCBpcyB1c2VkIHRvIGNvcHkgZnJvbSBgYnV0czIubmFtZWAgdG8gYGJ1dHMubmFtZWAuIE5vdywgaWYgYGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZWAgZmFpbHMsIGlzIHRoZSBkYXRhIGluIHRoZSBgYnV0czJgIHN0cnVjdHVyZSB3ZWxsIGRlZmluZWQsIG9yIGRvZXMgaXQgaGF2ZSBnYXJiYWdlIGRhdGE/IFRoaXMgaGFzIGEgZ29vZCBjaGFuY2Ugb2YgYmVpbmcgd2hlcmUgYSBidWcgY2FuIGJlIGxvY2F0ZWQuIEkgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AgYXJvdW5kIGxpbmVzIDc4MCB0byA5MjAgdG8gY2hlY2sgdGhlIGNvbnRleHQgYXJvdW5kIHRoZXNlIHZhcmlhYmxlcyB0byBkZXRlcm1pbmUgaWYgaXQgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LiBNeSBodW5jaCBpcyB0aGF0IHRoaXMgaXMgdGhlIHBvaW50IEkmIzM5O2xsIGZpbmQgYW4gaXNzdWUgaWYgdGhlcmUgaXMgb25lLiBMZXQmIzM5O3Mgc3RhcnQgdGhlIHJlYWRpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NzA6XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihxLVx1MDAzZWJsa190cmFjZSwgYnQpO1xuIDc3MTpcdFx0cmV0dXJuIDA7XG4gNzcyOlx0fVxuIDc3MzpcdFxuIDc3NDpcdGludCBibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldixcbiA3NzU6XHRcdFx0ICAgIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXG4gNzc2Olx0XHRcdCAgICBjaGFyIF9fdXNlciAqYXJnKVxuIDc3NzpcdHtcbiA3Nzg6XHRcdHN0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cDIgYnV0czI7XG4gNzc5Olx0XHRzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAgYnV0cztcbiA3ODA6XHRcdHN0cnVjdCBibGtfdHJhY2UgKmJ0O1xuIDc4MTpcdFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuIDc4MjpcdFx0aW50IHJldDtcbiA3ODM6XHRcbiA3ODQ6XHRcdHJldCA9IGNvcHlfZnJvbV91c2VyKFx1MDAyNmJ1dHMsIGFyZywgc2l6ZW9mKGJ1dHMpKTtcbiA3ODU6XHRcdGlmIChyZXQpXG4gNzg2Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDc4NzpcdFxuIDc4ODpcdFx0aWYgKCFidXRzLmJ1Zl9zaXplIHx8ICFidXRzLmJ1Zl9ucilcbiA3ODk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzkwOlx0XG4gNzkxOlx0XHRidXRzMiA9IChzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAyKSB7XG4gNzkyOlx0XHRcdC5hY3RfbWFzayA9IGJ1dHMuYWN0X21hc2ssXG4gNzkzOlx0XHRcdC5idWZfc2l6ZSA9IGJ1dHMuYnVmX3NpemUsXG4gNzk0Olx0XHRcdC5idWZfbnIgPSBidXRzLmJ1Zl9ucixcbiA3OTU6XHRcdFx0LnN0YXJ0X2xiYSA9IGJ1dHMuc3RhcnRfbGJhLFxuIDc5NjpcdFx0XHQuZW5kX2xiYSA9IGJ1dHMuZW5kX2xiYSxcbiA3OTc6XHRcdFx0LnBpZCA9IGJ1dHMucGlkLFxuIDc5ODpcdFx0fTtcbiA3OTk6XHRcbiA4MDA6XHRcdG1lbWZsYWdzID0gYmxrX2RlYnVnZnNfbG9jayhxKTtcbiA4MDE6XHRcdGJ0ID0gYmxrX3RyYWNlX3NldHVwX3ByZXBhcmUocSwgbmFtZSwgZGV2LCBidXRzLmJ1Zl9zaXplLCBidXRzLmJ1Zl9ucixcbiA4MDI6XHRcdFx0XHRcdCAgICAgYmRldik7XG4gODAzOlx0XHRpZiAoSVNfRVJSKGJ0KSkge1xuIDgwNDpcdFx0XHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuIDgwNTpcdFx0XHRyZXR1cm4gUFRSX0VSUihidCk7XG4gODA2Olx0XHR9XG4gODA3Olx0XHRyZXQgPSBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMSwgYnQsIFx1MDAyNmJ1dHMyKTtcbiA4MDg6XHRcdGlmIChyZXQpIHtcbiA4MDk6XHRcdFx0YmxrX3RyYWNlX2ZyZWUocSwgYnQpO1xuIDgxMDpcdFx0XHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuIDgxMTpcdFx0XHRyZXR1cm4gcmV0O1xuIDgxMjpcdFx0fVxuIDgxMzpcdFx0c3Ryc2NweShidXRzLm5hbWUsIGJ1dHMyLm5hbWUsIEJMS1RSQUNFX0JERVZfU0laRSk7XG4gODE0Olx0XHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuIDgxNTpcdFxuIDgxNjpcdFx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFx1MDAyNmJ1dHMsIHNpemVvZihidXRzKSkpIHtcbiA4MTc6XHRcdFx0YmxrX3RyYWNlX3JlbW92ZShxKTtcbiA4MTg6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gODE5Olx0XHR9XG4gODIwOlx0XHRyZXR1cm4gMDtcbiA4MjE6XHR9XG4gODIyOlx0RVhQT1JUX1NZTUJPTF9HUEwoYmxrX3RyYWNlX3NldHVwKTtcbiA4MjM6XHRcbiA4MjQ6XHRzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cDIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldixcbiA4MjU6XHRcdFx0XHQgICAgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgY2hhciBfX3VzZXIgKmFyZylcbiA4MjY6XHR7XG4gODI3Olx0XHRzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAyIGJ1dHMyO1xuIDgyODpcdFx0c3RydWN0IGJsa190cmFjZSAqYnQ7XG4gODI5Olx0XHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XG4gODMwOlx0XHRpbnQgcmV0O1xuIDgzMTpcdFxuIDgzMjpcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmJ1dHMyLCBhcmcsIHNpemVvZihidXRzMikpKVxuIDgzMzpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiA4MzQ6XHRcbiA4MzU6XHRcdGlmICghYnV0czIuYnVmX3NpemUgfHwgIWJ1dHMyLmJ1Zl9ucilcbiA4MzY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODM3Olx0XG4gODM4Olx0XHRpZiAoYnV0czIuZmxhZ3MgIT0gMClcbiA4Mzk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODQwOlx0XG4gODQxOlx0XHRtZW1mbGFncyA9IGJsa19kZWJ1Z2ZzX2xvY2socSk7XG4gODQyOlx0XHRidCA9IGJsa190cmFjZV9zZXR1cF9wcmVwYXJlKHEsIG5hbWUsIGRldiwgYnV0czIuYnVmX3NpemUsIGJ1dHMyLmJ1Zl9ucixcbiA4NDM6XHRcdFx0XHRcdCAgICAgYmRldik7XG4gODQ0Olx0XHRpZiAoSVNfRVJSKGJ0KSkge1xuIDg0NTpcdFx0XHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuIDg0NjpcdFx0XHRyZXR1cm4gUFRSX0VSUihidCk7XG4gODQ3Olx0XHR9XG4gODQ4Olx0XHRyZXQgPSBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMiwgYnQsIFx1MDAyNmJ1dHMyKTtcbiA4NDk6XHRcdGlmIChyZXQpIHtcbiA4NTA6XHRcdFx0YmxrX3RyYWNlX2ZyZWUocSwgYnQpO1xuIDg1MTpcdFx0XHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuIDg1MjpcdFx0XHRyZXR1cm4gcmV0O1xuIDg1MzpcdFx0fVxuIDg1NDpcdFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcbiA4NTU6XHRcbiA4NTY6XHRcdGlmIChjb3B5X3RvX3VzZXIoYXJnLCBcdTAwMjZidXRzMiwgc2l6ZW9mKGJ1dHMyKSkpIHtcbiA4NTc6XHRcdFx0YmxrX3RyYWNlX3JlbW92ZShxKTtcbiA4NTg6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gODU5Olx0XHR9XG4gODYwOlx0XHRyZXR1cm4gMDtcbiA4NjE6XHR9XG4gODYyOlx0XG4gODYzOlx0I2lmIGRlZmluZWQoQ09ORklHX0NPTVBBVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1g4Nl82NClcbiA4NjQ6XHRzdGF0aWMgaW50IGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsXG4gODY1Olx0XHRcdFx0XHQgIGRldl90IGRldiwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcbiA4NjY6XHRcdFx0XHRcdCAgY2hhciBfX3VzZXIgKmFyZylcbiA4Njc6XHR7XG4gODY4Olx0XHRzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAyIGJ1dHMyO1xuIDg2OTpcdFx0c3RydWN0IGNvbXBhdF9ibGtfdXNlcl90cmFjZV9zZXR1cCBjYnV0cztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ1MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBpZiBJIGFtIHRoZSBvbmUgdGhpbmtpbmcgaXQsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkZvY3VzZWQgUmV2aWV3IG9mIFNwZWNpZmljIENvZGUgTGluZXMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHRob3JvdWdoIGhlcmUuIEdpdmVuIHRoZSBjb250ZXh0IG9mIHRoaXMgaXNzdWUsIGFuZCBjb25zaWRlcmluZyB3aGF0IEkga25vdyBhYm91dCB0aGUgc3lzdGVtJiMzOTtzIGFyY2hpdGVjdHVyZSwgSSB3YW50IHRvIHplcm8gaW4gb24gYSBwYXJ0aWN1bGFyIHNlY3Rpb24gb2YgY29kZS4gU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGxpbmVzIDg3MCB0aHJvdWdoIDkxMC4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgYW5hbHl6ZSB0aGUgbG9naWMgaW1wbGVtZW50ZWQgdGhlcmUsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIG9yIHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBtb2R1bGVzLiBJIGV4cGVjdCB0aGVyZSB0byBiZSB0aGUgcm9vdCBvZiB0aGUgaXNzdWUgdGhlcmUuIFRpbWUgdG8gZGl2ZSBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYmxrdHJhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODcwOlx0XHRzdHJ1Y3QgYmxrX3RyYWNlICpidDtcbiA4NzE6XHRcdHVuc2lnbmVkIGludCBtZW1mbGFncztcbiA4NzI6XHRcdGludCByZXQ7XG4gODczOlx0XG4gODc0Olx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2Y2J1dHMsIGFyZywgc2l6ZW9mKGNidXRzKSkpXG4gODc1Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDg3NjpcdFxuIDg3NzpcdFx0aWYgKCFjYnV0cy5idWZfc2l6ZSB8fCAhY2J1dHMuYnVmX25yKVxuIDg3ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA4Nzk6XHRcbiA4ODA6XHRcdGJ1dHMyID0gKHN0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cDIpIHtcbiA4ODE6XHRcdFx0LmFjdF9tYXNrID0gY2J1dHMuYWN0X21hc2ssXG4gODgyOlx0XHRcdC5idWZfc2l6ZSA9IGNidXRzLmJ1Zl9zaXplLFxuIDg4MzpcdFx0XHQuYnVmX25yID0gY2J1dHMuYnVmX25yLFxuIDg4NDpcdFx0XHQuc3RhcnRfbGJhID0gY2J1dHMuc3RhcnRfbGJhLFxuIDg4NTpcdFx0XHQuZW5kX2xiYSA9IGNidXRzLmVuZF9sYmEsXG4gODg2Olx0XHRcdC5waWQgPSBjYnV0cy5waWQsXG4gODg3Olx0XHR9O1xuIDg4ODpcdFxuIDg4OTpcdFx0bWVtZmxhZ3MgPSBibGtfZGVidWdmc19sb2NrKHEpO1xuIDg5MDpcdFx0YnQgPSBibGtfdHJhY2Vfc2V0dXBfcHJlcGFyZShxLCBuYW1lLCBkZXYsIGJ1dHMyLmJ1Zl9zaXplLCBidXRzMi5idWZfbnIsXG4gODkxOlx0XHRcdFx0XHQgICAgIGJkZXYpO1xuIDg5MjpcdFx0aWYgKElTX0VSUihidCkpIHtcbiA4OTM6XHRcdFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcbiA4OTQ6XHRcdFx0cmV0dXJuIFBUUl9FUlIoYnQpO1xuIDg5NTpcdFx0fVxuIDg5NjpcdFx0cmV0ID0gYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDEsIGJ0LCBcdTAwMjZidXRzMik7XG4gODk3Olx0XHRpZiAocmV0KSB7XG4gODk4Olx0XHRcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcbiA4OTk6XHRcdFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcbiA5MDA6XHRcdFx0cmV0dXJuIHJldDtcbiA5MDE6XHRcdH1cbiA5MDI6XHRcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XG4gOTAzOlx0XG4gOTA0Olx0XHRpZiAoY29weV90b191c2VyKGFyZywgXHUwMDI2YnV0czIubmFtZSwgQVJSQVlfU0laRShidXRzMi5uYW1lKSkpIHtcbiA5MDU6XHRcdFx0YmxrX3RyYWNlX3JlbW92ZShxKTtcbiA5MDY6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gOTA3Olx0XHR9XG4gOTA4Olx0XG4gOTA5Olx0XHRyZXR1cm4gMDtcbiA5MTA6XHR9XG4gOTExOlx0I2VuZGlmXG4gOTEyOlx0XG4gOTEzOlx0c3RhdGljIGludCBfX2Jsa190cmFjZV9zdGFydHN0b3Aoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGludCBzdGFydClcbiA5MTQ6XHR7XG4gOTE1Olx0XHRzdHJ1Y3QgYmxrX3RyYWNlICpidDtcbiA5MTY6XHRcbiA5MTc6XHRcdGJ0ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChxLVx1MDAzZWJsa190cmFjZSxcbiA5MTg6XHRcdFx0XHRcdCAgICAgICBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2cS1cdTAwM2VkZWJ1Z2ZzX211dGV4KSk7XG4gOTE5Olx0XHRpZiAoYnQgPT0gTlVMTClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQzNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gQmxvY2sgVHJhY2luZyBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGZvciB0aGUgYmxvY2sgdHJhY2luZyBpbmZyYXN0cnVjdHVyZS4gSSBrbm93IHRoZSByZWxldmFudCBzZWN0aW9uIGlzIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBibGtfdHJhY2Vfc2V0dXBfcXVldWVgIGZ1bmN0aW9uLiBUbyB6ZXJvIGluIG9uIHRoZSBrZXkgbG9naWMsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZWZlcmVuY2UgYXJvdW5kIGxpbmVzIDE5OTAgdGhyb3VnaCAyMDIwLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyBxdWV1ZXMgYXJlIHNldCB1cCBpbiBkZXRhaWwgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5ODA6XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuMTk4MTpcdFx0YmxrX3RyYWNlX2ZyZWUocSwgYnQpO1xuMTk4MjpcdFx0cmV0dXJuIDA7XG4xOTgzOlx0fVxuMTk4NDpcdFxuMTk4NTpcdC8qXG4xOTg2Olx0ICogU2V0dXAgZXZlcnl0aGluZyByZXF1aXJlZCB0byBzdGFydCB0cmFjaW5nXG4xOTg3Olx0ICovXG4xOTg4Olx0c3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXBfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4xOTg5Olx0XHRcdFx0XHQgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbjE5OTA6XHR7XG4xOTkxOlx0XHRzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IE5VTEw7XG4xOTkyOlx0XHRpbnQgcmV0ID0gLUVOT01FTTtcbjE5OTM6XHRcbjE5OTQ6XHRcdGJ0ID0ga3phbGxvY19vYmooKmJ0KTtcbjE5OTU6XHRcdGlmICghYnQpXG4xOTk2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTk5NzpcdFxuMTk5ODpcdFx0YnQtXHUwMDNlbXNnX2RhdGEgPSBfX2FsbG9jX3BlcmNwdShCTEtfVE5fTUFYX01TRywgX19hbGlnbm9mX18oY2hhcikpO1xuMTk5OTpcdFx0aWYgKCFidC1cdTAwM2Vtc2dfZGF0YSlcbjIwMDA6XHRcdFx0Z290byBmcmVlX2J0O1xuMjAwMTpcdFxuMjAwMjpcdFx0YnQtXHUwMDNlZGV2ID0gYmRldi1cdTAwM2ViZF9kZXY7XG4yMDAzOlx0XHRidC1cdTAwM2VhY3RfbWFzayA9ICh1MTYpLTE7XG4yMDA0Olx0XG4yMDA1Olx0XHRibGtfdHJhY2Vfc2V0dXBfbGJhKGJ0LCBiZGV2KTtcbjIwMDY6XHRcbjIwMDc6XHRcdHJldCA9IGdldF9wcm9iZV9yZWYoKTtcbjIwMDg6XHRcdGlmIChyZXQpXG4yMDA5Olx0XHRcdGdvdG8gZnJlZV9idDtcbjIwMTA6XHRcbjIwMTE6XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihxLVx1MDAzZWJsa190cmFjZSwgYnQpO1xuMjAxMjpcdFx0cmV0dXJuIDA7XG4yMDEzOlx0XG4yMDE0Olx0ZnJlZV9idDpcbjIwMTU6XHRcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcbjIwMTY6XHRcdHJldHVybiByZXQ7XG4yMDE3Olx0fVxuMjAxODpcdFxuMjAxOTpcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTUwCgkJCQkJCQlvdXRwdXQ6IDE5NAoJCQkJCQkJdGhvdWdodHM6IDY0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJsa3RyYWNlIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQmIzM5O3MgYWxsIGFib3V0IGltcHJvdmluZyBlcnJvciBoYW5kbGluZyBkdXJpbmcgYmxrdHJhY2UgdHJhY2Vwb2ludCByZWdpc3RyYXRpb24uIFByZXZpb3VzbHksIGEgZmFpbGVkIHJlZ2lzdHJhdGlvbiB3YXMganVzdCBhIGBXQVJOX09OYCwgd2hpY2ggaXMgaGFyZGx5IHJvYnVzdC4gTm93LCBgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzYCBhY3R1YWxseSByZXR1cm5zIGFuIGVycm9yIGNvZGUsIGFuZCBjcnVjaWFsbHksICp1bnJlZ2lzdGVycyogYW55IGFscmVhZHkgcmVnaXN0ZXJlZCB0cmFjZXBvaW50cyBpZiBvbmUgZmFpbHMuIFRoaXMgaXMgYSBzb2xpZCBpbXByb3ZlbWVudCwgcHJldmVudGluZyBwYXJ0aWFsIHRyYWNlcG9pbnQgc2V0dXBzLiBUaGUgYGdldF9wcm9iZV9yZWZgIGZ1bmN0aW9uLCBhbmQgdGhlIGNhbGxzIHRvIHRoaXMgYnkgdmFyaW91cyBmdW5jdGlvbnMsIGFyZSBhbGwgY2hlY2tpbmcgdGhlIGVycm9yIGNvZGVzIGFuZCBlbnN1cmluZyBwcm9wZXIgdW53aW5kaW5nIG9uIGZhaWx1cmUuIEdvb2QuCgpUaGUgbW9yZSBwcmVzc2luZyBxdWVzdGlvbiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgb3IgaW5mb3JtYXRpb24gbGVha3MsIGVpdGhlciB0byB1c2VyIG9yIHdpdGhpbiB0aGUga2VybmVsLiBMZXQmIzM5O3MgbWV0aG9kaWNhbGx5IGxvb2s6CgoxLiAgYGNvcHlfdG9fdXNlcmAgY2FsbHM6IFNlZW1zIGxpa2UgZXZlcnl0aGluZyBpcyBndWFyZGVkIHByb3Blcmx5LiBJbiBgYmxrX3RyYWNlX3NldHVwYCBhbmQgYGJsa190cmFjZV9zZXR1cDJgLCBhbnkgZXJyb3JzIHByb3BhZ2F0ZSAqYmVmb3JlKiByZWFjaGluZyBhbnkgYGNvcHlfdG9fdXNlcmAgY2FsbC4gQW5kIHRoZSBkYXRhIGJlaW5nIGNvcGllZCBpcyBlaXRoZXIgaW5pdGlhbGl6ZWQgZnJvbSB1c2VyIGlucHV0ICh2YWxpZGF0ZWQpIG9yIGluaXRpYWxpemVkIGJlZm9yZSBjb3B5aW5nLiBObyBzdXJwcmlzZXMgaGVyZS4KMi4gIFRyYWNlcG9pbnQgdW53aW5kaW5nOiBUaGUgcGF0Y2ggY29ycmVjdGx5IHVucmVnaXN0ZXJzIGZ1bmN0aW9uIHBvaW50ZXJzIG9yIGNhbGxiYWNrcyBvbiBlcnJvciwgbm90IHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBzdHJ1Y3R1cmVzLgozLiAgUmV0dXJuIGNvZGVzOiBFdmVyeXRoaW5nIGxvb2tzIGNvbnNpc3RlbnQ7IGByZXRgIGlzIGNvcnJlY3RseSBhc3NpZ25lZCBpbiBhbGwgYnJhbmNoZXMuCjQuICBTdHJ1Y3RzOiBObyBuZXcgc3RydWN0cyBvciB1bmluaXRpYWxpemVkIGZpZWxkcyBpbnRyb2R1Y2VkLiBFeGNlbGxlbnQuCgpOb3csIGZvciBLTVNBTiBhcHBsaWNhYmlsaXR5LCBteSBndXQgZmVlbGluZyBzYXlzIHRoaXMgaXMgYSAmIzM0O25vLiYjMzQ7IFRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgZXJyb3IgdW53aW5kaW5nLCB0cmFjZXBvaW50IHJlZ2lzdHJhdGlvbiwgYW5kIGVycm9yIGhhbmRsaW5nLiBBbnkgYnVncyB3b3VsZCBsZWFuIHRvd2FyZCByZXNvdXJjZSBsZWFrcywgZXJyb3IgcGF0aCBoYW5kbGluZyBpc3N1ZXMsIG9yIG1heWJlIGxvY2tpbmcgcHJvYmxlbXMgb3IgdXNlLWFmdGVyLWZyZWUsIG5vdCB0aGUga2luZCBvZiB0aGluZ3MgS01TQU4gdHlwaWNhbGx5IGNhdGNoZXMsIG5vciBkbyBJIHNlZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgaW50cm9kdWNlZC4gU3RhbmRhcmQgdG9vbHMsIEtBU0FOLCBhbmQgTE9DS0RFUCBhcmUgZ29pbmcgdG8gYmUgbW9yZSB1c2VmdWwgaGVyZS4KCkkmIzM5O20gY29uZmlkZW50OyBJJiMzOTtsbCBzZXQgYE5lZWRzS01TQU4gPSBmYWxzZWAgd2l0aCBhIGNsZWFyIGNvbnNjaWVuY2UuIFRoaXMgaXMgc291bmQsIHdlbGwtcmVhc29uZWQsIGFuZCBhIGRlZmluaXRlIGltcHJvdmVtZW50IHRvIHRoZSBlcnJvciBoYW5kbGluZyBvZiBibGt0cmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvciBjaGVja2luZyBhbmQgdW53aW5kaW5nIHRvIGJsa3RyYWNlIHRyYWNlcG9pbnQgcmVnaXN0cmF0aW9uIChibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHMsIGdldF9wcm9iZV9yZWYsIGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZSwgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKS4gSW4gZmFpbHVyZSBjYXNlcywgaXQgcHJvcGVybHkgcm9sbHMgYmFjayByZWdpc3RlcmVkIHRyYWNlcG9pbnRzLCBkZWNyZW1lbnRzIHByb2JlIHJlZmVyZW5jZSBjb3VudHMsIGNsZWFucyB1cCBhbGxvY2F0ZWQgYmxrX3RyYWNlIHN0cnVjdHVyZXMgdmlhIGJsa190cmFjZV9mcmVlLCBhbmQgcmV0dXJucyBlcnJvciBjb2RlcyBiZWZvcmUgYW55IGRhdGEgaXMgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZS4gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBhcmUgcmVhZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggdW5pbml0aWFsaXplZCBhbGxvY2F0aW9ucyBvciBjb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIGRhdGEgYXJlIGludHJvZHVjZWQuIFBvdGVudGlhbCByaXNrcyBvbiB0aGVzZSBwYXRocyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBsb2NrL2NsZWFudXAgZXJyb3JzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzOyB0aHVzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGVycm9yIGNoZWNraW5nIGFuZCB1bndpbmRpbmcgdG8gYmxrdHJhY2UgdHJhY2Vwb2ludCByZWdpc3RyYXRpb24gKGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cywgZ2V0X3Byb2JlX3JlZiwgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplLCBibGtfdHJhY2Vfc2V0dXBfcXVldWUpLiBJbiBmYWlsdXJlIGNhc2VzLCBpdCBwcm9wZXJseSByb2xscyBiYWNrIHJlZ2lzdGVyZWQgdHJhY2Vwb2ludHMsIGRlY3JlbWVudHMgcHJvYmUgcmVmZXJlbmNlIGNvdW50cywgY2xlYW5zIHVwIGFsbG9jYXRlZCBibGtfdHJhY2Ugc3RydWN0dXJlcyB2aWEgYmxrX3RyYWNlX2ZyZWUsIGFuZCByZXR1cm5zIGVycm9yIGNvZGVzIGJlZm9yZSBhbnkgZGF0YSBpcyBjb3BpZWQgYmFjayB0byB1c2VyIHNwYWNlLiBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGFyZSByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCB1bmluaXRpYWxpemVkIGFsbG9jYXRpb25zIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmUgaW50cm9kdWNlZC4gUG90ZW50aWFsIHJpc2tzIG9uIHRoZXNlIHBhdGhzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGxvY2svY2xlYW51cCBlcnJvcnMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXM7IHRodXMsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6Mjk6MDkuMTEwODMwODg5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk0MTAwMDg1ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9JT19UUkFDRVwiLFxuICAgIFwiQkxPQ0tcIixcbiAgICBcIlNZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrX3RyYWNlX2lvY3RsXCIsXG4gICAgXCJibGtfdHJhY2Vfc2V0dXBcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tpbmcgYW5kIHVud2luZGluZyB0byBibGt0cmFjZSB0cmFjZXBvaW50IHJlZ2lzdHJhdGlvbiAoYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzLCBnZXRfcHJvYmVfcmVmLCBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUsIGJsa190cmFjZV9zZXR1cF9xdWV1ZSkuIEluIGZhaWx1cmUgY2FzZXMsIGl0IHByb3Blcmx5IHJvbGxzIGJhY2sgcmVnaXN0ZXJlZCB0cmFjZXBvaW50cywgZGVjcmVtZW50cyBwcm9iZSByZWZlcmVuY2UgY291bnRzLCBjbGVhbnMgdXAgYWxsb2NhdGVkIGJsa190cmFjZSBzdHJ1Y3R1cmVzIHZpYSBibGtfdHJhY2VfZnJlZSwgYW5kIHJldHVybnMgZXJyb3IgY29kZXMgYmVmb3JlIGFueSBkYXRhIGlzIGNvcGllZCBiYWNrIHRvIHVzZXIgc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYXJlIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgYWxsb2NhdGlvbnMgb3IgY29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLiBQb3RlbnRpYWwgcmlza3Mgb24gdGhlc2UgcGF0aHMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgbG9jay9jbGVhbnVwIGVycm9ycykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllczsgdGh1cywgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJsa3RyYWNlIHRyYWNlcG9pbnQgcmVnaXN0cmF0aW9uIGFuZCBzZXR1cCBlcnJvciB1bndpbmRpbmcgcGF0aHMgaW4ga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMuIEl0IG1ha2VzIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyByZXR1cm4gZXJyb3IgY29kZXMgYW5kIHJvbGxiYWNrIHJlZ2lzdGVyZWQgdHJhY2Vwb2ludHMgdXBvbiBmYWlsdXJlLCBhbmQgcHJvcGVybHkgaGFuZGxlcyB0cmFjZXBvaW50IHNldHVwIGVycm9ycyBhY3Jvc3MgYmxrX3RyYWNlX3NldHVwKCksIGJsa190cmFjZV9zZXR1cDIoKSwgY29tcGF0X2Jsa190cmFjZV9zZXR1cCgpLCBhbmQgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKCksIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGJsb2NrIGRldmljZSBpb2N0bHMgYW5kIHN5c2ZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjoyOTowOS4xMTA4MzcyMzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODUyNDQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM1OGNmZTY0NTZjODQ2M2I3MTcwNDliOTk2MDE5NjBjOTAzOTY4YThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMzEgMjI6Mjk6MDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuY1xcbmluZGV4IDhjZDI1MjBiNGM5OWUuLmMyMzI0Mjk4YzZjMTUgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNcXG4rKysgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuY1xcbkBAIC02MCw3ICs2MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgdHJhY2VyX2ZsYWdzIGJsa190cmFjZXJfZmxhZ3MgPSB7XFxuIHN0YXRpYyBERUZJTkVfTVVURVgoYmxrX3Byb2JlX211dGV4KTtcXG4gc3RhdGljIGludCBibGtfcHJvYmVzX3JlZjtcXG4gXFxuLXN0YXRpYyB2b2lkIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKTtcXG4rc3RhdGljIGludCBibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZCk7XFxuIHN0YXRpYyB2b2lkIGJsa191bnJlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpO1xcbiBcXG4gc3RhdGljIHZvaWQgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50KHN0cnVjdCBibGtfaW9fdHJhY2UgKnQsIHBpZF90IHBpZCwgaW50IGNwdSxcXG5AQCAtNDg1LDEyICs0ODUsMTggQEAgc3RhdGljIHZvaWQgYmxrX3RyYWNlX2ZyZWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBibGtfdHJhY2UgKmJ0KVxcbiBcXHRrZnJlZShidCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGdldF9wcm9iZV9yZWYodm9pZClcXG4rc3RhdGljIGludCBnZXRfcHJvYmVfcmVmKHZvaWQpXFxuIHtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZibGtfcHJvYmVfbXV0ZXgpO1xcbi1cXHRpZiAoKytibGtfcHJvYmVzX3JlZiA9PSAxKVxcbi1cXHRcXHRibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHMoKTtcXG4rXFx0aWYgKCsrYmxrX3Byb2Jlc19yZWYgPT0gMSkge1xcbitcXHRcXHRyZXQgPSBibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHMoKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0YmxrX3Byb2Jlc19yZWYtLTtcXG4rXFx0fVxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmJsa19wcm9iZV9tdXRleCk7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHB1dF9wcm9iZV9yZWYodm9pZClcXG5AQCAtNzI3LDEyICs3MzMsMTQgQEAgc3RhdGljIHN0cnVjdCBibGtfdHJhY2UgKmJsa190cmFjZV9zZXR1cF9wcmVwYXJlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbiBcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXFxuLVxcdFxcdFxcdFxcdCAgICAgY2hhciAqbmFtZSwgaW50IHZlcnNpb24sXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJsa190cmFjZSAqYnQsXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJsa191c2VyX3RyYWNlX3NldHVwMiAqYnV0cylcXG4rc3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXFxuK1xcdFxcdFxcdFxcdCAgICBjaGFyICpuYW1lLCBpbnQgdmVyc2lvbixcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBibGtfdHJhY2UgKmJ0LFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IGJsa191c2VyX3RyYWNlX3NldHVwMiAqYnV0cylcXG4gXFxuIHtcXG4rXFx0aW50IHJldDtcXG4rXFxuIFxcdHN0cnNjcHlfcGFkKGJ1dHMtXFx1MDAzZW5hbWUsIG5hbWUsIEJMS1RSQUNFX0JERVZfU0laRTIpO1xcbiBcXG4gXFx0LypcXG5AQCAtNzU1LDggKzc2MywxMiBAQCBzdGF0aWMgdm9pZCBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXFxuIFxcdGJ0LVxcdTAwM2VwaWQgPSBidXRzLVxcdTAwM2VwaWQ7XFxuIFxcdGJ0LVxcdTAwM2V0cmFjZV9zdGF0ZSA9IEJsa3RyYWNlX3NldHVwO1xcbiBcXG4rXFx0cmV0ID0gZ2V0X3Byb2JlX3JlZigpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4gXFx0cmN1X2Fzc2lnbl9wb2ludGVyKHEtXFx1MDAzZWJsa190cmFjZSwgYnQpO1xcbi1cXHRnZXRfcHJvYmVfcmVmKCk7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBpbnQgYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXFxuQEAgLTc5Miw3ICs4MDQsMTIgQEAgaW50IGJsa190cmFjZV9zZXR1cChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSwgZGV2X3QgZGV2LFxcbiBcXHRcXHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihidCk7XFxuIFxcdH1cXG4tXFx0YmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDEsIGJ0LCBcXHUwMDI2YnV0czIpO1xcbitcXHRyZXQgPSBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMSwgYnQsIFxcdTAwMjZidXRzMik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0YmxrX3RyYWNlX2ZyZWUocSwgYnQpO1xcbitcXHRcXHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuIFxcdHN0cnNjcHkoYnV0cy5uYW1lLCBidXRzMi5uYW1lLCBCTEtUUkFDRV9CREVWX1NJWkUpO1xcbiBcXHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xcbiBcXG5AQCAtODEwLDYgKzgyNyw3IEBAIHN0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwMihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSwgZGV2X3QgZGV2LFxcbiBcXHRzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAyIGJ1dHMyO1xcbiBcXHRzdHJ1Y3QgYmxrX3RyYWNlICpidDtcXG4gXFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZidXRzMiwgYXJnLCBzaXplb2YoYnV0czIpKSlcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuQEAgLTgyNyw3ICs4NDUsMTIgQEAgc3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXAyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXFxuIFxcdFxcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKGJ0KTtcXG4gXFx0fVxcbi1cXHRibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMiwgYnQsIFxcdTAwMjZidXRzMik7XFxuK1xcdHJldCA9IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAyLCBidCwgXFx1MDAyNmJ1dHMyKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRibGtfdHJhY2VfZnJlZShxLCBidCk7XFxuK1xcdFxcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4gXFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcXG4gXFxuIFxcdGlmIChjb3B5X3RvX3VzZXIoYXJnLCBcXHUwMDI2YnV0czIsIHNpemVvZihidXRzMikpKSB7XFxuQEAgLTg0Niw2ICs4NjksNyBAQCBzdGF0aWMgaW50IGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsXFxuIFxcdHN0cnVjdCBjb21wYXRfYmxrX3VzZXJfdHJhY2Vfc2V0dXAgY2J1dHM7XFxuIFxcdHN0cnVjdCBibGtfdHJhY2UgKmJ0O1xcbiBcXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmNidXRzLCBhcmcsIHNpemVvZihjYnV0cykpKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG5AQCAtODY5LDcgKzg5MywxMiBAQCBzdGF0aWMgaW50IGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsXFxuIFxcdFxcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKGJ0KTtcXG4gXFx0fVxcbi1cXHRibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMSwgYnQsIFxcdTAwMjZidXRzMik7XFxuK1xcdHJldCA9IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAxLCBidCwgXFx1MDAyNmJ1dHMyKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRibGtfdHJhY2VfZnJlZShxLCBidCk7XFxuK1xcdFxcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4gXFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcXG4gXFxuIFxcdGlmIChjb3B5X3RvX3VzZXIoYXJnLCBcXHUwMDI2YnV0czIubmFtZSwgQVJSQVlfU0laRShidXRzMi5uYW1lKSkpIHtcXG5AQCAtMTMyNCw0OSArMTM1MywxMDggQEAgdm9pZCBibGtfYWRkX2RyaXZlcl9kYXRhKHN0cnVjdCByZXF1ZXN0ICpycSwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChibGtfYWRkX2RyaXZlcl9kYXRhKTtcXG4gXFxuLXN0YXRpYyB2b2lkIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKVxcbitzdGF0aWMgaW50IGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9pbnNlcnQoYmxrX2FkZF90cmFjZV9ycV9pbnNlcnQsIE5VTEwpO1xcbi1cXHRXQVJOX09OKHJldCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9pc3N1ZShibGtfYWRkX3RyYWNlX3JxX2lzc3VlLCBOVUxMKTtcXG4tXFx0V0FSTl9PTihyZXQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9ycV9pbnNlcnQ7XFxuIFxcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX21lcmdlKGJsa19hZGRfdHJhY2VfcnFfbWVyZ2UsIE5VTEwpO1xcbi1cXHRXQVJOX09OKHJldCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3JxX2lzc3VlO1xcbiBcXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9yZXF1ZXVlKGJsa19hZGRfdHJhY2VfcnFfcmVxdWV1ZSwgTlVMTCk7XFxuLVxcdFdBUk5fT04ocmV0KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcnFfbWVyZ2U7XFxuIFxcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2NvbXBsZXRlKGJsa19hZGRfdHJhY2VfcnFfY29tcGxldGUsIE5VTEwpO1xcbi1cXHRXQVJOX09OKHJldCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3JxX3JlcXVldWU7XFxuIFxcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19jb21wbGV0ZShibGtfYWRkX3RyYWNlX2Jpb19jb21wbGV0ZSwgTlVMTCk7XFxuLVxcdFdBUk5fT04ocmV0KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcnFfY29tcGxldGU7XFxuIFxcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19iYWNrbWVyZ2UoYmxrX2FkZF90cmFjZV9iaW9fYmFja21lcmdlLCBOVUxMKTtcXG4tXFx0V0FSTl9PTihyZXQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9iaW9fY29tcGxldGU7XFxuIFxcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19mcm9udG1lcmdlKGJsa19hZGRfdHJhY2VfYmlvX2Zyb250bWVyZ2UsIE5VTEwpO1xcbi1cXHRXQVJOX09OKHJldCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X2Jpb19iYWNrbWVyZ2U7XFxuIFxcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19xdWV1ZShibGtfYWRkX3RyYWNlX2Jpb19xdWV1ZSwgTlVMTCk7XFxuLVxcdFdBUk5fT04ocmV0KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfYmlvX2Zyb250bWVyZ2U7XFxuIFxcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2dldHJxKGJsa19hZGRfdHJhY2VfZ2V0cnEsIE5VTEwpO1xcbi1cXHRXQVJOX09OKHJldCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X2Jpb19xdWV1ZTtcXG4gXFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxrX3pvbmVfYXBwZW5kX3VwZGF0ZV9yZXF1ZXN0X2JpbyhcXG4gXFx0XFx0YmxrX2FkZF90cmFjZV96b25lX3VwZGF0ZV9yZXF1ZXN0LCBOVUxMKTtcXG4tXFx0V0FSTl9PTihyZXQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9nZXRycTtcXG4gXFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfZGlza196b25lX3dwbHVnX2FkZF9iaW8oYmxrX2FkZF90cmFjZV96b25lX3BsdWcsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgTlVMTCk7XFxuLVxcdFdBUk5fT04ocmV0KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfem9uZV91cGRhdGVfcmVxdWVzdDtcXG4gXFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxrX3pvbmVfd3BsdWdfYmlvKGJsa19hZGRfdHJhY2Vfem9uZV91bnBsdWcsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdE5VTEwpO1xcbi1cXHRXQVJOX09OKHJldCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3pvbmVfcGx1ZztcXG4gXFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcGx1ZyhibGtfYWRkX3RyYWNlX3BsdWcsIE5VTEwpO1xcbi1cXHRXQVJOX09OKHJldCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3pvbmVfdW5wbHVnO1xcbiBcXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWcoYmxrX2FkZF90cmFjZV91bnBsdWcsIE5VTEwpO1xcbi1cXHRXQVJOX09OKHJldCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3BsdWc7XFxuIFxcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3NwbGl0KGJsa19hZGRfdHJhY2Vfc3BsaXQsIE5VTEwpO1xcbi1cXHRXQVJOX09OKHJldCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3VucGx1ZztcXG4gXFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX3JlbWFwKGJsa19hZGRfdHJhY2VfYmlvX3JlbWFwLCBOVUxMKTtcXG4tXFx0V0FSTl9PTihyZXQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9zcGxpdDtcXG4gXFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfcmVtYXAoYmxrX2FkZF90cmFjZV9ycV9yZW1hcCwgTlVMTCk7XFxuLVxcdFdBUk5fT04ocmV0KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfYmlvX3JlbWFwO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitvdXRfYmlvX3JlbWFwOlxcbitcXHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19yZW1hcChibGtfYWRkX3RyYWNlX2Jpb19yZW1hcCwgTlVMTCk7XFxuK291dF9zcGxpdDpcXG4rXFx0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19zcGxpdChibGtfYWRkX3RyYWNlX3NwbGl0LCBOVUxMKTtcXG4rb3V0X3VucGx1ZzpcXG4rXFx0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWcoYmxrX2FkZF90cmFjZV91bnBsdWcsIE5VTEwpO1xcbitvdXRfcGx1ZzpcXG4rXFx0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19wbHVnKGJsa19hZGRfdHJhY2VfcGx1ZywgTlVMTCk7XFxuK291dF96b25lX3VucGx1ZzpcXG4rXFx0dW5yZWdpc3Rlcl90cmFjZV9ibGtfem9uZV93cGx1Z19iaW8oYmxrX2FkZF90cmFjZV96b25lX3VucGx1ZywgTlVMTCk7XFxuK291dF96b25lX3BsdWc6XFxuK1xcdHVucmVnaXN0ZXJfdHJhY2VfZGlza196b25lX3dwbHVnX2FkZF9iaW8oYmxrX2FkZF90cmFjZV96b25lX3BsdWcsIE5VTEwpO1xcbitvdXRfem9uZV91cGRhdGVfcmVxdWVzdDpcXG4rXFx0dW5yZWdpc3Rlcl90cmFjZV9ibGtfem9uZV9hcHBlbmRfdXBkYXRlX3JlcXVlc3RfYmlvKFxcbitcXHRcXHRibGtfYWRkX3RyYWNlX3pvbmVfdXBkYXRlX3JlcXVlc3QsIE5VTEwpO1xcbitvdXRfZ2V0cnE6XFxuK1xcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfZ2V0cnEoYmxrX2FkZF90cmFjZV9nZXRycSwgTlVMTCk7XFxuK291dF9iaW9fcXVldWU6XFxuK1xcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX3F1ZXVlKGJsa19hZGRfdHJhY2VfYmlvX3F1ZXVlLCBOVUxMKTtcXG4rb3V0X2Jpb19mcm9udG1lcmdlOlxcbitcXHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19mcm9udG1lcmdlKGJsa19hZGRfdHJhY2VfYmlvX2Zyb250bWVyZ2UsIE5VTEwpO1xcbitvdXRfYmlvX2JhY2ttZXJnZTpcXG4rXFx0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fYmFja21lcmdlKGJsa19hZGRfdHJhY2VfYmlvX2JhY2ttZXJnZSwgTlVMTCk7XFxuK291dF9iaW9fY29tcGxldGU6XFxuK1xcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2NvbXBsZXRlKGJsa19hZGRfdHJhY2VfYmlvX2NvbXBsZXRlLCBOVUxMKTtcXG4rb3V0X3JxX2NvbXBsZXRlOlxcbitcXHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2NvbXBsZXRlKGJsa19hZGRfdHJhY2VfcnFfY29tcGxldGUsIE5VTEwpO1xcbitvdXRfcnFfcmVxdWV1ZTpcXG4rXFx0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9yZXF1ZXVlKGJsa19hZGRfdHJhY2VfcnFfcmVxdWV1ZSwgTlVMTCk7XFxuK291dF9ycV9tZXJnZTpcXG4rXFx0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9tZXJnZShibGtfYWRkX3RyYWNlX3JxX21lcmdlLCBOVUxMKTtcXG4rb3V0X3JxX2lzc3VlOlxcbitcXHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2lzc3VlKGJsa19hZGRfdHJhY2VfcnFfaXNzdWUsIE5VTEwpO1xcbitvdXRfcnFfaW5zZXJ0OlxcbitcXHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2luc2VydChibGtfYWRkX3RyYWNlX3JxX2luc2VydCwgTlVMTCk7XFxuK1xcdHRyYWNlcG9pbnRfc3luY2hyb25pemVfdW5yZWdpc3RlcigpO1xcbitvdXQ6XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGJsa191bnJlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpXFxuQEAgLTE5MTYsOCArMjAwNCwxMSBAQCBzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG4gXFxuIFxcdGJsa190cmFjZV9zZXR1cF9sYmEoYnQsIGJkZXYpO1xcbiBcXG4rXFx0cmV0ID0gZ2V0X3Byb2JlX3JlZigpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGZyZWVfYnQ7XFxuK1xcbiBcXHRyY3VfYXNzaWduX3BvaW50ZXIocS1cXHUwMDNlYmxrX3RyYWNlLCBidCk7XFxuLVxcdGdldF9wcm9iZV9yZWYoKTtcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiBmcmVlX2J0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjoyOTowOS41Njk5OTQ3MTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM4Mzc5Nzk4Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfSU9fVFJBQ0VcIixcbiAgICBcIkJMT0NLXCIsXG4gICAgXCJTWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa190cmFjZV9pb2N0bFwiLFxuICAgIFwiYmxrX3RyYWNlX3NldHVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYmxrdHJhY2UgdHJhY2Vwb2ludCByZWdpc3RyYXRpb24gYW5kIHNldHVwIGVycm9yIHVud2luZGluZyBwYXRocyBpbiBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy4gSXQgbWFrZXMgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzIHJldHVybiBlcnJvciBjb2RlcyBhbmQgcm9sbGJhY2sgcmVnaXN0ZXJlZCB0cmFjZXBvaW50cyB1cG9uIGZhaWx1cmUsIGFuZCBwcm9wZXJseSBoYW5kbGVzIHRyYWNlcG9pbnQgc2V0dXAgZXJyb3JzIGFjcm9zcyBibGtfdHJhY2Vfc2V0dXAoKSwgYmxrX3RyYWNlX3NldHVwMigpLCBjb21wYXRfYmxrX3RyYWNlX3NldHVwKCksIGFuZCBibGtfdHJhY2Vfc2V0dXBfcXVldWUoKSwgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYmxvY2sgZGV2aWNlIGlvY3RscyBhbmQgc3lzZnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM1OGNmZTY0NTZjODQ2M2I3MTcwNDliOTk2MDE5NjBjOTAzOTY4YThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMjoyOTowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jIGIva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNcbmluZGV4IDhjZDI1MjBiNGM5OWUuLmMyMzI0Mjk4YzZjMTUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuY1xuKysrIGIva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNcbkBAIC02MCw3ICs2MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgdHJhY2VyX2ZsYWdzIGJsa190cmFjZXJfZmxhZ3MgPSB7XG4gc3RhdGljIERFRklORV9NVVRFWChibGtfcHJvYmVfbXV0ZXgpO1xuIHN0YXRpYyBpbnQgYmxrX3Byb2Jlc19yZWY7XG4gXG4tc3RhdGljIHZvaWQgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpO1xuK3N0YXRpYyBpbnQgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpO1xuIHN0YXRpYyB2b2lkIGJsa191bnJlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpO1xuIFxuIHN0YXRpYyB2b2lkIHJlY29yZF9ibGt0cmFjZV9ldmVudChzdHJ1Y3QgYmxrX2lvX3RyYWNlICp0LCBwaWRfdCBwaWQsIGludCBjcHUsXG5AQCAtNDg1LDEyICs0ODUsMTggQEAgc3RhdGljIHZvaWQgYmxrX3RyYWNlX2ZyZWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBibGtfdHJhY2UgKmJ0KVxuIFx0a2ZyZWUoYnQpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBnZXRfcHJvYmVfcmVmKHZvaWQpXG4rc3RhdGljIGludCBnZXRfcHJvYmVfcmVmKHZvaWQpXG4ge1xuK1x0aW50IHJldCA9IDA7XG4rXG4gXHRtdXRleF9sb2NrKFx1MDAyNmJsa19wcm9iZV9tdXRleCk7XG4tXHRpZiAoKytibGtfcHJvYmVzX3JlZiA9PSAxKVxuLVx0XHRibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHMoKTtcbitcdGlmICgrK2Jsa19wcm9iZXNfcmVmID09IDEpIHtcbitcdFx0cmV0ID0gYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0YmxrX3Byb2Jlc19yZWYtLTtcbitcdH1cbiBcdG11dGV4X3VubG9jayhcdTAwMjZibGtfcHJvYmVfbXV0ZXgpO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcHV0X3Byb2JlX3JlZih2b2lkKVxuQEAgLTcyNywxMiArNzMzLDE0IEBAIHN0YXRpYyBzdHJ1Y3QgYmxrX3RyYWNlICpibGtfdHJhY2Vfc2V0dXBfcHJlcGFyZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbiBcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbi1cdFx0XHRcdCAgICAgY2hhciAqbmFtZSwgaW50IHZlcnNpb24sXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBibGtfdHJhY2UgKmJ0LFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAyICpidXRzKVxuK3N0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuK1x0XHRcdFx0ICAgIGNoYXIgKm5hbWUsIGludCB2ZXJzaW9uLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBibGtfdHJhY2UgKmJ0LFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cDIgKmJ1dHMpXG4gXG4ge1xuK1x0aW50IHJldDtcbitcbiBcdHN0cnNjcHlfcGFkKGJ1dHMtXHUwMDNlbmFtZSwgbmFtZSwgQkxLVFJBQ0VfQkRFVl9TSVpFMik7XG4gXG4gXHQvKlxuQEAgLTc1NSw4ICs3NjMsMTIgQEAgc3RhdGljIHZvaWQgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuIFx0YnQtXHUwMDNlcGlkID0gYnV0cy1cdTAwM2VwaWQ7XG4gXHRidC1cdTAwM2V0cmFjZV9zdGF0ZSA9IEJsa3RyYWNlX3NldHVwO1xuIFxuK1x0cmV0ID0gZ2V0X3Byb2JlX3JlZigpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihxLVx1MDAzZWJsa190cmFjZSwgYnQpO1xuLVx0Z2V0X3Byb2JlX3JlZigpO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIGludCBibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldixcbkBAIC03OTIsNyArODA0LDEyIEBAIGludCBibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldixcbiBcdFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcbiBcdFx0cmV0dXJuIFBUUl9FUlIoYnQpO1xuIFx0fVxuLVx0YmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDEsIGJ0LCBcdTAwMjZidXRzMik7XG4rXHRyZXQgPSBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMSwgYnQsIFx1MDAyNmJ1dHMyKTtcbitcdGlmIChyZXQpIHtcbitcdFx0YmxrX3RyYWNlX2ZyZWUocSwgYnQpO1xuK1x0XHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuIFx0c3Ryc2NweShidXRzLm5hbWUsIGJ1dHMyLm5hbWUsIEJMS1RSQUNFX0JERVZfU0laRSk7XG4gXHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuIFxuQEAgLTgxMCw2ICs4MjcsNyBAQCBzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cDIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldixcbiBcdHN0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cDIgYnV0czI7XG4gXHRzdHJ1Y3QgYmxrX3RyYWNlICpidDtcbiBcdHVuc2lnbmVkIGludCBtZW1mbGFncztcbitcdGludCByZXQ7XG4gXG4gXHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2YnV0czIsIGFyZywgc2l6ZW9mKGJ1dHMyKSkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuQEAgLTgyNyw3ICs4NDUsMTIgQEAgc3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXAyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXG4gXHRcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XG4gXHRcdHJldHVybiBQVFJfRVJSKGJ0KTtcbiBcdH1cbi1cdGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAyLCBidCwgXHUwMDI2YnV0czIpO1xuK1x0cmV0ID0gYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDIsIGJ0LCBcdTAwMjZidXRzMik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcbitcdFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XG4gXG4gXHRpZiAoY29weV90b191c2VyKGFyZywgXHUwMDI2YnV0czIsIHNpemVvZihidXRzMikpKSB7XG5AQCAtODQ2LDYgKzg2OSw3IEBAIHN0YXRpYyBpbnQgY29tcGF0X2Jsa190cmFjZV9zZXR1cChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSxcbiBcdHN0cnVjdCBjb21wYXRfYmxrX3VzZXJfdHJhY2Vfc2V0dXAgY2J1dHM7XG4gXHRzdHJ1Y3QgYmxrX3RyYWNlICpidDtcbiBcdHVuc2lnbmVkIGludCBtZW1mbGFncztcbitcdGludCByZXQ7XG4gXG4gXHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2Y2J1dHMsIGFyZywgc2l6ZW9mKGNidXRzKSkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuQEAgLTg2OSw3ICs4OTMsMTIgQEAgc3RhdGljIGludCBjb21wYXRfYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLFxuIFx0XHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuIFx0XHRyZXR1cm4gUFRSX0VSUihidCk7XG4gXHR9XG4tXHRibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMSwgYnQsIFx1MDAyNmJ1dHMyKTtcbitcdHJldCA9IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAxLCBidCwgXHUwMDI2YnV0czIpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRibGtfdHJhY2VfZnJlZShxLCBidCk7XG4rXHRcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4gXHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuIFxuIFx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFx1MDAyNmJ1dHMyLm5hbWUsIEFSUkFZX1NJWkUoYnV0czIubmFtZSkpKSB7XG5AQCAtMTMyNCw0OSArMTM1MywxMDggQEAgdm9pZCBibGtfYWRkX2RyaXZlcl9kYXRhKHN0cnVjdCByZXF1ZXN0ICpycSwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoYmxrX2FkZF9kcml2ZXJfZGF0YSk7XG4gXG4tc3RhdGljIHZvaWQgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpXG4rc3RhdGljIGludCBibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZClcbiB7XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfaW5zZXJ0KGJsa19hZGRfdHJhY2VfcnFfaW5zZXJ0LCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0O1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfaXNzdWUoYmxrX2FkZF90cmFjZV9ycV9pc3N1ZSwgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9ycV9pbnNlcnQ7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9tZXJnZShibGtfYWRkX3RyYWNlX3JxX21lcmdlLCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3JxX2lzc3VlO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfcmVxdWV1ZShibGtfYWRkX3RyYWNlX3JxX3JlcXVldWUsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcnFfbWVyZ2U7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9jb21wbGV0ZShibGtfYWRkX3RyYWNlX3JxX2NvbXBsZXRlLCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3JxX3JlcXVldWU7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fY29tcGxldGUoYmxrX2FkZF90cmFjZV9iaW9fY29tcGxldGUsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcnFfY29tcGxldGU7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fYmFja21lcmdlKGJsa19hZGRfdHJhY2VfYmlvX2JhY2ttZXJnZSwgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9iaW9fY29tcGxldGU7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fZnJvbnRtZXJnZShibGtfYWRkX3RyYWNlX2Jpb19mcm9udG1lcmdlLCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X2Jpb19iYWNrbWVyZ2U7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fcXVldWUoYmxrX2FkZF90cmFjZV9iaW9fcXVldWUsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfYmlvX2Zyb250bWVyZ2U7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19nZXRycShibGtfYWRkX3RyYWNlX2dldHJxLCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X2Jpb19xdWV1ZTtcbiBcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsa196b25lX2FwcGVuZF91cGRhdGVfcmVxdWVzdF9iaW8oXG4gXHRcdGJsa19hZGRfdHJhY2Vfem9uZV91cGRhdGVfcmVxdWVzdCwgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9nZXRycTtcbiBcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Rpc2tfem9uZV93cGx1Z19hZGRfYmlvKGJsa19hZGRfdHJhY2Vfem9uZV9wbHVnLFxuIFx0XHRcdFx0XHRcdCAgICAgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF96b25lX3VwZGF0ZV9yZXF1ZXN0O1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxrX3pvbmVfd3BsdWdfYmlvKGJsa19hZGRfdHJhY2Vfem9uZV91bnBsdWcsXG4gXHRcdFx0XHRcdFx0TlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF96b25lX3BsdWc7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19wbHVnKGJsa19hZGRfdHJhY2VfcGx1ZywgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF96b25lX3VucGx1ZztcbiBcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3VucGx1ZyhibGtfYWRkX3RyYWNlX3VucGx1ZywgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9wbHVnO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfc3BsaXQoYmxrX2FkZF90cmFjZV9zcGxpdCwgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF91bnBsdWc7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fcmVtYXAoYmxrX2FkZF90cmFjZV9iaW9fcmVtYXAsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfc3BsaXQ7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9yZW1hcChibGtfYWRkX3RyYWNlX3JxX3JlbWFwLCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X2Jpb19yZW1hcDtcbitcbitcdHJldHVybiAwO1xuK1xuK291dF9iaW9fcmVtYXA6XG4rXHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19yZW1hcChibGtfYWRkX3RyYWNlX2Jpb19yZW1hcCwgTlVMTCk7XG4rb3V0X3NwbGl0OlxuK1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19zcGxpdChibGtfYWRkX3RyYWNlX3NwbGl0LCBOVUxMKTtcbitvdXRfdW5wbHVnOlxuK1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWcoYmxrX2FkZF90cmFjZV91bnBsdWcsIE5VTEwpO1xuK291dF9wbHVnOlxuK1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19wbHVnKGJsa19hZGRfdHJhY2VfcGx1ZywgTlVMTCk7XG4rb3V0X3pvbmVfdW5wbHVnOlxuK1x0dW5yZWdpc3Rlcl90cmFjZV9ibGtfem9uZV93cGx1Z19iaW8oYmxrX2FkZF90cmFjZV96b25lX3VucGx1ZywgTlVMTCk7XG4rb3V0X3pvbmVfcGx1ZzpcbitcdHVucmVnaXN0ZXJfdHJhY2VfZGlza196b25lX3dwbHVnX2FkZF9iaW8oYmxrX2FkZF90cmFjZV96b25lX3BsdWcsIE5VTEwpO1xuK291dF96b25lX3VwZGF0ZV9yZXF1ZXN0OlxuK1x0dW5yZWdpc3Rlcl90cmFjZV9ibGtfem9uZV9hcHBlbmRfdXBkYXRlX3JlcXVlc3RfYmlvKFxuK1x0XHRibGtfYWRkX3RyYWNlX3pvbmVfdXBkYXRlX3JlcXVlc3QsIE5VTEwpO1xuK291dF9nZXRycTpcbitcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfZ2V0cnEoYmxrX2FkZF90cmFjZV9nZXRycSwgTlVMTCk7XG4rb3V0X2Jpb19xdWV1ZTpcbitcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX3F1ZXVlKGJsa19hZGRfdHJhY2VfYmlvX3F1ZXVlLCBOVUxMKTtcbitvdXRfYmlvX2Zyb250bWVyZ2U6XG4rXHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19mcm9udG1lcmdlKGJsa19hZGRfdHJhY2VfYmlvX2Zyb250bWVyZ2UsIE5VTEwpO1xuK291dF9iaW9fYmFja21lcmdlOlxuK1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fYmFja21lcmdlKGJsa19hZGRfdHJhY2VfYmlvX2JhY2ttZXJnZSwgTlVMTCk7XG4rb3V0X2Jpb19jb21wbGV0ZTpcbitcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2NvbXBsZXRlKGJsa19hZGRfdHJhY2VfYmlvX2NvbXBsZXRlLCBOVUxMKTtcbitvdXRfcnFfY29tcGxldGU6XG4rXHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2NvbXBsZXRlKGJsa19hZGRfdHJhY2VfcnFfY29tcGxldGUsIE5VTEwpO1xuK291dF9ycV9yZXF1ZXVlOlxuK1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9yZXF1ZXVlKGJsa19hZGRfdHJhY2VfcnFfcmVxdWV1ZSwgTlVMTCk7XG4rb3V0X3JxX21lcmdlOlxuK1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9tZXJnZShibGtfYWRkX3RyYWNlX3JxX21lcmdlLCBOVUxMKTtcbitvdXRfcnFfaXNzdWU6XG4rXHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2lzc3VlKGJsa19hZGRfdHJhY2VfcnFfaXNzdWUsIE5VTEwpO1xuK291dF9ycV9pbnNlcnQ6XG4rXHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2luc2VydChibGtfYWRkX3RyYWNlX3JxX2luc2VydCwgTlVMTCk7XG4rXHR0cmFjZXBvaW50X3N5bmNocm9uaXplX3VucmVnaXN0ZXIoKTtcbitvdXQ6XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBibGtfdW5yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKVxuQEAgLTE5MTYsOCArMjAwNCwxMSBAQCBzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbiBcbiBcdGJsa190cmFjZV9zZXR1cF9sYmEoYnQsIGJkZXYpO1xuIFxuK1x0cmV0ID0gZ2V0X3Byb2JlX3JlZigpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBmcmVlX2J0O1xuK1xuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKHEtXHUwMDNlYmxrX3RyYWNlLCBidCk7XG4tXHRnZXRfcHJvYmVfcmVmKCk7XG4gXHRyZXR1cm4gMDtcbiBcbiBmcmVlX2J0OlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6Mjk6MDkuNTY5OTk2MzE0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDY2NzA1MTU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJsa3RyYWNlIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQgaW50cm9kdWNlcyBhbnkgbmV3IGZ1bmN0aW9uYWxpdHkgdGhhdCB3YXJyYW50cyBzb21lIGZ1enppbmcgYXR0ZW50aW9uLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgdGhpcyBpcyBwcmltYXJpbHkgZm9jdXNlZCBvbiB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIGluaXRpYWxpemF0aW9uIG9mIGJsa3RyYWNlIHdpdGhpbiB0aGUga2VybmVsJ3MgdHJhY2luZyBmcmFtZXdvcmsuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBpbiBga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNgLiBUaGUgbW9zdCBzaWduaWZpY2FudCBhZGp1c3RtZW50IHNlZW1zIHRvIGJlIHRoYXQgYGJsa19yZWdpc3Rlcl90cmFjZXBvaW50c2Agbm93IHJldHVybnMgYW4gaW50ZWdlciwgYW4gZXJyb3IgY29kZSwgcmF0aGVyIHRoYW4gdm9pZC4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIOKAkyBpdCBzdWdnZXN0cyBhIHNoaWZ0IHRvd2FyZHMgbW9yZSByb2J1c3QgZXJyb3IgY2hlY2tpbmcgZHVyaW5nIHRyYWNlcG9pbnQgcmVnaXN0cmF0aW9uLiBUaGUgcGF0Y2ggdGhlbiBzaG93cyB0aGF0IGlmIGFueSBvZiB0aGUgYHJlZ2lzdGVyX3RyYWNlXypgIGNhbGxzIGZhaWwgZHVyaW5nIHRoZSByZWdpc3RyYXRpb24sIGl0IGNvcnJlY3RseSB1bndpbmRzIGJ5IHVzaW5nIGB0cmFjZXBvaW50X3N5bmNocm9uaXplX3VucmVnaXN0ZXIoKWAgdG8gY2xlYW4gdXAgYW55IHByZXZpb3VzbHkgcmVnaXN0ZXJlZCB0cmFjZXBvaW50cy4gVGhhdCBpcyBhIGdvb2QsIGltcG9ydGFudCBjaGFuZ2UgZm9yIGF2b2lkaW5nIHJlc291cmNlIGxlYWtzIGFuZCBwb3RlbnRpYWxseSBjb3JydXB0aW5nIHRyYWNlIGRhdGEuXG5cblRoZSBzdWJzZXF1ZW50IGNoYW5nZXMgY2FzY2FkZSBmcm9tIHRoaXMuIEZ1bmN0aW9ucyBsaWtlIGBnZXRfcHJvYmVfcmVmKClgIG5vdyBjaGVjayB0aGUgcmV0dXJuIHZhbHVlIG9mIGBibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHMoKWAuIElmIHJlZ2lzdHJhdGlvbiBmYWlscywgYGJsa19wcm9iZXNfcmVmYCBpcyBkZWNyZW1lbnRlZCwgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBlcnJvciBjb2RlLiBTaW1pbGFybHksIGBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUoKWAgbm93IGNhbGxzIGBnZXRfcHJvYmVfcmVmKClgIGJlZm9yZSBzZXR0aW5nIHRoZSBSQ1UgcG9pbnRlciwgYW5kIHRoYXQncyBjcml0aWNhbCB0byBtYWtlIHN1cmUgdGhlIHNldHVwIGhhcHBlbnMgY29ycmVjdGx5LiBXZSBhcmUgYXZvaWRpbmcgdGhlIHVzZSBvZiBhbiB1bmluaXRpYWxpemVkIG9yIGJyb2tlbiBgYmxrX3RyYWNlYC4gVGhlIGNhbGxzIHRvIGBibGtfdHJhY2Vfc2V0dXBgLCBgYmxrX3RyYWNlX3NldHVwMmAsIGBjb21wYXRfYmxrX3RyYWNlX3NldHVwYCwgYW5kIGBibGtfdHJhY2Vfc2V0dXBfcXVldWVgIGhhdmUgYmVlbiBtb2RpZmllZCB0byBoYW5kbGUgdGhlIHBvdGVudGlhbCBlcnJvciByZXR1cm4gZnJvbSBgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKClgLCBhZ2FpbiBlbnN1cmluZyBhIHNhZmUgYW5kIGNsZWFuIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuXG5cblRvIGNvbmZpcm0gdGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uIGNhbGxzLCBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AgYW5kIEtjb25maWcgdG8gc2VlIGhvdyBibGt0cmFjZSBpcyBhY3R1YWxseSB1c2VkIGFuZCBob3cgaXQncyBpbnRlZ3JhdGVkIGludG8gdGhlIHN5c3RlbS4gTGV0IG1lIHJ1biBgZ3JlcHBlcmAgb3IgY2hlY2sgdGhlIEtjb25maWcgY29uZmlndXJhdGlvbiB0byBnZXQgYSBiZXR0ZXIgb3ZlcnZpZXcgb2Ygd2hhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIG1lYW50IHRvIGRvLCBhbmQgd2hvIGlzIGNhbGxpbmcgdGhlbS4gVGhpcyB3aWxsIGhlbHAgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBuZXcgY29kZSBwYXRocyB0aGF0IG1pZ2h0IG5lZWQgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM2MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjI5OjE0LjIzNzA1MDI1NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTkxNzg3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCTEtfREVWX0lPX1RSQUNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZz03MTc9Y29uZmlnIEJSQU5DSF9UUkFDRVJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTczMC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo3MzE6Y29uZmlnIEJMS19ERVZfSU9fVFJBQ0VcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy03MzItXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgdHJhY2luZyBibG9jayBJTyBhY3Rpb25zXFxcIlxcbi0tXFxua2VybmVsL3RyYWNlL01ha2VmaWxlPTkxPW9iai0kKENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HKSArPSB0cmFjZV9icmFuY2gub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo5MjpvYmotJChDT05GSUdfQkxLX0RFVl9JT19UUkFDRSkgKz0gYmxrdHJhY2Uub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS05My1vYmotJChDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSKSArPSBmZ3JhcGgub1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjgtXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6Mjk6I2lmZGVmIENPTkZJR19CTEtfREVWX0lPX1RSQUNFXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMzAtXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0yMTYyPXN0YXRpYyBzc2l6ZV90IHN5c2ZzX2Jsa190cmFjZV9hdHRyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIyMjctfVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIyMjg6I2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lPX1RSQUNFICovXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjIyOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6Mjk6MTQuMjgyOTc0NjkzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQyNTc2MTUxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBUcmFjZXBvaW50IERlcGVuZGVuY2llcyBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHNvbWUgdHJhY2luZyBmdW5jdGlvbmFsaXR5LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHVzdWFsbHkgdGhlIHBsYWNlIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgYXJlIGRlZmluZWQuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgdG8gYXJvdW5kIGxpbmUgNzMwIOKAkyB0aGF0J3Mgb2Z0ZW4gd2hlcmUgcmVsYXRlZCBvcHRpb25zIGFyZSBjbHVzdGVyZWQgdG9nZXRoZXIsIG9yIGF0IGxlYXN0IGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgYmxvY2tzIG9mIGNvZGUuIEZyb20gdGhlcmUsIEknbGwgYmUgYWJsZSB0byB0cmFjZSBkb3duIHdoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSBJJ20gaW50ZXJlc3RlZCBpbiBhbmQgdW5kZXJzdGFuZCBpdHMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEl0J3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uIGludG8gd2hhdCBjb21wb25lbnRzIGFyZSB0aWVkIHRvIHRoaXMgdHJhY2Vwb2ludCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTI1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6Mjk6MTcuNzA4NzM4ODA3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcyNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcyNTpcXHRcXHQgIGhpc3RvZ3JhbSBvZiB0aGUgY2FsbGVycywgYnV0IGFjdHVhbGx5IHBsYWNlcyB0aGUgY2FsbGluZ1xcbiA3MjY6XFx0XFx0ICBldmVudHMgaW50byBhIHJ1bm5pbmcgdHJhY2UgYnVmZmVyIHRvIHNlZSB3aGVuIGFuZCB3aGVyZSB0aGVcXG4gNzI3OlxcdFxcdCAgZXZlbnRzIGhhcHBlbmVkLCBhcyB3ZWxsIGFzIHRoZWlyIHJlc3VsdHMuXFxuIDcyODpcXHRcXG4gNzI5OlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbiA3MzA6XFx0XFxuIDczMTpcXHRjb25maWcgQkxLX0RFVl9JT19UUkFDRVxcbiA3MzI6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgdHJhY2luZyBibG9jayBJTyBhY3Rpb25zXFxcIlxcbiA3MzM6XFx0XFx0ZGVwZW5kcyBvbiBTWVNGU1xcbiA3MzQ6XFx0XFx0ZGVwZW5kcyBvbiBCTE9DS1xcbiA3MzU6XFx0XFx0c2VsZWN0IFJFTEFZXFxuIDczNjpcXHRcXHRzZWxlY3QgREVCVUdfRlNcXG4gNzM3OlxcdFxcdHNlbGVjdCBUUkFDRVBPSU5UU1xcbiA3Mzg6XFx0XFx0c2VsZWN0IEdFTkVSSUNfVFJBQ0VSXFxuIDczOTpcXHRcXHRzZWxlY3QgU1RBQ0tUUkFDRVxcbiA3NDA6XFx0XFx0aGVscFxcbiA3NDE6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gdHJhY2UgdGhlIGJsb2NrIGxheWVyIGFjdGlvbnNcXG4gNzQyOlxcdFxcdCAgb24gYSBnaXZlbiBxdWV1ZS4gVHJhY2luZyBhbGxvd3MgeW91IHRvIHNlZSBhbnkgdHJhZmZpYyBoYXBwZW5pbmdcXG4gNzQzOlxcdFxcdCAgb24gYSBibG9jayBkZXZpY2UgcXVldWUuIEZvciBtb3JlIGluZm9ybWF0aW9uIChhbmQgdGhlIHVzZXJzcGFjZVxcbiA3NDQ6XFx0XFx0ICBzdXBwb3J0IHRvb2xzIG5lZWRlZCksIGZldGNoIHRoZSBibGt0cmFjZSB0b29scyBmcm9tOlxcbiA3NDU6XFx0XFxuIDc0NjpcXHRcXHQgIGdpdDovL2dpdC5rZXJuZWwuZGsvYmxrdHJhY2UuZ2l0XFxuIDc0NzpcXHRcXG4gNzQ4OlxcdFxcdCAgVHJhY2luZyBhbHNvIGlzIHBvc3NpYmxlIHVzaW5nIHRoZSBmdHJhY2UgaW50ZXJmYWNlLCBlLmcuOlxcbiA3NDk6XFx0XFxuIDc1MDpcXHRcXHQgICAgZWNobyAxIFxcdTAwM2UgL3N5cy9ibG9jay9zZGEvc2RhMS90cmFjZS9lbmFibGVcXG4gNzUxOlxcdFxcdCAgICBlY2hvIGJsayBcXHUwMDNlIC9zeXMva2VybmVsL3RyYWNpbmcvY3VycmVudF90cmFjZXJcXG4gNzUyOlxcdFxcdCAgICBjYXQgL3N5cy9rZXJuZWwvdHJhY2luZy90cmFjZV9waXBlXFxuIDc1MzpcXHRcXG4gNzU0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6Mjk6MTcuNzA4ODQ2NTk3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzYxMDIxNTUxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZXhhbWluaW5nIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2A6XG5cbioqQW5hbHl6aW5nIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AqKlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgbW9kaWZpY2F0aW9ucyBvciBuZXcgaW50ZXJmYWNlcyBhZGRlZCBzcGVjaWZpY2FsbHkgd2l0aGluIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWVuIGNoYW5nZWQgcmVsYXRpdmUgdG8sIHBlcmhhcHMsIGEgcHJldmlvdXMgdmVyc2lvbiwgb3Igd2hhdCdzICpuZXcqIGhlcmUuIFdoYXQgZnVuY3Rpb25hbGl0aWVzIGFyZSBjb3JlIHRvIHRoaXMgZmlsZT9cblxuVGhlbiwgSSdsbCBzdHJhdGVnaWNhbGx5IG1vdmUgYXJvdW5kIHRob3NlIGtleSBlbnRyeSBwb2ludHMgd2l0aGluIHRoZSBjb2RlLiBJJ2xsIHJlYWQgYXJvdW5kIHRoZSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuIEkgd2FudCB0byBidWlsZCBhIGhpZ2gtbGV2ZWwgdW5kZXJzdGFuZGluZyBvZiB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBjb250cm9sIGZsb3cuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IHRoaW5ncyBhcmUgaW5pdGlhbGl6ZWQsIGhvdyBkYXRhIGlzIGNhcHR1cmVkLCB3aGVyZSBpdCdzIHN0b3JlZCwgYW5kIGhvdyBleHRlcm5hbCBjb21wb25lbnRzIGludGVyYWN0IHdpdGggdGhpcyB0cmFjaW5nIG1lY2hhbmlzbS4gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYW5kIGhvdyBkbyB0aGV5IGZ1bmN0aW9uPyBJJ2xsIHF1aWNrbHkgd2FudCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGdvdGNoYXMgb3IgYXJlYXMgdGhhdCBtaWdodCByZXF1aXJlIGNsb3NlciBhdHRlbnRpb24gZHVyaW5nIGFuYWx5c2lzIG9yIGRldmVsb3BtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjAzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjoyOToyMS4zMTkwNjQxMzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ0OTI0ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrX3RyYWNlX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0yMjc9c3RhdGljIHZvaWQgdHJhY2Vfbm90ZV90aW1lKHN0cnVjdCBibGtfdHJhY2UgKmJ0KVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjQyLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjI0Mzp2b2lkIF9fYmxrX3RyYWNlX25vdGVfbWVzc2FnZShzdHJ1Y3QgYmxrX3RyYWNlICpidCxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yNDQtXFx0XFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yNzctfVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjI3ODpFWFBPUlRfU1lNQk9MX0dQTChfX2Jsa190cmFjZV9ub3RlX21lc3NhZ2UpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTI3OS1cXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTMxMD1zdGF0aWMgdm9pZCBfX2Jsa19hZGRfdHJhY2Uoc3RydWN0IGJsa190cmFjZSAqYnQsIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMzk3LVxcdFxcdFxcdCAqIEZvciBzeXNmcy1lbmFibGVkIHRyYWNpbmcgcGF0aCAoZW5hYmxlZCB2aWFcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzozOTg6XFx0XFx0XFx0ICogL3N5cy9ibG9jay9ERVYvdHJhY2UvZW5hYmxlKSwgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKClcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0zOTktXFx0XFx0XFx0ICogbmV2ZXIgaW5pdGlhbGl6ZXMgYnQtXFx1MDAzZXZlcnNpb24sIGxlYXZpbmcgaXQgMCBmcm9tXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy00NjgtXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NDY5OnN0YXRpYyB2b2lkIGJsa190cmFjZV9mcmVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmxrX3RyYWNlICpidClcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy00NzAte1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9NTAyPXN0YXRpYyB2b2lkIHB1dF9wcm9iZV9yZWYodm9pZClcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTUwOS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo1MTA6c3RhdGljIGludCBibGtfdHJhY2Vfc3RhcnQoc3RydWN0IGJsa190cmFjZSAqYnQpXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNTExLXtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTUyNi1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo1Mjc6c3RhdGljIGludCBibGtfdHJhY2Vfc3RvcChzdHJ1Y3QgYmxrX3RyYWNlICpidClcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01Mjgte1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNTQwLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjU0MTpzdGF0aWMgdm9pZCBibGtfdHJhY2VfY2xlYW51cChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJsa190cmFjZSAqYnQpXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNTQyLXtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo1NDM6XFx0YmxrX3RyYWNlX3N0b3AoYnQpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTU0NC1cXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo1NDU6XFx0YmxrX3RyYWNlX2ZyZWUocSwgYnQpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTU0Ni1cXHRwdXRfcHJvYmVfcmVmKCk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01NDgtXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NTQ5OnN0YXRpYyBpbnQgX19ibGtfdHJhY2VfcmVtb3ZlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTU1MC17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01NTctXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NTU4OlxcdGJsa190cmFjZV9jbGVhbnVwKHEsIGJ0KTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01NTktXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01NjItXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NTYzOmludCBibGtfdHJhY2VfcmVtb3ZlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTU2NC17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01NjctXFx0YmxrX2RlYnVnZnNfbG9ja19ub21lbXNhdmUocSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NTY4OlxcdHJldCA9IF9fYmxrX3RyYWNlX3JlbW92ZShxKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy01NjktXFx0YmxrX2RlYnVnZnNfdW5sb2NrX25vbWVtcmVzdG9yZShxKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTU3Mi19XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NTczOkVYUE9SVF9TWU1CT0xfR1BMKGJsa190cmFjZV9yZW1vdmUpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTU3NC1cXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTU5ND1zdGF0aWMgc3NpemVfdCBibGtfbXNnX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNjA3LVxcdGJ0ID0gZmlscC1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjYwODpcXHRfX2Jsa190cmFjZV9ub3RlX21lc3NhZ2UoYnQsIE5VTEwsIFxcXCIlc1xcXCIsIG1zZyk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNjA5LVxcdGtmcmVlKG1zZyk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz02Mzg9c3RhdGljIGNvbnN0IHN0cnVjdCByY2hhbl9jYWxsYmFja3MgYmxrX3JlbGF5X2NhbGxiYWNrcyA9IHtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTY0Mi1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo2NDM6c3RhdGljIHZvaWQgYmxrX3RyYWNlX3NldHVwX2xiYShzdHJ1Y3QgYmxrX3RyYWNlICpidCxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy02NDQtXFx0XFx0XFx0XFx0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTY1Ny0gKi9cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo2NTg6c3RhdGljIHN0cnVjdCBibGtfdHJhY2UgKmJsa190cmFjZV9zZXR1cF9wcmVwYXJlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTY1OS1cXHRcXHRcXHRcXHRcXHRcXHQgY2hhciAqbmFtZSwgZGV2X3QgZGV2LFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNzI1LVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjcyNjpcXHRibGtfdHJhY2Vfc2V0dXBfbGJhKGJ0LCBiZGV2KTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy03MjctXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy03MzAtZXJyOlxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjczMTpcXHRibGtfdHJhY2VfZnJlZShxLCBidCk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNzMyLVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNzM1LVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjczNjpzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy03MzctXFx0XFx0XFx0XFx0ICAgIGNoYXIgKm5hbWUsIGludCB2ZXJzaW9uLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNzczLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjc3NDppbnQgYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNzc1LVxcdFxcdCAgICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODAwLVxcdG1lbWZsYWdzID0gYmxrX2RlYnVnZnNfbG9jayhxKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo4MDE6XFx0YnQgPSBibGtfdHJhY2Vfc2V0dXBfcHJlcGFyZShxLCBuYW1lLCBkZXYsIGJ1dHMuYnVmX3NpemUsIGJ1dHMuYnVmX25yLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTgwMi1cXHRcXHRcXHRcXHQgICAgIGJkZXYpO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODA2LVxcdH1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo4MDc6XFx0cmV0ID0gYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDEsIGJ0LCBcXHUwMDI2YnV0czIpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTgwOC1cXHRpZiAocmV0KSB7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6ODA5OlxcdFxcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04MTAtXFx0XFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTgxNi1cXHRpZiAoY29weV90b191c2VyKGFyZywgXFx1MDAyNmJ1dHMsIHNpemVvZihidXRzKSkpIHtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo4MTc6XFx0XFx0YmxrX3RyYWNlX3JlbW92ZShxKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04MTgtXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04MjEtfVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjgyMjpFWFBPUlRfU1lNQk9MX0dQTChibGtfdHJhY2Vfc2V0dXApO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTgyMy1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo4MjQ6c3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXAyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODI1LVxcdFxcdFxcdCAgICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBjaGFyIF9fdXNlciAqYXJnKVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODQxLVxcdG1lbWZsYWdzID0gYmxrX2RlYnVnZnNfbG9jayhxKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo4NDI6XFx0YnQgPSBibGtfdHJhY2Vfc2V0dXBfcHJlcGFyZShxLCBuYW1lLCBkZXYsIGJ1dHMyLmJ1Zl9zaXplLCBidXRzMi5idWZfbnIsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODQzLVxcdFxcdFxcdFxcdCAgICAgYmRldik7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04NDctXFx0fVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjg0ODpcXHRyZXQgPSBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMiwgYnQsIFxcdTAwMjZidXRzMik7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODQ5LVxcdGlmIChyZXQpIHtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo4NTA6XFx0XFx0YmxrX3RyYWNlX2ZyZWUocSwgYnQpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTg1MS1cXHRcXHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODU2LVxcdGlmIChjb3B5X3RvX3VzZXIoYXJnLCBcXHUwMDI2YnV0czIsIHNpemVvZihidXRzMikpKSB7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6ODU3OlxcdFxcdGJsa190cmFjZV9yZW1vdmUocSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODU4LVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODYzLSNpZiBkZWZpbmVkKENPTkZJR19DT01QQVQpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1g4Nl82NClcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo4NjQ6c3RhdGljIGludCBjb21wYXRfYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTg2NS1cXHRcXHRcXHRcXHQgIGRldl90IGRldiwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTg4OS1cXHRtZW1mbGFncyA9IGJsa19kZWJ1Z2ZzX2xvY2socSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6ODkwOlxcdGJ0ID0gYmxrX3RyYWNlX3NldHVwX3ByZXBhcmUocSwgbmFtZSwgZGV2LCBidXRzMi5idWZfc2l6ZSwgYnV0czIuYnVmX25yLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTg5MS1cXHRcXHRcXHRcXHQgICAgIGJkZXYpO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtODk1LVxcdH1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo4OTY6XFx0cmV0ID0gYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDEsIGJ0LCBcXHUwMDI2YnV0czIpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTg5Ny1cXHRpZiAocmV0KSB7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6ODk4OlxcdFxcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04OTktXFx0XFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTkwNC1cXHRpZiAoY29weV90b191c2VyKGFyZywgXFx1MDAyNmJ1dHMyLm5hbWUsIEFSUkFZX1NJWkUoYnV0czIubmFtZSkpKSB7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTA1OlxcdFxcdGJsa190cmFjZV9yZW1vdmUocSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTA2LVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTEyLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjkxMzpzdGF0aWMgaW50IF9fYmxrX3RyYWNlX3N0YXJ0c3RvcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IHN0YXJ0KVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTkxNC17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05MjItXFx0aWYgKHN0YXJ0KVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjkyMzpcXHRcXHRyZXR1cm4gYmxrX3RyYWNlX3N0YXJ0KGJ0KTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05MjQtXFx0ZWxzZVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjkyNTpcXHRcXHRyZXR1cm4gYmxrX3RyYWNlX3N0b3AoYnQpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTkyNi19XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTI3LVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjkyODppbnQgYmxrX3RyYWNlX3N0YXJ0c3RvcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IHN0YXJ0KVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTkyOS17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05MzItXFx0YmxrX2RlYnVnZnNfbG9ja19ub21lbXNhdmUocSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTMzOlxcdHJldCA9IF9fYmxrX3RyYWNlX3N0YXJ0c3RvcChxLCBzdGFydCk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTM0LVxcdGJsa19kZWJ1Z2ZzX3VubG9ja19ub21lbXJlc3RvcmUocSk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05MzctfVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjkzODpFWFBPUlRfU1lNQk9MX0dQTChibGtfdHJhY2Vfc3RhcnRzdG9wKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05MzktXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NDYtLyoqXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTQ3OiAqIGJsa190cmFjZV9pb2N0bCAtIGhhbmRsZSB0aGUgaW9jdGxzIGFzc29jaWF0ZWQgd2l0aCB0cmFjaW5nXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTQ4LSAqIEBiZGV2OlxcdHRoZSBibG9jayBkZXZpY2VcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk1Mi0gKiovXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTUzOmludCBibGtfdHJhY2VfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgY21kLCBjaGFyIF9fdXNlciAqYXJnKVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk1NC17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NjEtXFx0XFx0c25wcmludGYoYiwgc2l6ZW9mKGIpLCBcXFwiJXBnXFxcIiwgYmRldik7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTYyOlxcdFxcdHJldCA9IGJsa190cmFjZV9zZXR1cDIocSwgYiwgYmRldi1cXHUwMDNlYmRfZGV2LCBiZGV2LCBhcmcpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk2My1cXHRcXHRicmVhaztcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk2NS1cXHRcXHRzbnByaW50ZihiLCBzaXplb2YoYiksIFxcXCIlcGdcXFwiLCBiZGV2KTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5NjY6XFx0XFx0cmV0ID0gYmxrX3RyYWNlX3NldHVwKHEsIGIsIGJkZXYtXFx1MDAzZWJkX2RldiwgYmRldiwgYXJnKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NjctXFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NzAtXFx0XFx0c25wcmludGYoYiwgc2l6ZW9mKGIpLCBcXFwiJXBnXFxcIiwgYmRldik7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTcxOlxcdFxcdHJldCA9IGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAocSwgYiwgYmRldi1cXHUwMDNlYmRfZGV2LCBiZGV2LCBhcmcpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk3Mi1cXHRcXHRicmVhaztcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk3Ny1cXHRjYXNlIEJMS1RSQUNFU1RPUDpcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5Nzg6XFx0XFx0cmV0ID0gYmxrX3RyYWNlX3N0YXJ0c3RvcChxLCBzdGFydCk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTc5LVxcdFxcdGJyZWFrO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk4MC1cXHRjYXNlIEJMS1RSQUNFVEVBUkRPV046XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTgxOlxcdFxcdHJldCA9IGJsa190cmFjZV9yZW1vdmUocSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTgyLVxcdFxcdGJyZWFrO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTkwLS8qKlxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjk5MTogKiBibGtfdHJhY2Vfc2h1dGRvd24gLSBzdG9wIGFuZCBjbGVhbnVwIHRyYWNlIHN0cnVjdHVyZXNcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05OTItICogQHE6ICAgIHRoZSByZXF1ZXN0IHF1ZXVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05OTQtICoqL1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjk5NTp2b2lkIGJsa190cmFjZV9zaHV0ZG93bihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05OTYte1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTk4LVxcdFxcdFxcdFxcdCAgICAgIGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2cS1cXHUwMDNlZGVidWdmc19tdXRleCkpKVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjk5OTpcXHRcXHRfX2Jsa190cmFjZV9yZW1vdmUocSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTAwMC19XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDAyLSNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEwMDM6c3RhdGljIHU2NCBibGtfdHJhY2VfYmlvX2dldF9jZ2lkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTAwNC17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDE4LSNlbHNlXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTAxOTpzdGF0aWMgdTY0IGJsa190cmFjZV9iaW9fZ2V0X2NnaWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbylcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDIwLXtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTEwMjU9c3RhdGljIHU2NFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEwMjY6YmxrX3RyYWNlX3JlcXVlc3RfZ2V0X2NnaWQoc3RydWN0IHJlcXVlc3QgKnJxKVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwMjcte1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTAzMC1cXHQvKiBVc2UgdGhlIGZpcnN0IGJpbyAqL1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEwMzE6XFx0cmV0dXJuIGJsa190cmFjZV9iaW9fZ2V0X2NnaWQocnEtXFx1MDAzZXEsIHJxLVxcdTAwM2ViaW8pO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwMzItfVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTA3Mj1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JxX2luc2VydCh2b2lkICppZ25vcmUsIHN0cnVjdCByZXF1ZXN0ICpycSlcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwNzQtXFx0YmxrX2FkZF90cmFjZV9ycShycSwgMCwgYmxrX3JxX2J5dGVzKHJxKSwgQkxLX1RBX0lOU0VSVCxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMDc1OlxcdFxcdFxcdCBibGtfdHJhY2VfcmVxdWVzdF9nZXRfY2dpZChycSkpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwNzYtfVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTA3OD1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JxX2lzc3VlKHZvaWQgKmlnbm9yZSwgc3RydWN0IHJlcXVlc3QgKnJxKVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTA4MC1cXHRibGtfYWRkX3RyYWNlX3JxKHJxLCAwLCBibGtfcnFfYnl0ZXMocnEpLCBCTEtfVEFfSVNTVUUsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTA4MTpcXHRcXHRcXHQgYmxrX3RyYWNlX3JlcXVlc3RfZ2V0X2NnaWQocnEpKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDgyLX1cXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTEwODQ9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9ycV9tZXJnZSh2b2lkICppZ25vcmUsIHN0cnVjdCByZXF1ZXN0ICpycSlcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwODYtXFx0YmxrX2FkZF90cmFjZV9ycShycSwgMCwgYmxrX3JxX2J5dGVzKHJxKSwgQkxLX1RBX0JBQ0tNRVJHRSxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMDg3OlxcdFxcdFxcdCBibGtfdHJhY2VfcmVxdWVzdF9nZXRfY2dpZChycSkpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwODgtfVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTA5MD1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JxX3JlcXVldWUodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDkyLVxcdGJsa19hZGRfdHJhY2VfcnEocnEsIDAsIGJsa19ycV9ieXRlcyhycSksIEJMS19UQV9SRVFVRVVFLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEwOTM6XFx0XFx0XFx0IGJsa190cmFjZV9yZXF1ZXN0X2dldF9jZ2lkKHJxKSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTA5NC19XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMDk2PXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnFfY29tcGxldGUodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDk5LVxcdGJsa19hZGRfdHJhY2VfcnEocnEsIGVycm9yLCBucl9ieXRlcywgQkxLX1RBX0NPTVBMRVRFLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjExMDA6XFx0XFx0XFx0IGJsa190cmFjZV9yZXF1ZXN0X2dldF9jZ2lkKHJxKSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTEwMS19XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMTAzPXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2Vfem9uZV91cGRhdGVfcmVxdWVzdCh2b2lkICppZ25vcmUsIHN0cnVjdCByZXF1ZXN0ICpycSlcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTExMTUtXFx0YmxrX2FkZF90cmFjZV9ycShycSwgMCwgYmxrX3JxX2J5dGVzKHJxKSwgQkxLX1RBX1pPTkVfQVBQRU5ELFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjExMTY6XFx0XFx0XFx0IGJsa190cmFjZV9yZXF1ZXN0X2dldF9jZ2lkKHJxKSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTExNy19XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMTMwPXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfYmlvKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8sXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMTQzLVxcdFxcdFxcdGJpby1cXHUwMDNlYmlfb3BmLCB3aGF0LCBlcnJvciwgMCwgTlVMTCxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMTQ0OlxcdFxcdFxcdGJsa190cmFjZV9iaW9fZ2V0X2NnaWQocSwgYmlvKSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTE0NS1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTEyNDA9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9zcGxpdCh2b2lkICppZ25vcmUsIHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IHBkdSlcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEyNTMtXFx0XFx0XFx0XFx0c2l6ZW9mKHJwZHUpLCBcXHUwMDI2cnBkdSxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMjU0OlxcdFxcdFxcdFxcdGJsa190cmFjZV9iaW9fZ2V0X2NnaWQocSwgYmlvKSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTI1NS1cXHR9XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMjY4PXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfYmlvX3JlbWFwKHZvaWQgKmlnbm9yZSwgc3RydWN0IGJpbyAqYmlvLCBkZXZfdCBkZXYsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjg4LVxcdFxcdFxcdGJsa19zdGF0dXNfdG9fZXJybm8oYmlvLVxcdTAwM2ViaV9zdGF0dXMpLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEyODk6XFx0XFx0XFx0c2l6ZW9mKHIpLCBcXHUwMDI2ciwgYmxrX3RyYWNlX2Jpb19nZXRfY2dpZChxLCBiaW8pKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjkwLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTMwNT1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JxX3JlbWFwKHZvaWQgKmlnbm9yZSwgc3RydWN0IHJlcXVlc3QgKnJxLCBkZXZfdCBkZXYsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMzIzLVxcdFxcdFxcdHJxLVxcdTAwM2VjbWRfZmxhZ3MsIEJMS19UQV9SRU1BUCwgMCxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMzI0OlxcdFxcdFxcdHNpemVvZihyKSwgXFx1MDAyNnIsIGJsa190cmFjZV9yZXF1ZXN0X2dldF9jZ2lkKHJxKSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTMyNS1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTEzMzg9dm9pZCBibGtfYWRkX2RyaXZlcl9kYXRhKHN0cnVjdCByZXF1ZXN0ICpycSwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbilcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEzNTAtXFx0XFx0XFx0XFx0QkxLX1RBX0RSVl9EQVRBLCAwLCBsZW4sIGRhdGEsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTM1MTpcXHRcXHRcXHRcXHRibGtfdHJhY2VfcmVxdWVzdF9nZXRfY2dpZChycSkpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEzNTItXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xODE4PXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBwcmludF9vbmVfbGluZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODUwLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE4NTE6c3RhdGljIGVudW0gcHJpbnRfbGluZV90IGJsa190cmFjZV9ldmVudF9wcmludChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTg1Mi1cXHRcXHRcXHRcXHRcXHQgICAgICAgaW50IGZsYWdzLCBzdHJ1Y3QgdHJhY2VfZXZlbnQgKmV2ZW50KVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTg1Ni1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxODU3OnN0YXRpYyB2b2lkIGJsa190cmFjZV9zeW50aGVzaXplX29sZF90cmFjZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTg1OC17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xODcyPXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE4NzM6YmxrX3RyYWNlX2V2ZW50X3ByaW50X2JpbmFyeShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncyxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODc0LVxcdFxcdFxcdCAgICAgc3RydWN0IHRyYWNlX2V2ZW50ICpldmVudClcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODc1LXtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxODc2OlxcdGJsa190cmFjZV9zeW50aGVzaXplX29sZF90cmFjZShpdGVyKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODc3LVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTkxNT1zdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50X2Z1bmN0aW9ucyB0cmFjZV9ibGtfZXZlbnRfZnVuY3MgPSB7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTkxNjpcXHQudHJhY2VcXHRcXHQ9IGJsa190cmFjZV9ldmVudF9wcmludCxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxOTE3OlxcdC5iaW5hcnlcXHRcXHQ9IGJsa190cmFjZV9ldmVudF9wcmludF9iaW5hcnksXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTkxOC19O1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTk2Nj1kZXZpY2VfaW5pdGNhbGwoaW5pdF9ibGtfdHJhY2VyKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xOTY3LVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE5Njg6c3RhdGljIGludCBibGtfdHJhY2VfcmVtb3ZlX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE5Njkte1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTk3Ni1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxOTc3OlxcdGJsa190cmFjZV9zdG9wKGJ0KTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xOTc4LVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTk4MC1cXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxOTgxOlxcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xOTgyLVxcdHJldHVybiAwO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTk4Ny0gKi9cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxOTg4OnN0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE5ODktXFx0XFx0XFx0XFx0IHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDA0LVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIwMDU6XFx0YmxrX3RyYWNlX3NldHVwX2xiYShidCwgYmRldik7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjAwNi1cXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIwMTQtZnJlZV9idDpcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoyMDE1OlxcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDE2LVxcdHJldHVybiByZXQ7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDIyLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIwMjM6c3RhdGljIHNzaXplX3Qgc3lzZnNfYmxrX3RyYWNlX2F0dHJfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjAyNC1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjAyNS1cXHRcXHRcXHRcXHRcXHQgY2hhciAqYnVmKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoyMDI2OnN0YXRpYyBzc2l6ZV90IHN5c2ZzX2Jsa190cmFjZV9hdHRyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDI3LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDMwLVxcdERFVklDRV9BVFRSKF9uYW1lLCBTX0lSVUdPIHwgU19JV1VTUiwgXFxcXFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIwMzE6XFx0XFx0ICAgIHN5c2ZzX2Jsa190cmFjZV9hdHRyX3Nob3csIFxcXFxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoyMDMyOlxcdFxcdCAgICBzeXNmc19ibGtfdHJhY2VfYXR0cl9zdG9yZSlcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDMzLVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MjAzOD1zdGF0aWMgQkxLX1RSQUNFX0RFVklDRV9BVFRSKGVuZF9sYmEpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIwMzktXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjA0MDpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYmxrX3RyYWNlX2F0dHJzW10gPSB7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjA0MS1cXHRcXHUwMDI2ZGV2X2F0dHJfZW5hYmxlLmF0dHIsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDQ4LVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIwNDk6c3RydWN0IGF0dHJpYnV0ZV9ncm91cCBibGtfdHJhY2VfYXR0cl9ncm91cCA9IHtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDUwLVxcdC5uYW1lICA9IFxcXCJ0cmFjZVxcXCIsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjA1MTpcXHQuYXR0cnMgPSBibGtfdHJhY2VfYXR0cnMsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjA1Mi19O1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MjA1ND1zdGF0aWMgY29uc3Qgc3RydWN0IHtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIwNzYtXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjA3NzpzdGF0aWMgaW50IGJsa190cmFjZV9zdHIybWFzayhjb25zdCBjaGFyICpzdHIpXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjA3OC17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMTExLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIxMTI6c3RhdGljIHNzaXplX3QgYmxrX3RyYWNlX21hc2syc3RyKGNoYXIgKmJ1ZiwgaW50IG1hc2spXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjExMy17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMTI3LVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIxMjg6c3RhdGljIHNzaXplX3Qgc3lzZnNfYmxrX3RyYWNlX2F0dHJfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjEyOS1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMTQ4LVxcdGVsc2UgaWYgKGF0dHIgPT0gXFx1MDAyNmRldl9hdHRyX2FjdF9tYXNrKVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIxNDk6XFx0XFx0cmV0ID0gYmxrX3RyYWNlX21hc2syc3RyKGJ1ZiwgYnQtXFx1MDAzZWFjdF9tYXNrKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMTUwLVxcdGVsc2UgaWYgKGF0dHIgPT0gXFx1MDAyNmRldl9hdHRyX3BpZClcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIxNjEtXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjE2MjpzdGF0aWMgc3NpemVfdCBzeXNmc19ibGtfdHJhY2VfYXR0cl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjE2My1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjE3OC1cXHRcXHRcXHQvKiBBc3N1bWUgaXQgaXMgYSBsaXN0IG9mIHRyYWNlIGNhdGVnb3J5IG5hbWVzICovXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjE3OTpcXHRcXHRcXHRyZXQgPSBibGtfdHJhY2Vfc3RyMm1hc2soYnVmKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMTgwLVxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjE5OC1cXHRcXHRpZiAodmFsdWUpXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjE5OTpcXHRcXHRcXHRyZXQgPSBibGtfdHJhY2Vfc2V0dXBfcXVldWUocSwgYmRldik7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjIwMC1cXHRcXHRlbHNlXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjIwMTpcXHRcXHRcXHRyZXQgPSBibGtfdHJhY2VfcmVtb3ZlX3F1ZXVlKHEpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIyMDItXFx0XFx0Z290byBvdXRfdW5sb2NrX2JkZXY7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMjA2LVxcdGlmIChidCA9PSBOVUxMKSB7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjIwNzpcXHRcXHRyZXQgPSBibGtfdHJhY2Vfc2V0dXBfcXVldWUocSwgYmRldik7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjIwOC1cXHRcXHRidCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocS1cXHUwMDNlYmxrX3RyYWNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjoyOToyMS4zNjM1NjA3NDVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTM0NDM1MTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBibGt0cmFjZSBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgd2hldGhlciBgYmxrdHJhY2VgIGlzIGEgdmlhYmxlIHRhcmdldCBmb3IgZnV6emluZy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0J3MgZXZlbiAqcmVhY2hhYmxlKiBmcm9tIHVzZXJzcGFjZS4gQW5kIHRoZSBhbnN3ZXIsIHRoYW5rZnVsbHksIGlzIGEgcmVzb3VuZGluZyB5ZXMhIEkgc2VlIHRocmVlIGRpc3RpbmN0IGFjY2VzcyBwb2ludHM6IHRoZSBgYmxrX3RyYWNlX2lvY3RsYCBmdW5jdGlvbiwgaGFuZGxpbmcgYSB3aG9sZSBzdWl0ZSBvZiBgQkxLVFJBQ0VgIGlvY3RscyBsaWtlIGBTRVRVYCwgYFNUQVJUYCwgYFNUT1BgLCBhbmQgYFRFQVJET1dOYCBvbiB0aGUgc3RhbmRhcmQgYmxvY2sgZGV2aWNlcy4gVGhlbiB0aGVyZSdzIHN5c2ZzLCBzcGVjaWZpY2FsbHkgdGhlIGAvc3lzL2Jsb2NrL1x1MDAzY2Rldlx1MDAzZS90cmFjZS8uLi5gIGVudHJpZXMgZm9yIGVuYWJsaW5nLCBtYW5hZ2luZyB0aGUgYGFjdF9tYXNrYCwgdGhlIGBwaWRgLCBhbmQgb3RoZXIgcHJvcGVydGllcy4gRmluYWxseSwgd2UgaGF2ZSBkZWJ1Z2ZzL3RyYWNlZnMgd2l0aCB0aGUgYC9zeXMva2VybmVsL3RyYWNpbmcvY3VycmVudF90cmFjZXJgIHBhdGggYWxsb3dpbmcgZm9yIHRoZSBibG9jayB0cmFjZSB0cmFjZXIuXG5cbk5leHQsIGl0J3MgcHJ1ZGVudCB0byBleGFtaW5lIHRoZSBjYWxsZXJzIG9mIGBibGtfdHJhY2VfaW9jdGxgIHRvIGdhaW4gYW4gdW5kZXJzdGFuZGluZyBvZiBob3cgZXhhY3RseSB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM5MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjoyOToyNC40OTc5OTgxNzFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDg4MzUyOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrX3RyYWNlX2lvY3RsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2lvY3RsLmM9NjUxPXN0YXRpYyBpbnQgYmxrZGV2X2NvbW1vbl9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuLS1cXG5ibG9jay9pb2N0bC5jLTcxNy1cXHRjYXNlIEJMS1RSQUNFVEVBUkRPV046XFxuYmxvY2svaW9jdGwuYzo3MTg6XFx0XFx0cmV0dXJuIGJsa190cmFjZV9pb2N0bChiZGV2LCBjbWQsIGFyZ3ApO1xcbmJsb2NrL2lvY3RsLmMtNzE5LVxcdGNhc2UgQkxLQ1JZUFRPSU1QT1JUS0VZOlxcbi0tXFxuYmxvY2svaW9jdGwuYz03NTA9bG9uZyBibGtkZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5ibG9jay9pb2N0bC5jLTc4Ni1cXHRjYXNlIEJMS1RSQUNFU0VUVVAyOlxcbmJsb2NrL2lvY3RsLmM6Nzg3OlxcdFxcdHJldHVybiBibGtfdHJhY2VfaW9jdGwoYmRldiwgY21kLCBhcmdwKTtcXG5ibG9jay9pb2N0bC5jLTc4OC1cXHRkZWZhdWx0Olxcbi0tXFxuYmxvY2svaW9jdGwuYz04MTA9bG9uZyBjb21wYXRfYmxrZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYmxvY2svaW9jdGwuYy04NDYtXFx0Y2FzZSBCTEtUUkFDRVNFVFVQMzI6XFxuYmxvY2svaW9jdGwuYzo4NDc6XFx0XFx0cmV0dXJuIGJsa190cmFjZV9pb2N0bChiZGV2LCBjbWQsIGFyZ3ApO1xcbmJsb2NrL2lvY3RsLmMtODQ4LVxcdGRlZmF1bHQ6XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oPTE2PXN0cnVjdCBibGtfdHJhY2Uge1xcbi0tXFxuaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaC0zMS1cXG5pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oOjMyOmV4dGVybiBpbnQgYmxrX3RyYWNlX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgdW5zaWduZWQsIGNoYXIgX191c2VyICopO1xcbmluY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgtMzMtZXh0ZXJuIHZvaWQgYmxrX3RyYWNlX3NodXRkb3duKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICopO1xcbi0tXFxuaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaD04MT1leHRlcm4gaW50IGJsa190cmFjZV9yZW1vdmUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaC04My0jZWxzZSAvKiAhQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgKi9cXG5pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oOjg0OiMgZGVmaW5lIGJsa190cmFjZV9pb2N0bChiZGV2LCBjbWQsIGFyZylcXHRcXHQoLUVOT1RUWSlcXG5pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oLTg1LSMgZGVmaW5lIGJsa190cmFjZV9zaHV0ZG93bihxKVxcdFxcdFxcdFxcdGRvIHsgfSB3aGlsZSAoMClcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTkzOD1FWFBPUlRfU1lNQk9MX0dQTChibGtfdHJhY2Vfc3RhcnRzdG9wKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk0Ni0vKipcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5NDc6ICogYmxrX3RyYWNlX2lvY3RsIC0gaGFuZGxlIHRoZSBpb2N0bHMgYXNzb2NpYXRlZCB3aXRoIHRyYWNpbmdcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NDgtICogQGJkZXY6XFx0dGhlIGJsb2NrIGRldmljZVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTUyLSAqKi9cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5NTM6aW50IGJsa190cmFjZV9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCB1bnNpZ25lZCBjbWQsIGNoYXIgX191c2VyICphcmcpXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTU0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6Mjk6MjYuNDA2ODM4NDA4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNDI2MzAzNzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQmxrdHJhY2UgRXJyb3IgSGFuZGxpbmcgRml4IGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIHRoZSBibGt0cmFjZSBjb3JlIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSB0aGUgY2hhbmdlcyBpbiBlcnJvciBoYW5kbGluZyBhbmQgdHJhY2Vwb2ludCByZWdpc3RyYXRpb24gZHVyaW5nIHNldHVwIGFuZCB0ZWFyZG93bi4gSXQgYXBwZWFycyB0aGF0IHRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbiBoYWQgc29tZSBpc3N1ZXMgd2l0aCBpZ25vcmluZyByZXR1cm4gdmFsdWVzIGZyb20gY3JpdGljYWwgZnVuY3Rpb25zIGxpa2UgYGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cygpYCBhbmQgYGdldF9wcm9iZV9yZWYoKWAsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gc3VidGxlIGVycm9ycy5cblxuVGhlIGZpeCBhZGRyZXNzZXMgdGhpcyBieTpcblxuMS4gIEVuc3VyaW5nIHRoYXQgYGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cygpYCBub3cgY29ycmVjdGx5IHJldHVybnMgYW4gZXJyb3IgYW5kIHVud2luZHMgaWYgdGhlcmUncyBhIHByb2JsZW0gcmVnaXN0ZXJpbmcgdHJhY2Vwb2ludHMuXG4yLiAgYGdldF9wcm9iZV9yZWYoKWAgYWxzbyByZXR1cm5zIGl0cyBlcnJvciBzdGF0dXMuXG4zLiAgQ3JpdGljYWxseSwgYGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZSgpYCBjYWxscyBgZ2V0X3Byb2JlX3JlZigpYCAqYmVmb3JlKiBhc3NpZ25pbmcgdGhlIHRyYWNlIHN0cnVjdHVyZSBhbmQgcmV0dXJucyBhbiBlcnJvciBpZiBgZ2V0X3Byb2JlX3JlZigpYCBmYWlscy5cbjQuICBUaGUgY2FsbGVycyBub3cgaGFuZGxlIGZhaWx1cmVzIGZyb20gYGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZSgpYCBieSBjbGVhbmluZyB1cCB0aGUgdHJhY2Ugc3RydWN0dXJlIGFuZCByZXR1cm5pbmcgYW4gZXJyb3IuXG41LiAgSW4gYGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpYCwgYGdldF9wcm9iZV9yZWYoKWAgaXMgY2FsbGVkIGJlZm9yZSBhc3NpZ25tZW50IHRvby5cblxuVGhpcyBpcyBhIGNsZWFyIGltcHJvdmVtZW50IGluIHRoZSBlcnJvciBoYW5kbGluZyBmb3IgdGhpcyBjcml0aWNhbCB0cmFjaW5nIGluZnJhc3RydWN0dXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgc2hvdWxkIHdlIGZ1enogdGhpcz8gTGV0J3MgY2hlY2sgdGhlIGd1aWRlbGluZXMgdG8gYmUgY2VydGFpbi5cblxuQWNjb3JkaW5nIHRvIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMsIHRoZSBjaGFuZ2VzIGRlZmluaXRlbHkgaW52b2x2ZSBjb3JlIGtlcm5lbCBsb2dpYyB3aXRoaW4gdGhlIGJsb2NrIGxheWVyLiBJdCdzIG5vdCBqdXN0IGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCBvciBkZWNvcmF0aXZlIGxvZ2dpbmcuIFRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IGVycm9ycyBhcmUgaGFuZGxlZCBpbiB0aGUgYmxrdHJhY2Ugc2V0dXAgYW5kIHRlYXJkb3duIHByb2Nlc3MuIFRoZSBjb2RlJ3MgY2xlYXJseSByZWFjaGFibGUsIHNvIHRoYXQgbWFrZXMgdGhpcyBhIHNvbGlkIFwiV29ydGhGdXp6aW5nPXRydWVcIiBzaXR1YXRpb24uXG5cbk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBhcHByb3ByaWF0ZSBmdXp6aW5nIHRhcmdldHMuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgZnV6emluZy4gSSB3aWxsIGxvb2sgYXQgdGhlIGludm9sdmVkIGZ1bmN0aW9ucyB0byBzZWxlY3QgZ29vZCBmdXp6aW5nIGVudHJ5cG9pbnRzIGFuZCB2ZXJpZnkgRm9jdXNTeW1ib2xzIGFuZCBFbmFibGVDb25maWdzLlxuXG5GaXJzdCwgSSdsbCBnbyB0aHJvdWdoIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AgdG8gaWRlbnRpZnkgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB3aGljaCBhcmUgZWFzaWVyIHRvIHRhcmdldC4gTG9va2luZyBhdCB0aGUgY29kZSwgSSBzZWU6XG5cbiogICBgYmxrX3RyYWNlX3NldHVwYCAoYSBub24tc3RhdGljIEdQTC1leHBvcnRlZCBmdW5jdGlvbilcbiogICBgYmxrX3RyYWNlX2lvY3RsYCAoY2FsbGVkIGJ5IGBibGtkZXZfaW9jdGxgKVxuKiAgIGBibGtfdHJhY2VfcmVtb3ZlYCAoYW5vdGhlciBub24tc3RhdGljIGZ1bmN0aW9uKVxuKiAgIGBibGtfdHJhY2Vfc3RhcnRzdG9wYCAobm9uLXN0YXRpYylcblxuSSBuZWVkIHRvIGRlY2lkZSBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucy4gU3RhdGljIGhlbHBlciBmdW5jdGlvbnMgYXJlbid0IGFzIGdvb2QgYSB0YXJnZXQgYXMgbm9uLXN0YXRpYyBlbnRyeXBvaW50cywgc28gYGJsa190cmFjZV9pb2N0bGAgYW5kIGBibGtfdHJhY2Vfc2V0dXBgIHN0YW5kIG91dCBhcyB0aGUgcHJpbWFyeSBjYW5kaWRhdGVzLlxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AgZmlsZSBpbmRpY2F0ZXMgdGhhdCBgQkxLX0RFVl9JT19UUkFDRWAgaXMgdGhlIGNyaXRpY2FsIGNvbmZpZyBvcHRpb24uIExvb2tpbmcgYXQgaXRzIGRlcGVuZGVuY2llcywgSSBzZWUgaXQgZGVwZW5kcyBvbiBgU1lTRlNgLCBgQkxPQ0tgLCBhbmQgc2VsZWN0cyBgUkVMQVlgLCBgREVCVUdfRlNgLCBgVFJBQ0VQT0lOVFNgLCBgR0VORVJJQ19UUkFDRVJgLCBhbmQgYFNUQUNLVFJBQ0VgLiBJJ2xsIGFsc28gZG8gYSBxdWljayBgZ3JlcGAgZm9yIG90aGVyIGNvbmZpZyBvcHRpb25zIGluIGBibGt0cmFjZS5jYCwganVzdCB0byBiZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEknbSBhbGwgc2V0IHdpdGggdGhlIEZvY3VzU3ltYm9scyBhbmQgRW5hYmxlQ29uZmlncyBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1NDAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6Mjk6MzcuODMzMTQ0NTE2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDcwNDgzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9ibGt0cmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTI4LVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjI5OiNpZmRlZiBDT05GSUdfQkxLX0RFVl9JT19UUkFDRVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTMwLVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9NDQ9c3RhdGljIHN0cnVjdCB0cmFjZXJfb3B0IGJsa190cmFjZXJfb3B0c1tdID0ge1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNDYtXFx0eyBUUkFDRVJfT1BUKGJsa19jbGFzc2ljLCBUUkFDRV9CTEtfT1BUX0NMQVNTSUMpIH0sXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NDc6I2lmZGVmIENPTkZJR19CTEtfQ0dST1VQXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNDgtXFx0eyBUUkFDRVJfT1BUKGJsa19jZ3JvdXAsIFRSQUNFX0JMS19PUFRfQ0dST1VQKSB9LFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MjQzPXZvaWQgX19ibGtfdHJhY2Vfbm90ZV9tZXNzYWdlKHN0cnVjdCBibGtfdHJhY2UgKmJ0LFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjY4LVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjI2OTojaWZkZWYgQ09ORklHX0JMS19DR1JPVVBcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yNzAtXFx0aWYgKGNzcyBcXHUwMDI2XFx1MDAyNiAoYmxrX3RyYWNlcl9mbGFncy52YWwgXFx1MDAyNiBUUkFDRV9CTEtfT1BUX0NHUk9VUCkpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz04MjQ9c3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXAyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04NjItXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6ODYzOiNpZiBkZWZpbmVkKENPTkZJR19DT01QQVQpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1g4Nl82NClcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy04NjQtc3RhdGljIGludCBjb21wYXRfYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9OTUzPWludCBibGtfdHJhY2VfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgY21kLCBjaGFyIF9fdXNlciAqYXJnKVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTY3LVxcdFxcdGJyZWFrO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjk2ODojaWYgZGVmaW5lZChDT05GSUdfQ09NUEFUKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19YODZfNjQpXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTY5LVxcdGNhc2UgQkxLVFJBQ0VTRVRVUDMyOlxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9OTk1PXZvaWQgYmxrX3RyYWNlX3NodXRkb3duKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTAwMS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMDAyOiNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwMDMtc3RhdGljIHU2NCBibGtfdHJhY2VfYmlvX2dldF9jZ2lkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0yMTYyPXN0YXRpYyBzc2l6ZV90IHN5c2ZzX2Jsa190cmFjZV9hdHRyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIyMjctfVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIyMjg6I2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lPX1RSQUNFICovXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjIyOS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoyMjMwOiNpZmRlZiBDT05GSUdfRVZFTlRfVFJBQ0lOR1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIyMzEtXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0yMzEyPUVYUE9SVF9TWU1CT0xfR1BMKGJsa19maWxsX3J3YnMpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIzMTMtXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjMxNDojZW5kaWYgLyogQ09ORklHX0VWRU5UX1RSQUNJTkcgKi9cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMzE1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjoyOTozNy44Nzc4NTM0NzNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTk5MDA5MjM3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCbG9jayBUcmFjaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIHNldCBmb3IgYmxvY2sgSS9PIHRyYWNpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBCTEtfREVWX0lPX1RSQUNFYCBpcyB0aGUga2V5LCBidXQgaXQgcmVsaWVzIG9uIGBTWVNGU2AgYW5kIGBCTE9DS2AuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBJJ20gbm90IG1pc3NpbmcgYW55IG90aGVyIGltcGxpY2l0IGRlcGVuZGVuY2llcy4gWWVzLCBsaXN0aW5nIGBCTEtfREVWX0lPX1RSQUNFYCwgYEJMT0NLYCwgYW5kIGBTWVNGU2AgZXhwbGljaXRseSBjb3ZlcnMgZXZlcnl0aGluZywgc3RhbmRhcmQgYW5kIGFjY3VyYXRlLlxuXG5OZXh0LCBJIHNob3VsZCBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBzeW1ib2xzLiBMb29raW5nIGF0IGBGb2N1c1N5bWJvbHNgLCBJIHNlZSBgYmxrX3RyYWNlX2lvY3RsYCBhbmQgYGJsa190cmFjZV9zZXR1cGAgYXJlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgaGVyZS4gR29vZC5cblxuTm93LCBsZXQncyBzdGVwIGJhY2sgYW5kIHJldmlldyB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaXRzZWxmLiBJdCdzIGZvY3VzZWQgb24gaW1wcm92aW5nIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKClgIHdpdGhpbiBga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNgLiBTcGVjaWZpY2FsbHksIGl0IGFkZHJlc3NlcyB0aGUgY2xlYW51cCBvZiB0cmFjZXBvaW50cyBvbiBmYWlsdXJlIGR1cmluZyByZWdpc3RyYXRpb24uIFRoZSBwYXRjaCBhbHNvIHByb3BhZ2F0ZXMgdGhlIGVycm9yIGhhbmRsaW5nIHRvIGZ1bmN0aW9ucyBsaWtlIGBnZXRfcHJvYmVfcmVmKClgLCBgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKClgLCBgYmxrX3RyYWNlX3NldHVwKClgLCBgYmxrX3RyYWNlX3NldHVwMigpYCwgYGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAoKWAsIGFuZCBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKClgLiBBbGwgb2YgdGhlc2UgYXJlIHJlYWNoZWQgdGhyb3VnaCBibG9jayBkZXZpY2UgaW9jdGxzIChgQkxLVFJBQ0VTRVRVUGAsIGBCTEtUUkFDRVNFVFVQMmAsIGBCTEtUUkFDRVNFVFVQMzJgKSBhbmQgc3lzZnMgaW50ZXJmYWNlcy5cblxuR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2gsIEkgYW0gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTE4MywiT3V0cHV0VG9rZW5zIjoxNjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6Mjk6NDcuODY3OTQ5Nzg4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE4NDA1MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfSU9fVFJBQ0VcIixcbiAgICBcIkJMT0NLXCIsXG4gICAgXCJTWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa190cmFjZV9pb2N0bFwiLFxuICAgIFwiYmxrX3RyYWNlX3NldHVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYmxrdHJhY2UgdHJhY2Vwb2ludCByZWdpc3RyYXRpb24gYW5kIHNldHVwIGVycm9yIHVud2luZGluZyBwYXRocyBpbiBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy4gSXQgbWFrZXMgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzIHJldHVybiBlcnJvciBjb2RlcyBhbmQgcm9sbGJhY2sgcmVnaXN0ZXJlZCB0cmFjZXBvaW50cyB1cG9uIGZhaWx1cmUsIGFuZCBwcm9wZXJseSBoYW5kbGVzIHRyYWNlcG9pbnQgc2V0dXAgZXJyb3JzIGFjcm9zcyBibGtfdHJhY2Vfc2V0dXAoKSwgYmxrX3RyYWNlX3NldHVwMigpLCBjb21wYXRfYmxrX3RyYWNlX3NldHVwKCksIGFuZCBibGtfdHJhY2Vfc2V0dXBfcXVldWUoKSwgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYmxvY2sgZGV2aWNlIGlvY3RscyBhbmQgc3lzZnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9JT19UUkFDRVwiLFxuICAgIFwiQkxPQ0tcIixcbiAgICBcIlNZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrX3RyYWNlX2lvY3RsXCIsXG4gICAgXCJibGtfdHJhY2Vfc2V0dXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBibGt0cmFjZSB0cmFjZXBvaW50IHJlZ2lzdHJhdGlvbiBhbmQgc2V0dXAgZXJyb3IgdW53aW5kaW5nIHBhdGhzIGluIGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLiBJdCBtYWtlcyBibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHMgcmV0dXJuIGVycm9yIGNvZGVzIGFuZCByb2xsYmFjayByZWdpc3RlcmVkIHRyYWNlcG9pbnRzIHVwb24gZmFpbHVyZSwgYW5kIHByb3Blcmx5IGhhbmRsZXMgdHJhY2Vwb2ludCBzZXR1cCBlcnJvcnMgYWNyb3NzIGJsa190cmFjZV9zZXR1cCgpLCBibGtfdHJhY2Vfc2V0dXAyKCksIGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAoKSwgYW5kIGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBibG9jayBkZXZpY2UgaW9jdGxzIGFuZCBzeXNmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6Mjk6NDcuOTQ5Nzk2ODgyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDU3MTAzMjQyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjI5OjQ3Ljk1MDI3MzU2MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIwNTcwNTUxMjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yIGNoZWNraW5nIGFuZCB1bndpbmRpbmcgdG8gYmxrdHJhY2UgdHJhY2Vwb2ludCByZWdpc3RyYXRpb24gKGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cywgZ2V0X3Byb2JlX3JlZiwgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplLCBibGtfdHJhY2Vfc2V0dXBfcXVldWUpLiBJbiBmYWlsdXJlIGNhc2VzLCBpdCBwcm9wZXJseSByb2xscyBiYWNrIHJlZ2lzdGVyZWQgdHJhY2Vwb2ludHMsIGRlY3JlbWVudHMgcHJvYmUgcmVmZXJlbmNlIGNvdW50cywgY2xlYW5zIHVwIGFsbG9jYXRlZCBibGtfdHJhY2Ugc3RydWN0dXJlcyB2aWEgYmxrX3RyYWNlX2ZyZWUsIGFuZCByZXR1cm5zIGVycm9yIGNvZGVzIGJlZm9yZSBhbnkgZGF0YSBpcyBjb3BpZWQgYmFjayB0byB1c2VyIHNwYWNlLiBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGFyZSByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCB1bmluaXRpYWxpemVkIGFsbG9jYXRpb25zIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmUgaW50cm9kdWNlZC4gUG90ZW50aWFsIHJpc2tzIG9uIHRoZXNlIHBhdGhzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGxvY2svY2xlYW51cCBlcnJvcnMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXM7IHRodXMsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNThjZmU2NDU2Yzg0NjNiNzE3MDQ5Yjk5NjAxOTYwYzkwMzk2OGE4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMjI6Mjk6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jXG5pbmRleCA4Y2QyNTIwYjRjOTllLi5jMjMyNDI5OGM2YzE1IDEwMDY0NFxuLS0tIGEva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNcbisrKyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jXG5AQCAtNjAsNyArNjAsNyBAQCBzdGF0aWMgc3RydWN0IHRyYWNlcl9mbGFncyBibGtfdHJhY2VyX2ZsYWdzID0ge1xuIHN0YXRpYyBERUZJTkVfTVVURVgoYmxrX3Byb2JlX211dGV4KTtcbiBzdGF0aWMgaW50IGJsa19wcm9iZXNfcmVmO1xuIFxuLXN0YXRpYyB2b2lkIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKTtcbitzdGF0aWMgaW50IGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKTtcbiBzdGF0aWMgdm9pZCBibGtfdW5yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKTtcbiBcbiBzdGF0aWMgdm9pZCByZWNvcmRfYmxrdHJhY2VfZXZlbnQoc3RydWN0IGJsa19pb190cmFjZSAqdCwgcGlkX3QgcGlkLCBpbnQgY3B1LFxuQEAgLTQ4NSwxMiArNDg1LDE4IEBAIHN0YXRpYyB2b2lkIGJsa190cmFjZV9mcmVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmxrX3RyYWNlICpidClcbiBcdGtmcmVlKGJ0KTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgZ2V0X3Byb2JlX3JlZih2b2lkKVxuK3N0YXRpYyBpbnQgZ2V0X3Byb2JlX3JlZih2b2lkKVxuIHtcbitcdGludCByZXQgPSAwO1xuK1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZibGtfcHJvYmVfbXV0ZXgpO1xuLVx0aWYgKCsrYmxrX3Byb2Jlc19yZWYgPT0gMSlcbi1cdFx0YmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKCk7XG4rXHRpZiAoKytibGtfcHJvYmVzX3JlZiA9PSAxKSB7XG4rXHRcdHJldCA9IGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cygpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGJsa19wcm9iZXNfcmVmLS07XG4rXHR9XG4gXHRtdXRleF91bmxvY2soXHUwMDI2YmxrX3Byb2JlX211dGV4KTtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHB1dF9wcm9iZV9yZWYodm9pZClcbkBAIC03MjcsMTIgKzczMywxNCBAQCBzdGF0aWMgc3RydWN0IGJsa190cmFjZSAqYmxrX3RyYWNlX3NldHVwX3ByZXBhcmUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4gXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4tXHRcdFx0XHQgICAgIGNoYXIgKm5hbWUsIGludCB2ZXJzaW9uLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgYmxrX3RyYWNlICpidCxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGJsa191c2VyX3RyYWNlX3NldHVwMiAqYnV0cylcbitzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbitcdFx0XHRcdCAgICBjaGFyICpuYW1lLCBpbnQgdmVyc2lvbixcbitcdFx0XHRcdCAgICBzdHJ1Y3QgYmxrX3RyYWNlICpidCxcbitcdFx0XHRcdCAgICBzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAyICpidXRzKVxuIFxuIHtcbitcdGludCByZXQ7XG4rXG4gXHRzdHJzY3B5X3BhZChidXRzLVx1MDAzZW5hbWUsIG5hbWUsIEJMS1RSQUNFX0JERVZfU0laRTIpO1xuIFxuIFx0LypcbkBAIC03NTUsOCArNzYzLDEyIEBAIHN0YXRpYyB2b2lkIGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbiBcdGJ0LVx1MDAzZXBpZCA9IGJ1dHMtXHUwMDNlcGlkO1xuIFx0YnQtXHUwMDNldHJhY2Vfc3RhdGUgPSBCbGt0cmFjZV9zZXR1cDtcbiBcbitcdHJldCA9IGdldF9wcm9iZV9yZWYoKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIocS1cdTAwM2VibGtfdHJhY2UsIGJ0KTtcbi1cdGdldF9wcm9iZV9yZWYoKTtcbitcdHJldHVybiAwO1xuIH1cbiBcbiBpbnQgYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXG5AQCAtNzkyLDcgKzgwNCwxMiBAQCBpbnQgYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXG4gXHRcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XG4gXHRcdHJldHVybiBQVFJfRVJSKGJ0KTtcbiBcdH1cbi1cdGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAxLCBidCwgXHUwMDI2YnV0czIpO1xuK1x0cmV0ID0gYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDEsIGJ0LCBcdTAwMjZidXRzMik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcbitcdFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcdHN0cnNjcHkoYnV0cy5uYW1lLCBidXRzMi5uYW1lLCBCTEtUUkFDRV9CREVWX1NJWkUpO1xuIFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcbiBcbkBAIC04MTAsNiArODI3LDcgQEAgc3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXAyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXG4gXHRzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAyIGJ1dHMyO1xuIFx0c3RydWN0IGJsa190cmFjZSAqYnQ7XG4gXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XG4rXHRpbnQgcmV0O1xuIFxuIFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmJ1dHMyLCBhcmcsIHNpemVvZihidXRzMikpKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbkBAIC04MjcsNyArODQ1LDEyIEBAIHN0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwMihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSwgZGV2X3QgZGV2LFxuIFx0XHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuIFx0XHRyZXR1cm4gUFRSX0VSUihidCk7XG4gXHR9XG4tXHRibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMiwgYnQsIFx1MDAyNmJ1dHMyKTtcbitcdHJldCA9IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAyLCBidCwgXHUwMDI2YnV0czIpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRibGtfdHJhY2VfZnJlZShxLCBidCk7XG4rXHRcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4gXHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuIFxuIFx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFx1MDAyNmJ1dHMyLCBzaXplb2YoYnV0czIpKSkge1xuQEAgLTg0Niw2ICs4NjksNyBAQCBzdGF0aWMgaW50IGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsXG4gXHRzdHJ1Y3QgY29tcGF0X2Jsa191c2VyX3RyYWNlX3NldHVwIGNidXRzO1xuIFx0c3RydWN0IGJsa190cmFjZSAqYnQ7XG4gXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XG4rXHRpbnQgcmV0O1xuIFxuIFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmNidXRzLCBhcmcsIHNpemVvZihjYnV0cykpKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbkBAIC04NjksNyArODkzLDEyIEBAIHN0YXRpYyBpbnQgY29tcGF0X2Jsa190cmFjZV9zZXR1cChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSxcbiBcdFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcbiBcdFx0cmV0dXJuIFBUUl9FUlIoYnQpO1xuIFx0fVxuLVx0YmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDEsIGJ0LCBcdTAwMjZidXRzMik7XG4rXHRyZXQgPSBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUocSwgbmFtZSwgMSwgYnQsIFx1MDAyNmJ1dHMyKTtcbitcdGlmIChyZXQpIHtcbitcdFx0YmxrX3RyYWNlX2ZyZWUocSwgYnQpO1xuK1x0XHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuIFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcbiBcbiBcdGlmIChjb3B5X3RvX3VzZXIoYXJnLCBcdTAwMjZidXRzMi5uYW1lLCBBUlJBWV9TSVpFKGJ1dHMyLm5hbWUpKSkge1xuQEAgLTEzMjQsNDkgKzEzNTMsMTA4IEBAIHZvaWQgYmxrX2FkZF9kcml2ZXJfZGF0YShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGJsa19hZGRfZHJpdmVyX2RhdGEpO1xuIFxuLXN0YXRpYyB2b2lkIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKVxuK3N0YXRpYyBpbnQgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbiBcbiBcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2luc2VydChibGtfYWRkX3RyYWNlX3JxX2luc2VydCwgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dDtcbiBcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2lzc3VlKGJsa19hZGRfdHJhY2VfcnFfaXNzdWUsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcnFfaW5zZXJ0O1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfbWVyZ2UoYmxrX2FkZF90cmFjZV9ycV9tZXJnZSwgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9ycV9pc3N1ZTtcbiBcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX3JlcXVldWUoYmxrX2FkZF90cmFjZV9ycV9yZXF1ZXVlLCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3JxX21lcmdlO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfY29tcGxldGUoYmxrX2FkZF90cmFjZV9ycV9jb21wbGV0ZSwgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9ycV9yZXF1ZXVlO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2NvbXBsZXRlKGJsa19hZGRfdHJhY2VfYmlvX2NvbXBsZXRlLCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3JxX2NvbXBsZXRlO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2JhY2ttZXJnZShibGtfYWRkX3RyYWNlX2Jpb19iYWNrbWVyZ2UsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfYmlvX2NvbXBsZXRlO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2Zyb250bWVyZ2UoYmxrX2FkZF90cmFjZV9iaW9fZnJvbnRtZXJnZSwgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9iaW9fYmFja21lcmdlO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX3F1ZXVlKGJsa19hZGRfdHJhY2VfYmlvX3F1ZXVlLCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X2Jpb19mcm9udG1lcmdlO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfZ2V0cnEoYmxrX2FkZF90cmFjZV9nZXRycSwgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9iaW9fcXVldWU7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibGtfem9uZV9hcHBlbmRfdXBkYXRlX3JlcXVlc3RfYmlvKFxuIFx0XHRibGtfYWRkX3RyYWNlX3pvbmVfdXBkYXRlX3JlcXVlc3QsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfZ2V0cnE7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9kaXNrX3pvbmVfd3BsdWdfYWRkX2JpbyhibGtfYWRkX3RyYWNlX3pvbmVfcGx1ZyxcbiBcdFx0XHRcdFx0XHQgICAgIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfem9uZV91cGRhdGVfcmVxdWVzdDtcbiBcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsa196b25lX3dwbHVnX2JpbyhibGtfYWRkX3RyYWNlX3pvbmVfdW5wbHVnLFxuIFx0XHRcdFx0XHRcdE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfem9uZV9wbHVnO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcGx1ZyhibGtfYWRkX3RyYWNlX3BsdWcsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfem9uZV91bnBsdWc7XG4gXHRyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWcoYmxrX2FkZF90cmFjZV91bnBsdWcsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcGx1ZztcbiBcdHJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3NwbGl0KGJsa19hZGRfdHJhY2Vfc3BsaXQsIE5VTEwpO1xuLVx0V0FSTl9PTihyZXQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfdW5wbHVnO1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX3JlbWFwKGJsa19hZGRfdHJhY2VfYmlvX3JlbWFwLCBOVUxMKTtcbi1cdFdBUk5fT04ocmV0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3NwbGl0O1xuIFx0cmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfcmVtYXAoYmxrX2FkZF90cmFjZV9ycV9yZW1hcCwgTlVMTCk7XG4tXHRXQVJOX09OKHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9iaW9fcmVtYXA7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitvdXRfYmlvX3JlbWFwOlxuK1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fcmVtYXAoYmxrX2FkZF90cmFjZV9iaW9fcmVtYXAsIE5VTEwpO1xuK291dF9zcGxpdDpcbitcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfc3BsaXQoYmxrX2FkZF90cmFjZV9zcGxpdCwgTlVMTCk7XG4rb3V0X3VucGx1ZzpcbitcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfdW5wbHVnKGJsa19hZGRfdHJhY2VfdW5wbHVnLCBOVUxMKTtcbitvdXRfcGx1ZzpcbitcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcGx1ZyhibGtfYWRkX3RyYWNlX3BsdWcsIE5VTEwpO1xuK291dF96b25lX3VucGx1ZzpcbitcdHVucmVnaXN0ZXJfdHJhY2VfYmxrX3pvbmVfd3BsdWdfYmlvKGJsa19hZGRfdHJhY2Vfem9uZV91bnBsdWcsIE5VTEwpO1xuK291dF96b25lX3BsdWc6XG4rXHR1bnJlZ2lzdGVyX3RyYWNlX2Rpc2tfem9uZV93cGx1Z19hZGRfYmlvKGJsa19hZGRfdHJhY2Vfem9uZV9wbHVnLCBOVUxMKTtcbitvdXRfem9uZV91cGRhdGVfcmVxdWVzdDpcbitcdHVucmVnaXN0ZXJfdHJhY2VfYmxrX3pvbmVfYXBwZW5kX3VwZGF0ZV9yZXF1ZXN0X2JpbyhcbitcdFx0YmxrX2FkZF90cmFjZV96b25lX3VwZGF0ZV9yZXF1ZXN0LCBOVUxMKTtcbitvdXRfZ2V0cnE6XG4rXHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2dldHJxKGJsa19hZGRfdHJhY2VfZ2V0cnEsIE5VTEwpO1xuK291dF9iaW9fcXVldWU6XG4rXHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19xdWV1ZShibGtfYWRkX3RyYWNlX2Jpb19xdWV1ZSwgTlVMTCk7XG4rb3V0X2Jpb19mcm9udG1lcmdlOlxuK1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fZnJvbnRtZXJnZShibGtfYWRkX3RyYWNlX2Jpb19mcm9udG1lcmdlLCBOVUxMKTtcbitvdXRfYmlvX2JhY2ttZXJnZTpcbitcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2JhY2ttZXJnZShibGtfYWRkX3RyYWNlX2Jpb19iYWNrbWVyZ2UsIE5VTEwpO1xuK291dF9iaW9fY29tcGxldGU6XG4rXHR1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19jb21wbGV0ZShibGtfYWRkX3RyYWNlX2Jpb19jb21wbGV0ZSwgTlVMTCk7XG4rb3V0X3JxX2NvbXBsZXRlOlxuK1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9jb21wbGV0ZShibGtfYWRkX3RyYWNlX3JxX2NvbXBsZXRlLCBOVUxMKTtcbitvdXRfcnFfcmVxdWV1ZTpcbitcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfcmVxdWV1ZShibGtfYWRkX3RyYWNlX3JxX3JlcXVldWUsIE5VTEwpO1xuK291dF9ycV9tZXJnZTpcbitcdHVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfbWVyZ2UoYmxrX2FkZF90cmFjZV9ycV9tZXJnZSwgTlVMTCk7XG4rb3V0X3JxX2lzc3VlOlxuK1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9pc3N1ZShibGtfYWRkX3RyYWNlX3JxX2lzc3VlLCBOVUxMKTtcbitvdXRfcnFfaW5zZXJ0OlxuK1x0dW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9pbnNlcnQoYmxrX2FkZF90cmFjZV9ycV9pbnNlcnQsIE5VTEwpO1xuK1x0dHJhY2Vwb2ludF9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyKCk7XG4rb3V0OlxuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYmxrX3VucmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZClcbkBAIC0xOTE2LDggKzIwMDQsMTEgQEAgc3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXBfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4gXG4gXHRibGtfdHJhY2Vfc2V0dXBfbGJhKGJ0LCBiZGV2KTtcbiBcbitcdHJldCA9IGdldF9wcm9iZV9yZWYoKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZnJlZV9idDtcbitcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihxLVx1MDAzZWJsa190cmFjZSwgYnQpO1xuLVx0Z2V0X3Byb2JlX3JlZigpO1xuIFx0cmV0dXJuIDA7XG4gXG4gZnJlZV9idDpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjI5OjQ3Ljk1MDI3NDc3MloiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTgwMDA0OTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQkxLVFJBQ0UgUGF0Y2ggZm9yIEVycm9yIEhhbmRsaW5nIGFuZCBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0aWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhleSd2ZSBtYWRlIHNvbWUgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSB0cmFjZXBvaW50IHJlZ2lzdHJhdGlvbiBwcm9jZXNzLCBhbmQgSSBuZWVkIHRvIGFzc2VzcyB0aGUgaW1wYWN0LlxuXG5GaXJzdCwgSSBzZWUgYGJsa19yZWdpc3Rlcl90cmFjZXBvaW50c2AgaGFzIGJlZW4gYWx0ZXJlZC4gUHJldmlvdXNseSwgaXQganVzdCByZXR1cm5lZCB2b2lkLCBhbmQgYW55IGVycm9ycyB3ZXJlIHNpbXBseSBXQVJOJ2QuIE5vdywgaXQgcmV0dXJucyBhbiBpbnQsIGFsbG93aW5nIGZvciBleHBsaWNpdCBlcnJvciBjb2Rlcy4gSW1wb3J0YW50bHksIGlmIHJlZ2lzdGVyaW5nIGEgdHJhY2Vwb2ludCBmYWlscywgaXQgKnVud2luZHMqIHRoZSBhbHJlYWR5IHJlZ2lzdGVyZWQgb25lcyBhbmQgcHJvcGFnYXRlcyB0aGUgZXJyb3IuIEdvb2QsIHRoYXQncyBhIGRlZmluaXRlIGltcHJvdmVtZW50IGluIHJvYnVzdG5lc3MuXG5cbk5leHQsIGBnZXRfcHJvYmVfcmVmYCBub3cgcmV0dXJucyBhbiBpbnQgdG9vLiBJdHMgbG9naWMgc2VlbXMgZGVzaWduZWQgdG8gaGFuZGxlIHRoZSBlcnJvciByZXR1cm4gZnJvbSBgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzYCB3aGVuIGBibGtfcHJvYmVzX3JlZmAgaXMgMS4gSWYgcmVnaXN0cmF0aW9uIGZhaWxlZCwgaXQgZGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IGFuZCBhbHNvIHJldHVybnMgdGhlIGVycm9yLlxuXG5UaGVuLCBgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplYCBpcyBtb2RpZmllZCwgYWxzbyByZXR1cm5pbmcgYW4gYGludGAgbm93LiBJdCBjYWxscyBgZ2V0X3Byb2JlX3JlZigpYCwgYW5kIGlmICp0aGF0KiBmYWlscywgaXQgcmV0dXJucyB0aGUgZXJyb3IgKmJlZm9yZSogdGhlIGByY3VfYXNzaWduX3BvaW50ZXJgIGNhbGwuIFRoaXMgaXMga2V5LCBhcyB3ZSBhdm9pZCBzb21lIGZvcm0gb2YgYSByYWNlIGNvbmRpdGlvbiBhbmQgYSBwb3NzaWJsZSBjb3JydXB0aW9uLlxuXG5JIG5vdGljZSB0aGF0IHRoZSBjYWxsZXJzIG9mIGBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemVgIOKAkyBgYmxrX3RyYWNlX3NldHVwYCwgYGJsa190cmFjZV9zZXR1cDJgLCBhbmQgYGNvbXBhdF9ibGtfdHJhY2Vfc2V0dXBgIOKAkyBhcmUgYWxsIHVwZGF0ZWQgdG8gY2hlY2sgdGhpcyByZXR1cm4gdmFsdWUuIElmIGBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemVgIGZhaWxzLCB0aGVuIHRoZXkgZnJlZSB0aGUgdHJhY2Ugc3RydWN0dXJlLCB1bmxvY2sgZGVidWdmcywgYW5kIHByb3BhZ2F0ZSB0aGUgZXJyb3IuIEFsc28sIEkgc2VlIGBibGtfdHJhY2Vfc2V0dXBfcXVldWVgIG5vdyBoYW5kbGVzIHRoZSBmYWlsdXJlIG9mIGBnZXRfcHJvYmVfcmVmKClgIGJ5IGp1bXBpbmcgdG8gYGZyZWVfYnRgLiBBbGwgb2YgdGhlc2UgdGhpbmdzIGxvb2sgZ29vZCwgYXQgYSBnbGFuY2UsIGZyb20gYSBjb250cm9sIGZsb3cgcGVyc3BlY3RpdmUuXG5cbk9rYXksIG5vdyBmb3IgdGhlIHBhcnQgdGhhdCByZWFsbHkgaW50ZXJlc3RzIG1lOiBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBUaGUgcHJpbWFyeSB0aGluZyBJIHdhbnQgdG8gZXZhbHVhdGUgaXMgdGhlIHBvc3NpYmlsaXR5IG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvcm1hdGlvbiBsZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgYSBjb21tb24gY2xhc3Mgb2YgYnVncyBpbiBrZXJuZWwgY29kZS5cblxuU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBjb2RlIGludGVyYWN0cyB3aXRoIHVzZXItc3BhY2UgZGF0YSBzdHJ1Y3R1cmVzLiBNeSBmb2N1cyBpcyBvbiB0aGUgYGJsa190cmFjZV9zZXR1cGAgZnVuY3Rpb24uIFRoZSBjb2RlIGxvb2tzIGxpa2UgdGhpczpcblxuYGBgY1xuaW50IGJsa190cmFjZV9zZXR1cChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSwgZGV2X3QgZGV2LFxuLi4uXG5cdHJldCA9IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAxLCBidCwgXHUwMDI2YnV0czIpO1xuXHRpZiAocmV0KSB7XG5cdFx0YmxrX3RyYWNlX2ZyZWUocSwgYnQpO1xuXHRcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XG5cdFx0cmV0dXJuIHJldDtcblx0fVxuXHRzdHJzY3B5KGJ1dHMubmFtZSwgYnV0czIubmFtZSwgQkxLVFJBQ0VfQkRFVl9TSVpFKTtcblx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcblxuXHRpZiAoY29weV90b191c2VyKGFyZywgXHUwMDI2YnV0cywgc2l6ZW9mKGJ1dHMpKSlcbi4uLlxuYGBgXG5cblNvLCBJ4oCZbSB6ZXJvaW5nIGluIG9uIHRoaXMgYGNvcHlfdG9fdXNlcmAgY2FsbC4gSSBzZWUgdGhlIGNvZGUgY2FsbHMgYGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZWAuIElmIHRoYXQgZmFpbHMsIHRoZSBwcm9ncmFtIHJldHVybnMuIEhvd2V2ZXIsIGJlZm9yZSB0aGUgYGNvcHlfdG9fdXNlcmAgY2FsbCwgYHN0cnNjcHlgIGlzIHVzZWQgdG8gY29weSBmcm9tIGBidXRzMi5uYW1lYCB0byBgYnV0cy5uYW1lYC4gTm93LCBpZiBgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplYCBmYWlscywgaXMgdGhlIGRhdGEgaW4gdGhlIGBidXRzMmAgc3RydWN0dXJlIHdlbGwgZGVmaW5lZCwgb3IgZG9lcyBpdCBoYXZlIGdhcmJhZ2UgZGF0YT8gVGhpcyBoYXMgYSBnb29kIGNoYW5jZSBvZiBiZWluZyB3aGVyZSBhIGJ1ZyBjYW4gYmUgbG9jYXRlZC4gSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gYGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jYCBhcm91bmQgbGluZXMgNzgwIHRvIDkyMCB0byBjaGVjayB0aGUgY29udGV4dCBhcm91bmQgdGhlc2UgdmFyaWFibGVzIHRvIGRldGVybWluZSBpZiBpdCBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkuIE15IGh1bmNoIGlzIHRoYXQgdGhpcyBpcyB0aGUgcG9pbnQgSSdsbCBmaW5kIGFuIGlzc3VlIGlmIHRoZXJlIGlzIG9uZS4gTGV0J3Mgc3RhcnQgdGhlIHJlYWRpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNTcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjoyOTo1My41MzAyODMxMTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9ibGt0cmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NzA6XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHEtXFx1MDAzZWJsa190cmFjZSwgYnQpO1xcbiA3NzE6XFx0XFx0cmV0dXJuIDA7XFxuIDc3MjpcXHR9XFxuIDc3MzpcXHRcXG4gNzc0OlxcdGludCBibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldixcXG4gNzc1OlxcdFxcdFxcdCAgICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxcbiA3NzY6XFx0XFx0XFx0ICAgIGNoYXIgX191c2VyICphcmcpXFxuIDc3NzpcXHR7XFxuIDc3ODpcXHRcXHRzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAyIGJ1dHMyO1xcbiA3Nzk6XFx0XFx0c3RydWN0IGJsa191c2VyX3RyYWNlX3NldHVwIGJ1dHM7XFxuIDc4MDpcXHRcXHRzdHJ1Y3QgYmxrX3RyYWNlICpidDtcXG4gNzgxOlxcdFxcdHVuc2lnbmVkIGludCBtZW1mbGFncztcXG4gNzgyOlxcdFxcdGludCByZXQ7XFxuIDc4MzpcXHRcXG4gNzg0OlxcdFxcdHJldCA9IGNvcHlfZnJvbV91c2VyKFxcdTAwMjZidXRzLCBhcmcsIHNpemVvZihidXRzKSk7XFxuIDc4NTpcXHRcXHRpZiAocmV0KVxcbiA3ODY6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDc4NzpcXHRcXG4gNzg4OlxcdFxcdGlmICghYnV0cy5idWZfc2l6ZSB8fCAhYnV0cy5idWZfbnIpXFxuIDc4OTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzkwOlxcdFxcbiA3OTE6XFx0XFx0YnV0czIgPSAoc3RydWN0IGJsa191c2VyX3RyYWNlX3NldHVwMikge1xcbiA3OTI6XFx0XFx0XFx0LmFjdF9tYXNrID0gYnV0cy5hY3RfbWFzayxcXG4gNzkzOlxcdFxcdFxcdC5idWZfc2l6ZSA9IGJ1dHMuYnVmX3NpemUsXFxuIDc5NDpcXHRcXHRcXHQuYnVmX25yID0gYnV0cy5idWZfbnIsXFxuIDc5NTpcXHRcXHRcXHQuc3RhcnRfbGJhID0gYnV0cy5zdGFydF9sYmEsXFxuIDc5NjpcXHRcXHRcXHQuZW5kX2xiYSA9IGJ1dHMuZW5kX2xiYSxcXG4gNzk3OlxcdFxcdFxcdC5waWQgPSBidXRzLnBpZCxcXG4gNzk4OlxcdFxcdH07XFxuIDc5OTpcXHRcXG4gODAwOlxcdFxcdG1lbWZsYWdzID0gYmxrX2RlYnVnZnNfbG9jayhxKTtcXG4gODAxOlxcdFxcdGJ0ID0gYmxrX3RyYWNlX3NldHVwX3ByZXBhcmUocSwgbmFtZSwgZGV2LCBidXRzLmJ1Zl9zaXplLCBidXRzLmJ1Zl9ucixcXG4gODAyOlxcdFxcdFxcdFxcdFxcdCAgICAgYmRldik7XFxuIDgwMzpcXHRcXHRpZiAoSVNfRVJSKGJ0KSkge1xcbiA4MDQ6XFx0XFx0XFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcXG4gODA1OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGJ0KTtcXG4gODA2OlxcdFxcdH1cXG4gODA3OlxcdFxcdHJldCA9IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAxLCBidCwgXFx1MDAyNmJ1dHMyKTtcXG4gODA4OlxcdFxcdGlmIChyZXQpIHtcXG4gODA5OlxcdFxcdFxcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcXG4gODEwOlxcdFxcdFxcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XFxuIDgxMTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA4MTI6XFx0XFx0fVxcbiA4MTM6XFx0XFx0c3Ryc2NweShidXRzLm5hbWUsIGJ1dHMyLm5hbWUsIEJMS1RSQUNFX0JERVZfU0laRSk7XFxuIDgxNDpcXHRcXHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xcbiA4MTU6XFx0XFxuIDgxNjpcXHRcXHRpZiAoY29weV90b191c2VyKGFyZywgXFx1MDAyNmJ1dHMsIHNpemVvZihidXRzKSkpIHtcXG4gODE3OlxcdFxcdFxcdGJsa190cmFjZV9yZW1vdmUocSk7XFxuIDgxODpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gODE5OlxcdFxcdH1cXG4gODIwOlxcdFxcdHJldHVybiAwO1xcbiA4MjE6XFx0fVxcbiA4MjI6XFx0RVhQT1JUX1NZTUJPTF9HUEwoYmxrX3RyYWNlX3NldHVwKTtcXG4gODIzOlxcdFxcbiA4MjQ6XFx0c3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXAyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsXFxuIDgyNTpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgY2hhciBfX3VzZXIgKmFyZylcXG4gODI2OlxcdHtcXG4gODI3OlxcdFxcdHN0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cDIgYnV0czI7XFxuIDgyODpcXHRcXHRzdHJ1Y3QgYmxrX3RyYWNlICpidDtcXG4gODI5OlxcdFxcdHVuc2lnbmVkIGludCBtZW1mbGFncztcXG4gODMwOlxcdFxcdGludCByZXQ7XFxuIDgzMTpcXHRcXG4gODMyOlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2YnV0czIsIGFyZywgc2l6ZW9mKGJ1dHMyKSkpXFxuIDgzMzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gODM0OlxcdFxcbiA4MzU6XFx0XFx0aWYgKCFidXRzMi5idWZfc2l6ZSB8fCAhYnV0czIuYnVmX25yKVxcbiA4MzY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDgzNzpcXHRcXG4gODM4OlxcdFxcdGlmIChidXRzMi5mbGFncyAhPSAwKVxcbiA4Mzk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDg0MDpcXHRcXG4gODQxOlxcdFxcdG1lbWZsYWdzID0gYmxrX2RlYnVnZnNfbG9jayhxKTtcXG4gODQyOlxcdFxcdGJ0ID0gYmxrX3RyYWNlX3NldHVwX3ByZXBhcmUocSwgbmFtZSwgZGV2LCBidXRzMi5idWZfc2l6ZSwgYnV0czIuYnVmX25yLFxcbiA4NDM6XFx0XFx0XFx0XFx0XFx0ICAgICBiZGV2KTtcXG4gODQ0OlxcdFxcdGlmIChJU19FUlIoYnQpKSB7XFxuIDg0NTpcXHRcXHRcXHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xcbiA4NDY6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoYnQpO1xcbiA4NDc6XFx0XFx0fVxcbiA4NDg6XFx0XFx0cmV0ID0gYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHEsIG5hbWUsIDIsIGJ0LCBcXHUwMDI2YnV0czIpO1xcbiA4NDk6XFx0XFx0aWYgKHJldCkge1xcbiA4NTA6XFx0XFx0XFx0YmxrX3RyYWNlX2ZyZWUocSwgYnQpO1xcbiA4NTE6XFx0XFx0XFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcXG4gODUyOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDg1MzpcXHRcXHR9XFxuIDg1NDpcXHRcXHRibGtfZGVidWdmc191bmxvY2socSwgbWVtZmxhZ3MpO1xcbiA4NTU6XFx0XFxuIDg1NjpcXHRcXHRpZiAoY29weV90b191c2VyKGFyZywgXFx1MDAyNmJ1dHMyLCBzaXplb2YoYnV0czIpKSkge1xcbiA4NTc6XFx0XFx0XFx0YmxrX3RyYWNlX3JlbW92ZShxKTtcXG4gODU4OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiA4NTk6XFx0XFx0fVxcbiA4NjA6XFx0XFx0cmV0dXJuIDA7XFxuIDg2MTpcXHR9XFxuIDg2MjpcXHRcXG4gODYzOlxcdCNpZiBkZWZpbmVkKENPTkZJR19DT01QQVQpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1g4Nl82NClcXG4gODY0OlxcdHN0YXRpYyBpbnQgY29tcGF0X2Jsa190cmFjZV9zZXR1cChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSxcXG4gODY1OlxcdFxcdFxcdFxcdFxcdCAgZGV2X3QgZGV2LCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxcbiA4NjY6XFx0XFx0XFx0XFx0XFx0ICBjaGFyIF9fdXNlciAqYXJnKVxcbiA4Njc6XFx0e1xcbiA4Njg6XFx0XFx0c3RydWN0IGJsa191c2VyX3RyYWNlX3NldHVwMiBidXRzMjtcXG4gODY5OlxcdFxcdHN0cnVjdCBjb21wYXRfYmxrX3VzZXJfdHJhY2Vfc2V0dXAgY2J1dHM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjI5OjUzLjUzMDQzMDE1NloiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTE1MDM5NjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGlmIEkgYW0gdGhlIG9uZSB0aGlua2luZyBpdCwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipGb2N1c2VkIFJldmlldyBvZiBTcGVjaWZpYyBDb2RlIExpbmVzKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gdGhvcm91Z2ggaGVyZS4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgdGhpcyBpc3N1ZSwgYW5kIGNvbnNpZGVyaW5nIHdoYXQgSSBrbm93IGFib3V0IHRoZSBzeXN0ZW0ncyBhcmNoaXRlY3R1cmUsIEkgd2FudCB0byB6ZXJvIGluIG9uIGEgcGFydGljdWxhciBzZWN0aW9uIG9mIGNvZGUuIFNwZWNpZmljYWxseSwgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGxpbmVzIDg3MCB0aHJvdWdoIDkxMC4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSBhbmFseXplIHRoZSBsb2dpYyBpbXBsZW1lbnRlZCB0aGVyZSwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgb3Igc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIG1vZHVsZXMuIEkgZXhwZWN0IHRoZXJlIHRvIGJlIHRoZSByb290IG9mIHRoZSBpc3N1ZSB0aGVyZS4gVGltZSB0byBkaXZlIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDUzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjoyOTo1Ni40NDU0NzIxMThaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9ibGt0cmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg3MDpcXHRcXHRzdHJ1Y3QgYmxrX3RyYWNlICpidDtcXG4gODcxOlxcdFxcdHVuc2lnbmVkIGludCBtZW1mbGFncztcXG4gODcyOlxcdFxcdGludCByZXQ7XFxuIDg3MzpcXHRcXG4gODc0OlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2Y2J1dHMsIGFyZywgc2l6ZW9mKGNidXRzKSkpXFxuIDg3NTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gODc2OlxcdFxcbiA4Nzc6XFx0XFx0aWYgKCFjYnV0cy5idWZfc2l6ZSB8fCAhY2J1dHMuYnVmX25yKVxcbiA4Nzg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDg3OTpcXHRcXG4gODgwOlxcdFxcdGJ1dHMyID0gKHN0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cDIpIHtcXG4gODgxOlxcdFxcdFxcdC5hY3RfbWFzayA9IGNidXRzLmFjdF9tYXNrLFxcbiA4ODI6XFx0XFx0XFx0LmJ1Zl9zaXplID0gY2J1dHMuYnVmX3NpemUsXFxuIDg4MzpcXHRcXHRcXHQuYnVmX25yID0gY2J1dHMuYnVmX25yLFxcbiA4ODQ6XFx0XFx0XFx0LnN0YXJ0X2xiYSA9IGNidXRzLnN0YXJ0X2xiYSxcXG4gODg1OlxcdFxcdFxcdC5lbmRfbGJhID0gY2J1dHMuZW5kX2xiYSxcXG4gODg2OlxcdFxcdFxcdC5waWQgPSBjYnV0cy5waWQsXFxuIDg4NzpcXHRcXHR9O1xcbiA4ODg6XFx0XFxuIDg4OTpcXHRcXHRtZW1mbGFncyA9IGJsa19kZWJ1Z2ZzX2xvY2socSk7XFxuIDg5MDpcXHRcXHRidCA9IGJsa190cmFjZV9zZXR1cF9wcmVwYXJlKHEsIG5hbWUsIGRldiwgYnV0czIuYnVmX3NpemUsIGJ1dHMyLmJ1Zl9ucixcXG4gODkxOlxcdFxcdFxcdFxcdFxcdCAgICAgYmRldik7XFxuIDg5MjpcXHRcXHRpZiAoSVNfRVJSKGJ0KSkge1xcbiA4OTM6XFx0XFx0XFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcXG4gODk0OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGJ0KTtcXG4gODk1OlxcdFxcdH1cXG4gODk2OlxcdFxcdHJldCA9IGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShxLCBuYW1lLCAxLCBidCwgXFx1MDAyNmJ1dHMyKTtcXG4gODk3OlxcdFxcdGlmIChyZXQpIHtcXG4gODk4OlxcdFxcdFxcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcXG4gODk5OlxcdFxcdFxcdGJsa19kZWJ1Z2ZzX3VubG9jayhxLCBtZW1mbGFncyk7XFxuIDkwMDpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA5MDE6XFx0XFx0fVxcbiA5MDI6XFx0XFx0YmxrX2RlYnVnZnNfdW5sb2NrKHEsIG1lbWZsYWdzKTtcXG4gOTAzOlxcdFxcbiA5MDQ6XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFxcdTAwMjZidXRzMi5uYW1lLCBBUlJBWV9TSVpFKGJ1dHMyLm5hbWUpKSkge1xcbiA5MDU6XFx0XFx0XFx0YmxrX3RyYWNlX3JlbW92ZShxKTtcXG4gOTA2OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiA5MDc6XFx0XFx0fVxcbiA5MDg6XFx0XFxuIDkwOTpcXHRcXHRyZXR1cm4gMDtcXG4gOTEwOlxcdH1cXG4gOTExOlxcdCNlbmRpZlxcbiA5MTI6XFx0XFxuIDkxMzpcXHRzdGF0aWMgaW50IF9fYmxrX3RyYWNlX3N0YXJ0c3RvcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IHN0YXJ0KVxcbiA5MTQ6XFx0e1xcbiA5MTU6XFx0XFx0c3RydWN0IGJsa190cmFjZSAqYnQ7XFxuIDkxNjpcXHRcXG4gOTE3OlxcdFxcdGJ0ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChxLVxcdTAwM2VibGtfdHJhY2UsXFxuIDkxODpcXHRcXHRcXHRcXHRcXHQgICAgICAgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZxLVxcdTAwM2VkZWJ1Z2ZzX211dGV4KSk7XFxuIDkxOTpcXHRcXHRpZiAoYnQgPT0gTlVMTClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6Mjk6NTYuNDQ1NjI4MjE4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0ODA5ODQzNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gQmxvY2sgVHJhY2luZyBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBNeSBmb2N1cyByaWdodCBub3cgaXMgb24gdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgZm9yIHRoZSBibG9jayB0cmFjaW5nIGluZnJhc3RydWN0dXJlLiBJIGtub3cgdGhlIHJlbGV2YW50IHNlY3Rpb24gaXMgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgYGJsa190cmFjZV9zZXR1cF9xdWV1ZWAgZnVuY3Rpb24uIFRvIHplcm8gaW4gb24gdGhlIGtleSBsb2dpYywgSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmVmZXJlbmNlIGFyb3VuZCBsaW5lcyAxOTkwIHRocm91Z2ggMjAyMC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSdtIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyBxdWV1ZXMgYXJlIHNldCB1cCBpbiBkZXRhaWwgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MzQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjMwOjAwLjkyNjYxNTMxNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk4MDpcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4xOTgxOlxcdFxcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcXG4xOTgyOlxcdFxcdHJldHVybiAwO1xcbjE5ODM6XFx0fVxcbjE5ODQ6XFx0XFxuMTk4NTpcXHQvKlxcbjE5ODY6XFx0ICogU2V0dXAgZXZlcnl0aGluZyByZXF1aXJlZCB0byBzdGFydCB0cmFjaW5nXFxuMTk4NzpcXHQgKi9cXG4xOTg4OlxcdHN0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbjE5ODk6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXFxuMTk5MDpcXHR7XFxuMTk5MTpcXHRcXHRzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IE5VTEw7XFxuMTk5MjpcXHRcXHRpbnQgcmV0ID0gLUVOT01FTTtcXG4xOTkzOlxcdFxcbjE5OTQ6XFx0XFx0YnQgPSBremFsbG9jX29iaigqYnQpO1xcbjE5OTU6XFx0XFx0aWYgKCFidClcXG4xOTk2OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjE5OTc6XFx0XFxuMTk5ODpcXHRcXHRidC1cXHUwMDNlbXNnX2RhdGEgPSBfX2FsbG9jX3BlcmNwdShCTEtfVE5fTUFYX01TRywgX19hbGlnbm9mX18oY2hhcikpO1xcbjE5OTk6XFx0XFx0aWYgKCFidC1cXHUwMDNlbXNnX2RhdGEpXFxuMjAwMDpcXHRcXHRcXHRnb3RvIGZyZWVfYnQ7XFxuMjAwMTpcXHRcXG4yMDAyOlxcdFxcdGJ0LVxcdTAwM2VkZXYgPSBiZGV2LVxcdTAwM2ViZF9kZXY7XFxuMjAwMzpcXHRcXHRidC1cXHUwMDNlYWN0X21hc2sgPSAodTE2KS0xO1xcbjIwMDQ6XFx0XFxuMjAwNTpcXHRcXHRibGtfdHJhY2Vfc2V0dXBfbGJhKGJ0LCBiZGV2KTtcXG4yMDA2OlxcdFxcbjIwMDc6XFx0XFx0cmV0ID0gZ2V0X3Byb2JlX3JlZigpO1xcbjIwMDg6XFx0XFx0aWYgKHJldClcXG4yMDA5OlxcdFxcdFxcdGdvdG8gZnJlZV9idDtcXG4yMDEwOlxcdFxcbjIwMTE6XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHEtXFx1MDAzZWJsa190cmFjZSwgYnQpO1xcbjIwMTI6XFx0XFx0cmV0dXJuIDA7XFxuMjAxMzpcXHRcXG4yMDE0OlxcdGZyZWVfYnQ6XFxuMjAxNTpcXHRcXHRibGtfdHJhY2VfZnJlZShxLCBidCk7XFxuMjAxNjpcXHRcXHRyZXR1cm4gcmV0O1xcbjIwMTc6XFx0fVxcbjIwMTg6XFx0XFxuMjAxOTpcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjozMDowMC45MjY4Mzc4ODRaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzU5Mzk1NzQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJsa3RyYWNlIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0J3MgYWxsIGFib3V0IGltcHJvdmluZyBlcnJvciBoYW5kbGluZyBkdXJpbmcgYmxrdHJhY2UgdHJhY2Vwb2ludCByZWdpc3RyYXRpb24uIFByZXZpb3VzbHksIGEgZmFpbGVkIHJlZ2lzdHJhdGlvbiB3YXMganVzdCBhIGBXQVJOX09OYCwgd2hpY2ggaXMgaGFyZGx5IHJvYnVzdC4gTm93LCBgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzYCBhY3R1YWxseSByZXR1cm5zIGFuIGVycm9yIGNvZGUsIGFuZCBjcnVjaWFsbHksICp1bnJlZ2lzdGVycyogYW55IGFscmVhZHkgcmVnaXN0ZXJlZCB0cmFjZXBvaW50cyBpZiBvbmUgZmFpbHMuIFRoaXMgaXMgYSBzb2xpZCBpbXByb3ZlbWVudCwgcHJldmVudGluZyBwYXJ0aWFsIHRyYWNlcG9pbnQgc2V0dXBzLiBUaGUgYGdldF9wcm9iZV9yZWZgIGZ1bmN0aW9uLCBhbmQgdGhlIGNhbGxzIHRvIHRoaXMgYnkgdmFyaW91cyBmdW5jdGlvbnMsIGFyZSBhbGwgY2hlY2tpbmcgdGhlIGVycm9yIGNvZGVzIGFuZCBlbnN1cmluZyBwcm9wZXIgdW53aW5kaW5nIG9uIGZhaWx1cmUuIEdvb2QuXG5cblRoZSBtb3JlIHByZXNzaW5nIHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgZWl0aGVyIHRvIHVzZXIgb3Igd2l0aGluIHRoZSBrZXJuZWwuIExldCdzIG1ldGhvZGljYWxseSBsb29rOlxuXG4xLiAgYGNvcHlfdG9fdXNlcmAgY2FsbHM6IFNlZW1zIGxpa2UgZXZlcnl0aGluZyBpcyBndWFyZGVkIHByb3Blcmx5LiBJbiBgYmxrX3RyYWNlX3NldHVwYCBhbmQgYGJsa190cmFjZV9zZXR1cDJgLCBhbnkgZXJyb3JzIHByb3BhZ2F0ZSAqYmVmb3JlKiByZWFjaGluZyBhbnkgYGNvcHlfdG9fdXNlcmAgY2FsbC4gQW5kIHRoZSBkYXRhIGJlaW5nIGNvcGllZCBpcyBlaXRoZXIgaW5pdGlhbGl6ZWQgZnJvbSB1c2VyIGlucHV0ICh2YWxpZGF0ZWQpIG9yIGluaXRpYWxpemVkIGJlZm9yZSBjb3B5aW5nLiBObyBzdXJwcmlzZXMgaGVyZS5cbjIuICBUcmFjZXBvaW50IHVud2luZGluZzogVGhlIHBhdGNoIGNvcnJlY3RseSB1bnJlZ2lzdGVycyBmdW5jdGlvbiBwb2ludGVycyBvciBjYWxsYmFja3Mgb24gZXJyb3IsIG5vdCB1bmluaXRpYWxpemVkIGRhdGEgb3Igc3RydWN0dXJlcy5cbjMuICBSZXR1cm4gY29kZXM6IEV2ZXJ5dGhpbmcgbG9va3MgY29uc2lzdGVudDsgYHJldGAgaXMgY29ycmVjdGx5IGFzc2lnbmVkIGluIGFsbCBicmFuY2hlcy5cbjQuICBTdHJ1Y3RzOiBObyBuZXcgc3RydWN0cyBvciB1bmluaXRpYWxpemVkIGZpZWxkcyBpbnRyb2R1Y2VkLiBFeGNlbGxlbnQuXG5cbk5vdywgZm9yIEtNU0FOIGFwcGxpY2FiaWxpdHksIG15IGd1dCBmZWVsaW5nIHNheXMgdGhpcyBpcyBhIFwibm8uXCIgVGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCBlcnJvciB1bndpbmRpbmcsIHRyYWNlcG9pbnQgcmVnaXN0cmF0aW9uLCBhbmQgZXJyb3IgaGFuZGxpbmcuIEFueSBidWdzIHdvdWxkIGxlYW4gdG93YXJkIHJlc291cmNlIGxlYWtzLCBlcnJvciBwYXRoIGhhbmRsaW5nIGlzc3Vlcywgb3IgbWF5YmUgbG9ja2luZyBwcm9ibGVtcyBvciB1c2UtYWZ0ZXItZnJlZSwgbm90IHRoZSBraW5kIG9mIHRoaW5ncyBLTVNBTiB0eXBpY2FsbHkgY2F0Y2hlcywgbm9yIGRvIEkgc2VlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkLiBTdGFuZGFyZCB0b29scywgS0FTQU4sIGFuZCBMT0NLREVQIGFyZSBnb2luZyB0byBiZSBtb3JlIHVzZWZ1bCBoZXJlLlxuXG5JJ20gY29uZmlkZW50OyBJJ2xsIHNldCBgTmVlZHNLTVNBTiA9IGZhbHNlYCB3aXRoIGEgY2xlYXIgY29uc2NpZW5jZS4gVGhpcyBpcyBzb3VuZCwgd2VsbC1yZWFzb25lZCwgYW5kIGEgZGVmaW5pdGUgaW1wcm92ZW1lbnQgdG8gdGhlIGVycm9yIGhhbmRsaW5nIG9mIGJsa3RyYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE1MCwiT3V0cHV0VG9rZW5zIjoxOTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjozMDowOC41MjA3OTc0ODhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tpbmcgYW5kIHVud2luZGluZyB0byBibGt0cmFjZSB0cmFjZXBvaW50IHJlZ2lzdHJhdGlvbiAoYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzLCBnZXRfcHJvYmVfcmVmLCBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUsIGJsa190cmFjZV9zZXR1cF9xdWV1ZSkuIEluIGZhaWx1cmUgY2FzZXMsIGl0IHByb3Blcmx5IHJvbGxzIGJhY2sgcmVnaXN0ZXJlZCB0cmFjZXBvaW50cywgZGVjcmVtZW50cyBwcm9iZSByZWZlcmVuY2UgY291bnRzLCBjbGVhbnMgdXAgYWxsb2NhdGVkIGJsa190cmFjZSBzdHJ1Y3R1cmVzIHZpYSBibGtfdHJhY2VfZnJlZSwgYW5kIHJldHVybnMgZXJyb3IgY29kZXMgYmVmb3JlIGFueSBkYXRhIGlzIGNvcGllZCBiYWNrIHRvIHVzZXIgc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYXJlIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgYWxsb2NhdGlvbnMgb3IgY29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLiBQb3RlbnRpYWwgcmlza3Mgb24gdGhlc2UgcGF0aHMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgbG9jay9jbGVhbnVwIGVycm9ycykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllczsgdGh1cywgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tpbmcgYW5kIHVud2luZGluZyB0byBibGt0cmFjZSB0cmFjZXBvaW50IHJlZ2lzdHJhdGlvbiAoYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzLCBnZXRfcHJvYmVfcmVmLCBibGtfdHJhY2Vfc2V0dXBfZmluYWxpemUsIGJsa190cmFjZV9zZXR1cF9xdWV1ZSkuIEluIGZhaWx1cmUgY2FzZXMsIGl0IHByb3Blcmx5IHJvbGxzIGJhY2sgcmVnaXN0ZXJlZCB0cmFjZXBvaW50cywgZGVjcmVtZW50cyBwcm9iZSByZWZlcmVuY2UgY291bnRzLCBjbGVhbnMgdXAgYWxsb2NhdGVkIGJsa190cmFjZSBzdHJ1Y3R1cmVzIHZpYSBibGtfdHJhY2VfZnJlZSwgYW5kIHJldHVybnMgZXJyb3IgY29kZXMgYmVmb3JlIGFueSBkYXRhIGlzIGNvcGllZCBiYWNrIHRvIHVzZXIgc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYXJlIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgYWxsb2NhdGlvbnMgb3IgY29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLiBQb3RlbnRpYWwgcmlza3Mgb24gdGhlc2UgcGF0aHMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgbG9jay9jbGVhbnVwIGVycm9ycykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllczsgdGh1cywgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowcrzcr[1] Phase: Succeeded StartedAt: 2026-08-31 22:30:19 +0000 UTC FinishedAt: 2026-08-31 22:30:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrzcr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 22:30:19 +0000 UTC FinishedAt: 2026-08-31 22:30:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrzcr[2] Phase: Succeeded StartedAt: 2026-08-31 22:30:19 +0000 UTC FinishedAt: 2026-09-01 02:16:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 22:30:19 +0000 UTC FinishedAt: 2026-09-01 02:16:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 22:30:19 +0000 UTC FinishedAt: 2026-08-31 22:30:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 22:30:19 +0000 UTC FinishedAt: 2026-08-31 22:30:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.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-workflowcrzcr/series-workflowcrzcr-convert-artifact-2350466577/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 22:30:30 +0000 UTC FinishedAt: 2026-08-31 22:50:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 22:30:30 +0000 UTC FinishedAt: 2026-08-31 22:50:11 +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:*07e506a2-2a78-424a-afab-626255ce5ae4,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-workflowcrzcr/series-workflowcrzcr-convert-artifact-2350466577/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": "6cb95bd8-ffb0-4950-8427-1a5a563592ee", "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-workflowcrzcr/series-workflowcrzcr-build-action-2571839423/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 22:30:30 +0000 UTC FinishedAt: 2026-08-31 22:49:49 +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:*07e506a2-2a78-424a-afab-626255ce5ae4,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-workflowcrzcr/series-workflowcrzcr-convert-artifact-2350466577/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": "6cb95bd8-ffb0-4950-8427-1a5a563592ee", "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-workflowcrzcr/series-workflowcrzcr-build-action-2571839423/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 22:50:11 +0000 UTC FinishedAt: 2026-08-31 22:50:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 22:50:11 +0000 UTC FinishedAt: 2026-08-31 22:50:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 22:50:11 +0000 UTC FinishedAt: 2026-08-31 22:50:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 22:50:11 +0000 UTC FinishedAt: 2026-08-31 22:50:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.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-workflowcrzcr/series-workflowcrzcr-convert-artifact-1844975332/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 22:50:36 +0000 UTC FinishedAt: 2026-08-31 22:52:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 22:50:36 +0000 UTC FinishedAt: 2026-08-31 22:52:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6cb95bd8-ffb0-4950-8427-1a5a563592ee,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-workflowcrzcr/series-workflowcrzcr-build-action-2571839423/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-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 22:52:28 +0000 UTC FinishedAt: 2026-08-31 22:52:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 22:52:28 +0000 UTC FinishedAt: 2026-08-31 22:52:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 22:52:28 +0000 UTC FinishedAt: 2026-08-31 23:12:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 22:52:28 +0000 UTC FinishedAt: 2026-08-31 23:12:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*07e506a2-2a78-424a-afab-626255ce5ae4,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-workflowcrzcr/series-workflowcrzcr-convert-artifact-1844975332/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": "bd114398-efff-4d9e-9a7b-e18e0c51aff7", "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-workflowcrzcr/series-workflowcrzcr-build-action-1291198576/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 22:52:28 +0000 UTC FinishedAt: 2026-08-31 23:12:21 +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:*07e506a2-2a78-424a-afab-626255ce5ae4,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-workflowcrzcr/series-workflowcrzcr-convert-artifact-1844975332/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": "bd114398-efff-4d9e-9a7b-e18e0c51aff7", "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-workflowcrzcr/series-workflowcrzcr-build-action-1291198576/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 23:12:51 +0000 UTC FinishedAt: 2026-08-31 23:12:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 23:12:51 +0000 UTC FinishedAt: 2026-08-31 23:12:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 23:12:51 +0000 UTC FinishedAt: 2026-08-31 23:14:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 23:12:51 +0000 UTC FinishedAt: 2026-08-31 23:14:40 +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:*bd114398-efff-4d9e-9a7b-e18e0c51aff7,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-workflowcrzcr/series-workflowcrzcr-build-action-1291198576/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-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 23:14:50 +0000 UTC FinishedAt: 2026-09-01 02:16:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 23:14:50 +0000 UTC FinishedAt: 2026-09-01 02:16:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"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:*6cb95bd8-ffb0-4950-8427-1a5a563592ee,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bd114398-efff-4d9e-9a7b-e18e0c51aff7,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-workflowcrzcr/series-workflowcrzcr-build-action-2571839423/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-workflowcrzcr/series-workflowcrzcr-build-action-1291198576/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 23:14:50 +0000 UTC FinishedAt: 2026-08-31 23:15:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 23:14:50 +0000 UTC FinishedAt: 2026-08-31 23:14: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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"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-workflowcrzcr/series-workflowcrzcr-convert-artifact-3547045229/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 23:14:50 +0000 UTC FinishedAt: 2026-08-31 23:14:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 23:14:50 +0000 UTC FinishedAt: 2026-08-31 23:14:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 23:14:50 +0000 UTC FinishedAt: 2026-08-31 23:14:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 23:15:00 +0000 UTC FinishedAt: 2026-09-01 02:16:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcrzcr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["blk_trace_ioctl","blk_trace_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK","SYSFS"],"series_id":"d4d0f26d-f210-4d6d-8b15-7bd2aa7b1add","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 23:15:00 +0000 UTC FinishedAt: 2026-09-01 02:16:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6cb95bd8-ffb0-4950-8427-1a5a563592ee,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bd114398-efff-4d9e-9a7b-e18e0c51aff7,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-workflowcrzcr/series-workflowcrzcr-build-action-2571839423/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-workflowcrzcr/series-workflowcrzcr-build-action-1291198576/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-workflowcrzcr/series-workflowcrzcr-convert-artifact-3547045229/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,}