Name: series-workflowr8bs6 Phase: Succeeded StartedAt: 2026-07-06 08:16:40 +0000 UTC FinishedAt: 2026-07-06 12:49:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8bs6[0] Phase: Succeeded StartedAt: 2026-07-06 08:16:40 +0000 UTC FinishedAt: 2026-07-06 08:35:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8bs6[0].run-triage Phase: Succeeded StartedAt: 2026-07-06 08:16:40 +0000 UTC FinishedAt: 2026-07-06 08:35:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "c6b0b9701fcef71ed7cabc0358bb18e15e8e8329", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "c6b0b9701fcef71ed7cabc0358bb18e15e8e8329", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "MEMCG" ], "series_id": "96595318-8fe9-46fb-b7f7-84524bdb1e71" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "should_abort_scan", "try_to_shrink_lruvec", "shrink_many", "user_proactive_reclaim", "memory_reclaim", "reclaim_store" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzaG91bGRfYWJvcnRfc2NhbiYjMzQ7LAogICAgJiMzNDt0cnlfdG9fc2hyaW5rX2xydXZlYyYjMzQ7LAogICAgJiMzNDtzaHJpbmtfbWFueSYjMzQ7LAogICAgJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgICAmIzM0O21lbW9yeV9yZWNsYWltJiMzNDssCiAgICAmIzM0O3JlY2xhaW1fc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHNob3VsZF9hYm9ydF9zY2FuYCBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGNvZGUgdG8gYWJvcnQgcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIGlmIGEgc2lnbmFsIGlzIHBlbmRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBwcmV2ZW50cyBwcm9hY3RpdmUgcmVjbGFpbSBmcm9tIGhhbmdpbmcgaW5kZWZpbml0ZWx5IHdoZW4gaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwuIEl0IGlzIHJlYWNoYWJsZSB2aWEgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAgb3Igc3lzZnMgbm9kZSByZWNsYWltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzYxNTQ4M2E3M2U1NDg3ZWNiMmIzNzI3ZTNjZGZhNzJhMGVkMjIzN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMDg6MzM6NDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YTMuLmZiNDcyZTkyNGZjNzcxIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDkyOSw2ICYjNDM7NDkyOSw5IEBAIHN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXHRpbnQgaTtcbiBcdGVudW0gem9uZV93YXRlcm1hcmtzIG1hcms7XG4gXG4mIzQzO1x0aWYgKHVubGlrZWx5KHNjLVx1MDAzZXByb2FjdGl2ZSBcdTAwMjZcdTAwMjYgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuIFx0aWYgKHNjLVx1MDAzZW5yX3JlY2xhaW1lZCBcdTAwM2U9IG1heChzYy1cdTAwM2Vucl90b19yZWNsYWltLCBjb21wYWN0X2dhcChzYy1cdTAwM2VvcmRlcikpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2hvdWxkX2Fib3J0X3NjYW4mIzM0OywKICAgICYjMzQ7dHJ5X3RvX3Nocmlua19scnV2ZWMmIzM0OywKICAgICYjMzQ7c2hyaW5rX21hbnkmIzM0OywKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDttZW1vcnlfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDtyZWNsYWltX3N0b3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBzaG91bGRfYWJvcnRfc2NhbmAgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBjb2RlIHRvIGFib3J0IHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSBpZiBhIHNpZ25hbCBpcyBwZW5kaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgcHJldmVudHMgcHJvYWN0aXZlIHJlY2xhaW0gZnJvbSBoYW5naW5nIGluZGVmaW5pdGVseSB3aGVuIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsLiBJdCBpcyByZWFjaGFibGUgdmlhIGNncm91cCB2MiBgbWVtb3J5LnJlY2xhaW1gIG9yIHN5c2ZzIG5vZGUgcmVjbGFpbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzYxNTQ4M2E3M2U1NDg3ZWNiMmIzNzI3ZTNjZGZhNzJhMGVkMjIzNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDYgMDg6MzM6NDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDM1YzNiYjE1YWU5NmEzLi5mYjQ3MmU5MjRmYzc3MSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTQ5MjksNiAmIzQzOzQ5MjksOSBAQCBzdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogCWludCBpOwogCWVudW0gem9uZV93YXRlcm1hcmtzIG1hcms7CiAKJiM0MzsJaWYgKHVubGlrZWx5KHNjLSZndDtwcm9hY3RpdmUgJmFtcDsmYW1wOyBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKIAlpZiAoc2MtJmd0O25yX3JlY2xhaW1lZCAmZ3Q7PSBtYXgoc2MtJmd0O25yX3RvX3JlY2xhaW0sIGNvbXBhY3RfZ2FwKHNjLSZndDtvcmRlcikpKQogCQlyZXR1cm4gdHJ1ZTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9hY3RpdmUgU2Nhbm5pbmcgQWJvcnQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vdm1zY2FuLmNgLCB3aGljaCBtZWFucyBpdCYjMzk7cyBkaXJlY3RseSBpbXBhY3RpbmcgdGhlIGhlYXJ0IG9mIHRoZSB2aXJ0dWFsIG1lbW9yeSBzY2FubmluZyBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGluc2VydGluZyBhIGNoZWNrIHdpdGhpbiB0aGUgYHNob3VsZF9hYm9ydF9zY2FuYCBmdW5jdGlvbi4gTGV0IG1lIHB1bGwgdXAgdGhhdCBmdW5jdGlvbiBpbiBteSBtZW50YWwgbW9kZWwuLi4gcmlnaHQsIGBzaG91bGRfYWJvcnRfc2NhbmAgaXMgdGhlIGdhdGVrZWVwZXIgZGV0ZXJtaW5pbmcgaWYgYSBzY2FuIHNob3VsZCBiZSBwcmVtYXR1cmVseSB0ZXJtaW5hdGVkLiBUaGUga2V5IHBhcnQgaXMgdGhpcyBuZXdseSBhZGRlZCBjb25kaXRpb25hbDogYGlmICh1bmxpa2VseShzYy0mZ3Q7cHJvYWN0aXZlICZhbXA7JmFtcDsgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpKSByZXR1cm4gdHJ1ZTtgLgoKU28sIGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGZvY3VzZWQgb25lIHdpdGhpbiB0aGUgbGFyZ2VyIFZNIHN5c3RlbS4gSXQmIzM5O3Mgc2F5aW5nIHRoYXQgaWYgd2UmIzM5O3JlIGluIGEgJiMzNDtwcm9hY3RpdmUmIzM0OyBzY2FubmluZyBzdGF0ZSAoYHNjLSZndDtwcm9hY3RpdmVgIGlzIHRydWUpICphbmQqIHRoZSBjdXJyZW50IHByb2Nlc3MgaGFzIGEgcGVuZGluZyBzaWduYWwgKGBzaWduYWxfcGVuZGluZyhjdXJyZW50KWApLCB0aGVuIHdlIHNob3VsZCBhYm9ydCB0aGUgc2NhbiBpbW1lZGlhdGVseS4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyBwcm9hY3RpdmUgc2Nhbm5pbmcgaXMgYWJvdXQgYmVpbmcgYWdncmVzc2l2ZSwgYnV0IGl0IHNob3VsZG4mIzM5O3QgYmUgYXQgdGhlIGV4cGVuc2Ugb2YgcmVzcG9uc2l2ZW5lc3MgdG8gdXNlciBzaWduYWxzLCBvYnZpb3VzbHkuIFdlJiMzOTtyZSBwcmlvcml0aXppbmcgdXNlciBpbnB1dCBvdmVyIGFnZ3Jlc3NpdmUgYmFja2dyb3VuZCBtZW1vcnkgcmVjbGFpbWluZyB3aGVuIGEgc2lnbmFsIGlzIHBlbmRpbmcuIFRoaXMgbWFrZXMgdGhlIHN5c3RlbSBtb3JlIHJlc3BvbnNpdmUgdG8gdXNlciBhY3Rpb25zLgoKVGhpcyBpcyBhIGdvb2QsIGNsZWFuIHBhdGNoIGluIHRlcm1zIG9mIGl0cyB0YXJnZXRlZCBpbXBhY3QuIEkmIzM5O2QgbmVlZCB0byBjb25zaWRlciB0aGUgYnJvYWRlciBjb250ZXh0IG9mICYjMzQ7cHJvYWN0aXZlJiMzNDsgc2Nhbm5pbmcsIG9mIGNvdXJzZS4gV2hhdCB0cmlnZ2VycyB0aGlzIHN0YXRlPyBXaGF0IHNpZ25hbHMgYXJlIHdlIGNvbnNpZGVyaW5nLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zPyBCdXQgY29uY2VwdHVhbGx5LCB0aGlzIGFkZGl0aW9uIGlzIHNvdW5kIGZyb20gYSByZXNvdXJjZSBtYW5hZ2VtZW50IHBlcnNwZWN0aXZlIGFuZCBlbmhhbmNlcyBzeXN0ZW0gcmVzcG9uc2l2ZW5lc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDg6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hvdWxkX2Fib3J0X3NjYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz00OTEwPXN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNDkyNi1cbm1tL3Ztc2Nhbi5jOjQ5Mjc6c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTQ5Mjgte1xuLS1cbm1tL3Ztc2Nhbi5jPTQ5NjI9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00OTg5LVxubW0vdm1zY2FuLmM6NDk5MDpcdFx0aWYgKHNob3VsZF9hYm9ydF9zY2FuKGxydXZlYywgc2MpKVxubW0vdm1zY2FuLmMtNDk5MS1cdFx0XHRicmVhaztcbi0tXG5tbS92bXNjYW4uYz01MDQ4PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUwOTMtXG5tbS92bXNjYW4uYzo1MDk0Olx0XHRpZiAoc2hvdWxkX2Fib3J0X3NjYW4obHJ1dmVjLCBzYykpXG5tbS92bXNjYW4uYy01MDk1LVx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NzcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTY2FuIEFib3J0IEZ1bmN0aW9uKioKCk9rYXksIHNvIHRoZSBgc2hvdWxkX2Fib3J0X3NjYW5gIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHVzZWQgaW4gYHRyeV90b19zaHJpbmtfbHJ1dmVjYCBhbmQgYHNocmlua19tYW55YCwgc28gaXQmIzM5O3MgY2xlYXJseSBhY3RpdmUgYW5kIGdldHRpbmcgY2FsbGVkIGFzIGl0IHNob3VsZCBiZS4gSXQmIzM5O3MgcGFydCBvZiB0aGUgdm1zY2FuLCBtZW1vcnkgcmVjbGFpbSBwYXRoLCB3aGljaCBtZWFucyBpdCBwbGF5cyBhIGNyaXRpY2FsIHJvbGUgaW4gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtZW1vcnkgcHJlc3N1cmUuCgpUaGlzIHBhdGNoLCBpbiBwYXJ0aWN1bGFyLCBsb29rcyBhdCBgc2MtJmd0O3Byb2FjdGl2ZWAgYW5kIGBzaWduYWxfcGVuZGluZyhjdXJyZW50KWAuIEhtbSwgYHNjLSZndDtwcm9hY3RpdmVgIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gcHJvYWN0aXZlIHJlY2xhaW0sIGxpa2Ugd2hhdCB5b3XigJlkIHRyaWdnZXIgd2l0aCBgbWVtb3J5LnJlY2xhaW1gIGluIGNncm91cHMgdjIuIEdvdCBpdC4gU28sIGxldCYjMzk7cyB0cmFjZSBiYWNrIHdoZXJlIGBzYy0mZ3Q7cHJvYWN0aXZlYCBpcyBhY3R1YWxseSAqc2V0Ki4gR290dGEgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhlIHByb2FjdGl2ZSBwYXRoLiBLbm93aW5nIHRob3NlIGNvbmRpdGlvbnMgd2lsbCBnaXZlIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIHBpZWNlIG9mIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDg6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJvYWN0aXZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NzQ9c3RydWN0IHNjYW5fY29udHJvbCB7XG4tLVxubW0vdm1zY2FuLmMtOTUtXG5tbS92bXNjYW4uYzo5NjpcdC8qIFN3YXBwaW5lc3MgdmFsdWUgZm9yIHByb2FjdGl2ZSByZWNsYWltLiBBbHdheXMgdXNlIHNjX3N3YXBwaW5lc3MoKSEgKi9cbm1tL3Ztc2Nhbi5jOjk3Olx0aW50ICpwcm9hY3RpdmVfc3dhcHBpbmVzcztcbm1tL3Ztc2Nhbi5jLTk4LVxuLS1cbm1tL3Ztc2Nhbi5jLTEyMS1cdC8qIFByb2FjdGl2ZSByZWNsYWltIGludm9rZWQgYnkgdXNlcnNwYWNlICovXG5tbS92bXNjYW4uYzoxMjI6XHR1bnNpZ25lZCBpbnQgcHJvYWN0aXZlOjE7XG5tbS92bXNjYW4uYy0xMjMtXG4tLVxubW0vdm1zY2FuLmM9MjQyPXN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vdm1zY2FuLmMtMjQzLXtcbm1tL3Ztc2Nhbi5jOjI0NDpcdGlmIChzYy1cdTAwM2Vwcm9hY3RpdmUgXHUwMDI2XHUwMDI2IHNjLVx1MDAzZXByb2FjdGl2ZV9zd2FwcGluZXNzKVxubW0vdm1zY2FuLmM6MjQ1Olx0XHRyZXR1cm4gKnNjLVx1MDAzZXByb2FjdGl2ZV9zd2FwcGluZXNzO1xubW0vdm1zY2FuLmMtMjQ2LVx0cmV0dXJuIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhtZW1jZyk7XG4tLVxubW0vdm1zY2FuLmM9Mjg2PXN0YXRpYyB2b2lkIGZsdXNoX3JlY2xhaW1fc3RhdGUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtMzAyLVx0ICogZnJvbSB0aGUgdGFyZ2V0IG1lbWNnOyBwcmV2ZW50aW5nIHVubmVjZXNzYXJ5IHJldHJpZXMgZHVyaW5nIG1lbWNnXG5tbS92bXNjYW4uYzozMDM6XHQgKiBjaGFyZ2luZyBhbmQgZmFsc2UgcG9zaXRpdmVzIGZyb20gcHJvYWN0aXZlIHJlY2xhaW0uXG5tbS92bXNjYW4uYy0zMDQtXHQgKlxuLS1cbm1tL3Ztc2Nhbi5jPTQ0ND1zdGF0aWMgaW50IHJlY2xhaW1lcl9vZmZzZXQoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDUzLVx0XHRyZXR1cm4gUEdTVEVBTF9LSFVHRVBBR0VEIC0gUEdTVEVBTF9LU1dBUEQ7XG5tbS92bXNjYW4uYzo0NTQ6XHRpZiAoc2MtXHUwMDNlcHJvYWN0aXZlKVxubW0vdm1zY2FuLmMtNDU1LVx0XHRyZXR1cm4gUEdTVEVBTF9QUk9BQ1RJVkUgLSBQR1NURUFMX0tTV0FQRDtcbi0tXG5tbS92bXNjYW4uYz0xMDU1PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS92bXNjYW4uYy0xNTY4LVx0XHQgKiBtbG9ja2VkIG9yIHRvbyBob3QgdG8gcmVjbGFpbS4gV2UgY2FuIGRpc2FibGUgcmVjbGFpbVxubW0vdm1zY2FuLmM6MTU2OTpcdFx0ICogZnJvbSB0b3AgdGllciBub2RlcyBpbiBwcm9hY3RpdmUgcmVjbGFpbSB0aG91Z2ggYXMgdGhhdCBpc1xubW0vdm1zY2FuLmMtMTU3MC1cdFx0ICogbm90IHJlYWwgbWVtb3J5IHByZXNzdXJlLlxubW0vdm1zY2FuLmMtMTU3MS1cdFx0ICovXG5tbS92bXNjYW4uYzoxNTcyOlx0XHRpZiAoIXNjLVx1MDAzZXByb2FjdGl2ZSkge1xubW0vdm1zY2FuLmMtMTU3My1cdFx0XHRkb19kZW1vdGVfcGFzcyA9IGZhbHNlO1xuLS1cbm1tL3Ztc2Nhbi5jPTI0OTM9c3RhdGljIHZvaWQgZ2V0X3NjYW5fY291bnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy0yNTIzLVx0aWYgKHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFkpIHtcbm1tL3Ztc2Nhbi5jOjI1MjQ6XHRcdFdBUk5fT05fT05DRSghc2MtXHUwMDNlcHJvYWN0aXZlKTtcbm1tL3Ztc2Nhbi5jLTI1MjUtXHRcdHNjYW5fYmFsYW5jZSA9IFNDQU5fQU5PTjtcbi0tXG5tbS92bXNjYW4uYz00OTI3PXN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDkzMS1cbm1tL3Ztc2Nhbi5jOjQ5MzI6XHRpZiAodW5saWtlbHkoc2MtXHUwMDNlcHJvYWN0aXZlIFx1MDAyNlx1MDAyNiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkpXG5tbS92bXNjYW4uYy00OTMzLVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5tbS92bXNjYW4uYz01MDA3PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUwMzAtXG5tbS92bXNjYW4uYzo1MDMxOlx0aWYgKCFzYy1cdTAwM2Vwcm9hY3RpdmUpXG5tbS92bXNjYW4uYy01MDMyLVx0XHR2bXByZXNzdXJlKHNjLVx1MDAzZWdmcF9tYXNrLCBzYy1cdTAwM2VvcmRlciwgbWVtY2csIGZhbHNlLFxuLS1cbm1tL3Ztc2Nhbi5jPTUxMTg9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTEyOC1cbm1tL3Ztc2Nhbi5jOjUxMjk6XHRzZXRfbW1fd2FsayhOVUxMLCBzYy1cdTAwM2Vwcm9hY3RpdmUpO1xubW0vdm1zY2FuLmMtNTEzMC1cbi0tXG5tbS92bXNjYW4uYz01MTM5PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTE1Ny1cbm1tL3Ztc2Nhbi5jOjUxNTg6XHRzZXRfbW1fd2FsayhwZ2RhdCwgc2MtXHUwMDNlcHJvYWN0aXZlKTtcbm1tL3Ztc2Nhbi5jLTUxNTktXG4tLVxubW0vdm1zY2FuLmM9NTY2MT1zdGF0aWMgc3NpemVfdCBscnVfZ2VuX3NlcV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnNyYyxcbi0tXG5tbS92bXNjYW4uYy01Njc0LVx0XHQuZ2ZwX21hc2sgPSBHRlBfS0VSTkVMLFxubW0vdm1zY2FuLmM6NTY3NTpcdFx0LnByb2FjdGl2ZSA9IHRydWUsXG5tbS92bXNjYW4uYy01Njc2LVx0fTtcbi0tXG5tbS92bXNjYW4uYz02MDcwPXN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MTM1LVx0XHQvKiBSZWNvcmQgdGhlIGdyb3VwJiMzOTtzIHJlY2xhaW0gZWZmaWNpZW5jeSAqL1xubW0vdm1zY2FuLmM6NjEzNjpcdFx0aWYgKCFzYy1cdTAwM2Vwcm9hY3RpdmUpXG5tbS92bXNjYW4uYy02MTM3LVx0XHRcdHZtcHJlc3N1cmUoc2MtXHUwMDNlZ2ZwX21hc2ssIHNjLVx1MDAzZW9yZGVyLCBtZW1jZywgZmFsc2UsXG4tLVxubW0vdm1zY2FuLmM9NjE0OT1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MTgwLVx0LyogUmVjb3JkIHRoZSBzdWJ0cmVlJiMzOTtzIHJlY2xhaW0gZWZmaWNpZW5jeSAqL1xubW0vdm1zY2FuLmM6NjE4MTpcdGlmICghc2MtXHUwMDNlcHJvYWN0aXZlKVxubW0vdm1zY2FuLmMtNjE4Mi1cdFx0dm1wcmVzc3VyZShzYy1cdTAwM2VnZnBfbWFzaywgc2MtXHUwMDNlb3JkZXIsIHNjLVx1MDAzZXRhcmdldF9tZW1fY2dyb3VwLCB0cnVlLFxuLS1cbm1tL3Ztc2Nhbi5jPTY0NTc9c3RhdGljIHVuc2lnbmVkIGxvbmcgZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcbi0tXG5tbS92bXNjYW4uYy02NDcwLVx0ZG8ge1xubW0vdm1zY2FuLmM6NjQ3MTpcdFx0aWYgKCFzYy1cdTAwM2Vwcm9hY3RpdmUpXG5tbS92bXNjYW4uYy02NDcyLVx0XHRcdHZtcHJlc3N1cmVfcHJpbyhzYy1cdTAwM2VnZnBfbWFzaywgc2MtXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsXG4tLVxubW0vdm1zY2FuLmM9Njc2NT11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY3NzQtXHRcdC5ucl90b19yZWNsYWltID0gbWF4KG5yX3BhZ2VzLCBTV0FQX0NMVVNURVJfTUFYKSxcbm1tL3Ztc2Nhbi5jOjY3NzU6XHRcdC5wcm9hY3RpdmVfc3dhcHBpbmVzcyA9IHN3YXBwaW5lc3MsXG5tbS92bXNjYW4uYy02Nzc2LVx0XHQuZ2ZwX21hc2sgPSAoY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzaykgXHUwMDI2IEdGUF9SRUNMQUlNX01BU0spIHxcbi0tXG5tbS92bXNjYW4uYy02NzgzLVx0XHQubWF5X3N3YXAgPSAhIShyZWNsYWltX29wdGlvbnMgXHUwMDI2IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVApLFxubW0vdm1zY2FuLmM6Njc4NDpcdFx0LnByb2FjdGl2ZSA9ICEhKHJlY2xhaW1fb3B0aW9ucyBcdTAwMjYgTUVNQ0dfUkVDTEFJTV9QUk9BQ1RJVkUpLFxubW0vdm1zY2FuLmMtNjc4NS1cdH07XG4tLVxubW0vdm1zY2FuLmM9Nzg2Mz1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG4tLVxubW0vdm1zY2FuLmMtNzg2OC1cbm1tL3Ztc2Nhbi5jOjc4Njk6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vdm1zY2FuLmMtNzg3MC1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNzkzNy1cdFx0XHRcdC5yZWNsYWltX2lkeCA9IGdmcF96b25lKGdmcF9tYXNrKSxcbm1tL3Ztc2Nhbi5jOjc5Mzg6XHRcdFx0XHQucHJvYWN0aXZlX3N3YXBwaW5lc3MgPSBzd2FwcGluZXNzID09IC0xID8gTlVMTCA6IFx1MDAyNnN3YXBwaW5lc3MsXG5tbS92bXNjYW4uYy03OTM5LVx0XHRcdFx0LnByaW9yaXR5ID0gREVGX1BSSU9SSVRZLFxuLS1cbm1tL3Ztc2Nhbi5jLTc5NDMtXHRcdFx0XHQubWF5X3N3YXAgPSAxLFxubW0vdm1zY2FuLmM6Nzk0NDpcdFx0XHRcdC5wcm9hY3RpdmUgPSAxLFxubW0vdm1zY2FuLmMtNzk0NS1cdFx0XHR9O1xuLS1cbm1tL3Ztc2Nhbi5jPTgwMTI9c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxubW0vdm1zY2FuLmMtODAxNy1cbm1tL3Ztc2Nhbi5jOjgwMTg6XHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XG5tbS92bXNjYW4uYy04MDE5LVx0cmV0dXJuIHJldCA/IC1FQUdBSU4gOiBjb3VudDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTUwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb2FjdGl2ZSBSZWNsYWltIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGNydWNpYWwgY2hlY2sgZm9yIGBzaWduYWxfcGVuZGluZyhjdXJyZW50KWAgd2l0aGluIHRoZSBgc2hvdWxkX2Fib3J0X3NjYW5gIGZ1bmN0aW9uLCBidXQgb25seSB3aGVuIGBzYy0mZ3Q7cHJvYWN0aXZlYCBpcyB0cnVlLiBCYXNpY2FsbHksIGl04oCZcyBkZXNpZ25lZCB0byBpbnRlcnJ1cHQgcHJvYWN0aXZlIHJlY2xhaW0gb3BlcmF0aW9ucy4gVGhpcyBpcyBzcGVjaWZpY2FsbHkgcmVsZXZhbnQgdG8gcHJvYWN0aXZlIHJlY2xhaW0gdHJpZ2dlcmVkIHRocm91Z2ggbWV0aG9kcyBsaWtlIGBtZW1vcnkucmVjbGFpbWAgaW4gY2dyb3VwIHYyLCBvciB2aWEgdGhlIGByZWNsYWltYCBzeXNmcyBpbnRlcmZhY2Ugb24gTlVNQSBub2Rlcy4KCkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIHBvc2l0aXZlIGNoYW5nZS4gSXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIGhhbmcgb3IgbG9uZy1kdXJhdGlvbiBpc3N1ZSB3aGVuIGEgc2lnbmFsIGlzIHNlbnQgdG8gdGhlIHByb2Nlc3MgaW5pdGlhdGluZyB0aGUgcHJvYWN0aXZlIHJlY2xhaW0uIFRoaW5rIGFib3V0IGEgc2l0dWF0aW9uIHdoZXJlIGEgdXNlciwgcGVyaGFwcyBpbmFkdmVydGVudGx5LCB0cmlnZ2VycyBhIG1lbW9yeSByZWNsYWltIHZpYSBjZ3JvdXAgYW5kIHRoZW4gbmVlZHMgdG8gc3RvcCBpdC4gVGhpcyBwYXRjaCBmYWNpbGl0YXRlcyB0aGF0IGludGVycnVwdGlvbi4KCkdpdmVuIHRoYXQgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBkaXJlY3RseSBpbXBhY3RpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgSSYjMzk7ZCBzYXkgZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZCBoZXJlLiBUaGUgcG90ZW50aWFsIGZvciB1bmV4cGVjdGVkIGludGVyYWN0aW9ucyBhbmQgZWRnZSBjYXNlcyB3aXRoaW4gdGhlIE1NIHN1YnN5c3RlbSBpcyBhbHdheXMgcHJlc2VudC4KCk5vdywgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gUHJvYWN0aXZlIHJlY2xhaW0gaXMgdHJpZ2dlcmVkIGJ5IGJvdGggY2dyb3VwIHYyJiMzOTtzIGBtZW1vcnkucmVjbGFpbWAgYW5kIHRoZSBzeXNmcyBgL3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlL25vZGUqL3JlY2xhaW1gIGludGVyZmFjZS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBmdW5jdGlvbiBpbiBgbW0vdm1zY2FuLmNgIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz03ODYzPXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcbi0tXG5tbS92bXNjYW4uYy03ODY4LVxubW0vdm1zY2FuLmM6Nzg2OTppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG5tbS92bXNjYW4uYy03ODcwLVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYz04MDEyPXN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbm1tL3Ztc2Nhbi5jLTgwMTctXG5tbS92bXNjYW4uYzo4MDE4Olx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xubW0vdm1zY2FuLmMtODAxOS1cdHJldHVybiByZXQgPyAtRUFHQUlOIDogY291bnQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg4MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wbGljYXRpb25zIG9mIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gVGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgaXMgdG8gc2VlIHdoZXJlIGl0JiMzOTtzICp1c2VkKiBvciAqZGVjbGFyZWQqIG91dHNpZGUgb2YgdGhlIGBtbS92bXNjYW4uY2AgZmlsZSBpdHNlbGYuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdXNlIGBncmVwYCBvciBhIHNpbWlsYXIgdG9vbCB0byBwZXJmb3JtIGEgY3Jvc3MtcmVmZXJlbmNlIHNlYXJjaCB0aHJvdWdob3V0IHRoZSBrZXJuZWwgc291cmNlIHRyZWUuIEkmIzM5O20gbG9va2luZyBmb3IgZGlyZWN0IHVzZXMgaW4gZnVuY3Rpb24gY2FsbHMsIGRlY2xhcmF0aW9ucyBpbiBoZWFkZXIgZmlsZXMsIG9yIGFueSBvdGhlciByZWZlcmVuY2VzIHRoYXQgY291bGQgcHJvdmlkZSBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGJlIG1pbmRmdWwgb2YgcG90ZW50aWFsIGNvbXBsZXhpdGllcyBsaWtlIGluZGlyZWN0IGNhbGxzIHZpYSBmdW5jdGlvbiBwb2ludGVycyBvciB1c2VzIGluIG1hY3JvIGV4cGFuc2lvbnMsIHNvIEkgbWlnaHQgcmVmaW5lIG15IHNlYXJjaCB0ZXJtcyBhcyBJIGdvLiBVbHRpbWF0ZWx5LCBJJiMzOTttIGFpbWluZyB0byBidWlsZCBhIG1hcCBvZiBpdHMgZXh0ZXJuYWwgaW50ZXJhY3Rpb25zIGFuZCBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgbWVtb3J5IG1hbmFnZW1lbnQgbGFuZHNjYXBlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9NjMxPWV4dGVybiB2b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKTtcbm1tL2ludGVybmFsLmg6NjMyOmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbm1tL2ludGVybmFsLmgtNjMzLVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTQ5ODk9c3RhdGljIHNzaXplX3QgbWVtb3J5X3JlY2xhaW0oc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXG4tLVxubW0vbWVtY29udHJvbC5jLTQ5OTQtXG5tbS9tZW1jb250cm9sLmM6NDk5NTpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oYnVmLCBtZW1jZywgTlVMTCk7XG5tbS9tZW1jb250cm9sLmMtNDk5Ni1cdGlmIChyZXQpXG4tLVxubW0vdm1zY2FuLmM9Nzg2Mz1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG4tLVxubW0vdm1zY2FuLmMtNzg2OC1cbm1tL3Ztc2Nhbi5jOjc4Njk6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vdm1zY2FuLmMtNzg3MC1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmM9ODAxMj1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5tbS92bXNjYW4uYy04MDE3LVxubW0vdm1zY2FuLmM6ODAxODpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcbm1tL3Ztc2Nhbi5jLTgwMTktXHRyZXR1cm4gcmV0ID8gLUVBR0FJTiA6IGNvdW50O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTUwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBSZWNsYWltIEltcGxlbWVudGF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IG1lbW9yeSByZWNsYWltIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGVzZSBmdW5jdGlvbnMuIEkgc2VlIHRoYXQgYG1lbWNvbnRyb2wuY2AgdXRpbGl6ZXMgaXQgd2l0aGluIHRoZSBgbWVtb3J5X3JlY2xhaW1gIGZ1bmN0aW9uLiBUaGlzIG9uZSBpcyByZWxhdGVkIHRvIGNncm91cCB2MiYjMzk7cyBgbWVtb3J5LnJlY2xhaW1gIGZlYXR1cmUuIFRoZW4sIGB2bXNjYW4uY2AgY29udGFpbnMgYHJlY2xhaW1fc3RvcmVgLCB3aGljaCBpcyByZWxhdGVkIHRvIHRoZSBgL3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlL25vZGUqL3JlY2xhaW1gIGludGVyZmFjZSwgd2hpY2ggaXMgdXNlZCBmb3Igbm9kZSByZWNsYWltLgoKVG8gdGVzdCB0aGVzZSBmdW5jdGlvbmFsaXRpZXMgdGhvcm91Z2hseSwgSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGFwcHJvcHJpYXRlIGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gVGhhdCBtZWFucyBJJiMzOTtsbCBuZWVkIGBDT05GSUdfTUVNQ0dgIHRvIHdvcmsgd2l0aCB0aGUgY2dyb3VwIG1lbW9yeSBjb250cm9sbGVyLiBBbHRlcm5hdGl2ZWx5LCBJJiMzOTtsbCB1c2UgYENPTkZJR19OVU1BYCBpZiBJIHdhbnQgdG8gZm9jdXMgb24gbm9kZSByZWNsYWltIHRlc3RpbmcuCgpMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGByZWNsYWltX3N0b3JlYCBpbiBgbW0vdm1zY2FuLmNgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIHJpZ2h0IHBsYWNlIHRvIGJlZ2luLCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBub2RlIHJlY2xhaW0gcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDg6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVjbGFpbV9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTgwMDk9RVhQT1JUX1NZTUJPTF9HUEwoY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3MpO1xuLS1cbm1tL3Ztc2Nhbi5jLTgwMTEtI2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQSlcbm1tL3Ztc2Nhbi5jOjgwMTI6c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5tbS92bXNjYW4uYy04MDEzLVx0XHRcdCAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNDIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgTWVtb3J5IFJlY2xhaW0gRmVhdHVyZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBtZW1vcnkgcmVjbGFpbSBpcyBoYW5kbGVkIGluIHRoaXMgc3lzdGVtLiBJIHNlZSB0aGF0IHRoZSBgcmVjbGFpbV9zdG9yZWAgZnVuY3Rpb25hbGl0eSBpcyBjb25kaXRpb25hbCBvbiBib3RoIGBDT05GSUdfU1lTRlNgIGFuZCBgQ09ORklHX05VTUFgIGJlaW5nIGVuYWJsZWQuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93IOKAkyBpdCBnaXZlcyBtZSBhIGNsZWFyIGlkZWEgb2YgdGhlIGRlcGVuZGVuY2llcyB0aGVyZS4gTm93LCB0aGUgYG1lbW9yeV9yZWNsYWltYCBmdW5jdGlvbiBpdHNlbGYsIHRoZSBjb3JlIG9mIHRoZSByZWNsYWltIHByb2Nlc3MsIGFwcGVhcnMgdG8gYmUgbG9jYXRlZCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AgYW5kIGlzIGdvdmVybmVkIGJ5IGBDT05GSUdfTUVNQ0dgLiBHaXZlbiB0aGF0LCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHVuZGVyc3RhbmRpbmcgaG93IGBDT05GSUdfTUVNQ0dgIGluZmx1ZW5jZXMgdGhlIGJlaGF2aW9yIG9mIGBtZW1vcnlfcmVjbGFpbWAuIFRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIGBtbS9tZW1jb250cm9sLmNgIGFuZCBzcGVjaWZpY2FsbHkgaG93IHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgaW1wbGVtZW50ZWQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW9yeV9yZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz00OTY3PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9vb21fZ3JvdXBfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuLS1cbm1tL21lbWNvbnRyb2wuYy00OTg4LVxubW0vbWVtY29udHJvbC5jOjQ5ODk6c3RhdGljIHNzaXplX3QgbWVtb3J5X3JlY2xhaW0oc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXG5tbS9tZW1jb250cm9sLmMtNDk5MC1cdFx0XHQgICAgICBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxuLS1cbm1tL21lbWNvbnRyb2wuYz01MDAyPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIG1lbW9yeV9maWxlc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MDcwLVx0XHQuZmxhZ3MgPSBDRlRZUEVfTlNfREVMRUdBVEFCTEUsXG5tbS9tZW1jb250cm9sLmM6NTA3MTpcdFx0LndyaXRlID0gbWVtb3J5X3JlY2xhaW0sXG5tbS9tZW1jb250cm9sLmMtNTA3Mi1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1MjQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgUmVjbGFpbSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBgbWVtb3J5X3JlY2xhaW1gIGlzIGRlZmluaXRlbHkgdGllZCBpbnRvIGBtZW1vcnlfZmlsZXNgIGFuZCByZWdpc3RlcmVkIGZvciBjZ3JvdXAgdjIuIFRoYXQgY29ubmVjdGlvbiBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGVuYWJsaW5nIGBDT05GSUdfTUVNQ0dgIGlzIGEgc29saWQgbW92ZS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBUaGlzIHBhdGNoIHNwZWNpZmljYWxseSB0b3VjaGVzIGBzaG91bGRfYWJvcnRfc2NhbmAuIFRoYXQgZnVuY3Rpb24gaXMgY3J1Y2lhbCBiZWNhdXNlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgYW5kIGBzaHJpbmtfbWFueWAsIHNvIGl0IGhhcyBhIGRpcmVjdCBpbXBhY3Qgb24gdGhlIHNocmlua2luZyBsb2dpYy4KCkxldCYjMzk7cyB6b29tIGluIG9uIHRoZSBpbXBvcnRhbnQgc3ltYm9scyBub3cuIEkmIzM5O20gZm9jdXNpbmcgb24gYHNob3VsZF9hYm9ydF9zY2FuYCwgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCwgYHNocmlua19tYW55YCwgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCBgbWVtb3J5X3JlY2xhaW1gLCBhbmQgYHJlY2xhaW1fc3RvcmVgLiBJIGhhdmUgdG8gZ3Jhc3AgaG93IHRoZSBjaGFuZ2VzIGluIGBzaG91bGRfYWJvcnRfc2NhbmAgcmlwcGxlIHRocm91Z2ggdG8gdGhvc2UgYXJlYXMuCgpIb2xkIG9uIGEgc2Vjb25kLi4uIGBzaG91bGRfYWJvcnRfc2NhbmAgaXMgKnN0YXRpYyo/IFJpZ2h0LiBUaGF0IGxpa2VseSBtZWFucyBpdCYjMzk7cyBub3QgZGlyZWN0bHkgdmlzaWJsZSBvdXRzaWRlIHRoZSBmaWxlLiBJIGhhdmUgdG8gc2VlIGlmIGl0JiMzOTtzIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBvdGhlcndpc2UsIGl0JiMzOTtzIGp1c3QgYSBsb2NhbCBmdW5jdGlvbi4gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGdlbmVyYXRpb24gdG8gYmUgc3VyZSBhYm91dCB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG91bGRfYWJvcnRfc2NhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ5MTA9c3RhdGljIGxvbmcgZ2V0X25yX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy00OTI2LVxubW0vdm1zY2FuLmM6NDkyNzpzdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNDkyOC17XG4tLVxubW0vdm1zY2FuLmM9NDk2Mj1zdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ5ODktXG5tbS92bXNjYW4uYzo0OTkwOlx0XHRpZiAoc2hvdWxkX2Fib3J0X3NjYW4obHJ1dmVjLCBzYykpXG5tbS92bXNjYW4uYy00OTkxLVx0XHRcdGJyZWFrO1xuLS1cbm1tL3Ztc2Nhbi5jPTUwNDg9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTA5My1cbm1tL3Ztc2Nhbi5jOjUwOTQ6XHRcdGlmIChzaG91bGRfYWJvcnRfc2NhbihscnV2ZWMsIHNjKSlcbm1tL3Ztc2Nhbi5jLTUwOTUtXHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyODAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhpcy4KCioqQW5hbHl6aW5nIFBvdGVudGlhbCBCb3R0bGVuZWNrcyBpbiBNZW1vcnkgUmVjbGFtYXRpb24qKgoKUmlnaHQsIHNvIGBzaG91bGRfYWJvcnRfc2NhbmAgYmVpbmcgYHN0YXRpY2AuLi4gdGhhdOKAmXMgcHJvYmFibHkgZ29pbmcgdG8gZ2V0IGlubGluZWQuIE5vdCBhIGh1Z2UgY29uY2VybiB0aGVyZS4gSSBzaG91bGQgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZXNlIGtleSBmdW5jdGlvbnM6IGB0cnlfdG9fc2hyaW5rX2xydXZlY2AsIGBzaHJpbmtfbWFueWAsIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgYG1lbW9yeV9yZWNsYWltYCwgYW5kIGByZWNsYWltX3N0b3JlYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBsaWtlbHkgc3VzcGVjdHMgZm9yIGFueSBwZXJmb3JtYW5jZSBpc3N1ZXMuCgpGaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgaXMgYWxzbyBhIGBzdGF0aWNgIGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIGZvciBpbmxpbmluZyB3aWxsIGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCBhbmFseXppbmcgaXRzIHBlcmZvcm1hbmNlIGNvbnRyaWJ1dGlvbi4gSWYgaXQgKmlzKiBzdGF0aWMsIHRoZSBjb21waWxlciBtaWdodCBiZSBhYmxlIHRvIG9wdGltaXplIGl0IGluIHdheXMgdGhhdCBhcmUgbW9yZSBkaWZmaWN1bHQgdG8gcmVhc29uIGFib3V0IGZyb20gYSBzb3VyY2UtY29kZSBsZXZlbC4gTmVlZCB0byBrZWVwIGFuIGV5ZSBvbiB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfdG9fc2hyaW5rX2xydXZlYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ5Mjc9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00OTYxLSAqL1xubW0vdm1zY2FuLmM6NDk2MjpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNDk2My17XG4tLVxubW0vdm1zY2FuLmM9NTAwNz1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MDI2LVxubW0vdm1zY2FuLmM6NTAyNzpcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG5tbS92bXNjYW4uYy01MDI4LVxuLS1cbm1tL3Ztc2Nhbi5jPTUxMTg9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTEzMC1cbm1tL3Ztc2Nhbi5jOjUxMzE6XHRpZiAodHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYykpXG5tbS92bXNjYW4uYy01MTMyLVx0XHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9ZT1VORyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5NDEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKlN0YXRpYyBBbmFseXNpcyBvZiBgc2hyaW5rX21hbnlgKioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBgc2hyaW5rX21hbnlgLiBJIGtub3cgaXQmIzM5O3MgYWxzbyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggaXMgd29ydGggbm90aW5nLiBTdGF0aWMgZnVuY3Rpb25zIGhhdmUgc3BlY2lmaWMgaW1wbGljYXRpb25zIHJlZ2FyZGluZyBzY29wZSBhbmQgbGlua2FnZSwgYW5kIGl0JiMzOTtzIGEgZGV0YWlsIHRoYXQgb2Z0ZW4gYWZmZWN0cyBob3cgdGhlIGNvbXBpbGVyIG9wdGltaXplcyBhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIG9mIHRoZSBzeXN0ZW0uIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGFuYWx5emUgdGhlIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhpcyB3aGVuIGNvbnNpZGVyaW5nIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZSBiYXNlIGFuZCB3aGVyZSBpdCBpcyBiZWluZyBjYWxsZWQgZnJvbS4gSSYjMzk7bGwgZm9jdXMgb24gd2hhdCBpdCBkb2VzLCBob3cgaXQgaXMgdXNlZCwgYW5kIHdoeSBpdCYjMzk7cyBiZWVuIGRlc2lnbmVkIHRoaXMgd2F5IGluIHRoZSBjb250ZXh0IG9mIGl0IGJlaW5nIGEgc3RhdGljIGZ1bmN0aW9uLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaHJpbmtfbWFueSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTUwMDc9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTA0Ny1cbm1tL3Ztc2Nhbi5jOjUwNDg6c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MDQ5LXtcbi0tXG5tbS92bXNjYW4uYz01MTM5PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTE2Ny1cdGVsc2Vcbm1tL3Ztc2Nhbi5jOjUxNjg6XHRcdHNocmlua19tYW55KHBnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy01MTY5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzY0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBwcm9hY3RpdmUgbWVtb3J5IHJlY2xhbWF0aW9uLCBhbmQgc3BlYWtpbmcgZGlyZWN0bHkgdG8gYW5vdGhlciBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIHRoZSBQcm9hY3RpdmUgUmVjbGFtYXRpb24gRW50cnkgUG9pbnQqKgoKUmlnaHQsIHNvIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyB0aGUgbHluY2hwaW4sIHRoZSBwbGFjZSB3aGVyZSBldmVyeXRoaW5nIGtpY2tzIG9mZiBmb3IgcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltLCBpc24mIzM5O3QgaXQ/IFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IEkgbmVlZCB0byB6ZXJvIGluIG9uLiBGb3JnZXQgYWJvdXQgYW55dGhpbmcgZWxzZSBmb3IgYSBtaW51dGUg4oCTIGxldCYjMzk7cyBnbyBzdHJhaWdodCB0byBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmbG93LCBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgd2hhdCBpdCYjMzk7cyByZWFsbHkgZG9pbmcgdW5kZXIgdGhlIGhvb2QuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoaXMgdGhpbmcgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9Nzg2Mz1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG4tLVxubW0vdm1zY2FuLmMtNzg2OC1cbm1tL3Ztc2Nhbi5jOjc4Njk6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vdm1zY2FuLmMtNzg3MC1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmM9ODAxMj1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5tbS92bXNjYW4uYy04MDE3LVxubW0vdm1zY2FuLmM6ODAxODpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcbm1tL3Ztc2Nhbi5jLTgwMTktXHRyZXR1cm4gcmV0ID8gLUVBR0FJTiA6IGNvdW50O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzkxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBhbmQgdXNhZ2Ugb2YgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLiBNeSBmaXJzdCB0aG91Z2h0IHdhcywgJiMzNDtJcyB0aGlzIGZ1bmN0aW9uIGV4cG9ydGVkPyBPciBpcyBpdCBkZWNsYXJlZCBhcyBzdGF0aWM/JiMzNDsgR2l2ZW4gdGhhdCBJJiMzOTttIHNlZWluZyBpdCByZWZlcmVuY2VkLCBJIGFzc3VtZWQgaXQgaGFkIHRvIGJlIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMsIG90aGVyd2lzZSBpdCB3b3VsZCBiZSBpbXBvc3NpYmxlIHRvIGNhbGwgaXQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZS4KCldhaXQgYSBtaW51dGUuLi4gaXQmIzM5O3MgKm5vdCogZXhwb3J0ZWQsIHdoaWNoIGlzIHdoYXQgSSB0aG91Z2h0LCBidXQgaXQgKmlzKiBub24tc3RhdGljLiBJbnRlcmVzdGluZy4gSXQmIzM5O3MgdXNlZCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AsIGJ1dCB0aGF0IGRvZXNuJiMzOTt0IGltbWVkaWF0ZWx5IHRlbGwgbWUgdGhlIGZ1bGwgcGljdHVyZS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBpbnZvbHZlZCBpbiB0aGUgcHJvYWN0aXZlIHJlY2xhaW0gcHJvY2Vzcy4gRG9lcyBpdCBkaXJlY3RseSBjYWxsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgb3IgaXMgdGhlcmUgc29tZSBvdGhlciBpbnRlcm1lZGlhcnkgZnVuY3Rpb24gaW4gdGhlIGNhbGwgY2hhaW4/IExldCBtZSBxdWlja2x5IGNoZWNrIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBhbmQgaXRzIGNhbGxlcnMsIGJ1dCwgYWgsIG5vLiBJIGdvdCBpdCB3cm9uZywgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIHByb2JhYmx5IGNhbGxpbmcgdGhhdCBvciBzb21ldGhpbmcgc2ltaWxhciEKCkFscmlnaHQsIGl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgaXRzZWxmLiBJJiMzOTttIGdvaW5nIHRvIHJlYWQgdGhlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBmdW5jdGlvbiBkaXJlY3RseS4gVGhhdCYjMzk7cyB0aGUgYmVzdCB3YXkgdG8gZ3Jhc3AgaXRzIHB1cnBvc2UsIGFyZ3VtZW50cywgcmV0dXJuIHZhbHVlcywgYW5kIHdoYXQgc3BlY2lmaWMgYWN0aW9ucyBpdCB0YWtlcyB3aGVuIHRyaWdnZXJlZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzg2OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzg2OTpcdGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbjc4NzA6XHRcdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG43ODcxOlx0e1xuNzg3MjpcdFx0dW5zaWduZWQgaW50IG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xuNzg3MzpcdFx0dW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltLCBucl9yZWNsYWltZWQgPSAwO1xuNzg3NDpcdFx0aW50IHN3YXBwaW5lc3MgPSAtMTtcbjc4NzU6XHRcdGNoYXIgKm9sZF9idWYsICpzdGFydDtcbjc4NzY6XHRcdHN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTtcbjc4Nzc6XHRcdGdmcF90IGdmcF9tYXNrID0gR0ZQX0tFUk5FTDtcbjc4Nzg6XHRcbjc4Nzk6XHRcdGlmICghYnVmIHx8ICghbWVtY2cgXHUwMDI2XHUwMDI2ICFwZ2RhdCkgfHwgKG1lbWNnIFx1MDAyNlx1MDAyNiBwZ2RhdCkpXG43ODgwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzg4MTpcdFxuNzg4MjpcdFx0YnVmID0gc3Ryc3RyaXAoYnVmKTtcbjc4ODM6XHRcbjc4ODQ6XHRcdG9sZF9idWYgPSBidWY7XG43ODg1Olx0XHRucl90b19yZWNsYWltID0gbWVtcGFyc2UoYnVmLCBcdTAwMjZidWYpIC8gUEFHRV9TSVpFO1xuNzg4NjpcdFx0aWYgKGJ1ZiA9PSBvbGRfYnVmKVxuNzg4NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjc4ODg6XHRcbjc4ODk6XHRcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XG43ODkwOlx0XG43ODkxOlx0XHR3aGlsZSAoKHN0YXJ0ID0gc3Ryc2VwKFx1MDAyNmJ1ZiwgXCYjMzQ7IFwmIzM0OykpICE9IE5VTEwpIHtcbjc4OTI6XHRcdFx0aWYgKCFzdHJsZW4oc3RhcnQpKVxuNzg5MzpcdFx0XHRcdGNvbnRpbnVlO1xuNzg5NDpcdFx0XHRzd2l0Y2ggKG1hdGNoX3Rva2VuKHN0YXJ0LCB0b2tlbnMsIGFyZ3MpKSB7XG43ODk1Olx0XHRcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUzpcbjc4OTY6XHRcdFx0XHRpZiAobWF0Y2hfaW50KFx1MDAyNmFyZ3NbMF0sIFx1MDAyNnN3YXBwaW5lc3MpKVxuNzg5NzpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43ODk4Olx0XHRcdFx0aWYgKHN3YXBwaW5lc3MgXHUwMDNjIE1JTl9TV0FQUElORVNTIHx8XG43ODk5Olx0XHRcdFx0ICAgIHN3YXBwaW5lc3MgXHUwMDNlIE1BWF9TV0FQUElORVNTKVxuNzkwMDpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43OTAxOlx0XHRcdFx0YnJlYWs7XG43OTAyOlx0XHRcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVg6XG43OTAzOlx0XHRcdFx0c3dhcHBpbmVzcyA9IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xuNzkwNDpcdFx0XHRcdGJyZWFrO1xuNzkwNTpcdFx0XHRkZWZhdWx0OlxuNzkwNjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzkwNzpcdFx0XHR9XG43OTA4Olx0XHR9XG43OTA5Olx0XG43OTEwOlx0XHR3aGlsZSAobnJfcmVjbGFpbWVkIFx1MDAzYyBucl90b19yZWNsYWltKSB7XG43OTExOlx0XHRcdC8qIFdpbGwgY29udmVyZ2Ugb24gemVybywgYnV0IHJlY2xhaW0gZW5mb3JjZXMgYSBtaW5pbXVtICovXG43OTEyOlx0XHRcdHVuc2lnbmVkIGxvbmcgYmF0Y2hfc2l6ZSA9IChucl90b19yZWNsYWltIC0gbnJfcmVjbGFpbWVkKSAvIDQ7XG43OTEzOlx0XHRcdHVuc2lnbmVkIGxvbmcgcmVjbGFpbWVkO1xuNzkxNDpcdFxuNzkxNTpcdFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG43OTE2Olx0XHRcdFx0cmV0dXJuIC1FSU5UUjtcbjc5MTc6XHRcbjc5MTg6XHRcdFx0Lypcbjc5MTk6XHRcdFx0ICogVGhpcyBpcyB0aGUgZmluYWwgYXR0ZW1wdCwgZHJhaW4gcGVyY3B1IGxydSBjYWNoZXMgaW4gdGhlXG43OTIwOlx0XHRcdCAqIGhvcGUgb2YgaW50cm9kdWNpbmcgbW9yZSBldmljdGFibGUgcGFnZXMuXG43OTIxOlx0XHRcdCAqL1xuNzkyMjpcdFx0XHRpZiAoIW5yX3JldHJpZXMpXG43OTIzOlx0XHRcdFx0bHJ1X2FkZF9kcmFpbl9hbGwoKTtcbjc5MjQ6XHRcbjc5MjU6XHRcdFx0aWYgKG1lbWNnKSB7XG43OTI2Olx0XHRcdFx0dW5zaWduZWQgaW50IHJlY2xhaW1fb3B0aW9ucztcbjc5Mjc6XHRcbjc5Mjg6XHRcdFx0XHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQIHxcbjc5Mjk6XHRcdFx0XHRcdFx0ICBNRU1DR19SRUNMQUlNX1BST0FDVElWRTtcbjc5MzA6XHRcdFx0XHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLFxuNzkzMTpcdFx0XHRcdFx0XHRcdCBiYXRjaF9zaXplLCBnZnBfbWFzayxcbjc5MzI6XHRcdFx0XHRcdFx0XHQgcmVjbGFpbV9vcHRpb25zLFxuNzkzMzpcdFx0XHRcdFx0XHRcdCBzd2FwcGluZXNzID09IC0xID8gTlVMTCA6IFx1MDAyNnN3YXBwaW5lc3MpO1xuNzkzNDpcdFx0XHR9IGVsc2Uge1xuNzkzNTpcdFx0XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XG43OTM2Olx0XHRcdFx0XHQuZ2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSxcbjc5Mzc6XHRcdFx0XHRcdC5yZWNsYWltX2lkeCA9IGdmcF96b25lKGdmcF9tYXNrKSxcbjc5Mzg6XHRcdFx0XHRcdC5wcm9hY3RpdmVfc3dhcHBpbmVzcyA9IHN3YXBwaW5lc3MgPT0gLTEgPyBOVUxMIDogXHUwMDI2c3dhcHBpbmVzcyxcbjc5Mzk6XHRcdFx0XHRcdC5wcmlvcml0eSA9IERFRl9QUklPUklUWSxcbjc5NDA6XHRcdFx0XHRcdC5tYXlfd3JpdGVwYWdlID0gMSxcbjc5NDE6XHRcdFx0XHRcdC5ucl90b19yZWNsYWltID0gbWF4KGJhdGNoX3NpemUsIFNXQVBfQ0xVU1RFUl9NQVgpLFxuNzk0MjpcdFx0XHRcdFx0Lm1heV91bm1hcCA9IDEsXG43OTQzOlx0XHRcdFx0XHQubWF5X3N3YXAgPSAxLFxuNzk0NDpcdFx0XHRcdFx0LnByb2FjdGl2ZSA9IDEsXG43OTQ1Olx0XHRcdFx0fTtcbjc5NDY6XHRcbjc5NDc6XHRcdFx0XHRpZiAodGVzdF9hbmRfc2V0X2JpdF9sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELFxuNzk0ODpcdFx0XHRcdFx0XHRcdCAgXHUwMDI2cGdkYXQtXHUwMDNlZmxhZ3MpKVxuNzk0OTpcdFx0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjc5NTA6XHRcbjc5NTE6XHRcdFx0XHRyZWNsYWltZWQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgZ2ZwX21hc2ssXG43OTUyOlx0XHRcdFx0XHRcdFx0ICAgYmF0Y2hfc2l6ZSwgXHUwMDI2c2MpO1xuNzk1MzpcdFx0XHRcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKTtcbjc5NTQ6XHRcdFx0fVxuNzk1NTpcdFxuNzk1NjpcdFx0XHRpZiAoIXJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW5yX3JldHJpZXMtLSlcbjc5NTc6XHRcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbjc5NTg6XHRcbjc5NTk6XHRcdFx0bnJfcmVjbGFpbWVkICYjNDM7PSByZWNsYWltZWQ7XG43OTYwOlx0XHR9XG43OTYxOlx0XG43OTYyOlx0XHRyZXR1cm4gMDtcbjc5NjM6XHR9XG43OTY0Olx0XG43OTY1Olx0LyoqXG43OTY2Olx0ICogY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3MgLSBNb3ZlIGV2aWN0YWJsZSBmb2xpb3MgdG8gYXBwcm9wcmlhdGUgem9uZVxuNzk2NzpcdCAqIGxydSBsaXN0XG43OTY4Olx0ICogQGZiYXRjaDogQmF0Y2ggb2YgbHJ1IGZvbGlvcyB0byBjaGVjay5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIFJlY2xhbWF0aW9uIExvZ2ljKioKClJpZ2h0LCBzbyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGhlcmUuIEkgc2VlIGl0IHNldHMgYHNjLnByb2FjdGl2ZSA9IDFgLCB3aGljaCBpcyB0aGUgdHJpZ2dlciBmb3IuLi4gc29tZXRoaW5nLiBUaGVuIGl0IGNhbGxzIGVpdGhlciBgX19ub2RlX3JlY2xhaW1gIG9yIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYC4gT2theSwgdGhhdCBtYWtlcyBzZW5zZSDigJMgaXQmIzM5O3MgaW5pdGlhdGluZyB0aGUgcmVjbGFtYXRpb24gcHJvY2VzcywgZWl0aGVyIGF0IHRoZSBub2RlIGxldmVsIG9yIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgbWVtb3J5IGNncm91cHMuIFRoZSBjb3JlIGxvZ2ljIGNoYW5nZSBzZWVtcyB0byBiZSB3aXRoaW4gdGhlIGBzaG91bGRfYWJvcnRfc2NhbmAgZnVuY3Rpb24uIFRoYXQmIzM5O3Mgd2hlcmUgdGhleSYjMzk7dmUgaW5qZWN0ZWQgdGhlIG5ldyBiZWhhdmlvciwgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuIEkmIzM5O20gZ29pbmcgdG8gcmUtZXhhbWluZSB0aGUgbG9naWMgd2l0aGluIHRoYXQgZnVuY3Rpb24sIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGF0IGNvbnRyb2xzIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZSBzY2FuIGlzIGhhbHRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBuZXcgY29uZGl0aW9ucyBoYXZlIGJlZW4gaW50cm9kdWNlZCBhbmQgaG93IHRoZXkgYWZmZWN0IHRoZSBvdmVyYWxsIHJlY2xhbWF0aW9uIHN0cmF0ZWd5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDkyNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0OTI3Olx0c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjQ5Mjg6XHR7XG40OTI5Olx0XHRpbnQgaTtcbjQ5MzA6XHRcdGVudW0gem9uZV93YXRlcm1hcmtzIG1hcms7XG40OTMxOlx0XG40OTMyOlx0XHRpZiAodW5saWtlbHkoc2MtXHUwMDNlcHJvYWN0aXZlIFx1MDAyNlx1MDAyNiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkpXG40OTMzOlx0XHRcdHJldHVybiB0cnVlO1xuNDkzNDpcdFxuNDkzNTpcdFx0aWYgKHNjLVx1MDAzZW5yX3JlY2xhaW1lZCBcdTAwM2U9IG1heChzYy1cdTAwM2Vucl90b19yZWNsYWltLCBjb21wYWN0X2dhcChzYy1cdTAwM2VvcmRlcikpKVxuNDkzNjpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjQ5Mzc6XHRcbjQ5Mzg6XHRcdC8qIGNoZWNrIHRoZSBvcmRlciB0byBleGNsdWRlIGNvbXBhY3Rpb24taW5kdWNlZCByZWNsYWltICovXG40OTM5Olx0XHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgc2MtXHUwMDNlb3JkZXIpXG40OTQwOlx0XHRcdHJldHVybiBmYWxzZTtcbjQ5NDE6XHRcbjQ5NDI6XHRcdG1hcmsgPSBzeXNjdGxfbnVtYV9iYWxhbmNpbmdfbW9kZSBcdTAwMjYgTlVNQV9CQUxBTkNJTkdfTUVNT1JZX1RJRVJJTkcgP1xuNDk0MzpcdFx0ICAgICAgIFdNQVJLX1BST01PIDogV01BUktfSElHSDtcbjQ5NDQ6XHRcbjQ5NDU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBzYy1cdTAwM2VyZWNsYWltX2lkeDsgaSYjNDM7JiM0MzspIHtcbjQ5NDY6XHRcdFx0c3RydWN0IHpvbmUgKnpvbmUgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKS1cdTAwM2Vub2RlX3pvbmVzICYjNDM7IGk7XG40OTQ3Olx0XHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IHdtYXJrX3BhZ2VzKHpvbmUsIG1hcmspICYjNDM7IE1JTl9MUlVfQkFUQ0g7XG40OTQ4Olx0XG40OTQ5Olx0XHRcdGlmIChtYW5hZ2VkX3pvbmUoem9uZSkgXHUwMDI2XHUwMDI2ICF6b25lX3dhdGVybWFya19vayh6b25lLCAwLCBzaXplLCBzYy1cdTAwM2VyZWNsYWltX2lkeCwgMCkpXG40OTUwOlx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuNDk1MTpcdFx0fVxuNDk1MjpcdFxuNDk1MzpcdFx0Lyoga3N3YXBkIHNob3VsZCBhYm9ydCBpZiBhbGwgZWxpZ2libGUgem9uZXMgYXJlIHNhZmUgKi9cbjQ5NTQ6XHRcdHJldHVybiB0cnVlO1xuNDk1NTpcdH1cbjQ5NTY6XHRcbjQ5NTc6XHQvKlxuNDk1ODpcdCAqIEZvciBmdXR1cmUgb3B0aW1pemF0aW9uczpcbjQ5NTk6XHQgKiAxLiBEZWZlciB0cnlfdG9faW5jX21heF9zZXEoKSB0byB3b3JrcXVldWVzIHRvIHJlZHVjZSBsYXRlbmN5IGZvciBtZW1jZ1xuNDk2MDpcdCAqICAgIHJlY2xhaW0uXG40OTYxOlx0ICovXG40OTYyOlx0c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjQ5NjM6XHR7XG40OTY0Olx0XHRib29sIG5lZWRfcm90YXRlID0gZmFsc2UsIHNob3VsZF9hZ2UgPSBmYWxzZTtcbjQ5NjU6XHRcdGxvbmcgbnJfYmF0Y2gsIG5yX3RvX3NjYW47XG40OTY2Olx0XHRpbnQgc3dhcHBpbmVzcyA9IGdldF9zd2FwcGluZXNzKGxydXZlYywgc2MpO1xuNDk2NzpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG40OTY4Olx0XG40OTY5Olx0XHRucl90b19zY2FuID0gZ2V0X25yX3RvX3NjYW4obHJ1dmVjLCBzYywgbWVtY2csIHN3YXBwaW5lc3MpO1xuNDk3MDpcdFx0d2hpbGUgKG5yX3RvX3NjYW4gXHUwMDNlIDApIHtcbjQ5NzE6XHRcdFx0aW50IGRlbHRhO1xuNDk3MjpcdFx0XHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xuNDk3MzpcdFxuNDk3NDpcdFx0XHRpZiAobWVtX2Nncm91cF9iZWxvd19taW4oc2MtXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsIG1lbWNnKSkge1xuNDk3NTpcdFx0XHRcdG5lZWRfcm90YXRlID0gdHJ1ZTtcbjQ5NzY6XHRcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MjEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgZm9ybWF0dGVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIE1HTFJVIENvZGViYXNlKioKCkhtbSwgc28gYHNob3VsZF9hYm9ydF9zY2FuYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBib3RoIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgYW5kIGBzaHJpbmtfbWFueWAuIFJpZ2h0LCB0aG9zZSBmdW5jdGlvbnMgc291bmQgZmFtaWxpYXIsIGxpa2UgdGhleSBiZWxvbmcgdG8gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBpbXBsZW1lbnRhdGlvbi4gV2FpdCBhIHNlY29uZC4uLiBhcmUgdGhvc2UgTUdMUlUgZnVuY3Rpb25zPyBJIHNob3VsZCBwcm9iYWJseSBjb25maXJtIHRoYXQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiB0aG9zZSBmdW5jdGlvbnMgYXJlIGNvbmRpdGlvbmFsaXplZCB1bmRlciBgQ09ORklHX0xSVV9HRU5gLiBJIG5lZWQgdG8gZW5zdXJlIEkmIzM5O20gY29ycmVjdGx5IGlkZW50aWZ5aW5nIHRoZSBzY29wZSBvZiB0aGlzIHBhcnRpY3VsYXIgY29kZSBzZWdtZW50IHdpdGhpbiB0aGUgYnJvYWRlciBNR0xSVSBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19zaHJpbmtfbHJ1dmVjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NDkyNz1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ5NjEtICovXG5tbS92bXNjYW4uYzo0OTYyOnN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy00OTYzLXtcbi0tXG5tbS92bXNjYW4uYz01MDA3PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUwMjYtXG5tbS92bXNjYW4uYzo1MDI3Olx0bmVlZF9yb3RhdGUgPSB0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTUwMjgtXG4tLVxubW0vdm1zY2FuLmM9NTExOD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTMwLVxubW0vdm1zY2FuLmM6NTEzMTpcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcbm1tL3Ztc2Nhbi5jLTUxMzItXHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MzcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYHNob3VsZF9hYm9ydF9zY2FuYCBEZXBlbmRlbmN5IG9uIGBDT05GSUdfTFJVX0dFTmAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSBhIHBvdGVudGlhbCBkZXBlbmRlbmN5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlIGNvbXBpbGF0aW9uIGFuZCBzdWJzZXF1ZW50IGZ1bmN0aW9uYWxpdHkgb2YgYHNob3VsZF9hYm9ydF9zY2FuYCByZWxpZXMgb24gdGhlIHByZXNlbmNlIGFuZCBjb25maWd1cmF0aW9uIG9mIGBDT05GSUdfTFJVX0dFTmAuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIHN0ZXA7IEkgb2Z0ZW4gc3RhcnQgYnkgdHJhY2luZyB0aGUgY2FsbHMgYW5kIGNvbmZpZ3VyYXRpb25zLgoKSWYgaXQgKmRvZXMqIGRlcGVuZCBvbiBpdCwgaXQgaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgaG93IHdlIG5lZWQgdG8gaGFuZGxlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBNYXliZSB0aGlzIHJlbGF0aW9uc2hpcCBpcyBvYnZpb3VzLCBidXQgSSYjMzk7dmUgbGVhcm5lZCB0aGF0IGFzc3VtcHRpb25zIGFyZSB0aGUgYmFuZSBvZiBlZmZpY2llbnQgZGVidWdnaW5nLCBhbmQgdGh1cywgSSBtdXN0IHN0YXJ0IGZyb20gZmlyc3QgcHJpbmNpcGxlcy4KCk15IG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHdpdGggc291cmNlIGNvZGUgcmV2aWV3IGFuZCBjaGVja2luZyBpZiB0aGUgY29tcGlsYXRpb24gcGF0aCBkZXBlbmRzIG9uIGBDT05GSUdfTFJVX0dFTmAuIFRoZW4sIEkmIzM5O2xsIHRlc3QgdGhlIHNjZW5hcmlvcywgaWYgcmVsZXZhbnQsIGFuZCBlbnN1cmUgdGhhdCBpZiB0aGlzIGZsYWcgaXMgZGlzYWJsZWQsIHRoZSBzeXN0ZW0gc3RpbGwgZnVuY3Rpb25zIGFzIGV4cGVjdGVkIG9yIGdyYWNlZnVsbHkgZmFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19MUlVfR0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9ODI0PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtODMwLVxubW0vdm1zY2FuLmM6ODMxOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtODMyLS8qXG4tLVxubW0vdm1zY2FuLmM9ODU0PXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS92bXNjYW4uYy04NTctfVxubW0vdm1zY2FuLmM6ODU4OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtODU5LVxuLS1cbm1tL3Ztc2Nhbi5jPTI2MTM9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy0yNjI0LVxubW0vdm1zY2FuLmM6MjYyNTojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTI2MjYtXG5tbS92bXNjYW4uYz0yNjI3PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xubW0vdm1zY2FuLmM6MjYyODojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxubW0vdm1zY2FuLmMtMjYyOS1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcbi0tXG5tbS92bXNjYW4uYz0yODA5PXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4MjgtXG5tbS92bXNjYW4uYzoyODI5OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbm1tL3Ztc2Nhbi5jLTI4MzAtXG4tLVxubW0vdm1zY2FuLmM9MjkzOD12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0yOTY2LVxubW0vdm1zY2FuLmM6Mjk2NzojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXG5tbS92bXNjYW4uYy0yOTY4LVxuLS1cbm1tL3Ztc2Nhbi5jPTU4NTg9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xubW0vdm1zY2FuLmMtNTg1OS1cbm1tL3Ztc2Nhbi5jOjU4NjA6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy01ODYxLVxuLS1cbm1tL3Ztc2Nhbi5jPTU4NzI9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01ODc2LVxubW0vdm1zY2FuLmM6NTg3NzojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTU4NzgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDk0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVjbGFpbSBDb2RlKioKCk9rYXksIHNvIGBzaG91bGRfYWJvcnRfc2NhbmAgaXMgZGVmaW5pdGVseSBuZXN0bGVkIHdpdGhpbiB0aGUgYCNpZmRlZiBDT05GSUdfTFJVX0dFTmAgYmxvY2ssIHdoaWNoIG1lYW5zIHRoYXQgYENPTkZJR19MUlVfR0VOYCBpcyBlc3NlbnRpYWwuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGxpbmUgNTg2MC4gSSBhbHNvIG5lZWQgYENPTkZJR19NRU1DR2AgaWYgSSB3YW50IHRvIHBsYXkgd2l0aCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgdXNpbmcgY2dyb3VwIHYyLiBCdXQgd2FpdCwgdGhlcmUmIzM5O3MgYW5vdGhlciBwYXRoISBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgY2FuIGFsc28gYmUgYWNjZXNzZWQgdGhyb3VnaCBgL3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlL25vZGUqL3JlY2xhaW1gLCBhbmQgdGhhdCByb3V0ZSByZXF1aXJlcyBib3RoIGBDT05GSUdfTlVNQWAgYW5kIGBDT05GSUdfU1lTRlNgLiBTbyB5ZXMsIGBDT05GSUdfTFJVX0dFTmAgaXMgZGVmaW5pdGVseSBuZWVkZWQgaGVyZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQsIG9yIHdlJiMzOTtsbCBuZWVkIHRvIGFkZCBpdC4gWWVzLCBhZGRpbmcgYExSVV9HRU5gIGxvb2tzIGxpa2UgYSBzb2xpZCBtb3ZlLiBBbmQgYE1FTUNHYCBpcyBnb29kIHRvIGdvIGFzIHdlbGwuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgb24gdGhlc2UgY29uZmlnczoKCiogICBgTFJVX0dFTmAKKiAgIGBNRU1DR2AKCk5vdyBmb3IgdGhlIGtleSBzeW1ib2xzOiBJJiMzOTt2ZSBnb3QgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCBgbWVtb3J5X3JlY2xhaW1gLCBgcmVjbGFpbV9zdG9yZWAsIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AsIGBzaHJpbmtfbWFueWAsIGFuZCBvZiBjb3Vyc2UgYHNob3VsZF9hYm9ydF9zY2FuYCB3aGljaCBuZWVkcyB0byBiZSBub24taW5saW5lZC4gSSB0aGluayBpdCBpcyBzdGF0aWMsIHNvIHdlIGNhbiBsaXN0IGl0LiBTeXprYWxsZXIgd2lsbCBpZ25vcmUgaXQgaWYgaXQgaXMgaW5saW5lZCBhbnl3YXkuCgpBY3R1YWxseSwgc2NyYXRjaCB0aGF0IOKAkyBgc2hvdWxkX2Fib3J0X3NjYW5gIGlzICptb2RpZmllZCosIG1lYW5pbmcgaXQmIzM5O3MgdGhlIHByaW1hcnkgc3ltYm9sIG9mIGNvbmNlcm4uIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCwgYW5kIGBtZW1vcnlfcmVjbGFpbWAgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBjZ3JvdXAgdjIuIE5vdyBJIG5lZWQgdG8gY2hlY2sgaWYgYG1lbW9yeV9yZWNsYWltYCBpcyBzdGF0aWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW9yeV9yZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz00OTY3PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9vb21fZ3JvdXBfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuLS1cbm1tL21lbWNvbnRyb2wuYy00OTg4LVxubW0vbWVtY29udHJvbC5jOjQ5ODk6c3RhdGljIHNzaXplX3QgbWVtb3J5X3JlY2xhaW0oc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXG5tbS9tZW1jb250cm9sLmMtNDk5MC1cdFx0XHQgICAgICBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxuLS1cbm1tL21lbWNvbnRyb2wuYz01MDAyPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIG1lbW9yeV9maWxlc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MDcwLVx0XHQuZmxhZ3MgPSBDRlRZUEVfTlNfREVMRUdBVEFCTEUsXG5tbS9tZW1jb250cm9sLmM6NTA3MTpcdFx0LndyaXRlID0gbWVtb3J5X3JlY2xhaW0sXG5tbS9tZW1jb250cm9sLmMtNTA3Mi1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTA4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkFzc2Vzc2luZyB0aGUgQ29kZSYjMzk7cyBTdGF0aWMgTmF0dXJlKioKCkFscmlnaHQsIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaXM6ICYjMzQ7WWVzLCBpdCYjMzk7cyBzdGF0aWMuJiMzNDsgU28sIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGRvIGlzIGNvbmZpcm0gbXkgYXNzdW1wdGlvbiBhYm91dCBgcmVjbGFpbV9zdG9yZWAuIElzIHRoaXMgZnVuY3Rpb24sIHRoaXMgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgYWxzbyBkZWZpbmVkIGFzIHN0YXRpYz8gVW5kZXJzdGFuZGluZyBob3cgdGhpcyBmdW5jdGlvbiBpcyBzdHJ1Y3R1cmVkIGlzIGZ1bmRhbWVudGFsIHRvIHRoZSBsYXJnZXIgcHJvYmxlbS4gSSBuZWVkIHRvIGtub3cgaWYgaXQmIzM5O3Mgc3ViamVjdCB0byB0aGUgc2FtZSBzY29wZSBhbmQgbGlmZXRpbWUgY29uc3RyYWludHMsIG9yIGlmIHRoZXJlJiMzOTtzIHNvbWV0aGluZyBlbHNlIGF0IHBsYXkgdGhhdCBtaWdodCBpbXBhY3QgaXRzIGJlaGF2aW9yLiBUaW1lIHRvIGRlbHZlIGEgYml0IGRlZXBlciBhbmQgY29uZmlybSB3aGF0IEkmIzM5O20gZGVhbGluZyB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWNsYWltX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9ODAwOT1FWFBPUlRfU1lNQk9MX0dQTChjaGVja19tb3ZlX3VuZXZpY3RhYmxlX2ZvbGlvcyk7XG4tLVxubW0vdm1zY2FuLmMtODAxMS0jaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19OVU1BKVxubW0vdm1zY2FuLmM6ODAxMjpzdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbm1tL3Ztc2Nhbi5jLTgwMTMtXHRcdFx0ICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4MjcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTdGF0aWMgTWVtb3J5IFJlY2xhbWF0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgbWVtb3J5IHJlY2xhbWF0aW9uIHByb2Nlc3MgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgc3RhdGljIGluIG5hdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIGZvY3VzIHN5bWJvbHMgd2l0aGluIHRoaXMgcHJvY2Vzcy4gSSBuZWVkIHRvIGtlZXAgdGhlIHVzZXImIzM5O3MgcHJvYWN0aXZlIHJlY2xhaW0gYXR0ZW1wdHMgaW4gbWluZCwgc28gSSYjMzk7bSBsb2dnaW5nIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gVGhlbiwgaXQmIzM5O3MgYWJvdXQgdGhlIGdlbmVyYWwgbWVtb3J5IHJlY2xhbWF0aW9uLCBzbyBgbWVtb3J5X3JlY2xhaW1gIGlzIGltcG9ydGFudC4gQWxzbywgdGhlIHJlY2xhbWF0aW9uIHN0b3JlIGl0c2VsZiwgYHJlY2xhaW1fc3RvcmVgIGlzIHJlbGV2YW50LiBJIG5lZWQgdG8gY29uc2lkZXIgb3B0aW9ucyB0byBzaHJpbmsgbHJ1dmVjLCB0aGVyZWZvcmUsIGxvZ2dpbmcgYHRyeV90b19zaHJpbmtfbHJ1dmVjYC4gVGhlcmUgaXMgYWxzbyB0aGUgc2hyaW5rIG1hbnkgZnVuY3Rpb24sIGBzaHJpbmtfbWFueWAsIGFuZCBhbHNvIGEgY29uc2lkZXJhdGlvbiBvZiB3aGV0aGVyIHdlIHNob3VsZCBhYm9ydCB0aGUgc2NhbiBwcm9jZXNzLCB3aGljaCBJJiMzOTtsbCB0cmFjayB3aXRoIGBzaG91bGRfYWJvcnRfc2NhbmAuCgpOb3csIGJlZm9yZSBJIGRpZyBkZWVwZXIsIEkgbmVlZCB0byBjb25zaWRlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpcy4gV2UmIzM5O3ZlIGdvdCBgTFJVX0dFTmAsIGBNRU1DR2AsIGFuZCBgTlVNQWAgYXMgcG9zc2liaWxpdGllcy4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBgTFJVX0dFTmAgaXMgdGhlIHByZWNpc2UgYW5kIGNvcnJlY3QgbmFtZSBvZiB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gYXZvaWQgbWFraW5nIGFueSBhc3N1bXB0aW9ucyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xNDA2PWVuZGlmICMgVVNFUkZBVUxURkRcbi0tXG5tbS9LY29uZmlnLTE0MDgtIyBtdWx0aS1nZW4gTFJVIHtcbm1tL0tjb25maWc6MTQwOTpjb25maWcgTFJVX0dFTlxubW0vS2NvbmZpZy0xNDEwLVx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDE3LVxubW0vS2NvbmZpZzoxNDE4OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQxOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MjMtXG5tbS9LY29uZmlnOjE0MjQ6Y29uZmlnIExSVV9HRU5fU1RBVFNcbm1tL0tjb25maWctMTQyNS1cdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDMyLVxubW0vS2NvbmZpZzoxNDMzOmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDM0LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ0NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25maXJtaW5nIHRoZSBMUlVfR0VOIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgcGlubmVkIGRvd24gdGhhdCBgTFJVX0dFTmAgaXMgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gQW5kLCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTttIHRoaW5raW5nIHdlIG1pZ2h0IGFsc28gbmVlZCB0byBjb25zaWRlciBgTFJVX0dFTl9FTkFCTEVEYCBhcyBhIHBvdGVudGlhbCB3YXkgdG8gaGF2ZSBpdCB0dXJuZWQgb24gYnkgZGVmYXVsdCwgb3IgbWF5YmUgY29udHJvbGxlZCB2aWEgc3lzZnMgbGF0ZXIuIEJ1dCwgZnJvbSBhIGNvbXBpbGF0aW9uIHBlcnNwZWN0aXZlLCBgTFJVX0dFTmAgaXMgdGhlIG9uZSB0aGF0IHJlYWxseSBtYXR0ZXJzIHRvIGdldCB0aGUgY29kZSBpbmNsdWRlZC4KClJpZ2h0LCBzbyBJIGFsc28gbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgc2hvdWxkX2Fib3J0X3NjYW5gIGlzICpvbmx5KiBjb21waWxlZCBpZiBgQ09ORklHX0xSVV9HRU5gIGlzIGFjdGl2ZS4gWWVzLCB0aGF0JiMzOTtzIGl0IC0gaXQmIzM5O3Mgd2l0aGluIGFuIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gIGJsb2NrLiBUaGlzIHNvbGlkaWZpZXMgbXkgdW5kZXJzdGFuZGluZyB0aGF0IGBMUlVfR0VOYCBpcyBhYnNvbHV0ZWx5IHJlcXVpcmVkIGZvciB0aGF0IGZ1bmN0aW9uIHRvIGV2ZW4gZXhpc3QgaW4gdGhlIGNvbXBpbGVkIGNvZGUuCgpOb3csIGxldCYjMzk7cyBqdXN0IGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRvIHNlZSBpZiBgc2hvdWxkX2Fib3J0X3NjYW5gIGlzIGNhbGxlZCBhbnl3aGVyZSB3aGVuIGBMUlVfR0VOYCBpcyBkaXNhYmxlZCwganVzdCB0byBiZSBjZXJ0YWluIHRoZXJlJiMzOTtzIG5vIHN1YnRsZSBkZXBlbmRlbmN5LiBOb3BlLCBpdCYjMzk7cyBhbGwgd3JhcHBlZCB1cCBzYWZlbHkgaW5zaWRlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KCklzIHRoZXJlIGFueSBvdGhlciBsb2NhdGlvbiB0aGF0IG1pZ2h0IGRlZmluZSB0aGlzLCBvciBpcyB0aGlzIGl0PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG91bGRfYWJvcnRfc2NhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz00OTEwPXN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNDkyNi1cbm1tL3Ztc2Nhbi5jOjQ5Mjc6c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTQ5Mjgte1xuLS1cbm1tL3Ztc2Nhbi5jPTQ5NjI9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00OTg5LVxubW0vdm1zY2FuLmM6NDk5MDpcdFx0aWYgKHNob3VsZF9hYm9ydF9zY2FuKGxydXZlYywgc2MpKVxubW0vdm1zY2FuLmMtNDk5MS1cdFx0XHRicmVhaztcbi0tXG5tbS92bXNjYW4uYz01MDQ4PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUwOTMtXG5tbS92bXNjYW4uYzo1MDk0Olx0XHRpZiAoc2hvdWxkX2Fib3J0X3NjYW4obHJ1dmVjLCBzYykpXG5tbS92bXNjYW4uYy01MDk1LVx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzIwOAoJCQkJCQkJb3V0cHV0OiAxNjkKCQkJCQkJCXRob3VnaHRzOiAyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2ggaW4gYG1tL3Ztc2Nhbi5jYCAoQ09ORklHX0xSVV9HRU4pKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IHRhcmdldGVkIHdpdGhpbiBgbW0vdm1zY2FuLmNgIGFuZCBpcyBvbmx5IHJlbGV2YW50IGlmIGBDT05GSUdfTFJVX0dFTmAgaXMgZW5hYmxlZCwgd2hpY2ggaXMgYSBrZXkgc3RhcnRpbmcgcG9pbnQuIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUsIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gQ3JpdGljYWxseSwgaXQgYXBwZWFycyB0byBhZGRyZXNzIGEgbmFzdHkgaXNzdWU6IHByb2FjdGl2ZSByZWNsYWltIHBvdGVudGlhbGx5IGhhbmdpbmcgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBiZWNvbWluZyB1bnJlc3BvbnNpdmUgdG8gc2lnbmFscywgd2hpY2ggd291bGQgYmUgYSByZWFsIHByb2JsZW0gaW4gYSBoaWdoLWxvYWQgZW52aXJvbm1lbnQuIFRoaXMgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGdpdmVuIHRoZSBwb3RlbnRpYWwgc2V2ZXJpdHkgb2YgYSBoYW5nLgoKTXkgYW5hbHlzaXMgdGVsbHMgbWUgdGhlIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb25zIGFyZSBgTFJVX0dFTmAgYW5kIGBNRU1DR2AuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHNwZWNpZmljIHN5bWJvbHMgaGVyZS4gU3BlY2lmaWNhbGx5IEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBgc2hvdWxkX2Fib3J0X3NjYW5gLCBhcyB0aGF0JiMzOTtzIHRoZSBoZWFydCBvZiB0aGUgY2hhbmdlLiBJdCYjMzk7cyByZWxhdGVkIHRvIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AsIGBzaHJpbmtfbWFueWAsIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgYG1lbW9yeV9yZWNsYWltYCBhbmQgYHJlY2xhaW1fc3RvcmVgLgoKVGhlIHBhdGNoJiMzOTtzIGltcGFjdCBpcyB0aGF0IGl0IG1vZGlmaWVzIGBzaG91bGRfYWJvcnRfc2NhbmAgd2l0aGluIHRoZSBNR0xSVSBpbXBsZW1lbnRhdGlvbi4gVGhlIHVwZGF0ZSBlbnN1cmVzIHRoYXQgcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIGlzIGFib3J0ZWQgaWYgYSBzaWduYWwgaXMgcGVuZGluZy4gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHByZXZlbnRpbmcgcHJvYWN0aXZlIHJlY2xhaW0gZnJvbSBnZXR0aW5nIHN0dWNrIGluZGVmaW5pdGVseS4gSXQmIzM5O3MgcmVhY2hhYmxlIHZpYSBjZ3JvdXAgdjImIzM5O3MgYG1lbW9yeS5yZWNsYWltYCBpbnRlcmZhY2Ugb3IgdGhlIHN5c2ZzIG5vZGUgcmVjbGFpbSBtZXRob2QuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnQgaW4gc2lnbmFsIGhhbmRsaW5nIHdpdGhpbiBtZW1vcnkgcmVjbGFpbS4KCkkmIzM5O20gdGhpbmtpbmcgdGhpcyBwYXRjaCBpcyBzb2xpZC4gSXQmIzM5O3MgdGltZSB0byB0ZXN0LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Nob3VsZF9hYm9ydF9zY2FuJiMzNDssCiAgICAmIzM0O3RyeV90b19zaHJpbmtfbHJ1dmVjJiMzNDssCiAgICAmIzM0O3Nocmlua19tYW55JiMzNDssCiAgICAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAgICYjMzQ7bWVtb3J5X3JlY2xhaW0mIzM0OywKICAgICYjMzQ7cmVjbGFpbV9zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc2hvdWxkX2Fib3J0X3NjYW5gIGluIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgY29kZSB0byBhYm9ydCBwcm9hY3RpdmUgbWVtb3J5IHJlY2xhaW0gaWYgYSBzaWduYWwgaXMgcGVuZGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IHByZXZlbnRzIHByb2FjdGl2ZSByZWNsYWltIGZyb20gaGFuZ2luZyBpbmRlZmluaXRlbHkgd2hlbiBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbC4gSXQgaXMgcmVhY2hhYmxlIHZpYSBjZ3JvdXAgdjIgYG1lbW9yeS5yZWNsYWltYCBvciBzeXNmcyBub2RlIHJlY2xhaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzaG91bGRfYWJvcnRfc2NhbiYjMzQ7LAogICAgJiMzNDt0cnlfdG9fc2hyaW5rX2xydXZlYyYjMzQ7LAogICAgJiMzNDtzaHJpbmtfbWFueSYjMzQ7LAogICAgJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgICAmIzM0O21lbW9yeV9yZWNsYWltJiMzNDssCiAgICAmIzM0O3JlY2xhaW1fc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHNob3VsZF9hYm9ydF9zY2FuYCBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGNvZGUgdG8gYWJvcnQgcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIGlmIGEgc2lnbmFsIGlzIHBlbmRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBwcmV2ZW50cyBwcm9hY3RpdmUgcmVjbGFpbSBmcm9tIGhhbmdpbmcgaW5kZWZpbml0ZWx5IHdoZW4gaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwuIEl0IGlzIHJlYWNoYWJsZSB2aWEgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAgb3Igc3lzZnMgbm9kZSByZWNsYWltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzM6NDkuMTg4NjIzNjMzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA5NjE4OTU1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaG91bGRfYWJvcnRfc2NhblwiLFxuICAgIFwidHJ5X3RvX3Nocmlua19scnV2ZWNcIixcbiAgICBcInNocmlua19tYW55XCIsXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gICAgXCJtZW1vcnlfcmVjbGFpbVwiLFxuICAgIFwicmVjbGFpbV9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBzaG91bGRfYWJvcnRfc2NhbmAgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBjb2RlIHRvIGFib3J0IHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSBpZiBhIHNpZ25hbCBpcyBwZW5kaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgcHJldmVudHMgcHJvYWN0aXZlIHJlY2xhaW0gZnJvbSBoYW5naW5nIGluZGVmaW5pdGVseSB3aGVuIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsLiBJdCBpcyByZWFjaGFibGUgdmlhIGNncm91cCB2MiBgbWVtb3J5LnJlY2xhaW1gIG9yIHN5c2ZzIG5vZGUgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzM6NDkuMTg4NjI5NjUzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Njc3MTEwOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3NjE1NDgzYTczZTU0ODdlY2IyYjM3MjdlM2NkZmE3MmEwZWQyMjM3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDYgMDg6MzM6NDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IDM1YzNiYjE1YWU5NmEzLi5mYjQ3MmU5MjRmYzc3MSAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTQ5MjksNiArNDkyOSw5IEBAIHN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuIFxcdGludCBpO1xcbiBcXHRlbnVtIHpvbmVfd2F0ZXJtYXJrcyBtYXJrO1xcbiBcXG4rXFx0aWYgKHVubGlrZWx5KHNjLVxcdTAwM2Vwcm9hY3RpdmUgXFx1MDAyNlxcdTAwMjYgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuIFxcdGlmIChzYy1cXHUwMDNlbnJfcmVjbGFpbWVkIFxcdTAwM2U9IG1heChzYy1cXHUwMDNlbnJfdG9fcmVjbGFpbSwgY29tcGFjdF9nYXAoc2MtXFx1MDAzZW9yZGVyKSkpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzM6NDkuNzU3MTI3MzgyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDM5MzM4MTAxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNob3VsZF9hYm9ydF9zY2FuXCIsXG4gICAgXCJ0cnlfdG9fc2hyaW5rX2xydXZlY1wiLFxuICAgIFwic2hyaW5rX21hbnlcIixcbiAgICBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgICBcIm1lbW9yeV9yZWNsYWltXCIsXG4gICAgXCJyZWNsYWltX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHNob3VsZF9hYm9ydF9zY2FuYCBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGNvZGUgdG8gYWJvcnQgcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIGlmIGEgc2lnbmFsIGlzIHBlbmRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBwcmV2ZW50cyBwcm9hY3RpdmUgcmVjbGFpbSBmcm9tIGhhbmdpbmcgaW5kZWZpbml0ZWx5IHdoZW4gaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwuIEl0IGlzIHJlYWNoYWJsZSB2aWEgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAgb3Igc3lzZnMgbm9kZSByZWNsYWltLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc2MTU0ODNhNzNlNTQ4N2VjYjJiMzcyN2UzY2RmYTcyYTBlZDIyMzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCA2IDA4OjMzOjQ3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YTMuLmZiNDcyZTkyNGZjNzcxIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDkyOSw2ICs0OTI5LDkgQEAgc3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiBcdGludCBpO1xuIFx0ZW51bSB6b25lX3dhdGVybWFya3MgbWFyaztcbiBcbitcdGlmICh1bmxpa2VseShzYy1cdTAwM2Vwcm9hY3RpdmUgXHUwMDI2XHUwMDI2IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4gXHRpZiAoc2MtXHUwMDNlbnJfcmVjbGFpbWVkIFx1MDAzZT0gbWF4KHNjLVx1MDAzZW5yX3RvX3JlY2xhaW0sIGNvbXBhY3RfZ2FwKHNjLVx1MDAzZW9yZGVyKSkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzM6NDkuNzU3MTI5NDYyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIyNzY3MzQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFByb2FjdGl2ZSBTY2FubmluZyBBYm9ydCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL3Ztc2Nhbi5jYCwgd2hpY2ggbWVhbnMgaXQncyBkaXJlY3RseSBpbXBhY3RpbmcgdGhlIGhlYXJ0IG9mIHRoZSB2aXJ0dWFsIG1lbW9yeSBzY2FubmluZyBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGluc2VydGluZyBhIGNoZWNrIHdpdGhpbiB0aGUgYHNob3VsZF9hYm9ydF9zY2FuYCBmdW5jdGlvbi4gTGV0IG1lIHB1bGwgdXAgdGhhdCBmdW5jdGlvbiBpbiBteSBtZW50YWwgbW9kZWwuLi4gcmlnaHQsIGBzaG91bGRfYWJvcnRfc2NhbmAgaXMgdGhlIGdhdGVrZWVwZXIgZGV0ZXJtaW5pbmcgaWYgYSBzY2FuIHNob3VsZCBiZSBwcmVtYXR1cmVseSB0ZXJtaW5hdGVkLiBUaGUga2V5IHBhcnQgaXMgdGhpcyBuZXdseSBhZGRlZCBjb25kaXRpb25hbDogYGlmICh1bmxpa2VseShzYy1cdTAwM2Vwcm9hY3RpdmUgXHUwMDI2XHUwMDI2IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSkgcmV0dXJuIHRydWU7YC5cblxuU28sIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgZm9jdXNlZCBvbmUgd2l0aGluIHRoZSBsYXJnZXIgVk0gc3lzdGVtLiBJdCdzIHNheWluZyB0aGF0IGlmIHdlJ3JlIGluIGEgXCJwcm9hY3RpdmVcIiBzY2FubmluZyBzdGF0ZSAoYHNjLVx1MDAzZXByb2FjdGl2ZWAgaXMgdHJ1ZSkgKmFuZCogdGhlIGN1cnJlbnQgcHJvY2VzcyBoYXMgYSBwZW5kaW5nIHNpZ25hbCAoYHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpYCksIHRoZW4gd2Ugc2hvdWxkIGFib3J0IHRoZSBzY2FuIGltbWVkaWF0ZWx5LiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHByb2FjdGl2ZSBzY2FubmluZyBpcyBhYm91dCBiZWluZyBhZ2dyZXNzaXZlLCBidXQgaXQgc2hvdWxkbid0IGJlIGF0IHRoZSBleHBlbnNlIG9mIHJlc3BvbnNpdmVuZXNzIHRvIHVzZXIgc2lnbmFscywgb2J2aW91c2x5LiBXZSdyZSBwcmlvcml0aXppbmcgdXNlciBpbnB1dCBvdmVyIGFnZ3Jlc3NpdmUgYmFja2dyb3VuZCBtZW1vcnkgcmVjbGFpbWluZyB3aGVuIGEgc2lnbmFsIGlzIHBlbmRpbmcuIFRoaXMgbWFrZXMgdGhlIHN5c3RlbSBtb3JlIHJlc3BvbnNpdmUgdG8gdXNlciBhY3Rpb25zLlxuXG5UaGlzIGlzIGEgZ29vZCwgY2xlYW4gcGF0Y2ggaW4gdGVybXMgb2YgaXRzIHRhcmdldGVkIGltcGFjdC4gSSdkIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgY29udGV4dCBvZiBcInByb2FjdGl2ZVwiIHNjYW5uaW5nLCBvZiBjb3Vyc2UuIFdoYXQgdHJpZ2dlcnMgdGhpcyBzdGF0ZT8gV2hhdCBzaWduYWxzIGFyZSB3ZSBjb25zaWRlcmluZywgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucz8gQnV0IGNvbmNlcHR1YWxseSwgdGhpcyBhZGRpdGlvbiBpcyBzb3VuZCBmcm9tIGEgcmVzb3VyY2UgbWFuYWdlbWVudCBwZXJzcGVjdGl2ZSBhbmQgZW5oYW5jZXMgc3lzdGVtIHJlc3BvbnNpdmVuZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODIzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwODozMzo1My45ODQ4MDUwNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzMxMzM2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaG91bGRfYWJvcnRfc2NhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz00OTEwPXN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy00OTI2LVxcbm1tL3Ztc2Nhbi5jOjQ5Mjc6c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy00OTI4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ5NjI9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5ODktXFxubW0vdm1zY2FuLmM6NDk5MDpcXHRcXHRpZiAoc2hvdWxkX2Fib3J0X3NjYW4obHJ1dmVjLCBzYykpXFxubW0vdm1zY2FuLmMtNDk5MS1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwNDg9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MDkzLVxcbm1tL3Ztc2Nhbi5jOjUwOTQ6XFx0XFx0aWYgKHNob3VsZF9hYm9ydF9zY2FuKGxydXZlYywgc2MpKVxcbm1tL3Ztc2Nhbi5jLTUwOTUtXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjMzOjU0LjA0MjEyNDA0NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjQ1NjU0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTY2FuIEFib3J0IEZ1bmN0aW9uKipcblxuT2theSwgc28gdGhlIGBzaG91bGRfYWJvcnRfc2NhbmAgZnVuY3Rpb24uIFRoYXQncyB1c2VkIGluIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgYW5kIGBzaHJpbmtfbWFueWAsIHNvIGl0J3MgY2xlYXJseSBhY3RpdmUgYW5kIGdldHRpbmcgY2FsbGVkIGFzIGl0IHNob3VsZCBiZS4gSXQncyBwYXJ0IG9mIHRoZSB2bXNjYW4sIG1lbW9yeSByZWNsYWltIHBhdGgsIHdoaWNoIG1lYW5zIGl0IHBsYXlzIGEgY3JpdGljYWwgcm9sZSBpbiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIG1lbW9yeSBwcmVzc3VyZS5cblxuVGhpcyBwYXRjaCwgaW4gcGFydGljdWxhciwgbG9va3MgYXQgYHNjLVx1MDAzZXByb2FjdGl2ZWAgYW5kIGBzaWduYWxfcGVuZGluZyhjdXJyZW50KWAuIEhtbSwgYHNjLVx1MDAzZXByb2FjdGl2ZWAgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBwcm9hY3RpdmUgcmVjbGFpbSwgbGlrZSB3aGF0IHlvdeKAmWQgdHJpZ2dlciB3aXRoIGBtZW1vcnkucmVjbGFpbWAgaW4gY2dyb3VwcyB2Mi4gR290IGl0LiBTbywgbGV0J3MgdHJhY2UgYmFjayB3aGVyZSBgc2MtXHUwMDNlcHJvYWN0aXZlYCBpcyBhY3R1YWxseSAqc2V0Ki4gR290dGEgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhlIHByb2FjdGl2ZSBwYXRoLiBLbm93aW5nIHRob3NlIGNvbmRpdGlvbnMgd2lsbCBnaXZlIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIHBpZWNlIG9mIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NzcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzM6NTcuNzY2NjkxODYyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MDg1NDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2FjdGl2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz03ND1zdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTk1LVxcbm1tL3Ztc2Nhbi5jOjk2OlxcdC8qIFN3YXBwaW5lc3MgdmFsdWUgZm9yIHByb2FjdGl2ZSByZWNsYWltLiBBbHdheXMgdXNlIHNjX3N3YXBwaW5lc3MoKSEgKi9cXG5tbS92bXNjYW4uYzo5NzpcXHRpbnQgKnByb2FjdGl2ZV9zd2FwcGluZXNzO1xcbm1tL3Ztc2Nhbi5jLTk4LVxcbi0tXFxubW0vdm1zY2FuLmMtMTIxLVxcdC8qIFByb2FjdGl2ZSByZWNsYWltIGludm9rZWQgYnkgdXNlcnNwYWNlICovXFxubW0vdm1zY2FuLmM6MTIyOlxcdHVuc2lnbmVkIGludCBwcm9hY3RpdmU6MTtcXG5tbS92bXNjYW4uYy0xMjMtXFxuLS1cXG5tbS92bXNjYW4uYz0yNDI9c3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtMjQzLXtcXG5tbS92bXNjYW4uYzoyNDQ6XFx0aWYgKHNjLVxcdTAwM2Vwcm9hY3RpdmUgXFx1MDAyNlxcdTAwMjYgc2MtXFx1MDAzZXByb2FjdGl2ZV9zd2FwcGluZXNzKVxcbm1tL3Ztc2Nhbi5jOjI0NTpcXHRcXHRyZXR1cm4gKnNjLVxcdTAwM2Vwcm9hY3RpdmVfc3dhcHBpbmVzcztcXG5tbS92bXNjYW4uYy0yNDYtXFx0cmV0dXJuIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhtZW1jZyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yODY9c3RhdGljIHZvaWQgZmx1c2hfcmVjbGFpbV9zdGF0ZShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwMi1cXHQgKiBmcm9tIHRoZSB0YXJnZXQgbWVtY2c7IHByZXZlbnRpbmcgdW5uZWNlc3NhcnkgcmV0cmllcyBkdXJpbmcgbWVtY2dcXG5tbS92bXNjYW4uYzozMDM6XFx0ICogY2hhcmdpbmcgYW5kIGZhbHNlIHBvc2l0aXZlcyBmcm9tIHByb2FjdGl2ZSByZWNsYWltLlxcbm1tL3Ztc2Nhbi5jLTMwNC1cXHQgKlxcbi0tXFxubW0vdm1zY2FuLmM9NDQ0PXN0YXRpYyBpbnQgcmVjbGFpbWVyX29mZnNldChzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1My1cXHRcXHRyZXR1cm4gUEdTVEVBTF9LSFVHRVBBR0VEIC0gUEdTVEVBTF9LU1dBUEQ7XFxubW0vdm1zY2FuLmM6NDU0OlxcdGlmIChzYy1cXHUwMDNlcHJvYWN0aXZlKVxcbm1tL3Ztc2Nhbi5jLTQ1NS1cXHRcXHRyZXR1cm4gUEdTVEVBTF9QUk9BQ1RJVkUgLSBQR1NURUFMX0tTV0FQRDtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTEwNTU9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtMTU2OC1cXHRcXHQgKiBtbG9ja2VkIG9yIHRvbyBob3QgdG8gcmVjbGFpbS4gV2UgY2FuIGRpc2FibGUgcmVjbGFpbVxcbm1tL3Ztc2Nhbi5jOjE1Njk6XFx0XFx0ICogZnJvbSB0b3AgdGllciBub2RlcyBpbiBwcm9hY3RpdmUgcmVjbGFpbSB0aG91Z2ggYXMgdGhhdCBpc1xcbm1tL3Ztc2Nhbi5jLTE1NzAtXFx0XFx0ICogbm90IHJlYWwgbWVtb3J5IHByZXNzdXJlLlxcbm1tL3Ztc2Nhbi5jLTE1NzEtXFx0XFx0ICovXFxubW0vdm1zY2FuLmM6MTU3MjpcXHRcXHRpZiAoIXNjLVxcdTAwM2Vwcm9hY3RpdmUpIHtcXG5tbS92bXNjYW4uYy0xNTczLVxcdFxcdFxcdGRvX2RlbW90ZV9wYXNzID0gZmFsc2U7XFxuLS1cXG5tbS92bXNjYW4uYz0yNDkzPXN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy0yNTIzLVxcdGlmIChzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZKSB7XFxubW0vdm1zY2FuLmM6MjUyNDpcXHRcXHRXQVJOX09OX09OQ0UoIXNjLVxcdTAwM2Vwcm9hY3RpdmUpO1xcbm1tL3Ztc2Nhbi5jLTI1MjUtXFx0XFx0c2Nhbl9iYWxhbmNlID0gU0NBTl9BTk9OO1xcbi0tXFxubW0vdm1zY2FuLmM9NDkyNz1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDkzMS1cXG5tbS92bXNjYW4uYzo0OTMyOlxcdGlmICh1bmxpa2VseShzYy1cXHUwMDNlcHJvYWN0aXZlIFxcdTAwMjZcXHUwMDI2IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSlcXG5tbS92bXNjYW4uYy00OTMzLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vdm1zY2FuLmM9NTAwNz1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwMzAtXFxubW0vdm1zY2FuLmM6NTAzMTpcXHRpZiAoIXNjLVxcdTAwM2Vwcm9hY3RpdmUpXFxubW0vdm1zY2FuLmMtNTAzMi1cXHRcXHR2bXByZXNzdXJlKHNjLVxcdTAwM2VnZnBfbWFzaywgc2MtXFx1MDAzZW9yZGVyLCBtZW1jZywgZmFsc2UsXFxuLS1cXG5tbS92bXNjYW4uYz01MTE4PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTEyOC1cXG5tbS92bXNjYW4uYzo1MTI5OlxcdHNldF9tbV93YWxrKE5VTEwsIHNjLVxcdTAwM2Vwcm9hY3RpdmUpO1xcbm1tL3Ztc2Nhbi5jLTUxMzAtXFxuLS1cXG5tbS92bXNjYW4uYz01MTM5PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MTU3LVxcbm1tL3Ztc2Nhbi5jOjUxNTg6XFx0c2V0X21tX3dhbGsocGdkYXQsIHNjLVxcdTAwM2Vwcm9hY3RpdmUpO1xcbm1tL3Ztc2Nhbi5jLTUxNTktXFxuLS1cXG5tbS92bXNjYW4uYz01NjYxPXN0YXRpYyBzc2l6ZV90IGxydV9nZW5fc2VxX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLFxcbi0tXFxubW0vdm1zY2FuLmMtNTY3NC1cXHRcXHQuZ2ZwX21hc2sgPSBHRlBfS0VSTkVMLFxcbm1tL3Ztc2Nhbi5jOjU2NzU6XFx0XFx0LnByb2FjdGl2ZSA9IHRydWUsXFxubW0vdm1zY2FuLmMtNTY3Ni1cXHR9O1xcbi0tXFxubW0vdm1zY2FuLmM9NjA3MD1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MTM1LVxcdFxcdC8qIFJlY29yZCB0aGUgZ3JvdXAncyByZWNsYWltIGVmZmljaWVuY3kgKi9cXG5tbS92bXNjYW4uYzo2MTM2OlxcdFxcdGlmICghc2MtXFx1MDAzZXByb2FjdGl2ZSlcXG5tbS92bXNjYW4uYy02MTM3LVxcdFxcdFxcdHZtcHJlc3N1cmUoc2MtXFx1MDAzZWdmcF9tYXNrLCBzYy1cXHUwMDNlb3JkZXIsIG1lbWNnLCBmYWxzZSxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYxNDk9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MTgwLVxcdC8qIFJlY29yZCB0aGUgc3VidHJlZSdzIHJlY2xhaW0gZWZmaWNpZW5jeSAqL1xcbm1tL3Ztc2Nhbi5jOjYxODE6XFx0aWYgKCFzYy1cXHUwMDNlcHJvYWN0aXZlKVxcbm1tL3Ztc2Nhbi5jLTYxODItXFx0XFx0dm1wcmVzc3VyZShzYy1cXHUwMDNlZ2ZwX21hc2ssIHNjLVxcdTAwM2VvcmRlciwgc2MtXFx1MDAzZXRhcmdldF9tZW1fY2dyb3VwLCB0cnVlLFxcbi0tXFxubW0vdm1zY2FuLmM9NjQ1Nz1zdGF0aWMgdW5zaWduZWQgbG9uZyBkb190cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtNjQ3MC1cXHRkbyB7XFxubW0vdm1zY2FuLmM6NjQ3MTpcXHRcXHRpZiAoIXNjLVxcdTAwM2Vwcm9hY3RpdmUpXFxubW0vdm1zY2FuLmMtNjQ3Mi1cXHRcXHRcXHR2bXByZXNzdXJlX3ByaW8oc2MtXFx1MDAzZWdmcF9tYXNrLCBzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsXFxuLS1cXG5tbS92bXNjYW4uYz02NzY1PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy02Nzc0LVxcdFxcdC5ucl90b19yZWNsYWltID0gbWF4KG5yX3BhZ2VzLCBTV0FQX0NMVVNURVJfTUFYKSxcXG5tbS92bXNjYW4uYzo2Nzc1OlxcdFxcdC5wcm9hY3RpdmVfc3dhcHBpbmVzcyA9IHN3YXBwaW5lc3MsXFxubW0vdm1zY2FuLmMtNjc3Ni1cXHRcXHQuZ2ZwX21hc2sgPSAoY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzaykgXFx1MDAyNiBHRlBfUkVDTEFJTV9NQVNLKSB8XFxuLS1cXG5tbS92bXNjYW4uYy02NzgzLVxcdFxcdC5tYXlfc3dhcCA9ICEhKHJlY2xhaW1fb3B0aW9ucyBcXHUwMDI2IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVApLFxcbm1tL3Ztc2Nhbi5jOjY3ODQ6XFx0XFx0LnByb2FjdGl2ZSA9ICEhKHJlY2xhaW1fb3B0aW9ucyBcXHUwMDI2IE1FTUNHX1JFQ0xBSU1fUFJPQUNUSVZFKSxcXG5tbS92bXNjYW4uYy02Nzg1LVxcdH07XFxuLS1cXG5tbS92bXNjYW4uYz03ODYzPXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc4NjgtXFxubW0vdm1zY2FuLmM6Nzg2OTppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxubW0vdm1zY2FuLmMtNzg3MC1cXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy03OTM3LVxcdFxcdFxcdFxcdC5yZWNsYWltX2lkeCA9IGdmcF96b25lKGdmcF9tYXNrKSxcXG5tbS92bXNjYW4uYzo3OTM4OlxcdFxcdFxcdFxcdC5wcm9hY3RpdmVfc3dhcHBpbmVzcyA9IHN3YXBwaW5lc3MgPT0gLTEgPyBOVUxMIDogXFx1MDAyNnN3YXBwaW5lc3MsXFxubW0vdm1zY2FuLmMtNzkzOS1cXHRcXHRcXHRcXHQucHJpb3JpdHkgPSBERUZfUFJJT1JJVFksXFxuLS1cXG5tbS92bXNjYW4uYy03OTQzLVxcdFxcdFxcdFxcdC5tYXlfc3dhcCA9IDEsXFxubW0vdm1zY2FuLmM6Nzk0NDpcXHRcXHRcXHRcXHQucHJvYWN0aXZlID0gMSxcXG5tbS92bXNjYW4uYy03OTQ1LVxcdFxcdFxcdH07XFxuLS1cXG5tbS92bXNjYW4uYz04MDEyPXN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxubW0vdm1zY2FuLmMtODAxNy1cXG5tbS92bXNjYW4uYzo4MDE4OlxcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcXG5tbS92bXNjYW4uYy04MDE5LVxcdHJldHVybiByZXQgPyAtRUFHQUlOIDogY291bnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjMzOjU3LjgyNDc4MjA2OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NTk2MjA1NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvYWN0aXZlIFJlY2xhaW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBjcnVjaWFsIGNoZWNrIGZvciBgc2lnbmFsX3BlbmRpbmcoY3VycmVudClgIHdpdGhpbiB0aGUgYHNob3VsZF9hYm9ydF9zY2FuYCBmdW5jdGlvbiwgYnV0IG9ubHkgd2hlbiBgc2MtXHUwMDNlcHJvYWN0aXZlYCBpcyB0cnVlLiBCYXNpY2FsbHksIGl04oCZcyBkZXNpZ25lZCB0byBpbnRlcnJ1cHQgcHJvYWN0aXZlIHJlY2xhaW0gb3BlcmF0aW9ucy4gVGhpcyBpcyBzcGVjaWZpY2FsbHkgcmVsZXZhbnQgdG8gcHJvYWN0aXZlIHJlY2xhaW0gdHJpZ2dlcmVkIHRocm91Z2ggbWV0aG9kcyBsaWtlIGBtZW1vcnkucmVjbGFpbWAgaW4gY2dyb3VwIHYyLCBvciB2aWEgdGhlIGByZWNsYWltYCBzeXNmcyBpbnRlcmZhY2Ugb24gTlVNQSBub2Rlcy5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgcG9zaXRpdmUgY2hhbmdlLiBJdCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgaGFuZyBvciBsb25nLWR1cmF0aW9uIGlzc3VlIHdoZW4gYSBzaWduYWwgaXMgc2VudCB0byB0aGUgcHJvY2VzcyBpbml0aWF0aW5nIHRoZSBwcm9hY3RpdmUgcmVjbGFpbS4gVGhpbmsgYWJvdXQgYSBzaXR1YXRpb24gd2hlcmUgYSB1c2VyLCBwZXJoYXBzIGluYWR2ZXJ0ZW50bHksIHRyaWdnZXJzIGEgbWVtb3J5IHJlY2xhaW0gdmlhIGNncm91cCBhbmQgdGhlbiBuZWVkcyB0byBzdG9wIGl0LiBUaGlzIHBhdGNoIGZhY2lsaXRhdGVzIHRoYXQgaW50ZXJydXB0aW9uLlxuXG5HaXZlbiB0aGF0IGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBkaXJlY3RseSBpbXBhY3RpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgSSdkIHNheSBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkIGhlcmUuIFRoZSBwb3RlbnRpYWwgZm9yIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zIGFuZCBlZGdlIGNhc2VzIHdpdGhpbiB0aGUgTU0gc3Vic3lzdGVtIGlzIGFsd2F5cyBwcmVzZW50LlxuXG5Ob3csIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFByb2FjdGl2ZSByZWNsYWltIGlzIHRyaWdnZXJlZCBieSBib3RoIGNncm91cCB2MidzIGBtZW1vcnkucmVjbGFpbWAgYW5kIHRoZSBzeXNmcyBgL3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlL25vZGUqL3JlY2xhaW1gIGludGVyZmFjZS4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGZ1bmN0aW9uIGluIGBtbS92bXNjYW4uY2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNTAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzQ6MDIuNjg0NDA0NTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcxMzcxNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz03ODYzPXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc4NjgtXFxubW0vdm1zY2FuLmM6Nzg2OTppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxubW0vdm1zY2FuLmMtNzg3MC1cXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYz04MDEyPXN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxubW0vdm1zY2FuLmMtODAxNy1cXG5tbS92bXNjYW4uYzo4MDE4OlxcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcXG5tbS92bXNjYW4uYy04MDE5LVxcdHJldHVybiByZXQgPyAtRUFHQUlOIDogY291bnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjM0OjAyLjc0MTU0NzU3NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjYyNjc3MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgb2YgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLiBUaGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBpcyB0byBzZWUgd2hlcmUgaXQncyAqdXNlZCogb3IgKmRlY2xhcmVkKiBvdXRzaWRlIG9mIHRoZSBgbW0vdm1zY2FuLmNgIGZpbGUgaXRzZWxmLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHVzZSBgZ3JlcGAgb3IgYSBzaW1pbGFyIHRvb2wgdG8gcGVyZm9ybSBhIGNyb3NzLXJlZmVyZW5jZSBzZWFyY2ggdGhyb3VnaG91dCB0aGUga2VybmVsIHNvdXJjZSB0cmVlLiBJJ20gbG9va2luZyBmb3IgZGlyZWN0IHVzZXMgaW4gZnVuY3Rpb24gY2FsbHMsIGRlY2xhcmF0aW9ucyBpbiBoZWFkZXIgZmlsZXMsIG9yIGFueSBvdGhlciByZWZlcmVuY2VzIHRoYXQgY291bGQgcHJvdmlkZSBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gYmUgbWluZGZ1bCBvZiBwb3RlbnRpYWwgY29tcGxleGl0aWVzIGxpa2UgaW5kaXJlY3QgY2FsbHMgdmlhIGZ1bmN0aW9uIHBvaW50ZXJzIG9yIHVzZXMgaW4gbWFjcm8gZXhwYW5zaW9ucywgc28gSSBtaWdodCByZWZpbmUgbXkgc2VhcmNoIHRlcm1zIGFzIEkgZ28uIFVsdGltYXRlbHksIEknbSBhaW1pbmcgdG8gYnVpbGQgYSBtYXAgb2YgaXRzIGV4dGVybmFsIGludGVyYWN0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZml0cyBpbnRvIHRoZSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IGxhbmRzY2FwZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg4MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjM0OjA2LjAwNzgxNzMyNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3MDI1MzkzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTYzMT1leHRlcm4gdm9pZCByZWNsYWltX3Rocm90dGxlKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0gdm1zY2FuX3Rocm90dGxlX3N0YXRlIHJlYXNvbik7XFxubW0vaW50ZXJuYWwuaDo2MzI6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL2ludGVybmFsLmgtNjMzLVxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDk4OT1zdGF0aWMgc3NpemVfdCBtZW1vcnlfcmVjbGFpbShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00OTk0LVxcbm1tL21lbWNvbnRyb2wuYzo0OTk1OlxcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oYnVmLCBtZW1jZywgTlVMTCk7XFxubW0vbWVtY29udHJvbC5jLTQ5OTYtXFx0aWYgKHJldClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc4NjM9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNzg2OC1cXG5tbS92bXNjYW4uYzo3ODY5OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG5tbS92bXNjYW4uYy03ODcwLVxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTgwMTI9c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5tbS92bXNjYW4uYy04MDE3LVxcbm1tL3Ztc2Nhbi5jOjgwMTg6XFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xcbm1tL3Ztc2Nhbi5jLTgwMTktXFx0cmV0dXJuIHJldCA/IC1FQUdBSU4gOiBjb3VudDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzQ6MDguNDc4MDc4NDc0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MDEzOTk2MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IFJlY2xhaW0gSW1wbGVtZW50YXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IG1lbW9yeSByZWNsYWltIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGVzZSBmdW5jdGlvbnMuIEkgc2VlIHRoYXQgYG1lbWNvbnRyb2wuY2AgdXRpbGl6ZXMgaXQgd2l0aGluIHRoZSBgbWVtb3J5X3JlY2xhaW1gIGZ1bmN0aW9uLiBUaGlzIG9uZSBpcyByZWxhdGVkIHRvIGNncm91cCB2MidzIGBtZW1vcnkucmVjbGFpbWAgZmVhdHVyZS4gVGhlbiwgYHZtc2Nhbi5jYCBjb250YWlucyBgcmVjbGFpbV9zdG9yZWAsIHdoaWNoIGlzIHJlbGF0ZWQgdG8gdGhlIGAvc3lzL2RldmljZXMvc3lzdGVtL25vZGUvbm9kZSovcmVjbGFpbWAgaW50ZXJmYWNlLCB3aGljaCBpcyB1c2VkIGZvciBub2RlIHJlY2xhaW0uXG5cblRvIHRlc3QgdGhlc2UgZnVuY3Rpb25hbGl0aWVzIHRob3JvdWdobHksIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGFwcHJvcHJpYXRlIGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gVGhhdCBtZWFucyBJJ2xsIG5lZWQgYENPTkZJR19NRU1DR2AgdG8gd29yayB3aXRoIHRoZSBjZ3JvdXAgbWVtb3J5IGNvbnRyb2xsZXIuIEFsdGVybmF0aXZlbHksIEknbGwgdXNlIGBDT05GSUdfTlVNQWAgaWYgSSB3YW50IHRvIGZvY3VzIG9uIG5vZGUgcmVjbGFpbSB0ZXN0aW5nLlxuXG5MZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gYHJlY2xhaW1fc3RvcmVgIGluIGBtbS92bXNjYW4uY2AuIFRoYXQgc2VlbXMgbGlrZSB0aGUgcmlnaHQgcGxhY2UgdG8gYmVnaW4sIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIG5vZGUgcmVjbGFpbSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTUwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjM0OjEyLjE3OTQ4MDEzMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxNDQyNDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlY2xhaW1fc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9ODAwOT1FWFBPUlRfU1lNQk9MX0dQTChjaGVja19tb3ZlX3VuZXZpY3RhYmxlX2ZvbGlvcyk7XFxuLS1cXG5tbS92bXNjYW4uYy04MDExLSNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQSlcXG5tbS92bXNjYW4uYzo4MDEyOnN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbm1tL3Ztc2Nhbi5jLTgwMTMtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzQ6MTIuMzAwOTI3MDUyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDA0NDc5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIE1lbW9yeSBSZWNsYWltIEZlYXR1cmVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IG1lbW9yeSByZWNsYWltIGlzIGhhbmRsZWQgaW4gdGhpcyBzeXN0ZW0uIEkgc2VlIHRoYXQgdGhlIGByZWNsYWltX3N0b3JlYCBmdW5jdGlvbmFsaXR5IGlzIGNvbmRpdGlvbmFsIG9uIGJvdGggYENPTkZJR19TWVNGU2AgYW5kIGBDT05GSUdfTlVNQWAgYmVpbmcgZW5hYmxlZC4gVGhhdCdzIGdvb2QgdG8ga25vdyDigJMgaXQgZ2l2ZXMgbWUgYSBjbGVhciBpZGVhIG9mIHRoZSBkZXBlbmRlbmNpZXMgdGhlcmUuIE5vdywgdGhlIGBtZW1vcnlfcmVjbGFpbWAgZnVuY3Rpb24gaXRzZWxmLCB0aGUgY29yZSBvZiB0aGUgcmVjbGFpbSBwcm9jZXNzLCBhcHBlYXJzIHRvIGJlIGxvY2F0ZWQgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgIGFuZCBpcyBnb3Zlcm5lZCBieSBgQ09ORklHX01FTUNHYC4gR2l2ZW4gdGhhdCwgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB1bmRlcnN0YW5kaW5nIGhvdyBgQ09ORklHX01FTUNHYCBpbmZsdWVuY2VzIHRoZSBiZWhhdmlvciBvZiBgbWVtb3J5X3JlY2xhaW1gLiBUaW1lIHRvIGRpZyBkZWVwZXIgaW50byBgbW0vbWVtY29udHJvbC5jYCBhbmQgc3BlY2lmaWNhbGx5IGhvdyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGltcGxlbWVudGVkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDQyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzQ6MTUuNzQxMzc2OTM5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDUxMTk3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1vcnlfcmVjbGFpbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTQ5Njc9c3RhdGljIHNzaXplX3QgbWVtb3J5X29vbV9ncm91cF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDk4OC1cXG5tbS9tZW1jb250cm9sLmM6NDk4OTpzdGF0aWMgc3NpemVfdCBtZW1vcnlfcmVjbGFpbShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG5tbS9tZW1jb250cm9sLmMtNDk5MC1cXHRcXHRcXHQgICAgICBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUwMDI9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTA3MC1cXHRcXHQuZmxhZ3MgPSBDRlRZUEVfTlNfREVMRUdBVEFCTEUsXFxubW0vbWVtY29udHJvbC5jOjUwNzE6XFx0XFx0LndyaXRlID0gbWVtb3J5X3JlY2xhaW0sXFxubW0vbWVtY29udHJvbC5jLTUwNzItXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzQ6MTUuODIxODk2MjUzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzM3NDQ0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgUmVjbGFpbSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIGBtZW1vcnlfcmVjbGFpbWAgaXMgZGVmaW5pdGVseSB0aWVkIGludG8gYG1lbW9yeV9maWxlc2AgYW5kIHJlZ2lzdGVyZWQgZm9yIGNncm91cCB2Mi4gVGhhdCBjb25uZWN0aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgZW5hYmxpbmcgYENPTkZJR19NRU1DR2AgaXMgYSBzb2xpZCBtb3ZlLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IHRvdWNoZXMgYHNob3VsZF9hYm9ydF9zY2FuYC4gVGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsIGJlY2F1c2UgaXQncyBjYWxsZWQgZnJvbSBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgc2hyaW5rX21hbnlgLCBzbyBpdCBoYXMgYSBkaXJlY3QgaW1wYWN0IG9uIHRoZSBzaHJpbmtpbmcgbG9naWMuXG5cbkxldCdzIHpvb20gaW4gb24gdGhlIGltcG9ydGFudCBzeW1ib2xzIG5vdy4gSSdtIGZvY3VzaW5nIG9uIGBzaG91bGRfYWJvcnRfc2NhbmAsIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AsIGBzaHJpbmtfbWFueWAsIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgYG1lbW9yeV9yZWNsYWltYCwgYW5kIGByZWNsYWltX3N0b3JlYC4gSSBoYXZlIHRvIGdyYXNwIGhvdyB0aGUgY2hhbmdlcyBpbiBgc2hvdWxkX2Fib3J0X3NjYW5gIHJpcHBsZSB0aHJvdWdoIHRvIHRob3NlIGFyZWFzLlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIGBzaG91bGRfYWJvcnRfc2NhbmAgaXMgKnN0YXRpYyo/IFJpZ2h0LiBUaGF0IGxpa2VseSBtZWFucyBpdCdzIG5vdCBkaXJlY3RseSB2aXNpYmxlIG91dHNpZGUgdGhlIGZpbGUuIEkgaGF2ZSB0byBzZWUgaWYgaXQncyBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciwgb3RoZXJ3aXNlLCBpdCdzIGp1c3QgYSBsb2NhbCBmdW5jdGlvbi4gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGdlbmVyYXRpb24gdG8gYmUgc3VyZSBhYm91dCB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTI0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjM0OjIwLjA1NTY0Mjg2MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYzMDQxNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hvdWxkX2Fib3J0X3NjYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NDkxMD1zdGF0aWMgbG9uZyBnZXRfbnJfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDkyNi1cXG5tbS92bXNjYW4uYzo0OTI3OnN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNDkyOC17XFxuLS1cXG5tbS92bXNjYW4uYz00OTYyPXN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00OTg5LVxcbm1tL3Ztc2Nhbi5jOjQ5OTA6XFx0XFx0aWYgKHNob3VsZF9hYm9ydF9zY2FuKGxydXZlYywgc2MpKVxcbm1tL3Ztc2Nhbi5jLTQ5OTEtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS92bXNjYW4uYz01MDQ4PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTA5My1cXG5tbS92bXNjYW4uYzo1MDk0OlxcdFxcdGlmIChzaG91bGRfYWJvcnRfc2NhbihscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYy01MDk1LVxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwODozNDoyMC4xMjE5NTE0NDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1NTY1MTgyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB0aGlzLlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgQm90dGxlbmVja3MgaW4gTWVtb3J5IFJlY2xhbWF0aW9uKipcblxuUmlnaHQsIHNvIGBzaG91bGRfYWJvcnRfc2NhbmAgYmVpbmcgYHN0YXRpY2AuLi4gdGhhdOKAmXMgcHJvYmFibHkgZ29pbmcgdG8gZ2V0IGlubGluZWQuIE5vdCBhIGh1Z2UgY29uY2VybiB0aGVyZS4gSSBzaG91bGQgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZXNlIGtleSBmdW5jdGlvbnM6IGB0cnlfdG9fc2hyaW5rX2xydXZlY2AsIGBzaHJpbmtfbWFueWAsIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgYG1lbW9yeV9yZWNsYWltYCwgYW5kIGByZWNsYWltX3N0b3JlYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBsaWtlbHkgc3VzcGVjdHMgZm9yIGFueSBwZXJmb3JtYW5jZSBpc3N1ZXMuXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGlzIGFsc28gYSBgc3RhdGljYCBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgYW5kIHBvdGVudGlhbCBmb3IgaW5saW5pbmcgd2lsbCBpbmZsdWVuY2UgaG93IEkgYXBwcm9hY2ggYW5hbHl6aW5nIGl0cyBwZXJmb3JtYW5jZSBjb250cmlidXRpb24uIElmIGl0ICppcyogc3RhdGljLCB0aGUgY29tcGlsZXIgbWlnaHQgYmUgYWJsZSB0byBvcHRpbWl6ZSBpdCBpbiB3YXlzIHRoYXQgYXJlIG1vcmUgZGlmZmljdWx0IHRvIHJlYXNvbiBhYm91dCBmcm9tIGEgc291cmNlLWNvZGUgbGV2ZWwuIE5lZWQgdG8ga2VlcCBhbiBleWUgb24gdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI4MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjM0OjIzLjM3NzYwNTEwOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM0OTkxOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X3RvX3Nocmlua19scnV2ZWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NDkyNz1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDk2MS0gKi9cXG5tbS92bXNjYW4uYzo0OTYyOnN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNDk2My17XFxuLS1cXG5tbS92bXNjYW4uYz01MDA3PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTAyNi1cXG5tbS92bXNjYW4uYzo1MDI3OlxcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNTAyOC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxMTg9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MTMwLVxcbm1tL3Ztc2Nhbi5jOjUxMzE6XFx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxcbm1tL3Ztc2Nhbi5jLTUxMzItXFx0XFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwODozNDoyMy40NDExMTIwNzNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyODQ3NTg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipTdGF0aWMgQW5hbHlzaXMgb2YgYHNocmlua19tYW55YCoqXG5cbk9rYXksIHNvIEknbSB0YWtpbmcgYSBsb29rIGF0IGBzaHJpbmtfbWFueWAuIEkga25vdyBpdCdzIGFsc28gZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGlzIHdvcnRoIG5vdGluZy4gU3RhdGljIGZ1bmN0aW9ucyBoYXZlIHNwZWNpZmljIGltcGxpY2F0aW9ucyByZWdhcmRpbmcgc2NvcGUgYW5kIGxpbmthZ2UsIGFuZCBpdCdzIGEgZGV0YWlsIHRoYXQgb2Z0ZW4gYWZmZWN0cyBob3cgdGhlIGNvbXBpbGVyIG9wdGltaXplcyBhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIG9mIHRoZSBzeXN0ZW0uIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGFuYWx5emUgdGhlIGNvZGUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGlzIHdoZW4gY29uc2lkZXJpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlIGJhc2UgYW5kIHdoZXJlIGl0IGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBJJ2xsIGZvY3VzIG9uIHdoYXQgaXQgZG9lcywgaG93IGl0IGlzIHVzZWQsIGFuZCB3aHkgaXQncyBiZWVuIGRlc2lnbmVkIHRoaXMgd2F5IGluIHRoZSBjb250ZXh0IG9mIGl0IGJlaW5nIGEgc3RhdGljIGZ1bmN0aW9uLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk0MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjM0OjI2LjQ2OTU4OTg1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Nzg2MjUwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfbWFueVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz01MDA3PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTA0Ny1cXG5tbS92bXNjYW4uYzo1MDQ4OnN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUwNDkte1xcbi0tXFxubW0vdm1zY2FuLmM9NTEzOT1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE2Ny1cXHRlbHNlXFxubW0vdm1zY2FuLmM6NTE2ODpcXHRcXHRzaHJpbmtfbWFueShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTUxNjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjM0OjI2LjUyNzQ1ODAxNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODY4Mjg4MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbHJlYWR5IGRlZXAgaW4gdGhlIHdlZWRzIG9mIHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFtYXRpb24sIGFuZCBzcGVha2luZyBkaXJlY3RseSB0byBhbm90aGVyIGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgUHJvYWN0aXZlIFJlY2xhbWF0aW9uIEVudHJ5IFBvaW50KipcblxuUmlnaHQsIHNvIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyB0aGUgbHluY2hwaW4sIHRoZSBwbGFjZSB3aGVyZSBldmVyeXRoaW5nIGtpY2tzIG9mZiBmb3IgcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltLCBpc24ndCBpdD8gVGhhdCdzIHRoZSBlbnRyeSBwb2ludCBJIG5lZWQgdG8gemVybyBpbiBvbi4gRm9yZ2V0IGFib3V0IGFueXRoaW5nIGVsc2UgZm9yIGEgbWludXRlIOKAkyBsZXQncyBnbyBzdHJhaWdodCB0byBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmbG93LCBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgd2hhdCBpdCdzIHJlYWxseSBkb2luZyB1bmRlciB0aGUgaG9vZC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgdGhpcyB0aGluZyBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNjQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwODozNDoyOS4zOTU3NDg1NTRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MDMwMDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9Nzg2Mz1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03ODY4LVxcbm1tL3Ztc2Nhbi5jOjc4Njk6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL3Ztc2Nhbi5jLTc4NzAtXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmM9ODAxMj1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgwMTctXFxubW0vdm1zY2FuLmM6ODAxODpcXHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XFxubW0vdm1zY2FuLmMtODAxOS1cXHRyZXR1cm4gcmV0ID8gLUVBR0FJTiA6IGNvdW50O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwODozNDoyOS40NTI3ODM0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MTY3NDg3NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBhbmQgdXNhZ2Ugb2YgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLiBNeSBmaXJzdCB0aG91Z2h0IHdhcywgXCJJcyB0aGlzIGZ1bmN0aW9uIGV4cG9ydGVkPyBPciBpcyBpdCBkZWNsYXJlZCBhcyBzdGF0aWM/XCIgR2l2ZW4gdGhhdCBJJ20gc2VlaW5nIGl0IHJlZmVyZW5jZWQsIEkgYXNzdW1lZCBpdCBoYWQgdG8gYmUgZXhwb3J0ZWQgb3Igbm9uLXN0YXRpYywgb3RoZXJ3aXNlIGl0IHdvdWxkIGJlIGltcG9zc2libGUgdG8gY2FsbCBpdCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlLlxuXG5XYWl0IGEgbWludXRlLi4uIGl0J3MgKm5vdCogZXhwb3J0ZWQsIHdoaWNoIGlzIHdoYXQgSSB0aG91Z2h0LCBidXQgaXQgKmlzKiBub24tc3RhdGljLiBJbnRlcmVzdGluZy4gSXQncyB1c2VkIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYCwgYnV0IHRoYXQgZG9lc24ndCBpbW1lZGlhdGVseSB0ZWxsIG1lIHRoZSBmdWxsIHBpY3R1cmUuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBpbnZvbHZlZCBpbiB0aGUgcHJvYWN0aXZlIHJlY2xhaW0gcHJvY2Vzcy4gRG9lcyBpdCBkaXJlY3RseSBjYWxsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgb3IgaXMgdGhlcmUgc29tZSBvdGhlciBpbnRlcm1lZGlhcnkgZnVuY3Rpb24gaW4gdGhlIGNhbGwgY2hhaW4/IExldCBtZSBxdWlja2x5IGNoZWNrIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBhbmQgaXRzIGNhbGxlcnMsIGJ1dCwgYWgsIG5vLiBJIGdvdCBpdCB3cm9uZywgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIHByb2JhYmx5IGNhbGxpbmcgdGhhdCBvciBzb21ldGhpbmcgc2ltaWxhciFcblxuQWxyaWdodCwgaXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSdtIGdvaW5nIHRvIHJlYWQgdGhlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBmdW5jdGlvbiBkaXJlY3RseS4gVGhhdCdzIHRoZSBiZXN0IHdheSB0byBncmFzcCBpdHMgcHVycG9zZSwgYXJndW1lbnRzLCByZXR1cm4gdmFsdWVzLCBhbmQgd2hhdCBzcGVjaWZpYyBhY3Rpb25zIGl0IHRha2VzIHdoZW4gdHJpZ2dlcmVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3OTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzQ6MzMuOTY5NTM0Mjg4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MDI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3ODY5LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzg2OTpcXHRpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuNzg3MDpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuNzg3MTpcXHR7XFxuNzg3MjpcXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XFxuNzg3MzpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0sIG5yX3JlY2xhaW1lZCA9IDA7XFxuNzg3NDpcXHRcXHRpbnQgc3dhcHBpbmVzcyA9IC0xO1xcbjc4NzU6XFx0XFx0Y2hhciAqb2xkX2J1ZiwgKnN0YXJ0O1xcbjc4NzY6XFx0XFx0c3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdO1xcbjc4Nzc6XFx0XFx0Z2ZwX3QgZ2ZwX21hc2sgPSBHRlBfS0VSTkVMO1xcbjc4Nzg6XFx0XFxuNzg3OTpcXHRcXHRpZiAoIWJ1ZiB8fCAoIW1lbWNnIFxcdTAwMjZcXHUwMDI2ICFwZ2RhdCkgfHwgKG1lbWNnIFxcdTAwMjZcXHUwMDI2IHBnZGF0KSlcXG43ODgwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc4ODE6XFx0XFxuNzg4MjpcXHRcXHRidWYgPSBzdHJzdHJpcChidWYpO1xcbjc4ODM6XFx0XFxuNzg4NDpcXHRcXHRvbGRfYnVmID0gYnVmO1xcbjc4ODU6XFx0XFx0bnJfdG9fcmVjbGFpbSA9IG1lbXBhcnNlKGJ1ZiwgXFx1MDAyNmJ1ZikgLyBQQUdFX1NJWkU7XFxuNzg4NjpcXHRcXHRpZiAoYnVmID09IG9sZF9idWYpXFxuNzg4NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG43ODg4OlxcdFxcbjc4ODk6XFx0XFx0YnVmID0gc3Ryc3RyaXAoYnVmKTtcXG43ODkwOlxcdFxcbjc4OTE6XFx0XFx0d2hpbGUgKChzdGFydCA9IHN0cnNlcChcXHUwMDI2YnVmLCBcXFwiIFxcXCIpKSAhPSBOVUxMKSB7XFxuNzg5MjpcXHRcXHRcXHRpZiAoIXN0cmxlbihzdGFydCkpXFxuNzg5MzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG43ODk0OlxcdFxcdFxcdHN3aXRjaCAobWF0Y2hfdG9rZW4oc3RhcnQsIHRva2VucywgYXJncykpIHtcXG43ODk1OlxcdFxcdFxcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUzpcXG43ODk2OlxcdFxcdFxcdFxcdGlmIChtYXRjaF9pbnQoXFx1MDAyNmFyZ3NbMF0sIFxcdTAwMjZzd2FwcGluZXNzKSlcXG43ODk3OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc4OTg6XFx0XFx0XFx0XFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAzYyBNSU5fU1dBUFBJTkVTUyB8fFxcbjc4OTk6XFx0XFx0XFx0XFx0ICAgIHN3YXBwaW5lc3MgXFx1MDAzZSBNQVhfU1dBUFBJTkVTUylcXG43OTAwOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc5MDE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNzkwMjpcXHRcXHRcXHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYOlxcbjc5MDM6XFx0XFx0XFx0XFx0c3dhcHBpbmVzcyA9IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xcbjc5MDQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNzkwNTpcXHRcXHRcXHRkZWZhdWx0Olxcbjc5MDY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzkwNzpcXHRcXHRcXHR9XFxuNzkwODpcXHRcXHR9XFxuNzkwOTpcXHRcXG43OTEwOlxcdFxcdHdoaWxlIChucl9yZWNsYWltZWQgXFx1MDAzYyBucl90b19yZWNsYWltKSB7XFxuNzkxMTpcXHRcXHRcXHQvKiBXaWxsIGNvbnZlcmdlIG9uIHplcm8sIGJ1dCByZWNsYWltIGVuZm9yY2VzIGEgbWluaW11bSAqL1xcbjc5MTI6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBiYXRjaF9zaXplID0gKG5yX3RvX3JlY2xhaW0gLSBucl9yZWNsYWltZWQpIC8gNDtcXG43OTEzOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcmVjbGFpbWVkO1xcbjc5MTQ6XFx0XFxuNzkxNTpcXHRcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuNzkxNjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbjc5MTc6XFx0XFxuNzkxODpcXHRcXHRcXHQvKlxcbjc5MTk6XFx0XFx0XFx0ICogVGhpcyBpcyB0aGUgZmluYWwgYXR0ZW1wdCwgZHJhaW4gcGVyY3B1IGxydSBjYWNoZXMgaW4gdGhlXFxuNzkyMDpcXHRcXHRcXHQgKiBob3BlIG9mIGludHJvZHVjaW5nIG1vcmUgZXZpY3RhYmxlIHBhZ2VzLlxcbjc5MjE6XFx0XFx0XFx0ICovXFxuNzkyMjpcXHRcXHRcXHRpZiAoIW5yX3JldHJpZXMpXFxuNzkyMzpcXHRcXHRcXHRcXHRscnVfYWRkX2RyYWluX2FsbCgpO1xcbjc5MjQ6XFx0XFxuNzkyNTpcXHRcXHRcXHRpZiAobWVtY2cpIHtcXG43OTI2OlxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnM7XFxuNzkyNzpcXHRcXG43OTI4OlxcdFxcdFxcdFxcdHJlY2xhaW1fb3B0aW9ucyA9IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAgfFxcbjc5Mjk6XFx0XFx0XFx0XFx0XFx0XFx0ICBNRU1DR19SRUNMQUlNX1BST0FDVElWRTtcXG43OTMwOlxcdFxcdFxcdFxcdHJlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csXFxuNzkzMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgYmF0Y2hfc2l6ZSwgZ2ZwX21hc2ssXFxuNzkzMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgcmVjbGFpbV9vcHRpb25zLFxcbjc5MzM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHN3YXBwaW5lc3MgPT0gLTEgPyBOVUxMIDogXFx1MDAyNnN3YXBwaW5lc3MpO1xcbjc5MzQ6XFx0XFx0XFx0fSBlbHNlIHtcXG43OTM1OlxcdFxcdFxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XFxuNzkzNjpcXHRcXHRcXHRcXHRcXHQuZ2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSxcXG43OTM3OlxcdFxcdFxcdFxcdFxcdC5yZWNsYWltX2lkeCA9IGdmcF96b25lKGdmcF9tYXNrKSxcXG43OTM4OlxcdFxcdFxcdFxcdFxcdC5wcm9hY3RpdmVfc3dhcHBpbmVzcyA9IHN3YXBwaW5lc3MgPT0gLTEgPyBOVUxMIDogXFx1MDAyNnN3YXBwaW5lc3MsXFxuNzkzOTpcXHRcXHRcXHRcXHRcXHQucHJpb3JpdHkgPSBERUZfUFJJT1JJVFksXFxuNzk0MDpcXHRcXHRcXHRcXHRcXHQubWF5X3dyaXRlcGFnZSA9IDEsXFxuNzk0MTpcXHRcXHRcXHRcXHRcXHQubnJfdG9fcmVjbGFpbSA9IG1heChiYXRjaF9zaXplLCBTV0FQX0NMVVNURVJfTUFYKSxcXG43OTQyOlxcdFxcdFxcdFxcdFxcdC5tYXlfdW5tYXAgPSAxLFxcbjc5NDM6XFx0XFx0XFx0XFx0XFx0Lm1heV9zd2FwID0gMSxcXG43OTQ0OlxcdFxcdFxcdFxcdFxcdC5wcm9hY3RpdmUgPSAxLFxcbjc5NDU6XFx0XFx0XFx0XFx0fTtcXG43OTQ2OlxcdFxcbjc5NDc6XFx0XFx0XFx0XFx0aWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCxcXG43OTQ4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnBnZGF0LVxcdTAwM2VmbGFncykpXFxuNzk0OTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbjc5NTA6XFx0XFxuNzk1MTpcXHRcXHRcXHRcXHRyZWNsYWltZWQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgZ2ZwX21hc2ssXFxuNzk1MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBiYXRjaF9zaXplLCBcXHUwMDI2c2MpO1xcbjc5NTM6XFx0XFx0XFx0XFx0Y2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXFx1MDAyNnBnZGF0LVxcdTAwM2VmbGFncyk7XFxuNzk1NDpcXHRcXHRcXHR9XFxuNzk1NTpcXHRcXG43OTU2OlxcdFxcdFxcdGlmICghcmVjbGFpbWVkIFxcdTAwMjZcXHUwMDI2ICFucl9yZXRyaWVzLS0pXFxuNzk1NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG43OTU4OlxcdFxcbjc5NTk6XFx0XFx0XFx0bnJfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcXG43OTYwOlxcdFxcdH1cXG43OTYxOlxcdFxcbjc5NjI6XFx0XFx0cmV0dXJuIDA7XFxuNzk2MzpcXHR9XFxuNzk2NDpcXHRcXG43OTY1OlxcdC8qKlxcbjc5NjY6XFx0ICogY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3MgLSBNb3ZlIGV2aWN0YWJsZSBmb2xpb3MgdG8gYXBwcm9wcmlhdGUgem9uZVxcbjc5Njc6XFx0ICogbHJ1IGxpc3RcXG43OTY4OlxcdCAqIEBmYmF0Y2g6IEJhdGNoIG9mIGxydSBmb2xpb3MgdG8gY2hlY2suXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjM0OjMzLjk2OTkwNTk3OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDM3NTcwNzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gdGhlIFJlY2xhbWF0aW9uIExvZ2ljKipcblxuUmlnaHQsIHNvIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgaGVyZS4gSSBzZWUgaXQgc2V0cyBgc2MucHJvYWN0aXZlID0gMWAsIHdoaWNoIGlzIHRoZSB0cmlnZ2VyIGZvci4uLiBzb21ldGhpbmcuIFRoZW4gaXQgY2FsbHMgZWl0aGVyIGBfX25vZGVfcmVjbGFpbWAgb3IgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlIOKAkyBpdCdzIGluaXRpYXRpbmcgdGhlIHJlY2xhbWF0aW9uIHByb2Nlc3MsIGVpdGhlciBhdCB0aGUgbm9kZSBsZXZlbCBvciBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIG1lbW9yeSBjZ3JvdXBzLiBUaGUgY29yZSBsb2dpYyBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIHRoZSBgc2hvdWxkX2Fib3J0X3NjYW5gIGZ1bmN0aW9uLiBUaGF0J3Mgd2hlcmUgdGhleSd2ZSBpbmplY3RlZCB0aGUgbmV3IGJlaGF2aW9yLCBzbyB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLiBJJ20gZ29pbmcgdG8gcmUtZXhhbWluZSB0aGUgbG9naWMgd2l0aGluIHRoYXQgZnVuY3Rpb24sIGJlY2F1c2UgdGhhdCdzIHdoYXQgY29udHJvbHMgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIHNjYW4gaXMgaGFsdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG5ldyBjb25kaXRpb25zIGhhdmUgYmVlbiBpbnRyb2R1Y2VkIGFuZCBob3cgdGhleSBhZmZlY3QgdGhlIG92ZXJhbGwgcmVjbGFtYXRpb24gc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzc0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwODozNDozNy40MDc0NzkzMzVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ5MjcsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ5Mjc6XFx0c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG40OTI4OlxcdHtcXG40OTI5OlxcdFxcdGludCBpO1xcbjQ5MzA6XFx0XFx0ZW51bSB6b25lX3dhdGVybWFya3MgbWFyaztcXG40OTMxOlxcdFxcbjQ5MzI6XFx0XFx0aWYgKHVubGlrZWx5KHNjLVxcdTAwM2Vwcm9hY3RpdmUgXFx1MDAyNlxcdTAwMjYgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpKVxcbjQ5MzM6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuNDkzNDpcXHRcXG40OTM1OlxcdFxcdGlmIChzYy1cXHUwMDNlbnJfcmVjbGFpbWVkIFxcdTAwM2U9IG1heChzYy1cXHUwMDNlbnJfdG9fcmVjbGFpbSwgY29tcGFjdF9nYXAoc2MtXFx1MDAzZW9yZGVyKSkpXFxuNDkzNjpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG40OTM3OlxcdFxcbjQ5Mzg6XFx0XFx0LyogY2hlY2sgdGhlIG9yZGVyIHRvIGV4Y2x1ZGUgY29tcGFjdGlvbi1pbmR1Y2VkIHJlY2xhaW0gKi9cXG40OTM5OlxcdFxcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSB8fCBzYy1cXHUwMDNlb3JkZXIpXFxuNDk0MDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNDk0MTpcXHRcXG40OTQyOlxcdFxcdG1hcmsgPSBzeXNjdGxfbnVtYV9iYWxhbmNpbmdfbW9kZSBcXHUwMDI2IE5VTUFfQkFMQU5DSU5HX01FTU9SWV9USUVSSU5HID9cXG40OTQzOlxcdFxcdCAgICAgICBXTUFSS19QUk9NTyA6IFdNQVJLX0hJR0g7XFxuNDk0NDpcXHRcXG40OTQ1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gc2MtXFx1MDAzZXJlY2xhaW1faWR4OyBpKyspIHtcXG40OTQ2OlxcdFxcdFxcdHN0cnVjdCB6b25lICp6b25lID0gbHJ1dmVjX3BnZGF0KGxydXZlYyktXFx1MDAzZW5vZGVfem9uZXMgKyBpO1xcbjQ5NDc6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBzaXplID0gd21hcmtfcGFnZXMoem9uZSwgbWFyaykgKyBNSU5fTFJVX0JBVENIO1xcbjQ5NDg6XFx0XFxuNDk0OTpcXHRcXHRcXHRpZiAobWFuYWdlZF96b25lKHpvbmUpIFxcdTAwMjZcXHUwMDI2ICF6b25lX3dhdGVybWFya19vayh6b25lLCAwLCBzaXplLCBzYy1cXHUwMDNlcmVjbGFpbV9pZHgsIDApKVxcbjQ5NTA6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjQ5NTE6XFx0XFx0fVxcbjQ5NTI6XFx0XFxuNDk1MzpcXHRcXHQvKiBrc3dhcGQgc2hvdWxkIGFib3J0IGlmIGFsbCBlbGlnaWJsZSB6b25lcyBhcmUgc2FmZSAqL1xcbjQ5NTQ6XFx0XFx0cmV0dXJuIHRydWU7XFxuNDk1NTpcXHR9XFxuNDk1NjpcXHRcXG40OTU3OlxcdC8qXFxuNDk1ODpcXHQgKiBGb3IgZnV0dXJlIG9wdGltaXphdGlvbnM6XFxuNDk1OTpcXHQgKiAxLiBEZWZlciB0cnlfdG9faW5jX21heF9zZXEoKSB0byB3b3JrcXVldWVzIHRvIHJlZHVjZSBsYXRlbmN5IGZvciBtZW1jZ1xcbjQ5NjA6XFx0ICogICAgcmVjbGFpbS5cXG40OTYxOlxcdCAqL1xcbjQ5NjI6XFx0c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG40OTYzOlxcdHtcXG40OTY0OlxcdFxcdGJvb2wgbmVlZF9yb3RhdGUgPSBmYWxzZSwgc2hvdWxkX2FnZSA9IGZhbHNlO1xcbjQ5NjU6XFx0XFx0bG9uZyBucl9iYXRjaCwgbnJfdG9fc2NhbjtcXG40OTY2OlxcdFxcdGludCBzd2FwcGluZXNzID0gZ2V0X3N3YXBwaW5lc3MobHJ1dmVjLCBzYyk7XFxuNDk2NzpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcXG40OTY4OlxcdFxcbjQ5Njk6XFx0XFx0bnJfdG9fc2NhbiA9IGdldF9ucl90b19zY2FuKGxydXZlYywgc2MsIG1lbWNnLCBzd2FwcGluZXNzKTtcXG40OTcwOlxcdFxcdHdoaWxlIChucl90b19zY2FuIFxcdTAwM2UgMCkge1xcbjQ5NzE6XFx0XFx0XFx0aW50IGRlbHRhO1xcbjQ5NzI6XFx0XFx0XFx0REVGSU5FX01BWF9TRVEobHJ1dmVjKTtcXG40OTczOlxcdFxcbjQ5NzQ6XFx0XFx0XFx0aWYgKG1lbV9jZ3JvdXBfYmVsb3dfbWluKHNjLVxcdTAwM2V0YXJnZXRfbWVtX2Nncm91cCwgbWVtY2cpKSB7XFxuNDk3NTpcXHRcXHRcXHRcXHRuZWVkX3JvdGF0ZSA9IHRydWU7XFxuNDk3NjpcXHRcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzQ6MzcuNDA3OTA5Nzk1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDg0NTEwMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgZm9ybWF0dGVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgTUdMUlUgQ29kZWJhc2UqKlxuXG5IbW0sIHNvIGBzaG91bGRfYWJvcnRfc2NhbmAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYm90aCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgc2hyaW5rX21hbnlgLiBSaWdodCwgdGhvc2UgZnVuY3Rpb25zIHNvdW5kIGZhbWlsaWFyLCBsaWtlIHRoZXkgYmVsb25nIHRvIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgaW1wbGVtZW50YXRpb24uIFdhaXQgYSBzZWNvbmQuLi4gYXJlIHRob3NlIE1HTFJVIGZ1bmN0aW9ucz8gSSBzaG91bGQgcHJvYmFibHkgY29uZmlybSB0aGF0LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgaWYgdGhvc2UgZnVuY3Rpb25zIGFyZSBjb25kaXRpb25hbGl6ZWQgdW5kZXIgYENPTkZJR19MUlVfR0VOYC4gSSBuZWVkIHRvIGVuc3VyZSBJJ20gY29ycmVjdGx5IGlkZW50aWZ5aW5nIHRoZSBzY29wZSBvZiB0aGlzIHBhcnRpY3VsYXIgY29kZSBzZWdtZW50IHdpdGhpbiB0aGUgYnJvYWRlciBNR0xSVSBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTIxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwODozNDo0MC44MTYzNjM4MzRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MTU1ODg5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fc2hyaW5rX2xydXZlY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz00OTI3PXN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00OTYxLSAqL1xcbm1tL3Ztc2Nhbi5jOjQ5NjI6c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy00OTYzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwMDc9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MDI2LVxcbm1tL3Ztc2Nhbi5jOjUwMjc6XFx0bmVlZF9yb3RhdGUgPSB0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcXG5tbS92bXNjYW4uYy01MDI4LVxcbi0tXFxubW0vdm1zY2FuLmM9NTExOD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxMzAtXFxubW0vdm1zY2FuLmM6NTEzMTpcXHRpZiAodHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYykpXFxubW0vdm1zY2FuLmMtNTEzMi1cXHRcXHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9ZT1VORyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjM0OjQxLjE2NzkzMTA0OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDczOTQ1NDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYHNob3VsZF9hYm9ydF9zY2FuYCBEZXBlbmRlbmN5IG9uIGBDT05GSUdfTFJVX0dFTmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB2ZXJpZnkgYSBwb3RlbnRpYWwgZGVwZW5kZW5jeS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZSBjb21waWxhdGlvbiBhbmQgc3Vic2VxdWVudCBmdW5jdGlvbmFsaXR5IG9mIGBzaG91bGRfYWJvcnRfc2NhbmAgcmVsaWVzIG9uIHRoZSBwcmVzZW5jZSBhbmQgY29uZmlndXJhdGlvbiBvZiBgQ09ORklHX0xSVV9HRU5gLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGRlYnVnZ2luZyBzdGVwOyBJIG9mdGVuIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGNhbGxzIGFuZCBjb25maWd1cmF0aW9ucy5cblxuSWYgaXQgKmRvZXMqIGRlcGVuZCBvbiBpdCwgaXQgaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgaG93IHdlIG5lZWQgdG8gaGFuZGxlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBNYXliZSB0aGlzIHJlbGF0aW9uc2hpcCBpcyBvYnZpb3VzLCBidXQgSSd2ZSBsZWFybmVkIHRoYXQgYXNzdW1wdGlvbnMgYXJlIHRoZSBiYW5lIG9mIGVmZmljaWVudCBkZWJ1Z2dpbmcsIGFuZCB0aHVzLCBJIG11c3Qgc3RhcnQgZnJvbSBmaXJzdCBwcmluY2lwbGVzLlxuXG5NeSBtZW50YWwgY2hlY2tsaXN0IHN0YXJ0cyB3aXRoIHNvdXJjZSBjb2RlIHJldmlldyBhbmQgY2hlY2tpbmcgaWYgdGhlIGNvbXBpbGF0aW9uIHBhdGggZGVwZW5kcyBvbiBgQ09ORklHX0xSVV9HRU5gLiBUaGVuLCBJJ2xsIHRlc3QgdGhlIHNjZW5hcmlvcywgaWYgcmVsZXZhbnQsIGFuZCBlbnN1cmUgdGhhdCBpZiB0aGlzIGZsYWcgaXMgZGlzYWJsZWQsIHRoZSBzeXN0ZW0gc3RpbGwgZnVuY3Rpb25zIGFzIGV4cGVjdGVkIG9yIGdyYWNlZnVsbHkgZmFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTM3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzQ6NDQuMjQxODc4NzIyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTA5NTM5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz04MjQ9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgzMC1cXG5tbS92bXNjYW4uYzo4MzE6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmMtODMyLS8qXFxuLS1cXG5tbS92bXNjYW4uYz04NTQ9c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vdm1zY2FuLmMtODU3LX1cXG5tbS92bXNjYW4uYzo4NTg6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtODU5LVxcbi0tXFxubW0vdm1zY2FuLmM9MjYxMz1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtMjYyNC1cXG5tbS92bXNjYW4uYzoyNjI1OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTI2MjYtXFxubW0vdm1zY2FuLmM9MjYyNz1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcXG5tbS92bXNjYW4uYzoyNjI4OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXFxubW0vdm1zY2FuLmMtMjYyOS1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI4MDk9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXFxuLS1cXG5tbS92bXNjYW4uYy0yODI4LVxcbm1tL3Ztc2Nhbi5jOjI4Mjk6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxcbm1tL3Ztc2Nhbi5jLTI4MzAtXFxuLS1cXG5tbS92bXNjYW4uYz0yOTM4PXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMjk2Ni1cXG5tbS92bXNjYW4uYzoyOTY3OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cXG5tbS92bXNjYW4uYy0yOTY4LVxcbi0tXFxubW0vdm1zY2FuLmM9NTg1OD1sYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XFxubW0vdm1zY2FuLmMtNTg1OS1cXG5tbS92bXNjYW4uYzo1ODYwOiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTU4NjEtXFxuLS1cXG5tbS92bXNjYW4uYz01ODcyPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01ODc2LVxcbm1tL3Ztc2Nhbi5jOjU4Nzc6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtNTg3OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzQ6NDQuMzEyOTc5Nzk2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNDYwNjM2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWNsYWltIENvZGUqKlxuXG5Pa2F5LCBzbyBgc2hvdWxkX2Fib3J0X3NjYW5gIGlzIGRlZmluaXRlbHkgbmVzdGxlZCB3aXRoaW4gdGhlIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gIGJsb2NrLCB3aGljaCBtZWFucyB0aGF0IGBDT05GSUdfTFJVX0dFTmAgaXMgZXNzZW50aWFsLiBXZSdyZSB0YWxraW5nIGFib3V0IGxpbmUgNTg2MC4gSSBhbHNvIG5lZWQgYENPTkZJR19NRU1DR2AgaWYgSSB3YW50IHRvIHBsYXkgd2l0aCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgdXNpbmcgY2dyb3VwIHYyLiBCdXQgd2FpdCwgdGhlcmUncyBhbm90aGVyIHBhdGghIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBjYW4gYWxzbyBiZSBhY2Nlc3NlZCB0aHJvdWdoIGAvc3lzL2RldmljZXMvc3lzdGVtL25vZGUvbm9kZSovcmVjbGFpbWAsIGFuZCB0aGF0IHJvdXRlIHJlcXVpcmVzIGJvdGggYENPTkZJR19OVU1BYCBhbmQgYENPTkZJR19TWVNGU2AuIFNvIHllcywgYENPTkZJR19MUlVfR0VOYCBpcyBkZWZpbml0ZWx5IG5lZWRlZCBoZXJlLiBMZXQncyBtYWtlIHN1cmUgaXQncyBlbmFibGVkIGJ5IGRlZmF1bHQsIG9yIHdlJ2xsIG5lZWQgdG8gYWRkIGl0LiBZZXMsIGFkZGluZyBgTFJVX0dFTmAgbG9va3MgbGlrZSBhIHNvbGlkIG1vdmUuIEFuZCBgTUVNQ0dgIGlzIGdvb2QgdG8gZ28gYXMgd2VsbC5cblxuTGV0J3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgb24gdGhlc2UgY29uZmlnczpcblxuKiAgIGBMUlVfR0VOYFxuKiAgIGBNRU1DR2BcblxuTm93IGZvciB0aGUga2V5IHN5bWJvbHM6IEkndmUgZ290IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgYG1lbW9yeV9yZWNsYWltYCwgYHJlY2xhaW1fc3RvcmVgLCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLCBgc2hyaW5rX21hbnlgLCBhbmQgb2YgY291cnNlIGBzaG91bGRfYWJvcnRfc2NhbmAgd2hpY2ggbmVlZHMgdG8gYmUgbm9uLWlubGluZWQuIEkgdGhpbmsgaXQgaXMgc3RhdGljLCBzbyB3ZSBjYW4gbGlzdCBpdC4gU3l6a2FsbGVyIHdpbGwgaWdub3JlIGl0IGlmIGl0IGlzIGlubGluZWQgYW55d2F5LlxuXG5BY3R1YWxseSwgc2NyYXRjaCB0aGF0IOKAkyBgc2hvdWxkX2Fib3J0X3NjYW5gIGlzICptb2RpZmllZCosIG1lYW5pbmcgaXQncyB0aGUgcHJpbWFyeSBzeW1ib2wgb2YgY29uY2Vybi4gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50LCBhbmQgYG1lbW9yeV9yZWNsYWltYCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGNncm91cCB2Mi4gTm93IEkgbmVlZCB0byBjaGVjayBpZiBgbWVtb3J5X3JlY2xhaW1gIGlzIHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0OTQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzQ6NTAuMzU5MDQ2MTMxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzM0MTk0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1vcnlfcmVjbGFpbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTQ5Njc9c3RhdGljIHNzaXplX3QgbWVtb3J5X29vbV9ncm91cF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDk4OC1cXG5tbS9tZW1jb250cm9sLmM6NDk4OTpzdGF0aWMgc3NpemVfdCBtZW1vcnlfcmVjbGFpbShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG5tbS9tZW1jb250cm9sLmMtNDk5MC1cXHRcXHRcXHQgICAgICBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUwMDI9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTA3MC1cXHRcXHQuZmxhZ3MgPSBDRlRZUEVfTlNfREVMRUdBVEFCTEUsXFxubW0vbWVtY29udHJvbC5jOjUwNzE6XFx0XFx0LndyaXRlID0gbWVtb3J5X3JlY2xhaW0sXFxubW0vbWVtY29udHJvbC5jLTUwNzItXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzQ6NTAuNDMyNDE3Nzg2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NjQzMzg5MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkFzc2Vzc2luZyB0aGUgQ29kZSdzIFN0YXRpYyBOYXR1cmUqKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IGlzOiBcIlllcywgaXQncyBzdGF0aWMuXCIgU28sIHRoZSBmaXJzdCB0aGluZyBJJ20gZ29pbmcgdG8gZG8gaXMgY29uZmlybSBteSBhc3N1bXB0aW9uIGFib3V0IGByZWNsYWltX3N0b3JlYC4gSXMgdGhpcyBmdW5jdGlvbiwgdGhpcyBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLCBhbHNvIGRlZmluZWQgYXMgc3RhdGljPyBVbmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHN0cnVjdHVyZWQgaXMgZnVuZGFtZW50YWwgdG8gdGhlIGxhcmdlciBwcm9ibGVtLiBJIG5lZWQgdG8ga25vdyBpZiBpdCdzIHN1YmplY3QgdG8gdGhlIHNhbWUgc2NvcGUgYW5kIGxpZmV0aW1lIGNvbnN0cmFpbnRzLCBvciBpZiB0aGVyZSdzIHNvbWV0aGluZyBlbHNlIGF0IHBsYXkgdGhhdCBtaWdodCBpbXBhY3QgaXRzIGJlaGF2aW9yLiBUaW1lIHRvIGRlbHZlIGEgYml0IGRlZXBlciBhbmQgY29uZmlybSB3aGF0IEknbSBkZWFsaW5nIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTA4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzQ6NTQuODk2NzU4OTgxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDQ2MjU4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWNsYWltX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTgwMDk9RVhQT1JUX1NZTUJPTF9HUEwoY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3MpO1xcbi0tXFxubW0vdm1zY2FuLmMtODAxMS0jaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX05VTUEpXFxubW0vdm1zY2FuLmM6ODAxMjpzdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5tbS92bXNjYW4uYy04MDEzLVxcdFxcdFxcdCAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjM0OjU0Ljk1NzIzMTQ3NloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDU0MjM0NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3RhdGljIE1lbW9yeSBSZWNsYW1hdGlvbiBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBtZW1vcnkgcmVjbGFtYXRpb24gcHJvY2VzcyBhbmQgaXQncyBkZWZpbml0ZWx5IHN0YXRpYyBpbiBuYXR1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBmb2N1cyBzeW1ib2xzIHdpdGhpbiB0aGlzIHByb2Nlc3MuIEkgbmVlZCB0byBrZWVwIHRoZSB1c2VyJ3MgcHJvYWN0aXZlIHJlY2xhaW0gYXR0ZW1wdHMgaW4gbWluZCwgc28gSSdtIGxvZ2dpbmcgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLiBUaGVuLCBpdCdzIGFib3V0IHRoZSBnZW5lcmFsIG1lbW9yeSByZWNsYW1hdGlvbiwgc28gYG1lbW9yeV9yZWNsYWltYCBpcyBpbXBvcnRhbnQuIEFsc28sIHRoZSByZWNsYW1hdGlvbiBzdG9yZSBpdHNlbGYsIGByZWNsYWltX3N0b3JlYCBpcyByZWxldmFudC4gSSBuZWVkIHRvIGNvbnNpZGVyIG9wdGlvbnMgdG8gc2hyaW5rIGxydXZlYywgdGhlcmVmb3JlLCBsb2dnaW5nIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AuIFRoZXJlIGlzIGFsc28gdGhlIHNocmluayBtYW55IGZ1bmN0aW9uLCBgc2hyaW5rX21hbnlgLCBhbmQgYWxzbyBhIGNvbnNpZGVyYXRpb24gb2Ygd2hldGhlciB3ZSBzaG91bGQgYWJvcnQgdGhlIHNjYW4gcHJvY2Vzcywgd2hpY2ggSSdsbCB0cmFjayB3aXRoIGBzaG91bGRfYWJvcnRfc2NhbmAuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGRlZXBlciwgSSBuZWVkIHRvIGNvbnNpZGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGlzLiBXZSd2ZSBnb3QgYExSVV9HRU5gLCBgTUVNQ0dgLCBhbmQgYE5VTUFgIGFzIHBvc3NpYmlsaXRpZXMuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgYExSVV9HRU5gIGlzIHRoZSBwcmVjaXNlIGFuZCBjb3JyZWN0IG5hbWUgb2YgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIGF2b2lkIG1ha2luZyBhbnkgYXNzdW1wdGlvbnMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4MjcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzQ6NTkuMDExNDY4Njc2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODMyMzgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTQwNj1lbmRpZiAjIFVTRVJGQVVMVEZEXFxuLS1cXG5tbS9LY29uZmlnLTE0MDgtIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjE0MDk6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MTAtXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxNy1cXG5tbS9LY29uZmlnOjE0MTg6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQxOS1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQyMy1cXG5tbS9LY29uZmlnOjE0MjQ6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MjUtXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDMyLVxcbm1tL0tjb25maWc6MTQzMzpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MzQtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwODozNDo1OS4wNjk3OTg3NjFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI3MDA5NDE4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25maXJtaW5nIHRoZSBMUlVfR0VOIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIHBpbm5lZCBkb3duIHRoYXQgYExSVV9HRU5gIGlzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuIEFuZCwganVzdCB0byBiZSB0aG9yb3VnaCwgSSdtIHRoaW5raW5nIHdlIG1pZ2h0IGFsc28gbmVlZCB0byBjb25zaWRlciBgTFJVX0dFTl9FTkFCTEVEYCBhcyBhIHBvdGVudGlhbCB3YXkgdG8gaGF2ZSBpdCB0dXJuZWQgb24gYnkgZGVmYXVsdCwgb3IgbWF5YmUgY29udHJvbGxlZCB2aWEgc3lzZnMgbGF0ZXIuIEJ1dCwgZnJvbSBhIGNvbXBpbGF0aW9uIHBlcnNwZWN0aXZlLCBgTFJVX0dFTmAgaXMgdGhlIG9uZSB0aGF0IHJlYWxseSBtYXR0ZXJzIHRvIGdldCB0aGUgY29kZSBpbmNsdWRlZC5cblxuUmlnaHQsIHNvIEkgYWxzbyBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBzaG91bGRfYWJvcnRfc2NhbmAgaXMgKm9ubHkqIGNvbXBpbGVkIGlmIGBDT05GSUdfTFJVX0dFTmAgaXMgYWN0aXZlLiBZZXMsIHRoYXQncyBpdCAtIGl0J3Mgd2l0aGluIGFuIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gIGJsb2NrLiBUaGlzIHNvbGlkaWZpZXMgbXkgdW5kZXJzdGFuZGluZyB0aGF0IGBMUlVfR0VOYCBpcyBhYnNvbHV0ZWx5IHJlcXVpcmVkIGZvciB0aGF0IGZ1bmN0aW9uIHRvIGV2ZW4gZXhpc3QgaW4gdGhlIGNvbXBpbGVkIGNvZGUuXG5cbk5vdywgbGV0J3MganVzdCBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRvIHNlZSBpZiBgc2hvdWxkX2Fib3J0X3NjYW5gIGlzIGNhbGxlZCBhbnl3aGVyZSB3aGVuIGBMUlVfR0VOYCBpcyBkaXNhYmxlZCwganVzdCB0byBiZSBjZXJ0YWluIHRoZXJlJ3Mgbm8gc3VidGxlIGRlcGVuZGVuY3kuIE5vcGUsIGl0J3MgYWxsIHdyYXBwZWQgdXAgc2FmZWx5IGluc2lkZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uXG5cbklzIHRoZXJlIGFueSBvdGhlciBsb2NhdGlvbiB0aGF0IG1pZ2h0IGRlZmluZSB0aGlzLCBvciBpcyB0aGlzIGl0P1xuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ0NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwODozNTowMy4zMzk4OTU1MDRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MTA4ODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNob3VsZF9hYm9ydF9zY2FuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz00OTEwPXN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy00OTI2LVxcbm1tL3Ztc2Nhbi5jOjQ5Mjc6c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy00OTI4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ5NjI9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5ODktXFxubW0vdm1zY2FuLmM6NDk5MDpcXHRcXHRpZiAoc2hvdWxkX2Fib3J0X3NjYW4obHJ1dmVjLCBzYykpXFxubW0vdm1zY2FuLmMtNDk5MS1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwNDg9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MDkzLVxcbm1tL3Ztc2Nhbi5jOjUwOTQ6XFx0XFx0aWYgKHNob3VsZF9hYm9ydF9zY2FuKGxydXZlYywgc2MpKVxcbm1tL3Ztc2Nhbi5jLTUwOTUtXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjM1OjAzLjQwNDAxMTQ0OVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjYyMzA4NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoIGluIGBtbS92bXNjYW4uY2AgKENPTkZJR19MUlVfR0VOKSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IHRhcmdldGVkIHdpdGhpbiBgbW0vdm1zY2FuLmNgIGFuZCBpcyBvbmx5IHJlbGV2YW50IGlmIGBDT05GSUdfTFJVX0dFTmAgaXMgZW5hYmxlZCwgd2hpY2ggaXMgYSBrZXkgc3RhcnRpbmcgcG9pbnQuIEZyb20gd2hhdCBJJ20gc2VlaW5nLCB0aGlzIGlzIGZ1bmN0aW9uYWwgY29kZSwgYW5kIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUuIENyaXRpY2FsbHksIGl0IGFwcGVhcnMgdG8gYWRkcmVzcyBhIG5hc3R5IGlzc3VlOiBwcm9hY3RpdmUgcmVjbGFpbSBwb3RlbnRpYWxseSBoYW5naW5nIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgYmVjb21pbmcgdW5yZXNwb25zaXZlIHRvIHNpZ25hbHMsIHdoaWNoIHdvdWxkIGJlIGEgcmVhbCBwcm9ibGVtIGluIGEgaGlnaC1sb2FkIGVudmlyb25tZW50LiBUaGlzIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBnaXZlbiB0aGUgcG90ZW50aWFsIHNldmVyaXR5IG9mIGEgaGFuZy5cblxuTXkgYW5hbHlzaXMgdGVsbHMgbWUgdGhlIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb25zIGFyZSBgTFJVX0dFTmAgYW5kIGBNRU1DR2AuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHNwZWNpZmljIHN5bWJvbHMgaGVyZS4gU3BlY2lmaWNhbGx5IEknbSBnb2luZyB0byBsb29rIGF0IGBzaG91bGRfYWJvcnRfc2NhbmAsIGFzIHRoYXQncyB0aGUgaGVhcnQgb2YgdGhlIGNoYW5nZS4gSXQncyByZWxhdGVkIHRvIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AsIGBzaHJpbmtfbWFueWAsIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgYG1lbW9yeV9yZWNsYWltYCBhbmQgYHJlY2xhaW1fc3RvcmVgLlxuXG5UaGUgcGF0Y2gncyBpbXBhY3QgaXMgdGhhdCBpdCBtb2RpZmllcyBgc2hvdWxkX2Fib3J0X3NjYW5gIHdpdGhpbiB0aGUgTUdMUlUgaW1wbGVtZW50YXRpb24uIFRoZSB1cGRhdGUgZW5zdXJlcyB0aGF0IHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSBpcyBhYm9ydGVkIGlmIGEgc2lnbmFsIGlzIHBlbmRpbmcuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBwcmV2ZW50aW5nIHByb2FjdGl2ZSByZWNsYWltIGZyb20gZ2V0dGluZyBzdHVjayBpbmRlZmluaXRlbHkuIEl0J3MgcmVhY2hhYmxlIHZpYSBjZ3JvdXAgdjIncyBgbWVtb3J5LnJlY2xhaW1gIGludGVyZmFjZSBvciB0aGUgc3lzZnMgbm9kZSByZWNsYWltIG1ldGhvZC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBpbXByb3ZlbWVudCBpbiBzaWduYWwgaGFuZGxpbmcgd2l0aGluIG1lbW9yeSByZWNsYWltLlxuXG5JJ20gdGhpbmtpbmcgdGhpcyBwYXRjaCBpcyBzb2xpZC4gSXQncyB0aW1lIHRvIHRlc3QsIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMDgsIk91dHB1dFRva2VucyI6MTY5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjM1OjEwLjA2NjMyMjg1M1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MTc5MjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNob3VsZF9hYm9ydF9zY2FuXCIsXG4gICAgXCJ0cnlfdG9fc2hyaW5rX2xydXZlY1wiLFxuICAgIFwic2hyaW5rX21hbnlcIixcbiAgICBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgICBcIm1lbW9yeV9yZWNsYWltXCIsXG4gICAgXCJyZWNsYWltX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHNob3VsZF9hYm9ydF9zY2FuYCBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGNvZGUgdG8gYWJvcnQgcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIGlmIGEgc2lnbmFsIGlzIHBlbmRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBwcmV2ZW50cyBwcm9hY3RpdmUgcmVjbGFpbSBmcm9tIGhhbmdpbmcgaW5kZWZpbml0ZWx5IHdoZW4gaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwuIEl0IGlzIHJlYWNoYWJsZSB2aWEgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAgb3Igc3lzZnMgbm9kZSByZWNsYWltLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2hvdWxkX2Fib3J0X3NjYW5cIixcbiAgICBcInRyeV90b19zaHJpbmtfbHJ1dmVjXCIsXG4gICAgXCJzaHJpbmtfbWFueVwiLFxuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICAgIFwibWVtb3J5X3JlY2xhaW1cIixcbiAgICBcInJlY2xhaW1fc3RvcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgc2hvdWxkX2Fib3J0X3NjYW5gIGluIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgY29kZSB0byBhYm9ydCBwcm9hY3RpdmUgbWVtb3J5IHJlY2xhaW0gaWYgYSBzaWduYWwgaXMgcGVuZGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IHByZXZlbnRzIHByb2FjdGl2ZSByZWNsYWltIGZyb20gaGFuZ2luZyBpbmRlZmluaXRlbHkgd2hlbiBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbC4gSXQgaXMgcmVhY2hhYmxlIHZpYSBjZ3JvdXAgdjIgYG1lbW9yeS5yZWNsYWltYCBvciBzeXNmcyBub2RlIHJlY2xhaW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowr8bs6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-06 08:16:40 +0000 UTC FinishedAt: 2026-07-06 08:35:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "c6b0b9701fcef71ed7cabc0358bb18e15e8e8329", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "c6b0b9701fcef71ed7cabc0358bb18e15e8e8329", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "MEMCG" ], "series_id": "96595318-8fe9-46fb-b7f7-84524bdb1e71" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "should_abort_scan", "try_to_shrink_lruvec", "shrink_many", "user_proactive_reclaim", "memory_reclaim", "reclaim_store" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzaG91bGRfYWJvcnRfc2NhbiYjMzQ7LAogICAgJiMzNDt0cnlfdG9fc2hyaW5rX2xydXZlYyYjMzQ7LAogICAgJiMzNDtzaHJpbmtfbWFueSYjMzQ7LAogICAgJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgICAmIzM0O21lbW9yeV9yZWNsYWltJiMzNDssCiAgICAmIzM0O3JlY2xhaW1fc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHNob3VsZF9hYm9ydF9zY2FuYCBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGNvZGUgdG8gYWJvcnQgcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIGlmIGEgc2lnbmFsIGlzIHBlbmRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBwcmV2ZW50cyBwcm9hY3RpdmUgcmVjbGFpbSBmcm9tIGhhbmdpbmcgaW5kZWZpbml0ZWx5IHdoZW4gaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwuIEl0IGlzIHJlYWNoYWJsZSB2aWEgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAgb3Igc3lzZnMgbm9kZSByZWNsYWltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzYxNTQ4M2E3M2U1NDg3ZWNiMmIzNzI3ZTNjZGZhNzJhMGVkMjIzN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMDg6MzM6NDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YTMuLmZiNDcyZTkyNGZjNzcxIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDkyOSw2ICYjNDM7NDkyOSw5IEBAIHN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXHRpbnQgaTtcbiBcdGVudW0gem9uZV93YXRlcm1hcmtzIG1hcms7XG4gXG4mIzQzO1x0aWYgKHVubGlrZWx5KHNjLVx1MDAzZXByb2FjdGl2ZSBcdTAwMjZcdTAwMjYgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuIFx0aWYgKHNjLVx1MDAzZW5yX3JlY2xhaW1lZCBcdTAwM2U9IG1heChzYy1cdTAwM2Vucl90b19yZWNsYWltLCBjb21wYWN0X2dhcChzYy1cdTAwM2VvcmRlcikpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2hvdWxkX2Fib3J0X3NjYW4mIzM0OywKICAgICYjMzQ7dHJ5X3RvX3Nocmlua19scnV2ZWMmIzM0OywKICAgICYjMzQ7c2hyaW5rX21hbnkmIzM0OywKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDttZW1vcnlfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDtyZWNsYWltX3N0b3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBzaG91bGRfYWJvcnRfc2NhbmAgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBjb2RlIHRvIGFib3J0IHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSBpZiBhIHNpZ25hbCBpcyBwZW5kaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgcHJldmVudHMgcHJvYWN0aXZlIHJlY2xhaW0gZnJvbSBoYW5naW5nIGluZGVmaW5pdGVseSB3aGVuIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsLiBJdCBpcyByZWFjaGFibGUgdmlhIGNncm91cCB2MiBgbWVtb3J5LnJlY2xhaW1gIG9yIHN5c2ZzIG5vZGUgcmVjbGFpbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzYxNTQ4M2E3M2U1NDg3ZWNiMmIzNzI3ZTNjZGZhNzJhMGVkMjIzNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDYgMDg6MzM6NDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDM1YzNiYjE1YWU5NmEzLi5mYjQ3MmU5MjRmYzc3MSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTQ5MjksNiAmIzQzOzQ5MjksOSBAQCBzdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogCWludCBpOwogCWVudW0gem9uZV93YXRlcm1hcmtzIG1hcms7CiAKJiM0MzsJaWYgKHVubGlrZWx5KHNjLSZndDtwcm9hY3RpdmUgJmFtcDsmYW1wOyBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKIAlpZiAoc2MtJmd0O25yX3JlY2xhaW1lZCAmZ3Q7PSBtYXgoc2MtJmd0O25yX3RvX3JlY2xhaW0sIGNvbXBhY3RfZ2FwKHNjLSZndDtvcmRlcikpKQogCQlyZXR1cm4gdHJ1ZTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9hY3RpdmUgU2Nhbm5pbmcgQWJvcnQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vdm1zY2FuLmNgLCB3aGljaCBtZWFucyBpdCYjMzk7cyBkaXJlY3RseSBpbXBhY3RpbmcgdGhlIGhlYXJ0IG9mIHRoZSB2aXJ0dWFsIG1lbW9yeSBzY2FubmluZyBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGluc2VydGluZyBhIGNoZWNrIHdpdGhpbiB0aGUgYHNob3VsZF9hYm9ydF9zY2FuYCBmdW5jdGlvbi4gTGV0IG1lIHB1bGwgdXAgdGhhdCBmdW5jdGlvbiBpbiBteSBtZW50YWwgbW9kZWwuLi4gcmlnaHQsIGBzaG91bGRfYWJvcnRfc2NhbmAgaXMgdGhlIGdhdGVrZWVwZXIgZGV0ZXJtaW5pbmcgaWYgYSBzY2FuIHNob3VsZCBiZSBwcmVtYXR1cmVseSB0ZXJtaW5hdGVkLiBUaGUga2V5IHBhcnQgaXMgdGhpcyBuZXdseSBhZGRlZCBjb25kaXRpb25hbDogYGlmICh1bmxpa2VseShzYy0mZ3Q7cHJvYWN0aXZlICZhbXA7JmFtcDsgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpKSByZXR1cm4gdHJ1ZTtgLgoKU28sIGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGZvY3VzZWQgb25lIHdpdGhpbiB0aGUgbGFyZ2VyIFZNIHN5c3RlbS4gSXQmIzM5O3Mgc2F5aW5nIHRoYXQgaWYgd2UmIzM5O3JlIGluIGEgJiMzNDtwcm9hY3RpdmUmIzM0OyBzY2FubmluZyBzdGF0ZSAoYHNjLSZndDtwcm9hY3RpdmVgIGlzIHRydWUpICphbmQqIHRoZSBjdXJyZW50IHByb2Nlc3MgaGFzIGEgcGVuZGluZyBzaWduYWwgKGBzaWduYWxfcGVuZGluZyhjdXJyZW50KWApLCB0aGVuIHdlIHNob3VsZCBhYm9ydCB0aGUgc2NhbiBpbW1lZGlhdGVseS4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyBwcm9hY3RpdmUgc2Nhbm5pbmcgaXMgYWJvdXQgYmVpbmcgYWdncmVzc2l2ZSwgYnV0IGl0IHNob3VsZG4mIzM5O3QgYmUgYXQgdGhlIGV4cGVuc2Ugb2YgcmVzcG9uc2l2ZW5lc3MgdG8gdXNlciBzaWduYWxzLCBvYnZpb3VzbHkuIFdlJiMzOTtyZSBwcmlvcml0aXppbmcgdXNlciBpbnB1dCBvdmVyIGFnZ3Jlc3NpdmUgYmFja2dyb3VuZCBtZW1vcnkgcmVjbGFpbWluZyB3aGVuIGEgc2lnbmFsIGlzIHBlbmRpbmcuIFRoaXMgbWFrZXMgdGhlIHN5c3RlbSBtb3JlIHJlc3BvbnNpdmUgdG8gdXNlciBhY3Rpb25zLgoKVGhpcyBpcyBhIGdvb2QsIGNsZWFuIHBhdGNoIGluIHRlcm1zIG9mIGl0cyB0YXJnZXRlZCBpbXBhY3QuIEkmIzM5O2QgbmVlZCB0byBjb25zaWRlciB0aGUgYnJvYWRlciBjb250ZXh0IG9mICYjMzQ7cHJvYWN0aXZlJiMzNDsgc2Nhbm5pbmcsIG9mIGNvdXJzZS4gV2hhdCB0cmlnZ2VycyB0aGlzIHN0YXRlPyBXaGF0IHNpZ25hbHMgYXJlIHdlIGNvbnNpZGVyaW5nLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zPyBCdXQgY29uY2VwdHVhbGx5LCB0aGlzIGFkZGl0aW9uIGlzIHNvdW5kIGZyb20gYSByZXNvdXJjZSBtYW5hZ2VtZW50IHBlcnNwZWN0aXZlIGFuZCBlbmhhbmNlcyBzeXN0ZW0gcmVzcG9uc2l2ZW5lc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDg6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hvdWxkX2Fib3J0X3NjYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz00OTEwPXN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNDkyNi1cbm1tL3Ztc2Nhbi5jOjQ5Mjc6c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTQ5Mjgte1xuLS1cbm1tL3Ztc2Nhbi5jPTQ5NjI9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00OTg5LVxubW0vdm1zY2FuLmM6NDk5MDpcdFx0aWYgKHNob3VsZF9hYm9ydF9zY2FuKGxydXZlYywgc2MpKVxubW0vdm1zY2FuLmMtNDk5MS1cdFx0XHRicmVhaztcbi0tXG5tbS92bXNjYW4uYz01MDQ4PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUwOTMtXG5tbS92bXNjYW4uYzo1MDk0Olx0XHRpZiAoc2hvdWxkX2Fib3J0X3NjYW4obHJ1dmVjLCBzYykpXG5tbS92bXNjYW4uYy01MDk1LVx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NzcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTY2FuIEFib3J0IEZ1bmN0aW9uKioKCk9rYXksIHNvIHRoZSBgc2hvdWxkX2Fib3J0X3NjYW5gIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHVzZWQgaW4gYHRyeV90b19zaHJpbmtfbHJ1dmVjYCBhbmQgYHNocmlua19tYW55YCwgc28gaXQmIzM5O3MgY2xlYXJseSBhY3RpdmUgYW5kIGdldHRpbmcgY2FsbGVkIGFzIGl0IHNob3VsZCBiZS4gSXQmIzM5O3MgcGFydCBvZiB0aGUgdm1zY2FuLCBtZW1vcnkgcmVjbGFpbSBwYXRoLCB3aGljaCBtZWFucyBpdCBwbGF5cyBhIGNyaXRpY2FsIHJvbGUgaW4gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtZW1vcnkgcHJlc3N1cmUuCgpUaGlzIHBhdGNoLCBpbiBwYXJ0aWN1bGFyLCBsb29rcyBhdCBgc2MtJmd0O3Byb2FjdGl2ZWAgYW5kIGBzaWduYWxfcGVuZGluZyhjdXJyZW50KWAuIEhtbSwgYHNjLSZndDtwcm9hY3RpdmVgIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gcHJvYWN0aXZlIHJlY2xhaW0sIGxpa2Ugd2hhdCB5b3XigJlkIHRyaWdnZXIgd2l0aCBgbWVtb3J5LnJlY2xhaW1gIGluIGNncm91cHMgdjIuIEdvdCBpdC4gU28sIGxldCYjMzk7cyB0cmFjZSBiYWNrIHdoZXJlIGBzYy0mZ3Q7cHJvYWN0aXZlYCBpcyBhY3R1YWxseSAqc2V0Ki4gR290dGEgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhlIHByb2FjdGl2ZSBwYXRoLiBLbm93aW5nIHRob3NlIGNvbmRpdGlvbnMgd2lsbCBnaXZlIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIHBpZWNlIG9mIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDg6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJvYWN0aXZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NzQ9c3RydWN0IHNjYW5fY29udHJvbCB7XG4tLVxubW0vdm1zY2FuLmMtOTUtXG5tbS92bXNjYW4uYzo5NjpcdC8qIFN3YXBwaW5lc3MgdmFsdWUgZm9yIHByb2FjdGl2ZSByZWNsYWltLiBBbHdheXMgdXNlIHNjX3N3YXBwaW5lc3MoKSEgKi9cbm1tL3Ztc2Nhbi5jOjk3Olx0aW50ICpwcm9hY3RpdmVfc3dhcHBpbmVzcztcbm1tL3Ztc2Nhbi5jLTk4LVxuLS1cbm1tL3Ztc2Nhbi5jLTEyMS1cdC8qIFByb2FjdGl2ZSByZWNsYWltIGludm9rZWQgYnkgdXNlcnNwYWNlICovXG5tbS92bXNjYW4uYzoxMjI6XHR1bnNpZ25lZCBpbnQgcHJvYWN0aXZlOjE7XG5tbS92bXNjYW4uYy0xMjMtXG4tLVxubW0vdm1zY2FuLmM9MjQyPXN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vdm1zY2FuLmMtMjQzLXtcbm1tL3Ztc2Nhbi5jOjI0NDpcdGlmIChzYy1cdTAwM2Vwcm9hY3RpdmUgXHUwMDI2XHUwMDI2IHNjLVx1MDAzZXByb2FjdGl2ZV9zd2FwcGluZXNzKVxubW0vdm1zY2FuLmM6MjQ1Olx0XHRyZXR1cm4gKnNjLVx1MDAzZXByb2FjdGl2ZV9zd2FwcGluZXNzO1xubW0vdm1zY2FuLmMtMjQ2LVx0cmV0dXJuIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhtZW1jZyk7XG4tLVxubW0vdm1zY2FuLmM9Mjg2PXN0YXRpYyB2b2lkIGZsdXNoX3JlY2xhaW1fc3RhdGUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtMzAyLVx0ICogZnJvbSB0aGUgdGFyZ2V0IG1lbWNnOyBwcmV2ZW50aW5nIHVubmVjZXNzYXJ5IHJldHJpZXMgZHVyaW5nIG1lbWNnXG5tbS92bXNjYW4uYzozMDM6XHQgKiBjaGFyZ2luZyBhbmQgZmFsc2UgcG9zaXRpdmVzIGZyb20gcHJvYWN0aXZlIHJlY2xhaW0uXG5tbS92bXNjYW4uYy0zMDQtXHQgKlxuLS1cbm1tL3Ztc2Nhbi5jPTQ0ND1zdGF0aWMgaW50IHJlY2xhaW1lcl9vZmZzZXQoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDUzLVx0XHRyZXR1cm4gUEdTVEVBTF9LSFVHRVBBR0VEIC0gUEdTVEVBTF9LU1dBUEQ7XG5tbS92bXNjYW4uYzo0NTQ6XHRpZiAoc2MtXHUwMDNlcHJvYWN0aXZlKVxubW0vdm1zY2FuLmMtNDU1LVx0XHRyZXR1cm4gUEdTVEVBTF9QUk9BQ1RJVkUgLSBQR1NURUFMX0tTV0FQRDtcbi0tXG5tbS92bXNjYW4uYz0xMDU1PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS92bXNjYW4uYy0xNTY4LVx0XHQgKiBtbG9ja2VkIG9yIHRvbyBob3QgdG8gcmVjbGFpbS4gV2UgY2FuIGRpc2FibGUgcmVjbGFpbVxubW0vdm1zY2FuLmM6MTU2OTpcdFx0ICogZnJvbSB0b3AgdGllciBub2RlcyBpbiBwcm9hY3RpdmUgcmVjbGFpbSB0aG91Z2ggYXMgdGhhdCBpc1xubW0vdm1zY2FuLmMtMTU3MC1cdFx0ICogbm90IHJlYWwgbWVtb3J5IHByZXNzdXJlLlxubW0vdm1zY2FuLmMtMTU3MS1cdFx0ICovXG5tbS92bXNjYW4uYzoxNTcyOlx0XHRpZiAoIXNjLVx1MDAzZXByb2FjdGl2ZSkge1xubW0vdm1zY2FuLmMtMTU3My1cdFx0XHRkb19kZW1vdGVfcGFzcyA9IGZhbHNlO1xuLS1cbm1tL3Ztc2Nhbi5jPTI0OTM9c3RhdGljIHZvaWQgZ2V0X3NjYW5fY291bnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy0yNTIzLVx0aWYgKHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFkpIHtcbm1tL3Ztc2Nhbi5jOjI1MjQ6XHRcdFdBUk5fT05fT05DRSghc2MtXHUwMDNlcHJvYWN0aXZlKTtcbm1tL3Ztc2Nhbi5jLTI1MjUtXHRcdHNjYW5fYmFsYW5jZSA9IFNDQU5fQU5PTjtcbi0tXG5tbS92bXNjYW4uYz00OTI3PXN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDkzMS1cbm1tL3Ztc2Nhbi5jOjQ5MzI6XHRpZiAodW5saWtlbHkoc2MtXHUwMDNlcHJvYWN0aXZlIFx1MDAyNlx1MDAyNiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkpXG5tbS92bXNjYW4uYy00OTMzLVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5tbS92bXNjYW4uYz01MDA3PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUwMzAtXG5tbS92bXNjYW4uYzo1MDMxOlx0aWYgKCFzYy1cdTAwM2Vwcm9hY3RpdmUpXG5tbS92bXNjYW4uYy01MDMyLVx0XHR2bXByZXNzdXJlKHNjLVx1MDAzZWdmcF9tYXNrLCBzYy1cdTAwM2VvcmRlciwgbWVtY2csIGZhbHNlLFxuLS1cbm1tL3Ztc2Nhbi5jPTUxMTg9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTEyOC1cbm1tL3Ztc2Nhbi5jOjUxMjk6XHRzZXRfbW1fd2FsayhOVUxMLCBzYy1cdTAwM2Vwcm9hY3RpdmUpO1xubW0vdm1zY2FuLmMtNTEzMC1cbi0tXG5tbS92bXNjYW4uYz01MTM5PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTE1Ny1cbm1tL3Ztc2Nhbi5jOjUxNTg6XHRzZXRfbW1fd2FsayhwZ2RhdCwgc2MtXHUwMDNlcHJvYWN0aXZlKTtcbm1tL3Ztc2Nhbi5jLTUxNTktXG4tLVxubW0vdm1zY2FuLmM9NTY2MT1zdGF0aWMgc3NpemVfdCBscnVfZ2VuX3NlcV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnNyYyxcbi0tXG5tbS92bXNjYW4uYy01Njc0LVx0XHQuZ2ZwX21hc2sgPSBHRlBfS0VSTkVMLFxubW0vdm1zY2FuLmM6NTY3NTpcdFx0LnByb2FjdGl2ZSA9IHRydWUsXG5tbS92bXNjYW4uYy01Njc2LVx0fTtcbi0tXG5tbS92bXNjYW4uYz02MDcwPXN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MTM1LVx0XHQvKiBSZWNvcmQgdGhlIGdyb3VwJiMzOTtzIHJlY2xhaW0gZWZmaWNpZW5jeSAqL1xubW0vdm1zY2FuLmM6NjEzNjpcdFx0aWYgKCFzYy1cdTAwM2Vwcm9hY3RpdmUpXG5tbS92bXNjYW4uYy02MTM3LVx0XHRcdHZtcHJlc3N1cmUoc2MtXHUwMDNlZ2ZwX21hc2ssIHNjLVx1MDAzZW9yZGVyLCBtZW1jZywgZmFsc2UsXG4tLVxubW0vdm1zY2FuLmM9NjE0OT1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MTgwLVx0LyogUmVjb3JkIHRoZSBzdWJ0cmVlJiMzOTtzIHJlY2xhaW0gZWZmaWNpZW5jeSAqL1xubW0vdm1zY2FuLmM6NjE4MTpcdGlmICghc2MtXHUwMDNlcHJvYWN0aXZlKVxubW0vdm1zY2FuLmMtNjE4Mi1cdFx0dm1wcmVzc3VyZShzYy1cdTAwM2VnZnBfbWFzaywgc2MtXHUwMDNlb3JkZXIsIHNjLVx1MDAzZXRhcmdldF9tZW1fY2dyb3VwLCB0cnVlLFxuLS1cbm1tL3Ztc2Nhbi5jPTY0NTc9c3RhdGljIHVuc2lnbmVkIGxvbmcgZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcbi0tXG5tbS92bXNjYW4uYy02NDcwLVx0ZG8ge1xubW0vdm1zY2FuLmM6NjQ3MTpcdFx0aWYgKCFzYy1cdTAwM2Vwcm9hY3RpdmUpXG5tbS92bXNjYW4uYy02NDcyLVx0XHRcdHZtcHJlc3N1cmVfcHJpbyhzYy1cdTAwM2VnZnBfbWFzaywgc2MtXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsXG4tLVxubW0vdm1zY2FuLmM9Njc2NT11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY3NzQtXHRcdC5ucl90b19yZWNsYWltID0gbWF4KG5yX3BhZ2VzLCBTV0FQX0NMVVNURVJfTUFYKSxcbm1tL3Ztc2Nhbi5jOjY3NzU6XHRcdC5wcm9hY3RpdmVfc3dhcHBpbmVzcyA9IHN3YXBwaW5lc3MsXG5tbS92bXNjYW4uYy02Nzc2LVx0XHQuZ2ZwX21hc2sgPSAoY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzaykgXHUwMDI2IEdGUF9SRUNMQUlNX01BU0spIHxcbi0tXG5tbS92bXNjYW4uYy02NzgzLVx0XHQubWF5X3N3YXAgPSAhIShyZWNsYWltX29wdGlvbnMgXHUwMDI2IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVApLFxubW0vdm1zY2FuLmM6Njc4NDpcdFx0LnByb2FjdGl2ZSA9ICEhKHJlY2xhaW1fb3B0aW9ucyBcdTAwMjYgTUVNQ0dfUkVDTEFJTV9QUk9BQ1RJVkUpLFxubW0vdm1zY2FuLmMtNjc4NS1cdH07XG4tLVxubW0vdm1zY2FuLmM9Nzg2Mz1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG4tLVxubW0vdm1zY2FuLmMtNzg2OC1cbm1tL3Ztc2Nhbi5jOjc4Njk6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vdm1zY2FuLmMtNzg3MC1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNzkzNy1cdFx0XHRcdC5yZWNsYWltX2lkeCA9IGdmcF96b25lKGdmcF9tYXNrKSxcbm1tL3Ztc2Nhbi5jOjc5Mzg6XHRcdFx0XHQucHJvYWN0aXZlX3N3YXBwaW5lc3MgPSBzd2FwcGluZXNzID09IC0xID8gTlVMTCA6IFx1MDAyNnN3YXBwaW5lc3MsXG5tbS92bXNjYW4uYy03OTM5LVx0XHRcdFx0LnByaW9yaXR5ID0gREVGX1BSSU9SSVRZLFxuLS1cbm1tL3Ztc2Nhbi5jLTc5NDMtXHRcdFx0XHQubWF5X3N3YXAgPSAxLFxubW0vdm1zY2FuLmM6Nzk0NDpcdFx0XHRcdC5wcm9hY3RpdmUgPSAxLFxubW0vdm1zY2FuLmMtNzk0NS1cdFx0XHR9O1xuLS1cbm1tL3Ztc2Nhbi5jPTgwMTI9c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxubW0vdm1zY2FuLmMtODAxNy1cbm1tL3Ztc2Nhbi5jOjgwMTg6XHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XG5tbS92bXNjYW4uYy04MDE5LVx0cmV0dXJuIHJldCA/IC1FQUdBSU4gOiBjb3VudDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTUwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb2FjdGl2ZSBSZWNsYWltIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGNydWNpYWwgY2hlY2sgZm9yIGBzaWduYWxfcGVuZGluZyhjdXJyZW50KWAgd2l0aGluIHRoZSBgc2hvdWxkX2Fib3J0X3NjYW5gIGZ1bmN0aW9uLCBidXQgb25seSB3aGVuIGBzYy0mZ3Q7cHJvYWN0aXZlYCBpcyB0cnVlLiBCYXNpY2FsbHksIGl04oCZcyBkZXNpZ25lZCB0byBpbnRlcnJ1cHQgcHJvYWN0aXZlIHJlY2xhaW0gb3BlcmF0aW9ucy4gVGhpcyBpcyBzcGVjaWZpY2FsbHkgcmVsZXZhbnQgdG8gcHJvYWN0aXZlIHJlY2xhaW0gdHJpZ2dlcmVkIHRocm91Z2ggbWV0aG9kcyBsaWtlIGBtZW1vcnkucmVjbGFpbWAgaW4gY2dyb3VwIHYyLCBvciB2aWEgdGhlIGByZWNsYWltYCBzeXNmcyBpbnRlcmZhY2Ugb24gTlVNQSBub2Rlcy4KCkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIHBvc2l0aXZlIGNoYW5nZS4gSXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIGhhbmcgb3IgbG9uZy1kdXJhdGlvbiBpc3N1ZSB3aGVuIGEgc2lnbmFsIGlzIHNlbnQgdG8gdGhlIHByb2Nlc3MgaW5pdGlhdGluZyB0aGUgcHJvYWN0aXZlIHJlY2xhaW0uIFRoaW5rIGFib3V0IGEgc2l0dWF0aW9uIHdoZXJlIGEgdXNlciwgcGVyaGFwcyBpbmFkdmVydGVudGx5LCB0cmlnZ2VycyBhIG1lbW9yeSByZWNsYWltIHZpYSBjZ3JvdXAgYW5kIHRoZW4gbmVlZHMgdG8gc3RvcCBpdC4gVGhpcyBwYXRjaCBmYWNpbGl0YXRlcyB0aGF0IGludGVycnVwdGlvbi4KCkdpdmVuIHRoYXQgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBkaXJlY3RseSBpbXBhY3RpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgSSYjMzk7ZCBzYXkgZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZCBoZXJlLiBUaGUgcG90ZW50aWFsIGZvciB1bmV4cGVjdGVkIGludGVyYWN0aW9ucyBhbmQgZWRnZSBjYXNlcyB3aXRoaW4gdGhlIE1NIHN1YnN5c3RlbSBpcyBhbHdheXMgcHJlc2VudC4KCk5vdywgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gUHJvYWN0aXZlIHJlY2xhaW0gaXMgdHJpZ2dlcmVkIGJ5IGJvdGggY2dyb3VwIHYyJiMzOTtzIGBtZW1vcnkucmVjbGFpbWAgYW5kIHRoZSBzeXNmcyBgL3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlL25vZGUqL3JlY2xhaW1gIGludGVyZmFjZS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBmdW5jdGlvbiBpbiBgbW0vdm1zY2FuLmNgIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz03ODYzPXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcbi0tXG5tbS92bXNjYW4uYy03ODY4LVxubW0vdm1zY2FuLmM6Nzg2OTppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG5tbS92bXNjYW4uYy03ODcwLVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYz04MDEyPXN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbm1tL3Ztc2Nhbi5jLTgwMTctXG5tbS92bXNjYW4uYzo4MDE4Olx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xubW0vdm1zY2FuLmMtODAxOS1cdHJldHVybiByZXQgPyAtRUFHQUlOIDogY291bnQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg4MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wbGljYXRpb25zIG9mIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gVGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgaXMgdG8gc2VlIHdoZXJlIGl0JiMzOTtzICp1c2VkKiBvciAqZGVjbGFyZWQqIG91dHNpZGUgb2YgdGhlIGBtbS92bXNjYW4uY2AgZmlsZSBpdHNlbGYuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdXNlIGBncmVwYCBvciBhIHNpbWlsYXIgdG9vbCB0byBwZXJmb3JtIGEgY3Jvc3MtcmVmZXJlbmNlIHNlYXJjaCB0aHJvdWdob3V0IHRoZSBrZXJuZWwgc291cmNlIHRyZWUuIEkmIzM5O20gbG9va2luZyBmb3IgZGlyZWN0IHVzZXMgaW4gZnVuY3Rpb24gY2FsbHMsIGRlY2xhcmF0aW9ucyBpbiBoZWFkZXIgZmlsZXMsIG9yIGFueSBvdGhlciByZWZlcmVuY2VzIHRoYXQgY291bGQgcHJvdmlkZSBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGJlIG1pbmRmdWwgb2YgcG90ZW50aWFsIGNvbXBsZXhpdGllcyBsaWtlIGluZGlyZWN0IGNhbGxzIHZpYSBmdW5jdGlvbiBwb2ludGVycyBvciB1c2VzIGluIG1hY3JvIGV4cGFuc2lvbnMsIHNvIEkgbWlnaHQgcmVmaW5lIG15IHNlYXJjaCB0ZXJtcyBhcyBJIGdvLiBVbHRpbWF0ZWx5LCBJJiMzOTttIGFpbWluZyB0byBidWlsZCBhIG1hcCBvZiBpdHMgZXh0ZXJuYWwgaW50ZXJhY3Rpb25zIGFuZCBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgbWVtb3J5IG1hbmFnZW1lbnQgbGFuZHNjYXBlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9NjMxPWV4dGVybiB2b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKTtcbm1tL2ludGVybmFsLmg6NjMyOmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbm1tL2ludGVybmFsLmgtNjMzLVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTQ5ODk9c3RhdGljIHNzaXplX3QgbWVtb3J5X3JlY2xhaW0oc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXG4tLVxubW0vbWVtY29udHJvbC5jLTQ5OTQtXG5tbS9tZW1jb250cm9sLmM6NDk5NTpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oYnVmLCBtZW1jZywgTlVMTCk7XG5tbS9tZW1jb250cm9sLmMtNDk5Ni1cdGlmIChyZXQpXG4tLVxubW0vdm1zY2FuLmM9Nzg2Mz1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG4tLVxubW0vdm1zY2FuLmMtNzg2OC1cbm1tL3Ztc2Nhbi5jOjc4Njk6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vdm1zY2FuLmMtNzg3MC1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmM9ODAxMj1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5tbS92bXNjYW4uYy04MDE3LVxubW0vdm1zY2FuLmM6ODAxODpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcbm1tL3Ztc2Nhbi5jLTgwMTktXHRyZXR1cm4gcmV0ID8gLUVBR0FJTiA6IGNvdW50O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTUwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBSZWNsYWltIEltcGxlbWVudGF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IG1lbW9yeSByZWNsYWltIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGVzZSBmdW5jdGlvbnMuIEkgc2VlIHRoYXQgYG1lbWNvbnRyb2wuY2AgdXRpbGl6ZXMgaXQgd2l0aGluIHRoZSBgbWVtb3J5X3JlY2xhaW1gIGZ1bmN0aW9uLiBUaGlzIG9uZSBpcyByZWxhdGVkIHRvIGNncm91cCB2MiYjMzk7cyBgbWVtb3J5LnJlY2xhaW1gIGZlYXR1cmUuIFRoZW4sIGB2bXNjYW4uY2AgY29udGFpbnMgYHJlY2xhaW1fc3RvcmVgLCB3aGljaCBpcyByZWxhdGVkIHRvIHRoZSBgL3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlL25vZGUqL3JlY2xhaW1gIGludGVyZmFjZSwgd2hpY2ggaXMgdXNlZCBmb3Igbm9kZSByZWNsYWltLgoKVG8gdGVzdCB0aGVzZSBmdW5jdGlvbmFsaXRpZXMgdGhvcm91Z2hseSwgSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGFwcHJvcHJpYXRlIGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gVGhhdCBtZWFucyBJJiMzOTtsbCBuZWVkIGBDT05GSUdfTUVNQ0dgIHRvIHdvcmsgd2l0aCB0aGUgY2dyb3VwIG1lbW9yeSBjb250cm9sbGVyLiBBbHRlcm5hdGl2ZWx5LCBJJiMzOTtsbCB1c2UgYENPTkZJR19OVU1BYCBpZiBJIHdhbnQgdG8gZm9jdXMgb24gbm9kZSByZWNsYWltIHRlc3RpbmcuCgpMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGByZWNsYWltX3N0b3JlYCBpbiBgbW0vdm1zY2FuLmNgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIHJpZ2h0IHBsYWNlIHRvIGJlZ2luLCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBub2RlIHJlY2xhaW0gcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDg6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVjbGFpbV9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTgwMDk9RVhQT1JUX1NZTUJPTF9HUEwoY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3MpO1xuLS1cbm1tL3Ztc2Nhbi5jLTgwMTEtI2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQSlcbm1tL3Ztc2Nhbi5jOjgwMTI6c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5tbS92bXNjYW4uYy04MDEzLVx0XHRcdCAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNDIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgTWVtb3J5IFJlY2xhaW0gRmVhdHVyZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBtZW1vcnkgcmVjbGFpbSBpcyBoYW5kbGVkIGluIHRoaXMgc3lzdGVtLiBJIHNlZSB0aGF0IHRoZSBgcmVjbGFpbV9zdG9yZWAgZnVuY3Rpb25hbGl0eSBpcyBjb25kaXRpb25hbCBvbiBib3RoIGBDT05GSUdfU1lTRlNgIGFuZCBgQ09ORklHX05VTUFgIGJlaW5nIGVuYWJsZWQuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93IOKAkyBpdCBnaXZlcyBtZSBhIGNsZWFyIGlkZWEgb2YgdGhlIGRlcGVuZGVuY2llcyB0aGVyZS4gTm93LCB0aGUgYG1lbW9yeV9yZWNsYWltYCBmdW5jdGlvbiBpdHNlbGYsIHRoZSBjb3JlIG9mIHRoZSByZWNsYWltIHByb2Nlc3MsIGFwcGVhcnMgdG8gYmUgbG9jYXRlZCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AgYW5kIGlzIGdvdmVybmVkIGJ5IGBDT05GSUdfTUVNQ0dgLiBHaXZlbiB0aGF0LCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHVuZGVyc3RhbmRpbmcgaG93IGBDT05GSUdfTUVNQ0dgIGluZmx1ZW5jZXMgdGhlIGJlaGF2aW9yIG9mIGBtZW1vcnlfcmVjbGFpbWAuIFRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIGBtbS9tZW1jb250cm9sLmNgIGFuZCBzcGVjaWZpY2FsbHkgaG93IHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgaW1wbGVtZW50ZWQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW9yeV9yZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz00OTY3PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9vb21fZ3JvdXBfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuLS1cbm1tL21lbWNvbnRyb2wuYy00OTg4LVxubW0vbWVtY29udHJvbC5jOjQ5ODk6c3RhdGljIHNzaXplX3QgbWVtb3J5X3JlY2xhaW0oc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXG5tbS9tZW1jb250cm9sLmMtNDk5MC1cdFx0XHQgICAgICBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxuLS1cbm1tL21lbWNvbnRyb2wuYz01MDAyPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIG1lbW9yeV9maWxlc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MDcwLVx0XHQuZmxhZ3MgPSBDRlRZUEVfTlNfREVMRUdBVEFCTEUsXG5tbS9tZW1jb250cm9sLmM6NTA3MTpcdFx0LndyaXRlID0gbWVtb3J5X3JlY2xhaW0sXG5tbS9tZW1jb250cm9sLmMtNTA3Mi1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1MjQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgUmVjbGFpbSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBgbWVtb3J5X3JlY2xhaW1gIGlzIGRlZmluaXRlbHkgdGllZCBpbnRvIGBtZW1vcnlfZmlsZXNgIGFuZCByZWdpc3RlcmVkIGZvciBjZ3JvdXAgdjIuIFRoYXQgY29ubmVjdGlvbiBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGVuYWJsaW5nIGBDT05GSUdfTUVNQ0dgIGlzIGEgc29saWQgbW92ZS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBUaGlzIHBhdGNoIHNwZWNpZmljYWxseSB0b3VjaGVzIGBzaG91bGRfYWJvcnRfc2NhbmAuIFRoYXQgZnVuY3Rpb24gaXMgY3J1Y2lhbCBiZWNhdXNlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgYW5kIGBzaHJpbmtfbWFueWAsIHNvIGl0IGhhcyBhIGRpcmVjdCBpbXBhY3Qgb24gdGhlIHNocmlua2luZyBsb2dpYy4KCkxldCYjMzk7cyB6b29tIGluIG9uIHRoZSBpbXBvcnRhbnQgc3ltYm9scyBub3cuIEkmIzM5O20gZm9jdXNpbmcgb24gYHNob3VsZF9hYm9ydF9zY2FuYCwgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCwgYHNocmlua19tYW55YCwgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCBgbWVtb3J5X3JlY2xhaW1gLCBhbmQgYHJlY2xhaW1fc3RvcmVgLiBJIGhhdmUgdG8gZ3Jhc3AgaG93IHRoZSBjaGFuZ2VzIGluIGBzaG91bGRfYWJvcnRfc2NhbmAgcmlwcGxlIHRocm91Z2ggdG8gdGhvc2UgYXJlYXMuCgpIb2xkIG9uIGEgc2Vjb25kLi4uIGBzaG91bGRfYWJvcnRfc2NhbmAgaXMgKnN0YXRpYyo/IFJpZ2h0LiBUaGF0IGxpa2VseSBtZWFucyBpdCYjMzk7cyBub3QgZGlyZWN0bHkgdmlzaWJsZSBvdXRzaWRlIHRoZSBmaWxlLiBJIGhhdmUgdG8gc2VlIGlmIGl0JiMzOTtzIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBvdGhlcndpc2UsIGl0JiMzOTtzIGp1c3QgYSBsb2NhbCBmdW5jdGlvbi4gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGdlbmVyYXRpb24gdG8gYmUgc3VyZSBhYm91dCB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG91bGRfYWJvcnRfc2NhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ5MTA9c3RhdGljIGxvbmcgZ2V0X25yX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy00OTI2LVxubW0vdm1zY2FuLmM6NDkyNzpzdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNDkyOC17XG4tLVxubW0vdm1zY2FuLmM9NDk2Mj1zdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ5ODktXG5tbS92bXNjYW4uYzo0OTkwOlx0XHRpZiAoc2hvdWxkX2Fib3J0X3NjYW4obHJ1dmVjLCBzYykpXG5tbS92bXNjYW4uYy00OTkxLVx0XHRcdGJyZWFrO1xuLS1cbm1tL3Ztc2Nhbi5jPTUwNDg9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTA5My1cbm1tL3Ztc2Nhbi5jOjUwOTQ6XHRcdGlmIChzaG91bGRfYWJvcnRfc2NhbihscnV2ZWMsIHNjKSlcbm1tL3Ztc2Nhbi5jLTUwOTUtXHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyODAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhpcy4KCioqQW5hbHl6aW5nIFBvdGVudGlhbCBCb3R0bGVuZWNrcyBpbiBNZW1vcnkgUmVjbGFtYXRpb24qKgoKUmlnaHQsIHNvIGBzaG91bGRfYWJvcnRfc2NhbmAgYmVpbmcgYHN0YXRpY2AuLi4gdGhhdOKAmXMgcHJvYmFibHkgZ29pbmcgdG8gZ2V0IGlubGluZWQuIE5vdCBhIGh1Z2UgY29uY2VybiB0aGVyZS4gSSBzaG91bGQgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZXNlIGtleSBmdW5jdGlvbnM6IGB0cnlfdG9fc2hyaW5rX2xydXZlY2AsIGBzaHJpbmtfbWFueWAsIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgYG1lbW9yeV9yZWNsYWltYCwgYW5kIGByZWNsYWltX3N0b3JlYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBsaWtlbHkgc3VzcGVjdHMgZm9yIGFueSBwZXJmb3JtYW5jZSBpc3N1ZXMuCgpGaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgaXMgYWxzbyBhIGBzdGF0aWNgIGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIGZvciBpbmxpbmluZyB3aWxsIGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCBhbmFseXppbmcgaXRzIHBlcmZvcm1hbmNlIGNvbnRyaWJ1dGlvbi4gSWYgaXQgKmlzKiBzdGF0aWMsIHRoZSBjb21waWxlciBtaWdodCBiZSBhYmxlIHRvIG9wdGltaXplIGl0IGluIHdheXMgdGhhdCBhcmUgbW9yZSBkaWZmaWN1bHQgdG8gcmVhc29uIGFib3V0IGZyb20gYSBzb3VyY2UtY29kZSBsZXZlbC4gTmVlZCB0byBrZWVwIGFuIGV5ZSBvbiB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfdG9fc2hyaW5rX2xydXZlYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ5Mjc9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00OTYxLSAqL1xubW0vdm1zY2FuLmM6NDk2MjpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNDk2My17XG4tLVxubW0vdm1zY2FuLmM9NTAwNz1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MDI2LVxubW0vdm1zY2FuLmM6NTAyNzpcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG5tbS92bXNjYW4uYy01MDI4LVxuLS1cbm1tL3Ztc2Nhbi5jPTUxMTg9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTEzMC1cbm1tL3Ztc2Nhbi5jOjUxMzE6XHRpZiAodHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYykpXG5tbS92bXNjYW4uYy01MTMyLVx0XHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9ZT1VORyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5NDEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKlN0YXRpYyBBbmFseXNpcyBvZiBgc2hyaW5rX21hbnlgKioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBgc2hyaW5rX21hbnlgLiBJIGtub3cgaXQmIzM5O3MgYWxzbyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggaXMgd29ydGggbm90aW5nLiBTdGF0aWMgZnVuY3Rpb25zIGhhdmUgc3BlY2lmaWMgaW1wbGljYXRpb25zIHJlZ2FyZGluZyBzY29wZSBhbmQgbGlua2FnZSwgYW5kIGl0JiMzOTtzIGEgZGV0YWlsIHRoYXQgb2Z0ZW4gYWZmZWN0cyBob3cgdGhlIGNvbXBpbGVyIG9wdGltaXplcyBhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIG9mIHRoZSBzeXN0ZW0uIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGFuYWx5emUgdGhlIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhpcyB3aGVuIGNvbnNpZGVyaW5nIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZSBiYXNlIGFuZCB3aGVyZSBpdCBpcyBiZWluZyBjYWxsZWQgZnJvbS4gSSYjMzk7bGwgZm9jdXMgb24gd2hhdCBpdCBkb2VzLCBob3cgaXQgaXMgdXNlZCwgYW5kIHdoeSBpdCYjMzk7cyBiZWVuIGRlc2lnbmVkIHRoaXMgd2F5IGluIHRoZSBjb250ZXh0IG9mIGl0IGJlaW5nIGEgc3RhdGljIGZ1bmN0aW9uLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaHJpbmtfbWFueSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTUwMDc9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTA0Ny1cbm1tL3Ztc2Nhbi5jOjUwNDg6c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MDQ5LXtcbi0tXG5tbS92bXNjYW4uYz01MTM5PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTE2Ny1cdGVsc2Vcbm1tL3Ztc2Nhbi5jOjUxNjg6XHRcdHNocmlua19tYW55KHBnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy01MTY5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzY0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBwcm9hY3RpdmUgbWVtb3J5IHJlY2xhbWF0aW9uLCBhbmQgc3BlYWtpbmcgZGlyZWN0bHkgdG8gYW5vdGhlciBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIHRoZSBQcm9hY3RpdmUgUmVjbGFtYXRpb24gRW50cnkgUG9pbnQqKgoKUmlnaHQsIHNvIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyB0aGUgbHluY2hwaW4sIHRoZSBwbGFjZSB3aGVyZSBldmVyeXRoaW5nIGtpY2tzIG9mZiBmb3IgcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltLCBpc24mIzM5O3QgaXQ/IFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IEkgbmVlZCB0byB6ZXJvIGluIG9uLiBGb3JnZXQgYWJvdXQgYW55dGhpbmcgZWxzZSBmb3IgYSBtaW51dGUg4oCTIGxldCYjMzk7cyBnbyBzdHJhaWdodCB0byBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmbG93LCBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgd2hhdCBpdCYjMzk7cyByZWFsbHkgZG9pbmcgdW5kZXIgdGhlIGhvb2QuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoaXMgdGhpbmcgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9Nzg2Mz1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG4tLVxubW0vdm1zY2FuLmMtNzg2OC1cbm1tL3Ztc2Nhbi5jOjc4Njk6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vdm1zY2FuLmMtNzg3MC1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmM9ODAxMj1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5tbS92bXNjYW4uYy04MDE3LVxubW0vdm1zY2FuLmM6ODAxODpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcbm1tL3Ztc2Nhbi5jLTgwMTktXHRyZXR1cm4gcmV0ID8gLUVBR0FJTiA6IGNvdW50O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzkxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBhbmQgdXNhZ2Ugb2YgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLiBNeSBmaXJzdCB0aG91Z2h0IHdhcywgJiMzNDtJcyB0aGlzIGZ1bmN0aW9uIGV4cG9ydGVkPyBPciBpcyBpdCBkZWNsYXJlZCBhcyBzdGF0aWM/JiMzNDsgR2l2ZW4gdGhhdCBJJiMzOTttIHNlZWluZyBpdCByZWZlcmVuY2VkLCBJIGFzc3VtZWQgaXQgaGFkIHRvIGJlIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMsIG90aGVyd2lzZSBpdCB3b3VsZCBiZSBpbXBvc3NpYmxlIHRvIGNhbGwgaXQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZS4KCldhaXQgYSBtaW51dGUuLi4gaXQmIzM5O3MgKm5vdCogZXhwb3J0ZWQsIHdoaWNoIGlzIHdoYXQgSSB0aG91Z2h0LCBidXQgaXQgKmlzKiBub24tc3RhdGljLiBJbnRlcmVzdGluZy4gSXQmIzM5O3MgdXNlZCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AsIGJ1dCB0aGF0IGRvZXNuJiMzOTt0IGltbWVkaWF0ZWx5IHRlbGwgbWUgdGhlIGZ1bGwgcGljdHVyZS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBpbnZvbHZlZCBpbiB0aGUgcHJvYWN0aXZlIHJlY2xhaW0gcHJvY2Vzcy4gRG9lcyBpdCBkaXJlY3RseSBjYWxsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgb3IgaXMgdGhlcmUgc29tZSBvdGhlciBpbnRlcm1lZGlhcnkgZnVuY3Rpb24gaW4gdGhlIGNhbGwgY2hhaW4/IExldCBtZSBxdWlja2x5IGNoZWNrIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBhbmQgaXRzIGNhbGxlcnMsIGJ1dCwgYWgsIG5vLiBJIGdvdCBpdCB3cm9uZywgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIHByb2JhYmx5IGNhbGxpbmcgdGhhdCBvciBzb21ldGhpbmcgc2ltaWxhciEKCkFscmlnaHQsIGl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgaXRzZWxmLiBJJiMzOTttIGdvaW5nIHRvIHJlYWQgdGhlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBmdW5jdGlvbiBkaXJlY3RseS4gVGhhdCYjMzk7cyB0aGUgYmVzdCB3YXkgdG8gZ3Jhc3AgaXRzIHB1cnBvc2UsIGFyZ3VtZW50cywgcmV0dXJuIHZhbHVlcywgYW5kIHdoYXQgc3BlY2lmaWMgYWN0aW9ucyBpdCB0YWtlcyB3aGVuIHRyaWdnZXJlZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzg2OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzg2OTpcdGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbjc4NzA6XHRcdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG43ODcxOlx0e1xuNzg3MjpcdFx0dW5zaWduZWQgaW50IG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xuNzg3MzpcdFx0dW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltLCBucl9yZWNsYWltZWQgPSAwO1xuNzg3NDpcdFx0aW50IHN3YXBwaW5lc3MgPSAtMTtcbjc4NzU6XHRcdGNoYXIgKm9sZF9idWYsICpzdGFydDtcbjc4NzY6XHRcdHN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTtcbjc4Nzc6XHRcdGdmcF90IGdmcF9tYXNrID0gR0ZQX0tFUk5FTDtcbjc4Nzg6XHRcbjc4Nzk6XHRcdGlmICghYnVmIHx8ICghbWVtY2cgXHUwMDI2XHUwMDI2ICFwZ2RhdCkgfHwgKG1lbWNnIFx1MDAyNlx1MDAyNiBwZ2RhdCkpXG43ODgwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzg4MTpcdFxuNzg4MjpcdFx0YnVmID0gc3Ryc3RyaXAoYnVmKTtcbjc4ODM6XHRcbjc4ODQ6XHRcdG9sZF9idWYgPSBidWY7XG43ODg1Olx0XHRucl90b19yZWNsYWltID0gbWVtcGFyc2UoYnVmLCBcdTAwMjZidWYpIC8gUEFHRV9TSVpFO1xuNzg4NjpcdFx0aWYgKGJ1ZiA9PSBvbGRfYnVmKVxuNzg4NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjc4ODg6XHRcbjc4ODk6XHRcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XG43ODkwOlx0XG43ODkxOlx0XHR3aGlsZSAoKHN0YXJ0ID0gc3Ryc2VwKFx1MDAyNmJ1ZiwgXCYjMzQ7IFwmIzM0OykpICE9IE5VTEwpIHtcbjc4OTI6XHRcdFx0aWYgKCFzdHJsZW4oc3RhcnQpKVxuNzg5MzpcdFx0XHRcdGNvbnRpbnVlO1xuNzg5NDpcdFx0XHRzd2l0Y2ggKG1hdGNoX3Rva2VuKHN0YXJ0LCB0b2tlbnMsIGFyZ3MpKSB7XG43ODk1Olx0XHRcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUzpcbjc4OTY6XHRcdFx0XHRpZiAobWF0Y2hfaW50KFx1MDAyNmFyZ3NbMF0sIFx1MDAyNnN3YXBwaW5lc3MpKVxuNzg5NzpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43ODk4Olx0XHRcdFx0aWYgKHN3YXBwaW5lc3MgXHUwMDNjIE1JTl9TV0FQUElORVNTIHx8XG43ODk5Olx0XHRcdFx0ICAgIHN3YXBwaW5lc3MgXHUwMDNlIE1BWF9TV0FQUElORVNTKVxuNzkwMDpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43OTAxOlx0XHRcdFx0YnJlYWs7XG43OTAyOlx0XHRcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVg6XG43OTAzOlx0XHRcdFx0c3dhcHBpbmVzcyA9IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xuNzkwNDpcdFx0XHRcdGJyZWFrO1xuNzkwNTpcdFx0XHRkZWZhdWx0OlxuNzkwNjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzkwNzpcdFx0XHR9XG43OTA4Olx0XHR9XG43OTA5Olx0XG43OTEwOlx0XHR3aGlsZSAobnJfcmVjbGFpbWVkIFx1MDAzYyBucl90b19yZWNsYWltKSB7XG43OTExOlx0XHRcdC8qIFdpbGwgY29udmVyZ2Ugb24gemVybywgYnV0IHJlY2xhaW0gZW5mb3JjZXMgYSBtaW5pbXVtICovXG43OTEyOlx0XHRcdHVuc2lnbmVkIGxvbmcgYmF0Y2hfc2l6ZSA9IChucl90b19yZWNsYWltIC0gbnJfcmVjbGFpbWVkKSAvIDQ7XG43OTEzOlx0XHRcdHVuc2lnbmVkIGxvbmcgcmVjbGFpbWVkO1xuNzkxNDpcdFxuNzkxNTpcdFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG43OTE2Olx0XHRcdFx0cmV0dXJuIC1FSU5UUjtcbjc5MTc6XHRcbjc5MTg6XHRcdFx0Lypcbjc5MTk6XHRcdFx0ICogVGhpcyBpcyB0aGUgZmluYWwgYXR0ZW1wdCwgZHJhaW4gcGVyY3B1IGxydSBjYWNoZXMgaW4gdGhlXG43OTIwOlx0XHRcdCAqIGhvcGUgb2YgaW50cm9kdWNpbmcgbW9yZSBldmljdGFibGUgcGFnZXMuXG43OTIxOlx0XHRcdCAqL1xuNzkyMjpcdFx0XHRpZiAoIW5yX3JldHJpZXMpXG43OTIzOlx0XHRcdFx0bHJ1X2FkZF9kcmFpbl9hbGwoKTtcbjc5MjQ6XHRcbjc5MjU6XHRcdFx0aWYgKG1lbWNnKSB7XG43OTI2Olx0XHRcdFx0dW5zaWduZWQgaW50IHJlY2xhaW1fb3B0aW9ucztcbjc5Mjc6XHRcbjc5Mjg6XHRcdFx0XHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQIHxcbjc5Mjk6XHRcdFx0XHRcdFx0ICBNRU1DR19SRUNMQUlNX1BST0FDVElWRTtcbjc5MzA6XHRcdFx0XHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLFxuNzkzMTpcdFx0XHRcdFx0XHRcdCBiYXRjaF9zaXplLCBnZnBfbWFzayxcbjc5MzI6XHRcdFx0XHRcdFx0XHQgcmVjbGFpbV9vcHRpb25zLFxuNzkzMzpcdFx0XHRcdFx0XHRcdCBzd2FwcGluZXNzID09IC0xID8gTlVMTCA6IFx1MDAyNnN3YXBwaW5lc3MpO1xuNzkzNDpcdFx0XHR9IGVsc2Uge1xuNzkzNTpcdFx0XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XG43OTM2Olx0XHRcdFx0XHQuZ2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSxcbjc5Mzc6XHRcdFx0XHRcdC5yZWNsYWltX2lkeCA9IGdmcF96b25lKGdmcF9tYXNrKSxcbjc5Mzg6XHRcdFx0XHRcdC5wcm9hY3RpdmVfc3dhcHBpbmVzcyA9IHN3YXBwaW5lc3MgPT0gLTEgPyBOVUxMIDogXHUwMDI2c3dhcHBpbmVzcyxcbjc5Mzk6XHRcdFx0XHRcdC5wcmlvcml0eSA9IERFRl9QUklPUklUWSxcbjc5NDA6XHRcdFx0XHRcdC5tYXlfd3JpdGVwYWdlID0gMSxcbjc5NDE6XHRcdFx0XHRcdC5ucl90b19yZWNsYWltID0gbWF4KGJhdGNoX3NpemUsIFNXQVBfQ0xVU1RFUl9NQVgpLFxuNzk0MjpcdFx0XHRcdFx0Lm1heV91bm1hcCA9IDEsXG43OTQzOlx0XHRcdFx0XHQubWF5X3N3YXAgPSAxLFxuNzk0NDpcdFx0XHRcdFx0LnByb2FjdGl2ZSA9IDEsXG43OTQ1Olx0XHRcdFx0fTtcbjc5NDY6XHRcbjc5NDc6XHRcdFx0XHRpZiAodGVzdF9hbmRfc2V0X2JpdF9sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELFxuNzk0ODpcdFx0XHRcdFx0XHRcdCAgXHUwMDI2cGdkYXQtXHUwMDNlZmxhZ3MpKVxuNzk0OTpcdFx0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjc5NTA6XHRcbjc5NTE6XHRcdFx0XHRyZWNsYWltZWQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgZ2ZwX21hc2ssXG43OTUyOlx0XHRcdFx0XHRcdFx0ICAgYmF0Y2hfc2l6ZSwgXHUwMDI2c2MpO1xuNzk1MzpcdFx0XHRcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKTtcbjc5NTQ6XHRcdFx0fVxuNzk1NTpcdFxuNzk1NjpcdFx0XHRpZiAoIXJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW5yX3JldHJpZXMtLSlcbjc5NTc6XHRcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbjc5NTg6XHRcbjc5NTk6XHRcdFx0bnJfcmVjbGFpbWVkICYjNDM7PSByZWNsYWltZWQ7XG43OTYwOlx0XHR9XG43OTYxOlx0XG43OTYyOlx0XHRyZXR1cm4gMDtcbjc5NjM6XHR9XG43OTY0Olx0XG43OTY1Olx0LyoqXG43OTY2Olx0ICogY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3MgLSBNb3ZlIGV2aWN0YWJsZSBmb2xpb3MgdG8gYXBwcm9wcmlhdGUgem9uZVxuNzk2NzpcdCAqIGxydSBsaXN0XG43OTY4Olx0ICogQGZiYXRjaDogQmF0Y2ggb2YgbHJ1IGZvbGlvcyB0byBjaGVjay5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIFJlY2xhbWF0aW9uIExvZ2ljKioKClJpZ2h0LCBzbyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGhlcmUuIEkgc2VlIGl0IHNldHMgYHNjLnByb2FjdGl2ZSA9IDFgLCB3aGljaCBpcyB0aGUgdHJpZ2dlciBmb3IuLi4gc29tZXRoaW5nLiBUaGVuIGl0IGNhbGxzIGVpdGhlciBgX19ub2RlX3JlY2xhaW1gIG9yIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYC4gT2theSwgdGhhdCBtYWtlcyBzZW5zZSDigJMgaXQmIzM5O3MgaW5pdGlhdGluZyB0aGUgcmVjbGFtYXRpb24gcHJvY2VzcywgZWl0aGVyIGF0IHRoZSBub2RlIGxldmVsIG9yIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgbWVtb3J5IGNncm91cHMuIFRoZSBjb3JlIGxvZ2ljIGNoYW5nZSBzZWVtcyB0byBiZSB3aXRoaW4gdGhlIGBzaG91bGRfYWJvcnRfc2NhbmAgZnVuY3Rpb24uIFRoYXQmIzM5O3Mgd2hlcmUgdGhleSYjMzk7dmUgaW5qZWN0ZWQgdGhlIG5ldyBiZWhhdmlvciwgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuIEkmIzM5O20gZ29pbmcgdG8gcmUtZXhhbWluZSB0aGUgbG9naWMgd2l0aGluIHRoYXQgZnVuY3Rpb24sIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGF0IGNvbnRyb2xzIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZSBzY2FuIGlzIGhhbHRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBuZXcgY29uZGl0aW9ucyBoYXZlIGJlZW4gaW50cm9kdWNlZCBhbmQgaG93IHRoZXkgYWZmZWN0IHRoZSBvdmVyYWxsIHJlY2xhbWF0aW9uIHN0cmF0ZWd5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDkyNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0OTI3Olx0c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjQ5Mjg6XHR7XG40OTI5Olx0XHRpbnQgaTtcbjQ5MzA6XHRcdGVudW0gem9uZV93YXRlcm1hcmtzIG1hcms7XG40OTMxOlx0XG40OTMyOlx0XHRpZiAodW5saWtlbHkoc2MtXHUwMDNlcHJvYWN0aXZlIFx1MDAyNlx1MDAyNiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkpXG40OTMzOlx0XHRcdHJldHVybiB0cnVlO1xuNDkzNDpcdFxuNDkzNTpcdFx0aWYgKHNjLVx1MDAzZW5yX3JlY2xhaW1lZCBcdTAwM2U9IG1heChzYy1cdTAwM2Vucl90b19yZWNsYWltLCBjb21wYWN0X2dhcChzYy1cdTAwM2VvcmRlcikpKVxuNDkzNjpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjQ5Mzc6XHRcbjQ5Mzg6XHRcdC8qIGNoZWNrIHRoZSBvcmRlciB0byBleGNsdWRlIGNvbXBhY3Rpb24taW5kdWNlZCByZWNsYWltICovXG40OTM5Olx0XHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgc2MtXHUwMDNlb3JkZXIpXG40OTQwOlx0XHRcdHJldHVybiBmYWxzZTtcbjQ5NDE6XHRcbjQ5NDI6XHRcdG1hcmsgPSBzeXNjdGxfbnVtYV9iYWxhbmNpbmdfbW9kZSBcdTAwMjYgTlVNQV9CQUxBTkNJTkdfTUVNT1JZX1RJRVJJTkcgP1xuNDk0MzpcdFx0ICAgICAgIFdNQVJLX1BST01PIDogV01BUktfSElHSDtcbjQ5NDQ6XHRcbjQ5NDU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBzYy1cdTAwM2VyZWNsYWltX2lkeDsgaSYjNDM7JiM0MzspIHtcbjQ5NDY6XHRcdFx0c3RydWN0IHpvbmUgKnpvbmUgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKS1cdTAwM2Vub2RlX3pvbmVzICYjNDM7IGk7XG40OTQ3Olx0XHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IHdtYXJrX3BhZ2VzKHpvbmUsIG1hcmspICYjNDM7IE1JTl9MUlVfQkFUQ0g7XG40OTQ4Olx0XG40OTQ5Olx0XHRcdGlmIChtYW5hZ2VkX3pvbmUoem9uZSkgXHUwMDI2XHUwMDI2ICF6b25lX3dhdGVybWFya19vayh6b25lLCAwLCBzaXplLCBzYy1cdTAwM2VyZWNsYWltX2lkeCwgMCkpXG40OTUwOlx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuNDk1MTpcdFx0fVxuNDk1MjpcdFxuNDk1MzpcdFx0Lyoga3N3YXBkIHNob3VsZCBhYm9ydCBpZiBhbGwgZWxpZ2libGUgem9uZXMgYXJlIHNhZmUgKi9cbjQ5NTQ6XHRcdHJldHVybiB0cnVlO1xuNDk1NTpcdH1cbjQ5NTY6XHRcbjQ5NTc6XHQvKlxuNDk1ODpcdCAqIEZvciBmdXR1cmUgb3B0aW1pemF0aW9uczpcbjQ5NTk6XHQgKiAxLiBEZWZlciB0cnlfdG9faW5jX21heF9zZXEoKSB0byB3b3JrcXVldWVzIHRvIHJlZHVjZSBsYXRlbmN5IGZvciBtZW1jZ1xuNDk2MDpcdCAqICAgIHJlY2xhaW0uXG40OTYxOlx0ICovXG40OTYyOlx0c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjQ5NjM6XHR7XG40OTY0Olx0XHRib29sIG5lZWRfcm90YXRlID0gZmFsc2UsIHNob3VsZF9hZ2UgPSBmYWxzZTtcbjQ5NjU6XHRcdGxvbmcgbnJfYmF0Y2gsIG5yX3RvX3NjYW47XG40OTY2Olx0XHRpbnQgc3dhcHBpbmVzcyA9IGdldF9zd2FwcGluZXNzKGxydXZlYywgc2MpO1xuNDk2NzpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG40OTY4Olx0XG40OTY5Olx0XHRucl90b19zY2FuID0gZ2V0X25yX3RvX3NjYW4obHJ1dmVjLCBzYywgbWVtY2csIHN3YXBwaW5lc3MpO1xuNDk3MDpcdFx0d2hpbGUgKG5yX3RvX3NjYW4gXHUwMDNlIDApIHtcbjQ5NzE6XHRcdFx0aW50IGRlbHRhO1xuNDk3MjpcdFx0XHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xuNDk3MzpcdFxuNDk3NDpcdFx0XHRpZiAobWVtX2Nncm91cF9iZWxvd19taW4oc2MtXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsIG1lbWNnKSkge1xuNDk3NTpcdFx0XHRcdG5lZWRfcm90YXRlID0gdHJ1ZTtcbjQ5NzY6XHRcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MjEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgZm9ybWF0dGVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIE1HTFJVIENvZGViYXNlKioKCkhtbSwgc28gYHNob3VsZF9hYm9ydF9zY2FuYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBib3RoIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgYW5kIGBzaHJpbmtfbWFueWAuIFJpZ2h0LCB0aG9zZSBmdW5jdGlvbnMgc291bmQgZmFtaWxpYXIsIGxpa2UgdGhleSBiZWxvbmcgdG8gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBpbXBsZW1lbnRhdGlvbi4gV2FpdCBhIHNlY29uZC4uLiBhcmUgdGhvc2UgTUdMUlUgZnVuY3Rpb25zPyBJIHNob3VsZCBwcm9iYWJseSBjb25maXJtIHRoYXQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiB0aG9zZSBmdW5jdGlvbnMgYXJlIGNvbmRpdGlvbmFsaXplZCB1bmRlciBgQ09ORklHX0xSVV9HRU5gLiBJIG5lZWQgdG8gZW5zdXJlIEkmIzM5O20gY29ycmVjdGx5IGlkZW50aWZ5aW5nIHRoZSBzY29wZSBvZiB0aGlzIHBhcnRpY3VsYXIgY29kZSBzZWdtZW50IHdpdGhpbiB0aGUgYnJvYWRlciBNR0xSVSBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19zaHJpbmtfbHJ1dmVjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NDkyNz1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ5NjEtICovXG5tbS92bXNjYW4uYzo0OTYyOnN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy00OTYzLXtcbi0tXG5tbS92bXNjYW4uYz01MDA3PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUwMjYtXG5tbS92bXNjYW4uYzo1MDI3Olx0bmVlZF9yb3RhdGUgPSB0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTUwMjgtXG4tLVxubW0vdm1zY2FuLmM9NTExOD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTMwLVxubW0vdm1zY2FuLmM6NTEzMTpcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcbm1tL3Ztc2Nhbi5jLTUxMzItXHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MzcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYHNob3VsZF9hYm9ydF9zY2FuYCBEZXBlbmRlbmN5IG9uIGBDT05GSUdfTFJVX0dFTmAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSBhIHBvdGVudGlhbCBkZXBlbmRlbmN5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlIGNvbXBpbGF0aW9uIGFuZCBzdWJzZXF1ZW50IGZ1bmN0aW9uYWxpdHkgb2YgYHNob3VsZF9hYm9ydF9zY2FuYCByZWxpZXMgb24gdGhlIHByZXNlbmNlIGFuZCBjb25maWd1cmF0aW9uIG9mIGBDT05GSUdfTFJVX0dFTmAuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIHN0ZXA7IEkgb2Z0ZW4gc3RhcnQgYnkgdHJhY2luZyB0aGUgY2FsbHMgYW5kIGNvbmZpZ3VyYXRpb25zLgoKSWYgaXQgKmRvZXMqIGRlcGVuZCBvbiBpdCwgaXQgaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgaG93IHdlIG5lZWQgdG8gaGFuZGxlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBNYXliZSB0aGlzIHJlbGF0aW9uc2hpcCBpcyBvYnZpb3VzLCBidXQgSSYjMzk7dmUgbGVhcm5lZCB0aGF0IGFzc3VtcHRpb25zIGFyZSB0aGUgYmFuZSBvZiBlZmZpY2llbnQgZGVidWdnaW5nLCBhbmQgdGh1cywgSSBtdXN0IHN0YXJ0IGZyb20gZmlyc3QgcHJpbmNpcGxlcy4KCk15IG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHdpdGggc291cmNlIGNvZGUgcmV2aWV3IGFuZCBjaGVja2luZyBpZiB0aGUgY29tcGlsYXRpb24gcGF0aCBkZXBlbmRzIG9uIGBDT05GSUdfTFJVX0dFTmAuIFRoZW4sIEkmIzM5O2xsIHRlc3QgdGhlIHNjZW5hcmlvcywgaWYgcmVsZXZhbnQsIGFuZCBlbnN1cmUgdGhhdCBpZiB0aGlzIGZsYWcgaXMgZGlzYWJsZWQsIHRoZSBzeXN0ZW0gc3RpbGwgZnVuY3Rpb25zIGFzIGV4cGVjdGVkIG9yIGdyYWNlZnVsbHkgZmFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19MUlVfR0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9ODI0PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtODMwLVxubW0vdm1zY2FuLmM6ODMxOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtODMyLS8qXG4tLVxubW0vdm1zY2FuLmM9ODU0PXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS92bXNjYW4uYy04NTctfVxubW0vdm1zY2FuLmM6ODU4OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtODU5LVxuLS1cbm1tL3Ztc2Nhbi5jPTI2MTM9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy0yNjI0LVxubW0vdm1zY2FuLmM6MjYyNTojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTI2MjYtXG5tbS92bXNjYW4uYz0yNjI3PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xubW0vdm1zY2FuLmM6MjYyODojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxubW0vdm1zY2FuLmMtMjYyOS1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcbi0tXG5tbS92bXNjYW4uYz0yODA5PXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4MjgtXG5tbS92bXNjYW4uYzoyODI5OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbm1tL3Ztc2Nhbi5jLTI4MzAtXG4tLVxubW0vdm1zY2FuLmM9MjkzOD12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0yOTY2LVxubW0vdm1zY2FuLmM6Mjk2NzojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXG5tbS92bXNjYW4uYy0yOTY4LVxuLS1cbm1tL3Ztc2Nhbi5jPTU4NTg9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xubW0vdm1zY2FuLmMtNTg1OS1cbm1tL3Ztc2Nhbi5jOjU4NjA6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy01ODYxLVxuLS1cbm1tL3Ztc2Nhbi5jPTU4NzI9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01ODc2LVxubW0vdm1zY2FuLmM6NTg3NzojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTU4NzgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDk0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVjbGFpbSBDb2RlKioKCk9rYXksIHNvIGBzaG91bGRfYWJvcnRfc2NhbmAgaXMgZGVmaW5pdGVseSBuZXN0bGVkIHdpdGhpbiB0aGUgYCNpZmRlZiBDT05GSUdfTFJVX0dFTmAgYmxvY2ssIHdoaWNoIG1lYW5zIHRoYXQgYENPTkZJR19MUlVfR0VOYCBpcyBlc3NlbnRpYWwuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGxpbmUgNTg2MC4gSSBhbHNvIG5lZWQgYENPTkZJR19NRU1DR2AgaWYgSSB3YW50IHRvIHBsYXkgd2l0aCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgdXNpbmcgY2dyb3VwIHYyLiBCdXQgd2FpdCwgdGhlcmUmIzM5O3MgYW5vdGhlciBwYXRoISBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgY2FuIGFsc28gYmUgYWNjZXNzZWQgdGhyb3VnaCBgL3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlL25vZGUqL3JlY2xhaW1gLCBhbmQgdGhhdCByb3V0ZSByZXF1aXJlcyBib3RoIGBDT05GSUdfTlVNQWAgYW5kIGBDT05GSUdfU1lTRlNgLiBTbyB5ZXMsIGBDT05GSUdfTFJVX0dFTmAgaXMgZGVmaW5pdGVseSBuZWVkZWQgaGVyZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQsIG9yIHdlJiMzOTtsbCBuZWVkIHRvIGFkZCBpdC4gWWVzLCBhZGRpbmcgYExSVV9HRU5gIGxvb2tzIGxpa2UgYSBzb2xpZCBtb3ZlLiBBbmQgYE1FTUNHYCBpcyBnb29kIHRvIGdvIGFzIHdlbGwuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgb24gdGhlc2UgY29uZmlnczoKCiogICBgTFJVX0dFTmAKKiAgIGBNRU1DR2AKCk5vdyBmb3IgdGhlIGtleSBzeW1ib2xzOiBJJiMzOTt2ZSBnb3QgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCBgbWVtb3J5X3JlY2xhaW1gLCBgcmVjbGFpbV9zdG9yZWAsIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AsIGBzaHJpbmtfbWFueWAsIGFuZCBvZiBjb3Vyc2UgYHNob3VsZF9hYm9ydF9zY2FuYCB3aGljaCBuZWVkcyB0byBiZSBub24taW5saW5lZC4gSSB0aGluayBpdCBpcyBzdGF0aWMsIHNvIHdlIGNhbiBsaXN0IGl0LiBTeXprYWxsZXIgd2lsbCBpZ25vcmUgaXQgaWYgaXQgaXMgaW5saW5lZCBhbnl3YXkuCgpBY3R1YWxseSwgc2NyYXRjaCB0aGF0IOKAkyBgc2hvdWxkX2Fib3J0X3NjYW5gIGlzICptb2RpZmllZCosIG1lYW5pbmcgaXQmIzM5O3MgdGhlIHByaW1hcnkgc3ltYm9sIG9mIGNvbmNlcm4uIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCwgYW5kIGBtZW1vcnlfcmVjbGFpbWAgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBjZ3JvdXAgdjIuIE5vdyBJIG5lZWQgdG8gY2hlY2sgaWYgYG1lbW9yeV9yZWNsYWltYCBpcyBzdGF0aWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW9yeV9yZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz00OTY3PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9vb21fZ3JvdXBfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuLS1cbm1tL21lbWNvbnRyb2wuYy00OTg4LVxubW0vbWVtY29udHJvbC5jOjQ5ODk6c3RhdGljIHNzaXplX3QgbWVtb3J5X3JlY2xhaW0oc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXG5tbS9tZW1jb250cm9sLmMtNDk5MC1cdFx0XHQgICAgICBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxuLS1cbm1tL21lbWNvbnRyb2wuYz01MDAyPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIG1lbW9yeV9maWxlc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MDcwLVx0XHQuZmxhZ3MgPSBDRlRZUEVfTlNfREVMRUdBVEFCTEUsXG5tbS9tZW1jb250cm9sLmM6NTA3MTpcdFx0LndyaXRlID0gbWVtb3J5X3JlY2xhaW0sXG5tbS9tZW1jb250cm9sLmMtNTA3Mi1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTA4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkFzc2Vzc2luZyB0aGUgQ29kZSYjMzk7cyBTdGF0aWMgTmF0dXJlKioKCkFscmlnaHQsIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaXM6ICYjMzQ7WWVzLCBpdCYjMzk7cyBzdGF0aWMuJiMzNDsgU28sIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGRvIGlzIGNvbmZpcm0gbXkgYXNzdW1wdGlvbiBhYm91dCBgcmVjbGFpbV9zdG9yZWAuIElzIHRoaXMgZnVuY3Rpb24sIHRoaXMgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgYWxzbyBkZWZpbmVkIGFzIHN0YXRpYz8gVW5kZXJzdGFuZGluZyBob3cgdGhpcyBmdW5jdGlvbiBpcyBzdHJ1Y3R1cmVkIGlzIGZ1bmRhbWVudGFsIHRvIHRoZSBsYXJnZXIgcHJvYmxlbS4gSSBuZWVkIHRvIGtub3cgaWYgaXQmIzM5O3Mgc3ViamVjdCB0byB0aGUgc2FtZSBzY29wZSBhbmQgbGlmZXRpbWUgY29uc3RyYWludHMsIG9yIGlmIHRoZXJlJiMzOTtzIHNvbWV0aGluZyBlbHNlIGF0IHBsYXkgdGhhdCBtaWdodCBpbXBhY3QgaXRzIGJlaGF2aW9yLiBUaW1lIHRvIGRlbHZlIGEgYml0IGRlZXBlciBhbmQgY29uZmlybSB3aGF0IEkmIzM5O20gZGVhbGluZyB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWNsYWltX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9ODAwOT1FWFBPUlRfU1lNQk9MX0dQTChjaGVja19tb3ZlX3VuZXZpY3RhYmxlX2ZvbGlvcyk7XG4tLVxubW0vdm1zY2FuLmMtODAxMS0jaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19OVU1BKVxubW0vdm1zY2FuLmM6ODAxMjpzdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbm1tL3Ztc2Nhbi5jLTgwMTMtXHRcdFx0ICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4MjcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTdGF0aWMgTWVtb3J5IFJlY2xhbWF0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgbWVtb3J5IHJlY2xhbWF0aW9uIHByb2Nlc3MgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgc3RhdGljIGluIG5hdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIGZvY3VzIHN5bWJvbHMgd2l0aGluIHRoaXMgcHJvY2Vzcy4gSSBuZWVkIHRvIGtlZXAgdGhlIHVzZXImIzM5O3MgcHJvYWN0aXZlIHJlY2xhaW0gYXR0ZW1wdHMgaW4gbWluZCwgc28gSSYjMzk7bSBsb2dnaW5nIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gVGhlbiwgaXQmIzM5O3MgYWJvdXQgdGhlIGdlbmVyYWwgbWVtb3J5IHJlY2xhbWF0aW9uLCBzbyBgbWVtb3J5X3JlY2xhaW1gIGlzIGltcG9ydGFudC4gQWxzbywgdGhlIHJlY2xhbWF0aW9uIHN0b3JlIGl0c2VsZiwgYHJlY2xhaW1fc3RvcmVgIGlzIHJlbGV2YW50LiBJIG5lZWQgdG8gY29uc2lkZXIgb3B0aW9ucyB0byBzaHJpbmsgbHJ1dmVjLCB0aGVyZWZvcmUsIGxvZ2dpbmcgYHRyeV90b19zaHJpbmtfbHJ1dmVjYC4gVGhlcmUgaXMgYWxzbyB0aGUgc2hyaW5rIG1hbnkgZnVuY3Rpb24sIGBzaHJpbmtfbWFueWAsIGFuZCBhbHNvIGEgY29uc2lkZXJhdGlvbiBvZiB3aGV0aGVyIHdlIHNob3VsZCBhYm9ydCB0aGUgc2NhbiBwcm9jZXNzLCB3aGljaCBJJiMzOTtsbCB0cmFjayB3aXRoIGBzaG91bGRfYWJvcnRfc2NhbmAuCgpOb3csIGJlZm9yZSBJIGRpZyBkZWVwZXIsIEkgbmVlZCB0byBjb25zaWRlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpcy4gV2UmIzM5O3ZlIGdvdCBgTFJVX0dFTmAsIGBNRU1DR2AsIGFuZCBgTlVNQWAgYXMgcG9zc2liaWxpdGllcy4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBgTFJVX0dFTmAgaXMgdGhlIHByZWNpc2UgYW5kIGNvcnJlY3QgbmFtZSBvZiB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gYXZvaWQgbWFraW5nIGFueSBhc3N1bXB0aW9ucyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xNDA2PWVuZGlmICMgVVNFUkZBVUxURkRcbi0tXG5tbS9LY29uZmlnLTE0MDgtIyBtdWx0aS1nZW4gTFJVIHtcbm1tL0tjb25maWc6MTQwOTpjb25maWcgTFJVX0dFTlxubW0vS2NvbmZpZy0xNDEwLVx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDE3LVxubW0vS2NvbmZpZzoxNDE4OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQxOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MjMtXG5tbS9LY29uZmlnOjE0MjQ6Y29uZmlnIExSVV9HRU5fU1RBVFNcbm1tL0tjb25maWctMTQyNS1cdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDMyLVxubW0vS2NvbmZpZzoxNDMzOmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDM0LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ0NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25maXJtaW5nIHRoZSBMUlVfR0VOIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgcGlubmVkIGRvd24gdGhhdCBgTFJVX0dFTmAgaXMgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gQW5kLCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTttIHRoaW5raW5nIHdlIG1pZ2h0IGFsc28gbmVlZCB0byBjb25zaWRlciBgTFJVX0dFTl9FTkFCTEVEYCBhcyBhIHBvdGVudGlhbCB3YXkgdG8gaGF2ZSBpdCB0dXJuZWQgb24gYnkgZGVmYXVsdCwgb3IgbWF5YmUgY29udHJvbGxlZCB2aWEgc3lzZnMgbGF0ZXIuIEJ1dCwgZnJvbSBhIGNvbXBpbGF0aW9uIHBlcnNwZWN0aXZlLCBgTFJVX0dFTmAgaXMgdGhlIG9uZSB0aGF0IHJlYWxseSBtYXR0ZXJzIHRvIGdldCB0aGUgY29kZSBpbmNsdWRlZC4KClJpZ2h0LCBzbyBJIGFsc28gbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgc2hvdWxkX2Fib3J0X3NjYW5gIGlzICpvbmx5KiBjb21waWxlZCBpZiBgQ09ORklHX0xSVV9HRU5gIGlzIGFjdGl2ZS4gWWVzLCB0aGF0JiMzOTtzIGl0IC0gaXQmIzM5O3Mgd2l0aGluIGFuIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gIGJsb2NrLiBUaGlzIHNvbGlkaWZpZXMgbXkgdW5kZXJzdGFuZGluZyB0aGF0IGBMUlVfR0VOYCBpcyBhYnNvbHV0ZWx5IHJlcXVpcmVkIGZvciB0aGF0IGZ1bmN0aW9uIHRvIGV2ZW4gZXhpc3QgaW4gdGhlIGNvbXBpbGVkIGNvZGUuCgpOb3csIGxldCYjMzk7cyBqdXN0IGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRvIHNlZSBpZiBgc2hvdWxkX2Fib3J0X3NjYW5gIGlzIGNhbGxlZCBhbnl3aGVyZSB3aGVuIGBMUlVfR0VOYCBpcyBkaXNhYmxlZCwganVzdCB0byBiZSBjZXJ0YWluIHRoZXJlJiMzOTtzIG5vIHN1YnRsZSBkZXBlbmRlbmN5LiBOb3BlLCBpdCYjMzk7cyBhbGwgd3JhcHBlZCB1cCBzYWZlbHkgaW5zaWRlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KCklzIHRoZXJlIGFueSBvdGhlciBsb2NhdGlvbiB0aGF0IG1pZ2h0IGRlZmluZSB0aGlzLCBvciBpcyB0aGlzIGl0PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG91bGRfYWJvcnRfc2NhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz00OTEwPXN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNDkyNi1cbm1tL3Ztc2Nhbi5jOjQ5Mjc6c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTQ5Mjgte1xuLS1cbm1tL3Ztc2Nhbi5jPTQ5NjI9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00OTg5LVxubW0vdm1zY2FuLmM6NDk5MDpcdFx0aWYgKHNob3VsZF9hYm9ydF9zY2FuKGxydXZlYywgc2MpKVxubW0vdm1zY2FuLmMtNDk5MS1cdFx0XHRicmVhaztcbi0tXG5tbS92bXNjYW4uYz01MDQ4PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUwOTMtXG5tbS92bXNjYW4uYzo1MDk0Olx0XHRpZiAoc2hvdWxkX2Fib3J0X3NjYW4obHJ1dmVjLCBzYykpXG5tbS92bXNjYW4uYy01MDk1LVx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzIwOAoJCQkJCQkJb3V0cHV0OiAxNjkKCQkJCQkJCXRob3VnaHRzOiAyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2ggaW4gYG1tL3Ztc2Nhbi5jYCAoQ09ORklHX0xSVV9HRU4pKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IHRhcmdldGVkIHdpdGhpbiBgbW0vdm1zY2FuLmNgIGFuZCBpcyBvbmx5IHJlbGV2YW50IGlmIGBDT05GSUdfTFJVX0dFTmAgaXMgZW5hYmxlZCwgd2hpY2ggaXMgYSBrZXkgc3RhcnRpbmcgcG9pbnQuIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUsIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gQ3JpdGljYWxseSwgaXQgYXBwZWFycyB0byBhZGRyZXNzIGEgbmFzdHkgaXNzdWU6IHByb2FjdGl2ZSByZWNsYWltIHBvdGVudGlhbGx5IGhhbmdpbmcgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBiZWNvbWluZyB1bnJlc3BvbnNpdmUgdG8gc2lnbmFscywgd2hpY2ggd291bGQgYmUgYSByZWFsIHByb2JsZW0gaW4gYSBoaWdoLWxvYWQgZW52aXJvbm1lbnQuIFRoaXMgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGdpdmVuIHRoZSBwb3RlbnRpYWwgc2V2ZXJpdHkgb2YgYSBoYW5nLgoKTXkgYW5hbHlzaXMgdGVsbHMgbWUgdGhlIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb25zIGFyZSBgTFJVX0dFTmAgYW5kIGBNRU1DR2AuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHNwZWNpZmljIHN5bWJvbHMgaGVyZS4gU3BlY2lmaWNhbGx5IEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBgc2hvdWxkX2Fib3J0X3NjYW5gLCBhcyB0aGF0JiMzOTtzIHRoZSBoZWFydCBvZiB0aGUgY2hhbmdlLiBJdCYjMzk7cyByZWxhdGVkIHRvIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AsIGBzaHJpbmtfbWFueWAsIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgYG1lbW9yeV9yZWNsYWltYCBhbmQgYHJlY2xhaW1fc3RvcmVgLgoKVGhlIHBhdGNoJiMzOTtzIGltcGFjdCBpcyB0aGF0IGl0IG1vZGlmaWVzIGBzaG91bGRfYWJvcnRfc2NhbmAgd2l0aGluIHRoZSBNR0xSVSBpbXBsZW1lbnRhdGlvbi4gVGhlIHVwZGF0ZSBlbnN1cmVzIHRoYXQgcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIGlzIGFib3J0ZWQgaWYgYSBzaWduYWwgaXMgcGVuZGluZy4gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHByZXZlbnRpbmcgcHJvYWN0aXZlIHJlY2xhaW0gZnJvbSBnZXR0aW5nIHN0dWNrIGluZGVmaW5pdGVseS4gSXQmIzM5O3MgcmVhY2hhYmxlIHZpYSBjZ3JvdXAgdjImIzM5O3MgYG1lbW9yeS5yZWNsYWltYCBpbnRlcmZhY2Ugb3IgdGhlIHN5c2ZzIG5vZGUgcmVjbGFpbSBtZXRob2QuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnQgaW4gc2lnbmFsIGhhbmRsaW5nIHdpdGhpbiBtZW1vcnkgcmVjbGFpbS4KCkkmIzM5O20gdGhpbmtpbmcgdGhpcyBwYXRjaCBpcyBzb2xpZC4gSXQmIzM5O3MgdGltZSB0byB0ZXN0LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwODozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Nob3VsZF9hYm9ydF9zY2FuJiMzNDssCiAgICAmIzM0O3RyeV90b19zaHJpbmtfbHJ1dmVjJiMzNDssCiAgICAmIzM0O3Nocmlua19tYW55JiMzNDssCiAgICAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAgICYjMzQ7bWVtb3J5X3JlY2xhaW0mIzM0OywKICAgICYjMzQ7cmVjbGFpbV9zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc2hvdWxkX2Fib3J0X3NjYW5gIGluIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgY29kZSB0byBhYm9ydCBwcm9hY3RpdmUgbWVtb3J5IHJlY2xhaW0gaWYgYSBzaWduYWwgaXMgcGVuZGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IHByZXZlbnRzIHByb2FjdGl2ZSByZWNsYWltIGZyb20gaGFuZ2luZyBpbmRlZmluaXRlbHkgd2hlbiBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbC4gSXQgaXMgcmVhY2hhYmxlIHZpYSBjZ3JvdXAgdjIgYG1lbW9yeS5yZWNsYWltYCBvciBzeXNmcyBub2RlIHJlY2xhaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzaG91bGRfYWJvcnRfc2NhbiYjMzQ7LAogICAgJiMzNDt0cnlfdG9fc2hyaW5rX2xydXZlYyYjMzQ7LAogICAgJiMzNDtzaHJpbmtfbWFueSYjMzQ7LAogICAgJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgICAmIzM0O21lbW9yeV9yZWNsYWltJiMzNDssCiAgICAmIzM0O3JlY2xhaW1fc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHNob3VsZF9hYm9ydF9zY2FuYCBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGNvZGUgdG8gYWJvcnQgcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIGlmIGEgc2lnbmFsIGlzIHBlbmRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBwcmV2ZW50cyBwcm9hY3RpdmUgcmVjbGFpbSBmcm9tIGhhbmdpbmcgaW5kZWZpbml0ZWx5IHdoZW4gaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwuIEl0IGlzIHJlYWNoYWJsZSB2aWEgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAgb3Igc3lzZnMgbm9kZSByZWNsYWltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzM6NDkuMTg4NjIzNjMzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA5NjE4OTU1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaG91bGRfYWJvcnRfc2NhblwiLFxuICAgIFwidHJ5X3RvX3Nocmlua19scnV2ZWNcIixcbiAgICBcInNocmlua19tYW55XCIsXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gICAgXCJtZW1vcnlfcmVjbGFpbVwiLFxuICAgIFwicmVjbGFpbV9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBzaG91bGRfYWJvcnRfc2NhbmAgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBjb2RlIHRvIGFib3J0IHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSBpZiBhIHNpZ25hbCBpcyBwZW5kaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgcHJldmVudHMgcHJvYWN0aXZlIHJlY2xhaW0gZnJvbSBoYW5naW5nIGluZGVmaW5pdGVseSB3aGVuIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsLiBJdCBpcyByZWFjaGFibGUgdmlhIGNncm91cCB2MiBgbWVtb3J5LnJlY2xhaW1gIG9yIHN5c2ZzIG5vZGUgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzM6NDkuMTg4NjI5NjUzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Njc3MTEwOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3NjE1NDgzYTczZTU0ODdlY2IyYjM3MjdlM2NkZmE3MmEwZWQyMjM3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDYgMDg6MzM6NDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IDM1YzNiYjE1YWU5NmEzLi5mYjQ3MmU5MjRmYzc3MSAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTQ5MjksNiArNDkyOSw5IEBAIHN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuIFxcdGludCBpO1xcbiBcXHRlbnVtIHpvbmVfd2F0ZXJtYXJrcyBtYXJrO1xcbiBcXG4rXFx0aWYgKHVubGlrZWx5KHNjLVxcdTAwM2Vwcm9hY3RpdmUgXFx1MDAyNlxcdTAwMjYgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuIFxcdGlmIChzYy1cXHUwMDNlbnJfcmVjbGFpbWVkIFxcdTAwM2U9IG1heChzYy1cXHUwMDNlbnJfdG9fcmVjbGFpbSwgY29tcGFjdF9nYXAoc2MtXFx1MDAzZW9yZGVyKSkpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzM6NDkuNzU3MTI3MzgyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDM5MzM4MTAxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNob3VsZF9hYm9ydF9zY2FuXCIsXG4gICAgXCJ0cnlfdG9fc2hyaW5rX2xydXZlY1wiLFxuICAgIFwic2hyaW5rX21hbnlcIixcbiAgICBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgICBcIm1lbW9yeV9yZWNsYWltXCIsXG4gICAgXCJyZWNsYWltX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHNob3VsZF9hYm9ydF9zY2FuYCBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGNvZGUgdG8gYWJvcnQgcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIGlmIGEgc2lnbmFsIGlzIHBlbmRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBwcmV2ZW50cyBwcm9hY3RpdmUgcmVjbGFpbSBmcm9tIGhhbmdpbmcgaW5kZWZpbml0ZWx5IHdoZW4gaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwuIEl0IGlzIHJlYWNoYWJsZSB2aWEgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAgb3Igc3lzZnMgbm9kZSByZWNsYWltLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc2MTU0ODNhNzNlNTQ4N2VjYjJiMzcyN2UzY2RmYTcyYTBlZDIyMzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCA2IDA4OjMzOjQ3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YTMuLmZiNDcyZTkyNGZjNzcxIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDkyOSw2ICs0OTI5LDkgQEAgc3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiBcdGludCBpO1xuIFx0ZW51bSB6b25lX3dhdGVybWFya3MgbWFyaztcbiBcbitcdGlmICh1bmxpa2VseShzYy1cdTAwM2Vwcm9hY3RpdmUgXHUwMDI2XHUwMDI2IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4gXHRpZiAoc2MtXHUwMDNlbnJfcmVjbGFpbWVkIFx1MDAzZT0gbWF4KHNjLVx1MDAzZW5yX3RvX3JlY2xhaW0sIGNvbXBhY3RfZ2FwKHNjLVx1MDAzZW9yZGVyKSkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzM6NDkuNzU3MTI5NDYyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIyNzY3MzQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFByb2FjdGl2ZSBTY2FubmluZyBBYm9ydCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL3Ztc2Nhbi5jYCwgd2hpY2ggbWVhbnMgaXQncyBkaXJlY3RseSBpbXBhY3RpbmcgdGhlIGhlYXJ0IG9mIHRoZSB2aXJ0dWFsIG1lbW9yeSBzY2FubmluZyBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGluc2VydGluZyBhIGNoZWNrIHdpdGhpbiB0aGUgYHNob3VsZF9hYm9ydF9zY2FuYCBmdW5jdGlvbi4gTGV0IG1lIHB1bGwgdXAgdGhhdCBmdW5jdGlvbiBpbiBteSBtZW50YWwgbW9kZWwuLi4gcmlnaHQsIGBzaG91bGRfYWJvcnRfc2NhbmAgaXMgdGhlIGdhdGVrZWVwZXIgZGV0ZXJtaW5pbmcgaWYgYSBzY2FuIHNob3VsZCBiZSBwcmVtYXR1cmVseSB0ZXJtaW5hdGVkLiBUaGUga2V5IHBhcnQgaXMgdGhpcyBuZXdseSBhZGRlZCBjb25kaXRpb25hbDogYGlmICh1bmxpa2VseShzYy1cdTAwM2Vwcm9hY3RpdmUgXHUwMDI2XHUwMDI2IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSkgcmV0dXJuIHRydWU7YC5cblxuU28sIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgZm9jdXNlZCBvbmUgd2l0aGluIHRoZSBsYXJnZXIgVk0gc3lzdGVtLiBJdCdzIHNheWluZyB0aGF0IGlmIHdlJ3JlIGluIGEgXCJwcm9hY3RpdmVcIiBzY2FubmluZyBzdGF0ZSAoYHNjLVx1MDAzZXByb2FjdGl2ZWAgaXMgdHJ1ZSkgKmFuZCogdGhlIGN1cnJlbnQgcHJvY2VzcyBoYXMgYSBwZW5kaW5nIHNpZ25hbCAoYHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpYCksIHRoZW4gd2Ugc2hvdWxkIGFib3J0IHRoZSBzY2FuIGltbWVkaWF0ZWx5LiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHByb2FjdGl2ZSBzY2FubmluZyBpcyBhYm91dCBiZWluZyBhZ2dyZXNzaXZlLCBidXQgaXQgc2hvdWxkbid0IGJlIGF0IHRoZSBleHBlbnNlIG9mIHJlc3BvbnNpdmVuZXNzIHRvIHVzZXIgc2lnbmFscywgb2J2aW91c2x5LiBXZSdyZSBwcmlvcml0aXppbmcgdXNlciBpbnB1dCBvdmVyIGFnZ3Jlc3NpdmUgYmFja2dyb3VuZCBtZW1vcnkgcmVjbGFpbWluZyB3aGVuIGEgc2lnbmFsIGlzIHBlbmRpbmcuIFRoaXMgbWFrZXMgdGhlIHN5c3RlbSBtb3JlIHJlc3BvbnNpdmUgdG8gdXNlciBhY3Rpb25zLlxuXG5UaGlzIGlzIGEgZ29vZCwgY2xlYW4gcGF0Y2ggaW4gdGVybXMgb2YgaXRzIHRhcmdldGVkIGltcGFjdC4gSSdkIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgY29udGV4dCBvZiBcInByb2FjdGl2ZVwiIHNjYW5uaW5nLCBvZiBjb3Vyc2UuIFdoYXQgdHJpZ2dlcnMgdGhpcyBzdGF0ZT8gV2hhdCBzaWduYWxzIGFyZSB3ZSBjb25zaWRlcmluZywgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucz8gQnV0IGNvbmNlcHR1YWxseSwgdGhpcyBhZGRpdGlvbiBpcyBzb3VuZCBmcm9tIGEgcmVzb3VyY2UgbWFuYWdlbWVudCBwZXJzcGVjdGl2ZSBhbmQgZW5oYW5jZXMgc3lzdGVtIHJlc3BvbnNpdmVuZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODIzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwODozMzo1My45ODQ4MDUwNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzMxMzM2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaG91bGRfYWJvcnRfc2NhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz00OTEwPXN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy00OTI2LVxcbm1tL3Ztc2Nhbi5jOjQ5Mjc6c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy00OTI4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ5NjI9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5ODktXFxubW0vdm1zY2FuLmM6NDk5MDpcXHRcXHRpZiAoc2hvdWxkX2Fib3J0X3NjYW4obHJ1dmVjLCBzYykpXFxubW0vdm1zY2FuLmMtNDk5MS1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwNDg9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MDkzLVxcbm1tL3Ztc2Nhbi5jOjUwOTQ6XFx0XFx0aWYgKHNob3VsZF9hYm9ydF9zY2FuKGxydXZlYywgc2MpKVxcbm1tL3Ztc2Nhbi5jLTUwOTUtXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjMzOjU0LjA0MjEyNDA0NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjQ1NjU0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTY2FuIEFib3J0IEZ1bmN0aW9uKipcblxuT2theSwgc28gdGhlIGBzaG91bGRfYWJvcnRfc2NhbmAgZnVuY3Rpb24uIFRoYXQncyB1c2VkIGluIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgYW5kIGBzaHJpbmtfbWFueWAsIHNvIGl0J3MgY2xlYXJseSBhY3RpdmUgYW5kIGdldHRpbmcgY2FsbGVkIGFzIGl0IHNob3VsZCBiZS4gSXQncyBwYXJ0IG9mIHRoZSB2bXNjYW4sIG1lbW9yeSByZWNsYWltIHBhdGgsIHdoaWNoIG1lYW5zIGl0IHBsYXlzIGEgY3JpdGljYWwgcm9sZSBpbiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIG1lbW9yeSBwcmVzc3VyZS5cblxuVGhpcyBwYXRjaCwgaW4gcGFydGljdWxhciwgbG9va3MgYXQgYHNjLVx1MDAzZXByb2FjdGl2ZWAgYW5kIGBzaWduYWxfcGVuZGluZyhjdXJyZW50KWAuIEhtbSwgYHNjLVx1MDAzZXByb2FjdGl2ZWAgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBwcm9hY3RpdmUgcmVjbGFpbSwgbGlrZSB3aGF0IHlvdeKAmWQgdHJpZ2dlciB3aXRoIGBtZW1vcnkucmVjbGFpbWAgaW4gY2dyb3VwcyB2Mi4gR290IGl0LiBTbywgbGV0J3MgdHJhY2UgYmFjayB3aGVyZSBgc2MtXHUwMDNlcHJvYWN0aXZlYCBpcyBhY3R1YWxseSAqc2V0Ki4gR290dGEgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhlIHByb2FjdGl2ZSBwYXRoLiBLbm93aW5nIHRob3NlIGNvbmRpdGlvbnMgd2lsbCBnaXZlIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIHBpZWNlIG9mIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NzcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzM6NTcuNzY2NjkxODYyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MDg1NDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2FjdGl2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz03ND1zdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTk1LVxcbm1tL3Ztc2Nhbi5jOjk2OlxcdC8qIFN3YXBwaW5lc3MgdmFsdWUgZm9yIHByb2FjdGl2ZSByZWNsYWltLiBBbHdheXMgdXNlIHNjX3N3YXBwaW5lc3MoKSEgKi9cXG5tbS92bXNjYW4uYzo5NzpcXHRpbnQgKnByb2FjdGl2ZV9zd2FwcGluZXNzO1xcbm1tL3Ztc2Nhbi5jLTk4LVxcbi0tXFxubW0vdm1zY2FuLmMtMTIxLVxcdC8qIFByb2FjdGl2ZSByZWNsYWltIGludm9rZWQgYnkgdXNlcnNwYWNlICovXFxubW0vdm1zY2FuLmM6MTIyOlxcdHVuc2lnbmVkIGludCBwcm9hY3RpdmU6MTtcXG5tbS92bXNjYW4uYy0xMjMtXFxuLS1cXG5tbS92bXNjYW4uYz0yNDI9c3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtMjQzLXtcXG5tbS92bXNjYW4uYzoyNDQ6XFx0aWYgKHNjLVxcdTAwM2Vwcm9hY3RpdmUgXFx1MDAyNlxcdTAwMjYgc2MtXFx1MDAzZXByb2FjdGl2ZV9zd2FwcGluZXNzKVxcbm1tL3Ztc2Nhbi5jOjI0NTpcXHRcXHRyZXR1cm4gKnNjLVxcdTAwM2Vwcm9hY3RpdmVfc3dhcHBpbmVzcztcXG5tbS92bXNjYW4uYy0yNDYtXFx0cmV0dXJuIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhtZW1jZyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yODY9c3RhdGljIHZvaWQgZmx1c2hfcmVjbGFpbV9zdGF0ZShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwMi1cXHQgKiBmcm9tIHRoZSB0YXJnZXQgbWVtY2c7IHByZXZlbnRpbmcgdW5uZWNlc3NhcnkgcmV0cmllcyBkdXJpbmcgbWVtY2dcXG5tbS92bXNjYW4uYzozMDM6XFx0ICogY2hhcmdpbmcgYW5kIGZhbHNlIHBvc2l0aXZlcyBmcm9tIHByb2FjdGl2ZSByZWNsYWltLlxcbm1tL3Ztc2Nhbi5jLTMwNC1cXHQgKlxcbi0tXFxubW0vdm1zY2FuLmM9NDQ0PXN0YXRpYyBpbnQgcmVjbGFpbWVyX29mZnNldChzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1My1cXHRcXHRyZXR1cm4gUEdTVEVBTF9LSFVHRVBBR0VEIC0gUEdTVEVBTF9LU1dBUEQ7XFxubW0vdm1zY2FuLmM6NDU0OlxcdGlmIChzYy1cXHUwMDNlcHJvYWN0aXZlKVxcbm1tL3Ztc2Nhbi5jLTQ1NS1cXHRcXHRyZXR1cm4gUEdTVEVBTF9QUk9BQ1RJVkUgLSBQR1NURUFMX0tTV0FQRDtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTEwNTU9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtMTU2OC1cXHRcXHQgKiBtbG9ja2VkIG9yIHRvbyBob3QgdG8gcmVjbGFpbS4gV2UgY2FuIGRpc2FibGUgcmVjbGFpbVxcbm1tL3Ztc2Nhbi5jOjE1Njk6XFx0XFx0ICogZnJvbSB0b3AgdGllciBub2RlcyBpbiBwcm9hY3RpdmUgcmVjbGFpbSB0aG91Z2ggYXMgdGhhdCBpc1xcbm1tL3Ztc2Nhbi5jLTE1NzAtXFx0XFx0ICogbm90IHJlYWwgbWVtb3J5IHByZXNzdXJlLlxcbm1tL3Ztc2Nhbi5jLTE1NzEtXFx0XFx0ICovXFxubW0vdm1zY2FuLmM6MTU3MjpcXHRcXHRpZiAoIXNjLVxcdTAwM2Vwcm9hY3RpdmUpIHtcXG5tbS92bXNjYW4uYy0xNTczLVxcdFxcdFxcdGRvX2RlbW90ZV9wYXNzID0gZmFsc2U7XFxuLS1cXG5tbS92bXNjYW4uYz0yNDkzPXN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy0yNTIzLVxcdGlmIChzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZKSB7XFxubW0vdm1zY2FuLmM6MjUyNDpcXHRcXHRXQVJOX09OX09OQ0UoIXNjLVxcdTAwM2Vwcm9hY3RpdmUpO1xcbm1tL3Ztc2Nhbi5jLTI1MjUtXFx0XFx0c2Nhbl9iYWxhbmNlID0gU0NBTl9BTk9OO1xcbi0tXFxubW0vdm1zY2FuLmM9NDkyNz1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDkzMS1cXG5tbS92bXNjYW4uYzo0OTMyOlxcdGlmICh1bmxpa2VseShzYy1cXHUwMDNlcHJvYWN0aXZlIFxcdTAwMjZcXHUwMDI2IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSlcXG5tbS92bXNjYW4uYy00OTMzLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vdm1zY2FuLmM9NTAwNz1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwMzAtXFxubW0vdm1zY2FuLmM6NTAzMTpcXHRpZiAoIXNjLVxcdTAwM2Vwcm9hY3RpdmUpXFxubW0vdm1zY2FuLmMtNTAzMi1cXHRcXHR2bXByZXNzdXJlKHNjLVxcdTAwM2VnZnBfbWFzaywgc2MtXFx1MDAzZW9yZGVyLCBtZW1jZywgZmFsc2UsXFxuLS1cXG5tbS92bXNjYW4uYz01MTE4PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTEyOC1cXG5tbS92bXNjYW4uYzo1MTI5OlxcdHNldF9tbV93YWxrKE5VTEwsIHNjLVxcdTAwM2Vwcm9hY3RpdmUpO1xcbm1tL3Ztc2Nhbi5jLTUxMzAtXFxuLS1cXG5tbS92bXNjYW4uYz01MTM5PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MTU3LVxcbm1tL3Ztc2Nhbi5jOjUxNTg6XFx0c2V0X21tX3dhbGsocGdkYXQsIHNjLVxcdTAwM2Vwcm9hY3RpdmUpO1xcbm1tL3Ztc2Nhbi5jLTUxNTktXFxuLS1cXG5tbS92bXNjYW4uYz01NjYxPXN0YXRpYyBzc2l6ZV90IGxydV9nZW5fc2VxX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLFxcbi0tXFxubW0vdm1zY2FuLmMtNTY3NC1cXHRcXHQuZ2ZwX21hc2sgPSBHRlBfS0VSTkVMLFxcbm1tL3Ztc2Nhbi5jOjU2NzU6XFx0XFx0LnByb2FjdGl2ZSA9IHRydWUsXFxubW0vdm1zY2FuLmMtNTY3Ni1cXHR9O1xcbi0tXFxubW0vdm1zY2FuLmM9NjA3MD1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MTM1LVxcdFxcdC8qIFJlY29yZCB0aGUgZ3JvdXAncyByZWNsYWltIGVmZmljaWVuY3kgKi9cXG5tbS92bXNjYW4uYzo2MTM2OlxcdFxcdGlmICghc2MtXFx1MDAzZXByb2FjdGl2ZSlcXG5tbS92bXNjYW4uYy02MTM3LVxcdFxcdFxcdHZtcHJlc3N1cmUoc2MtXFx1MDAzZWdmcF9tYXNrLCBzYy1cXHUwMDNlb3JkZXIsIG1lbWNnLCBmYWxzZSxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYxNDk9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MTgwLVxcdC8qIFJlY29yZCB0aGUgc3VidHJlZSdzIHJlY2xhaW0gZWZmaWNpZW5jeSAqL1xcbm1tL3Ztc2Nhbi5jOjYxODE6XFx0aWYgKCFzYy1cXHUwMDNlcHJvYWN0aXZlKVxcbm1tL3Ztc2Nhbi5jLTYxODItXFx0XFx0dm1wcmVzc3VyZShzYy1cXHUwMDNlZ2ZwX21hc2ssIHNjLVxcdTAwM2VvcmRlciwgc2MtXFx1MDAzZXRhcmdldF9tZW1fY2dyb3VwLCB0cnVlLFxcbi0tXFxubW0vdm1zY2FuLmM9NjQ1Nz1zdGF0aWMgdW5zaWduZWQgbG9uZyBkb190cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtNjQ3MC1cXHRkbyB7XFxubW0vdm1zY2FuLmM6NjQ3MTpcXHRcXHRpZiAoIXNjLVxcdTAwM2Vwcm9hY3RpdmUpXFxubW0vdm1zY2FuLmMtNjQ3Mi1cXHRcXHRcXHR2bXByZXNzdXJlX3ByaW8oc2MtXFx1MDAzZWdmcF9tYXNrLCBzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsXFxuLS1cXG5tbS92bXNjYW4uYz02NzY1PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy02Nzc0LVxcdFxcdC5ucl90b19yZWNsYWltID0gbWF4KG5yX3BhZ2VzLCBTV0FQX0NMVVNURVJfTUFYKSxcXG5tbS92bXNjYW4uYzo2Nzc1OlxcdFxcdC5wcm9hY3RpdmVfc3dhcHBpbmVzcyA9IHN3YXBwaW5lc3MsXFxubW0vdm1zY2FuLmMtNjc3Ni1cXHRcXHQuZ2ZwX21hc2sgPSAoY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzaykgXFx1MDAyNiBHRlBfUkVDTEFJTV9NQVNLKSB8XFxuLS1cXG5tbS92bXNjYW4uYy02NzgzLVxcdFxcdC5tYXlfc3dhcCA9ICEhKHJlY2xhaW1fb3B0aW9ucyBcXHUwMDI2IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVApLFxcbm1tL3Ztc2Nhbi5jOjY3ODQ6XFx0XFx0LnByb2FjdGl2ZSA9ICEhKHJlY2xhaW1fb3B0aW9ucyBcXHUwMDI2IE1FTUNHX1JFQ0xBSU1fUFJPQUNUSVZFKSxcXG5tbS92bXNjYW4uYy02Nzg1LVxcdH07XFxuLS1cXG5tbS92bXNjYW4uYz03ODYzPXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc4NjgtXFxubW0vdm1zY2FuLmM6Nzg2OTppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxubW0vdm1zY2FuLmMtNzg3MC1cXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy03OTM3LVxcdFxcdFxcdFxcdC5yZWNsYWltX2lkeCA9IGdmcF96b25lKGdmcF9tYXNrKSxcXG5tbS92bXNjYW4uYzo3OTM4OlxcdFxcdFxcdFxcdC5wcm9hY3RpdmVfc3dhcHBpbmVzcyA9IHN3YXBwaW5lc3MgPT0gLTEgPyBOVUxMIDogXFx1MDAyNnN3YXBwaW5lc3MsXFxubW0vdm1zY2FuLmMtNzkzOS1cXHRcXHRcXHRcXHQucHJpb3JpdHkgPSBERUZfUFJJT1JJVFksXFxuLS1cXG5tbS92bXNjYW4uYy03OTQzLVxcdFxcdFxcdFxcdC5tYXlfc3dhcCA9IDEsXFxubW0vdm1zY2FuLmM6Nzk0NDpcXHRcXHRcXHRcXHQucHJvYWN0aXZlID0gMSxcXG5tbS92bXNjYW4uYy03OTQ1LVxcdFxcdFxcdH07XFxuLS1cXG5tbS92bXNjYW4uYz04MDEyPXN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxubW0vdm1zY2FuLmMtODAxNy1cXG5tbS92bXNjYW4uYzo4MDE4OlxcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcXG5tbS92bXNjYW4uYy04MDE5LVxcdHJldHVybiByZXQgPyAtRUFHQUlOIDogY291bnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjMzOjU3LjgyNDc4MjA2OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NTk2MjA1NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvYWN0aXZlIFJlY2xhaW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBjcnVjaWFsIGNoZWNrIGZvciBgc2lnbmFsX3BlbmRpbmcoY3VycmVudClgIHdpdGhpbiB0aGUgYHNob3VsZF9hYm9ydF9zY2FuYCBmdW5jdGlvbiwgYnV0IG9ubHkgd2hlbiBgc2MtXHUwMDNlcHJvYWN0aXZlYCBpcyB0cnVlLiBCYXNpY2FsbHksIGl04oCZcyBkZXNpZ25lZCB0byBpbnRlcnJ1cHQgcHJvYWN0aXZlIHJlY2xhaW0gb3BlcmF0aW9ucy4gVGhpcyBpcyBzcGVjaWZpY2FsbHkgcmVsZXZhbnQgdG8gcHJvYWN0aXZlIHJlY2xhaW0gdHJpZ2dlcmVkIHRocm91Z2ggbWV0aG9kcyBsaWtlIGBtZW1vcnkucmVjbGFpbWAgaW4gY2dyb3VwIHYyLCBvciB2aWEgdGhlIGByZWNsYWltYCBzeXNmcyBpbnRlcmZhY2Ugb24gTlVNQSBub2Rlcy5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgcG9zaXRpdmUgY2hhbmdlLiBJdCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgaGFuZyBvciBsb25nLWR1cmF0aW9uIGlzc3VlIHdoZW4gYSBzaWduYWwgaXMgc2VudCB0byB0aGUgcHJvY2VzcyBpbml0aWF0aW5nIHRoZSBwcm9hY3RpdmUgcmVjbGFpbS4gVGhpbmsgYWJvdXQgYSBzaXR1YXRpb24gd2hlcmUgYSB1c2VyLCBwZXJoYXBzIGluYWR2ZXJ0ZW50bHksIHRyaWdnZXJzIGEgbWVtb3J5IHJlY2xhaW0gdmlhIGNncm91cCBhbmQgdGhlbiBuZWVkcyB0byBzdG9wIGl0LiBUaGlzIHBhdGNoIGZhY2lsaXRhdGVzIHRoYXQgaW50ZXJydXB0aW9uLlxuXG5HaXZlbiB0aGF0IGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBkaXJlY3RseSBpbXBhY3RpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgSSdkIHNheSBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkIGhlcmUuIFRoZSBwb3RlbnRpYWwgZm9yIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zIGFuZCBlZGdlIGNhc2VzIHdpdGhpbiB0aGUgTU0gc3Vic3lzdGVtIGlzIGFsd2F5cyBwcmVzZW50LlxuXG5Ob3csIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFByb2FjdGl2ZSByZWNsYWltIGlzIHRyaWdnZXJlZCBieSBib3RoIGNncm91cCB2MidzIGBtZW1vcnkucmVjbGFpbWAgYW5kIHRoZSBzeXNmcyBgL3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlL25vZGUqL3JlY2xhaW1gIGludGVyZmFjZS4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGZ1bmN0aW9uIGluIGBtbS92bXNjYW4uY2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNTAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzQ6MDIuNjg0NDA0NTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcxMzcxNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz03ODYzPXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc4NjgtXFxubW0vdm1zY2FuLmM6Nzg2OTppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxubW0vdm1zY2FuLmMtNzg3MC1cXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYz04MDEyPXN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxubW0vdm1zY2FuLmMtODAxNy1cXG5tbS92bXNjYW4uYzo4MDE4OlxcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcXG5tbS92bXNjYW4uYy04MDE5LVxcdHJldHVybiByZXQgPyAtRUFHQUlOIDogY291bnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjM0OjAyLjc0MTU0NzU3NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjYyNjc3MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgb2YgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLiBUaGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBpcyB0byBzZWUgd2hlcmUgaXQncyAqdXNlZCogb3IgKmRlY2xhcmVkKiBvdXRzaWRlIG9mIHRoZSBgbW0vdm1zY2FuLmNgIGZpbGUgaXRzZWxmLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHVzZSBgZ3JlcGAgb3IgYSBzaW1pbGFyIHRvb2wgdG8gcGVyZm9ybSBhIGNyb3NzLXJlZmVyZW5jZSBzZWFyY2ggdGhyb3VnaG91dCB0aGUga2VybmVsIHNvdXJjZSB0cmVlLiBJJ20gbG9va2luZyBmb3IgZGlyZWN0IHVzZXMgaW4gZnVuY3Rpb24gY2FsbHMsIGRlY2xhcmF0aW9ucyBpbiBoZWFkZXIgZmlsZXMsIG9yIGFueSBvdGhlciByZWZlcmVuY2VzIHRoYXQgY291bGQgcHJvdmlkZSBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gYmUgbWluZGZ1bCBvZiBwb3RlbnRpYWwgY29tcGxleGl0aWVzIGxpa2UgaW5kaXJlY3QgY2FsbHMgdmlhIGZ1bmN0aW9uIHBvaW50ZXJzIG9yIHVzZXMgaW4gbWFjcm8gZXhwYW5zaW9ucywgc28gSSBtaWdodCByZWZpbmUgbXkgc2VhcmNoIHRlcm1zIGFzIEkgZ28uIFVsdGltYXRlbHksIEknbSBhaW1pbmcgdG8gYnVpbGQgYSBtYXAgb2YgaXRzIGV4dGVybmFsIGludGVyYWN0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZml0cyBpbnRvIHRoZSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IGxhbmRzY2FwZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg4MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjM0OjA2LjAwNzgxNzMyNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3MDI1MzkzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTYzMT1leHRlcm4gdm9pZCByZWNsYWltX3Rocm90dGxlKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0gdm1zY2FuX3Rocm90dGxlX3N0YXRlIHJlYXNvbik7XFxubW0vaW50ZXJuYWwuaDo2MzI6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL2ludGVybmFsLmgtNjMzLVxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDk4OT1zdGF0aWMgc3NpemVfdCBtZW1vcnlfcmVjbGFpbShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00OTk0LVxcbm1tL21lbWNvbnRyb2wuYzo0OTk1OlxcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oYnVmLCBtZW1jZywgTlVMTCk7XFxubW0vbWVtY29udHJvbC5jLTQ5OTYtXFx0aWYgKHJldClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc4NjM9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNzg2OC1cXG5tbS92bXNjYW4uYzo3ODY5OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG5tbS92bXNjYW4uYy03ODcwLVxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTgwMTI9c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5tbS92bXNjYW4uYy04MDE3LVxcbm1tL3Ztc2Nhbi5jOjgwMTg6XFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xcbm1tL3Ztc2Nhbi5jLTgwMTktXFx0cmV0dXJuIHJldCA/IC1FQUdBSU4gOiBjb3VudDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzQ6MDguNDc4MDc4NDc0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MDEzOTk2MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IFJlY2xhaW0gSW1wbGVtZW50YXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IG1lbW9yeSByZWNsYWltIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGVzZSBmdW5jdGlvbnMuIEkgc2VlIHRoYXQgYG1lbWNvbnRyb2wuY2AgdXRpbGl6ZXMgaXQgd2l0aGluIHRoZSBgbWVtb3J5X3JlY2xhaW1gIGZ1bmN0aW9uLiBUaGlzIG9uZSBpcyByZWxhdGVkIHRvIGNncm91cCB2MidzIGBtZW1vcnkucmVjbGFpbWAgZmVhdHVyZS4gVGhlbiwgYHZtc2Nhbi5jYCBjb250YWlucyBgcmVjbGFpbV9zdG9yZWAsIHdoaWNoIGlzIHJlbGF0ZWQgdG8gdGhlIGAvc3lzL2RldmljZXMvc3lzdGVtL25vZGUvbm9kZSovcmVjbGFpbWAgaW50ZXJmYWNlLCB3aGljaCBpcyB1c2VkIGZvciBub2RlIHJlY2xhaW0uXG5cblRvIHRlc3QgdGhlc2UgZnVuY3Rpb25hbGl0aWVzIHRob3JvdWdobHksIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGFwcHJvcHJpYXRlIGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gVGhhdCBtZWFucyBJJ2xsIG5lZWQgYENPTkZJR19NRU1DR2AgdG8gd29yayB3aXRoIHRoZSBjZ3JvdXAgbWVtb3J5IGNvbnRyb2xsZXIuIEFsdGVybmF0aXZlbHksIEknbGwgdXNlIGBDT05GSUdfTlVNQWAgaWYgSSB3YW50IHRvIGZvY3VzIG9uIG5vZGUgcmVjbGFpbSB0ZXN0aW5nLlxuXG5MZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gYHJlY2xhaW1fc3RvcmVgIGluIGBtbS92bXNjYW4uY2AuIFRoYXQgc2VlbXMgbGlrZSB0aGUgcmlnaHQgcGxhY2UgdG8gYmVnaW4sIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIG5vZGUgcmVjbGFpbSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTUwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjM0OjEyLjE3OTQ4MDEzMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxNDQyNDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlY2xhaW1fc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9ODAwOT1FWFBPUlRfU1lNQk9MX0dQTChjaGVja19tb3ZlX3VuZXZpY3RhYmxlX2ZvbGlvcyk7XFxuLS1cXG5tbS92bXNjYW4uYy04MDExLSNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQSlcXG5tbS92bXNjYW4uYzo4MDEyOnN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbm1tL3Ztc2Nhbi5jLTgwMTMtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzQ6MTIuMzAwOTI3MDUyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDA0NDc5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIE1lbW9yeSBSZWNsYWltIEZlYXR1cmVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IG1lbW9yeSByZWNsYWltIGlzIGhhbmRsZWQgaW4gdGhpcyBzeXN0ZW0uIEkgc2VlIHRoYXQgdGhlIGByZWNsYWltX3N0b3JlYCBmdW5jdGlvbmFsaXR5IGlzIGNvbmRpdGlvbmFsIG9uIGJvdGggYENPTkZJR19TWVNGU2AgYW5kIGBDT05GSUdfTlVNQWAgYmVpbmcgZW5hYmxlZC4gVGhhdCdzIGdvb2QgdG8ga25vdyDigJMgaXQgZ2l2ZXMgbWUgYSBjbGVhciBpZGVhIG9mIHRoZSBkZXBlbmRlbmNpZXMgdGhlcmUuIE5vdywgdGhlIGBtZW1vcnlfcmVjbGFpbWAgZnVuY3Rpb24gaXRzZWxmLCB0aGUgY29yZSBvZiB0aGUgcmVjbGFpbSBwcm9jZXNzLCBhcHBlYXJzIHRvIGJlIGxvY2F0ZWQgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgIGFuZCBpcyBnb3Zlcm5lZCBieSBgQ09ORklHX01FTUNHYC4gR2l2ZW4gdGhhdCwgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB1bmRlcnN0YW5kaW5nIGhvdyBgQ09ORklHX01FTUNHYCBpbmZsdWVuY2VzIHRoZSBiZWhhdmlvciBvZiBgbWVtb3J5X3JlY2xhaW1gLiBUaW1lIHRvIGRpZyBkZWVwZXIgaW50byBgbW0vbWVtY29udHJvbC5jYCBhbmQgc3BlY2lmaWNhbGx5IGhvdyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGltcGxlbWVudGVkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDQyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzQ6MTUuNzQxMzc2OTM5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDUxMTk3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1vcnlfcmVjbGFpbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTQ5Njc9c3RhdGljIHNzaXplX3QgbWVtb3J5X29vbV9ncm91cF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDk4OC1cXG5tbS9tZW1jb250cm9sLmM6NDk4OTpzdGF0aWMgc3NpemVfdCBtZW1vcnlfcmVjbGFpbShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG5tbS9tZW1jb250cm9sLmMtNDk5MC1cXHRcXHRcXHQgICAgICBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUwMDI9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTA3MC1cXHRcXHQuZmxhZ3MgPSBDRlRZUEVfTlNfREVMRUdBVEFCTEUsXFxubW0vbWVtY29udHJvbC5jOjUwNzE6XFx0XFx0LndyaXRlID0gbWVtb3J5X3JlY2xhaW0sXFxubW0vbWVtY29udHJvbC5jLTUwNzItXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzQ6MTUuODIxODk2MjUzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzM3NDQ0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgUmVjbGFpbSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIGBtZW1vcnlfcmVjbGFpbWAgaXMgZGVmaW5pdGVseSB0aWVkIGludG8gYG1lbW9yeV9maWxlc2AgYW5kIHJlZ2lzdGVyZWQgZm9yIGNncm91cCB2Mi4gVGhhdCBjb25uZWN0aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgZW5hYmxpbmcgYENPTkZJR19NRU1DR2AgaXMgYSBzb2xpZCBtb3ZlLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IHRvdWNoZXMgYHNob3VsZF9hYm9ydF9zY2FuYC4gVGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsIGJlY2F1c2UgaXQncyBjYWxsZWQgZnJvbSBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgc2hyaW5rX21hbnlgLCBzbyBpdCBoYXMgYSBkaXJlY3QgaW1wYWN0IG9uIHRoZSBzaHJpbmtpbmcgbG9naWMuXG5cbkxldCdzIHpvb20gaW4gb24gdGhlIGltcG9ydGFudCBzeW1ib2xzIG5vdy4gSSdtIGZvY3VzaW5nIG9uIGBzaG91bGRfYWJvcnRfc2NhbmAsIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AsIGBzaHJpbmtfbWFueWAsIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgYG1lbW9yeV9yZWNsYWltYCwgYW5kIGByZWNsYWltX3N0b3JlYC4gSSBoYXZlIHRvIGdyYXNwIGhvdyB0aGUgY2hhbmdlcyBpbiBgc2hvdWxkX2Fib3J0X3NjYW5gIHJpcHBsZSB0aHJvdWdoIHRvIHRob3NlIGFyZWFzLlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIGBzaG91bGRfYWJvcnRfc2NhbmAgaXMgKnN0YXRpYyo/IFJpZ2h0LiBUaGF0IGxpa2VseSBtZWFucyBpdCdzIG5vdCBkaXJlY3RseSB2aXNpYmxlIG91dHNpZGUgdGhlIGZpbGUuIEkgaGF2ZSB0byBzZWUgaWYgaXQncyBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciwgb3RoZXJ3aXNlLCBpdCdzIGp1c3QgYSBsb2NhbCBmdW5jdGlvbi4gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGdlbmVyYXRpb24gdG8gYmUgc3VyZSBhYm91dCB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTI0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjM0OjIwLjA1NTY0Mjg2MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYzMDQxNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hvdWxkX2Fib3J0X3NjYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NDkxMD1zdGF0aWMgbG9uZyBnZXRfbnJfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDkyNi1cXG5tbS92bXNjYW4uYzo0OTI3OnN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNDkyOC17XFxuLS1cXG5tbS92bXNjYW4uYz00OTYyPXN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00OTg5LVxcbm1tL3Ztc2Nhbi5jOjQ5OTA6XFx0XFx0aWYgKHNob3VsZF9hYm9ydF9zY2FuKGxydXZlYywgc2MpKVxcbm1tL3Ztc2Nhbi5jLTQ5OTEtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS92bXNjYW4uYz01MDQ4PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTA5My1cXG5tbS92bXNjYW4uYzo1MDk0OlxcdFxcdGlmIChzaG91bGRfYWJvcnRfc2NhbihscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYy01MDk1LVxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwODozNDoyMC4xMjE5NTE0NDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1NTY1MTgyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB0aGlzLlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgQm90dGxlbmVja3MgaW4gTWVtb3J5IFJlY2xhbWF0aW9uKipcblxuUmlnaHQsIHNvIGBzaG91bGRfYWJvcnRfc2NhbmAgYmVpbmcgYHN0YXRpY2AuLi4gdGhhdOKAmXMgcHJvYmFibHkgZ29pbmcgdG8gZ2V0IGlubGluZWQuIE5vdCBhIGh1Z2UgY29uY2VybiB0aGVyZS4gSSBzaG91bGQgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZXNlIGtleSBmdW5jdGlvbnM6IGB0cnlfdG9fc2hyaW5rX2xydXZlY2AsIGBzaHJpbmtfbWFueWAsIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgYG1lbW9yeV9yZWNsYWltYCwgYW5kIGByZWNsYWltX3N0b3JlYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBsaWtlbHkgc3VzcGVjdHMgZm9yIGFueSBwZXJmb3JtYW5jZSBpc3N1ZXMuXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGlzIGFsc28gYSBgc3RhdGljYCBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgYW5kIHBvdGVudGlhbCBmb3IgaW5saW5pbmcgd2lsbCBpbmZsdWVuY2UgaG93IEkgYXBwcm9hY2ggYW5hbHl6aW5nIGl0cyBwZXJmb3JtYW5jZSBjb250cmlidXRpb24uIElmIGl0ICppcyogc3RhdGljLCB0aGUgY29tcGlsZXIgbWlnaHQgYmUgYWJsZSB0byBvcHRpbWl6ZSBpdCBpbiB3YXlzIHRoYXQgYXJlIG1vcmUgZGlmZmljdWx0IHRvIHJlYXNvbiBhYm91dCBmcm9tIGEgc291cmNlLWNvZGUgbGV2ZWwuIE5lZWQgdG8ga2VlcCBhbiBleWUgb24gdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI4MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjM0OjIzLjM3NzYwNTEwOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM0OTkxOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X3RvX3Nocmlua19scnV2ZWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NDkyNz1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDk2MS0gKi9cXG5tbS92bXNjYW4uYzo0OTYyOnN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNDk2My17XFxuLS1cXG5tbS92bXNjYW4uYz01MDA3PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTAyNi1cXG5tbS92bXNjYW4uYzo1MDI3OlxcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNTAyOC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxMTg9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MTMwLVxcbm1tL3Ztc2Nhbi5jOjUxMzE6XFx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxcbm1tL3Ztc2Nhbi5jLTUxMzItXFx0XFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwODozNDoyMy40NDExMTIwNzNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyODQ3NTg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipTdGF0aWMgQW5hbHlzaXMgb2YgYHNocmlua19tYW55YCoqXG5cbk9rYXksIHNvIEknbSB0YWtpbmcgYSBsb29rIGF0IGBzaHJpbmtfbWFueWAuIEkga25vdyBpdCdzIGFsc28gZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGlzIHdvcnRoIG5vdGluZy4gU3RhdGljIGZ1bmN0aW9ucyBoYXZlIHNwZWNpZmljIGltcGxpY2F0aW9ucyByZWdhcmRpbmcgc2NvcGUgYW5kIGxpbmthZ2UsIGFuZCBpdCdzIGEgZGV0YWlsIHRoYXQgb2Z0ZW4gYWZmZWN0cyBob3cgdGhlIGNvbXBpbGVyIG9wdGltaXplcyBhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIG9mIHRoZSBzeXN0ZW0uIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGFuYWx5emUgdGhlIGNvZGUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGlzIHdoZW4gY29uc2lkZXJpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlIGJhc2UgYW5kIHdoZXJlIGl0IGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBJJ2xsIGZvY3VzIG9uIHdoYXQgaXQgZG9lcywgaG93IGl0IGlzIHVzZWQsIGFuZCB3aHkgaXQncyBiZWVuIGRlc2lnbmVkIHRoaXMgd2F5IGluIHRoZSBjb250ZXh0IG9mIGl0IGJlaW5nIGEgc3RhdGljIGZ1bmN0aW9uLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk0MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjM0OjI2LjQ2OTU4OTg1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Nzg2MjUwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfbWFueVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz01MDA3PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTA0Ny1cXG5tbS92bXNjYW4uYzo1MDQ4OnN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUwNDkte1xcbi0tXFxubW0vdm1zY2FuLmM9NTEzOT1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE2Ny1cXHRlbHNlXFxubW0vdm1zY2FuLmM6NTE2ODpcXHRcXHRzaHJpbmtfbWFueShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTUxNjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjM0OjI2LjUyNzQ1ODAxNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODY4Mjg4MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbHJlYWR5IGRlZXAgaW4gdGhlIHdlZWRzIG9mIHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFtYXRpb24sIGFuZCBzcGVha2luZyBkaXJlY3RseSB0byBhbm90aGVyIGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgUHJvYWN0aXZlIFJlY2xhbWF0aW9uIEVudHJ5IFBvaW50KipcblxuUmlnaHQsIHNvIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyB0aGUgbHluY2hwaW4sIHRoZSBwbGFjZSB3aGVyZSBldmVyeXRoaW5nIGtpY2tzIG9mZiBmb3IgcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltLCBpc24ndCBpdD8gVGhhdCdzIHRoZSBlbnRyeSBwb2ludCBJIG5lZWQgdG8gemVybyBpbiBvbi4gRm9yZ2V0IGFib3V0IGFueXRoaW5nIGVsc2UgZm9yIGEgbWludXRlIOKAkyBsZXQncyBnbyBzdHJhaWdodCB0byBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmbG93LCBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgd2hhdCBpdCdzIHJlYWxseSBkb2luZyB1bmRlciB0aGUgaG9vZC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgdGhpcyB0aGluZyBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNjQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwODozNDoyOS4zOTU3NDg1NTRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MDMwMDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9Nzg2Mz1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03ODY4LVxcbm1tL3Ztc2Nhbi5jOjc4Njk6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL3Ztc2Nhbi5jLTc4NzAtXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmM9ODAxMj1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgwMTctXFxubW0vdm1zY2FuLmM6ODAxODpcXHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XFxubW0vdm1zY2FuLmMtODAxOS1cXHRyZXR1cm4gcmV0ID8gLUVBR0FJTiA6IGNvdW50O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwODozNDoyOS40NTI3ODM0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MTY3NDg3NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBhbmQgdXNhZ2Ugb2YgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLiBNeSBmaXJzdCB0aG91Z2h0IHdhcywgXCJJcyB0aGlzIGZ1bmN0aW9uIGV4cG9ydGVkPyBPciBpcyBpdCBkZWNsYXJlZCBhcyBzdGF0aWM/XCIgR2l2ZW4gdGhhdCBJJ20gc2VlaW5nIGl0IHJlZmVyZW5jZWQsIEkgYXNzdW1lZCBpdCBoYWQgdG8gYmUgZXhwb3J0ZWQgb3Igbm9uLXN0YXRpYywgb3RoZXJ3aXNlIGl0IHdvdWxkIGJlIGltcG9zc2libGUgdG8gY2FsbCBpdCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlLlxuXG5XYWl0IGEgbWludXRlLi4uIGl0J3MgKm5vdCogZXhwb3J0ZWQsIHdoaWNoIGlzIHdoYXQgSSB0aG91Z2h0LCBidXQgaXQgKmlzKiBub24tc3RhdGljLiBJbnRlcmVzdGluZy4gSXQncyB1c2VkIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYCwgYnV0IHRoYXQgZG9lc24ndCBpbW1lZGlhdGVseSB0ZWxsIG1lIHRoZSBmdWxsIHBpY3R1cmUuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBpbnZvbHZlZCBpbiB0aGUgcHJvYWN0aXZlIHJlY2xhaW0gcHJvY2Vzcy4gRG9lcyBpdCBkaXJlY3RseSBjYWxsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgb3IgaXMgdGhlcmUgc29tZSBvdGhlciBpbnRlcm1lZGlhcnkgZnVuY3Rpb24gaW4gdGhlIGNhbGwgY2hhaW4/IExldCBtZSBxdWlja2x5IGNoZWNrIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBhbmQgaXRzIGNhbGxlcnMsIGJ1dCwgYWgsIG5vLiBJIGdvdCBpdCB3cm9uZywgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIHByb2JhYmx5IGNhbGxpbmcgdGhhdCBvciBzb21ldGhpbmcgc2ltaWxhciFcblxuQWxyaWdodCwgaXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSdtIGdvaW5nIHRvIHJlYWQgdGhlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBmdW5jdGlvbiBkaXJlY3RseS4gVGhhdCdzIHRoZSBiZXN0IHdheSB0byBncmFzcCBpdHMgcHVycG9zZSwgYXJndW1lbnRzLCByZXR1cm4gdmFsdWVzLCBhbmQgd2hhdCBzcGVjaWZpYyBhY3Rpb25zIGl0IHRha2VzIHdoZW4gdHJpZ2dlcmVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3OTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzQ6MzMuOTY5NTM0Mjg4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MDI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3ODY5LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzg2OTpcXHRpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuNzg3MDpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuNzg3MTpcXHR7XFxuNzg3MjpcXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XFxuNzg3MzpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0sIG5yX3JlY2xhaW1lZCA9IDA7XFxuNzg3NDpcXHRcXHRpbnQgc3dhcHBpbmVzcyA9IC0xO1xcbjc4NzU6XFx0XFx0Y2hhciAqb2xkX2J1ZiwgKnN0YXJ0O1xcbjc4NzY6XFx0XFx0c3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdO1xcbjc4Nzc6XFx0XFx0Z2ZwX3QgZ2ZwX21hc2sgPSBHRlBfS0VSTkVMO1xcbjc4Nzg6XFx0XFxuNzg3OTpcXHRcXHRpZiAoIWJ1ZiB8fCAoIW1lbWNnIFxcdTAwMjZcXHUwMDI2ICFwZ2RhdCkgfHwgKG1lbWNnIFxcdTAwMjZcXHUwMDI2IHBnZGF0KSlcXG43ODgwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc4ODE6XFx0XFxuNzg4MjpcXHRcXHRidWYgPSBzdHJzdHJpcChidWYpO1xcbjc4ODM6XFx0XFxuNzg4NDpcXHRcXHRvbGRfYnVmID0gYnVmO1xcbjc4ODU6XFx0XFx0bnJfdG9fcmVjbGFpbSA9IG1lbXBhcnNlKGJ1ZiwgXFx1MDAyNmJ1ZikgLyBQQUdFX1NJWkU7XFxuNzg4NjpcXHRcXHRpZiAoYnVmID09IG9sZF9idWYpXFxuNzg4NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG43ODg4OlxcdFxcbjc4ODk6XFx0XFx0YnVmID0gc3Ryc3RyaXAoYnVmKTtcXG43ODkwOlxcdFxcbjc4OTE6XFx0XFx0d2hpbGUgKChzdGFydCA9IHN0cnNlcChcXHUwMDI2YnVmLCBcXFwiIFxcXCIpKSAhPSBOVUxMKSB7XFxuNzg5MjpcXHRcXHRcXHRpZiAoIXN0cmxlbihzdGFydCkpXFxuNzg5MzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG43ODk0OlxcdFxcdFxcdHN3aXRjaCAobWF0Y2hfdG9rZW4oc3RhcnQsIHRva2VucywgYXJncykpIHtcXG43ODk1OlxcdFxcdFxcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUzpcXG43ODk2OlxcdFxcdFxcdFxcdGlmIChtYXRjaF9pbnQoXFx1MDAyNmFyZ3NbMF0sIFxcdTAwMjZzd2FwcGluZXNzKSlcXG43ODk3OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc4OTg6XFx0XFx0XFx0XFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAzYyBNSU5fU1dBUFBJTkVTUyB8fFxcbjc4OTk6XFx0XFx0XFx0XFx0ICAgIHN3YXBwaW5lc3MgXFx1MDAzZSBNQVhfU1dBUFBJTkVTUylcXG43OTAwOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc5MDE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNzkwMjpcXHRcXHRcXHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYOlxcbjc5MDM6XFx0XFx0XFx0XFx0c3dhcHBpbmVzcyA9IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xcbjc5MDQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNzkwNTpcXHRcXHRcXHRkZWZhdWx0Olxcbjc5MDY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzkwNzpcXHRcXHRcXHR9XFxuNzkwODpcXHRcXHR9XFxuNzkwOTpcXHRcXG43OTEwOlxcdFxcdHdoaWxlIChucl9yZWNsYWltZWQgXFx1MDAzYyBucl90b19yZWNsYWltKSB7XFxuNzkxMTpcXHRcXHRcXHQvKiBXaWxsIGNvbnZlcmdlIG9uIHplcm8sIGJ1dCByZWNsYWltIGVuZm9yY2VzIGEgbWluaW11bSAqL1xcbjc5MTI6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBiYXRjaF9zaXplID0gKG5yX3RvX3JlY2xhaW0gLSBucl9yZWNsYWltZWQpIC8gNDtcXG43OTEzOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcmVjbGFpbWVkO1xcbjc5MTQ6XFx0XFxuNzkxNTpcXHRcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuNzkxNjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbjc5MTc6XFx0XFxuNzkxODpcXHRcXHRcXHQvKlxcbjc5MTk6XFx0XFx0XFx0ICogVGhpcyBpcyB0aGUgZmluYWwgYXR0ZW1wdCwgZHJhaW4gcGVyY3B1IGxydSBjYWNoZXMgaW4gdGhlXFxuNzkyMDpcXHRcXHRcXHQgKiBob3BlIG9mIGludHJvZHVjaW5nIG1vcmUgZXZpY3RhYmxlIHBhZ2VzLlxcbjc5MjE6XFx0XFx0XFx0ICovXFxuNzkyMjpcXHRcXHRcXHRpZiAoIW5yX3JldHJpZXMpXFxuNzkyMzpcXHRcXHRcXHRcXHRscnVfYWRkX2RyYWluX2FsbCgpO1xcbjc5MjQ6XFx0XFxuNzkyNTpcXHRcXHRcXHRpZiAobWVtY2cpIHtcXG43OTI2OlxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnM7XFxuNzkyNzpcXHRcXG43OTI4OlxcdFxcdFxcdFxcdHJlY2xhaW1fb3B0aW9ucyA9IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAgfFxcbjc5Mjk6XFx0XFx0XFx0XFx0XFx0XFx0ICBNRU1DR19SRUNMQUlNX1BST0FDVElWRTtcXG43OTMwOlxcdFxcdFxcdFxcdHJlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csXFxuNzkzMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgYmF0Y2hfc2l6ZSwgZ2ZwX21hc2ssXFxuNzkzMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgcmVjbGFpbV9vcHRpb25zLFxcbjc5MzM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHN3YXBwaW5lc3MgPT0gLTEgPyBOVUxMIDogXFx1MDAyNnN3YXBwaW5lc3MpO1xcbjc5MzQ6XFx0XFx0XFx0fSBlbHNlIHtcXG43OTM1OlxcdFxcdFxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XFxuNzkzNjpcXHRcXHRcXHRcXHRcXHQuZ2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSxcXG43OTM3OlxcdFxcdFxcdFxcdFxcdC5yZWNsYWltX2lkeCA9IGdmcF96b25lKGdmcF9tYXNrKSxcXG43OTM4OlxcdFxcdFxcdFxcdFxcdC5wcm9hY3RpdmVfc3dhcHBpbmVzcyA9IHN3YXBwaW5lc3MgPT0gLTEgPyBOVUxMIDogXFx1MDAyNnN3YXBwaW5lc3MsXFxuNzkzOTpcXHRcXHRcXHRcXHRcXHQucHJpb3JpdHkgPSBERUZfUFJJT1JJVFksXFxuNzk0MDpcXHRcXHRcXHRcXHRcXHQubWF5X3dyaXRlcGFnZSA9IDEsXFxuNzk0MTpcXHRcXHRcXHRcXHRcXHQubnJfdG9fcmVjbGFpbSA9IG1heChiYXRjaF9zaXplLCBTV0FQX0NMVVNURVJfTUFYKSxcXG43OTQyOlxcdFxcdFxcdFxcdFxcdC5tYXlfdW5tYXAgPSAxLFxcbjc5NDM6XFx0XFx0XFx0XFx0XFx0Lm1heV9zd2FwID0gMSxcXG43OTQ0OlxcdFxcdFxcdFxcdFxcdC5wcm9hY3RpdmUgPSAxLFxcbjc5NDU6XFx0XFx0XFx0XFx0fTtcXG43OTQ2OlxcdFxcbjc5NDc6XFx0XFx0XFx0XFx0aWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCxcXG43OTQ4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnBnZGF0LVxcdTAwM2VmbGFncykpXFxuNzk0OTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbjc5NTA6XFx0XFxuNzk1MTpcXHRcXHRcXHRcXHRyZWNsYWltZWQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgZ2ZwX21hc2ssXFxuNzk1MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBiYXRjaF9zaXplLCBcXHUwMDI2c2MpO1xcbjc5NTM6XFx0XFx0XFx0XFx0Y2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXFx1MDAyNnBnZGF0LVxcdTAwM2VmbGFncyk7XFxuNzk1NDpcXHRcXHRcXHR9XFxuNzk1NTpcXHRcXG43OTU2OlxcdFxcdFxcdGlmICghcmVjbGFpbWVkIFxcdTAwMjZcXHUwMDI2ICFucl9yZXRyaWVzLS0pXFxuNzk1NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG43OTU4OlxcdFxcbjc5NTk6XFx0XFx0XFx0bnJfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcXG43OTYwOlxcdFxcdH1cXG43OTYxOlxcdFxcbjc5NjI6XFx0XFx0cmV0dXJuIDA7XFxuNzk2MzpcXHR9XFxuNzk2NDpcXHRcXG43OTY1OlxcdC8qKlxcbjc5NjY6XFx0ICogY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3MgLSBNb3ZlIGV2aWN0YWJsZSBmb2xpb3MgdG8gYXBwcm9wcmlhdGUgem9uZVxcbjc5Njc6XFx0ICogbHJ1IGxpc3RcXG43OTY4OlxcdCAqIEBmYmF0Y2g6IEJhdGNoIG9mIGxydSBmb2xpb3MgdG8gY2hlY2suXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjM0OjMzLjk2OTkwNTk3OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDM3NTcwNzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gdGhlIFJlY2xhbWF0aW9uIExvZ2ljKipcblxuUmlnaHQsIHNvIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgaGVyZS4gSSBzZWUgaXQgc2V0cyBgc2MucHJvYWN0aXZlID0gMWAsIHdoaWNoIGlzIHRoZSB0cmlnZ2VyIGZvci4uLiBzb21ldGhpbmcuIFRoZW4gaXQgY2FsbHMgZWl0aGVyIGBfX25vZGVfcmVjbGFpbWAgb3IgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlIOKAkyBpdCdzIGluaXRpYXRpbmcgdGhlIHJlY2xhbWF0aW9uIHByb2Nlc3MsIGVpdGhlciBhdCB0aGUgbm9kZSBsZXZlbCBvciBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIG1lbW9yeSBjZ3JvdXBzLiBUaGUgY29yZSBsb2dpYyBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIHRoZSBgc2hvdWxkX2Fib3J0X3NjYW5gIGZ1bmN0aW9uLiBUaGF0J3Mgd2hlcmUgdGhleSd2ZSBpbmplY3RlZCB0aGUgbmV3IGJlaGF2aW9yLCBzbyB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLiBJJ20gZ29pbmcgdG8gcmUtZXhhbWluZSB0aGUgbG9naWMgd2l0aGluIHRoYXQgZnVuY3Rpb24sIGJlY2F1c2UgdGhhdCdzIHdoYXQgY29udHJvbHMgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIHNjYW4gaXMgaGFsdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG5ldyBjb25kaXRpb25zIGhhdmUgYmVlbiBpbnRyb2R1Y2VkIGFuZCBob3cgdGhleSBhZmZlY3QgdGhlIG92ZXJhbGwgcmVjbGFtYXRpb24gc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzc0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwODozNDozNy40MDc0NzkzMzVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ5MjcsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ5Mjc6XFx0c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG40OTI4OlxcdHtcXG40OTI5OlxcdFxcdGludCBpO1xcbjQ5MzA6XFx0XFx0ZW51bSB6b25lX3dhdGVybWFya3MgbWFyaztcXG40OTMxOlxcdFxcbjQ5MzI6XFx0XFx0aWYgKHVubGlrZWx5KHNjLVxcdTAwM2Vwcm9hY3RpdmUgXFx1MDAyNlxcdTAwMjYgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpKVxcbjQ5MzM6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuNDkzNDpcXHRcXG40OTM1OlxcdFxcdGlmIChzYy1cXHUwMDNlbnJfcmVjbGFpbWVkIFxcdTAwM2U9IG1heChzYy1cXHUwMDNlbnJfdG9fcmVjbGFpbSwgY29tcGFjdF9nYXAoc2MtXFx1MDAzZW9yZGVyKSkpXFxuNDkzNjpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG40OTM3OlxcdFxcbjQ5Mzg6XFx0XFx0LyogY2hlY2sgdGhlIG9yZGVyIHRvIGV4Y2x1ZGUgY29tcGFjdGlvbi1pbmR1Y2VkIHJlY2xhaW0gKi9cXG40OTM5OlxcdFxcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSB8fCBzYy1cXHUwMDNlb3JkZXIpXFxuNDk0MDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNDk0MTpcXHRcXG40OTQyOlxcdFxcdG1hcmsgPSBzeXNjdGxfbnVtYV9iYWxhbmNpbmdfbW9kZSBcXHUwMDI2IE5VTUFfQkFMQU5DSU5HX01FTU9SWV9USUVSSU5HID9cXG40OTQzOlxcdFxcdCAgICAgICBXTUFSS19QUk9NTyA6IFdNQVJLX0hJR0g7XFxuNDk0NDpcXHRcXG40OTQ1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gc2MtXFx1MDAzZXJlY2xhaW1faWR4OyBpKyspIHtcXG40OTQ2OlxcdFxcdFxcdHN0cnVjdCB6b25lICp6b25lID0gbHJ1dmVjX3BnZGF0KGxydXZlYyktXFx1MDAzZW5vZGVfem9uZXMgKyBpO1xcbjQ5NDc6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBzaXplID0gd21hcmtfcGFnZXMoem9uZSwgbWFyaykgKyBNSU5fTFJVX0JBVENIO1xcbjQ5NDg6XFx0XFxuNDk0OTpcXHRcXHRcXHRpZiAobWFuYWdlZF96b25lKHpvbmUpIFxcdTAwMjZcXHUwMDI2ICF6b25lX3dhdGVybWFya19vayh6b25lLCAwLCBzaXplLCBzYy1cXHUwMDNlcmVjbGFpbV9pZHgsIDApKVxcbjQ5NTA6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjQ5NTE6XFx0XFx0fVxcbjQ5NTI6XFx0XFxuNDk1MzpcXHRcXHQvKiBrc3dhcGQgc2hvdWxkIGFib3J0IGlmIGFsbCBlbGlnaWJsZSB6b25lcyBhcmUgc2FmZSAqL1xcbjQ5NTQ6XFx0XFx0cmV0dXJuIHRydWU7XFxuNDk1NTpcXHR9XFxuNDk1NjpcXHRcXG40OTU3OlxcdC8qXFxuNDk1ODpcXHQgKiBGb3IgZnV0dXJlIG9wdGltaXphdGlvbnM6XFxuNDk1OTpcXHQgKiAxLiBEZWZlciB0cnlfdG9faW5jX21heF9zZXEoKSB0byB3b3JrcXVldWVzIHRvIHJlZHVjZSBsYXRlbmN5IGZvciBtZW1jZ1xcbjQ5NjA6XFx0ICogICAgcmVjbGFpbS5cXG40OTYxOlxcdCAqL1xcbjQ5NjI6XFx0c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG40OTYzOlxcdHtcXG40OTY0OlxcdFxcdGJvb2wgbmVlZF9yb3RhdGUgPSBmYWxzZSwgc2hvdWxkX2FnZSA9IGZhbHNlO1xcbjQ5NjU6XFx0XFx0bG9uZyBucl9iYXRjaCwgbnJfdG9fc2NhbjtcXG40OTY2OlxcdFxcdGludCBzd2FwcGluZXNzID0gZ2V0X3N3YXBwaW5lc3MobHJ1dmVjLCBzYyk7XFxuNDk2NzpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcXG40OTY4OlxcdFxcbjQ5Njk6XFx0XFx0bnJfdG9fc2NhbiA9IGdldF9ucl90b19zY2FuKGxydXZlYywgc2MsIG1lbWNnLCBzd2FwcGluZXNzKTtcXG40OTcwOlxcdFxcdHdoaWxlIChucl90b19zY2FuIFxcdTAwM2UgMCkge1xcbjQ5NzE6XFx0XFx0XFx0aW50IGRlbHRhO1xcbjQ5NzI6XFx0XFx0XFx0REVGSU5FX01BWF9TRVEobHJ1dmVjKTtcXG40OTczOlxcdFxcbjQ5NzQ6XFx0XFx0XFx0aWYgKG1lbV9jZ3JvdXBfYmVsb3dfbWluKHNjLVxcdTAwM2V0YXJnZXRfbWVtX2Nncm91cCwgbWVtY2cpKSB7XFxuNDk3NTpcXHRcXHRcXHRcXHRuZWVkX3JvdGF0ZSA9IHRydWU7XFxuNDk3NjpcXHRcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzQ6MzcuNDA3OTA5Nzk1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDg0NTEwMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgZm9ybWF0dGVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgTUdMUlUgQ29kZWJhc2UqKlxuXG5IbW0sIHNvIGBzaG91bGRfYWJvcnRfc2NhbmAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYm90aCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgc2hyaW5rX21hbnlgLiBSaWdodCwgdGhvc2UgZnVuY3Rpb25zIHNvdW5kIGZhbWlsaWFyLCBsaWtlIHRoZXkgYmVsb25nIHRvIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgaW1wbGVtZW50YXRpb24uIFdhaXQgYSBzZWNvbmQuLi4gYXJlIHRob3NlIE1HTFJVIGZ1bmN0aW9ucz8gSSBzaG91bGQgcHJvYmFibHkgY29uZmlybSB0aGF0LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgaWYgdGhvc2UgZnVuY3Rpb25zIGFyZSBjb25kaXRpb25hbGl6ZWQgdW5kZXIgYENPTkZJR19MUlVfR0VOYC4gSSBuZWVkIHRvIGVuc3VyZSBJJ20gY29ycmVjdGx5IGlkZW50aWZ5aW5nIHRoZSBzY29wZSBvZiB0aGlzIHBhcnRpY3VsYXIgY29kZSBzZWdtZW50IHdpdGhpbiB0aGUgYnJvYWRlciBNR0xSVSBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTIxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwODozNDo0MC44MTYzNjM4MzRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MTU1ODg5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fc2hyaW5rX2xydXZlY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz00OTI3PXN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00OTYxLSAqL1xcbm1tL3Ztc2Nhbi5jOjQ5NjI6c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy00OTYzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwMDc9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MDI2LVxcbm1tL3Ztc2Nhbi5jOjUwMjc6XFx0bmVlZF9yb3RhdGUgPSB0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcXG5tbS92bXNjYW4uYy01MDI4LVxcbi0tXFxubW0vdm1zY2FuLmM9NTExOD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxMzAtXFxubW0vdm1zY2FuLmM6NTEzMTpcXHRpZiAodHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYykpXFxubW0vdm1zY2FuLmMtNTEzMi1cXHRcXHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9ZT1VORyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjM0OjQxLjE2NzkzMTA0OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDczOTQ1NDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYHNob3VsZF9hYm9ydF9zY2FuYCBEZXBlbmRlbmN5IG9uIGBDT05GSUdfTFJVX0dFTmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB2ZXJpZnkgYSBwb3RlbnRpYWwgZGVwZW5kZW5jeS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZSBjb21waWxhdGlvbiBhbmQgc3Vic2VxdWVudCBmdW5jdGlvbmFsaXR5IG9mIGBzaG91bGRfYWJvcnRfc2NhbmAgcmVsaWVzIG9uIHRoZSBwcmVzZW5jZSBhbmQgY29uZmlndXJhdGlvbiBvZiBgQ09ORklHX0xSVV9HRU5gLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGRlYnVnZ2luZyBzdGVwOyBJIG9mdGVuIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGNhbGxzIGFuZCBjb25maWd1cmF0aW9ucy5cblxuSWYgaXQgKmRvZXMqIGRlcGVuZCBvbiBpdCwgaXQgaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgaG93IHdlIG5lZWQgdG8gaGFuZGxlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBNYXliZSB0aGlzIHJlbGF0aW9uc2hpcCBpcyBvYnZpb3VzLCBidXQgSSd2ZSBsZWFybmVkIHRoYXQgYXNzdW1wdGlvbnMgYXJlIHRoZSBiYW5lIG9mIGVmZmljaWVudCBkZWJ1Z2dpbmcsIGFuZCB0aHVzLCBJIG11c3Qgc3RhcnQgZnJvbSBmaXJzdCBwcmluY2lwbGVzLlxuXG5NeSBtZW50YWwgY2hlY2tsaXN0IHN0YXJ0cyB3aXRoIHNvdXJjZSBjb2RlIHJldmlldyBhbmQgY2hlY2tpbmcgaWYgdGhlIGNvbXBpbGF0aW9uIHBhdGggZGVwZW5kcyBvbiBgQ09ORklHX0xSVV9HRU5gLiBUaGVuLCBJJ2xsIHRlc3QgdGhlIHNjZW5hcmlvcywgaWYgcmVsZXZhbnQsIGFuZCBlbnN1cmUgdGhhdCBpZiB0aGlzIGZsYWcgaXMgZGlzYWJsZWQsIHRoZSBzeXN0ZW0gc3RpbGwgZnVuY3Rpb25zIGFzIGV4cGVjdGVkIG9yIGdyYWNlZnVsbHkgZmFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTM3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzQ6NDQuMjQxODc4NzIyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTA5NTM5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz04MjQ9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgzMC1cXG5tbS92bXNjYW4uYzo4MzE6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmMtODMyLS8qXFxuLS1cXG5tbS92bXNjYW4uYz04NTQ9c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vdm1zY2FuLmMtODU3LX1cXG5tbS92bXNjYW4uYzo4NTg6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtODU5LVxcbi0tXFxubW0vdm1zY2FuLmM9MjYxMz1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtMjYyNC1cXG5tbS92bXNjYW4uYzoyNjI1OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTI2MjYtXFxubW0vdm1zY2FuLmM9MjYyNz1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcXG5tbS92bXNjYW4uYzoyNjI4OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXFxubW0vdm1zY2FuLmMtMjYyOS1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI4MDk9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXFxuLS1cXG5tbS92bXNjYW4uYy0yODI4LVxcbm1tL3Ztc2Nhbi5jOjI4Mjk6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxcbm1tL3Ztc2Nhbi5jLTI4MzAtXFxuLS1cXG5tbS92bXNjYW4uYz0yOTM4PXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMjk2Ni1cXG5tbS92bXNjYW4uYzoyOTY3OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cXG5tbS92bXNjYW4uYy0yOTY4LVxcbi0tXFxubW0vdm1zY2FuLmM9NTg1OD1sYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XFxubW0vdm1zY2FuLmMtNTg1OS1cXG5tbS92bXNjYW4uYzo1ODYwOiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTU4NjEtXFxuLS1cXG5tbS92bXNjYW4uYz01ODcyPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01ODc2LVxcbm1tL3Ztc2Nhbi5jOjU4Nzc6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtNTg3OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzQ6NDQuMzEyOTc5Nzk2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNDYwNjM2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWNsYWltIENvZGUqKlxuXG5Pa2F5LCBzbyBgc2hvdWxkX2Fib3J0X3NjYW5gIGlzIGRlZmluaXRlbHkgbmVzdGxlZCB3aXRoaW4gdGhlIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gIGJsb2NrLCB3aGljaCBtZWFucyB0aGF0IGBDT05GSUdfTFJVX0dFTmAgaXMgZXNzZW50aWFsLiBXZSdyZSB0YWxraW5nIGFib3V0IGxpbmUgNTg2MC4gSSBhbHNvIG5lZWQgYENPTkZJR19NRU1DR2AgaWYgSSB3YW50IHRvIHBsYXkgd2l0aCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgdXNpbmcgY2dyb3VwIHYyLiBCdXQgd2FpdCwgdGhlcmUncyBhbm90aGVyIHBhdGghIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBjYW4gYWxzbyBiZSBhY2Nlc3NlZCB0aHJvdWdoIGAvc3lzL2RldmljZXMvc3lzdGVtL25vZGUvbm9kZSovcmVjbGFpbWAsIGFuZCB0aGF0IHJvdXRlIHJlcXVpcmVzIGJvdGggYENPTkZJR19OVU1BYCBhbmQgYENPTkZJR19TWVNGU2AuIFNvIHllcywgYENPTkZJR19MUlVfR0VOYCBpcyBkZWZpbml0ZWx5IG5lZWRlZCBoZXJlLiBMZXQncyBtYWtlIHN1cmUgaXQncyBlbmFibGVkIGJ5IGRlZmF1bHQsIG9yIHdlJ2xsIG5lZWQgdG8gYWRkIGl0LiBZZXMsIGFkZGluZyBgTFJVX0dFTmAgbG9va3MgbGlrZSBhIHNvbGlkIG1vdmUuIEFuZCBgTUVNQ0dgIGlzIGdvb2QgdG8gZ28gYXMgd2VsbC5cblxuTGV0J3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgb24gdGhlc2UgY29uZmlnczpcblxuKiAgIGBMUlVfR0VOYFxuKiAgIGBNRU1DR2BcblxuTm93IGZvciB0aGUga2V5IHN5bWJvbHM6IEkndmUgZ290IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgYG1lbW9yeV9yZWNsYWltYCwgYHJlY2xhaW1fc3RvcmVgLCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLCBgc2hyaW5rX21hbnlgLCBhbmQgb2YgY291cnNlIGBzaG91bGRfYWJvcnRfc2NhbmAgd2hpY2ggbmVlZHMgdG8gYmUgbm9uLWlubGluZWQuIEkgdGhpbmsgaXQgaXMgc3RhdGljLCBzbyB3ZSBjYW4gbGlzdCBpdC4gU3l6a2FsbGVyIHdpbGwgaWdub3JlIGl0IGlmIGl0IGlzIGlubGluZWQgYW55d2F5LlxuXG5BY3R1YWxseSwgc2NyYXRjaCB0aGF0IOKAkyBgc2hvdWxkX2Fib3J0X3NjYW5gIGlzICptb2RpZmllZCosIG1lYW5pbmcgaXQncyB0aGUgcHJpbWFyeSBzeW1ib2wgb2YgY29uY2Vybi4gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50LCBhbmQgYG1lbW9yeV9yZWNsYWltYCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGNncm91cCB2Mi4gTm93IEkgbmVlZCB0byBjaGVjayBpZiBgbWVtb3J5X3JlY2xhaW1gIGlzIHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0OTQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzQ6NTAuMzU5MDQ2MTMxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzM0MTk0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1vcnlfcmVjbGFpbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTQ5Njc9c3RhdGljIHNzaXplX3QgbWVtb3J5X29vbV9ncm91cF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDk4OC1cXG5tbS9tZW1jb250cm9sLmM6NDk4OTpzdGF0aWMgc3NpemVfdCBtZW1vcnlfcmVjbGFpbShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG5tbS9tZW1jb250cm9sLmMtNDk5MC1cXHRcXHRcXHQgICAgICBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUwMDI9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTA3MC1cXHRcXHQuZmxhZ3MgPSBDRlRZUEVfTlNfREVMRUdBVEFCTEUsXFxubW0vbWVtY29udHJvbC5jOjUwNzE6XFx0XFx0LndyaXRlID0gbWVtb3J5X3JlY2xhaW0sXFxubW0vbWVtY29udHJvbC5jLTUwNzItXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzQ6NTAuNDMyNDE3Nzg2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NjQzMzg5MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkFzc2Vzc2luZyB0aGUgQ29kZSdzIFN0YXRpYyBOYXR1cmUqKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IGlzOiBcIlllcywgaXQncyBzdGF0aWMuXCIgU28sIHRoZSBmaXJzdCB0aGluZyBJJ20gZ29pbmcgdG8gZG8gaXMgY29uZmlybSBteSBhc3N1bXB0aW9uIGFib3V0IGByZWNsYWltX3N0b3JlYC4gSXMgdGhpcyBmdW5jdGlvbiwgdGhpcyBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLCBhbHNvIGRlZmluZWQgYXMgc3RhdGljPyBVbmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHN0cnVjdHVyZWQgaXMgZnVuZGFtZW50YWwgdG8gdGhlIGxhcmdlciBwcm9ibGVtLiBJIG5lZWQgdG8ga25vdyBpZiBpdCdzIHN1YmplY3QgdG8gdGhlIHNhbWUgc2NvcGUgYW5kIGxpZmV0aW1lIGNvbnN0cmFpbnRzLCBvciBpZiB0aGVyZSdzIHNvbWV0aGluZyBlbHNlIGF0IHBsYXkgdGhhdCBtaWdodCBpbXBhY3QgaXRzIGJlaGF2aW9yLiBUaW1lIHRvIGRlbHZlIGEgYml0IGRlZXBlciBhbmQgY29uZmlybSB3aGF0IEknbSBkZWFsaW5nIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTA4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzQ6NTQuODk2NzU4OTgxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDQ2MjU4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWNsYWltX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTgwMDk9RVhQT1JUX1NZTUJPTF9HUEwoY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3MpO1xcbi0tXFxubW0vdm1zY2FuLmMtODAxMS0jaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX05VTUEpXFxubW0vdm1zY2FuLmM6ODAxMjpzdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5tbS92bXNjYW4uYy04MDEzLVxcdFxcdFxcdCAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjM0OjU0Ljk1NzIzMTQ3NloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDU0MjM0NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3RhdGljIE1lbW9yeSBSZWNsYW1hdGlvbiBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBtZW1vcnkgcmVjbGFtYXRpb24gcHJvY2VzcyBhbmQgaXQncyBkZWZpbml0ZWx5IHN0YXRpYyBpbiBuYXR1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBmb2N1cyBzeW1ib2xzIHdpdGhpbiB0aGlzIHByb2Nlc3MuIEkgbmVlZCB0byBrZWVwIHRoZSB1c2VyJ3MgcHJvYWN0aXZlIHJlY2xhaW0gYXR0ZW1wdHMgaW4gbWluZCwgc28gSSdtIGxvZ2dpbmcgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLiBUaGVuLCBpdCdzIGFib3V0IHRoZSBnZW5lcmFsIG1lbW9yeSByZWNsYW1hdGlvbiwgc28gYG1lbW9yeV9yZWNsYWltYCBpcyBpbXBvcnRhbnQuIEFsc28sIHRoZSByZWNsYW1hdGlvbiBzdG9yZSBpdHNlbGYsIGByZWNsYWltX3N0b3JlYCBpcyByZWxldmFudC4gSSBuZWVkIHRvIGNvbnNpZGVyIG9wdGlvbnMgdG8gc2hyaW5rIGxydXZlYywgdGhlcmVmb3JlLCBsb2dnaW5nIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AuIFRoZXJlIGlzIGFsc28gdGhlIHNocmluayBtYW55IGZ1bmN0aW9uLCBgc2hyaW5rX21hbnlgLCBhbmQgYWxzbyBhIGNvbnNpZGVyYXRpb24gb2Ygd2hldGhlciB3ZSBzaG91bGQgYWJvcnQgdGhlIHNjYW4gcHJvY2Vzcywgd2hpY2ggSSdsbCB0cmFjayB3aXRoIGBzaG91bGRfYWJvcnRfc2NhbmAuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGRlZXBlciwgSSBuZWVkIHRvIGNvbnNpZGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGlzLiBXZSd2ZSBnb3QgYExSVV9HRU5gLCBgTUVNQ0dgLCBhbmQgYE5VTUFgIGFzIHBvc3NpYmlsaXRpZXMuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgYExSVV9HRU5gIGlzIHRoZSBwcmVjaXNlIGFuZCBjb3JyZWN0IG5hbWUgb2YgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIGF2b2lkIG1ha2luZyBhbnkgYXNzdW1wdGlvbnMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4MjcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6MzQ6NTkuMDExNDY4Njc2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODMyMzgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTQwNj1lbmRpZiAjIFVTRVJGQVVMVEZEXFxuLS1cXG5tbS9LY29uZmlnLTE0MDgtIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjE0MDk6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MTAtXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxNy1cXG5tbS9LY29uZmlnOjE0MTg6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQxOS1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQyMy1cXG5tbS9LY29uZmlnOjE0MjQ6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MjUtXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDMyLVxcbm1tL0tjb25maWc6MTQzMzpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MzQtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwODozNDo1OS4wNjk3OTg3NjFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI3MDA5NDE4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25maXJtaW5nIHRoZSBMUlVfR0VOIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIHBpbm5lZCBkb3duIHRoYXQgYExSVV9HRU5gIGlzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuIEFuZCwganVzdCB0byBiZSB0aG9yb3VnaCwgSSdtIHRoaW5raW5nIHdlIG1pZ2h0IGFsc28gbmVlZCB0byBjb25zaWRlciBgTFJVX0dFTl9FTkFCTEVEYCBhcyBhIHBvdGVudGlhbCB3YXkgdG8gaGF2ZSBpdCB0dXJuZWQgb24gYnkgZGVmYXVsdCwgb3IgbWF5YmUgY29udHJvbGxlZCB2aWEgc3lzZnMgbGF0ZXIuIEJ1dCwgZnJvbSBhIGNvbXBpbGF0aW9uIHBlcnNwZWN0aXZlLCBgTFJVX0dFTmAgaXMgdGhlIG9uZSB0aGF0IHJlYWxseSBtYXR0ZXJzIHRvIGdldCB0aGUgY29kZSBpbmNsdWRlZC5cblxuUmlnaHQsIHNvIEkgYWxzbyBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBzaG91bGRfYWJvcnRfc2NhbmAgaXMgKm9ubHkqIGNvbXBpbGVkIGlmIGBDT05GSUdfTFJVX0dFTmAgaXMgYWN0aXZlLiBZZXMsIHRoYXQncyBpdCAtIGl0J3Mgd2l0aGluIGFuIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gIGJsb2NrLiBUaGlzIHNvbGlkaWZpZXMgbXkgdW5kZXJzdGFuZGluZyB0aGF0IGBMUlVfR0VOYCBpcyBhYnNvbHV0ZWx5IHJlcXVpcmVkIGZvciB0aGF0IGZ1bmN0aW9uIHRvIGV2ZW4gZXhpc3QgaW4gdGhlIGNvbXBpbGVkIGNvZGUuXG5cbk5vdywgbGV0J3MganVzdCBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRvIHNlZSBpZiBgc2hvdWxkX2Fib3J0X3NjYW5gIGlzIGNhbGxlZCBhbnl3aGVyZSB3aGVuIGBMUlVfR0VOYCBpcyBkaXNhYmxlZCwganVzdCB0byBiZSBjZXJ0YWluIHRoZXJlJ3Mgbm8gc3VidGxlIGRlcGVuZGVuY3kuIE5vcGUsIGl0J3MgYWxsIHdyYXBwZWQgdXAgc2FmZWx5IGluc2lkZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uXG5cbklzIHRoZXJlIGFueSBvdGhlciBsb2NhdGlvbiB0aGF0IG1pZ2h0IGRlZmluZSB0aGlzLCBvciBpcyB0aGlzIGl0P1xuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ0NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwODozNTowMy4zMzk4OTU1MDRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MTA4ODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNob3VsZF9hYm9ydF9zY2FuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz00OTEwPXN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy00OTI2LVxcbm1tL3Ztc2Nhbi5jOjQ5Mjc6c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy00OTI4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ5NjI9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5ODktXFxubW0vdm1zY2FuLmM6NDk5MDpcXHRcXHRpZiAoc2hvdWxkX2Fib3J0X3NjYW4obHJ1dmVjLCBzYykpXFxubW0vdm1zY2FuLmMtNDk5MS1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwNDg9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MDkzLVxcbm1tL3Ztc2Nhbi5jOjUwOTQ6XFx0XFx0aWYgKHNob3VsZF9hYm9ydF9zY2FuKGxydXZlYywgc2MpKVxcbm1tL3Ztc2Nhbi5jLTUwOTUtXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjM1OjAzLjQwNDAxMTQ0OVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjYyMzA4NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoIGluIGBtbS92bXNjYW4uY2AgKENPTkZJR19MUlVfR0VOKSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IHRhcmdldGVkIHdpdGhpbiBgbW0vdm1zY2FuLmNgIGFuZCBpcyBvbmx5IHJlbGV2YW50IGlmIGBDT05GSUdfTFJVX0dFTmAgaXMgZW5hYmxlZCwgd2hpY2ggaXMgYSBrZXkgc3RhcnRpbmcgcG9pbnQuIEZyb20gd2hhdCBJJ20gc2VlaW5nLCB0aGlzIGlzIGZ1bmN0aW9uYWwgY29kZSwgYW5kIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUuIENyaXRpY2FsbHksIGl0IGFwcGVhcnMgdG8gYWRkcmVzcyBhIG5hc3R5IGlzc3VlOiBwcm9hY3RpdmUgcmVjbGFpbSBwb3RlbnRpYWxseSBoYW5naW5nIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgYmVjb21pbmcgdW5yZXNwb25zaXZlIHRvIHNpZ25hbHMsIHdoaWNoIHdvdWxkIGJlIGEgcmVhbCBwcm9ibGVtIGluIGEgaGlnaC1sb2FkIGVudmlyb25tZW50LiBUaGlzIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBnaXZlbiB0aGUgcG90ZW50aWFsIHNldmVyaXR5IG9mIGEgaGFuZy5cblxuTXkgYW5hbHlzaXMgdGVsbHMgbWUgdGhlIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb25zIGFyZSBgTFJVX0dFTmAgYW5kIGBNRU1DR2AuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHNwZWNpZmljIHN5bWJvbHMgaGVyZS4gU3BlY2lmaWNhbGx5IEknbSBnb2luZyB0byBsb29rIGF0IGBzaG91bGRfYWJvcnRfc2NhbmAsIGFzIHRoYXQncyB0aGUgaGVhcnQgb2YgdGhlIGNoYW5nZS4gSXQncyByZWxhdGVkIHRvIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AsIGBzaHJpbmtfbWFueWAsIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgYG1lbW9yeV9yZWNsYWltYCBhbmQgYHJlY2xhaW1fc3RvcmVgLlxuXG5UaGUgcGF0Y2gncyBpbXBhY3QgaXMgdGhhdCBpdCBtb2RpZmllcyBgc2hvdWxkX2Fib3J0X3NjYW5gIHdpdGhpbiB0aGUgTUdMUlUgaW1wbGVtZW50YXRpb24uIFRoZSB1cGRhdGUgZW5zdXJlcyB0aGF0IHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSBpcyBhYm9ydGVkIGlmIGEgc2lnbmFsIGlzIHBlbmRpbmcuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBwcmV2ZW50aW5nIHByb2FjdGl2ZSByZWNsYWltIGZyb20gZ2V0dGluZyBzdHVjayBpbmRlZmluaXRlbHkuIEl0J3MgcmVhY2hhYmxlIHZpYSBjZ3JvdXAgdjIncyBgbWVtb3J5LnJlY2xhaW1gIGludGVyZmFjZSBvciB0aGUgc3lzZnMgbm9kZSByZWNsYWltIG1ldGhvZC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBpbXByb3ZlbWVudCBpbiBzaWduYWwgaGFuZGxpbmcgd2l0aGluIG1lbW9yeSByZWNsYWltLlxuXG5JJ20gdGhpbmtpbmcgdGhpcyBwYXRjaCBpcyBzb2xpZC4gSXQncyB0aW1lIHRvIHRlc3QsIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMDgsIk91dHB1dFRva2VucyI6MTY5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjM1OjEwLjA2NjMyMjg1M1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MTc5MjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNob3VsZF9hYm9ydF9zY2FuXCIsXG4gICAgXCJ0cnlfdG9fc2hyaW5rX2xydXZlY1wiLFxuICAgIFwic2hyaW5rX21hbnlcIixcbiAgICBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgICBcIm1lbW9yeV9yZWNsYWltXCIsXG4gICAgXCJyZWNsYWltX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHNob3VsZF9hYm9ydF9zY2FuYCBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGNvZGUgdG8gYWJvcnQgcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIGlmIGEgc2lnbmFsIGlzIHBlbmRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBwcmV2ZW50cyBwcm9hY3RpdmUgcmVjbGFpbSBmcm9tIGhhbmdpbmcgaW5kZWZpbml0ZWx5IHdoZW4gaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwuIEl0IGlzIHJlYWNoYWJsZSB2aWEgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAgb3Igc3lzZnMgbm9kZSByZWNsYWltLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2hvdWxkX2Fib3J0X3NjYW5cIixcbiAgICBcInRyeV90b19zaHJpbmtfbHJ1dmVjXCIsXG4gICAgXCJzaHJpbmtfbWFueVwiLFxuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICAgIFwibWVtb3J5X3JlY2xhaW1cIixcbiAgICBcInJlY2xhaW1fc3RvcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgc2hvdWxkX2Fib3J0X3NjYW5gIGluIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgY29kZSB0byBhYm9ydCBwcm9hY3RpdmUgbWVtb3J5IHJlY2xhaW0gaWYgYSBzaWduYWwgaXMgcGVuZGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IHByZXZlbnRzIHByb2FjdGl2ZSByZWNsYWltIGZyb20gaGFuZ2luZyBpbmRlZmluaXRlbHkgd2hlbiBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbC4gSXQgaXMgcmVhY2hhYmxlIHZpYSBjZ3JvdXAgdjIgYG1lbW9yeS5yZWNsYWltYCBvciBzeXNmcyBub2RlIHJlY2xhaW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowr8bs6[1] Phase: Succeeded StartedAt: 2026-07-06 08:35:21 +0000 UTC FinishedAt: 2026-07-06 08:35:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8bs6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-06 08:35:21 +0000 UTC FinishedAt: 2026-07-06 08:35:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8bs6[2] Phase: Succeeded StartedAt: 2026-07-06 08:35:21 +0000 UTC FinishedAt: 2026-07-06 12:49:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-06 08:35:21 +0000 UTC FinishedAt: 2026-07-06 12:49:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-06 08:35:21 +0000 UTC FinishedAt: 2026-07-06 08:35:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-06 08:35:21 +0000 UTC FinishedAt: 2026-07-06 08:35:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowr8bs6/series-workflowr8bs6-convert-artifact-2663696238/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-06 08:35:42 +0000 UTC FinishedAt: 2026-07-06 09:03:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-06 08:35:42 +0000 UTC FinishedAt: 2026-07-06 09:03:14 +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:*dc575780-b25a-4b8e-9d84-b856406ae9bb,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-workflowr8bs6/series-workflowr8bs6-convert-artifact-2663696238/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": "eb2467ba-dcd1-49c7-8d6c-8e9cfb7db53e", "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-workflowr8bs6/series-workflowr8bs6-build-action-520425172/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-06 08:35:42 +0000 UTC FinishedAt: 2026-07-06 09:03:04 +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:*dc575780-b25a-4b8e-9d84-b856406ae9bb,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-workflowr8bs6/series-workflowr8bs6-convert-artifact-2663696238/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": "eb2467ba-dcd1-49c7-8d6c-8e9cfb7db53e", "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-workflowr8bs6/series-workflowr8bs6-build-action-520425172/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-06 09:03:14 +0000 UTC FinishedAt: 2026-07-06 09:03:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-06 09:03:14 +0000 UTC FinishedAt: 2026-07-06 09:03:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-06 09:03:14 +0000 UTC FinishedAt: 2026-07-06 09:03:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-06 09:03:14 +0000 UTC FinishedAt: 2026-07-06 09:03:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowr8bs6/series-workflowr8bs6-convert-artifact-3784731745/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-06 09:03:35 +0000 UTC FinishedAt: 2026-07-06 09:05:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-06 09:03:35 +0000 UTC FinishedAt: 2026-07-06 09:05:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*eb2467ba-dcd1-49c7-8d6c-8e9cfb7db53e,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-workflowr8bs6/series-workflowr8bs6-build-action-520425172/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-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-06 09:05:37 +0000 UTC FinishedAt: 2026-07-06 09:05:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-06 09:05:37 +0000 UTC FinishedAt: 2026-07-06 09:05:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-06 09:05:37 +0000 UTC FinishedAt: 2026-07-06 09:43:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-06 09:05:37 +0000 UTC FinishedAt: 2026-07-06 09:43:52 +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:*dc575780-b25a-4b8e-9d84-b856406ae9bb,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-workflowr8bs6/series-workflowr8bs6-convert-artifact-3784731745/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": "1199cd38-632a-4a76-978e-c284177808b5", "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-workflowr8bs6/series-workflowr8bs6-build-action-40758637/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-06 09:05:37 +0000 UTC FinishedAt: 2026-07-06 09:43:42 +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:*dc575780-b25a-4b8e-9d84-b856406ae9bb,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-workflowr8bs6/series-workflowr8bs6-convert-artifact-3784731745/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": "1199cd38-632a-4a76-978e-c284177808b5", "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-workflowr8bs6/series-workflowr8bs6-build-action-40758637/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-06 09:43:52 +0000 UTC FinishedAt: 2026-07-06 09:43:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-06 09:43:52 +0000 UTC FinishedAt: 2026-07-06 09:43:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-06 09:43:52 +0000 UTC FinishedAt: 2026-07-06 09:45:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-06 09:43:52 +0000 UTC FinishedAt: 2026-07-06 09:45:44 +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:*1199cd38-632a-4a76-978e-c284177808b5,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-workflowr8bs6/series-workflowr8bs6-build-action-40758637/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-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-06 09:45:55 +0000 UTC FinishedAt: 2026-07-06 12:49:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-06 09:45:55 +0000 UTC FinishedAt: 2026-07-06 12:49:08 +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":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},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:*eb2467ba-dcd1-49c7-8d6c-8e9cfb7db53e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1199cd38-632a-4a76-978e-c284177808b5,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-workflowr8bs6/series-workflowr8bs6-build-action-520425172/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-workflowr8bs6/series-workflowr8bs6-build-action-40758637/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-06 09:45:55 +0000 UTC FinishedAt: 2026-07-06 09:46:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-06 09:45:55 +0000 UTC FinishedAt: 2026-07-06 09:46:07 +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":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},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-workflowr8bs6/series-workflowr8bs6-convert-artifact-1339063798/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-06 09:45:55 +0000 UTC FinishedAt: 2026-07-06 09:45:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-06 09:45:55 +0000 UTC FinishedAt: 2026-07-06 09:45:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-06 09:45:55 +0000 UTC FinishedAt: 2026-07-06 09:45:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-06 09:46:17 +0000 UTC FinishedAt: 2026-07-06 12:49:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr8bs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","memory_reclaim","reclaim_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c6b0b9701fcef71ed7cabc0358bb18e15e8e8329","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","MEMCG"],"series_id":"96595318-8fe9-46fb-b7f7-84524bdb1e71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-06 09:46:17 +0000 UTC FinishedAt: 2026-07-06 12:48:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*eb2467ba-dcd1-49c7-8d6c-8e9cfb7db53e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1199cd38-632a-4a76-978e-c284177808b5,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-workflowr8bs6/series-workflowr8bs6-build-action-520425172/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-workflowr8bs6/series-workflowr8bs6-build-action-40758637/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-workflowr8bs6/series-workflowr8bs6-convert-artifact-1339063798/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,}